From d98f3405872cdc1c6cd9ada90f7f9478a6793cd4 Mon Sep 17 00:00:00 2001 From: Labhansh Agrawal Date: Thu, 14 Apr 2022 22:20:54 +0530 Subject: [PATCH] Use v8 snapshots to cache dependencies --- .eslintignore | 3 +- .gitignore | 1 + bin/cp-snapshot.js | 53 +++++++++ bin/mk-snapshot.js | 51 +++++++++ bin/snapshot-libs.js | 31 +++++ electron-builder.json | 3 +- lib/hyper.d.ts | 11 ++ lib/index.tsx | 1 + lib/v8-snapshot-util.ts | 21 ++++ package.json | 12 +- webpack.config.ts | 30 +++++ yarn.lock | 243 ++++++++++++++++++++++++++++++++++++++-- 12 files changed, 447 insertions(+), 13 deletions(-) create mode 100644 bin/cp-snapshot.js create mode 100644 bin/mk-snapshot.js create mode 100644 bin/snapshot-libs.js create mode 100644 lib/v8-snapshot-util.ts diff --git a/.eslintignore b/.eslintignore index 5f94ba00..82cab143 100644 --- a/.eslintignore +++ b/.eslintignore @@ -9,4 +9,5 @@ assets website bin dist -target \ No newline at end of file +target +cache \ No newline at end of file diff --git a/.gitignore b/.gitignore index ef95864f..784148a8 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,7 @@ dist app/renderer target bin/cli.* +cache # dependencies node_modules diff --git a/bin/cp-snapshot.js b/bin/cp-snapshot.js new file mode 100644 index 00000000..a4e29392 --- /dev/null +++ b/bin/cp-snapshot.js @@ -0,0 +1,53 @@ +const path = require('path'); +const fs = require('fs'); +const {Arch} = require('electron-builder'); + +function copySnapshot(pathToElectron, archToCopy) { + const snapshotFileName = 'snapshot_blob.bin'; + const v8ContextFileName = getV8ContextFileName(archToCopy); + const pathToBlob = path.resolve(__dirname, '..', 'cache', archToCopy, snapshotFileName); + const pathToBlobV8 = path.resolve(__dirname, '..', 'cache', archToCopy, v8ContextFileName); + + console.log('Copying v8 snapshots from', pathToBlob, 'to', pathToElectron); + fs.copyFileSync(pathToBlob, path.join(pathToElectron, snapshotFileName)); + fs.copyFileSync(pathToBlobV8, path.join(pathToElectron, v8ContextFileName)); +} + +function getPathToElectron() { + switch (process.platform) { + case 'darwin': + return path.resolve( + __dirname, + '..', + 'node_modules/electron/dist/Electron.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources' + ); + case 'win32': + case 'linux': + return path.resolve(__dirname, '..', 'node_modules', 'electron', 'dist'); + } +} + +function getV8ContextFileName(archToCopy) { + if (process.platform === 'darwin') { + return `v8_context_snapshot${archToCopy === 'arm64' ? '.arm64' : '.x86_64'}.bin`; + } else { + return `v8_context_snapshot.bin`; + } +} + +exports.default = async (context) => { + const archToCopy = Arch[context.arch]; + const pathToElectron = + process.platform === 'darwin' + ? `${context.appOutDir}/Hyper.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources` + : context.appOutDir; + copySnapshot(pathToElectron, archToCopy); +}; + +if (require.main === module) { + const archToCopy = process.env.npm_config_arch; + const pathToElectron = getPathToElectron(); + if ((process.arch.startsWith('arm') ? 'arm64' : 'x64') === archToCopy) { + copySnapshot(pathToElectron, archToCopy); + } +} diff --git a/bin/mk-snapshot.js b/bin/mk-snapshot.js new file mode 100644 index 00000000..209426cf --- /dev/null +++ b/bin/mk-snapshot.js @@ -0,0 +1,51 @@ +const childProcess = require('child_process'); +const vm = require('vm'); +const path = require('path'); +const fs = require('fs'); +const electronLink = require('electron-link'); +const {mkdirp} = require('fs-extra'); + +const excludedModules = {}; + +const crossArchDirs = ['clang_x86_v8_arm', 'clang_x64_v8_arm64', 'win_clang_x64']; + +async function main() { + const baseDirPath = path.resolve(__dirname, '..'); + + console.log('Creating a linked script..'); + const result = await electronLink({ + baseDirPath: baseDirPath, + mainPath: `${__dirname}/snapshot-libs.js`, + cachePath: `${baseDirPath}/cache`, + // eslint-disable-next-line no-prototype-builtins + shouldExcludeModule: (modulePath) => excludedModules.hasOwnProperty(modulePath) + }); + + const snapshotScriptPath = `${baseDirPath}/cache/snapshot-libs.js`; + fs.writeFileSync(snapshotScriptPath, result.snapshotScript); + + // Verify if we will be able to use this in `mksnapshot` + vm.runInNewContext(result.snapshotScript, undefined, {filename: snapshotScriptPath, displayErrors: true}); + + const outputBlobPath = `${baseDirPath}/cache/${process.env.npm_config_arch}`; + await mkdirp(outputBlobPath); + + if (process.platform !== 'darwin') { + const mksnapshotBinPath = `${baseDirPath}/node_modules/electron-mksnapshot/bin`; + const matchingDirs = crossArchDirs.map((dir) => `${mksnapshotBinPath}/${dir}`).filter((dir) => fs.existsSync(dir)); + for (const dir of matchingDirs) { + if (fs.existsSync(`${mksnapshotBinPath}/gen/v8/embedded.S`)) { + await mkdirp(`${dir}/gen/v8`); + fs.copyFileSync(`${mksnapshotBinPath}/gen/v8/embedded.S`, `${dir}/gen/v8/embedded.S`); + } + } + } + + console.log(`Generating startup blob in "${outputBlobPath}"`); + childProcess.execFileSync( + path.resolve(__dirname, '..', 'node_modules', '.bin', 'mksnapshot' + (process.platform === 'win32' ? '.cmd' : '')), + [snapshotScriptPath, '--output_dir', outputBlobPath] + ); +} + +main().catch((err) => console.error(err)); diff --git a/bin/snapshot-libs.js b/bin/snapshot-libs.js new file mode 100644 index 00000000..40dd79b6 --- /dev/null +++ b/bin/snapshot-libs.js @@ -0,0 +1,31 @@ +require('color-convert'); +require('color-string'); +require('columnify'); +require('lodash'); +require('ms'); +require('normalize-url'); +require('parse-url'); +require('php-escape-shell'); +require('plist'); +require('react-deep-force-update'); +require('react-dom'); +require('react-redux'); +require('react'); +require('redux-thunk'); +require('redux'); +require('reselect'); +require('seamless-immutable'); +require('stylis'); +require('xterm-addon-unicode11'); +// eslint-disable-next-line no-constant-condition +if (false) { + require('args'); + require('mousetrap'); + require('open'); + require('xterm-addon-fit'); + require('xterm-addon-ligatures'); + require('xterm-addon-search'); + require('xterm-addon-web-links'); + require('xterm-addon-webgl'); + require('xterm'); +} diff --git a/electron-builder.json b/electron-builder.json index 48c4cd31..a2ad003a 100644 --- a/electron-builder.json +++ b/electron-builder.json @@ -2,6 +2,7 @@ "$schema": "http://json.schemastore.org/electron-builder", "appId": "co.zeit.hyper", "afterSign": "./bin/notarize.js", + "afterPack": "./bin/cp-snapshot.js", "directories": { "app": "target" }, @@ -136,4 +137,4 @@ "ssh" ] } -} \ No newline at end of file +} diff --git a/lib/hyper.d.ts b/lib/hyper.d.ts index b6509d81..9b92194e 100644 --- a/lib/hyper.d.ts +++ b/lib/hyper.d.ts @@ -7,6 +7,17 @@ declare global { rpc: Client; focusActiveTerm: (uid?: string) => void; } + + const snapshotResult: { + customRequire: { + (module: string): NodeModule; + cache: Record; + definitions: Record; + }; + setGlobals(global: any, process: any, window: any, document: any, console: any, require: any): void; + }; + + const __non_webpack_require__: NodeRequire; } export type ITermGroup = Immutable<{ diff --git a/lib/index.tsx b/lib/index.tsx index 944d143c..21578c5e 100644 --- a/lib/index.tsx +++ b/lib/index.tsx @@ -1,3 +1,4 @@ +import './v8-snapshot-util'; import {webFrame} from 'electron'; import forceUpdate from 'react-deep-force-update'; import {Provider} from 'react-redux'; diff --git a/lib/v8-snapshot-util.ts b/lib/v8-snapshot-util.ts new file mode 100644 index 00000000..4b3dd804 --- /dev/null +++ b/lib/v8-snapshot-util.ts @@ -0,0 +1,21 @@ +if (typeof snapshotResult !== 'undefined') { + const Module = __non_webpack_require__('module'); + const originalLoad: (module: string, ...args: any[]) => any = Module._load; + + Module._load = function _load(module: string, ...args: any[]): NodeModule { + let cachedModule = snapshotResult.customRequire.cache[module]; + + if (cachedModule) return cachedModule.exports; + + if (snapshotResult.customRequire.definitions[module]) { + cachedModule = {exports: snapshotResult.customRequire(module)}; + } else { + cachedModule = {exports: originalLoad(module, ...args)}; + } + + snapshotResult.customRequire.cache[module] = cachedModule; + return cachedModule.exports; + }; + + snapshotResult.setGlobals(global, process, window, document, console, global.require); +} diff --git a/package.json b/package.json index 7f74bb44..bb5544b8 100644 --- a/package.json +++ b/package.json @@ -12,10 +12,14 @@ "test:unit": "ava", "test:unit:watch": "yarn run test:unit -- --watch", "test:e2e": "ava --config ava-e2e.config.js", - "postinstall": "webpack --config-name hyper-app && electron-builder install-app-deps && yarn run rebuild-node-pty && cpy --cwd=target --parents \"node_modules/**/*\" \"../app/\" && husky install", + "postinstall": "yarn run v8-snapshot && webpack --config-name hyper-app && electron-builder install-app-deps && yarn run rebuild-node-pty && cpy --cwd=target --parents \"node_modules/**/*\" \"../app/\" && husky install", "rebuild-node-pty": "electron-rebuild -f -o node-pty -m target", "dist": "yarn run build && cross-env BABEL_ENV=production babel target/renderer/bundle.js --out-file target/renderer/bundle.js --no-comments --minified && electron-builder", - "clean": "node ./bin/rimraf-standalone.js node_modules && node ./bin/rimraf-standalone.js ./app/node_modules && node ./bin/rimraf-standalone.js ./app/renderer" + "clean": "node ./bin/rimraf-standalone.js node_modules && node ./bin/rimraf-standalone.js ./app/node_modules && node ./bin/rimraf-standalone.js ./app/renderer", + "v8-snapshot": "cross-env npm_config_arch=x64 yarn run v8-snapshot:arch && cross-env npm_config_arch=arm64 yarn run v8-snapshot:arch", + "v8-snapshot:arch":"yarn run mk-snapshot && yarn run cp-snapshot", + "mk-snapshot": "cross-env ELECTRON_CUSTOM_VERSION=$npm_package_devDependencies_electron node node_modules/electron-mksnapshot/download-mksnapshot.js && node bin/mk-snapshot.js", + "cp-snapshot": "node bin/cp-snapshot.js" }, "license": "MIT", "author": { @@ -98,9 +102,11 @@ "copy-webpack-plugin": "10.2.4", "cpy-cli": "^3.1.1", "cross-env": "7.0.3", - "electron": "^18.0.3", + "electron": "18.0.3", "electron-builder": "^23.0.3", "electron-devtools-installer": "3.2.0", + "electron-link": "^0.6.0", + "electron-mksnapshot": "17.0.1", "electron-notarize": "1.2.1", "electron-rebuild": "3.2.7", "electronmon": "^2.0.2", diff --git a/webpack.config.ts b/webpack.config.ts index a1eb4f32..2bd55f1e 100644 --- a/webpack.config.ts +++ b/webpack.config.ts @@ -89,6 +89,36 @@ const config: webpack.Configuration[] = [ } ] }, + externals: { + 'color-convert': 'require("./node_modules/color-convert/index.js")', + 'color-string': 'require("./node_modules/color-string/index.js")', + columnify: 'require("./node_modules/columnify/columnify.js")', + lodash: 'require("./node_modules/lodash/lodash.js")', + ms: 'require("./node_modules/ms/index.js")', + 'normalize-url': 'require("./node_modules/normalize-url/index.js")', + 'parse-url': 'require("./node_modules/parse-url/lib/index.js")', + 'php-escape-shell': 'require("./node_modules/php-escape-shell/php-escape-shell.js")', + plist: 'require("./node_modules/plist/index.js")', + 'react-deep-force-update': 'require("./node_modules/react-deep-force-update/lib/index.js")', + 'react-dom': 'require("./node_modules/react-dom/index.js")', + 'react-redux': 'require("./node_modules/react-redux/lib/index.js")', + react: 'require("./node_modules/react/index.js")', + 'redux-thunk': 'require("./node_modules/redux-thunk/lib/index.js")', + redux: 'require("./node_modules/redux/lib/redux.js")', + reselect: 'require("./node_modules/reselect/lib/index.js")', + 'seamless-immutable': 'require("./node_modules/seamless-immutable/src/seamless-immutable.js")', + stylis: 'require("./node_modules/stylis/stylis.js")', + 'xterm-addon-unicode11': 'require("./node_modules/xterm-addon-unicode11/lib/xterm-addon-unicode11.js")', + args: 'require("./node_modules/args/lib/index.js")', + mousetrap: 'require("./node_modules/mousetrap/mousetrap.js")', + open: 'require("./node_modules/open/index.js")', + 'xterm-addon-fit': 'require("./node_modules/xterm-addon-fit/lib/xterm-addon-fit.js")', + 'xterm-addon-ligatures': 'require("./node_modules/xterm-addon-ligatures/lib/xterm-addon-ligatures.js")', + 'xterm-addon-search': 'require("./node_modules/xterm-addon-search/lib/xterm-addon-search.js")', + 'xterm-addon-web-links': 'require("./node_modules/xterm-addon-web-links/lib/xterm-addon-web-links.js")', + 'xterm-addon-webgl': 'require("./node_modules/xterm-addon-webgl/lib/xterm-addon-webgl.js")', + xterm: 'require("./node_modules/xterm/lib/xterm.js")' + }, plugins: [ new webpack.IgnorePlugin({resourceRegExp: /.*\.js.map$/i}), diff --git a/yarn.lock b/yarn.lock index 55b00c1e..afb67324 100644 --- a/yarn.lock +++ b/yarn.lock @@ -551,6 +551,22 @@ resolved "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.2.tgz#8f03a22a04de437254e8ce8cc84ba39689288752" integrity sha512-HyYEUDeIj5rRQU2Hk5HTB2uHsbRQpF70nvMhVzi+VJR0X+xNEhjPui4/kBf3VeH/wqD28PT4sVOm8qqLjBrSZg== +"@electron/get@^1.12.2": + version "1.14.1" + resolved "https://registry.npmjs.org/@electron/get/-/get-1.14.1.tgz#16ba75f02dffb74c23965e72d617adc721d27f40" + integrity sha512-BrZYyL/6m0ZXz/lDxy/nlVhQz+WF+iPS6qXolEU8atw7h6v1aYkjwJZ63m+bJMBTxDE66X+r2tPS4a/8C82sZw== + 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" + "@electron/get@^1.13.0": version "1.13.1" resolved "https://registry.npmjs.org/@electron/get/-/get-1.13.1.tgz#42a0aa62fd1189638bd966e23effaebb16108368" @@ -1270,6 +1286,28 @@ abbrev@1: resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== +abstract-leveldown@^6.2.1: + version "6.3.0" + resolved "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.3.0.tgz#d25221d1e6612f820c35963ba4bd739928f6026a" + integrity sha512-TU5nlYgta8YrBMNpc9FwQzRbiXsj49gsALsXadbGHt9CROPzX5fB0rWDR5mtdpOOKa5XqRFpbj1QroPAoPzVjQ== + dependencies: + buffer "^5.5.0" + immediate "^3.2.3" + level-concat-iterator "~2.0.0" + level-supports "~1.0.0" + xtend "~4.0.0" + +abstract-leveldown@~6.2.1: + version "6.2.3" + resolved "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz#036543d87e3710f2528e47040bc3261b77a9a8eb" + integrity sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ== + dependencies: + buffer "^5.5.0" + immediate "^3.2.3" + level-concat-iterator "~2.0.0" + level-supports "~1.0.0" + xtend "~4.0.0" + acorn-import-assertions@^1.7.6: version "1.7.6" resolved "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.7.6.tgz#580e3ffcae6770eebeec76c3b9723201e9d01f78" @@ -1290,7 +1328,7 @@ acorn@^7.4.0: resolved "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -acorn@^8.4.1, acorn@^8.5.0, acorn@^8.7.0: +acorn@^8.0.4, acorn@^8.4.1, acorn@^8.5.0, acorn@^8.7.0: version "8.7.0" resolved "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz#90951fde0f8f09df93549481e5fc141445b791cf" integrity sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ== @@ -1626,6 +1664,13 @@ assign-symbols@^1.0.0: resolved "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= +ast-types@0.14.1: + version "0.14.1" + resolved "https://registry.npmjs.org/ast-types/-/ast-types-0.14.1.tgz#0b415043770d7a2cbe4b2770271cbd7d2c9f61b9" + integrity sha512-pfSiukbt23P1qMhNnsozLzhMLBs7EEeXqPyvPmnuZM+RMfwfqwDbSVKYflgGuVI7/VehR4oMks0igzdNAg4VeQ== + dependencies: + tslib "^2.0.1" + ast-types@0.14.2: version "0.14.2" resolved "https://registry.npmjs.org/ast-types/-/ast-types-0.14.2.tgz#600b882df8583e3cd4f2df5fa20fa83759d4bdfd" @@ -1633,6 +1678,14 @@ ast-types@0.14.2: dependencies: tslib "^2.0.1" +ast-util-plus@^0.7.1: + version "0.7.1" + resolved "https://registry.npmjs.org/ast-util-plus/-/ast-util-plus-0.7.1.tgz#5612e2f2af2ee127a8f6ac846520856f517c7c51" + integrity sha512-j5CjjuBgNUz7lequJ11bboMSOz3WbpUIKDtscmN37bn5WWsxzn7zb3kOCO+jXhvGY9C5IVwssKlG6BA5yqav7w== + dependencies: + ast-types "0.14.1" + private "0.1.8" + astral-regex@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" @@ -1897,7 +1950,7 @@ buffer-from@^1.0.0: resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== -buffer@^5.1.0, buffer@^5.5.0: +buffer@^5.1.0, buffer@^5.5.0, buffer@^5.6.0: version "5.7.1" resolved "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== @@ -2715,6 +2768,14 @@ defer-to-connect@^2.0.1: resolved "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== +deferred-leveldown@~5.3.0: + version "5.3.0" + resolved "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz#27a997ad95408b61161aa69bd489b86c71b78058" + integrity sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw== + dependencies: + abstract-leveldown "~6.2.1" + inherits "^2.0.3" + define-lazy-prop@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" @@ -2924,6 +2985,31 @@ electron-devtools-installer@3.2.0: tslib "^2.1.0" unzip-crx-3 "^0.2.0" +electron-link@^0.6.0: + version "0.6.0" + resolved "https://registry.npmjs.org/electron-link/-/electron-link-0.6.0.tgz#7ffe453cb4a7421b697e54c43faf57433eba977a" + integrity sha512-sSxU9c7ABIH8csvAveTwgrG5g7Nbcuh/MBPF5exeWgzd0RLJYNWuD66eMpPRo9/qwqyPc8FJvHRF7EIN5Ylqqg== + dependencies: + acorn "^8.0.4" + ast-util-plus "^0.7.1" + encoding-down "^6.3.0" + indent-string "^4.0.0" + leveldown "^5.6.0" + levelup "^4.4.0" + recast "^0.20.4" + resolve "^1.19.0" + source-map "^0.7.3" + +electron-mksnapshot@17.0.1: + version "17.0.1" + resolved "https://registry.npmjs.org/electron-mksnapshot/-/electron-mksnapshot-17.0.1.tgz#886132b9eef63065647da3cd178c94fbafdce1d7" + integrity sha512-dl3J5nnk7j2hXkVCfmSutK2rmw6hXWbRH3zOWQmKUJiO5x+cFMZuA3jijAFIb+oY6e8Tmu4Mz3ZfUuOQyv1I9w== + dependencies: + "@electron/get" "^1.12.2" + extract-zip "^2.0.0" + fs-extra "^7.0.1" + temp "^0.8.3" + electron-notarize@1.2.1: version "1.2.1" resolved "https://registry.npmjs.org/electron-notarize/-/electron-notarize-1.2.1.tgz#347c18eca8e29dddadadee511b870c13d4008baf" @@ -2982,7 +3068,7 @@ electron-to-chromium@^1.4.17: resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.24.tgz#9cf8a92d5729c480ee47ff0aa5555f57467ae2fa" integrity sha512-erwx5r69B/WFfFuF2jcNN0817BfDBdC4765kQ6WltOMuwsimlQo3JTEq0Cle+wpHralwdeX3OfAtw/mHxPK0Wg== -electron@^18.0.3: +electron@18.0.3: version "18.0.3" resolved "https://registry.npmjs.org/electron/-/electron-18.0.3.tgz#58713c92b44e439881540d18910d193defb0c2b4" integrity sha512-QRUZkGL8O/8CyDmTLSjBeRsZmGTPlPVeWnnpkdNqgHYYaOc/A881FKMiNzvQ9Cj0a+rUavDdwBUfUL82U3Ay7w== @@ -3039,6 +3125,16 @@ encodeurl@^1.0.2: resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= +encoding-down@^6.3.0: + version "6.3.0" + resolved "https://registry.npmjs.org/encoding-down/-/encoding-down-6.3.0.tgz#b1c4eb0e1728c146ecaef8e32963c549e76d082b" + integrity sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw== + dependencies: + abstract-leveldown "^6.2.1" + inherits "^2.0.3" + level-codec "^9.0.0" + level-errors "^2.0.0" + encoding@^0.1.12, encoding@^0.1.13: version "0.1.13" resolved "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" @@ -3083,6 +3179,13 @@ err-code@^2.0.2: resolved "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== +errno@~0.1.1: + version "0.1.8" + resolved "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" + integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== + dependencies: + prr "~1.0.1" + error-ex@^1.3.1: version "1.3.2" resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" @@ -3414,7 +3517,7 @@ extglob@^2.0.4: snapdragon "^0.8.1" to-regex "^3.0.1" -extract-zip@2.0.1: +extract-zip@2.0.1, extract-zip@^2.0.0: version "2.0.1" resolved "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a" integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg== @@ -3672,6 +3775,15 @@ fs-extra@^10.0.0: jsonfile "^6.0.1" universalify "^2.0.0" +fs-extra@^7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" + integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + fs-extra@^8.1.0: version "8.1.0" resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" @@ -4228,6 +4340,11 @@ ignore@^5.2.0: resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== +immediate@^3.2.3: + version "3.3.0" + resolved "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz#1aef225517836bcdf7f2a2de2600c79ff0269266" + integrity sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q== + immediate@~3.0.5: version "3.0.6" resolved "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" @@ -4434,6 +4551,13 @@ is-core-module@^2.1.0, is-core-module@^2.2.0: dependencies: has "^1.0.3" +is-core-module@^2.8.1: + version "2.8.1" + resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz#f59fdfca701d5879d0a6b100a40aa1560ce27211" + integrity sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA== + dependencies: + has "^1.0.3" + is-data-descriptor@^0.1.4: version "0.1.4" resolved "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" @@ -4929,6 +5053,61 @@ lazy-val@^1.0.4, lazy-val@^1.0.5: resolved "https://registry.npmjs.org/lazy-val/-/lazy-val-1.0.5.tgz#6cf3b9f5bc31cee7ee3e369c0832b7583dcd923d" integrity sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q== +level-codec@^9.0.0: + version "9.0.2" + resolved "https://registry.npmjs.org/level-codec/-/level-codec-9.0.2.tgz#fd60df8c64786a80d44e63423096ffead63d8cbc" + integrity sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ== + dependencies: + buffer "^5.6.0" + +level-concat-iterator@~2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz#1d1009cf108340252cb38c51f9727311193e6263" + integrity sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw== + +level-errors@^2.0.0, level-errors@~2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/level-errors/-/level-errors-2.0.1.tgz#2132a677bf4e679ce029f517c2f17432800c05c8" + integrity sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw== + dependencies: + errno "~0.1.1" + +level-iterator-stream@~4.0.0: + version "4.0.2" + resolved "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz#7ceba69b713b0d7e22fcc0d1f128ccdc8a24f79c" + integrity sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q== + dependencies: + inherits "^2.0.4" + readable-stream "^3.4.0" + xtend "^4.0.2" + +level-supports@~1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz#2f530a596834c7301622521988e2c36bb77d122d" + integrity sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg== + dependencies: + xtend "^4.0.2" + +leveldown@^5.6.0: + version "5.6.0" + resolved "https://registry.npmjs.org/leveldown/-/leveldown-5.6.0.tgz#16ba937bb2991c6094e13ac5a6898ee66d3eee98" + integrity sha512-iB8O/7Db9lPaITU1aA2txU/cBEXAt4vWwKQRrrWuS6XDgbP4QZGj9BL2aNbwb002atoQ/lIotJkfyzz+ygQnUQ== + dependencies: + abstract-leveldown "~6.2.1" + napi-macros "~2.0.0" + node-gyp-build "~4.1.0" + +levelup@^4.4.0: + version "4.4.0" + resolved "https://registry.npmjs.org/levelup/-/levelup-4.4.0.tgz#f89da3a228c38deb49c48f88a70fb71f01cafed6" + integrity sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ== + dependencies: + deferred-leveldown "~5.3.0" + level-errors "~2.0.0" + level-iterator-stream "~4.0.0" + level-supports "~1.0.0" + xtend "~4.0.0" + leven@2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" @@ -5498,6 +5677,11 @@ nanomatch@^1.2.9: snapdragon "^0.8.1" to-regex "^3.0.1" +napi-macros@~2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/napi-macros/-/napi-macros-2.0.0.tgz#2b6bae421e7b96eb687aa6c77a7858640670001b" + integrity sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg== + natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" @@ -5557,6 +5741,11 @@ node-gyp-build@^4.2.1: resolved "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.2.3.tgz#ce6277f853835f718829efb47db20f3e4d9c4739" integrity sha512-MN6ZpzmfNCRM+3t57PTJHgHyw/h4OWnZ6mR8P5j/uZtqQr46RRuDE/P+g3n0YR/AiYXeWixZZzaip77gdICfRg== +node-gyp-build@~4.1.0: + version "4.1.1" + resolved "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.1.1.tgz#d7270b5d86717068d114cc57fff352f96d745feb" + integrity sha512-dSq1xmcPDKPZ2EED2S6zw/b9NKsqzXRE6dVr8TVQnI3FJOTteUMuqF3Qqs6LZg+mLGYJWqQzMbIjMtJqTv87nQ== + node-gyp@9.0.0: version "9.0.0" resolved "https://registry.npmjs.org/node-gyp/-/node-gyp-9.0.0.tgz#e1da2067427f3eb5bb56820cb62bc6b1e4bd2089" @@ -6077,7 +6266,7 @@ path-key@^3.0.0, path-key@^3.1.0: resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== -path-parse@^1.0.6: +path-parse@^1.0.6, path-parse@^1.0.7: version "1.0.7" resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== @@ -6296,6 +6485,11 @@ pretty-ms@^7.0.1: dependencies: parse-ms "^2.1.0" +private@0.1.8: + version "0.1.8" + resolved "https://registry.npmjs.org/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" + integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== + process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" @@ -6366,6 +6560,11 @@ proxyquire@2.1.3: module-not-found-error "^1.0.1" resolve "^1.11.1" +prr@~1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= + pump@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" @@ -6516,7 +6715,7 @@ readdirp@~3.6.0: dependencies: picomatch "^2.2.1" -recast@0.20.5: +recast@0.20.5, recast@^0.20.4: version "0.20.5" resolved "https://registry.npmjs.org/recast/-/recast-0.20.5.tgz#8e2c6c96827a1b339c634dd232957d230553ceae" integrity sha512-E5qICoPoNL4yU0H0NoBDntNB0Q5oMSNh9usFctYniLBluTthi3RsQVBXIJNbApOlvSwW/RGxIuokPcAc59J5fQ== @@ -6675,6 +6874,15 @@ resolve@^1.10.0, resolve@^1.11.1, resolve@^1.9.0: is-core-module "^2.1.0" path-parse "^1.0.6" +resolve@^1.19.0: + version "1.22.0" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198" + integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw== + dependencies: + is-core-module "^2.8.1" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + resolve@^2.0.0-next.3: version "2.0.0-next.3" resolved "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz#d41016293d4a8586a39ca5d9b5f15cbea1f55e46" @@ -6727,6 +6935,13 @@ rimraf@3.0.2, rimraf@^3.0.0, rimraf@^3.0.2: dependencies: glob "^7.1.3" +rimraf@~2.6.2: + version "2.6.3" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" + integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== + dependencies: + glob "^7.1.3" + roarr@^2.15.3: version "2.15.4" resolved "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz#f5fe795b7b838ccfe35dc608e0282b9eba2e7afd" @@ -7095,7 +7310,7 @@ source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -source-map@~0.7.2: +source-map@^0.7.3, source-map@~0.7.2: version "0.7.3" resolved "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== @@ -7362,6 +7577,11 @@ supports-color@^8.0.0, supports-color@^8.1.0: dependencies: has-flag "^4.0.0" +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + table@^6.0.9: version "6.7.1" resolved "https://registry.npmjs.org/table/-/table-6.7.1.tgz#ee05592b7143831a8c94f3cee6aae4c1ccef33e2" @@ -7404,6 +7624,13 @@ temp-file@^3.4.0: async-exit-hook "^2.0.1" fs-extra "^10.0.0" +temp@^0.8.3: + version "0.8.4" + resolved "https://registry.npmjs.org/temp/-/temp-0.8.4.tgz#8c97a33a4770072e0a05f919396c7665a7dd59f2" + integrity sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg== + dependencies: + rimraf "~2.6.2" + terser-webpack-plugin@*, terser-webpack-plugin@^5.1.3: version "5.2.3" resolved "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.2.3.tgz#4852c91f709a4ea2bcf324cf48e7e88124cda0cc" @@ -7972,7 +8199,7 @@ xmlbuilder@^9.0.7: resolved "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d" integrity sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0= -xtend@^4.0.0: +xtend@^4.0.0, xtend@^4.0.2, xtend@~4.0.0: version "4.0.2" resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==