├── .editorconfig ├── .eslintrc.json ├── .github ├── CODEOWNERS ├── dependabot.yml └── workflows │ ├── add-to-project.yml │ ├── release.yml │ ├── semantic.yml │ └── test.yml ├── .gitignore ├── .releaserc.json ├── LICENSE ├── README.md ├── package.json ├── resources └── install-spinner.gif ├── script └── select-7z-arch.js ├── spec ├── convert-version-spec.ts ├── fixtures │ └── app │ │ ├── LICENSE │ │ ├── chromiumcontent.dll │ │ ├── d3dcompiler_47.dll │ │ ├── ffmpegsumo.dll │ │ ├── icudtl.dat │ │ ├── locales │ │ └── en.pak │ │ ├── msvcp120.dll │ │ ├── msvcr120.dll │ │ ├── myapp.exe │ │ ├── natives_blob.bin │ │ ├── resources │ │ └── app │ │ │ └── package.json │ │ ├── snapshot_blob.bin │ │ ├── swiftshader │ │ ├── libEGL.dll │ │ └── libGLESv2.dll │ │ ├── vccorlib120.dll │ │ ├── vk_swiftshader.dll │ │ ├── vk_swiftshader_icd.json │ │ └── xinput1_3.dll ├── helpers │ ├── helpers.ts │ └── windowsSignHook.js ├── installer-spec.ts └── sign-spec.ts ├── src ├── index.ts ├── options.ts ├── sign.ts ├── spawn-promise.ts └── temp-utils.ts ├── template.nuspectemplate ├── tsconfig.json ├── typedoc.json ├── vendor ├── 7z-arm64.dll ├── 7z-arm64.exe ├── 7z-x64.dll ├── 7z-x64.exe ├── Microsoft.Deployment.Resources.dll ├── Microsoft.Deployment.WindowsInstaller.dll ├── Setup.exe ├── Setup.pdb ├── Squirrel-Mono.exe ├── Squirrel-Mono.pdb ├── Squirrel.com ├── Squirrel.exe ├── Squirrel.pdb ├── StubExecutable.exe ├── SyncReleases.exe ├── SyncReleases.pdb ├── WixNetFxExtension.dll ├── WriteZipToSetup.exe ├── WriteZipToSetup.pdb ├── candle.exe ├── candle.exe.config ├── darice.cub ├── light.exe ├── light.exe.config ├── nuget.exe ├── rcedit.exe ├── signtool.exe ├── template.wxs ├── wconsole.dll ├── winterop.dll └── wix.dll └── yarn.lock /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | indent_style = space 5 | indent_size = 2 6 | end_of_line = lf 7 | charset = utf-8 8 | trim_trailing_whitespace = true 9 | insert_final_newline = true -------------------------------------------------------------------------------- /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "parser": "@typescript-eslint/parser", 3 | "plugins": [ 4 | "@typescript-eslint", 5 | "ava" 6 | ], 7 | "extends": [ 8 | "plugin:@typescript-eslint/recommended", 9 | "plugin:ava/recommended", 10 | "eslint:recommended" 11 | ], 12 | "rules": { 13 | "strict": 0, 14 | "@typescript-eslint/indent": [ 15 | 2, 16 | 2 17 | ], 18 | "@typescript-eslint/no-var-requires": "off", 19 | "semi": [ 20 | 2, 21 | "always" 22 | ], 23 | "no-console": 0, 24 | "quotes": [2, "single", "avoid-escape"] 25 | }, 26 | "env": { 27 | "es6": true, 28 | "node": true 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /.github/CODEOWNERS: -------------------------------------------------------------------------------- 1 | * @electron/wg-ecosystem 2 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: "github-actions" 4 | directory: "/" 5 | schedule: 6 | interval: "monthly" 7 | -------------------------------------------------------------------------------- /.github/workflows/add-to-project.yml: -------------------------------------------------------------------------------- 1 | name: Add to Ecosystem WG Project 2 | 3 | on: 4 | issues: 5 | types: 6 | - opened 7 | pull_request_target: 8 | types: 9 | - opened 10 | 11 | permissions: {} 12 | 13 | jobs: 14 | add-to-project: 15 | runs-on: ubuntu-latest 16 | steps: 17 | - name: Generate GitHub App token 18 | uses: electron/github-app-auth-action@384fd19694fe7b6dcc9a684746c6976ad78228ae # v1.1.1 19 | id: generate-token 20 | with: 21 | creds: ${{ secrets.ECOSYSTEM_ISSUE_TRIAGE_GH_APP_CREDS }} 22 | org: electron 23 | - name: Add to Project 24 | uses: dsanders11/project-actions/add-item@2134fe7cc71c58b7ae259c82a8e63c6058255678 # v1.7.0 25 | with: 26 | field: Opened 27 | field-value: ${{ github.event.pull_request.created_at || github.event.issue.created_at }} 28 | project-number: 89 29 | token: ${{ steps.generate-token.outputs.token }} 30 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: Release 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | 8 | jobs: 9 | test: 10 | uses: ./.github/workflows/test.yml 11 | 12 | release: 13 | name: Release 14 | runs-on: ubuntu-latest 15 | needs: test 16 | environment: npm 17 | permissions: 18 | id-token: write # for CFA and npm provenance 19 | steps: 20 | - name: Checkout 21 | uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 22 | with: 23 | persist-credentials: false 24 | - name: Setup Node.js 25 | uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 26 | with: 27 | node-version: 20.x 28 | cache: 'yarn' 29 | - name: Install 30 | run: yarn install --frozen-lockfile 31 | - uses: continuousauth/action@4e8a2573eeb706f6d7300d6a9f3ca6322740b72d # v1.0.5 32 | timeout-minutes: 60 33 | with: 34 | project-id: ${{ secrets.CFA_PROJECT_ID }} 35 | secret: ${{ secrets.CFA_SECRET }} 36 | npm-token: ${{ secrets.NPM_TOKEN }} 37 | -------------------------------------------------------------------------------- /.github/workflows/semantic.yml: -------------------------------------------------------------------------------- 1 | name: "Check Semantic Commit" 2 | 3 | on: 4 | pull_request: 5 | types: 6 | - opened 7 | - edited 8 | - synchronize 9 | 10 | permissions: 11 | contents: read 12 | 13 | jobs: 14 | main: 15 | permissions: 16 | pull-requests: read # for amannn/action-semantic-pull-request to analyze PRs 17 | statuses: write # for amannn/action-semantic-pull-request to mark status of analyzed PR 18 | name: Validate PR Title 19 | runs-on: ubuntu-latest 20 | steps: 21 | - name: semantic-pull-request 22 | uses: amannn/action-semantic-pull-request@0723387faaf9b38adef4775cd42cfd5155ed6017 # v5.5.3 23 | env: 24 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 25 | with: 26 | validateSingleCommit: false 27 | -------------------------------------------------------------------------------- /.github/workflows/test.yml: -------------------------------------------------------------------------------- 1 | name: Test 2 | 3 | on: 4 | pull_request: 5 | branches: 6 | - main 7 | schedule: 8 | - cron: '0 22 * * 3' 9 | workflow_call: 10 | 11 | permissions: 12 | contents: read 13 | 14 | jobs: 15 | test: 16 | name: Test 17 | strategy: 18 | matrix: 19 | node-version: 20 | - '20.19' 21 | - '18.18' 22 | - '16.20' 23 | - '14.21' 24 | os: 25 | - ubuntu-22.04 26 | - windows-latest 27 | runs-on: "${{ matrix.os }}" 28 | env: 29 | WINEDLLOVERRIDES: mscoree,mshtml= 30 | WINEDEBUG: -all 31 | steps: 32 | - name: Install Dependencies (Linux) 33 | if : ${{ matrix.os == 'ubuntu-22.04' }} 34 | run: | 35 | sudo dpkg --add-architecture i386 36 | sudo apt-get -qq update 37 | sudo apt-get install --no-install-recommends -y wine64 wine32 wine mono-devel 38 | wine64 hostname 39 | - name: Checkout 40 | uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 41 | - name: Setup Node.js 42 | uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 43 | with: 44 | node-version: "${{ matrix.node-version }}" 45 | cache: 'yarn' 46 | - name: Install (Node.js v16+) 47 | if : ${{ matrix.node-version != '14.21' }} 48 | run: yarn install --frozen-lockfile 49 | - name: Install (Node.js v14) 50 | if : ${{ matrix.node-version == '14.21' }} 51 | run: yarn install --frozen-lockfile --ignore-engines 52 | - name: Test 53 | run: yarn test 54 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | build/ 3 | tasks/ 4 | lib/ 5 | .idea/ 6 | npm-debug.log 7 | SquirrelSetup.log 8 | electron-windows-sign.log 9 | receiver.mjs 10 | signtool-original.exe 11 | Squirrel-Releasify.log 12 | .node-version 13 | .DS_Store 14 | spec/fixtures/app/Update.exe 15 | vendor/7z.dll 16 | vendor/7z.exe 17 | hook.log 18 | docs 19 | -------------------------------------------------------------------------------- /.releaserc.json: -------------------------------------------------------------------------------- 1 | { 2 | "plugins": [ 3 | "@semantic-release/commit-analyzer", 4 | "@semantic-release/release-notes-generator", 5 | "@continuous-auth/semantic-release-npm", 6 | "@semantic-release/github" 7 | ], 8 | "branches": [ "main" ] 9 | } 10 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2015 GitHub Inc. 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining 4 | a copy of this software and associated documentation files (the 5 | "Software"), to deal in the Software without restriction, including 6 | without limitation the rights to use, copy, modify, merge, publish, 7 | distribute, sublicense, and/or sell copies of the Software, and to 8 | permit persons to whom the Software is furnished to do so, subject to 9 | the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be 12 | included in all copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 15 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 16 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 17 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 18 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 19 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 20 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Electron Installer 2 | 3 | [![Test](https://github.com/electron/windows-installer/actions/workflows/test.yml/badge.svg)](https://github.com/electron/windows-installer/actions/workflows/test.yml) 4 | [![NPM package](https://img.shields.io/npm/v/electron-winstaller)](https://npm.im/electron-winstaller) 5 | 6 | NPM module that builds Windows installers for 7 | [Electron](https://github.com/electron/electron) apps using 8 | [Squirrel](https://github.com/Squirrel/Squirrel.Windows). 9 | 10 | ## Installing 11 | 12 | ```sh 13 | npm install --save-dev electron-winstaller 14 | ``` 15 | 16 | ## Usage 17 | 18 | Require the package: 19 | 20 | ```javascript 21 | const electronInstaller = require('electron-winstaller'); 22 | ``` 23 | 24 | Then do a build like so.. 25 | 26 | ```javascript 27 | try { 28 | await electronInstaller.createWindowsInstaller({ 29 | appDirectory: '/tmp/build/my-app-64', 30 | outputDirectory: '/tmp/build/installer64', 31 | authors: 'My App Inc.', 32 | exe: 'myapp.exe' 33 | }); 34 | console.log('It worked!'); 35 | } catch (e) { 36 | console.log(`No dice: ${e.message}`); 37 | } 38 | ``` 39 | 40 | After running you will have an `.nupkg`, a 41 | `RELEASES` file, and a `.exe` installer file in the `outputDirectory` folder 42 | for each multi task target given under the config entry. 43 | 44 | There are several configuration settings supported: 45 | 46 | | Config Name | Required | Description | 47 | | --------------------- | -------- | ----------- | 48 | | `appDirectory` | Yes | The folder path of your Electron app | 49 | | `outputDirectory` | No | The folder path to create the `.exe` installer in. Defaults to the `installer` folder at the project root. | 50 | | `loadingGif` | No | The local path to a `.gif` file to display during install. | 51 | | `authors` | Yes | The authors value for the nuget package metadata. Defaults to the `author` field from your app's package.json file when unspecified. | 52 | | `owners` | No | The owners value for the nuget package metadata. Defaults to the `authors` field when unspecified. | 53 | | `exe` | No | The name of your app's main `.exe` file. This uses the `name` field in your app's package.json file with an added `.exe` extension when unspecified. | 54 | | `description` | No | The description value for the nuget package metadata. Defaults to the `description` field from your app's package.json file when unspecified. | 55 | | `version` | No | The version value for the nuget package metadata. Defaults to the `version` field from your app's package.json file when unspecified. | 56 | | `title` | No | The title value for the nuget package metadata. Defaults to the `productName` field and then the `name` field from your app's package.json file when unspecified. | 57 | | `name` | No | Windows Application Model ID (appId). Defaults to the `name` field in your app's package.json file. | 58 | | `certificateFile` | No | The path to an Authenticode Code Signing Certificate | 59 | | `certificatePassword` | No | The password to decrypt the certificate given in `certificateFile` | 60 | | `signWithParams` | No | Params to pass to signtool. Overrides `certificateFile` and `certificatePassword`. | 61 | | `iconUrl` | No | A URL to an ICO file to use as the application icon (displayed in Control Panel > Programs and Features). Defaults to the Atom icon. | 62 | | `setupIcon` | No | The ICO file to use as the icon for the generated Setup.exe | 63 | | `skipUpdateIcon` | No | Disables setting the icon of `Update.exe`. This can solve installation errors with the following message: "This application could not be started", when the setup is built on a non-Windows system. | 64 | | `setupExe` | No | The name to use for the generated Setup.exe file | 65 | | `setupMsi` | No | The name to use for the generated Setup.msi file | 66 | | `noMsi` | No | Should Squirrel.Windows create an MSI installer? | 67 | | `noDelta` | No | Should Squirrel.Windows delta packages? (disable only if necessary, they are a Good Thing) | 68 | | `remoteReleases` | No | A URL to your existing updates. If given, these will be downloaded to create delta updates | 69 | | `remoteToken` | No | Authentication token for remote updates | 70 | | `frameworkVersion` | No | Set the required .NET framework version, e.g. `net461` | 71 | | `windowsSign` | No | Use [@electron/windows-sign][@electron/windows-sign] for advanced codesigning. See [documentation](#advanced-codesigning-with-electronwindows-sign) for details. | 72 | 73 | ## Sign your installer or else bad things will happen 74 | 75 | For development / internal use, creating installers without a signature is okay, but for a production app you need to sign your application. Internet Explorer's SmartScreen filter will block your app from being downloaded, and many anti-virus vendors will consider your app as malware unless you obtain a valid cert. 76 | 77 | Any certificate valid for "Authenticode Code Signing" will work here, but if you get the right kind of code certificate, you can also opt-in to [Windows Error Reporting](http://en.wikipedia.org/wiki/Windows_Error_Reporting). [This MSDN page](http://msdn.microsoft.com/en-us/library/windows/hardware/hh801887.aspx) has the latest links on where to get a WER-compatible certificate. The "Standard Code Signing" certificate is sufficient for this purpose. 78 | 79 | ## Handling Squirrel Events 80 | 81 | Squirrel will spawn your app with command line flags on first run, updates, 82 | and uninstalls. it is **very** important that your app handle these events as _early_ 83 | as possible, and quit **immediately** after handling them. Squirrel will give your 84 | app a short amount of time (~15sec) to apply these operations and quit. 85 | 86 | The [electron-squirrel-startup](https://github.com/mongodb-js/electron-squirrel-startup) module will handle 87 | the most common events for you, such as managing desktop shortcuts. Add the following to the top 88 | of your `main.js` and you're good to go: 89 | 90 | ```javascript 91 | if (require('electron-squirrel-startup')) return; 92 | ``` 93 | 94 | You should handle these events in your app's `main` entry point with something 95 | such as: 96 | 97 | ```javascript 98 | const app = require('app'); 99 | 100 | // this should be placed at top of main.js to handle setup events quickly 101 | if (handleSquirrelEvent()) { 102 | // squirrel event handled and app will exit in 1000ms, so don't do anything else 103 | return; 104 | } 105 | 106 | function handleSquirrelEvent() { 107 | if (process.argv.length === 1) { 108 | return false; 109 | } 110 | 111 | const ChildProcess = require('child_process'); 112 | const path = require('path'); 113 | 114 | const appFolder = path.resolve(process.execPath, '..'); 115 | const rootAtomFolder = path.resolve(appFolder, '..'); 116 | const updateDotExe = path.resolve(path.join(rootAtomFolder, 'Update.exe')); 117 | const exeName = path.basename(process.execPath); 118 | 119 | const spawn = function(command, args) { 120 | let spawnedProcess, error; 121 | 122 | try { 123 | spawnedProcess = ChildProcess.spawn(command, args, {detached: true}); 124 | } catch (error) {} 125 | 126 | return spawnedProcess; 127 | }; 128 | 129 | const spawnUpdate = function(args) { 130 | return spawn(updateDotExe, args); 131 | }; 132 | 133 | const squirrelEvent = process.argv[1]; 134 | switch (squirrelEvent) { 135 | case '--squirrel-install': 136 | case '--squirrel-updated': 137 | // Optionally do things such as: 138 | // - Add your .exe to the PATH 139 | // - Write to the registry for things like file associations and 140 | // explorer context menus 141 | 142 | // Install desktop and start menu shortcuts 143 | spawnUpdate(['--createShortcut', exeName]); 144 | 145 | setTimeout(app.quit, 1000); 146 | return true; 147 | 148 | case '--squirrel-uninstall': 149 | // Undo anything you did in the --squirrel-install and 150 | // --squirrel-updated handlers 151 | 152 | // Remove desktop and start menu shortcuts 153 | spawnUpdate(['--removeShortcut', exeName]); 154 | 155 | setTimeout(app.quit, 1000); 156 | return true; 157 | 158 | case '--squirrel-obsolete': 159 | // This is called on the outgoing version of your app before 160 | // we update to the new version - it's the opposite of 161 | // --squirrel-updated 162 | 163 | app.quit(); 164 | return true; 165 | } 166 | }; 167 | ``` 168 | 169 | Notice that the first time the installer launches your app, your app will see a `--squirrel-firstrun` flag. This allows you to do things like showing up a splash screen or presenting a settings UI. Another thing to be aware of is that, since the app is spawned by squirrel and squirrel acquires a file lock during installation, you won't be able to successfully check for app updates till a few seconds later when squirrel releases the lock. 170 | 171 | ## Advanced codesigning with [@electron/windows-sign][@electron/windows-sign] 172 | 173 | This package supports two different ways to codesign your application and the installer: 174 | 175 | 1) Modern: By passing a `windowsSign` option, which will be passed to [@electron/windows-sign]. This method allows full customization of the code-signing process - and supports more complicated scenarios like cloud-hosted EV certificates, custom sign pipelines, and per-file overrides. It also supports all existing "simple" codesigning scenarios, including just passing a certificate file and password. Please see https://github.com/electron/windows-sign for all possible configuration options. 176 | 177 | When passing `windowsSign`, do not pass any other available parameters at the top level (like `certificateFile`, `certificatePassword`, or `signWithParams`). 178 | 179 | 2) Legacy: By passing the top-level settings (`certificateFile`, `certificatePassword`, and `signWithParams`). For simple codesigning scenarios, there's no reason not to use this method - it'll work just as fine as the modern method. 180 | 181 | ## Debugging this package 182 | 183 | You can get debug messages from this package by running with the environment variable `DEBUG=electron-windows-installer:main` e.g. 184 | 185 | ```shell 186 | DEBUG=electron-windows-installer:main node tasks/electron-winstaller.js 187 | ``` 188 | 189 | [@electron/windows-sign]: https://github.com/electron/windows-sign/ 190 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "electron-winstaller", 3 | "version": "0.0.0-development", 4 | "description": "Module to generate Windows installers for Electron apps", 5 | "main": "lib/index.js", 6 | "types": "lib/index.d.ts", 7 | "license": "MIT", 8 | "repository": { 9 | "type": "git", 10 | "url": "git+https://github.com/electron/windows-installer.git" 11 | }, 12 | "files": [ 13 | "lib", 14 | "resources", 15 | "script", 16 | "template.nuspectemplate", 17 | "vendor", 18 | "!vendor/7z.dll", 19 | "!vendor/7z.exe" 20 | ], 21 | "scripts": { 22 | "install": "node ./script/select-7z-arch.js", 23 | "build": "tsc", 24 | "docs": "npx typedoc", 25 | "prepublish": "npm run build", 26 | "lint": "eslint --ext .ts src spec", 27 | "ava": "ava --timeout=60s", 28 | "test": "npm run lint && npm run ava", 29 | "tdd": "ava --watch" 30 | }, 31 | "dependencies": { 32 | "@electron/asar": "^3.2.1", 33 | "debug": "^4.1.1", 34 | "fs-extra": "^7.0.1", 35 | "lodash": "^4.17.21", 36 | "semver": "^7.6.3", 37 | "temp": "^0.9.0" 38 | }, 39 | "devDependencies": { 40 | "@types/fs-extra": "^5.0.5", 41 | "@types/lodash": "^4.17.0", 42 | "@types/node": "^20.6.0", 43 | "@types/temp": "^0.8.34", 44 | "@typescript-eslint/eslint-plugin": "^5.62.0", 45 | "@typescript-eslint/parser": "^5.62.0", 46 | "ava": "^5.1.1", 47 | "eslint": "^8.49.0", 48 | "eslint-plugin-ava": "^14.0.0", 49 | "ts-node": "^10.9.1", 50 | "typedoc": "0.25.13", 51 | "typescript": "^4.9.3" 52 | }, 53 | "optionalDependencies": { 54 | "@electron/windows-sign": "^1.1.2" 55 | }, 56 | "engines": { 57 | "node": ">=8.0.0" 58 | }, 59 | "publishConfig": { 60 | "provenance": true 61 | }, 62 | "ava": { 63 | "extensions": [ 64 | "ts" 65 | ], 66 | "files": [ 67 | "spec/*.ts" 68 | ], 69 | "require": [ 70 | "ts-node/register/transpile-only" 71 | ] 72 | } 73 | } 74 | -------------------------------------------------------------------------------- /resources/install-spinner.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/electron/windows-installer/1ccd266a0a529eb18f226bb92df69ba160a7ce2e/resources/install-spinner.gif -------------------------------------------------------------------------------- /script/select-7z-arch.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs'); 2 | const os = require('os'); 3 | 4 | /** 5 | * Even if we're cross-compiling for a different arch like arm64, 6 | * we still need to use the 7-Zip executable for the host arch 7 | */ 8 | const arch = os.arch; 9 | 10 | console.log('Selecting 7-Zip for arch ' + arch); 11 | 12 | // Copy the 7-Zip executable for the configured architecture. 13 | try { 14 | fs.copyFileSync('vendor/7z-' + arch + '.exe', 'vendor/7z.exe'); 15 | } catch (err) { 16 | throw err; 17 | } 18 | 19 | try { 20 | fs.copyFileSync('vendor/7z-' + arch + '.dll', 'vendor/7z.dll'); 21 | } catch (err) { 22 | throw err; 23 | } 24 | -------------------------------------------------------------------------------- /spec/convert-version-spec.ts: -------------------------------------------------------------------------------- 1 | import test from 'ava'; 2 | import { convertVersion } from '../src/index'; 3 | 4 | test('makes semver versions into valid NuGet versions', (t): void => { 5 | t.is(convertVersion('1'), '1'); 6 | t.is(convertVersion('1.2'), '1.2'); 7 | t.is(convertVersion('1.2.3'), '1.2.3'); 8 | t.is(convertVersion('1.2.3-alpha'), '1.2.3-alpha'); 9 | t.is(convertVersion('1.2.3-alpha.1'), '1.2.3-alpha1'); 10 | t.is(convertVersion('1.2.3-alpha.1.2'), '1.2.3-alpha12'); 11 | t.is(convertVersion('1.2.3-alpha-1-2'), '1.2.3-alpha-1-2'); 12 | t.is(convertVersion('1.2.3-alpha.1.2+build-meta.1.2'), '1.2.3-alpha12'); 13 | t.is(convertVersion('1.2.3-alpha-1-2+build-meta.1.2'), '1.2.3-alpha-1-2'); 14 | }); 15 | -------------------------------------------------------------------------------- /spec/fixtures/app/LICENSE: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/electron/windows-installer/1ccd266a0a529eb18f226bb92df69ba160a7ce2e/spec/fixtures/app/LICENSE -------------------------------------------------------------------------------- /spec/fixtures/app/chromiumcontent.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/electron/windows-installer/1ccd266a0a529eb18f226bb92df69ba160a7ce2e/spec/fixtures/app/chromiumcontent.dll -------------------------------------------------------------------------------- /spec/fixtures/app/d3dcompiler_47.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/electron/windows-installer/1ccd266a0a529eb18f226bb92df69ba160a7ce2e/spec/fixtures/app/d3dcompiler_47.dll -------------------------------------------------------------------------------- /spec/fixtures/app/ffmpegsumo.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/electron/windows-installer/1ccd266a0a529eb18f226bb92df69ba160a7ce2e/spec/fixtures/app/ffmpegsumo.dll -------------------------------------------------------------------------------- /spec/fixtures/app/icudtl.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/electron/windows-installer/1ccd266a0a529eb18f226bb92df69ba160a7ce2e/spec/fixtures/app/icudtl.dat -------------------------------------------------------------------------------- /spec/fixtures/app/locales/en.pak: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/electron/windows-installer/1ccd266a0a529eb18f226bb92df69ba160a7ce2e/spec/fixtures/app/locales/en.pak -------------------------------------------------------------------------------- /spec/fixtures/app/msvcp120.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/electron/windows-installer/1ccd266a0a529eb18f226bb92df69ba160a7ce2e/spec/fixtures/app/msvcp120.dll -------------------------------------------------------------------------------- /spec/fixtures/app/msvcr120.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/electron/windows-installer/1ccd266a0a529eb18f226bb92df69ba160a7ce2e/spec/fixtures/app/msvcr120.dll -------------------------------------------------------------------------------- /spec/fixtures/app/myapp.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/electron/windows-installer/1ccd266a0a529eb18f226bb92df69ba160a7ce2e/spec/fixtures/app/myapp.exe -------------------------------------------------------------------------------- /spec/fixtures/app/natives_blob.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/electron/windows-installer/1ccd266a0a529eb18f226bb92df69ba160a7ce2e/spec/fixtures/app/natives_blob.bin -------------------------------------------------------------------------------- /spec/fixtures/app/resources/app/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "myapp", 3 | "productName": "MyApp", 4 | "version": "1.0.0", 5 | "description": "An app", 6 | "authors": "Cyril Figgis" 7 | } 8 | -------------------------------------------------------------------------------- /spec/fixtures/app/snapshot_blob.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/electron/windows-installer/1ccd266a0a529eb18f226bb92df69ba160a7ce2e/spec/fixtures/app/snapshot_blob.bin -------------------------------------------------------------------------------- /spec/fixtures/app/swiftshader/libEGL.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/electron/windows-installer/1ccd266a0a529eb18f226bb92df69ba160a7ce2e/spec/fixtures/app/swiftshader/libEGL.dll -------------------------------------------------------------------------------- /spec/fixtures/app/swiftshader/libGLESv2.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/electron/windows-installer/1ccd266a0a529eb18f226bb92df69ba160a7ce2e/spec/fixtures/app/swiftshader/libGLESv2.dll -------------------------------------------------------------------------------- /spec/fixtures/app/vccorlib120.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/electron/windows-installer/1ccd266a0a529eb18f226bb92df69ba160a7ce2e/spec/fixtures/app/vccorlib120.dll -------------------------------------------------------------------------------- /spec/fixtures/app/vk_swiftshader.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/electron/windows-installer/1ccd266a0a529eb18f226bb92df69ba160a7ce2e/spec/fixtures/app/vk_swiftshader.dll -------------------------------------------------------------------------------- /spec/fixtures/app/vk_swiftshader_icd.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/electron/windows-installer/1ccd266a0a529eb18f226bb92df69ba160a7ce2e/spec/fixtures/app/vk_swiftshader_icd.json -------------------------------------------------------------------------------- /spec/fixtures/app/xinput1_3.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/electron/windows-installer/1ccd266a0a529eb18f226bb92df69ba160a7ce2e/spec/fixtures/app/xinput1_3.dll -------------------------------------------------------------------------------- /spec/helpers/helpers.ts: -------------------------------------------------------------------------------- 1 | import path from 'path'; 2 | import fs from 'fs-extra'; 3 | 4 | import { createTempDir } from '../../src/temp-utils'; 5 | 6 | export const FIXTURE_APP_DIR = path.join(__dirname, '../fixtures/app'); 7 | 8 | export async function createTempAppDirectory(): Promise { 9 | const appDirectory = await createTempDir('electron-winstaller-ad-'); 10 | await fs.copy(FIXTURE_APP_DIR, appDirectory); 11 | return appDirectory; 12 | } 13 | -------------------------------------------------------------------------------- /spec/helpers/windowsSignHook.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs-extra'); 2 | const path = require('path'); 3 | 4 | module.exports = function(args) { 5 | console.log(...args); 6 | 7 | fs.appendFileSync(path.join(__dirname, 'hook.log'), `${JSON.stringify(args)}\n`); 8 | }; 9 | -------------------------------------------------------------------------------- /spec/installer-spec.ts: -------------------------------------------------------------------------------- 1 | import test from 'ava'; 2 | import path from 'path'; 3 | import { createTempDir } from '../src/temp-utils'; 4 | import fs from 'fs-extra'; 5 | import { createWindowsInstaller } from '../src'; 6 | import spawn from '../src/spawn-promise'; 7 | import { createTempAppDirectory } from './helpers/helpers'; 8 | 9 | const log = require('debug')('electron-windows-installer:spec'); 10 | 11 | function spawn7z(args: string[]): Promise { 12 | const sevenZipPath = path.join(__dirname, '..', 'vendor', '7z.exe'); 13 | const wineExe = ['arm64', 'x64'].includes(process.arch) ? 'wine64' : 'wine'; 14 | return process.platform !== 'win32' 15 | ? spawn(wineExe, [sevenZipPath, ...args]) 16 | : spawn(sevenZipPath, args); 17 | } 18 | 19 | 20 | test.serial('creates a nuget package and installer', async (t): Promise => { 21 | const outputDirectory = await createTempDir('ei-'); 22 | const appDirectory = await createTempAppDirectory(); 23 | const options = { appDirectory, outputDirectory }; 24 | 25 | await createWindowsInstaller(options); 26 | 27 | log(`Verifying assertions on ${outputDirectory}`); 28 | log(JSON.stringify(await fs.readdir(outputDirectory))); 29 | 30 | const nupkgPath = path.join(outputDirectory, 'myapp-1.0.0-full.nupkg'); 31 | 32 | t.true(await fs.pathExists(nupkgPath)); 33 | t.true(await fs.pathExists(path.join(outputDirectory, 'MyAppSetup.exe'))); 34 | 35 | if (process.platform === 'win32') { 36 | t.true(await fs.pathExists(path.join(outputDirectory, 'MyAppSetup.msi'))); 37 | } 38 | 39 | log('Verifying Update.exe'); 40 | t.true(await fs.pathExists(path.join(appDirectory, 'Squirrel.exe'))); 41 | 42 | log('Verifying contents of .nupkg'); 43 | 44 | const packageContents = await spawn7z(['l', nupkgPath]); 45 | 46 | t.true(packageContents.includes('lib\\net45\\vk_swiftshader_icd.json')); 47 | t.true(packageContents.includes('lib\\net45\\swiftshader\\libEGL.dll')); 48 | }); 49 | 50 | test.serial('creates an installer when swiftshader files are missing', async (t): Promise => { 51 | const appDirectory = await createTempAppDirectory(); 52 | const outputDirectory = await createTempDir('electron-winstaller-test-'); 53 | const options = { appDirectory, outputDirectory }; 54 | 55 | // Remove swiftshader folder and swiftshader json file, simulating Electron < 10.0 56 | await fs.remove(path.join(appDirectory, 'swiftshader', 'libEGL.dll')); 57 | await fs.remove(path.join(appDirectory, 'swiftshader', 'libGLESv2.dll')); 58 | await fs.rmdir(path.join(appDirectory, 'swiftshader')); 59 | await fs.remove(path.join(appDirectory, 'vk_swiftshader_icd.json')); 60 | 61 | await createWindowsInstaller(options); 62 | 63 | const nupkgPath = path.join(outputDirectory, 'myapp-1.0.0-full.nupkg'); 64 | 65 | log('Verifying contents of .nupkg'); 66 | 67 | const packageContents = await spawn7z(['l', nupkgPath]); 68 | t.false(packageContents.includes('vk_swiftshader_icd.json')); 69 | t.false(packageContents.includes('swiftshader\\')); 70 | }); 71 | -------------------------------------------------------------------------------- /spec/sign-spec.ts: -------------------------------------------------------------------------------- 1 | import test from 'ava'; 2 | import path from 'path'; 3 | import { createTempDir } from '../src/temp-utils'; 4 | import fs from 'fs-extra'; 5 | import { createWindowsInstaller } from '../src'; 6 | import { createTempAppDirectory } from './helpers/helpers'; 7 | import { SignToolOptions } from '@electron/windows-sign'; 8 | import semver from 'semver'; 9 | 10 | const log = require('debug')('electron-windows-installer:spec'); 11 | 12 | if (process.platform === 'win32' && semver.gte(process.version, '20.0.0')) { 13 | test.serial('creates a signtool.exe and uses it to sign', async (t): Promise => { 14 | 15 | const outputDirectory = await createTempDir('ei-'); 16 | const appDirectory = await createTempAppDirectory(); 17 | const hookLogPath = path.join(__dirname, './helpers/hook.log'); 18 | const hookModulePath = path.join(__dirname, './helpers/windowsSignHook.js'); 19 | const windowsSign: SignToolOptions = { hookModulePath }; 20 | const options = { appDirectory, outputDirectory, windowsSign }; 21 | 22 | // Reset 23 | await fs.remove(hookLogPath); 24 | 25 | // Test 26 | await createWindowsInstaller(options); 27 | 28 | log(`Verifying assertions on ${outputDirectory}`); 29 | log(JSON.stringify(await fs.readdir(outputDirectory))); 30 | 31 | const nupkgPath = path.join(outputDirectory, 'myapp-1.0.0-full.nupkg'); 32 | 33 | t.true(await fs.pathExists(nupkgPath)); 34 | t.true(await fs.pathExists(path.join(outputDirectory, 'MyAppSetup.exe'))); 35 | 36 | if (process.platform === 'win32') { 37 | t.true(await fs.pathExists(path.join(outputDirectory, 'MyAppSetup.msi'))); 38 | } 39 | 40 | log('Verifying Update.exe'); 41 | t.true(await fs.pathExists(path.join(appDirectory, 'Squirrel.exe'))); 42 | 43 | log('Verifying that our hook got to "sign" all files'); 44 | const hookLog = await fs.readFile(hookLogPath, { encoding: 'utf8' }); 45 | const filesLogged = hookLog.split('\n').filter(v => !!v.trim()).length; 46 | t.is(filesLogged, 8); 47 | }); 48 | } 49 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import * as asar from '@electron/asar'; 2 | import { createTempDir } from './temp-utils'; 3 | import * as fs from 'fs-extra'; 4 | import { Metadata, SquirrelWindowsOptions, PersonMetadata } from './options'; 5 | import * as path from 'path'; 6 | import * as os from 'os'; 7 | import { exec } from 'child_process'; 8 | import spawn from './spawn-promise'; 9 | import { template } from 'lodash'; 10 | import { createSignTool, resetSignTool } from './sign'; 11 | 12 | export { SquirrelWindowsOptions } from './options'; 13 | export { SquirrelWindowsOptions as Options} from './options'; 14 | 15 | const log = require('debug')('electron-windows-installer:main'); 16 | 17 | /** 18 | * A utility function to convert SemVer version strings into NuGet-compatible 19 | * version strings. 20 | * @param version A SemVer version string 21 | * @returns A NuGet-compatible version string 22 | * @see {@link https://semver.org/ | Semantic Versioning specification} 23 | * @see {@link https://learn.microsoft.com/en-us/nuget/concepts/package-versioning?tabs=semver20sort | NuGet versioning specification} 24 | */ 25 | export function convertVersion(version: string): string { 26 | const parts = version.split('+')[0].split('-'); 27 | const mainVersion = parts.shift(); 28 | 29 | if (parts.length > 0) { 30 | return [mainVersion, parts.join('-').replace(/\./g, '')].join('-'); 31 | } else { 32 | return mainVersion as string; 33 | } 34 | } 35 | 36 | function checkIfCommandExists(command: string): Promise { 37 | const checkCommand = os.platform() === 'win32' ? 'where' : 'which'; 38 | return new Promise((resolve) => { 39 | exec(`${checkCommand} ${command}`, (error) => { 40 | resolve(error ? false : true); 41 | }); 42 | }); 43 | } 44 | 45 | /** 46 | * This package's main function, which creates a Squirrel.Windows executable 47 | * installer and optionally code-signs the output. 48 | * 49 | * @param options Options for installer generation and signing 50 | * @see {@link https://github.com/Squirrel/Squirrel.Windows | Squirrel.Windows} 51 | */ 52 | export async function createWindowsInstaller(options: SquirrelWindowsOptions): Promise { 53 | let useMono = false; 54 | 55 | const monoExe = 'mono'; 56 | const wineExe = ['arm64', 'x64'].includes(process.arch) ? 'wine64' : 'wine'; 57 | 58 | if (process.platform !== 'win32') { 59 | useMono = true; 60 | const [hasWine, hasMono] = await Promise.all([ 61 | checkIfCommandExists(wineExe), 62 | checkIfCommandExists(monoExe) 63 | ]); 64 | 65 | if (!hasWine || !hasMono) { 66 | throw new Error('You must install both Mono and Wine on non-Windows'); 67 | } 68 | 69 | log(`Using Mono: '${monoExe}'`); 70 | log(`Using Wine: '${wineExe}'`); 71 | } 72 | 73 | // eslint-disable-next-line prefer-const 74 | let { appDirectory, outputDirectory, loadingGif } = options; 75 | outputDirectory = path.resolve(outputDirectory || 'installer'); 76 | 77 | const vendorPath = options.vendorDirectory || path.join(__dirname, '..', 'vendor'); 78 | const vendorUpdate = path.join(vendorPath, 'Squirrel.exe'); 79 | const appUpdate = path.join(appDirectory, 'Squirrel.exe'); 80 | 81 | await fs.copy(vendorUpdate, appUpdate); 82 | if (options.setupIcon && (options.skipUpdateIcon !== true)) { 83 | let cmd = path.join(vendorPath, 'rcedit.exe'); 84 | const args = [ 85 | appUpdate, 86 | '--set-icon', options.setupIcon 87 | ]; 88 | 89 | if (useMono) { 90 | args.unshift(cmd); 91 | cmd = wineExe; 92 | } 93 | 94 | await spawn(cmd, args); 95 | } 96 | 97 | const defaultLoadingGif = path.join(__dirname, '..', 'resources', 'install-spinner.gif'); 98 | loadingGif = loadingGif ? path.resolve(loadingGif) : defaultLoadingGif; 99 | 100 | const { certificateFile, certificatePassword, remoteReleases, signWithParams, remoteToken, windowsSign } = options; 101 | 102 | const metadata: Metadata = { 103 | description: '', 104 | iconUrl: 'https://raw.githubusercontent.com/electron/electron/main/shell/browser/resources/win/electron.ico' 105 | }; 106 | 107 | if (options.usePackageJson !== false) { 108 | const appResources = path.join(appDirectory, 'resources'); 109 | const asarFile = path.join(appResources, 'app.asar'); 110 | let appMetadata; 111 | 112 | if (await fs.pathExists(asarFile)) { 113 | appMetadata = JSON.parse(asar.extractFile(asarFile, 'package.json').toString()); 114 | } else { 115 | appMetadata = await fs.readJson(path.join(appResources, 'app', 'package.json')); 116 | } 117 | 118 | Object.assign(metadata, { 119 | exe: `${appMetadata.name}.exe`, 120 | title: appMetadata.productName || appMetadata.name 121 | }, appMetadata); 122 | } 123 | 124 | Object.assign(metadata, options); 125 | 126 | if (!metadata.authors) { 127 | if (typeof (metadata.author) === 'string') { 128 | metadata.authors = metadata.author; 129 | } else { 130 | metadata.authors = (metadata.author || ({} as PersonMetadata)).name || ''; 131 | } 132 | } 133 | 134 | metadata.owners = metadata.owners || metadata.authors; 135 | metadata.version = convertVersion(metadata.version as string); 136 | metadata.copyright = metadata.copyright || 137 | `Copyright © ${new Date().getFullYear()} ${metadata.authors || metadata.owners}`; 138 | metadata.additionalFiles = metadata.additionalFiles || []; 139 | 140 | if (await fs.pathExists(path.join(appDirectory, 'swiftshader'))) { 141 | metadata.additionalFiles.push({ src: 'swiftshader\\**', target: 'lib\\net45\\swiftshader' }); 142 | } 143 | 144 | if (await fs.pathExists(path.join(appDirectory, 'vk_swiftshader_icd.json'))) { 145 | metadata.additionalFiles.push({ src: 'vk_swiftshader_icd.json', target: 'lib\\net45' }); 146 | } 147 | 148 | const templatePath = options.nuspecTemplate || path.join(__dirname, '..', 'template.nuspectemplate'); 149 | let templateData = await fs.readFile(templatePath, 'utf8'); 150 | if (path.sep === '/') { 151 | templateData = templateData.replace(/\\/g, '/'); 152 | for (const f of metadata.additionalFiles) { 153 | f.src = f.src.replace(/\\/g, '/'); 154 | f.target = f.target.replace(/\\/g, '/'); 155 | } 156 | } 157 | const nuspecContent = template(templateData)(metadata); 158 | 159 | log(`Created NuSpec file:\n${nuspecContent}`); 160 | 161 | const nugetOutput = await createTempDir('si-'); 162 | const targetNuspecPath = path.join(nugetOutput, metadata.name + '.nuspec'); 163 | 164 | await fs.writeFile(targetNuspecPath, nuspecContent); 165 | 166 | let cmd = path.join(vendorPath, 'nuget.exe'); 167 | let args = [ 168 | 'pack', targetNuspecPath, 169 | '-BasePath', appDirectory, 170 | '-OutputDirectory', nugetOutput, 171 | '-NoDefaultExcludes' 172 | ]; 173 | 174 | if (useMono) { 175 | args.unshift(cmd); 176 | cmd = monoExe; 177 | } 178 | 179 | // Call NuGet to create our package 180 | log(await spawn(cmd, args)); 181 | const nupkgPath = path.join(nugetOutput, `${metadata.name}.${metadata.version}.nupkg`); 182 | 183 | if (remoteReleases) { 184 | cmd = path.join(vendorPath, 'SyncReleases.exe'); 185 | args = ['-u', remoteReleases, '-r', outputDirectory]; 186 | 187 | if (useMono) { 188 | args.unshift(cmd); 189 | cmd = monoExe; 190 | } 191 | 192 | if (remoteToken) { 193 | args.push('-t', remoteToken); 194 | } 195 | 196 | log(await spawn(cmd, args)); 197 | } 198 | 199 | cmd = path.join(vendorPath, 'Squirrel.exe'); 200 | args = [ 201 | '--releasify', nupkgPath, 202 | '--releaseDir', outputDirectory, 203 | '--loadingGif', loadingGif 204 | ]; 205 | 206 | if (useMono) { 207 | args.unshift(path.join(vendorPath, 'Squirrel-Mono.exe')); 208 | cmd = monoExe; 209 | } 210 | 211 | // Legacy codesign options 212 | await resetSignTool(); 213 | if (signWithParams) { 214 | args.push('--signWithParams'); 215 | if (!signWithParams.includes('/f') && !signWithParams.includes('/p') && certificateFile && certificatePassword) { 216 | args.push(`${signWithParams} /a /f "${path.resolve(certificateFile)}" /p "${certificatePassword}"`); 217 | } else { 218 | args.push(signWithParams); 219 | } 220 | } else if (certificateFile && certificatePassword) { 221 | args.push('--signWithParams'); 222 | args.push(`/a /f "${path.resolve(certificateFile)}" /p "${certificatePassword}"`); 223 | // @electron/windows-sign options 224 | } else if (windowsSign) { 225 | args.push('--signWithParams'); 226 | args.push('windows-sign'); 227 | await createSignTool(options); 228 | } 229 | 230 | if (options.setupIcon) { 231 | args.push('--setupIcon'); 232 | args.push(path.resolve(options.setupIcon)); 233 | } 234 | 235 | if (options.noMsi) { 236 | args.push('--no-msi'); 237 | } 238 | 239 | if (options.noDelta) { 240 | args.push('--no-delta'); 241 | } 242 | 243 | if (options.frameworkVersion) { 244 | args.push('--framework-version'); 245 | args.push(options.frameworkVersion); 246 | } 247 | 248 | log(await spawn(cmd, args)); 249 | 250 | if (options.fixUpPaths !== false) { 251 | log('Fixing up paths'); 252 | 253 | if (metadata.productName || options.setupExe) { 254 | const setupPath = path.join(outputDirectory, options.setupExe || `${metadata.productName}Setup.exe`); 255 | const unfixedSetupPath = path.join(outputDirectory, 'Setup.exe'); 256 | log(`Renaming ${unfixedSetupPath} => ${setupPath}`); 257 | await fs.rename(unfixedSetupPath, setupPath); 258 | } 259 | 260 | if (metadata.productName || options.setupMsi) { 261 | const msiPath = path.join(outputDirectory, options.setupMsi || `${metadata.productName}Setup.msi`); 262 | const unfixedMsiPath = path.join(outputDirectory, 'Setup.msi'); 263 | if (await fs.pathExists(unfixedMsiPath)) { 264 | log(`Renaming ${unfixedMsiPath} => ${msiPath}`); 265 | await fs.rename(unfixedMsiPath, msiPath); 266 | } 267 | } 268 | } 269 | 270 | await resetSignTool(); 271 | } 272 | -------------------------------------------------------------------------------- /src/options.ts: -------------------------------------------------------------------------------- 1 | // Originally from @types/electron-winstaller@2.6.2 2 | // Original definitions by: Brendan Forster , Daniel Perez Alvarez 3 | // Original definitions: https://github.com/DefinitelyTyped/DefinitelyTyped 4 | 5 | import { SignToolOptions } from '@electron/windows-sign'; 6 | 7 | export interface SquirrelWindowsOptions { 8 | /** 9 | * The folder path of your Electron app 10 | */ 11 | appDirectory: string; 12 | /** 13 | * The folder path of Squirrel windows 14 | */ 15 | vendorDirectory?: string; 16 | /** 17 | * The folder path to create the .exe installer in. 18 | * 19 | * @defaultValue an `installer` folder at the project root. 20 | */ 21 | outputDirectory?: string; 22 | /** 23 | * The path to the .nuspectemplate file used by Squirrel.exe. 24 | * 25 | * @defaultValue the bundled {@link https://github.com/electron/windows-installer/blob/main/template.nuspectemplate | template.nuspectemplate}. 26 | */ 27 | nuspecTemplate?: string; 28 | /** 29 | * The local path to a `.gif` file to display during install. 30 | * 31 | * @defaultValue the bundled {@link https://github.com/electron/windows-installer/blob/main/resources/install-spinner.gif | install-spinner.gif} 32 | */ 33 | loadingGif?: string; 34 | /** 35 | * The `authors` value for the NuGet package metadata. 36 | * 37 | * @defaultValue the `author` field from your app's package.json file 38 | * unless {@link SquirrelWindowsOptions.usePackageJson | usePackageJson} is false. 39 | * @see {@link https://learn.microsoft.com/en-us/nuget/reference/nuspec | the Microsoft .nuspec reference}. 40 | */ 41 | authors?: string; 42 | /** 43 | * The `owners` value for the NuGet package metadata. 44 | * 45 | * @defaultValue the `authors` field from your app's package.json file 46 | * unless {@link SquirrelWindowsOptions.usePackageJson | usePackageJson} is false. 47 | * @see {@link https://learn.microsoft.com/en-us/nuget/reference/nuspec | the Microsoft .nuspec reference}. 48 | */ 49 | owners?: string; 50 | /** 51 | * The `copyright` value for the NuGet package metadata. 52 | * 53 | * @defaultValue a generated copyright with {@link SquirrelWindowsOptions.authors | authors} 54 | * or {@link SquirrelWindowsOptions.owners | owners}. 55 | * @see {@link https://learn.microsoft.com/en-us/nuget/reference/nuspec | the Microsoft .nuspec reference}. 56 | */ 57 | copyright?: string; 58 | /** 59 | * The name of your app's main `.exe` file. 60 | * 61 | * @defaultValue the `name` field in your app's package.json file with an added `.exe` extension 62 | * unless {@link SquirrelWindowsOptions.usePackageJson | usePackageJson} is false. 63 | */ 64 | exe?: string; 65 | /** 66 | * The `description` value for the NuGet package metadata. 67 | * 68 | * @defaultValue the `description` field from your app's package.json file 69 | * unless {@link SquirrelWindowsOptions.usePackageJson | usePackageJson} is false. 70 | * @see {@link https://learn.microsoft.com/en-us/nuget/reference/nuspec | the Microsoft .nuspec reference}. 71 | */ 72 | description?: string; 73 | /** 74 | * The `version` value for the Nuget package metadata. 75 | * 76 | * @defaultValue the `version` field from your app's package.json file 77 | * unless {@link SquirrelWindowsOptions.usePackageJson | usePackageJson} is false. 78 | * @see {@link https://learn.microsoft.com/en-us/nuget/reference/nuspec | the Microsoft .nuspec reference}. 79 | */ 80 | version?: string; 81 | /** 82 | * The `title` value for the nuget package metadata. 83 | * 84 | * @defaultValue the `productName` field and then the `name` field from your app's package.json 85 | * file unless {@link SquirrelWindowsOptions.usePackageJson | usePackageJson} is false. 86 | * @see {@link https://learn.microsoft.com/en-us/nuget/reference/nuspec | the Microsoft .nuspec reference}. 87 | */ 88 | title?: string; 89 | /** 90 | * Windows Application Model ID (appId). 91 | * 92 | * @defaultValue the `name` field in your app's package.json file 93 | * unless {@link SquirrelWindowsOptions.usePackageJson | usePackageJson} is false. 94 | * @see {@link https://learn.microsoft.com/en-us/windows/win32/shell/appids | Microsoft's Application User Model IDs documentation}. 95 | */ 96 | name?: string; 97 | /** 98 | * The path to an Authenticode Code Signing Certificate. 99 | * 100 | * This is a legacy parameter provided for backwards compatibility. 101 | * For more comprehensive support of various codesigning scenarios 102 | * like EV certificates, see the 103 | * {@link SquirrelWindowsOptions.windowsSign | windowsSign} parameter. 104 | */ 105 | certificateFile?: string; 106 | /** 107 | * The password to decrypt the certificate given in `certificateFile` 108 | * 109 | * This is a legacy parameter provided for backwards compatibility. 110 | * For more comprehensive support of various codesigning scenarios 111 | * like EV certificates, see the 112 | * {@link SquirrelWindowsOptions.windowsSign | windowsSign} parameter. 113 | */ 114 | certificatePassword?: string; 115 | /** 116 | * Params to pass to signtool. 117 | * 118 | * Overrides {@link SquirrelWindowsOptions.certificateFile | certificateFile} 119 | * and {@link SquirrelWindowsOptions.certificatePassword | certificatePassword}`. 120 | * 121 | * This is a legacy parameter provided for backwards compatibility. 122 | * For more comprehensive support of various codesigning scenarios 123 | * like EV certificates, see the 124 | * {@link SquirrelWindowsOptions.windowsSign | windowsSign} parameter. 125 | */ 126 | signWithParams?: string; 127 | /** 128 | * A publicly accessible, fully qualified HTTP(S) URL to an ICO file, used as the application icon 129 | * displayed in Control Panel ➡ Programs and Features. The icon is retrieved at install time. 130 | * Example: http://example.com/favicon.ico 131 | * 132 | * Does not accept `file:` URLs. 133 | * 134 | * @defaultValue the Electron icon. 135 | */ 136 | iconUrl?: string; 137 | /** 138 | * The ICO file to use as the icon for the generated Setup.exe 139 | */ 140 | setupIcon?: string; 141 | /** 142 | * The name to use for the generated Setup.exe file 143 | * @defaultValue the `productName` field from your app's package.json file 144 | * unless {@link SquirrelWindowsOptions.usePackageJson | usePackageJson} is false. 145 | */ 146 | setupExe?: string; 147 | /** 148 | * The name to use for the generated Setup.msi file 149 | * @defaultValue the `productName` field from your app's package.json file 150 | * unless {@link SquirrelWindowsOptions.usePackageJson | usePackageJson} is false. 151 | */ 152 | setupMsi?: string; 153 | /** 154 | * Enable this flag to prevent Squirrel.Windows from creating an MSI installer. 155 | * @defaultValue false 156 | */ 157 | noMsi?: boolean; 158 | /** 159 | * Enable this flag to prevent Squirrel.Windows from creating delta packages (disable only if necessary, they are a Good Thing). 160 | * @defaultValue false 161 | */ 162 | noDelta?: boolean; 163 | /** 164 | * A URL to your existing updates. If given, these will be downloaded to create delta updates. 165 | */ 166 | remoteReleases?: string; 167 | /** 168 | * Authentication token for remote updates using {@link SquirrelWindowsOptions.remoteReleases | remoteReleases} 169 | */ 170 | remoteToken?: string; 171 | /** 172 | * Whether or not to infer metadata options from your app's package.json file. 173 | * @defaultValue true 174 | */ 175 | usePackageJson?: boolean; 176 | /** 177 | * Set the required .NET framework version (e.g. `net461`). 178 | */ 179 | frameworkVersion?: string; 180 | /** 181 | * Attempt to create more descriptive installer names using metadata parameters. 182 | * @defaultValue false 183 | */ 184 | fixUpPaths?: boolean; 185 | /** 186 | * Enable this flag to skip setting a custom icon for `Update.exe` 187 | * @defaultValue false 188 | */ 189 | skipUpdateIcon?: boolean; 190 | 191 | /** 192 | * Requires Node.js 18 or newer. 193 | * 194 | * Sign your app with `@electron/windows-sign`, allowing for full customization 195 | * of the code-signing process - and supports more complicated scenarios like 196 | * cloud-hosted EV certificates, custom sign pipelines, and per-file overrides. 197 | * It also supports all existing "simple" codesigning scenarios, including 198 | * just passing a certificate file and password. 199 | * 200 | * @see {@link https://github.com/electron/windows-sign | @electron/windows-sign documentation} 201 | * for all possible configuration options. 202 | */ 203 | windowsSign?: SignToolOptions; 204 | } 205 | 206 | export interface PersonMetadata { 207 | name: string; 208 | email?: string; 209 | url?: string; 210 | } 211 | 212 | export interface AdditionalFile { 213 | src: string; 214 | target: string; 215 | } 216 | 217 | export interface Metadata { 218 | name?: string; 219 | productName?: string; 220 | version?: string; 221 | copyright?: string; 222 | author?: string | PersonMetadata; 223 | authors?: string | PersonMetadata[]; 224 | owners?: string | PersonMetadata[]; 225 | description?: string; 226 | iconUrl?: string; 227 | additionalFiles?: AdditionalFile[]; 228 | } 229 | -------------------------------------------------------------------------------- /src/sign.ts: -------------------------------------------------------------------------------- 1 | import type { createSeaSignTool as createSeaSignToolType } from '@electron/windows-sign'; 2 | import path from 'path'; 3 | import semver from 'semver'; 4 | import fs from 'fs-extra'; 5 | 6 | import { SquirrelWindowsOptions } from './options'; 7 | 8 | let VENDOR_PATH: string; 9 | let ORIGINAL_SIGN_TOOL_PATH: string; 10 | let BACKUP_SIGN_TOOL_PATH: string; 11 | let SIGN_LOG_PATH: string; 12 | 13 | /** 14 | * This method uses @electron/windows-sign to create a fake signtool.exe 15 | * that can be called by Squirrel - but then just calls @electron/windows-sign 16 | * to actually perform the signing. 17 | * 18 | * That's useful for users who need a high degree of customization of the signing 19 | * process but still want to use @electron/windows-installer. 20 | */ 21 | export async function createSignTool(options: SquirrelWindowsOptions): Promise { 22 | if (!options.windowsSign) { 23 | throw new Error('Signtool should only be created if windowsSign options are set'); 24 | } 25 | 26 | VENDOR_PATH = options.vendorDirectory || path.join(__dirname, '..', 'vendor'); 27 | ORIGINAL_SIGN_TOOL_PATH = path.join(VENDOR_PATH, 'signtool.exe'); 28 | BACKUP_SIGN_TOOL_PATH = path.join(VENDOR_PATH, 'signtool-original.exe'); 29 | SIGN_LOG_PATH = path.join(VENDOR_PATH, 'electron-windows-sign.log'); 30 | 31 | const createSeaSignTool = await getCreateSeaSignTool(); 32 | 33 | await resetSignTool(); 34 | await fs.remove(SIGN_LOG_PATH); 35 | 36 | // Make a backup of signtool.exe 37 | await fs.copy(ORIGINAL_SIGN_TOOL_PATH, BACKUP_SIGN_TOOL_PATH, { overwrite: true }); 38 | 39 | // Create a new signtool.exe using @electron/windows-sign 40 | await createSeaSignTool({ 41 | path: ORIGINAL_SIGN_TOOL_PATH, 42 | windowsSign: options.windowsSign 43 | }); 44 | } 45 | 46 | /** 47 | * Ensure that signtool.exe is actually the "real" signtool.exe, not our 48 | * fake substitute. 49 | */ 50 | export async function resetSignTool() { 51 | if (fs.existsSync(BACKUP_SIGN_TOOL_PATH)) { 52 | // Reset the backup of signtool.exe 53 | await fs.copy(BACKUP_SIGN_TOOL_PATH, ORIGINAL_SIGN_TOOL_PATH, { overwrite: true }); 54 | await fs.remove(BACKUP_SIGN_TOOL_PATH); 55 | } 56 | } 57 | 58 | /** 59 | * @electron/windows-installer only requires Node.js >= 8.0.0. 60 | * @electron/windows-sign requires Node.js >= 16.0.0. 61 | * @electron/windows-sign's "fake signtool.exe" feature requires 62 | * Node.js >= 20.0.0, the first version to contain the "single 63 | * executable" feature with proper support. 64 | * 65 | * Since this is overall a very niche feature and only benefits 66 | * consumers with rather advanced codesigning needs, we did not 67 | * want to make Node.js v18 a hard requirement for @electron/windows-installer. 68 | * 69 | * Instead, @electron/windows-sign is an optional dependency - and 70 | * if it didn't install, we'll throw a useful error here. 71 | * 72 | * @returns 73 | */ 74 | async function getCreateSeaSignTool(): Promise { 75 | try { 76 | const { createSeaSignTool } = await import('@electron/windows-sign'); 77 | return createSeaSignTool; 78 | } catch(error) { 79 | let message = 'In order to use windowsSign options, @electron/windows-sign must be installed as a dependency.'; 80 | 81 | if (semver.lte(process.version, '20.0.0')) { 82 | message += ` You are currently using Node.js ${process.version}. Please upgrade to Node.js 19 or later and reinstall all dependencies to ensure that @electron/windows-sign is available.`; 83 | } else { 84 | message += ` ${error}`; 85 | } 86 | 87 | throw new Error(message); 88 | } 89 | } 90 | -------------------------------------------------------------------------------- /src/spawn-promise.ts: -------------------------------------------------------------------------------- 1 | import { spawn as spawnOg, SpawnOptionsWithoutStdio } from 'child_process'; 2 | 3 | const d = require('debug')('electron-windows-installer:spawn'); 4 | 5 | // Public: Maps a process's output into an {Observable} 6 | // 7 | // exe - The program to execute 8 | // params - Arguments passed to the process 9 | // opts - Options that will be passed to child_process.spawn 10 | // 11 | // Returns an {Observable} with a single value, that is the output of the 12 | // spawned process 13 | export default function spawn(exe: string, params: string[], opts?: SpawnOptionsWithoutStdio): Promise { 14 | return new Promise((resolve, reject): void => { 15 | let proc = null; 16 | 17 | d(`Spawning ${exe} ${params.join(' ')}`); 18 | if (!opts) { 19 | proc = spawnOg(exe, params); 20 | } else { 21 | proc = spawnOg(exe, params, opts); 22 | } 23 | 24 | // We need to wait until all three events have happened: 25 | // * stdout's pipe is closed 26 | // * stderr's pipe is closed 27 | // * We've got an exit code 28 | let rejected = false; 29 | let refCount = 3; 30 | let stdout = ''; 31 | 32 | const release = (): void => { 33 | if (--refCount <= 0 && !rejected) resolve(stdout); 34 | }; 35 | 36 | const bufHandler = (chunk: string): void => { 37 | stdout += chunk; 38 | }; 39 | 40 | proc.stdout.setEncoding('utf8').on('data', bufHandler); 41 | proc.stdout.once('close', release); 42 | proc.stderr.setEncoding('utf8').on('data', bufHandler); 43 | proc.stderr.once('close', release); 44 | proc.on('error', (e: Error): void => reject(e)); 45 | 46 | proc.on('close', (code: number): void => { 47 | if (code === 0) { 48 | release(); 49 | } else { 50 | rejected = true; 51 | reject(new Error(`Failed with exit code: ${code}\nOutput:\n${stdout}`)); 52 | } 53 | }); 54 | }); 55 | } 56 | -------------------------------------------------------------------------------- /src/temp-utils.ts: -------------------------------------------------------------------------------- 1 | import * as temp from 'temp'; 2 | import { promisify } from 'util'; 3 | temp.track(); 4 | 5 | const createTempDir = promisify(temp.mkdir); 6 | 7 | export { 8 | createTempDir 9 | }; 10 | -------------------------------------------------------------------------------- /template.nuspectemplate: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | <%- name %> 5 | <%- title %> 6 | <%- version %> 7 | <%- authors %> 8 | <%- owners %> 9 | <%- iconUrl %> 10 | false 11 | <%- description %> 12 | <%- copyright %> 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | <% additionalFiles.forEach(function(f) { %> 27 | 28 | <% }); %> 29 | 30 | 31 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "commonjs", 4 | "target": "es5", 5 | "lib": [ 6 | "es2017" 7 | ], 8 | "sourceMap": true, 9 | "strict": true, 10 | "outDir": "lib", 11 | "declaration": true, 12 | "esModuleInterop": true, 13 | "types": [ 14 | "node" 15 | ] 16 | }, 17 | "include": [ 18 | "src", 19 | "typings" 20 | ] 21 | } 22 | -------------------------------------------------------------------------------- /typedoc.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://typedoc.org/schema.json", 3 | "entryPoints": ["./src/index.ts"] 4 | } 5 | -------------------------------------------------------------------------------- /vendor/7z-arm64.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/electron/windows-installer/1ccd266a0a529eb18f226bb92df69ba160a7ce2e/vendor/7z-arm64.dll -------------------------------------------------------------------------------- /vendor/7z-arm64.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/electron/windows-installer/1ccd266a0a529eb18f226bb92df69ba160a7ce2e/vendor/7z-arm64.exe -------------------------------------------------------------------------------- /vendor/7z-x64.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/electron/windows-installer/1ccd266a0a529eb18f226bb92df69ba160a7ce2e/vendor/7z-x64.dll -------------------------------------------------------------------------------- /vendor/7z-x64.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/electron/windows-installer/1ccd266a0a529eb18f226bb92df69ba160a7ce2e/vendor/7z-x64.exe -------------------------------------------------------------------------------- /vendor/Microsoft.Deployment.Resources.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/electron/windows-installer/1ccd266a0a529eb18f226bb92df69ba160a7ce2e/vendor/Microsoft.Deployment.Resources.dll -------------------------------------------------------------------------------- /vendor/Microsoft.Deployment.WindowsInstaller.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/electron/windows-installer/1ccd266a0a529eb18f226bb92df69ba160a7ce2e/vendor/Microsoft.Deployment.WindowsInstaller.dll -------------------------------------------------------------------------------- /vendor/Setup.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/electron/windows-installer/1ccd266a0a529eb18f226bb92df69ba160a7ce2e/vendor/Setup.exe -------------------------------------------------------------------------------- /vendor/Setup.pdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/electron/windows-installer/1ccd266a0a529eb18f226bb92df69ba160a7ce2e/vendor/Setup.pdb -------------------------------------------------------------------------------- /vendor/Squirrel-Mono.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/electron/windows-installer/1ccd266a0a529eb18f226bb92df69ba160a7ce2e/vendor/Squirrel-Mono.exe -------------------------------------------------------------------------------- /vendor/Squirrel-Mono.pdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/electron/windows-installer/1ccd266a0a529eb18f226bb92df69ba160a7ce2e/vendor/Squirrel-Mono.pdb -------------------------------------------------------------------------------- /vendor/Squirrel.com: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/electron/windows-installer/1ccd266a0a529eb18f226bb92df69ba160a7ce2e/vendor/Squirrel.com -------------------------------------------------------------------------------- /vendor/Squirrel.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/electron/windows-installer/1ccd266a0a529eb18f226bb92df69ba160a7ce2e/vendor/Squirrel.exe -------------------------------------------------------------------------------- /vendor/Squirrel.pdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/electron/windows-installer/1ccd266a0a529eb18f226bb92df69ba160a7ce2e/vendor/Squirrel.pdb -------------------------------------------------------------------------------- /vendor/StubExecutable.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/electron/windows-installer/1ccd266a0a529eb18f226bb92df69ba160a7ce2e/vendor/StubExecutable.exe -------------------------------------------------------------------------------- /vendor/SyncReleases.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/electron/windows-installer/1ccd266a0a529eb18f226bb92df69ba160a7ce2e/vendor/SyncReleases.exe -------------------------------------------------------------------------------- /vendor/SyncReleases.pdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/electron/windows-installer/1ccd266a0a529eb18f226bb92df69ba160a7ce2e/vendor/SyncReleases.pdb -------------------------------------------------------------------------------- /vendor/WixNetFxExtension.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/electron/windows-installer/1ccd266a0a529eb18f226bb92df69ba160a7ce2e/vendor/WixNetFxExtension.dll -------------------------------------------------------------------------------- /vendor/WriteZipToSetup.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/electron/windows-installer/1ccd266a0a529eb18f226bb92df69ba160a7ce2e/vendor/WriteZipToSetup.exe -------------------------------------------------------------------------------- /vendor/WriteZipToSetup.pdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/electron/windows-installer/1ccd266a0a529eb18f226bb92df69ba160a7ce2e/vendor/WriteZipToSetup.pdb -------------------------------------------------------------------------------- /vendor/candle.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/electron/windows-installer/1ccd266a0a529eb18f226bb92df69ba160a7ce2e/vendor/candle.exe -------------------------------------------------------------------------------- /vendor/candle.exe.config: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /vendor/darice.cub: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/electron/windows-installer/1ccd266a0a529eb18f226bb92df69ba160a7ce2e/vendor/darice.cub -------------------------------------------------------------------------------- /vendor/light.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/electron/windows-installer/1ccd266a0a529eb18f226bb92df69ba160a7ce2e/vendor/light.exe -------------------------------------------------------------------------------- /vendor/light.exe.config: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /vendor/nuget.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/electron/windows-installer/1ccd266a0a529eb18f226bb92df69ba160a7ce2e/vendor/nuget.exe -------------------------------------------------------------------------------- /vendor/rcedit.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/electron/windows-installer/1ccd266a0a529eb18f226bb92df69ba160a7ce2e/vendor/rcedit.exe -------------------------------------------------------------------------------- /vendor/signtool.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/electron/windows-installer/1ccd266a0a529eb18f226bb92df69ba160a7ce2e/vendor/signtool.exe -------------------------------------------------------------------------------- /vendor/template.wxs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /vendor/wconsole.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/electron/windows-installer/1ccd266a0a529eb18f226bb92df69ba160a7ce2e/vendor/wconsole.dll -------------------------------------------------------------------------------- /vendor/winterop.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/electron/windows-installer/1ccd266a0a529eb18f226bb92df69ba160a7ce2e/vendor/winterop.dll -------------------------------------------------------------------------------- /vendor/wix.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/electron/windows-installer/1ccd266a0a529eb18f226bb92df69ba160a7ce2e/vendor/wix.dll -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@aashutoshrathi/word-wrap@^1.2.3": 6 | version "1.2.6" 7 | resolved "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz" 8 | integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== 9 | 10 | "@cspotcode/source-map-support@^0.8.0": 11 | version "0.8.1" 12 | resolved "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz" 13 | integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== 14 | dependencies: 15 | "@jridgewell/trace-mapping" "0.3.9" 16 | 17 | "@electron/asar@^3.2.1": 18 | version "3.2.1" 19 | resolved "https://registry.npmjs.org/@electron/asar/-/asar-3.2.1.tgz" 20 | integrity sha512-hE2cQMZ5+4o7+6T2lUaVbxIzrOjZZfX7dB02xuapyYFJZEAiWTelq6J3mMoxzd0iONDvYLPVKecB5tyjIoVDVA== 21 | dependencies: 22 | chromium-pickle-js "^0.2.0" 23 | commander "^5.0.0" 24 | glob "^7.1.6" 25 | minimatch "^3.0.4" 26 | optionalDependencies: 27 | "@types/glob" "^7.1.1" 28 | 29 | "@electron/windows-sign@^1.1.2": 30 | version "1.1.2" 31 | resolved "https://registry.yarnpkg.com/@electron/windows-sign/-/windows-sign-1.1.2.tgz#5489861ca62348d2300407e85d949af95849955e" 32 | integrity sha512-eXEiZjDtxW3QORCWfRUarANPRTlH9B6At4jqBZJ0NzokSGutXQUVLPA6WmGpIhDW6w2yCMdHW1EJd1HrXtU5sg== 33 | dependencies: 34 | cross-dirname "^0.1.0" 35 | debug "^4.3.4" 36 | fs-extra "^11.1.1" 37 | minimist "^1.2.8" 38 | postject "^1.0.0-alpha.6" 39 | 40 | "@eslint-community/eslint-utils@^4.2.0": 41 | version "4.4.0" 42 | resolved "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz" 43 | integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== 44 | dependencies: 45 | eslint-visitor-keys "^3.3.0" 46 | 47 | "@eslint-community/regexpp@^4.4.0", "@eslint-community/regexpp@^4.6.1": 48 | version "4.8.1" 49 | resolved "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.8.1.tgz" 50 | integrity sha512-PWiOzLIUAjN/w5K17PoF4n6sKBw0gqLHPhywmYHP4t1VFQQVYeb1yWsJwnMVEMl3tUHME7X/SJPZLmtG7XBDxQ== 51 | 52 | "@eslint/eslintrc@^2.1.2": 53 | version "2.1.2" 54 | resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz" 55 | integrity sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g== 56 | dependencies: 57 | ajv "^6.12.4" 58 | debug "^4.3.2" 59 | espree "^9.6.0" 60 | globals "^13.19.0" 61 | ignore "^5.2.0" 62 | import-fresh "^3.2.1" 63 | js-yaml "^4.1.0" 64 | minimatch "^3.1.2" 65 | strip-json-comments "^3.1.1" 66 | 67 | "@eslint/js@8.49.0": 68 | version "8.49.0" 69 | resolved "https://registry.npmjs.org/@eslint/js/-/js-8.49.0.tgz" 70 | integrity sha512-1S8uAY/MTJqVx0SC4epBq+N2yhuwtNwLbJYNZyhL2pO1ZVKn5HFXav5T41Ryzy9K9V7ZId2JB2oy/W4aCd9/2w== 71 | 72 | "@humanwhocodes/config-array@^0.11.11": 73 | version "0.11.11" 74 | resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.11.tgz" 75 | integrity sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA== 76 | dependencies: 77 | "@humanwhocodes/object-schema" "^1.2.1" 78 | debug "^4.1.1" 79 | minimatch "^3.0.5" 80 | 81 | "@humanwhocodes/module-importer@^1.0.1": 82 | version "1.0.1" 83 | resolved "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz" 84 | integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== 85 | 86 | "@humanwhocodes/object-schema@^1.2.1": 87 | version "1.2.1" 88 | resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz" 89 | integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== 90 | 91 | "@jridgewell/resolve-uri@^3.0.3": 92 | version "3.1.1" 93 | resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz" 94 | integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== 95 | 96 | "@jridgewell/sourcemap-codec@^1.4.10": 97 | version "1.4.15" 98 | resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz" 99 | integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== 100 | 101 | "@jridgewell/trace-mapping@0.3.9": 102 | version "0.3.9" 103 | resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz" 104 | integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== 105 | dependencies: 106 | "@jridgewell/resolve-uri" "^3.0.3" 107 | "@jridgewell/sourcemap-codec" "^1.4.10" 108 | 109 | "@nodelib/fs.scandir@2.1.5": 110 | version "2.1.5" 111 | resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" 112 | integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== 113 | dependencies: 114 | "@nodelib/fs.stat" "2.0.5" 115 | run-parallel "^1.1.9" 116 | 117 | "@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": 118 | version "2.0.5" 119 | resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" 120 | integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== 121 | 122 | "@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": 123 | version "1.2.8" 124 | resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" 125 | integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== 126 | dependencies: 127 | "@nodelib/fs.scandir" "2.1.5" 128 | fastq "^1.6.0" 129 | 130 | "@tsconfig/node10@^1.0.7": 131 | version "1.0.9" 132 | resolved "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz" 133 | integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== 134 | 135 | "@tsconfig/node12@^1.0.7": 136 | version "1.0.11" 137 | resolved "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz" 138 | integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== 139 | 140 | "@tsconfig/node14@^1.0.0": 141 | version "1.0.3" 142 | resolved "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz" 143 | integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== 144 | 145 | "@tsconfig/node16@^1.0.2": 146 | version "1.0.4" 147 | resolved "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz" 148 | integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== 149 | 150 | "@types/events@*": 151 | version "3.0.0" 152 | resolved "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz" 153 | integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g== 154 | 155 | "@types/fs-extra@^5.0.5": 156 | version "5.1.0" 157 | resolved "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-5.1.0.tgz" 158 | integrity sha512-AInn5+UBFIK9FK5xc9yP5e3TQSPNNgjHByqYcj9g5elVBnDQcQL7PlO1CIRy2gWlbwK7UPYqi7vRvFA44dCmYQ== 159 | dependencies: 160 | "@types/node" "*" 161 | 162 | "@types/glob@^7.1.1": 163 | version "7.1.1" 164 | resolved "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz" 165 | integrity sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w== 166 | dependencies: 167 | "@types/events" "*" 168 | "@types/minimatch" "*" 169 | "@types/node" "*" 170 | 171 | "@types/json-schema@^7.0.9": 172 | version "7.0.12" 173 | resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz" 174 | integrity sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA== 175 | 176 | "@types/lodash@^4.17.0": 177 | version "4.17.0" 178 | resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.17.0.tgz#d774355e41f372d5350a4d0714abb48194a489c3" 179 | integrity sha512-t7dhREVv6dbNj0q17X12j7yDG4bD/DHYX7o5/DbDxobP0HnGPgpRz2Ej77aL7TZT3DSw13fqUTj8J4mMnqa7WA== 180 | 181 | "@types/minimatch@*": 182 | version "3.0.3" 183 | resolved "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz" 184 | integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== 185 | 186 | "@types/node@*", "@types/node@^20.6.0": 187 | version "20.6.0" 188 | resolved "https://registry.npmjs.org/@types/node/-/node-20.6.0.tgz" 189 | integrity sha512-najjVq5KN2vsH2U/xyh2opaSEz6cZMR2SetLIlxlj08nOcmPOemJmUK2o4kUzfLqfrWE0PIrNeE16XhYDd3nqg== 190 | 191 | "@types/semver@^7.3.12": 192 | version "7.5.1" 193 | resolved "https://registry.npmjs.org/@types/semver/-/semver-7.5.1.tgz" 194 | integrity sha512-cJRQXpObxfNKkFAZbJl2yjWtJCqELQIdShsogr1d2MilP8dKD9TE/nEKHkJgUNHdGKCQaf9HbIynuV2csLGVLg== 195 | 196 | "@types/temp@^0.8.34": 197 | version "0.8.34" 198 | resolved "https://registry.npmjs.org/@types/temp/-/temp-0.8.34.tgz" 199 | integrity sha512-oLa9c5LHXgS6UimpEVp08De7QvZ+Dfu5bMQuWyMhf92Z26Q10ubEMOWy9OEfUdzW7Y/sDWVHmUaLFtmnX/2j0w== 200 | dependencies: 201 | "@types/node" "*" 202 | 203 | "@typescript-eslint/eslint-plugin@^5.62.0": 204 | version "5.62.0" 205 | resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz" 206 | integrity sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag== 207 | dependencies: 208 | "@eslint-community/regexpp" "^4.4.0" 209 | "@typescript-eslint/scope-manager" "5.62.0" 210 | "@typescript-eslint/type-utils" "5.62.0" 211 | "@typescript-eslint/utils" "5.62.0" 212 | debug "^4.3.4" 213 | graphemer "^1.4.0" 214 | ignore "^5.2.0" 215 | natural-compare-lite "^1.4.0" 216 | semver "^7.3.7" 217 | tsutils "^3.21.0" 218 | 219 | "@typescript-eslint/parser@^5.62.0": 220 | version "5.62.0" 221 | resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz" 222 | integrity sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA== 223 | dependencies: 224 | "@typescript-eslint/scope-manager" "5.62.0" 225 | "@typescript-eslint/types" "5.62.0" 226 | "@typescript-eslint/typescript-estree" "5.62.0" 227 | debug "^4.3.4" 228 | 229 | "@typescript-eslint/scope-manager@5.62.0": 230 | version "5.62.0" 231 | resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz" 232 | integrity sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w== 233 | dependencies: 234 | "@typescript-eslint/types" "5.62.0" 235 | "@typescript-eslint/visitor-keys" "5.62.0" 236 | 237 | "@typescript-eslint/type-utils@5.62.0": 238 | version "5.62.0" 239 | resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz" 240 | integrity sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew== 241 | dependencies: 242 | "@typescript-eslint/typescript-estree" "5.62.0" 243 | "@typescript-eslint/utils" "5.62.0" 244 | debug "^4.3.4" 245 | tsutils "^3.21.0" 246 | 247 | "@typescript-eslint/types@5.62.0": 248 | version "5.62.0" 249 | resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz" 250 | integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== 251 | 252 | "@typescript-eslint/typescript-estree@5.62.0": 253 | version "5.62.0" 254 | resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz" 255 | integrity sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA== 256 | dependencies: 257 | "@typescript-eslint/types" "5.62.0" 258 | "@typescript-eslint/visitor-keys" "5.62.0" 259 | debug "^4.3.4" 260 | globby "^11.1.0" 261 | is-glob "^4.0.3" 262 | semver "^7.3.7" 263 | tsutils "^3.21.0" 264 | 265 | "@typescript-eslint/utils@5.62.0": 266 | version "5.62.0" 267 | resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz" 268 | integrity sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ== 269 | dependencies: 270 | "@eslint-community/eslint-utils" "^4.2.0" 271 | "@types/json-schema" "^7.0.9" 272 | "@types/semver" "^7.3.12" 273 | "@typescript-eslint/scope-manager" "5.62.0" 274 | "@typescript-eslint/types" "5.62.0" 275 | "@typescript-eslint/typescript-estree" "5.62.0" 276 | eslint-scope "^5.1.1" 277 | semver "^7.3.7" 278 | 279 | "@typescript-eslint/visitor-keys@5.62.0": 280 | version "5.62.0" 281 | resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz" 282 | integrity sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw== 283 | dependencies: 284 | "@typescript-eslint/types" "5.62.0" 285 | eslint-visitor-keys "^3.3.0" 286 | 287 | acorn-jsx@^5.3.2: 288 | version "5.3.2" 289 | resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" 290 | integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== 291 | 292 | acorn-walk@^8.1.1, acorn-walk@^8.2.0: 293 | version "8.2.0" 294 | resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz" 295 | integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== 296 | 297 | acorn@^8.4.1, acorn@^8.8.2, acorn@^8.9.0: 298 | version "8.10.0" 299 | resolved "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz" 300 | integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== 301 | 302 | aggregate-error@^4.0.0: 303 | version "4.0.1" 304 | resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-4.0.1.tgz" 305 | integrity sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w== 306 | dependencies: 307 | clean-stack "^4.0.0" 308 | indent-string "^5.0.0" 309 | 310 | ajv@^6.12.4: 311 | version "6.12.6" 312 | resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" 313 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== 314 | dependencies: 315 | fast-deep-equal "^3.1.1" 316 | fast-json-stable-stringify "^2.0.0" 317 | json-schema-traverse "^0.4.1" 318 | uri-js "^4.2.2" 319 | 320 | ansi-regex@^5.0.1: 321 | version "5.0.1" 322 | resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" 323 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== 324 | 325 | ansi-regex@^6.0.1: 326 | version "6.0.1" 327 | resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz" 328 | integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== 329 | 330 | ansi-sequence-parser@^1.1.0: 331 | version "1.1.1" 332 | resolved "https://registry.yarnpkg.com/ansi-sequence-parser/-/ansi-sequence-parser-1.1.1.tgz#e0aa1cdcbc8f8bb0b5bca625aac41f5f056973cf" 333 | integrity sha512-vJXt3yiaUL4UU546s3rPXlsry/RnM730G1+HkpKE012AN0sx1eOrxSu95oKDIonskeLTijMgqWZ3uDEe3NFvyg== 334 | 335 | ansi-styles@^4.0.0: 336 | version "4.0.0" 337 | resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.0.0.tgz" 338 | integrity sha512-8zjUtFJ3db/QoPXuuEMloS2AUf79/yeyttJ7Abr3hteopJu9HK8vsgGviGUMq+zyA6cZZO6gAyZoMTF6TgaEjA== 339 | dependencies: 340 | color-convert "^2.0.0" 341 | 342 | ansi-styles@^4.1.0: 343 | version "4.3.0" 344 | resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" 345 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 346 | dependencies: 347 | color-convert "^2.0.1" 348 | 349 | ansi-styles@^6.0.0, ansi-styles@^6.2.1: 350 | version "6.2.1" 351 | resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz" 352 | integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== 353 | 354 | anymatch@~3.1.2: 355 | version "3.1.3" 356 | resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz" 357 | integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== 358 | dependencies: 359 | normalize-path "^3.0.0" 360 | picomatch "^2.0.4" 361 | 362 | arg@^4.1.0: 363 | version "4.1.0" 364 | resolved "https://registry.npmjs.org/arg/-/arg-4.1.0.tgz" 365 | integrity sha512-ZWc51jO3qegGkVh8Hwpv636EkbesNV5ZNQPCtRa+0qytRYPEs9IYT9qITY9buezqUH5uqyzlWLcufrzU2rffdg== 366 | 367 | argparse@^1.0.7: 368 | version "1.0.10" 369 | resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" 370 | integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== 371 | dependencies: 372 | sprintf-js "~1.0.2" 373 | 374 | argparse@^2.0.1: 375 | version "2.0.1" 376 | resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" 377 | integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== 378 | 379 | array-find-index@^1.0.1: 380 | version "1.0.2" 381 | resolved "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz" 382 | integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E= 383 | 384 | array-union@^2.1.0: 385 | version "2.1.0" 386 | resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" 387 | integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== 388 | 389 | arrgv@^1.0.2: 390 | version "1.0.2" 391 | resolved "https://registry.npmjs.org/arrgv/-/arrgv-1.0.2.tgz" 392 | integrity sha512-a4eg4yhp7mmruZDQFqVMlxNRFGi/i1r87pt8SDHy0/I8PqSXoUTlWZRdAZo0VXgvEARcujbtTk8kiZRi1uDGRw== 393 | 394 | arrify@^3.0.0: 395 | version "3.0.0" 396 | resolved "https://registry.npmjs.org/arrify/-/arrify-3.0.0.tgz" 397 | integrity sha512-tLkvA81vQG/XqE2mjDkGQHoOINtMHtysSnemrmoGe6PydDPMRbVugqyk4A6V/WDWEfm3l+0d8anA9r8cv/5Jaw== 398 | 399 | ava@^5.1.1: 400 | version "5.3.1" 401 | resolved "https://registry.npmjs.org/ava/-/ava-5.3.1.tgz" 402 | integrity sha512-Scv9a4gMOXB6+ni4toLuhAm9KYWEjsgBglJl+kMGI5+IVDt120CCDZyB5HNU9DjmLI2t4I0GbnxGLmmRfGTJGg== 403 | dependencies: 404 | acorn "^8.8.2" 405 | acorn-walk "^8.2.0" 406 | ansi-styles "^6.2.1" 407 | arrgv "^1.0.2" 408 | arrify "^3.0.0" 409 | callsites "^4.0.0" 410 | cbor "^8.1.0" 411 | chalk "^5.2.0" 412 | chokidar "^3.5.3" 413 | chunkd "^2.0.1" 414 | ci-info "^3.8.0" 415 | ci-parallel-vars "^1.0.1" 416 | clean-yaml-object "^0.1.0" 417 | cli-truncate "^3.1.0" 418 | code-excerpt "^4.0.0" 419 | common-path-prefix "^3.0.0" 420 | concordance "^5.0.4" 421 | currently-unhandled "^0.4.1" 422 | debug "^4.3.4" 423 | emittery "^1.0.1" 424 | figures "^5.0.0" 425 | globby "^13.1.4" 426 | ignore-by-default "^2.1.0" 427 | indent-string "^5.0.0" 428 | is-error "^2.2.2" 429 | is-plain-object "^5.0.0" 430 | is-promise "^4.0.0" 431 | matcher "^5.0.0" 432 | mem "^9.0.2" 433 | ms "^2.1.3" 434 | p-event "^5.0.1" 435 | p-map "^5.5.0" 436 | picomatch "^2.3.1" 437 | pkg-conf "^4.0.0" 438 | plur "^5.1.0" 439 | pretty-ms "^8.0.0" 440 | resolve-cwd "^3.0.0" 441 | stack-utils "^2.0.6" 442 | strip-ansi "^7.0.1" 443 | supertap "^3.0.1" 444 | temp-dir "^3.0.0" 445 | write-file-atomic "^5.0.1" 446 | yargs "^17.7.2" 447 | 448 | balanced-match@^1.0.0: 449 | version "1.0.0" 450 | resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz" 451 | integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= 452 | 453 | binary-extensions@^2.0.0: 454 | version "2.0.0" 455 | resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz" 456 | integrity sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow== 457 | 458 | blueimp-md5@^2.10.0: 459 | version "2.19.0" 460 | resolved "https://registry.npmjs.org/blueimp-md5/-/blueimp-md5-2.19.0.tgz" 461 | integrity sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w== 462 | 463 | brace-expansion@^1.1.7: 464 | version "1.1.11" 465 | resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" 466 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 467 | dependencies: 468 | balanced-match "^1.0.0" 469 | concat-map "0.0.1" 470 | 471 | brace-expansion@^2.0.1: 472 | version "2.0.1" 473 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" 474 | integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== 475 | dependencies: 476 | balanced-match "^1.0.0" 477 | 478 | braces@^3.0.3, braces@~3.0.2: 479 | version "3.0.3" 480 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" 481 | integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== 482 | dependencies: 483 | fill-range "^7.1.1" 484 | 485 | callsites@^3.0.0: 486 | version "3.1.0" 487 | resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" 488 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== 489 | 490 | callsites@^4.0.0: 491 | version "4.1.0" 492 | resolved "https://registry.npmjs.org/callsites/-/callsites-4.1.0.tgz" 493 | integrity sha512-aBMbD1Xxay75ViYezwT40aQONfr+pSXTHwNKvIXhXD6+LY3F1dLIcceoC5OZKBVHbXcysz1hL9D2w0JJIMXpUw== 494 | 495 | cbor@^8.1.0: 496 | version "8.1.0" 497 | resolved "https://registry.npmjs.org/cbor/-/cbor-8.1.0.tgz" 498 | integrity sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg== 499 | dependencies: 500 | nofilter "^3.1.0" 501 | 502 | chalk@^4.0.0: 503 | version "4.1.2" 504 | resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" 505 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== 506 | dependencies: 507 | ansi-styles "^4.1.0" 508 | supports-color "^7.1.0" 509 | 510 | chalk@^5.2.0: 511 | version "5.3.0" 512 | resolved "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz" 513 | integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w== 514 | 515 | chokidar@^3.5.3: 516 | version "3.5.3" 517 | resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz" 518 | integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== 519 | dependencies: 520 | anymatch "~3.1.2" 521 | braces "~3.0.2" 522 | glob-parent "~5.1.2" 523 | is-binary-path "~2.1.0" 524 | is-glob "~4.0.1" 525 | normalize-path "~3.0.0" 526 | readdirp "~3.6.0" 527 | optionalDependencies: 528 | fsevents "~2.3.2" 529 | 530 | chromium-pickle-js@^0.2.0: 531 | version "0.2.0" 532 | resolved "https://registry.npmjs.org/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz" 533 | integrity sha1-BKEGZywYsIWrd02YPfo+oTjyIgU= 534 | 535 | chunkd@^2.0.1: 536 | version "2.0.1" 537 | resolved "https://registry.npmjs.org/chunkd/-/chunkd-2.0.1.tgz" 538 | integrity sha512-7d58XsFmOq0j6el67Ug9mHf9ELUXsQXYJBkyxhH/k+6Ke0qXRnv0kbemx+Twc6fRJ07C49lcbdgm9FL1Ei/6SQ== 539 | 540 | ci-info@^3.8.0: 541 | version "3.8.0" 542 | resolved "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz" 543 | integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw== 544 | 545 | ci-parallel-vars@^1.0.1: 546 | version "1.0.1" 547 | resolved "https://registry.npmjs.org/ci-parallel-vars/-/ci-parallel-vars-1.0.1.tgz" 548 | integrity sha512-uvzpYrpmidaoxvIQHM+rKSrigjOe9feHYbw4uOI2gdfe1C3xIlxO+kVXq83WQWNniTf8bAxVpy+cQeFQsMERKg== 549 | 550 | clean-stack@^4.0.0: 551 | version "4.2.0" 552 | resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-4.2.0.tgz" 553 | integrity sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg== 554 | dependencies: 555 | escape-string-regexp "5.0.0" 556 | 557 | clean-yaml-object@^0.1.0: 558 | version "0.1.0" 559 | resolved "https://registry.npmjs.org/clean-yaml-object/-/clean-yaml-object-0.1.0.tgz" 560 | integrity sha1-Y/sRDcLOGoTcIfbZM0h20BCui2g= 561 | 562 | cli-truncate@^3.1.0: 563 | version "3.1.0" 564 | resolved "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz" 565 | integrity sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA== 566 | dependencies: 567 | slice-ansi "^5.0.0" 568 | string-width "^5.0.0" 569 | 570 | cliui@^8.0.1: 571 | version "8.0.1" 572 | resolved "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz" 573 | integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== 574 | dependencies: 575 | string-width "^4.2.0" 576 | strip-ansi "^6.0.1" 577 | wrap-ansi "^7.0.0" 578 | 579 | code-excerpt@^4.0.0: 580 | version "4.0.0" 581 | resolved "https://registry.npmjs.org/code-excerpt/-/code-excerpt-4.0.0.tgz" 582 | integrity sha512-xxodCmBen3iy2i0WtAK8FlFNrRzjUqjRsMfho58xT/wvZU1YTM3fCnRjcy1gJPMepaRlgm/0e6w8SpWHpn3/cA== 583 | dependencies: 584 | convert-to-spaces "^2.0.1" 585 | 586 | color-convert@^2.0.0: 587 | version "2.0.0" 588 | resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.0.tgz" 589 | integrity sha512-hzTicsCJIHdxih9+2aLR1tNGZX5qSJGRHDPVwSY26tVrEf55XNajLOBWz2UuWSIergszA09/bqnOiHyqx9fxQg== 590 | dependencies: 591 | color-name "~1.1.4" 592 | 593 | color-convert@^2.0.1: 594 | version "2.0.1" 595 | resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" 596 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 597 | dependencies: 598 | color-name "~1.1.4" 599 | 600 | color-name@~1.1.4: 601 | version "1.1.4" 602 | resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" 603 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 604 | 605 | commander@^5.0.0: 606 | version "5.1.0" 607 | resolved "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz" 608 | integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== 609 | 610 | commander@^9.4.0: 611 | version "9.5.0" 612 | resolved "https://registry.yarnpkg.com/commander/-/commander-9.5.0.tgz#bc08d1eb5cedf7ccb797a96199d41c7bc3e60d30" 613 | integrity sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ== 614 | 615 | common-path-prefix@^3.0.0: 616 | version "3.0.0" 617 | resolved "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz" 618 | integrity sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w== 619 | 620 | concat-map@0.0.1: 621 | version "0.0.1" 622 | resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" 623 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 624 | 625 | concordance@^5.0.4: 626 | version "5.0.4" 627 | resolved "https://registry.npmjs.org/concordance/-/concordance-5.0.4.tgz" 628 | integrity sha512-OAcsnTEYu1ARJqWVGwf4zh4JDfHZEaSNlNccFmt8YjB2l/n19/PF2viLINHc57vO4FKIAFl2FWASIGZZWZ2Kxw== 629 | dependencies: 630 | date-time "^3.1.0" 631 | esutils "^2.0.3" 632 | fast-diff "^1.2.0" 633 | js-string-escape "^1.0.1" 634 | lodash "^4.17.15" 635 | md5-hex "^3.0.1" 636 | semver "^7.3.2" 637 | well-known-symbols "^2.0.0" 638 | 639 | convert-to-spaces@^2.0.1: 640 | version "2.0.1" 641 | resolved "https://registry.npmjs.org/convert-to-spaces/-/convert-to-spaces-2.0.1.tgz" 642 | integrity sha512-rcQ1bsQO9799wq24uE5AM2tAILy4gXGIK/njFWcVQkGNZ96edlpY+A7bjwvzjYvLDyzmG1MmMLZhpcsb+klNMQ== 643 | 644 | create-require@^1.1.0: 645 | version "1.1.1" 646 | resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz" 647 | integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== 648 | 649 | cross-dirname@^0.1.0: 650 | version "0.1.0" 651 | resolved "https://registry.yarnpkg.com/cross-dirname/-/cross-dirname-0.1.0.tgz#b899599f30a5389f59e78c150e19f957ad16a37c" 652 | integrity sha512-+R08/oI0nl3vfPcqftZRpytksBXDzOUveBq/NBVx0sUp1axwzPQrKinNx5yd5sxPu8j1wIy8AfnVQ+5eFdha6Q== 653 | 654 | cross-spawn@^7.0.2: 655 | version "7.0.6" 656 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" 657 | integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== 658 | dependencies: 659 | path-key "^3.1.0" 660 | shebang-command "^2.0.0" 661 | which "^2.0.1" 662 | 663 | currently-unhandled@^0.4.1: 664 | version "0.4.1" 665 | resolved "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz" 666 | integrity sha1-mI3zP+qxke95mmE2nddsF635V+o= 667 | dependencies: 668 | array-find-index "^1.0.1" 669 | 670 | date-time@^3.1.0: 671 | version "3.1.0" 672 | resolved "https://registry.npmjs.org/date-time/-/date-time-3.1.0.tgz" 673 | integrity sha512-uqCUKXE5q1PNBXjPqvwhwJf9SwMoAHBgWJ6DcrnS5o+W2JOiIILl0JEdVD8SGujrNS02GGxgwAg2PN2zONgtjg== 674 | dependencies: 675 | time-zone "^1.0.0" 676 | 677 | debug@^4.1.1: 678 | version "4.3.1" 679 | resolved "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz" 680 | integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== 681 | dependencies: 682 | ms "2.1.2" 683 | 684 | debug@^4.3.2, debug@^4.3.4: 685 | version "4.3.4" 686 | resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" 687 | integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== 688 | dependencies: 689 | ms "2.1.2" 690 | 691 | deep-is@^0.1.3: 692 | version "0.1.4" 693 | resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" 694 | integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== 695 | 696 | diff@^4.0.1: 697 | version "4.0.1" 698 | resolved "https://registry.npmjs.org/diff/-/diff-4.0.1.tgz" 699 | integrity sha512-s2+XdvhPCOF01LRQBC8hf4vhbVmI2CGS5aZnxLJlT5FtdhPCDFq80q++zK2KlrVorVDdL5BOGZ/VfLrVtYNF+Q== 700 | 701 | dir-glob@^3.0.1: 702 | version "3.0.1" 703 | resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" 704 | integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== 705 | dependencies: 706 | path-type "^4.0.0" 707 | 708 | doctrine@^3.0.0: 709 | version "3.0.0" 710 | resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" 711 | integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== 712 | dependencies: 713 | esutils "^2.0.2" 714 | 715 | eastasianwidth@^0.2.0: 716 | version "0.2.0" 717 | resolved "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz" 718 | integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== 719 | 720 | emittery@^1.0.1: 721 | version "1.0.1" 722 | resolved "https://registry.npmjs.org/emittery/-/emittery-1.0.1.tgz" 723 | integrity sha512-2ID6FdrMD9KDLldGesP6317G78K7km/kMcwItRtVFva7I/cSEOIaLpewaUb+YLXVwdAp3Ctfxh/V5zIl1sj7dQ== 724 | 725 | emoji-regex@^8.0.0: 726 | version "8.0.0" 727 | resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" 728 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== 729 | 730 | emoji-regex@^9.2.2: 731 | version "9.2.2" 732 | resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz" 733 | integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== 734 | 735 | enhance-visitors@^1.0.0: 736 | version "1.0.0" 737 | resolved "https://registry.npmjs.org/enhance-visitors/-/enhance-visitors-1.0.0.tgz" 738 | integrity sha1-qpRdBdpGVnKh69OP7i7T2oUY6Vo= 739 | dependencies: 740 | lodash "^4.13.1" 741 | 742 | escalade@^3.1.1: 743 | version "3.1.1" 744 | resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" 745 | integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== 746 | 747 | escape-string-regexp@5.0.0, escape-string-regexp@^5.0.0: 748 | version "5.0.0" 749 | resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz" 750 | integrity sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw== 751 | 752 | escape-string-regexp@^2.0.0: 753 | version "2.0.0" 754 | resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz" 755 | integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== 756 | 757 | escape-string-regexp@^4.0.0: 758 | version "4.0.0" 759 | resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" 760 | integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== 761 | 762 | eslint-plugin-ava@^14.0.0: 763 | version "14.0.0" 764 | resolved "https://registry.npmjs.org/eslint-plugin-ava/-/eslint-plugin-ava-14.0.0.tgz" 765 | integrity sha512-XmKT6hppaipwwnLVwwvQliSU6AF1QMHiNoLD5JQfzhUhf0jY7CO0O624fQrE+Y/fTb9vbW8r77nKf7M/oHulxw== 766 | dependencies: 767 | enhance-visitors "^1.0.0" 768 | eslint-utils "^3.0.0" 769 | espree "^9.0.0" 770 | espurify "^2.1.1" 771 | import-modules "^2.1.0" 772 | micro-spelling-correcter "^1.1.1" 773 | pkg-dir "^5.0.0" 774 | resolve-from "^5.0.0" 775 | 776 | eslint-scope@^5.1.1: 777 | version "5.1.1" 778 | resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" 779 | integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== 780 | dependencies: 781 | esrecurse "^4.3.0" 782 | estraverse "^4.1.1" 783 | 784 | eslint-scope@^7.2.2: 785 | version "7.2.2" 786 | resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz" 787 | integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== 788 | dependencies: 789 | esrecurse "^4.3.0" 790 | estraverse "^5.2.0" 791 | 792 | eslint-utils@^3.0.0: 793 | version "3.0.0" 794 | resolved "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz" 795 | integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== 796 | dependencies: 797 | eslint-visitor-keys "^2.0.0" 798 | 799 | eslint-visitor-keys@^2.0.0: 800 | version "2.1.0" 801 | resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz" 802 | integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== 803 | 804 | eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: 805 | version "3.4.3" 806 | resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz" 807 | integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== 808 | 809 | eslint@^8.49.0: 810 | version "8.49.0" 811 | resolved "https://registry.npmjs.org/eslint/-/eslint-8.49.0.tgz" 812 | integrity sha512-jw03ENfm6VJI0jA9U+8H5zfl5b+FvuU3YYvZRdZHOlU2ggJkxrlkJH4HcDrZpj6YwD8kuYqvQM8LyesoazrSOQ== 813 | dependencies: 814 | "@eslint-community/eslint-utils" "^4.2.0" 815 | "@eslint-community/regexpp" "^4.6.1" 816 | "@eslint/eslintrc" "^2.1.2" 817 | "@eslint/js" "8.49.0" 818 | "@humanwhocodes/config-array" "^0.11.11" 819 | "@humanwhocodes/module-importer" "^1.0.1" 820 | "@nodelib/fs.walk" "^1.2.8" 821 | ajv "^6.12.4" 822 | chalk "^4.0.0" 823 | cross-spawn "^7.0.2" 824 | debug "^4.3.2" 825 | doctrine "^3.0.0" 826 | escape-string-regexp "^4.0.0" 827 | eslint-scope "^7.2.2" 828 | eslint-visitor-keys "^3.4.3" 829 | espree "^9.6.1" 830 | esquery "^1.4.2" 831 | esutils "^2.0.2" 832 | fast-deep-equal "^3.1.3" 833 | file-entry-cache "^6.0.1" 834 | find-up "^5.0.0" 835 | glob-parent "^6.0.2" 836 | globals "^13.19.0" 837 | graphemer "^1.4.0" 838 | ignore "^5.2.0" 839 | imurmurhash "^0.1.4" 840 | is-glob "^4.0.0" 841 | is-path-inside "^3.0.3" 842 | js-yaml "^4.1.0" 843 | json-stable-stringify-without-jsonify "^1.0.1" 844 | levn "^0.4.1" 845 | lodash.merge "^4.6.2" 846 | minimatch "^3.1.2" 847 | natural-compare "^1.4.0" 848 | optionator "^0.9.3" 849 | strip-ansi "^6.0.1" 850 | text-table "^0.2.0" 851 | 852 | espree@^9.0.0, espree@^9.6.0, espree@^9.6.1: 853 | version "9.6.1" 854 | resolved "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz" 855 | integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== 856 | dependencies: 857 | acorn "^8.9.0" 858 | acorn-jsx "^5.3.2" 859 | eslint-visitor-keys "^3.4.1" 860 | 861 | esprima@^4.0.0: 862 | version "4.0.1" 863 | resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" 864 | integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== 865 | 866 | espurify@^2.1.1: 867 | version "2.1.1" 868 | resolved "https://registry.npmjs.org/espurify/-/espurify-2.1.1.tgz" 869 | integrity sha512-zttWvnkhcDyGOhSH4vO2qCBILpdCMv/MX8lp4cqgRkQoDRGK2oZxi2GfWhlP2dIXmk7BaKeOTuzbHhyC68o8XQ== 870 | 871 | esquery@^1.4.2: 872 | version "1.5.0" 873 | resolved "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz" 874 | integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== 875 | dependencies: 876 | estraverse "^5.1.0" 877 | 878 | esrecurse@^4.3.0: 879 | version "4.3.0" 880 | resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" 881 | integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== 882 | dependencies: 883 | estraverse "^5.2.0" 884 | 885 | estraverse@^4.1.1: 886 | version "4.2.0" 887 | resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz" 888 | integrity sha1-De4/7TH81GlhjOc0IJn8GvoL2xM= 889 | 890 | estraverse@^5.1.0, estraverse@^5.2.0: 891 | version "5.3.0" 892 | resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" 893 | integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== 894 | 895 | esutils@^2.0.2: 896 | version "2.0.2" 897 | resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz" 898 | integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs= 899 | 900 | esutils@^2.0.3: 901 | version "2.0.3" 902 | resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" 903 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== 904 | 905 | fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: 906 | version "3.1.3" 907 | resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" 908 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== 909 | 910 | fast-diff@^1.2.0: 911 | version "1.3.0" 912 | resolved "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz" 913 | integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== 914 | 915 | fast-glob@^3.2.9: 916 | version "3.2.12" 917 | resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz" 918 | integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== 919 | dependencies: 920 | "@nodelib/fs.stat" "^2.0.2" 921 | "@nodelib/fs.walk" "^1.2.3" 922 | glob-parent "^5.1.2" 923 | merge2 "^1.3.0" 924 | micromatch "^4.0.4" 925 | 926 | fast-glob@^3.3.0: 927 | version "3.3.1" 928 | resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz" 929 | integrity sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg== 930 | dependencies: 931 | "@nodelib/fs.stat" "^2.0.2" 932 | "@nodelib/fs.walk" "^1.2.3" 933 | glob-parent "^5.1.2" 934 | merge2 "^1.3.0" 935 | micromatch "^4.0.4" 936 | 937 | fast-json-stable-stringify@^2.0.0: 938 | version "2.1.0" 939 | resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" 940 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== 941 | 942 | fast-levenshtein@^2.0.6: 943 | version "2.0.6" 944 | resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" 945 | integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== 946 | 947 | fastq@^1.6.0: 948 | version "1.15.0" 949 | resolved "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz" 950 | integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== 951 | dependencies: 952 | reusify "^1.0.4" 953 | 954 | figures@^5.0.0: 955 | version "5.0.0" 956 | resolved "https://registry.npmjs.org/figures/-/figures-5.0.0.tgz" 957 | integrity sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg== 958 | dependencies: 959 | escape-string-regexp "^5.0.0" 960 | is-unicode-supported "^1.2.0" 961 | 962 | file-entry-cache@^6.0.1: 963 | version "6.0.1" 964 | resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" 965 | integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== 966 | dependencies: 967 | flat-cache "^3.0.4" 968 | 969 | fill-range@^7.1.1: 970 | version "7.1.1" 971 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" 972 | integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== 973 | dependencies: 974 | to-regex-range "^5.0.1" 975 | 976 | find-up@^5.0.0: 977 | version "5.0.0" 978 | resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" 979 | integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== 980 | dependencies: 981 | locate-path "^6.0.0" 982 | path-exists "^4.0.0" 983 | 984 | find-up@^6.0.0: 985 | version "6.3.0" 986 | resolved "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz" 987 | integrity sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw== 988 | dependencies: 989 | locate-path "^7.1.0" 990 | path-exists "^5.0.0" 991 | 992 | flat-cache@^3.0.4: 993 | version "3.1.0" 994 | resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.0.tgz" 995 | integrity sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew== 996 | dependencies: 997 | flatted "^3.2.7" 998 | keyv "^4.5.3" 999 | rimraf "^3.0.2" 1000 | 1001 | flatted@^3.2.7: 1002 | version "3.2.7" 1003 | resolved "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz" 1004 | integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== 1005 | 1006 | fs-extra@^11.1.1: 1007 | version "11.2.0" 1008 | resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.2.0.tgz#e70e17dfad64232287d01929399e0ea7c86b0e5b" 1009 | integrity sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw== 1010 | dependencies: 1011 | graceful-fs "^4.2.0" 1012 | jsonfile "^6.0.1" 1013 | universalify "^2.0.0" 1014 | 1015 | fs-extra@^7.0.1: 1016 | version "7.0.1" 1017 | resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz" 1018 | integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== 1019 | dependencies: 1020 | graceful-fs "^4.1.2" 1021 | jsonfile "^4.0.0" 1022 | universalify "^0.1.0" 1023 | 1024 | fs.realpath@^1.0.0: 1025 | version "1.0.0" 1026 | resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" 1027 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 1028 | 1029 | fsevents@~2.3.2: 1030 | version "2.3.3" 1031 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" 1032 | integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== 1033 | 1034 | get-caller-file@^2.0.5: 1035 | version "2.0.5" 1036 | resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" 1037 | integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== 1038 | 1039 | glob-parent@^5.1.2, glob-parent@~5.1.2: 1040 | version "5.1.2" 1041 | resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" 1042 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== 1043 | dependencies: 1044 | is-glob "^4.0.1" 1045 | 1046 | glob-parent@^6.0.2: 1047 | version "6.0.2" 1048 | resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" 1049 | integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== 1050 | dependencies: 1051 | is-glob "^4.0.3" 1052 | 1053 | glob@^7.1.3, glob@^7.1.6: 1054 | version "7.1.6" 1055 | resolved "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz" 1056 | integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== 1057 | dependencies: 1058 | fs.realpath "^1.0.0" 1059 | inflight "^1.0.4" 1060 | inherits "2" 1061 | minimatch "^3.0.4" 1062 | once "^1.3.0" 1063 | path-is-absolute "^1.0.0" 1064 | 1065 | globals@^13.19.0: 1066 | version "13.21.0" 1067 | resolved "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz" 1068 | integrity sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg== 1069 | dependencies: 1070 | type-fest "^0.20.2" 1071 | 1072 | globby@^11.1.0: 1073 | version "11.1.0" 1074 | resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" 1075 | integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== 1076 | dependencies: 1077 | array-union "^2.1.0" 1078 | dir-glob "^3.0.1" 1079 | fast-glob "^3.2.9" 1080 | ignore "^5.2.0" 1081 | merge2 "^1.4.1" 1082 | slash "^3.0.0" 1083 | 1084 | globby@^13.1.4: 1085 | version "13.2.2" 1086 | resolved "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz" 1087 | integrity sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w== 1088 | dependencies: 1089 | dir-glob "^3.0.1" 1090 | fast-glob "^3.3.0" 1091 | ignore "^5.2.4" 1092 | merge2 "^1.4.1" 1093 | slash "^4.0.0" 1094 | 1095 | graceful-fs@^4.1.2, graceful-fs@^4.1.6: 1096 | version "4.2.4" 1097 | resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz" 1098 | integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== 1099 | 1100 | graceful-fs@^4.2.0: 1101 | version "4.2.11" 1102 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" 1103 | integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== 1104 | 1105 | graphemer@^1.4.0: 1106 | version "1.4.0" 1107 | resolved "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz" 1108 | integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== 1109 | 1110 | has-flag@^4.0.0: 1111 | version "4.0.0" 1112 | resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" 1113 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 1114 | 1115 | ignore-by-default@^2.1.0: 1116 | version "2.1.0" 1117 | resolved "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-2.1.0.tgz" 1118 | integrity sha512-yiWd4GVmJp0Q6ghmM2B/V3oZGRmjrKLXvHR3TE1nfoXsmoggllfZUQe74EN0fJdPFZu2NIvNdrMMLm3OsV7Ohw== 1119 | 1120 | ignore@^5.2.0, ignore@^5.2.4: 1121 | version "5.2.4" 1122 | resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz" 1123 | integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== 1124 | 1125 | import-fresh@^3.2.1: 1126 | version "3.3.0" 1127 | resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" 1128 | integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== 1129 | dependencies: 1130 | parent-module "^1.0.0" 1131 | resolve-from "^4.0.0" 1132 | 1133 | import-modules@^2.1.0: 1134 | version "2.1.0" 1135 | resolved "https://registry.npmjs.org/import-modules/-/import-modules-2.1.0.tgz" 1136 | integrity sha512-8HEWcnkbGpovH9yInoisxaSoIg9Brbul+Ju3Kqe2UsYDUBJD/iQjSgEj0zPcTDPKfPp2fs5xlv1i+JSye/m1/A== 1137 | 1138 | imurmurhash@^0.1.4: 1139 | version "0.1.4" 1140 | resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" 1141 | integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= 1142 | 1143 | indent-string@^5.0.0: 1144 | version "5.0.0" 1145 | resolved "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz" 1146 | integrity sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg== 1147 | 1148 | inflight@^1.0.4: 1149 | version "1.0.6" 1150 | resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" 1151 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 1152 | dependencies: 1153 | once "^1.3.0" 1154 | wrappy "1" 1155 | 1156 | inherits@2: 1157 | version "2.0.4" 1158 | resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" 1159 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 1160 | 1161 | irregular-plurals@^3.3.0: 1162 | version "3.5.0" 1163 | resolved "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-3.5.0.tgz" 1164 | integrity sha512-1ANGLZ+Nkv1ptFb2pa8oG8Lem4krflKuX/gINiHJHjJUKaJHk/SXk5x6K3J+39/p0h1RQ2saROclJJ+QLvETCQ== 1165 | 1166 | is-binary-path@~2.1.0: 1167 | version "2.1.0" 1168 | resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" 1169 | integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== 1170 | dependencies: 1171 | binary-extensions "^2.0.0" 1172 | 1173 | is-error@^2.2.2: 1174 | version "2.2.2" 1175 | resolved "https://registry.npmjs.org/is-error/-/is-error-2.2.2.tgz" 1176 | integrity sha512-IOQqts/aHWbiisY5DuPJQ0gcbvaLFCa7fBa9xoLfxBZvQ+ZI/Zh9xoI7Gk+G64N0FdK4AbibytHht2tWgpJWLg== 1177 | 1178 | is-extglob@^2.1.1: 1179 | version "2.1.1" 1180 | resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" 1181 | integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= 1182 | 1183 | is-fullwidth-code-point@^3.0.0: 1184 | version "3.0.0" 1185 | resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" 1186 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== 1187 | 1188 | is-fullwidth-code-point@^4.0.0: 1189 | version "4.0.0" 1190 | resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz" 1191 | integrity sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ== 1192 | 1193 | is-glob@^4.0.0, is-glob@^4.0.3, is-glob@~4.0.1: 1194 | version "4.0.3" 1195 | resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" 1196 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== 1197 | dependencies: 1198 | is-extglob "^2.1.1" 1199 | 1200 | is-glob@^4.0.1: 1201 | version "4.0.1" 1202 | resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz" 1203 | integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== 1204 | dependencies: 1205 | is-extglob "^2.1.1" 1206 | 1207 | is-number@^7.0.0: 1208 | version "7.0.0" 1209 | resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" 1210 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 1211 | 1212 | is-path-inside@^3.0.3: 1213 | version "3.0.3" 1214 | resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz" 1215 | integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== 1216 | 1217 | is-plain-object@^5.0.0: 1218 | version "5.0.0" 1219 | resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz" 1220 | integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== 1221 | 1222 | is-promise@^4.0.0: 1223 | version "4.0.0" 1224 | resolved "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz" 1225 | integrity sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ== 1226 | 1227 | is-unicode-supported@^1.2.0: 1228 | version "1.3.0" 1229 | resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz" 1230 | integrity sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ== 1231 | 1232 | isexe@^2.0.0: 1233 | version "2.0.0" 1234 | resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" 1235 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= 1236 | 1237 | js-string-escape@^1.0.1: 1238 | version "1.0.1" 1239 | resolved "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz" 1240 | integrity sha1-4mJbrbwNZ8dTPp7cEGjFh65BN+8= 1241 | 1242 | js-yaml@^3.14.1: 1243 | version "3.14.1" 1244 | resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" 1245 | integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== 1246 | dependencies: 1247 | argparse "^1.0.7" 1248 | esprima "^4.0.0" 1249 | 1250 | js-yaml@^4.1.0: 1251 | version "4.1.0" 1252 | resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" 1253 | integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== 1254 | dependencies: 1255 | argparse "^2.0.1" 1256 | 1257 | json-buffer@3.0.1: 1258 | version "3.0.1" 1259 | resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz" 1260 | integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== 1261 | 1262 | json-schema-traverse@^0.4.1: 1263 | version "0.4.1" 1264 | resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" 1265 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 1266 | 1267 | json-stable-stringify-without-jsonify@^1.0.1: 1268 | version "1.0.1" 1269 | resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" 1270 | integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= 1271 | 1272 | jsonc-parser@^3.2.0: 1273 | version "3.3.1" 1274 | resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.3.1.tgz#f2a524b4f7fd11e3d791e559977ad60b98b798b4" 1275 | integrity sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ== 1276 | 1277 | jsonfile@^4.0.0: 1278 | version "4.0.0" 1279 | resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz" 1280 | integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= 1281 | optionalDependencies: 1282 | graceful-fs "^4.1.6" 1283 | 1284 | jsonfile@^6.0.1: 1285 | version "6.1.0" 1286 | resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" 1287 | integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== 1288 | dependencies: 1289 | universalify "^2.0.0" 1290 | optionalDependencies: 1291 | graceful-fs "^4.1.6" 1292 | 1293 | keyv@^4.5.3: 1294 | version "4.5.3" 1295 | resolved "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz" 1296 | integrity sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug== 1297 | dependencies: 1298 | json-buffer "3.0.1" 1299 | 1300 | levn@^0.4.1: 1301 | version "0.4.1" 1302 | resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" 1303 | integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== 1304 | dependencies: 1305 | prelude-ls "^1.2.1" 1306 | type-check "~0.4.0" 1307 | 1308 | load-json-file@^7.0.0: 1309 | version "7.0.1" 1310 | resolved "https://registry.npmjs.org/load-json-file/-/load-json-file-7.0.1.tgz" 1311 | integrity sha512-Gnxj3ev3mB5TkVBGad0JM6dmLiQL+o0t23JPBZ9sd+yvSLk05mFoqKBw5N8gbbkU4TNXyqCgIrl/VM17OgUIgQ== 1312 | 1313 | locate-path@^6.0.0: 1314 | version "6.0.0" 1315 | resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" 1316 | integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== 1317 | dependencies: 1318 | p-locate "^5.0.0" 1319 | 1320 | locate-path@^7.1.0: 1321 | version "7.2.0" 1322 | resolved "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz" 1323 | integrity sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA== 1324 | dependencies: 1325 | p-locate "^6.0.0" 1326 | 1327 | lodash.merge@^4.6.2: 1328 | version "4.6.2" 1329 | resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" 1330 | integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== 1331 | 1332 | lodash@^4.13.1, lodash@^4.17.15, lodash@^4.17.21: 1333 | version "4.17.21" 1334 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" 1335 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== 1336 | 1337 | lunr@^2.3.9: 1338 | version "2.3.9" 1339 | resolved "https://registry.yarnpkg.com/lunr/-/lunr-2.3.9.tgz#18b123142832337dd6e964df1a5a7707b25d35e1" 1340 | integrity sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow== 1341 | 1342 | make-error@^1.1.1: 1343 | version "1.3.5" 1344 | resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz" 1345 | integrity sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g== 1346 | 1347 | map-age-cleaner@^0.1.3: 1348 | version "0.1.3" 1349 | resolved "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz" 1350 | integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== 1351 | dependencies: 1352 | p-defer "^1.0.0" 1353 | 1354 | marked@^4.3.0: 1355 | version "4.3.0" 1356 | resolved "https://registry.yarnpkg.com/marked/-/marked-4.3.0.tgz#796362821b019f734054582038b116481b456cf3" 1357 | integrity sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A== 1358 | 1359 | matcher@^5.0.0: 1360 | version "5.0.0" 1361 | resolved "https://registry.npmjs.org/matcher/-/matcher-5.0.0.tgz" 1362 | integrity sha512-s2EMBOWtXFc8dgqvoAzKJXxNHibcdJMV0gwqKUaw9E2JBJuGUK7DrNKrA6g/i+v72TT16+6sVm5mS3thaMLQUw== 1363 | dependencies: 1364 | escape-string-regexp "^5.0.0" 1365 | 1366 | md5-hex@^3.0.1: 1367 | version "3.0.1" 1368 | resolved "https://registry.npmjs.org/md5-hex/-/md5-hex-3.0.1.tgz" 1369 | integrity sha512-BUiRtTtV39LIJwinWBjqVsU9xhdnz7/i889V859IBFpuqGAj6LuOvHv5XLbgZ2R7ptJoJaEcxkv88/h25T7Ciw== 1370 | dependencies: 1371 | blueimp-md5 "^2.10.0" 1372 | 1373 | mem@^9.0.2: 1374 | version "9.0.2" 1375 | resolved "https://registry.npmjs.org/mem/-/mem-9.0.2.tgz" 1376 | integrity sha512-F2t4YIv9XQUBHt6AOJ0y7lSmP1+cY7Fm1DRh9GClTGzKST7UWLMx6ly9WZdLH/G/ppM5RL4MlQfRT71ri9t19A== 1377 | dependencies: 1378 | map-age-cleaner "^0.1.3" 1379 | mimic-fn "^4.0.0" 1380 | 1381 | merge2@^1.3.0, merge2@^1.4.1: 1382 | version "1.4.1" 1383 | resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" 1384 | integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== 1385 | 1386 | micro-spelling-correcter@^1.1.1: 1387 | version "1.1.1" 1388 | resolved "https://registry.npmjs.org/micro-spelling-correcter/-/micro-spelling-correcter-1.1.1.tgz" 1389 | integrity sha512-lkJ3Rj/mtjlRcHk6YyCbvZhyWTOzdBvTHsxMmZSk5jxN1YyVSQ+JETAom55mdzfcyDrY/49Z7UCW760BK30crg== 1390 | 1391 | micromatch@^4.0.4: 1392 | version "4.0.8" 1393 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" 1394 | integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== 1395 | dependencies: 1396 | braces "^3.0.3" 1397 | picomatch "^2.3.1" 1398 | 1399 | mimic-fn@^4.0.0: 1400 | version "4.0.0" 1401 | resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz" 1402 | integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== 1403 | 1404 | minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.2: 1405 | version "3.1.2" 1406 | resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" 1407 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== 1408 | dependencies: 1409 | brace-expansion "^1.1.7" 1410 | 1411 | minimatch@^9.0.3: 1412 | version "9.0.5" 1413 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" 1414 | integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== 1415 | dependencies: 1416 | brace-expansion "^2.0.1" 1417 | 1418 | minimist@^1.2.8: 1419 | version "1.2.8" 1420 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" 1421 | integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== 1422 | 1423 | ms@2.1.2: 1424 | version "2.1.2" 1425 | resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" 1426 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 1427 | 1428 | ms@^2.1.3: 1429 | version "2.1.3" 1430 | resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" 1431 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== 1432 | 1433 | natural-compare-lite@^1.4.0: 1434 | version "1.4.0" 1435 | resolved "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz" 1436 | integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== 1437 | 1438 | natural-compare@^1.4.0: 1439 | version "1.4.0" 1440 | resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" 1441 | integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= 1442 | 1443 | nofilter@^3.1.0: 1444 | version "3.1.0" 1445 | resolved "https://registry.npmjs.org/nofilter/-/nofilter-3.1.0.tgz" 1446 | integrity sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g== 1447 | 1448 | normalize-path@^3.0.0, normalize-path@~3.0.0: 1449 | version "3.0.0" 1450 | resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" 1451 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== 1452 | 1453 | once@^1.3.0: 1454 | version "1.4.0" 1455 | resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" 1456 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 1457 | dependencies: 1458 | wrappy "1" 1459 | 1460 | optionator@^0.9.3: 1461 | version "0.9.3" 1462 | resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz" 1463 | integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== 1464 | dependencies: 1465 | "@aashutoshrathi/word-wrap" "^1.2.3" 1466 | deep-is "^0.1.3" 1467 | fast-levenshtein "^2.0.6" 1468 | levn "^0.4.1" 1469 | prelude-ls "^1.2.1" 1470 | type-check "^0.4.0" 1471 | 1472 | p-defer@^1.0.0: 1473 | version "1.0.0" 1474 | resolved "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz" 1475 | integrity sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw== 1476 | 1477 | p-event@^5.0.1: 1478 | version "5.0.1" 1479 | resolved "https://registry.npmjs.org/p-event/-/p-event-5.0.1.tgz" 1480 | integrity sha512-dd589iCQ7m1L0bmC5NLlVYfy3TbBEsMUfWx9PyAgPeIcFZ/E2yaTZ4Rz4MiBmmJShviiftHVXOqfnfzJ6kyMrQ== 1481 | dependencies: 1482 | p-timeout "^5.0.2" 1483 | 1484 | p-limit@^3.0.2: 1485 | version "3.1.0" 1486 | resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" 1487 | integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== 1488 | dependencies: 1489 | yocto-queue "^0.1.0" 1490 | 1491 | p-limit@^4.0.0: 1492 | version "4.0.0" 1493 | resolved "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz" 1494 | integrity sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ== 1495 | dependencies: 1496 | yocto-queue "^1.0.0" 1497 | 1498 | p-locate@^5.0.0: 1499 | version "5.0.0" 1500 | resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" 1501 | integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== 1502 | dependencies: 1503 | p-limit "^3.0.2" 1504 | 1505 | p-locate@^6.0.0: 1506 | version "6.0.0" 1507 | resolved "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz" 1508 | integrity sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw== 1509 | dependencies: 1510 | p-limit "^4.0.0" 1511 | 1512 | p-map@^5.5.0: 1513 | version "5.5.0" 1514 | resolved "https://registry.npmjs.org/p-map/-/p-map-5.5.0.tgz" 1515 | integrity sha512-VFqfGDHlx87K66yZrNdI4YGtD70IRyd+zSvgks6mzHPRNkoKy+9EKP4SFC77/vTTQYmRmti7dvqC+m5jBrBAcg== 1516 | dependencies: 1517 | aggregate-error "^4.0.0" 1518 | 1519 | p-timeout@^5.0.2: 1520 | version "5.1.0" 1521 | resolved "https://registry.npmjs.org/p-timeout/-/p-timeout-5.1.0.tgz" 1522 | integrity sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew== 1523 | 1524 | parent-module@^1.0.0: 1525 | version "1.0.1" 1526 | resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" 1527 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== 1528 | dependencies: 1529 | callsites "^3.0.0" 1530 | 1531 | parse-ms@^3.0.0: 1532 | version "3.0.0" 1533 | resolved "https://registry.npmjs.org/parse-ms/-/parse-ms-3.0.0.tgz" 1534 | integrity sha512-Tpb8Z7r7XbbtBTrM9UhpkzzaMrqA2VXMT3YChzYltwV3P3pM6t8wl7TvpMnSTosz1aQAdVib7kdoys7vYOPerw== 1535 | 1536 | path-exists@^4.0.0: 1537 | version "4.0.0" 1538 | resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" 1539 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== 1540 | 1541 | path-exists@^5.0.0: 1542 | version "5.0.0" 1543 | resolved "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz" 1544 | integrity sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ== 1545 | 1546 | path-is-absolute@^1.0.0: 1547 | version "1.0.1" 1548 | resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" 1549 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 1550 | 1551 | path-key@^3.1.0: 1552 | version "3.1.1" 1553 | resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" 1554 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== 1555 | 1556 | path-type@^4.0.0: 1557 | version "4.0.0" 1558 | resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" 1559 | integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== 1560 | 1561 | picomatch@^2.0.4: 1562 | version "2.0.7" 1563 | resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.0.7.tgz" 1564 | integrity sha512-oLHIdio3tZ0qH76NybpeneBhYVj0QFTfXEFTc/B3zKQspYfYYkWYgFsmzo+4kvId/bQRcNkVeguI3y+CD22BtA== 1565 | 1566 | picomatch@^2.2.1, picomatch@^2.3.1: 1567 | version "2.3.1" 1568 | resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" 1569 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== 1570 | 1571 | pkg-conf@^4.0.0: 1572 | version "4.0.0" 1573 | resolved "https://registry.npmjs.org/pkg-conf/-/pkg-conf-4.0.0.tgz" 1574 | integrity sha512-7dmgi4UY4qk+4mj5Cd8v/GExPo0K+SlY+hulOSdfZ/T6jVH6//y7NtzZo5WrfhDBxuQ0jCa7fLZmNaNh7EWL/w== 1575 | dependencies: 1576 | find-up "^6.0.0" 1577 | load-json-file "^7.0.0" 1578 | 1579 | pkg-dir@^5.0.0: 1580 | version "5.0.0" 1581 | resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz" 1582 | integrity sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA== 1583 | dependencies: 1584 | find-up "^5.0.0" 1585 | 1586 | plur@^5.1.0: 1587 | version "5.1.0" 1588 | resolved "https://registry.npmjs.org/plur/-/plur-5.1.0.tgz" 1589 | integrity sha512-VP/72JeXqak2KiOzjgKtQen5y3IZHn+9GOuLDafPv0eXa47xq0At93XahYBs26MsifCQ4enGKwbjBTKgb9QJXg== 1590 | dependencies: 1591 | irregular-plurals "^3.3.0" 1592 | 1593 | postject@^1.0.0-alpha.6: 1594 | version "1.0.0-alpha.6" 1595 | resolved "https://registry.yarnpkg.com/postject/-/postject-1.0.0-alpha.6.tgz#9d022332272e2cfce8dea4cfce1ee6dd1b2ee135" 1596 | integrity sha512-b9Eb8h2eVqNE8edvKdwqkrY6O7kAwmI8kcnBv1NScolYJbo59XUF0noFq+lxbC1yN20bmC0WBEbDC5H/7ASb0A== 1597 | dependencies: 1598 | commander "^9.4.0" 1599 | 1600 | prelude-ls@^1.2.1: 1601 | version "1.2.1" 1602 | resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" 1603 | integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== 1604 | 1605 | pretty-ms@^8.0.0: 1606 | version "8.0.0" 1607 | resolved "https://registry.npmjs.org/pretty-ms/-/pretty-ms-8.0.0.tgz" 1608 | integrity sha512-ASJqOugUF1bbzI35STMBUpZqdfYKlJugy6JBziGi2EE+AL5JPJGSzvpeVXojxrr0ViUYoToUjb5kjSEGf7Y83Q== 1609 | dependencies: 1610 | parse-ms "^3.0.0" 1611 | 1612 | punycode@^2.1.0: 1613 | version "2.1.1" 1614 | resolved "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz" 1615 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== 1616 | 1617 | queue-microtask@^1.2.2: 1618 | version "1.2.3" 1619 | resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" 1620 | integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== 1621 | 1622 | readdirp@~3.6.0: 1623 | version "3.6.0" 1624 | resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" 1625 | integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== 1626 | dependencies: 1627 | picomatch "^2.2.1" 1628 | 1629 | require-directory@^2.1.1: 1630 | version "2.1.1" 1631 | resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" 1632 | integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== 1633 | 1634 | resolve-cwd@^3.0.0: 1635 | version "3.0.0" 1636 | resolved "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz" 1637 | integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== 1638 | dependencies: 1639 | resolve-from "^5.0.0" 1640 | 1641 | resolve-from@^4.0.0: 1642 | version "4.0.0" 1643 | resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" 1644 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== 1645 | 1646 | resolve-from@^5.0.0: 1647 | version "5.0.0" 1648 | resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz" 1649 | integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== 1650 | 1651 | reusify@^1.0.4: 1652 | version "1.0.4" 1653 | resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" 1654 | integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== 1655 | 1656 | rimraf@^3.0.2: 1657 | version "3.0.2" 1658 | resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" 1659 | integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== 1660 | dependencies: 1661 | glob "^7.1.3" 1662 | 1663 | rimraf@~2.6.2: 1664 | version "2.6.3" 1665 | resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz" 1666 | integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== 1667 | dependencies: 1668 | glob "^7.1.3" 1669 | 1670 | run-parallel@^1.1.9: 1671 | version "1.2.0" 1672 | resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" 1673 | integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== 1674 | dependencies: 1675 | queue-microtask "^1.2.2" 1676 | 1677 | semver@^7.3.2, semver@^7.3.7, semver@^7.6.3: 1678 | version "7.6.3" 1679 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" 1680 | integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== 1681 | 1682 | serialize-error@^7.0.1: 1683 | version "7.0.1" 1684 | resolved "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz" 1685 | integrity sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw== 1686 | dependencies: 1687 | type-fest "^0.13.1" 1688 | 1689 | shebang-command@^2.0.0: 1690 | version "2.0.0" 1691 | resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" 1692 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== 1693 | dependencies: 1694 | shebang-regex "^3.0.0" 1695 | 1696 | shebang-regex@^3.0.0: 1697 | version "3.0.0" 1698 | resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" 1699 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== 1700 | 1701 | shiki@^0.14.7: 1702 | version "0.14.7" 1703 | resolved "https://registry.yarnpkg.com/shiki/-/shiki-0.14.7.tgz#c3c9e1853e9737845f1d2ef81b31bcfb07056d4e" 1704 | integrity sha512-dNPAPrxSc87ua2sKJ3H5dQ/6ZaY8RNnaAqK+t0eG7p0Soi2ydiqbGOTaZCqaYvA/uZYfS1LJnemt3Q+mSfcPCg== 1705 | dependencies: 1706 | ansi-sequence-parser "^1.1.0" 1707 | jsonc-parser "^3.2.0" 1708 | vscode-oniguruma "^1.7.0" 1709 | vscode-textmate "^8.0.0" 1710 | 1711 | signal-exit@^4.0.1: 1712 | version "4.1.0" 1713 | resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz" 1714 | integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== 1715 | 1716 | slash@^3.0.0: 1717 | version "3.0.0" 1718 | resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" 1719 | integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== 1720 | 1721 | slash@^4.0.0: 1722 | version "4.0.0" 1723 | resolved "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz" 1724 | integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== 1725 | 1726 | slice-ansi@^5.0.0: 1727 | version "5.0.0" 1728 | resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz" 1729 | integrity sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ== 1730 | dependencies: 1731 | ansi-styles "^6.0.0" 1732 | is-fullwidth-code-point "^4.0.0" 1733 | 1734 | sprintf-js@~1.0.2: 1735 | version "1.0.3" 1736 | resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" 1737 | integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= 1738 | 1739 | stack-utils@^2.0.6: 1740 | version "2.0.6" 1741 | resolved "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz" 1742 | integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== 1743 | dependencies: 1744 | escape-string-regexp "^2.0.0" 1745 | 1746 | string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: 1747 | version "4.2.3" 1748 | resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" 1749 | integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== 1750 | dependencies: 1751 | emoji-regex "^8.0.0" 1752 | is-fullwidth-code-point "^3.0.0" 1753 | strip-ansi "^6.0.1" 1754 | 1755 | string-width@^5.0.0: 1756 | version "5.1.2" 1757 | resolved "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz" 1758 | integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== 1759 | dependencies: 1760 | eastasianwidth "^0.2.0" 1761 | emoji-regex "^9.2.2" 1762 | strip-ansi "^7.0.1" 1763 | 1764 | strip-ansi@^6.0.0, strip-ansi@^6.0.1: 1765 | version "6.0.1" 1766 | resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" 1767 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== 1768 | dependencies: 1769 | ansi-regex "^5.0.1" 1770 | 1771 | strip-ansi@^7.0.1: 1772 | version "7.1.0" 1773 | resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz" 1774 | integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== 1775 | dependencies: 1776 | ansi-regex "^6.0.1" 1777 | 1778 | strip-json-comments@^3.1.1: 1779 | version "3.1.1" 1780 | resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" 1781 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== 1782 | 1783 | supertap@^3.0.1: 1784 | version "3.0.1" 1785 | resolved "https://registry.npmjs.org/supertap/-/supertap-3.0.1.tgz" 1786 | integrity sha512-u1ZpIBCawJnO+0QePsEiOknOfCRq0yERxiAchT0i4li0WHNUJbf0evXXSXOcCAR4M8iMDoajXYmstm/qO81Isw== 1787 | dependencies: 1788 | indent-string "^5.0.0" 1789 | js-yaml "^3.14.1" 1790 | serialize-error "^7.0.1" 1791 | strip-ansi "^7.0.1" 1792 | 1793 | supports-color@^7.1.0: 1794 | version "7.2.0" 1795 | resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" 1796 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 1797 | dependencies: 1798 | has-flag "^4.0.0" 1799 | 1800 | temp-dir@^3.0.0: 1801 | version "3.0.0" 1802 | resolved "https://registry.npmjs.org/temp-dir/-/temp-dir-3.0.0.tgz" 1803 | integrity sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw== 1804 | 1805 | temp@^0.9.0: 1806 | version "0.9.0" 1807 | resolved "https://registry.npmjs.org/temp/-/temp-0.9.0.tgz" 1808 | integrity sha512-YfUhPQCJoNQE5N+FJQcdPz63O3x3sdT4Xju69Gj4iZe0lBKOtnAMi0SLj9xKhGkcGhsxThvTJ/usxtFPo438zQ== 1809 | dependencies: 1810 | rimraf "~2.6.2" 1811 | 1812 | text-table@^0.2.0: 1813 | version "0.2.0" 1814 | resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" 1815 | integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= 1816 | 1817 | time-zone@^1.0.0: 1818 | version "1.0.0" 1819 | resolved "https://registry.npmjs.org/time-zone/-/time-zone-1.0.0.tgz" 1820 | integrity sha1-mcW/VZWJZq9tBtg73zgA3IL67F0= 1821 | 1822 | to-regex-range@^5.0.1: 1823 | version "5.0.1" 1824 | resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" 1825 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 1826 | dependencies: 1827 | is-number "^7.0.0" 1828 | 1829 | ts-node@^10.9.1: 1830 | version "10.9.1" 1831 | resolved "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz" 1832 | integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== 1833 | dependencies: 1834 | "@cspotcode/source-map-support" "^0.8.0" 1835 | "@tsconfig/node10" "^1.0.7" 1836 | "@tsconfig/node12" "^1.0.7" 1837 | "@tsconfig/node14" "^1.0.0" 1838 | "@tsconfig/node16" "^1.0.2" 1839 | acorn "^8.4.1" 1840 | acorn-walk "^8.1.1" 1841 | arg "^4.1.0" 1842 | create-require "^1.1.0" 1843 | diff "^4.0.1" 1844 | make-error "^1.1.1" 1845 | v8-compile-cache-lib "^3.0.1" 1846 | yn "3.1.1" 1847 | 1848 | tslib@^1.8.1: 1849 | version "1.14.1" 1850 | resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" 1851 | integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== 1852 | 1853 | tsutils@^3.21.0: 1854 | version "3.21.0" 1855 | resolved "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz" 1856 | integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== 1857 | dependencies: 1858 | tslib "^1.8.1" 1859 | 1860 | type-check@^0.4.0, type-check@~0.4.0: 1861 | version "0.4.0" 1862 | resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" 1863 | integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== 1864 | dependencies: 1865 | prelude-ls "^1.2.1" 1866 | 1867 | type-fest@^0.13.1: 1868 | version "0.13.1" 1869 | resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz" 1870 | integrity sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg== 1871 | 1872 | type-fest@^0.20.2: 1873 | version "0.20.2" 1874 | resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" 1875 | integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== 1876 | 1877 | typedoc@0.25.13: 1878 | version "0.25.13" 1879 | resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.25.13.tgz#9a98819e3b2d155a6d78589b46fa4c03768f0922" 1880 | integrity sha512-pQqiwiJ+Z4pigfOnnysObszLiU3mVLWAExSPf+Mu06G/qsc3wzbuM56SZQvONhHLncLUhYzOVkjFFpFfL5AzhQ== 1881 | dependencies: 1882 | lunr "^2.3.9" 1883 | marked "^4.3.0" 1884 | minimatch "^9.0.3" 1885 | shiki "^0.14.7" 1886 | 1887 | typescript@^4.9.3: 1888 | version "4.9.5" 1889 | resolved "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz" 1890 | integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== 1891 | 1892 | universalify@^0.1.0: 1893 | version "0.1.2" 1894 | resolved "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz" 1895 | integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== 1896 | 1897 | universalify@^2.0.0: 1898 | version "2.0.1" 1899 | resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" 1900 | integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== 1901 | 1902 | uri-js@^4.2.2: 1903 | version "4.2.2" 1904 | resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz" 1905 | integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== 1906 | dependencies: 1907 | punycode "^2.1.0" 1908 | 1909 | v8-compile-cache-lib@^3.0.1: 1910 | version "3.0.1" 1911 | resolved "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz" 1912 | integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== 1913 | 1914 | vscode-oniguruma@^1.7.0: 1915 | version "1.7.0" 1916 | resolved "https://registry.yarnpkg.com/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz#439bfad8fe71abd7798338d1cd3dc53a8beea94b" 1917 | integrity sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA== 1918 | 1919 | vscode-textmate@^8.0.0: 1920 | version "8.0.0" 1921 | resolved "https://registry.yarnpkg.com/vscode-textmate/-/vscode-textmate-8.0.0.tgz#2c7a3b1163ef0441097e0b5d6389cd5504b59e5d" 1922 | integrity sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg== 1923 | 1924 | well-known-symbols@^2.0.0: 1925 | version "2.0.0" 1926 | resolved "https://registry.npmjs.org/well-known-symbols/-/well-known-symbols-2.0.0.tgz" 1927 | integrity sha512-ZMjC3ho+KXo0BfJb7JgtQ5IBuvnShdlACNkKkdsqBmYw3bPAaJfPeYUo6tLUaT5tG/Gkh7xkpBhKRQ9e7pyg9Q== 1928 | 1929 | which@^2.0.1: 1930 | version "2.0.2" 1931 | resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" 1932 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 1933 | dependencies: 1934 | isexe "^2.0.0" 1935 | 1936 | wrap-ansi@^7.0.0: 1937 | version "7.0.0" 1938 | resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" 1939 | integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== 1940 | dependencies: 1941 | ansi-styles "^4.0.0" 1942 | string-width "^4.1.0" 1943 | strip-ansi "^6.0.0" 1944 | 1945 | wrappy@1: 1946 | version "1.0.2" 1947 | resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" 1948 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 1949 | 1950 | write-file-atomic@^5.0.1: 1951 | version "5.0.1" 1952 | resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz" 1953 | integrity sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw== 1954 | dependencies: 1955 | imurmurhash "^0.1.4" 1956 | signal-exit "^4.0.1" 1957 | 1958 | y18n@^5.0.5: 1959 | version "5.0.8" 1960 | resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" 1961 | integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== 1962 | 1963 | yargs-parser@^21.1.1: 1964 | version "21.1.1" 1965 | resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz" 1966 | integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== 1967 | 1968 | yargs@^17.7.2: 1969 | version "17.7.2" 1970 | resolved "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz" 1971 | integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== 1972 | dependencies: 1973 | cliui "^8.0.1" 1974 | escalade "^3.1.1" 1975 | get-caller-file "^2.0.5" 1976 | require-directory "^2.1.1" 1977 | string-width "^4.2.3" 1978 | y18n "^5.0.5" 1979 | yargs-parser "^21.1.1" 1980 | 1981 | yn@3.1.1: 1982 | version "3.1.1" 1983 | resolved "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz" 1984 | integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== 1985 | 1986 | yocto-queue@^0.1.0: 1987 | version "0.1.0" 1988 | resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" 1989 | integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== 1990 | 1991 | yocto-queue@^1.0.0: 1992 | version "1.0.0" 1993 | resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz" 1994 | integrity sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g== 1995 | --------------------------------------------------------------------------------