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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%0AxS&J*6Ma=mk9aCAyKYzoTL- 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 b)QCHlLd;qF1!(G^p>ftX_y@}AAAkNIV9V-) 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}