From 6e9fa89792862052b9fbe3ed02aa54d8ed4cbccc Mon Sep 17 00:00:00 2001 From: tobspr Date: Tue, 25 May 2021 13:09:33 +0200 Subject: [PATCH] Start to prepare wegame build --- .../electron_wegame.code-workspace | 13 + electron_wegame/favicon.icns | Bin 0 -> 70897 bytes electron_wegame/favicon.ico | Bin 0 -> 105826 bytes electron_wegame/favicon.png | Bin 0 -> 13777 bytes electron_wegame/index.js | 280 +++++++++ electron_wegame/package.json | 18 + electron_wegame/wegame.js | 9 + electron_wegame/yarn.lock | 582 ++++++++++++++++++ 8 files changed, 902 insertions(+) create mode 100644 electron_wegame/electron_wegame.code-workspace create mode 100644 electron_wegame/favicon.icns create mode 100644 electron_wegame/favicon.ico create mode 100644 electron_wegame/favicon.png create mode 100644 electron_wegame/index.js create mode 100644 electron_wegame/package.json create mode 100644 electron_wegame/wegame.js create mode 100644 electron_wegame/yarn.lock diff --git a/electron_wegame/electron_wegame.code-workspace b/electron_wegame/electron_wegame.code-workspace new file mode 100644 index 00000000..fc9ab864 --- /dev/null +++ b/electron_wegame/electron_wegame.code-workspace @@ -0,0 +1,13 @@ +{ + "folders": [ + { + "path": "." + } + ], + "settings": { + "files.exclude": { + "**/node_modules": true, + "**/typedefs_gen": true + } + } +} \ No newline at end of file diff --git a/electron_wegame/favicon.icns b/electron_wegame/favicon.icns new file mode 100644 index 0000000000000000000000000000000000000000..13d21f2621cf96207e13e5cb02c6fd417c953aea GIT binary patch literal 70897 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%0D>(iJc*TR=()}i0mw( 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 K4VyxHhW!sCPwztj literal 0 HcmV?d00001 diff --git a/electron_wegame/favicon.png b/electron_wegame/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..44994cc9124bf0a6f8c9e022cc4120ec7b657d5a GIT binary patch literal 13777 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 0; +const isLocal = process.argv.indexOf("--local") >= 0; + +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"); + +if (!fs.existsSync(storePath)) { + // No try-catch by design + fs.mkdirSync(storePath, { recursive: true }); +} + +/** @type {BrowserWindow} */ +let win = null; +let menu = null; + +function createWindow() { + let faviconExtension = ".png"; + if (process.platform === "win32") { + faviconExtension = ".ico"; + } + + win = new BrowserWindow({ + width: 1280, + height: 800, + show: false, + backgroundColor: "#222428", + useContentSize: true, + minWidth: 800, + minHeight: 600, + title: "shapez.io Standalone", + transparent: false, + icon: path.join(__dirname, "favicon" + faviconExtension), + // fullscreen: true, + autoHideMenuBar: true, + webPreferences: { + nodeIntegration: true, + webSecurity: false, + }, + allowRunningInsecureContent: false, + }); + + 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(); + + win.webContents.on("new-window", (event, pth) => { + event.preventDefault(); + shell.openExternal(pth); + }); + + win.on("closed", () => { + console.log("Window closed"); + win = null; + }); + + if (isDev) { + menu = new Menu(); + + const mainItem = new MenuItem({ + label: "Toggle Dev Tools", + click: () => win.toggleDevTools(), + accelerator: "F12", + }); + menu.append(mainItem); + + const reloadItem = new MenuItem({ + label: "Restart", + click: () => win.reload(), + accelerator: "F5", + }); + menu.append(reloadItem); + + const fullscreenItem = new MenuItem({ + label: "Fullscreen", + click: () => win.setFullScreen(!win.isFullScreen()), + accelerator: "F11", + }); + menu.append(fullscreenItem); + + Menu.setApplicationMenu(menu); + } else { + Menu.setApplicationMenu(null); + } + + win.once("ready-to-show", () => { + win.show(); + win.focus(); + }); +} + +if (!app.requestSingleInstanceLock()) { + app.exit(0); +} else { + app.on("second-instance", (event, commandLine, workingDirectory) => { + // 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", (event, flag) => { + 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, { encoding: "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, { encoding: "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); + } + }); +} + +async function performFsJob(job) { + const fname = path.join(storePath, job.filename); + + switch (job.type) { + case "read": { + if (!fs.existsSync(fname)) { + return { + // Special FILE_NOT_FOUND error code + error: "file_not_found", + }; + } + + try { + const data = await fs.promises.readFile(fname, { encoding: "utf8" }); + return { + success: true, + data, + }; + } catch (ex) { + return { + error: ex, + }; + } + } + case "write": { + try { + await writeFileSafe(fname, job.contents); + return { + success: true, + data: job.contents, + }; + } catch (ex) { + return { + error: ex, + }; + } + } + + case "delete": { + try { + await fs.promises.unlink(fname); + } catch (ex) { + return { + error: ex, + }; + } + + return { + success: true, + data: null, + }; + } + + default: + throw new Error("Unkown fs job: " + job.type); + } +} + +ipcMain.handle("fs-job", (event, arg) => performFsJob(arg)); + +wegame.init(isDev); +wegame.listen(); diff --git a/electron_wegame/package.json b/electron_wegame/package.json new file mode 100644 index 00000000..173379b6 --- /dev/null +++ b/electron_wegame/package.json @@ -0,0 +1,18 @@ +{ + "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 ." + }, + "devDependencies": { + "electron": "3.1.13" + }, + "dependencies": { + "async-lock": "^1.2.8" + } +} diff --git a/electron_wegame/wegame.js b/electron_wegame/wegame.js new file mode 100644 index 00000000..45806e8d --- /dev/null +++ b/electron_wegame/wegame.js @@ -0,0 +1,9 @@ +function init(isDev) { + console.log("wegame: init"); +} + +function listen() { + console.log("wegame: listen"); +} + +module.exports = { init, listen }; diff --git a/electron_wegame/yarn.lock b/electron_wegame/yarn.lock new file mode 100644 index 00000000..db2b6278 --- /dev/null +++ b/electron_wegame/yarn.lock @@ -0,0 +1,582 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@electron/get@^1.0.1": + version "1.12.4" + resolved "https://registry.yarnpkg.com/@electron/get/-/get-1.12.4.tgz#a5971113fc1bf8fa12a8789dc20152a7359f06ab" + integrity sha512-6nr9DbJPUR9Xujw6zD3y+rS95TyItEVM0NVjt1EehY2vUWfIgPiIPVHxCvaTS0xr2B+DRxovYVKbuOWqC35kjg== + 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 "^2.0.2" + 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@^12.0.12": + version "12.20.5" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.5.tgz#4ca82a766f05c359fd6c77505007e5a272f4bb9b" + integrity sha512-5Oy7tYZnu3a4pnJ//d4yVvOImExl4Vtwf0D40iKUlU+XlUsyV9iyFWyCFlwy489b72FMAik/EFwRkNLjjOdSPg== + +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-js@^3.6.5: + version "3.9.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.9.1.tgz#cec8de593db8eb2a85ffb0dbdeb312cb6e5460ae" + integrity sha512-gSjRvzkxQc1zjM/5paAmL4idJBFzuJoo+jDjF1tStYFMV2ERfD02HhahhCGXUyHxQRG4yFKVSdO6g62eoRMcDg== + +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@10.4.3: + version "10.4.3" + resolved "https://registry.yarnpkg.com/electron/-/electron-10.4.3.tgz#8d1c0f5e562d1b78dcec8074c0d59e58137fd508" + integrity sha512-qL8XZBII9KQHr1+YmVMj1AqyTR2I8/lxozvKEWoKKSkF8Hl6GzzxrLXRfISP7aDAvsJEyyhc6b2/42ME8hG5JA== + dependencies: + "@electron/get" "^1.0.1" + "@types/node" "^12.0.12" + 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@^2.0.2: + version "2.1.12" + resolved "https://registry.yarnpkg.com/global-agent/-/global-agent-2.1.12.tgz#e4ae3812b731a9e81cbf825f9377ef450a8e4195" + integrity sha512-caAljRMS/qcDo69X9BfkgrihGUgGx44Fb4QQToNQjsiWh+YlQ66uqYVAdA8Olqit+5Ng0nkz09je3ZzANMZcjg== + dependencies: + boolean "^3.0.1" + core-js "^3.6.5" + 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.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" + +"shapez.io-private-artifacts@github:tobspr/shapez.io-private-artifacts#abi-v82": + version "0.1.0" + resolved "git+ssh://git@github.com/tobspr/shapez.io-private-artifacts.git#8aa3bfd3b569eb5695fc8a585a3f2ee3ed2db290" + +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"