Skip to content

Instantly share code, notes, and snippets.

@AlttiRi
Last active June 23, 2022 17:20
Show Gist options
  • Select an option

  • Save AlttiRi/ddff57964472f3c4ccc3eb0dacf2073b to your computer and use it in GitHub Desktop.

Select an option

Save AlttiRi/ddff57964472f3c4ccc3eb0dacf2073b to your computer and use it in GitHub Desktop.

Revisions

  1. AlttiRi revised this gist Jun 23, 2022. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion readme.md
    Original file line number Diff line number Diff line change
    @@ -1,6 +1,6 @@
    - Download [this](https://gist.github.com/AlttiRi/ddff57964472f3c4ccc3eb0dacf2073b) as ZIP
    - Install deps with `npm i`
    - Run `node process-bench.js "electron ."`, or `node process-bench.js "node_modules/.bin/electron ."`
    - Run `node process-bench.js "electron ."` (with `electron` installed globally)~, or `node process-bench.js "node_modules/.bin/electron ."`~

    Additionally, you can test the running with a package manager:
    - Run `node process-bench.js "npm start"`
  2. AlttiRi revised this gist Jun 23, 2022. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion readme.md
    Original file line number Diff line number Diff line change
    @@ -1,6 +1,6 @@
    - Download [this](https://gist.github.com/AlttiRi/ddff57964472f3c4ccc3eb0dacf2073b) as ZIP
    - Install deps with `npm i`
    - Run `node process-bench.js "node_modules/.bin/electron ."`, or `node process-bench.js "electron ."`
    - Run `node process-bench.js "electron ."`, or `node process-bench.js "node_modules/.bin/electron ."`

    Additionally, you can test the running with a package manager:
    - Run `node process-bench.js "npm start"`
  3. AlttiRi revised this gist Jun 23, 2022. 1 changed file with 2 additions and 1 deletion.
    3 changes: 2 additions & 1 deletion readme.md
    Original file line number Diff line number Diff line change
    @@ -1,5 +1,6 @@
    - Download [this](https://gist.github.com/AlttiRi/ddff57964472f3c4ccc3eb0dacf2073b) as ZIP
    - Run `node process-bench.js "node_modules/.bin/electron ."`, or `node process-bench.js "electron ."`.
    - Install deps with `npm i`
    - Run `node process-bench.js "node_modules/.bin/electron ."`, or `node process-bench.js "electron ."`

    Additionally, you can test the running with a package manager:
    - Run `node process-bench.js "npm start"`
  4. AlttiRi revised this gist Jun 23, 2022. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion readme.md
    Original file line number Diff line number Diff line change
    @@ -1,5 +1,5 @@
    - Download [this](https://gist.github.com/AlttiRi/ddff57964472f3c4ccc3eb0dacf2073b) as ZIP
    - Run `node process-bench.js "electron ."`
    - Run `node process-bench.js "node_modules/.bin/electron ."`, or `node process-bench.js "electron ."`.

    Additionally, you can test the running with a package manager:
    - Run `node process-bench.js "npm start"`
  5. AlttiRi revised this gist Feb 15, 2022. 1 changed file with 2 additions and 2 deletions.
    4 changes: 2 additions & 2 deletions readme.md
    Original file line number Diff line number Diff line change
    @@ -1,6 +1,6 @@
    - Download [this](https://gist.github.com/AlttiRi/ddff57964472f3c4ccc3eb0dacf2073b) as ZIP
    - Run `node process-bench.js "electron ."`

    Additionaly:
    Additionally, you can test the running with a package manager:
    - Run `node process-bench.js "npm start"`
    - Run `node process-bench.js "yarn start"`
    - Run `node process-bench.js "yarn start"` (`npm install --global yarn`)
  6. AlttiRi revised this gist Feb 15, 2022. 2 changed files with 9 additions and 0 deletions.
    6 changes: 6 additions & 0 deletions renderer.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,6 @@
    // This file is required by the index.html file and will
    // be executed in the renderer process for that window.
    // No Node.js APIs are available in this process because
    // `nodeIntegration` is turned off. Use `preload.js` to
    // selectively enable features needed in the rendering
    // process.
    3 changes: 3 additions & 0 deletions styles.css
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,3 @@
    /* styles.css */

    /* Add styles here to customize the appearance of your app */
  7. AlttiRi revised this gist Feb 15, 2022. 3 changed files with 3 additions and 10 deletions.
    4 changes: 3 additions & 1 deletion readme.md
    Original file line number Diff line number Diff line change
    @@ -1,4 +1,6 @@
    - Download [this]() as ZIP
    - Download [this](https://gist.github.com/AlttiRi/ddff57964472f3c4ccc3eb0dacf2073b) as ZIP
    - Run `node process-bench.js "electron ."`

    Additionaly:
    - Run `node process-bench.js "npm start"`
    - Run `node process-bench.js "yarn start"`
    6 changes: 0 additions & 6 deletions renderer.js
    Original file line number Diff line number Diff line change
    @@ -1,6 +0,0 @@
    // This file is required by the index.html file and will
    // be executed in the renderer process for that window.
    // No Node.js APIs are available in this process because
    // `nodeIntegration` is turned off. Use `preload.js` to
    // selectively enable features needed in the rendering
    // process.
    3 changes: 0 additions & 3 deletions styles.css
    Original file line number Diff line number Diff line change
    @@ -1,3 +0,0 @@
    /* styles.css */

    /* Add styles here to customize the appearance of your app */
  8. AlttiRi created this gist Feb 15, 2022.
    19 changes: 19 additions & 0 deletions index.html
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,19 @@
    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <!-- https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP -->
    <meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'">
    <link href="./styles.css" rel="stylesheet">
    <title>Hello World!</title>
    </head>
    <body>
    <h1>Hello World!</h1>
    We are using Node.js <span id="node-version"></span>,
    Chromium <span id="chrome-version"></span>,
    and Electron <span id="electron-version"></span>.

    <!-- You can also require other files to run in this process -->
    <script src="./renderer.js"></script>
    </body>
    </html>
    56 changes: 56 additions & 0 deletions main.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,56 @@
    // Modules to control application life and create native browser window
    const {app, BrowserWindow} = require('electron')
    const path = require('path')

    const startTime = Date.now();
    console.log("[log][Code executing started...]");

    async function createWindow () {
    // Create the browser window.
    const mainWindow = new BrowserWindow({
    width: 800,
    height: 600,
    webPreferences: {
    preload: path.join(__dirname, 'preload.js')
    }
    })

    const preLoadFileTime = Date.now();
    console.log("[log][mainWindow.loadFile/loadURL called...]", Date.now() - startTime);

    await mainWindow.loadFile("index.html");
    //await mainWindow.loadURL("https://google.com"); // or

    console.log("[log][mainWindow.loadFile/loadURL completed]", Date.now() - preLoadFileTime);

    console.log("[log][Code executing completed]", Date.now() - startTime);
    // note: it's not the total time of the program loading,
    // only time of this code executing


    // Open the DevTools.
    // mainWindow.webContents.openDevTools()
    }

    // This method will be called when Electron has finished
    // initialization and is ready to create browser windows.
    // Some APIs can only be used after this event occurs.
    app.whenReady().then(() => {
    createWindow()

    app.on('activate', function () {
    // On macOS it's common to re-create a window in the app when the
    // dock icon is clicked and there are no other windows open.
    if (BrowserWindow.getAllWindows().length === 0) createWindow()
    })
    })

    // Quit when all windows are closed, except on macOS. There, it's common
    // for applications and their menu bar to stay active until the user quits
    // explicitly with Cmd + Q.
    app.on('window-all-closed', function () {
    if (process.platform !== 'darwin') app.quit()
    })

    // In this file you can include the rest of your app's specific main process
    // code. You can also put them in separate files and require them here.
    1,612 changes: 1,612 additions & 0 deletions package-lock.json
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,1612 @@
    {
    "name": "electron-quick-start",
    "version": "1.0.0",
    "lockfileVersion": 2,
    "requires": true,
    "packages": {
    "": {
    "version": "1.0.0",
    "license": "CC0-1.0",
    "devDependencies": {
    "electron": "^16.0.6"
    }
    },
    "node_modules/@electron/get": {
    "version": "1.13.1",
    "resolved": "https://registry.npmjs.org/@electron/get/-/get-1.13.1.tgz",
    "integrity": "sha512-U5vkXDZ9DwXtkPqlB45tfYnnYBN8PePp1z/XDCupnSpdrxT8/ThCv9WCwPLf9oqiSGZTkH6dx2jDUPuoXpjkcA==",
    "dev": true,
    "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"
    },
    "engines": {
    "node": ">=8.6"
    },
    "optionalDependencies": {
    "global-agent": "^3.0.0",
    "global-tunnel-ng": "^2.7.1"
    }
    },
    "node_modules/@sindresorhus/is": {
    "version": "0.14.0",
    "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz",
    "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==",
    "dev": true,
    "engines": {
    "node": ">=6"
    }
    },
    "node_modules/@szmarczak/http-timer": {
    "version": "1.1.2",
    "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz",
    "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==",
    "dev": true,
    "dependencies": {
    "defer-to-connect": "^1.0.1"
    },
    "engines": {
    "node": ">=6"
    }
    },
    "node_modules/@types/node": {
    "version": "14.18.4",
    "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.4.tgz",
    "integrity": "sha512-swe3lD4izOJWHuxvsZdDFRq6S9i6koJsXOnQKYekhSO5JTizMVirUFgY/bUsaOJQj8oSD4oxmRYPBM/0b6jpdw==",
    "dev": true
    },
    "node_modules/boolean": {
    "version": "3.1.4",
    "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.1.4.tgz",
    "integrity": "sha512-3hx0kwU3uzG6ReQ3pnaFQPSktpBw6RHN3/ivDKEuU8g1XSfafowyvDnadjv1xp8IZqhtSukxlwv9bF6FhX8m0w==",
    "dev": true,
    "optional": true
    },
    "node_modules/buffer-crc32": {
    "version": "0.2.13",
    "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
    "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=",
    "dev": true,
    "engines": {
    "node": "*"
    }
    },
    "node_modules/buffer-from": {
    "version": "1.1.2",
    "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
    "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
    "dev": true
    },
    "node_modules/cacheable-request": {
    "version": "6.1.0",
    "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz",
    "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==",
    "dev": true,
    "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"
    },
    "engines": {
    "node": ">=8"
    }
    },
    "node_modules/cacheable-request/node_modules/get-stream": {
    "version": "5.2.0",
    "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
    "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
    "dev": true,
    "dependencies": {
    "pump": "^3.0.0"
    },
    "engines": {
    "node": ">=8"
    },
    "funding": {
    "url": "https://github.com/sponsors/sindresorhus"
    }
    },
    "node_modules/cacheable-request/node_modules/lowercase-keys": {
    "version": "2.0.0",
    "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz",
    "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==",
    "dev": true,
    "engines": {
    "node": ">=8"
    }
    },
    "node_modules/clone-response": {
    "version": "1.0.2",
    "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz",
    "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=",
    "dev": true,
    "dependencies": {
    "mimic-response": "^1.0.0"
    }
    },
    "node_modules/concat-stream": {
    "version": "1.6.2",
    "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
    "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
    "dev": true,
    "engines": [
    "node >= 0.8"
    ],
    "dependencies": {
    "buffer-from": "^1.0.0",
    "inherits": "^2.0.3",
    "readable-stream": "^2.2.2",
    "typedarray": "^0.0.6"
    }
    },
    "node_modules/config-chain": {
    "version": "1.1.13",
    "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz",
    "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==",
    "dev": true,
    "optional": true,
    "dependencies": {
    "ini": "^1.3.4",
    "proto-list": "~1.2.1"
    }
    },
    "node_modules/core-util-is": {
    "version": "1.0.3",
    "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
    "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",
    "dev": true
    },
    "node_modules/debug": {
    "version": "4.3.3",
    "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
    "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
    "dev": true,
    "dependencies": {
    "ms": "2.1.2"
    },
    "engines": {
    "node": ">=6.0"
    },
    "peerDependenciesMeta": {
    "supports-color": {
    "optional": true
    }
    }
    },
    "node_modules/decompress-response": {
    "version": "3.3.0",
    "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz",
    "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=",
    "dev": true,
    "dependencies": {
    "mimic-response": "^1.0.0"
    },
    "engines": {
    "node": ">=4"
    }
    },
    "node_modules/defer-to-connect": {
    "version": "1.1.3",
    "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz",
    "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==",
    "dev": true
    },
    "node_modules/define-properties": {
    "version": "1.1.3",
    "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
    "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
    "dev": true,
    "optional": true,
    "dependencies": {
    "object-keys": "^1.0.12"
    },
    "engines": {
    "node": ">= 0.4"
    }
    },
    "node_modules/detect-node": {
    "version": "2.1.0",
    "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz",
    "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==",
    "dev": true,
    "optional": true
    },
    "node_modules/duplexer3": {
    "version": "0.1.4",
    "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz",
    "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=",
    "dev": true
    },
    "node_modules/electron": {
    "version": "16.0.6",
    "resolved": "https://registry.npmjs.org/electron/-/electron-16.0.6.tgz",
    "integrity": "sha512-Xs9dYLYhcJf3wXn8m2gDqFTb1L862KEhMxOx9swfFBHj6NoUPPtUgw/RyPQ0tXN1XPxG9vnBkoI0BdcKwrLKuQ==",
    "dev": true,
    "hasInstallScript": true,
    "dependencies": {
    "@electron/get": "^1.13.0",
    "@types/node": "^14.6.2",
    "extract-zip": "^1.0.3"
    },
    "bin": {
    "electron": "cli.js"
    },
    "engines": {
    "node": ">= 8.6"
    }
    },
    "node_modules/encodeurl": {
    "version": "1.0.2",
    "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
    "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
    "dev": true,
    "optional": true,
    "engines": {
    "node": ">= 0.8"
    }
    },
    "node_modules/end-of-stream": {
    "version": "1.4.4",
    "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
    "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
    "dev": true,
    "dependencies": {
    "once": "^1.4.0"
    }
    },
    "node_modules/env-paths": {
    "version": "2.2.1",
    "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz",
    "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==",
    "dev": true,
    "engines": {
    "node": ">=6"
    }
    },
    "node_modules/es6-error": {
    "version": "4.1.1",
    "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz",
    "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==",
    "dev": true,
    "optional": true
    },
    "node_modules/escape-string-regexp": {
    "version": "4.0.0",
    "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
    "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
    "dev": true,
    "optional": true,
    "engines": {
    "node": ">=10"
    },
    "funding": {
    "url": "https://github.com/sponsors/sindresorhus"
    }
    },
    "node_modules/extract-zip": {
    "version": "1.7.0",
    "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz",
    "integrity": "sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==",
    "dev": true,
    "dependencies": {
    "concat-stream": "^1.6.2",
    "debug": "^2.6.9",
    "mkdirp": "^0.5.4",
    "yauzl": "^2.10.0"
    },
    "bin": {
    "extract-zip": "cli.js"
    }
    },
    "node_modules/extract-zip/node_modules/debug": {
    "version": "2.6.9",
    "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
    "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
    "dev": true,
    "dependencies": {
    "ms": "2.0.0"
    }
    },
    "node_modules/extract-zip/node_modules/ms": {
    "version": "2.0.0",
    "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
    "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
    "dev": true
    },
    "node_modules/fd-slicer": {
    "version": "1.1.0",
    "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
    "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=",
    "dev": true,
    "dependencies": {
    "pend": "~1.2.0"
    }
    },
    "node_modules/fs-extra": {
    "version": "8.1.0",
    "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
    "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
    "dev": true,
    "dependencies": {
    "graceful-fs": "^4.2.0",
    "jsonfile": "^4.0.0",
    "universalify": "^0.1.0"
    },
    "engines": {
    "node": ">=6 <7 || >=8"
    }
    },
    "node_modules/get-stream": {
    "version": "4.1.0",
    "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
    "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
    "dev": true,
    "dependencies": {
    "pump": "^3.0.0"
    },
    "engines": {
    "node": ">=6"
    }
    },
    "node_modules/global-agent": {
    "version": "3.0.0",
    "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz",
    "integrity": "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==",
    "dev": true,
    "optional": true,
    "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"
    },
    "engines": {
    "node": ">=10.0"
    }
    },
    "node_modules/global-agent/node_modules/semver": {
    "version": "7.3.5",
    "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
    "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
    "dev": true,
    "optional": true,
    "dependencies": {
    "lru-cache": "^6.0.0"
    },
    "bin": {
    "semver": "bin/semver.js"
    },
    "engines": {
    "node": ">=10"
    }
    },
    "node_modules/global-tunnel-ng": {
    "version": "2.7.1",
    "resolved": "https://registry.npmjs.org/global-tunnel-ng/-/global-tunnel-ng-2.7.1.tgz",
    "integrity": "sha512-4s+DyciWBV0eK148wqXxcmVAbFVPqtc3sEtUE/GTQfuU80rySLcMhUmHKSHI7/LDj8q0gDYI1lIhRRB7ieRAqg==",
    "dev": true,
    "optional": true,
    "dependencies": {
    "encodeurl": "^1.0.2",
    "lodash": "^4.17.10",
    "npm-conf": "^1.1.3",
    "tunnel": "^0.0.6"
    },
    "engines": {
    "node": ">=0.10"
    }
    },
    "node_modules/globalthis": {
    "version": "1.0.2",
    "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.2.tgz",
    "integrity": "sha512-ZQnSFO1la8P7auIOQECnm0sSuoMeaSq0EEdXMBFF2QJO4uNcwbyhSgG3MruWNbFTqCLmxVwGOl7LZ9kASvHdeQ==",
    "dev": true,
    "optional": true,
    "dependencies": {
    "define-properties": "^1.1.3"
    },
    "engines": {
    "node": ">= 0.4"
    },
    "funding": {
    "url": "https://github.com/sponsors/ljharb"
    }
    },
    "node_modules/got": {
    "version": "9.6.0",
    "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz",
    "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==",
    "dev": true,
    "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"
    },
    "engines": {
    "node": ">=8.6"
    }
    },
    "node_modules/graceful-fs": {
    "version": "4.2.8",
    "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz",
    "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==",
    "dev": true
    },
    "node_modules/http-cache-semantics": {
    "version": "4.1.0",
    "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz",
    "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==",
    "dev": true
    },
    "node_modules/inherits": {
    "version": "2.0.4",
    "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
    "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
    "dev": true
    },
    "node_modules/ini": {
    "version": "1.3.8",
    "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
    "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
    "dev": true,
    "optional": true
    },
    "node_modules/isarray": {
    "version": "1.0.0",
    "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
    "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
    "dev": true
    },
    "node_modules/json-buffer": {
    "version": "3.0.0",
    "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz",
    "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=",
    "dev": true
    },
    "node_modules/json-stringify-safe": {
    "version": "5.0.1",
    "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
    "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
    "dev": true,
    "optional": true
    },
    "node_modules/jsonfile": {
    "version": "4.0.0",
    "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
    "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
    "dev": true,
    "optionalDependencies": {
    "graceful-fs": "^4.1.6"
    }
    },
    "node_modules/keyv": {
    "version": "3.1.0",
    "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz",
    "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==",
    "dev": true,
    "dependencies": {
    "json-buffer": "3.0.0"
    }
    },
    "node_modules/lodash": {
    "version": "4.17.21",
    "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
    "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
    "dev": true,
    "optional": true
    },
    "node_modules/lowercase-keys": {
    "version": "1.0.1",
    "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
    "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==",
    "dev": true,
    "engines": {
    "node": ">=0.10.0"
    }
    },
    "node_modules/lru-cache": {
    "version": "6.0.0",
    "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
    "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
    "dev": true,
    "optional": true,
    "dependencies": {
    "yallist": "^4.0.0"
    },
    "engines": {
    "node": ">=10"
    }
    },
    "node_modules/matcher": {
    "version": "3.0.0",
    "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz",
    "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==",
    "dev": true,
    "optional": true,
    "dependencies": {
    "escape-string-regexp": "^4.0.0"
    },
    "engines": {
    "node": ">=10"
    }
    },
    "node_modules/mimic-response": {
    "version": "1.0.1",
    "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
    "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==",
    "dev": true,
    "engines": {
    "node": ">=4"
    }
    },
    "node_modules/minimist": {
    "version": "1.2.5",
    "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
    "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
    "dev": true
    },
    "node_modules/mkdirp": {
    "version": "0.5.5",
    "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
    "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
    "dev": true,
    "dependencies": {
    "minimist": "^1.2.5"
    },
    "bin": {
    "mkdirp": "bin/cmd.js"
    }
    },
    "node_modules/ms": {
    "version": "2.1.2",
    "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
    "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
    "dev": true
    },
    "node_modules/normalize-url": {
    "version": "4.5.1",
    "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz",
    "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==",
    "dev": true,
    "engines": {
    "node": ">=8"
    }
    },
    "node_modules/npm-conf": {
    "version": "1.1.3",
    "resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz",
    "integrity": "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==",
    "dev": true,
    "optional": true,
    "dependencies": {
    "config-chain": "^1.1.11",
    "pify": "^3.0.0"
    },
    "engines": {
    "node": ">=4"
    }
    },
    "node_modules/object-keys": {
    "version": "1.1.1",
    "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
    "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
    "dev": true,
    "optional": true,
    "engines": {
    "node": ">= 0.4"
    }
    },
    "node_modules/once": {
    "version": "1.4.0",
    "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
    "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
    "dev": true,
    "dependencies": {
    "wrappy": "1"
    }
    },
    "node_modules/p-cancelable": {
    "version": "1.1.0",
    "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz",
    "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==",
    "dev": true,
    "engines": {
    "node": ">=6"
    }
    },
    "node_modules/pend": {
    "version": "1.2.0",
    "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
    "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=",
    "dev": true
    },
    "node_modules/pify": {
    "version": "3.0.0",
    "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
    "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
    "dev": true,
    "optional": true,
    "engines": {
    "node": ">=4"
    }
    },
    "node_modules/prepend-http": {
    "version": "2.0.0",
    "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz",
    "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=",
    "dev": true,
    "engines": {
    "node": ">=4"
    }
    },
    "node_modules/process-nextick-args": {
    "version": "2.0.1",
    "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
    "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
    "dev": true
    },
    "node_modules/progress": {
    "version": "2.0.3",
    "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
    "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
    "dev": true,
    "engines": {
    "node": ">=0.4.0"
    }
    },
    "node_modules/proto-list": {
    "version": "1.2.4",
    "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz",
    "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=",
    "dev": true,
    "optional": true
    },
    "node_modules/pump": {
    "version": "3.0.0",
    "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
    "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
    "dev": true,
    "dependencies": {
    "end-of-stream": "^1.1.0",
    "once": "^1.3.1"
    }
    },
    "node_modules/readable-stream": {
    "version": "2.3.7",
    "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
    "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
    "dev": true,
    "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"
    }
    },
    "node_modules/responselike": {
    "version": "1.0.2",
    "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz",
    "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=",
    "dev": true,
    "dependencies": {
    "lowercase-keys": "^1.0.0"
    }
    },
    "node_modules/roarr": {
    "version": "2.15.4",
    "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz",
    "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==",
    "dev": true,
    "optional": true,
    "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"
    },
    "engines": {
    "node": ">=8.0"
    }
    },
    "node_modules/safe-buffer": {
    "version": "5.1.2",
    "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
    "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
    "dev": true
    },
    "node_modules/semver": {
    "version": "6.3.0",
    "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
    "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
    "dev": true,
    "bin": {
    "semver": "bin/semver.js"
    }
    },
    "node_modules/semver-compare": {
    "version": "1.0.0",
    "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz",
    "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=",
    "dev": true,
    "optional": true
    },
    "node_modules/serialize-error": {
    "version": "7.0.1",
    "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz",
    "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==",
    "dev": true,
    "optional": true,
    "dependencies": {
    "type-fest": "^0.13.1"
    },
    "engines": {
    "node": ">=10"
    },
    "funding": {
    "url": "https://github.com/sponsors/sindresorhus"
    }
    },
    "node_modules/sprintf-js": {
    "version": "1.1.2",
    "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz",
    "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==",
    "dev": true,
    "optional": true
    },
    "node_modules/string_decoder": {
    "version": "1.1.1",
    "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
    "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
    "dev": true,
    "dependencies": {
    "safe-buffer": "~5.1.0"
    }
    },
    "node_modules/sumchecker": {
    "version": "3.0.1",
    "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz",
    "integrity": "sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==",
    "dev": true,
    "dependencies": {
    "debug": "^4.1.0"
    },
    "engines": {
    "node": ">= 8.0"
    }
    },
    "node_modules/to-readable-stream": {
    "version": "1.0.0",
    "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz",
    "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==",
    "dev": true,
    "engines": {
    "node": ">=6"
    }
    },
    "node_modules/tunnel": {
    "version": "0.0.6",
    "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz",
    "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==",
    "dev": true,
    "optional": true,
    "engines": {
    "node": ">=0.6.11 <=0.7.0 || >=0.7.3"
    }
    },
    "node_modules/type-fest": {
    "version": "0.13.1",
    "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz",
    "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==",
    "dev": true,
    "optional": true,
    "engines": {
    "node": ">=10"
    },
    "funding": {
    "url": "https://github.com/sponsors/sindresorhus"
    }
    },
    "node_modules/typedarray": {
    "version": "0.0.6",
    "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
    "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
    "dev": true
    },
    "node_modules/universalify": {
    "version": "0.1.2",
    "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
    "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
    "dev": true,
    "engines": {
    "node": ">= 4.0.0"
    }
    },
    "node_modules/url-parse-lax": {
    "version": "3.0.0",
    "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz",
    "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=",
    "dev": true,
    "dependencies": {
    "prepend-http": "^2.0.0"
    },
    "engines": {
    "node": ">=4"
    }
    },
    "node_modules/util-deprecate": {
    "version": "1.0.2",
    "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
    "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
    "dev": true
    },
    "node_modules/wrappy": {
    "version": "1.0.2",
    "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
    "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
    "dev": true
    },
    "node_modules/yallist": {
    "version": "4.0.0",
    "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
    "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
    "dev": true,
    "optional": true
    },
    "node_modules/yauzl": {
    "version": "2.10.0",
    "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
    "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=",
    "dev": true,
    "dependencies": {
    "buffer-crc32": "~0.2.3",
    "fd-slicer": "~1.1.0"
    }
    }
    },
    "dependencies": {
    "@electron/get": {
    "version": "1.13.1",
    "resolved": "https://registry.npmjs.org/@electron/get/-/get-1.13.1.tgz",
    "integrity": "sha512-U5vkXDZ9DwXtkPqlB45tfYnnYBN8PePp1z/XDCupnSpdrxT8/ThCv9WCwPLf9oqiSGZTkH6dx2jDUPuoXpjkcA==",
    "dev": true,
    "requires": {
    "debug": "^4.1.1",
    "env-paths": "^2.2.0",
    "fs-extra": "^8.1.0",
    "global-agent": "^3.0.0",
    "global-tunnel-ng": "^2.7.1",
    "got": "^9.6.0",
    "progress": "^2.0.3",
    "semver": "^6.2.0",
    "sumchecker": "^3.0.1"
    }
    },
    "@sindresorhus/is": {
    "version": "0.14.0",
    "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz",
    "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==",
    "dev": true
    },
    "@szmarczak/http-timer": {
    "version": "1.1.2",
    "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz",
    "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==",
    "dev": true,
    "requires": {
    "defer-to-connect": "^1.0.1"
    }
    },
    "@types/node": {
    "version": "14.18.4",
    "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.4.tgz",
    "integrity": "sha512-swe3lD4izOJWHuxvsZdDFRq6S9i6koJsXOnQKYekhSO5JTizMVirUFgY/bUsaOJQj8oSD4oxmRYPBM/0b6jpdw==",
    "dev": true
    },
    "boolean": {
    "version": "3.1.4",
    "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.1.4.tgz",
    "integrity": "sha512-3hx0kwU3uzG6ReQ3pnaFQPSktpBw6RHN3/ivDKEuU8g1XSfafowyvDnadjv1xp8IZqhtSukxlwv9bF6FhX8m0w==",
    "dev": true,
    "optional": true
    },
    "buffer-crc32": {
    "version": "0.2.13",
    "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
    "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=",
    "dev": true
    },
    "buffer-from": {
    "version": "1.1.2",
    "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
    "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
    "dev": true
    },
    "cacheable-request": {
    "version": "6.1.0",
    "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz",
    "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==",
    "dev": true,
    "requires": {
    "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"
    },
    "dependencies": {
    "get-stream": {
    "version": "5.2.0",
    "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
    "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
    "dev": true,
    "requires": {
    "pump": "^3.0.0"
    }
    },
    "lowercase-keys": {
    "version": "2.0.0",
    "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz",
    "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==",
    "dev": true
    }
    }
    },
    "clone-response": {
    "version": "1.0.2",
    "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz",
    "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=",
    "dev": true,
    "requires": {
    "mimic-response": "^1.0.0"
    }
    },
    "concat-stream": {
    "version": "1.6.2",
    "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
    "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
    "dev": true,
    "requires": {
    "buffer-from": "^1.0.0",
    "inherits": "^2.0.3",
    "readable-stream": "^2.2.2",
    "typedarray": "^0.0.6"
    }
    },
    "config-chain": {
    "version": "1.1.13",
    "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz",
    "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==",
    "dev": true,
    "optional": true,
    "requires": {
    "ini": "^1.3.4",
    "proto-list": "~1.2.1"
    }
    },
    "core-util-is": {
    "version": "1.0.3",
    "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
    "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",
    "dev": true
    },
    "debug": {
    "version": "4.3.3",
    "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
    "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
    "dev": true,
    "requires": {
    "ms": "2.1.2"
    }
    },
    "decompress-response": {
    "version": "3.3.0",
    "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz",
    "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=",
    "dev": true,
    "requires": {
    "mimic-response": "^1.0.0"
    }
    },
    "defer-to-connect": {
    "version": "1.1.3",
    "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz",
    "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==",
    "dev": true
    },
    "define-properties": {
    "version": "1.1.3",
    "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
    "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
    "dev": true,
    "optional": true,
    "requires": {
    "object-keys": "^1.0.12"
    }
    },
    "detect-node": {
    "version": "2.1.0",
    "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz",
    "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==",
    "dev": true,
    "optional": true
    },
    "duplexer3": {
    "version": "0.1.4",
    "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz",
    "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=",
    "dev": true
    },
    "electron": {
    "version": "16.0.6",
    "resolved": "https://registry.npmjs.org/electron/-/electron-16.0.6.tgz",
    "integrity": "sha512-Xs9dYLYhcJf3wXn8m2gDqFTb1L862KEhMxOx9swfFBHj6NoUPPtUgw/RyPQ0tXN1XPxG9vnBkoI0BdcKwrLKuQ==",
    "dev": true,
    "requires": {
    "@electron/get": "^1.13.0",
    "@types/node": "^14.6.2",
    "extract-zip": "^1.0.3"
    }
    },
    "encodeurl": {
    "version": "1.0.2",
    "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
    "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
    "dev": true,
    "optional": true
    },
    "end-of-stream": {
    "version": "1.4.4",
    "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
    "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
    "dev": true,
    "requires": {
    "once": "^1.4.0"
    }
    },
    "env-paths": {
    "version": "2.2.1",
    "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz",
    "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==",
    "dev": true
    },
    "es6-error": {
    "version": "4.1.1",
    "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz",
    "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==",
    "dev": true,
    "optional": true
    },
    "escape-string-regexp": {
    "version": "4.0.0",
    "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
    "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
    "dev": true,
    "optional": true
    },
    "extract-zip": {
    "version": "1.7.0",
    "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz",
    "integrity": "sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==",
    "dev": true,
    "requires": {
    "concat-stream": "^1.6.2",
    "debug": "^2.6.9",
    "mkdirp": "^0.5.4",
    "yauzl": "^2.10.0"
    },
    "dependencies": {
    "debug": {
    "version": "2.6.9",
    "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
    "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
    "dev": true,
    "requires": {
    "ms": "2.0.0"
    }
    },
    "ms": {
    "version": "2.0.0",
    "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
    "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
    "dev": true
    }
    }
    },
    "fd-slicer": {
    "version": "1.1.0",
    "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
    "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=",
    "dev": true,
    "requires": {
    "pend": "~1.2.0"
    }
    },
    "fs-extra": {
    "version": "8.1.0",
    "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
    "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
    "dev": true,
    "requires": {
    "graceful-fs": "^4.2.0",
    "jsonfile": "^4.0.0",
    "universalify": "^0.1.0"
    }
    },
    "get-stream": {
    "version": "4.1.0",
    "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
    "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
    "dev": true,
    "requires": {
    "pump": "^3.0.0"
    }
    },
    "global-agent": {
    "version": "3.0.0",
    "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz",
    "integrity": "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==",
    "dev": true,
    "optional": true,
    "requires": {
    "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"
    },
    "dependencies": {
    "semver": {
    "version": "7.3.5",
    "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
    "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
    "dev": true,
    "optional": true,
    "requires": {
    "lru-cache": "^6.0.0"
    }
    }
    }
    },
    "global-tunnel-ng": {
    "version": "2.7.1",
    "resolved": "https://registry.npmjs.org/global-tunnel-ng/-/global-tunnel-ng-2.7.1.tgz",
    "integrity": "sha512-4s+DyciWBV0eK148wqXxcmVAbFVPqtc3sEtUE/GTQfuU80rySLcMhUmHKSHI7/LDj8q0gDYI1lIhRRB7ieRAqg==",
    "dev": true,
    "optional": true,
    "requires": {
    "encodeurl": "^1.0.2",
    "lodash": "^4.17.10",
    "npm-conf": "^1.1.3",
    "tunnel": "^0.0.6"
    }
    },
    "globalthis": {
    "version": "1.0.2",
    "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.2.tgz",
    "integrity": "sha512-ZQnSFO1la8P7auIOQECnm0sSuoMeaSq0EEdXMBFF2QJO4uNcwbyhSgG3MruWNbFTqCLmxVwGOl7LZ9kASvHdeQ==",
    "dev": true,
    "optional": true,
    "requires": {
    "define-properties": "^1.1.3"
    }
    },
    "got": {
    "version": "9.6.0",
    "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz",
    "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==",
    "dev": true,
    "requires": {
    "@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": {
    "version": "4.2.8",
    "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz",
    "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==",
    "dev": true
    },
    "http-cache-semantics": {
    "version": "4.1.0",
    "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz",
    "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==",
    "dev": true
    },
    "inherits": {
    "version": "2.0.4",
    "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
    "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
    "dev": true
    },
    "ini": {
    "version": "1.3.8",
    "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
    "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
    "dev": true,
    "optional": true
    },
    "isarray": {
    "version": "1.0.0",
    "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
    "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
    "dev": true
    },
    "json-buffer": {
    "version": "3.0.0",
    "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz",
    "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=",
    "dev": true
    },
    "json-stringify-safe": {
    "version": "5.0.1",
    "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
    "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
    "dev": true,
    "optional": true
    },
    "jsonfile": {
    "version": "4.0.0",
    "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
    "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
    "dev": true,
    "requires": {
    "graceful-fs": "^4.1.6"
    }
    },
    "keyv": {
    "version": "3.1.0",
    "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz",
    "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==",
    "dev": true,
    "requires": {
    "json-buffer": "3.0.0"
    }
    },
    "lodash": {
    "version": "4.17.21",
    "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
    "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
    "dev": true,
    "optional": true
    },
    "lowercase-keys": {
    "version": "1.0.1",
    "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
    "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==",
    "dev": true
    },
    "lru-cache": {
    "version": "6.0.0",
    "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
    "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
    "dev": true,
    "optional": true,
    "requires": {
    "yallist": "^4.0.0"
    }
    },
    "matcher": {
    "version": "3.0.0",
    "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz",
    "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==",
    "dev": true,
    "optional": true,
    "requires": {
    "escape-string-regexp": "^4.0.0"
    }
    },
    "mimic-response": {
    "version": "1.0.1",
    "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
    "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==",
    "dev": true
    },
    "minimist": {
    "version": "1.2.5",
    "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
    "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
    "dev": true
    },
    "mkdirp": {
    "version": "0.5.5",
    "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
    "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
    "dev": true,
    "requires": {
    "minimist": "^1.2.5"
    }
    },
    "ms": {
    "version": "2.1.2",
    "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
    "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
    "dev": true
    },
    "normalize-url": {
    "version": "4.5.1",
    "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz",
    "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==",
    "dev": true
    },
    "npm-conf": {
    "version": "1.1.3",
    "resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz",
    "integrity": "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==",
    "dev": true,
    "optional": true,
    "requires": {
    "config-chain": "^1.1.11",
    "pify": "^3.0.0"
    }
    },
    "object-keys": {
    "version": "1.1.1",
    "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
    "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
    "dev": true,
    "optional": true
    },
    "once": {
    "version": "1.4.0",
    "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
    "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
    "dev": true,
    "requires": {
    "wrappy": "1"
    }
    },
    "p-cancelable": {
    "version": "1.1.0",
    "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz",
    "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==",
    "dev": true
    },
    "pend": {
    "version": "1.2.0",
    "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
    "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=",
    "dev": true
    },
    "pify": {
    "version": "3.0.0",
    "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
    "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
    "dev": true,
    "optional": true
    },
    "prepend-http": {
    "version": "2.0.0",
    "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz",
    "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=",
    "dev": true
    },
    "process-nextick-args": {
    "version": "2.0.1",
    "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
    "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
    "dev": true
    },
    "progress": {
    "version": "2.0.3",
    "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
    "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
    "dev": true
    },
    "proto-list": {
    "version": "1.2.4",
    "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz",
    "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=",
    "dev": true,
    "optional": true
    },
    "pump": {
    "version": "3.0.0",
    "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
    "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
    "dev": true,
    "requires": {
    "end-of-stream": "^1.1.0",
    "once": "^1.3.1"
    }
    },
    "readable-stream": {
    "version": "2.3.7",
    "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
    "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
    "dev": true,
    "requires": {
    "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": {
    "version": "1.0.2",
    "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz",
    "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=",
    "dev": true,
    "requires": {
    "lowercase-keys": "^1.0.0"
    }
    },
    "roarr": {
    "version": "2.15.4",
    "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz",
    "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==",
    "dev": true,
    "optional": true,
    "requires": {
    "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": {
    "version": "5.1.2",
    "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
    "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
    "dev": true
    },
    "semver": {
    "version": "6.3.0",
    "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
    "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
    "dev": true
    },
    "semver-compare": {
    "version": "1.0.0",
    "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz",
    "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=",
    "dev": true,
    "optional": true
    },
    "serialize-error": {
    "version": "7.0.1",
    "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz",
    "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==",
    "dev": true,
    "optional": true,
    "requires": {
    "type-fest": "^0.13.1"
    }
    },
    "sprintf-js": {
    "version": "1.1.2",
    "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz",
    "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==",
    "dev": true,
    "optional": true
    },
    "string_decoder": {
    "version": "1.1.1",
    "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
    "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
    "dev": true,
    "requires": {
    "safe-buffer": "~5.1.0"
    }
    },
    "sumchecker": {
    "version": "3.0.1",
    "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz",
    "integrity": "sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==",
    "dev": true,
    "requires": {
    "debug": "^4.1.0"
    }
    },
    "to-readable-stream": {
    "version": "1.0.0",
    "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz",
    "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==",
    "dev": true
    },
    "tunnel": {
    "version": "0.0.6",
    "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz",
    "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==",
    "dev": true,
    "optional": true
    },
    "type-fest": {
    "version": "0.13.1",
    "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz",
    "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==",
    "dev": true,
    "optional": true
    },
    "typedarray": {
    "version": "0.0.6",
    "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
    "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
    "dev": true
    },
    "universalify": {
    "version": "0.1.2",
    "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
    "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
    "dev": true
    },
    "url-parse-lax": {
    "version": "3.0.0",
    "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz",
    "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=",
    "dev": true,
    "requires": {
    "prepend-http": "^2.0.0"
    }
    },
    "util-deprecate": {
    "version": "1.0.2",
    "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
    "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
    "dev": true
    },
    "wrappy": {
    "version": "1.0.2",
    "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
    "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
    "dev": true
    },
    "yallist": {
    "version": "4.0.0",
    "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
    "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
    "dev": true,
    "optional": true
    },
    "yauzl": {
    "version": "2.10.0",
    "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
    "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=",
    "dev": true,
    "requires": {
    "buffer-crc32": "~0.2.3",
    "fd-slicer": "~1.1.0"
    }
    }
    }
    }
    22 changes: 22 additions & 0 deletions package.json
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,22 @@
    {
    "name": "electron-quick-start",
    "version": "2.0.0",
    "description": "A minimal Electron application",
    "main": "main.js",
    "scripts": {
    "start": "electron ."
    },
    "repository": "https://github.com/electron/electron-quick-start",
    "keywords": [
    "Electron",
    "quick",
    "start",
    "tutorial",
    "demo"
    ],
    "author": "GitHub",
    "license": "CC0-1.0",
    "devDependencies": {
    "electron": "16.0.6"
    }
    }
    12 changes: 12 additions & 0 deletions preload.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,12 @@
    // All of the Node.js APIs are available in the preload process.
    // It has the same sandbox as a Chrome extension.
    window.addEventListener('DOMContentLoaded', () => {
    const replaceText = (selector, text) => {
    const element = document.getElementById(selector)
    if (element) element.innerText = text
    }

    for (const type of ['chrome', 'node', 'electron']) {
    replaceText(`${type}-version`, process.versions[type])
    }
    })
    21 changes: 21 additions & 0 deletions process-bench.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,21 @@
    const {exec} = require("child_process");

    const command = process.argv[2];
    if (!command) {
    console.log("[error] process.argv[2] is empty");
    }

    const startTime = Date.now();
    const proc = exec(command);
    console.log(`[exec start][${command}]`, Date.now() - startTime);

    proc.stdout.on("data", data => {
    console.log("[data]", Date.now() - startTime);
    console.log(data);
    });
    proc.stdout.on("end", () => {
    console.log("[exec end]", Date.now() - startTime);
    });

    proc.on("error", e => console.log("[error][stdout]", e));
    proc.stdout.on("error", e => console.log("[error]", e));
    4 changes: 4 additions & 0 deletions readme.md
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,4 @@
    - Download [this]() as ZIP
    - Run `node process-bench.js "electron ."`
    - Run `node process-bench.js "npm start"`
    - Run `node process-bench.js "yarn start"`
    6 changes: 6 additions & 0 deletions renderer.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,6 @@
    // This file is required by the index.html file and will
    // be executed in the renderer process for that window.
    // No Node.js APIs are available in this process because
    // `nodeIntegration` is turned off. Use `preload.js` to
    // selectively enable features needed in the rendering
    // process.
    3 changes: 3 additions & 0 deletions styles.css
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,3 @@
    /* styles.css */

    /* Add styles here to customize the appearance of your app */