├── .eslintrc.json ├── .gitattributes ├── .github ├── CODEOWNERS ├── dependabot.yml └── workflows │ ├── add-to-project.yml │ ├── release.yml │ ├── semantic.yml │ └── test.yml ├── .gitignore ├── .husky └── pre-commit ├── .prettierrc.json ├── .releaserc.json ├── LICENSE ├── README.md ├── bin ├── electron-windows-sign-usage.txt └── electron-windows-sign.js ├── package.json ├── src ├── ambient.d.ts ├── files.ts ├── index.ts ├── sea.ts ├── sign-with-hook.ts ├── sign-with-signtool.ts ├── sign.ts ├── spawn.ts ├── types.ts └── utils │ ├── log.ts │ └── parse-env.ts ├── test ├── files.spec.ts ├── fixtures │ ├── app │ │ ├── fake.cab │ │ ├── fake.dll │ │ ├── fake.exe │ │ ├── fake.js │ │ ├── fake.msix │ │ ├── fake.node │ │ └── fake.png │ └── hook-module.js └── sign-with-hook.spec.ts ├── tsconfig.esm.json ├── tsconfig.json ├── typedoc.json ├── vendor └── signtool.exe └── yarn.lock /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["eslint:recommended", "plugin:@typescript-eslint/recommended","prettier"], 3 | "parser": "@typescript-eslint/parser", 4 | "plugins": [ 5 | "@typescript-eslint" 6 | ], 7 | "env": { 8 | "node": true 9 | }, 10 | "rules": { 11 | "@typescript-eslint/no-var-requires": "off", 12 | "@typescript-eslint/no-unused-vars": [ 13 | "error", 14 | { 15 | "vars": "all", 16 | "args": "after-used", 17 | "ignoreRestSiblings": true 18 | } 19 | ] 20 | }, 21 | "parserOptions": { 22 | "ecmaVersion": 6, 23 | "sourceType": "module" 24 | }, 25 | "overrides": [ 26 | { 27 | "files": "*.js", 28 | "rules": { 29 | "@typescript-eslint/no-unused-vars": "off" 30 | } 31 | } 32 | ] 33 | } -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | * eol=crlf -------------------------------------------------------------------------------- /.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 | - '22.11' 21 | - '20.9' 22 | - '18.17' 23 | - '16.20' 24 | runs-on: windows-latest 25 | steps: 26 | - name: Checkout 27 | uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 28 | - name: Setup Node.js 29 | uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 30 | with: 31 | node-version: "${{ matrix.node-version }}" 32 | cache: 'yarn' 33 | - name: Install 34 | run: yarn install --frozen-lockfile 35 | - name: Build 36 | run: yarn build 37 | - name: Lint 38 | run: yarn lint 39 | - name: Test (Node.js v20+) 40 | if: ${{ matrix.node-version == '20.9' || matrix.node-version == '22.11' }} 41 | run: yarn test 42 | - name: Test (Node.js < v20) 43 | if: ${{ matrix.node-version != '20.9' && matrix.node-version != '22.11' }} 44 | run: yarn test:loader 45 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | 3 | /.idea/ 4 | 5 | /node_modules/ 6 | 7 | /dist/ 8 | 9 | yarn-error.log 10 | 11 | tmp 12 | 13 | docs 14 | -------------------------------------------------------------------------------- /.husky/pre-commit: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | . "$(dirname -- "$0")/_/husky.sh" 3 | npx lint-staged -------------------------------------------------------------------------------- /.prettierrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "trailingComma": "all", 3 | "tabWidth": 2, 4 | "printWidth": 100, 5 | "parser": "typescript", 6 | "singleQuote": true, 7 | "endOfLine": "crlf" 8 | } -------------------------------------------------------------------------------- /.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) Felix Rieseberg 2 | All rights reserved. 3 | 4 | Redistribution and use in source and binary forms, with or without 5 | modification, are permitted provided that the following conditions are met: 6 | 7 | * Redistributions of source code must retain the above copyright notice, this 8 | list of conditions and the following disclaimer. 9 | 10 | * Redistributions in binary form must reproduce the above copyright notice, 11 | this list of conditions and the following disclaimer in the documentation 12 | and/or other materials provided with the distribution. 13 | 14 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 15 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 17 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 18 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 20 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 21 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 22 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 23 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # @electron/windows-sign [![npm][npm_img]][npm_url] 2 | 3 | Codesign your app for Windows. Made for [Electron][electron] but really supports any folder with binary files. `electron-windows-sign` scans a folder for [signable files](#file-types) and codesigns them with both SHA-1 and SHA-256. It can be highly customized and used either programmatically or on the command line. 4 | 5 | This tool is particularly useful if you want to code sign Electron or other Windows binaries with an EV certificate or an HSM setup (like DigiCert KeyLocker, AWS CloudHSM, Azure Key Vault HSM, Google Cloud Key Management Service HSM, and other similar services). For more details on how you'd exactly do that, please see [Use with Cloud HSM Providers](#use-with-cloud-hsm-providers) below. 6 | 7 | # Requirements 8 | 9 | By default, this module spawns `signtool.exe` and needs to run on Windows. If you're building an Electron app and care enough to codesign them, I would heavily recommend that you build and test your apps on the platforms you're building for. 10 | 11 | # Usage 12 | 13 | Most developers of Electron apps will likely not use this module directly - and instead use it indirectly 14 | instead. If you are one of those developers who is using a module like `@electron/forge` or `@electron/packager`, you can configure this module with global environment variables. If that describes 15 | you, you can skip ahead to your use case: 16 | 17 | - [With a certificate file and password](#with-a-certificate-file-and-password) 18 | - [With a custom binary or custom parameters](#with-a-custom-signtoolexe-or-custom-parameters) 19 | - [With a completely custom hook](#with-a-custom-hook-function) 20 | 21 | ## Direct Usage 22 | 23 | `@electron/windows-codesign` is built to both esm and cjs and can be used both as a module as well as directly from the command line. 24 | 25 | ```ts 26 | import { sign } from "@electron/windows-sign" 27 | // or const { sign } = require("@electron/windows-sign") 28 | 29 | await sign(signOptions) 30 | ``` 31 | 32 | ```ps1 33 | electron-windows-sign $PATH_TO_APP_DIRECTORY [options ...] 34 | ``` 35 | 36 | ## With a certificate file and password 37 | 38 | This is the "traditional" way to codesign Electron apps on Windows. You pass in a certificate file 39 | (like a .pfx) and a password, which will then be passed to a built-in version of `signtool.exe` taken 40 | directly from the Windows SDK. 41 | 42 | ```ts 43 | await sign({ 44 | appDirectory: "C:\\Path\\To\\App", 45 | // or process.env.WINDOWS_CERTIFICATE_FILE 46 | certificateFile: "C:\\Cert.pfx", 47 | // or process.env.WINDOWS_CERTIFICATE_PASSWORD 48 | certificatePassword: "hunter99" 49 | }) 50 | ``` 51 | 52 | ```ps1 53 | electron-windows-sign $PATH_TO_APP_DIRECTORY --certificate-file=$PATH_TO_CERT --certificate-password=$CERT-PASSWORD 54 | ``` 55 | 56 | ### Full configuration 57 | ```ts 58 | // Path to a timestamp server. Defaults to http://timestamp.digicert.com 59 | // Can also be passed as process.env.WINDOWS_TIMESTAMP_SERVER 60 | timestampServer = "http://timestamp.digicert.com" 61 | // Description of the signed content. Will be passed to signtool.exe as /d 62 | // Can also be passed as process.env.WINDOWS_SIGN_DESCRIPTION 63 | description = "My content" 64 | // URL of the signed content. Will be passed to signtool.exe as /du 65 | // Can also be passed as process.env.WINDOWS_SIGN_WEBSITE 66 | website = "https://mywebsite.com" 67 | // If enabled, attempt to sign .js JavaScript files. Disabled by default 68 | signJavaScript = true 69 | // If unspecified, both sha1 and sha256 signatures will be appended. Will be passed to signtool.exe as the /fd option. 70 | hashes = ["sha256"] 71 | ``` 72 | 73 | ## With a custom signtool.exe or custom parameters 74 | 75 | Sometimes, you need to specify specific signing parameters or use a different version 76 | of `signtool.exe`. In this mode, `@electron/windows-sign` will call the provided binary 77 | with the provided parameters for each file to sign. 78 | 79 | If you only provide `signToolPath`, the default parameters will be used. 80 | If you only provide `signWithParams`, the default `signtool.exe` will be used. 81 | 82 | All the [additional configuration](#additional-configuration) mentioned above is also 83 | available here, but only used if you do not provide your own parameters. 84 | 85 | ```ts 86 | await sign({ 87 | appDirectory: "C:\\Path\\To\\App", 88 | // or process.env.WINDOWS_CERTIFICATE_FILE 89 | certificateFile: "C:\\Cert.pfx", 90 | // or process.env.WINDOWS_CERTIFICATE_PASSWORD 91 | certificatePassword: "hunter99", 92 | // or process.env.WINDOWS_SIGNTOOL_PATH 93 | signToolPath: "C:\\Path\\To\\my-custom-tool.exe", 94 | // or process.env.WINDOWS_SIGN_WITH_PARAMS 95 | signWithParams: "--my=custom --parameters" 96 | }) 97 | ``` 98 | 99 | ```ps1 100 | electron-windows-sign $PATH_TO_APP_DIRECTORY --sign-tool-path=$PATH_TO_TOOL --sign-with-params="--my=custom --parameters" 101 | ``` 102 | 103 | ## With a custom hook function 104 | 105 | Sometimes, you just want all modules depending on `@electron/windows-sign` to call 106 | your completely custom logic. You can either specify a `hookFunction` (if you're calling 107 | this module yourself) or a `hookModulePath`, which this module will attempt to require. 108 | 109 | Using the `hookModulePath` has the benefit that you can override how any other users 110 | of this module (like `@electron/packager`) codesign your app. 111 | 112 | ```ts 113 | await sign({ 114 | // A function with the following signature: 115 | // (fileToSign: string) => void | Promise 116 | // 117 | // This function will be called sequentially for each file that 118 | // @electron/windows-sign wants to sign. 119 | hookFunction: myHookFunction 120 | // Path to a hook module. 121 | hookModulePath: "C:\\Path\\To\\my-hook-module.js", 122 | }) 123 | ``` 124 | 125 | Your hook module should either directly export a function or 126 | export a `default` function. 127 | ```js 128 | // Good: 129 | module.exports = function (filePath) { 130 | console.log(`Path to file to sign: ${filePath}`) 131 | } 132 | 133 | // Good: 134 | module.exports = async function (filePath) { 135 | console.log(`Path to file to sign: ${filePath}`) 136 | } 137 | 138 | // Good: 139 | export default async function (filePath) { 140 | console.log(`Path to file to sign: ${filePath}`) 141 | } 142 | 143 | // Bad: 144 | module.exports = { 145 | myCustomHookName: function (filePath) { 146 | console.log(`Path to file to sign: ${filePath}`) 147 | } 148 | } 149 | 150 | // Bad: 151 | export async function myCustomHookName(filePath) { 152 | console.log(`Path to file to sign: ${filePath}`) 153 | } 154 | ``` 155 | 156 | ``` 157 | SYNOPSIS 158 | electron-windows-sign app [options ...] 159 | 160 | DESCRIPTION 161 | app 162 | Path to the application to sign. It must be a directory. 163 | 164 | certificate-file 165 | Path to the certificate file (.pfx) to use for signing. Uses 166 | environment variable WINDOWS_CERTIFICATE_FILE if not provided. 167 | 168 | certificate-password 169 | Password to use for the certificate. Uses environment variable 170 | WINDOWS_CERTIFICATE_PASSWORD if not provided. 171 | 172 | sign-tool-path 173 | Path to the signtool.exe binary. If not specified, the tool will attempt 174 | use a built-in version. 175 | 176 | timestamp-server 177 | URL of the timestamp server to use. If not specified, the tool will 178 | attempt to use a built-in server (http://timestamp.digicert.com) 179 | 180 | description 181 | Description to use for the signed files. Passed as /d to signtool.exe. 182 | 183 | website 184 | URL of the website to use for the signed files. Passed as /du to 185 | signtool.exe. 186 | 187 | sign-with-params 188 | Additional parameters to pass to signtool.exe. This can be used to 189 | specify additional certificates to use for cross-signing. 190 | 191 | automatically-select-certificate 192 | Automatically select the best certificate to use for signing. On by default. 193 | 194 | help 195 | Print this usage information. 196 | 197 | debug 198 | Print additional debug information. 199 | ``` 200 | 201 | # File Types 202 | This tool will aggressively attempt to sign all files that _can_ 203 | be signed, excluding scripts. 204 | 205 | - [Portable executable files][pe] (.exe, .dll, .sys, .efi, .scr, .node) 206 | - Microsoft installers (.msi) 207 | - APPX/MSIX packages (.appx, .appxbundle, .msix, .msixbundle) 208 | - Catalog files (.cat) 209 | - Cabinet files (.cab) 210 | - Silverlight applications (.xap) 211 | - Scripts (.vbs, .wsf, .ps1) 212 | 213 | If you do want to sign JavaScript, please enable it with the `signJavaScript` 214 | parameter. As far as we are aware, there are no benefits to signing 215 | JavaScript files, so we do not by default. 216 | 217 | # Use with Cloud HSM Providers 218 | 219 | Since 2023, Microsoft requires that Windows software be signed with an extended validation (EV) certificate in order to avoid a Windows Defender popup. This presents a challenge for developers who are used to building and signing in the cloud or some continuous integration setup like GitHub Actions, CircleCI, Travis CI, or AppVeyor because EV certificates require a Hardware Security Module (HSM). Or, in simpler words: If you want to code sign your Windows software so that your customers don't see a scary Windows Defender dialog, you need to code sign on a computer with a USB device plugged in. 220 | 221 | The industry has an answer to this problem: Services like DigiCert KeyLocker, AWS CloudHSM, Azure Key Vault HSM, or Google Cloud Key Management Service HSM allow code signing binaries with an Extended Validation (EV) certificate from the cloud. `@electron/windows-sign` is compatible with all of these services. 222 | 223 | ## Custom signtool parameters 224 | 225 | Most services allow signing your code with Microsoft's `signtool.exe`. Let's take DigiCert KeyLocker as an example. [DigiCert's documentation](https://docs.digicert.com/en/digicert-keylocker/signing-tools/sign-authenticode-files-with-signtool-on-windows.html) explains the steps necessary to setup your signing machine. Once done, you can sign with the following call: 226 | 227 | ``` 228 | signtool.exe sign /csp "DigiCert Signing Manager KSP" /kc /f /tr http://timestamp.digicert.com /td SHA256 /fd SHA256 229 | ``` 230 | 231 | To sign with `@electron/windows-sign` using those instructions, you would take the parameters and add them to `signWithParams`: 232 | 233 | ```js 234 | await sign({ 235 | signWithParams: "/csp \"DigiCert Signing Manager KSP\" /kc /f /tr http://timestamp.digicert.com /td SHA256 /fd SHA256" 236 | }) 237 | ``` 238 | 239 | Both Google's and Amazon's solutions similarly allow you to sign with Microsoft's SignTool. Documentation for [Google can be found here](https://cloud.google.com/kms/docs/reference/cng-signtool), [Amazon's lives here](https://docs.aws.amazon.com/cloudhsm/latest/userguide/signtool.html). 240 | 241 | ## Custom signtool.exe 242 | 243 | Some providers provide drop-in replacements for `signtool.exe`. If that's the case, simply pass the path to that replacement: 244 | 245 | ```ts 246 | await sign({ 247 | // or process.env.WINDOWS_SIGNTOOL_PATH 248 | signToolPath: "C:\\Path\\To\\my-custom-tool.exe", 249 | }) 250 | ``` 251 | 252 | ## Fully custom process 253 | 254 | If your HSM provider has a more complex setup, you might have to call a custom file with custom parameters. If that's the case, use a hook function or hook module, which allows you to completely customize what to do with each file that `@electron/windows-sign` wants to sign. More documentation about this option can be found in the ["Signing with a custom hook function" section above](#with-a-custom-hook-function). 255 | 256 | # License 257 | BSD 2-Clause "Simplified". Please see LICENSE for details. 258 | 259 | [electron]: https://github.com/electron/electron 260 | [npm_img]: https://img.shields.io/npm/v/@electron/windows-sign.svg 261 | [npm_url]: https://npmjs.org/package/@electron/windows-sign 262 | [pe]: https://en.wikipedia.org/wiki/Portable_Executable 263 | -------------------------------------------------------------------------------- /bin/electron-windows-sign-usage.txt: -------------------------------------------------------------------------------- 1 | NAME 2 | electron-windows-sign -- code signing for Electron apps on Windows. 3 | 4 | SYNOPSIS 5 | electron-windows-sign app [options ...] 6 | 7 | DESCRIPTION 8 | app 9 | Path to the application to sign. It must be a directory. 10 | 11 | certificate-file 12 | Path to the certificate file (.pfx) to use for signing. 13 | 14 | certificate-password 15 | Password to use for the certificate. 16 | 17 | sign-tool-path 18 | Path to the signtool.exe binary. If not specified, the tool will attempt 19 | use a built-in version. 20 | 21 | timestamp-server 22 | URL of the timestamp server to use. If not specified, the tool will 23 | attempt to use a built-in server (http://timestamp.digicert.com) 24 | 25 | description 26 | Description to use for the signed files. Passed as /d to signtool.exe. 27 | 28 | website 29 | URL of the website to use for the signed files. Passed as /du to 30 | signtool.exe. 31 | 32 | sign-with-params 33 | Additional parameters to pass to signtool.exe. This can be used to 34 | specify additional certificates to use for cross-signing. 35 | 36 | automatically-select-certificate 37 | Automatically select the best certificate to use for signing. On by default. 38 | 39 | help 40 | Print this usage information. 41 | 42 | debug 43 | Print additional debug information. 44 | -------------------------------------------------------------------------------- /bin/electron-windows-sign.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | const fs = require('fs'); 4 | const path = require('path'); 5 | const args = require('minimist')(process.argv.slice(2), { 6 | string: [ 7 | 'certificate-file', 8 | 'certificate-password', 9 | 'sign-tool-path', 10 | 'timestamp-server', 11 | 'description', 12 | 'website', 13 | 'sign-with-params' 14 | ], 15 | boolean: [ 16 | 'help', 17 | 'debug' 18 | ], 19 | default: { 20 | 'automatically-select-certificate': true 21 | } 22 | }); 23 | const usage = fs.readFileSync(path.join(__dirname, 'electron-windows-sign-usage.txt')).toString(); 24 | const sign = require('../').sign; 25 | 26 | args.app = args._.shift(); 27 | 28 | if (!args.app || args.help) { 29 | console.log(usage); 30 | process.exit(0); 31 | } 32 | 33 | // Remove excess arguments 34 | delete args._; 35 | delete args.help; 36 | 37 | sign(args, function done(err) { 38 | if (err) { 39 | console.error('Sign failed:'); 40 | if (err.message) console.error(err.message); 41 | else if (err.stack) console.error(err.stack); 42 | else console.log(err); 43 | process.exit(1); 44 | } 45 | console.log('Application signed:', args.app); 46 | process.exit(0); 47 | }); 48 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@electron/windows-sign", 3 | "version": "0.0.0-development", 4 | "description": "Codesign Electron Windows apps", 5 | "main": "dist/cjs/index.js", 6 | "module": "dist/esm/index.js", 7 | "files": [ 8 | "dist", 9 | "entitlements", 10 | "README.md", 11 | "LICENSE", 12 | "bin", 13 | "vendor" 14 | ], 15 | "bin": { 16 | "electron-windows-sign": "bin/electron-windows-sign.js" 17 | }, 18 | "repository": { 19 | "type": "git", 20 | "url": "git+https://github.com/electron/windows-sign.git" 21 | }, 22 | "author": { 23 | "name": "Felix Rieseberg", 24 | "email": "felix@felixrieseberg.com" 25 | }, 26 | "license": "BSD-2-Clause", 27 | "bugs": { 28 | "url": "https://github.com/electron/windows-sign/issues" 29 | }, 30 | "homepage": "https://github.com/electron/windows-sign", 31 | "publishConfig": { 32 | "provenance": true 33 | }, 34 | "dependencies": { 35 | "cross-dirname": "^0.1.0", 36 | "debug": "^4.3.4", 37 | "fs-extra": "^11.1.1", 38 | "minimist": "^1.2.8", 39 | "postject": "^1.0.0-alpha.6" 40 | }, 41 | "devDependencies": { 42 | "@types/debug": "^4.1.10", 43 | "@types/fs-extra": "^11.0.3", 44 | "@types/node": "^18.18.7", 45 | "@typescript-eslint/eslint-plugin": "^6.0.0", 46 | "@typescript-eslint/parser": "^6.0.0", 47 | "eslint": "^8.56.0", 48 | "eslint-config-eslint": "^9.0.0", 49 | "eslint-config-prettier": "^10.1.5", 50 | "eslint-plugin-import": "^2.29.0", 51 | "eslint-plugin-node": "^11.1.0", 52 | "eslint-plugin-promise": "^6.1.1", 53 | "globstar": "^1.0.0", 54 | "husky": "^8.0.3", 55 | "lint-staged": "^14.0.1", 56 | "prettier": "^3.5.3", 57 | "tsx": "^3.14.0", 58 | "typedoc": "~0.25.13", 59 | "typescript": "^5.2.2" 60 | }, 61 | "scripts": { 62 | "build": "tsc && tsc -p tsconfig.esm.json", 63 | "docs": "npx typedoc", 64 | "lint": "prettier --check src test && eslint --ext .ts,.js src bin test", 65 | "test:loader": "globstar -- node --loader tsx --test \"test/**/*.spec.ts\"", 66 | "test": "globstar -- node --import tsx --test \"test/**/*.spec.ts\"", 67 | "prepublishOnly": "yarn build", 68 | "prepare": "husky install" 69 | }, 70 | "engines": { 71 | "node": ">=14.14" 72 | }, 73 | "lint-staged": { 74 | "*.{js,ts}": [ 75 | "prettier --write", 76 | "eslint --fix" 77 | ] 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /src/ambient.d.ts: -------------------------------------------------------------------------------- 1 | declare module 'postject'; 2 | -------------------------------------------------------------------------------- /src/files.ts: -------------------------------------------------------------------------------- 1 | import path from 'path'; 2 | import fs from 'fs-extra'; 3 | 4 | import { SignOptions, SignOptionsForFiles } from './types'; 5 | 6 | const IS_PE_REGEX = /\.(exe|dll|sys|efi|scr|node)$/i; 7 | const IS_MSI_REGEX = /\.msi$/i; 8 | const IS_PACKAGE_REGEX = /\.(appx|appxbundle|msix|msixbundle)$/i; 9 | const IS_CATCAB_REGEX = /\.(cat|cab)$/i; 10 | const IS_SILVERLIGHT_REGEX = /\.xap$/i; 11 | const IS_SCRIPT_REGEX = /\.(vbs|wsf|ps1)$/i; 12 | const IS_JS_REGEX = /\.js$/i; 13 | 14 | /** 15 | * Recursively goes through an entire directory and returns an array 16 | * of full paths for files ot sign. 17 | * 18 | * - Portable executable files (.exe, .dll, .sys, .efi, .scr, .node) 19 | * - Microsoft installers (.msi) 20 | * - APPX/MSIX packages (.appx, .appxbundle, .msix, .msixbundle) 21 | * - Catalog files (.cat) 22 | * - Cabinet files (.cab) 23 | * - Silverlight applications (.xap) 24 | * - Scripts (.vbs, .wsf, .ps1) 25 | * If configured: 26 | * - JavaScript files (.js) 27 | */ 28 | export function getFilesToSign(options: SignOptions, dir?: string): Array { 29 | if (isSignOptionsForFiles(options)) { 30 | return options.files; 31 | } 32 | 33 | dir = dir || options.appDirectory; 34 | 35 | // Array of file paths to sign 36 | const result: Array = []; 37 | 38 | // Iterate over the app directory, looking for files to sign 39 | const files = fs.readdirSync(dir); 40 | 41 | const regexes = [ 42 | IS_PE_REGEX, 43 | IS_MSI_REGEX, 44 | IS_PACKAGE_REGEX, 45 | IS_CATCAB_REGEX, 46 | IS_SILVERLIGHT_REGEX, 47 | IS_SCRIPT_REGEX, 48 | ]; 49 | 50 | if (options.signJavaScript) { 51 | regexes.push(IS_JS_REGEX); 52 | } 53 | 54 | for (const file of files) { 55 | const fullPath = path.resolve(dir, file); 56 | 57 | if (fs.statSync(fullPath).isDirectory()) { 58 | // If it's a directory, recurse 59 | result.push(...getFilesToSign(options, fullPath)); 60 | } else if (regexes.some((regex) => regex.test(file))) { 61 | // If it's a match, add it to the list 62 | result.push(fullPath); 63 | } 64 | } 65 | 66 | return result; 67 | } 68 | 69 | function isSignOptionsForFiles(input: SignOptions): input is SignOptionsForFiles { 70 | return !!(input as SignOptionsForFiles).files; 71 | } 72 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import { sign } from './sign'; 2 | import { createSeaSignTool, SeaOptions, InternalSeaOptions } from './sea'; 3 | import { 4 | HookFunction, 5 | OptionalHookOptions, 6 | OptionalSignToolOptions, 7 | SignOptions, 8 | SignToolOptions, 9 | SignOptionsForDirectory, 10 | SignOptionsForFiles, 11 | } from './types'; 12 | 13 | export { 14 | sign, 15 | SignOptions, 16 | SignToolOptions, 17 | HookFunction, 18 | OptionalSignToolOptions, 19 | OptionalHookOptions, 20 | createSeaSignTool, 21 | SeaOptions, 22 | InternalSeaOptions, 23 | SignOptionsForDirectory, 24 | SignOptionsForFiles, 25 | }; 26 | -------------------------------------------------------------------------------- /src/sea.ts: -------------------------------------------------------------------------------- 1 | import { getDirname } from 'cross-dirname'; 2 | import path from 'path'; 3 | import os from 'os'; 4 | import fs from 'fs-extra'; 5 | import postject from 'postject'; 6 | 7 | import { spawnPromise } from './spawn'; 8 | import { log } from './utils/log'; 9 | import { SignToolOptions } from './types'; 10 | 11 | /** 12 | * Options for signing with a Node.js single executable application. 13 | * 14 | * @category Single executable applications 15 | */ 16 | export interface SeaOptions { 17 | /** 18 | * Full path to the Node.js single executable application. Needs to end with `.exe`. 19 | */ 20 | path: string; 21 | /** 22 | * A binary to use. Will use the current executable (process.execPath) by default. 23 | * 24 | * @defaultValue The Node.js {@link https://nodejs.org/api/process.html#processexecpath | `process.execPath`} 25 | */ 26 | bin?: string; 27 | /** 28 | * Options to pass to SignTool. 29 | */ 30 | windowsSign: SignToolOptions; 31 | } 32 | 33 | /** 34 | * This interface represents {@link SeaOptions} with all optional properties 35 | * inferred by `@electron/windows-sign` if not passed in by the user. 36 | * 37 | * @category Single executable applications 38 | */ 39 | export interface InternalSeaOptions extends Required { 40 | /** 41 | * Directory of the Node.js single executable application. 42 | */ 43 | dir: string; 44 | /** 45 | * File name of the Node.js single executable application. 46 | */ 47 | filename: string; 48 | } 49 | 50 | /** 51 | * cross-dir uses new Error() stacks 52 | * to figure out our directory in a way 53 | * that's somewhat cross-compatible. 54 | * 55 | * We can't just use __dirname because it's 56 | * undefined in ESM - and we can't use import.meta.url 57 | * because TypeScript won't allow usage unless you're 58 | * _only_ compiling for ESM. 59 | */ 60 | export const DIRNAME = getDirname(); 61 | 62 | const FILENAMES = { 63 | SEA_CONFIG: 'sea-config.json', 64 | SEA_MAIN: 'sea.js', 65 | SEA_BLOB: 'sea.blob', 66 | SEA_RECEIVER: 'receiver.mjs', 67 | }; 68 | 69 | const SEA_MAIN_SCRIPT = ` 70 | const bin = "%PATH_TO_BIN%"; 71 | const script = "%PATH_TO_SCRIPT%"; 72 | const options = %WINDOWS_SIGN_OPTIONS% 73 | 74 | const { spawnSync } = require('child_process'); 75 | 76 | function main() { 77 | console.log("@electron/windows-sign sea"); 78 | console.log({ bin, script }); 79 | 80 | try { 81 | const spawn = spawnSync( 82 | bin, 83 | [ script, JSON.stringify(options), JSON.stringify(process.argv.slice(1)) ], 84 | { stdio: ['inherit', 'inherit', 'pipe'] } 85 | ); 86 | 87 | if (spawn.status !== 0) { 88 | throw new Error(\`Spawn failed with code: \${spawn.status}. Stderr: \${spawn.stderr}\`); 89 | } 90 | } catch (error) { 91 | // Do not rethrow the error or write it to stdout/stderr. Then the process won't terminate. 92 | // See: https://github.com/electron/windows-sign/pull/48 93 | process.exit(1); 94 | } 95 | } 96 | 97 | main(); 98 | `; 99 | 100 | const SEA_RECEIVER_SCRIPT = ` 101 | import { sign } from '@electron/windows-sign'; 102 | import fs from 'fs-extra'; 103 | import path from 'path'; 104 | 105 | const logPath = path.join('electron-windows-sign.log'); 106 | const options = JSON.parse(process.argv[2]); 107 | const signArgv = JSON.parse(process.argv[3]); 108 | const files = signArgv.slice(-1); 109 | 110 | try { 111 | fs.appendFileSync(logPath, \`\\nCalled with: \${JSON.stringify(process.argv, null, 2)}\`); 112 | 113 | sign({ ...options, files }) 114 | .then((result) => { 115 | fs.appendFileSync(logPath, \`\\nSuccessfully signed with result: \${result}\`); 116 | }) 117 | .catch((error) => { 118 | fs.appendFileSync(logPath, \`\\nError from sign: \${error}\`); 119 | throw new Error(error); 120 | }); 121 | } catch (error) { 122 | fs.appendFileSync(logPath, \`\\Error invoking sign: \${error}\`); 123 | throw new Error(error); 124 | } 125 | `; 126 | 127 | /** 128 | * Uses Node's "Single Executable App" functionality 129 | * to create a Node-driven signtool.exe that calls this 130 | * module. 131 | * 132 | * This is useful with other tooling that _always_ calls 133 | * a signtool.exe to sign. Some of those tools cannot be 134 | * easily configured, but we _can_ override their signtool.exe. 135 | * 136 | * @category Single executable applications 137 | */ 138 | export async function createSeaSignTool( 139 | options: Partial = {}, 140 | ): Promise { 141 | checkCompatibility(); 142 | 143 | const requiredOptions = await getOptions(options); 144 | await createFiles(requiredOptions); 145 | await createBlob(requiredOptions); 146 | await createBinary(requiredOptions); 147 | await createSeaReceiver(requiredOptions); 148 | await cleanup(requiredOptions); 149 | 150 | return requiredOptions; 151 | } 152 | 153 | async function createSeaReceiver(options: InternalSeaOptions) { 154 | const receiverPath = path.join(options.dir, FILENAMES.SEA_RECEIVER); 155 | 156 | await fs.ensureFile(receiverPath); 157 | await fs.writeFile(receiverPath, SEA_RECEIVER_SCRIPT); 158 | } 159 | 160 | async function createFiles(options: InternalSeaOptions) { 161 | const { dir, bin } = options; 162 | const receiverPath = path.join(options.dir, FILENAMES.SEA_RECEIVER); 163 | 164 | // sea-config.json 165 | await fs.outputJSON( 166 | path.join(dir, FILENAMES.SEA_CONFIG), 167 | { 168 | main: FILENAMES.SEA_MAIN, 169 | output: FILENAMES.SEA_BLOB, 170 | disableExperimentalSEAWarning: true, 171 | }, 172 | { 173 | spaces: 2, 174 | }, 175 | ); 176 | 177 | // signtool.js 178 | const binPath = bin || process.execPath; 179 | const script = SEA_MAIN_SCRIPT.replace('%PATH_TO_BIN%', escapeMaybe(binPath)) 180 | .replace('%PATH_TO_SCRIPT%', escapeMaybe(receiverPath)) 181 | .replace('%WINDOWS_SIGN_OPTIONS%', JSON.stringify(options.windowsSign)); 182 | 183 | await fs.outputFile(path.join(dir, FILENAMES.SEA_MAIN), script); 184 | } 185 | 186 | async function createBlob(options: InternalSeaOptions) { 187 | const args = ['--experimental-sea-config', 'sea-config.json']; 188 | const bin = process.execPath; 189 | const cwd = options.dir; 190 | 191 | log(`Calling ${bin} with options:`, args); 192 | 193 | const { stderr, stdout } = await spawnPromise(bin, args, { 194 | cwd, 195 | }); 196 | 197 | log('stdout:', stdout); 198 | log('stderr:', stderr); 199 | } 200 | 201 | async function createBinary(options: InternalSeaOptions) { 202 | const { dir, filename } = options; 203 | 204 | log(`Creating ${filename} in ${dir}`); 205 | 206 | // Copy Node over 207 | const seaPath = path.join(dir, filename); 208 | await fs.copyFile(process.execPath, seaPath); 209 | 210 | // Remove the Node signature 211 | const signtool = path.join(DIRNAME, '../../vendor/signtool.exe'); 212 | await spawnPromise(signtool, ['remove', '/s', seaPath]); 213 | 214 | // Inject the blob 215 | const blob = await fs.readFile(path.join(dir, FILENAMES.SEA_BLOB)); 216 | await postject.inject(seaPath, 'NODE_SEA_BLOB', blob, { 217 | sentinelFuse: 'NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2', 218 | }); 219 | } 220 | 221 | async function cleanup(options: InternalSeaOptions) { 222 | const { dir } = options; 223 | const toRemove = [FILENAMES.SEA_BLOB, FILENAMES.SEA_MAIN, FILENAMES.SEA_CONFIG]; 224 | 225 | for (const file of toRemove) { 226 | try { 227 | await fs.remove(path.join(dir, file)); 228 | } catch (error) { 229 | console.warn(`Tried and failed to remove ${file}. Continuing.`, error); 230 | } 231 | } 232 | } 233 | 234 | async function getOptions(options: Partial): Promise { 235 | const cloned = { ...options }; 236 | 237 | if (!cloned.path) { 238 | cloned.path = path.join(os.homedir(), '.electron', 'windows-sign', 'sea.exe'); 239 | await fs.ensureFile(cloned.path); 240 | } 241 | 242 | if (!cloned.bin) { 243 | cloned.bin = process.execPath; 244 | } 245 | 246 | if (!cloned.windowsSign) { 247 | throw new Error('Did not find windowsSign options, which are required'); 248 | } 249 | 250 | return { 251 | path: cloned.path, 252 | dir: path.dirname(cloned.path), 253 | filename: path.basename(cloned.path), 254 | bin: cloned.bin, 255 | windowsSign: cloned.windowsSign, 256 | }; 257 | } 258 | 259 | /** 260 | * Ensures that the current Node.js version supports SEA app generation and errors if not. 261 | */ 262 | function checkCompatibility() { 263 | const version = process.versions.node; 264 | const split = version.split('.'); 265 | const major = parseInt(split[0], 10); 266 | 267 | if (major >= 20) { 268 | return true; 269 | } 270 | 271 | throw new Error( 272 | `Your Node.js version (${process.version}) does not support Single Executable Applications. Please upgrade your version of Node.js.`, 273 | ); 274 | } 275 | 276 | /** Make sure that the input string has escaped backwards slashes 277 | * - but never double-escaped backwards slashes. 278 | */ 279 | function escapeMaybe(input: string): string { 280 | const result = input.split(path.sep).join('\\\\'); 281 | 282 | if (result.includes('\\\\\\\\')) { 283 | throw new Error( 284 | `Your passed input ${input} contains escaped slashes. Please do not escape them`, 285 | ); 286 | } 287 | 288 | return result; 289 | } 290 | -------------------------------------------------------------------------------- /src/sign-with-hook.ts: -------------------------------------------------------------------------------- 1 | import path from 'path'; 2 | import { HookFunction, InternalHookOptions, InternalSignOptions } from './types'; 3 | import { log } from './utils/log'; 4 | 5 | let hookFunction: HookFunction; 6 | 7 | function getHookFunction(options: InternalHookOptions): HookFunction { 8 | if (options.hookFunction) { 9 | return options.hookFunction; 10 | } 11 | 12 | if (options.hookModulePath) { 13 | const module = require(path.resolve(options.hookModulePath)); 14 | 15 | if (module.default) { 16 | return module.default; 17 | } 18 | 19 | if (typeof module === 'function') { 20 | return module; 21 | } 22 | } 23 | 24 | if (!hookFunction) { 25 | throw new Error( 26 | 'No hook function found. Signing will not be possible. Please see the documentation for how to pass a hook function to @electron/windows-sign', 27 | ); 28 | } 29 | 30 | return hookFunction; 31 | } 32 | 33 | /** 34 | * Sign with a hook function, basically letting everyone 35 | * write completely custom sign logic 36 | * 37 | * @param {InternalSignOptions} options 38 | */ 39 | export async function signWithHook(options: InternalSignOptions) { 40 | hookFunction = getHookFunction(options); 41 | 42 | for (const file of options.files) { 43 | try { 44 | await hookFunction(file); 45 | } catch (error) { 46 | log(`Error signing ${file}`, error); 47 | } 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /src/sign-with-signtool.ts: -------------------------------------------------------------------------------- 1 | import path from 'path'; 2 | import { log } from './utils/log'; 3 | import { spawnPromise } from './spawn'; 4 | import { HASHES, InternalSignOptions, InternalSignToolOptions } from './types'; 5 | import { getDirname } from 'cross-dirname'; 6 | 7 | const DIRNAME = getDirname(); 8 | 9 | function getSigntoolArgs(options: InternalSignToolOptions) { 10 | // See the following url for docs 11 | // https://learn.microsoft.com/en-us/dotnet/framework/tools/signtool-exe 12 | const { certificateFile, certificatePassword, hash, timestampServer } = options; 13 | const args = ['sign']; 14 | 15 | // Automatically select cert 16 | if (options.automaticallySelectCertificate) { 17 | args.push('/a'); 18 | } 19 | 20 | // Dual-sign 21 | if (options.appendSignature) { 22 | args.push('/as'); 23 | } 24 | 25 | // Timestamp 26 | if (hash === HASHES.sha256) { 27 | args.push('/tr', timestampServer); 28 | args.push('/td', hash); 29 | } else { 30 | args.push('/t', timestampServer); 31 | } 32 | 33 | // Certificate file 34 | if (certificateFile) { 35 | args.push('/f', path.resolve(certificateFile)); 36 | } 37 | 38 | // Certificate password 39 | if (certificatePassword) { 40 | args.push('/p', certificatePassword); 41 | } 42 | 43 | // Hash 44 | args.push('/fd', hash); 45 | 46 | // Description 47 | if (options.description) { 48 | args.push('/d', options.description); 49 | } 50 | 51 | // Website 52 | if (options.website) { 53 | args.push('/du', options.website); 54 | } 55 | 56 | // Debug 57 | if (options.debug) { 58 | args.push('/debug'); 59 | } 60 | 61 | if (options.signWithParams) { 62 | const extraArgs: Array = []; 63 | 64 | if (Array.isArray(options.signWithParams)) { 65 | extraArgs.push(...options.signWithParams); 66 | } else { 67 | // Split up at spaces and doublequotes 68 | extraArgs.push(...(options.signWithParams.match(/(?:[^\s"]+|"[^"]*")+/g) as Array)); 69 | } 70 | 71 | log('Parsed signWithParams as:', extraArgs); 72 | 73 | args.push(...extraArgs); 74 | } 75 | 76 | return args; 77 | } 78 | 79 | async function execute(options: InternalSignToolOptions) { 80 | const { signToolPath, files } = options; 81 | const args = getSigntoolArgs(options); 82 | 83 | log('Executing signtool with args', { args, files }); 84 | const { code, stderr, stdout } = await spawnPromise(signToolPath, [...args, ...files], { 85 | env: process.env, 86 | cwd: process.cwd(), 87 | }); 88 | 89 | if (code !== 0) { 90 | throw new Error(`Signtool exited with code ${code}. Stderr: ${stderr}. Stdout: ${stdout}`); 91 | } 92 | } 93 | 94 | export async function signWithSignTool(options: InternalSignOptions) { 95 | const certificatePassword = 96 | options.certificatePassword || process.env.WINDOWS_CERTIFICATE_PASSWORD; 97 | const certificateFile = options.certificateFile || process.env.WINDOWS_CERTIFICATE_FILE; 98 | const signWithParams = options.signWithParams || process.env.WINDOWS_SIGN_WITH_PARAMS; 99 | const timestampServer = 100 | options.timestampServer || 101 | process.env.WINDOWS_TIMESTAMP_SERVER || 102 | 'http://timestamp.digicert.com'; 103 | const signToolPath = 104 | options.signToolPath || 105 | process.env.WINDOWS_SIGNTOOL_PATH || 106 | path.join(DIRNAME, '../../vendor/signtool.exe'); 107 | const description = options.description || process.env.WINDOWS_SIGN_DESCRIPTION; 108 | const website = options.website || process.env.WINDOWS_SIGN_WEBSITE; 109 | 110 | if (!certificateFile && !(signWithParams || signToolPath)) { 111 | throw new Error('You must provide a certificateFile and a signToolPath or signing parameters'); 112 | } 113 | 114 | if (!signToolPath && !signWithParams && !certificatePassword) { 115 | throw new Error('You must provide a certificatePassword or signing parameters'); 116 | } 117 | 118 | const internalOptions = { 119 | appendSignature: false, 120 | ...options, 121 | certificateFile, 122 | certificatePassword, 123 | signWithParams, 124 | signToolPath, 125 | description, 126 | timestampServer, 127 | website, 128 | }; 129 | 130 | const hashes = 131 | options.hashes == null || options.hashes.length === 0 132 | ? [HASHES.sha1, HASHES.sha256] 133 | : options.hashes; 134 | 135 | if (hashes.includes(HASHES.sha1)) { 136 | await execute({ ...internalOptions, hash: HASHES.sha1 }); 137 | // If we signed with SHA1, we need to append the SHA256 signature: 138 | internalOptions.appendSignature = true; 139 | } 140 | if (hashes.includes(HASHES.sha256)) { 141 | await execute({ ...internalOptions, hash: HASHES.sha256 }); 142 | } 143 | } 144 | -------------------------------------------------------------------------------- /src/sign.ts: -------------------------------------------------------------------------------- 1 | import { getFilesToSign } from './files'; 2 | import { signWithHook } from './sign-with-hook'; 3 | import { signWithSignTool } from './sign-with-signtool'; 4 | import { InternalSignOptions, SignOptions } from './types'; 5 | import { enableDebugging, log } from './utils/log'; 6 | import { booleanFromEnv } from './utils/parse-env'; 7 | 8 | /** 9 | * This is the main function exported from this module. It'll 10 | * look at your options, determine the best way to sign a file, 11 | * and then return one of our internal functions to do the actual 12 | * signing. 13 | * 14 | * @param options 15 | * @returns {Promise} 16 | * 17 | * @category Sign 18 | */ 19 | export async function sign(options: SignOptions) { 20 | const signJavaScript = options.signJavaScript || booleanFromEnv('WINDOWS_SIGN_JAVASCRIPT'); 21 | const hookModulePath = options.hookModulePath || process.env.WINDOWS_SIGN_HOOK_MODULE_PATH; 22 | 23 | if (options.debug) { 24 | enableDebugging(); 25 | } 26 | 27 | log('Called with options', { options }); 28 | 29 | const files = getFilesToSign(options); 30 | const internalOptions: InternalSignOptions = { 31 | ...options, 32 | signJavaScript, 33 | hookModulePath, 34 | files, 35 | }; 36 | 37 | // If a hook is provides, sign with the hook 38 | if (internalOptions.hookFunction || internalOptions.hookModulePath) { 39 | log('Signing with hook'); 40 | return signWithHook(internalOptions); 41 | } 42 | 43 | // If we're going with the defaults, we're signing 44 | // with signtool. Custom signing tools are also 45 | // handled here. 46 | log('Signing with signtool'); 47 | return signWithSignTool(internalOptions); 48 | } 49 | -------------------------------------------------------------------------------- /src/spawn.ts: -------------------------------------------------------------------------------- 1 | import { SpawnOptions } from 'child_process'; 2 | import { log } from './utils/log'; 3 | 4 | export interface SpawnPromiseResult { 5 | stdout: string; 6 | stderr: string; 7 | code: number; 8 | } 9 | 10 | /** 11 | * Spawn a process as a promise 12 | * 13 | * @param {string} name 14 | * @param {Array} args 15 | * @param {SpawnOptions} [options] 16 | * @returns {Promise} 17 | */ 18 | export function spawnPromise( 19 | name: string, 20 | args: Array, 21 | options?: SpawnOptions, 22 | ): Promise { 23 | return new Promise((resolve) => { 24 | const { spawn } = require('child_process'); 25 | const fork = spawn(name, args, options); 26 | 27 | log(`Spawning ${name} with ${args}`); 28 | 29 | let stdout = ''; 30 | let stderr = ''; 31 | 32 | // eslint-disable-next-line @typescript-eslint/no-explicit-any 33 | fork.stdout.on('data', (data: any) => { 34 | log(`Spawn ${name} stdout: ${data}`); 35 | stdout += data; 36 | }); 37 | 38 | // eslint-disable-next-line @typescript-eslint/no-explicit-any 39 | fork.stderr.on('data', (data: any) => { 40 | log(`Spawn ${name} stderr: ${data}`); 41 | stderr += data; 42 | }); 43 | 44 | fork.on('close', (code: number) => { 45 | log(`Spawn ${name}: Child process exited with code ${code}`); 46 | resolve({ stdout, stderr, code }); 47 | }); 48 | }); 49 | } 50 | -------------------------------------------------------------------------------- /src/types.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * SHA-1 has been deprecated on Windows since 2016. We'll still dualsign. 3 | * https://social.technet.microsoft.com/wiki/contents/articles/32288.windows-enforcement-of-sha1-certificates.aspx#Post-February_TwentySeventeen_Plan 4 | */ 5 | export const enum HASHES { 6 | sha1 = 'sha1', 7 | sha256 = 'sha256', 8 | } 9 | 10 | /** 11 | * Signing can be either by specifying a directory of files to sign. 12 | * 13 | * @category Sign 14 | */ 15 | export type SignOptions = SignOptionsForDirectory | SignOptionsForFiles; 16 | 17 | /** 18 | * Options for signing by passing a path to a directory to be codesigned. 19 | * 20 | * @category Sign 21 | */ 22 | export interface SignOptionsForDirectory extends SignToolOptions { 23 | /** 24 | * Path to the application directory. We will scan this 25 | * directory for any `.dll`, `.exe`, `.msi`, or `.node` files and 26 | * codesign them with `signtool.exe`. 27 | */ 28 | appDirectory: string; 29 | } 30 | 31 | /** 32 | * Options for signing by passing an array of files to be codesigned. 33 | * 34 | * @category Sign 35 | */ 36 | export interface SignOptionsForFiles extends SignToolOptions { 37 | /** 38 | * Array of paths to files to be codesigned with `signtool.exe`. 39 | */ 40 | files: Array; 41 | } 42 | 43 | /** 44 | * @category Utility 45 | */ 46 | export interface SignToolOptions extends OptionalSignToolOptions, OptionalHookOptions {} 47 | 48 | export interface InternalSignOptions extends SignOptionsForFiles {} 49 | 50 | export interface InternalSignToolOptions extends OptionalSignToolOptions, OptionalHookOptions { 51 | signToolPath: string; 52 | timestampServer: string; 53 | files: Array; 54 | hash: HASHES; 55 | appendSignature?: boolean; 56 | } 57 | 58 | /** 59 | * @category Utility 60 | */ 61 | export interface OptionalSignToolOptions { 62 | /** 63 | * Path to a `.pfx` code signing certificate. 64 | * Will use `process.env.WINDOWS_CERTIFICATE_FILE` if this option is not provided. 65 | */ 66 | certificateFile?: string; 67 | /** 68 | * Password to {@link certificateFile}. If you don't provide this, 69 | * you need to provide the {@link signWithParams} option. 70 | * Will use `process.env.WINDOWS_CERTIFICATE_PASSWORD` if this option is not provided. 71 | */ 72 | certificatePassword?: string; 73 | /** 74 | * Path to a timestamp server. 75 | * Will use `process.env.WINDOWS_TIMESTAMP_SERVER` if this option is not provided. 76 | * 77 | * @defaultValue http://timestamp.digicert.com 78 | */ 79 | timestampServer?: string; 80 | /** 81 | * Description of the signed content. Will be passed to `signtool.exe` as `/d`. 82 | */ 83 | description?: string; 84 | /** 85 | * URL for the expanded description of the signed content. Will be passed to `signtool.exe` as `/du`. 86 | */ 87 | website?: string; 88 | /** 89 | * Path to the `signtool.exe` used to sign. Will use `vendor/signtool.exe` if not provided. 90 | */ 91 | signToolPath?: string; 92 | /** 93 | * Additional parameters to pass to `signtool.exe`. 94 | * 95 | * @see Microsoft's {@link https://learn.microsoft.com/en-us/dotnet/framework/tools/signtool-exe SignTool.exe documentation} 96 | */ 97 | signWithParams?: string | Array; 98 | /** 99 | * Enables debug logging. 100 | * 101 | * @defaultValue false 102 | */ 103 | debug?: boolean; 104 | /** 105 | * Automatically selects the best signing certificate according to SignTool. Will be passed to `signtool.exe` as `/a`. 106 | * 107 | * @defaultValue true 108 | */ 109 | automaticallySelectCertificate?: boolean; 110 | /** 111 | * Whether or not to sign JavaScript files. 112 | * 113 | * @defaultValue false 114 | */ 115 | signJavaScript?: boolean; 116 | /** 117 | * Hash algorithms to use for signing. 118 | */ 119 | hashes?: HASHES[]; 120 | } 121 | 122 | /** 123 | * Custom function that is called sequentially for each file that needs to be signed. 124 | * 125 | * @param fileToSign Absolute path to the file to sign 126 | * 127 | * @category Utility 128 | */ 129 | export type HookFunction = (fileToSign: string) => void | Promise; 130 | 131 | /** 132 | * @category Utility 133 | */ 134 | export interface OptionalHookOptions { 135 | /** 136 | * A hook function called for each file that needs to be signed. 137 | * Use this for full control over your app's signing logic. 138 | * `@electron/windows-sign` will not attempt to sign with SignTool if a custom hook is detected. 139 | */ 140 | hookFunction?: HookFunction; 141 | /** 142 | * A path to a JavaScript file, exporting a single function that will be called for each file that needs to be signed. 143 | * Use this for full control over your app's signing logic. 144 | * `@electron/windows-sign` will not attempt to sign with SignTool if a custom hook is detected. 145 | */ 146 | hookModulePath?: string; 147 | } 148 | 149 | export interface InternalHookOptions extends OptionalHookOptions { 150 | files: Array; 151 | } 152 | -------------------------------------------------------------------------------- /src/utils/log.ts: -------------------------------------------------------------------------------- 1 | import { debug as debugModule } from 'debug'; 2 | 3 | export function enableDebugging() { 4 | debugModule.enable('electron-windows-sign'); 5 | } 6 | 7 | export const log = debugModule('electron-windows-sign'); 8 | -------------------------------------------------------------------------------- /src/utils/parse-env.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Tries to parse an process.env string to a boolean. 3 | * Will understand undefined as the default value 4 | * Will understand "false", "False", "fAlse", or "0" as `false` 5 | * Will understand everything else as true 6 | * 7 | * @export 8 | * @param {string} name 9 | * @return {*} {boolean} 10 | */ 11 | export function booleanFromEnv(name: string): boolean | undefined { 12 | const value = process.env[name]; 13 | 14 | if (value === undefined) { 15 | return undefined; 16 | } 17 | 18 | if (value.toLowerCase() === 'false' || value === '0') { 19 | return false; 20 | } 21 | 22 | return !!value; 23 | } 24 | -------------------------------------------------------------------------------- /test/files.spec.ts: -------------------------------------------------------------------------------- 1 | import assert from 'node:assert'; 2 | import { describe, it } from 'node:test'; 3 | import path from 'path'; 4 | 5 | import { getFilesToSign } from '../src/files'; 6 | 7 | describe('files', async () => { 8 | it('gets files to sign', () => { 9 | const files = getFilesToSign({ 10 | appDirectory: path.resolve(__dirname, 'fixtures', 'app'), 11 | }); 12 | 13 | const expectedFiles = ['fake.cab', 'fake.dll', 'fake.exe', 'fake.msix', 'fake.node'].map((f) => 14 | path.join(__dirname, 'fixtures', 'app', f), 15 | ); 16 | 17 | assert.deepEqual(files, expectedFiles); 18 | }); 19 | 20 | it('gets files to sign (with JS files)', () => { 21 | const files = getFilesToSign({ 22 | appDirectory: path.resolve(__dirname, 'fixtures', 'app'), 23 | signJavaScript: true, 24 | }); 25 | 26 | const expectedFiles = [ 27 | 'fake.cab', 28 | 'fake.dll', 29 | 'fake.exe', 30 | 'fake.js', 31 | 'fake.msix', 32 | 'fake.node', 33 | ].map((f) => path.join(__dirname, 'fixtures', 'app', f)); 34 | 35 | assert.deepEqual(files, expectedFiles); 36 | }); 37 | }); 38 | -------------------------------------------------------------------------------- /test/fixtures/app/fake.cab: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/electron/windows-sign/5fefebcfd99a9bd65770acf685ebc3074ca46dcb/test/fixtures/app/fake.cab -------------------------------------------------------------------------------- /test/fixtures/app/fake.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/electron/windows-sign/5fefebcfd99a9bd65770acf685ebc3074ca46dcb/test/fixtures/app/fake.dll -------------------------------------------------------------------------------- /test/fixtures/app/fake.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/electron/windows-sign/5fefebcfd99a9bd65770acf685ebc3074ca46dcb/test/fixtures/app/fake.exe -------------------------------------------------------------------------------- /test/fixtures/app/fake.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/electron/windows-sign/5fefebcfd99a9bd65770acf685ebc3074ca46dcb/test/fixtures/app/fake.js -------------------------------------------------------------------------------- /test/fixtures/app/fake.msix: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/electron/windows-sign/5fefebcfd99a9bd65770acf685ebc3074ca46dcb/test/fixtures/app/fake.msix -------------------------------------------------------------------------------- /test/fixtures/app/fake.node: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/electron/windows-sign/5fefebcfd99a9bd65770acf685ebc3074ca46dcb/test/fixtures/app/fake.node -------------------------------------------------------------------------------- /test/fixtures/app/fake.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/electron/windows-sign/5fefebcfd99a9bd65770acf685ebc3074ca46dcb/test/fixtures/app/fake.png -------------------------------------------------------------------------------- /test/fixtures/hook-module.js: -------------------------------------------------------------------------------- 1 | module.exports = function (file) { 2 | process.env.HOOK_MODULE_CALLED_WITH_FILE = file; 3 | }; 4 | -------------------------------------------------------------------------------- /test/sign-with-hook.spec.ts: -------------------------------------------------------------------------------- 1 | import assert from 'node:assert'; 2 | import { describe, it } from 'node:test'; 3 | 4 | import { signWithHook } from '../src/sign-with-hook'; 5 | 6 | describe('sign with hook', async () => { 7 | it('should call a hook function', async () => { 8 | let hookCalled = false; 9 | 10 | const hookFunction = (filePath: string) => { 11 | assert.equal(filePath, 'my/fake/file'); 12 | hookCalled = true; 13 | }; 14 | 15 | await signWithHook({ 16 | appDirectory: '', 17 | files: ['my/fake/file'], 18 | hookFunction, 19 | }); 20 | 21 | assert.strictEqual(hookCalled, true); 22 | }); 23 | 24 | it('should call a async hook function', async () => { 25 | let hookCalled = false; 26 | 27 | const hookFunction = async (filePath: string) => { 28 | assert.equal(filePath, 'my/fake/file'); 29 | 30 | return new Promise((resolve) => { 31 | setTimeout(() => { 32 | hookCalled = true; 33 | resolve(); 34 | }, 10); 35 | }); 36 | }; 37 | 38 | await signWithHook({ 39 | appDirectory: '', 40 | files: ['my/fake/file'], 41 | hookFunction, 42 | }); 43 | 44 | assert.strictEqual(hookCalled, true); 45 | }); 46 | 47 | it('should call a hook module', async () => { 48 | const fakeFile = `my/fake/file/${Date.now()}`; 49 | await signWithHook({ 50 | appDirectory: '', 51 | files: [fakeFile], 52 | hookModulePath: './test/fixtures/hook-module.js', 53 | }); 54 | 55 | assert.strictEqual(process.env.HOOK_MODULE_CALLED_WITH_FILE, fakeFile); 56 | }); 57 | }); 58 | -------------------------------------------------------------------------------- /tsconfig.esm.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "module": "esnext", 5 | "outDir": "dist/esm" 6 | } 7 | } -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "commonjs", 4 | "target": "ES2020", 5 | "lib": [ 6 | "ES2020" 7 | ], 8 | "sourceMap": false, 9 | "strict": true, 10 | "outDir": "dist/cjs", 11 | "types": [ 12 | "node", 13 | ], 14 | "allowSyntheticDefaultImports": true, 15 | "moduleResolution": "node", 16 | "declaration": true, 17 | "esModuleInterop": true 18 | }, 19 | "include": [ 20 | "src" 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /typedoc.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://typedoc.org/schema.json", 3 | "entryPoints": ["src/index.ts"], 4 | "excludeInternal": true, 5 | "navigation": true 6 | } -------------------------------------------------------------------------------- /vendor/signtool.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/electron/windows-sign/5fefebcfd99a9bd65770acf685ebc3074ca46dcb/vendor/signtool.exe -------------------------------------------------------------------------------- /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 | "@babel/code-frame@^7.0.0": 11 | version "7.22.13" 12 | resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz" 13 | integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w== 14 | dependencies: 15 | "@babel/highlight" "^7.22.13" 16 | chalk "^2.4.2" 17 | 18 | "@babel/helper-validator-identifier@^7.15.7", "@babel/helper-validator-identifier@^7.22.20": 19 | version "7.22.20" 20 | resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz" 21 | integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== 22 | 23 | "@babel/highlight@^7.22.13": 24 | version "7.22.20" 25 | resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz" 26 | integrity sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg== 27 | dependencies: 28 | "@babel/helper-validator-identifier" "^7.22.20" 29 | chalk "^2.4.2" 30 | js-tokens "^4.0.0" 31 | 32 | "@es-joy/jsdoccomment@~0.40.1": 33 | version "0.40.1" 34 | resolved "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.40.1.tgz" 35 | integrity sha512-YORCdZSusAlBrFpZ77pJjc5r1bQs5caPWtAu+WWmiSo+8XaUzseapVrfAtiRFbQWnrBxxLLEwF6f6ZG/UgCQCg== 36 | dependencies: 37 | comment-parser "1.4.0" 38 | esquery "^1.5.0" 39 | jsdoc-type-pratt-parser "~4.0.0" 40 | 41 | "@esbuild/android-arm64@0.18.20": 42 | version "0.18.20" 43 | resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz#984b4f9c8d0377443cc2dfcef266d02244593622" 44 | integrity sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ== 45 | 46 | "@esbuild/android-arm@0.18.20": 47 | version "0.18.20" 48 | resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.18.20.tgz#fedb265bc3a589c84cc11f810804f234947c3682" 49 | integrity sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw== 50 | 51 | "@esbuild/android-x64@0.18.20": 52 | version "0.18.20" 53 | resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.18.20.tgz#35cf419c4cfc8babe8893d296cd990e9e9f756f2" 54 | integrity sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg== 55 | 56 | "@esbuild/darwin-arm64@0.18.20": 57 | version "0.18.20" 58 | resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz#08172cbeccf95fbc383399a7f39cfbddaeb0d7c1" 59 | integrity sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA== 60 | 61 | "@esbuild/darwin-x64@0.18.20": 62 | version "0.18.20" 63 | resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz#d70d5790d8bf475556b67d0f8b7c5bdff053d85d" 64 | integrity sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ== 65 | 66 | "@esbuild/freebsd-arm64@0.18.20": 67 | version "0.18.20" 68 | resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz#98755cd12707f93f210e2494d6a4b51b96977f54" 69 | integrity sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw== 70 | 71 | "@esbuild/freebsd-x64@0.18.20": 72 | version "0.18.20" 73 | resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz#c1eb2bff03915f87c29cece4c1a7fa1f423b066e" 74 | integrity sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ== 75 | 76 | "@esbuild/linux-arm64@0.18.20": 77 | version "0.18.20" 78 | resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz#bad4238bd8f4fc25b5a021280c770ab5fc3a02a0" 79 | integrity sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA== 80 | 81 | "@esbuild/linux-arm@0.18.20": 82 | version "0.18.20" 83 | resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz#3e617c61f33508a27150ee417543c8ab5acc73b0" 84 | integrity sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg== 85 | 86 | "@esbuild/linux-ia32@0.18.20": 87 | version "0.18.20" 88 | resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz#699391cccba9aee6019b7f9892eb99219f1570a7" 89 | integrity sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA== 90 | 91 | "@esbuild/linux-loong64@0.18.20": 92 | version "0.18.20" 93 | resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz#e6fccb7aac178dd2ffb9860465ac89d7f23b977d" 94 | integrity sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg== 95 | 96 | "@esbuild/linux-mips64el@0.18.20": 97 | version "0.18.20" 98 | resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz#eeff3a937de9c2310de30622a957ad1bd9183231" 99 | integrity sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ== 100 | 101 | "@esbuild/linux-ppc64@0.18.20": 102 | version "0.18.20" 103 | resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz#2f7156bde20b01527993e6881435ad79ba9599fb" 104 | integrity sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA== 105 | 106 | "@esbuild/linux-riscv64@0.18.20": 107 | version "0.18.20" 108 | resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz#6628389f210123d8b4743045af8caa7d4ddfc7a6" 109 | integrity sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A== 110 | 111 | "@esbuild/linux-s390x@0.18.20": 112 | version "0.18.20" 113 | resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz#255e81fb289b101026131858ab99fba63dcf0071" 114 | integrity sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ== 115 | 116 | "@esbuild/linux-x64@0.18.20": 117 | version "0.18.20" 118 | resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz#c7690b3417af318a9b6f96df3031a8865176d338" 119 | integrity sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w== 120 | 121 | "@esbuild/netbsd-x64@0.18.20": 122 | version "0.18.20" 123 | resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz#30e8cd8a3dded63975e2df2438ca109601ebe0d1" 124 | integrity sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A== 125 | 126 | "@esbuild/openbsd-x64@0.18.20": 127 | version "0.18.20" 128 | resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz#7812af31b205055874c8082ea9cf9ab0da6217ae" 129 | integrity sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg== 130 | 131 | "@esbuild/sunos-x64@0.18.20": 132 | version "0.18.20" 133 | resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz#d5c275c3b4e73c9b0ecd38d1ca62c020f887ab9d" 134 | integrity sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ== 135 | 136 | "@esbuild/win32-arm64@0.18.20": 137 | version "0.18.20" 138 | resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz#73bc7f5a9f8a77805f357fab97f290d0e4820ac9" 139 | integrity sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg== 140 | 141 | "@esbuild/win32-ia32@0.18.20": 142 | version "0.18.20" 143 | resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz#ec93cbf0ef1085cc12e71e0d661d20569ff42102" 144 | integrity sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g== 145 | 146 | "@esbuild/win32-x64@0.18.20": 147 | version "0.18.20" 148 | resolved "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz" 149 | integrity sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ== 150 | 151 | "@eslint-community/eslint-utils@^4.1.2", "@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": 152 | version "4.4.0" 153 | resolved "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz" 154 | integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== 155 | dependencies: 156 | eslint-visitor-keys "^3.3.0" 157 | 158 | "@eslint-community/regexpp@^4.5.1": 159 | version "4.12.1" 160 | resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.1.tgz#cfc6cffe39df390a3841cde2abccf92eaa7ae0e0" 161 | integrity sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ== 162 | 163 | "@eslint-community/regexpp@^4.6.0", "@eslint-community/regexpp@^4.6.1": 164 | version "4.10.0" 165 | resolved "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz" 166 | integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== 167 | 168 | "@eslint/eslintrc@^2.1.4": 169 | version "2.1.4" 170 | resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad" 171 | integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== 172 | dependencies: 173 | ajv "^6.12.4" 174 | debug "^4.3.2" 175 | espree "^9.6.0" 176 | globals "^13.19.0" 177 | ignore "^5.2.0" 178 | import-fresh "^3.2.1" 179 | js-yaml "^4.1.0" 180 | minimatch "^3.1.2" 181 | strip-json-comments "^3.1.1" 182 | 183 | "@eslint/js@8.57.1": 184 | version "8.57.1" 185 | resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.1.tgz#de633db3ec2ef6a3c89e2f19038063e8a122e2c2" 186 | integrity sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q== 187 | 188 | "@eslint/js@^8.42.0": 189 | version "8.52.0" 190 | resolved "https://registry.npmjs.org/@eslint/js/-/js-8.52.0.tgz" 191 | integrity sha512-mjZVbpaeMZludF2fsWLD0Z9gCref1Tk4i9+wddjRvpUNqqcndPkBD09N/Mapey0b3jaXbLm2kICwFv2E64QinA== 192 | 193 | "@humanwhocodes/config-array@^0.13.0": 194 | version "0.13.0" 195 | resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.13.0.tgz#fb907624df3256d04b9aa2df50d7aa97ec648748" 196 | integrity sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw== 197 | dependencies: 198 | "@humanwhocodes/object-schema" "^2.0.3" 199 | debug "^4.3.1" 200 | minimatch "^3.0.5" 201 | 202 | "@humanwhocodes/module-importer@^1.0.1": 203 | version "1.0.1" 204 | resolved "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz" 205 | integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== 206 | 207 | "@humanwhocodes/object-schema@^2.0.3": 208 | version "2.0.3" 209 | resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3" 210 | integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== 211 | 212 | "@nodelib/fs.scandir@2.1.5": 213 | version "2.1.5" 214 | resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" 215 | integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== 216 | dependencies: 217 | "@nodelib/fs.stat" "2.0.5" 218 | run-parallel "^1.1.9" 219 | 220 | "@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": 221 | version "2.0.5" 222 | resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" 223 | integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== 224 | 225 | "@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": 226 | version "1.2.8" 227 | resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" 228 | integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== 229 | dependencies: 230 | "@nodelib/fs.scandir" "2.1.5" 231 | fastq "^1.6.0" 232 | 233 | "@types/debug@^4.1.10": 234 | version "4.1.10" 235 | resolved "https://registry.npmjs.org/@types/debug/-/debug-4.1.10.tgz" 236 | integrity sha512-tOSCru6s732pofZ+sMv9o4o3Zc+Sa8l3bxd/tweTQudFn06vAzb13ZX46Zi6m6EJ+RUbRTHvgQJ1gBtSgkaUYA== 237 | dependencies: 238 | "@types/ms" "*" 239 | 240 | "@types/fs-extra@^11.0.3": 241 | version "11.0.3" 242 | resolved "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-11.0.3.tgz" 243 | integrity sha512-sF59BlXtUdzEAL1u0MSvuzWd7PdZvZEtnaVkzX5mjpdWTJ8brG0jUqve3jPCzSzvAKKMHTG8F8o/WMQLtleZdQ== 244 | dependencies: 245 | "@types/jsonfile" "*" 246 | "@types/node" "*" 247 | 248 | "@types/json-schema@^7.0.12": 249 | version "7.0.15" 250 | resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" 251 | integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== 252 | 253 | "@types/json5@^0.0.29": 254 | version "0.0.29" 255 | resolved "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz" 256 | integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= 257 | 258 | "@types/jsonfile@*": 259 | version "6.1.1" 260 | resolved "https://registry.npmjs.org/@types/jsonfile/-/jsonfile-6.1.1.tgz" 261 | integrity sha512-GSgiRCVeapDN+3pqA35IkQwasaCh/0YFH5dEF6S88iDvEn901DjOeH3/QPY+XYP1DFzDZPvIvfeEgk+7br5png== 262 | dependencies: 263 | "@types/node" "*" 264 | 265 | "@types/ms@*": 266 | version "0.7.31" 267 | resolved "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz" 268 | integrity sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA== 269 | 270 | "@types/node@*": 271 | version "16.11.6" 272 | resolved "https://registry.npmjs.org/@types/node/-/node-16.11.6.tgz" 273 | integrity sha512-ua7PgUoeQFjmWPcoo9khiPum3Pd60k4/2ZGXt18sm2Slk0W0xZTqt5Y0Ny1NyBiN1EVQ/+FaF9NcY4Qe6rwk5w== 274 | 275 | "@types/node@^18.18.7": 276 | version "18.18.7" 277 | resolved "https://registry.npmjs.org/@types/node/-/node-18.18.7.tgz" 278 | integrity sha512-bw+lEsxis6eqJYW8Ql6+yTqkE6RuFtsQPSe5JxXbqYRFQEER5aJA9a5UH9igqDWm3X4iLHIKOHlnAXLM4mi7uQ== 279 | dependencies: 280 | undici-types "~5.26.4" 281 | 282 | "@types/normalize-package-data@^2.4.0": 283 | version "2.4.3" 284 | resolved "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.3.tgz" 285 | integrity sha512-ehPtgRgaULsFG8x0NeYJvmyH1hmlfsNLujHe9dQEia/7MAJYdzMSi19JtchUHjmBA6XC/75dK55mzZH+RyieSg== 286 | 287 | "@types/semver@^7.5.0": 288 | version "7.7.0" 289 | resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.7.0.tgz#64c441bdae033b378b6eef7d0c3d77c329b9378e" 290 | integrity sha512-k107IF4+Xr7UHjwDc7Cfd6PRQfbdkiRabXGRjo07b4WyPahFBZCZ1sE+BNxYIJPPg73UkfOsVOLwqVc/6ETrIA== 291 | 292 | "@typescript-eslint/eslint-plugin@^6.0.0": 293 | version "6.21.0" 294 | resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz#30830c1ca81fd5f3c2714e524c4303e0194f9cd3" 295 | integrity sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA== 296 | dependencies: 297 | "@eslint-community/regexpp" "^4.5.1" 298 | "@typescript-eslint/scope-manager" "6.21.0" 299 | "@typescript-eslint/type-utils" "6.21.0" 300 | "@typescript-eslint/utils" "6.21.0" 301 | "@typescript-eslint/visitor-keys" "6.21.0" 302 | debug "^4.3.4" 303 | graphemer "^1.4.0" 304 | ignore "^5.2.4" 305 | natural-compare "^1.4.0" 306 | semver "^7.5.4" 307 | ts-api-utils "^1.0.1" 308 | 309 | "@typescript-eslint/parser@^6.0.0": 310 | version "6.21.0" 311 | resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.21.0.tgz#af8fcf66feee2edc86bc5d1cf45e33b0630bf35b" 312 | integrity sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ== 313 | dependencies: 314 | "@typescript-eslint/scope-manager" "6.21.0" 315 | "@typescript-eslint/types" "6.21.0" 316 | "@typescript-eslint/typescript-estree" "6.21.0" 317 | "@typescript-eslint/visitor-keys" "6.21.0" 318 | debug "^4.3.4" 319 | 320 | "@typescript-eslint/scope-manager@6.21.0": 321 | version "6.21.0" 322 | resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz#ea8a9bfc8f1504a6ac5d59a6df308d3a0630a2b1" 323 | integrity sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg== 324 | dependencies: 325 | "@typescript-eslint/types" "6.21.0" 326 | "@typescript-eslint/visitor-keys" "6.21.0" 327 | 328 | "@typescript-eslint/type-utils@6.21.0": 329 | version "6.21.0" 330 | resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz#6473281cfed4dacabe8004e8521cee0bd9d4c01e" 331 | integrity sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag== 332 | dependencies: 333 | "@typescript-eslint/typescript-estree" "6.21.0" 334 | "@typescript-eslint/utils" "6.21.0" 335 | debug "^4.3.4" 336 | ts-api-utils "^1.0.1" 337 | 338 | "@typescript-eslint/types@6.21.0": 339 | version "6.21.0" 340 | resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.21.0.tgz#205724c5123a8fef7ecd195075fa6e85bac3436d" 341 | integrity sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg== 342 | 343 | "@typescript-eslint/typescript-estree@6.21.0": 344 | version "6.21.0" 345 | resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz#c47ae7901db3b8bddc3ecd73daff2d0895688c46" 346 | integrity sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ== 347 | dependencies: 348 | "@typescript-eslint/types" "6.21.0" 349 | "@typescript-eslint/visitor-keys" "6.21.0" 350 | debug "^4.3.4" 351 | globby "^11.1.0" 352 | is-glob "^4.0.3" 353 | minimatch "9.0.3" 354 | semver "^7.5.4" 355 | ts-api-utils "^1.0.1" 356 | 357 | "@typescript-eslint/utils@6.21.0": 358 | version "6.21.0" 359 | resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.21.0.tgz#4714e7a6b39e773c1c8e97ec587f520840cd8134" 360 | integrity sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ== 361 | dependencies: 362 | "@eslint-community/eslint-utils" "^4.4.0" 363 | "@types/json-schema" "^7.0.12" 364 | "@types/semver" "^7.5.0" 365 | "@typescript-eslint/scope-manager" "6.21.0" 366 | "@typescript-eslint/types" "6.21.0" 367 | "@typescript-eslint/typescript-estree" "6.21.0" 368 | semver "^7.5.4" 369 | 370 | "@typescript-eslint/visitor-keys@6.21.0": 371 | version "6.21.0" 372 | resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz#87a99d077aa507e20e238b11d56cc26ade45fe47" 373 | integrity sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A== 374 | dependencies: 375 | "@typescript-eslint/types" "6.21.0" 376 | eslint-visitor-keys "^3.4.1" 377 | 378 | "@ungap/structured-clone@^1.2.0": 379 | version "1.2.0" 380 | resolved "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz" 381 | integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== 382 | 383 | acorn-jsx@^5.3.2: 384 | version "5.3.2" 385 | resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" 386 | integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== 387 | 388 | acorn@^8.9.0: 389 | version "8.10.0" 390 | resolved "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz" 391 | integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== 392 | 393 | ajv@^6.12.4: 394 | version "6.12.6" 395 | resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" 396 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== 397 | dependencies: 398 | fast-deep-equal "^3.1.1" 399 | fast-json-stable-stringify "^2.0.0" 400 | json-schema-traverse "^0.4.1" 401 | uri-js "^4.2.2" 402 | 403 | ansi-escapes@^5.0.0: 404 | version "5.0.0" 405 | resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-5.0.0.tgz#b6a0caf0eef0c41af190e9a749e0c00ec04bb2a6" 406 | integrity sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA== 407 | dependencies: 408 | type-fest "^1.0.2" 409 | 410 | ansi-regex@^2.0.0: 411 | version "2.1.1" 412 | resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz" 413 | integrity sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA== 414 | 415 | ansi-regex@^5.0.1: 416 | version "5.0.1" 417 | resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" 418 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== 419 | 420 | ansi-regex@^6.0.1: 421 | version "6.1.0" 422 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.1.0.tgz#95ec409c69619d6cb1b8b34f14b660ef28ebd654" 423 | integrity sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA== 424 | 425 | ansi-sequence-parser@^1.1.0: 426 | version "1.1.1" 427 | resolved "https://registry.yarnpkg.com/ansi-sequence-parser/-/ansi-sequence-parser-1.1.1.tgz#e0aa1cdcbc8f8bb0b5bca625aac41f5f056973cf" 428 | integrity sha512-vJXt3yiaUL4UU546s3rPXlsry/RnM730G1+HkpKE012AN0sx1eOrxSu95oKDIonskeLTijMgqWZ3uDEe3NFvyg== 429 | 430 | ansi-styles@^3.2.1: 431 | version "3.2.1" 432 | resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" 433 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 434 | dependencies: 435 | color-convert "^1.9.0" 436 | 437 | ansi-styles@^4.1.0: 438 | version "4.3.0" 439 | resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" 440 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 441 | dependencies: 442 | color-convert "^2.0.1" 443 | 444 | ansi-styles@^6.0.0, ansi-styles@^6.1.0: 445 | version "6.2.1" 446 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" 447 | integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== 448 | 449 | ansi@^0.3.0, ansi@~0.3.0: 450 | version "0.3.1" 451 | resolved "https://registry.npmjs.org/ansi/-/ansi-0.3.1.tgz" 452 | integrity sha512-iFY7JCgHbepc0b82yLaw4IMortylNb6wG4kL+4R0C3iv6i+RHGHux/yUX5BTiRvSX/shMnngjR1YyNMnXEFh5A== 453 | 454 | are-docs-informative@^0.0.2: 455 | version "0.0.2" 456 | resolved "https://registry.npmjs.org/are-docs-informative/-/are-docs-informative-0.0.2.tgz" 457 | integrity sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig== 458 | 459 | are-we-there-yet@~1.0.0: 460 | version "1.0.6" 461 | resolved "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.0.6.tgz" 462 | integrity sha512-Zfw6bteqM9gQXZ1BIWOgM8xEwMrUGoyL8nW13+O+OOgNX3YhuDN1GDgg1NzdTlmm3j+9sHy7uBZ12r+z9lXnZQ== 463 | dependencies: 464 | delegates "^1.0.0" 465 | readable-stream "^2.0.0 || ^1.1.13" 466 | 467 | argparse@^2.0.1: 468 | version "2.0.1" 469 | resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" 470 | integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== 471 | 472 | array-buffer-byte-length@^1.0.0: 473 | version "1.0.0" 474 | resolved "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz" 475 | integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== 476 | dependencies: 477 | call-bind "^1.0.2" 478 | is-array-buffer "^3.0.1" 479 | 480 | array-includes@^3.1.7: 481 | version "3.1.7" 482 | resolved "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz" 483 | integrity sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ== 484 | dependencies: 485 | call-bind "^1.0.2" 486 | define-properties "^1.2.0" 487 | es-abstract "^1.22.1" 488 | get-intrinsic "^1.2.1" 489 | is-string "^1.0.7" 490 | 491 | array-union@^2.1.0: 492 | version "2.1.0" 493 | resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" 494 | integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== 495 | 496 | array.prototype.findlastindex@^1.2.3: 497 | version "1.2.3" 498 | resolved "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz" 499 | integrity sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA== 500 | dependencies: 501 | call-bind "^1.0.2" 502 | define-properties "^1.2.0" 503 | es-abstract "^1.22.1" 504 | es-shim-unscopables "^1.0.0" 505 | get-intrinsic "^1.2.1" 506 | 507 | array.prototype.flat@^1.3.2: 508 | version "1.3.2" 509 | resolved "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz" 510 | integrity sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA== 511 | dependencies: 512 | call-bind "^1.0.2" 513 | define-properties "^1.2.0" 514 | es-abstract "^1.22.1" 515 | es-shim-unscopables "^1.0.0" 516 | 517 | array.prototype.flatmap@^1.3.2: 518 | version "1.3.2" 519 | resolved "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz" 520 | integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ== 521 | dependencies: 522 | call-bind "^1.0.2" 523 | define-properties "^1.2.0" 524 | es-abstract "^1.22.1" 525 | es-shim-unscopables "^1.0.0" 526 | 527 | arraybuffer.prototype.slice@^1.0.2: 528 | version "1.0.2" 529 | resolved "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz" 530 | integrity sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw== 531 | dependencies: 532 | array-buffer-byte-length "^1.0.0" 533 | call-bind "^1.0.2" 534 | define-properties "^1.2.0" 535 | es-abstract "^1.22.1" 536 | get-intrinsic "^1.2.1" 537 | is-array-buffer "^3.0.2" 538 | is-shared-array-buffer "^1.0.2" 539 | 540 | available-typed-arrays@^1.0.5: 541 | version "1.0.5" 542 | resolved "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz" 543 | integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== 544 | 545 | balanced-match@^1.0.0: 546 | version "1.0.0" 547 | resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz" 548 | integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= 549 | 550 | brace-expansion@^1.1.7: 551 | version "1.1.11" 552 | resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" 553 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 554 | dependencies: 555 | balanced-match "^1.0.0" 556 | concat-map "0.0.1" 557 | 558 | brace-expansion@^2.0.1: 559 | version "2.0.1" 560 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" 561 | integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== 562 | dependencies: 563 | balanced-match "^1.0.0" 564 | 565 | braces@^3.0.2, braces@^3.0.3: 566 | version "3.0.3" 567 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" 568 | integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== 569 | dependencies: 570 | fill-range "^7.1.1" 571 | 572 | buffer-from@^1.0.0: 573 | version "1.1.2" 574 | resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" 575 | integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== 576 | 577 | builtin-modules@^3.3.0: 578 | version "3.3.0" 579 | resolved "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz" 580 | integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== 581 | 582 | builtins@^5.0.1: 583 | version "5.0.1" 584 | resolved "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz" 585 | integrity sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ== 586 | dependencies: 587 | semver "^7.0.0" 588 | 589 | call-bind@^1.0.0, call-bind@^1.0.2: 590 | version "1.0.2" 591 | resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz" 592 | integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== 593 | dependencies: 594 | function-bind "^1.1.1" 595 | get-intrinsic "^1.0.2" 596 | 597 | call-bind@^1.0.4, call-bind@^1.0.5: 598 | version "1.0.5" 599 | resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz" 600 | integrity sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ== 601 | dependencies: 602 | function-bind "^1.1.2" 603 | get-intrinsic "^1.2.1" 604 | set-function-length "^1.1.1" 605 | 606 | callsites@^3.0.0: 607 | version "3.1.0" 608 | resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" 609 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== 610 | 611 | camelcase@^2.0.1: 612 | version "2.1.1" 613 | resolved "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz" 614 | integrity sha512-DLIsRzJVBQu72meAKPkWQOLcujdXT32hwdfnkI1frSiSRMK1MofjKHf+MEx0SB6fjEFXL8fBDv1dKymBlOp4Qw== 615 | 616 | chalk@5.3.0: 617 | version "5.3.0" 618 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.3.0.tgz#67c20a7ebef70e7f3970a01f90fa210cb6860385" 619 | integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w== 620 | 621 | chalk@^2.4.2: 622 | version "2.4.2" 623 | resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" 624 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 625 | dependencies: 626 | ansi-styles "^3.2.1" 627 | escape-string-regexp "^1.0.5" 628 | supports-color "^5.3.0" 629 | 630 | chalk@^4.0.0: 631 | version "4.1.2" 632 | resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" 633 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== 634 | dependencies: 635 | ansi-styles "^4.1.0" 636 | supports-color "^7.1.0" 637 | 638 | ci-info@^3.3.0: 639 | version "3.9.0" 640 | resolved "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz" 641 | integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== 642 | 643 | clean-regexp@^1.0.0: 644 | version "1.0.0" 645 | resolved "https://registry.npmjs.org/clean-regexp/-/clean-regexp-1.0.0.tgz" 646 | integrity sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw== 647 | dependencies: 648 | escape-string-regexp "^1.0.5" 649 | 650 | cli-cursor@^4.0.0: 651 | version "4.0.0" 652 | resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-4.0.0.tgz#3cecfe3734bf4fe02a8361cbdc0f6fe28c6a57ea" 653 | integrity sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg== 654 | dependencies: 655 | restore-cursor "^4.0.0" 656 | 657 | cli-truncate@^3.1.0: 658 | version "3.1.0" 659 | resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-3.1.0.tgz#3f23ab12535e3d73e839bb43e73c9de487db1389" 660 | integrity sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA== 661 | dependencies: 662 | slice-ansi "^5.0.0" 663 | string-width "^5.0.0" 664 | 665 | cliui@^3.0.3: 666 | version "3.2.0" 667 | resolved "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz" 668 | integrity sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w== 669 | dependencies: 670 | string-width "^1.0.1" 671 | strip-ansi "^3.0.1" 672 | wrap-ansi "^2.0.0" 673 | 674 | code-point-at@^1.0.0: 675 | version "1.1.0" 676 | resolved "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz" 677 | integrity sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA== 678 | 679 | color-convert@^1.9.0: 680 | version "1.9.3" 681 | resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" 682 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 683 | dependencies: 684 | color-name "1.1.3" 685 | 686 | color-convert@^2.0.1: 687 | version "2.0.1" 688 | resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" 689 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 690 | dependencies: 691 | color-name "~1.1.4" 692 | 693 | color-name@1.1.3: 694 | version "1.1.3" 695 | resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" 696 | integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== 697 | 698 | color-name@~1.1.4: 699 | version "1.1.4" 700 | resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" 701 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 702 | 703 | colorette@^2.0.20: 704 | version "2.0.20" 705 | resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" 706 | integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== 707 | 708 | commander@11.0.0: 709 | version "11.0.0" 710 | resolved "https://registry.yarnpkg.com/commander/-/commander-11.0.0.tgz#43e19c25dbedc8256203538e8d7e9346877a6f67" 711 | integrity sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ== 712 | 713 | commander@^9.4.0: 714 | version "9.5.0" 715 | resolved "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz" 716 | integrity sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ== 717 | 718 | comment-parser@1.4.0: 719 | version "1.4.0" 720 | resolved "https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.0.tgz" 721 | integrity sha512-QLyTNiZ2KDOibvFPlZ6ZngVsZ/0gYnE6uTXi5aoDg8ed3AkJAz4sEje3Y8a29hQ1s6A99MZXe47fLAXQ1rTqaw== 722 | 723 | concat-map@0.0.1: 724 | version "0.0.1" 725 | resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" 726 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 727 | 728 | core-util-is@~1.0.0: 729 | version "1.0.3" 730 | resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz" 731 | integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== 732 | 733 | cross-dirname@^0.1.0: 734 | version "0.1.0" 735 | resolved "https://registry.npmjs.org/cross-dirname/-/cross-dirname-0.1.0.tgz" 736 | integrity sha512-+R08/oI0nl3vfPcqftZRpytksBXDzOUveBq/NBVx0sUp1axwzPQrKinNx5yd5sxPu8j1wIy8AfnVQ+5eFdha6Q== 737 | 738 | cross-spawn@^7.0.2, cross-spawn@^7.0.3: 739 | version "7.0.6" 740 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" 741 | integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== 742 | dependencies: 743 | path-key "^3.1.0" 744 | shebang-command "^2.0.0" 745 | which "^2.0.1" 746 | 747 | debug@4.3.4, debug@^4.3.4: 748 | version "4.3.4" 749 | resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" 750 | integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== 751 | dependencies: 752 | ms "2.1.2" 753 | 754 | debug@^3.2.7: 755 | version "3.2.7" 756 | resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" 757 | integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== 758 | dependencies: 759 | ms "^2.1.1" 760 | 761 | debug@^4.3.1: 762 | version "4.4.1" 763 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.1.tgz#e5a8bc6cbc4c6cd3e64308b0693a3d4fa550189b" 764 | integrity sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ== 765 | dependencies: 766 | ms "^2.1.3" 767 | 768 | debug@^4.3.2: 769 | version "4.3.2" 770 | resolved "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz" 771 | integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== 772 | dependencies: 773 | ms "2.1.2" 774 | 775 | decamelize@^1.1.1: 776 | version "1.2.0" 777 | resolved "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz" 778 | integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== 779 | 780 | deep-is@^0.1.3: 781 | version "0.1.4" 782 | resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" 783 | integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== 784 | 785 | define-data-property@^1.0.1, define-data-property@^1.1.1: 786 | version "1.1.1" 787 | resolved "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz" 788 | integrity sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ== 789 | dependencies: 790 | get-intrinsic "^1.2.1" 791 | gopd "^1.0.1" 792 | has-property-descriptors "^1.0.0" 793 | 794 | define-properties@^1.1.3: 795 | version "1.1.3" 796 | resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz" 797 | integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== 798 | dependencies: 799 | object-keys "^1.0.12" 800 | 801 | define-properties@^1.1.4: 802 | version "1.1.4" 803 | resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz" 804 | integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA== 805 | dependencies: 806 | has-property-descriptors "^1.0.0" 807 | object-keys "^1.1.1" 808 | 809 | define-properties@^1.2.0: 810 | version "1.2.1" 811 | resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz" 812 | integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== 813 | dependencies: 814 | define-data-property "^1.0.1" 815 | has-property-descriptors "^1.0.0" 816 | object-keys "^1.1.1" 817 | 818 | delegates@^1.0.0: 819 | version "1.0.0" 820 | resolved "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz" 821 | integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== 822 | 823 | dir-glob@^3.0.1: 824 | version "3.0.1" 825 | resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" 826 | integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== 827 | dependencies: 828 | path-type "^4.0.0" 829 | 830 | doctrine@^2.1.0: 831 | version "2.1.0" 832 | resolved "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz" 833 | integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== 834 | dependencies: 835 | esutils "^2.0.2" 836 | 837 | doctrine@^3.0.0: 838 | version "3.0.0" 839 | resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" 840 | integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== 841 | dependencies: 842 | esutils "^2.0.2" 843 | 844 | eastasianwidth@^0.2.0: 845 | version "0.2.0" 846 | resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" 847 | integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== 848 | 849 | emoji-regex@^9.2.2: 850 | version "9.2.2" 851 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" 852 | integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== 853 | 854 | error-ex@^1.3.1: 855 | version "1.3.2" 856 | resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" 857 | integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== 858 | dependencies: 859 | is-arrayish "^0.2.1" 860 | 861 | es-abstract@^1.22.1: 862 | version "1.22.3" 863 | resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz" 864 | integrity sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA== 865 | dependencies: 866 | array-buffer-byte-length "^1.0.0" 867 | arraybuffer.prototype.slice "^1.0.2" 868 | available-typed-arrays "^1.0.5" 869 | call-bind "^1.0.5" 870 | es-set-tostringtag "^2.0.1" 871 | es-to-primitive "^1.2.1" 872 | function.prototype.name "^1.1.6" 873 | get-intrinsic "^1.2.2" 874 | get-symbol-description "^1.0.0" 875 | globalthis "^1.0.3" 876 | gopd "^1.0.1" 877 | has-property-descriptors "^1.0.0" 878 | has-proto "^1.0.1" 879 | has-symbols "^1.0.3" 880 | hasown "^2.0.0" 881 | internal-slot "^1.0.5" 882 | is-array-buffer "^3.0.2" 883 | is-callable "^1.2.7" 884 | is-negative-zero "^2.0.2" 885 | is-regex "^1.1.4" 886 | is-shared-array-buffer "^1.0.2" 887 | is-string "^1.0.7" 888 | is-typed-array "^1.1.12" 889 | is-weakref "^1.0.2" 890 | object-inspect "^1.13.1" 891 | object-keys "^1.1.1" 892 | object.assign "^4.1.4" 893 | regexp.prototype.flags "^1.5.1" 894 | safe-array-concat "^1.0.1" 895 | safe-regex-test "^1.0.0" 896 | string.prototype.trim "^1.2.8" 897 | string.prototype.trimend "^1.0.7" 898 | string.prototype.trimstart "^1.0.7" 899 | typed-array-buffer "^1.0.0" 900 | typed-array-byte-length "^1.0.0" 901 | typed-array-byte-offset "^1.0.0" 902 | typed-array-length "^1.0.4" 903 | unbox-primitive "^1.0.2" 904 | which-typed-array "^1.1.13" 905 | 906 | es-set-tostringtag@^2.0.1: 907 | version "2.0.2" 908 | resolved "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz" 909 | integrity sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q== 910 | dependencies: 911 | get-intrinsic "^1.2.2" 912 | has-tostringtag "^1.0.0" 913 | hasown "^2.0.0" 914 | 915 | es-shim-unscopables@^1.0.0: 916 | version "1.0.0" 917 | resolved "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz" 918 | integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== 919 | dependencies: 920 | has "^1.0.3" 921 | 922 | es-to-primitive@^1.2.1: 923 | version "1.2.1" 924 | resolved "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz" 925 | integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== 926 | dependencies: 927 | is-callable "^1.1.4" 928 | is-date-object "^1.0.1" 929 | is-symbol "^1.0.2" 930 | 931 | esbuild@~0.18.20: 932 | version "0.18.20" 933 | resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz" 934 | integrity sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA== 935 | optionalDependencies: 936 | "@esbuild/android-arm" "0.18.20" 937 | "@esbuild/android-arm64" "0.18.20" 938 | "@esbuild/android-x64" "0.18.20" 939 | "@esbuild/darwin-arm64" "0.18.20" 940 | "@esbuild/darwin-x64" "0.18.20" 941 | "@esbuild/freebsd-arm64" "0.18.20" 942 | "@esbuild/freebsd-x64" "0.18.20" 943 | "@esbuild/linux-arm" "0.18.20" 944 | "@esbuild/linux-arm64" "0.18.20" 945 | "@esbuild/linux-ia32" "0.18.20" 946 | "@esbuild/linux-loong64" "0.18.20" 947 | "@esbuild/linux-mips64el" "0.18.20" 948 | "@esbuild/linux-ppc64" "0.18.20" 949 | "@esbuild/linux-riscv64" "0.18.20" 950 | "@esbuild/linux-s390x" "0.18.20" 951 | "@esbuild/linux-x64" "0.18.20" 952 | "@esbuild/netbsd-x64" "0.18.20" 953 | "@esbuild/openbsd-x64" "0.18.20" 954 | "@esbuild/sunos-x64" "0.18.20" 955 | "@esbuild/win32-arm64" "0.18.20" 956 | "@esbuild/win32-ia32" "0.18.20" 957 | "@esbuild/win32-x64" "0.18.20" 958 | 959 | escape-string-regexp@^1.0.5: 960 | version "1.0.5" 961 | resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" 962 | integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== 963 | 964 | escape-string-regexp@^4.0.0: 965 | version "4.0.0" 966 | resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" 967 | integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== 968 | 969 | eslint-config-eslint@^9.0.0: 970 | version "9.0.0" 971 | resolved "https://registry.npmjs.org/eslint-config-eslint/-/eslint-config-eslint-9.0.0.tgz" 972 | integrity sha512-91lXzIbVGN1u4eyaos0E0W49FzjZbwia8x8/vIbjGaTrQ5F9i0H2hbu8AvOmW6vzTIr2srwgrgPTMlJiC3J0Xg== 973 | dependencies: 974 | "@eslint/js" "^8.42.0" 975 | eslint-plugin-eslint-comments "^3.2.0" 976 | eslint-plugin-jsdoc "^46.2.5" 977 | eslint-plugin-n "^16.0.0" 978 | eslint-plugin-unicorn "^42.0.0" 979 | 980 | eslint-config-prettier@^10.1.5: 981 | version "10.1.5" 982 | resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-10.1.5.tgz#00c18d7225043b6fbce6a665697377998d453782" 983 | integrity sha512-zc1UmCpNltmVY34vuLRV61r1K27sWuX39E+uyUnY8xS2Bex88VV9cugG+UZbRSRGtGyFboj+D8JODyme1plMpw== 984 | 985 | eslint-import-resolver-node@^0.3.9: 986 | version "0.3.9" 987 | resolved "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz" 988 | integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== 989 | dependencies: 990 | debug "^3.2.7" 991 | is-core-module "^2.13.0" 992 | resolve "^1.22.4" 993 | 994 | eslint-module-utils@^2.8.0: 995 | version "2.8.0" 996 | resolved "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz" 997 | integrity sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw== 998 | dependencies: 999 | debug "^3.2.7" 1000 | 1001 | eslint-plugin-es-x@^7.1.0: 1002 | version "7.2.0" 1003 | resolved "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.2.0.tgz" 1004 | integrity sha512-9dvv5CcvNjSJPqnS5uZkqb3xmbeqRLnvXKK7iI5+oK/yTusyc46zbBZKENGsOfojm/mKfszyZb+wNqNPAPeGXA== 1005 | dependencies: 1006 | "@eslint-community/eslint-utils" "^4.1.2" 1007 | "@eslint-community/regexpp" "^4.6.0" 1008 | 1009 | eslint-plugin-es@^3.0.0: 1010 | version "3.0.1" 1011 | resolved "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz" 1012 | integrity sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ== 1013 | dependencies: 1014 | eslint-utils "^2.0.0" 1015 | regexpp "^3.0.0" 1016 | 1017 | eslint-plugin-eslint-comments@^3.2.0: 1018 | version "3.2.0" 1019 | resolved "https://registry.npmjs.org/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-3.2.0.tgz" 1020 | integrity sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ== 1021 | dependencies: 1022 | escape-string-regexp "^1.0.5" 1023 | ignore "^5.0.5" 1024 | 1025 | eslint-plugin-import@^2.29.0: 1026 | version "2.29.0" 1027 | resolved "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.0.tgz" 1028 | integrity sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg== 1029 | dependencies: 1030 | array-includes "^3.1.7" 1031 | array.prototype.findlastindex "^1.2.3" 1032 | array.prototype.flat "^1.3.2" 1033 | array.prototype.flatmap "^1.3.2" 1034 | debug "^3.2.7" 1035 | doctrine "^2.1.0" 1036 | eslint-import-resolver-node "^0.3.9" 1037 | eslint-module-utils "^2.8.0" 1038 | hasown "^2.0.0" 1039 | is-core-module "^2.13.1" 1040 | is-glob "^4.0.3" 1041 | minimatch "^3.1.2" 1042 | object.fromentries "^2.0.7" 1043 | object.groupby "^1.0.1" 1044 | object.values "^1.1.7" 1045 | semver "^6.3.1" 1046 | tsconfig-paths "^3.14.2" 1047 | 1048 | eslint-plugin-jsdoc@^46.2.5: 1049 | version "46.8.2" 1050 | resolved "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-46.8.2.tgz" 1051 | integrity sha512-5TSnD018f3tUJNne4s4gDWQflbsgOycIKEUBoCLn6XtBMgNHxQFmV8vVxUtiPxAQq8lrX85OaSG/2gnctxw9uQ== 1052 | dependencies: 1053 | "@es-joy/jsdoccomment" "~0.40.1" 1054 | are-docs-informative "^0.0.2" 1055 | comment-parser "1.4.0" 1056 | debug "^4.3.4" 1057 | escape-string-regexp "^4.0.0" 1058 | esquery "^1.5.0" 1059 | is-builtin-module "^3.2.1" 1060 | semver "^7.5.4" 1061 | spdx-expression-parse "^3.0.1" 1062 | 1063 | eslint-plugin-n@^16.0.0: 1064 | version "16.2.0" 1065 | resolved "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-16.2.0.tgz" 1066 | integrity sha512-AQER2jEyQOt1LG6JkGJCCIFotzmlcCZFur2wdKrp1JX2cNotC7Ae0BcD/4lLv3lUAArM9uNS8z/fsvXTd0L71g== 1067 | dependencies: 1068 | "@eslint-community/eslint-utils" "^4.4.0" 1069 | builtins "^5.0.1" 1070 | eslint-plugin-es-x "^7.1.0" 1071 | get-tsconfig "^4.7.0" 1072 | ignore "^5.2.4" 1073 | is-core-module "^2.12.1" 1074 | minimatch "^3.1.2" 1075 | resolve "^1.22.2" 1076 | semver "^7.5.3" 1077 | 1078 | eslint-plugin-node@^11.1.0: 1079 | version "11.1.0" 1080 | resolved "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz" 1081 | integrity sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g== 1082 | dependencies: 1083 | eslint-plugin-es "^3.0.0" 1084 | eslint-utils "^2.0.0" 1085 | ignore "^5.1.1" 1086 | minimatch "^3.0.4" 1087 | resolve "^1.10.1" 1088 | semver "^6.1.0" 1089 | 1090 | eslint-plugin-promise@^6.1.1: 1091 | version "6.1.1" 1092 | resolved "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz" 1093 | integrity sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig== 1094 | 1095 | eslint-plugin-unicorn@^42.0.0: 1096 | version "42.0.0" 1097 | resolved "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-42.0.0.tgz" 1098 | integrity sha512-ixBsbhgWuxVaNlPTT8AyfJMlhyC5flCJFjyK3oKE8TRrwBnaHvUbuIkCM1lqg8ryYrFStL/T557zfKzX4GKSlg== 1099 | dependencies: 1100 | "@babel/helper-validator-identifier" "^7.15.7" 1101 | ci-info "^3.3.0" 1102 | clean-regexp "^1.0.0" 1103 | eslint-utils "^3.0.0" 1104 | esquery "^1.4.0" 1105 | indent-string "^4.0.0" 1106 | is-builtin-module "^3.1.0" 1107 | lodash "^4.17.21" 1108 | pluralize "^8.0.0" 1109 | read-pkg-up "^7.0.1" 1110 | regexp-tree "^0.1.24" 1111 | safe-regex "^2.1.1" 1112 | semver "^7.3.5" 1113 | strip-indent "^3.0.0" 1114 | 1115 | eslint-scope@^7.2.2: 1116 | version "7.2.2" 1117 | resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz" 1118 | integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== 1119 | dependencies: 1120 | esrecurse "^4.3.0" 1121 | estraverse "^5.2.0" 1122 | 1123 | eslint-utils@^2.0.0: 1124 | version "2.1.0" 1125 | resolved "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz" 1126 | integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== 1127 | dependencies: 1128 | eslint-visitor-keys "^1.1.0" 1129 | 1130 | eslint-utils@^3.0.0: 1131 | version "3.0.0" 1132 | resolved "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz" 1133 | integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== 1134 | dependencies: 1135 | eslint-visitor-keys "^2.0.0" 1136 | 1137 | eslint-visitor-keys@^1.1.0: 1138 | version "1.3.0" 1139 | resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz" 1140 | integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== 1141 | 1142 | eslint-visitor-keys@^2.0.0: 1143 | version "2.1.0" 1144 | resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz" 1145 | integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== 1146 | 1147 | eslint-visitor-keys@^3.3.0: 1148 | version "3.3.0" 1149 | resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz" 1150 | integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== 1151 | 1152 | eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: 1153 | version "3.4.3" 1154 | resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz" 1155 | integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== 1156 | 1157 | eslint@^8.56.0: 1158 | version "8.57.1" 1159 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.1.tgz#7df109654aba7e3bbe5c8eae533c5e461d3c6ca9" 1160 | integrity sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA== 1161 | dependencies: 1162 | "@eslint-community/eslint-utils" "^4.2.0" 1163 | "@eslint-community/regexpp" "^4.6.1" 1164 | "@eslint/eslintrc" "^2.1.4" 1165 | "@eslint/js" "8.57.1" 1166 | "@humanwhocodes/config-array" "^0.13.0" 1167 | "@humanwhocodes/module-importer" "^1.0.1" 1168 | "@nodelib/fs.walk" "^1.2.8" 1169 | "@ungap/structured-clone" "^1.2.0" 1170 | ajv "^6.12.4" 1171 | chalk "^4.0.0" 1172 | cross-spawn "^7.0.2" 1173 | debug "^4.3.2" 1174 | doctrine "^3.0.0" 1175 | escape-string-regexp "^4.0.0" 1176 | eslint-scope "^7.2.2" 1177 | eslint-visitor-keys "^3.4.3" 1178 | espree "^9.6.1" 1179 | esquery "^1.4.2" 1180 | esutils "^2.0.2" 1181 | fast-deep-equal "^3.1.3" 1182 | file-entry-cache "^6.0.1" 1183 | find-up "^5.0.0" 1184 | glob-parent "^6.0.2" 1185 | globals "^13.19.0" 1186 | graphemer "^1.4.0" 1187 | ignore "^5.2.0" 1188 | imurmurhash "^0.1.4" 1189 | is-glob "^4.0.0" 1190 | is-path-inside "^3.0.3" 1191 | js-yaml "^4.1.0" 1192 | json-stable-stringify-without-jsonify "^1.0.1" 1193 | levn "^0.4.1" 1194 | lodash.merge "^4.6.2" 1195 | minimatch "^3.1.2" 1196 | natural-compare "^1.4.0" 1197 | optionator "^0.9.3" 1198 | strip-ansi "^6.0.1" 1199 | text-table "^0.2.0" 1200 | 1201 | espree@^9.6.0, espree@^9.6.1: 1202 | version "9.6.1" 1203 | resolved "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz" 1204 | integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== 1205 | dependencies: 1206 | acorn "^8.9.0" 1207 | acorn-jsx "^5.3.2" 1208 | eslint-visitor-keys "^3.4.1" 1209 | 1210 | esquery@^1.4.0: 1211 | version "1.4.0" 1212 | resolved "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz" 1213 | integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== 1214 | dependencies: 1215 | estraverse "^5.1.0" 1216 | 1217 | esquery@^1.4.2, esquery@^1.5.0: 1218 | version "1.5.0" 1219 | resolved "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz" 1220 | integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== 1221 | dependencies: 1222 | estraverse "^5.1.0" 1223 | 1224 | esrecurse@^4.3.0: 1225 | version "4.3.0" 1226 | resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" 1227 | integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== 1228 | dependencies: 1229 | estraverse "^5.2.0" 1230 | 1231 | estraverse@^5.1.0, estraverse@^5.2.0: 1232 | version "5.3.0" 1233 | resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" 1234 | integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== 1235 | 1236 | esutils@^2.0.2: 1237 | version "2.0.3" 1238 | resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" 1239 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== 1240 | 1241 | eventemitter3@^5.0.1: 1242 | version "5.0.1" 1243 | resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4" 1244 | integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== 1245 | 1246 | execa@7.2.0: 1247 | version "7.2.0" 1248 | resolved "https://registry.yarnpkg.com/execa/-/execa-7.2.0.tgz#657e75ba984f42a70f38928cedc87d6f2d4fe4e9" 1249 | integrity sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA== 1250 | dependencies: 1251 | cross-spawn "^7.0.3" 1252 | get-stream "^6.0.1" 1253 | human-signals "^4.3.0" 1254 | is-stream "^3.0.0" 1255 | merge-stream "^2.0.0" 1256 | npm-run-path "^5.1.0" 1257 | onetime "^6.0.0" 1258 | signal-exit "^3.0.7" 1259 | strip-final-newline "^3.0.0" 1260 | 1261 | fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: 1262 | version "3.1.3" 1263 | resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" 1264 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== 1265 | 1266 | fast-glob@^3.2.9: 1267 | version "3.3.3" 1268 | resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818" 1269 | integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== 1270 | dependencies: 1271 | "@nodelib/fs.stat" "^2.0.2" 1272 | "@nodelib/fs.walk" "^1.2.3" 1273 | glob-parent "^5.1.2" 1274 | merge2 "^1.3.0" 1275 | micromatch "^4.0.8" 1276 | 1277 | fast-json-stable-stringify@^2.0.0: 1278 | version "2.0.0" 1279 | resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz" 1280 | integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= 1281 | 1282 | fast-levenshtein@^2.0.6: 1283 | version "2.0.6" 1284 | resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" 1285 | integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= 1286 | 1287 | fastq@^1.6.0: 1288 | version "1.13.0" 1289 | resolved "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz" 1290 | integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== 1291 | dependencies: 1292 | reusify "^1.0.4" 1293 | 1294 | file-entry-cache@^6.0.1: 1295 | version "6.0.1" 1296 | resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" 1297 | integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== 1298 | dependencies: 1299 | flat-cache "^3.0.4" 1300 | 1301 | fill-range@^7.1.1: 1302 | version "7.1.1" 1303 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" 1304 | integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== 1305 | dependencies: 1306 | to-regex-range "^5.0.1" 1307 | 1308 | find-up@^4.1.0: 1309 | version "4.1.0" 1310 | resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" 1311 | integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== 1312 | dependencies: 1313 | locate-path "^5.0.0" 1314 | path-exists "^4.0.0" 1315 | 1316 | find-up@^5.0.0: 1317 | version "5.0.0" 1318 | resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" 1319 | integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== 1320 | dependencies: 1321 | locate-path "^6.0.0" 1322 | path-exists "^4.0.0" 1323 | 1324 | flat-cache@^3.0.4: 1325 | version "3.0.4" 1326 | resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz" 1327 | integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== 1328 | dependencies: 1329 | flatted "^3.1.0" 1330 | rimraf "^3.0.2" 1331 | 1332 | flatted@^3.1.0: 1333 | version "3.2.2" 1334 | resolved "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz" 1335 | integrity sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA== 1336 | 1337 | for-each@^0.3.3: 1338 | version "0.3.3" 1339 | resolved "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz" 1340 | integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== 1341 | dependencies: 1342 | is-callable "^1.1.3" 1343 | 1344 | fs-extra@^11.1.1: 1345 | version "11.1.1" 1346 | resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz" 1347 | integrity sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ== 1348 | dependencies: 1349 | graceful-fs "^4.2.0" 1350 | jsonfile "^6.0.1" 1351 | universalify "^2.0.0" 1352 | 1353 | fs.realpath@^1.0.0: 1354 | version "1.0.0" 1355 | resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" 1356 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 1357 | 1358 | fsevents@~2.3.3: 1359 | version "2.3.3" 1360 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" 1361 | integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== 1362 | 1363 | function-bind@^1.1.1: 1364 | version "1.1.1" 1365 | resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" 1366 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 1367 | 1368 | function-bind@^1.1.2: 1369 | version "1.1.2" 1370 | resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz" 1371 | integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== 1372 | 1373 | function.prototype.name@^1.1.6: 1374 | version "1.1.6" 1375 | resolved "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz" 1376 | integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== 1377 | dependencies: 1378 | call-bind "^1.0.2" 1379 | define-properties "^1.2.0" 1380 | es-abstract "^1.22.1" 1381 | functions-have-names "^1.2.3" 1382 | 1383 | functions-have-names@^1.2.3: 1384 | version "1.2.3" 1385 | resolved "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz" 1386 | integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== 1387 | 1388 | gauge@~1.2.0: 1389 | version "1.2.7" 1390 | resolved "https://registry.npmjs.org/gauge/-/gauge-1.2.7.tgz" 1391 | integrity sha512-fVbU2wRE91yDvKUnrIaQlHKAWKY5e08PmztCrwuH5YVQ+Z/p3d0ny2T48o6uvAAXHIUnfaQdHkmxYbQft1eHVA== 1392 | dependencies: 1393 | ansi "^0.3.0" 1394 | has-unicode "^2.0.0" 1395 | lodash.pad "^4.1.0" 1396 | lodash.padend "^4.1.0" 1397 | lodash.padstart "^4.1.0" 1398 | 1399 | get-intrinsic@^1.0.2, get-intrinsic@^1.1.1: 1400 | version "1.1.1" 1401 | resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz" 1402 | integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== 1403 | dependencies: 1404 | function-bind "^1.1.1" 1405 | has "^1.0.3" 1406 | has-symbols "^1.0.1" 1407 | 1408 | get-intrinsic@^1.1.3: 1409 | version "1.1.3" 1410 | resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz" 1411 | integrity sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A== 1412 | dependencies: 1413 | function-bind "^1.1.1" 1414 | has "^1.0.3" 1415 | has-symbols "^1.0.3" 1416 | 1417 | get-intrinsic@^1.2.0, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2: 1418 | version "1.2.2" 1419 | resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz" 1420 | integrity sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA== 1421 | dependencies: 1422 | function-bind "^1.1.2" 1423 | has-proto "^1.0.1" 1424 | has-symbols "^1.0.3" 1425 | hasown "^2.0.0" 1426 | 1427 | get-stream@^6.0.1: 1428 | version "6.0.1" 1429 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" 1430 | integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== 1431 | 1432 | get-symbol-description@^1.0.0: 1433 | version "1.0.0" 1434 | resolved "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz" 1435 | integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== 1436 | dependencies: 1437 | call-bind "^1.0.2" 1438 | get-intrinsic "^1.1.1" 1439 | 1440 | get-tsconfig@^4.7.0, get-tsconfig@^4.7.2: 1441 | version "4.7.2" 1442 | resolved "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.2.tgz" 1443 | integrity sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A== 1444 | dependencies: 1445 | resolve-pkg-maps "^1.0.0" 1446 | 1447 | glob-parent@^5.1.2: 1448 | version "5.1.2" 1449 | resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" 1450 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== 1451 | dependencies: 1452 | is-glob "^4.0.1" 1453 | 1454 | glob-parent@^6.0.2: 1455 | version "6.0.2" 1456 | resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" 1457 | integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== 1458 | dependencies: 1459 | is-glob "^4.0.3" 1460 | 1461 | glob@^5.0.2: 1462 | version "5.0.15" 1463 | resolved "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz" 1464 | integrity sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA== 1465 | dependencies: 1466 | inflight "^1.0.4" 1467 | inherits "2" 1468 | minimatch "2 || 3" 1469 | once "^1.3.0" 1470 | path-is-absolute "^1.0.0" 1471 | 1472 | glob@^7.1.3: 1473 | version "7.1.4" 1474 | resolved "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz" 1475 | integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== 1476 | dependencies: 1477 | fs.realpath "^1.0.0" 1478 | inflight "^1.0.4" 1479 | inherits "2" 1480 | minimatch "^3.0.4" 1481 | once "^1.3.0" 1482 | path-is-absolute "^1.0.0" 1483 | 1484 | globals@^13.19.0: 1485 | version "13.23.0" 1486 | resolved "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz" 1487 | integrity sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA== 1488 | dependencies: 1489 | type-fest "^0.20.2" 1490 | 1491 | globalthis@^1.0.3: 1492 | version "1.0.3" 1493 | resolved "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz" 1494 | integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== 1495 | dependencies: 1496 | define-properties "^1.1.3" 1497 | 1498 | globby@^11.1.0: 1499 | version "11.1.0" 1500 | resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" 1501 | integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== 1502 | dependencies: 1503 | array-union "^2.1.0" 1504 | dir-glob "^3.0.1" 1505 | fast-glob "^3.2.9" 1506 | ignore "^5.2.0" 1507 | merge2 "^1.4.1" 1508 | slash "^3.0.0" 1509 | 1510 | globstar@^1.0.0: 1511 | version "1.0.0" 1512 | resolved "https://registry.npmjs.org/globstar/-/globstar-1.0.0.tgz" 1513 | integrity sha512-UNXhfJYrwD6DNxMU4C9GJI1NhCMNvdsFnAGPLJHAeGW1io9l3N2FN7UUH76gQXhAUGNY+1rsVSkQnU59VRvxuQ== 1514 | dependencies: 1515 | glob "^5.0.2" 1516 | npmlog "^1.2.0" 1517 | object-assign "^2.0.0" 1518 | onetime "^1.0.0" 1519 | yargs "^3.5.4" 1520 | 1521 | gopd@^1.0.1: 1522 | version "1.0.1" 1523 | resolved "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz" 1524 | integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== 1525 | dependencies: 1526 | get-intrinsic "^1.1.3" 1527 | 1528 | graceful-fs@^4.1.6, graceful-fs@^4.2.0: 1529 | version "4.2.11" 1530 | resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz" 1531 | integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== 1532 | 1533 | graphemer@^1.4.0: 1534 | version "1.4.0" 1535 | resolved "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz" 1536 | integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== 1537 | 1538 | has-bigints@^1.0.1: 1539 | version "1.0.1" 1540 | resolved "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz" 1541 | integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== 1542 | 1543 | has-bigints@^1.0.2: 1544 | version "1.0.2" 1545 | resolved "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz" 1546 | integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== 1547 | 1548 | has-flag@^3.0.0: 1549 | version "3.0.0" 1550 | resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" 1551 | integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== 1552 | 1553 | has-flag@^4.0.0: 1554 | version "4.0.0" 1555 | resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" 1556 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 1557 | 1558 | has-property-descriptors@^1.0.0: 1559 | version "1.0.0" 1560 | resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz" 1561 | integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== 1562 | dependencies: 1563 | get-intrinsic "^1.1.1" 1564 | 1565 | has-proto@^1.0.1: 1566 | version "1.0.1" 1567 | resolved "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz" 1568 | integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== 1569 | 1570 | has-symbols@^1.0.0: 1571 | version "1.0.0" 1572 | resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz" 1573 | integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q= 1574 | 1575 | has-symbols@^1.0.1, has-symbols@^1.0.2: 1576 | version "1.0.2" 1577 | resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz" 1578 | integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== 1579 | 1580 | has-symbols@^1.0.3: 1581 | version "1.0.3" 1582 | resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz" 1583 | integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== 1584 | 1585 | has-tostringtag@^1.0.0: 1586 | version "1.0.0" 1587 | resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz" 1588 | integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== 1589 | dependencies: 1590 | has-symbols "^1.0.2" 1591 | 1592 | has-unicode@^2.0.0: 1593 | version "2.0.1" 1594 | resolved "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz" 1595 | integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== 1596 | 1597 | has@^1.0.3: 1598 | version "1.0.3" 1599 | resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz" 1600 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 1601 | dependencies: 1602 | function-bind "^1.1.1" 1603 | 1604 | hasown@^2.0.0: 1605 | version "2.0.0" 1606 | resolved "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz" 1607 | integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== 1608 | dependencies: 1609 | function-bind "^1.1.2" 1610 | 1611 | hosted-git-info@^2.1.4: 1612 | version "2.8.9" 1613 | resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz" 1614 | integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== 1615 | 1616 | human-signals@^4.3.0: 1617 | version "4.3.1" 1618 | resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-4.3.1.tgz#ab7f811e851fca97ffbd2c1fe9a958964de321b2" 1619 | integrity sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ== 1620 | 1621 | husky@^8.0.3: 1622 | version "8.0.3" 1623 | resolved "https://registry.yarnpkg.com/husky/-/husky-8.0.3.tgz#4936d7212e46d1dea28fef29bb3a108872cd9184" 1624 | integrity sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg== 1625 | 1626 | ignore@^5.0.5, ignore@^5.2.4: 1627 | version "5.2.4" 1628 | resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz" 1629 | integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== 1630 | 1631 | ignore@^5.1.1: 1632 | version "5.1.8" 1633 | resolved "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz" 1634 | integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== 1635 | 1636 | ignore@^5.2.0: 1637 | version "5.2.1" 1638 | resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.1.tgz" 1639 | integrity sha512-d2qQLzTJ9WxQftPAuEQpSPmKqzxePjzVbpAVv62AQ64NTL+wR4JkrVqR/LqFsFEUsHDAiId52mJteHDFuDkElA== 1640 | 1641 | import-fresh@^3.2.1: 1642 | version "3.3.0" 1643 | resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" 1644 | integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== 1645 | dependencies: 1646 | parent-module "^1.0.0" 1647 | resolve-from "^4.0.0" 1648 | 1649 | imurmurhash@^0.1.4: 1650 | version "0.1.4" 1651 | resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" 1652 | integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= 1653 | 1654 | indent-string@^4.0.0: 1655 | version "4.0.0" 1656 | resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz" 1657 | integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== 1658 | 1659 | inflight@^1.0.4: 1660 | version "1.0.6" 1661 | resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" 1662 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 1663 | dependencies: 1664 | once "^1.3.0" 1665 | wrappy "1" 1666 | 1667 | inherits@2, inherits@~2.0.3: 1668 | version "2.0.4" 1669 | resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" 1670 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 1671 | 1672 | internal-slot@^1.0.5: 1673 | version "1.0.6" 1674 | resolved "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz" 1675 | integrity sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg== 1676 | dependencies: 1677 | get-intrinsic "^1.2.2" 1678 | hasown "^2.0.0" 1679 | side-channel "^1.0.4" 1680 | 1681 | invert-kv@^1.0.0: 1682 | version "1.0.0" 1683 | resolved "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz" 1684 | integrity sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ== 1685 | 1686 | is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: 1687 | version "3.0.2" 1688 | resolved "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz" 1689 | integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== 1690 | dependencies: 1691 | call-bind "^1.0.2" 1692 | get-intrinsic "^1.2.0" 1693 | is-typed-array "^1.1.10" 1694 | 1695 | is-arrayish@^0.2.1: 1696 | version "0.2.1" 1697 | resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" 1698 | integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= 1699 | 1700 | is-bigint@^1.0.1: 1701 | version "1.0.4" 1702 | resolved "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz" 1703 | integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== 1704 | dependencies: 1705 | has-bigints "^1.0.1" 1706 | 1707 | is-boolean-object@^1.1.0: 1708 | version "1.1.2" 1709 | resolved "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz" 1710 | integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== 1711 | dependencies: 1712 | call-bind "^1.0.2" 1713 | has-tostringtag "^1.0.0" 1714 | 1715 | is-builtin-module@^3.1.0, is-builtin-module@^3.2.1: 1716 | version "3.2.1" 1717 | resolved "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz" 1718 | integrity sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A== 1719 | dependencies: 1720 | builtin-modules "^3.3.0" 1721 | 1722 | is-callable@^1.1.3, is-callable@^1.2.7: 1723 | version "1.2.7" 1724 | resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz" 1725 | integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== 1726 | 1727 | is-callable@^1.1.4: 1728 | version "1.1.4" 1729 | resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz" 1730 | integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== 1731 | 1732 | is-core-module@^2.12.1, is-core-module@^2.13.0, is-core-module@^2.13.1: 1733 | version "2.13.1" 1734 | resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz" 1735 | integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== 1736 | dependencies: 1737 | hasown "^2.0.0" 1738 | 1739 | is-core-module@^2.9.0: 1740 | version "2.11.0" 1741 | resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz" 1742 | integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== 1743 | dependencies: 1744 | has "^1.0.3" 1745 | 1746 | is-date-object@^1.0.1: 1747 | version "1.0.1" 1748 | resolved "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz" 1749 | integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY= 1750 | 1751 | is-extglob@^2.1.1: 1752 | version "2.1.1" 1753 | resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" 1754 | integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= 1755 | 1756 | is-fullwidth-code-point@^1.0.0: 1757 | version "1.0.0" 1758 | resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz" 1759 | integrity sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw== 1760 | dependencies: 1761 | number-is-nan "^1.0.0" 1762 | 1763 | is-fullwidth-code-point@^4.0.0: 1764 | version "4.0.0" 1765 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz#fae3167c729e7463f8461ce512b080a49268aa88" 1766 | integrity sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ== 1767 | 1768 | is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: 1769 | version "4.0.3" 1770 | resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" 1771 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== 1772 | dependencies: 1773 | is-extglob "^2.1.1" 1774 | 1775 | is-negative-zero@^2.0.2: 1776 | version "2.0.2" 1777 | resolved "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz" 1778 | integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== 1779 | 1780 | is-number-object@^1.0.4: 1781 | version "1.0.6" 1782 | resolved "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz" 1783 | integrity sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g== 1784 | dependencies: 1785 | has-tostringtag "^1.0.0" 1786 | 1787 | is-number@^7.0.0: 1788 | version "7.0.0" 1789 | resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" 1790 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 1791 | 1792 | is-path-inside@^3.0.3: 1793 | version "3.0.3" 1794 | resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz" 1795 | integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== 1796 | 1797 | is-regex@^1.1.4: 1798 | version "1.1.4" 1799 | resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz" 1800 | integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== 1801 | dependencies: 1802 | call-bind "^1.0.2" 1803 | has-tostringtag "^1.0.0" 1804 | 1805 | is-shared-array-buffer@^1.0.2: 1806 | version "1.0.2" 1807 | resolved "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz" 1808 | integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== 1809 | dependencies: 1810 | call-bind "^1.0.2" 1811 | 1812 | is-stream@^3.0.0: 1813 | version "3.0.0" 1814 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" 1815 | integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== 1816 | 1817 | is-string@^1.0.5, is-string@^1.0.7: 1818 | version "1.0.7" 1819 | resolved "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz" 1820 | integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== 1821 | dependencies: 1822 | has-tostringtag "^1.0.0" 1823 | 1824 | is-symbol@^1.0.2: 1825 | version "1.0.2" 1826 | resolved "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz" 1827 | integrity sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw== 1828 | dependencies: 1829 | has-symbols "^1.0.0" 1830 | 1831 | is-symbol@^1.0.3: 1832 | version "1.0.4" 1833 | resolved "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz" 1834 | integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== 1835 | dependencies: 1836 | has-symbols "^1.0.2" 1837 | 1838 | is-typed-array@^1.1.10, is-typed-array@^1.1.12, is-typed-array@^1.1.9: 1839 | version "1.1.12" 1840 | resolved "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz" 1841 | integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg== 1842 | dependencies: 1843 | which-typed-array "^1.1.11" 1844 | 1845 | is-weakref@^1.0.2: 1846 | version "1.0.2" 1847 | resolved "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz" 1848 | integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== 1849 | dependencies: 1850 | call-bind "^1.0.2" 1851 | 1852 | isarray@^2.0.5: 1853 | version "2.0.5" 1854 | resolved "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz" 1855 | integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== 1856 | 1857 | isarray@~1.0.0: 1858 | version "1.0.0" 1859 | resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" 1860 | integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== 1861 | 1862 | isexe@^2.0.0: 1863 | version "2.0.0" 1864 | resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" 1865 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= 1866 | 1867 | js-tokens@^4.0.0: 1868 | version "4.0.0" 1869 | resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" 1870 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 1871 | 1872 | js-yaml@^4.1.0: 1873 | version "4.1.0" 1874 | resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" 1875 | integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== 1876 | dependencies: 1877 | argparse "^2.0.1" 1878 | 1879 | jsdoc-type-pratt-parser@~4.0.0: 1880 | version "4.0.0" 1881 | resolved "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.0.0.tgz" 1882 | integrity sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ== 1883 | 1884 | json-parse-even-better-errors@^2.3.0: 1885 | version "2.3.1" 1886 | resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" 1887 | integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== 1888 | 1889 | json-schema-traverse@^0.4.1: 1890 | version "0.4.1" 1891 | resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" 1892 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 1893 | 1894 | json-stable-stringify-without-jsonify@^1.0.1: 1895 | version "1.0.1" 1896 | resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" 1897 | integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= 1898 | 1899 | json5@^1.0.2: 1900 | version "1.0.2" 1901 | resolved "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz" 1902 | integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== 1903 | dependencies: 1904 | minimist "^1.2.0" 1905 | 1906 | jsonc-parser@^3.2.0: 1907 | version "3.2.1" 1908 | resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.1.tgz#031904571ccf929d7670ee8c547545081cb37f1a" 1909 | integrity sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA== 1910 | 1911 | jsonfile@^6.0.1: 1912 | version "6.1.0" 1913 | resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz" 1914 | integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== 1915 | dependencies: 1916 | universalify "^2.0.0" 1917 | optionalDependencies: 1918 | graceful-fs "^4.1.6" 1919 | 1920 | lcid@^1.0.0: 1921 | version "1.0.0" 1922 | resolved "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz" 1923 | integrity sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw== 1924 | dependencies: 1925 | invert-kv "^1.0.0" 1926 | 1927 | levn@^0.4.1: 1928 | version "0.4.1" 1929 | resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" 1930 | integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== 1931 | dependencies: 1932 | prelude-ls "^1.2.1" 1933 | type-check "~0.4.0" 1934 | 1935 | lilconfig@2.1.0: 1936 | version "2.1.0" 1937 | resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52" 1938 | integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== 1939 | 1940 | lines-and-columns@^1.1.6: 1941 | version "1.2.4" 1942 | resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" 1943 | integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== 1944 | 1945 | lint-staged@^14.0.1: 1946 | version "14.0.1" 1947 | resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-14.0.1.tgz#57dfa3013a3d60762d9af5d9c83bdb51291a6232" 1948 | integrity sha512-Mw0cL6HXnHN1ag0mN/Dg4g6sr8uf8sn98w2Oc1ECtFto9tvRF7nkXGJRbx8gPlHyoR0pLyBr2lQHbWwmUHe1Sw== 1949 | dependencies: 1950 | chalk "5.3.0" 1951 | commander "11.0.0" 1952 | debug "4.3.4" 1953 | execa "7.2.0" 1954 | lilconfig "2.1.0" 1955 | listr2 "6.6.1" 1956 | micromatch "4.0.5" 1957 | pidtree "0.6.0" 1958 | string-argv "0.3.2" 1959 | yaml "2.3.1" 1960 | 1961 | listr2@6.6.1: 1962 | version "6.6.1" 1963 | resolved "https://registry.yarnpkg.com/listr2/-/listr2-6.6.1.tgz#08b2329e7e8ba6298481464937099f4a2cd7f95d" 1964 | integrity sha512-+rAXGHh0fkEWdXBmX+L6mmfmXmXvDGEKzkjxO+8mP3+nI/r/CWznVBvsibXdxda9Zz0OW2e2ikphN3OwCT/jSg== 1965 | dependencies: 1966 | cli-truncate "^3.1.0" 1967 | colorette "^2.0.20" 1968 | eventemitter3 "^5.0.1" 1969 | log-update "^5.0.1" 1970 | rfdc "^1.3.0" 1971 | wrap-ansi "^8.1.0" 1972 | 1973 | locate-path@^5.0.0: 1974 | version "5.0.0" 1975 | resolved "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz" 1976 | integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== 1977 | dependencies: 1978 | p-locate "^4.1.0" 1979 | 1980 | locate-path@^6.0.0: 1981 | version "6.0.0" 1982 | resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" 1983 | integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== 1984 | dependencies: 1985 | p-locate "^5.0.0" 1986 | 1987 | lodash.merge@^4.6.2: 1988 | version "4.6.2" 1989 | resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" 1990 | integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== 1991 | 1992 | lodash.pad@^4.1.0: 1993 | version "4.5.1" 1994 | resolved "https://registry.npmjs.org/lodash.pad/-/lodash.pad-4.5.1.tgz" 1995 | integrity sha512-mvUHifnLqM+03YNzeTBS1/Gr6JRFjd3rRx88FHWUvamVaT9k2O/kXha3yBSOwB9/DTQrSTLJNHvLBBt2FdX7Mg== 1996 | 1997 | lodash.padend@^4.1.0: 1998 | version "4.6.1" 1999 | resolved "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz" 2000 | integrity sha512-sOQs2aqGpbl27tmCS1QNZA09Uqp01ZzWfDUoD+xzTii0E7dSQfRKcRetFwa+uXaxaqL+TKm7CgD2JdKP7aZBSw== 2001 | 2002 | lodash.padstart@^4.1.0: 2003 | version "4.6.1" 2004 | resolved "https://registry.npmjs.org/lodash.padstart/-/lodash.padstart-4.6.1.tgz" 2005 | integrity sha512-sW73O6S8+Tg66eY56DBk85aQzzUJDtpoXFBgELMd5P/SotAguo+1kYO6RuYgXxA4HJH3LFTFPASX6ET6bjfriw== 2006 | 2007 | lodash@^4.17.21: 2008 | version "4.17.21" 2009 | resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" 2010 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== 2011 | 2012 | log-update@^5.0.1: 2013 | version "5.0.1" 2014 | resolved "https://registry.yarnpkg.com/log-update/-/log-update-5.0.1.tgz#9e928bf70cb183c1f0c9e91d9e6b7115d597ce09" 2015 | integrity sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw== 2016 | dependencies: 2017 | ansi-escapes "^5.0.0" 2018 | cli-cursor "^4.0.0" 2019 | slice-ansi "^5.0.0" 2020 | strip-ansi "^7.0.1" 2021 | wrap-ansi "^8.0.1" 2022 | 2023 | lru-cache@^6.0.0: 2024 | version "6.0.0" 2025 | resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" 2026 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== 2027 | dependencies: 2028 | yallist "^4.0.0" 2029 | 2030 | lunr@^2.3.9: 2031 | version "2.3.9" 2032 | resolved "https://registry.yarnpkg.com/lunr/-/lunr-2.3.9.tgz#18b123142832337dd6e964df1a5a7707b25d35e1" 2033 | integrity sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow== 2034 | 2035 | marked@^4.3.0: 2036 | version "4.3.0" 2037 | resolved "https://registry.yarnpkg.com/marked/-/marked-4.3.0.tgz#796362821b019f734054582038b116481b456cf3" 2038 | integrity sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A== 2039 | 2040 | merge-stream@^2.0.0: 2041 | version "2.0.0" 2042 | resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" 2043 | integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== 2044 | 2045 | merge2@^1.3.0, merge2@^1.4.1: 2046 | version "1.4.1" 2047 | resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" 2048 | integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== 2049 | 2050 | micromatch@4.0.5: 2051 | version "4.0.5" 2052 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" 2053 | integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== 2054 | dependencies: 2055 | braces "^3.0.2" 2056 | picomatch "^2.3.1" 2057 | 2058 | micromatch@^4.0.8: 2059 | version "4.0.8" 2060 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" 2061 | integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== 2062 | dependencies: 2063 | braces "^3.0.3" 2064 | picomatch "^2.3.1" 2065 | 2066 | mimic-fn@^2.1.0: 2067 | version "2.1.0" 2068 | resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" 2069 | integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== 2070 | 2071 | mimic-fn@^4.0.0: 2072 | version "4.0.0" 2073 | resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" 2074 | integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== 2075 | 2076 | min-indent@^1.0.0: 2077 | version "1.0.1" 2078 | resolved "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz" 2079 | integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== 2080 | 2081 | "minimatch@2 || 3", minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.2: 2082 | version "3.1.2" 2083 | resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" 2084 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== 2085 | dependencies: 2086 | brace-expansion "^1.1.7" 2087 | 2088 | minimatch@9.0.3: 2089 | version "9.0.3" 2090 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" 2091 | integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== 2092 | dependencies: 2093 | brace-expansion "^2.0.1" 2094 | 2095 | minimatch@^9.0.3: 2096 | version "9.0.4" 2097 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.4.tgz#8e49c731d1749cbec05050ee5145147b32496a51" 2098 | integrity sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw== 2099 | dependencies: 2100 | brace-expansion "^2.0.1" 2101 | 2102 | minimist@^1.2.0, minimist@^1.2.6: 2103 | version "1.2.7" 2104 | resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz" 2105 | integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== 2106 | 2107 | minimist@^1.2.8: 2108 | version "1.2.8" 2109 | resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" 2110 | integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== 2111 | 2112 | ms@2.1.2, ms@^2.1.1: 2113 | version "2.1.2" 2114 | resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" 2115 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 2116 | 2117 | ms@^2.1.3: 2118 | version "2.1.3" 2119 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" 2120 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== 2121 | 2122 | natural-compare@^1.4.0: 2123 | version "1.4.0" 2124 | resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" 2125 | integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= 2126 | 2127 | normalize-package-data@^2.5.0: 2128 | version "2.5.0" 2129 | resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz" 2130 | integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== 2131 | dependencies: 2132 | hosted-git-info "^2.1.4" 2133 | resolve "^1.10.0" 2134 | semver "2 || 3 || 4 || 5" 2135 | validate-npm-package-license "^3.0.1" 2136 | 2137 | npm-run-path@^5.1.0: 2138 | version "5.3.0" 2139 | resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.3.0.tgz#e23353d0ebb9317f174e93417e4a4d82d0249e9f" 2140 | integrity sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ== 2141 | dependencies: 2142 | path-key "^4.0.0" 2143 | 2144 | npmlog@^1.2.0: 2145 | version "1.2.1" 2146 | resolved "https://registry.npmjs.org/npmlog/-/npmlog-1.2.1.tgz" 2147 | integrity sha512-1J5KqSRvESP6XbjPaXt2H6qDzgizLTM7x0y1cXIjP2PpvdCqyNC7TO3cPRKsuYlElbi/DwkzRRdG2zpmE0IktQ== 2148 | dependencies: 2149 | ansi "~0.3.0" 2150 | are-we-there-yet "~1.0.0" 2151 | gauge "~1.2.0" 2152 | 2153 | number-is-nan@^1.0.0: 2154 | version "1.0.1" 2155 | resolved "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz" 2156 | integrity sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ== 2157 | 2158 | object-assign@^2.0.0: 2159 | version "2.1.1" 2160 | resolved "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz" 2161 | integrity sha512-CdsOUYIh5wIiozhJ3rLQgmUTgcyzFwZZrqhkKhODMoGtPKM+wt0h0CNIoauJWMsS9822EdzPsF/6mb4nLvPN5g== 2162 | 2163 | object-inspect@^1.13.1: 2164 | version "1.13.1" 2165 | resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz" 2166 | integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== 2167 | 2168 | object-inspect@^1.9.0: 2169 | version "1.11.0" 2170 | resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz" 2171 | integrity sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg== 2172 | 2173 | object-keys@^1.0.12, object-keys@^1.1.1: 2174 | version "1.1.1" 2175 | resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" 2176 | integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== 2177 | 2178 | object.assign@^4.1.4: 2179 | version "4.1.4" 2180 | resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz" 2181 | integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== 2182 | dependencies: 2183 | call-bind "^1.0.2" 2184 | define-properties "^1.1.4" 2185 | has-symbols "^1.0.3" 2186 | object-keys "^1.1.1" 2187 | 2188 | object.fromentries@^2.0.7: 2189 | version "2.0.7" 2190 | resolved "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz" 2191 | integrity sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA== 2192 | dependencies: 2193 | call-bind "^1.0.2" 2194 | define-properties "^1.2.0" 2195 | es-abstract "^1.22.1" 2196 | 2197 | object.groupby@^1.0.1: 2198 | version "1.0.1" 2199 | resolved "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz" 2200 | integrity sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ== 2201 | dependencies: 2202 | call-bind "^1.0.2" 2203 | define-properties "^1.2.0" 2204 | es-abstract "^1.22.1" 2205 | get-intrinsic "^1.2.1" 2206 | 2207 | object.values@^1.1.7: 2208 | version "1.1.7" 2209 | resolved "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz" 2210 | integrity sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng== 2211 | dependencies: 2212 | call-bind "^1.0.2" 2213 | define-properties "^1.2.0" 2214 | es-abstract "^1.22.1" 2215 | 2216 | once@^1.3.0: 2217 | version "1.4.0" 2218 | resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" 2219 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 2220 | dependencies: 2221 | wrappy "1" 2222 | 2223 | onetime@^1.0.0: 2224 | version "1.1.0" 2225 | resolved "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz" 2226 | integrity sha512-GZ+g4jayMqzCRMgB2sol7GiCLjKfS1PINkjmx8spcKce1LiVqcbQreXwqs2YAFXC6R03VIG28ZS31t8M866v6A== 2227 | 2228 | onetime@^5.1.0: 2229 | version "5.1.2" 2230 | resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" 2231 | integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== 2232 | dependencies: 2233 | mimic-fn "^2.1.0" 2234 | 2235 | onetime@^6.0.0: 2236 | version "6.0.0" 2237 | resolved "https://registry.yarnpkg.com/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4" 2238 | integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ== 2239 | dependencies: 2240 | mimic-fn "^4.0.0" 2241 | 2242 | optionator@^0.9.3: 2243 | version "0.9.3" 2244 | resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz" 2245 | integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== 2246 | dependencies: 2247 | "@aashutoshrathi/word-wrap" "^1.2.3" 2248 | deep-is "^0.1.3" 2249 | fast-levenshtein "^2.0.6" 2250 | levn "^0.4.1" 2251 | prelude-ls "^1.2.1" 2252 | type-check "^0.4.0" 2253 | 2254 | os-locale@^1.4.0: 2255 | version "1.4.0" 2256 | resolved "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz" 2257 | integrity sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g== 2258 | dependencies: 2259 | lcid "^1.0.0" 2260 | 2261 | p-limit@^2.2.0: 2262 | version "2.3.0" 2263 | resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" 2264 | integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== 2265 | dependencies: 2266 | p-try "^2.0.0" 2267 | 2268 | p-limit@^3.0.2: 2269 | version "3.1.0" 2270 | resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" 2271 | integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== 2272 | dependencies: 2273 | yocto-queue "^0.1.0" 2274 | 2275 | p-locate@^4.1.0: 2276 | version "4.1.0" 2277 | resolved "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz" 2278 | integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== 2279 | dependencies: 2280 | p-limit "^2.2.0" 2281 | 2282 | p-locate@^5.0.0: 2283 | version "5.0.0" 2284 | resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" 2285 | integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== 2286 | dependencies: 2287 | p-limit "^3.0.2" 2288 | 2289 | p-try@^2.0.0: 2290 | version "2.2.0" 2291 | resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz" 2292 | integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== 2293 | 2294 | parent-module@^1.0.0: 2295 | version "1.0.1" 2296 | resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" 2297 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== 2298 | dependencies: 2299 | callsites "^3.0.0" 2300 | 2301 | parse-json@^5.0.0: 2302 | version "5.2.0" 2303 | resolved "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz" 2304 | integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== 2305 | dependencies: 2306 | "@babel/code-frame" "^7.0.0" 2307 | error-ex "^1.3.1" 2308 | json-parse-even-better-errors "^2.3.0" 2309 | lines-and-columns "^1.1.6" 2310 | 2311 | path-exists@^4.0.0: 2312 | version "4.0.0" 2313 | resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" 2314 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== 2315 | 2316 | path-is-absolute@^1.0.0: 2317 | version "1.0.1" 2318 | resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" 2319 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 2320 | 2321 | path-key@^3.1.0: 2322 | version "3.1.1" 2323 | resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" 2324 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== 2325 | 2326 | path-key@^4.0.0: 2327 | version "4.0.0" 2328 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18" 2329 | integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== 2330 | 2331 | path-parse@^1.0.7: 2332 | version "1.0.7" 2333 | resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" 2334 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== 2335 | 2336 | path-type@^4.0.0: 2337 | version "4.0.0" 2338 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" 2339 | integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== 2340 | 2341 | picomatch@^2.3.1: 2342 | version "2.3.1" 2343 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" 2344 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== 2345 | 2346 | pidtree@0.6.0: 2347 | version "0.6.0" 2348 | resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.6.0.tgz#90ad7b6d42d5841e69e0a2419ef38f8883aa057c" 2349 | integrity sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g== 2350 | 2351 | pluralize@^8.0.0: 2352 | version "8.0.0" 2353 | resolved "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz" 2354 | integrity sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA== 2355 | 2356 | postject@^1.0.0-alpha.6: 2357 | version "1.0.0-alpha.6" 2358 | resolved "https://registry.npmjs.org/postject/-/postject-1.0.0-alpha.6.tgz" 2359 | integrity sha512-b9Eb8h2eVqNE8edvKdwqkrY6O7kAwmI8kcnBv1NScolYJbo59XUF0noFq+lxbC1yN20bmC0WBEbDC5H/7ASb0A== 2360 | dependencies: 2361 | commander "^9.4.0" 2362 | 2363 | prelude-ls@^1.2.1: 2364 | version "1.2.1" 2365 | resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" 2366 | integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== 2367 | 2368 | prettier@^3.5.3: 2369 | version "3.5.3" 2370 | resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.5.3.tgz#4fc2ce0d657e7a02e602549f053b239cb7dfe1b5" 2371 | integrity sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw== 2372 | 2373 | process-nextick-args@~2.0.0: 2374 | version "2.0.1" 2375 | resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz" 2376 | integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== 2377 | 2378 | punycode@^2.1.0: 2379 | version "2.1.1" 2380 | resolved "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz" 2381 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== 2382 | 2383 | queue-microtask@^1.2.2: 2384 | version "1.2.3" 2385 | resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" 2386 | integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== 2387 | 2388 | read-pkg-up@^7.0.1: 2389 | version "7.0.1" 2390 | resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz" 2391 | integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== 2392 | dependencies: 2393 | find-up "^4.1.0" 2394 | read-pkg "^5.2.0" 2395 | type-fest "^0.8.1" 2396 | 2397 | read-pkg@^5.2.0: 2398 | version "5.2.0" 2399 | resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz" 2400 | integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== 2401 | dependencies: 2402 | "@types/normalize-package-data" "^2.4.0" 2403 | normalize-package-data "^2.5.0" 2404 | parse-json "^5.0.0" 2405 | type-fest "^0.6.0" 2406 | 2407 | "readable-stream@^2.0.0 || ^1.1.13": 2408 | version "2.3.8" 2409 | resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz" 2410 | integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== 2411 | dependencies: 2412 | core-util-is "~1.0.0" 2413 | inherits "~2.0.3" 2414 | isarray "~1.0.0" 2415 | process-nextick-args "~2.0.0" 2416 | safe-buffer "~5.1.1" 2417 | string_decoder "~1.1.1" 2418 | util-deprecate "~1.0.1" 2419 | 2420 | regexp-tree@^0.1.24, regexp-tree@~0.1.1: 2421 | version "0.1.27" 2422 | resolved "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.27.tgz" 2423 | integrity sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA== 2424 | 2425 | regexp.prototype.flags@^1.5.1: 2426 | version "1.5.1" 2427 | resolved "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz" 2428 | integrity sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg== 2429 | dependencies: 2430 | call-bind "^1.0.2" 2431 | define-properties "^1.2.0" 2432 | set-function-name "^2.0.0" 2433 | 2434 | regexpp@^3.0.0: 2435 | version "3.2.0" 2436 | resolved "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz" 2437 | integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== 2438 | 2439 | resolve-from@^4.0.0: 2440 | version "4.0.0" 2441 | resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" 2442 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== 2443 | 2444 | resolve-pkg-maps@^1.0.0: 2445 | version "1.0.0" 2446 | resolved "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz" 2447 | integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== 2448 | 2449 | resolve@^1.10.0, resolve@^1.22.2, resolve@^1.22.4: 2450 | version "1.22.8" 2451 | resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz" 2452 | integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== 2453 | dependencies: 2454 | is-core-module "^2.13.0" 2455 | path-parse "^1.0.7" 2456 | supports-preserve-symlinks-flag "^1.0.0" 2457 | 2458 | resolve@^1.10.1: 2459 | version "1.22.1" 2460 | resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz" 2461 | integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== 2462 | dependencies: 2463 | is-core-module "^2.9.0" 2464 | path-parse "^1.0.7" 2465 | supports-preserve-symlinks-flag "^1.0.0" 2466 | 2467 | restore-cursor@^4.0.0: 2468 | version "4.0.0" 2469 | resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-4.0.0.tgz#519560a4318975096def6e609d44100edaa4ccb9" 2470 | integrity sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg== 2471 | dependencies: 2472 | onetime "^5.1.0" 2473 | signal-exit "^3.0.2" 2474 | 2475 | reusify@^1.0.4: 2476 | version "1.0.4" 2477 | resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" 2478 | integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== 2479 | 2480 | rfdc@^1.3.0: 2481 | version "1.4.1" 2482 | resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.4.1.tgz#778f76c4fb731d93414e8f925fbecf64cce7f6ca" 2483 | integrity sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA== 2484 | 2485 | rimraf@^3.0.2: 2486 | version "3.0.2" 2487 | resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" 2488 | integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== 2489 | dependencies: 2490 | glob "^7.1.3" 2491 | 2492 | run-parallel@^1.1.9: 2493 | version "1.2.0" 2494 | resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" 2495 | integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== 2496 | dependencies: 2497 | queue-microtask "^1.2.2" 2498 | 2499 | safe-array-concat@^1.0.1: 2500 | version "1.0.1" 2501 | resolved "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz" 2502 | integrity sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q== 2503 | dependencies: 2504 | call-bind "^1.0.2" 2505 | get-intrinsic "^1.2.1" 2506 | has-symbols "^1.0.3" 2507 | isarray "^2.0.5" 2508 | 2509 | safe-buffer@~5.1.0, safe-buffer@~5.1.1: 2510 | version "5.1.2" 2511 | resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" 2512 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== 2513 | 2514 | safe-regex-test@^1.0.0: 2515 | version "1.0.0" 2516 | resolved "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz" 2517 | integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== 2518 | dependencies: 2519 | call-bind "^1.0.2" 2520 | get-intrinsic "^1.1.3" 2521 | is-regex "^1.1.4" 2522 | 2523 | safe-regex@^2.1.1: 2524 | version "2.1.1" 2525 | resolved "https://registry.npmjs.org/safe-regex/-/safe-regex-2.1.1.tgz" 2526 | integrity sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A== 2527 | dependencies: 2528 | regexp-tree "~0.1.1" 2529 | 2530 | "semver@2 || 3 || 4 || 5": 2531 | version "5.7.2" 2532 | resolved "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz" 2533 | integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== 2534 | 2535 | semver@^6.1.0, semver@^6.3.1: 2536 | version "6.3.1" 2537 | resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" 2538 | integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== 2539 | 2540 | semver@^7.0.0: 2541 | version "7.6.3" 2542 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" 2543 | integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== 2544 | 2545 | semver@^7.3.5, semver@^7.5.3, semver@^7.5.4: 2546 | version "7.5.4" 2547 | resolved "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz" 2548 | integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== 2549 | dependencies: 2550 | lru-cache "^6.0.0" 2551 | 2552 | set-function-length@^1.1.1: 2553 | version "1.1.1" 2554 | resolved "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz" 2555 | integrity sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ== 2556 | dependencies: 2557 | define-data-property "^1.1.1" 2558 | get-intrinsic "^1.2.1" 2559 | gopd "^1.0.1" 2560 | has-property-descriptors "^1.0.0" 2561 | 2562 | set-function-name@^2.0.0: 2563 | version "2.0.1" 2564 | resolved "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz" 2565 | integrity sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA== 2566 | dependencies: 2567 | define-data-property "^1.0.1" 2568 | functions-have-names "^1.2.3" 2569 | has-property-descriptors "^1.0.0" 2570 | 2571 | shebang-command@^2.0.0: 2572 | version "2.0.0" 2573 | resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" 2574 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== 2575 | dependencies: 2576 | shebang-regex "^3.0.0" 2577 | 2578 | shebang-regex@^3.0.0: 2579 | version "3.0.0" 2580 | resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" 2581 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== 2582 | 2583 | shiki@^0.14.7: 2584 | version "0.14.7" 2585 | resolved "https://registry.yarnpkg.com/shiki/-/shiki-0.14.7.tgz#c3c9e1853e9737845f1d2ef81b31bcfb07056d4e" 2586 | integrity sha512-dNPAPrxSc87ua2sKJ3H5dQ/6ZaY8RNnaAqK+t0eG7p0Soi2ydiqbGOTaZCqaYvA/uZYfS1LJnemt3Q+mSfcPCg== 2587 | dependencies: 2588 | ansi-sequence-parser "^1.1.0" 2589 | jsonc-parser "^3.2.0" 2590 | vscode-oniguruma "^1.7.0" 2591 | vscode-textmate "^8.0.0" 2592 | 2593 | side-channel@^1.0.4: 2594 | version "1.0.4" 2595 | resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz" 2596 | integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== 2597 | dependencies: 2598 | call-bind "^1.0.0" 2599 | get-intrinsic "^1.0.2" 2600 | object-inspect "^1.9.0" 2601 | 2602 | signal-exit@^3.0.2, signal-exit@^3.0.7: 2603 | version "3.0.7" 2604 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" 2605 | integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== 2606 | 2607 | slash@^3.0.0: 2608 | version "3.0.0" 2609 | resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" 2610 | integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== 2611 | 2612 | slice-ansi@^5.0.0: 2613 | version "5.0.0" 2614 | resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-5.0.0.tgz#b73063c57aa96f9cd881654b15294d95d285c42a" 2615 | integrity sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ== 2616 | dependencies: 2617 | ansi-styles "^6.0.0" 2618 | is-fullwidth-code-point "^4.0.0" 2619 | 2620 | source-map-support@^0.5.21: 2621 | version "0.5.21" 2622 | resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz" 2623 | integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== 2624 | dependencies: 2625 | buffer-from "^1.0.0" 2626 | source-map "^0.6.0" 2627 | 2628 | source-map@^0.6.0: 2629 | version "0.6.1" 2630 | resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" 2631 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== 2632 | 2633 | spdx-correct@^3.0.0: 2634 | version "3.2.0" 2635 | resolved "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz" 2636 | integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== 2637 | dependencies: 2638 | spdx-expression-parse "^3.0.0" 2639 | spdx-license-ids "^3.0.0" 2640 | 2641 | spdx-exceptions@^2.1.0: 2642 | version "2.3.0" 2643 | resolved "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz" 2644 | integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== 2645 | 2646 | spdx-expression-parse@^3.0.0, spdx-expression-parse@^3.0.1: 2647 | version "3.0.1" 2648 | resolved "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz" 2649 | integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== 2650 | dependencies: 2651 | spdx-exceptions "^2.1.0" 2652 | spdx-license-ids "^3.0.0" 2653 | 2654 | spdx-license-ids@^3.0.0: 2655 | version "3.0.16" 2656 | resolved "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz" 2657 | integrity sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw== 2658 | 2659 | string-argv@0.3.2: 2660 | version "0.3.2" 2661 | resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.2.tgz#2b6d0ef24b656274d957d54e0a4bbf6153dc02b6" 2662 | integrity sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q== 2663 | 2664 | string-width@^1.0.1: 2665 | version "1.0.2" 2666 | resolved "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz" 2667 | integrity sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw== 2668 | dependencies: 2669 | code-point-at "^1.0.0" 2670 | is-fullwidth-code-point "^1.0.0" 2671 | strip-ansi "^3.0.0" 2672 | 2673 | string-width@^5.0.0, string-width@^5.0.1: 2674 | version "5.1.2" 2675 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" 2676 | integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== 2677 | dependencies: 2678 | eastasianwidth "^0.2.0" 2679 | emoji-regex "^9.2.2" 2680 | strip-ansi "^7.0.1" 2681 | 2682 | string.prototype.trim@^1.2.8: 2683 | version "1.2.8" 2684 | resolved "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz" 2685 | integrity sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ== 2686 | dependencies: 2687 | call-bind "^1.0.2" 2688 | define-properties "^1.2.0" 2689 | es-abstract "^1.22.1" 2690 | 2691 | string.prototype.trimend@^1.0.7: 2692 | version "1.0.7" 2693 | resolved "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz" 2694 | integrity sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA== 2695 | dependencies: 2696 | call-bind "^1.0.2" 2697 | define-properties "^1.2.0" 2698 | es-abstract "^1.22.1" 2699 | 2700 | string.prototype.trimstart@^1.0.7: 2701 | version "1.0.7" 2702 | resolved "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz" 2703 | integrity sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg== 2704 | dependencies: 2705 | call-bind "^1.0.2" 2706 | define-properties "^1.2.0" 2707 | es-abstract "^1.22.1" 2708 | 2709 | string_decoder@~1.1.1: 2710 | version "1.1.1" 2711 | resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" 2712 | integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== 2713 | dependencies: 2714 | safe-buffer "~5.1.0" 2715 | 2716 | strip-ansi@^3.0.0, strip-ansi@^3.0.1: 2717 | version "3.0.1" 2718 | resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz" 2719 | integrity sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg== 2720 | dependencies: 2721 | ansi-regex "^2.0.0" 2722 | 2723 | strip-ansi@^6.0.1: 2724 | version "6.0.1" 2725 | resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" 2726 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== 2727 | dependencies: 2728 | ansi-regex "^5.0.1" 2729 | 2730 | strip-ansi@^7.0.1: 2731 | version "7.1.0" 2732 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" 2733 | integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== 2734 | dependencies: 2735 | ansi-regex "^6.0.1" 2736 | 2737 | strip-bom@^3.0.0: 2738 | version "3.0.0" 2739 | resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" 2740 | integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= 2741 | 2742 | strip-final-newline@^3.0.0: 2743 | version "3.0.0" 2744 | resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" 2745 | integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== 2746 | 2747 | strip-indent@^3.0.0: 2748 | version "3.0.0" 2749 | resolved "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz" 2750 | integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== 2751 | dependencies: 2752 | min-indent "^1.0.0" 2753 | 2754 | strip-json-comments@^3.1.1: 2755 | version "3.1.1" 2756 | resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" 2757 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== 2758 | 2759 | supports-color@^5.3.0: 2760 | version "5.5.0" 2761 | resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" 2762 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 2763 | dependencies: 2764 | has-flag "^3.0.0" 2765 | 2766 | supports-color@^7.1.0: 2767 | version "7.2.0" 2768 | resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" 2769 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 2770 | dependencies: 2771 | has-flag "^4.0.0" 2772 | 2773 | supports-preserve-symlinks-flag@^1.0.0: 2774 | version "1.0.0" 2775 | resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" 2776 | integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== 2777 | 2778 | text-table@^0.2.0: 2779 | version "0.2.0" 2780 | resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" 2781 | integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= 2782 | 2783 | to-regex-range@^5.0.1: 2784 | version "5.0.1" 2785 | resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" 2786 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 2787 | dependencies: 2788 | is-number "^7.0.0" 2789 | 2790 | ts-api-utils@^1.0.1: 2791 | version "1.4.3" 2792 | resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.4.3.tgz#bfc2215fe6528fecab2b0fba570a2e8a4263b064" 2793 | integrity sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw== 2794 | 2795 | tsconfig-paths@^3.14.2: 2796 | version "3.14.2" 2797 | resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz" 2798 | integrity sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g== 2799 | dependencies: 2800 | "@types/json5" "^0.0.29" 2801 | json5 "^1.0.2" 2802 | minimist "^1.2.6" 2803 | strip-bom "^3.0.0" 2804 | 2805 | tsx@^3.14.0: 2806 | version "3.14.0" 2807 | resolved "https://registry.npmjs.org/tsx/-/tsx-3.14.0.tgz" 2808 | integrity sha512-xHtFaKtHxM9LOklMmJdI3BEnQq/D5F73Of2E1GDrITi9sgoVkvIsrQUTY1G8FlmGtA+awCI4EBlTRRYxkL2sRg== 2809 | dependencies: 2810 | esbuild "~0.18.20" 2811 | get-tsconfig "^4.7.2" 2812 | source-map-support "^0.5.21" 2813 | optionalDependencies: 2814 | fsevents "~2.3.3" 2815 | 2816 | type-check@^0.4.0, type-check@~0.4.0: 2817 | version "0.4.0" 2818 | resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" 2819 | integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== 2820 | dependencies: 2821 | prelude-ls "^1.2.1" 2822 | 2823 | type-fest@^0.20.2: 2824 | version "0.20.2" 2825 | resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" 2826 | integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== 2827 | 2828 | type-fest@^0.6.0: 2829 | version "0.6.0" 2830 | resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz" 2831 | integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== 2832 | 2833 | type-fest@^0.8.1: 2834 | version "0.8.1" 2835 | resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz" 2836 | integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== 2837 | 2838 | type-fest@^1.0.2: 2839 | version "1.4.0" 2840 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-1.4.0.tgz#e9fb813fe3bf1744ec359d55d1affefa76f14be1" 2841 | integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA== 2842 | 2843 | typed-array-buffer@^1.0.0: 2844 | version "1.0.0" 2845 | resolved "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz" 2846 | integrity sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw== 2847 | dependencies: 2848 | call-bind "^1.0.2" 2849 | get-intrinsic "^1.2.1" 2850 | is-typed-array "^1.1.10" 2851 | 2852 | typed-array-byte-length@^1.0.0: 2853 | version "1.0.0" 2854 | resolved "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz" 2855 | integrity sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA== 2856 | dependencies: 2857 | call-bind "^1.0.2" 2858 | for-each "^0.3.3" 2859 | has-proto "^1.0.1" 2860 | is-typed-array "^1.1.10" 2861 | 2862 | typed-array-byte-offset@^1.0.0: 2863 | version "1.0.0" 2864 | resolved "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz" 2865 | integrity sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg== 2866 | dependencies: 2867 | available-typed-arrays "^1.0.5" 2868 | call-bind "^1.0.2" 2869 | for-each "^0.3.3" 2870 | has-proto "^1.0.1" 2871 | is-typed-array "^1.1.10" 2872 | 2873 | typed-array-length@^1.0.4: 2874 | version "1.0.4" 2875 | resolved "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz" 2876 | integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== 2877 | dependencies: 2878 | call-bind "^1.0.2" 2879 | for-each "^0.3.3" 2880 | is-typed-array "^1.1.9" 2881 | 2882 | typedoc@~0.25.13: 2883 | version "0.25.13" 2884 | resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.25.13.tgz#9a98819e3b2d155a6d78589b46fa4c03768f0922" 2885 | integrity sha512-pQqiwiJ+Z4pigfOnnysObszLiU3mVLWAExSPf+Mu06G/qsc3wzbuM56SZQvONhHLncLUhYzOVkjFFpFfL5AzhQ== 2886 | dependencies: 2887 | lunr "^2.3.9" 2888 | marked "^4.3.0" 2889 | minimatch "^9.0.3" 2890 | shiki "^0.14.7" 2891 | 2892 | typescript@^5.2.2: 2893 | version "5.2.2" 2894 | resolved "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz" 2895 | integrity sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w== 2896 | 2897 | unbox-primitive@^1.0.2: 2898 | version "1.0.2" 2899 | resolved "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz" 2900 | integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== 2901 | dependencies: 2902 | call-bind "^1.0.2" 2903 | has-bigints "^1.0.2" 2904 | has-symbols "^1.0.3" 2905 | which-boxed-primitive "^1.0.2" 2906 | 2907 | undici-types@~5.26.4: 2908 | version "5.26.5" 2909 | resolved "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz" 2910 | integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== 2911 | 2912 | universalify@^2.0.0: 2913 | version "2.0.0" 2914 | resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz" 2915 | integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== 2916 | 2917 | uri-js@^4.2.2: 2918 | version "4.2.2" 2919 | resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz" 2920 | integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== 2921 | dependencies: 2922 | punycode "^2.1.0" 2923 | 2924 | util-deprecate@~1.0.1: 2925 | version "1.0.2" 2926 | resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" 2927 | integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== 2928 | 2929 | validate-npm-package-license@^3.0.1: 2930 | version "3.0.4" 2931 | resolved "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz" 2932 | integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== 2933 | dependencies: 2934 | spdx-correct "^3.0.0" 2935 | spdx-expression-parse "^3.0.0" 2936 | 2937 | vscode-oniguruma@^1.7.0: 2938 | version "1.7.0" 2939 | resolved "https://registry.yarnpkg.com/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz#439bfad8fe71abd7798338d1cd3dc53a8beea94b" 2940 | integrity sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA== 2941 | 2942 | vscode-textmate@^8.0.0: 2943 | version "8.0.0" 2944 | resolved "https://registry.yarnpkg.com/vscode-textmate/-/vscode-textmate-8.0.0.tgz#2c7a3b1163ef0441097e0b5d6389cd5504b59e5d" 2945 | integrity sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg== 2946 | 2947 | which-boxed-primitive@^1.0.2: 2948 | version "1.0.2" 2949 | resolved "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz" 2950 | integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== 2951 | dependencies: 2952 | is-bigint "^1.0.1" 2953 | is-boolean-object "^1.1.0" 2954 | is-number-object "^1.0.4" 2955 | is-string "^1.0.5" 2956 | is-symbol "^1.0.3" 2957 | 2958 | which-typed-array@^1.1.11, which-typed-array@^1.1.13: 2959 | version "1.1.13" 2960 | resolved "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz" 2961 | integrity sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow== 2962 | dependencies: 2963 | available-typed-arrays "^1.0.5" 2964 | call-bind "^1.0.4" 2965 | for-each "^0.3.3" 2966 | gopd "^1.0.1" 2967 | has-tostringtag "^1.0.0" 2968 | 2969 | which@^2.0.1: 2970 | version "2.0.2" 2971 | resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" 2972 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 2973 | dependencies: 2974 | isexe "^2.0.0" 2975 | 2976 | window-size@^0.1.4: 2977 | version "0.1.4" 2978 | resolved "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz" 2979 | integrity sha512-2thx4pB0cV3h+Bw7QmMXcEbdmOzv9t0HFplJH/Lz6yu60hXYy5RT8rUu+wlIreVxWsGN20mo+MHeCSfUpQBwPw== 2980 | 2981 | wrap-ansi@^2.0.0: 2982 | version "2.1.0" 2983 | resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz" 2984 | integrity sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw== 2985 | dependencies: 2986 | string-width "^1.0.1" 2987 | strip-ansi "^3.0.1" 2988 | 2989 | wrap-ansi@^8.0.1, wrap-ansi@^8.1.0: 2990 | version "8.1.0" 2991 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" 2992 | integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== 2993 | dependencies: 2994 | ansi-styles "^6.1.0" 2995 | string-width "^5.0.1" 2996 | strip-ansi "^7.0.1" 2997 | 2998 | wrappy@1: 2999 | version "1.0.2" 3000 | resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" 3001 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 3002 | 3003 | y18n@^3.2.0: 3004 | version "3.2.2" 3005 | resolved "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz" 3006 | integrity sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ== 3007 | 3008 | yallist@^4.0.0: 3009 | version "4.0.0" 3010 | resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" 3011 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== 3012 | 3013 | yaml@2.3.1: 3014 | version "2.3.1" 3015 | resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.1.tgz#02fe0975d23cd441242aa7204e09fc28ac2ac33b" 3016 | integrity sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ== 3017 | 3018 | yargs@^3.5.4: 3019 | version "3.32.0" 3020 | resolved "https://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz" 3021 | integrity sha512-ONJZiimStfZzhKamYvR/xvmgW3uEkAUFSP91y2caTEPhzF6uP2JfPiVZcq66b/YR0C3uitxSV7+T1x8p5bkmMg== 3022 | dependencies: 3023 | camelcase "^2.0.1" 3024 | cliui "^3.0.3" 3025 | decamelize "^1.1.1" 3026 | os-locale "^1.4.0" 3027 | string-width "^1.0.1" 3028 | window-size "^0.1.4" 3029 | y18n "^3.2.0" 3030 | 3031 | yocto-queue@^0.1.0: 3032 | version "0.1.0" 3033 | resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" 3034 | integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== 3035 | --------------------------------------------------------------------------------