From 400ee8e737d23cd34e60941a46a9cc9d99d2766c Mon Sep 17 00:00:00 2001 From: tobspr Date: Mon, 18 Jul 2022 14:18:02 +0200 Subject: [PATCH] Support for GOG --- electron_gog/favicon.icns | Bin 0 -> 49662 bytes electron_gog/favicon.ico | Bin 0 -> 107698 bytes electron_gog/favicon.png | Bin 0 -> 21546 bytes electron_gog/index.js | 381 ++++++++++++++++++++ electron_gog/package.json | 17 + electron_gog/preload.js | 7 + electron_gog/yarn.lock | 580 ++++++++++++++++++++++++++++++ gulp/build_variants.js | 10 +- gulp/webpack.config.js | 2 + gulp/webpack.production.config.js | 2 + src/js/globals.d.ts | 1 + src/js/states/main_menu.js | 13 +- 12 files changed, 1008 insertions(+), 5 deletions(-) create mode 100644 electron_gog/favicon.icns create mode 100644 electron_gog/favicon.ico create mode 100644 electron_gog/favicon.png create mode 100644 electron_gog/index.js create mode 100644 electron_gog/package.json create mode 100644 electron_gog/preload.js create mode 100644 electron_gog/yarn.lock diff --git a/electron_gog/favicon.icns b/electron_gog/favicon.icns new file mode 100644 index 0000000000000000000000000000000000000000..79e141a585b947fcc3f7afb4fb36b49acc9aac68 GIT binary patch literal 49662 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

