├── .gitattributes ├── .github ├── renovate.json └── workflows │ ├── CI.yml │ └── lint.yml ├── .gitignore ├── .prettierignore ├── Cargo.toml ├── LICENSE ├── README.md ├── __test__ ├── index.spec.ts ├── package.json └── sample.jpg ├── benchmark ├── bench.ts └── package.json ├── browser.js ├── build.rs ├── file-type.wasi-browser.js ├── file-type.wasi.cjs ├── index.d.ts ├── index.js ├── package.json ├── pnpm-lock.yaml ├── rustfmt.toml ├── simple-test.mjs ├── src └── lib.rs ├── tsconfig.json ├── wasi-worker-browser.mjs └── wasi-worker.mjs /.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 15 | browser.js linguist-detectable=false 16 | file-type.wasi-browser.js linguist-detectable=false 17 | file-type.wasi.cjs linguist-detectable=false 18 | wasi-worker-browser.mjs linguist-detectable=false 19 | wasi-worker.mjs linguist-detectable=false -------------------------------------------------------------------------------- /.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: file-type 5 | MACOSX_DEPLOYMENT_TARGET: '10.13' 6 | permissions: 7 | contents: write 8 | id-token: write 9 | 'on': 10 | push: 11 | branches: 12 | - main 13 | tags-ignore: 14 | - '**' 15 | paths-ignore: 16 | - '**/*.md' 17 | - LICENSE 18 | - '**/*.gitignore' 19 | - .editorconfig 20 | - docs/** 21 | pull_request: null 22 | concurrency: 23 | group: ${{ github.workflow }}-${{ github.ref }} 24 | cancel-in-progress: true 25 | jobs: 26 | build: 27 | strategy: 28 | fail-fast: false 29 | matrix: 30 | settings: 31 | - host: macos-latest 32 | target: x86_64-apple-darwin 33 | build: pnpm build 34 | - host: windows-latest 35 | build: pnpm build 36 | target: x86_64-pc-windows-msvc 37 | - host: windows-latest 38 | build: pnpm build --target i686-pc-windows-msvc 39 | target: i686-pc-windows-msvc 40 | - host: ubuntu-latest 41 | target: x86_64-unknown-linux-gnu 42 | build: CC=clang pnpm build --target x86_64-unknown-linux-gnu --use-napi-cross 43 | - host: ubuntu-latest 44 | target: x86_64-unknown-linux-musl 45 | build: pnpm build --target x86_64-unknown-linux-musl -x 46 | - host: macos-14 47 | target: aarch64-apple-darwin 48 | build: pnpm build --target aarch64-apple-darwin 49 | - host: ubuntu-latest 50 | target: aarch64-unknown-linux-gnu 51 | build: CC=clang pnpm build --target aarch64-unknown-linux-gnu --use-napi-cross 52 | - host: ubuntu-latest 53 | target: armv7-unknown-linux-gnueabihf 54 | build: CC=clang pnpm build --target armv7-unknown-linux-gnueabihf --use-napi-cross 55 | - host: ubuntu-latest 56 | target: aarch64-linux-android 57 | build: pnpm build --target aarch64-linux-android 58 | - host: ubuntu-latest 59 | target: armv7-linux-androideabi 60 | build: pnpm build --target armv7-linux-androideabi 61 | - host: ubuntu-latest 62 | target: aarch64-unknown-linux-musl 63 | build: pnpm build --target aarch64-unknown-linux-musl -x 64 | - host: windows-latest 65 | target: aarch64-pc-windows-msvc 66 | build: pnpm build --target aarch64-pc-windows-msvc 67 | - host: ubuntu-latest 68 | target: wasm32-wasi-preview1-threads 69 | build: pnpm build:debug --target wasm32-wasi-preview1-threads --profile wasi 70 | name: stable - ${{ matrix.settings.target }} - node@20 71 | runs-on: ${{ matrix.settings.host }} 72 | steps: 73 | - uses: actions/checkout@v4 74 | - name: setup pnpm 75 | uses: pnpm/action-setup@v2 76 | - name: Setup node 77 | uses: actions/setup-node@v4 78 | with: 79 | node-version: 20 80 | cache: pnpm 81 | - name: Install 82 | uses: dtolnay/rust-toolchain@stable 83 | with: 84 | toolchain: stable 85 | targets: ${{ matrix.settings.target }} 86 | - name: Cache cargo 87 | uses: actions/cache@v4 88 | with: 89 | path: | 90 | ~/.cargo/registry/index/ 91 | ~/.cargo/registry/cache/ 92 | ~/.cargo/git/db/ 93 | ~/.napi-rs 94 | .cargo-cache 95 | target/ 96 | key: ${{ matrix.settings.target }}-cargo-${{ matrix.settings.host }} 97 | - uses: goto-bus-stop/setup-zig@v2 98 | if: ${{ contains(matrix.settings.target, 'musl') }} 99 | with: 100 | version: 0.11.0 101 | - name: Setup toolchain 102 | run: ${{ matrix.settings.setup }} 103 | if: ${{ matrix.settings.setup }} 104 | shell: bash 105 | - name: Install dependencies 106 | run: pnpm install 107 | - name: Setup node x86 108 | uses: actions/setup-node@v4 109 | if: matrix.settings.target == 'i686-pc-windows-msvc' 110 | with: 111 | node-version: 20 112 | cache: pnpm 113 | architecture: x86 114 | - name: Build 115 | run: ${{ matrix.settings.build }} 116 | shell: bash 117 | - name: Upload artifact 118 | uses: actions/upload-artifact@v4 119 | if: matrix.settings.target != 'wasm32-wasi-preview1-threads' 120 | with: 121 | name: bindings-${{ matrix.settings.target }} 122 | path: "*.node" 123 | if-no-files-found: error 124 | 125 | - name: Upload artifact 126 | uses: actions/upload-artifact@v4 127 | if: matrix.settings.target == 'wasm32-wasi-preview1-threads' 128 | with: 129 | name: bindings-${{ matrix.settings.target }} 130 | path: "*.wasm" 131 | if-no-files-found: error 132 | build-freebsd: 133 | runs-on: macos-13 134 | name: Build FreeBSD 135 | steps: 136 | - uses: actions/checkout@v4 137 | - name: Build 138 | id: build 139 | uses: cross-platform-actions/action@v0.24.0 140 | env: 141 | DEBUG: napi:* 142 | RUSTUP_IO_THREADS: 1 143 | with: 144 | operating_system: freebsd 145 | version: '13.2' 146 | memory: 8G 147 | cpu_count: 3 148 | environment_variables: 'DEBUG RUSTUP_IO_THREADS' 149 | shell: bash 150 | run: | 151 | sudo pkg install -y -f curl node libnghttp2 npm 152 | sudo npm install -g corepack 153 | curl https://sh.rustup.rs -sSf --output rustup.sh 154 | sh rustup.sh -y --profile minimal --default-toolchain beta 155 | corepack prepare 156 | corepack enable 157 | source "$HOME/.cargo/env" 158 | echo "~~~~ rustc --version ~~~~" 159 | rustc --version 160 | echo "~~~~ node -v ~~~~" 161 | node -v 162 | echo "~~~~ pnpm --version ~~~~" 163 | pnpm --version 164 | pwd 165 | ls -lah 166 | whoami 167 | env 168 | freebsd-version 169 | pnpm install 170 | pnpm build 171 | rm -rf node_modules 172 | rm -rf target 173 | - name: Upload artifact 174 | uses: actions/upload-artifact@v4 175 | with: 176 | name: bindings-freebsd 177 | path: ${{ env.APP_NAME }}.*.node 178 | if-no-files-found: error 179 | test-macOS-windows-binding: 180 | name: Test bindings on ${{ matrix.settings.target }} - node@${{ matrix.node }} 181 | needs: 182 | - build 183 | strategy: 184 | fail-fast: false 185 | matrix: 186 | settings: 187 | - host: windows-latest 188 | target: x86_64-pc-windows-msvc 189 | - host: macos-latest 190 | target: x86_64-apple-darwin 191 | - host: macos-14 192 | target: aarch64-apple-darwin 193 | node: 194 | - '18' 195 | - '20' 196 | runs-on: ${{ matrix.settings.host }} 197 | steps: 198 | - uses: actions/checkout@v4 199 | - name: setup pnpm 200 | uses: pnpm/action-setup@v2 201 | - name: Setup node 202 | uses: actions/setup-node@v4 203 | with: 204 | node-version: ${{ matrix.node }} 205 | cache: pnpm 206 | - name: Install dependencies 207 | run: pnpm install 208 | - name: Download artifacts 209 | uses: actions/download-artifact@v4 210 | with: 211 | name: bindings-${{ matrix.settings.target }} 212 | path: . 213 | - name: List packages 214 | run: ls -R . 215 | shell: bash 216 | - name: Test bindings 217 | run: pnpm test 218 | test-linux-binding: 219 | name: Test ${{ matrix.target }} - node@${{ matrix.node }} 220 | needs: 221 | - build 222 | strategy: 223 | fail-fast: false 224 | matrix: 225 | target: 226 | - x86_64-unknown-linux-gnu 227 | - x86_64-unknown-linux-musl 228 | - aarch64-unknown-linux-gnu 229 | - aarch64-unknown-linux-musl 230 | - armv7-unknown-linux-gnueabihf 231 | node: 232 | - '18' 233 | - '20' 234 | runs-on: ubuntu-latest 235 | steps: 236 | - uses: actions/checkout@v4 237 | - name: setup pnpm 238 | uses: pnpm/action-setup@v2 239 | - name: Setup node 240 | uses: actions/setup-node@v4 241 | with: 242 | node-version: ${{ matrix.node }} 243 | cache: pnpm 244 | - name: Output docker params 245 | id: docker 246 | run: | 247 | node -e " 248 | if ('${{ matrix.target }}'.startsWith('aarch64')) { 249 | console.log('PLATFORM=linux/arm64') 250 | } else if ('${{ matrix.target }}'.startsWith('armv7')) { 251 | console.log('PLATFORM=linux/arm/v7') 252 | } else { 253 | console.log('PLATFORM=linux/amd64') 254 | } 255 | " >> $GITHUB_OUTPUT 256 | node -e " 257 | if ('${{ matrix.target }}'.endsWith('-musl')) { 258 | console.log('IMAGE=node:${{ matrix.node }}-alpine') 259 | } else { 260 | console.log('IMAGE=node:${{ matrix.node }}-slim') 261 | } 262 | " >> $GITHUB_OUTPUT 263 | echo "PNPM_STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_OUTPUT 264 | # use --force to download the all platform/arch dependencies 265 | - name: Install dependencies 266 | run: pnpm install --force 267 | - name: Download artifacts 268 | uses: actions/download-artifact@v4 269 | with: 270 | name: bindings-${{ matrix.target }} 271 | path: . 272 | - name: List packages 273 | run: ls -R . 274 | shell: bash 275 | - name: Set up QEMU 276 | uses: docker/setup-qemu-action@v3 277 | with: 278 | platforms: all 279 | - run: docker run --rm --privileged multiarch/qemu-user-static --reset -p yes 280 | - name: Test bindings 281 | uses: addnab/docker-run-action@v3 282 | with: 283 | image: ${{ steps.docker.outputs.IMAGE }} 284 | options: -v ${{ steps.docker.outputs.PNPM_STORE_PATH }}:${{ steps.docker.outputs.PNPM_STORE_PATH }} -v ${{ github.workspace }}:${{ github.workspace }} -w ${{ github.workspace }} --platform ${{ steps.docker.outputs.PLATFORM }} 285 | run: npm run test 286 | test-wasi: 287 | name: Test WASI target 288 | needs: 289 | - build 290 | runs-on: ubuntu-latest 291 | steps: 292 | - uses: actions/checkout@v4 293 | - name: setup pnpm 294 | uses: pnpm/action-setup@v2 295 | - name: Setup node 296 | uses: actions/setup-node@v4 297 | with: 298 | node-version: 20 299 | cache: pnpm 300 | - name: Install dependencies 301 | run: pnpm install 302 | - name: Download artifacts 303 | uses: actions/download-artifact@v4 304 | with: 305 | name: bindings-wasm32-wasi-preview1-threads 306 | path: . 307 | - name: List packages 308 | run: ls -R . 309 | shell: bash 310 | - name: Test bindings 311 | run: pnpm test 312 | env: 313 | NAPI_RS_FORCE_WASI: 1 314 | publish: 315 | name: Publish 316 | runs-on: ubuntu-latest 317 | needs: 318 | - build-freebsd 319 | - test-macOS-windows-binding 320 | - test-linux-binding 321 | - test-wasi 322 | steps: 323 | - uses: actions/checkout@v4 324 | - name: setup pnpm 325 | uses: pnpm/action-setup@v2 326 | - name: Setup node 327 | uses: actions/setup-node@v4 328 | with: 329 | node-version: 20 330 | cache: pnpm 331 | - name: Install dependencies 332 | run: pnpm install 333 | - name: Download all artifacts 334 | uses: actions/download-artifact@v4 335 | with: 336 | path: artifacts 337 | - name: create npm dirs 338 | run: pnpm napi create-npm-dirs 339 | - name: Move artifacts 340 | run: pnpm artifacts 341 | - name: List packages 342 | run: ls -R ./npm 343 | shell: bash 344 | - name: Publish 345 | run: | 346 | npm config set provenance true 347 | if git log -1 --pretty=%B | grep "^[0-9]\+\.[0-9]\+\.[0-9]\+$"; 348 | then 349 | echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" >> ~/.npmrc 350 | npm publish --access public 351 | elif git log -1 --pretty=%B | grep "^[0-9]\+\.[0-9]\+\.[0-9]\+"; 352 | then 353 | echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" >> ~/.npmrc 354 | npm publish --tag next --access public 355 | else 356 | echo "Not a release, skipping publish" 357 | fi 358 | env: 359 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 360 | NPM_TOKEN: ${{ secrets.TOEVERYTHING_NPM_TOKEN }} 361 | -------------------------------------------------------------------------------- /.github/workflows/lint.yml: -------------------------------------------------------------------------------- 1 | name: Lint 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | tags-ignore: 8 | - '**' 9 | pull_request: 10 | concurrency: 11 | group: ${{ github.workflow }}-${{ github.ref }} 12 | cancel-in-progress: true 13 | jobs: 14 | lint: 15 | name: Lint 16 | runs-on: ubuntu-latest 17 | steps: 18 | - uses: actions/checkout@v4 19 | - name: setup pnpm 20 | uses: pnpm/action-setup@v2 21 | - name: Setup node 22 | uses: actions/setup-node@v4 23 | with: 24 | node-version: 20 25 | cache: 'pnpm' 26 | 27 | - name: Install 28 | uses: dtolnay/rust-toolchain@stable 29 | with: 30 | components: clippy, rustfmt 31 | 32 | - name: Install dependencies 33 | run: pnpm install 34 | 35 | - name: ESLint 36 | run: pnpm lint 37 | 38 | - name: Cargo fmt 39 | run: cargo fmt -- --check 40 | 41 | - name: Clippy 42 | run: cargo clippy 43 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ### Created by https://www.gitignore.io 2 | ### Rust ### 3 | # Generated by Cargo 4 | # will have compiled files and executables 5 | debug/ 6 | target/ 7 | 8 | # Remove Cargo.lock from gitignore if creating an executable, leave it for libraries 9 | # More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html 10 | Cargo.lock 11 | 12 | # These are backup files generated by rustfmt 13 | **/*.rs.bk 14 | 15 | # MSVC Windows builds of rustc generate these, which store debugging information 16 | *.pdb 17 | 18 | ### Created by https://www.gitignore.io 19 | ### Node ### 20 | # Logs 21 | logs 22 | *.log 23 | npm-debug.log* 24 | yarn-debug.log* 25 | yarn-error.log* 26 | lerna-debug.log* 27 | .pnpm-debug.log* 28 | 29 | # Diagnostic reports (https://nodejs.org/api/report.html) 30 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 31 | 32 | # Runtime data 33 | pids 34 | *.pid 35 | *.seed 36 | *.pid.lock 37 | 38 | # Directory for instrumented libs generated by jscoverage/JSCover 39 | lib-cov 40 | 41 | # Coverage directory used by tools like istanbul 42 | coverage 43 | *.lcov 44 | 45 | # nyc test coverage 46 | .nyc_output 47 | 48 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 49 | .grunt 50 | 51 | # Bower dependency directory (https://bower.io/) 52 | bower_components 53 | 54 | # node-waf configuration 55 | .lock-wscript 56 | 57 | # Compiled binary addons (https://nodejs.org/api/addons.html) 58 | build/Release 59 | 60 | # Dependency directories 61 | node_modules/ 62 | jspm_packages/ 63 | 64 | # Snowpack dependency directory (https://snowpack.dev/) 65 | web_modules/ 66 | 67 | # TypeScript cache 68 | *.tsbuildinfo 69 | 70 | # Optional npm cache directory 71 | .npm 72 | 73 | # Optional eslint cache 74 | .eslintcache 75 | 76 | # Optional stylelint cache 77 | .stylelintcache 78 | 79 | # Microbundle cache 80 | .rpt2_cache/ 81 | .rts2_cache_cjs/ 82 | .rts2_cache_es/ 83 | .rts2_cache_umd/ 84 | 85 | # Optional REPL history 86 | .node_repl_history 87 | 88 | # Output of 'npm pack' 89 | *.tgz 90 | 91 | # Yarn Integrity file 92 | .yarn-integrity 93 | 94 | # dotenv environment variable files 95 | .env 96 | .env.development.local 97 | .env.test.local 98 | .env.production.local 99 | .env.local 100 | 101 | # parcel-bundler cache (https://parceljs.org/) 102 | .cache 103 | .parcel-cache 104 | 105 | # Next.js build output 106 | .next 107 | out 108 | 109 | # Nuxt.js build / generate output 110 | .nuxt 111 | dist 112 | 113 | # Gatsby files 114 | .cache/ 115 | # Comment in the public line in if your project uses Gatsby and not Next.js 116 | # https://nextjs.org/blog/next-9-1#public-directory-support 117 | # public 118 | 119 | # vuepress build output 120 | .vuepress/dist 121 | 122 | # vuepress v2.x temp and cache directory 123 | .temp 124 | .cache 125 | 126 | # Docusaurus cache and generated files 127 | .docusaurus 128 | 129 | # Serverless directories 130 | .serverless/ 131 | 132 | # FuseBox cache 133 | .fusebox/ 134 | 135 | # DynamoDB Local files 136 | .dynamodb/ 137 | 138 | # TernJS port file 139 | .tern-port 140 | 141 | # Stores VSCode versions used for testing VSCode extensions 142 | .vscode-test 143 | 144 | # yarn v2 145 | .yarn/cache 146 | .yarn/unplugged 147 | .yarn/build-state.yml 148 | .yarn/install-state.gz 149 | .pnp.* 150 | 151 | *.node 152 | *.wasm 153 | 154 | ### Node Patch ### 155 | # Serverless Webpack directories 156 | .webpack/ 157 | 158 | # Optional stylelint cache 159 | .stylelintcache 160 | 161 | # SvelteKit build / generate output 162 | .svelte-kit 163 | 164 | ### Created by https://www.gitignore.io 165 | ### macOS ### 166 | # General 167 | .DS_Store 168 | .AppleDouble 169 | .LSOverride 170 | 171 | # Icon must end with two \r 172 | Icon 173 | 174 | # Thumbnails 175 | ._* 176 | 177 | # Files that might appear in the root of a volume 178 | .DocumentRevisions-V100 179 | .fseventsd 180 | .Spotlight-V100 181 | .TemporaryItems 182 | .Trashes 183 | .VolumeIcon.icns 184 | .com.apple.timemachine.donotpresent 185 | 186 | # Directories potentially created on remote AFP share 187 | .AppleDB 188 | .AppleDesktop 189 | Network Trash Folder 190 | Temporary Items 191 | .apdisk 192 | 193 | ### macOS Patch ### 194 | # iCloud generated files 195 | *.icloud 196 | 197 | /npm -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | target 2 | .yarn 3 | index.js 4 | index.d.ts 5 | pnpm-lock.yaml -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | authors = ["LongYinan "] 3 | edition = "2021" 4 | name = "napi-file-type" 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 | napi = "2" 14 | napi-derive = "2" 15 | file-format = { version = "0.24", features = ["reader"] } 16 | 17 | [target.'cfg(not(any(target_os = "linux", target_family = "wasm")))'.dependencies] 18 | mimalloc = "0.1" 19 | 20 | [target.'cfg(target_os = "linux")'.dependencies] 21 | mimalloc = { version = "0.1", features = ["local_dynamic_tls"] } 22 | 23 | [build-dependencies] 24 | napi-build = "2" 25 | 26 | [profile.release] 27 | lto = true 28 | codegen-units = 1 29 | 30 | [profile.wasi] 31 | inherits = "release" 32 | debug = 'full' 33 | opt-level = 'z' 34 | overflow-checks = false 35 | panic = 'abort' 36 | -------------------------------------------------------------------------------- /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 | # `@toeverything/file-type` 2 | 3 | ![https://github.com/toeverything/file-type/actions](https://github.com/toeverything/file-type/workflows/CI/badge.svg) 4 | 5 | ## Usage 6 | 7 | ```ts 8 | import { readFile } from 'node:fs' 9 | 10 | import { FileType } from '@toeverything/file-type' 11 | 12 | const fileType = new FileType(await readFile('path/to/file.jpg')) 13 | console.log(fileType.mime()) // 'application/image/jpeg' 14 | console.log(fileType.ext()) // 'jpg' 15 | ``` 16 | 17 | ## Performance 18 | 19 | ```txt 20 | ┌─────────┬───────────────────────────┬─────────────┬────────────────────┬──────────┬─────────┐ 21 | │ (index) │ Task Name │ ops/sec │ Average Time (ns) │ Margin │ Samples │ 22 | ├─────────┼───────────────────────────┼─────────────┼────────────────────┼──────────┼─────────┤ 23 | │ 0 │ '@toeverything/file-type' │ '1,554,666' │ 643.2246344556239 │ '±2.01%' │ 777334 │ 24 | │ 1 │ 'file-type' │ '664,314' │ 1505.3104426207442 │ '±0.38%' │ 332158 │ 25 | └─────────┴───────────────────────────┴─────────────┴────────────────────┴──────────┴─────────┘ 26 | ``` 27 | 28 | ## Supported file formats 29 | 30 | ### Archive 31 | 32 | - 7-Zip (7Z) 33 | - ACE 34 | - ALZ 35 | - Archived by Robert Jung (ARJ) 36 | - Cabinet (CAB) 37 | - Extensible Archive (XAR) 38 | - LArc (LZS) 39 | - LHA 40 | - Mozilla Archive (MAR) 41 | - Multi Layer Archive (MLA) 42 | - PMarc (PMA) 43 | - Roshal Archive (RAR) 44 | - SeqBox (SBX) 45 | - Squashfs 46 | - StuffIt (SIT) 47 | - StuffIt X (SITX) 48 | - Tape Archive (TAR) 49 | - UNIX archiver (archiver) 50 | - Windows Imaging Format (WIM) 51 | - ZIP 52 | - ZPAQ 53 | - cpio 54 | - zoo 55 | 56 | ### Audio 57 | 58 | - 8-Bit Sampled Voice (8SVX) 59 | - Adaptive Multi-Rate (AMR) 60 | - Advanced Audio Coding (AAC) 61 | - Apple iTunes Audio (M4A) 62 | - Apple iTunes Audiobook (M4B) 63 | - Apple iTunes Protected Audio (M4P) 64 | - Au 65 | - Audio Codec 3 (AC-3) 66 | - Audio Interchange File Format (AIFF) 67 | - Audio Visual Research (AVR) 68 | - Creative Voice (VOC) 69 | - FastTracker 2 Extended Module (XM) 70 | - Flash MP4 Audio (F4A) 71 | - Flash MP4 Audiobook (F4B) 72 | - Free Lossless Audio Codec (FLAC) 73 | - Impulse Tracker Module (IT) 74 | - MPEG-1/2 Audio Layer 2 (MP2) 75 | - MPEG-1/2 Audio Layer 3 (MP3) 76 | - MPEG-4 Part 14 Audio (MP4) 77 | - Matroska Audio (MKA) 78 | - Monkey's Audio (APE) 79 | - Musepack (MPC) 80 | - Musical Instrument Digital Interface (MIDI) 81 | - Ogg FLAC (OGA) 82 | - Ogg Opus (Opus) 83 | - Ogg Speex (Speex) 84 | - Ogg Vorbis (Vorbis) 85 | - Qualcomm PureVoice (QCP) 86 | - Quite OK Audio (QOA) 87 | - RealAudio (RA) 88 | - Scream Tracker 3 Module (S3M) 89 | - Sony DSD Stream File (DSF) 90 | - SoundFont 2 (SF2) 91 | - Ultimate Soundtracker Module (MOD) 92 | - WavPack (WV) 93 | - Waveform Audio (WAV) 94 | - Windows Media Audio (WMA) 95 | 96 | ### Compressed 97 | 98 | - BZip3 (BZ3) 99 | - LZ4 100 | - Lempel-Ziv Finite State Entropy (LZFSE) 101 | - Lempel-Ziv-Markov chain algorithm (LZMA) 102 | - Long Range ZIP (LRZIP) 103 | - Snappy 104 | - UNIX compress (compress) 105 | - XZ 106 | - Zstandard (zstd) 107 | - bzip (BZ) 108 | - bzip2 (BZ2) 109 | - gzip (GZ) 110 | - lzip (LZ) 111 | - lzop (LZO) 112 | - rzip (RZ) 113 | 114 | ### Database 115 | 116 | - Microsoft Access 2007 Database (ACCDB) 117 | - Microsoft Access Database (MDB) 118 | - Microsoft Works Database (WDB) 119 | - OpenDocument Database (ODB) 120 | - SQLite 3 121 | 122 | ### Diagram 123 | 124 | - Circuit Diagram Document (CDDX) 125 | - Microsoft Visio Drawing (VSD) 126 | - Office Open XML Drawing (VSDX) 127 | - StarChart (SDS) 128 | - draw.io (DRAWIO) 129 | 130 | ### Disk 131 | 132 | - Amiga Disk File (ADF) 133 | - Apple Disk Image (DMG) 134 | - ISO 9660 (ISO) 135 | - Microsoft Virtual Hard Disk (VHD) 136 | - Microsoft Virtual Hard Disk 2 (VHDX) 137 | - QEMU Copy On Write (QCOW) 138 | - Virtual Machine Disk (VMDK) 139 | - VirtualBox Virtual Disk Image (VDI) 140 | 141 | ### Document 142 | 143 | - AbiWord (ABW) 144 | - AbiWord Template (AWT) 145 | - Adobe InDesign Document (INDD) 146 | - DjVu 147 | - InDesign Markup Language (IDML) 148 | - LaTeX (TeX) 149 | - Microsoft Publisher Document (PUB) 150 | - Microsoft Word Document (DOC) 151 | - Microsoft Works Word Processor (WPS) 152 | - Microsoft Write (WRI) 153 | - Office Open XML Document (DOCX) 154 | - OpenDocument Text (ODT) 155 | - OpenDocument Text Master (ODM) 156 | - OpenDocument Text Master Template (OTM) 157 | - OpenDocument Text Template (OTT) 158 | - OpenXPS (OXPS) 159 | - Portable Document Format (PDF) 160 | - PostScript (PS) 161 | - Rich Text Format (RTF) 162 | - StarWriter (SDW) 163 | - Sun XML Writer (SXW) 164 | - Sun XML Writer Global (SGW) 165 | - Sun XML Writer Template (STW) 166 | - Uniform Office Format Text (UOT) 167 | - WordPerfect Document (WPD) 168 | 169 | ### Ebook 170 | 171 | - Broad Band eBook (BBeB) 172 | - Electronic Publication (EPUB) 173 | - FictionBook (FB2) 174 | - FictionBook ZIP (FBZ) 175 | - Microsoft Reader (LIT) 176 | - Mobipocket (MOBI) 177 | 178 | ### Executable 179 | 180 | - Commodore 64 Program (PRG) 181 | - Common Object File Format (COFF) 182 | - Dalvik Executable (DEX) 183 | - Dynamic Link Library (DLL) 184 | - Executable and Linkable Format (ELF) 185 | - Java Class 186 | - LLVM Bitcode (BC) 187 | - Linear Executable (LE) 188 | - Lua Bytecode 189 | - MS-DOS Executable (EXE) 190 | - Mach-O 191 | - New Executable (NE) 192 | - Nintendo Switch Executable (NSO) 193 | - Optimized Dalvik Executable (DEY) 194 | - Portable Executable (PE) 195 | - WebAssembly Binary (Wasm) 196 | - Xbox 360 Executable (XEX) 197 | - Xbox Executable (XBE) 198 | 199 | ### Font 200 | 201 | - BMFont ASCII (FNT) 202 | - BMFont Binary (FNT) 203 | - Embedded OpenType (EOT) 204 | - OpenType (OTF) 205 | - TrueType (TTF) 206 | - Web Open Font Format (WOFF) 207 | - Web Open Font Format 2 (WOFF2) 208 | 209 | ### Formula 210 | 211 | - Mathematical Markup Language (MathML) 212 | - OpenDocument Formula (ODF) 213 | - OpenDocument Formula Template (OTF) 214 | - StarMath (SMF) 215 | - Sun XML Math (SXM) 216 | 217 | ### Geospatial 218 | 219 | - Flexible and Interoperable Data Transfer (FIT) 220 | - GPS Exchange Format (GPX) 221 | - Geography Markup Language (GML) 222 | - Keyhole Markup Language (KML) 223 | - Keyhole Markup Language ZIP (KMZ) 224 | - Shapefile (SHP) 225 | - Training Center XML (TCX) 226 | 227 | ### Image 228 | 229 | - AV1 Image File Format (AVIF) 230 | - AV1 Image File Format Sequence (AVIFS) 231 | - Adaptable Scalable Texture Compression (ASTC) 232 | - Adobe Illustrator Artwork (AI) 233 | - Adobe Photoshop Document (PSD) 234 | - Animated Portable Network Graphics (APNG) 235 | - Apple Icon Image (ICNS) 236 | - Better Portable Graphics (BPG) 237 | - Canon Raw (CRW) 238 | - Canon Raw 2 (CR2) 239 | - Canon Raw 3 (CR3) 240 | - Cineon (CIN) 241 | - Digital Picture Exchange (DPX) 242 | - Encapsulated PostScript (EPS) 243 | - Experimental Computing Facility (XCF) 244 | - Free Lossless Image Format (FLIF) 245 | - Fujifilm Raw (RAF) 246 | - Graphics Interchange Format (GIF) 247 | - High Efficiency Image Coding (HEIC) 248 | - High Efficiency Image Coding Sequence (HEICS) 249 | - High Efficiency Image File Format (HEIF) 250 | - High Efficiency Image File Format Sequence (HEIFS) 251 | - JPEG 2000 Codestream (J2C) 252 | - JPEG 2000 Part 1 (JP2) 253 | - JPEG 2000 Part 2 (JPX) 254 | - JPEG 2000 Part 6 (JPM) 255 | - JPEG Extended Range (JXR) 256 | - JPEG Network Graphics (JNG) 257 | - JPEG XL (JXL) 258 | - JPEG-LS (JLS) 259 | - Joint Photographic Experts Group (JPEG) 260 | - Khronos Texture (KTX) 261 | - Khronos Texture 2 (KTX2) 262 | - Magick Image File Format (MIFF) 263 | - Microsoft DirectDraw Surface (DDS) 264 | - Multiple-image Network Graphics (MNG) 265 | - Nikon Electronic File (NEF) 266 | - Olympus Raw Format (ORF) 267 | - OpenDocument Graphics (ODG) 268 | - OpenDocument Graphics Template (OTG) 269 | - OpenEXR (EXR) 270 | - OpenRaster (ORA) 271 | - Panasonic Raw (RW2) 272 | - Picture Exchange (PCX) 273 | - Portable Arbitrary Map (PAM) 274 | - Portable BitMap (PBM) 275 | - Portable FloatMap (PFM) 276 | - Portable GrayMap (PGM) 277 | - Portable Network Graphics (PNG) 278 | - Portable PixMap (PPM) 279 | - Quite OK Image (QOI) 280 | - Radiance HDR (HDR) 281 | - Scalable Vector Graphics (SVG) 282 | - Silicon Graphics Image (SGI) 283 | - StarDraw (SDA) 284 | - Sun XML Draw (SXD) 285 | - Sun XML Draw Template (STD) 286 | - Tag Image File Format (TIFF) 287 | - WebP 288 | - Windows Animated Cursor (ANI) 289 | - Windows Bitmap (BMP) 290 | - Windows Cursor (CUR) 291 | - Windows Icon (ICO) 292 | - Windows Metafile (WMF) 293 | - WordPerfect Graphics (WPG) 294 | - X PixMap (XPM) 295 | - farbfeld (FF) 296 | 297 | ### Metadata 298 | 299 | - Android Binary XML (AXML) 300 | - BitTorrent (Torrent) 301 | - CD Audio (CDA) 302 | - Meta Information Encapsulation (MIE) 303 | - TASTy 304 | - Windows Shortcut (LNK) 305 | - macOS Alias 306 | 307 | ### Model 308 | 309 | - 3D Manufacturing Format (3MF) 310 | - 3D Studio (3DS) 311 | - 3D Studio Max (MAX) 312 | - Additive Manufacturing Format (AMF) 313 | - AutoCAD Drawing (DWG) 314 | - Autodesk 123D (123DX) 315 | - Autodesk Alias (WIRE) 316 | - Autodesk Inventor Assembly (IAM) 317 | - Autodesk Inventor Drawing (IDW) 318 | - Autodesk Inventor Part (IPT) 319 | - Autodesk Inventor Presentation (IPN) 320 | - Blender (BLEND) 321 | - Cinema 4D (C4D) 322 | - Collaborative Design Activity (COLLADA) 323 | - Design Web Format (DWF) 324 | - Design Web Format XPS (DWFX) 325 | - Drawing Exchange Format ASCII (DXF) 326 | - Drawing Exchange Format Binary (DXF) 327 | - Extensible 3D (X3D) 328 | - Filmbox (FBX) 329 | - Fusion 360 (F3D) 330 | - GL Transmission Format Binary (GLB) 331 | - Google Draco (Draco) 332 | - Initial Graphics Exchange Specification (IGES) 333 | - Inter-Quake Export (IQE) 334 | - Inter-Quake Model (IQM) 335 | - MagicaVoxel (VOX) 336 | - Maya ASCII (MA) 337 | - Maya Binary (MB) 338 | - Model 3D ASCII (A3D) 339 | - Model 3D Binary (M3D) 340 | - Polygon ASCII (PLY) 341 | - Polygon Binary (PLY) 342 | - SketchUp (SKP) 343 | - SolidWorks Assembly (SLDASM) 344 | - SolidWorks Drawing (SLDDRW) 345 | - SolidWorks Part (SLDPRT) 346 | - SpaceClaim Document (SCDOC) 347 | - Standard for the Exchange of Product model data (STEP) 348 | - Stereolithography ASCII (STL) 349 | - Universal 3D (U3D) 350 | - Universal Scene Description ASCII (USDA) 351 | - Universal Scene Description Binary (USDC) 352 | - Universal Scene Description ZIP (USDZ) 353 | - Virtual Reality Modeling Language (VRML) 354 | - openNURBS (3DM) 355 | 356 | ### Other 357 | 358 | - ActiveMime (MSO) 359 | - Advanced Systems Format (ASF) 360 | - Android Resource Storage Container (ARSC) 361 | - Apache Arrow Columnar (Arrow) 362 | - Apache Avro (Avro) 363 | - Apache Parquet (Parquet) 364 | - Arbitrary Binary Data (BIN) 365 | - Atom 366 | - Clojure Script 367 | - Compound File Binary (CFB) 368 | - DER Certificate (DER) 369 | - Digital Imaging and Communications in Medicine (DICOM) 370 | - Empty 371 | - Extensible Binary Meta Language (EBML) 372 | - Extensible Markup Language (XML) 373 | - Extensible Stylesheet Language Transformations (XSLT) 374 | - Flash CS5 Project (FLA) 375 | - Flash Project (FLA) 376 | - Flexible Image Transport System (FITS) 377 | - HyperText Markup Language (HTML) 378 | - ICC Profile (ICC) 379 | - JSON Feed 380 | - Java KeyStore (JKS) 381 | - Lua Script 382 | - MPEG-4 Part 14 (MP4) 383 | - MS-DOS Batch (Batch) 384 | - Microsoft Compiled HTML Help (CHM) 385 | - Microsoft Project Plan (MPP) 386 | - Microsoft Visual Studio Solution (SLN) 387 | - MusicXML 388 | - MusicXML ZIP (MXL) 389 | - Ogg Multiplexed Media (OGX) 390 | - PCAP Dump (PCAP) 391 | - PCAP Next Generation Dump (PCAPNG) 392 | - PEM Certificate (PEM) 393 | - PEM Certificate Signing Request (PEM) 394 | - PEM Private Key (PEM) 395 | - PEM Public Key (PEM) 396 | - PGP Message (PGP) 397 | - PGP Private Key Block (PGP) 398 | - PGP Public Key Block (PGP) 399 | - PGP Signature (PGP) 400 | - PGP Signed Message (PGP) 401 | - Perl Script 402 | - Personal Storage Table (PST) 403 | - Plain Text (TXT) 404 | - Python Script 405 | - RealMedia (RM) 406 | - Really Simple Syndication (RSS) 407 | - Ruby Script 408 | - Shell Script 409 | - Simple Object Access Protocol (SOAP) 410 | - Small Web Format (SWF) 411 | - Tiled Map XML (TMX) 412 | - Tiled Tileset XML (TSX) 413 | - Tool Command Language Script (Tcl Script) 414 | - WebAssembly Text (WAT) 415 | - WordPerfect Macro (WPM) 416 | - XML Localization Interchange File Format (XLIFF) 417 | - gettext Machine Object (MO) 418 | - iCalendar (ICS) 419 | - vCalendar (VCS) 420 | - vCard (VCF) 421 | 422 | ### Package 423 | 424 | - Adobe Integrated Runtime (AIR) 425 | - Android App Bundle (AAB) 426 | - Android Package (APK) 427 | - AppImage 428 | - Debian Package (DEB) 429 | - Enterprise Application Archive (EAR) 430 | - Google Chrome Extension (CRX) 431 | - Java Archive (JAR) 432 | - Microsoft Software Installer (MSI) 433 | - Microsoft Visual Studio Extension (VSIX) 434 | - Nintendo Switch Package (NSP) 435 | - Red Hat Package Manager (RPM) 436 | - Web Application Archive (WAR) 437 | - Windows App Bundle (APPXBUNDLE) 438 | - Windows App Package (APPX) 439 | - XAP 440 | - XPInstall (XPI) 441 | - iOS App Store Package (IPA) 442 | 443 | ### Playlist 444 | 445 | - Advanced Stream Redirector (ASX) 446 | - MP3 URL (M3U) 447 | - MPEG-DASH MPD (MPD) 448 | - SHOUTcast Playlist (PLS) 449 | - Windows Media Playlist (WPL) 450 | - XML Shareable Playlist Format (XSPF) 451 | 452 | ### Presentation 453 | 454 | - Corel Presentations (SHW) 455 | - Corel Presentations 7 (SHW) 456 | - Microsoft PowerPoint Presentation (PPT) 457 | - Office Open XML Presentation (PPTX) 458 | - OpenDocument Presentation (ODP) 459 | - OpenDocument Presentation Template (OTP) 460 | - StarImpress (SDD) 461 | - Sun XML Impress (SXI) 462 | - Sun XML Impress Template (STI) 463 | - Uniform Office Format Presentation (UOP) 464 | - WordPerfect Presentations (SHW) 465 | 466 | ### ROM 467 | 468 | - Atari 7800 ROM (A78) 469 | - Commodore 64 Cartridge (CRT) 470 | - Game Boy Advance ROM (GBA) 471 | - Game Boy Color ROM (GBC) 472 | - Game Boy ROM (GB) 473 | - Game Gear ROM (GG) 474 | - Mega Drive ROM (MD) 475 | - Neo Geo Pocket Color ROM (NGC) 476 | - Neo Geo Pocket ROM (NGP) 477 | - Nintendo 64 ROM (Z64) 478 | - Nintendo DS ROM (NDS) 479 | - Nintendo Entertainment System ROM (NES) 480 | - Nintendo Switch ROM (XCI) 481 | - Sega Master System ROM (SMS) 482 | 483 | ### Spreadsheet 484 | 485 | - Microsoft Excel Spreadsheet (XLS) 486 | - Microsoft Works 6 Spreadsheet (XLR) 487 | - Microsoft Works Spreadsheet (WKS) 488 | - Office Open XML Spreadsheet (XLSX) 489 | - OpenDocument Spreadsheet (ODS) 490 | - OpenDocument Spreadsheet Template (OTS) 491 | - StarCalc (SDC) 492 | - Sun XML Calc (SXC) 493 | - Sun XML Calc Template (STC) 494 | - Uniform Office Format Spreadsheet (UOS) 495 | 496 | ### Subtitle 497 | 498 | - MPEG-4 Part 14 Subtitles (MP4) 499 | - Matroska Subtitles (MKS) 500 | - SubRip Text (SRT) 501 | - Timed Text Markup Language (TTML) 502 | - Universal Subtitle Format (USF) 503 | - Web Video Text Tracks (WebVTT) 504 | 505 | ### Video 506 | 507 | - 3rd Generation Partnership Project (3GPP) 508 | - 3rd Generation Partnership Project 2 (3GPP2) 509 | - Actions Media Video (AMV) 510 | - Apple QuickTime (MOV) 511 | - Apple iTunes Video (M4V) 512 | - Audio Video Interleave (AVI) 513 | - Autodesk Animator (FLI) 514 | - Autodesk Animator Pro (FLC) 515 | - BDAV MPEG-2 Transport Stream (M2TS) 516 | - Flash MP4 Protected Video (F4P) 517 | - Flash MP4 Video (F4V) 518 | - Flash Video (FLV) 519 | - JPEG 2000 Part 3 (MJ2) 520 | - MPEG-1/2 Video (MPG) 521 | - MPEG-2 Transport Stream (TS) 522 | - MPEG-4 Part 14 Video (MP4) 523 | - MTV 524 | - Material Exchange Format (MXF) 525 | - Matroska 3D Video (MK3D) 526 | - Matroska Video (MKV) 527 | - Microsoft Digital Video Recording (DVR-MS) 528 | - Ogg Media (OGM) 529 | - Ogg Theora (Theora) 530 | - RealVideo (RV) 531 | - Silicon Graphics Movie (SGI) 532 | - Sony Movie (MQV) 533 | - WebM 534 | - Windows Media Video (WMV) 535 | - Windows Recorded TV Show (WTV) 536 | -------------------------------------------------------------------------------- /__test__/index.spec.ts: -------------------------------------------------------------------------------- 1 | import { readFileSync } from 'node:fs' 2 | import { join } from 'node:path' 3 | import { fileURLToPath } from 'node:url' 4 | 5 | import test from 'ava' 6 | 7 | import { FileType, Kind } from '../index.js' 8 | 9 | const dirname = join(fileURLToPath(import.meta.url), '..') 10 | 11 | const JPG = readFileSync(join(dirname, 'sample.jpg')) 12 | 13 | test('Common file type test', (t) => { 14 | const fileType = new FileType(JPG) 15 | t.is(fileType.extension(), 'jpg') 16 | t.is(fileType.mime(), 'image/jpeg') 17 | t.is(fileType.name(), 'Joint Photographic Experts Group') 18 | t.is(fileType.kind(), Kind.Image) 19 | }) 20 | -------------------------------------------------------------------------------- /__test__/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "module" 3 | } 4 | -------------------------------------------------------------------------------- /__test__/sample.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/toeverything/file-type/c37bee7dda36f19bf1ada75b511896b4b86a59d4/__test__/sample.jpg -------------------------------------------------------------------------------- /benchmark/bench.ts: -------------------------------------------------------------------------------- 1 | import { readFile } from 'node:fs/promises' 2 | import { fileURLToPath } from 'node:url' 3 | import { join } from 'node:path' 4 | 5 | import { Bench } from 'tinybench' 6 | import { fileTypeFromBuffer } from 'file-type' 7 | 8 | import { FileType } from '../index.js' 9 | 10 | const b = new Bench() 11 | 12 | const FIXTURE = await readFile(join(fileURLToPath(import.meta.url), '..', '..', '__test__', 'sample.jpg')) 13 | 14 | b.add('@toeverything/file-type', () => { 15 | const ft = new FileType(FIXTURE) 16 | ft.extension() 17 | }).add('file-type', async () => { 18 | await fileTypeFromBuffer(FIXTURE) 19 | }) 20 | 21 | await b.warmup() 22 | await b.run() 23 | console.table(b.table()) 24 | -------------------------------------------------------------------------------- /benchmark/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "module" 3 | } 4 | -------------------------------------------------------------------------------- /browser.js: -------------------------------------------------------------------------------- 1 | export * from '@toeverything/file-type-wasm32-wasi' 2 | -------------------------------------------------------------------------------- /build.rs: -------------------------------------------------------------------------------- 1 | extern crate napi_build; 2 | 3 | fn main() { 4 | napi_build::setup(); 5 | } 6 | -------------------------------------------------------------------------------- /file-type.wasi-browser.js: -------------------------------------------------------------------------------- 1 | import { 2 | instantiateNapiModuleSync as __emnapiInstantiateNapiModuleSync, 3 | getDefaultContext as __emnapiGetDefaultContext, 4 | WASI as __WASI, 5 | createOnMessage as __wasmCreateOnMessageForFsProxy, 6 | } from '@napi-rs/wasm-runtime' 7 | 8 | import __wasmUrl from './file-type.wasm32-wasi.wasm?url' 9 | 10 | const __wasi = new __WASI({ 11 | version: 'preview1', 12 | }) 13 | 14 | const __emnapiContext = __emnapiGetDefaultContext() 15 | 16 | const __sharedMemory = new WebAssembly.Memory({ 17 | initial: 4000, 18 | maximum: 65536, 19 | shared: true, 20 | }) 21 | 22 | const __wasmFile = await fetch(__wasmUrl).then((res) => res.arrayBuffer()) 23 | 24 | const { 25 | instance: __napiInstance, 26 | module: __wasiModule, 27 | napiModule: __napiModule, 28 | } = __emnapiInstantiateNapiModuleSync(__wasmFile, { 29 | context: __emnapiContext, 30 | asyncWorkPoolSize: 4, 31 | wasi: __wasi, 32 | onCreateWorker() { 33 | const worker = new Worker(new URL('./wasi-worker-browser.mjs', import.meta.url), { 34 | type: 'module', 35 | }) 36 | 37 | return worker 38 | }, 39 | overwriteImports(importObject) { 40 | importObject.env = { 41 | ...importObject.env, 42 | ...importObject.napi, 43 | ...importObject.emnapi, 44 | memory: __sharedMemory, 45 | } 46 | return importObject 47 | }, 48 | beforeInit({ instance }) { 49 | __napi_rs_initialize_modules(instance) 50 | }, 51 | }) 52 | 53 | function __napi_rs_initialize_modules(__napiInstance) { 54 | __napiInstance.exports['__napi_register__FileType_struct_0']?.() 55 | __napiInstance.exports['__napi_register__Kind_1']?.() 56 | __napiInstance.exports['__napi_register__FileType_impl_7']?.() 57 | } 58 | export const FileType = __napiModule.exports.FileType 59 | export const Kind = __napiModule.exports.Kind 60 | -------------------------------------------------------------------------------- /file-type.wasi.cjs: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | /* prettier-ignore */ 3 | 4 | /* auto-generated by NAPI-RS */ 5 | 6 | const __nodeFs = require('node:fs') 7 | const __nodePath = require('node:path') 8 | const { WASI: __nodeWASI } = require('node:wasi') 9 | const { Worker } = require('node:worker_threads') 10 | 11 | const { 12 | instantiateNapiModuleSync: __emnapiInstantiateNapiModuleSync, 13 | getDefaultContext: __emnapiGetDefaultContext, 14 | createOnMessage: __wasmCreateOnMessageForFsProxy, 15 | } = require('@napi-rs/wasm-runtime') 16 | 17 | const __rootDir = __nodePath.parse(process.cwd()).root 18 | 19 | const __wasi = new __nodeWASI({ 20 | version: 'preview1', 21 | env: process.env, 22 | preopens: { 23 | [__rootDir]: __rootDir, 24 | } 25 | }) 26 | 27 | const __emnapiContext = __emnapiGetDefaultContext() 28 | 29 | const __sharedMemory = new WebAssembly.Memory({ 30 | initial: 4000, 31 | maximum: 65536, 32 | shared: true, 33 | }) 34 | 35 | let __wasmFilePath = __nodePath.join(__dirname, 'file-type.wasm32-wasi.wasm') 36 | const __wasmDebugFilePath = __nodePath.join(__dirname, 'file-type.wasm32-wasi.debug.wasm') 37 | 38 | if (__nodeFs.existsSync(__wasmDebugFilePath)) { 39 | __wasmFilePath = __wasmDebugFilePath 40 | } else if (!__nodeFs.existsSync(__wasmFilePath)) { 41 | try { 42 | __wasmFilePath = __nodePath.resolve('@toeverything/file-type-wasm32-wasi') 43 | } catch { 44 | throw new Error('Cannot find file-type.wasm32-wasi.wasm file, and @toeverything/file-type-wasm32-wasi package is not installed.') 45 | } 46 | } 47 | 48 | const { instance: __napiInstance, module: __wasiModule, napiModule: __napiModule } = __emnapiInstantiateNapiModuleSync(__nodeFs.readFileSync(__wasmFilePath), { 49 | context: __emnapiContext, 50 | asyncWorkPoolSize: (function() { 51 | const threadsSizeFromEnv = Number(process.env.NAPI_RS_ASYNC_WORK_POOL_SIZE ?? process.env.UV_THREADPOOL_SIZE) 52 | // NaN > 0 is false 53 | if (threadsSizeFromEnv > 0) { 54 | return threadsSizeFromEnv 55 | } else { 56 | return 4 57 | } 58 | })(), 59 | wasi: __wasi, 60 | onCreateWorker() { 61 | const worker = new Worker(__nodePath.join(__dirname, 'wasi-worker.mjs'), { 62 | env: process.env, 63 | execArgv: ['--experimental-wasi-unstable-preview1'], 64 | }) 65 | worker.onmessage = ({ data }) => { 66 | __wasmCreateOnMessageForFsProxy(__nodeFs)(data) 67 | } 68 | return worker 69 | }, 70 | overwriteImports(importObject) { 71 | importObject.env = { 72 | ...importObject.env, 73 | ...importObject.napi, 74 | ...importObject.emnapi, 75 | memory: __sharedMemory, 76 | } 77 | return importObject 78 | }, 79 | beforeInit({ instance }) { 80 | __napi_rs_initialize_modules(instance) 81 | } 82 | }) 83 | 84 | function __napi_rs_initialize_modules(__napiInstance) { 85 | __napiInstance.exports['__napi_register__FileType_struct_0']?.() 86 | __napiInstance.exports['__napi_register__Kind_1']?.() 87 | __napiInstance.exports['__napi_register__FileType_impl_7']?.() 88 | } 89 | module.exports.FileType = __napiModule.exports.FileType 90 | module.exports.Kind = __napiModule.exports.Kind 91 | -------------------------------------------------------------------------------- /index.d.ts: -------------------------------------------------------------------------------- 1 | /* auto-generated by NAPI-RS */ 2 | /* eslint-disable */ 3 | export class FileType { 4 | constructor(bytes: Uint8Array) 5 | /** 6 | * Returns the common extension of the file format. 7 | * 8 | * Note: this information is never empty. 9 | * 10 | * # Examples 11 | * 12 | * Basic usage: 13 | * 14 | * ``` 15 | * new FileType([...]).extension() // "wmv" 16 | *``` 17 | */ 18 | extension(): string 19 | /** 20 | * Returns the `Kind` of the file format. 21 | * 22 | * # Examples 23 | * 24 | * Basic usage: 25 | * 26 | * ``` 27 | * new FileType([...]).kind() // Kind.Archive 28 | *``` 29 | */ 30 | kind(): Kind 31 | /** 32 | * Returns the common media type (formerly known as MIME type) of the file format as 33 | * defined in [IETF RFC 6838](https://tools.ietf.org/html/rfc6838). 34 | * 35 | * Note: some media types may not be defined in the 36 | * [IANA registry](https://www.iana.org/assignments/media-types/media-types.xhtml). 37 | * 38 | * # Examples 39 | * 40 | * Basic usage: 41 | * 42 | * ``` 43 | * new FileType([...]).media_type() // "application/zstd" 44 | *``` 45 | */ 46 | mime(): string 47 | /** 48 | * Returns the full name of the file format. 49 | * 50 | * # Examples 51 | * 52 | * Basic usage: 53 | * 54 | * ``` 55 | * new FileType([...]).name() // "MPEG-1/2 Audio Layer 3" 56 | *``` 57 | */ 58 | name(): string 59 | } 60 | 61 | /** A kind of file format. */ 62 | export enum Kind { 63 | /** Files and directories stored in a single, possibly compressed, archive. */ 64 | Archive = 'Archive', 65 | /** Musics, sound effects, and spoken audio recordings. */ 66 | Audio = 'Audio', 67 | /** Compressed single files or streams. */ 68 | Compressed = 'Compressed', 69 | /** Organized collections of data. */ 70 | Database = 'Database', 71 | /** Visual information using graphics and spatial relationships. */ 72 | Diagram = 'Diagram', 73 | /** Floppy disk images, optical disc images and virtual machine disks. */ 74 | Disk = 'Disk', 75 | /** Word processing and desktop publishing documents. */ 76 | Document = 'Document', 77 | /** Electronic books. */ 78 | Ebook = 'Ebook', 79 | /** Machine-executable code, virtual machine code and shared libraries. */ 80 | Executable = 'Executable', 81 | /** Typefaces used for displaying text on screen or in print. */ 82 | Font = 'Font', 83 | /** Mathematical formulas. */ 84 | Formula = 'Formula', 85 | /** Collections of geospatial features, GPS tracks and other location-related files. */ 86 | Geospatial = 'Geospatial', 87 | /** Animated images, icons, cursors, raster graphics and vector graphics. */ 88 | Image = 'Image', 89 | /** Data that provides information about other data. */ 90 | Metadata = 'Metadata', 91 | /** 3D models, CAD drawings, and other types of files used for creating or displaying 3D images. */ 92 | Model = 'Model', 93 | /** Data which do not fit in any of the other kinds. */ 94 | Other = 'Other', 95 | /** Collections of files bundled together for software distribution. */ 96 | Package = 'Package', 97 | /** Lists of audio or video files, organized in a specific order for sequential playback. */ 98 | Playlist = 'Playlist', 99 | /** Slide shows. */ 100 | Presentation = 'Presentation', 101 | /** Copies of a read-only memory chip of computers, cartridges, or other electronic devices. */ 102 | Rom = 'Rom', 103 | /** Data in tabular form. */ 104 | Spreadsheet = 'Spreadsheet', 105 | /** Subtitles and captions. */ 106 | Subtitle = 'Subtitle', 107 | /** Moving images, possibly with color and coordinated sound. */ 108 | Video = 'Video' 109 | } 110 | 111 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | // prettier-ignore 2 | /* eslint-disable */ 3 | /* auto-generated by NAPI-RS */ 4 | 5 | const { readFileSync } = require('fs') 6 | 7 | let nativeBinding = null 8 | const loadErrors = [] 9 | 10 | const isMusl = () => { 11 | let musl = false 12 | if (process.platform === 'linux') { 13 | musl = isMuslFromFilesystem() 14 | if (musl === null) { 15 | musl = isMuslFromReport() 16 | } 17 | if (musl === null) { 18 | musl = isMuslFromChildProcess() 19 | } 20 | } 21 | return musl 22 | } 23 | 24 | const isFileMusl = (f) => f.includes('libc.musl-') || f.includes('ld-musl-') 25 | 26 | const isMuslFromFilesystem = () => { 27 | try { 28 | return readFileSync('/usr/bin/ldd', 'utf-8').includes('musl') 29 | } catch { 30 | return null 31 | } 32 | } 33 | 34 | const isMuslFromReport = () => { 35 | const report = typeof process.report.getReport === 'function' ? process.report.getReport() : null 36 | if (!report) { 37 | return null 38 | } 39 | if (report.header && report.header.glibcVersionRuntime) { 40 | return false 41 | } 42 | if (Array.isArray(report.sharedObjects)) { 43 | if (report.sharedObjects.some(isFileMusl)) { 44 | return true 45 | } 46 | } 47 | return false 48 | } 49 | 50 | const isMuslFromChildProcess = () => { 51 | try { 52 | return require('child_process').execSync('ldd --version', { encoding: 'utf8' }).includes('musl') 53 | } catch (e) { 54 | // If we reach this case, we don't know if the system is musl or not, so is better to just fallback to false 55 | return false 56 | } 57 | } 58 | 59 | function requireNative() { 60 | if (process.platform === 'android') { 61 | if (process.arch === 'arm64') { 62 | try { 63 | return require('./file-type.android-arm64.node') 64 | } catch (e) { 65 | loadErrors.push(e) 66 | } 67 | try { 68 | return require('@toeverything/file-type-android-arm64') 69 | } catch (e) { 70 | loadErrors.push(e) 71 | } 72 | 73 | } else if (process.arch === 'arm') { 74 | try { 75 | return require('./file-type.android-arm-eabi.node') 76 | } catch (e) { 77 | loadErrors.push(e) 78 | } 79 | try { 80 | return require('@toeverything/file-type-android-arm-eabi') 81 | } catch (e) { 82 | loadErrors.push(e) 83 | } 84 | 85 | } else { 86 | loadErrors.push(new Error(`Unsupported architecture on Android ${process.arch}`)) 87 | } 88 | } else if (process.platform === 'win32') { 89 | if (process.arch === 'x64') { 90 | try { 91 | return require('./file-type.win32-x64-msvc.node') 92 | } catch (e) { 93 | loadErrors.push(e) 94 | } 95 | try { 96 | return require('@toeverything/file-type-win32-x64-msvc') 97 | } catch (e) { 98 | loadErrors.push(e) 99 | } 100 | 101 | } else if (process.arch === 'ia32') { 102 | try { 103 | return require('./file-type.win32-ia32-msvc.node') 104 | } catch (e) { 105 | loadErrors.push(e) 106 | } 107 | try { 108 | return require('@toeverything/file-type-win32-ia32-msvc') 109 | } catch (e) { 110 | loadErrors.push(e) 111 | } 112 | 113 | } else if (process.arch === 'arm64') { 114 | try { 115 | return require('./file-type.win32-arm64-msvc.node') 116 | } catch (e) { 117 | loadErrors.push(e) 118 | } 119 | try { 120 | return require('@toeverything/file-type-win32-arm64-msvc') 121 | } catch (e) { 122 | loadErrors.push(e) 123 | } 124 | 125 | } else { 126 | loadErrors.push(new Error(`Unsupported architecture on Windows: ${process.arch}`)) 127 | } 128 | } else if (process.platform === 'darwin') { 129 | try { 130 | return require('./file-type.darwin-universal.node') 131 | } catch (e) { 132 | loadErrors.push(e) 133 | } 134 | try { 135 | return require('@toeverything/file-type-darwin-universal') 136 | } catch (e) { 137 | loadErrors.push(e) 138 | } 139 | 140 | if (process.arch === 'x64') { 141 | try { 142 | return require('./file-type.darwin-x64.node') 143 | } catch (e) { 144 | loadErrors.push(e) 145 | } 146 | try { 147 | return require('@toeverything/file-type-darwin-x64') 148 | } catch (e) { 149 | loadErrors.push(e) 150 | } 151 | 152 | } else if (process.arch === 'arm64') { 153 | try { 154 | return require('./file-type.darwin-arm64.node') 155 | } catch (e) { 156 | loadErrors.push(e) 157 | } 158 | try { 159 | return require('@toeverything/file-type-darwin-arm64') 160 | } catch (e) { 161 | loadErrors.push(e) 162 | } 163 | 164 | } else { 165 | loadErrors.push(new Error(`Unsupported architecture on macOS: ${process.arch}`)) 166 | } 167 | } else if (process.platform === 'freebsd') { 168 | if (process.arch === 'x64') { 169 | try { 170 | return require('./file-type.freebsd-x64.node') 171 | } catch (e) { 172 | loadErrors.push(e) 173 | } 174 | try { 175 | return require('@toeverything/file-type-freebsd-x64') 176 | } catch (e) { 177 | loadErrors.push(e) 178 | } 179 | 180 | } else if (process.arch === 'arm64') { 181 | try { 182 | return require('./file-type.freebsd-arm64.node') 183 | } catch (e) { 184 | loadErrors.push(e) 185 | } 186 | try { 187 | return require('@toeverything/file-type-freebsd-arm64') 188 | } catch (e) { 189 | loadErrors.push(e) 190 | } 191 | 192 | } else { 193 | loadErrors.push(new Error(`Unsupported architecture on FreeBSD: ${process.arch}`)) 194 | } 195 | } else if (process.platform === 'linux') { 196 | if (process.arch === 'x64') { 197 | if (isMusl()) { 198 | try { 199 | return require('./file-type.linux-x64-musl.node') 200 | } catch (e) { 201 | loadErrors.push(e) 202 | } 203 | try { 204 | return require('@toeverything/file-type-linux-x64-musl') 205 | } catch (e) { 206 | loadErrors.push(e) 207 | } 208 | 209 | } else { 210 | try { 211 | return require('./file-type.linux-x64-gnu.node') 212 | } catch (e) { 213 | loadErrors.push(e) 214 | } 215 | try { 216 | return require('@toeverything/file-type-linux-x64-gnu') 217 | } catch (e) { 218 | loadErrors.push(e) 219 | } 220 | 221 | } 222 | } else if (process.arch === 'arm64') { 223 | if (isMusl()) { 224 | try { 225 | return require('./file-type.linux-arm64-musl.node') 226 | } catch (e) { 227 | loadErrors.push(e) 228 | } 229 | try { 230 | return require('@toeverything/file-type-linux-arm64-musl') 231 | } catch (e) { 232 | loadErrors.push(e) 233 | } 234 | 235 | } else { 236 | try { 237 | return require('./file-type.linux-arm64-gnu.node') 238 | } catch (e) { 239 | loadErrors.push(e) 240 | } 241 | try { 242 | return require('@toeverything/file-type-linux-arm64-gnu') 243 | } catch (e) { 244 | loadErrors.push(e) 245 | } 246 | 247 | } 248 | } else if (process.arch === 'arm') { 249 | if (isMusl()) { 250 | try { 251 | return require('./file-type.linux-arm-musleabihf.node') 252 | } catch (e) { 253 | loadErrors.push(e) 254 | } 255 | try { 256 | return require('@toeverything/file-type-linux-arm-musleabihf') 257 | } catch (e) { 258 | loadErrors.push(e) 259 | } 260 | 261 | } else { 262 | try { 263 | return require('./file-type.linux-arm-gnueabihf.node') 264 | } catch (e) { 265 | loadErrors.push(e) 266 | } 267 | try { 268 | return require('@toeverything/file-type-linux-arm-gnueabihf') 269 | } catch (e) { 270 | loadErrors.push(e) 271 | } 272 | 273 | } 274 | } else if (process.arch === 'riscv64') { 275 | if (isMusl()) { 276 | try { 277 | return require('./file-type.linux-riscv64-musl.node') 278 | } catch (e) { 279 | loadErrors.push(e) 280 | } 281 | try { 282 | return require('@toeverything/file-type-linux-riscv64-musl') 283 | } catch (e) { 284 | loadErrors.push(e) 285 | } 286 | 287 | } else { 288 | try { 289 | return require('./file-type.linux-riscv64-gnu.node') 290 | } catch (e) { 291 | loadErrors.push(e) 292 | } 293 | try { 294 | return require('@toeverything/file-type-linux-riscv64-gnu') 295 | } catch (e) { 296 | loadErrors.push(e) 297 | } 298 | 299 | } 300 | } else if (process.arch === 'ppc64') { 301 | try { 302 | return require('./file-type.linux-ppc64-gnu.node') 303 | } catch (e) { 304 | loadErrors.push(e) 305 | } 306 | try { 307 | return require('@toeverything/file-type-linux-ppc64-gnu') 308 | } catch (e) { 309 | loadErrors.push(e) 310 | } 311 | 312 | } else if (process.arch === 's390x') { 313 | try { 314 | return require('./file-type.linux-s390x-gnu.node') 315 | } catch (e) { 316 | loadErrors.push(e) 317 | } 318 | try { 319 | return require('@toeverything/file-type-linux-s390x-gnu') 320 | } catch (e) { 321 | loadErrors.push(e) 322 | } 323 | 324 | } else { 325 | loadErrors.push(new Error(`Unsupported architecture on Linux: ${process.arch}`)) 326 | } 327 | } else { 328 | loadErrors.push(new Error(`Unsupported OS: ${process.platform}, architecture: ${process.arch}`)) 329 | } 330 | } 331 | 332 | nativeBinding = requireNative() 333 | 334 | if (!nativeBinding || process.env.NAPI_RS_FORCE_WASI) { 335 | try { 336 | nativeBinding = require('./file-type.wasi.cjs') 337 | } catch (err) { 338 | if (process.env.NAPI_RS_FORCE_WASI) { 339 | console.error(err) 340 | } 341 | } 342 | if (!nativeBinding) { 343 | try { 344 | nativeBinding = require('@toeverything/file-type-wasm32-wasi') 345 | } catch (err) { 346 | if (process.env.NAPI_RS_FORCE_WASI) { 347 | console.error(err) 348 | } 349 | } 350 | } 351 | } 352 | 353 | if (!nativeBinding) { 354 | if (loadErrors.length > 0) { 355 | // TODO Link to documentation with potential fixes 356 | // - The package owner could build/publish bindings for this arch 357 | // - The user may need to bundle the correct files 358 | // - The user may need to re-install node_modules to get new packages 359 | throw new Error('Failed to load native binding', { cause: loadErrors }) 360 | } 361 | throw new Error(`Failed to load native binding`) 362 | } 363 | 364 | module.exports.FileType = nativeBinding.FileType 365 | module.exports.Kind = nativeBinding.Kind 366 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@toeverything/file-type", 3 | "version": "0.0.2", 4 | "description": "Guess the file-type of a Uint8Array", 5 | "main": "index.js", 6 | "types": "index.d.ts", 7 | "browser": "browser.js", 8 | "repository": { 9 | "url": "git+ssh://git@github.com/toeverything/file-type.git", 10 | "type": "git" 11 | }, 12 | "license": "MIT", 13 | "keywords": [ 14 | "napi-rs", 15 | "NAPI", 16 | "N-API", 17 | "Rust", 18 | "node-addon", 19 | "node-addon-api" 20 | ], 21 | "files": [ 22 | "index.d.ts", 23 | "index.js", 24 | "browser.js" 25 | ], 26 | "napi": { 27 | "binaryName": "file-type", 28 | "targets": [ 29 | "x86_64-apple-darwin", 30 | "aarch64-apple-darwin", 31 | "x86_64-unknown-linux-gnu", 32 | "x86_64-pc-windows-msvc", 33 | "x86_64-unknown-linux-musl", 34 | "aarch64-unknown-linux-gnu", 35 | "i686-pc-windows-msvc", 36 | "armv7-unknown-linux-gnueabihf", 37 | "aarch64-linux-android", 38 | "x86_64-unknown-freebsd", 39 | "aarch64-unknown-linux-musl", 40 | "aarch64-pc-windows-msvc", 41 | "armv7-linux-androideabi", 42 | "wasm32-wasi-preview1-threads" 43 | ] 44 | }, 45 | "engines": { 46 | "node": ">= 10" 47 | }, 48 | "publishConfig": { 49 | "registry": "https://registry.npmjs.org/", 50 | "access": "public" 51 | }, 52 | "scripts": { 53 | "artifacts": "napi artifacts", 54 | "bench": "node --import @swc-node/register/esm-register benchmark/bench.ts", 55 | "build": "pnpm run build:debug --release", 56 | "build:debug": "napi build --platform --no-const-enum", 57 | "format": "run-p format:prettier format:rs format:toml", 58 | "format:prettier": "prettier . -w", 59 | "format:toml": "taplo format", 60 | "format:rs": "cargo fmt", 61 | "lint": "oxlint", 62 | "prepublishOnly": "napi prepublish -t npm", 63 | "test": "ava", 64 | "version": "napi version" 65 | }, 66 | "devDependencies": { 67 | "@emnapi/core": "^1.1.1", 68 | "@emnapi/runtime": "^1.1.1", 69 | "@napi-rs/cli": "^3.0.0-alpha.54", 70 | "@napi-rs/wasm-runtime": "^0.2.3", 71 | "@swc-node/register": "^1.9.0", 72 | "@swc/core": "^1.5.0", 73 | "@taplo/cli": "^0.7.0", 74 | "@tybys/wasm-util": "^0.8.3", 75 | "@types/node": "^20.12.7", 76 | "ava": "^6.1.2", 77 | "chalk": "^5.3.0", 78 | "emnapi": "^1.1.1", 79 | "file-type": "^19.0.0", 80 | "husky": "^9.0.11", 81 | "lint-staged": "^15.2.2", 82 | "npm-run-all2": "^6.1.2", 83 | "oxlint": "^0.3.1", 84 | "prettier": "^3.2.5", 85 | "tinybench": "^2.8.0", 86 | "typescript": "^5.4.5" 87 | }, 88 | "lint-staged": { 89 | "*.@(js|ts|tsx)": [ 90 | "oxlint --fix" 91 | ], 92 | "*.@(js|ts|tsx|yml|yaml|md|json)": [ 93 | "prettier --write" 94 | ], 95 | "*.toml": [ 96 | "taplo format" 97 | ] 98 | }, 99 | "ava": { 100 | "require": [ 101 | "@swc-node/register" 102 | ], 103 | "extensions": [ 104 | "ts" 105 | ], 106 | "timeout": "2m", 107 | "workerThreads": false, 108 | "environmentVariables": { 109 | "TS_NODE_PROJECT": "./tsconfig.json" 110 | } 111 | }, 112 | "prettier": { 113 | "printWidth": 120, 114 | "semi": false, 115 | "trailingComma": "all", 116 | "singleQuote": true, 117 | "arrowParens": "always" 118 | }, 119 | "packageManager": "pnpm@9.0.5" 120 | } 121 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | importers: 8 | 9 | .: 10 | devDependencies: 11 | '@emnapi/core': 12 | specifier: ^1.1.1 13 | version: 1.1.1 14 | '@emnapi/runtime': 15 | specifier: ^1.1.1 16 | version: 1.1.1 17 | '@napi-rs/cli': 18 | specifier: ^3.0.0-alpha.54 19 | version: 3.0.0-alpha.54(@emnapi/runtime@1.1.1)(emnapi@1.1.1) 20 | '@napi-rs/wasm-runtime': 21 | specifier: ^0.2.3 22 | version: 0.2.3 23 | '@swc-node/register': 24 | specifier: ^1.9.0 25 | version: 1.9.0(@swc/core@1.5.0)(@swc/types@0.1.5)(typescript@5.4.5) 26 | '@swc/core': 27 | specifier: ^1.5.0 28 | version: 1.5.0 29 | '@taplo/cli': 30 | specifier: ^0.7.0 31 | version: 0.7.0 32 | '@tybys/wasm-util': 33 | specifier: ^0.8.3 34 | version: 0.8.3 35 | '@types/node': 36 | specifier: ^20.12.7 37 | version: 20.12.7 38 | ava: 39 | specifier: ^6.1.2 40 | version: 6.1.2 41 | chalk: 42 | specifier: ^5.3.0 43 | version: 5.3.0 44 | emnapi: 45 | specifier: ^1.1.1 46 | version: 1.1.1 47 | file-type: 48 | specifier: ^19.0.0 49 | version: 19.0.0 50 | husky: 51 | specifier: ^9.0.11 52 | version: 9.0.11 53 | lint-staged: 54 | specifier: ^15.2.2 55 | version: 15.2.2 56 | npm-run-all2: 57 | specifier: ^6.1.2 58 | version: 6.1.2 59 | oxlint: 60 | specifier: ^0.3.1 61 | version: 0.3.1 62 | prettier: 63 | specifier: ^3.2.5 64 | version: 3.2.5 65 | tinybench: 66 | specifier: ^2.8.0 67 | version: 2.8.0 68 | typescript: 69 | specifier: ^5.4.5 70 | version: 5.4.5 71 | 72 | packages: 73 | 74 | '@emnapi/core@1.1.1': 75 | resolution: {integrity: sha512-eu4KjHfXg3I+UUR7vSuwZXpRo4c8h4Rtb5Lu2F7Z4JqJFl/eidquONEBiRs6viXKpWBC3BaJBy68xGJ2j56idw==} 76 | 77 | '@emnapi/runtime@1.1.1': 78 | resolution: {integrity: sha512-3bfqkzuR1KLx57nZfjr2NLnFOobvyS0aTszaEGCGqmYMVDRaGvgIZbjGSV/MHSSmLgQ/b9JFHQ5xm5WRZYd+XQ==} 79 | 80 | '@inquirer/figures@1.0.0': 81 | resolution: {integrity: sha512-3fw+7+77/duTnMJTeSS44wneszghI4tkr0m0xdIJabbYRe36ElzmsqyboMZ1nFRon6sT+ckVvYDVjwapKv+2sw==} 82 | engines: {node: '>=18'} 83 | 84 | '@ljharb/through@2.3.13': 85 | resolution: {integrity: sha512-/gKJun8NNiWGZJkGzI/Ragc53cOdcLNdzjLaIa+GEjguQs0ulsurx8WN0jijdK9yPqDvziX995sMRLyLt1uZMQ==} 86 | engines: {node: '>= 0.4'} 87 | 88 | '@mapbox/node-pre-gyp@1.0.11': 89 | resolution: {integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==} 90 | hasBin: true 91 | 92 | '@napi-rs/cli@3.0.0-alpha.54': 93 | resolution: {integrity: sha512-3xFQ0SFRhxP1WqyR/D3FYze423ToQKtrwd8s3Afl+CQC52wlIprA6/MbHudVMnono82wOKUxt71e39DACotHHg==} 94 | engines: {node: '>= 16'} 95 | hasBin: true 96 | peerDependencies: 97 | '@emnapi/runtime': ^1.1.0 98 | emnapi: ^1.1.0 99 | peerDependenciesMeta: 100 | '@emnapi/runtime': 101 | optional: true 102 | emnapi: 103 | optional: true 104 | 105 | '@napi-rs/cross-toolchain@0.0.14': 106 | resolution: {integrity: sha512-Xgoe1gCEo5s5VUxmSnK4tYFJXW2JAVM02jptSbqA2+gp8pt4Vuk9oK2LvswwO9iRfHapKacYYhegD8Dq/+PBOQ==} 107 | peerDependencies: 108 | '@napi-rs/cross-toolchain-arm64-target-aarch64': ^0.0.14 109 | '@napi-rs/cross-toolchain-arm64-target-armv7': ^0.0.14 110 | '@napi-rs/cross-toolchain-arm64-target-x86_64': ^0.0.14 111 | '@napi-rs/cross-toolchain-x64-target-aarch64': ^0.0.14 112 | '@napi-rs/cross-toolchain-x64-target-armv7': ^0.0.14 113 | '@napi-rs/cross-toolchain-x64-target-x86_64': ^0.0.14 114 | peerDependenciesMeta: 115 | '@napi-rs/cross-toolchain-arm64-target-aarch64': 116 | optional: true 117 | '@napi-rs/cross-toolchain-arm64-target-armv7': 118 | optional: true 119 | '@napi-rs/cross-toolchain-arm64-target-x86_64': 120 | optional: true 121 | '@napi-rs/cross-toolchain-x64-target-aarch64': 122 | optional: true 123 | '@napi-rs/cross-toolchain-x64-target-armv7': 124 | optional: true 125 | '@napi-rs/cross-toolchain-x64-target-x86_64': 126 | optional: true 127 | 128 | '@napi-rs/lzma-android-arm-eabi@1.2.1': 129 | resolution: {integrity: sha512-GKXud2hTddxehff1mAGkbTfseBj+GcM+M/sZuxf9H9CJeOWpfI/HC9Oy3uv8mBqPTkOQdCcZ/xXPU34EOEwiRg==} 130 | engines: {node: '>= 10'} 131 | cpu: [arm] 132 | os: [android] 133 | 134 | '@napi-rs/lzma-android-arm64@1.2.1': 135 | resolution: {integrity: sha512-UKFvc56TdgljbdgLvSwM62pSItV/4SuXXCrJtruPDmbIDe8HKag8hsCKsb66hrc9aX7urJ+KGw1yz5hWiONLyw==} 136 | engines: {node: '>= 10'} 137 | cpu: [arm64] 138 | os: [android] 139 | 140 | '@napi-rs/lzma-darwin-arm64@1.2.1': 141 | resolution: {integrity: sha512-eLbHzK5xGVzEABb1ESFELQJzXKoQeP9QH9hMPd4Qq29xD6MkWD2VKlAy40AxrMeWc7fCUIImTTlGuGRvg6tI1g==} 142 | engines: {node: '>= 10'} 143 | cpu: [arm64] 144 | os: [darwin] 145 | 146 | '@napi-rs/lzma-darwin-x64@1.2.1': 147 | resolution: {integrity: sha512-/a5sHZkkO81w/PCpxlwXjADz++jDiTJquMzCLAhupd23wTRmJoCBAwp4Tur+qV5esI7ahAA0lS5P0M4TZv+OUg==} 148 | engines: {node: '>= 10'} 149 | cpu: [x64] 150 | os: [darwin] 151 | 152 | '@napi-rs/lzma-freebsd-x64@1.2.1': 153 | resolution: {integrity: sha512-Ehc0ld148YcqQrDWwUbVta1l45R4PthCIU6ZDbOYzzeYXQnhgr1fWiex7wu4KMFppteHlYntypUIhmMUklqchA==} 154 | engines: {node: '>= 10'} 155 | cpu: [x64] 156 | os: [freebsd] 157 | 158 | '@napi-rs/lzma-linux-arm-gnueabihf@1.2.1': 159 | resolution: {integrity: sha512-EkIsx3kC67viElNetZgaGAtAceA+4pVGj31HKKPn0RZYn3rCNdEEg2i1IRg07Y6m4bHwcaKutLoZ2LDcQ+yiBg==} 160 | engines: {node: '>= 10'} 161 | cpu: [arm] 162 | os: [linux] 163 | 164 | '@napi-rs/lzma-linux-arm64-gnu@1.2.1': 165 | resolution: {integrity: sha512-GxSbp1/X7Ppmf+aNiZ95vl1HgQzRS9C8zCv7unEhYRPAjRkAnlrsLluUBOTPIY2yquuUvfIog9XIml6Hpw2wrA==} 166 | engines: {node: '>= 10'} 167 | cpu: [arm64] 168 | os: [linux] 169 | 170 | '@napi-rs/lzma-linux-arm64-musl@1.2.1': 171 | resolution: {integrity: sha512-2L3KHFGGdt0xgU0WcKwKmnjVCYs88t4+ixBgPfEydtYsOceg6B8eOzdM7xsziKxJyUJKWBetGLgARQOy35bfvA==} 172 | engines: {node: '>= 10'} 173 | cpu: [arm64] 174 | os: [linux] 175 | 176 | '@napi-rs/lzma-linux-x64-gnu@1.2.1': 177 | resolution: {integrity: sha512-h29XttA2Og1+6vYHsVcp+i1PkeILKzYnoDun0ul/k/5hvfxJ2Jap+EM07sW4HSz/DiscLAeIZmLKbXEqJgF5bg==} 178 | engines: {node: '>= 10'} 179 | cpu: [x64] 180 | os: [linux] 181 | 182 | '@napi-rs/lzma-linux-x64-musl@1.2.1': 183 | resolution: {integrity: sha512-8EIkpLid4pepkBsljQ7rgma8jdwAuwVyJ2tY6Wuj1I/AqAkVVfxTwIuYc4zgRR3nfcrmWgOfZE0VneVmQCE5hw==} 184 | engines: {node: '>= 10'} 185 | cpu: [x64] 186 | os: [linux] 187 | 188 | '@napi-rs/lzma-win32-arm64-msvc@1.2.1': 189 | resolution: {integrity: sha512-RNPItarWUUbtwz6dyn8FGH9AXEaAsBcMBlTvcRjv8eoqRqyZ9R49Ruk/8WMS57MM1BKdiPDxHBtRi+nZn27Slw==} 190 | engines: {node: '>= 10'} 191 | cpu: [arm64] 192 | os: [win32] 193 | 194 | '@napi-rs/lzma-win32-ia32-msvc@1.2.1': 195 | resolution: {integrity: sha512-rNdsCZnzKVgeDd9NzXWk9WuADVUWUWdnws8qBRCfHRUQqJ56Ic1W7Y1XmP+bNa985MXlU6vbznHTHmU5zk2P+A==} 196 | engines: {node: '>= 10'} 197 | cpu: [ia32] 198 | os: [win32] 199 | 200 | '@napi-rs/lzma-win32-x64-msvc@1.2.1': 201 | resolution: {integrity: sha512-1AFrAh1n73Yw+IhDu5HnaiRD4vWEkafY0EarfziPfDsh/GeyNcjbE+Let+XFe8L3j0/CZfsRG3nXarOW1oadUQ==} 202 | engines: {node: '>= 10'} 203 | cpu: [x64] 204 | os: [win32] 205 | 206 | '@napi-rs/lzma@1.2.1': 207 | resolution: {integrity: sha512-vwl34tzF2mXWthnFVN2MP6nRzQ40C5+256EEUjxAwj9dbAhDqb7Yz376Up5SlB4YgNC0YvEqK4jsYP/NP0bgpg==} 208 | engines: {node: '>= 10'} 209 | 210 | '@napi-rs/tar-android-arm-eabi@0.1.0': 211 | resolution: {integrity: sha512-gY9f7HfyU8MQs/ERi2/Fc4dGRf61ZM2pme31t0FkrzTtmeIaf56LiTeTt4aP8xh/0HOVnXrB6I3taY9IsQVB8Q==} 212 | engines: {node: '>= 10'} 213 | cpu: [arm] 214 | os: [android] 215 | 216 | '@napi-rs/tar-android-arm64@0.1.0': 217 | resolution: {integrity: sha512-NxszsTRdAYf25kKuzUYz514/5MFI3w3aHToZBcFjaxUmsayrimFrHIiPLwNQVe55lHPRi13njqQUPjMetHMCZw==} 218 | engines: {node: '>= 10'} 219 | cpu: [arm64] 220 | os: [android] 221 | 222 | '@napi-rs/tar-darwin-arm64@0.1.0': 223 | resolution: {integrity: sha512-G+fSNcwhbekTMOElS66mf3ccg8M4NcEHIgo7s6Hxo8U2obUSqEJ0WjTDV8oJy7lqRW/MeeDJj8Vz0ceXC8ueeA==} 224 | engines: {node: '>= 10'} 225 | cpu: [arm64] 226 | os: [darwin] 227 | 228 | '@napi-rs/tar-darwin-x64@0.1.0': 229 | resolution: {integrity: sha512-p9aOLk6O2+Cu62fNOdj1Zx0P3J1VkxtihXOVDaK49o5jszhms0roNA7kZfklwjVdwo8R7OQC6mJcFWmiamMNug==} 230 | engines: {node: '>= 10'} 231 | cpu: [x64] 232 | os: [darwin] 233 | 234 | '@napi-rs/tar-freebsd-x64@0.1.0': 235 | resolution: {integrity: sha512-mZQPtyCc2r+P84WV76Ddbe1+CxBscxlDHtgMIxZPveMgq4esZFKp26M735vjxtk/j2ahT0pZoC6fjsJ//Uxzlg==} 236 | engines: {node: '>= 10'} 237 | cpu: [x64] 238 | os: [freebsd] 239 | 240 | '@napi-rs/tar-linux-arm-gnueabihf@0.1.0': 241 | resolution: {integrity: sha512-FHxnmrOS345T3n3XDmY9QEoVv1PXkkuevQbu+gzq5np4fzN/NX2Az5oJTxKOTGtlJSaxxz90raeaWRZrnV5hZQ==} 242 | engines: {node: '>= 10'} 243 | cpu: [arm] 244 | os: [linux] 245 | 246 | '@napi-rs/tar-linux-arm64-gnu@0.1.0': 247 | resolution: {integrity: sha512-+8WHnL/8PPpePYc+5oqNLoE5o98vWF7lJvY/seji7tdcS5TPJ3tgXaF4/y1rFAaSxKsZ9l+ClHsZZ0MpCqMOOQ==} 248 | engines: {node: '>= 10'} 249 | cpu: [arm64] 250 | os: [linux] 251 | 252 | '@napi-rs/tar-linux-arm64-musl@0.1.0': 253 | resolution: {integrity: sha512-SXqU4H30/TD9BZa6pH/U5l2V6E4EKOutjHp9Sqr98iH52Zb+1N84ur1Ti7/+PapKunCIJeZzU+792CQagKIzuQ==} 254 | engines: {node: '>= 10'} 255 | cpu: [arm64] 256 | os: [linux] 257 | 258 | '@napi-rs/tar-linux-x64-gnu@0.1.0': 259 | resolution: {integrity: sha512-2uZHxl2nH1HbeJuifB1qdK8vU9wKDrxQkFm+u4psUaa/uHLZDUCGS7GMxTnCbR9OehqZcfQabaKsHbxR/8ElDQ==} 260 | engines: {node: '>= 10'} 261 | cpu: [x64] 262 | os: [linux] 263 | 264 | '@napi-rs/tar-linux-x64-musl@0.1.0': 265 | resolution: {integrity: sha512-S1vEqLK4UCHS4AjVZ3g6o7r0Yu6RbhmDj6JrqxBoEIjrMsuIPKQrODHhtlsykOPeu5IHQuyRT+DevorWAVYdoA==} 266 | engines: {node: '>= 10'} 267 | cpu: [x64] 268 | os: [linux] 269 | 270 | '@napi-rs/tar-win32-arm64-msvc@0.1.0': 271 | resolution: {integrity: sha512-x23Ganq0hcDbgnhzAFqOu5EWtKvngIsapJL7ZLGgQlqahRb15aQkagYvpju6CLZers6N6znmqxw9Pdov9VFzOQ==} 272 | engines: {node: '>= 10'} 273 | cpu: [arm64] 274 | os: [win32] 275 | 276 | '@napi-rs/tar-win32-ia32-msvc@0.1.0': 277 | resolution: {integrity: sha512-QJgJQEKDbVOrzSJ3EaUuCk+g7t9tKv085eALmRtkiHDBmzd0iAoudcU2N9YgdacSQMe1V/GMuQLky6BFrZb4nw==} 278 | engines: {node: '>= 10'} 279 | cpu: [ia32] 280 | os: [win32] 281 | 282 | '@napi-rs/tar-win32-x64-msvc@0.1.0': 283 | resolution: {integrity: sha512-aEhLcPZXmbcz46utpgYrkhY/TIGVCs4T5c+xpBf6H8feIEz7rF44Bm6kECC42OWcqnws2LGRW9TZsv0bWoAn0A==} 284 | engines: {node: '>= 10'} 285 | cpu: [x64] 286 | os: [win32] 287 | 288 | '@napi-rs/tar@0.1.0': 289 | resolution: {integrity: sha512-HodV5VS/ryhNvSmSHPb6CT5lJKzkoKaiyO8JPkVw3XCXbp51+vZs7LJ66kgFqyr4AagaKqmXsgpGVCIwNdFw/w==} 290 | engines: {node: '>= 10'} 291 | 292 | '@napi-rs/wasm-runtime@0.1.2': 293 | resolution: {integrity: sha512-8JuczewTFIZ/XIjHQ+YlQUydHvlKx2hkcxtuGwh+t/t5zWyZct6YG4+xjHcq8xyc/e7FmFwf42Zj2YgICwmlvA==} 294 | 295 | '@napi-rs/wasm-runtime@0.2.3': 296 | resolution: {integrity: sha512-e4qmGDzXu2MYjj/XiKSgJ7XS7Z83MYVRN1yYaYXeQNVEO56zmshqmzFaELfdb612sLq/GmiPfRIwSji+bIlyCw==} 297 | 298 | '@napi-rs/wasm-tools-android-arm-eabi@0.0.1': 299 | resolution: {integrity: sha512-Q/SyyO60dbpoLcN/hvGzNWDaCjuaMGFeg92GnsDBWm3OCwhvltr51+VDZbCIHQwfIvH4d63X29nEls7FHK75dA==} 300 | engines: {node: '>= 10'} 301 | cpu: [arm] 302 | os: [android] 303 | 304 | '@napi-rs/wasm-tools-android-arm64@0.0.1': 305 | resolution: {integrity: sha512-mn7QpSWJlQS7Z14DkWqW14HqEiI2R8FV3KT4SNdqm+O+K5uIUvAexxMn9Qu6gqLq1fHXj+7l2luAWmtN7RKLjA==} 306 | engines: {node: '>= 10'} 307 | cpu: [arm64] 308 | os: [android] 309 | 310 | '@napi-rs/wasm-tools-darwin-arm64@0.0.1': 311 | resolution: {integrity: sha512-WuxMRtd5rCgqfuk7dehcft5eyGDOuNSMaJybprbX4IXvnjlLQf1zsCfp6wBI2Ptp2D+qEgE2SAMWBfzF9XDDkw==} 312 | engines: {node: '>= 10'} 313 | cpu: [arm64] 314 | os: [darwin] 315 | 316 | '@napi-rs/wasm-tools-darwin-x64@0.0.1': 317 | resolution: {integrity: sha512-YGPjgIo1/Y774aAFb/UT+d8VQtTaIkdF0/ynlChe/UilBZX48vLaEM0HaoSqxA1WHvRm8Il8R3rBDDle0965rw==} 318 | engines: {node: '>= 10'} 319 | cpu: [x64] 320 | os: [darwin] 321 | 322 | '@napi-rs/wasm-tools-freebsd-x64@0.0.1': 323 | resolution: {integrity: sha512-e5y+Z89XwI7HpLyCNEvDKdtO5Sga2+o8bDcNQNHjhMunnnHKPtlTvtIhieVmdqnNGPbuNkIx8xbTjkoWCZ49Tw==} 324 | engines: {node: '>= 10'} 325 | cpu: [x64] 326 | os: [freebsd] 327 | 328 | '@napi-rs/wasm-tools-linux-arm64-gnu@0.0.1': 329 | resolution: {integrity: sha512-Hcy+XiCJd8XshxVOYvmyU5FgeY8d6txZf7ZefI38Y3eRm7rzGt/EvABGjvJfujnPaBeWi9fQVm3Zav5pwyxViw==} 330 | engines: {node: '>= 10'} 331 | cpu: [arm64] 332 | os: [linux] 333 | 334 | '@napi-rs/wasm-tools-linux-arm64-musl@0.0.1': 335 | resolution: {integrity: sha512-1mSquGy4N7jlRu/0OY/rqZa/XdCFGKrsl8SH4jRB318DVweOHLqn15QG4iwIrRVjCJROpaU9HRU/sgOKVbdqrA==} 336 | engines: {node: '>= 10'} 337 | cpu: [arm64] 338 | os: [linux] 339 | 340 | '@napi-rs/wasm-tools-linux-x64-gnu@0.0.1': 341 | resolution: {integrity: sha512-/+XuGQ9667EqrxRbpt2izLDNzWUWLTXl6KaRSh9TjcT7qL5+yllTqchc0JwIHJW5QnQlC1NW7HnSnwQZ+/v+8g==} 342 | engines: {node: '>= 10'} 343 | cpu: [x64] 344 | os: [linux] 345 | 346 | '@napi-rs/wasm-tools-linux-x64-musl@0.0.1': 347 | resolution: {integrity: sha512-L+5QcEsUS+QNcMI1AF6aBRKLzhxQ5VHRHVslaQwOxHoxyhMB/2hRH4ON6Zea1PyQS/zzZugwBuDEOcFtc3UjPQ==} 348 | engines: {node: '>= 10'} 349 | cpu: [x64] 350 | os: [linux] 351 | 352 | '@napi-rs/wasm-tools-wasm32-wasi@0.0.1': 353 | resolution: {integrity: sha512-I1vAhMQcBblPJPg6pr+xydZ1NjPwKU2ympmI54BZfCOAMHs0ZfVb4yEqYAVIcSWOx3CF/0T2YrcOmiULTU3iGw==} 354 | engines: {node: '>=14.0.0'} 355 | cpu: [wasm32] 356 | 357 | '@napi-rs/wasm-tools-win32-arm64-msvc@0.0.1': 358 | resolution: {integrity: sha512-A9peDWijE9X6qt5SNzqlmSMlOZiqeB9zhUVP5dtJKtpqVO098YVnZFsz/4Hv7LkSoxQE7brAd9yln/wz5qb1yQ==} 359 | engines: {node: '>= 10'} 360 | cpu: [arm64] 361 | os: [win32] 362 | 363 | '@napi-rs/wasm-tools-win32-ia32-msvc@0.0.1': 364 | resolution: {integrity: sha512-6Y7GqnBCIdl8YsSQ+5AjnZ4iWDJnJrqzRlMDegCmPPf3WmRZ0sgnRU9iAHWcId9AEIf7SAs3x7Bnv2992zCwJA==} 365 | engines: {node: '>= 10'} 366 | cpu: [ia32] 367 | os: [win32] 368 | 369 | '@napi-rs/wasm-tools-win32-x64-msvc@0.0.1': 370 | resolution: {integrity: sha512-Ab6ljJCQmXqJvE4/8DLvHEVTI7vVUrVfh6gCwnVwwrA/B2LgR98SanpT8/951ZaIH/lSuqkeVm+wqzgYM1FHRg==} 371 | engines: {node: '>= 10'} 372 | cpu: [x64] 373 | os: [win32] 374 | 375 | '@napi-rs/wasm-tools@0.0.1': 376 | resolution: {integrity: sha512-itoKmaVqRKIV37sKIEri1qjaYlWNtXyfymUaqXkLu5F16s+FwqwOmvxmdTHsvNKkMy4qCsSSetiLZO1IwvBMLQ==} 377 | engines: {node: '>= 10'} 378 | 379 | '@nodelib/fs.scandir@2.1.5': 380 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 381 | engines: {node: '>= 8'} 382 | 383 | '@nodelib/fs.stat@2.0.5': 384 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 385 | engines: {node: '>= 8'} 386 | 387 | '@nodelib/fs.walk@1.2.8': 388 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 389 | engines: {node: '>= 8'} 390 | 391 | '@octokit/auth-token@4.0.0': 392 | resolution: {integrity: sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==} 393 | engines: {node: '>= 18'} 394 | 395 | '@octokit/core@5.0.2': 396 | resolution: {integrity: sha512-cZUy1gUvd4vttMic7C0lwPed8IYXWYp8kHIMatyhY8t8n3Cpw2ILczkV5pGMPqef7v0bLo0pOHrEHarsau2Ydg==} 397 | engines: {node: '>= 18'} 398 | 399 | '@octokit/endpoint@9.0.4': 400 | resolution: {integrity: sha512-DWPLtr1Kz3tv8L0UvXTDP1fNwM0S+z6EJpRcvH66orY6Eld4XBMCSYsaWp4xIm61jTWxK68BrR7ibO+vSDnZqw==} 401 | engines: {node: '>= 18'} 402 | 403 | '@octokit/graphql@7.0.2': 404 | resolution: {integrity: sha512-OJ2iGMtj5Tg3s6RaXH22cJcxXRi7Y3EBqbHTBRq+PQAqfaS8f/236fUrWhfSn8P4jovyzqucxme7/vWSSZBX2Q==} 405 | engines: {node: '>= 18'} 406 | 407 | '@octokit/openapi-types@19.1.0': 408 | resolution: {integrity: sha512-6G+ywGClliGQwRsjvqVYpklIfa7oRPA0vyhPQG/1Feh+B+wU0vGH1JiJ5T25d3g1JZYBHzR2qefLi9x8Gt+cpw==} 409 | 410 | '@octokit/plugin-paginate-rest@9.1.5': 411 | resolution: {integrity: sha512-WKTQXxK+bu49qzwv4qKbMMRXej1DU2gq017euWyKVudA6MldaSSQuxtz+vGbhxV4CjxpUxjZu6rM2wfc1FiWVg==} 412 | engines: {node: '>= 18'} 413 | peerDependencies: 414 | '@octokit/core': '>=5' 415 | 416 | '@octokit/plugin-request-log@4.0.0': 417 | resolution: {integrity: sha512-2uJI1COtYCq8Z4yNSnM231TgH50bRkheQ9+aH8TnZanB6QilOnx8RMD2qsnamSOXtDj0ilxvevf5fGsBhBBzKA==} 418 | engines: {node: '>= 18'} 419 | peerDependencies: 420 | '@octokit/core': '>=5' 421 | 422 | '@octokit/plugin-rest-endpoint-methods@10.2.0': 423 | resolution: {integrity: sha512-ePbgBMYtGoRNXDyKGvr9cyHjQ163PbwD0y1MkDJCpkO2YH4OeXX40c4wYHKikHGZcpGPbcRLuy0unPUuafco8Q==} 424 | engines: {node: '>= 18'} 425 | peerDependencies: 426 | '@octokit/core': '>=5' 427 | 428 | '@octokit/request-error@5.0.1': 429 | resolution: {integrity: sha512-X7pnyTMV7MgtGmiXBwmO6M5kIPrntOXdyKZLigNfQWSEQzVxR4a4vo49vJjTWX70mPndj8KhfT4Dx+2Ng3vnBQ==} 430 | engines: {node: '>= 18'} 431 | 432 | '@octokit/request@8.1.6': 433 | resolution: {integrity: sha512-YhPaGml3ncZC1NfXpP3WZ7iliL1ap6tLkAp6MvbK2fTTPytzVUyUesBBogcdMm86uRYO5rHaM1xIWxigWZ17MQ==} 434 | engines: {node: '>= 18'} 435 | 436 | '@octokit/rest@20.0.2': 437 | resolution: {integrity: sha512-Ux8NDgEraQ/DMAU1PlAohyfBBXDwhnX2j33Z1nJNziqAfHi70PuxkFYIcIt8aIAxtRE7KVuKp8lSR8pA0J5iOQ==} 438 | engines: {node: '>= 18'} 439 | 440 | '@octokit/types@12.4.0': 441 | resolution: {integrity: sha512-FLWs/AvZllw/AGVs+nJ+ELCDZZJk+kY0zMen118xhL2zD0s1etIUHm1odgjP7epxYU1ln7SZxEUWYop5bhsdgQ==} 442 | 443 | '@oxlint/darwin-arm64@0.3.1': 444 | resolution: {integrity: sha512-Us0pinFVI72zMaz48BlApBzASRZAyIU0YCl3frbZ6PiMLu4oen/mvAloZMZ0X9rFCQQDBVCf2k8kkdIfUBrd1A==} 445 | cpu: [arm64] 446 | os: [darwin] 447 | 448 | '@oxlint/darwin-x64@0.3.1': 449 | resolution: {integrity: sha512-Na+9F7+UYrIhlTX8wblG/dl1G5BNWtpv2Lyp5Hj7ynaghkUXdCP+riT9xpmGYjUXCiMU1fbY08RQQLupgL7URA==} 450 | cpu: [x64] 451 | os: [darwin] 452 | 453 | '@oxlint/linux-arm64-gnu@0.3.1': 454 | resolution: {integrity: sha512-0bsZ0RkuHbzAjj7Am5ePkGmPZjtVhFkbYXw5HkJIBAscWTAR2m3+QxjzBQhEyEbLvkJSig7PFGDwLIwW7+MptQ==} 455 | cpu: [arm64] 456 | os: [linux] 457 | 458 | '@oxlint/linux-arm64-musl@0.3.1': 459 | resolution: {integrity: sha512-d7thD4X15XqQqNCLOVVAq9SJF2unalLGn3oEu760AeonExvFJCJf274GIE2ODKGuLX8V/1rKGt6Kv3rpbRFQcw==} 460 | cpu: [arm64] 461 | os: [linux] 462 | 463 | '@oxlint/linux-x64-gnu@0.3.1': 464 | resolution: {integrity: sha512-5stWYdso6PaDrbENlrxdjUeyQlOjzCgScBFL+91fdFBCXZFu9diDIsHf88/efO3HQej5xZopUF0kr51GBTXVVQ==} 465 | cpu: [x64] 466 | os: [linux] 467 | 468 | '@oxlint/linux-x64-musl@0.3.1': 469 | resolution: {integrity: sha512-4Z0/iPUnhWFrc3kV7ADiSzx8Bq8hPQonhvtsEvgXS/2LXaS8hCXSSpTybVC+Wa9AhEF0J2/KMyFM2VhxjKJqDg==} 470 | cpu: [x64] 471 | os: [linux] 472 | 473 | '@oxlint/win32-arm64@0.3.1': 474 | resolution: {integrity: sha512-wT5y+7ob9kd1TpVLSfhq5EIZEwE6N1OYV+KzL/ywEgLg/sB6tXjUoC03/MEkF10Xj+v7HKLBonnXIX3S//Pfqw==} 475 | cpu: [arm64] 476 | os: [win32] 477 | 478 | '@oxlint/win32-x64@0.3.1': 479 | resolution: {integrity: sha512-dJWU8YqYPARYTjpjQ4tuzqtpumuCCwSggxkja9N7whqGBCH1IswEyt5JQIbynI+vERxugz3iJtWk59kSHojHgg==} 480 | cpu: [x64] 481 | os: [win32] 482 | 483 | '@rollup/pluginutils@4.2.1': 484 | resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==} 485 | engines: {node: '>= 8.0.0'} 486 | 487 | '@sindresorhus/merge-streams@1.0.0': 488 | resolution: {integrity: sha512-rUV5WyJrJLoloD4NDN1V1+LDMDWOa4OTsT4yYJwQNpTU6FWxkxHpL7eu4w+DmiH8x/EAM1otkPE1+LaspIbplw==} 489 | engines: {node: '>=18'} 490 | 491 | '@swc-node/core@1.13.0': 492 | resolution: {integrity: sha512-lFPD4nmy4ifAOVMChFjwlpXN5KQXvegqeyuzz1KQz42q1lf+cL3Qux1/GteGuZjh8HC+Rj1RdNrHpE/MCfJSTw==} 493 | engines: {node: '>= 10'} 494 | peerDependencies: 495 | '@swc/core': '>= 1.3' 496 | '@swc/types': '>= 0.1' 497 | 498 | '@swc-node/register@1.9.0': 499 | resolution: {integrity: sha512-i0iYInD4q5v3xQC6bKvs0QtfUxu197CU5qKALmpxEqTYs7sIhQ7KFLe3kP+eAR4gRkJTvAgjQgrokXLN2jZrOw==} 500 | peerDependencies: 501 | '@swc/core': '>= 1.3' 502 | typescript: '>= 4.3' 503 | 504 | '@swc-node/sourcemap-support@0.5.0': 505 | resolution: {integrity: sha512-fbhjL5G0YvFoWwNhWleuBUfotiX+USiA9oJqu9STFw+Hb0Cgnddn+HVS/K5fI45mn92e8V+cHD2jgFjk4w2T9Q==} 506 | 507 | '@swc/core-darwin-arm64@1.5.0': 508 | resolution: {integrity: sha512-dyA25zQjm3xmMFsRPFgBpSqWSW9TITnkndZkZAiPYLjBxH9oTNMa0l09BePsaqEeXySY++tUgAeYu/9onsHLbg==} 509 | engines: {node: '>=10'} 510 | cpu: [arm64] 511 | os: [darwin] 512 | 513 | '@swc/core-darwin-x64@1.5.0': 514 | resolution: {integrity: sha512-cO7kZMMA/fcQIBT31LBzcVNSk3AZGVYLqvEPnJhFImjPm3mGKUd6kWpARUEGR68MyRU2VsWhE6eCjMcM+G7bxw==} 515 | engines: {node: '>=10'} 516 | cpu: [x64] 517 | os: [darwin] 518 | 519 | '@swc/core-linux-arm-gnueabihf@1.5.0': 520 | resolution: {integrity: sha512-BXaXytS4y9lBFRO6vwA6ovvy1d2ZIzS02i2R1oegoZzzNu89CJDpkYXYS9bId0GvK2m9Q9y2ofoZzKE2Rp3PqQ==} 521 | engines: {node: '>=10'} 522 | cpu: [arm] 523 | os: [linux] 524 | 525 | '@swc/core-linux-arm64-gnu@1.5.0': 526 | resolution: {integrity: sha512-Bu4/41pGadXKnRsUbox0ig63xImATVH704oPCXcoOvNGkDyMjWgIAhzIi111vrwFNpj9utabgUE4AtlUa2tAOQ==} 527 | engines: {node: '>=10'} 528 | cpu: [arm64] 529 | os: [linux] 530 | 531 | '@swc/core-linux-arm64-musl@1.5.0': 532 | resolution: {integrity: sha512-lUFFvC8tsepNcTnKEHNrePWanVVef6PQ82Rv9wIeebgGHRUqDh6+CyCqodXez+aKz6NyE/PBIfp0r+jPx4hoJA==} 533 | engines: {node: '>=10'} 534 | cpu: [arm64] 535 | os: [linux] 536 | 537 | '@swc/core-linux-x64-gnu@1.5.0': 538 | resolution: {integrity: sha512-c6LegFU1qdyMfk+GzNIOvrX61+mksm21Q01FBnXSy1nf1ACj/a86jmr3zkPl0zpNVHfPOw3Ry1QIuLQKD+67YA==} 539 | engines: {node: '>=10'} 540 | cpu: [x64] 541 | os: [linux] 542 | 543 | '@swc/core-linux-x64-musl@1.5.0': 544 | resolution: {integrity: sha512-I/V8aWBmfDWwjtM1bS8ASG+6PcO/pVFYyPP5g2ok46Vz1o1MnAUd18mHnWX43nqVJokaW+BD/G4ZMZ+gXRl4zQ==} 545 | engines: {node: '>=10'} 546 | cpu: [x64] 547 | os: [linux] 548 | 549 | '@swc/core-win32-arm64-msvc@1.5.0': 550 | resolution: {integrity: sha512-nN685BvI7iM58xabrSOSQHUvIY10pcXh5H9DmS8LeYqG6Dkq7QZ8AwYqqonOitIS5C35MUfhSMLpOTzKoLdUqA==} 551 | engines: {node: '>=10'} 552 | cpu: [arm64] 553 | os: [win32] 554 | 555 | '@swc/core-win32-ia32-msvc@1.5.0': 556 | resolution: {integrity: sha512-3YjltmEHljI+TvuDOC4lspUzjBUoB3X5BhftRBprSTJx/czuMl0vdoZKs2Snzb5Eqqesp0Rl8q+iQ1E1oJ6dEA==} 557 | engines: {node: '>=10'} 558 | cpu: [ia32] 559 | os: [win32] 560 | 561 | '@swc/core-win32-x64-msvc@1.5.0': 562 | resolution: {integrity: sha512-ZairtCwJsaxnUH85DcYCyGpNb9bUoIm9QXYW+VaEoXwbcB95dTIiJwN0aRxPT8B0B2MNw/CXLqjoPo6sDwz5iw==} 563 | engines: {node: '>=10'} 564 | cpu: [x64] 565 | os: [win32] 566 | 567 | '@swc/core@1.5.0': 568 | resolution: {integrity: sha512-fjADAC5gOOX54Rpcr1lF9DHLD+nPD5H/zXLtEgK2Ez3esmogT+LfHzCZtUxqetjvaMChKhQ0Pp0ZB6Hpz/tCbw==} 569 | engines: {node: '>=10'} 570 | peerDependencies: 571 | '@swc/helpers': ^0.5.0 572 | peerDependenciesMeta: 573 | '@swc/helpers': 574 | optional: true 575 | 576 | '@swc/counter@0.1.2': 577 | resolution: {integrity: sha512-9F4ys4C74eSTEUNndnER3VJ15oru2NumfQxS8geE+f3eB5xvfxpWyqE5XlVnxb/R14uoXi6SLbBwwiDSkv+XEw==} 578 | 579 | '@swc/types@0.1.5': 580 | resolution: {integrity: sha512-myfUej5naTBWnqOCc/MdVOLVjXUXtIA+NpDrDBKJtLLg2shUjBu3cZmB/85RyitKc55+lUUyl7oRfLOvkr2hsw==} 581 | 582 | '@taplo/cli@0.7.0': 583 | resolution: {integrity: sha512-Ck3zFhQhIhi02Hl6T4ZmJsXdnJE+wXcJz5f8klxd4keRYgenMnip3JDPMGDRLbnC/2iGd8P0sBIQqI3KxfVjBg==} 584 | hasBin: true 585 | 586 | '@tokenizer/token@0.3.0': 587 | resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} 588 | 589 | '@tybys/wasm-util@0.8.3': 590 | resolution: {integrity: sha512-Z96T/L6dUFFxgFJ+pQtkPpne9q7i6kIPYCFnQBHSgSPV9idTsKfIhCss0h5iM9irweZCatkrdeP8yi5uM1eX6Q==} 591 | 592 | '@types/node@20.12.7': 593 | resolution: {integrity: sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==} 594 | 595 | '@vercel/nft@0.26.4': 596 | resolution: {integrity: sha512-j4jCOOXke2t8cHZCIxu1dzKLHLcFmYzC3yqAK6MfZznOL1QIJKd0xcFsXK3zcqzU7ScsE2zWkiMMNHGMHgp+FA==} 597 | engines: {node: '>=16'} 598 | hasBin: true 599 | 600 | abbrev@1.1.1: 601 | resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} 602 | 603 | acorn-import-attributes@1.9.5: 604 | resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==} 605 | peerDependencies: 606 | acorn: ^8 607 | 608 | acorn-walk@8.3.2: 609 | resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} 610 | engines: {node: '>=0.4.0'} 611 | 612 | acorn@8.11.3: 613 | resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} 614 | engines: {node: '>=0.4.0'} 615 | hasBin: true 616 | 617 | agent-base@6.0.2: 618 | resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} 619 | engines: {node: '>= 6.0.0'} 620 | 621 | ansi-escapes@4.3.2: 622 | resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} 623 | engines: {node: '>=8'} 624 | 625 | ansi-escapes@6.2.0: 626 | resolution: {integrity: sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw==} 627 | engines: {node: '>=14.16'} 628 | 629 | ansi-regex@5.0.1: 630 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 631 | engines: {node: '>=8'} 632 | 633 | ansi-regex@6.0.1: 634 | resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} 635 | engines: {node: '>=12'} 636 | 637 | ansi-styles@4.3.0: 638 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 639 | engines: {node: '>=8'} 640 | 641 | ansi-styles@6.2.1: 642 | resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} 643 | engines: {node: '>=12'} 644 | 645 | aproba@2.0.0: 646 | resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==} 647 | 648 | are-we-there-yet@2.0.0: 649 | resolution: {integrity: sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==} 650 | engines: {node: '>=10'} 651 | 652 | argparse@1.0.10: 653 | resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} 654 | 655 | argparse@2.0.1: 656 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 657 | 658 | array-find-index@1.0.2: 659 | resolution: {integrity: sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==} 660 | engines: {node: '>=0.10.0'} 661 | 662 | arrgv@1.0.2: 663 | resolution: {integrity: sha512-a4eg4yhp7mmruZDQFqVMlxNRFGi/i1r87pt8SDHy0/I8PqSXoUTlWZRdAZo0VXgvEARcujbtTk8kiZRi1uDGRw==} 664 | engines: {node: '>=8.0.0'} 665 | 666 | arrify@3.0.0: 667 | resolution: {integrity: sha512-tLkvA81vQG/XqE2mjDkGQHoOINtMHtysSnemrmoGe6PydDPMRbVugqyk4A6V/WDWEfm3l+0d8anA9r8cv/5Jaw==} 668 | engines: {node: '>=12'} 669 | 670 | async-sema@3.1.1: 671 | resolution: {integrity: sha512-tLRNUXati5MFePdAk8dw7Qt7DpxPB60ofAgn8WRhW6a2rcimZnYBP9oxHiv0OHy+Wz7kPMG+t4LGdt31+4EmGg==} 672 | 673 | ava@6.1.2: 674 | resolution: {integrity: sha512-WcpxJ8yZ7mk9ABTinD0IAjcemovSeVGjuuwZx0JS9johREWFeLTl8UP6wd7l6nmnrWqkKZdwaD71a/ocH4qPKw==} 675 | engines: {node: ^18.18 || ^20.8 || ^21} 676 | hasBin: true 677 | peerDependencies: 678 | '@ava/typescript': '*' 679 | peerDependenciesMeta: 680 | '@ava/typescript': 681 | optional: true 682 | 683 | balanced-match@1.0.2: 684 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 685 | 686 | base64-js@1.5.1: 687 | resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} 688 | 689 | before-after-hook@2.2.3: 690 | resolution: {integrity: sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==} 691 | 692 | bindings@1.5.0: 693 | resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} 694 | 695 | bl@4.1.0: 696 | resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} 697 | 698 | blueimp-md5@2.19.0: 699 | resolution: {integrity: sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w==} 700 | 701 | brace-expansion@1.1.11: 702 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 703 | 704 | brace-expansion@2.0.1: 705 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 706 | 707 | braces@3.0.2: 708 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} 709 | engines: {node: '>=8'} 710 | 711 | buffer-from@1.1.2: 712 | resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} 713 | 714 | buffer@5.7.1: 715 | resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} 716 | 717 | call-bind@1.0.7: 718 | resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} 719 | engines: {node: '>= 0.4'} 720 | 721 | callsites@4.1.0: 722 | resolution: {integrity: sha512-aBMbD1Xxay75ViYezwT40aQONfr+pSXTHwNKvIXhXD6+LY3F1dLIcceoC5OZKBVHbXcysz1hL9D2w0JJIMXpUw==} 723 | engines: {node: '>=12.20'} 724 | 725 | cbor@9.0.1: 726 | resolution: {integrity: sha512-/TQOWyamDxvVIv+DY9cOLNuABkoyz8K/F3QE56539pGVYohx0+MEA1f4lChFTX79dBTBS7R1PF6ovH7G+VtBfQ==} 727 | engines: {node: '>=16'} 728 | 729 | chalk@4.1.2: 730 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 731 | engines: {node: '>=10'} 732 | 733 | chalk@5.3.0: 734 | resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} 735 | engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} 736 | 737 | chardet@0.7.0: 738 | resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} 739 | 740 | chownr@2.0.0: 741 | resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} 742 | engines: {node: '>=10'} 743 | 744 | chunkd@2.0.1: 745 | resolution: {integrity: sha512-7d58XsFmOq0j6el67Ug9mHf9ELUXsQXYJBkyxhH/k+6Ke0qXRnv0kbemx+Twc6fRJ07C49lcbdgm9FL1Ei/6SQ==} 746 | 747 | ci-info@4.0.0: 748 | resolution: {integrity: sha512-TdHqgGf9odd8SXNuxtUBVx8Nv+qZOejE6qyqiy5NtbYYQOeFa6zmHkxlPzmaLxWWHsU6nJmB7AETdVPi+2NBUg==} 749 | engines: {node: '>=8'} 750 | 751 | ci-parallel-vars@1.0.1: 752 | resolution: {integrity: sha512-uvzpYrpmidaoxvIQHM+rKSrigjOe9feHYbw4uOI2gdfe1C3xIlxO+kVXq83WQWNniTf8bAxVpy+cQeFQsMERKg==} 753 | 754 | cli-cursor@3.1.0: 755 | resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} 756 | engines: {node: '>=8'} 757 | 758 | cli-cursor@4.0.0: 759 | resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} 760 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 761 | 762 | cli-spinners@2.9.2: 763 | resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} 764 | engines: {node: '>=6'} 765 | 766 | cli-truncate@4.0.0: 767 | resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} 768 | engines: {node: '>=18'} 769 | 770 | cli-width@4.1.0: 771 | resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} 772 | engines: {node: '>= 12'} 773 | 774 | clipanion@3.2.1: 775 | resolution: {integrity: sha512-dYFdjLb7y1ajfxQopN05mylEpK9ZX0sO1/RfMXdfmwjlIsPkbh4p7A682x++zFPLDCo1x3p82dtljHf5cW2LKA==} 776 | peerDependencies: 777 | typanion: '*' 778 | 779 | cliui@8.0.1: 780 | resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} 781 | engines: {node: '>=12'} 782 | 783 | clone@1.0.4: 784 | resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} 785 | engines: {node: '>=0.8'} 786 | 787 | code-excerpt@4.0.0: 788 | resolution: {integrity: sha512-xxodCmBen3iy2i0WtAK8FlFNrRzjUqjRsMfho58xT/wvZU1YTM3fCnRjcy1gJPMepaRlgm/0e6w8SpWHpn3/cA==} 789 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 790 | 791 | color-convert@2.0.1: 792 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 793 | engines: {node: '>=7.0.0'} 794 | 795 | color-name@1.1.4: 796 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 797 | 798 | color-support@1.1.3: 799 | resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} 800 | hasBin: true 801 | 802 | colorette@2.0.20: 803 | resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} 804 | 805 | commander@11.1.0: 806 | resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==} 807 | engines: {node: '>=16'} 808 | 809 | common-path-prefix@3.0.0: 810 | resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==} 811 | 812 | concat-map@0.0.1: 813 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 814 | 815 | concordance@5.0.4: 816 | resolution: {integrity: sha512-OAcsnTEYu1ARJqWVGwf4zh4JDfHZEaSNlNccFmt8YjB2l/n19/PF2viLINHc57vO4FKIAFl2FWASIGZZWZ2Kxw==} 817 | engines: {node: '>=10.18.0 <11 || >=12.14.0 <13 || >=14'} 818 | 819 | console-control-strings@1.1.0: 820 | resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} 821 | 822 | convert-to-spaces@2.0.1: 823 | resolution: {integrity: sha512-rcQ1bsQO9799wq24uE5AM2tAILy4gXGIK/njFWcVQkGNZ96edlpY+A7bjwvzjYvLDyzmG1MmMLZhpcsb+klNMQ==} 824 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 825 | 826 | cross-spawn@7.0.3: 827 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} 828 | engines: {node: '>= 8'} 829 | 830 | currently-unhandled@0.4.1: 831 | resolution: {integrity: sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==} 832 | engines: {node: '>=0.10.0'} 833 | 834 | date-time@3.1.0: 835 | resolution: {integrity: sha512-uqCUKXE5q1PNBXjPqvwhwJf9SwMoAHBgWJ6DcrnS5o+W2JOiIILl0JEdVD8SGujrNS02GGxgwAg2PN2zONgtjg==} 836 | engines: {node: '>=6'} 837 | 838 | debug@4.3.4: 839 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 840 | engines: {node: '>=6.0'} 841 | peerDependencies: 842 | supports-color: '*' 843 | peerDependenciesMeta: 844 | supports-color: 845 | optional: true 846 | 847 | defaults@1.0.4: 848 | resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} 849 | 850 | define-data-property@1.1.4: 851 | resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} 852 | engines: {node: '>= 0.4'} 853 | 854 | delegates@1.0.0: 855 | resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} 856 | 857 | deprecation@2.3.1: 858 | resolution: {integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==} 859 | 860 | detect-libc@2.0.2: 861 | resolution: {integrity: sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==} 862 | engines: {node: '>=8'} 863 | 864 | emittery@1.0.1: 865 | resolution: {integrity: sha512-2ID6FdrMD9KDLldGesP6317G78K7km/kMcwItRtVFva7I/cSEOIaLpewaUb+YLXVwdAp3Ctfxh/V5zIl1sj7dQ==} 866 | engines: {node: '>=14.16'} 867 | 868 | emnapi@1.1.1: 869 | resolution: {integrity: sha512-md0YDBLCX+378+zzibHvOLsj28YKFy8vl7BiSzVocCY7HujOkYt+N5LCOYqLeYi5C5/5NlnkNweVdUjrvKpGNg==} 870 | peerDependencies: 871 | node-addon-api: '>= 6.1.0' 872 | peerDependenciesMeta: 873 | node-addon-api: 874 | optional: true 875 | 876 | emoji-regex@10.3.0: 877 | resolution: {integrity: sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==} 878 | 879 | emoji-regex@8.0.0: 880 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 881 | 882 | es-define-property@1.0.0: 883 | resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} 884 | engines: {node: '>= 0.4'} 885 | 886 | es-errors@1.3.0: 887 | resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} 888 | engines: {node: '>= 0.4'} 889 | 890 | escalade@3.1.1: 891 | resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} 892 | engines: {node: '>=6'} 893 | 894 | escape-string-regexp@2.0.0: 895 | resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} 896 | engines: {node: '>=8'} 897 | 898 | escape-string-regexp@5.0.0: 899 | resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} 900 | engines: {node: '>=12'} 901 | 902 | esprima@4.0.1: 903 | resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} 904 | engines: {node: '>=4'} 905 | hasBin: true 906 | 907 | estree-walker@2.0.2: 908 | resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} 909 | 910 | esutils@2.0.3: 911 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 912 | engines: {node: '>=0.10.0'} 913 | 914 | eventemitter3@5.0.1: 915 | resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} 916 | 917 | execa@8.0.1: 918 | resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} 919 | engines: {node: '>=16.17'} 920 | 921 | external-editor@3.1.0: 922 | resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} 923 | engines: {node: '>=4'} 924 | 925 | fast-diff@1.3.0: 926 | resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} 927 | 928 | fast-glob@3.3.2: 929 | resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} 930 | engines: {node: '>=8.6.0'} 931 | 932 | fastq@1.16.0: 933 | resolution: {integrity: sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==} 934 | 935 | figures@6.0.1: 936 | resolution: {integrity: sha512-0oY/olScYD4IhQ8u//gCPA4F3mlTn2dacYmiDm/mbDQvpmLjV4uH+zhsQ5IyXRyvqkvtUkXkNdGvg5OFJTCsuQ==} 937 | engines: {node: '>=18'} 938 | 939 | file-type@19.0.0: 940 | resolution: {integrity: sha512-s7cxa7/leUWLiXO78DVVfBVse+milos9FitauDLG1pI7lNaJ2+5lzPnr2N24ym+84HVwJL6hVuGfgVE+ALvU8Q==} 941 | engines: {node: '>=18'} 942 | 943 | file-uri-to-path@1.0.0: 944 | resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} 945 | 946 | fill-range@7.0.1: 947 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} 948 | engines: {node: '>=8'} 949 | 950 | find-up-simple@1.0.0: 951 | resolution: {integrity: sha512-q7Us7kcjj2VMePAa02hDAF6d+MzsdsAWEwYyOpwUtlerRBkOEPBCRZrAV4XfcSN8fHAgaD0hP7miwoay6DCprw==} 952 | engines: {node: '>=18'} 953 | 954 | fs-minipass@2.1.0: 955 | resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} 956 | engines: {node: '>= 8'} 957 | 958 | fs.realpath@1.0.0: 959 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 960 | 961 | function-bind@1.1.2: 962 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} 963 | 964 | gauge@3.0.2: 965 | resolution: {integrity: sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==} 966 | engines: {node: '>=10'} 967 | 968 | get-caller-file@2.0.5: 969 | resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} 970 | engines: {node: 6.* || 8.* || >= 10.*} 971 | 972 | get-east-asian-width@1.2.0: 973 | resolution: {integrity: sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==} 974 | engines: {node: '>=18'} 975 | 976 | get-intrinsic@1.2.4: 977 | resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} 978 | engines: {node: '>= 0.4'} 979 | 980 | get-stream@8.0.1: 981 | resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} 982 | engines: {node: '>=16'} 983 | 984 | glob-parent@5.1.2: 985 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 986 | engines: {node: '>= 6'} 987 | 988 | glob@7.2.3: 989 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} 990 | 991 | globby@14.0.0: 992 | resolution: {integrity: sha512-/1WM/LNHRAOH9lZta77uGbq0dAEQM+XjNesWwhlERDVenqothRbnzTrL3/LrIoEPPjeUHC3vrS6TwoyxeHs7MQ==} 993 | engines: {node: '>=18'} 994 | 995 | gopd@1.0.1: 996 | resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} 997 | 998 | graceful-fs@4.2.11: 999 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 1000 | 1001 | has-flag@4.0.0: 1002 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 1003 | engines: {node: '>=8'} 1004 | 1005 | has-property-descriptors@1.0.2: 1006 | resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} 1007 | 1008 | has-proto@1.0.1: 1009 | resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} 1010 | engines: {node: '>= 0.4'} 1011 | 1012 | has-symbols@1.0.3: 1013 | resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} 1014 | engines: {node: '>= 0.4'} 1015 | 1016 | has-unicode@2.0.1: 1017 | resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} 1018 | 1019 | hasown@2.0.0: 1020 | resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} 1021 | engines: {node: '>= 0.4'} 1022 | 1023 | https-proxy-agent@5.0.1: 1024 | resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} 1025 | engines: {node: '>= 6'} 1026 | 1027 | human-signals@5.0.0: 1028 | resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} 1029 | engines: {node: '>=16.17.0'} 1030 | 1031 | husky@9.0.11: 1032 | resolution: {integrity: sha512-AB6lFlbwwyIqMdHYhwPe+kjOC3Oc5P3nThEoW/AaO2BX3vJDjWPFxYLxokUZOo6RNX20He3AaT8sESs9NJcmEw==} 1033 | engines: {node: '>=18'} 1034 | hasBin: true 1035 | 1036 | iconv-lite@0.4.24: 1037 | resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} 1038 | engines: {node: '>=0.10.0'} 1039 | 1040 | ieee754@1.2.1: 1041 | resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} 1042 | 1043 | ignore-by-default@2.1.0: 1044 | resolution: {integrity: sha512-yiWd4GVmJp0Q6ghmM2B/V3oZGRmjrKLXvHR3TE1nfoXsmoggllfZUQe74EN0fJdPFZu2NIvNdrMMLm3OsV7Ohw==} 1045 | engines: {node: '>=10 <11 || >=12 <13 || >=14'} 1046 | 1047 | ignore@5.3.0: 1048 | resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==} 1049 | engines: {node: '>= 4'} 1050 | 1051 | imurmurhash@0.1.4: 1052 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 1053 | engines: {node: '>=0.8.19'} 1054 | 1055 | indent-string@5.0.0: 1056 | resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==} 1057 | engines: {node: '>=12'} 1058 | 1059 | inflight@1.0.6: 1060 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 1061 | 1062 | inherits@2.0.4: 1063 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 1064 | 1065 | inquirer@9.2.18: 1066 | resolution: {integrity: sha512-Qzm+UP7L9beFyycZ9Nxzqj7WBgeJIaT4Ue0+2bmQp9yZXiUW2azrmBnp3vlInMw1wXkUmaM0hiMcht7CjJzASw==} 1067 | engines: {node: '>=18'} 1068 | 1069 | irregular-plurals@3.5.0: 1070 | resolution: {integrity: sha512-1ANGLZ+Nkv1ptFb2pa8oG8Lem4krflKuX/gINiHJHjJUKaJHk/SXk5x6K3J+39/p0h1RQ2saROclJJ+QLvETCQ==} 1071 | engines: {node: '>=8'} 1072 | 1073 | is-extglob@2.1.1: 1074 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 1075 | engines: {node: '>=0.10.0'} 1076 | 1077 | is-fullwidth-code-point@3.0.0: 1078 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 1079 | engines: {node: '>=8'} 1080 | 1081 | is-fullwidth-code-point@4.0.0: 1082 | resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} 1083 | engines: {node: '>=12'} 1084 | 1085 | is-fullwidth-code-point@5.0.0: 1086 | resolution: {integrity: sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==} 1087 | engines: {node: '>=18'} 1088 | 1089 | is-glob@4.0.3: 1090 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 1091 | engines: {node: '>=0.10.0'} 1092 | 1093 | is-interactive@1.0.0: 1094 | resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} 1095 | engines: {node: '>=8'} 1096 | 1097 | is-number@7.0.0: 1098 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 1099 | engines: {node: '>=0.12.0'} 1100 | 1101 | is-plain-object@5.0.0: 1102 | resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} 1103 | engines: {node: '>=0.10.0'} 1104 | 1105 | is-promise@4.0.0: 1106 | resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} 1107 | 1108 | is-stream@3.0.0: 1109 | resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} 1110 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1111 | 1112 | is-unicode-supported@0.1.0: 1113 | resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} 1114 | engines: {node: '>=10'} 1115 | 1116 | is-unicode-supported@2.0.0: 1117 | resolution: {integrity: sha512-FRdAyx5lusK1iHG0TWpVtk9+1i+GjrzRffhDg4ovQ7mcidMQ6mj+MhKPmvh7Xwyv5gIS06ns49CA7Sqg7lC22Q==} 1118 | engines: {node: '>=18'} 1119 | 1120 | isexe@2.0.0: 1121 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 1122 | 1123 | js-string-escape@1.0.1: 1124 | resolution: {integrity: sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg==} 1125 | engines: {node: '>= 0.8'} 1126 | 1127 | js-yaml@3.14.1: 1128 | resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} 1129 | hasBin: true 1130 | 1131 | js-yaml@4.1.0: 1132 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 1133 | hasBin: true 1134 | 1135 | json-parse-even-better-errors@3.0.1: 1136 | resolution: {integrity: sha512-aatBvbL26wVUCLmbWdCpeu9iF5wOyWpagiKkInA+kfws3sWdBrTnsvN2CKcyCYyUrc7rebNBlK6+kteg7ksecg==} 1137 | engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} 1138 | 1139 | lilconfig@3.0.0: 1140 | resolution: {integrity: sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==} 1141 | engines: {node: '>=14'} 1142 | 1143 | lint-staged@15.2.2: 1144 | resolution: {integrity: sha512-TiTt93OPh1OZOsb5B7k96A/ATl2AjIZo+vnzFZ6oHK5FuTk63ByDtxGQpHm+kFETjEWqgkF95M8FRXKR/LEBcw==} 1145 | engines: {node: '>=18.12.0'} 1146 | hasBin: true 1147 | 1148 | listr2@8.0.1: 1149 | resolution: {integrity: sha512-ovJXBXkKGfq+CwmKTjluEqFi3p4h8xvkxGQQAQan22YCgef4KZ1mKGjzfGh6PL6AW5Csw0QiQPNuQyH+6Xk3hA==} 1150 | engines: {node: '>=18.0.0'} 1151 | 1152 | load-json-file@7.0.1: 1153 | resolution: {integrity: sha512-Gnxj3ev3mB5TkVBGad0JM6dmLiQL+o0t23JPBZ9sd+yvSLk05mFoqKBw5N8gbbkU4TNXyqCgIrl/VM17OgUIgQ==} 1154 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1155 | 1156 | lodash-es@4.17.21: 1157 | resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} 1158 | 1159 | lodash@4.17.21: 1160 | resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} 1161 | 1162 | log-symbols@4.1.0: 1163 | resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} 1164 | engines: {node: '>=10'} 1165 | 1166 | log-update@6.0.0: 1167 | resolution: {integrity: sha512-niTvB4gqvtof056rRIrTZvjNYE4rCUzO6X/X+kYjd7WFxXeJ0NwEFnRxX6ehkvv3jTwrXnNdtAak5XYZuIyPFw==} 1168 | engines: {node: '>=18'} 1169 | 1170 | lru-cache@6.0.0: 1171 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} 1172 | engines: {node: '>=10'} 1173 | 1174 | make-dir@3.1.0: 1175 | resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} 1176 | engines: {node: '>=8'} 1177 | 1178 | matcher@5.0.0: 1179 | resolution: {integrity: sha512-s2EMBOWtXFc8dgqvoAzKJXxNHibcdJMV0gwqKUaw9E2JBJuGUK7DrNKrA6g/i+v72TT16+6sVm5mS3thaMLQUw==} 1180 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1181 | 1182 | md5-hex@3.0.1: 1183 | resolution: {integrity: sha512-BUiRtTtV39LIJwinWBjqVsU9xhdnz7/i889V859IBFpuqGAj6LuOvHv5XLbgZ2R7ptJoJaEcxkv88/h25T7Ciw==} 1184 | engines: {node: '>=8'} 1185 | 1186 | memoize@10.0.0: 1187 | resolution: {integrity: sha512-H6cBLgsi6vMWOcCpvVCdFFnl3kerEXbrYh9q+lY6VXvQSmM6CkmV08VOwT+WE2tzIEqRPFfAq3fm4v/UIW6mSA==} 1188 | engines: {node: '>=18'} 1189 | 1190 | memorystream@0.3.1: 1191 | resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==} 1192 | engines: {node: '>= 0.10.0'} 1193 | 1194 | merge-stream@2.0.0: 1195 | resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} 1196 | 1197 | merge2@1.4.1: 1198 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 1199 | engines: {node: '>= 8'} 1200 | 1201 | micromatch@4.0.5: 1202 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} 1203 | engines: {node: '>=8.6'} 1204 | 1205 | mimic-fn@2.1.0: 1206 | resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} 1207 | engines: {node: '>=6'} 1208 | 1209 | mimic-fn@4.0.0: 1210 | resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} 1211 | engines: {node: '>=12'} 1212 | 1213 | mimic-function@5.0.0: 1214 | resolution: {integrity: sha512-RBfQ+9X9DpXdEoK7Bu+KeEU6vFhumEIiXKWECPzRBmDserEq4uR2b/VCm0LwpMSosoq2k+Zuxj/GzOr0Fn6h/g==} 1215 | engines: {node: '>=18'} 1216 | 1217 | minimatch@3.1.2: 1218 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 1219 | 1220 | minimatch@9.0.3: 1221 | resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} 1222 | engines: {node: '>=16 || 14 >=14.17'} 1223 | 1224 | minipass@3.3.6: 1225 | resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} 1226 | engines: {node: '>=8'} 1227 | 1228 | minipass@5.0.0: 1229 | resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} 1230 | engines: {node: '>=8'} 1231 | 1232 | minizlib@2.1.2: 1233 | resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} 1234 | engines: {node: '>= 8'} 1235 | 1236 | mkdirp@1.0.4: 1237 | resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} 1238 | engines: {node: '>=10'} 1239 | hasBin: true 1240 | 1241 | ms@2.1.2: 1242 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 1243 | 1244 | ms@2.1.3: 1245 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 1246 | 1247 | mute-stream@1.0.0: 1248 | resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==} 1249 | engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} 1250 | 1251 | node-fetch@2.7.0: 1252 | resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} 1253 | engines: {node: 4.x || >=6.0.0} 1254 | peerDependencies: 1255 | encoding: ^0.1.0 1256 | peerDependenciesMeta: 1257 | encoding: 1258 | optional: true 1259 | 1260 | node-gyp-build@4.7.1: 1261 | resolution: {integrity: sha512-wTSrZ+8lsRRa3I3H8Xr65dLWSgCvY2l4AOnaeKdPA9TB/WYMPaTcrzf3rXvFoVvjKNVnu0CcWSx54qq9GKRUYg==} 1262 | hasBin: true 1263 | 1264 | nofilter@3.1.0: 1265 | resolution: {integrity: sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==} 1266 | engines: {node: '>=12.19'} 1267 | 1268 | nopt@5.0.0: 1269 | resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==} 1270 | engines: {node: '>=6'} 1271 | hasBin: true 1272 | 1273 | npm-normalize-package-bin@3.0.1: 1274 | resolution: {integrity: sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==} 1275 | engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} 1276 | 1277 | npm-run-all2@6.1.2: 1278 | resolution: {integrity: sha512-WwwnS8Ft+RpXve6T2EIEVpFLSqN+ORHRvgNk3H9N62SZXjmzKoRhMFg3I17TK3oMaAEr+XFbRirWS2Fn3BCPSg==} 1279 | engines: {node: ^14.18.0 || >=16.0.0, npm: '>= 8'} 1280 | hasBin: true 1281 | 1282 | npm-run-path@5.2.0: 1283 | resolution: {integrity: sha512-W4/tgAXFqFA0iL7fk0+uQ3g7wkL8xJmx3XdK0VGb4cHW//eZTtKGvFBBoRKVTpY7n6ze4NL9ly7rgXcHufqXKg==} 1284 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1285 | 1286 | npmlog@5.0.1: 1287 | resolution: {integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==} 1288 | 1289 | object-assign@4.1.1: 1290 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} 1291 | engines: {node: '>=0.10.0'} 1292 | 1293 | once@1.4.0: 1294 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 1295 | 1296 | onetime@5.1.2: 1297 | resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} 1298 | engines: {node: '>=6'} 1299 | 1300 | onetime@6.0.0: 1301 | resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} 1302 | engines: {node: '>=12'} 1303 | 1304 | ora@5.4.1: 1305 | resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} 1306 | engines: {node: '>=10'} 1307 | 1308 | os-tmpdir@1.0.2: 1309 | resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} 1310 | engines: {node: '>=0.10.0'} 1311 | 1312 | oxlint@0.3.1: 1313 | resolution: {integrity: sha512-+bj07l2R2V0xNogo+Wr9+IsdlkBa2i7brOioOyzV6I8kwMBEEuJmt7oOmZYs/HZVAOQI19x7aBGKqw71itaNSA==} 1314 | engines: {node: '>=14.*'} 1315 | hasBin: true 1316 | 1317 | p-map@7.0.2: 1318 | resolution: {integrity: sha512-z4cYYMMdKHzw4O5UkWJImbZynVIo0lSGTXc7bzB1e/rrDqkgGUNysK/o4bTr+0+xKvvLoTyGqYC4Fgljy9qe1Q==} 1319 | engines: {node: '>=18'} 1320 | 1321 | package-config@5.0.0: 1322 | resolution: {integrity: sha512-GYTTew2slBcYdvRHqjhwaaydVMvn/qrGC323+nKclYioNSLTDUM/lGgtGTgyHVtYcozb+XkE8CNhwcraOmZ9Mg==} 1323 | engines: {node: '>=18'} 1324 | 1325 | parse-ms@4.0.0: 1326 | resolution: {integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==} 1327 | engines: {node: '>=18'} 1328 | 1329 | path-is-absolute@1.0.1: 1330 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 1331 | engines: {node: '>=0.10.0'} 1332 | 1333 | path-key@3.1.1: 1334 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 1335 | engines: {node: '>=8'} 1336 | 1337 | path-key@4.0.0: 1338 | resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} 1339 | engines: {node: '>=12'} 1340 | 1341 | path-type@5.0.0: 1342 | resolution: {integrity: sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==} 1343 | engines: {node: '>=12'} 1344 | 1345 | peek-readable@5.0.0: 1346 | resolution: {integrity: sha512-YtCKvLUOvwtMGmrniQPdO7MwPjgkFBtFIrmfSbYmYuq3tKDV/mcfAhBth1+C3ru7uXIZasc/pHnb+YDYNkkj4A==} 1347 | engines: {node: '>=14.16'} 1348 | 1349 | picomatch@2.3.1: 1350 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 1351 | engines: {node: '>=8.6'} 1352 | 1353 | picomatch@3.0.1: 1354 | resolution: {integrity: sha512-I3EurrIQMlRc9IaAZnqRR044Phh2DXY+55o7uJ0V+hYZAcQYSuFWsc9q5PvyDHUSCe1Qxn/iBz+78s86zWnGag==} 1355 | engines: {node: '>=10'} 1356 | 1357 | pidtree@0.6.0: 1358 | resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} 1359 | engines: {node: '>=0.10'} 1360 | hasBin: true 1361 | 1362 | pirates@4.0.6: 1363 | resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} 1364 | engines: {node: '>= 6'} 1365 | 1366 | plur@5.1.0: 1367 | resolution: {integrity: sha512-VP/72JeXqak2KiOzjgKtQen5y3IZHn+9GOuLDafPv0eXa47xq0At93XahYBs26MsifCQ4enGKwbjBTKgb9QJXg==} 1368 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1369 | 1370 | prettier@3.2.5: 1371 | resolution: {integrity: sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==} 1372 | engines: {node: '>=14'} 1373 | hasBin: true 1374 | 1375 | pretty-ms@9.0.0: 1376 | resolution: {integrity: sha512-E9e9HJ9R9NasGOgPaPE8VMeiPKAyWR5jcFpNnwIejslIhWqdqOrb2wShBsncMPUb+BcCd2OPYfh7p2W6oemTng==} 1377 | engines: {node: '>=18'} 1378 | 1379 | queue-microtask@1.2.3: 1380 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 1381 | 1382 | read-package-json-fast@3.0.2: 1383 | resolution: {integrity: sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==} 1384 | engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} 1385 | 1386 | readable-stream@3.6.2: 1387 | resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} 1388 | engines: {node: '>= 6'} 1389 | 1390 | readable-web-to-node-stream@3.0.2: 1391 | resolution: {integrity: sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==} 1392 | engines: {node: '>=8'} 1393 | 1394 | require-directory@2.1.1: 1395 | resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} 1396 | engines: {node: '>=0.10.0'} 1397 | 1398 | resolve-cwd@3.0.0: 1399 | resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} 1400 | engines: {node: '>=8'} 1401 | 1402 | resolve-from@5.0.0: 1403 | resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} 1404 | engines: {node: '>=8'} 1405 | 1406 | restore-cursor@3.1.0: 1407 | resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} 1408 | engines: {node: '>=8'} 1409 | 1410 | restore-cursor@4.0.0: 1411 | resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} 1412 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1413 | 1414 | reusify@1.0.4: 1415 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 1416 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 1417 | 1418 | rfdc@1.3.0: 1419 | resolution: {integrity: sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==} 1420 | 1421 | rimraf@3.0.2: 1422 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} 1423 | hasBin: true 1424 | 1425 | run-async@3.0.0: 1426 | resolution: {integrity: sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==} 1427 | engines: {node: '>=0.12.0'} 1428 | 1429 | run-parallel@1.2.0: 1430 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 1431 | 1432 | rxjs@7.8.1: 1433 | resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} 1434 | 1435 | safe-buffer@5.2.1: 1436 | resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} 1437 | 1438 | safer-buffer@2.1.2: 1439 | resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} 1440 | 1441 | semver@6.3.1: 1442 | resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} 1443 | hasBin: true 1444 | 1445 | semver@7.5.4: 1446 | resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} 1447 | engines: {node: '>=10'} 1448 | hasBin: true 1449 | 1450 | serialize-error@7.0.1: 1451 | resolution: {integrity: sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==} 1452 | engines: {node: '>=10'} 1453 | 1454 | set-blocking@2.0.0: 1455 | resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} 1456 | 1457 | set-function-length@1.2.2: 1458 | resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} 1459 | engines: {node: '>= 0.4'} 1460 | 1461 | shebang-command@2.0.0: 1462 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 1463 | engines: {node: '>=8'} 1464 | 1465 | shebang-regex@3.0.0: 1466 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 1467 | engines: {node: '>=8'} 1468 | 1469 | shell-quote@1.8.1: 1470 | resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} 1471 | 1472 | signal-exit@3.0.7: 1473 | resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} 1474 | 1475 | signal-exit@4.1.0: 1476 | resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} 1477 | engines: {node: '>=14'} 1478 | 1479 | slash@5.1.0: 1480 | resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} 1481 | engines: {node: '>=14.16'} 1482 | 1483 | slice-ansi@5.0.0: 1484 | resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} 1485 | engines: {node: '>=12'} 1486 | 1487 | slice-ansi@7.1.0: 1488 | resolution: {integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==} 1489 | engines: {node: '>=18'} 1490 | 1491 | source-map-support@0.5.21: 1492 | resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} 1493 | 1494 | source-map@0.6.1: 1495 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} 1496 | engines: {node: '>=0.10.0'} 1497 | 1498 | sprintf-js@1.0.3: 1499 | resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} 1500 | 1501 | stack-utils@2.0.6: 1502 | resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} 1503 | engines: {node: '>=10'} 1504 | 1505 | string-argv@0.3.2: 1506 | resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} 1507 | engines: {node: '>=0.6.19'} 1508 | 1509 | string-width@4.2.3: 1510 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 1511 | engines: {node: '>=8'} 1512 | 1513 | string-width@7.0.0: 1514 | resolution: {integrity: sha512-GPQHj7row82Hjo9hKZieKcHIhaAIKOJvFSIZXuCU9OASVZrMNUaZuz++SPVrBjnLsnk4k+z9f2EIypgxf2vNFw==} 1515 | engines: {node: '>=18'} 1516 | 1517 | string_decoder@1.3.0: 1518 | resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} 1519 | 1520 | strip-ansi@6.0.1: 1521 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 1522 | engines: {node: '>=8'} 1523 | 1524 | strip-ansi@7.1.0: 1525 | resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} 1526 | engines: {node: '>=12'} 1527 | 1528 | strip-final-newline@3.0.0: 1529 | resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} 1530 | engines: {node: '>=12'} 1531 | 1532 | strtok3@7.0.0: 1533 | resolution: {integrity: sha512-pQ+V+nYQdC5H3Q7qBZAz/MO6lwGhoC2gOAjuouGf/VO0m7vQRh8QNMl2Uf6SwAtzZ9bOw3UIeBukEGNJl5dtXQ==} 1534 | engines: {node: '>=14.16'} 1535 | 1536 | supertap@3.0.1: 1537 | resolution: {integrity: sha512-u1ZpIBCawJnO+0QePsEiOknOfCRq0yERxiAchT0i4li0WHNUJbf0evXXSXOcCAR4M8iMDoajXYmstm/qO81Isw==} 1538 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1539 | 1540 | supports-color@7.2.0: 1541 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 1542 | engines: {node: '>=8'} 1543 | 1544 | tar@6.2.0: 1545 | resolution: {integrity: sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==} 1546 | engines: {node: '>=10'} 1547 | 1548 | temp-dir@3.0.0: 1549 | resolution: {integrity: sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw==} 1550 | engines: {node: '>=14.16'} 1551 | 1552 | time-zone@1.0.0: 1553 | resolution: {integrity: sha512-TIsDdtKo6+XrPtiTm1ssmMngN1sAhyKnTO2kunQWqNPWIVvCm15Wmw4SWInwTVgJ5u/Tr04+8Ei9TNcw4x4ONA==} 1554 | engines: {node: '>=4'} 1555 | 1556 | tinybench@2.8.0: 1557 | resolution: {integrity: sha512-1/eK7zUnIklz4JUUlL+658n58XO2hHLQfSk1Zf2LKieUjxidN16eKFEoDEfjHc3ohofSSqK3X5yO6VGb6iW8Lw==} 1558 | 1559 | tmp@0.0.33: 1560 | resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} 1561 | engines: {node: '>=0.6.0'} 1562 | 1563 | to-regex-range@5.0.1: 1564 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1565 | engines: {node: '>=8.0'} 1566 | 1567 | token-types@5.0.1: 1568 | resolution: {integrity: sha512-Y2fmSnZjQdDb9W4w4r1tswlMHylzWIeOKpx0aZH9BgGtACHhrk3OkT52AzwcuqTRBZtvvnTjDBh8eynMulu8Vg==} 1569 | engines: {node: '>=14.16'} 1570 | 1571 | toml@3.0.0: 1572 | resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==} 1573 | 1574 | tr46@0.0.3: 1575 | resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} 1576 | 1577 | tslib@2.6.2: 1578 | resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} 1579 | 1580 | typanion@3.14.0: 1581 | resolution: {integrity: sha512-ZW/lVMRabETuYCd9O9ZvMhAh8GslSqaUjxmK/JLPCh6l73CvLBiuXswj/+7LdnWOgYsQ130FqLzFz5aGT4I3Ug==} 1582 | 1583 | type-fest@0.13.1: 1584 | resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} 1585 | engines: {node: '>=10'} 1586 | 1587 | type-fest@0.21.3: 1588 | resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} 1589 | engines: {node: '>=10'} 1590 | 1591 | type-fest@3.13.1: 1592 | resolution: {integrity: sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==} 1593 | engines: {node: '>=14.16'} 1594 | 1595 | typescript@5.4.5: 1596 | resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} 1597 | engines: {node: '>=14.17'} 1598 | hasBin: true 1599 | 1600 | undici-types@5.26.5: 1601 | resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} 1602 | 1603 | unicorn-magic@0.1.0: 1604 | resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} 1605 | engines: {node: '>=18'} 1606 | 1607 | universal-user-agent@6.0.1: 1608 | resolution: {integrity: sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==} 1609 | 1610 | util-deprecate@1.0.2: 1611 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} 1612 | 1613 | wasm-sjlj@1.0.5: 1614 | resolution: {integrity: sha512-Z/MHJeOkAvJJVWnGX3/YZGYldGaawZbYHX4ldYG9kLhcdB8H31F5x66M7Zc4BP/7pg0aLsusQj1629m2B3Rilg==} 1615 | 1616 | wcwidth@1.0.1: 1617 | resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} 1618 | 1619 | webidl-conversions@3.0.1: 1620 | resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} 1621 | 1622 | well-known-symbols@2.0.0: 1623 | resolution: {integrity: sha512-ZMjC3ho+KXo0BfJb7JgtQ5IBuvnShdlACNkKkdsqBmYw3bPAaJfPeYUo6tLUaT5tG/Gkh7xkpBhKRQ9e7pyg9Q==} 1624 | engines: {node: '>=6'} 1625 | 1626 | whatwg-url@5.0.0: 1627 | resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} 1628 | 1629 | which@2.0.2: 1630 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 1631 | engines: {node: '>= 8'} 1632 | hasBin: true 1633 | 1634 | wide-align@1.1.5: 1635 | resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} 1636 | 1637 | wrap-ansi@6.2.0: 1638 | resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} 1639 | engines: {node: '>=8'} 1640 | 1641 | wrap-ansi@7.0.0: 1642 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} 1643 | engines: {node: '>=10'} 1644 | 1645 | wrap-ansi@9.0.0: 1646 | resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==} 1647 | engines: {node: '>=18'} 1648 | 1649 | wrappy@1.0.2: 1650 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 1651 | 1652 | write-file-atomic@5.0.1: 1653 | resolution: {integrity: sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==} 1654 | engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} 1655 | 1656 | y18n@5.0.8: 1657 | resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} 1658 | engines: {node: '>=10'} 1659 | 1660 | yallist@4.0.0: 1661 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} 1662 | 1663 | yaml@2.3.4: 1664 | resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==} 1665 | engines: {node: '>= 14'} 1666 | 1667 | yargs-parser@21.1.1: 1668 | resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} 1669 | engines: {node: '>=12'} 1670 | 1671 | yargs@17.7.2: 1672 | resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} 1673 | engines: {node: '>=12'} 1674 | 1675 | snapshots: 1676 | 1677 | '@emnapi/core@1.1.1': 1678 | dependencies: 1679 | tslib: 2.6.2 1680 | 1681 | '@emnapi/runtime@1.1.1': 1682 | dependencies: 1683 | tslib: 2.6.2 1684 | 1685 | '@inquirer/figures@1.0.0': {} 1686 | 1687 | '@ljharb/through@2.3.13': 1688 | dependencies: 1689 | call-bind: 1.0.7 1690 | 1691 | '@mapbox/node-pre-gyp@1.0.11': 1692 | dependencies: 1693 | detect-libc: 2.0.2 1694 | https-proxy-agent: 5.0.1 1695 | make-dir: 3.1.0 1696 | node-fetch: 2.7.0 1697 | nopt: 5.0.0 1698 | npmlog: 5.0.1 1699 | rimraf: 3.0.2 1700 | semver: 7.5.4 1701 | tar: 6.2.0 1702 | transitivePeerDependencies: 1703 | - encoding 1704 | - supports-color 1705 | 1706 | '@napi-rs/cli@3.0.0-alpha.54(@emnapi/runtime@1.1.1)(emnapi@1.1.1)': 1707 | dependencies: 1708 | '@napi-rs/cross-toolchain': 0.0.14 1709 | '@napi-rs/wasm-tools': 0.0.1 1710 | '@octokit/rest': 20.0.2 1711 | clipanion: 3.2.1(typanion@3.14.0) 1712 | colorette: 2.0.20 1713 | debug: 4.3.4 1714 | inquirer: 9.2.18 1715 | js-yaml: 4.1.0 1716 | lodash-es: 4.17.21 1717 | semver: 7.5.4 1718 | toml: 3.0.0 1719 | typanion: 3.14.0 1720 | wasm-sjlj: 1.0.5 1721 | optionalDependencies: 1722 | '@emnapi/runtime': 1.1.1 1723 | emnapi: 1.1.1 1724 | transitivePeerDependencies: 1725 | - '@napi-rs/cross-toolchain-arm64-target-aarch64' 1726 | - '@napi-rs/cross-toolchain-arm64-target-armv7' 1727 | - '@napi-rs/cross-toolchain-arm64-target-x86_64' 1728 | - '@napi-rs/cross-toolchain-x64-target-aarch64' 1729 | - '@napi-rs/cross-toolchain-x64-target-armv7' 1730 | - '@napi-rs/cross-toolchain-x64-target-x86_64' 1731 | - supports-color 1732 | 1733 | '@napi-rs/cross-toolchain@0.0.14': 1734 | dependencies: 1735 | '@napi-rs/lzma': 1.2.1 1736 | '@napi-rs/tar': 0.1.0 1737 | debug: 4.3.4 1738 | transitivePeerDependencies: 1739 | - supports-color 1740 | 1741 | '@napi-rs/lzma-android-arm-eabi@1.2.1': 1742 | optional: true 1743 | 1744 | '@napi-rs/lzma-android-arm64@1.2.1': 1745 | optional: true 1746 | 1747 | '@napi-rs/lzma-darwin-arm64@1.2.1': 1748 | optional: true 1749 | 1750 | '@napi-rs/lzma-darwin-x64@1.2.1': 1751 | optional: true 1752 | 1753 | '@napi-rs/lzma-freebsd-x64@1.2.1': 1754 | optional: true 1755 | 1756 | '@napi-rs/lzma-linux-arm-gnueabihf@1.2.1': 1757 | optional: true 1758 | 1759 | '@napi-rs/lzma-linux-arm64-gnu@1.2.1': 1760 | optional: true 1761 | 1762 | '@napi-rs/lzma-linux-arm64-musl@1.2.1': 1763 | optional: true 1764 | 1765 | '@napi-rs/lzma-linux-x64-gnu@1.2.1': 1766 | optional: true 1767 | 1768 | '@napi-rs/lzma-linux-x64-musl@1.2.1': 1769 | optional: true 1770 | 1771 | '@napi-rs/lzma-win32-arm64-msvc@1.2.1': 1772 | optional: true 1773 | 1774 | '@napi-rs/lzma-win32-ia32-msvc@1.2.1': 1775 | optional: true 1776 | 1777 | '@napi-rs/lzma-win32-x64-msvc@1.2.1': 1778 | optional: true 1779 | 1780 | '@napi-rs/lzma@1.2.1': 1781 | optionalDependencies: 1782 | '@napi-rs/lzma-android-arm-eabi': 1.2.1 1783 | '@napi-rs/lzma-android-arm64': 1.2.1 1784 | '@napi-rs/lzma-darwin-arm64': 1.2.1 1785 | '@napi-rs/lzma-darwin-x64': 1.2.1 1786 | '@napi-rs/lzma-freebsd-x64': 1.2.1 1787 | '@napi-rs/lzma-linux-arm-gnueabihf': 1.2.1 1788 | '@napi-rs/lzma-linux-arm64-gnu': 1.2.1 1789 | '@napi-rs/lzma-linux-arm64-musl': 1.2.1 1790 | '@napi-rs/lzma-linux-x64-gnu': 1.2.1 1791 | '@napi-rs/lzma-linux-x64-musl': 1.2.1 1792 | '@napi-rs/lzma-win32-arm64-msvc': 1.2.1 1793 | '@napi-rs/lzma-win32-ia32-msvc': 1.2.1 1794 | '@napi-rs/lzma-win32-x64-msvc': 1.2.1 1795 | 1796 | '@napi-rs/tar-android-arm-eabi@0.1.0': 1797 | optional: true 1798 | 1799 | '@napi-rs/tar-android-arm64@0.1.0': 1800 | optional: true 1801 | 1802 | '@napi-rs/tar-darwin-arm64@0.1.0': 1803 | optional: true 1804 | 1805 | '@napi-rs/tar-darwin-x64@0.1.0': 1806 | optional: true 1807 | 1808 | '@napi-rs/tar-freebsd-x64@0.1.0': 1809 | optional: true 1810 | 1811 | '@napi-rs/tar-linux-arm-gnueabihf@0.1.0': 1812 | optional: true 1813 | 1814 | '@napi-rs/tar-linux-arm64-gnu@0.1.0': 1815 | optional: true 1816 | 1817 | '@napi-rs/tar-linux-arm64-musl@0.1.0': 1818 | optional: true 1819 | 1820 | '@napi-rs/tar-linux-x64-gnu@0.1.0': 1821 | optional: true 1822 | 1823 | '@napi-rs/tar-linux-x64-musl@0.1.0': 1824 | optional: true 1825 | 1826 | '@napi-rs/tar-win32-arm64-msvc@0.1.0': 1827 | optional: true 1828 | 1829 | '@napi-rs/tar-win32-ia32-msvc@0.1.0': 1830 | optional: true 1831 | 1832 | '@napi-rs/tar-win32-x64-msvc@0.1.0': 1833 | optional: true 1834 | 1835 | '@napi-rs/tar@0.1.0': 1836 | optionalDependencies: 1837 | '@napi-rs/tar-android-arm-eabi': 0.1.0 1838 | '@napi-rs/tar-android-arm64': 0.1.0 1839 | '@napi-rs/tar-darwin-arm64': 0.1.0 1840 | '@napi-rs/tar-darwin-x64': 0.1.0 1841 | '@napi-rs/tar-freebsd-x64': 0.1.0 1842 | '@napi-rs/tar-linux-arm-gnueabihf': 0.1.0 1843 | '@napi-rs/tar-linux-arm64-gnu': 0.1.0 1844 | '@napi-rs/tar-linux-arm64-musl': 0.1.0 1845 | '@napi-rs/tar-linux-x64-gnu': 0.1.0 1846 | '@napi-rs/tar-linux-x64-musl': 0.1.0 1847 | '@napi-rs/tar-win32-arm64-msvc': 0.1.0 1848 | '@napi-rs/tar-win32-ia32-msvc': 0.1.0 1849 | '@napi-rs/tar-win32-x64-msvc': 0.1.0 1850 | 1851 | '@napi-rs/wasm-runtime@0.1.2': 1852 | dependencies: 1853 | '@emnapi/core': 1.1.1 1854 | '@emnapi/runtime': 1.1.1 1855 | '@tybys/wasm-util': 0.8.3 1856 | optional: true 1857 | 1858 | '@napi-rs/wasm-runtime@0.2.3': 1859 | dependencies: 1860 | '@emnapi/core': 1.1.1 1861 | '@emnapi/runtime': 1.1.1 1862 | '@tybys/wasm-util': 0.8.3 1863 | 1864 | '@napi-rs/wasm-tools-android-arm-eabi@0.0.1': 1865 | optional: true 1866 | 1867 | '@napi-rs/wasm-tools-android-arm64@0.0.1': 1868 | optional: true 1869 | 1870 | '@napi-rs/wasm-tools-darwin-arm64@0.0.1': 1871 | optional: true 1872 | 1873 | '@napi-rs/wasm-tools-darwin-x64@0.0.1': 1874 | optional: true 1875 | 1876 | '@napi-rs/wasm-tools-freebsd-x64@0.0.1': 1877 | optional: true 1878 | 1879 | '@napi-rs/wasm-tools-linux-arm64-gnu@0.0.1': 1880 | optional: true 1881 | 1882 | '@napi-rs/wasm-tools-linux-arm64-musl@0.0.1': 1883 | optional: true 1884 | 1885 | '@napi-rs/wasm-tools-linux-x64-gnu@0.0.1': 1886 | optional: true 1887 | 1888 | '@napi-rs/wasm-tools-linux-x64-musl@0.0.1': 1889 | optional: true 1890 | 1891 | '@napi-rs/wasm-tools-wasm32-wasi@0.0.1': 1892 | dependencies: 1893 | '@napi-rs/wasm-runtime': 0.1.2 1894 | optional: true 1895 | 1896 | '@napi-rs/wasm-tools-win32-arm64-msvc@0.0.1': 1897 | optional: true 1898 | 1899 | '@napi-rs/wasm-tools-win32-ia32-msvc@0.0.1': 1900 | optional: true 1901 | 1902 | '@napi-rs/wasm-tools-win32-x64-msvc@0.0.1': 1903 | optional: true 1904 | 1905 | '@napi-rs/wasm-tools@0.0.1': 1906 | optionalDependencies: 1907 | '@napi-rs/wasm-tools-android-arm-eabi': 0.0.1 1908 | '@napi-rs/wasm-tools-android-arm64': 0.0.1 1909 | '@napi-rs/wasm-tools-darwin-arm64': 0.0.1 1910 | '@napi-rs/wasm-tools-darwin-x64': 0.0.1 1911 | '@napi-rs/wasm-tools-freebsd-x64': 0.0.1 1912 | '@napi-rs/wasm-tools-linux-arm64-gnu': 0.0.1 1913 | '@napi-rs/wasm-tools-linux-arm64-musl': 0.0.1 1914 | '@napi-rs/wasm-tools-linux-x64-gnu': 0.0.1 1915 | '@napi-rs/wasm-tools-linux-x64-musl': 0.0.1 1916 | '@napi-rs/wasm-tools-wasm32-wasi': 0.0.1 1917 | '@napi-rs/wasm-tools-win32-arm64-msvc': 0.0.1 1918 | '@napi-rs/wasm-tools-win32-ia32-msvc': 0.0.1 1919 | '@napi-rs/wasm-tools-win32-x64-msvc': 0.0.1 1920 | 1921 | '@nodelib/fs.scandir@2.1.5': 1922 | dependencies: 1923 | '@nodelib/fs.stat': 2.0.5 1924 | run-parallel: 1.2.0 1925 | 1926 | '@nodelib/fs.stat@2.0.5': {} 1927 | 1928 | '@nodelib/fs.walk@1.2.8': 1929 | dependencies: 1930 | '@nodelib/fs.scandir': 2.1.5 1931 | fastq: 1.16.0 1932 | 1933 | '@octokit/auth-token@4.0.0': {} 1934 | 1935 | '@octokit/core@5.0.2': 1936 | dependencies: 1937 | '@octokit/auth-token': 4.0.0 1938 | '@octokit/graphql': 7.0.2 1939 | '@octokit/request': 8.1.6 1940 | '@octokit/request-error': 5.0.1 1941 | '@octokit/types': 12.4.0 1942 | before-after-hook: 2.2.3 1943 | universal-user-agent: 6.0.1 1944 | 1945 | '@octokit/endpoint@9.0.4': 1946 | dependencies: 1947 | '@octokit/types': 12.4.0 1948 | universal-user-agent: 6.0.1 1949 | 1950 | '@octokit/graphql@7.0.2': 1951 | dependencies: 1952 | '@octokit/request': 8.1.6 1953 | '@octokit/types': 12.4.0 1954 | universal-user-agent: 6.0.1 1955 | 1956 | '@octokit/openapi-types@19.1.0': {} 1957 | 1958 | '@octokit/plugin-paginate-rest@9.1.5(@octokit/core@5.0.2)': 1959 | dependencies: 1960 | '@octokit/core': 5.0.2 1961 | '@octokit/types': 12.4.0 1962 | 1963 | '@octokit/plugin-request-log@4.0.0(@octokit/core@5.0.2)': 1964 | dependencies: 1965 | '@octokit/core': 5.0.2 1966 | 1967 | '@octokit/plugin-rest-endpoint-methods@10.2.0(@octokit/core@5.0.2)': 1968 | dependencies: 1969 | '@octokit/core': 5.0.2 1970 | '@octokit/types': 12.4.0 1971 | 1972 | '@octokit/request-error@5.0.1': 1973 | dependencies: 1974 | '@octokit/types': 12.4.0 1975 | deprecation: 2.3.1 1976 | once: 1.4.0 1977 | 1978 | '@octokit/request@8.1.6': 1979 | dependencies: 1980 | '@octokit/endpoint': 9.0.4 1981 | '@octokit/request-error': 5.0.1 1982 | '@octokit/types': 12.4.0 1983 | universal-user-agent: 6.0.1 1984 | 1985 | '@octokit/rest@20.0.2': 1986 | dependencies: 1987 | '@octokit/core': 5.0.2 1988 | '@octokit/plugin-paginate-rest': 9.1.5(@octokit/core@5.0.2) 1989 | '@octokit/plugin-request-log': 4.0.0(@octokit/core@5.0.2) 1990 | '@octokit/plugin-rest-endpoint-methods': 10.2.0(@octokit/core@5.0.2) 1991 | 1992 | '@octokit/types@12.4.0': 1993 | dependencies: 1994 | '@octokit/openapi-types': 19.1.0 1995 | 1996 | '@oxlint/darwin-arm64@0.3.1': 1997 | optional: true 1998 | 1999 | '@oxlint/darwin-x64@0.3.1': 2000 | optional: true 2001 | 2002 | '@oxlint/linux-arm64-gnu@0.3.1': 2003 | optional: true 2004 | 2005 | '@oxlint/linux-arm64-musl@0.3.1': 2006 | optional: true 2007 | 2008 | '@oxlint/linux-x64-gnu@0.3.1': 2009 | optional: true 2010 | 2011 | '@oxlint/linux-x64-musl@0.3.1': 2012 | optional: true 2013 | 2014 | '@oxlint/win32-arm64@0.3.1': 2015 | optional: true 2016 | 2017 | '@oxlint/win32-x64@0.3.1': 2018 | optional: true 2019 | 2020 | '@rollup/pluginutils@4.2.1': 2021 | dependencies: 2022 | estree-walker: 2.0.2 2023 | picomatch: 2.3.1 2024 | 2025 | '@sindresorhus/merge-streams@1.0.0': {} 2026 | 2027 | '@swc-node/core@1.13.0(@swc/core@1.5.0)(@swc/types@0.1.5)': 2028 | dependencies: 2029 | '@swc/core': 1.5.0 2030 | '@swc/types': 0.1.5 2031 | 2032 | '@swc-node/register@1.9.0(@swc/core@1.5.0)(@swc/types@0.1.5)(typescript@5.4.5)': 2033 | dependencies: 2034 | '@swc-node/core': 1.13.0(@swc/core@1.5.0)(@swc/types@0.1.5) 2035 | '@swc-node/sourcemap-support': 0.5.0 2036 | '@swc/core': 1.5.0 2037 | colorette: 2.0.20 2038 | debug: 4.3.4 2039 | pirates: 4.0.6 2040 | tslib: 2.6.2 2041 | typescript: 5.4.5 2042 | transitivePeerDependencies: 2043 | - '@swc/types' 2044 | - supports-color 2045 | 2046 | '@swc-node/sourcemap-support@0.5.0': 2047 | dependencies: 2048 | source-map-support: 0.5.21 2049 | tslib: 2.6.2 2050 | 2051 | '@swc/core-darwin-arm64@1.5.0': 2052 | optional: true 2053 | 2054 | '@swc/core-darwin-x64@1.5.0': 2055 | optional: true 2056 | 2057 | '@swc/core-linux-arm-gnueabihf@1.5.0': 2058 | optional: true 2059 | 2060 | '@swc/core-linux-arm64-gnu@1.5.0': 2061 | optional: true 2062 | 2063 | '@swc/core-linux-arm64-musl@1.5.0': 2064 | optional: true 2065 | 2066 | '@swc/core-linux-x64-gnu@1.5.0': 2067 | optional: true 2068 | 2069 | '@swc/core-linux-x64-musl@1.5.0': 2070 | optional: true 2071 | 2072 | '@swc/core-win32-arm64-msvc@1.5.0': 2073 | optional: true 2074 | 2075 | '@swc/core-win32-ia32-msvc@1.5.0': 2076 | optional: true 2077 | 2078 | '@swc/core-win32-x64-msvc@1.5.0': 2079 | optional: true 2080 | 2081 | '@swc/core@1.5.0': 2082 | dependencies: 2083 | '@swc/counter': 0.1.2 2084 | '@swc/types': 0.1.5 2085 | optionalDependencies: 2086 | '@swc/core-darwin-arm64': 1.5.0 2087 | '@swc/core-darwin-x64': 1.5.0 2088 | '@swc/core-linux-arm-gnueabihf': 1.5.0 2089 | '@swc/core-linux-arm64-gnu': 1.5.0 2090 | '@swc/core-linux-arm64-musl': 1.5.0 2091 | '@swc/core-linux-x64-gnu': 1.5.0 2092 | '@swc/core-linux-x64-musl': 1.5.0 2093 | '@swc/core-win32-arm64-msvc': 1.5.0 2094 | '@swc/core-win32-ia32-msvc': 1.5.0 2095 | '@swc/core-win32-x64-msvc': 1.5.0 2096 | 2097 | '@swc/counter@0.1.2': {} 2098 | 2099 | '@swc/types@0.1.5': {} 2100 | 2101 | '@taplo/cli@0.7.0': {} 2102 | 2103 | '@tokenizer/token@0.3.0': {} 2104 | 2105 | '@tybys/wasm-util@0.8.3': 2106 | dependencies: 2107 | tslib: 2.6.2 2108 | 2109 | '@types/node@20.12.7': 2110 | dependencies: 2111 | undici-types: 5.26.5 2112 | 2113 | '@vercel/nft@0.26.4': 2114 | dependencies: 2115 | '@mapbox/node-pre-gyp': 1.0.11 2116 | '@rollup/pluginutils': 4.2.1 2117 | acorn: 8.11.3 2118 | acorn-import-attributes: 1.9.5(acorn@8.11.3) 2119 | async-sema: 3.1.1 2120 | bindings: 1.5.0 2121 | estree-walker: 2.0.2 2122 | glob: 7.2.3 2123 | graceful-fs: 4.2.11 2124 | micromatch: 4.0.5 2125 | node-gyp-build: 4.7.1 2126 | resolve-from: 5.0.0 2127 | transitivePeerDependencies: 2128 | - encoding 2129 | - supports-color 2130 | 2131 | abbrev@1.1.1: {} 2132 | 2133 | acorn-import-attributes@1.9.5(acorn@8.11.3): 2134 | dependencies: 2135 | acorn: 8.11.3 2136 | 2137 | acorn-walk@8.3.2: {} 2138 | 2139 | acorn@8.11.3: {} 2140 | 2141 | agent-base@6.0.2: 2142 | dependencies: 2143 | debug: 4.3.4 2144 | transitivePeerDependencies: 2145 | - supports-color 2146 | 2147 | ansi-escapes@4.3.2: 2148 | dependencies: 2149 | type-fest: 0.21.3 2150 | 2151 | ansi-escapes@6.2.0: 2152 | dependencies: 2153 | type-fest: 3.13.1 2154 | 2155 | ansi-regex@5.0.1: {} 2156 | 2157 | ansi-regex@6.0.1: {} 2158 | 2159 | ansi-styles@4.3.0: 2160 | dependencies: 2161 | color-convert: 2.0.1 2162 | 2163 | ansi-styles@6.2.1: {} 2164 | 2165 | aproba@2.0.0: {} 2166 | 2167 | are-we-there-yet@2.0.0: 2168 | dependencies: 2169 | delegates: 1.0.0 2170 | readable-stream: 3.6.2 2171 | 2172 | argparse@1.0.10: 2173 | dependencies: 2174 | sprintf-js: 1.0.3 2175 | 2176 | argparse@2.0.1: {} 2177 | 2178 | array-find-index@1.0.2: {} 2179 | 2180 | arrgv@1.0.2: {} 2181 | 2182 | arrify@3.0.0: {} 2183 | 2184 | async-sema@3.1.1: {} 2185 | 2186 | ava@6.1.2: 2187 | dependencies: 2188 | '@vercel/nft': 0.26.4 2189 | acorn: 8.11.3 2190 | acorn-walk: 8.3.2 2191 | ansi-styles: 6.2.1 2192 | arrgv: 1.0.2 2193 | arrify: 3.0.0 2194 | callsites: 4.1.0 2195 | cbor: 9.0.1 2196 | chalk: 5.3.0 2197 | chunkd: 2.0.1 2198 | ci-info: 4.0.0 2199 | ci-parallel-vars: 1.0.1 2200 | cli-truncate: 4.0.0 2201 | code-excerpt: 4.0.0 2202 | common-path-prefix: 3.0.0 2203 | concordance: 5.0.4 2204 | currently-unhandled: 0.4.1 2205 | debug: 4.3.4 2206 | emittery: 1.0.1 2207 | figures: 6.0.1 2208 | globby: 14.0.0 2209 | ignore-by-default: 2.1.0 2210 | indent-string: 5.0.0 2211 | is-plain-object: 5.0.0 2212 | is-promise: 4.0.0 2213 | matcher: 5.0.0 2214 | memoize: 10.0.0 2215 | ms: 2.1.3 2216 | p-map: 7.0.2 2217 | package-config: 5.0.0 2218 | picomatch: 3.0.1 2219 | plur: 5.1.0 2220 | pretty-ms: 9.0.0 2221 | resolve-cwd: 3.0.0 2222 | stack-utils: 2.0.6 2223 | strip-ansi: 7.1.0 2224 | supertap: 3.0.1 2225 | temp-dir: 3.0.0 2226 | write-file-atomic: 5.0.1 2227 | yargs: 17.7.2 2228 | transitivePeerDependencies: 2229 | - encoding 2230 | - supports-color 2231 | 2232 | balanced-match@1.0.2: {} 2233 | 2234 | base64-js@1.5.1: {} 2235 | 2236 | before-after-hook@2.2.3: {} 2237 | 2238 | bindings@1.5.0: 2239 | dependencies: 2240 | file-uri-to-path: 1.0.0 2241 | 2242 | bl@4.1.0: 2243 | dependencies: 2244 | buffer: 5.7.1 2245 | inherits: 2.0.4 2246 | readable-stream: 3.6.2 2247 | 2248 | blueimp-md5@2.19.0: {} 2249 | 2250 | brace-expansion@1.1.11: 2251 | dependencies: 2252 | balanced-match: 1.0.2 2253 | concat-map: 0.0.1 2254 | 2255 | brace-expansion@2.0.1: 2256 | dependencies: 2257 | balanced-match: 1.0.2 2258 | 2259 | braces@3.0.2: 2260 | dependencies: 2261 | fill-range: 7.0.1 2262 | 2263 | buffer-from@1.1.2: {} 2264 | 2265 | buffer@5.7.1: 2266 | dependencies: 2267 | base64-js: 1.5.1 2268 | ieee754: 1.2.1 2269 | 2270 | call-bind@1.0.7: 2271 | dependencies: 2272 | es-define-property: 1.0.0 2273 | es-errors: 1.3.0 2274 | function-bind: 1.1.2 2275 | get-intrinsic: 1.2.4 2276 | set-function-length: 1.2.2 2277 | 2278 | callsites@4.1.0: {} 2279 | 2280 | cbor@9.0.1: 2281 | dependencies: 2282 | nofilter: 3.1.0 2283 | 2284 | chalk@4.1.2: 2285 | dependencies: 2286 | ansi-styles: 4.3.0 2287 | supports-color: 7.2.0 2288 | 2289 | chalk@5.3.0: {} 2290 | 2291 | chardet@0.7.0: {} 2292 | 2293 | chownr@2.0.0: {} 2294 | 2295 | chunkd@2.0.1: {} 2296 | 2297 | ci-info@4.0.0: {} 2298 | 2299 | ci-parallel-vars@1.0.1: {} 2300 | 2301 | cli-cursor@3.1.0: 2302 | dependencies: 2303 | restore-cursor: 3.1.0 2304 | 2305 | cli-cursor@4.0.0: 2306 | dependencies: 2307 | restore-cursor: 4.0.0 2308 | 2309 | cli-spinners@2.9.2: {} 2310 | 2311 | cli-truncate@4.0.0: 2312 | dependencies: 2313 | slice-ansi: 5.0.0 2314 | string-width: 7.0.0 2315 | 2316 | cli-width@4.1.0: {} 2317 | 2318 | clipanion@3.2.1(typanion@3.14.0): 2319 | dependencies: 2320 | typanion: 3.14.0 2321 | 2322 | cliui@8.0.1: 2323 | dependencies: 2324 | string-width: 4.2.3 2325 | strip-ansi: 6.0.1 2326 | wrap-ansi: 7.0.0 2327 | 2328 | clone@1.0.4: {} 2329 | 2330 | code-excerpt@4.0.0: 2331 | dependencies: 2332 | convert-to-spaces: 2.0.1 2333 | 2334 | color-convert@2.0.1: 2335 | dependencies: 2336 | color-name: 1.1.4 2337 | 2338 | color-name@1.1.4: {} 2339 | 2340 | color-support@1.1.3: {} 2341 | 2342 | colorette@2.0.20: {} 2343 | 2344 | commander@11.1.0: {} 2345 | 2346 | common-path-prefix@3.0.0: {} 2347 | 2348 | concat-map@0.0.1: {} 2349 | 2350 | concordance@5.0.4: 2351 | dependencies: 2352 | date-time: 3.1.0 2353 | esutils: 2.0.3 2354 | fast-diff: 1.3.0 2355 | js-string-escape: 1.0.1 2356 | lodash: 4.17.21 2357 | md5-hex: 3.0.1 2358 | semver: 7.5.4 2359 | well-known-symbols: 2.0.0 2360 | 2361 | console-control-strings@1.1.0: {} 2362 | 2363 | convert-to-spaces@2.0.1: {} 2364 | 2365 | cross-spawn@7.0.3: 2366 | dependencies: 2367 | path-key: 3.1.1 2368 | shebang-command: 2.0.0 2369 | which: 2.0.2 2370 | 2371 | currently-unhandled@0.4.1: 2372 | dependencies: 2373 | array-find-index: 1.0.2 2374 | 2375 | date-time@3.1.0: 2376 | dependencies: 2377 | time-zone: 1.0.0 2378 | 2379 | debug@4.3.4: 2380 | dependencies: 2381 | ms: 2.1.2 2382 | 2383 | defaults@1.0.4: 2384 | dependencies: 2385 | clone: 1.0.4 2386 | 2387 | define-data-property@1.1.4: 2388 | dependencies: 2389 | es-define-property: 1.0.0 2390 | es-errors: 1.3.0 2391 | gopd: 1.0.1 2392 | 2393 | delegates@1.0.0: {} 2394 | 2395 | deprecation@2.3.1: {} 2396 | 2397 | detect-libc@2.0.2: {} 2398 | 2399 | emittery@1.0.1: {} 2400 | 2401 | emnapi@1.1.1: {} 2402 | 2403 | emoji-regex@10.3.0: {} 2404 | 2405 | emoji-regex@8.0.0: {} 2406 | 2407 | es-define-property@1.0.0: 2408 | dependencies: 2409 | get-intrinsic: 1.2.4 2410 | 2411 | es-errors@1.3.0: {} 2412 | 2413 | escalade@3.1.1: {} 2414 | 2415 | escape-string-regexp@2.0.0: {} 2416 | 2417 | escape-string-regexp@5.0.0: {} 2418 | 2419 | esprima@4.0.1: {} 2420 | 2421 | estree-walker@2.0.2: {} 2422 | 2423 | esutils@2.0.3: {} 2424 | 2425 | eventemitter3@5.0.1: {} 2426 | 2427 | execa@8.0.1: 2428 | dependencies: 2429 | cross-spawn: 7.0.3 2430 | get-stream: 8.0.1 2431 | human-signals: 5.0.0 2432 | is-stream: 3.0.0 2433 | merge-stream: 2.0.0 2434 | npm-run-path: 5.2.0 2435 | onetime: 6.0.0 2436 | signal-exit: 4.1.0 2437 | strip-final-newline: 3.0.0 2438 | 2439 | external-editor@3.1.0: 2440 | dependencies: 2441 | chardet: 0.7.0 2442 | iconv-lite: 0.4.24 2443 | tmp: 0.0.33 2444 | 2445 | fast-diff@1.3.0: {} 2446 | 2447 | fast-glob@3.3.2: 2448 | dependencies: 2449 | '@nodelib/fs.stat': 2.0.5 2450 | '@nodelib/fs.walk': 1.2.8 2451 | glob-parent: 5.1.2 2452 | merge2: 1.4.1 2453 | micromatch: 4.0.5 2454 | 2455 | fastq@1.16.0: 2456 | dependencies: 2457 | reusify: 1.0.4 2458 | 2459 | figures@6.0.1: 2460 | dependencies: 2461 | is-unicode-supported: 2.0.0 2462 | 2463 | file-type@19.0.0: 2464 | dependencies: 2465 | readable-web-to-node-stream: 3.0.2 2466 | strtok3: 7.0.0 2467 | token-types: 5.0.1 2468 | 2469 | file-uri-to-path@1.0.0: {} 2470 | 2471 | fill-range@7.0.1: 2472 | dependencies: 2473 | to-regex-range: 5.0.1 2474 | 2475 | find-up-simple@1.0.0: {} 2476 | 2477 | fs-minipass@2.1.0: 2478 | dependencies: 2479 | minipass: 3.3.6 2480 | 2481 | fs.realpath@1.0.0: {} 2482 | 2483 | function-bind@1.1.2: {} 2484 | 2485 | gauge@3.0.2: 2486 | dependencies: 2487 | aproba: 2.0.0 2488 | color-support: 1.1.3 2489 | console-control-strings: 1.1.0 2490 | has-unicode: 2.0.1 2491 | object-assign: 4.1.1 2492 | signal-exit: 3.0.7 2493 | string-width: 4.2.3 2494 | strip-ansi: 6.0.1 2495 | wide-align: 1.1.5 2496 | 2497 | get-caller-file@2.0.5: {} 2498 | 2499 | get-east-asian-width@1.2.0: {} 2500 | 2501 | get-intrinsic@1.2.4: 2502 | dependencies: 2503 | es-errors: 1.3.0 2504 | function-bind: 1.1.2 2505 | has-proto: 1.0.1 2506 | has-symbols: 1.0.3 2507 | hasown: 2.0.0 2508 | 2509 | get-stream@8.0.1: {} 2510 | 2511 | glob-parent@5.1.2: 2512 | dependencies: 2513 | is-glob: 4.0.3 2514 | 2515 | glob@7.2.3: 2516 | dependencies: 2517 | fs.realpath: 1.0.0 2518 | inflight: 1.0.6 2519 | inherits: 2.0.4 2520 | minimatch: 3.1.2 2521 | once: 1.4.0 2522 | path-is-absolute: 1.0.1 2523 | 2524 | globby@14.0.0: 2525 | dependencies: 2526 | '@sindresorhus/merge-streams': 1.0.0 2527 | fast-glob: 3.3.2 2528 | ignore: 5.3.0 2529 | path-type: 5.0.0 2530 | slash: 5.1.0 2531 | unicorn-magic: 0.1.0 2532 | 2533 | gopd@1.0.1: 2534 | dependencies: 2535 | get-intrinsic: 1.2.4 2536 | 2537 | graceful-fs@4.2.11: {} 2538 | 2539 | has-flag@4.0.0: {} 2540 | 2541 | has-property-descriptors@1.0.2: 2542 | dependencies: 2543 | es-define-property: 1.0.0 2544 | 2545 | has-proto@1.0.1: {} 2546 | 2547 | has-symbols@1.0.3: {} 2548 | 2549 | has-unicode@2.0.1: {} 2550 | 2551 | hasown@2.0.0: 2552 | dependencies: 2553 | function-bind: 1.1.2 2554 | 2555 | https-proxy-agent@5.0.1: 2556 | dependencies: 2557 | agent-base: 6.0.2 2558 | debug: 4.3.4 2559 | transitivePeerDependencies: 2560 | - supports-color 2561 | 2562 | human-signals@5.0.0: {} 2563 | 2564 | husky@9.0.11: {} 2565 | 2566 | iconv-lite@0.4.24: 2567 | dependencies: 2568 | safer-buffer: 2.1.2 2569 | 2570 | ieee754@1.2.1: {} 2571 | 2572 | ignore-by-default@2.1.0: {} 2573 | 2574 | ignore@5.3.0: {} 2575 | 2576 | imurmurhash@0.1.4: {} 2577 | 2578 | indent-string@5.0.0: {} 2579 | 2580 | inflight@1.0.6: 2581 | dependencies: 2582 | once: 1.4.0 2583 | wrappy: 1.0.2 2584 | 2585 | inherits@2.0.4: {} 2586 | 2587 | inquirer@9.2.18: 2588 | dependencies: 2589 | '@inquirer/figures': 1.0.0 2590 | '@ljharb/through': 2.3.13 2591 | ansi-escapes: 4.3.2 2592 | chalk: 5.3.0 2593 | cli-cursor: 3.1.0 2594 | cli-width: 4.1.0 2595 | external-editor: 3.1.0 2596 | lodash: 4.17.21 2597 | mute-stream: 1.0.0 2598 | ora: 5.4.1 2599 | run-async: 3.0.0 2600 | rxjs: 7.8.1 2601 | string-width: 4.2.3 2602 | strip-ansi: 6.0.1 2603 | wrap-ansi: 6.2.0 2604 | 2605 | irregular-plurals@3.5.0: {} 2606 | 2607 | is-extglob@2.1.1: {} 2608 | 2609 | is-fullwidth-code-point@3.0.0: {} 2610 | 2611 | is-fullwidth-code-point@4.0.0: {} 2612 | 2613 | is-fullwidth-code-point@5.0.0: 2614 | dependencies: 2615 | get-east-asian-width: 1.2.0 2616 | 2617 | is-glob@4.0.3: 2618 | dependencies: 2619 | is-extglob: 2.1.1 2620 | 2621 | is-interactive@1.0.0: {} 2622 | 2623 | is-number@7.0.0: {} 2624 | 2625 | is-plain-object@5.0.0: {} 2626 | 2627 | is-promise@4.0.0: {} 2628 | 2629 | is-stream@3.0.0: {} 2630 | 2631 | is-unicode-supported@0.1.0: {} 2632 | 2633 | is-unicode-supported@2.0.0: {} 2634 | 2635 | isexe@2.0.0: {} 2636 | 2637 | js-string-escape@1.0.1: {} 2638 | 2639 | js-yaml@3.14.1: 2640 | dependencies: 2641 | argparse: 1.0.10 2642 | esprima: 4.0.1 2643 | 2644 | js-yaml@4.1.0: 2645 | dependencies: 2646 | argparse: 2.0.1 2647 | 2648 | json-parse-even-better-errors@3.0.1: {} 2649 | 2650 | lilconfig@3.0.0: {} 2651 | 2652 | lint-staged@15.2.2: 2653 | dependencies: 2654 | chalk: 5.3.0 2655 | commander: 11.1.0 2656 | debug: 4.3.4 2657 | execa: 8.0.1 2658 | lilconfig: 3.0.0 2659 | listr2: 8.0.1 2660 | micromatch: 4.0.5 2661 | pidtree: 0.6.0 2662 | string-argv: 0.3.2 2663 | yaml: 2.3.4 2664 | transitivePeerDependencies: 2665 | - supports-color 2666 | 2667 | listr2@8.0.1: 2668 | dependencies: 2669 | cli-truncate: 4.0.0 2670 | colorette: 2.0.20 2671 | eventemitter3: 5.0.1 2672 | log-update: 6.0.0 2673 | rfdc: 1.3.0 2674 | wrap-ansi: 9.0.0 2675 | 2676 | load-json-file@7.0.1: {} 2677 | 2678 | lodash-es@4.17.21: {} 2679 | 2680 | lodash@4.17.21: {} 2681 | 2682 | log-symbols@4.1.0: 2683 | dependencies: 2684 | chalk: 4.1.2 2685 | is-unicode-supported: 0.1.0 2686 | 2687 | log-update@6.0.0: 2688 | dependencies: 2689 | ansi-escapes: 6.2.0 2690 | cli-cursor: 4.0.0 2691 | slice-ansi: 7.1.0 2692 | strip-ansi: 7.1.0 2693 | wrap-ansi: 9.0.0 2694 | 2695 | lru-cache@6.0.0: 2696 | dependencies: 2697 | yallist: 4.0.0 2698 | 2699 | make-dir@3.1.0: 2700 | dependencies: 2701 | semver: 6.3.1 2702 | 2703 | matcher@5.0.0: 2704 | dependencies: 2705 | escape-string-regexp: 5.0.0 2706 | 2707 | md5-hex@3.0.1: 2708 | dependencies: 2709 | blueimp-md5: 2.19.0 2710 | 2711 | memoize@10.0.0: 2712 | dependencies: 2713 | mimic-function: 5.0.0 2714 | 2715 | memorystream@0.3.1: {} 2716 | 2717 | merge-stream@2.0.0: {} 2718 | 2719 | merge2@1.4.1: {} 2720 | 2721 | micromatch@4.0.5: 2722 | dependencies: 2723 | braces: 3.0.2 2724 | picomatch: 2.3.1 2725 | 2726 | mimic-fn@2.1.0: {} 2727 | 2728 | mimic-fn@4.0.0: {} 2729 | 2730 | mimic-function@5.0.0: {} 2731 | 2732 | minimatch@3.1.2: 2733 | dependencies: 2734 | brace-expansion: 1.1.11 2735 | 2736 | minimatch@9.0.3: 2737 | dependencies: 2738 | brace-expansion: 2.0.1 2739 | 2740 | minipass@3.3.6: 2741 | dependencies: 2742 | yallist: 4.0.0 2743 | 2744 | minipass@5.0.0: {} 2745 | 2746 | minizlib@2.1.2: 2747 | dependencies: 2748 | minipass: 3.3.6 2749 | yallist: 4.0.0 2750 | 2751 | mkdirp@1.0.4: {} 2752 | 2753 | ms@2.1.2: {} 2754 | 2755 | ms@2.1.3: {} 2756 | 2757 | mute-stream@1.0.0: {} 2758 | 2759 | node-fetch@2.7.0: 2760 | dependencies: 2761 | whatwg-url: 5.0.0 2762 | 2763 | node-gyp-build@4.7.1: {} 2764 | 2765 | nofilter@3.1.0: {} 2766 | 2767 | nopt@5.0.0: 2768 | dependencies: 2769 | abbrev: 1.1.1 2770 | 2771 | npm-normalize-package-bin@3.0.1: {} 2772 | 2773 | npm-run-all2@6.1.2: 2774 | dependencies: 2775 | ansi-styles: 6.2.1 2776 | cross-spawn: 7.0.3 2777 | memorystream: 0.3.1 2778 | minimatch: 9.0.3 2779 | pidtree: 0.6.0 2780 | read-package-json-fast: 3.0.2 2781 | shell-quote: 1.8.1 2782 | 2783 | npm-run-path@5.2.0: 2784 | dependencies: 2785 | path-key: 4.0.0 2786 | 2787 | npmlog@5.0.1: 2788 | dependencies: 2789 | are-we-there-yet: 2.0.0 2790 | console-control-strings: 1.1.0 2791 | gauge: 3.0.2 2792 | set-blocking: 2.0.0 2793 | 2794 | object-assign@4.1.1: {} 2795 | 2796 | once@1.4.0: 2797 | dependencies: 2798 | wrappy: 1.0.2 2799 | 2800 | onetime@5.1.2: 2801 | dependencies: 2802 | mimic-fn: 2.1.0 2803 | 2804 | onetime@6.0.0: 2805 | dependencies: 2806 | mimic-fn: 4.0.0 2807 | 2808 | ora@5.4.1: 2809 | dependencies: 2810 | bl: 4.1.0 2811 | chalk: 4.1.2 2812 | cli-cursor: 3.1.0 2813 | cli-spinners: 2.9.2 2814 | is-interactive: 1.0.0 2815 | is-unicode-supported: 0.1.0 2816 | log-symbols: 4.1.0 2817 | strip-ansi: 6.0.1 2818 | wcwidth: 1.0.1 2819 | 2820 | os-tmpdir@1.0.2: {} 2821 | 2822 | oxlint@0.3.1: 2823 | optionalDependencies: 2824 | '@oxlint/darwin-arm64': 0.3.1 2825 | '@oxlint/darwin-x64': 0.3.1 2826 | '@oxlint/linux-arm64-gnu': 0.3.1 2827 | '@oxlint/linux-arm64-musl': 0.3.1 2828 | '@oxlint/linux-x64-gnu': 0.3.1 2829 | '@oxlint/linux-x64-musl': 0.3.1 2830 | '@oxlint/win32-arm64': 0.3.1 2831 | '@oxlint/win32-x64': 0.3.1 2832 | 2833 | p-map@7.0.2: {} 2834 | 2835 | package-config@5.0.0: 2836 | dependencies: 2837 | find-up-simple: 1.0.0 2838 | load-json-file: 7.0.1 2839 | 2840 | parse-ms@4.0.0: {} 2841 | 2842 | path-is-absolute@1.0.1: {} 2843 | 2844 | path-key@3.1.1: {} 2845 | 2846 | path-key@4.0.0: {} 2847 | 2848 | path-type@5.0.0: {} 2849 | 2850 | peek-readable@5.0.0: {} 2851 | 2852 | picomatch@2.3.1: {} 2853 | 2854 | picomatch@3.0.1: {} 2855 | 2856 | pidtree@0.6.0: {} 2857 | 2858 | pirates@4.0.6: {} 2859 | 2860 | plur@5.1.0: 2861 | dependencies: 2862 | irregular-plurals: 3.5.0 2863 | 2864 | prettier@3.2.5: {} 2865 | 2866 | pretty-ms@9.0.0: 2867 | dependencies: 2868 | parse-ms: 4.0.0 2869 | 2870 | queue-microtask@1.2.3: {} 2871 | 2872 | read-package-json-fast@3.0.2: 2873 | dependencies: 2874 | json-parse-even-better-errors: 3.0.1 2875 | npm-normalize-package-bin: 3.0.1 2876 | 2877 | readable-stream@3.6.2: 2878 | dependencies: 2879 | inherits: 2.0.4 2880 | string_decoder: 1.3.0 2881 | util-deprecate: 1.0.2 2882 | 2883 | readable-web-to-node-stream@3.0.2: 2884 | dependencies: 2885 | readable-stream: 3.6.2 2886 | 2887 | require-directory@2.1.1: {} 2888 | 2889 | resolve-cwd@3.0.0: 2890 | dependencies: 2891 | resolve-from: 5.0.0 2892 | 2893 | resolve-from@5.0.0: {} 2894 | 2895 | restore-cursor@3.1.0: 2896 | dependencies: 2897 | onetime: 5.1.2 2898 | signal-exit: 3.0.7 2899 | 2900 | restore-cursor@4.0.0: 2901 | dependencies: 2902 | onetime: 5.1.2 2903 | signal-exit: 3.0.7 2904 | 2905 | reusify@1.0.4: {} 2906 | 2907 | rfdc@1.3.0: {} 2908 | 2909 | rimraf@3.0.2: 2910 | dependencies: 2911 | glob: 7.2.3 2912 | 2913 | run-async@3.0.0: {} 2914 | 2915 | run-parallel@1.2.0: 2916 | dependencies: 2917 | queue-microtask: 1.2.3 2918 | 2919 | rxjs@7.8.1: 2920 | dependencies: 2921 | tslib: 2.6.2 2922 | 2923 | safe-buffer@5.2.1: {} 2924 | 2925 | safer-buffer@2.1.2: {} 2926 | 2927 | semver@6.3.1: {} 2928 | 2929 | semver@7.5.4: 2930 | dependencies: 2931 | lru-cache: 6.0.0 2932 | 2933 | serialize-error@7.0.1: 2934 | dependencies: 2935 | type-fest: 0.13.1 2936 | 2937 | set-blocking@2.0.0: {} 2938 | 2939 | set-function-length@1.2.2: 2940 | dependencies: 2941 | define-data-property: 1.1.4 2942 | es-errors: 1.3.0 2943 | function-bind: 1.1.2 2944 | get-intrinsic: 1.2.4 2945 | gopd: 1.0.1 2946 | has-property-descriptors: 1.0.2 2947 | 2948 | shebang-command@2.0.0: 2949 | dependencies: 2950 | shebang-regex: 3.0.0 2951 | 2952 | shebang-regex@3.0.0: {} 2953 | 2954 | shell-quote@1.8.1: {} 2955 | 2956 | signal-exit@3.0.7: {} 2957 | 2958 | signal-exit@4.1.0: {} 2959 | 2960 | slash@5.1.0: {} 2961 | 2962 | slice-ansi@5.0.0: 2963 | dependencies: 2964 | ansi-styles: 6.2.1 2965 | is-fullwidth-code-point: 4.0.0 2966 | 2967 | slice-ansi@7.1.0: 2968 | dependencies: 2969 | ansi-styles: 6.2.1 2970 | is-fullwidth-code-point: 5.0.0 2971 | 2972 | source-map-support@0.5.21: 2973 | dependencies: 2974 | buffer-from: 1.1.2 2975 | source-map: 0.6.1 2976 | 2977 | source-map@0.6.1: {} 2978 | 2979 | sprintf-js@1.0.3: {} 2980 | 2981 | stack-utils@2.0.6: 2982 | dependencies: 2983 | escape-string-regexp: 2.0.0 2984 | 2985 | string-argv@0.3.2: {} 2986 | 2987 | string-width@4.2.3: 2988 | dependencies: 2989 | emoji-regex: 8.0.0 2990 | is-fullwidth-code-point: 3.0.0 2991 | strip-ansi: 6.0.1 2992 | 2993 | string-width@7.0.0: 2994 | dependencies: 2995 | emoji-regex: 10.3.0 2996 | get-east-asian-width: 1.2.0 2997 | strip-ansi: 7.1.0 2998 | 2999 | string_decoder@1.3.0: 3000 | dependencies: 3001 | safe-buffer: 5.2.1 3002 | 3003 | strip-ansi@6.0.1: 3004 | dependencies: 3005 | ansi-regex: 5.0.1 3006 | 3007 | strip-ansi@7.1.0: 3008 | dependencies: 3009 | ansi-regex: 6.0.1 3010 | 3011 | strip-final-newline@3.0.0: {} 3012 | 3013 | strtok3@7.0.0: 3014 | dependencies: 3015 | '@tokenizer/token': 0.3.0 3016 | peek-readable: 5.0.0 3017 | 3018 | supertap@3.0.1: 3019 | dependencies: 3020 | indent-string: 5.0.0 3021 | js-yaml: 3.14.1 3022 | serialize-error: 7.0.1 3023 | strip-ansi: 7.1.0 3024 | 3025 | supports-color@7.2.0: 3026 | dependencies: 3027 | has-flag: 4.0.0 3028 | 3029 | tar@6.2.0: 3030 | dependencies: 3031 | chownr: 2.0.0 3032 | fs-minipass: 2.1.0 3033 | minipass: 5.0.0 3034 | minizlib: 2.1.2 3035 | mkdirp: 1.0.4 3036 | yallist: 4.0.0 3037 | 3038 | temp-dir@3.0.0: {} 3039 | 3040 | time-zone@1.0.0: {} 3041 | 3042 | tinybench@2.8.0: {} 3043 | 3044 | tmp@0.0.33: 3045 | dependencies: 3046 | os-tmpdir: 1.0.2 3047 | 3048 | to-regex-range@5.0.1: 3049 | dependencies: 3050 | is-number: 7.0.0 3051 | 3052 | token-types@5.0.1: 3053 | dependencies: 3054 | '@tokenizer/token': 0.3.0 3055 | ieee754: 1.2.1 3056 | 3057 | toml@3.0.0: {} 3058 | 3059 | tr46@0.0.3: {} 3060 | 3061 | tslib@2.6.2: {} 3062 | 3063 | typanion@3.14.0: {} 3064 | 3065 | type-fest@0.13.1: {} 3066 | 3067 | type-fest@0.21.3: {} 3068 | 3069 | type-fest@3.13.1: {} 3070 | 3071 | typescript@5.4.5: {} 3072 | 3073 | undici-types@5.26.5: {} 3074 | 3075 | unicorn-magic@0.1.0: {} 3076 | 3077 | universal-user-agent@6.0.1: {} 3078 | 3079 | util-deprecate@1.0.2: {} 3080 | 3081 | wasm-sjlj@1.0.5: {} 3082 | 3083 | wcwidth@1.0.1: 3084 | dependencies: 3085 | defaults: 1.0.4 3086 | 3087 | webidl-conversions@3.0.1: {} 3088 | 3089 | well-known-symbols@2.0.0: {} 3090 | 3091 | whatwg-url@5.0.0: 3092 | dependencies: 3093 | tr46: 0.0.3 3094 | webidl-conversions: 3.0.1 3095 | 3096 | which@2.0.2: 3097 | dependencies: 3098 | isexe: 2.0.0 3099 | 3100 | wide-align@1.1.5: 3101 | dependencies: 3102 | string-width: 4.2.3 3103 | 3104 | wrap-ansi@6.2.0: 3105 | dependencies: 3106 | ansi-styles: 4.3.0 3107 | string-width: 4.2.3 3108 | strip-ansi: 6.0.1 3109 | 3110 | wrap-ansi@7.0.0: 3111 | dependencies: 3112 | ansi-styles: 4.3.0 3113 | string-width: 4.2.3 3114 | strip-ansi: 6.0.1 3115 | 3116 | wrap-ansi@9.0.0: 3117 | dependencies: 3118 | ansi-styles: 6.2.1 3119 | string-width: 7.0.0 3120 | strip-ansi: 7.1.0 3121 | 3122 | wrappy@1.0.2: {} 3123 | 3124 | write-file-atomic@5.0.1: 3125 | dependencies: 3126 | imurmurhash: 0.1.4 3127 | signal-exit: 4.1.0 3128 | 3129 | y18n@5.0.8: {} 3130 | 3131 | yallist@4.0.0: {} 3132 | 3133 | yaml@2.3.4: {} 3134 | 3135 | yargs-parser@21.1.1: {} 3136 | 3137 | yargs@17.7.2: 3138 | dependencies: 3139 | cliui: 8.0.1 3140 | escalade: 3.1.1 3141 | get-caller-file: 2.0.5 3142 | require-directory: 2.1.1 3143 | string-width: 4.2.3 3144 | y18n: 5.0.8 3145 | yargs-parser: 21.1.1 3146 | -------------------------------------------------------------------------------- /rustfmt.toml: -------------------------------------------------------------------------------- 1 | tab_spaces = 2 2 | -------------------------------------------------------------------------------- /simple-test.mjs: -------------------------------------------------------------------------------- 1 | import { readFile } from 'node:fs/promises' 2 | 3 | import { FileType } from './index.js' 4 | 5 | const ft = new FileType(await readFile('./__test__/sample.jpg')) 6 | 7 | console.log(ft.mime()) 8 | -------------------------------------------------------------------------------- /src/lib.rs: -------------------------------------------------------------------------------- 1 | #![deny(clippy::all)] 2 | 3 | use napi_derive::napi; 4 | 5 | #[cfg(not(target_family = "wasm"))] 6 | #[global_allocator] 7 | static ALLOC: mimalloc::MiMalloc = mimalloc::MiMalloc; 8 | 9 | #[napi] 10 | pub struct FileType(file_format::FileFormat); 11 | 12 | /// A kind of file format. 13 | #[napi(string_enum)] 14 | pub enum Kind { 15 | /// Files and directories stored in a single, possibly compressed, archive. 16 | Archive, 17 | /// Musics, sound effects, and spoken audio recordings. 18 | Audio, 19 | /// Compressed single files or streams. 20 | Compressed, 21 | /// Organized collections of data. 22 | Database, 23 | /// Visual information using graphics and spatial relationships. 24 | Diagram, 25 | /// Floppy disk images, optical disc images and virtual machine disks. 26 | Disk, 27 | /// Word processing and desktop publishing documents. 28 | Document, 29 | /// Electronic books. 30 | Ebook, 31 | /// Machine-executable code, virtual machine code and shared libraries. 32 | Executable, 33 | /// Typefaces used for displaying text on screen or in print. 34 | Font, 35 | /// Mathematical formulas. 36 | Formula, 37 | /// Collections of geospatial features, GPS tracks and other location-related files. 38 | Geospatial, 39 | /// Animated images, icons, cursors, raster graphics and vector graphics. 40 | Image, 41 | /// Data that provides information about other data. 42 | Metadata, 43 | /// 3D models, CAD drawings, and other types of files used for creating or displaying 3D images. 44 | Model, 45 | /// Data which do not fit in any of the other kinds. 46 | Other, 47 | /// Collections of files bundled together for software distribution. 48 | Package, 49 | /// Lists of audio or video files, organized in a specific order for sequential playback. 50 | Playlist, 51 | /// Slide shows. 52 | Presentation, 53 | /// Copies of a read-only memory chip of computers, cartridges, or other electronic devices. 54 | Rom, 55 | /// Data in tabular form. 56 | Spreadsheet, 57 | /// Subtitles and captions. 58 | Subtitle, 59 | /// Moving images, possibly with color and coordinated sound. 60 | Video, 61 | } 62 | 63 | impl From for Kind { 64 | fn from(value: file_format::Kind) -> Self { 65 | match value { 66 | file_format::Kind::Archive => Self::Archive, 67 | file_format::Kind::Audio => Self::Audio, 68 | file_format::Kind::Compressed => Self::Compressed, 69 | file_format::Kind::Database => Self::Database, 70 | file_format::Kind::Diagram => Self::Diagram, 71 | file_format::Kind::Disk => Self::Disk, 72 | file_format::Kind::Document => Self::Document, 73 | file_format::Kind::Ebook => Self::Ebook, 74 | file_format::Kind::Executable => Self::Executable, 75 | file_format::Kind::Font => Self::Font, 76 | file_format::Kind::Formula => Self::Formula, 77 | file_format::Kind::Geospatial => Self::Geospatial, 78 | file_format::Kind::Image => Self::Image, 79 | file_format::Kind::Metadata => Self::Metadata, 80 | file_format::Kind::Model => Self::Model, 81 | file_format::Kind::Other => Self::Other, 82 | file_format::Kind::Package => Self::Package, 83 | file_format::Kind::Playlist => Self::Playlist, 84 | file_format::Kind::Presentation => Self::Presentation, 85 | file_format::Kind::Rom => Self::Rom, 86 | file_format::Kind::Spreadsheet => Self::Spreadsheet, 87 | file_format::Kind::Subtitle => Self::Subtitle, 88 | file_format::Kind::Video => Self::Video, 89 | } 90 | } 91 | } 92 | 93 | #[napi] 94 | impl FileType { 95 | #[napi(constructor)] 96 | pub fn new(bytes: &[u8]) -> Self { 97 | Self(file_format::FileFormat::from_bytes(bytes)) 98 | } 99 | 100 | #[napi] 101 | /// Returns the common extension of the file format. 102 | /// 103 | /// Note: this information is never empty. 104 | /// 105 | /// # Examples 106 | /// 107 | /// Basic usage: 108 | /// 109 | /// ``` 110 | /// new FileType([...]).extension() // "wmv" 111 | ///``` 112 | pub fn extension(&self) -> &str { 113 | self.0.extension() 114 | } 115 | 116 | #[napi] 117 | /// Returns the `Kind` of the file format. 118 | /// 119 | /// # Examples 120 | /// 121 | /// Basic usage: 122 | /// 123 | /// ``` 124 | /// new FileType([...]).kind() // Kind.Archive 125 | ///``` 126 | pub fn kind(&self) -> Kind { 127 | self.0.kind().into() 128 | } 129 | 130 | #[napi] 131 | /// Returns the common media type (formerly known as MIME type) of the file format as 132 | /// defined in [IETF RFC 6838](https://tools.ietf.org/html/rfc6838). 133 | /// 134 | /// Note: some media types may not be defined in the 135 | /// [IANA registry](https://www.iana.org/assignments/media-types/media-types.xhtml). 136 | /// 137 | /// # Examples 138 | /// 139 | /// Basic usage: 140 | /// 141 | /// ``` 142 | /// new FileType([...]).media_type() // "application/zstd" 143 | ///``` 144 | pub fn mime(&self) -> &str { 145 | self.0.media_type() 146 | } 147 | 148 | #[napi] 149 | /// Returns the full name of the file format. 150 | /// 151 | /// # Examples 152 | /// 153 | /// Basic usage: 154 | /// 155 | /// ``` 156 | /// new FileType([...]).name() // "MPEG-1/2 Audio Layer 3" 157 | ///``` 158 | pub fn name(&self) -> &str { 159 | self.0.name() 160 | } 161 | } 162 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ESNext", 4 | "strict": true, 5 | "moduleResolution": "NodeNext", 6 | "module": "NodeNext", 7 | "noUnusedLocals": true, 8 | "noUnusedParameters": true, 9 | "esModuleInterop": true, 10 | "allowSyntheticDefaultImports": true 11 | }, 12 | "include": ["."], 13 | "exclude": ["node_modules"] 14 | } 15 | -------------------------------------------------------------------------------- /wasi-worker-browser.mjs: -------------------------------------------------------------------------------- 1 | import { instantiateNapiModuleSync, MessageHandler, WASI } from '@napi-rs/wasm-runtime' 2 | 3 | const handler = new MessageHandler({ 4 | onLoad({ wasmModule, wasmMemory }) { 5 | const wasi = new WASI({ 6 | print: function () { 7 | // eslint-disable-next-line no-console 8 | console.log.apply(console, arguments) 9 | }, 10 | printErr: function() { 11 | // eslint-disable-next-line no-console 12 | console.error.apply(console, arguments) 13 | }, 14 | }) 15 | return instantiateNapiModuleSync(wasmModule, { 16 | childThread: true, 17 | wasi, 18 | overwriteImports(importObject) { 19 | importObject.env = { 20 | ...importObject.env, 21 | ...importObject.napi, 22 | ...importObject.emnapi, 23 | memory: wasmMemory, 24 | } 25 | }, 26 | }) 27 | }, 28 | }) 29 | 30 | globalThis.onmessage = function (e) { 31 | handler.handle(e) 32 | } 33 | -------------------------------------------------------------------------------- /wasi-worker.mjs: -------------------------------------------------------------------------------- 1 | import fs from "node:fs"; 2 | import { createRequire } from "node:module"; 3 | import { parse } from "node:path"; 4 | import { WASI } from "node:wasi"; 5 | import { parentPort, Worker } from "node:worker_threads"; 6 | 7 | const require = createRequire(import.meta.url); 8 | 9 | const { instantiateNapiModuleSync, MessageHandler, getDefaultContext } = require("@napi-rs/wasm-runtime"); 10 | 11 | if (parentPort) { 12 | parentPort.on("message", (data) => { 13 | globalThis.onmessage({ data }); 14 | }); 15 | } 16 | 17 | Object.assign(globalThis, { 18 | self: globalThis, 19 | require, 20 | Worker, 21 | importScripts: function (f) { 22 | ;(0, eval)(fs.readFileSync(f, "utf8") + "//# sourceURL=" + f); 23 | }, 24 | postMessage: function (msg) { 25 | if (parentPort) { 26 | parentPort.postMessage(msg); 27 | } 28 | }, 29 | }); 30 | 31 | const emnapiContext = getDefaultContext(); 32 | 33 | const __rootDir = parse(process.cwd()).root; 34 | 35 | const handler = new MessageHandler({ 36 | onLoad({ wasmModule, wasmMemory }) { 37 | const wasi = new WASI({ 38 | version: 'preview1', 39 | env: process.env, 40 | preopens: { 41 | [__rootDir]: __rootDir, 42 | }, 43 | }); 44 | 45 | return instantiateNapiModuleSync(wasmModule, { 46 | childThread: true, 47 | wasi, 48 | context: emnapiContext, 49 | overwriteImports(importObject) { 50 | importObject.env = { 51 | ...importObject.env, 52 | ...importObject.napi, 53 | ...importObject.emnapi, 54 | memory: wasmMemory 55 | }; 56 | }, 57 | }); 58 | }, 59 | }); 60 | 61 | globalThis.onmessage = function (e) { 62 | handler.handle(e); 63 | }; 64 | --------------------------------------------------------------------------------