├── .cargo └── config.toml ├── .editorconfig ├── .gitattributes ├── .github ├── FUNDING.yml ├── renovate.json └── workflows │ └── CI.yml ├── .gitignore ├── .husky ├── .gitignore └── pre-commit ├── .prettierignore ├── .taplo.toml ├── .yarn └── releases │ └── yarn-4.9.1.cjs ├── .yarnrc.yml ├── Cargo.toml ├── LICENSE ├── README.md ├── __test__ └── index.spec.ts ├── build.rs ├── index.d.ts ├── index.js ├── keytar.d.ts ├── keytar.js ├── package.json ├── rustfmt.toml ├── src ├── async_entry.rs ├── entry.rs ├── lib.rs └── linux_credential_builder.rs ├── tsconfig.json └── yarn.lock /.cargo/config.toml: -------------------------------------------------------------------------------- 1 | [target.aarch64-unknown-linux-musl] 2 | linker = "aarch64-linux-musl-gcc" 3 | rustflags = ["-C", "target-feature=-crt-static"] 4 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # EditorConfig helps developers define and maintain consistent 2 | # coding styles between different editors or IDEs 3 | # http://editorconfig.org 4 | root = true 5 | 6 | [*] 7 | indent_style = space 8 | indent_size = 2 9 | end_of_line = lf 10 | charset = utf-8 11 | trim_trailing_whitespace = true 12 | insert_final_newline = true 13 | 14 | [*.md] 15 | trim_trailing_whitespace = false 16 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | 4 | 5 | *.ts text eol=lf merge=union 6 | *.tsx text eol=lf merge=union 7 | *.rs text eol=lf merge=union 8 | *.js text eol=lf merge=union 9 | *.json text eol=lf merge=union 10 | *.debug text eol=lf merge=union 11 | 12 | # Generated codes 13 | index.js linguist-detectable=false 14 | index.d.ts linguist-detectable=false -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | github: [Brooooooklyn] 2 | -------------------------------------------------------------------------------- /.github/renovate.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://docs.renovatebot.com/renovate-schema.json", 3 | "extends": ["config:base", "group:allNonMajor", ":preserveSemverRanges", ":disablePeerDependencies"], 4 | "labels": ["dependencies"], 5 | "packageRules": [ 6 | { 7 | "matchPackageNames": ["@napi/cli", "napi", "napi-build", "napi-derive"], 8 | "addLabels": ["napi-rs"], 9 | "groupName": "napi-rs" 10 | }, 11 | { 12 | "matchPackagePatterns": ["^eslint", "^@typescript-eslint"], 13 | "groupName": "linter" 14 | } 15 | ], 16 | "commitMessagePrefix": "chore: ", 17 | "commitMessageAction": "bump up", 18 | "commitMessageTopic": "{{depName}} version", 19 | "ignoreDeps": [] 20 | } 21 | -------------------------------------------------------------------------------- /.github/workflows/CI.yml: -------------------------------------------------------------------------------- 1 | name: CI 2 | env: 3 | DEBUG: napi:* 4 | APP_NAME: keyring 5 | MACOSX_DEPLOYMENT_TARGET: '10.13' 6 | 'on': 7 | push: 8 | branches: 9 | - main 10 | tags-ignore: 11 | - '**' 12 | paths-ignore: 13 | - '**/*.md' 14 | - LICENSE 15 | - '**/*.gitignore' 16 | - .editorconfig 17 | - docs/** 18 | pull_request: null 19 | permissions: 20 | contents: write 21 | id-token: write 22 | concurrency: 23 | group: ${{ github.workflow }}-${{ github.ref }} 24 | cancel-in-progress: true 25 | jobs: 26 | lint: 27 | name: Lint 28 | runs-on: ubuntu-latest 29 | steps: 30 | - uses: actions/checkout@v4 31 | - name: Setup node 32 | uses: actions/setup-node@v4 33 | with: 34 | node-version: 22 35 | cache: 'yarn' 36 | 37 | - name: Install 38 | uses: dtolnay/rust-toolchain@stable 39 | with: 40 | components: clippy, rustfmt 41 | 42 | - name: Install dependencies 43 | run: yarn install 44 | 45 | - name: ESLint 46 | run: yarn lint 47 | 48 | - name: Cargo fmt 49 | run: cargo fmt -- --check 50 | 51 | - name: Clippy 52 | run: cargo clippy 53 | build: 54 | strategy: 55 | fail-fast: false 56 | matrix: 57 | settings: 58 | - host: macos-latest 59 | target: x86_64-apple-darwin 60 | build: yarn build --target x86_64-apple-darwin 61 | - host: windows-latest 62 | build: yarn build --target x86_64-pc-windows-msvc 63 | target: x86_64-pc-windows-msvc 64 | - host: windows-latest 65 | build: yarn build --target i686-pc-windows-msvc 66 | target: i686-pc-windows-msvc 67 | - host: ubuntu-latest 68 | target: x86_64-unknown-linux-gnu 69 | build: yarn build --target x86_64-unknown-linux-gnu --use-napi-cross 70 | - host: ubuntu-latest 71 | target: x86_64-unknown-linux-musl 72 | build: yarn build --target x86_64-unknown-linux-musl -x 73 | - host: macos-latest 74 | target: aarch64-apple-darwin 75 | build: yarn build --target aarch64-apple-darwin 76 | - host: ubuntu-latest 77 | target: aarch64-unknown-linux-gnu 78 | build: yarn build --target aarch64-unknown-linux-gnu --use-napi-cross 79 | - host: ubuntu-latest 80 | target: armv7-unknown-linux-gnueabihf 81 | build: yarn build --target armv7-unknown-linux-gnueabihf --use-napi-cross 82 | - host: ubuntu-latest 83 | target: aarch64-unknown-linux-musl 84 | build: yarn build --target aarch64-unknown-linux-musl -x 85 | - host: windows-latest 86 | target: aarch64-pc-windows-msvc 87 | build: yarn build --target aarch64-pc-windows-msvc 88 | - host: ubuntu-latest 89 | target: riscv64gc-unknown-linux-gnu 90 | setup: | 91 | sudo apt-get update 92 | sudo apt-get install gcc-riscv64-linux-gnu -y 93 | build: yarn build --platform --target riscv64gc-unknown-linux-gnu 94 | name: stable - ${{ matrix.settings.target }} - node@22 95 | runs-on: ${{ matrix.settings.host }} 96 | steps: 97 | - uses: actions/checkout@v4 98 | - name: Setup node 99 | uses: actions/setup-node@v4 100 | with: 101 | node-version: 22 102 | cache: yarn 103 | - name: Install 104 | uses: dtolnay/rust-toolchain@stable 105 | if: ${{ !matrix.settings.docker }} 106 | with: 107 | toolchain: stable 108 | targets: ${{ matrix.settings.target }} 109 | - name: Cache cargo 110 | uses: actions/cache@v4 111 | with: 112 | path: | 113 | ~/.cargo/registry/index/ 114 | ~/.cargo/registry/cache/ 115 | ~/.cargo/git/db/ 116 | ~/.napi-rs 117 | .cargo-cache 118 | target/ 119 | key: ${{ matrix.settings.target }}-cargo-${{ matrix.settings.host }} 120 | - uses: goto-bus-stop/setup-zig@v2 121 | if: ${{ contains(matrix.settings.target, 'musl') }} 122 | with: 123 | version: 0.13.0 124 | - name: Install cargo-zigbuild 125 | uses: taiki-e/install-action@v2 126 | if: ${{ contains(matrix.settings.target, 'musl') }} 127 | env: 128 | GITHUB_TOKEN: ${{ github.token }} 129 | with: 130 | tool: cargo-zigbuild 131 | - name: Setup toolchain 132 | run: ${{ matrix.settings.setup }} 133 | if: ${{ matrix.settings.setup }} 134 | shell: bash 135 | - name: Setup node x86 136 | if: matrix.settings.target == 'i686-pc-windows-msvc' 137 | run: yarn config set supportedArchitectures.cpu "ia32" 138 | shell: bash 139 | - name: Install dependencies 140 | run: yarn install 141 | - name: Setup node x86 142 | uses: actions/setup-node@v4 143 | if: matrix.settings.target == 'i686-pc-windows-msvc' 144 | with: 145 | node-version: 22 146 | architecture: x86 147 | - name: Build 148 | run: ${{ matrix.settings.build }} 149 | shell: bash 150 | - name: Upload artifact 151 | uses: actions/upload-artifact@v4 152 | with: 153 | name: bindings-${{ matrix.settings.target }} 154 | path: ${{ env.APP_NAME }}.*.node 155 | if-no-files-found: error 156 | build-freebsd: 157 | runs-on: ubuntu-latest 158 | name: Build FreeBSD 159 | steps: 160 | - uses: actions/checkout@v4 161 | - name: Build 162 | id: build 163 | uses: cross-platform-actions/action@v0.28.0 164 | env: 165 | DEBUG: napi:* 166 | RUSTUP_IO_THREADS: 1 167 | with: 168 | operating_system: freebsd 169 | version: '14.2' 170 | memory: 8G 171 | cpu_count: 3 172 | environment_variables: 'DEBUG RUSTUP_IO_THREADS' 173 | shell: bash 174 | run: | 175 | sudo pkg install -y -f curl www/node www/npm libnghttp2 cmake 176 | sudo npm install --location=global --ignore-scripts yarn 177 | curl https://sh.rustup.rs -sSf --output rustup.sh 178 | sh rustup.sh -y --profile minimal --default-toolchain beta 179 | source "$HOME/.cargo/env" 180 | echo "~~~~ rustc --version ~~~~" 181 | rustc --version 182 | echo "~~~~ node -v ~~~~" 183 | node -v 184 | echo "~~~~ yarn --version ~~~~" 185 | yarn --version 186 | pwd 187 | ls -lah 188 | whoami 189 | env 190 | freebsd-version 191 | yarn install 192 | yarn build 193 | rm -rf node_modules 194 | rm -rf target 195 | rm -rf .yarn/cache 196 | - name: Upload artifact 197 | uses: actions/upload-artifact@v4 198 | with: 199 | name: bindings-freebsd 200 | path: ${{ env.APP_NAME }}.*.node 201 | if-no-files-found: error 202 | test: 203 | name: Test bindings on ${{ matrix.settings.host }} - node@${{ matrix.node }} 204 | needs: 205 | - build 206 | strategy: 207 | fail-fast: false 208 | matrix: 209 | node: ['20', '22'] 210 | settings: 211 | - host: macos-latest 212 | target: 'aarch64-apple-darwin' 213 | - host: windows-latest 214 | target: 'x86_64-pc-windows-msvc' 215 | - host: ubuntu-latest 216 | target: 'x86_64-unknown-linux-gnu' 217 | runs-on: ${{ matrix.settings.host }} 218 | steps: 219 | - uses: actions/checkout@v4 220 | - name: Setup node 221 | uses: actions/setup-node@v4 222 | with: 223 | node-version: ${{ matrix.node }} 224 | cache: yarn 225 | - name: Download artifacts 226 | uses: actions/download-artifact@v4 227 | with: 228 | name: bindings-${{ matrix.settings.target }} 229 | path: . 230 | - name: List packages 231 | run: ls -R . 232 | shell: bash 233 | - name: Install dependencies 234 | run: yarn install 235 | - name: Install system components 236 | if: matrix.settings.host == 'ubuntu-latest' 237 | run: | 238 | sudo apt-get update -y 239 | sudo apt-get install -y gnome-keyring dbus dbus-x11 240 | - name: Test bindings 241 | if: matrix.settings.host == 'ubuntu-latest' 242 | run: | 243 | dbus-run-session -- bash -c "rm -f $HOME/.local/share/keyrings/* && echo -n "test" | gnome-keyring-daemon --unlock && yarn test" 244 | - name: Test bindings 245 | if: matrix.settings.host != 'ubuntu-latest' 246 | run: yarn test 247 | 248 | publish: 249 | name: Publish 250 | runs-on: ubuntu-latest 251 | needs: 252 | - lint 253 | - test 254 | - build-freebsd 255 | steps: 256 | - uses: actions/checkout@v4 257 | - name: Setup node 258 | uses: actions/setup-node@v4 259 | with: 260 | node-version: 22 261 | cache: yarn 262 | - name: Install dependencies 263 | run: yarn install 264 | - name: Download all artifacts 265 | uses: actions/download-artifact@v4 266 | with: 267 | path: artifacts 268 | - name: Create npm dirs 269 | run: yarn napi create-npm-dirs 270 | - name: Move artifacts 271 | run: yarn artifacts 272 | - name: List packages 273 | run: ls -R ./npm 274 | shell: bash 275 | - name: Publish 276 | run: | 277 | npm config set provenance true 278 | if git log -1 --pretty=%B | grep "^[0-9]\+\.[0-9]\+\.[0-9]\+$"; 279 | then 280 | echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" >> ~/.npmrc 281 | npm publish --access public 282 | elif git log -1 --pretty=%B | grep "^[0-9]\+\.[0-9]\+\.[0-9]\+"; 283 | then 284 | echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" >> ~/.npmrc 285 | npm publish --tag next --access public 286 | else 287 | echo "Not a release, skipping publish" 288 | fi 289 | env: 290 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 291 | NPM_TOKEN: ${{ secrets.NPM_TOKEN }} 292 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | # Created by https://www.toptal.com/developers/gitignore/api/node 3 | # Edit at https://www.toptal.com/developers/gitignore?templates=node 4 | 5 | ### Node ### 6 | # Logs 7 | logs 8 | *.log 9 | npm-debug.log* 10 | yarn-debug.log* 11 | yarn-error.log* 12 | lerna-debug.log* 13 | 14 | # Diagnostic reports (https://nodejs.org/api/report.html) 15 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 16 | 17 | # Runtime data 18 | pids 19 | *.pid 20 | *.seed 21 | *.pid.lock 22 | 23 | # Directory for instrumented libs generated by jscoverage/JSCover 24 | lib-cov 25 | 26 | # Coverage directory used by tools like istanbul 27 | coverage 28 | *.lcov 29 | 30 | # nyc test coverage 31 | .nyc_output 32 | 33 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 34 | .grunt 35 | 36 | # Bower dependency directory (https://bower.io/) 37 | bower_components 38 | 39 | # node-waf configuration 40 | .lock-wscript 41 | 42 | # Compiled binary addons (https://nodejs.org/api/addons.html) 43 | build/Release 44 | 45 | # Dependency directories 46 | node_modules/ 47 | jspm_packages/ 48 | 49 | # TypeScript v1 declaration files 50 | typings/ 51 | 52 | # TypeScript cache 53 | *.tsbuildinfo 54 | 55 | # Optional npm cache directory 56 | .npm 57 | 58 | # Optional eslint cache 59 | .eslintcache 60 | 61 | # Microbundle cache 62 | .rpt2_cache/ 63 | .rts2_cache_cjs/ 64 | .rts2_cache_es/ 65 | .rts2_cache_umd/ 66 | 67 | # Optional REPL history 68 | .node_repl_history 69 | 70 | # Output of 'npm pack' 71 | *.tgz 72 | 73 | # Yarn Integrity file 74 | .yarn-integrity 75 | 76 | # dotenv environment variables file 77 | .env 78 | .env.test 79 | 80 | # parcel-bundler cache (https://parceljs.org/) 81 | .cache 82 | 83 | # Next.js build output 84 | .next 85 | 86 | # Nuxt.js build / generate output 87 | .nuxt 88 | dist 89 | 90 | # Gatsby files 91 | .cache/ 92 | # Comment in the public line in if your project uses Gatsby and not Next.js 93 | # https://nextjs.org/blog/next-9-1#public-directory-support 94 | # public 95 | 96 | # vuepress build output 97 | .vuepress/dist 98 | 99 | # Serverless directories 100 | .serverless/ 101 | 102 | # FuseBox cache 103 | .fusebox/ 104 | 105 | # DynamoDB Local files 106 | .dynamodb/ 107 | 108 | # TernJS port file 109 | .tern-port 110 | 111 | # Stores VSCode versions used for testing VSCode extensions 112 | .vscode-test 113 | 114 | # End of https://www.toptal.com/developers/gitignore/api/node 115 | 116 | 117 | #Added by cargo 118 | 119 | /target 120 | Cargo.lock 121 | 122 | *.node 123 | .pnp.* 124 | .yarn/* 125 | !.yarn/patches 126 | !.yarn/plugins 127 | !.yarn/releases 128 | !.yarn/sdks 129 | !.yarn/versions 130 | 131 | /npm 132 | -------------------------------------------------------------------------------- /.husky/.gitignore: -------------------------------------------------------------------------------- 1 | _ 2 | -------------------------------------------------------------------------------- /.husky/pre-commit: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | . "$(dirname "$0")/_/husky.sh" 3 | 4 | yarn lint-staged 5 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | target 2 | .yarn -------------------------------------------------------------------------------- /.taplo.toml: -------------------------------------------------------------------------------- 1 | exclude = ["node_modules/**/*.toml"] 2 | 3 | # https://taplo.tamasfe.dev/configuration/formatter-options.html 4 | [formatting] 5 | align_entries = true 6 | indent_tables = true 7 | reorder_keys = true 8 | column_width = 120 9 | -------------------------------------------------------------------------------- /.yarnrc.yml: -------------------------------------------------------------------------------- 1 | nodeLinker: node-modules 2 | 3 | npmAuditRegistry: 'https://registry.npmjs.org' 4 | 5 | yarnPath: .yarn/releases/yarn-4.9.1.cjs 6 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | authors = ["LongYinan "] 3 | edition = "2024" 4 | name = "napi-keyring" 5 | version = "0.1.0" 6 | 7 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html 8 | 9 | [lib] 10 | crate-type = ["cdylib"] 11 | 12 | [dependencies] 13 | anyhow = "1" 14 | napi = { version = "3.0.0-beta.1", default-features = false, features = ["napi3", "error_anyhow"] } 15 | napi-derive = "3.0.0-beta.1" 16 | 17 | [target.'cfg(target_os = "windows")'.dependencies] 18 | byteorder = "1" 19 | keyring = { version = "3", features = ["windows-native"] } 20 | windows = { version = "0.61", features = ["Win32", "Win32_Security_Credentials", "Win32_Foundation"] } 21 | 22 | [target.'cfg(target_os = "macos")'.dependencies] 23 | core-foundation = "0.10" 24 | keyring = { version = "3", features = ["apple-native"] } 25 | security-framework = "3.0" 26 | security-framework-sys = "2.12" 27 | 28 | [target.'cfg(target_os = "linux")'.dependencies] 29 | keyring = { version = "3", features = ["linux-native", "sync-secret-service", "vendored"] } 30 | secret-service = { version = "5", features = ["rt-async-io-crypto-rust"] } 31 | 32 | [target.'cfg(any(target_os = "freebsd", target_os = "openbsd"))'.dependencies] 33 | keyring = { version = "3", features = ["async-secret-service", "crypto-rust"] } 34 | secret-service = { version = "5", features = ["rt-async-io-crypto-rust"] } 35 | 36 | [build-dependencies] 37 | napi-build = "2" 38 | 39 | [profile.release] 40 | codegen-units = 1 41 | lto = true 42 | strip = "symbols" 43 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 N-API for Rust 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # `@napi-rs/keyring` 2 | 3 | ![https://github.com/Brooooooklyn/keyring-node/actions](https://github.com/Brooooooklyn/keyring-node/workflows/CI/badge.svg) 4 | [![install size](https://packagephobia.com/badge?p=@napi-rs/keyring)](https://packagephobia.com/result?p=@napi-rs/keyring) 5 | [![Downloads](https://img.shields.io/npm/dm/@napi-rs/keyring.svg?sanitize=true)](https://npmcharts.com/compare/@napi-rs/keyring?minimal=true) 6 | 7 | > https://github.com/hwchen/keyring-rs Node.js binding via https://napi.rs 8 | 9 | # Usage 10 | 11 | ```js 12 | import { Entry } from '@napi-rs/keyring' 13 | 14 | const entry = new Entry('my_service', 'my_name') 15 | entry.setPassword('topS3cr3tP4$$w0rd') 16 | const password = entry.getPassword() 17 | console.log('My password is ', password) 18 | entry.deletePassword() 19 | ``` 20 | -------------------------------------------------------------------------------- /__test__/index.spec.ts: -------------------------------------------------------------------------------- 1 | import os from 'node:os' 2 | 3 | import test from 'ava' 4 | 5 | import { Entry, findCredentials, findCredentialsAsync, AsyncEntry } from '../index' 6 | 7 | const testPassword = 'napi.rs' 8 | const testService = 'keyring-node-test-service' 9 | const testUser = 'test-user' 10 | 11 | test('Should create and get password back', (t) => { 12 | const entry = new Entry(testService, testUser) 13 | t.notThrows(() => entry.setPassword(testPassword)) 14 | t.is(entry.getPassword(), testPassword) 15 | const [{ password: pass, account }] = findCredentials(testService) 16 | t.is(pass, testPassword) 17 | t.is(account, testUser) 18 | t.notThrows(() => entry.deleteCredential()) 19 | }) 20 | 21 | test('Should create and get password back async', async (t) => { 22 | const entry = new AsyncEntry(testService, testUser) 23 | await t.notThrowsAsync(() => entry.setPassword(testPassword)) 24 | t.is(await entry.getPassword(), testPassword) 25 | const [{ password: pass, account }] = await findCredentialsAsync(testService) 26 | t.is(pass, testPassword) 27 | t.is(account, testUser) 28 | await t.notThrowsAsync(() => entry.deleteCredential()) 29 | }) 30 | 31 | let testTarget: string | undefined 32 | 33 | const platform = os.platform() 34 | switch (platform) { 35 | // macOS uses target to choose between one of the following keychains: 'User', 'System', 'Common', 'Dynamic'. Default: 'User' 36 | case 'darwin': 37 | testTarget = 'User' 38 | break 39 | // Windows uses target as the only keyring identifier. Default: {service}.{user} 40 | case 'win32': 41 | testTarget = `keyring-node-test-target.${testService}.${testUser}` 42 | break 43 | // Linux uses target as the only keyring identifier. Default: keyring-rs:{user}@{service} 44 | case 'linux': 45 | case 'freebsd': 46 | testTarget = `keyring-node-test-target:${testUser}@${testService}` 47 | break 48 | default: 49 | console.info(`Unsupported OS to test [${platform}]`) 50 | } 51 | 52 | if (testTarget && !(process.env.CI && (platform === 'linux' || platform === 'freebsd'))) { 53 | test('Entry.withTarget() should use valid target', (t) => { 54 | const entry = Entry.withTarget(testTarget!, testService, testUser) 55 | t.notThrows(() => entry.setPassword(testPassword)) 56 | t.is(entry.getPassword(), testPassword) 57 | const [{ password: pass, account }] = findCredentials(testService, testTarget!) 58 | t.is(pass, testPassword) 59 | t.is(account, testUser) 60 | t.notThrows(() => entry.deleteCredential()) 61 | }) 62 | 63 | test('AsyncEntry.withTarget() should use valid target', async (t) => { 64 | const entry = AsyncEntry.withTarget(testTarget!, testService, testUser) 65 | await t.notThrowsAsync(() => entry.setPassword(testPassword)) 66 | t.is(await entry.getPassword(), testPassword) 67 | const [{ password: pass, account }] = await findCredentialsAsync(testService, testTarget!) 68 | t.is(pass, testPassword) 69 | t.is(account, testUser) 70 | await t.notThrowsAsync(() => entry.deleteCredential()) 71 | }) 72 | } else { 73 | test.skip(`Skip testing Entry.withTarget() because of non-supported operating system: ${platform}`, (t) => { 74 | t.fail() 75 | }) 76 | } 77 | -------------------------------------------------------------------------------- /build.rs: -------------------------------------------------------------------------------- 1 | extern crate napi_build; 2 | 3 | fn main() { 4 | napi_build::setup(); 5 | } 6 | -------------------------------------------------------------------------------- /index.d.ts: -------------------------------------------------------------------------------- 1 | /* auto-generated by NAPI-RS */ 2 | /* eslint-disable */ 3 | export declare class AsyncEntry { 4 | /** 5 | * Create an entry for the given service and username. 6 | * 7 | * The default credential builder is used. 8 | */ 9 | constructor(service: string, username: string) 10 | /** 11 | * Create an entry for the given target, service, and username. 12 | * 13 | * The default credential builder is used. 14 | */ 15 | static withTarget(target: string, service: string, username: string): AsyncEntry 16 | /** 17 | * Set the password for this entry. 18 | * 19 | * Can return an [Ambiguous](Error::Ambiguous) error 20 | * if there is more than one platform credential 21 | * that matches this entry. This can only happen 22 | * on some platforms, and then only if a third-party 23 | * application wrote the ambiguous credential. 24 | */ 25 | setPassword(password: string, signal?: AbortSignal | undefined | null): Promise 26 | /** 27 | * Retrieve the password saved for this entry. 28 | * 29 | * Returns a [NoEntry](Error::NoEntry) error if there isn't one. 30 | * 31 | * Can return an [Ambiguous](Error::Ambiguous) error 32 | * if there is more than one platform credential 33 | * that matches this entry. This can only happen 34 | * on some platforms, and then only if a third-party 35 | * application wrote the ambiguous credential. 36 | */ 37 | getPassword(signal?: AbortSignal | undefined | null): Promise 38 | /** 39 | * Delete the underlying credential for this entry. 40 | * 41 | * Returns a [NoEntry](Error::NoEntry) error if there isn't one. 42 | * 43 | * Can return an [Ambiguous](Error::Ambiguous) error 44 | * if there is more than one platform credential 45 | * that matches this entry. This can only happen 46 | * on some platforms, and then only if a third-party 47 | * application wrote the ambiguous credential. 48 | * 49 | * Note: This does _not_ affect the lifetime of the [Entry] 50 | * structure, which is controlled by Rust. It only 51 | * affects the underlying credential store. 52 | */ 53 | deleteCredential(signal?: AbortSignal | undefined | null): Promise 54 | /** Alias for `deleteCredential` */ 55 | deletePassword(signal?: AbortSignal | undefined | null): Promise 56 | } 57 | 58 | export declare class Entry { 59 | /** 60 | * Create an entry for the given service and username. 61 | * 62 | * The default credential builder is used. 63 | */ 64 | constructor(service: string, username: string) 65 | /** 66 | * Create an entry for the given target, service, and username. 67 | * 68 | * The default credential builder is used. 69 | */ 70 | static withTarget(target: string, service: string, username: string): Entry 71 | /** 72 | * Set the password for this entry. 73 | * 74 | * Can return an [Ambiguous](Error::Ambiguous) error 75 | * if there is more than one platform credential 76 | * that matches this entry. This can only happen 77 | * on some platforms, and then only if a third-party 78 | * application wrote the ambiguous credential. 79 | */ 80 | setPassword(password: string): void 81 | /** 82 | * Retrieve the password saved for this entry. 83 | * 84 | * Returns a [NoEntry](Error::NoEntry) error if there isn't one. 85 | * 86 | * Can return an [Ambiguous](Error::Ambiguous) error 87 | * if there is more than one platform credential 88 | * that matches this entry. This can only happen 89 | * on some platforms, and then only if a third-party 90 | * application wrote the ambiguous credential. 91 | */ 92 | getPassword(): string | null 93 | /** 94 | * Delete the underlying credential for this entry. 95 | * 96 | * Returns a [NoEntry](Error::NoEntry) error if there isn't one. 97 | * 98 | * Can return an [Ambiguous](Error::Ambiguous) error 99 | * if there is more than one platform credential 100 | * that matches this entry. This can only happen 101 | * on some platforms, and then only if a third-party 102 | * application wrote the ambiguous credential. 103 | * 104 | * Note: This does _not_ affect the lifetime of the [Entry] 105 | * structure, which is controlled by Rust. It only 106 | * affects the underlying credential store. 107 | */ 108 | deleteCredential(): boolean 109 | /** Alias for `deleteCredential` */ 110 | deletePassword(): boolean 111 | } 112 | 113 | export interface Credential { 114 | account: string 115 | password: string 116 | } 117 | 118 | /** find credentials by service name */ 119 | export declare function findCredentials(service: string, target?: string | undefined | null): Array 120 | 121 | /** find credentials by service name */ 122 | export declare function findCredentialsAsync(service: string, target?: string | undefined | null, signal?: AbortSignal | undefined | null): Promise> 123 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | // prettier-ignore 2 | /* eslint-disable */ 3 | // @ts-nocheck 4 | /* auto-generated by NAPI-RS */ 5 | 6 | const { createRequire } = require('node:module') 7 | require = createRequire(__filename) 8 | 9 | const { readFileSync } = require('node:fs') 10 | let nativeBinding = null 11 | const loadErrors = [] 12 | 13 | const isMusl = () => { 14 | let musl = false 15 | if (process.platform === 'linux') { 16 | musl = isMuslFromFilesystem() 17 | if (musl === null) { 18 | musl = isMuslFromReport() 19 | } 20 | if (musl === null) { 21 | musl = isMuslFromChildProcess() 22 | } 23 | } 24 | return musl 25 | } 26 | 27 | const isFileMusl = (f) => f.includes('libc.musl-') || f.includes('ld-musl-') 28 | 29 | const isMuslFromFilesystem = () => { 30 | try { 31 | return readFileSync('/usr/bin/ldd', 'utf-8').includes('musl') 32 | } catch { 33 | return null 34 | } 35 | } 36 | 37 | const isMuslFromReport = () => { 38 | let report = null 39 | if (typeof process.report?.getReport === 'function') { 40 | process.report.excludeNetwork = true 41 | report = process.report.getReport() 42 | } 43 | if (!report) { 44 | return null 45 | } 46 | if (report.header && report.header.glibcVersionRuntime) { 47 | return false 48 | } 49 | if (Array.isArray(report.sharedObjects)) { 50 | if (report.sharedObjects.some(isFileMusl)) { 51 | return true 52 | } 53 | } 54 | return false 55 | } 56 | 57 | const isMuslFromChildProcess = () => { 58 | try { 59 | return require('child_process').execSync('ldd --version', { encoding: 'utf8' }).includes('musl') 60 | } catch (e) { 61 | // If we reach this case, we don't know if the system is musl or not, so is better to just fallback to false 62 | return false 63 | } 64 | } 65 | 66 | function requireNative() { 67 | if (process.env.NAPI_RS_NATIVE_LIBRARY_PATH) { 68 | try { 69 | nativeBinding = require(process.env.NAPI_RS_NATIVE_LIBRARY_PATH); 70 | } catch (err) { 71 | loadErrors.push(err) 72 | } 73 | } else if (process.platform === 'android') { 74 | if (process.arch === 'arm64') { 75 | try { 76 | return require('./keyring.android-arm64.node') 77 | } catch (e) { 78 | loadErrors.push(e) 79 | } 80 | try { 81 | return require('@napi-rs/keyring-android-arm64') 82 | } catch (e) { 83 | loadErrors.push(e) 84 | } 85 | 86 | } else if (process.arch === 'arm') { 87 | try { 88 | return require('./keyring.android-arm-eabi.node') 89 | } catch (e) { 90 | loadErrors.push(e) 91 | } 92 | try { 93 | return require('@napi-rs/keyring-android-arm-eabi') 94 | } catch (e) { 95 | loadErrors.push(e) 96 | } 97 | 98 | } else { 99 | loadErrors.push(new Error(`Unsupported architecture on Android ${process.arch}`)) 100 | } 101 | } else if (process.platform === 'win32') { 102 | if (process.arch === 'x64') { 103 | try { 104 | return require('./keyring.win32-x64-msvc.node') 105 | } catch (e) { 106 | loadErrors.push(e) 107 | } 108 | try { 109 | return require('@napi-rs/keyring-win32-x64-msvc') 110 | } catch (e) { 111 | loadErrors.push(e) 112 | } 113 | 114 | } else if (process.arch === 'ia32') { 115 | try { 116 | return require('./keyring.win32-ia32-msvc.node') 117 | } catch (e) { 118 | loadErrors.push(e) 119 | } 120 | try { 121 | return require('@napi-rs/keyring-win32-ia32-msvc') 122 | } catch (e) { 123 | loadErrors.push(e) 124 | } 125 | 126 | } else if (process.arch === 'arm64') { 127 | try { 128 | return require('./keyring.win32-arm64-msvc.node') 129 | } catch (e) { 130 | loadErrors.push(e) 131 | } 132 | try { 133 | return require('@napi-rs/keyring-win32-arm64-msvc') 134 | } catch (e) { 135 | loadErrors.push(e) 136 | } 137 | 138 | } else { 139 | loadErrors.push(new Error(`Unsupported architecture on Windows: ${process.arch}`)) 140 | } 141 | } else if (process.platform === 'darwin') { 142 | try { 143 | return require('./keyring.darwin-universal.node') 144 | } catch (e) { 145 | loadErrors.push(e) 146 | } 147 | try { 148 | return require('@napi-rs/keyring-darwin-universal') 149 | } catch (e) { 150 | loadErrors.push(e) 151 | } 152 | 153 | if (process.arch === 'x64') { 154 | try { 155 | return require('./keyring.darwin-x64.node') 156 | } catch (e) { 157 | loadErrors.push(e) 158 | } 159 | try { 160 | return require('@napi-rs/keyring-darwin-x64') 161 | } catch (e) { 162 | loadErrors.push(e) 163 | } 164 | 165 | } else if (process.arch === 'arm64') { 166 | try { 167 | return require('./keyring.darwin-arm64.node') 168 | } catch (e) { 169 | loadErrors.push(e) 170 | } 171 | try { 172 | return require('@napi-rs/keyring-darwin-arm64') 173 | } catch (e) { 174 | loadErrors.push(e) 175 | } 176 | 177 | } else { 178 | loadErrors.push(new Error(`Unsupported architecture on macOS: ${process.arch}`)) 179 | } 180 | } else if (process.platform === 'freebsd') { 181 | if (process.arch === 'x64') { 182 | try { 183 | return require('./keyring.freebsd-x64.node') 184 | } catch (e) { 185 | loadErrors.push(e) 186 | } 187 | try { 188 | return require('@napi-rs/keyring-freebsd-x64') 189 | } catch (e) { 190 | loadErrors.push(e) 191 | } 192 | 193 | } else if (process.arch === 'arm64') { 194 | try { 195 | return require('./keyring.freebsd-arm64.node') 196 | } catch (e) { 197 | loadErrors.push(e) 198 | } 199 | try { 200 | return require('@napi-rs/keyring-freebsd-arm64') 201 | } catch (e) { 202 | loadErrors.push(e) 203 | } 204 | 205 | } else { 206 | loadErrors.push(new Error(`Unsupported architecture on FreeBSD: ${process.arch}`)) 207 | } 208 | } else if (process.platform === 'linux') { 209 | if (process.arch === 'x64') { 210 | if (isMusl()) { 211 | try { 212 | return require('./keyring.linux-x64-musl.node') 213 | } catch (e) { 214 | loadErrors.push(e) 215 | } 216 | try { 217 | return require('@napi-rs/keyring-linux-x64-musl') 218 | } catch (e) { 219 | loadErrors.push(e) 220 | } 221 | 222 | } else { 223 | try { 224 | return require('./keyring.linux-x64-gnu.node') 225 | } catch (e) { 226 | loadErrors.push(e) 227 | } 228 | try { 229 | return require('@napi-rs/keyring-linux-x64-gnu') 230 | } catch (e) { 231 | loadErrors.push(e) 232 | } 233 | 234 | } 235 | } else if (process.arch === 'arm64') { 236 | if (isMusl()) { 237 | try { 238 | return require('./keyring.linux-arm64-musl.node') 239 | } catch (e) { 240 | loadErrors.push(e) 241 | } 242 | try { 243 | return require('@napi-rs/keyring-linux-arm64-musl') 244 | } catch (e) { 245 | loadErrors.push(e) 246 | } 247 | 248 | } else { 249 | try { 250 | return require('./keyring.linux-arm64-gnu.node') 251 | } catch (e) { 252 | loadErrors.push(e) 253 | } 254 | try { 255 | return require('@napi-rs/keyring-linux-arm64-gnu') 256 | } catch (e) { 257 | loadErrors.push(e) 258 | } 259 | 260 | } 261 | } else if (process.arch === 'arm') { 262 | if (isMusl()) { 263 | try { 264 | return require('./keyring.linux-arm-musleabihf.node') 265 | } catch (e) { 266 | loadErrors.push(e) 267 | } 268 | try { 269 | return require('@napi-rs/keyring-linux-arm-musleabihf') 270 | } catch (e) { 271 | loadErrors.push(e) 272 | } 273 | 274 | } else { 275 | try { 276 | return require('./keyring.linux-arm-gnueabihf.node') 277 | } catch (e) { 278 | loadErrors.push(e) 279 | } 280 | try { 281 | return require('@napi-rs/keyring-linux-arm-gnueabihf') 282 | } catch (e) { 283 | loadErrors.push(e) 284 | } 285 | 286 | } 287 | } else if (process.arch === 'riscv64') { 288 | if (isMusl()) { 289 | try { 290 | return require('./keyring.linux-riscv64-musl.node') 291 | } catch (e) { 292 | loadErrors.push(e) 293 | } 294 | try { 295 | return require('@napi-rs/keyring-linux-riscv64-musl') 296 | } catch (e) { 297 | loadErrors.push(e) 298 | } 299 | 300 | } else { 301 | try { 302 | return require('./keyring.linux-riscv64-gnu.node') 303 | } catch (e) { 304 | loadErrors.push(e) 305 | } 306 | try { 307 | return require('@napi-rs/keyring-linux-riscv64-gnu') 308 | } catch (e) { 309 | loadErrors.push(e) 310 | } 311 | 312 | } 313 | } else if (process.arch === 'ppc64') { 314 | try { 315 | return require('./keyring.linux-ppc64-gnu.node') 316 | } catch (e) { 317 | loadErrors.push(e) 318 | } 319 | try { 320 | return require('@napi-rs/keyring-linux-ppc64-gnu') 321 | } catch (e) { 322 | loadErrors.push(e) 323 | } 324 | 325 | } else if (process.arch === 's390x') { 326 | try { 327 | return require('./keyring.linux-s390x-gnu.node') 328 | } catch (e) { 329 | loadErrors.push(e) 330 | } 331 | try { 332 | return require('@napi-rs/keyring-linux-s390x-gnu') 333 | } catch (e) { 334 | loadErrors.push(e) 335 | } 336 | 337 | } else { 338 | loadErrors.push(new Error(`Unsupported architecture on Linux: ${process.arch}`)) 339 | } 340 | } else { 341 | loadErrors.push(new Error(`Unsupported OS: ${process.platform}, architecture: ${process.arch}`)) 342 | } 343 | } 344 | 345 | nativeBinding = requireNative() 346 | 347 | if (!nativeBinding || process.env.NAPI_RS_FORCE_WASI) { 348 | try { 349 | nativeBinding = require('./keyring.wasi.cjs') 350 | } catch (err) { 351 | if (process.env.NAPI_RS_FORCE_WASI) { 352 | loadErrors.push(err) 353 | } 354 | } 355 | if (!nativeBinding) { 356 | try { 357 | nativeBinding = require('@napi-rs/keyring-wasm32-wasi') 358 | } catch (err) { 359 | if (process.env.NAPI_RS_FORCE_WASI) { 360 | loadErrors.push(err) 361 | } 362 | } 363 | } 364 | } 365 | 366 | if (!nativeBinding) { 367 | if (loadErrors.length > 0) { 368 | // TODO Link to documentation with potential fixes 369 | // - The package owner could build/publish bindings for this arch 370 | // - The user may need to bundle the correct files 371 | // - The user may need to re-install node_modules to get new packages 372 | throw new Error('Failed to load native binding', { cause: loadErrors }) 373 | } 374 | throw new Error(`Failed to load native binding`) 375 | } 376 | 377 | module.exports = nativeBinding 378 | module.exports.AsyncEntry = nativeBinding.AsyncEntry 379 | module.exports.Entry = nativeBinding.Entry 380 | module.exports.findCredentials = nativeBinding.findCredentials 381 | module.exports.findCredentialsAsync = nativeBinding.findCredentialsAsync 382 | -------------------------------------------------------------------------------- /keytar.d.ts: -------------------------------------------------------------------------------- 1 | // Borrow from: https://github.com/atom/node-keytar/blob/master/keytar.d.ts 2 | 3 | // Definitions by: Milan Burda , Brendan Forster , Hari Juturu 4 | // Adapted from DefinitelyTyped: https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/keytar/index.d.ts 5 | 6 | /** 7 | * Get the stored password for the service and account. 8 | * 9 | * @param service The string service name. 10 | * @param account The string account name. 11 | * 12 | * @returns A promise for the password string. 13 | */ 14 | export declare function getPassword(service: string, account: string): Promise 15 | 16 | /** 17 | * Add the password for the service and account to the keychain. 18 | * 19 | * @param service The string service name. 20 | * @param account The string account name. 21 | * @param password The string password. 22 | * 23 | * @returns A promise for the set password completion. 24 | */ 25 | export declare function setPassword(service: string, account: string, password: string): Promise 26 | 27 | /** 28 | * Delete the stored password for the service and account. 29 | * 30 | * @param service The string service name. 31 | * @param account The string account name. 32 | * 33 | * @returns A promise for the deletion status. True on success. 34 | */ 35 | export declare function deletePassword(service: string, account: string): Promise 36 | 37 | /** 38 | * Find a password for the service in the keychain. 39 | * 40 | * @param service The string service name. 41 | * 42 | * @returns A promise for the password string. 43 | */ 44 | export declare function findPassword(service: string): Promise 45 | 46 | /** 47 | * Find all accounts and passwords for `service` in the keychain. 48 | * 49 | * @param service The string service name. 50 | * 51 | * @returns A promise for the array of found credentials. 52 | */ 53 | export declare function findCredentials(service: string): Promise> 54 | -------------------------------------------------------------------------------- /keytar.js: -------------------------------------------------------------------------------- 1 | const { AsyncEntry, findCredentialsAsync } = require('./index.js') 2 | 3 | module.exports.getPassword = function getPassword(service, account) { 4 | const entry = new AsyncEntry(service, account) 5 | return entry.getPassword() 6 | } 7 | 8 | module.exports.setPassword = function setPassword(service, account, password) { 9 | const entry = new AsyncEntry(service, account) 10 | return entry.setPassword(password) 11 | } 12 | 13 | module.exports.deletePassword = function deletePassword(service, account) { 14 | const entry = new AsyncEntry(service, account) 15 | return entry.deletePassword() 16 | } 17 | 18 | module.exports.findPassword = async function findPassword(service) { 19 | const credentials = await findCredentialsAsync(service) 20 | if (!credentials.length) { 21 | return null 22 | } 23 | return credentials[0].password 24 | } 25 | 26 | module.exports.findCredentials = findCredentialsAsync 27 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@napi-rs/keyring", 3 | "version": "1.1.8", 4 | "description": "https://github.com/hwchen/keyring-rs Node.js binding via https://napi.rs", 5 | "main": "index.js", 6 | "repository": "https://github.com/Brooooooklyn/keyring-node", 7 | "license": "MIT", 8 | "keywords": [ 9 | "napi-rs", 10 | "NAPI", 11 | "N-API", 12 | "Rust", 13 | "node-addon", 14 | "node-addon-api" 15 | ], 16 | "files": [ 17 | "index.d.ts", 18 | "index.js", 19 | "keytar.js", 20 | "keytar.d.ts" 21 | ], 22 | "napi": { 23 | "binaryName": "keyring", 24 | "targets": [ 25 | "aarch64-apple-darwin", 26 | "aarch64-unknown-linux-gnu", 27 | "aarch64-unknown-linux-musl", 28 | "aarch64-pc-windows-msvc", 29 | "x86_64-apple-darwin", 30 | "x86_64-pc-windows-msvc", 31 | "x86_64-unknown-linux-gnu", 32 | "x86_64-unknown-linux-musl", 33 | "x86_64-unknown-freebsd", 34 | "i686-pc-windows-msvc", 35 | "armv7-unknown-linux-gnueabihf", 36 | "riscv64gc-unknown-linux-gnu" 37 | ] 38 | }, 39 | "engines": { 40 | "node": ">= 10" 41 | }, 42 | "publishConfig": { 43 | "registry": "https://registry.npmjs.org/", 44 | "access": "public" 45 | }, 46 | "scripts": { 47 | "artifacts": "napi artifacts", 48 | "build": "napi build --platform --release", 49 | "build:debug": "napi build --platform", 50 | "format": "run-p format:prettier format:rs format:toml", 51 | "format:prettier": "prettier . -w", 52 | "format:toml": "taplo format", 53 | "format:rs": "cargo fmt", 54 | "lint": "oxlint", 55 | "prepublishOnly": "napi prepublish -t npm", 56 | "test": "ava -s", 57 | "version": "napi version" 58 | }, 59 | "devDependencies": { 60 | "@napi-rs/cli": "^3.0.0-alpha.80", 61 | "@oxc-node/core": "^0.0.27", 62 | "@taplo/cli": "^0.7.0", 63 | "@types/node": "^22.15.3", 64 | "ava": "^6.3.0", 65 | "chalk": "^5.4.1", 66 | "husky": "^9.1.7", 67 | "lint-staged": "^16.0.0", 68 | "npm-run-all2": "^8.0.1", 69 | "oxlint": "^0.17.0", 70 | "prettier": "^3.5.3", 71 | "typescript": "^5.8.3" 72 | }, 73 | "lint-staged": { 74 | "*.@(js|ts|tsx)": [ 75 | "oxlint --fix" 76 | ], 77 | "*.@(js|ts|tsx|yml|yaml|md|json)": [ 78 | "prettier --write" 79 | ], 80 | "*.toml": [ 81 | "taplo format" 82 | ] 83 | }, 84 | "ava": { 85 | "nodeArguments": [ 86 | "--import", 87 | "@oxc-node/core/register" 88 | ], 89 | "extensions": { 90 | "ts": "module" 91 | }, 92 | "timeout": "2m", 93 | "workerThreads": false, 94 | "environmentVariables": { 95 | "TS_NODE_PROJECT": "./tsconfig.json" 96 | } 97 | }, 98 | "prettier": { 99 | "printWidth": 120, 100 | "semi": false, 101 | "trailingComma": "all", 102 | "singleQuote": true, 103 | "arrowParens": "always" 104 | }, 105 | "packageManager": "yarn@4.9.1", 106 | "funding": { 107 | "type": "github", 108 | "url": "https://github.com/sponsors/Brooooooklyn" 109 | } 110 | } 111 | -------------------------------------------------------------------------------- /rustfmt.toml: -------------------------------------------------------------------------------- 1 | tab_spaces = 2 2 | -------------------------------------------------------------------------------- /src/async_entry.rs: -------------------------------------------------------------------------------- 1 | use std::sync::Arc; 2 | 3 | use napi::bindgen_prelude::*; 4 | use napi_derive::napi; 5 | 6 | #[napi] 7 | pub struct AsyncEntry { 8 | inner: Arc, 9 | } 10 | 11 | #[napi] 12 | impl AsyncEntry { 13 | #[napi(constructor)] 14 | /// Create an entry for the given service and username. 15 | /// 16 | /// The default credential builder is used. 17 | pub fn new(service: String, username: String) -> Result { 18 | Ok(Self { 19 | inner: Arc::new(keyring::Entry::new(&service, &username).map_err(anyhow::Error::from)?), 20 | }) 21 | } 22 | 23 | #[napi(factory)] 24 | /// Create an entry for the given target, service, and username. 25 | /// 26 | /// The default credential builder is used. 27 | pub fn with_target(target: String, service: String, username: String) -> Result { 28 | Ok(Self { 29 | inner: Arc::new( 30 | keyring::Entry::new_with_target(&target, &service, &username) 31 | .map_err(anyhow::Error::from)?, 32 | ), 33 | }) 34 | } 35 | 36 | #[napi(ts_return_type = "Promise")] 37 | /// Set the password for this entry. 38 | /// 39 | /// Can return an [Ambiguous](Error::Ambiguous) error 40 | /// if there is more than one platform credential 41 | /// that matches this entry. This can only happen 42 | /// on some platforms, and then only if a third-party 43 | /// application wrote the ambiguous credential. 44 | pub fn set_password( 45 | &self, 46 | password: String, 47 | signal: Option, 48 | ) -> AsyncTask { 49 | AsyncTask::with_optional_signal( 50 | EntryTask { 51 | inner: self.inner.clone(), 52 | kind: TaskKind::SetPassword(password), 53 | }, 54 | signal, 55 | ) 56 | } 57 | 58 | #[napi(ts_return_type = "Promise")] 59 | /// Retrieve the password saved for this entry. 60 | /// 61 | /// Returns a [NoEntry](Error::NoEntry) error if there isn't one. 62 | /// 63 | /// Can return an [Ambiguous](Error::Ambiguous) error 64 | /// if there is more than one platform credential 65 | /// that matches this entry. This can only happen 66 | /// on some platforms, and then only if a third-party 67 | /// application wrote the ambiguous credential. 68 | pub fn get_password(&self, signal: Option) -> AsyncTask { 69 | AsyncTask::with_optional_signal( 70 | EntryTask { 71 | inner: self.inner.clone(), 72 | kind: TaskKind::GetPassword, 73 | }, 74 | signal, 75 | ) 76 | } 77 | 78 | #[napi(ts_return_type = "Promise")] 79 | /// Delete the underlying credential for this entry. 80 | /// 81 | /// Returns a [NoEntry](Error::NoEntry) error if there isn't one. 82 | /// 83 | /// Can return an [Ambiguous](Error::Ambiguous) error 84 | /// if there is more than one platform credential 85 | /// that matches this entry. This can only happen 86 | /// on some platforms, and then only if a third-party 87 | /// application wrote the ambiguous credential. 88 | /// 89 | /// Note: This does _not_ affect the lifetime of the [Entry] 90 | /// structure, which is controlled by Rust. It only 91 | /// affects the underlying credential store. 92 | pub fn delete_credential(&self, signal: Option) -> AsyncTask { 93 | AsyncTask::with_optional_signal( 94 | EntryTask { 95 | inner: self.inner.clone(), 96 | kind: TaskKind::DeleteCredential, 97 | }, 98 | signal, 99 | ) 100 | } 101 | 102 | #[napi] 103 | /// Alias for `deleteCredential` 104 | pub fn delete_password(&self, signal: Option) -> AsyncTask { 105 | self.delete_credential(signal) 106 | } 107 | } 108 | 109 | #[allow(clippy::enum_variant_names)] 110 | enum TaskKind { 111 | SetPassword(String), 112 | GetPassword, 113 | DeleteCredential, 114 | } 115 | 116 | pub struct EntryTask { 117 | inner: Arc, 118 | kind: TaskKind, 119 | } 120 | 121 | #[napi] 122 | impl Task for EntryTask { 123 | type Output = Option>; 124 | type JsValue = Option>; 125 | 126 | fn compute(&mut self) -> Result { 127 | match self.kind { 128 | TaskKind::GetPassword => Ok(self.inner.get_password().ok().map(Either::A)), 129 | TaskKind::DeleteCredential => Ok(Some(Either::B(self.inner.delete_credential().is_ok()))), 130 | TaskKind::SetPassword(ref password) => { 131 | self 132 | .inner 133 | .set_password(password) 134 | .map_err(anyhow::Error::from)?; 135 | Ok(None) 136 | } 137 | } 138 | } 139 | 140 | fn resolve(&mut self, _env: Env, output: Self::Output) -> Result { 141 | Ok(output) 142 | } 143 | } 144 | -------------------------------------------------------------------------------- /src/entry.rs: -------------------------------------------------------------------------------- 1 | use napi::bindgen_prelude::*; 2 | use napi_derive::napi; 3 | 4 | #[cfg(target_os = "linux")] 5 | use crate::linux_credential_builder::LinuxCredentialBuilder; 6 | 7 | #[napi] 8 | pub struct Entry { 9 | inner: keyring::Entry, 10 | } 11 | 12 | #[cfg(target_os = "linux")] 13 | fn create_linux_credential_builder() -> anyhow::Result<()> { 14 | let backend_result = LinuxCredentialBuilder::new(); 15 | match backend_result { 16 | Ok(backend) => { 17 | keyring::set_default_credential_builder(Box::new(backend)); 18 | Ok(()) 19 | } 20 | Err(e) => Err(anyhow::Error::msg(format!( 21 | "Failed to create LinuxCredentialBuilder: {}", 22 | e 23 | ))), 24 | } 25 | } 26 | 27 | #[napi] 28 | impl Entry { 29 | #[napi(constructor)] 30 | /// Create an entry for the given service and username. 31 | /// 32 | /// The default credential builder is used. 33 | pub fn new(service: String, username: String) -> Result { 34 | #[cfg(target_os = "linux")] 35 | create_linux_credential_builder()?; 36 | 37 | Ok(Self { 38 | inner: keyring::Entry::new(&service, &username).map_err(anyhow::Error::from)?, 39 | }) 40 | } 41 | 42 | #[napi(factory)] 43 | /// Create an entry for the given target, service, and username. 44 | /// 45 | /// The default credential builder is used. 46 | pub fn with_target(target: String, service: String, username: String) -> Result { 47 | #[cfg(target_os = "linux")] 48 | create_linux_credential_builder()?; 49 | 50 | Ok(Self { 51 | inner: keyring::Entry::new_with_target(&target, &service, &username) 52 | .map_err(anyhow::Error::from)?, 53 | }) 54 | } 55 | 56 | #[napi] 57 | /// Set the password for this entry. 58 | /// 59 | /// Can return an [Ambiguous](Error::Ambiguous) error 60 | /// if there is more than one platform credential 61 | /// that matches this entry. This can only happen 62 | /// on some platforms, and then only if a third-party 63 | /// application wrote the ambiguous credential. 64 | pub fn set_password(&self, password: String) -> Result<()> { 65 | self 66 | .inner 67 | .set_password(&password) 68 | .map_err(anyhow::Error::from)?; 69 | Ok(()) 70 | } 71 | 72 | #[napi] 73 | /// Retrieve the password saved for this entry. 74 | /// 75 | /// Returns a [NoEntry](Error::NoEntry) error if there isn't one. 76 | /// 77 | /// Can return an [Ambiguous](Error::Ambiguous) error 78 | /// if there is more than one platform credential 79 | /// that matches this entry. This can only happen 80 | /// on some platforms, and then only if a third-party 81 | /// application wrote the ambiguous credential. 82 | pub fn get_password(&self) -> Option { 83 | self.inner.get_password().ok() 84 | } 85 | 86 | #[napi] 87 | /// Delete the underlying credential for this entry. 88 | /// 89 | /// Returns a [NoEntry](Error::NoEntry) error if there isn't one. 90 | /// 91 | /// Can return an [Ambiguous](Error::Ambiguous) error 92 | /// if there is more than one platform credential 93 | /// that matches this entry. This can only happen 94 | /// on some platforms, and then only if a third-party 95 | /// application wrote the ambiguous credential. 96 | /// 97 | /// Note: This does _not_ affect the lifetime of the [Entry] 98 | /// structure, which is controlled by Rust. It only 99 | /// affects the underlying credential store. 100 | pub fn delete_credential(&self) -> bool { 101 | self 102 | .inner 103 | .delete_credential() 104 | .map_err(anyhow::Error::from) 105 | .is_ok() 106 | } 107 | 108 | #[napi] 109 | /// Alias for `deleteCredential` 110 | pub fn delete_password(&self) -> bool { 111 | self.delete_credential() 112 | } 113 | } 114 | 115 | #[napi(object)] 116 | pub struct Credential { 117 | pub account: String, 118 | pub password: String, 119 | } 120 | 121 | pub struct FindCredentials { 122 | service: String, 123 | target: Option, 124 | } 125 | 126 | #[napi] 127 | impl Task for FindCredentials { 128 | type Output = Vec; 129 | type JsValue = Vec; 130 | 131 | #[inline] 132 | fn compute(&mut self) -> Result { 133 | Ok( 134 | find_credentials_(&self.service, self.target.clone())? 135 | .into_iter() 136 | .map(|(account, password)| Credential { account, password }) 137 | .collect(), 138 | ) 139 | } 140 | 141 | fn resolve(&mut self, _env: Env, output: Self::Output) -> Result { 142 | Ok(output) 143 | } 144 | } 145 | 146 | #[napi] 147 | /// find credentials by service name 148 | pub fn find_credentials(service: String, target: Option) -> Result> { 149 | Ok( 150 | find_credentials_(&service, target)? 151 | .into_iter() 152 | .map(|(account, password)| Credential { account, password }) 153 | .collect(), 154 | ) 155 | } 156 | 157 | #[napi] 158 | /// find credentials by service name 159 | pub fn find_credentials_async( 160 | service: String, 161 | target: Option, 162 | signal: Option, 163 | ) -> AsyncTask { 164 | AsyncTask::with_optional_signal(FindCredentials { service, target }, signal) 165 | } 166 | 167 | #[cfg(target_os = "macos")] 168 | fn find_credentials_( 169 | service: &str, 170 | _target: Option, 171 | ) -> std::result::Result, anyhow::Error> { 172 | use std::{ffi::c_void, ptr}; 173 | 174 | use core_foundation::{ 175 | array::CFArray, 176 | base::{CFGetTypeID, CFRelease, CFType, FromVoid, TCFType}, 177 | boolean::CFBoolean, 178 | dictionary::CFDictionary, 179 | string::CFString, 180 | }; 181 | use security_framework::item::{Reference, SearchResult}; 182 | use security_framework_sys::{ 183 | base::errSecItemNotFound, 184 | item::{ 185 | kSecAttrAccount, kSecAttrService, kSecClass, kSecClassGenericPassword, kSecMatchLimit, 186 | kSecMatchLimitAll, kSecReturnAttributes, kSecReturnRef, 187 | }, 188 | keychain_item::SecItemCopyMatching, 189 | }; 190 | 191 | let mut params = Vec::with_capacity(5); 192 | let k_service = CFString::new(service); 193 | params.push(( 194 | unsafe { CFString::wrap_under_get_rule(kSecClass) }, 195 | unsafe { CFType::wrap_under_get_rule(kSecClassGenericPassword.cast()) }, 196 | )); 197 | params.push(( 198 | unsafe { CFString::wrap_under_get_rule(kSecAttrService) }, 199 | k_service.as_CFType(), 200 | )); 201 | params.push(( 202 | unsafe { CFString::wrap_under_get_rule(kSecMatchLimit) }, 203 | unsafe { CFString::wrap_under_get_rule(kSecMatchLimitAll).as_CFType() }, 204 | )); 205 | params.push(( 206 | unsafe { CFString::wrap_under_get_rule(kSecReturnRef) }, 207 | CFBoolean::true_value().as_CFType(), 208 | )); 209 | params.push(( 210 | unsafe { CFString::wrap_under_get_rule(kSecReturnAttributes) }, 211 | CFBoolean::true_value().as_CFType(), 212 | )); 213 | let params = CFDictionary::from_CFType_pairs(¶ms); 214 | 215 | let mut ret = ptr::null(); 216 | if let Err(err) = cvt(unsafe { SecItemCopyMatching(params.as_concrete_TypeRef(), &mut ret) }) { 217 | // not found is acceptable 218 | if err.code() == errSecItemNotFound { 219 | return Ok(vec![]); 220 | } 221 | return Err(anyhow::Error::from(err)); 222 | }; 223 | if ret.is_null() { 224 | // SecItemCopyMatching returns NULL if no load_* was specified, 225 | // causing a segfault. 226 | return Ok(vec![]); 227 | } 228 | let type_id = unsafe { CFGetTypeID(ret) }; 229 | 230 | let mut items = vec![]; 231 | 232 | if type_id == CFArray::::type_id() { 233 | let array: CFArray = unsafe { CFArray::wrap_under_create_rule(ret as *mut _) }; 234 | items.extend( 235 | array 236 | .iter() 237 | .map(|item| unsafe { get_item(item.as_CFTypeRef()) }), 238 | ); 239 | } else { 240 | items.push(unsafe { get_item(ret) }); 241 | // This is a bit janky, but get_item uses wrap_under_get_rule 242 | // which bumps the refcount but we want create semantics 243 | unsafe { CFRelease(ret) }; 244 | } 245 | let found = items 246 | .iter() 247 | .filter_map(|item| { 248 | match item { 249 | SearchResult::Ref(Reference::KeychainItem(keychain)) => { 250 | let dict: CFDictionary = 251 | unsafe { CFDictionary::wrap_under_get_rule(keychain.as_CFTypeRef().cast()) }; 252 | if let Some(account) = dict.find(unsafe { kSecAttrAccount }) { 253 | let account = unsafe { CFString::from_void(*account) }; 254 | let account = account.to_string(); 255 | if let Ok(password) = 256 | security_framework::passwords::get_generic_password(service, &account) 257 | { 258 | return Some((account.to_string(), unsafe { 259 | String::from_utf8_unchecked(password) 260 | })); 261 | } 262 | } 263 | } 264 | SearchResult::Dict(dict) => { 265 | if let Some(account) = dict.find(unsafe { kSecAttrAccount }.cast()) { 266 | let account = unsafe { CFString::from_void(*account) }; 267 | let account = account.to_string(); 268 | if let Ok(password) = 269 | security_framework::passwords::get_generic_password(service, &account) 270 | { 271 | return Some((account.to_string(), unsafe { 272 | String::from_utf8_unchecked(password) 273 | })); 274 | } 275 | } 276 | } 277 | _ => {} 278 | }; 279 | None 280 | }) 281 | .collect::>(); 282 | Ok(found) 283 | } 284 | 285 | #[cfg(target_os = "macos")] 286 | unsafe fn get_item( 287 | item: core_foundation::base::CFTypeRef, 288 | ) -> security_framework::item::SearchResult { 289 | use core_foundation::{ 290 | base::{CFGetTypeID, TCFType}, 291 | data::CFData, 292 | dictionary::CFDictionary, 293 | }; 294 | use security_framework::os::macos::keychain_item::SecKeychainItem; 295 | use security_framework::{ 296 | certificate::SecCertificate, 297 | identity::SecIdentity, 298 | item::{Reference, SearchResult}, 299 | key::SecKey, 300 | }; 301 | 302 | let type_id = unsafe { CFGetTypeID(item) }; 303 | 304 | if type_id == CFData::type_id() { 305 | let data = unsafe { CFData::wrap_under_get_rule(item as *mut _) }; 306 | let mut buf = Vec::new(); 307 | buf.extend_from_slice(data.bytes()); 308 | return SearchResult::Data(buf); 309 | } 310 | 311 | if type_id == CFDictionary::<*const u8, *const u8>::type_id() { 312 | return SearchResult::Dict(unsafe { CFDictionary::wrap_under_get_rule(item as *mut _) }); 313 | } 314 | 315 | if type_id == SecKeychainItem::type_id() { 316 | return SearchResult::Ref(Reference::KeychainItem(unsafe { 317 | SecKeychainItem::wrap_under_get_rule(item as *mut _) 318 | })); 319 | } 320 | 321 | let reference = if type_id == SecCertificate::type_id() { 322 | Reference::Certificate(unsafe { SecCertificate::wrap_under_get_rule(item as *mut _) }) 323 | } else if type_id == SecKey::type_id() { 324 | Reference::Key(unsafe { SecKey::wrap_under_get_rule(item as *mut _) }) 325 | } else if type_id == SecIdentity::type_id() { 326 | Reference::Identity(unsafe { SecIdentity::wrap_under_get_rule(item as *mut _) }) 327 | } else { 328 | // panic!("Got bad type from SecItemCopyMatching: {}", type_id); 329 | return SearchResult::Other; 330 | }; 331 | 332 | SearchResult::Ref(reference) 333 | } 334 | 335 | #[cfg(target_os = "macos")] 336 | #[allow(non_upper_case_globals)] 337 | #[inline(always)] 338 | fn cvt( 339 | err: core_foundation::base::OSStatus, 340 | ) -> std::result::Result<(), security_framework::base::Error> { 341 | use security_framework_sys::base::errSecSuccess; 342 | 343 | match err { 344 | errSecSuccess => Ok(()), 345 | err => Err(security_framework::base::Error::from_code(err)), 346 | } 347 | } 348 | 349 | #[cfg(target_os = "windows")] 350 | fn find_credentials_( 351 | service: &str, 352 | target: Option, 353 | ) -> std::result::Result, anyhow::Error> { 354 | use byteorder::ByteOrder; 355 | use windows::Win32::Foundation::ERROR_NOT_FOUND; 356 | use windows::Win32::Security::Credentials::{ 357 | CRED_ENUMERATE_FLAGS, CRED_TYPE_DOMAIN_PASSWORD, CRED_TYPE_GENERIC, CREDENTIALW, 358 | CredEnumerateW, CredFree, 359 | }; 360 | use windows::core::PCWSTR; 361 | 362 | fn to_wstr(s: &str) -> Vec { 363 | s.encode_utf16().chain(std::iter::once(0)).collect() 364 | } 365 | 366 | fn extract_password(credential: &CREDENTIALW) -> std::result::Result { 367 | // get password blob 368 | let blob_pointer: *const u8 = credential.CredentialBlob; 369 | let blob_len: usize = credential.CredentialBlobSize as usize; 370 | let blob = unsafe { std::slice::from_raw_parts(blob_pointer, blob_len) }; 371 | // 3rd parties may write credential data with an odd number of bytes, 372 | // so we make sure that we don't try to decode those as utf16 373 | if blob.len() % 2 != 0 { 374 | return Err(anyhow::anyhow!("Not a valid utf16 blob")); 375 | } 376 | // Now we know this _can_ be a UTF-16 string, so convert it to 377 | // as UTF-16 vector and then try to decode it. 378 | let mut blob_u16 = vec![0; blob.len() / 2]; 379 | byteorder::LittleEndian::read_u16_into(blob, &mut blob_u16); 380 | String::from_utf16(&blob_u16).map_err(anyhow::Error::from) 381 | } 382 | 383 | unsafe fn from_wstr(ws: *const u16) -> String { 384 | // null pointer case, return empty string 385 | if ws.is_null() { 386 | return String::new(); 387 | } 388 | // this code from https://stackoverflow.com/a/48587463/558006 389 | let len = (0..).take_while(|&i| unsafe { *ws.offset(i) } != 0).count(); 390 | let slice = unsafe { std::slice::from_raw_parts(ws, len) }; 391 | String::from_utf16_lossy(slice) 392 | } 393 | 394 | unsafe { 395 | let mut count: u32 = 0; 396 | let mut p_credentials: *mut *mut CREDENTIALW = std::ptr::null_mut(); 397 | 398 | let filter = target.unwrap_or_else(|| format!("*.{service}")); 399 | // Enumerate credentials. 400 | if let Err(err) = CredEnumerateW( 401 | PCWSTR::from_raw(to_wstr(&filter).as_ptr()), 402 | Some(CRED_ENUMERATE_FLAGS::default()), 403 | &mut count, 404 | &mut p_credentials, 405 | ) { 406 | CredFree(p_credentials.cast()); 407 | if err == ERROR_NOT_FOUND.to_hresult().into() { 408 | return Ok(vec![]); 409 | } else { 410 | return Err(anyhow::anyhow!("Failed to enumerate credentials {:?}", err)); 411 | } 412 | } 413 | let mut credentials_vec: Vec<(String, String)> = vec![]; 414 | let credentials = std::slice::from_raw_parts(p_credentials, count as usize); 415 | for credential in credentials.iter() { 416 | if let Some(credential) = credential.as_mut() { 417 | if credential.Type != CRED_TYPE_GENERIC && credential.Type != CRED_TYPE_DOMAIN_PASSWORD { 418 | continue; 419 | } 420 | 421 | let user = from_wstr(credential.UserName.as_ptr().cast()); 422 | let password = extract_password(credential)?; 423 | 424 | credentials_vec.push((user, password)); 425 | } 426 | } 427 | 428 | CredFree(p_credentials as *mut _); 429 | return Ok(credentials_vec); 430 | } 431 | } 432 | 433 | #[cfg(any(target_os = "linux", target_os = "freebsd"))] 434 | fn find_credentials_( 435 | service: &str, 436 | _target: Option, 437 | ) -> std::result::Result, anyhow::Error> { 438 | use std::collections::HashMap; 439 | 440 | use anyhow::Ok; 441 | use secret_service::{EncryptionType, SearchItemsResult, blocking::SecretService}; 442 | 443 | let mut result = Vec::new(); 444 | let secret_service = SecretService::connect(EncryptionType::Dh).map_err(anyhow::Error::from)?; 445 | let mut attrs = HashMap::with_capacity(1); 446 | attrs.insert("service", service); 447 | let SearchItemsResult { locked, unlocked } = secret_service 448 | .search_items(attrs) 449 | .map_err(anyhow::Error::from)?; 450 | for item in locked.iter().chain(unlocked.iter()) { 451 | let password = item.get_secret().map_err(anyhow::Error::from)?; 452 | let password = unsafe { String::from_utf8_unchecked(password) }; 453 | let attrs = item.get_attributes().map_err(anyhow::Error::from)?; 454 | if let Some(user) = attrs.get("username") { 455 | result.push((user.clone(), password.to_string())); 456 | } 457 | } 458 | Ok(result) 459 | } 460 | -------------------------------------------------------------------------------- /src/lib.rs: -------------------------------------------------------------------------------- 1 | #![deny(clippy::all)] 2 | 3 | pub mod async_entry; 4 | pub mod entry; 5 | 6 | #[cfg(target_os = "linux")] 7 | mod linux_credential_builder; 8 | -------------------------------------------------------------------------------- /src/linux_credential_builder.rs: -------------------------------------------------------------------------------- 1 | use keyring::{ 2 | credential::{CredentialApi, CredentialBuilderApi}, 3 | keyutils::KeyutilsCredential, 4 | secret_service::SsCredential, 5 | }; 6 | 7 | use std::any::Any; 8 | use std::error::Error; 9 | 10 | /// A custom builder that falls back to keyutils if secret-service is not available. 11 | #[derive(Debug)] 12 | pub struct LinuxCredentialBuilder { 13 | secret_service_missing: bool, 14 | } 15 | 16 | impl LinuxCredentialBuilder { 17 | pub fn new() -> Result> { 18 | let ss = SsCredential::new_with_target(None, "test", "user")?; 19 | 20 | let missing = matches!( 21 | ss.map_matching_items(|_item| Ok(()), false), 22 | Err(keyring::Error::PlatformFailure(_x)) 23 | ); 24 | 25 | Ok(Self { 26 | secret_service_missing: missing, 27 | }) 28 | } 29 | } 30 | 31 | impl CredentialBuilderApi for LinuxCredentialBuilder { 32 | fn build( 33 | &self, 34 | target: Option<&str>, 35 | service: &str, 36 | user: &str, 37 | ) -> Result, keyring::Error> { 38 | if !self.secret_service_missing { 39 | let cred = SsCredential::new_with_target(target, service, user)?; 40 | return Ok(Box::new(cred)); 41 | } 42 | 43 | let cred = KeyutilsCredential::new_with_target(target, service, user)?; 44 | Ok(Box::new(cred)) 45 | } 46 | 47 | fn as_any(&self) -> &dyn Any { 48 | self 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ESNext", 4 | "strict": true, 5 | "moduleResolution": "node", 6 | "module": "ESNext", 7 | "noUnusedLocals": true, 8 | "noUnusedParameters": true, 9 | "esModuleInterop": true, 10 | "allowSyntheticDefaultImports": true 11 | }, 12 | "include": ["."], 13 | "exclude": ["node_modules"] 14 | } 15 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # This file is generated by running "yarn install" inside your project. 2 | # Manual changes might be lost - proceed with caution! 3 | 4 | __metadata: 5 | version: 8 6 | cacheKey: 10c0 7 | 8 | "@emnapi/core@npm:^1.4.3": 9 | version: 1.4.3 10 | resolution: "@emnapi/core@npm:1.4.3" 11 | dependencies: 12 | "@emnapi/wasi-threads": "npm:1.0.2" 13 | tslib: "npm:^2.4.0" 14 | checksum: 10c0/e30101d16d37ef3283538a35cad60e22095aff2403fb9226a35330b932eb6740b81364d525537a94eb4fb51355e48ae9b10d779c0dd1cdcd55d71461fe4b45c7 15 | languageName: node 16 | linkType: hard 17 | 18 | "@emnapi/runtime@npm:^1.4.3": 19 | version: 1.4.3 20 | resolution: "@emnapi/runtime@npm:1.4.3" 21 | dependencies: 22 | tslib: "npm:^2.4.0" 23 | checksum: 10c0/3b7ab72d21cb4e034f07df80165265f85f445ef3f581d1bc87b67e5239428baa00200b68a7d5e37a0425c3a78320b541b07f76c5530f6f6f95336a6294ebf30b 24 | languageName: node 25 | linkType: hard 26 | 27 | "@emnapi/wasi-threads@npm:1.0.2": 28 | version: 1.0.2 29 | resolution: "@emnapi/wasi-threads@npm:1.0.2" 30 | dependencies: 31 | tslib: "npm:^2.4.0" 32 | checksum: 10c0/f0621b1fc715221bd2d8332c0ca922617bcd77cdb3050eae50a124eb8923c54fa425d23982dc8f29d505c8798a62d1049bace8b0686098ff9dd82270e06d772e 33 | languageName: node 34 | linkType: hard 35 | 36 | "@inquirer/checkbox@npm:^4.1.6": 37 | version: 4.1.6 38 | resolution: "@inquirer/checkbox@npm:4.1.6" 39 | dependencies: 40 | "@inquirer/core": "npm:^10.1.11" 41 | "@inquirer/figures": "npm:^1.0.11" 42 | "@inquirer/type": "npm:^3.0.6" 43 | ansi-escapes: "npm:^4.3.2" 44 | yoctocolors-cjs: "npm:^2.1.2" 45 | peerDependencies: 46 | "@types/node": ">=18" 47 | peerDependenciesMeta: 48 | "@types/node": 49 | optional: true 50 | checksum: 10c0/422d0b2ddf625b55ed3f5f72b094d7a26eecc810c50fdea3f395b88c32e07d43ad2a8b718319a9cb00fa637108665845b106f100020e6797a687c510a9211e96 51 | languageName: node 52 | linkType: hard 53 | 54 | "@inquirer/confirm@npm:^5.1.10": 55 | version: 5.1.10 56 | resolution: "@inquirer/confirm@npm:5.1.10" 57 | dependencies: 58 | "@inquirer/core": "npm:^10.1.11" 59 | "@inquirer/type": "npm:^3.0.6" 60 | peerDependencies: 61 | "@types/node": ">=18" 62 | peerDependenciesMeta: 63 | "@types/node": 64 | optional: true 65 | checksum: 10c0/71a1b1c1007b0edd06984c356a9e13764ca917bdbf947a59ce0f55084d36e653daffe56b3806fc9959337aae80ff7b37eeaf01a40746e5f60de86475fdf0502a 66 | languageName: node 67 | linkType: hard 68 | 69 | "@inquirer/core@npm:^10.1.11": 70 | version: 10.1.11 71 | resolution: "@inquirer/core@npm:10.1.11" 72 | dependencies: 73 | "@inquirer/figures": "npm:^1.0.11" 74 | "@inquirer/type": "npm:^3.0.6" 75 | ansi-escapes: "npm:^4.3.2" 76 | cli-width: "npm:^4.1.0" 77 | mute-stream: "npm:^2.0.0" 78 | signal-exit: "npm:^4.1.0" 79 | wrap-ansi: "npm:^6.2.0" 80 | yoctocolors-cjs: "npm:^2.1.2" 81 | peerDependencies: 82 | "@types/node": ">=18" 83 | peerDependenciesMeta: 84 | "@types/node": 85 | optional: true 86 | checksum: 10c0/b71a71d527cf612b675a7b8db815ace31ba9db2df3bf00f4a1c1f4f396e9fb9ba32f4824e26a626191c5c50aaa4b53ed14b4c324714876f345fe630ca2d9432f 87 | languageName: node 88 | linkType: hard 89 | 90 | "@inquirer/editor@npm:^4.2.11": 91 | version: 4.2.11 92 | resolution: "@inquirer/editor@npm:4.2.11" 93 | dependencies: 94 | "@inquirer/core": "npm:^10.1.11" 95 | "@inquirer/type": "npm:^3.0.6" 96 | external-editor: "npm:^3.1.0" 97 | peerDependencies: 98 | "@types/node": ">=18" 99 | peerDependenciesMeta: 100 | "@types/node": 101 | optional: true 102 | checksum: 10c0/5ba956b83e51223112bb896ebf7e39a87a14f0eb81a49e0453e64aabed80533483f74da80a8855b4adced123a2758cc6c73dac9aa9e4d5a7d80c4eb9b70db935 103 | languageName: node 104 | linkType: hard 105 | 106 | "@inquirer/expand@npm:^4.0.13": 107 | version: 4.0.13 108 | resolution: "@inquirer/expand@npm:4.0.13" 109 | dependencies: 110 | "@inquirer/core": "npm:^10.1.11" 111 | "@inquirer/type": "npm:^3.0.6" 112 | yoctocolors-cjs: "npm:^2.1.2" 113 | peerDependencies: 114 | "@types/node": ">=18" 115 | peerDependenciesMeta: 116 | "@types/node": 117 | optional: true 118 | checksum: 10c0/b08ce6f7f5d61ce2d4696d18beb3769ab6be31bb139d806497304669d478393d28a91b69a0596e045f6b8a0f83f1da08e1b34a33ca71b23e78d60d32ddc103a6 119 | languageName: node 120 | linkType: hard 121 | 122 | "@inquirer/figures@npm:^1.0.11": 123 | version: 1.0.11 124 | resolution: "@inquirer/figures@npm:1.0.11" 125 | checksum: 10c0/6270e24eebbe42bbc4e7f8e761e906be66b4896787f31ab3e7484ad271c8edc90bce4ec20e232a5da447aee4fc73803397b2dda8cf645f4f7eea83e773b44e1e 126 | languageName: node 127 | linkType: hard 128 | 129 | "@inquirer/input@npm:^4.1.10": 130 | version: 4.1.10 131 | resolution: "@inquirer/input@npm:4.1.10" 132 | dependencies: 133 | "@inquirer/core": "npm:^10.1.11" 134 | "@inquirer/type": "npm:^3.0.6" 135 | peerDependencies: 136 | "@types/node": ">=18" 137 | peerDependenciesMeta: 138 | "@types/node": 139 | optional: true 140 | checksum: 10c0/75f42ff1a55324d23be6aadb6ad323447c89e9265ce3be069c4c7d10c8ce0520797b52d19eba2334406d29abcc4052309a48a13f021a4d4269e961533d183c81 141 | languageName: node 142 | linkType: hard 143 | 144 | "@inquirer/number@npm:^3.0.13": 145 | version: 3.0.13 146 | resolution: "@inquirer/number@npm:3.0.13" 147 | dependencies: 148 | "@inquirer/core": "npm:^10.1.11" 149 | "@inquirer/type": "npm:^3.0.6" 150 | peerDependencies: 151 | "@types/node": ">=18" 152 | peerDependenciesMeta: 153 | "@types/node": 154 | optional: true 155 | checksum: 10c0/9f0b7a3b3d78e426fbe21c739f318e0ecaa7633ed1b75bb05590c3d74ae447c92413e5c10bcdf1c6ff62e48d14cd01f7fbd29a2ade33fdb633caec8b21d61185 156 | languageName: node 157 | linkType: hard 158 | 159 | "@inquirer/password@npm:^4.0.13": 160 | version: 4.0.13 161 | resolution: "@inquirer/password@npm:4.0.13" 162 | dependencies: 163 | "@inquirer/core": "npm:^10.1.11" 164 | "@inquirer/type": "npm:^3.0.6" 165 | ansi-escapes: "npm:^4.3.2" 166 | peerDependencies: 167 | "@types/node": ">=18" 168 | peerDependenciesMeta: 169 | "@types/node": 170 | optional: true 171 | checksum: 10c0/dfac1a87418bc51185b0932f6561fc5cf77134afacc9914b94b10d7fc19510e2a7449943ff71b2cdfe06a281ee26aaa565024520d6edf805e751f2543a13e60c 172 | languageName: node 173 | linkType: hard 174 | 175 | "@inquirer/prompts@npm:^7.4.0": 176 | version: 7.5.1 177 | resolution: "@inquirer/prompts@npm:7.5.1" 178 | dependencies: 179 | "@inquirer/checkbox": "npm:^4.1.6" 180 | "@inquirer/confirm": "npm:^5.1.10" 181 | "@inquirer/editor": "npm:^4.2.11" 182 | "@inquirer/expand": "npm:^4.0.13" 183 | "@inquirer/input": "npm:^4.1.10" 184 | "@inquirer/number": "npm:^3.0.13" 185 | "@inquirer/password": "npm:^4.0.13" 186 | "@inquirer/rawlist": "npm:^4.1.1" 187 | "@inquirer/search": "npm:^3.0.13" 188 | "@inquirer/select": "npm:^4.2.1" 189 | peerDependencies: 190 | "@types/node": ">=18" 191 | peerDependenciesMeta: 192 | "@types/node": 193 | optional: true 194 | checksum: 10c0/7f9cf44e1caff3eb61939f8abc9906acfec0d955c25e860212dc9e0e7bd6b9fb046415731e2407eb8a0745d282bb73c03587481090720255c4b828d85b830a08 195 | languageName: node 196 | linkType: hard 197 | 198 | "@inquirer/rawlist@npm:^4.1.1": 199 | version: 4.1.1 200 | resolution: "@inquirer/rawlist@npm:4.1.1" 201 | dependencies: 202 | "@inquirer/core": "npm:^10.1.11" 203 | "@inquirer/type": "npm:^3.0.6" 204 | yoctocolors-cjs: "npm:^2.1.2" 205 | peerDependencies: 206 | "@types/node": ">=18" 207 | peerDependenciesMeta: 208 | "@types/node": 209 | optional: true 210 | checksum: 10c0/14d14650afade03d25c818c7fac70f06ed9e1a58e2c8b966e70b6f55fdef7edd24bde1b25eecc927f82ae167d48c2bfacb1d53386cb988dff174f6b3a7ee4955 211 | languageName: node 212 | linkType: hard 213 | 214 | "@inquirer/search@npm:^3.0.13": 215 | version: 3.0.13 216 | resolution: "@inquirer/search@npm:3.0.13" 217 | dependencies: 218 | "@inquirer/core": "npm:^10.1.11" 219 | "@inquirer/figures": "npm:^1.0.11" 220 | "@inquirer/type": "npm:^3.0.6" 221 | yoctocolors-cjs: "npm:^2.1.2" 222 | peerDependencies: 223 | "@types/node": ">=18" 224 | peerDependenciesMeta: 225 | "@types/node": 226 | optional: true 227 | checksum: 10c0/1d57ead9d1f977671ef1726862f82a8690b870a159aa5e4292447b50fb59ca3d9958227d583edc074884d304774bbc92954aada4bb8634dfad638b5e5ae4c446 228 | languageName: node 229 | linkType: hard 230 | 231 | "@inquirer/select@npm:^4.2.1": 232 | version: 4.2.1 233 | resolution: "@inquirer/select@npm:4.2.1" 234 | dependencies: 235 | "@inquirer/core": "npm:^10.1.11" 236 | "@inquirer/figures": "npm:^1.0.11" 237 | "@inquirer/type": "npm:^3.0.6" 238 | ansi-escapes: "npm:^4.3.2" 239 | yoctocolors-cjs: "npm:^2.1.2" 240 | peerDependencies: 241 | "@types/node": ">=18" 242 | peerDependenciesMeta: 243 | "@types/node": 244 | optional: true 245 | checksum: 10c0/2e9c0ae80c872c6a5ea4406f3e8dbf54577fffdb72e3b460d61cffeda00b93b78a9c30a06c21575db533b493b597c0872777b66f0224a2f1611592c6e3bfc7c4 246 | languageName: node 247 | linkType: hard 248 | 249 | "@inquirer/type@npm:^3.0.6": 250 | version: 3.0.6 251 | resolution: "@inquirer/type@npm:3.0.6" 252 | peerDependencies: 253 | "@types/node": ">=18" 254 | peerDependenciesMeta: 255 | "@types/node": 256 | optional: true 257 | checksum: 10c0/92382c1b046559ddb16c53e1353a900a43266566a0d73902e5325433c640b6aaeaf3e34cc5b2a68fd089ff5d8add914d0b9875cdec64f7a09313f9c4420b021d 258 | languageName: node 259 | linkType: hard 260 | 261 | "@isaacs/cliui@npm:^8.0.2": 262 | version: 8.0.2 263 | resolution: "@isaacs/cliui@npm:8.0.2" 264 | dependencies: 265 | string-width: "npm:^5.1.2" 266 | string-width-cjs: "npm:string-width@^4.2.0" 267 | strip-ansi: "npm:^7.0.1" 268 | strip-ansi-cjs: "npm:strip-ansi@^6.0.1" 269 | wrap-ansi: "npm:^8.1.0" 270 | wrap-ansi-cjs: "npm:wrap-ansi@^7.0.0" 271 | checksum: 10c0/b1bf42535d49f11dc137f18d5e4e63a28c5569de438a221c369483731e9dac9fb797af554e8bf02b6192d1e5eba6e6402cf93900c3d0ac86391d00d04876789e 272 | languageName: node 273 | linkType: hard 274 | 275 | "@isaacs/fs-minipass@npm:^4.0.0": 276 | version: 4.0.1 277 | resolution: "@isaacs/fs-minipass@npm:4.0.1" 278 | dependencies: 279 | minipass: "npm:^7.0.4" 280 | checksum: 10c0/c25b6dc1598790d5b55c0947a9b7d111cfa92594db5296c3b907e2f533c033666f692a3939eadac17b1c7c40d362d0b0635dc874cbfe3e70db7c2b07cc97a5d2 281 | languageName: node 282 | linkType: hard 283 | 284 | "@mapbox/node-pre-gyp@npm:^2.0.0": 285 | version: 2.0.0 286 | resolution: "@mapbox/node-pre-gyp@npm:2.0.0" 287 | dependencies: 288 | consola: "npm:^3.2.3" 289 | detect-libc: "npm:^2.0.0" 290 | https-proxy-agent: "npm:^7.0.5" 291 | node-fetch: "npm:^2.6.7" 292 | nopt: "npm:^8.0.0" 293 | semver: "npm:^7.5.3" 294 | tar: "npm:^7.4.0" 295 | bin: 296 | node-pre-gyp: bin/node-pre-gyp 297 | checksum: 10c0/7d874c7f6f5560a87be7207f28d9a4e53b750085a82167608fd573aab8073645e95b3608f69e244df0e1d24e90a66525aeae708aba82ca73ff668ed0ab6abda6 298 | languageName: node 299 | linkType: hard 300 | 301 | "@napi-rs/cli@npm:^3.0.0-alpha.80": 302 | version: 3.0.0-alpha.80 303 | resolution: "@napi-rs/cli@npm:3.0.0-alpha.80" 304 | dependencies: 305 | "@inquirer/prompts": "npm:^7.4.0" 306 | "@napi-rs/cross-toolchain": "npm:^0.0.19" 307 | "@napi-rs/wasm-tools": "npm:^0.0.3" 308 | "@octokit/rest": "npm:^21.1.1" 309 | clipanion: "npm:^4.0.0-rc.4" 310 | colorette: "npm:^2.0.20" 311 | debug: "npm:^4.4.0" 312 | emnapi: "npm:^1.4.0" 313 | js-yaml: "npm:^4.1.0" 314 | lodash-es: "npm:^4.17.21" 315 | semver: "npm:^7.7.1" 316 | toml: "npm:^3.0.0" 317 | typanion: "npm:^3.14.0" 318 | wasm-sjlj: "npm:^1.0.6" 319 | peerDependencies: 320 | "@emnapi/runtime": ^1.1.0 321 | emnapi: ^1.1.0 322 | peerDependenciesMeta: 323 | "@emnapi/runtime": 324 | optional: true 325 | emnapi: 326 | optional: true 327 | bin: 328 | napi: ./dist/cli.js 329 | napi-raw: ./cli.mjs 330 | checksum: 10c0/f63928f5f4b430983c19727dc3752b8292a695cf05a1c1ed27038e07ae20e15287d422b974ddcf52b5702331026453c327273b737f213c66c71843e692ff2f9b 331 | languageName: node 332 | linkType: hard 333 | 334 | "@napi-rs/cross-toolchain@npm:^0.0.19": 335 | version: 0.0.19 336 | resolution: "@napi-rs/cross-toolchain@npm:0.0.19" 337 | dependencies: 338 | "@napi-rs/lzma": "npm:^1.4.1" 339 | "@napi-rs/tar": "npm:^0.1.4" 340 | debug: "npm:^4.4.0" 341 | peerDependencies: 342 | "@napi-rs/cross-toolchain-arm64-target-aarch64": ^0.0.19 343 | "@napi-rs/cross-toolchain-arm64-target-armv7": ^0.0.19 344 | "@napi-rs/cross-toolchain-arm64-target-x86_64": ^0.0.19 345 | "@napi-rs/cross-toolchain-x64-target-aarch64": ^0.0.19 346 | "@napi-rs/cross-toolchain-x64-target-armv7": ^0.0.19 347 | "@napi-rs/cross-toolchain-x64-target-x86_64": ^0.0.19 348 | peerDependenciesMeta: 349 | "@napi-rs/cross-toolchain-arm64-target-aarch64": 350 | optional: true 351 | "@napi-rs/cross-toolchain-arm64-target-armv7": 352 | optional: true 353 | "@napi-rs/cross-toolchain-arm64-target-x86_64": 354 | optional: true 355 | "@napi-rs/cross-toolchain-x64-target-aarch64": 356 | optional: true 357 | "@napi-rs/cross-toolchain-x64-target-armv7": 358 | optional: true 359 | "@napi-rs/cross-toolchain-x64-target-x86_64": 360 | optional: true 361 | checksum: 10c0/6084567d9d86a818bf600d354aefa88aebad6bd0d76de3e41b50b652dc47cdb2056e7482a68870665ecc9e74dd67fcf9fbc9c02057cec9aa17510b4adbabb326 362 | languageName: node 363 | linkType: hard 364 | 365 | "@napi-rs/keyring@workspace:.": 366 | version: 0.0.0-use.local 367 | resolution: "@napi-rs/keyring@workspace:." 368 | dependencies: 369 | "@napi-rs/cli": "npm:^3.0.0-alpha.80" 370 | "@oxc-node/core": "npm:^0.0.27" 371 | "@taplo/cli": "npm:^0.7.0" 372 | "@types/node": "npm:^22.15.3" 373 | ava: "npm:^6.3.0" 374 | chalk: "npm:^5.4.1" 375 | husky: "npm:^9.1.7" 376 | lint-staged: "npm:^16.0.0" 377 | npm-run-all2: "npm:^8.0.1" 378 | oxlint: "npm:^0.17.0" 379 | prettier: "npm:^3.5.3" 380 | typescript: "npm:^5.8.3" 381 | languageName: unknown 382 | linkType: soft 383 | 384 | "@napi-rs/lzma-android-arm-eabi@npm:1.4.3": 385 | version: 1.4.3 386 | resolution: "@napi-rs/lzma-android-arm-eabi@npm:1.4.3" 387 | conditions: os=android & cpu=arm 388 | languageName: node 389 | linkType: hard 390 | 391 | "@napi-rs/lzma-android-arm64@npm:1.4.3": 392 | version: 1.4.3 393 | resolution: "@napi-rs/lzma-android-arm64@npm:1.4.3" 394 | conditions: os=android & cpu=arm64 395 | languageName: node 396 | linkType: hard 397 | 398 | "@napi-rs/lzma-darwin-arm64@npm:1.4.3": 399 | version: 1.4.3 400 | resolution: "@napi-rs/lzma-darwin-arm64@npm:1.4.3" 401 | conditions: os=darwin & cpu=arm64 402 | languageName: node 403 | linkType: hard 404 | 405 | "@napi-rs/lzma-darwin-x64@npm:1.4.3": 406 | version: 1.4.3 407 | resolution: "@napi-rs/lzma-darwin-x64@npm:1.4.3" 408 | conditions: os=darwin & cpu=x64 409 | languageName: node 410 | linkType: hard 411 | 412 | "@napi-rs/lzma-freebsd-x64@npm:1.4.3": 413 | version: 1.4.3 414 | resolution: "@napi-rs/lzma-freebsd-x64@npm:1.4.3" 415 | conditions: os=freebsd & cpu=x64 416 | languageName: node 417 | linkType: hard 418 | 419 | "@napi-rs/lzma-linux-arm-gnueabihf@npm:1.4.3": 420 | version: 1.4.3 421 | resolution: "@napi-rs/lzma-linux-arm-gnueabihf@npm:1.4.3" 422 | conditions: os=linux & cpu=arm 423 | languageName: node 424 | linkType: hard 425 | 426 | "@napi-rs/lzma-linux-arm64-gnu@npm:1.4.3": 427 | version: 1.4.3 428 | resolution: "@napi-rs/lzma-linux-arm64-gnu@npm:1.4.3" 429 | conditions: os=linux & cpu=arm64 & libc=glibc 430 | languageName: node 431 | linkType: hard 432 | 433 | "@napi-rs/lzma-linux-arm64-musl@npm:1.4.3": 434 | version: 1.4.3 435 | resolution: "@napi-rs/lzma-linux-arm64-musl@npm:1.4.3" 436 | conditions: os=linux & cpu=arm64 & libc=musl 437 | languageName: node 438 | linkType: hard 439 | 440 | "@napi-rs/lzma-linux-ppc64-gnu@npm:1.4.3": 441 | version: 1.4.3 442 | resolution: "@napi-rs/lzma-linux-ppc64-gnu@npm:1.4.3" 443 | conditions: os=linux & cpu=ppc64 & libc=glibc 444 | languageName: node 445 | linkType: hard 446 | 447 | "@napi-rs/lzma-linux-riscv64-gnu@npm:1.4.3": 448 | version: 1.4.3 449 | resolution: "@napi-rs/lzma-linux-riscv64-gnu@npm:1.4.3" 450 | conditions: os=linux & cpu=riscv64 & libc=glibc 451 | languageName: node 452 | linkType: hard 453 | 454 | "@napi-rs/lzma-linux-s390x-gnu@npm:1.4.3": 455 | version: 1.4.3 456 | resolution: "@napi-rs/lzma-linux-s390x-gnu@npm:1.4.3" 457 | conditions: os=linux & cpu=s390x & libc=glibc 458 | languageName: node 459 | linkType: hard 460 | 461 | "@napi-rs/lzma-linux-x64-gnu@npm:1.4.3": 462 | version: 1.4.3 463 | resolution: "@napi-rs/lzma-linux-x64-gnu@npm:1.4.3" 464 | conditions: os=linux & cpu=x64 & libc=glibc 465 | languageName: node 466 | linkType: hard 467 | 468 | "@napi-rs/lzma-linux-x64-musl@npm:1.4.3": 469 | version: 1.4.3 470 | resolution: "@napi-rs/lzma-linux-x64-musl@npm:1.4.3" 471 | conditions: os=linux & cpu=x64 & libc=musl 472 | languageName: node 473 | linkType: hard 474 | 475 | "@napi-rs/lzma-wasm32-wasi@npm:1.4.3": 476 | version: 1.4.3 477 | resolution: "@napi-rs/lzma-wasm32-wasi@npm:1.4.3" 478 | dependencies: 479 | "@napi-rs/wasm-runtime": "npm:^0.2.10" 480 | conditions: cpu=wasm32 481 | languageName: node 482 | linkType: hard 483 | 484 | "@napi-rs/lzma-win32-arm64-msvc@npm:1.4.3": 485 | version: 1.4.3 486 | resolution: "@napi-rs/lzma-win32-arm64-msvc@npm:1.4.3" 487 | conditions: os=win32 & cpu=arm64 488 | languageName: node 489 | linkType: hard 490 | 491 | "@napi-rs/lzma-win32-ia32-msvc@npm:1.4.3": 492 | version: 1.4.3 493 | resolution: "@napi-rs/lzma-win32-ia32-msvc@npm:1.4.3" 494 | conditions: os=win32 & cpu=ia32 495 | languageName: node 496 | linkType: hard 497 | 498 | "@napi-rs/lzma-win32-x64-msvc@npm:1.4.3": 499 | version: 1.4.3 500 | resolution: "@napi-rs/lzma-win32-x64-msvc@npm:1.4.3" 501 | conditions: os=win32 & cpu=x64 502 | languageName: node 503 | linkType: hard 504 | 505 | "@napi-rs/lzma@npm:^1.4.1": 506 | version: 1.4.3 507 | resolution: "@napi-rs/lzma@npm:1.4.3" 508 | dependencies: 509 | "@napi-rs/lzma-android-arm-eabi": "npm:1.4.3" 510 | "@napi-rs/lzma-android-arm64": "npm:1.4.3" 511 | "@napi-rs/lzma-darwin-arm64": "npm:1.4.3" 512 | "@napi-rs/lzma-darwin-x64": "npm:1.4.3" 513 | "@napi-rs/lzma-freebsd-x64": "npm:1.4.3" 514 | "@napi-rs/lzma-linux-arm-gnueabihf": "npm:1.4.3" 515 | "@napi-rs/lzma-linux-arm64-gnu": "npm:1.4.3" 516 | "@napi-rs/lzma-linux-arm64-musl": "npm:1.4.3" 517 | "@napi-rs/lzma-linux-ppc64-gnu": "npm:1.4.3" 518 | "@napi-rs/lzma-linux-riscv64-gnu": "npm:1.4.3" 519 | "@napi-rs/lzma-linux-s390x-gnu": "npm:1.4.3" 520 | "@napi-rs/lzma-linux-x64-gnu": "npm:1.4.3" 521 | "@napi-rs/lzma-linux-x64-musl": "npm:1.4.3" 522 | "@napi-rs/lzma-wasm32-wasi": "npm:1.4.3" 523 | "@napi-rs/lzma-win32-arm64-msvc": "npm:1.4.3" 524 | "@napi-rs/lzma-win32-ia32-msvc": "npm:1.4.3" 525 | "@napi-rs/lzma-win32-x64-msvc": "npm:1.4.3" 526 | dependenciesMeta: 527 | "@napi-rs/lzma-android-arm-eabi": 528 | optional: true 529 | "@napi-rs/lzma-android-arm64": 530 | optional: true 531 | "@napi-rs/lzma-darwin-arm64": 532 | optional: true 533 | "@napi-rs/lzma-darwin-x64": 534 | optional: true 535 | "@napi-rs/lzma-freebsd-x64": 536 | optional: true 537 | "@napi-rs/lzma-linux-arm-gnueabihf": 538 | optional: true 539 | "@napi-rs/lzma-linux-arm64-gnu": 540 | optional: true 541 | "@napi-rs/lzma-linux-arm64-musl": 542 | optional: true 543 | "@napi-rs/lzma-linux-ppc64-gnu": 544 | optional: true 545 | "@napi-rs/lzma-linux-riscv64-gnu": 546 | optional: true 547 | "@napi-rs/lzma-linux-s390x-gnu": 548 | optional: true 549 | "@napi-rs/lzma-linux-x64-gnu": 550 | optional: true 551 | "@napi-rs/lzma-linux-x64-musl": 552 | optional: true 553 | "@napi-rs/lzma-wasm32-wasi": 554 | optional: true 555 | "@napi-rs/lzma-win32-arm64-msvc": 556 | optional: true 557 | "@napi-rs/lzma-win32-ia32-msvc": 558 | optional: true 559 | "@napi-rs/lzma-win32-x64-msvc": 560 | optional: true 561 | checksum: 10c0/7a9453547c1a864a06b899df5d91e8dd46694edd405482a1f952f76c1ed9f907866179410f9e0a64c244bf24ae7ef70c629a6b7cab3cbf80d7ff88c5dc21c8c4 562 | languageName: node 563 | linkType: hard 564 | 565 | "@napi-rs/tar-android-arm-eabi@npm:0.1.5": 566 | version: 0.1.5 567 | resolution: "@napi-rs/tar-android-arm-eabi@npm:0.1.5" 568 | conditions: os=android & cpu=arm 569 | languageName: node 570 | linkType: hard 571 | 572 | "@napi-rs/tar-android-arm64@npm:0.1.5": 573 | version: 0.1.5 574 | resolution: "@napi-rs/tar-android-arm64@npm:0.1.5" 575 | conditions: os=android & cpu=arm64 576 | languageName: node 577 | linkType: hard 578 | 579 | "@napi-rs/tar-darwin-arm64@npm:0.1.5": 580 | version: 0.1.5 581 | resolution: "@napi-rs/tar-darwin-arm64@npm:0.1.5" 582 | conditions: os=darwin & cpu=arm64 583 | languageName: node 584 | linkType: hard 585 | 586 | "@napi-rs/tar-darwin-x64@npm:0.1.5": 587 | version: 0.1.5 588 | resolution: "@napi-rs/tar-darwin-x64@npm:0.1.5" 589 | conditions: os=darwin & cpu=x64 590 | languageName: node 591 | linkType: hard 592 | 593 | "@napi-rs/tar-freebsd-x64@npm:0.1.5": 594 | version: 0.1.5 595 | resolution: "@napi-rs/tar-freebsd-x64@npm:0.1.5" 596 | conditions: os=freebsd & cpu=x64 597 | languageName: node 598 | linkType: hard 599 | 600 | "@napi-rs/tar-linux-arm-gnueabihf@npm:0.1.5": 601 | version: 0.1.5 602 | resolution: "@napi-rs/tar-linux-arm-gnueabihf@npm:0.1.5" 603 | conditions: os=linux & cpu=arm 604 | languageName: node 605 | linkType: hard 606 | 607 | "@napi-rs/tar-linux-arm64-gnu@npm:0.1.5": 608 | version: 0.1.5 609 | resolution: "@napi-rs/tar-linux-arm64-gnu@npm:0.1.5" 610 | conditions: os=linux & cpu=arm64 & libc=glibc 611 | languageName: node 612 | linkType: hard 613 | 614 | "@napi-rs/tar-linux-arm64-musl@npm:0.1.5": 615 | version: 0.1.5 616 | resolution: "@napi-rs/tar-linux-arm64-musl@npm:0.1.5" 617 | conditions: os=linux & cpu=arm64 & libc=musl 618 | languageName: node 619 | linkType: hard 620 | 621 | "@napi-rs/tar-linux-ppc64-gnu@npm:0.1.5": 622 | version: 0.1.5 623 | resolution: "@napi-rs/tar-linux-ppc64-gnu@npm:0.1.5" 624 | conditions: os=linux & cpu=ppc64 & libc=glibc 625 | languageName: node 626 | linkType: hard 627 | 628 | "@napi-rs/tar-linux-s390x-gnu@npm:0.1.5": 629 | version: 0.1.5 630 | resolution: "@napi-rs/tar-linux-s390x-gnu@npm:0.1.5" 631 | conditions: os=linux & cpu=s390x & libc=glibc 632 | languageName: node 633 | linkType: hard 634 | 635 | "@napi-rs/tar-linux-x64-gnu@npm:0.1.5": 636 | version: 0.1.5 637 | resolution: "@napi-rs/tar-linux-x64-gnu@npm:0.1.5" 638 | conditions: os=linux & cpu=x64 & libc=glibc 639 | languageName: node 640 | linkType: hard 641 | 642 | "@napi-rs/tar-linux-x64-musl@npm:0.1.5": 643 | version: 0.1.5 644 | resolution: "@napi-rs/tar-linux-x64-musl@npm:0.1.5" 645 | conditions: os=linux & cpu=x64 & libc=musl 646 | languageName: node 647 | linkType: hard 648 | 649 | "@napi-rs/tar-wasm32-wasi@npm:0.1.5": 650 | version: 0.1.5 651 | resolution: "@napi-rs/tar-wasm32-wasi@npm:0.1.5" 652 | dependencies: 653 | "@napi-rs/wasm-runtime": "npm:^0.2.9" 654 | conditions: cpu=wasm32 655 | languageName: node 656 | linkType: hard 657 | 658 | "@napi-rs/tar-win32-arm64-msvc@npm:0.1.5": 659 | version: 0.1.5 660 | resolution: "@napi-rs/tar-win32-arm64-msvc@npm:0.1.5" 661 | conditions: os=win32 & cpu=arm64 662 | languageName: node 663 | linkType: hard 664 | 665 | "@napi-rs/tar-win32-ia32-msvc@npm:0.1.5": 666 | version: 0.1.5 667 | resolution: "@napi-rs/tar-win32-ia32-msvc@npm:0.1.5" 668 | conditions: os=win32 & cpu=ia32 669 | languageName: node 670 | linkType: hard 671 | 672 | "@napi-rs/tar-win32-x64-msvc@npm:0.1.5": 673 | version: 0.1.5 674 | resolution: "@napi-rs/tar-win32-x64-msvc@npm:0.1.5" 675 | conditions: os=win32 & cpu=x64 676 | languageName: node 677 | linkType: hard 678 | 679 | "@napi-rs/tar@npm:^0.1.4": 680 | version: 0.1.5 681 | resolution: "@napi-rs/tar@npm:0.1.5" 682 | dependencies: 683 | "@napi-rs/tar-android-arm-eabi": "npm:0.1.5" 684 | "@napi-rs/tar-android-arm64": "npm:0.1.5" 685 | "@napi-rs/tar-darwin-arm64": "npm:0.1.5" 686 | "@napi-rs/tar-darwin-x64": "npm:0.1.5" 687 | "@napi-rs/tar-freebsd-x64": "npm:0.1.5" 688 | "@napi-rs/tar-linux-arm-gnueabihf": "npm:0.1.5" 689 | "@napi-rs/tar-linux-arm64-gnu": "npm:0.1.5" 690 | "@napi-rs/tar-linux-arm64-musl": "npm:0.1.5" 691 | "@napi-rs/tar-linux-ppc64-gnu": "npm:0.1.5" 692 | "@napi-rs/tar-linux-s390x-gnu": "npm:0.1.5" 693 | "@napi-rs/tar-linux-x64-gnu": "npm:0.1.5" 694 | "@napi-rs/tar-linux-x64-musl": "npm:0.1.5" 695 | "@napi-rs/tar-wasm32-wasi": "npm:0.1.5" 696 | "@napi-rs/tar-win32-arm64-msvc": "npm:0.1.5" 697 | "@napi-rs/tar-win32-ia32-msvc": "npm:0.1.5" 698 | "@napi-rs/tar-win32-x64-msvc": "npm:0.1.5" 699 | dependenciesMeta: 700 | "@napi-rs/tar-android-arm-eabi": 701 | optional: true 702 | "@napi-rs/tar-android-arm64": 703 | optional: true 704 | "@napi-rs/tar-darwin-arm64": 705 | optional: true 706 | "@napi-rs/tar-darwin-x64": 707 | optional: true 708 | "@napi-rs/tar-freebsd-x64": 709 | optional: true 710 | "@napi-rs/tar-linux-arm-gnueabihf": 711 | optional: true 712 | "@napi-rs/tar-linux-arm64-gnu": 713 | optional: true 714 | "@napi-rs/tar-linux-arm64-musl": 715 | optional: true 716 | "@napi-rs/tar-linux-ppc64-gnu": 717 | optional: true 718 | "@napi-rs/tar-linux-s390x-gnu": 719 | optional: true 720 | "@napi-rs/tar-linux-x64-gnu": 721 | optional: true 722 | "@napi-rs/tar-linux-x64-musl": 723 | optional: true 724 | "@napi-rs/tar-wasm32-wasi": 725 | optional: true 726 | "@napi-rs/tar-win32-arm64-msvc": 727 | optional: true 728 | "@napi-rs/tar-win32-ia32-msvc": 729 | optional: true 730 | "@napi-rs/tar-win32-x64-msvc": 731 | optional: true 732 | checksum: 10c0/49f53a241ff5106739d49d29be7f25d54a421334dc1140806ea412aff6882761706e77f5e66bf1bf8df1a13fd9cd10ae4c2a8552a87a1aee7c3a5b930eb93221 733 | languageName: node 734 | linkType: hard 735 | 736 | "@napi-rs/wasm-runtime@npm:^0.2.10, @napi-rs/wasm-runtime@npm:^0.2.7, @napi-rs/wasm-runtime@npm:^0.2.9": 737 | version: 0.2.10 738 | resolution: "@napi-rs/wasm-runtime@npm:0.2.10" 739 | dependencies: 740 | "@emnapi/core": "npm:^1.4.3" 741 | "@emnapi/runtime": "npm:^1.4.3" 742 | "@tybys/wasm-util": "npm:^0.9.0" 743 | checksum: 10c0/4dce9bbb94a8969805574e1b55fdbeb7623348190265d77f6507ba32e535610deeb53a33ba0bb8b05a6520f379d418b92e8a01c5cd7b9486b136d2c0c26be0bd 744 | languageName: node 745 | linkType: hard 746 | 747 | "@napi-rs/wasm-tools-android-arm-eabi@npm:0.0.3": 748 | version: 0.0.3 749 | resolution: "@napi-rs/wasm-tools-android-arm-eabi@npm:0.0.3" 750 | conditions: os=android & cpu=arm 751 | languageName: node 752 | linkType: hard 753 | 754 | "@napi-rs/wasm-tools-android-arm64@npm:0.0.3": 755 | version: 0.0.3 756 | resolution: "@napi-rs/wasm-tools-android-arm64@npm:0.0.3" 757 | conditions: os=android & cpu=arm64 758 | languageName: node 759 | linkType: hard 760 | 761 | "@napi-rs/wasm-tools-darwin-arm64@npm:0.0.3": 762 | version: 0.0.3 763 | resolution: "@napi-rs/wasm-tools-darwin-arm64@npm:0.0.3" 764 | conditions: os=darwin & cpu=arm64 765 | languageName: node 766 | linkType: hard 767 | 768 | "@napi-rs/wasm-tools-darwin-x64@npm:0.0.3": 769 | version: 0.0.3 770 | resolution: "@napi-rs/wasm-tools-darwin-x64@npm:0.0.3" 771 | conditions: os=darwin & cpu=x64 772 | languageName: node 773 | linkType: hard 774 | 775 | "@napi-rs/wasm-tools-freebsd-x64@npm:0.0.3": 776 | version: 0.0.3 777 | resolution: "@napi-rs/wasm-tools-freebsd-x64@npm:0.0.3" 778 | conditions: os=freebsd & cpu=x64 779 | languageName: node 780 | linkType: hard 781 | 782 | "@napi-rs/wasm-tools-linux-arm64-gnu@npm:0.0.3": 783 | version: 0.0.3 784 | resolution: "@napi-rs/wasm-tools-linux-arm64-gnu@npm:0.0.3" 785 | conditions: os=linux & cpu=arm64 & libc=glibc 786 | languageName: node 787 | linkType: hard 788 | 789 | "@napi-rs/wasm-tools-linux-arm64-musl@npm:0.0.3": 790 | version: 0.0.3 791 | resolution: "@napi-rs/wasm-tools-linux-arm64-musl@npm:0.0.3" 792 | conditions: os=linux & cpu=arm64 & libc=musl 793 | languageName: node 794 | linkType: hard 795 | 796 | "@napi-rs/wasm-tools-linux-x64-gnu@npm:0.0.3": 797 | version: 0.0.3 798 | resolution: "@napi-rs/wasm-tools-linux-x64-gnu@npm:0.0.3" 799 | conditions: os=linux & cpu=x64 & libc=glibc 800 | languageName: node 801 | linkType: hard 802 | 803 | "@napi-rs/wasm-tools-linux-x64-musl@npm:0.0.3": 804 | version: 0.0.3 805 | resolution: "@napi-rs/wasm-tools-linux-x64-musl@npm:0.0.3" 806 | conditions: os=linux & cpu=x64 & libc=musl 807 | languageName: node 808 | linkType: hard 809 | 810 | "@napi-rs/wasm-tools-wasm32-wasi@npm:0.0.3": 811 | version: 0.0.3 812 | resolution: "@napi-rs/wasm-tools-wasm32-wasi@npm:0.0.3" 813 | dependencies: 814 | "@napi-rs/wasm-runtime": "npm:^0.2.7" 815 | conditions: cpu=wasm32 816 | languageName: node 817 | linkType: hard 818 | 819 | "@napi-rs/wasm-tools-win32-arm64-msvc@npm:0.0.3": 820 | version: 0.0.3 821 | resolution: "@napi-rs/wasm-tools-win32-arm64-msvc@npm:0.0.3" 822 | conditions: os=win32 & cpu=arm64 823 | languageName: node 824 | linkType: hard 825 | 826 | "@napi-rs/wasm-tools-win32-ia32-msvc@npm:0.0.3": 827 | version: 0.0.3 828 | resolution: "@napi-rs/wasm-tools-win32-ia32-msvc@npm:0.0.3" 829 | conditions: os=win32 & cpu=ia32 830 | languageName: node 831 | linkType: hard 832 | 833 | "@napi-rs/wasm-tools-win32-x64-msvc@npm:0.0.3": 834 | version: 0.0.3 835 | resolution: "@napi-rs/wasm-tools-win32-x64-msvc@npm:0.0.3" 836 | conditions: os=win32 & cpu=x64 837 | languageName: node 838 | linkType: hard 839 | 840 | "@napi-rs/wasm-tools@npm:^0.0.3": 841 | version: 0.0.3 842 | resolution: "@napi-rs/wasm-tools@npm:0.0.3" 843 | dependencies: 844 | "@napi-rs/wasm-tools-android-arm-eabi": "npm:0.0.3" 845 | "@napi-rs/wasm-tools-android-arm64": "npm:0.0.3" 846 | "@napi-rs/wasm-tools-darwin-arm64": "npm:0.0.3" 847 | "@napi-rs/wasm-tools-darwin-x64": "npm:0.0.3" 848 | "@napi-rs/wasm-tools-freebsd-x64": "npm:0.0.3" 849 | "@napi-rs/wasm-tools-linux-arm64-gnu": "npm:0.0.3" 850 | "@napi-rs/wasm-tools-linux-arm64-musl": "npm:0.0.3" 851 | "@napi-rs/wasm-tools-linux-x64-gnu": "npm:0.0.3" 852 | "@napi-rs/wasm-tools-linux-x64-musl": "npm:0.0.3" 853 | "@napi-rs/wasm-tools-wasm32-wasi": "npm:0.0.3" 854 | "@napi-rs/wasm-tools-win32-arm64-msvc": "npm:0.0.3" 855 | "@napi-rs/wasm-tools-win32-ia32-msvc": "npm:0.0.3" 856 | "@napi-rs/wasm-tools-win32-x64-msvc": "npm:0.0.3" 857 | dependenciesMeta: 858 | "@napi-rs/wasm-tools-android-arm-eabi": 859 | optional: true 860 | "@napi-rs/wasm-tools-android-arm64": 861 | optional: true 862 | "@napi-rs/wasm-tools-darwin-arm64": 863 | optional: true 864 | "@napi-rs/wasm-tools-darwin-x64": 865 | optional: true 866 | "@napi-rs/wasm-tools-freebsd-x64": 867 | optional: true 868 | "@napi-rs/wasm-tools-linux-arm64-gnu": 869 | optional: true 870 | "@napi-rs/wasm-tools-linux-arm64-musl": 871 | optional: true 872 | "@napi-rs/wasm-tools-linux-x64-gnu": 873 | optional: true 874 | "@napi-rs/wasm-tools-linux-x64-musl": 875 | optional: true 876 | "@napi-rs/wasm-tools-wasm32-wasi": 877 | optional: true 878 | "@napi-rs/wasm-tools-win32-arm64-msvc": 879 | optional: true 880 | "@napi-rs/wasm-tools-win32-ia32-msvc": 881 | optional: true 882 | "@napi-rs/wasm-tools-win32-x64-msvc": 883 | optional: true 884 | checksum: 10c0/ad0cf8ea9462a2fb6837666d1fdb4797089176ad8e6838f8fca4326f1f222a136380a4ce8e4366efa26febb0e3404ccb1890314f92751b274a93001368f70fcc 885 | languageName: node 886 | linkType: hard 887 | 888 | "@nodelib/fs.scandir@npm:2.1.5": 889 | version: 2.1.5 890 | resolution: "@nodelib/fs.scandir@npm:2.1.5" 891 | dependencies: 892 | "@nodelib/fs.stat": "npm:2.0.5" 893 | run-parallel: "npm:^1.1.9" 894 | checksum: 10c0/732c3b6d1b1e967440e65f284bd06e5821fedf10a1bea9ed2bb75956ea1f30e08c44d3def9d6a230666574edbaf136f8cfd319c14fd1f87c66e6a44449afb2eb 895 | languageName: node 896 | linkType: hard 897 | 898 | "@nodelib/fs.stat@npm:2.0.5, @nodelib/fs.stat@npm:^2.0.2": 899 | version: 2.0.5 900 | resolution: "@nodelib/fs.stat@npm:2.0.5" 901 | checksum: 10c0/88dafe5e3e29a388b07264680dc996c17f4bda48d163a9d4f5c1112979f0ce8ec72aa7116122c350b4e7976bc5566dc3ddb579be1ceaacc727872eb4ed93926d 902 | languageName: node 903 | linkType: hard 904 | 905 | "@nodelib/fs.walk@npm:^1.2.3": 906 | version: 1.2.8 907 | resolution: "@nodelib/fs.walk@npm:1.2.8" 908 | dependencies: 909 | "@nodelib/fs.scandir": "npm:2.1.5" 910 | fastq: "npm:^1.6.0" 911 | checksum: 10c0/db9de047c3bb9b51f9335a7bb46f4fcfb6829fb628318c12115fbaf7d369bfce71c15b103d1fc3b464812d936220ee9bc1c8f762d032c9f6be9acc99249095b1 912 | languageName: node 913 | linkType: hard 914 | 915 | "@octokit/auth-token@npm:^5.0.0": 916 | version: 5.1.2 917 | resolution: "@octokit/auth-token@npm:5.1.2" 918 | checksum: 10c0/bd4952571d9c559ede1f6ef8f7756900256d19df0180db04da88886a05484c7e6a4397611422e4804465a82addc8c2daa21d0bb4f450403552ee81041a4046d1 919 | languageName: node 920 | linkType: hard 921 | 922 | "@octokit/core@npm:^6.1.4": 923 | version: 6.1.5 924 | resolution: "@octokit/core@npm:6.1.5" 925 | dependencies: 926 | "@octokit/auth-token": "npm:^5.0.0" 927 | "@octokit/graphql": "npm:^8.2.2" 928 | "@octokit/request": "npm:^9.2.3" 929 | "@octokit/request-error": "npm:^6.1.8" 930 | "@octokit/types": "npm:^14.0.0" 931 | before-after-hook: "npm:^3.0.2" 932 | universal-user-agent: "npm:^7.0.0" 933 | checksum: 10c0/c89ea754cc33da740fdd69fadb971b4b65c89971bba4e8ad545d3ea7aba79759ee3e195c3b72e7df78f14b8b1d392bddc56e7c385d48b5272319ea6a0246ac7c 934 | languageName: node 935 | linkType: hard 936 | 937 | "@octokit/endpoint@npm:^10.1.4": 938 | version: 10.1.4 939 | resolution: "@octokit/endpoint@npm:10.1.4" 940 | dependencies: 941 | "@octokit/types": "npm:^14.0.0" 942 | universal-user-agent: "npm:^7.0.2" 943 | checksum: 10c0/bf7cca71a05dc4751df658588e32642e59c98768e7509521226b997ea4837e2d16efd35c391231c76d888226f4daf80e6a9f347dee01a69f490253654dada581 944 | languageName: node 945 | linkType: hard 946 | 947 | "@octokit/graphql@npm:^8.2.2": 948 | version: 8.2.2 949 | resolution: "@octokit/graphql@npm:8.2.2" 950 | dependencies: 951 | "@octokit/request": "npm:^9.2.3" 952 | "@octokit/types": "npm:^14.0.0" 953 | universal-user-agent: "npm:^7.0.0" 954 | checksum: 10c0/29cd5af5ed04e416d28798a11907ab861dc73c0af47f8c9c3f4183d81d2e77d88228643825538acc81e7015f78d891f84107929019a673b06a6b38ccea6a24e0 955 | languageName: node 956 | linkType: hard 957 | 958 | "@octokit/openapi-types@npm:^24.2.0": 959 | version: 24.2.0 960 | resolution: "@octokit/openapi-types@npm:24.2.0" 961 | checksum: 10c0/8f47918b35e9b7f6109be6f7c8fc3a64ad13a48233112b29e92559e64a564b810eb3ebf81b4cd0af1bb2989d27b9b95cca96e841ec4e23a3f68703cefe62fd9e 962 | languageName: node 963 | linkType: hard 964 | 965 | "@octokit/openapi-types@npm:^25.0.0": 966 | version: 25.0.0 967 | resolution: "@octokit/openapi-types@npm:25.0.0" 968 | checksum: 10c0/59c9e5998e08cecec155b776c93d8f6f88ab1a812add61cc65f3de8f3744201565545eac308083d18c9fa330a4381a27bcd771a311ac0348d3590a00f333f233 969 | languageName: node 970 | linkType: hard 971 | 972 | "@octokit/plugin-paginate-rest@npm:^11.4.2": 973 | version: 11.6.0 974 | resolution: "@octokit/plugin-paginate-rest@npm:11.6.0" 975 | dependencies: 976 | "@octokit/types": "npm:^13.10.0" 977 | peerDependencies: 978 | "@octokit/core": ">=6" 979 | checksum: 10c0/f5c8751a1cd08f972a84d0e0534d1f72c178648c64ec2b57f8d924a04b81cc616338e397fb1400c02d7ffda7b6147835cbdbae07a2673f963217d2d59768daaa 980 | languageName: node 981 | linkType: hard 982 | 983 | "@octokit/plugin-request-log@npm:^5.3.1": 984 | version: 5.3.1 985 | resolution: "@octokit/plugin-request-log@npm:5.3.1" 986 | peerDependencies: 987 | "@octokit/core": ">=6" 988 | checksum: 10c0/2f959934b8285cf39a1d1d0b92ec881b3ae171ae74738225f87b89381afd72a32bc7ea9c04d2dcee74f74ad24c22cce0c5f3e5b4333d531ea67b985e4ee90cb0 989 | languageName: node 990 | linkType: hard 991 | 992 | "@octokit/plugin-rest-endpoint-methods@npm:^13.3.0": 993 | version: 13.5.0 994 | resolution: "@octokit/plugin-rest-endpoint-methods@npm:13.5.0" 995 | dependencies: 996 | "@octokit/types": "npm:^13.10.0" 997 | peerDependencies: 998 | "@octokit/core": ">=6" 999 | checksum: 10c0/0dd5fcdc01ac82abeab26fa32fd1c504732918bc70ad8e16924dd4d155dfd4bc8b57f2326c5012276885b9d59be3eb1e8d0b2576f5915a3b3343f26359cdba5e 1000 | languageName: node 1001 | linkType: hard 1002 | 1003 | "@octokit/request-error@npm:^6.1.8": 1004 | version: 6.1.8 1005 | resolution: "@octokit/request-error@npm:6.1.8" 1006 | dependencies: 1007 | "@octokit/types": "npm:^14.0.0" 1008 | checksum: 10c0/02aa5bfebb5b1b9e152558b4a6f4f7dcb149b41538778ffe0fce3395fd0da5c0862311a78e94723435667581b2a58a7cefa458cf7aa19ae2948ae419276f7ee1 1009 | languageName: node 1010 | linkType: hard 1011 | 1012 | "@octokit/request@npm:^9.2.3": 1013 | version: 9.2.3 1014 | resolution: "@octokit/request@npm:9.2.3" 1015 | dependencies: 1016 | "@octokit/endpoint": "npm:^10.1.4" 1017 | "@octokit/request-error": "npm:^6.1.8" 1018 | "@octokit/types": "npm:^14.0.0" 1019 | fast-content-type-parse: "npm:^2.0.0" 1020 | universal-user-agent: "npm:^7.0.2" 1021 | checksum: 10c0/96067fc9a5f30f2faa00f08015309930561c3ea0536b543e1c91c475f965eabc81c48fc27d401681ebdb3f6c1acc5d46eaa69163ab98b0faa08be1c02ea5b684 1022 | languageName: node 1023 | linkType: hard 1024 | 1025 | "@octokit/rest@npm:^21.1.1": 1026 | version: 21.1.1 1027 | resolution: "@octokit/rest@npm:21.1.1" 1028 | dependencies: 1029 | "@octokit/core": "npm:^6.1.4" 1030 | "@octokit/plugin-paginate-rest": "npm:^11.4.2" 1031 | "@octokit/plugin-request-log": "npm:^5.3.1" 1032 | "@octokit/plugin-rest-endpoint-methods": "npm:^13.3.0" 1033 | checksum: 10c0/59e4fe55942e6f94ff6924934418fbfdee516f6df00889f9417add037c2163b45079a600b6c43449bc824641c9f1b9ac6fe9d3b52a5a1ed3e5e12de697171b78 1034 | languageName: node 1035 | linkType: hard 1036 | 1037 | "@octokit/types@npm:^13.10.0": 1038 | version: 13.10.0 1039 | resolution: "@octokit/types@npm:13.10.0" 1040 | dependencies: 1041 | "@octokit/openapi-types": "npm:^24.2.0" 1042 | checksum: 10c0/f66a401b89d653ec28e5c1529abdb7965752db4d9d40fa54c80e900af4c6bf944af6bd0a83f5b4f1eecb72e3d646899dfb27ffcf272ac243552de7e3b97a038d 1043 | languageName: node 1044 | linkType: hard 1045 | 1046 | "@octokit/types@npm:^14.0.0": 1047 | version: 14.0.0 1048 | resolution: "@octokit/types@npm:14.0.0" 1049 | dependencies: 1050 | "@octokit/openapi-types": "npm:^25.0.0" 1051 | checksum: 10c0/c82da635fe99f265dbef7bf954d45a23ca7ce9c6fc9a8478c247b5435799e5d0eab3ff42f085785ee0882b2de293cab0ab831b379c66f41d00b78412df850ba4 1052 | languageName: node 1053 | linkType: hard 1054 | 1055 | "@oxc-node/core-android-arm-eabi@npm:0.0.27": 1056 | version: 0.0.27 1057 | resolution: "@oxc-node/core-android-arm-eabi@npm:0.0.27" 1058 | conditions: os=android & cpu=arm 1059 | languageName: node 1060 | linkType: hard 1061 | 1062 | "@oxc-node/core-android-arm64@npm:0.0.27": 1063 | version: 0.0.27 1064 | resolution: "@oxc-node/core-android-arm64@npm:0.0.27" 1065 | conditions: os=android & cpu=arm64 1066 | languageName: node 1067 | linkType: hard 1068 | 1069 | "@oxc-node/core-darwin-arm64@npm:0.0.27": 1070 | version: 0.0.27 1071 | resolution: "@oxc-node/core-darwin-arm64@npm:0.0.27" 1072 | conditions: os=darwin & cpu=arm64 1073 | languageName: node 1074 | linkType: hard 1075 | 1076 | "@oxc-node/core-darwin-x64@npm:0.0.27": 1077 | version: 0.0.27 1078 | resolution: "@oxc-node/core-darwin-x64@npm:0.0.27" 1079 | conditions: os=darwin & cpu=x64 1080 | languageName: node 1081 | linkType: hard 1082 | 1083 | "@oxc-node/core-freebsd-x64@npm:0.0.27": 1084 | version: 0.0.27 1085 | resolution: "@oxc-node/core-freebsd-x64@npm:0.0.27" 1086 | conditions: os=freebsd & cpu=x64 1087 | languageName: node 1088 | linkType: hard 1089 | 1090 | "@oxc-node/core-linux-arm-gnueabihf@npm:0.0.27": 1091 | version: 0.0.27 1092 | resolution: "@oxc-node/core-linux-arm-gnueabihf@npm:0.0.27" 1093 | conditions: os=linux & cpu=arm 1094 | languageName: node 1095 | linkType: hard 1096 | 1097 | "@oxc-node/core-linux-arm64-gnu@npm:0.0.27": 1098 | version: 0.0.27 1099 | resolution: "@oxc-node/core-linux-arm64-gnu@npm:0.0.27" 1100 | conditions: os=linux & cpu=arm64 & libc=glibc 1101 | languageName: node 1102 | linkType: hard 1103 | 1104 | "@oxc-node/core-linux-arm64-musl@npm:0.0.27": 1105 | version: 0.0.27 1106 | resolution: "@oxc-node/core-linux-arm64-musl@npm:0.0.27" 1107 | conditions: os=linux & cpu=arm64 & libc=musl 1108 | languageName: node 1109 | linkType: hard 1110 | 1111 | "@oxc-node/core-linux-ppc64-gnu@npm:0.0.27": 1112 | version: 0.0.27 1113 | resolution: "@oxc-node/core-linux-ppc64-gnu@npm:0.0.27" 1114 | conditions: os=linux & cpu=ppc64 & libc=glibc 1115 | languageName: node 1116 | linkType: hard 1117 | 1118 | "@oxc-node/core-linux-s390x-gnu@npm:0.0.27": 1119 | version: 0.0.27 1120 | resolution: "@oxc-node/core-linux-s390x-gnu@npm:0.0.27" 1121 | conditions: os=linux & cpu=s390x & libc=glibc 1122 | languageName: node 1123 | linkType: hard 1124 | 1125 | "@oxc-node/core-linux-x64-gnu@npm:0.0.27": 1126 | version: 0.0.27 1127 | resolution: "@oxc-node/core-linux-x64-gnu@npm:0.0.27" 1128 | conditions: os=linux & cpu=x64 & libc=glibc 1129 | languageName: node 1130 | linkType: hard 1131 | 1132 | "@oxc-node/core-linux-x64-musl@npm:0.0.27": 1133 | version: 0.0.27 1134 | resolution: "@oxc-node/core-linux-x64-musl@npm:0.0.27" 1135 | conditions: os=linux & cpu=x64 & libc=musl 1136 | languageName: node 1137 | linkType: hard 1138 | 1139 | "@oxc-node/core-wasm32-wasi@npm:0.0.27": 1140 | version: 0.0.27 1141 | resolution: "@oxc-node/core-wasm32-wasi@npm:0.0.27" 1142 | dependencies: 1143 | "@napi-rs/wasm-runtime": "npm:^0.2.9" 1144 | conditions: cpu=wasm32 1145 | languageName: node 1146 | linkType: hard 1147 | 1148 | "@oxc-node/core-win32-arm64-msvc@npm:0.0.27": 1149 | version: 0.0.27 1150 | resolution: "@oxc-node/core-win32-arm64-msvc@npm:0.0.27" 1151 | conditions: os=win32 & cpu=arm64 1152 | languageName: node 1153 | linkType: hard 1154 | 1155 | "@oxc-node/core-win32-ia32-msvc@npm:0.0.27": 1156 | version: 0.0.27 1157 | resolution: "@oxc-node/core-win32-ia32-msvc@npm:0.0.27" 1158 | conditions: os=win32 & cpu=ia32 1159 | languageName: node 1160 | linkType: hard 1161 | 1162 | "@oxc-node/core-win32-x64-msvc@npm:0.0.27": 1163 | version: 0.0.27 1164 | resolution: "@oxc-node/core-win32-x64-msvc@npm:0.0.27" 1165 | conditions: os=win32 & cpu=x64 1166 | languageName: node 1167 | linkType: hard 1168 | 1169 | "@oxc-node/core@npm:^0.0.27": 1170 | version: 0.0.27 1171 | resolution: "@oxc-node/core@npm:0.0.27" 1172 | dependencies: 1173 | "@oxc-node/core-android-arm-eabi": "npm:0.0.27" 1174 | "@oxc-node/core-android-arm64": "npm:0.0.27" 1175 | "@oxc-node/core-darwin-arm64": "npm:0.0.27" 1176 | "@oxc-node/core-darwin-x64": "npm:0.0.27" 1177 | "@oxc-node/core-freebsd-x64": "npm:0.0.27" 1178 | "@oxc-node/core-linux-arm-gnueabihf": "npm:0.0.27" 1179 | "@oxc-node/core-linux-arm64-gnu": "npm:0.0.27" 1180 | "@oxc-node/core-linux-arm64-musl": "npm:0.0.27" 1181 | "@oxc-node/core-linux-ppc64-gnu": "npm:0.0.27" 1182 | "@oxc-node/core-linux-s390x-gnu": "npm:0.0.27" 1183 | "@oxc-node/core-linux-x64-gnu": "npm:0.0.27" 1184 | "@oxc-node/core-linux-x64-musl": "npm:0.0.27" 1185 | "@oxc-node/core-wasm32-wasi": "npm:0.0.27" 1186 | "@oxc-node/core-win32-arm64-msvc": "npm:0.0.27" 1187 | "@oxc-node/core-win32-ia32-msvc": "npm:0.0.27" 1188 | "@oxc-node/core-win32-x64-msvc": "npm:0.0.27" 1189 | pirates: "npm:^4.0.7" 1190 | dependenciesMeta: 1191 | "@oxc-node/core-android-arm-eabi": 1192 | optional: true 1193 | "@oxc-node/core-android-arm64": 1194 | optional: true 1195 | "@oxc-node/core-darwin-arm64": 1196 | optional: true 1197 | "@oxc-node/core-darwin-x64": 1198 | optional: true 1199 | "@oxc-node/core-freebsd-x64": 1200 | optional: true 1201 | "@oxc-node/core-linux-arm-gnueabihf": 1202 | optional: true 1203 | "@oxc-node/core-linux-arm64-gnu": 1204 | optional: true 1205 | "@oxc-node/core-linux-arm64-musl": 1206 | optional: true 1207 | "@oxc-node/core-linux-ppc64-gnu": 1208 | optional: true 1209 | "@oxc-node/core-linux-s390x-gnu": 1210 | optional: true 1211 | "@oxc-node/core-linux-x64-gnu": 1212 | optional: true 1213 | "@oxc-node/core-linux-x64-musl": 1214 | optional: true 1215 | "@oxc-node/core-wasm32-wasi": 1216 | optional: true 1217 | "@oxc-node/core-win32-arm64-msvc": 1218 | optional: true 1219 | "@oxc-node/core-win32-ia32-msvc": 1220 | optional: true 1221 | "@oxc-node/core-win32-x64-msvc": 1222 | optional: true 1223 | checksum: 10c0/5d625d0e8f484659bcc090afbd537b0a8a5d1098dc65d6ad24a7dde28c9073ee5e698a2779d11309ae2f51fffb00c8bf212d9784704d9b1e61873bbd7bd3cf8f 1224 | languageName: node 1225 | linkType: hard 1226 | 1227 | "@oxlint/darwin-arm64@npm:0.17.0": 1228 | version: 0.17.0 1229 | resolution: "@oxlint/darwin-arm64@npm:0.17.0" 1230 | conditions: os=darwin & cpu=arm64 1231 | languageName: node 1232 | linkType: hard 1233 | 1234 | "@oxlint/darwin-x64@npm:0.17.0": 1235 | version: 0.17.0 1236 | resolution: "@oxlint/darwin-x64@npm:0.17.0" 1237 | conditions: os=darwin & cpu=x64 1238 | languageName: node 1239 | linkType: hard 1240 | 1241 | "@oxlint/linux-arm64-gnu@npm:0.17.0": 1242 | version: 0.17.0 1243 | resolution: "@oxlint/linux-arm64-gnu@npm:0.17.0" 1244 | conditions: os=linux & cpu=arm64 & libc=glibc 1245 | languageName: node 1246 | linkType: hard 1247 | 1248 | "@oxlint/linux-arm64-musl@npm:0.17.0": 1249 | version: 0.17.0 1250 | resolution: "@oxlint/linux-arm64-musl@npm:0.17.0" 1251 | conditions: os=linux & cpu=arm64 & libc=musl 1252 | languageName: node 1253 | linkType: hard 1254 | 1255 | "@oxlint/linux-x64-gnu@npm:0.17.0": 1256 | version: 0.17.0 1257 | resolution: "@oxlint/linux-x64-gnu@npm:0.17.0" 1258 | conditions: os=linux & cpu=x64 & libc=glibc 1259 | languageName: node 1260 | linkType: hard 1261 | 1262 | "@oxlint/linux-x64-musl@npm:0.17.0": 1263 | version: 0.17.0 1264 | resolution: "@oxlint/linux-x64-musl@npm:0.17.0" 1265 | conditions: os=linux & cpu=x64 & libc=musl 1266 | languageName: node 1267 | linkType: hard 1268 | 1269 | "@oxlint/win32-arm64@npm:0.17.0": 1270 | version: 0.17.0 1271 | resolution: "@oxlint/win32-arm64@npm:0.17.0" 1272 | conditions: os=win32 & cpu=arm64 1273 | languageName: node 1274 | linkType: hard 1275 | 1276 | "@oxlint/win32-x64@npm:0.17.0": 1277 | version: 0.17.0 1278 | resolution: "@oxlint/win32-x64@npm:0.17.0" 1279 | conditions: os=win32 & cpu=x64 1280 | languageName: node 1281 | linkType: hard 1282 | 1283 | "@pkgjs/parseargs@npm:^0.11.0": 1284 | version: 0.11.0 1285 | resolution: "@pkgjs/parseargs@npm:0.11.0" 1286 | checksum: 10c0/5bd7576bb1b38a47a7fc7b51ac9f38748e772beebc56200450c4a817d712232b8f1d3ef70532c80840243c657d491cf6a6be1e3a214cff907645819fdc34aadd 1287 | languageName: node 1288 | linkType: hard 1289 | 1290 | "@rollup/pluginutils@npm:^5.1.3": 1291 | version: 5.1.4 1292 | resolution: "@rollup/pluginutils@npm:5.1.4" 1293 | dependencies: 1294 | "@types/estree": "npm:^1.0.0" 1295 | estree-walker: "npm:^2.0.2" 1296 | picomatch: "npm:^4.0.2" 1297 | peerDependencies: 1298 | rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 1299 | peerDependenciesMeta: 1300 | rollup: 1301 | optional: true 1302 | checksum: 10c0/6d58fbc6f1024eb4b087bc9bf59a1d655a8056a60c0b4021d3beaeec3f0743503f52467fd89d2cf0e7eccf2831feb40a05ad541a17637ea21ba10b21c2004deb 1303 | languageName: node 1304 | linkType: hard 1305 | 1306 | "@sindresorhus/merge-streams@npm:^2.1.0": 1307 | version: 2.3.0 1308 | resolution: "@sindresorhus/merge-streams@npm:2.3.0" 1309 | checksum: 10c0/69ee906f3125fb2c6bb6ec5cdd84e8827d93b49b3892bce8b62267116cc7e197b5cccf20c160a1d32c26014ecd14470a72a5e3ee37a58f1d6dadc0db1ccf3894 1310 | languageName: node 1311 | linkType: hard 1312 | 1313 | "@taplo/cli@npm:^0.7.0": 1314 | version: 0.7.0 1315 | resolution: "@taplo/cli@npm:0.7.0" 1316 | bin: 1317 | taplo: dist/cli.js 1318 | checksum: 10c0/c5a9a34502335731e405547fe24ba1a2f867fccdf8abe4d13e261e30fad6c18a2773a961981206166fde0c85b19accef40381c189c8c6ed4952c5b082c1d4996 1319 | languageName: node 1320 | linkType: hard 1321 | 1322 | "@tybys/wasm-util@npm:^0.9.0": 1323 | version: 0.9.0 1324 | resolution: "@tybys/wasm-util@npm:0.9.0" 1325 | dependencies: 1326 | tslib: "npm:^2.4.0" 1327 | checksum: 10c0/f9fde5c554455019f33af6c8215f1a1435028803dc2a2825b077d812bed4209a1a64444a4ca0ce2ea7e1175c8d88e2f9173a36a33c199e8a5c671aa31de8242d 1328 | languageName: node 1329 | linkType: hard 1330 | 1331 | "@types/estree@npm:^1.0.0": 1332 | version: 1.0.7 1333 | resolution: "@types/estree@npm:1.0.7" 1334 | checksum: 10c0/be815254316882f7c40847336cd484c3bc1c3e34f710d197160d455dc9d6d050ffbf4c3bc76585dba86f737f020ab20bdb137ebe0e9116b0c86c7c0342221b8c 1335 | languageName: node 1336 | linkType: hard 1337 | 1338 | "@types/node@npm:^22.15.3": 1339 | version: 22.15.19 1340 | resolution: "@types/node@npm:22.15.19" 1341 | dependencies: 1342 | undici-types: "npm:~6.21.0" 1343 | checksum: 10c0/8ef52fa1a91b1c8891616d46f3921a9f3c65ad1c6bb62db7899c8c28643c13bf9d607a2403b1e5aceb3e6fa6749efc9e0ba5c39618a4872da6946437b0edbfbe 1344 | languageName: node 1345 | linkType: hard 1346 | 1347 | "@vercel/nft@npm:^0.29.2": 1348 | version: 0.29.3 1349 | resolution: "@vercel/nft@npm:0.29.3" 1350 | dependencies: 1351 | "@mapbox/node-pre-gyp": "npm:^2.0.0" 1352 | "@rollup/pluginutils": "npm:^5.1.3" 1353 | acorn: "npm:^8.6.0" 1354 | acorn-import-attributes: "npm:^1.9.5" 1355 | async-sema: "npm:^3.1.1" 1356 | bindings: "npm:^1.4.0" 1357 | estree-walker: "npm:2.0.2" 1358 | glob: "npm:^10.4.5" 1359 | graceful-fs: "npm:^4.2.9" 1360 | node-gyp-build: "npm:^4.2.2" 1361 | picomatch: "npm:^4.0.2" 1362 | resolve-from: "npm:^5.0.0" 1363 | bin: 1364 | nft: out/cli.js 1365 | checksum: 10c0/05e5e5fcd3fcf9129406e4feda81debc0373cc1efe3e7d8f7aee1be7df523128d9e676024e2bc4ae189a0f880a3f13e510ae6547c2e8786889d5a15222b22a26 1366 | languageName: node 1367 | linkType: hard 1368 | 1369 | "abbrev@npm:^3.0.0": 1370 | version: 3.0.1 1371 | resolution: "abbrev@npm:3.0.1" 1372 | checksum: 10c0/21ba8f574ea57a3106d6d35623f2c4a9111d9ee3e9a5be47baed46ec2457d2eac46e07a5c4a60186f88cb98abbe3e24f2d4cca70bc2b12f1692523e2209a9ccf 1373 | languageName: node 1374 | linkType: hard 1375 | 1376 | "acorn-import-attributes@npm:^1.9.5": 1377 | version: 1.9.5 1378 | resolution: "acorn-import-attributes@npm:1.9.5" 1379 | peerDependencies: 1380 | acorn: ^8 1381 | checksum: 10c0/5926eaaead2326d5a86f322ff1b617b0f698aa61dc719a5baa0e9d955c9885cc71febac3fb5bacff71bbf2c4f9c12db2056883c68c53eb962c048b952e1e013d 1382 | languageName: node 1383 | linkType: hard 1384 | 1385 | "acorn-walk@npm:^8.3.4": 1386 | version: 8.3.4 1387 | resolution: "acorn-walk@npm:8.3.4" 1388 | dependencies: 1389 | acorn: "npm:^8.11.0" 1390 | checksum: 10c0/76537ac5fb2c37a64560feaf3342023dadc086c46da57da363e64c6148dc21b57d49ace26f949e225063acb6fb441eabffd89f7a3066de5ad37ab3e328927c62 1391 | languageName: node 1392 | linkType: hard 1393 | 1394 | "acorn@npm:^8.11.0, acorn@npm:^8.14.1, acorn@npm:^8.6.0": 1395 | version: 8.14.1 1396 | resolution: "acorn@npm:8.14.1" 1397 | bin: 1398 | acorn: bin/acorn 1399 | checksum: 10c0/dbd36c1ed1d2fa3550140000371fcf721578095b18777b85a79df231ca093b08edc6858d75d6e48c73e431c174dcf9214edbd7e6fa5911b93bd8abfa54e47123 1400 | languageName: node 1401 | linkType: hard 1402 | 1403 | "agent-base@npm:^7.1.2": 1404 | version: 7.1.3 1405 | resolution: "agent-base@npm:7.1.3" 1406 | checksum: 10c0/6192b580c5b1d8fb399b9c62bf8343d76654c2dd62afcb9a52b2cf44a8b6ace1e3b704d3fe3547d91555c857d3df02603341ff2cb961b9cfe2b12f9f3c38ee11 1407 | languageName: node 1408 | linkType: hard 1409 | 1410 | "ansi-escapes@npm:^4.3.2": 1411 | version: 4.3.2 1412 | resolution: "ansi-escapes@npm:4.3.2" 1413 | dependencies: 1414 | type-fest: "npm:^0.21.3" 1415 | checksum: 10c0/da917be01871525a3dfcf925ae2977bc59e8c513d4423368645634bf5d4ceba5401574eb705c1e92b79f7292af5a656f78c5725a4b0e1cec97c4b413705c1d50 1416 | languageName: node 1417 | linkType: hard 1418 | 1419 | "ansi-escapes@npm:^7.0.0": 1420 | version: 7.0.0 1421 | resolution: "ansi-escapes@npm:7.0.0" 1422 | dependencies: 1423 | environment: "npm:^1.0.0" 1424 | checksum: 10c0/86e51e36fabef18c9c004af0a280573e828900641cea35134a124d2715e0c5a473494ab4ce396614505da77638ae290ff72dd8002d9747d2ee53f5d6bbe336be 1425 | languageName: node 1426 | linkType: hard 1427 | 1428 | "ansi-regex@npm:^5.0.1": 1429 | version: 5.0.1 1430 | resolution: "ansi-regex@npm:5.0.1" 1431 | checksum: 10c0/9a64bb8627b434ba9327b60c027742e5d17ac69277960d041898596271d992d4d52ba7267a63ca10232e29f6107fc8a835f6ce8d719b88c5f8493f8254813737 1432 | languageName: node 1433 | linkType: hard 1434 | 1435 | "ansi-regex@npm:^6.0.1": 1436 | version: 6.1.0 1437 | resolution: "ansi-regex@npm:6.1.0" 1438 | checksum: 10c0/a91daeddd54746338478eef88af3439a7edf30f8e23196e2d6ed182da9add559c601266dbef01c2efa46a958ad6f1f8b176799657616c702b5b02e799e7fd8dc 1439 | languageName: node 1440 | linkType: hard 1441 | 1442 | "ansi-styles@npm:^4.0.0": 1443 | version: 4.3.0 1444 | resolution: "ansi-styles@npm:4.3.0" 1445 | dependencies: 1446 | color-convert: "npm:^2.0.1" 1447 | checksum: 10c0/895a23929da416f2bd3de7e9cb4eabd340949328ab85ddd6e484a637d8f6820d485f53933446f5291c3b760cbc488beb8e88573dd0f9c7daf83dccc8fe81b041 1448 | languageName: node 1449 | linkType: hard 1450 | 1451 | "ansi-styles@npm:^6.0.0, ansi-styles@npm:^6.1.0, ansi-styles@npm:^6.2.1": 1452 | version: 6.2.1 1453 | resolution: "ansi-styles@npm:6.2.1" 1454 | checksum: 10c0/5d1ec38c123984bcedd996eac680d548f31828bd679a66db2bdf11844634dde55fec3efa9c6bb1d89056a5e79c1ac540c4c784d592ea1d25028a92227d2f2d5c 1455 | languageName: node 1456 | linkType: hard 1457 | 1458 | "argparse@npm:^1.0.7": 1459 | version: 1.0.10 1460 | resolution: "argparse@npm:1.0.10" 1461 | dependencies: 1462 | sprintf-js: "npm:~1.0.2" 1463 | checksum: 10c0/b2972c5c23c63df66bca144dbc65d180efa74f25f8fd9b7d9a0a6c88ae839db32df3d54770dcb6460cf840d232b60695d1a6b1053f599d84e73f7437087712de 1464 | languageName: node 1465 | linkType: hard 1466 | 1467 | "argparse@npm:^2.0.1": 1468 | version: 2.0.1 1469 | resolution: "argparse@npm:2.0.1" 1470 | checksum: 10c0/c5640c2d89045371c7cedd6a70212a04e360fd34d6edeae32f6952c63949e3525ea77dbec0289d8213a99bbaeab5abfa860b5c12cf88a2e6cf8106e90dd27a7e 1471 | languageName: node 1472 | linkType: hard 1473 | 1474 | "array-find-index@npm:^1.0.1": 1475 | version: 1.0.2 1476 | resolution: "array-find-index@npm:1.0.2" 1477 | checksum: 10c0/86b9485c74ddd324feab807e10a6de3f9c1683856267236fac4bb4d4667ada6463e106db3f6c540ae6b720e0442b590ec701d13676df4c6af30ebf4da09b4f57 1478 | languageName: node 1479 | linkType: hard 1480 | 1481 | "arrgv@npm:^1.0.2": 1482 | version: 1.0.2 1483 | resolution: "arrgv@npm:1.0.2" 1484 | checksum: 10c0/7e6e782e6b749923ac7cbc4048ef6fe0844c4a59bfc8932fcd4c44566ba25eed46501f94dd7cf3c7297da88f3f599ca056bfb77d0c2484aebc92f04239f69124 1485 | languageName: node 1486 | linkType: hard 1487 | 1488 | "arrify@npm:^3.0.0": 1489 | version: 3.0.0 1490 | resolution: "arrify@npm:3.0.0" 1491 | checksum: 10c0/2e26601b8486f29780f1f70f7ac05a226755814c2a3ab42e196748f650af1dc310cd575a11dd4b9841c70fd7460b2dd2b8fe6fb7a3375878e2660706efafa58e 1492 | languageName: node 1493 | linkType: hard 1494 | 1495 | "async-sema@npm:^3.1.1": 1496 | version: 3.1.1 1497 | resolution: "async-sema@npm:3.1.1" 1498 | checksum: 10c0/a16da9f7f2dbdd00a969bf264b7ad331b59df3eac2b38f529b881c5cc8662594e68ed096d927ec2aabdc13454379cdc6d677bcdb0a3d2db338fb4be17957832b 1499 | languageName: node 1500 | linkType: hard 1501 | 1502 | "ava@npm:^6.3.0": 1503 | version: 6.3.0 1504 | resolution: "ava@npm:6.3.0" 1505 | dependencies: 1506 | "@vercel/nft": "npm:^0.29.2" 1507 | acorn: "npm:^8.14.1" 1508 | acorn-walk: "npm:^8.3.4" 1509 | ansi-styles: "npm:^6.2.1" 1510 | arrgv: "npm:^1.0.2" 1511 | arrify: "npm:^3.0.0" 1512 | callsites: "npm:^4.2.0" 1513 | cbor: "npm:^10.0.3" 1514 | chalk: "npm:^5.4.1" 1515 | chunkd: "npm:^2.0.1" 1516 | ci-info: "npm:^4.2.0" 1517 | ci-parallel-vars: "npm:^1.0.1" 1518 | cli-truncate: "npm:^4.0.0" 1519 | code-excerpt: "npm:^4.0.0" 1520 | common-path-prefix: "npm:^3.0.0" 1521 | concordance: "npm:^5.0.4" 1522 | currently-unhandled: "npm:^0.4.1" 1523 | debug: "npm:^4.4.0" 1524 | emittery: "npm:^1.1.0" 1525 | figures: "npm:^6.1.0" 1526 | globby: "npm:^14.1.0" 1527 | ignore-by-default: "npm:^2.1.0" 1528 | indent-string: "npm:^5.0.0" 1529 | is-plain-object: "npm:^5.0.0" 1530 | is-promise: "npm:^4.0.0" 1531 | matcher: "npm:^5.0.0" 1532 | memoize: "npm:^10.1.0" 1533 | ms: "npm:^2.1.3" 1534 | p-map: "npm:^7.0.3" 1535 | package-config: "npm:^5.0.0" 1536 | picomatch: "npm:^4.0.2" 1537 | plur: "npm:^5.1.0" 1538 | pretty-ms: "npm:^9.2.0" 1539 | resolve-cwd: "npm:^3.0.0" 1540 | stack-utils: "npm:^2.0.6" 1541 | strip-ansi: "npm:^7.1.0" 1542 | supertap: "npm:^3.0.1" 1543 | temp-dir: "npm:^3.0.0" 1544 | write-file-atomic: "npm:^6.0.0" 1545 | yargs: "npm:^17.7.2" 1546 | peerDependencies: 1547 | "@ava/typescript": "*" 1548 | peerDependenciesMeta: 1549 | "@ava/typescript": 1550 | optional: true 1551 | bin: 1552 | ava: entrypoints/cli.mjs 1553 | checksum: 10c0/10abc34f2d323b74b27fa6cb3ba808603c898459b0807d506be22ced15c32e977c278de119612838718179511df91fed2bfa1767238255829cf0bafe4fd3b721 1554 | languageName: node 1555 | linkType: hard 1556 | 1557 | "balanced-match@npm:^1.0.0": 1558 | version: 1.0.2 1559 | resolution: "balanced-match@npm:1.0.2" 1560 | checksum: 10c0/9308baf0a7e4838a82bbfd11e01b1cb0f0cf2893bc1676c27c2a8c0e70cbae1c59120c3268517a8ae7fb6376b4639ef81ca22582611dbee4ed28df945134aaee 1561 | languageName: node 1562 | linkType: hard 1563 | 1564 | "before-after-hook@npm:^3.0.2": 1565 | version: 3.0.2 1566 | resolution: "before-after-hook@npm:3.0.2" 1567 | checksum: 10c0/dea640f9e88a1085372c9bcc974b7bf379267490693da92ec102a7d8b515dd1e95f00ef575a146b83ca638104c57406c3427d37bdf082f602dde4b56d05bba14 1568 | languageName: node 1569 | linkType: hard 1570 | 1571 | "bindings@npm:^1.4.0": 1572 | version: 1.5.0 1573 | resolution: "bindings@npm:1.5.0" 1574 | dependencies: 1575 | file-uri-to-path: "npm:1.0.0" 1576 | checksum: 10c0/3dab2491b4bb24124252a91e656803eac24292473e56554e35bbfe3cc1875332cfa77600c3bac7564049dc95075bf6fcc63a4609920ff2d64d0fe405fcf0d4ba 1577 | languageName: node 1578 | linkType: hard 1579 | 1580 | "blueimp-md5@npm:^2.10.0": 1581 | version: 2.19.0 1582 | resolution: "blueimp-md5@npm:2.19.0" 1583 | checksum: 10c0/85d04343537dd99a288c62450341dcce7380d3454c81f8e5a971ddd80307d6f9ef51b5b92ad7d48aaaa92fd6d3a1f6b2f4fada068faae646887f7bfabc17a346 1584 | languageName: node 1585 | linkType: hard 1586 | 1587 | "brace-expansion@npm:^2.0.1": 1588 | version: 2.0.1 1589 | resolution: "brace-expansion@npm:2.0.1" 1590 | dependencies: 1591 | balanced-match: "npm:^1.0.0" 1592 | checksum: 10c0/b358f2fe060e2d7a87aa015979ecea07f3c37d4018f8d6deb5bd4c229ad3a0384fe6029bb76cd8be63c81e516ee52d1a0673edbe2023d53a5191732ae3c3e49f 1593 | languageName: node 1594 | linkType: hard 1595 | 1596 | "braces@npm:^3.0.3": 1597 | version: 3.0.3 1598 | resolution: "braces@npm:3.0.3" 1599 | dependencies: 1600 | fill-range: "npm:^7.1.1" 1601 | checksum: 10c0/7c6dfd30c338d2997ba77500539227b9d1f85e388a5f43220865201e407e076783d0881f2d297b9f80951b4c957fcf0b51c1d2d24227631643c3f7c284b0aa04 1602 | languageName: node 1603 | linkType: hard 1604 | 1605 | "callsites@npm:^4.2.0": 1606 | version: 4.2.0 1607 | resolution: "callsites@npm:4.2.0" 1608 | checksum: 10c0/8f7e269ec09fc0946bb22d838a8bc7932e1909ab4a833b964749f4d0e8bdeaa1f253287c4f911f61781f09620b6925ccd19a5ea4897489c4e59442c660c312a3 1609 | languageName: node 1610 | linkType: hard 1611 | 1612 | "cbor@npm:^10.0.3": 1613 | version: 10.0.3 1614 | resolution: "cbor@npm:10.0.3" 1615 | dependencies: 1616 | nofilter: "npm:^3.0.2" 1617 | checksum: 10c0/d1657a24799ab35cb262aef91205431100def90c0200917e42eec4580726880c090d5a0a77620b665248447a36db8cc5ea6b7fd6eac8e083a64098c7179ea2d1 1618 | languageName: node 1619 | linkType: hard 1620 | 1621 | "chalk@npm:^5.4.1": 1622 | version: 5.4.1 1623 | resolution: "chalk@npm:5.4.1" 1624 | checksum: 10c0/b23e88132c702f4855ca6d25cb5538b1114343e41472d5263ee8a37cccfccd9c4216d111e1097c6a27830407a1dc81fecdf2a56f2c63033d4dbbd88c10b0dcef 1625 | languageName: node 1626 | linkType: hard 1627 | 1628 | "chardet@npm:^0.7.0": 1629 | version: 0.7.0 1630 | resolution: "chardet@npm:0.7.0" 1631 | checksum: 10c0/96e4731b9ec8050cbb56ab684e8c48d6c33f7826b755802d14e3ebfdc51c57afeece3ea39bc6b09acc359e4363525388b915e16640c1378053820f5e70d0f27d 1632 | languageName: node 1633 | linkType: hard 1634 | 1635 | "chownr@npm:^3.0.0": 1636 | version: 3.0.0 1637 | resolution: "chownr@npm:3.0.0" 1638 | checksum: 10c0/43925b87700f7e3893296c8e9c56cc58f926411cce3a6e5898136daaf08f08b9a8eb76d37d3267e707d0dcc17aed2e2ebdf5848c0c3ce95cf910a919935c1b10 1639 | languageName: node 1640 | linkType: hard 1641 | 1642 | "chunkd@npm:^2.0.1": 1643 | version: 2.0.1 1644 | resolution: "chunkd@npm:2.0.1" 1645 | checksum: 10c0/4e0c5aac6048ecedfa4cd0a5f6c4f010c70a7b7645aeca7bfeb47cb0733c3463054f0ced3f2667b2e0e67edd75d68a8e05481b01115ba3f8a952a93026254504 1646 | languageName: node 1647 | linkType: hard 1648 | 1649 | "ci-info@npm:^4.2.0": 1650 | version: 4.2.0 1651 | resolution: "ci-info@npm:4.2.0" 1652 | checksum: 10c0/37a2f4b6a213a5cf835890eb0241f0d5b022f6cfefde58a69e9af8e3a0e71e06d6ad7754b0d4efb9cd2613e58a7a33996d71b56b0d04242722e86666f3f3d058 1653 | languageName: node 1654 | linkType: hard 1655 | 1656 | "ci-parallel-vars@npm:^1.0.1": 1657 | version: 1.0.1 1658 | resolution: "ci-parallel-vars@npm:1.0.1" 1659 | checksum: 10c0/80952f699cbbc146092b077b4f3e28d085620eb4e6be37f069b4dbb3db0ee70e8eec3beef4ebe70ff60631e9fc743b9d0869678489f167442cac08b260e5ac08 1660 | languageName: node 1661 | linkType: hard 1662 | 1663 | "cli-cursor@npm:^5.0.0": 1664 | version: 5.0.0 1665 | resolution: "cli-cursor@npm:5.0.0" 1666 | dependencies: 1667 | restore-cursor: "npm:^5.0.0" 1668 | checksum: 10c0/7ec62f69b79f6734ab209a3e4dbdc8af7422d44d360a7cb1efa8a0887bbe466a6e625650c466fe4359aee44dbe2dc0b6994b583d40a05d0808a5cb193641d220 1669 | languageName: node 1670 | linkType: hard 1671 | 1672 | "cli-truncate@npm:^4.0.0": 1673 | version: 4.0.0 1674 | resolution: "cli-truncate@npm:4.0.0" 1675 | dependencies: 1676 | slice-ansi: "npm:^5.0.0" 1677 | string-width: "npm:^7.0.0" 1678 | checksum: 10c0/d7f0b73e3d9b88cb496e6c086df7410b541b56a43d18ade6a573c9c18bd001b1c3fba1ad578f741a4218fdc794d042385f8ac02c25e1c295a2d8b9f3cb86eb4c 1679 | languageName: node 1680 | linkType: hard 1681 | 1682 | "cli-width@npm:^4.1.0": 1683 | version: 4.1.0 1684 | resolution: "cli-width@npm:4.1.0" 1685 | checksum: 10c0/1fbd56413578f6117abcaf858903ba1f4ad78370a4032f916745fa2c7e390183a9d9029cf837df320b0fdce8137668e522f60a30a5f3d6529ff3872d265a955f 1686 | languageName: node 1687 | linkType: hard 1688 | 1689 | "clipanion@npm:^4.0.0-rc.4": 1690 | version: 4.0.0-rc.4 1691 | resolution: "clipanion@npm:4.0.0-rc.4" 1692 | dependencies: 1693 | typanion: "npm:^3.8.0" 1694 | peerDependencies: 1695 | typanion: "*" 1696 | checksum: 10c0/047b415b59a5e9777d00690fba563ccc850eca6bf27790a88d1deea3ecc8a89840ae9aed554ff284cc698a9f3f20256e43c25ff4a7c4c90a71e5e7d9dca61dd1 1697 | languageName: node 1698 | linkType: hard 1699 | 1700 | "cliui@npm:^8.0.1": 1701 | version: 8.0.1 1702 | resolution: "cliui@npm:8.0.1" 1703 | dependencies: 1704 | string-width: "npm:^4.2.0" 1705 | strip-ansi: "npm:^6.0.1" 1706 | wrap-ansi: "npm:^7.0.0" 1707 | checksum: 10c0/4bda0f09c340cbb6dfdc1ed508b3ca080f12992c18d68c6be4d9cf51756033d5266e61ec57529e610dacbf4da1c634423b0c1b11037709cc6b09045cbd815df5 1708 | languageName: node 1709 | linkType: hard 1710 | 1711 | "code-excerpt@npm:^4.0.0": 1712 | version: 4.0.0 1713 | resolution: "code-excerpt@npm:4.0.0" 1714 | dependencies: 1715 | convert-to-spaces: "npm:^2.0.1" 1716 | checksum: 10c0/b6c5a06e039cecd2ab6a0e10ee0831de8362107d1f298ca3558b5f9004cb8e0260b02dd6c07f57b9a0e346c76864d2873311ee1989809fdeb05bd5fbbadde773 1717 | languageName: node 1718 | linkType: hard 1719 | 1720 | "color-convert@npm:^2.0.1": 1721 | version: 2.0.1 1722 | resolution: "color-convert@npm:2.0.1" 1723 | dependencies: 1724 | color-name: "npm:~1.1.4" 1725 | checksum: 10c0/37e1150172f2e311fe1b2df62c6293a342ee7380da7b9cfdba67ea539909afbd74da27033208d01d6d5cfc65ee7868a22e18d7e7648e004425441c0f8a15a7d7 1726 | languageName: node 1727 | linkType: hard 1728 | 1729 | "color-name@npm:~1.1.4": 1730 | version: 1.1.4 1731 | resolution: "color-name@npm:1.1.4" 1732 | checksum: 10c0/a1a3f914156960902f46f7f56bc62effc6c94e84b2cae157a526b1c1f74b677a47ec602bf68a61abfa2b42d15b7c5651c6dbe72a43af720bc588dff885b10f95 1733 | languageName: node 1734 | linkType: hard 1735 | 1736 | "colorette@npm:^2.0.20": 1737 | version: 2.0.20 1738 | resolution: "colorette@npm:2.0.20" 1739 | checksum: 10c0/e94116ff33b0ff56f3b83b9ace895e5bf87c2a7a47b3401b8c3f3226e050d5ef76cf4072fb3325f9dc24d1698f9b730baf4e05eeaf861d74a1883073f4c98a40 1740 | languageName: node 1741 | linkType: hard 1742 | 1743 | "commander@npm:^13.1.0": 1744 | version: 13.1.0 1745 | resolution: "commander@npm:13.1.0" 1746 | checksum: 10c0/7b8c5544bba704fbe84b7cab2e043df8586d5c114a4c5b607f83ae5060708940ed0b5bd5838cf8ce27539cde265c1cbd59ce3c8c6b017ed3eec8943e3a415164 1747 | languageName: node 1748 | linkType: hard 1749 | 1750 | "common-path-prefix@npm:^3.0.0": 1751 | version: 3.0.0 1752 | resolution: "common-path-prefix@npm:3.0.0" 1753 | checksum: 10c0/c4a74294e1b1570f4a8ab435285d185a03976c323caa16359053e749db4fde44e3e6586c29cd051100335e11895767cbbd27ea389108e327d62f38daf4548fdb 1754 | languageName: node 1755 | linkType: hard 1756 | 1757 | "concordance@npm:^5.0.4": 1758 | version: 5.0.4 1759 | resolution: "concordance@npm:5.0.4" 1760 | dependencies: 1761 | date-time: "npm:^3.1.0" 1762 | esutils: "npm:^2.0.3" 1763 | fast-diff: "npm:^1.2.0" 1764 | js-string-escape: "npm:^1.0.1" 1765 | lodash: "npm:^4.17.15" 1766 | md5-hex: "npm:^3.0.1" 1767 | semver: "npm:^7.3.2" 1768 | well-known-symbols: "npm:^2.0.0" 1769 | checksum: 10c0/59b440f330df3a7c9aa148ba588b3e99aed86acab225b4f01ffcea34ace4cf11f817e31153254e8f38ed48508998dad40b9106951a743c334d751f7ab21afb8a 1770 | languageName: node 1771 | linkType: hard 1772 | 1773 | "consola@npm:^3.2.3": 1774 | version: 3.4.2 1775 | resolution: "consola@npm:3.4.2" 1776 | checksum: 10c0/7cebe57ecf646ba74b300bcce23bff43034ed6fbec9f7e39c27cee1dc00df8a21cd336b466ad32e304ea70fba04ec9e890c200270de9a526ce021ba8a7e4c11a 1777 | languageName: node 1778 | linkType: hard 1779 | 1780 | "convert-to-spaces@npm:^2.0.1": 1781 | version: 2.0.1 1782 | resolution: "convert-to-spaces@npm:2.0.1" 1783 | checksum: 10c0/d90aa0e3b6a27f9d5265a8d32def3c5c855b3e823a9db1f26d772f8146d6b91020a2fdfd905ce8048a73fad3aaf836fef8188c67602c374405e2ae8396c4ac46 1784 | languageName: node 1785 | linkType: hard 1786 | 1787 | "cross-spawn@npm:^7.0.6": 1788 | version: 7.0.6 1789 | resolution: "cross-spawn@npm:7.0.6" 1790 | dependencies: 1791 | path-key: "npm:^3.1.0" 1792 | shebang-command: "npm:^2.0.0" 1793 | which: "npm:^2.0.1" 1794 | checksum: 10c0/053ea8b2135caff68a9e81470e845613e374e7309a47731e81639de3eaeb90c3d01af0e0b44d2ab9d50b43467223b88567dfeb3262db942dc063b9976718ffc1 1795 | languageName: node 1796 | linkType: hard 1797 | 1798 | "currently-unhandled@npm:^0.4.1": 1799 | version: 0.4.1 1800 | resolution: "currently-unhandled@npm:0.4.1" 1801 | dependencies: 1802 | array-find-index: "npm:^1.0.1" 1803 | checksum: 10c0/32d197689ec32f035910202c1abb0dc6424dce01d7b51779c685119b380d98535c110ffff67a262fc7e367612a7dfd30d3d3055f9a6634b5a9dd1302de7ef11c 1804 | languageName: node 1805 | linkType: hard 1806 | 1807 | "date-time@npm:^3.1.0": 1808 | version: 3.1.0 1809 | resolution: "date-time@npm:3.1.0" 1810 | dependencies: 1811 | time-zone: "npm:^1.0.0" 1812 | checksum: 10c0/aa3e2e930d74b0b9e90f69de7a16d3376e30f21f1f4ce9a2311d8fec32d760e776efea752dafad0ce188187265235229013036202be053fc2d7979813bfb6ded 1813 | languageName: node 1814 | linkType: hard 1815 | 1816 | "debug@npm:4, debug@npm:^4.4.0": 1817 | version: 4.4.1 1818 | resolution: "debug@npm:4.4.1" 1819 | dependencies: 1820 | ms: "npm:^2.1.3" 1821 | peerDependenciesMeta: 1822 | supports-color: 1823 | optional: true 1824 | checksum: 10c0/d2b44bc1afd912b49bb7ebb0d50a860dc93a4dd7d946e8de94abc957bb63726b7dd5aa48c18c2386c379ec024c46692e15ed3ed97d481729f929201e671fcd55 1825 | languageName: node 1826 | linkType: hard 1827 | 1828 | "detect-libc@npm:^2.0.0": 1829 | version: 2.0.4 1830 | resolution: "detect-libc@npm:2.0.4" 1831 | checksum: 10c0/c15541f836eba4b1f521e4eecc28eefefdbc10a94d3b8cb4c507689f332cc111babb95deda66f2de050b22122113189986d5190be97d51b5a2b23b938415e67c 1832 | languageName: node 1833 | linkType: hard 1834 | 1835 | "eastasianwidth@npm:^0.2.0": 1836 | version: 0.2.0 1837 | resolution: "eastasianwidth@npm:0.2.0" 1838 | checksum: 10c0/26f364ebcdb6395f95124fda411f63137a4bfb5d3a06453f7f23dfe52502905bd84e0488172e0f9ec295fdc45f05c23d5d91baf16bd26f0fe9acd777a188dc39 1839 | languageName: node 1840 | linkType: hard 1841 | 1842 | "emittery@npm:^1.1.0": 1843 | version: 1.1.0 1844 | resolution: "emittery@npm:1.1.0" 1845 | checksum: 10c0/645d4d7307b52c81bb2d2f9f320aa6a3c0225f53a4bfef2d337be8086df975746f7dd619f1dd7b2ffd4f2288103f28019e7b8567718677600e47507496d3af5f 1846 | languageName: node 1847 | linkType: hard 1848 | 1849 | "emnapi@npm:^1.4.0": 1850 | version: 1.4.3 1851 | resolution: "emnapi@npm:1.4.3" 1852 | peerDependencies: 1853 | node-addon-api: ">= 6.1.0" 1854 | peerDependenciesMeta: 1855 | node-addon-api: 1856 | optional: true 1857 | checksum: 10c0/61516ec68c4fd9ece305f4598809bb0ff1f0622f3ef267e619a66a8debdbbe655da82a427e6bae308131cfc1680debf8460b98aaa20f9ed23f36e019f4f35b3e 1858 | languageName: node 1859 | linkType: hard 1860 | 1861 | "emoji-regex@npm:^10.3.0": 1862 | version: 10.4.0 1863 | resolution: "emoji-regex@npm:10.4.0" 1864 | checksum: 10c0/a3fcedfc58bfcce21a05a5f36a529d81e88d602100145fcca3dc6f795e3c8acc4fc18fe773fbf9b6d6e9371205edb3afa2668ec3473fa2aa7fd47d2a9d46482d 1865 | languageName: node 1866 | linkType: hard 1867 | 1868 | "emoji-regex@npm:^8.0.0": 1869 | version: 8.0.0 1870 | resolution: "emoji-regex@npm:8.0.0" 1871 | checksum: 10c0/b6053ad39951c4cf338f9092d7bfba448cdfd46fe6a2a034700b149ac9ffbc137e361cbd3c442297f86bed2e5f7576c1b54cc0a6bf8ef5106cc62f496af35010 1872 | languageName: node 1873 | linkType: hard 1874 | 1875 | "emoji-regex@npm:^9.2.2": 1876 | version: 9.2.2 1877 | resolution: "emoji-regex@npm:9.2.2" 1878 | checksum: 10c0/af014e759a72064cf66e6e694a7fc6b0ed3d8db680427b021a89727689671cefe9d04151b2cad51dbaf85d5ba790d061cd167f1cf32eb7b281f6368b3c181639 1879 | languageName: node 1880 | linkType: hard 1881 | 1882 | "environment@npm:^1.0.0": 1883 | version: 1.1.0 1884 | resolution: "environment@npm:1.1.0" 1885 | checksum: 10c0/fb26434b0b581ab397039e51ff3c92b34924a98b2039dcb47e41b7bca577b9dbf134a8eadb364415c74464b682e2d3afe1a4c0eb9873dc44ea814c5d3103331d 1886 | languageName: node 1887 | linkType: hard 1888 | 1889 | "escalade@npm:^3.1.1": 1890 | version: 3.2.0 1891 | resolution: "escalade@npm:3.2.0" 1892 | checksum: 10c0/ced4dd3a78e15897ed3be74e635110bbf3b08877b0a41be50dcb325ee0e0b5f65fc2d50e9845194d7c4633f327e2e1c6cce00a71b617c5673df0374201d67f65 1893 | languageName: node 1894 | linkType: hard 1895 | 1896 | "escape-string-regexp@npm:^2.0.0": 1897 | version: 2.0.0 1898 | resolution: "escape-string-regexp@npm:2.0.0" 1899 | checksum: 10c0/2530479fe8db57eace5e8646c9c2a9c80fa279614986d16dcc6bcaceb63ae77f05a851ba6c43756d816c61d7f4534baf56e3c705e3e0d884818a46808811c507 1900 | languageName: node 1901 | linkType: hard 1902 | 1903 | "escape-string-regexp@npm:^5.0.0": 1904 | version: 5.0.0 1905 | resolution: "escape-string-regexp@npm:5.0.0" 1906 | checksum: 10c0/6366f474c6f37a802800a435232395e04e9885919873e382b157ab7e8f0feb8fed71497f84a6f6a81a49aab41815522f5839112bd38026d203aea0c91622df95 1907 | languageName: node 1908 | linkType: hard 1909 | 1910 | "esprima@npm:^4.0.0": 1911 | version: 4.0.1 1912 | resolution: "esprima@npm:4.0.1" 1913 | bin: 1914 | esparse: ./bin/esparse.js 1915 | esvalidate: ./bin/esvalidate.js 1916 | checksum: 10c0/ad4bab9ead0808cf56501750fd9d3fb276f6b105f987707d059005d57e182d18a7c9ec7f3a01794ebddcca676773e42ca48a32d67a250c9d35e009ca613caba3 1917 | languageName: node 1918 | linkType: hard 1919 | 1920 | "estree-walker@npm:2.0.2, estree-walker@npm:^2.0.2": 1921 | version: 2.0.2 1922 | resolution: "estree-walker@npm:2.0.2" 1923 | checksum: 10c0/53a6c54e2019b8c914dc395890153ffdc2322781acf4bd7d1a32d7aedc1710807bdcd866ac133903d5629ec601fbb50abe8c2e5553c7f5a0afdd9b6af6c945af 1924 | languageName: node 1925 | linkType: hard 1926 | 1927 | "esutils@npm:^2.0.3": 1928 | version: 2.0.3 1929 | resolution: "esutils@npm:2.0.3" 1930 | checksum: 10c0/9a2fe69a41bfdade834ba7c42de4723c97ec776e40656919c62cbd13607c45e127a003f05f724a1ea55e5029a4cf2de444b13009f2af71271e42d93a637137c7 1931 | languageName: node 1932 | linkType: hard 1933 | 1934 | "eventemitter3@npm:^5.0.1": 1935 | version: 5.0.1 1936 | resolution: "eventemitter3@npm:5.0.1" 1937 | checksum: 10c0/4ba5c00c506e6c786b4d6262cfbce90ddc14c10d4667e5c83ae993c9de88aa856033994dd2b35b83e8dc1170e224e66a319fa80adc4c32adcd2379bbc75da814 1938 | languageName: node 1939 | linkType: hard 1940 | 1941 | "external-editor@npm:^3.1.0": 1942 | version: 3.1.0 1943 | resolution: "external-editor@npm:3.1.0" 1944 | dependencies: 1945 | chardet: "npm:^0.7.0" 1946 | iconv-lite: "npm:^0.4.24" 1947 | tmp: "npm:^0.0.33" 1948 | checksum: 10c0/c98f1ba3efdfa3c561db4447ff366a6adb5c1e2581462522c56a18bf90dfe4da382f9cd1feee3e330108c3595a854b218272539f311ba1b3298f841eb0fbf339 1949 | languageName: node 1950 | linkType: hard 1951 | 1952 | "fast-content-type-parse@npm:^2.0.0": 1953 | version: 2.0.1 1954 | resolution: "fast-content-type-parse@npm:2.0.1" 1955 | checksum: 10c0/e5ff87d75a35ae4cf377df1dca46ec49e7abbdc8513689676ecdef548b94900b50e66e516e64470035d79b9f7010ef15d98c24d8ae803a881363cc59e0715e19 1956 | languageName: node 1957 | linkType: hard 1958 | 1959 | "fast-diff@npm:^1.2.0": 1960 | version: 1.3.0 1961 | resolution: "fast-diff@npm:1.3.0" 1962 | checksum: 10c0/5c19af237edb5d5effda008c891a18a585f74bf12953be57923f17a3a4d0979565fc64dbc73b9e20926b9d895f5b690c618cbb969af0cf022e3222471220ad29 1963 | languageName: node 1964 | linkType: hard 1965 | 1966 | "fast-glob@npm:^3.3.3": 1967 | version: 3.3.3 1968 | resolution: "fast-glob@npm:3.3.3" 1969 | dependencies: 1970 | "@nodelib/fs.stat": "npm:^2.0.2" 1971 | "@nodelib/fs.walk": "npm:^1.2.3" 1972 | glob-parent: "npm:^5.1.2" 1973 | merge2: "npm:^1.3.0" 1974 | micromatch: "npm:^4.0.8" 1975 | checksum: 10c0/f6aaa141d0d3384cf73cbcdfc52f475ed293f6d5b65bfc5def368b09163a9f7e5ec2b3014d80f733c405f58e470ee0cc451c2937685045cddcdeaa24199c43fe 1976 | languageName: node 1977 | linkType: hard 1978 | 1979 | "fastq@npm:^1.6.0": 1980 | version: 1.19.1 1981 | resolution: "fastq@npm:1.19.1" 1982 | dependencies: 1983 | reusify: "npm:^1.0.4" 1984 | checksum: 10c0/ebc6e50ac7048daaeb8e64522a1ea7a26e92b3cee5cd1c7f2316cdca81ba543aa40a136b53891446ea5c3a67ec215fbaca87ad405f102dd97012f62916905630 1985 | languageName: node 1986 | linkType: hard 1987 | 1988 | "figures@npm:^6.1.0": 1989 | version: 6.1.0 1990 | resolution: "figures@npm:6.1.0" 1991 | dependencies: 1992 | is-unicode-supported: "npm:^2.0.0" 1993 | checksum: 10c0/9159df4264d62ef447a3931537de92f5012210cf5135c35c010df50a2169377581378149abfe1eb238bd6acbba1c0d547b1f18e0af6eee49e30363cedaffcfe4 1994 | languageName: node 1995 | linkType: hard 1996 | 1997 | "file-uri-to-path@npm:1.0.0": 1998 | version: 1.0.0 1999 | resolution: "file-uri-to-path@npm:1.0.0" 2000 | checksum: 10c0/3b545e3a341d322d368e880e1c204ef55f1d45cdea65f7efc6c6ce9e0c4d22d802d5629320eb779d006fe59624ac17b0e848d83cc5af7cd101f206cb704f5519 2001 | languageName: node 2002 | linkType: hard 2003 | 2004 | "fill-range@npm:^7.1.1": 2005 | version: 7.1.1 2006 | resolution: "fill-range@npm:7.1.1" 2007 | dependencies: 2008 | to-regex-range: "npm:^5.0.1" 2009 | checksum: 10c0/b75b691bbe065472f38824f694c2f7449d7f5004aa950426a2c28f0306c60db9b880c0b0e4ed819997ffb882d1da02cfcfc819bddc94d71627f5269682edf018 2010 | languageName: node 2011 | linkType: hard 2012 | 2013 | "find-up-simple@npm:^1.0.0": 2014 | version: 1.0.1 2015 | resolution: "find-up-simple@npm:1.0.1" 2016 | checksum: 10c0/ad34de157b7db925d50ff78302fefb28e309f3bc947c93ffca0f9b0bccf9cf1a2dc57d805d5c94ec9fc60f4838f5dbdfd2a48ecd77c23015fa44c6dd5f60bc40 2017 | languageName: node 2018 | linkType: hard 2019 | 2020 | "foreground-child@npm:^3.1.0": 2021 | version: 3.3.1 2022 | resolution: "foreground-child@npm:3.3.1" 2023 | dependencies: 2024 | cross-spawn: "npm:^7.0.6" 2025 | signal-exit: "npm:^4.0.1" 2026 | checksum: 10c0/8986e4af2430896e65bc2788d6679067294d6aee9545daefc84923a0a4b399ad9c7a3ea7bd8c0b2b80fdf4a92de4c69df3f628233ff3224260e9c1541a9e9ed3 2027 | languageName: node 2028 | linkType: hard 2029 | 2030 | "get-caller-file@npm:^2.0.5": 2031 | version: 2.0.5 2032 | resolution: "get-caller-file@npm:2.0.5" 2033 | checksum: 10c0/c6c7b60271931fa752aeb92f2b47e355eac1af3a2673f47c9589e8f8a41adc74d45551c1bc57b5e66a80609f10ffb72b6f575e4370d61cc3f7f3aaff01757cde 2034 | languageName: node 2035 | linkType: hard 2036 | 2037 | "get-east-asian-width@npm:^1.0.0": 2038 | version: 1.3.0 2039 | resolution: "get-east-asian-width@npm:1.3.0" 2040 | checksum: 10c0/1a049ba697e0f9a4d5514c4623781c5246982bdb61082da6b5ae6c33d838e52ce6726407df285cdbb27ec1908b333cf2820989bd3e986e37bb20979437fdf34b 2041 | languageName: node 2042 | linkType: hard 2043 | 2044 | "glob-parent@npm:^5.1.2": 2045 | version: 5.1.2 2046 | resolution: "glob-parent@npm:5.1.2" 2047 | dependencies: 2048 | is-glob: "npm:^4.0.1" 2049 | checksum: 10c0/cab87638e2112bee3f839ef5f6e0765057163d39c66be8ec1602f3823da4692297ad4e972de876ea17c44d652978638d2fd583c6713d0eb6591706825020c9ee 2050 | languageName: node 2051 | linkType: hard 2052 | 2053 | "glob@npm:^10.4.5": 2054 | version: 10.4.5 2055 | resolution: "glob@npm:10.4.5" 2056 | dependencies: 2057 | foreground-child: "npm:^3.1.0" 2058 | jackspeak: "npm:^3.1.2" 2059 | minimatch: "npm:^9.0.4" 2060 | minipass: "npm:^7.1.2" 2061 | package-json-from-dist: "npm:^1.0.0" 2062 | path-scurry: "npm:^1.11.1" 2063 | bin: 2064 | glob: dist/esm/bin.mjs 2065 | checksum: 10c0/19a9759ea77b8e3ca0a43c2f07ecddc2ad46216b786bb8f993c445aee80d345925a21e5280c7b7c6c59e860a0154b84e4b2b60321fea92cd3c56b4a7489f160e 2066 | languageName: node 2067 | linkType: hard 2068 | 2069 | "globby@npm:^14.1.0": 2070 | version: 14.1.0 2071 | resolution: "globby@npm:14.1.0" 2072 | dependencies: 2073 | "@sindresorhus/merge-streams": "npm:^2.1.0" 2074 | fast-glob: "npm:^3.3.3" 2075 | ignore: "npm:^7.0.3" 2076 | path-type: "npm:^6.0.0" 2077 | slash: "npm:^5.1.0" 2078 | unicorn-magic: "npm:^0.3.0" 2079 | checksum: 10c0/527a1063c5958255969620c6fa4444a2b2e9278caddd571d46dfbfa307cb15977afb746e84d682ba5b6c94fc081e8997f80ff05dd235441ba1cb16f86153e58e 2080 | languageName: node 2081 | linkType: hard 2082 | 2083 | "graceful-fs@npm:^4.2.9": 2084 | version: 4.2.11 2085 | resolution: "graceful-fs@npm:4.2.11" 2086 | checksum: 10c0/386d011a553e02bc594ac2ca0bd6d9e4c22d7fa8cfbfc448a6d148c59ea881b092db9dbe3547ae4b88e55f1b01f7c4a2ecc53b310c042793e63aa44cf6c257f2 2087 | languageName: node 2088 | linkType: hard 2089 | 2090 | "https-proxy-agent@npm:^7.0.5": 2091 | version: 7.0.6 2092 | resolution: "https-proxy-agent@npm:7.0.6" 2093 | dependencies: 2094 | agent-base: "npm:^7.1.2" 2095 | debug: "npm:4" 2096 | checksum: 10c0/f729219bc735edb621fa30e6e84e60ee5d00802b8247aac0d7b79b0bd6d4b3294737a337b93b86a0bd9e68099d031858a39260c976dc14cdbba238ba1f8779ac 2097 | languageName: node 2098 | linkType: hard 2099 | 2100 | "husky@npm:^9.1.7": 2101 | version: 9.1.7 2102 | resolution: "husky@npm:9.1.7" 2103 | bin: 2104 | husky: bin.js 2105 | checksum: 10c0/35bb110a71086c48906aa7cd3ed4913fb913823715359d65e32e0b964cb1e255593b0ae8014a5005c66a68e6fa66c38dcfa8056dbbdfb8b0187c0ffe7ee3a58f 2106 | languageName: node 2107 | linkType: hard 2108 | 2109 | "iconv-lite@npm:^0.4.24": 2110 | version: 0.4.24 2111 | resolution: "iconv-lite@npm:0.4.24" 2112 | dependencies: 2113 | safer-buffer: "npm:>= 2.1.2 < 3" 2114 | checksum: 10c0/c6886a24cc00f2a059767440ec1bc00d334a89f250db8e0f7feb4961c8727118457e27c495ba94d082e51d3baca378726cd110aaf7ded8b9bbfd6a44760cf1d4 2115 | languageName: node 2116 | linkType: hard 2117 | 2118 | "ignore-by-default@npm:^2.1.0": 2119 | version: 2.1.0 2120 | resolution: "ignore-by-default@npm:2.1.0" 2121 | checksum: 10c0/3a6040dac25ed9da39dee73bf1634fdd1e15b0eb7cf52a6bdec81c310565782d8811c104ce40acb3d690d61c5fc38a91c78e6baee830a8a2232424dbc6b66981 2122 | languageName: node 2123 | linkType: hard 2124 | 2125 | "ignore@npm:^7.0.3": 2126 | version: 7.0.4 2127 | resolution: "ignore@npm:7.0.4" 2128 | checksum: 10c0/90e1f69ce352b9555caecd9cbfd07abe7626d312a6f90efbbb52c7edca6ea8df065d66303863b30154ab1502afb2da8bc59d5b04e1719a52ef75bbf675c488eb 2129 | languageName: node 2130 | linkType: hard 2131 | 2132 | "imurmurhash@npm:^0.1.4": 2133 | version: 0.1.4 2134 | resolution: "imurmurhash@npm:0.1.4" 2135 | checksum: 10c0/8b51313850dd33605c6c9d3fd9638b714f4c4c40250cff658209f30d40da60f78992fb2df5dabee4acf589a6a82bbc79ad5486550754bd9ec4e3fc0d4a57d6a6 2136 | languageName: node 2137 | linkType: hard 2138 | 2139 | "indent-string@npm:^5.0.0": 2140 | version: 5.0.0 2141 | resolution: "indent-string@npm:5.0.0" 2142 | checksum: 10c0/8ee77b57d92e71745e133f6f444d6fa3ed503ad0e1bcd7e80c8da08b42375c07117128d670589725ed07b1978065803fa86318c309ba45415b7fe13e7f170220 2143 | languageName: node 2144 | linkType: hard 2145 | 2146 | "irregular-plurals@npm:^3.3.0": 2147 | version: 3.5.0 2148 | resolution: "irregular-plurals@npm:3.5.0" 2149 | checksum: 10c0/7c033bbe7325e5a6e0a26949cc6863b6ce273403d4cd5b93bd99b33fecb6605b0884097c4259c23ed0c52c2133bf7d1cdcdd7a0630e8c325161fe269b3447918 2150 | languageName: node 2151 | linkType: hard 2152 | 2153 | "is-extglob@npm:^2.1.1": 2154 | version: 2.1.1 2155 | resolution: "is-extglob@npm:2.1.1" 2156 | checksum: 10c0/5487da35691fbc339700bbb2730430b07777a3c21b9ebaecb3072512dfd7b4ba78ac2381a87e8d78d20ea08affb3f1971b4af629173a6bf435ff8a4c47747912 2157 | languageName: node 2158 | linkType: hard 2159 | 2160 | "is-fullwidth-code-point@npm:^3.0.0": 2161 | version: 3.0.0 2162 | resolution: "is-fullwidth-code-point@npm:3.0.0" 2163 | checksum: 10c0/bb11d825e049f38e04c06373a8d72782eee0205bda9d908cc550ccb3c59b99d750ff9537982e01733c1c94a58e35400661f57042158ff5e8f3e90cf936daf0fc 2164 | languageName: node 2165 | linkType: hard 2166 | 2167 | "is-fullwidth-code-point@npm:^4.0.0": 2168 | version: 4.0.0 2169 | resolution: "is-fullwidth-code-point@npm:4.0.0" 2170 | checksum: 10c0/df2a717e813567db0f659c306d61f2f804d480752526886954a2a3e2246c7745fd07a52b5fecf2b68caf0a6c79dcdace6166fdf29cc76ed9975cc334f0a018b8 2171 | languageName: node 2172 | linkType: hard 2173 | 2174 | "is-fullwidth-code-point@npm:^5.0.0": 2175 | version: 5.0.0 2176 | resolution: "is-fullwidth-code-point@npm:5.0.0" 2177 | dependencies: 2178 | get-east-asian-width: "npm:^1.0.0" 2179 | checksum: 10c0/cd591b27d43d76b05fa65ed03eddce57a16e1eca0b7797ff7255de97019bcaf0219acfc0c4f7af13319e13541f2a53c0ace476f442b13267b9a6a7568f2b65c8 2180 | languageName: node 2181 | linkType: hard 2182 | 2183 | "is-glob@npm:^4.0.1": 2184 | version: 4.0.3 2185 | resolution: "is-glob@npm:4.0.3" 2186 | dependencies: 2187 | is-extglob: "npm:^2.1.1" 2188 | checksum: 10c0/17fb4014e22be3bbecea9b2e3a76e9e34ff645466be702f1693e8f1ee1adac84710d0be0bd9f967d6354036fd51ab7c2741d954d6e91dae6bb69714de92c197a 2189 | languageName: node 2190 | linkType: hard 2191 | 2192 | "is-number@npm:^7.0.0": 2193 | version: 7.0.0 2194 | resolution: "is-number@npm:7.0.0" 2195 | checksum: 10c0/b4686d0d3053146095ccd45346461bc8e53b80aeb7671cc52a4de02dbbf7dc0d1d2a986e2fe4ae206984b4d34ef37e8b795ebc4f4295c978373e6575e295d811 2196 | languageName: node 2197 | linkType: hard 2198 | 2199 | "is-plain-object@npm:^5.0.0": 2200 | version: 5.0.0 2201 | resolution: "is-plain-object@npm:5.0.0" 2202 | checksum: 10c0/893e42bad832aae3511c71fd61c0bf61aa3a6d853061c62a307261842727d0d25f761ce9379f7ba7226d6179db2a3157efa918e7fe26360f3bf0842d9f28942c 2203 | languageName: node 2204 | linkType: hard 2205 | 2206 | "is-promise@npm:^4.0.0": 2207 | version: 4.0.0 2208 | resolution: "is-promise@npm:4.0.0" 2209 | checksum: 10c0/ebd5c672d73db781ab33ccb155fb9969d6028e37414d609b115cc534654c91ccd061821d5b987eefaa97cf4c62f0b909bb2f04db88306de26e91bfe8ddc01503 2210 | languageName: node 2211 | linkType: hard 2212 | 2213 | "is-unicode-supported@npm:^2.0.0": 2214 | version: 2.1.0 2215 | resolution: "is-unicode-supported@npm:2.1.0" 2216 | checksum: 10c0/a0f53e9a7c1fdbcf2d2ef6e40d4736fdffff1c9f8944c75e15425118ff3610172c87bf7bc6c34d3903b04be59790bb2212ddbe21ee65b5a97030fc50370545a5 2217 | languageName: node 2218 | linkType: hard 2219 | 2220 | "isexe@npm:^2.0.0": 2221 | version: 2.0.0 2222 | resolution: "isexe@npm:2.0.0" 2223 | checksum: 10c0/228cfa503fadc2c31596ab06ed6aa82c9976eec2bfd83397e7eaf06d0ccf42cd1dfd6743bf9aeb01aebd4156d009994c5f76ea898d2832c1fe342da923ca457d 2224 | languageName: node 2225 | linkType: hard 2226 | 2227 | "isexe@npm:^3.1.1": 2228 | version: 3.1.1 2229 | resolution: "isexe@npm:3.1.1" 2230 | checksum: 10c0/9ec257654093443eb0a528a9c8cbba9c0ca7616ccb40abd6dde7202734d96bb86e4ac0d764f0f8cd965856aacbff2f4ce23e730dc19dfb41e3b0d865ca6fdcc7 2231 | languageName: node 2232 | linkType: hard 2233 | 2234 | "jackspeak@npm:^3.1.2": 2235 | version: 3.4.3 2236 | resolution: "jackspeak@npm:3.4.3" 2237 | dependencies: 2238 | "@isaacs/cliui": "npm:^8.0.2" 2239 | "@pkgjs/parseargs": "npm:^0.11.0" 2240 | dependenciesMeta: 2241 | "@pkgjs/parseargs": 2242 | optional: true 2243 | checksum: 10c0/6acc10d139eaefdbe04d2f679e6191b3abf073f111edf10b1de5302c97ec93fffeb2fdd8681ed17f16268aa9dd4f8c588ed9d1d3bffbbfa6e8bf897cbb3149b9 2244 | languageName: node 2245 | linkType: hard 2246 | 2247 | "js-string-escape@npm:^1.0.1": 2248 | version: 1.0.1 2249 | resolution: "js-string-escape@npm:1.0.1" 2250 | checksum: 10c0/2c33b9ff1ba6b84681c51ca0997e7d5a1639813c95d5b61cb7ad47e55cc28fa4a0b1935c3d218710d8e6bcee5d0cd8c44755231e3a4e45fc604534d9595a3628 2251 | languageName: node 2252 | linkType: hard 2253 | 2254 | "js-yaml@npm:^3.14.1": 2255 | version: 3.14.1 2256 | resolution: "js-yaml@npm:3.14.1" 2257 | dependencies: 2258 | argparse: "npm:^1.0.7" 2259 | esprima: "npm:^4.0.0" 2260 | bin: 2261 | js-yaml: bin/js-yaml.js 2262 | checksum: 10c0/6746baaaeac312c4db8e75fa22331d9a04cccb7792d126ed8ce6a0bbcfef0cedaddd0c5098fade53db067c09fe00aa1c957674b4765610a8b06a5a189e46433b 2263 | languageName: node 2264 | linkType: hard 2265 | 2266 | "js-yaml@npm:^4.1.0": 2267 | version: 4.1.0 2268 | resolution: "js-yaml@npm:4.1.0" 2269 | dependencies: 2270 | argparse: "npm:^2.0.1" 2271 | bin: 2272 | js-yaml: bin/js-yaml.js 2273 | checksum: 10c0/184a24b4eaacfce40ad9074c64fd42ac83cf74d8c8cd137718d456ced75051229e5061b8633c3366b8aada17945a7a356b337828c19da92b51ae62126575018f 2274 | languageName: node 2275 | linkType: hard 2276 | 2277 | "json-parse-even-better-errors@npm:^4.0.0": 2278 | version: 4.0.0 2279 | resolution: "json-parse-even-better-errors@npm:4.0.0" 2280 | checksum: 10c0/84cd9304a97e8fb2af3937bf53acb91c026aeb859703c332684e688ea60db27fc2242aa532a84e1883fdcbe1e5c1fb57c2bef38e312021aa1cd300defc63cf16 2281 | languageName: node 2282 | linkType: hard 2283 | 2284 | "lilconfig@npm:^3.1.3": 2285 | version: 3.1.3 2286 | resolution: "lilconfig@npm:3.1.3" 2287 | checksum: 10c0/f5604e7240c5c275743561442fbc5abf2a84ad94da0f5adc71d25e31fa8483048de3dcedcb7a44112a942fed305fd75841cdf6c9681c7f640c63f1049e9a5dcc 2288 | languageName: node 2289 | linkType: hard 2290 | 2291 | "lint-staged@npm:^16.0.0": 2292 | version: 16.0.0 2293 | resolution: "lint-staged@npm:16.0.0" 2294 | dependencies: 2295 | chalk: "npm:^5.4.1" 2296 | commander: "npm:^13.1.0" 2297 | debug: "npm:^4.4.0" 2298 | lilconfig: "npm:^3.1.3" 2299 | listr2: "npm:^8.3.3" 2300 | micromatch: "npm:^4.0.8" 2301 | nano-spawn: "npm:^1.0.0" 2302 | pidtree: "npm:^0.6.0" 2303 | string-argv: "npm:^0.3.2" 2304 | yaml: "npm:^2.7.1" 2305 | bin: 2306 | lint-staged: bin/lint-staged.js 2307 | checksum: 10c0/8778dbe7892bbf14e378d612d1649c1e3df38a8ddf14cf35962b6e8a962be72efb1ebb48a697e38366be97d25b8d2599cad3c26ac5afc0d0460452484e27924d 2308 | languageName: node 2309 | linkType: hard 2310 | 2311 | "listr2@npm:^8.3.3": 2312 | version: 8.3.3 2313 | resolution: "listr2@npm:8.3.3" 2314 | dependencies: 2315 | cli-truncate: "npm:^4.0.0" 2316 | colorette: "npm:^2.0.20" 2317 | eventemitter3: "npm:^5.0.1" 2318 | log-update: "npm:^6.1.0" 2319 | rfdc: "npm:^1.4.1" 2320 | wrap-ansi: "npm:^9.0.0" 2321 | checksum: 10c0/0792f8a7fd482fa516e21689e012e07081cab3653172ca606090622cfa0024c784a1eba8095a17948a0e9a4aa98a80f7c9c90f78a0dd35173d6802f9cc123a82 2322 | languageName: node 2323 | linkType: hard 2324 | 2325 | "load-json-file@npm:^7.0.1": 2326 | version: 7.0.1 2327 | resolution: "load-json-file@npm:7.0.1" 2328 | checksum: 10c0/7117459608a0b6329c7f78e6e1f541b3162dd901c29dd5af721fec8b270177d2e3d7999c971f344fff04daac368d052732e2c7146014bc84d15e0b636975e19a 2329 | languageName: node 2330 | linkType: hard 2331 | 2332 | "lodash-es@npm:^4.17.21": 2333 | version: 4.17.21 2334 | resolution: "lodash-es@npm:4.17.21" 2335 | checksum: 10c0/fb407355f7e6cd523a9383e76e6b455321f0f153a6c9625e21a8827d10c54c2a2341bd2ae8d034358b60e07325e1330c14c224ff582d04612a46a4f0479ff2f2 2336 | languageName: node 2337 | linkType: hard 2338 | 2339 | "lodash@npm:^4.17.15": 2340 | version: 4.17.21 2341 | resolution: "lodash@npm:4.17.21" 2342 | checksum: 10c0/d8cbea072bb08655bb4c989da418994b073a608dffa608b09ac04b43a791b12aeae7cd7ad919aa4c925f33b48490b5cfe6c1f71d827956071dae2e7bb3a6b74c 2343 | languageName: node 2344 | linkType: hard 2345 | 2346 | "log-update@npm:^6.1.0": 2347 | version: 6.1.0 2348 | resolution: "log-update@npm:6.1.0" 2349 | dependencies: 2350 | ansi-escapes: "npm:^7.0.0" 2351 | cli-cursor: "npm:^5.0.0" 2352 | slice-ansi: "npm:^7.1.0" 2353 | strip-ansi: "npm:^7.1.0" 2354 | wrap-ansi: "npm:^9.0.0" 2355 | checksum: 10c0/4b350c0a83d7753fea34dcac6cd797d1dc9603291565de009baa4aa91c0447eab0d3815a05c8ec9ac04fdfffb43c82adcdb03ec1fceafd8518e1a8c1cff4ff89 2356 | languageName: node 2357 | linkType: hard 2358 | 2359 | "lru-cache@npm:^10.2.0": 2360 | version: 10.4.3 2361 | resolution: "lru-cache@npm:10.4.3" 2362 | checksum: 10c0/ebd04fbca961e6c1d6c0af3799adcc966a1babe798f685bb84e6599266599cd95d94630b10262f5424539bc4640107e8a33aa28585374abf561d30d16f4b39fb 2363 | languageName: node 2364 | linkType: hard 2365 | 2366 | "matcher@npm:^5.0.0": 2367 | version: 5.0.0 2368 | resolution: "matcher@npm:5.0.0" 2369 | dependencies: 2370 | escape-string-regexp: "npm:^5.0.0" 2371 | checksum: 10c0/eda5471fc9d5b7264d63c81727824adc3585ddb5cfdc5fce5a9b7c86f946ff181610735d330b1c37a84811df872d1290bf4e9401d2be2a414204343701144b18 2372 | languageName: node 2373 | linkType: hard 2374 | 2375 | "md5-hex@npm:^3.0.1": 2376 | version: 3.0.1 2377 | resolution: "md5-hex@npm:3.0.1" 2378 | dependencies: 2379 | blueimp-md5: "npm:^2.10.0" 2380 | checksum: 10c0/ee2b4d8da16b527b3a3fe4d7a96720f43afd07b46a82d49421208b5a126235fb75cfb30b80d4029514772c8844273f940bddfbf4155c787f968f3be4060d01e4 2381 | languageName: node 2382 | linkType: hard 2383 | 2384 | "memoize@npm:^10.1.0": 2385 | version: 10.1.0 2386 | resolution: "memoize@npm:10.1.0" 2387 | dependencies: 2388 | mimic-function: "npm:^5.0.1" 2389 | checksum: 10c0/6cf71f673b89778b05cd1131f573ba858627daa8fec60f2197328386acf7ab184a89e52527abbd5a605b5ccf5ee12dc0cb96efb651d9a30dcfcc89e9baacc84d 2390 | languageName: node 2391 | linkType: hard 2392 | 2393 | "memorystream@npm:^0.3.1": 2394 | version: 0.3.1 2395 | resolution: "memorystream@npm:0.3.1" 2396 | checksum: 10c0/4bd164657711d9747ff5edb0508b2944414da3464b7fe21ac5c67cf35bba975c4b446a0124bd0f9a8be54cfc18faf92e92bd77563a20328b1ccf2ff04e9f39b9 2397 | languageName: node 2398 | linkType: hard 2399 | 2400 | "merge2@npm:^1.3.0": 2401 | version: 1.4.1 2402 | resolution: "merge2@npm:1.4.1" 2403 | checksum: 10c0/254a8a4605b58f450308fc474c82ac9a094848081bf4c06778200207820e5193726dc563a0d2c16468810516a5c97d9d3ea0ca6585d23c58ccfff2403e8dbbeb 2404 | languageName: node 2405 | linkType: hard 2406 | 2407 | "micromatch@npm:^4.0.8": 2408 | version: 4.0.8 2409 | resolution: "micromatch@npm:4.0.8" 2410 | dependencies: 2411 | braces: "npm:^3.0.3" 2412 | picomatch: "npm:^2.3.1" 2413 | checksum: 10c0/166fa6eb926b9553f32ef81f5f531d27b4ce7da60e5baf8c021d043b27a388fb95e46a8038d5045877881e673f8134122b59624d5cecbd16eb50a42e7a6b5ca8 2414 | languageName: node 2415 | linkType: hard 2416 | 2417 | "mimic-function@npm:^5.0.0, mimic-function@npm:^5.0.1": 2418 | version: 5.0.1 2419 | resolution: "mimic-function@npm:5.0.1" 2420 | checksum: 10c0/f3d9464dd1816ecf6bdf2aec6ba32c0728022039d992f178237d8e289b48764fee4131319e72eedd4f7f094e22ded0af836c3187a7edc4595d28dd74368fd81d 2421 | languageName: node 2422 | linkType: hard 2423 | 2424 | "minimatch@npm:^9.0.4": 2425 | version: 9.0.5 2426 | resolution: "minimatch@npm:9.0.5" 2427 | dependencies: 2428 | brace-expansion: "npm:^2.0.1" 2429 | checksum: 10c0/de96cf5e35bdf0eab3e2c853522f98ffbe9a36c37797778d2665231ec1f20a9447a7e567cb640901f89e4daaa95ae5d70c65a9e8aa2bb0019b6facbc3c0575ed 2430 | languageName: node 2431 | linkType: hard 2432 | 2433 | "minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.4, minipass@npm:^7.1.2": 2434 | version: 7.1.2 2435 | resolution: "minipass@npm:7.1.2" 2436 | checksum: 10c0/b0fd20bb9fb56e5fa9a8bfac539e8915ae07430a619e4b86ff71f5fc757ef3924b23b2c4230393af1eda647ed3d75739e4e0acb250a6b1eb277cf7f8fe449557 2437 | languageName: node 2438 | linkType: hard 2439 | 2440 | "minizlib@npm:^3.0.1": 2441 | version: 3.0.2 2442 | resolution: "minizlib@npm:3.0.2" 2443 | dependencies: 2444 | minipass: "npm:^7.1.2" 2445 | checksum: 10c0/9f3bd35e41d40d02469cb30470c55ccc21cae0db40e08d1d0b1dff01cc8cc89a6f78e9c5d2b7c844e485ec0a8abc2238111213fdc5b2038e6d1012eacf316f78 2446 | languageName: node 2447 | linkType: hard 2448 | 2449 | "mkdirp@npm:^3.0.1": 2450 | version: 3.0.1 2451 | resolution: "mkdirp@npm:3.0.1" 2452 | bin: 2453 | mkdirp: dist/cjs/src/bin.js 2454 | checksum: 10c0/9f2b975e9246351f5e3a40dcfac99fcd0baa31fbfab615fe059fb11e51f10e4803c63de1f384c54d656e4db31d000e4767e9ef076a22e12a641357602e31d57d 2455 | languageName: node 2456 | linkType: hard 2457 | 2458 | "ms@npm:^2.1.3": 2459 | version: 2.1.3 2460 | resolution: "ms@npm:2.1.3" 2461 | checksum: 10c0/d924b57e7312b3b63ad21fc5b3dc0af5e78d61a1fc7cfb5457edaf26326bf62be5307cc87ffb6862ef1c2b33b0233cdb5d4f01c4c958cc0d660948b65a287a48 2462 | languageName: node 2463 | linkType: hard 2464 | 2465 | "mute-stream@npm:^2.0.0": 2466 | version: 2.0.0 2467 | resolution: "mute-stream@npm:2.0.0" 2468 | checksum: 10c0/2cf48a2087175c60c8dcdbc619908b49c07f7adcfc37d29236b0c5c612d6204f789104c98cc44d38acab7b3c96f4a3ec2cfdc4934d0738d876dbefa2a12c69f4 2469 | languageName: node 2470 | linkType: hard 2471 | 2472 | "nano-spawn@npm:^1.0.0": 2473 | version: 1.0.2 2474 | resolution: "nano-spawn@npm:1.0.2" 2475 | checksum: 10c0/d8cec78f127a44aa5e38be01746b3d963a8dcf8b00b4a05bf259b5369af2225b8c7dc9d12517050b90234e5c3eeea4ece5d18a5f9c6c3462b56f9f595f07e632 2476 | languageName: node 2477 | linkType: hard 2478 | 2479 | "node-fetch@npm:^2.6.7": 2480 | version: 2.7.0 2481 | resolution: "node-fetch@npm:2.7.0" 2482 | dependencies: 2483 | whatwg-url: "npm:^5.0.0" 2484 | peerDependencies: 2485 | encoding: ^0.1.0 2486 | peerDependenciesMeta: 2487 | encoding: 2488 | optional: true 2489 | checksum: 10c0/b55786b6028208e6fbe594ccccc213cab67a72899c9234eb59dba51062a299ea853210fcf526998eaa2867b0963ad72338824450905679ff0fa304b8c5093ae8 2490 | languageName: node 2491 | linkType: hard 2492 | 2493 | "node-gyp-build@npm:^4.2.2": 2494 | version: 4.8.4 2495 | resolution: "node-gyp-build@npm:4.8.4" 2496 | bin: 2497 | node-gyp-build: bin.js 2498 | node-gyp-build-optional: optional.js 2499 | node-gyp-build-test: build-test.js 2500 | checksum: 10c0/444e189907ece2081fe60e75368784f7782cfddb554b60123743dfb89509df89f1f29c03bbfa16b3a3e0be3f48799a4783f487da6203245fa5bed239ba7407e1 2501 | languageName: node 2502 | linkType: hard 2503 | 2504 | "nofilter@npm:^3.0.2": 2505 | version: 3.1.0 2506 | resolution: "nofilter@npm:3.1.0" 2507 | checksum: 10c0/92459f3864a067b347032263f0b536223cbfc98153913b5dce350cb39c8470bc1813366e41993f22c33cc6400c0f392aa324a4b51e24c22040635c1cdb046499 2508 | languageName: node 2509 | linkType: hard 2510 | 2511 | "nopt@npm:^8.0.0": 2512 | version: 8.1.0 2513 | resolution: "nopt@npm:8.1.0" 2514 | dependencies: 2515 | abbrev: "npm:^3.0.0" 2516 | bin: 2517 | nopt: bin/nopt.js 2518 | checksum: 10c0/62e9ea70c7a3eb91d162d2c706b6606c041e4e7b547cbbb48f8b3695af457dd6479904d7ace600856bf923dd8d1ed0696f06195c8c20f02ac87c1da0e1d315ef 2519 | languageName: node 2520 | linkType: hard 2521 | 2522 | "npm-normalize-package-bin@npm:^4.0.0": 2523 | version: 4.0.0 2524 | resolution: "npm-normalize-package-bin@npm:4.0.0" 2525 | checksum: 10c0/1fa546fcae8eaab61ef9b9ec237b6c795008da50e1883eae030e9e38bb04ffa32c5aabcef9a0400eae3dc1f91809bcfa85e437ce80d677c69b419d1d9cacf0ab 2526 | languageName: node 2527 | linkType: hard 2528 | 2529 | "npm-run-all2@npm:^8.0.1": 2530 | version: 8.0.2 2531 | resolution: "npm-run-all2@npm:8.0.2" 2532 | dependencies: 2533 | ansi-styles: "npm:^6.2.1" 2534 | cross-spawn: "npm:^7.0.6" 2535 | memorystream: "npm:^0.3.1" 2536 | picomatch: "npm:^4.0.2" 2537 | pidtree: "npm:^0.6.0" 2538 | read-package-json-fast: "npm:^4.0.0" 2539 | shell-quote: "npm:^1.7.3" 2540 | which: "npm:^5.0.0" 2541 | bin: 2542 | npm-run-all: bin/npm-run-all/index.js 2543 | npm-run-all2: bin/npm-run-all/index.js 2544 | run-p: bin/run-p/index.js 2545 | run-s: bin/run-s/index.js 2546 | checksum: 10c0/f123741fc221bd6b51ec173f1e9345191599f087108d60a10e856e033a97903b0444db8a41af7a9548eeb14c48486ab109d091bc3489b72fae03cf0f014755d4 2547 | languageName: node 2548 | linkType: hard 2549 | 2550 | "onetime@npm:^7.0.0": 2551 | version: 7.0.0 2552 | resolution: "onetime@npm:7.0.0" 2553 | dependencies: 2554 | mimic-function: "npm:^5.0.0" 2555 | checksum: 10c0/5cb9179d74b63f52a196a2e7037ba2b9a893245a5532d3f44360012005c9cadb60851d56716ebff18a6f47129dab7168022445df47c2aff3b276d92585ed1221 2556 | languageName: node 2557 | linkType: hard 2558 | 2559 | "os-tmpdir@npm:~1.0.2": 2560 | version: 1.0.2 2561 | resolution: "os-tmpdir@npm:1.0.2" 2562 | checksum: 10c0/f438450224f8e2687605a8dd318f0db694b6293c5d835ae509a69e97c8de38b6994645337e5577f5001115470414638978cc49da1cdcc25106dad8738dc69990 2563 | languageName: node 2564 | linkType: hard 2565 | 2566 | "oxlint@npm:^0.17.0": 2567 | version: 0.17.0 2568 | resolution: "oxlint@npm:0.17.0" 2569 | dependencies: 2570 | "@oxlint/darwin-arm64": "npm:0.17.0" 2571 | "@oxlint/darwin-x64": "npm:0.17.0" 2572 | "@oxlint/linux-arm64-gnu": "npm:0.17.0" 2573 | "@oxlint/linux-arm64-musl": "npm:0.17.0" 2574 | "@oxlint/linux-x64-gnu": "npm:0.17.0" 2575 | "@oxlint/linux-x64-musl": "npm:0.17.0" 2576 | "@oxlint/win32-arm64": "npm:0.17.0" 2577 | "@oxlint/win32-x64": "npm:0.17.0" 2578 | dependenciesMeta: 2579 | "@oxlint/darwin-arm64": 2580 | optional: true 2581 | "@oxlint/darwin-x64": 2582 | optional: true 2583 | "@oxlint/linux-arm64-gnu": 2584 | optional: true 2585 | "@oxlint/linux-arm64-musl": 2586 | optional: true 2587 | "@oxlint/linux-x64-gnu": 2588 | optional: true 2589 | "@oxlint/linux-x64-musl": 2590 | optional: true 2591 | "@oxlint/win32-arm64": 2592 | optional: true 2593 | "@oxlint/win32-x64": 2594 | optional: true 2595 | bin: 2596 | oxc_language_server: bin/oxc_language_server 2597 | oxlint: bin/oxlint 2598 | checksum: 10c0/9278abfd6eed6c09919f9cf8f30f60f264a6e370f16f8b155ea83994c5b3bd4b2be831873a7ade47cc351d7fd0220454d6919dad2668d250b370654f7bd2c890 2599 | languageName: node 2600 | linkType: hard 2601 | 2602 | "p-map@npm:^7.0.3": 2603 | version: 7.0.3 2604 | resolution: "p-map@npm:7.0.3" 2605 | checksum: 10c0/46091610da2b38ce47bcd1d8b4835a6fa4e832848a6682cf1652bc93915770f4617afc844c10a77d1b3e56d2472bb2d5622353fa3ead01a7f42b04fc8e744a5c 2606 | languageName: node 2607 | linkType: hard 2608 | 2609 | "package-config@npm:^5.0.0": 2610 | version: 5.0.0 2611 | resolution: "package-config@npm:5.0.0" 2612 | dependencies: 2613 | find-up-simple: "npm:^1.0.0" 2614 | load-json-file: "npm:^7.0.1" 2615 | checksum: 10c0/f6c48930700b73a41d839bf2898b628d23665827488a4f34aed2d05e4a99d7a70a70ada115c3546765947fbc8accff94c0779da21ea084b25df47cb774531eeb 2616 | languageName: node 2617 | linkType: hard 2618 | 2619 | "package-json-from-dist@npm:^1.0.0": 2620 | version: 1.0.1 2621 | resolution: "package-json-from-dist@npm:1.0.1" 2622 | checksum: 10c0/62ba2785eb655fec084a257af34dbe24292ab74516d6aecef97ef72d4897310bc6898f6c85b5cd22770eaa1ce60d55a0230e150fb6a966e3ecd6c511e23d164b 2623 | languageName: node 2624 | linkType: hard 2625 | 2626 | "parse-ms@npm:^4.0.0": 2627 | version: 4.0.0 2628 | resolution: "parse-ms@npm:4.0.0" 2629 | checksum: 10c0/a7900f4f1ebac24cbf5e9708c16fb2fd482517fad353aecd7aefb8c2ba2f85ce017913ccb8925d231770404780df46244ea6fec598b3bde6490882358b4d2d16 2630 | languageName: node 2631 | linkType: hard 2632 | 2633 | "path-key@npm:^3.1.0": 2634 | version: 3.1.1 2635 | resolution: "path-key@npm:3.1.1" 2636 | checksum: 10c0/748c43efd5a569c039d7a00a03b58eecd1d75f3999f5a28303d75f521288df4823bc057d8784eb72358b2895a05f29a070bc9f1f17d28226cc4e62494cc58c4c 2637 | languageName: node 2638 | linkType: hard 2639 | 2640 | "path-scurry@npm:^1.11.1": 2641 | version: 1.11.1 2642 | resolution: "path-scurry@npm:1.11.1" 2643 | dependencies: 2644 | lru-cache: "npm:^10.2.0" 2645 | minipass: "npm:^5.0.0 || ^6.0.2 || ^7.0.0" 2646 | checksum: 10c0/32a13711a2a505616ae1cc1b5076801e453e7aae6ac40ab55b388bb91b9d0547a52f5aaceff710ea400205f18691120d4431e520afbe4266b836fadede15872d 2647 | languageName: node 2648 | linkType: hard 2649 | 2650 | "path-type@npm:^6.0.0": 2651 | version: 6.0.0 2652 | resolution: "path-type@npm:6.0.0" 2653 | checksum: 10c0/55baa8b1187d6dc683d5a9cfcc866168d6adff58e5db91126795376d818eee46391e00b2a4d53e44d844c7524a7d96aa68cc68f4f3e500d3d069a39e6535481c 2654 | languageName: node 2655 | linkType: hard 2656 | 2657 | "picomatch@npm:^2.3.1": 2658 | version: 2.3.1 2659 | resolution: "picomatch@npm:2.3.1" 2660 | checksum: 10c0/26c02b8d06f03206fc2ab8d16f19960f2ff9e81a658f831ecb656d8f17d9edc799e8364b1f4a7873e89d9702dff96204be0fa26fe4181f6843f040f819dac4be 2661 | languageName: node 2662 | linkType: hard 2663 | 2664 | "picomatch@npm:^4.0.2": 2665 | version: 4.0.2 2666 | resolution: "picomatch@npm:4.0.2" 2667 | checksum: 10c0/7c51f3ad2bb42c776f49ebf964c644958158be30d0a510efd5a395e8d49cb5acfed5b82c0c5b365523ce18e6ab85013c9ebe574f60305892ec3fa8eee8304ccc 2668 | languageName: node 2669 | linkType: hard 2670 | 2671 | "pidtree@npm:^0.6.0": 2672 | version: 0.6.0 2673 | resolution: "pidtree@npm:0.6.0" 2674 | bin: 2675 | pidtree: bin/pidtree.js 2676 | checksum: 10c0/0829ec4e9209e230f74ebf4265f5ccc9ebfb488334b525cb13f86ff801dca44b362c41252cd43ae4d7653a10a5c6ab3be39d2c79064d6895e0d78dc50a5ed6e9 2677 | languageName: node 2678 | linkType: hard 2679 | 2680 | "pirates@npm:^4.0.7": 2681 | version: 4.0.7 2682 | resolution: "pirates@npm:4.0.7" 2683 | checksum: 10c0/a51f108dd811beb779d58a76864bbd49e239fa40c7984cd11596c75a121a8cc789f1c8971d8bb15f0dbf9d48b76c05bb62fcbce840f89b688c0fa64b37e8478a 2684 | languageName: node 2685 | linkType: hard 2686 | 2687 | "plur@npm:^5.1.0": 2688 | version: 5.1.0 2689 | resolution: "plur@npm:5.1.0" 2690 | dependencies: 2691 | irregular-plurals: "npm:^3.3.0" 2692 | checksum: 10c0/26bb622b8545fcfd47bbf56fbcca66c08693708a232e403fa3589e00003c56c14231ac57c7588ca5db83ef4be1f61383402c4ea954000768f779f8aef6eb6da8 2693 | languageName: node 2694 | linkType: hard 2695 | 2696 | "prettier@npm:^3.5.3": 2697 | version: 3.5.3 2698 | resolution: "prettier@npm:3.5.3" 2699 | bin: 2700 | prettier: bin/prettier.cjs 2701 | checksum: 10c0/3880cb90b9dc0635819ab52ff571518c35bd7f15a6e80a2054c05dbc8a3aa6e74f135519e91197de63705bcb38388ded7e7230e2178432a1468005406238b877 2702 | languageName: node 2703 | linkType: hard 2704 | 2705 | "pretty-ms@npm:^9.2.0": 2706 | version: 9.2.0 2707 | resolution: "pretty-ms@npm:9.2.0" 2708 | dependencies: 2709 | parse-ms: "npm:^4.0.0" 2710 | checksum: 10c0/ab6d066f90e9f77020426986e1b018369f41575674544c539aabec2e63a20fec01166d8cf6571d0e165ad11cfe5a8134a2a48a36d42ab291c59c6deca5264cbb 2711 | languageName: node 2712 | linkType: hard 2713 | 2714 | "queue-microtask@npm:^1.2.2": 2715 | version: 1.2.3 2716 | resolution: "queue-microtask@npm:1.2.3" 2717 | checksum: 10c0/900a93d3cdae3acd7d16f642c29a642aea32c2026446151f0778c62ac089d4b8e6c986811076e1ae180a694cedf077d453a11b58ff0a865629a4f82ab558e102 2718 | languageName: node 2719 | linkType: hard 2720 | 2721 | "read-package-json-fast@npm:^4.0.0": 2722 | version: 4.0.0 2723 | resolution: "read-package-json-fast@npm:4.0.0" 2724 | dependencies: 2725 | json-parse-even-better-errors: "npm:^4.0.0" 2726 | npm-normalize-package-bin: "npm:^4.0.0" 2727 | checksum: 10c0/8a03509ae8e852f1abc4b109c1be571dd90ac9ea65d55433b2fe287e409113441a9b00df698288fe48aa786c1a2550569d47b5ab01ed83ada073d691d5aff582 2728 | languageName: node 2729 | linkType: hard 2730 | 2731 | "require-directory@npm:^2.1.1": 2732 | version: 2.1.1 2733 | resolution: "require-directory@npm:2.1.1" 2734 | checksum: 10c0/83aa76a7bc1531f68d92c75a2ca2f54f1b01463cb566cf3fbc787d0de8be30c9dbc211d1d46be3497dac5785fe296f2dd11d531945ac29730643357978966e99 2735 | languageName: node 2736 | linkType: hard 2737 | 2738 | "resolve-cwd@npm:^3.0.0": 2739 | version: 3.0.0 2740 | resolution: "resolve-cwd@npm:3.0.0" 2741 | dependencies: 2742 | resolve-from: "npm:^5.0.0" 2743 | checksum: 10c0/e608a3ebd15356264653c32d7ecbc8fd702f94c6703ea4ac2fb81d9c359180cba0ae2e6b71faa446631ed6145454d5a56b227efc33a2d40638ac13f8beb20ee4 2744 | languageName: node 2745 | linkType: hard 2746 | 2747 | "resolve-from@npm:^5.0.0": 2748 | version: 5.0.0 2749 | resolution: "resolve-from@npm:5.0.0" 2750 | checksum: 10c0/b21cb7f1fb746de8107b9febab60095187781137fd803e6a59a76d421444b1531b641bba5857f5dc011974d8a5c635d61cec49e6bd3b7fc20e01f0fafc4efbf2 2751 | languageName: node 2752 | linkType: hard 2753 | 2754 | "restore-cursor@npm:^5.0.0": 2755 | version: 5.1.0 2756 | resolution: "restore-cursor@npm:5.1.0" 2757 | dependencies: 2758 | onetime: "npm:^7.0.0" 2759 | signal-exit: "npm:^4.1.0" 2760 | checksum: 10c0/c2ba89131eea791d1b25205bdfdc86699767e2b88dee2a590b1a6caa51737deac8bad0260a5ded2f7c074b7db2f3a626bcf1fcf3cdf35974cbeea5e2e6764f60 2761 | languageName: node 2762 | linkType: hard 2763 | 2764 | "reusify@npm:^1.0.4": 2765 | version: 1.1.0 2766 | resolution: "reusify@npm:1.1.0" 2767 | checksum: 10c0/4eff0d4a5f9383566c7d7ec437b671cc51b25963bd61bf127c3f3d3f68e44a026d99b8d2f1ad344afff8d278a8fe70a8ea092650a716d22287e8bef7126bb2fa 2768 | languageName: node 2769 | linkType: hard 2770 | 2771 | "rfdc@npm:^1.4.1": 2772 | version: 1.4.1 2773 | resolution: "rfdc@npm:1.4.1" 2774 | checksum: 10c0/4614e4292356cafade0b6031527eea9bc90f2372a22c012313be1dcc69a3b90c7338158b414539be863fa95bfcb2ddcd0587be696841af4e6679d85e62c060c7 2775 | languageName: node 2776 | linkType: hard 2777 | 2778 | "run-parallel@npm:^1.1.9": 2779 | version: 1.2.0 2780 | resolution: "run-parallel@npm:1.2.0" 2781 | dependencies: 2782 | queue-microtask: "npm:^1.2.2" 2783 | checksum: 10c0/200b5ab25b5b8b7113f9901bfe3afc347e19bb7475b267d55ad0eb86a62a46d77510cb0f232507c9e5d497ebda569a08a9867d0d14f57a82ad5564d991588b39 2784 | languageName: node 2785 | linkType: hard 2786 | 2787 | "safer-buffer@npm:>= 2.1.2 < 3": 2788 | version: 2.1.2 2789 | resolution: "safer-buffer@npm:2.1.2" 2790 | checksum: 10c0/7e3c8b2e88a1841c9671094bbaeebd94448111dd90a81a1f606f3f67708a6ec57763b3b47f06da09fc6054193e0e6709e77325415dc8422b04497a8070fa02d4 2791 | languageName: node 2792 | linkType: hard 2793 | 2794 | "semver@npm:^7.3.2, semver@npm:^7.5.3, semver@npm:^7.7.1": 2795 | version: 7.7.2 2796 | resolution: "semver@npm:7.7.2" 2797 | bin: 2798 | semver: bin/semver.js 2799 | checksum: 10c0/aca305edfbf2383c22571cb7714f48cadc7ac95371b4b52362fb8eeffdfbc0de0669368b82b2b15978f8848f01d7114da65697e56cd8c37b0dab8c58e543f9ea 2800 | languageName: node 2801 | linkType: hard 2802 | 2803 | "serialize-error@npm:^7.0.1": 2804 | version: 7.0.1 2805 | resolution: "serialize-error@npm:7.0.1" 2806 | dependencies: 2807 | type-fest: "npm:^0.13.1" 2808 | checksum: 10c0/7982937d578cd901276c8ab3e2c6ed8a4c174137730f1fb0402d005af209a0e84d04acc874e317c936724c7b5b26c7a96ff7e4b8d11a469f4924a4b0ea814c05 2809 | languageName: node 2810 | linkType: hard 2811 | 2812 | "shebang-command@npm:^2.0.0": 2813 | version: 2.0.0 2814 | resolution: "shebang-command@npm:2.0.0" 2815 | dependencies: 2816 | shebang-regex: "npm:^3.0.0" 2817 | checksum: 10c0/a41692e7d89a553ef21d324a5cceb5f686d1f3c040759c50aab69688634688c5c327f26f3ecf7001ebfd78c01f3c7c0a11a7c8bfd0a8bc9f6240d4f40b224e4e 2818 | languageName: node 2819 | linkType: hard 2820 | 2821 | "shebang-regex@npm:^3.0.0": 2822 | version: 3.0.0 2823 | resolution: "shebang-regex@npm:3.0.0" 2824 | checksum: 10c0/1dbed0726dd0e1152a92696c76c7f06084eb32a90f0528d11acd764043aacf76994b2fb30aa1291a21bd019d6699164d048286309a278855ee7bec06cf6fb690 2825 | languageName: node 2826 | linkType: hard 2827 | 2828 | "shell-quote@npm:^1.7.3": 2829 | version: 1.8.2 2830 | resolution: "shell-quote@npm:1.8.2" 2831 | checksum: 10c0/85fdd44f2ad76e723d34eb72c753f04d847ab64e9f1f10677e3f518d0e5b0752a176fd805297b30bb8c3a1556ebe6e77d2288dbd7b7b0110c7e941e9e9c20ce1 2832 | languageName: node 2833 | linkType: hard 2834 | 2835 | "signal-exit@npm:^4.0.1, signal-exit@npm:^4.1.0": 2836 | version: 4.1.0 2837 | resolution: "signal-exit@npm:4.1.0" 2838 | checksum: 10c0/41602dce540e46d599edba9d9860193398d135f7ff72cab629db5171516cfae628d21e7bfccde1bbfdf11c48726bc2a6d1a8fb8701125852fbfda7cf19c6aa83 2839 | languageName: node 2840 | linkType: hard 2841 | 2842 | "slash@npm:^5.1.0": 2843 | version: 5.1.0 2844 | resolution: "slash@npm:5.1.0" 2845 | checksum: 10c0/eb48b815caf0bdc390d0519d41b9e0556a14380f6799c72ba35caf03544d501d18befdeeef074bc9c052acf69654bc9e0d79d7f1de0866284137a40805299eb3 2846 | languageName: node 2847 | linkType: hard 2848 | 2849 | "slice-ansi@npm:^5.0.0": 2850 | version: 5.0.0 2851 | resolution: "slice-ansi@npm:5.0.0" 2852 | dependencies: 2853 | ansi-styles: "npm:^6.0.0" 2854 | is-fullwidth-code-point: "npm:^4.0.0" 2855 | checksum: 10c0/2d4d40b2a9d5cf4e8caae3f698fe24ae31a4d778701724f578e984dcb485ec8c49f0c04dab59c401821e80fcdfe89cace9c66693b0244e40ec485d72e543914f 2856 | languageName: node 2857 | linkType: hard 2858 | 2859 | "slice-ansi@npm:^7.1.0": 2860 | version: 7.1.0 2861 | resolution: "slice-ansi@npm:7.1.0" 2862 | dependencies: 2863 | ansi-styles: "npm:^6.2.1" 2864 | is-fullwidth-code-point: "npm:^5.0.0" 2865 | checksum: 10c0/631c971d4abf56cf880f034d43fcc44ff883624867bf11ecbd538c47343911d734a4656d7bc02362b40b89d765652a7f935595441e519b59e2ad3f4d5d6fe7ca 2866 | languageName: node 2867 | linkType: hard 2868 | 2869 | "sprintf-js@npm:~1.0.2": 2870 | version: 1.0.3 2871 | resolution: "sprintf-js@npm:1.0.3" 2872 | checksum: 10c0/ecadcfe4c771890140da5023d43e190b7566d9cf8b2d238600f31bec0fc653f328da4450eb04bd59a431771a8e9cc0e118f0aa3974b683a4981b4e07abc2a5bb 2873 | languageName: node 2874 | linkType: hard 2875 | 2876 | "stack-utils@npm:^2.0.6": 2877 | version: 2.0.6 2878 | resolution: "stack-utils@npm:2.0.6" 2879 | dependencies: 2880 | escape-string-regexp: "npm:^2.0.0" 2881 | checksum: 10c0/651c9f87667e077584bbe848acaecc6049bc71979f1e9a46c7b920cad4431c388df0f51b8ad7cfd6eed3db97a2878d0fc8b3122979439ea8bac29c61c95eec8a 2882 | languageName: node 2883 | linkType: hard 2884 | 2885 | "string-argv@npm:^0.3.2": 2886 | version: 0.3.2 2887 | resolution: "string-argv@npm:0.3.2" 2888 | checksum: 10c0/75c02a83759ad1722e040b86823909d9a2fc75d15dd71ec4b537c3560746e33b5f5a07f7332d1e3f88319909f82190843aa2f0a0d8c8d591ec08e93d5b8dec82 2889 | languageName: node 2890 | linkType: hard 2891 | 2892 | "string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3": 2893 | version: 4.2.3 2894 | resolution: "string-width@npm:4.2.3" 2895 | dependencies: 2896 | emoji-regex: "npm:^8.0.0" 2897 | is-fullwidth-code-point: "npm:^3.0.0" 2898 | strip-ansi: "npm:^6.0.1" 2899 | checksum: 10c0/1e525e92e5eae0afd7454086eed9c818ee84374bb80328fc41217ae72ff5f065ef1c9d7f72da41de40c75fa8bb3dee63d92373fd492c84260a552c636392a47b 2900 | languageName: node 2901 | linkType: hard 2902 | 2903 | "string-width@npm:^5.0.1, string-width@npm:^5.1.2": 2904 | version: 5.1.2 2905 | resolution: "string-width@npm:5.1.2" 2906 | dependencies: 2907 | eastasianwidth: "npm:^0.2.0" 2908 | emoji-regex: "npm:^9.2.2" 2909 | strip-ansi: "npm:^7.0.1" 2910 | checksum: 10c0/ab9c4264443d35b8b923cbdd513a089a60de339216d3b0ed3be3ba57d6880e1a192b70ae17225f764d7adbf5994e9bb8df253a944736c15a0240eff553c678ca 2911 | languageName: node 2912 | linkType: hard 2913 | 2914 | "string-width@npm:^7.0.0": 2915 | version: 7.2.0 2916 | resolution: "string-width@npm:7.2.0" 2917 | dependencies: 2918 | emoji-regex: "npm:^10.3.0" 2919 | get-east-asian-width: "npm:^1.0.0" 2920 | strip-ansi: "npm:^7.1.0" 2921 | checksum: 10c0/eb0430dd43f3199c7a46dcbf7a0b34539c76fe3aa62763d0b0655acdcbdf360b3f66f3d58ca25ba0205f42ea3491fa00f09426d3b7d3040e506878fc7664c9b9 2922 | languageName: node 2923 | linkType: hard 2924 | 2925 | "strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": 2926 | version: 6.0.1 2927 | resolution: "strip-ansi@npm:6.0.1" 2928 | dependencies: 2929 | ansi-regex: "npm:^5.0.1" 2930 | checksum: 10c0/1ae5f212a126fe5b167707f716942490e3933085a5ff6c008ab97ab2f272c8025d3aa218b7bd6ab25729ca20cc81cddb252102f8751e13482a5199e873680952 2931 | languageName: node 2932 | linkType: hard 2933 | 2934 | "strip-ansi@npm:^7.0.1, strip-ansi@npm:^7.1.0": 2935 | version: 7.1.0 2936 | resolution: "strip-ansi@npm:7.1.0" 2937 | dependencies: 2938 | ansi-regex: "npm:^6.0.1" 2939 | checksum: 10c0/a198c3762e8832505328cbf9e8c8381de14a4fa50a4f9b2160138158ea88c0f5549fb50cb13c651c3088f47e63a108b34622ec18c0499b6c8c3a5ddf6b305ac4 2940 | languageName: node 2941 | linkType: hard 2942 | 2943 | "supertap@npm:^3.0.1": 2944 | version: 3.0.1 2945 | resolution: "supertap@npm:3.0.1" 2946 | dependencies: 2947 | indent-string: "npm:^5.0.0" 2948 | js-yaml: "npm:^3.14.1" 2949 | serialize-error: "npm:^7.0.1" 2950 | strip-ansi: "npm:^7.0.1" 2951 | checksum: 10c0/8164674f2e280cab875f0fef5bb36c15553c13e29697ff92f4e0d6bc62149f0303a89eee47535413ed145ea72e14a24d065bab233059d48a499ec5ebb4566b0f 2952 | languageName: node 2953 | linkType: hard 2954 | 2955 | "tar@npm:^7.4.0": 2956 | version: 7.4.3 2957 | resolution: "tar@npm:7.4.3" 2958 | dependencies: 2959 | "@isaacs/fs-minipass": "npm:^4.0.0" 2960 | chownr: "npm:^3.0.0" 2961 | minipass: "npm:^7.1.2" 2962 | minizlib: "npm:^3.0.1" 2963 | mkdirp: "npm:^3.0.1" 2964 | yallist: "npm:^5.0.0" 2965 | checksum: 10c0/d4679609bb2a9b48eeaf84632b6d844128d2412b95b6de07d53d8ee8baf4ca0857c9331dfa510390a0727b550fd543d4d1a10995ad86cdf078423fbb8d99831d 2966 | languageName: node 2967 | linkType: hard 2968 | 2969 | "temp-dir@npm:^3.0.0": 2970 | version: 3.0.0 2971 | resolution: "temp-dir@npm:3.0.0" 2972 | checksum: 10c0/a86978a400984cd5f315b77ebf3fe53bb58c61f192278cafcb1f3fb32d584a21dc8e08b93171d7874b7cc972234d3455c467306cc1bfc4524b622e5ad3bfd671 2973 | languageName: node 2974 | linkType: hard 2975 | 2976 | "time-zone@npm:^1.0.0": 2977 | version: 1.0.0 2978 | resolution: "time-zone@npm:1.0.0" 2979 | checksum: 10c0/d00ebd885039109011b6e2423ebbf225160927333c2ade6d833e9cc4676db20759f1f3855fafde00d1bd668c243a6aa68938ce71fe58aab0d514e820d59c1d81 2980 | languageName: node 2981 | linkType: hard 2982 | 2983 | "tmp@npm:^0.0.33": 2984 | version: 0.0.33 2985 | resolution: "tmp@npm:0.0.33" 2986 | dependencies: 2987 | os-tmpdir: "npm:~1.0.2" 2988 | checksum: 10c0/69863947b8c29cabad43fe0ce65cec5bb4b481d15d4b4b21e036b060b3edbf3bc7a5541de1bacb437bb3f7c4538f669752627fdf9b4aaf034cebd172ba373408 2989 | languageName: node 2990 | linkType: hard 2991 | 2992 | "to-regex-range@npm:^5.0.1": 2993 | version: 5.0.1 2994 | resolution: "to-regex-range@npm:5.0.1" 2995 | dependencies: 2996 | is-number: "npm:^7.0.0" 2997 | checksum: 10c0/487988b0a19c654ff3e1961b87f471702e708fa8a8dd02a298ef16da7206692e8552a0250e8b3e8759270f62e9d8314616f6da274734d3b558b1fc7b7724e892 2998 | languageName: node 2999 | linkType: hard 3000 | 3001 | "toml@npm:^3.0.0": 3002 | version: 3.0.0 3003 | resolution: "toml@npm:3.0.0" 3004 | checksum: 10c0/8d7ed3e700ca602e5419fca343e1c595eb7aa177745141f0761a5b20874b58ee5c878cd045c408da9d130cb2b611c639912210ba96ce2f78e443569aa8060c18 3005 | languageName: node 3006 | linkType: hard 3007 | 3008 | "tr46@npm:~0.0.3": 3009 | version: 0.0.3 3010 | resolution: "tr46@npm:0.0.3" 3011 | checksum: 10c0/047cb209a6b60c742f05c9d3ace8fa510bff609995c129a37ace03476a9b12db4dbf975e74600830ef0796e18882b2381fb5fb1f6b4f96b832c374de3ab91a11 3012 | languageName: node 3013 | linkType: hard 3014 | 3015 | "tslib@npm:^2.4.0": 3016 | version: 2.8.1 3017 | resolution: "tslib@npm:2.8.1" 3018 | checksum: 10c0/9c4759110a19c53f992d9aae23aac5ced636e99887b51b9e61def52611732872ff7668757d4e4c61f19691e36f4da981cd9485e869b4a7408d689f6bf1f14e62 3019 | languageName: node 3020 | linkType: hard 3021 | 3022 | "typanion@npm:^3.14.0, typanion@npm:^3.8.0": 3023 | version: 3.14.0 3024 | resolution: "typanion@npm:3.14.0" 3025 | checksum: 10c0/8b03b19844e6955bfd906c31dc781bae6d7f1fb3ce4fe24b7501557013d4889ae5cefe671dafe98d87ead0adceb8afcb8bc16df7dc0bd2b7331bac96f3a7cae2 3026 | languageName: node 3027 | linkType: hard 3028 | 3029 | "type-fest@npm:^0.13.1": 3030 | version: 0.13.1 3031 | resolution: "type-fest@npm:0.13.1" 3032 | checksum: 10c0/0c0fa07ae53d4e776cf4dac30d25ad799443e9eef9226f9fddbb69242db86b08584084a99885cfa5a9dfe4c063ebdc9aa7b69da348e735baede8d43f1aeae93b 3033 | languageName: node 3034 | linkType: hard 3035 | 3036 | "type-fest@npm:^0.21.3": 3037 | version: 0.21.3 3038 | resolution: "type-fest@npm:0.21.3" 3039 | checksum: 10c0/902bd57bfa30d51d4779b641c2bc403cdf1371fb9c91d3c058b0133694fcfdb817aef07a47f40faf79039eecbaa39ee9d3c532deff244f3a19ce68cea71a61e8 3040 | languageName: node 3041 | linkType: hard 3042 | 3043 | "typescript@npm:^5.8.3": 3044 | version: 5.8.3 3045 | resolution: "typescript@npm:5.8.3" 3046 | bin: 3047 | tsc: bin/tsc 3048 | tsserver: bin/tsserver 3049 | checksum: 10c0/5f8bb01196e542e64d44db3d16ee0e4063ce4f3e3966df6005f2588e86d91c03e1fb131c2581baf0fb65ee79669eea6e161cd448178986587e9f6844446dbb48 3050 | languageName: node 3051 | linkType: hard 3052 | 3053 | "typescript@patch:typescript@npm%3A^5.8.3#optional!builtin": 3054 | version: 5.8.3 3055 | resolution: "typescript@patch:typescript@npm%3A5.8.3#optional!builtin::version=5.8.3&hash=5786d5" 3056 | bin: 3057 | tsc: bin/tsc 3058 | tsserver: bin/tsserver 3059 | checksum: 10c0/39117e346ff8ebd87ae1510b3a77d5d92dae5a89bde588c747d25da5c146603a99c8ee588c7ef80faaf123d89ed46f6dbd918d534d641083177d5fac38b8a1cb 3060 | languageName: node 3061 | linkType: hard 3062 | 3063 | "undici-types@npm:~6.21.0": 3064 | version: 6.21.0 3065 | resolution: "undici-types@npm:6.21.0" 3066 | checksum: 10c0/c01ed51829b10aa72fc3ce64b747f8e74ae9b60eafa19a7b46ef624403508a54c526ffab06a14a26b3120d055e1104d7abe7c9017e83ced038ea5cf52f8d5e04 3067 | languageName: node 3068 | linkType: hard 3069 | 3070 | "unicorn-magic@npm:^0.3.0": 3071 | version: 0.3.0 3072 | resolution: "unicorn-magic@npm:0.3.0" 3073 | checksum: 10c0/0a32a997d6c15f1c2a077a15b1c4ca6f268d574cf5b8975e778bb98e6f8db4ef4e86dfcae4e158cd4c7e38fb4dd383b93b13eefddc7f178dea13d3ac8a603271 3074 | languageName: node 3075 | linkType: hard 3076 | 3077 | "universal-user-agent@npm:^7.0.0, universal-user-agent@npm:^7.0.2": 3078 | version: 7.0.3 3079 | resolution: "universal-user-agent@npm:7.0.3" 3080 | checksum: 10c0/6043be466a9bb96c0ce82392842d9fddf4c37e296f7bacc2cb25f47123990eb436c82df824644f9c5070a94dbdb117be17f66d54599ab143648ec57ef93dbcc8 3081 | languageName: node 3082 | linkType: hard 3083 | 3084 | "wasm-sjlj@npm:^1.0.6": 3085 | version: 1.0.6 3086 | resolution: "wasm-sjlj@npm:1.0.6" 3087 | checksum: 10c0/e1172736ca02af383e838ce396b6cc7fc8814d7cc313b30b721c513a79140313cebadb094b9e76d13e27cc679cde72df4e660dbdc5033e8cf66cf0bd176024dd 3088 | languageName: node 3089 | linkType: hard 3090 | 3091 | "webidl-conversions@npm:^3.0.0": 3092 | version: 3.0.1 3093 | resolution: "webidl-conversions@npm:3.0.1" 3094 | checksum: 10c0/5612d5f3e54760a797052eb4927f0ddc01383550f542ccd33d5238cfd65aeed392a45ad38364970d0a0f4fea32e1f4d231b3d8dac4a3bdd385e5cf802ae097db 3095 | languageName: node 3096 | linkType: hard 3097 | 3098 | "well-known-symbols@npm:^2.0.0": 3099 | version: 2.0.0 3100 | resolution: "well-known-symbols@npm:2.0.0" 3101 | checksum: 10c0/cb6c12e98877e8952ec28d13ae6f4fdb54ae1cb49b16a728720276dadd76c930e6cb0e174af3a4620054dd2752546f842540122920c6e31410208abd4958ee6b 3102 | languageName: node 3103 | linkType: hard 3104 | 3105 | "whatwg-url@npm:^5.0.0": 3106 | version: 5.0.0 3107 | resolution: "whatwg-url@npm:5.0.0" 3108 | dependencies: 3109 | tr46: "npm:~0.0.3" 3110 | webidl-conversions: "npm:^3.0.0" 3111 | checksum: 10c0/1588bed84d10b72d5eec1d0faa0722ba1962f1821e7539c535558fb5398d223b0c50d8acab950b8c488b4ba69043fd833cc2697056b167d8ad46fac3995a55d5 3112 | languageName: node 3113 | linkType: hard 3114 | 3115 | "which@npm:^2.0.1": 3116 | version: 2.0.2 3117 | resolution: "which@npm:2.0.2" 3118 | dependencies: 3119 | isexe: "npm:^2.0.0" 3120 | bin: 3121 | node-which: ./bin/node-which 3122 | checksum: 10c0/66522872a768b60c2a65a57e8ad184e5372f5b6a9ca6d5f033d4b0dc98aff63995655a7503b9c0a2598936f532120e81dd8cc155e2e92ed662a2b9377cc4374f 3123 | languageName: node 3124 | linkType: hard 3125 | 3126 | "which@npm:^5.0.0": 3127 | version: 5.0.0 3128 | resolution: "which@npm:5.0.0" 3129 | dependencies: 3130 | isexe: "npm:^3.1.1" 3131 | bin: 3132 | node-which: bin/which.js 3133 | checksum: 10c0/e556e4cd8b7dbf5df52408c9a9dd5ac6518c8c5267c8953f5b0564073c66ed5bf9503b14d876d0e9c7844d4db9725fb0dcf45d6e911e17e26ab363dc3965ae7b 3134 | languageName: node 3135 | linkType: hard 3136 | 3137 | "wrap-ansi-cjs@npm:wrap-ansi@^7.0.0, wrap-ansi@npm:^7.0.0": 3138 | version: 7.0.0 3139 | resolution: "wrap-ansi@npm:7.0.0" 3140 | dependencies: 3141 | ansi-styles: "npm:^4.0.0" 3142 | string-width: "npm:^4.1.0" 3143 | strip-ansi: "npm:^6.0.0" 3144 | checksum: 10c0/d15fc12c11e4cbc4044a552129ebc75ee3f57aa9c1958373a4db0292d72282f54373b536103987a4a7594db1ef6a4f10acf92978f79b98c49306a4b58c77d4da 3145 | languageName: node 3146 | linkType: hard 3147 | 3148 | "wrap-ansi@npm:^6.2.0": 3149 | version: 6.2.0 3150 | resolution: "wrap-ansi@npm:6.2.0" 3151 | dependencies: 3152 | ansi-styles: "npm:^4.0.0" 3153 | string-width: "npm:^4.1.0" 3154 | strip-ansi: "npm:^6.0.0" 3155 | checksum: 10c0/baad244e6e33335ea24e86e51868fe6823626e3a3c88d9a6674642afff1d34d9a154c917e74af8d845fd25d170c4ea9cf69a47133c3f3656e1252b3d462d9f6c 3156 | languageName: node 3157 | linkType: hard 3158 | 3159 | "wrap-ansi@npm:^8.1.0": 3160 | version: 8.1.0 3161 | resolution: "wrap-ansi@npm:8.1.0" 3162 | dependencies: 3163 | ansi-styles: "npm:^6.1.0" 3164 | string-width: "npm:^5.0.1" 3165 | strip-ansi: "npm:^7.0.1" 3166 | checksum: 10c0/138ff58a41d2f877eae87e3282c0630fc2789012fc1af4d6bd626eeb9a2f9a65ca92005e6e69a75c7b85a68479fe7443c7dbe1eb8fbaa681a4491364b7c55c60 3167 | languageName: node 3168 | linkType: hard 3169 | 3170 | "wrap-ansi@npm:^9.0.0": 3171 | version: 9.0.0 3172 | resolution: "wrap-ansi@npm:9.0.0" 3173 | dependencies: 3174 | ansi-styles: "npm:^6.2.1" 3175 | string-width: "npm:^7.0.0" 3176 | strip-ansi: "npm:^7.1.0" 3177 | checksum: 10c0/a139b818da9573677548dd463bd626a5a5286271211eb6e4e82f34a4f643191d74e6d4a9bb0a3c26ec90e6f904f679e0569674ac099ea12378a8b98e20706066 3178 | languageName: node 3179 | linkType: hard 3180 | 3181 | "write-file-atomic@npm:^6.0.0": 3182 | version: 6.0.0 3183 | resolution: "write-file-atomic@npm:6.0.0" 3184 | dependencies: 3185 | imurmurhash: "npm:^0.1.4" 3186 | signal-exit: "npm:^4.0.1" 3187 | checksum: 10c0/ae2f1c27474758a9aca92037df6c1dd9cb94c4e4983451210bd686bfe341f142662f6aa5913095e572ab037df66b1bfe661ed4ce4c0369ed0e8219e28e141786 3188 | languageName: node 3189 | linkType: hard 3190 | 3191 | "y18n@npm:^5.0.5": 3192 | version: 5.0.8 3193 | resolution: "y18n@npm:5.0.8" 3194 | checksum: 10c0/4df2842c36e468590c3691c894bc9cdbac41f520566e76e24f59401ba7d8b4811eb1e34524d57e54bc6d864bcb66baab7ffd9ca42bf1eda596618f9162b91249 3195 | languageName: node 3196 | linkType: hard 3197 | 3198 | "yallist@npm:^5.0.0": 3199 | version: 5.0.0 3200 | resolution: "yallist@npm:5.0.0" 3201 | checksum: 10c0/a499c81ce6d4a1d260d4ea0f6d49ab4da09681e32c3f0472dee16667ed69d01dae63a3b81745a24bd78476ec4fcf856114cb4896ace738e01da34b2c42235416 3202 | languageName: node 3203 | linkType: hard 3204 | 3205 | "yaml@npm:^2.7.1": 3206 | version: 2.8.0 3207 | resolution: "yaml@npm:2.8.0" 3208 | bin: 3209 | yaml: bin.mjs 3210 | checksum: 10c0/f6f7310cf7264a8107e72c1376f4de37389945d2fb4656f8060eca83f01d2d703f9d1b925dd8f39852a57034fafefde6225409ddd9f22aebfda16c6141b71858 3211 | languageName: node 3212 | linkType: hard 3213 | 3214 | "yargs-parser@npm:^21.1.1": 3215 | version: 21.1.1 3216 | resolution: "yargs-parser@npm:21.1.1" 3217 | checksum: 10c0/f84b5e48169479d2f402239c59f084cfd1c3acc197a05c59b98bab067452e6b3ea46d4dd8ba2985ba7b3d32a343d77df0debd6b343e5dae3da2aab2cdf5886b2 3218 | languageName: node 3219 | linkType: hard 3220 | 3221 | "yargs@npm:^17.7.2": 3222 | version: 17.7.2 3223 | resolution: "yargs@npm:17.7.2" 3224 | dependencies: 3225 | cliui: "npm:^8.0.1" 3226 | escalade: "npm:^3.1.1" 3227 | get-caller-file: "npm:^2.0.5" 3228 | require-directory: "npm:^2.1.1" 3229 | string-width: "npm:^4.2.3" 3230 | y18n: "npm:^5.0.5" 3231 | yargs-parser: "npm:^21.1.1" 3232 | checksum: 10c0/ccd7e723e61ad5965fffbb791366db689572b80cca80e0f96aad968dfff4156cd7cd1ad18607afe1046d8241e6fb2d6c08bf7fa7bfb5eaec818735d8feac8f05 3233 | languageName: node 3234 | linkType: hard 3235 | 3236 | "yoctocolors-cjs@npm:^2.1.2": 3237 | version: 2.1.2 3238 | resolution: "yoctocolors-cjs@npm:2.1.2" 3239 | checksum: 10c0/a0e36eb88fea2c7981eab22d1ba45e15d8d268626e6c4143305e2c1628fa17ebfaa40cd306161a8ce04c0a60ee0262058eab12567493d5eb1409780853454c6f 3240 | languageName: node 3241 | linkType: hard 3242 | --------------------------------------------------------------------------------