5m! 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 O`rOmi&t;ucLK6UB%j$vv literal 0 HcmV?d00001 diff --git a/electron_gog/index.js b/electron_gog/index.js new file mode 100644 index 00000000..563f187d --- /dev/null +++ b/electron_gog/index.js @@ -0,0 +1,381 @@ +/* eslint-disable quotes,no-undef */ + +const { app, BrowserWindow, Menu, MenuItem, ipcMain, shell, dialog, session } = require("electron"); +const path = require("path"); +const url = require("url"); +const fs = require("fs"); +const asyncLock = require("async-lock"); +const windowStateKeeper = require("electron-window-state"); + +// Disable hardware key handling, i.e. being able to pause/resume the game music +// with hardware keys +app.commandLine.appendSwitch("disable-features", "HardwareMediaKeyHandling"); + +const isDev = app.commandLine.hasSwitch("dev"); +const isLocal = app.commandLine.hasSwitch("local"); +const safeMode = app.commandLine.hasSwitch("safe-mode"); +const externalMod = app.commandLine.getSwitchValue("load-mod"); + +const roamingFolder = + process.env.APPDATA || + (process.platform == "darwin" + ? process.env.HOME + "/Library/Preferences" + : process.env.HOME + "/.local/share"); + +let storePath = path.join(roamingFolder, "shapez.io", "saves"); +let modsPath = path.join(roamingFolder, "shapez.io", "mods"); + +if (!fs.existsSync(storePath)) { + // No try-catch by design + fs.mkdirSync(storePath, { recursive: true }); +} + +if (!fs.existsSync(modsPath)) { + fs.mkdirSync(modsPath, { recursive: true }); +} + +/** @type {BrowserWindow} */ +let win = null; +let menu = null; + +function createWindow() { + let faviconExtension = ".png"; + if (process.platform === "win32") { + faviconExtension = ".ico"; + } + + const mainWindowState = windowStateKeeper({ + defaultWidth: 1000, + defaultHeight: 800, + }); + + win = new BrowserWindow({ + x: mainWindowState.x, + y: mainWindowState.y, + width: mainWindowState.width, + height: mainWindowState.height, + show: false, + backgroundColor: "#222428", + useContentSize: false, + minWidth: 800, + minHeight: 600, + title: "shapez", + transparent: false, + icon: path.join(__dirname, "favicon" + faviconExtension), + // fullscreen: true, + autoHideMenuBar: !isDev, + webPreferences: { + nodeIntegration: false, + nodeIntegrationInWorker: false, + nodeIntegrationInSubFrames: false, + contextIsolation: true, + enableRemoteModule: false, + disableBlinkFeatures: "Auxclick", + + webSecurity: true, + sandbox: true, + preload: path.join(__dirname, "preload.js"), + experimentalFeatures: false, + }, + allowRunningInsecureContent: false, + }); + + mainWindowState.manage(win); + + if (isLocal) { + win.loadURL("http://localhost:3005"); + } else { + win.loadURL( + url.format({ + pathname: path.join(__dirname, "index.html"), + protocol: "file:", + slashes: true, + }) + ); + } + win.webContents.session.clearCache(); + win.webContents.session.clearStorageData(); + + ////// SECURITY + + // Disable permission requests + win.webContents.session.setPermissionRequestHandler((webContents, permission, callback) => { + callback(false); + }); + session.fromPartition("default").setPermissionRequestHandler((webContents, permission, callback) => { + callback(false); + }); + + app.on("web-contents-created", (event, contents) => { + // Disable vewbiew + contents.on("will-attach-webview", (event, webPreferences, params) => { + event.preventDefault(); + }); + // Disable navigation + contents.on("will-navigate", (event, navigationUrl) => { + event.preventDefault(); + }); + }); + + win.webContents.on("will-redirect", (contentsEvent, navigationUrl) => { + // Log and prevent the app from redirecting to a new page + console.error( + `The application tried to redirect to the following address: '${navigationUrl}'. This attempt was blocked.` + ); + contentsEvent.preventDefault(); + }); + + // Filter loading any module via remote; + // you shouldn't be using remote at all, though + // https://electronjs.org/docs/tutorial/security#16-filter-the-remote-module + app.on("remote-require", (event, webContents, moduleName) => { + event.preventDefault(); + }); + + // built-ins are modules such as "app" + app.on("remote-get-builtin", (event, webContents, moduleName) => { + event.preventDefault(); + }); + + app.on("remote-get-global", (event, webContents, globalName) => { + event.preventDefault(); + }); + + app.on("remote-get-current-window", (event, webContents) => { + event.preventDefault(); + }); + + app.on("remote-get-current-web-contents", (event, webContents) => { + event.preventDefault(); + }); + + //// END SECURITY + + win.webContents.on("new-window", (event, pth) => { + event.preventDefault(); + + if (pth.startsWith("https://")) { + shell.openExternal(pth); + } + }); + + win.on("closed", () => { + console.log("Window closed"); + win = null; + }); + + if (isDev) { + menu = new Menu(); + + win.webContents.toggleDevTools(); + + const mainItem = new MenuItem({ + label: "Toggle Dev Tools", + click: () => win.webContents.toggleDevTools(), + accelerator: "F12", + }); + menu.append(mainItem); + + const reloadItem = new MenuItem({ + label: "Reload", + click: () => win.reload(), + accelerator: "F5", + }); + menu.append(reloadItem); + + const fullscreenItem = new MenuItem({ + label: "Fullscreen", + click: () => win.setFullScreen(!win.isFullScreen()), + accelerator: "F11", + }); + menu.append(fullscreenItem); + + const mainMenu = new Menu(); + mainMenu.append( + new MenuItem({ + label: "shapez.io", + submenu: menu, + }) + ); + + Menu.setApplicationMenu(mainMenu); + } else { + Menu.setApplicationMenu(null); + } + + win.once("ready-to-show", () => { + win.show(); + win.focus(); + }); +} + +if (!app.requestSingleInstanceLock()) { + app.exit(0); +} else { + app.on("second-instance", () => { + // Someone tried to run a second instance, we should focus + if (win) { + if (win.isMinimized()) { + win.restore(); + } + win.focus(); + } + }); +} + +app.on("ready", createWindow); + +app.on("window-all-closed", () => { + console.log("All windows closed"); + app.quit(); +}); + +ipcMain.on("set-fullscreen", (event, flag) => { + win.setFullScreen(flag); +}); + +ipcMain.on("exit-app", () => { + win.close(); + app.quit(); +}); + +let renameCounter = 1; + +const fileLock = new asyncLock({ + timeout: 30000, + maxPending: 1000, +}); + +function niceFileName(filename) { + return filename.replace(storePath, "@"); +} + +async function writeFileSafe(filename, contents) { + ++renameCounter; + const prefix = "[ " + renameCounter + ":" + niceFileName(filename) + " ] "; + const transactionId = String(new Date().getTime()) + "." + renameCounter; + + if (fileLock.isBusy()) { + console.warn(prefix, "Concurrent write process on", filename); + } + + fileLock.acquire(filename, async () => { + console.log(prefix, "Starting write on", niceFileName(filename), "in transaction", transactionId); + + if (!fs.existsSync(filename)) { + // this one is easy + console.log(prefix, "Writing file instantly because it does not exist:", niceFileName(filename)); + await fs.promises.writeFile(filename, contents, "utf8"); + return; + } + + // first, write a temporary file (.tmp-XXX) + const tempName = filename + ".tmp-" + transactionId; + console.log(prefix, "Writing temporary file", niceFileName(tempName)); + await fs.promises.writeFile(tempName, contents, "utf8"); + + // now, rename the original file to (.backup-XXX) + const oldTemporaryName = filename + ".backup-" + transactionId; + console.log( + prefix, + "Renaming old file", + niceFileName(filename), + "to", + niceFileName(oldTemporaryName) + ); + await fs.promises.rename(filename, oldTemporaryName); + + // now, rename the temporary file (.tmp-XXX) to the target + console.log( + prefix, + "Renaming the temporary file", + niceFileName(tempName), + "to the original", + niceFileName(filename) + ); + await fs.promises.rename(tempName, filename); + + // we are done now, try to create a backup, but don't fail if the backup fails + try { + // check if there is an old backup file + const backupFileName = filename + ".backup"; + if (fs.existsSync(backupFileName)) { + console.log(prefix, "Deleting old backup file", niceFileName(backupFileName)); + // delete the old backup + await fs.promises.unlink(backupFileName); + } + + // rename the old file to the new backup file + console.log(prefix, "Moving", niceFileName(oldTemporaryName), "to the backup file location"); + await fs.promises.rename(oldTemporaryName, backupFileName); + } catch (ex) { + console.error(prefix, "Failed to switch backup files:", ex); + } + }); +} + +ipcMain.handle("fs-job", async (event, job) => { + const filenameSafe = job.filename.replace(/[^a-z\.\-_0-9]/gi, "_"); + const fname = path.join(storePath, filenameSafe); + switch (job.type) { + case "read": { + if (!fs.existsSync(fname)) { + // Special FILE_NOT_FOUND error code + return { error: "file_not_found" }; + } + return await fs.promises.readFile(fname, "utf8"); + } + case "write": { + await writeFileSafe(fname, job.contents); + return job.contents; + } + + case "delete": { + await fs.promises.unlink(fname); + return; + } + + default: + throw new Error("Unknown fs job: " + job.type); + } +}); + +ipcMain.handle("open-mods-folder", async () => { + shell.openPath(modsPath); +}); + +console.log("Loading mods ..."); + +function loadMods() { + if (safeMode) { + console.log("Safe Mode enabled for mods, skipping mod search"); + } + console.log("Loading mods from", modsPath); + let modFiles = safeMode + ? [] + : fs + .readdirSync(modsPath) + .filter(filename => filename.endsWith(".js")) + .map(filename => path.join(modsPath, filename)); + + if (externalMod) { + console.log("Adding external mod source:", externalMod); + const externalModPaths = externalMod.split(","); + modFiles = modFiles.concat(externalModPaths); + } + + return modFiles.map(filename => fs.readFileSync(filename, "utf8")); +} + +let mods = []; +try { + mods = loadMods(); + console.log("Loaded", mods.length, "mods"); +} catch (ex) { + console.error("Failed to load mods"); + dialog.showErrorBox("Failed to load mods:", ex); +} + +ipcMain.handle("get-mods", async () => { + return mods; +}); diff --git a/electron_gog/package.json b/electron_gog/package.json new file mode 100644 index 00000000..082055e4 --- /dev/null +++ b/electron_gog/package.json @@ -0,0 +1,17 @@ +{ + "name": "electron", + "version": "1.0.0", + "main": "index.js", + "license": "MIT", + "private": true, + "scripts": { + "startDev": "electron --disable-direct-composition --in-process-gpu . --dev --local", + "startDevGpu": "electron --enable-gpu-rasterization --enable-accelerated-2d-canvas --num-raster-threads=8 --enable-zero-copy . --dev --local", + "start": "electron --disable-direct-composition --in-process-gpu ." + }, + "dependencies": { + "async-lock": "^1.2.8", + "electron": "16.2.8", + "electron-window-state": "^5.0.3" + } +} diff --git a/electron_gog/preload.js b/electron_gog/preload.js new file mode 100644 index 00000000..c6336230 --- /dev/null +++ b/electron_gog/preload.js @@ -0,0 +1,7 @@ +const { contextBridge, ipcRenderer } = require("electron"); + +contextBridge.exposeInMainWorld("ipcRenderer", { + invoke: ipcRenderer.invoke.bind(ipcRenderer), + on: ipcRenderer.on.bind(ipcRenderer), + send: ipcRenderer.send.bind(ipcRenderer), +}); diff --git a/electron_gog/yarn.lock b/electron_gog/yarn.lock new file mode 100644 index 00000000..c9238b1f --- /dev/null +++ b/electron_gog/yarn.lock @@ -0,0 +1,580 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@electron/get@^1.13.0": + version "1.13.1" + resolved "https://registry.yarnpkg.com/@electron/get/-/get-1.13.1.tgz#42a0aa62fd1189638bd966e23effaebb16108368" + integrity sha512-U5vkXDZ9DwXtkPqlB45tfYnnYBN8PePp1z/XDCupnSpdrxT8/ThCv9WCwPLf9oqiSGZTkH6dx2jDUPuoXpjkcA== + dependencies: + debug "^4.1.1" + env-paths "^2.2.0" + fs-extra "^8.1.0" + got "^9.6.0" + progress "^2.0.3" + semver "^6.2.0" + sumchecker "^3.0.1" + optionalDependencies: + global-agent "^3.0.0" + global-tunnel-ng "^2.7.1" + +"@sindresorhus/is@^0.14.0": + version "0.14.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" + integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== + +"@szmarczak/http-timer@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" + integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== + dependencies: + defer-to-connect "^1.0.1" + +"@types/node@^14.6.2": + version "14.18.20" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.18.20.tgz#268f028b36eaf51181c3300252f605488c4f0650" + integrity sha512-Q8KKwm9YqEmUBRsqJ2GWJDtXltBDxTdC4m5vTdXBolu2PeQh8LX+f6BTwU+OuXPu37fLxoN6gidqBmnky36FXA== + +async-lock@^1.2.8: + version "1.2.8" + resolved "https://registry.yarnpkg.com/async-lock/-/async-lock-1.2.8.tgz#7b02bdfa2de603c0713acecd11184cf97bbc7c4c" + integrity sha512-G+26B2jc0Gw0EG/WN2M6IczuGepBsfR1+DtqLnyFSH4p2C668qkOCtEkGNVEaaNAVlYwEMazy1+/jnLxltBkIQ== + +boolean@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/boolean/-/boolean-3.0.2.tgz#df1baa18b6a2b0e70840475e1d93ec8fe75b2570" + integrity sha512-RwywHlpCRc3/Wh81MiCKun4ydaIFyW5Ea6JbL6sRCVx5q5irDw7pMXBUFYF/jArQ6YrG36q0kpovc9P/Kd3I4g== + +buffer-crc32@~0.2.3: + version "0.2.13" + resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= + +buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + +cacheable-request@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" + integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== + dependencies: + clone-response "^1.0.2" + get-stream "^5.1.0" + http-cache-semantics "^4.0.0" + keyv "^3.0.0" + lowercase-keys "^2.0.0" + normalize-url "^4.1.0" + responselike "^1.0.2" + +clone-response@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" + integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= + dependencies: + mimic-response "^1.0.0" + +concat-stream@^1.6.2: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +config-chain@^1.1.11: + version "1.1.12" + resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.12.tgz#0fde8d091200eb5e808caf25fe618c02f48e4efa" + integrity sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA== + dependencies: + ini "^1.3.4" + proto-list "~1.2.1" + +core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +debug@^2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@^4.1.0, debug@^4.1.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" + integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== + dependencies: + ms "2.1.2" + +decompress-response@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" + integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= + dependencies: + mimic-response "^1.0.0" + +defer-to-connect@^1.0.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" + integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== + +define-properties@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + dependencies: + object-keys "^1.0.12" + +detect-node@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c" + integrity sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw== + +duplexer3@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" + integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= + +electron-window-state@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/electron-window-state/-/electron-window-state-5.0.3.tgz#4f36d09e3f953d87aff103bf010f460056050aa8" + integrity sha512-1mNTwCfkolXl3kMf50yW3vE2lZj0y92P/HYWFBrb+v2S/pCka5mdwN3cagKm458A7NjndSwijynXgcLWRodsVg== + dependencies: + jsonfile "^4.0.0" + mkdirp "^0.5.1" + +electron@16.2.8: + version "16.2.8" + resolved "https://registry.yarnpkg.com/electron/-/electron-16.2.8.tgz#b7f2bd1184701e54a1bc902839d5a3ec95bb8982" + integrity sha512-KSOytY6SPLsh3iCziztqa/WgJyfDOKzCvNqku9gGIqSdT8CqtV66dTU1SOrKZQjRFLxHaF8LbyxUL1vwe4taqw== + dependencies: + "@electron/get" "^1.13.0" + "@types/node" "^14.6.2" + extract-zip "^1.0.3" + +encodeurl@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= + +end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +env-paths@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" + integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== + +es6-error@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d" + integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +extract-zip@^1.0.3: + version "1.7.0" + resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.7.0.tgz#556cc3ae9df7f452c493a0cfb51cc30277940927" + integrity sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA== + dependencies: + concat-stream "^1.6.2" + debug "^2.6.9" + mkdirp "^0.5.4" + yauzl "^2.10.0" + +fd-slicer@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" + integrity sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4= + dependencies: + pend "~1.2.0" + +fs-extra@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^4.0.0" + universalify "^0.1.0" + +get-stream@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +get-stream@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + +global-agent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/global-agent/-/global-agent-3.0.0.tgz#ae7cd31bd3583b93c5a16437a1afe27cc33a1ab6" + integrity sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q== + dependencies: + boolean "^3.0.1" + es6-error "^4.1.1" + matcher "^3.0.0" + roarr "^2.15.3" + semver "^7.3.2" + serialize-error "^7.0.1" + +global-tunnel-ng@^2.7.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/global-tunnel-ng/-/global-tunnel-ng-2.7.1.tgz#d03b5102dfde3a69914f5ee7d86761ca35d57d8f" + integrity sha512-4s+DyciWBV0eK148wqXxcmVAbFVPqtc3sEtUE/GTQfuU80rySLcMhUmHKSHI7/LDj8q0gDYI1lIhRRB7ieRAqg== + dependencies: + encodeurl "^1.0.2" + lodash "^4.17.10" + npm-conf "^1.1.3" + tunnel "^0.0.6" + +globalthis@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.2.tgz#2a235d34f4d8036219f7e34929b5de9e18166b8b" + integrity sha512-ZQnSFO1la8P7auIOQECnm0sSuoMeaSq0EEdXMBFF2QJO4uNcwbyhSgG3MruWNbFTqCLmxVwGOl7LZ9kASvHdeQ== + dependencies: + define-properties "^1.1.3" + +got@^9.6.0: + version "9.6.0" + resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" + integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== + dependencies: + "@sindresorhus/is" "^0.14.0" + "@szmarczak/http-timer" "^1.1.2" + cacheable-request "^6.0.0" + decompress-response "^3.3.0" + duplexer3 "^0.1.4" + get-stream "^4.1.0" + lowercase-keys "^1.0.1" + mimic-response "^1.0.1" + p-cancelable "^1.0.0" + to-readable-stream "^1.0.0" + url-parse-lax "^3.0.0" + +graceful-fs@^4.1.6, graceful-fs@^4.2.0: + version "4.2.6" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" + integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== + +http-cache-semantics@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" + integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== + +inherits@^2.0.3, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +ini@^1.3.4: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +json-buffer@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" + integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= + +json-stringify-safe@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + optionalDependencies: + graceful-fs "^4.1.6" + +keyv@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" + integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== + dependencies: + json-buffer "3.0.0" + +lodash@^4.17.10: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" + integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== + +lowercase-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" + integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +matcher@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/matcher/-/matcher-3.0.0.tgz#bd9060f4c5b70aa8041ccc6f80368760994f30ca" + integrity sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng== + dependencies: + escape-string-regexp "^4.0.0" + +mimic-response@^1.0.0, mimic-response@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" + integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== + +minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + +mkdirp@^0.5.1, mkdirp@^0.5.4: + version "0.5.5" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== + dependencies: + minimist "^1.2.5" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +normalize-url@^4.1.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.0.tgz#453354087e6ca96957bd8f5baf753f5982142129" + integrity sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ== + +npm-conf@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/npm-conf/-/npm-conf-1.1.3.tgz#256cc47bd0e218c259c4e9550bf413bc2192aff9" + integrity sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw== + dependencies: + config-chain "^1.1.11" + pify "^3.0.0" + +object-keys@^1.0.12: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +p-cancelable@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" + integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== + +pend@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" + integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA= + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= + +prepend-http@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" + integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +progress@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + +proto-list@~1.2.1: + version "1.2.4" + resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" + integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk= + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +readable-stream@^2.2.2: + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +responselike@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" + integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= + dependencies: + lowercase-keys "^1.0.0" + +roarr@^2.15.3: + version "2.15.4" + resolved "https://registry.yarnpkg.com/roarr/-/roarr-2.15.4.tgz#f5fe795b7b838ccfe35dc608e0282b9eba2e7afd" + integrity sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A== + dependencies: + boolean "^3.0.1" + detect-node "^2.0.4" + globalthis "^1.0.1" + json-stringify-safe "^5.0.1" + semver-compare "^1.0.0" + sprintf-js "^1.1.2" + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +semver-compare@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" + integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w= + +semver@^6.2.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@^7.3.2: + version "7.3.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97" + integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw== + dependencies: + lru-cache "^6.0.0" + +serialize-error@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-7.0.1.tgz#f1360b0447f61ffb483ec4157c737fab7d778e18" + integrity sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw== + dependencies: + type-fest "^0.13.1" + +sprintf-js@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673" + integrity sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug== + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +sumchecker@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/sumchecker/-/sumchecker-3.0.1.tgz#6377e996795abb0b6d348e9b3e1dfb24345a8e42" + integrity sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg== + dependencies: + debug "^4.1.0" + +to-readable-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" + integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== + +tunnel@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/tunnel/-/tunnel-0.0.6.tgz#72f1314b34a5b192db012324df2cc587ca47f92c" + integrity sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg== + +type-fest@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.13.1.tgz#0172cb5bce80b0bd542ea348db50c7e21834d934" + integrity sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg== + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +url-parse-lax@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" + integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= + dependencies: + prepend-http "^2.0.0" + +util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yauzl@^2.10.0: + version "2.10.0" + resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" + integrity sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk= + dependencies: + buffer-crc32 "~0.2.3" + fd-slicer "~1.1.0" diff --git a/gulp/build_variants.js b/gulp/build_variants.js index 2de3199d..4f67bf9e 100644 --- a/gulp/build_variants.js +++ b/gulp/build_variants.js @@ -8,7 +8,8 @@ * buildArgs: { * chineseVersion?: boolean, * wegameVersion?: boolean, - * steamDemo?: boolean + * steamDemo?: boolean, + * gogVersion?: boolean * }}>} */ const BUILD_VARIANTS = { @@ -62,5 +63,12 @@ const BUILD_VARIANTS = { wegameVersion: true, }, }, + "standalone-gog": { + standalone: true, + electronBaseDir: "electron_gog", + buildArgs: { + gogVersion: true, + }, + }, }; module.exports = { BUILD_VARIANTS }; diff --git a/gulp/webpack.config.js b/gulp/webpack.config.js index f1f4b2c0..d0ee4d5f 100644 --- a/gulp/webpack.config.js +++ b/gulp/webpack.config.js @@ -11,6 +11,7 @@ module.exports = ({ chineseVersion = false, wegameVersion = false, steamDemo = false, + gogVersion = false, }) => { return { mode: "development", @@ -38,6 +39,7 @@ module.exports = ({ G_APP_ENVIRONMENT: JSON.stringify("dev"), G_CHINA_VERSION: JSON.stringify(chineseVersion), G_WEGAME_VERSION: JSON.stringify(wegameVersion), + G_GOG_VERSION: JSON.stringify(gogVersion), G_IS_DEV: "true", G_IS_RELEASE: "false", G_IS_BROWSER: "true", diff --git a/gulp/webpack.production.config.js b/gulp/webpack.production.config.js index 8d0d033e..e324d675 100644 --- a/gulp/webpack.production.config.js +++ b/gulp/webpack.production.config.js @@ -18,6 +18,7 @@ module.exports = ({ chineseVersion = false, wegameVersion = false, steamDemo = false, + gogVersion = false, }) => { const globalDefs = { assert: "false && window.assert", @@ -27,6 +28,7 @@ module.exports = ({ G_CHINA_VERSION: JSON.stringify(chineseVersion), G_WEGAME_VERSION: JSON.stringify(wegameVersion), + G_GOG_VERSION: JSON.stringify(gogVersion), G_IS_RELEASE: environment === "prod" ? "true" : "false", G_IS_STANDALONE: standalone ? "true" : "false", G_IS_STEAM_DEMO: JSON.stringify(steamDemo), diff --git a/src/js/globals.d.ts b/src/js/globals.d.ts index aa8b4675..37eb4c3f 100644 --- a/src/js/globals.d.ts +++ b/src/js/globals.d.ts @@ -20,6 +20,7 @@ declare const G_IS_RELEASE: boolean; declare const G_CHINA_VERSION: boolean; declare const G_WEGAME_VERSION: boolean; +declare const G_GOG_VERSION: boolean; declare const shapez: any; diff --git a/src/js/states/main_menu.js b/src/js/states/main_menu.js index f6d018d9..eb8decec 100644 --- a/src/js/states/main_menu.js +++ b/src/js/states/main_menu.js @@ -42,9 +42,13 @@ export class MainMenuState extends GameState { const showLanguageIcon = !G_CHINA_VERSION && !G_WEGAME_VERSION; const showExitAppButton = G_IS_STANDALONE; const showPuzzleDLC = - !G_WEGAME_VERSION && (G_IS_STANDALONE || WEB_STEAM_SSO_AUTHENTICATED) && !G_IS_STEAM_DEMO; + !G_WEGAME_VERSION && + (G_IS_STANDALONE || WEB_STEAM_SSO_AUTHENTICATED) && + !G_IS_STEAM_DEMO && + !G_GOG_VERSION; const showWegameFooter = G_WEGAME_VERSION; const hasMods = MODS.anyModsActive(); + const hasSteamBridge = G_IS_STANDALONE && !G_GOG_VERSION; let showExternalLinks = true; @@ -74,7 +78,8 @@ export class MainMenuState extends GameState { !G_IS_STEAM_DEMO && /** @type { PlatformWrapperImplElectron}*/ (this.app.platformWrapper).dlcs.puzzle); - const showKiwiClicker = this.app.settings.getSetting("showKiwiClicker") && MODS.mods.length === 0; + const showKiwiClicker = + showExternalLinks && this.app.settings.getSetting("showKiwiClicker") && MODS.mods.length === 0; const bannerHtml = `

${T.demoBanners.titleV2}

@@ -144,7 +149,7 @@ export class MainMenuState extends GameState {
${ - G_IS_STANDALONE || !WEB_STEAM_SSO_AUTHENTICATED + hasSteamBridge && (G_IS_STANDALONE || !WEB_STEAM_SSO_AUTHENTICATED) ? `
${ G_IS_STANDALONE @@ -158,7 +163,7 @@ export class MainMenuState extends GameState { : "" } ${ - WEB_STEAM_SSO_AUTHENTICATED + hasSteamBridge && WEB_STEAM_SSO_AUTHENTICATED ? `
${T.mainMenu.playingFullVersion}