├── src ├── index.ts ├── typings.ts ├── constants.ts ├── __tests__ │ └── index.test.ts └── keepair.ts ├── tsup.config.ts ├── .prettierignore ├── tsconfig.json ├── .github ├── renovate.json └── workflows │ ├── ci.yml │ └── release.yml ├── vitest.config.ts ├── eslint.config.mjs ├── LICENSE ├── package.json ├── README.md ├── .gitignore └── pnpm-lock.yaml /src/index.ts: -------------------------------------------------------------------------------- 1 | export { KeePair } from './keepair'; 2 | export type { HashAlgorithm, Algorithm, AlgorithmOptions, KeyLike } from './typings'; 3 | -------------------------------------------------------------------------------- /tsup.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'tsup'; 2 | 3 | export default defineConfig({ 4 | clean: true, 5 | dts: true, 6 | entry: ['src/index.ts'], 7 | format: ['cjs', 'esm'], 8 | target: 'esnext', 9 | outDir: 'dist', 10 | }); 11 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | .changeset 3 | node_modules 4 | build 5 | dist 6 | 7 | .gitignore 8 | .prettierignore 9 | 10 | .env 11 | .env.* 12 | !.env.example 13 | 14 | # Ignore files for PNPM, NPM and YARN 15 | pnpm-lock.yaml 16 | package-lock.json 17 | yarn.lock 18 | 19 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/tsconfig", 3 | "extends": "@shahrad/tsconfig", 4 | "compilerOptions": { 5 | "baseUrl": ".", 6 | "paths": { 7 | "@/*": ["src/*"] 8 | } 9 | }, 10 | "include": ["**/*.ts"], 11 | "exclude": ["node_modules", "dist"] 12 | } 13 | -------------------------------------------------------------------------------- /.github/renovate.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://docs.renovatebot.com/renovate-schema.json", 3 | "extends": ["config:base"], 4 | "packageRules": [ 5 | { 6 | "groupName": "All Dependencies", 7 | "groupSlug": "minor-patch", 8 | "matchPackagePatterns": ["*"], 9 | "matchUpdateTypes": ["minor", "patch"] 10 | } 11 | ] 12 | } 13 | -------------------------------------------------------------------------------- /vitest.config.ts: -------------------------------------------------------------------------------- 1 | import { resolve } from 'node:path'; 2 | import { defineConfig } from 'vitest/config'; 3 | 4 | export default defineConfig({ 5 | test: { 6 | environment: 'node', 7 | testTimeout: 20000, 8 | globals: true, 9 | }, 10 | resolve: { 11 | alias: { 12 | '@': resolve(__dirname, 'src'), 13 | }, 14 | }, 15 | }); 16 | -------------------------------------------------------------------------------- /src/typings.ts: -------------------------------------------------------------------------------- 1 | import { ALGORITHM } from '@/constants'; 2 | 3 | export type HashAlgorithm = 'sha1' | 'sha256' | 'sha384' | 'sha512' | 'md5' | 'md5-sha1' | string; 4 | 5 | export type Algorithm = (typeof ALGORITHM)[number]['sid']; 6 | 7 | export type AlgorithmOptions = (typeof ALGORITHM)[number] & { 8 | sid: T; 9 | }; 10 | 11 | export type KeyLike = Buffer | string; 12 | -------------------------------------------------------------------------------- /eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import { defineConfig } from '@shahrad/eslint-config'; 2 | import globals from 'globals'; 3 | 4 | export default defineConfig( 5 | { 6 | ignores: ['dist/**'], 7 | }, 8 | 9 | { 10 | languageOptions: { 11 | ecmaVersion: 'latest', 12 | sourceType: 'module', 13 | globals: { 14 | ...globals.node, 15 | }, 16 | }, 17 | rules: { 18 | 'no-console': 'error', 19 | }, 20 | } 21 | ); 22 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2025 Shahrad Elahi 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 | -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: CI 2 | 3 | on: 4 | push: 5 | branches: [main] 6 | pull_request: 7 | 8 | jobs: 9 | format: 10 | runs-on: ubuntu-latest 11 | steps: 12 | - uses: actions/checkout@v4 13 | - uses: pnpm/action-setup@v4 14 | - uses: actions/setup-node@v4 15 | with: 16 | node-version: 22 17 | cache: 'pnpm' 18 | 19 | - run: pnpm install --frozen-lockfile 20 | - run: pnpm format:check 21 | 22 | lint: 23 | runs-on: ubuntu-latest 24 | steps: 25 | - uses: actions/checkout@v4 26 | - uses: pnpm/action-setup@v4 27 | - uses: actions/setup-node@v4 28 | with: 29 | node-version: 22 30 | cache: 'pnpm' 31 | 32 | - run: pnpm install --frozen-lockfile 33 | - run: pnpm lint 34 | 35 | test: 36 | runs-on: ubuntu-latest 37 | steps: 38 | - uses: actions/checkout@v4 39 | - uses: pnpm/action-setup@v4 40 | - uses: actions/setup-node@v4 41 | with: 42 | node-version: 22 43 | cache: 'pnpm' 44 | 45 | - run: pnpm install --frozen-lockfile 46 | - run: pnpm test 47 | -------------------------------------------------------------------------------- /src/constants.ts: -------------------------------------------------------------------------------- 1 | export const ALGORITHM = ([ 2 | { 3 | sid: 'rsa', 4 | name: 'rsa', 5 | modulusLength: 2048, 6 | publicEncodingType: 'spki', 7 | publicEncodingFormat: 'der', 8 | privateEncodingType: 'pkcs8', 9 | privateEncodingFormat: 'der', 10 | }, 11 | { 12 | sid: 'dsa', 13 | name: 'dsa', 14 | modulusLength: 2048, 15 | divisorLength: 256, 16 | publicEncodingType: 'spki', 17 | publicEncodingFormat: 'der', 18 | privateEncodingType: 'pkcs8', 19 | privateEncodingFormat: 'der', 20 | }, 21 | { 22 | sid: 'secp256k1', 23 | name: 'ec', 24 | namedCurve: 'secp256k1', 25 | publicEncodingType: 'spki', 26 | publicEncodingFormat: 'der', 27 | privateEncodingType: 'sec1', 28 | privateEncodingFormat: 'der', 29 | }, 30 | ]) satisfies { 31 | sid: string; 32 | name: 'rsa' | 'rsa-pss' | 'dsa' | 'ec' | 'ed25519' | 'ed448' | 'x25519' | 'x448'; 33 | namedCurve?: string; 34 | modulusLength?: number; 35 | divisorLength?: number; 36 | publicEncodingType: 'pkcs1' | 'spki' | 'pkcs8' | 'sec1'; 37 | publicEncodingFormat: 'pem' | 'der'; 38 | privateEncodingType: 'sec1' | 'pkcs1' | 'pkcs8'; 39 | privateEncodingFormat: 'pem' | 'der'; 40 | privateEncodingCipher?: string; 41 | privateEncodingPassphrase?: string; 42 | }[]; 43 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: Release Package 2 | 3 | on: 4 | push: 5 | tags: 6 | - v* 7 | 8 | jobs: 9 | create-github-release: 10 | permissions: 11 | contents: write 12 | runs-on: ubuntu-latest 13 | if: startsWith(github.ref, 'refs/tags/v') 14 | steps: 15 | - name: Calculate release name 16 | run: | 17 | GITHUB_REF=${{ github.ref }} 18 | RELEASE_NAME=${GITHUB_REF#"refs/tags/"} 19 | echo "RELEASE_NAME=${RELEASE_NAME}" >> $GITHUB_ENV 20 | 21 | - name: Publish release 22 | uses: actions/create-release@v1 23 | env: 24 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 25 | with: 26 | tag_name: ${{ github.ref }} 27 | release_name: ${{ env.RELEASE_NAME }} 28 | draft: false 29 | prerelease: false 30 | 31 | publish-npm-release: 32 | runs-on: ubuntu-latest 33 | permissions: 34 | contents: read 35 | id-token: write 36 | steps: 37 | - uses: actions/checkout@v4 38 | - uses: pnpm/action-setup@v4 39 | - uses: actions/setup-node@v4 40 | with: 41 | node-version: 22 42 | cache: 'pnpm' 43 | registry-url: 'https://registry.npmjs.org' 44 | 45 | - run: pnpm install --frozen-lockfile 46 | - run: npm publish --provenance --access public 47 | env: 48 | NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} 49 | -------------------------------------------------------------------------------- /src/__tests__/index.test.ts: -------------------------------------------------------------------------------- 1 | import { describe, expect, test } from 'vitest'; 2 | 3 | import { KeePair } from '@/index'; 4 | 5 | describe('KeePair', () => { 6 | test('Generate a KeePair with Secp256k1', () => { 7 | const pair = KeePair.generate('secp256k1'); 8 | 9 | expect(pair).toBeDefined(); 10 | 11 | expect(pair.privateKey).toBeDefined(); 12 | expect(pair.privateKey.byteLength).toBe(118); 13 | 14 | expect(pair.publicKey).toBeDefined(); 15 | expect(pair.publicKey.byteLength).toBe(88); 16 | }); 17 | 18 | test('Regenerate a Public Key from a Private Key', () => { 19 | const pair = KeePair.generate('secp256k1'); 20 | 21 | const pubKey = KeePair.fromPrivateKey(pair.privateKey, 'secp256k1'); 22 | 23 | expect(pair.publicKey.toString()).toBe(pubKey.publicKey.toString()); 24 | expect(pair.privateKey.compare(pubKey.privateKey)).toBe(0); 25 | }); 26 | 27 | test('Sign a Message', () => { 28 | const pair = KeePair.generate('secp256k1'); 29 | 30 | const message = 'Hello World!'; 31 | 32 | const signature = pair.sign(message, 'sha256'); 33 | 34 | expect(signature).toBeDefined(); 35 | expect(signature.byteLength).toBeGreaterThanOrEqual(70); 36 | }); 37 | 38 | test('Verify a Signature', () => { 39 | const pair = KeePair.generate('secp256k1'); 40 | 41 | const message = 'Hello World!'; 42 | 43 | const signature = pair.sign(message, 'sha256'); 44 | 45 | const verified = pair.verify(message, signature, 'sha256'); 46 | 47 | expect(verified).toBe(true); 48 | }); 49 | }); 50 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "kee-pair", 3 | "version": "2.0.0", 4 | "description": "Fast and secure keypair generation and signing for Node.js", 5 | "keywords": [ 6 | "keypair", 7 | "sign", 8 | "verify", 9 | "signature", 10 | "keccak", 11 | "rsa", 12 | "keccak256" 13 | ], 14 | "homepage": "https://github.com/shahradelahi/kee-pair", 15 | "repository": "github:shahradelahi/kee-pair", 16 | "license": "MIT", 17 | "author": "Shahrad Elahi (https://github.com/shahradelahi)", 18 | "type": "module", 19 | "exports": { 20 | ".": { 21 | "import": "./dist/index.js", 22 | "default": "./dist/index.cjs" 23 | } 24 | }, 25 | "main": "dist/index.js", 26 | "types": "dist/index.d.ts", 27 | "files": [ 28 | "dist/**", 29 | "!**/*.d.cts" 30 | ], 31 | "scripts": { 32 | "build": "tsup", 33 | "dev": "tsup --watch", 34 | "format": "prettier --write .", 35 | "format:check": "prettier --check .", 36 | "lint": "pnpm typecheck && eslint .", 37 | "lint:fix": "eslint --fix .", 38 | "prepublishOnly": "pnpm lint && pnpm build && pnpm format:check && pnpm test", 39 | "test": "vitest --run", 40 | "typecheck": "tsc --noEmit" 41 | }, 42 | "prettier": "@shahrad/prettier-config", 43 | "devDependencies": { 44 | "@shahrad/eslint-config": "^1.0.0", 45 | "@shahrad/prettier-config": "^1.1.0", 46 | "@shahrad/tsconfig": "^1.1.0", 47 | "@types/node": "22.10.9", 48 | "eslint": "^9.18.0", 49 | "globals": "^15.14.0", 50 | "prettier": "^3.4.2", 51 | "tsup": "^8.3.5", 52 | "typescript": "^5.7.3", 53 | "vitest": "^3.0.4" 54 | }, 55 | "packageManager": "pnpm@9.15.4" 56 | } 57 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # kee-pair 2 | 3 | [![CI](https://github.com/shahradelahi/kee-pair/actions/workflows/ci.yml/badge.svg)](https://github.com/shahradelahi/kee-pair/actions/workflows/ci.yml) 4 | [![NPM Version](https://img.shields.io/npm/v/kee-pair.svg)](https://www.npmjs.com/package/kee-pair) 5 | [![MIT License](https://img.shields.io/badge/License-MIT-blue.svg?style=flat)](/LICENSE) 6 | [![Install Size](https://packagephobia.com/badge?p=kee-pair)](https://packagephobia.com/result?p=kee-pair) 7 | 8 | A TypeScript library for generating, managing, signing, and verifying asymmetric key pairs. 9 | 10 | --- 11 | 12 | - [Installation](#-installation) 13 | - [Usage](#-usage) 14 | - [Documentation](#-documentation) 15 | - [Contributing](#-contributing) 16 | - [License](#license) 17 | 18 | ## 📦 Installation 19 | 20 | ```bash 21 | npm i kee-pair 22 | ``` 23 | 24 | ## 📖 Usage 25 | 26 | ```typescript 27 | import { KeePair } from 'kee-pair'; 28 | 29 | // Generate a new Secp256k1 key pair 30 | const keyPair = KeePair.generate('secp256k1'); 31 | 32 | // Sign some data 33 | const message = 'Hello, KeePair!'; 34 | const signature = keyPair.sign(message, 'sha256'); 35 | 36 | // Verify the signature 37 | const isValid = keyPair.verify(message, signature, 'sha256'); 38 | console.log('Signature valid:', isValid); 39 | 40 | // Restore key pair from an existing private key 41 | const restored = KeePair.fromPrivateKey(keyPair.privateKey, 'secp256k1'); 42 | 43 | console.log( 44 | 'Public keys match:', 45 | restored.publicKey.equals(keyPair.publicKey) 46 | ); 47 | ``` 48 | 49 | ## 📚 Documentation 50 | 51 | For all configuration options, please see [the API docs](https://www.jsdocs.io/package/kee-pair). 52 | 53 | ## 🤝 Contributing 54 | 55 | Want to contribute? Awesome! To show your support is to star the project, or to raise issues on [GitHub](https://github.com/shahradelahi/kee-pair). 56 | 57 | Thanks again for your support, it is much appreciated! 🙏 58 | 59 | ## License 60 | 61 | [MIT](/LICENSE) © [Shahrad Elahi](https://github.com/shahradelahi) and [contributors](https://github.com/shahradelahi/kee-pair/graphs/contributors). 62 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ### JetBrains template 2 | # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider 3 | # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 4 | 5 | # User-specific stuff 6 | .idea/**/workspace.xml 7 | .idea/**/tasks.xml 8 | .idea/**/usage.statistics.xml 9 | .idea/**/dictionaries 10 | .idea/**/shelf 11 | 12 | # AWS User-specific 13 | .idea/**/aws.xml 14 | 15 | # Generated files 16 | .idea/**/contentModel.xml 17 | 18 | # Sensitive or high-churn files 19 | .idea/**/dataSources/ 20 | .idea/**/dataSources.ids 21 | .idea/**/dataSources.local.xml 22 | .idea/**/sqlDataSources.xml 23 | .idea/**/dynamic.xml 24 | .idea/**/uiDesigner.xml 25 | .idea/**/dbnavigator.xml 26 | 27 | # Gradle 28 | .idea/**/gradle.xml 29 | .idea/**/libraries 30 | 31 | # Gradle and Maven with auto-import 32 | # When using Gradle or Maven with auto-import, you should exclude module files, 33 | # since they will be recreated, and may cause churn. Uncomment if using 34 | # auto-import. 35 | # .idea/artifacts 36 | # .idea/compiler.xml 37 | # .idea/jarRepositories.xml 38 | # .idea/modules.xml 39 | # .idea/*.iml 40 | # .idea/modules 41 | # *.iml 42 | # *.ipr 43 | 44 | # CMake 45 | cmake-build-*/ 46 | 47 | # Mongo Explorer plugin 48 | .idea/**/mongoSettings.xml 49 | 50 | # File-based project format 51 | *.iws 52 | 53 | # IntelliJ 54 | out/ 55 | 56 | # mpeltonen/sbt-idea plugin 57 | .idea_modules/ 58 | 59 | # JIRA plugin 60 | atlassian-ide-plugin.xml 61 | 62 | # Cursive Clojure plugin 63 | .idea/replstate.xml 64 | 65 | # SonarLint plugin 66 | .idea/sonarlint/ 67 | 68 | # Crashlytics plugin (for Android Studio and IntelliJ) 69 | com_crashlytics_export_strings.xml 70 | crashlytics.properties 71 | crashlytics-build.properties 72 | fabric.properties 73 | 74 | # Editor-based Rest Client 75 | .idea/httpRequests 76 | 77 | # Android studio 3.1+ serialized cache file 78 | .idea/caches/build_file_checksums.ser 79 | 80 | ### Node template 81 | # Logs 82 | logs 83 | *.log 84 | npm-debug.log* 85 | yarn-debug.log* 86 | yarn-error.log* 87 | lerna-debug.log* 88 | .pnpm-debug.log* 89 | 90 | # Diagnostic reports (https://nodejs.org/api/report.html) 91 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 92 | 93 | # Runtime data 94 | pids 95 | *.pid 96 | *.seed 97 | *.pid.lock 98 | 99 | # Directory for instrumented libs generated by jscoverage/JSCover 100 | lib-cov 101 | 102 | # Coverage directory used by tools like istanbul 103 | coverage 104 | *.lcov 105 | 106 | # nyc test coverage 107 | .nyc_output 108 | 109 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 110 | .grunt 111 | 112 | # Bower dependency directory (https://bower.io/) 113 | bower_components 114 | 115 | # node-waf configuration 116 | .lock-wscript 117 | 118 | # Compiled binary addons (https://nodejs.org/api/addons.html) 119 | build/Release 120 | 121 | # Dependency directories 122 | node_modules/ 123 | jspm_packages/ 124 | 125 | # Snowpack dependency directory (https://snowpack.dev/) 126 | web_modules/ 127 | 128 | # TypeScript cache 129 | *.tsbuildinfo 130 | 131 | # Optional npm cache directory 132 | .npm 133 | 134 | # Optional eslint cache 135 | .eslintcache 136 | 137 | # Optional stylelint cache 138 | .stylelintcache 139 | 140 | # Microbundle cache 141 | .rpt2_cache/ 142 | .rts2_cache_cjs/ 143 | .rts2_cache_es/ 144 | .rts2_cache_umd/ 145 | 146 | # Optional REPL history 147 | .node_repl_history 148 | 149 | # Output of 'npm pack' 150 | *.tgz 151 | 152 | # Yarn Integrity file 153 | .yarn-integrity 154 | 155 | # dotenv environment variable files 156 | .env 157 | .env.development.local 158 | .env.test.local 159 | .env.production.local 160 | .env.local 161 | 162 | # parcel-bundler cache (https://parceljs.org/) 163 | .cache 164 | .parcel-cache 165 | 166 | # Next.js build output 167 | .next 168 | out 169 | 170 | # Nuxt.js build / generate output 171 | .nuxt 172 | dist 173 | 174 | # Gatsby files 175 | .cache/ 176 | # Comment in the public line in if your project uses Gatsby and not Next.js 177 | # https://nextjs.org/blog/next-9-1#public-directory-support 178 | # public 179 | 180 | # vuepress build output 181 | .vuepress/dist 182 | 183 | # vuepress v2.x temp and cache directory 184 | .temp 185 | .cache 186 | 187 | # Docusaurus cache and generated files 188 | .docusaurus 189 | 190 | # Serverless directories 191 | .serverless/ 192 | 193 | # FuseBox cache 194 | .fusebox/ 195 | 196 | # DynamoDB Local files 197 | .dynamodb/ 198 | 199 | # TernJS port file 200 | .tern-port 201 | 202 | # Stores VSCode versions used for testing VSCode extensions 203 | .vscode-test 204 | 205 | # yarn v2 206 | .yarn/cache 207 | .yarn/unplugged 208 | .yarn/build-state.yml 209 | .yarn/install-state.gz 210 | .pnp.* 211 | 212 | -------------------------------------------------------------------------------- /src/keepair.ts: -------------------------------------------------------------------------------- 1 | import * as crypto from 'node:crypto'; 2 | import type { KeyObject } from 'node:crypto'; 3 | 4 | import { ALGORITHM } from '@/constants'; 5 | import type { Algorithm, AlgorithmOptions, HashAlgorithm, KeyLike } from '@/typings'; 6 | 7 | /** 8 | * Keystore for asymmetric key pairs, supporting key generation, signing, and verification. 9 | * 10 | * @example 11 | * ```ts 12 | * import { KeePair } from 'kee-pair'; 13 | * 14 | * // Generate a new Secp256k1 key pair 15 | * const keyPair = KeePair.generate('secp256k1'); 16 | * 17 | * // Sign some data 18 | * const message = 'Hello, World!'; 19 | * const signature = keyPair.sign(message, 'sha256'); 20 | * 21 | * // Verify the signature 22 | * const isValid = keyPair.verify(message, signature, 'sha256'); 23 | * console.log('Signature valid:', isValid); 24 | * ``` 25 | */ 26 | export class KeePair { 27 | readonly #pubObject: KeyObject; 28 | readonly #privObject: KeyObject; 29 | 30 | /** 31 | * DER or PEM encoded public key buffer. 32 | */ 33 | readonly publicKey: Buffer; 34 | 35 | /** 36 | * DER or PEM encoded private key buffer. 37 | */ 38 | readonly privateKey: Buffer; 39 | 40 | /** 41 | * Algorithm options including encoding types and formats. 42 | */ 43 | readonly algorithm: AlgorithmOptions; 44 | 45 | /** 46 | * Creates an instance of KeePair from given key material. 47 | * 48 | * @param publicKey - Public key in Buffer or hex string form. 49 | * @param privateKey - Private key in Buffer or hex string form. 50 | * @param algorithm - Algorithm options defining encoding and format. 51 | */ 52 | constructor(publicKey: KeyLike, privateKey: KeyLike, algorithm: AlgorithmOptions) { 53 | this.algorithm = algorithm; 54 | 55 | this.publicKey = typeof publicKey === 'string' ? Buffer.from(publicKey, 'hex') : publicKey; 56 | this.privateKey = typeof privateKey === 'string' ? Buffer.from(privateKey, 'hex') : privateKey; 57 | 58 | this.#pubObject = crypto.createPublicKey({ 59 | key: this.publicKey, 60 | type: this.algorithm.publicEncodingType, 61 | format: this.algorithm.publicEncodingFormat, 62 | }); 63 | 64 | this.#privObject = crypto.createPrivateKey({ 65 | key: this.privateKey, 66 | type: this.algorithm.privateEncodingType, 67 | format: this.algorithm.privateEncodingFormat, 68 | }); 69 | } 70 | 71 | /** 72 | * Generates a new asymmetric key pair for the specified algorithm. 73 | * 74 | * @param algorithm - The identifier of the algorithm to use (e.g., 'rsa', 'secp256k1'). 75 | * @param options - Optional overrides for algorithm parameters. 76 | * @returns A new {@link KeePair} instance containing generated keys. 77 | * 78 | * @example 79 | * ```ts 80 | * const rsaPair = KeePair.generate('rsa', { modulusLength: 3072 }); 81 | * console.log(rsaPair.publicKey.toString('hex')); 82 | * ``` 83 | */ 84 | static generate( 85 | algorithm: T, 86 | options: Partial> = {} 87 | ): KeePair { 88 | const presetOpts = findAlgorithmPreset(algorithm); 89 | const opts = { ...presetOpts, ...options } as AlgorithmOptions; 90 | 91 | const { publicKey, privateKey } = crypto.generateKeyPairSync(presetOpts.name as any, opts); 92 | 93 | return new KeePair( 94 | publicKey.export({ 95 | type: opts.publicEncodingType, 96 | format: opts.publicEncodingFormat, 97 | }), 98 | privateKey.export({ 99 | type: opts.privateEncodingType, 100 | format: opts.privateEncodingFormat, 101 | }), 102 | opts 103 | ) as KeePair; 104 | } 105 | 106 | /** 107 | * Reconstructs a key pair from an existing private key, deriving the public key. 108 | * 109 | * @param privateKey - Private key in Buffer or hex string form. 110 | * @param algorithm - The identifier of the algorithm used to generate the key. 111 | * @param options - Optional overrides for algorithm parameters. 112 | * @returns A new {@link KeePair} instance with the same key pair. 113 | * 114 | * @example 115 | * ```ts 116 | * const backupPrivate = existingPair.privateKey; 117 | * const restored = KeePair.fromPrivateKey(backupPrivate, 'secp256k1'); 118 | * console.assert( 119 | * restored.publicKey.equals(existingPair.publicKey) 120 | * ); 121 | * ``` 122 | */ 123 | static fromPrivateKey( 124 | privateKey: KeyLike, 125 | algorithm: T, 126 | options: Partial> = {} 127 | ): KeePair { 128 | const presetOpt = findAlgorithmPreset(algorithm); 129 | const opts = { ...presetOpt, ...options } as AlgorithmOptions; 130 | 131 | const key = crypto.createPrivateKey({ 132 | key: typeof privateKey === 'string' ? Buffer.from(privateKey, 'hex') : privateKey, 133 | type: opts.privateEncodingType, 134 | format: opts.privateEncodingFormat, 135 | }); 136 | 137 | const publicKey = crypto.createPublicKey(key).export({ 138 | type: opts.publicEncodingType, 139 | format: opts.publicEncodingFormat, 140 | }); 141 | 142 | return new KeePair(publicKey, privateKey, opts) as KeePair; 143 | } 144 | 145 | /** 146 | * Signs the provided data with the private key using the specified hash algorithm. 147 | * 148 | * @param data - The string data to sign. 149 | * @param hashAlgorithm - Hash algorithm identifier (e.g., 'sha256'). 150 | * @returns A Buffer containing the signature. 151 | * 152 | * @example 153 | * ```ts 154 | * const sig = keyPair.sign('payload', 'sha512'); 155 | * ``` 156 | */ 157 | sign(data: string, hashAlgorithm: HashAlgorithm): Buffer { 158 | return crypto.createSign(hashAlgorithm.toLowerCase()).update(data).sign(this.#privObject); 159 | } 160 | 161 | /** 162 | * Verifies a signature against the provided data and public key. 163 | * 164 | * @param data - The original data that was signed. 165 | * @param signature - The signature Buffer to verify. 166 | * @param hashAlgorithm - Hash algorithm identifier used during signing. 167 | * @returns True if the signature is valid, false otherwise. 168 | * 169 | * @example 170 | * ```ts 171 | * const valid = keyPair.verify('payload', signature, 'sha512'); 172 | * ``` 173 | */ 174 | verify(data: string, signature: Buffer, hashAlgorithm: HashAlgorithm): boolean { 175 | return crypto 176 | .createVerify(hashAlgorithm.toLowerCase()) 177 | .update(data) 178 | .verify(this.#pubObject, signature); 179 | } 180 | } 181 | 182 | /** 183 | * Retrieves preset algorithm options based on a string identifier. 184 | * 185 | * @internal 186 | * @param algorithm - The algorithm identifier (case-insensitive). 187 | * @throws Will throw an error if the algorithm is not supported. 188 | */ 189 | function findAlgorithmPreset(algorithm: T): AlgorithmOptions { 190 | const algo = ALGORITHM.find((a) => a.sid === algorithm.toLowerCase()); 191 | 192 | if (!algo) { 193 | throw new Error(`Algorithm "${algorithm}" is not supported.`); 194 | } 195 | 196 | return algo; 197 | } 198 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | importers: 8 | 9 | .: 10 | devDependencies: 11 | '@shahrad/eslint-config': 12 | specifier: ^1.0.0 13 | version: 1.0.0(typescript@5.7.3) 14 | '@shahrad/prettier-config': 15 | specifier: ^1.1.0 16 | version: 1.1.0(prettier@3.4.2) 17 | '@shahrad/tsconfig': 18 | specifier: ^1.1.0 19 | version: 1.1.0 20 | '@types/node': 21 | specifier: 22.10.9 22 | version: 22.10.9 23 | eslint: 24 | specifier: ^9.18.0 25 | version: 9.18.0 26 | globals: 27 | specifier: ^15.14.0 28 | version: 15.14.0 29 | prettier: 30 | specifier: ^3.4.2 31 | version: 3.4.2 32 | tsup: 33 | specifier: ^8.3.5 34 | version: 8.3.5(postcss@8.5.1)(typescript@5.7.3) 35 | typescript: 36 | specifier: ^5.7.3 37 | version: 5.7.3 38 | vitest: 39 | specifier: ^3.0.4 40 | version: 3.0.4(@types/node@22.10.9) 41 | 42 | packages: 43 | 44 | '@babel/code-frame@7.26.2': 45 | resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} 46 | engines: {node: '>=6.9.0'} 47 | 48 | '@babel/generator@7.26.5': 49 | resolution: {integrity: sha512-2caSP6fN9I7HOe6nqhtft7V4g7/V/gfDsC3Ag4W7kEzzvRGKqiv0pu0HogPiZ3KaVSoNDhUws6IJjDjpfmYIXw==} 50 | engines: {node: '>=6.9.0'} 51 | 52 | '@babel/helper-string-parser@7.25.9': 53 | resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} 54 | engines: {node: '>=6.9.0'} 55 | 56 | '@babel/helper-validator-identifier@7.25.9': 57 | resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} 58 | engines: {node: '>=6.9.0'} 59 | 60 | '@babel/parser@7.26.5': 61 | resolution: {integrity: sha512-SRJ4jYmXRqV1/Xc+TIVG84WjHBXKlxO9sHQnA2Pf12QQEAp1LOh6kDzNHXcUnbH1QI0FDoPPVOt+vyUDucxpaw==} 62 | engines: {node: '>=6.0.0'} 63 | hasBin: true 64 | 65 | '@babel/template@7.25.9': 66 | resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==} 67 | engines: {node: '>=6.9.0'} 68 | 69 | '@babel/traverse@7.26.5': 70 | resolution: {integrity: sha512-rkOSPOw+AXbgtwUga3U4u8RpoK9FEFWBNAlTpcnkLFjL5CT+oyHNuUUC/xx6XefEJ16r38r8Bc/lfp6rYuHeJQ==} 71 | engines: {node: '>=6.9.0'} 72 | 73 | '@babel/types@7.26.5': 74 | resolution: {integrity: sha512-L6mZmwFDK6Cjh1nRCLXpa6no13ZIioJDz7mdkzHv399pThrTa/k0nUlNaenOeh2kWu/iaOQYElEpKPUswUa9Vg==} 75 | engines: {node: '>=6.9.0'} 76 | 77 | '@esbuild/aix-ppc64@0.24.2': 78 | resolution: {integrity: sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==} 79 | engines: {node: '>=18'} 80 | cpu: [ppc64] 81 | os: [aix] 82 | 83 | '@esbuild/android-arm64@0.24.2': 84 | resolution: {integrity: sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==} 85 | engines: {node: '>=18'} 86 | cpu: [arm64] 87 | os: [android] 88 | 89 | '@esbuild/android-arm@0.24.2': 90 | resolution: {integrity: sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==} 91 | engines: {node: '>=18'} 92 | cpu: [arm] 93 | os: [android] 94 | 95 | '@esbuild/android-x64@0.24.2': 96 | resolution: {integrity: sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==} 97 | engines: {node: '>=18'} 98 | cpu: [x64] 99 | os: [android] 100 | 101 | '@esbuild/darwin-arm64@0.24.2': 102 | resolution: {integrity: sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==} 103 | engines: {node: '>=18'} 104 | cpu: [arm64] 105 | os: [darwin] 106 | 107 | '@esbuild/darwin-x64@0.24.2': 108 | resolution: {integrity: sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==} 109 | engines: {node: '>=18'} 110 | cpu: [x64] 111 | os: [darwin] 112 | 113 | '@esbuild/freebsd-arm64@0.24.2': 114 | resolution: {integrity: sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==} 115 | engines: {node: '>=18'} 116 | cpu: [arm64] 117 | os: [freebsd] 118 | 119 | '@esbuild/freebsd-x64@0.24.2': 120 | resolution: {integrity: sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==} 121 | engines: {node: '>=18'} 122 | cpu: [x64] 123 | os: [freebsd] 124 | 125 | '@esbuild/linux-arm64@0.24.2': 126 | resolution: {integrity: sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==} 127 | engines: {node: '>=18'} 128 | cpu: [arm64] 129 | os: [linux] 130 | 131 | '@esbuild/linux-arm@0.24.2': 132 | resolution: {integrity: sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==} 133 | engines: {node: '>=18'} 134 | cpu: [arm] 135 | os: [linux] 136 | 137 | '@esbuild/linux-ia32@0.24.2': 138 | resolution: {integrity: sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==} 139 | engines: {node: '>=18'} 140 | cpu: [ia32] 141 | os: [linux] 142 | 143 | '@esbuild/linux-loong64@0.24.2': 144 | resolution: {integrity: sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==} 145 | engines: {node: '>=18'} 146 | cpu: [loong64] 147 | os: [linux] 148 | 149 | '@esbuild/linux-mips64el@0.24.2': 150 | resolution: {integrity: sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==} 151 | engines: {node: '>=18'} 152 | cpu: [mips64el] 153 | os: [linux] 154 | 155 | '@esbuild/linux-ppc64@0.24.2': 156 | resolution: {integrity: sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==} 157 | engines: {node: '>=18'} 158 | cpu: [ppc64] 159 | os: [linux] 160 | 161 | '@esbuild/linux-riscv64@0.24.2': 162 | resolution: {integrity: sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==} 163 | engines: {node: '>=18'} 164 | cpu: [riscv64] 165 | os: [linux] 166 | 167 | '@esbuild/linux-s390x@0.24.2': 168 | resolution: {integrity: sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==} 169 | engines: {node: '>=18'} 170 | cpu: [s390x] 171 | os: [linux] 172 | 173 | '@esbuild/linux-x64@0.24.2': 174 | resolution: {integrity: sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==} 175 | engines: {node: '>=18'} 176 | cpu: [x64] 177 | os: [linux] 178 | 179 | '@esbuild/netbsd-arm64@0.24.2': 180 | resolution: {integrity: sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==} 181 | engines: {node: '>=18'} 182 | cpu: [arm64] 183 | os: [netbsd] 184 | 185 | '@esbuild/netbsd-x64@0.24.2': 186 | resolution: {integrity: sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==} 187 | engines: {node: '>=18'} 188 | cpu: [x64] 189 | os: [netbsd] 190 | 191 | '@esbuild/openbsd-arm64@0.24.2': 192 | resolution: {integrity: sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==} 193 | engines: {node: '>=18'} 194 | cpu: [arm64] 195 | os: [openbsd] 196 | 197 | '@esbuild/openbsd-x64@0.24.2': 198 | resolution: {integrity: sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==} 199 | engines: {node: '>=18'} 200 | cpu: [x64] 201 | os: [openbsd] 202 | 203 | '@esbuild/sunos-x64@0.24.2': 204 | resolution: {integrity: sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==} 205 | engines: {node: '>=18'} 206 | cpu: [x64] 207 | os: [sunos] 208 | 209 | '@esbuild/win32-arm64@0.24.2': 210 | resolution: {integrity: sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==} 211 | engines: {node: '>=18'} 212 | cpu: [arm64] 213 | os: [win32] 214 | 215 | '@esbuild/win32-ia32@0.24.2': 216 | resolution: {integrity: sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==} 217 | engines: {node: '>=18'} 218 | cpu: [ia32] 219 | os: [win32] 220 | 221 | '@esbuild/win32-x64@0.24.2': 222 | resolution: {integrity: sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==} 223 | engines: {node: '>=18'} 224 | cpu: [x64] 225 | os: [win32] 226 | 227 | '@eslint-community/eslint-utils@4.4.1': 228 | resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} 229 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 230 | peerDependencies: 231 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 232 | 233 | '@eslint-community/regexpp@4.12.1': 234 | resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} 235 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 236 | 237 | '@eslint/config-array@0.19.1': 238 | resolution: {integrity: sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA==} 239 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 240 | 241 | '@eslint/core@0.10.0': 242 | resolution: {integrity: sha512-gFHJ+xBOo4G3WRlR1e/3G8A6/KZAH6zcE/hkLRCZTi/B9avAG365QhFA8uOGzTMqgTghpn7/fSnscW++dpMSAw==} 243 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 244 | 245 | '@eslint/eslintrc@3.2.0': 246 | resolution: {integrity: sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==} 247 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 248 | 249 | '@eslint/js@9.18.0': 250 | resolution: {integrity: sha512-fK6L7rxcq6/z+AaQMtiFTkvbHkBLNlwyRxHpKawP0x3u9+NC6MQTnFW+AdpwC6gfHTW0051cokQgtTN2FqlxQA==} 251 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 252 | 253 | '@eslint/object-schema@2.1.5': 254 | resolution: {integrity: sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ==} 255 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 256 | 257 | '@eslint/plugin-kit@0.2.5': 258 | resolution: {integrity: sha512-lB05FkqEdUg2AA0xEbUz0SnkXT1LcCTa438W4IWTUh4hdOnVbQyOJ81OrDXsJk/LSiJHubgGEFoR5EHq1NsH1A==} 259 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 260 | 261 | '@humanfs/core@0.19.1': 262 | resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} 263 | engines: {node: '>=18.18.0'} 264 | 265 | '@humanfs/node@0.16.6': 266 | resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} 267 | engines: {node: '>=18.18.0'} 268 | 269 | '@humanwhocodes/module-importer@1.0.1': 270 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} 271 | engines: {node: '>=12.22'} 272 | 273 | '@humanwhocodes/retry@0.3.1': 274 | resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} 275 | engines: {node: '>=18.18'} 276 | 277 | '@humanwhocodes/retry@0.4.1': 278 | resolution: {integrity: sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==} 279 | engines: {node: '>=18.18'} 280 | 281 | '@ianvs/prettier-plugin-sort-imports@4.4.1': 282 | resolution: {integrity: sha512-F0/Hrcfpy8WuxlQyAWJTEren/uxKhYonOGY4OyWmwRdeTvkh9mMSCxowZLjNkhwi/2ipqCgtXwwOk7tW0mWXkA==} 283 | peerDependencies: 284 | '@vue/compiler-sfc': 2.7.x || 3.x 285 | prettier: 2 || 3 286 | peerDependenciesMeta: 287 | '@vue/compiler-sfc': 288 | optional: true 289 | 290 | '@isaacs/cliui@8.0.2': 291 | resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} 292 | engines: {node: '>=12'} 293 | 294 | '@jridgewell/gen-mapping@0.3.8': 295 | resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} 296 | engines: {node: '>=6.0.0'} 297 | 298 | '@jridgewell/resolve-uri@3.1.2': 299 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 300 | engines: {node: '>=6.0.0'} 301 | 302 | '@jridgewell/set-array@1.2.1': 303 | resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} 304 | engines: {node: '>=6.0.0'} 305 | 306 | '@jridgewell/sourcemap-codec@1.5.0': 307 | resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} 308 | 309 | '@jridgewell/trace-mapping@0.3.25': 310 | resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} 311 | 312 | '@nodelib/fs.scandir@2.1.5': 313 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 314 | engines: {node: '>= 8'} 315 | 316 | '@nodelib/fs.stat@2.0.5': 317 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 318 | engines: {node: '>= 8'} 319 | 320 | '@nodelib/fs.walk@1.2.8': 321 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 322 | engines: {node: '>= 8'} 323 | 324 | '@pkgjs/parseargs@0.11.0': 325 | resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} 326 | engines: {node: '>=14'} 327 | 328 | '@pkgr/core@0.1.1': 329 | resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} 330 | engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} 331 | 332 | '@rollup/rollup-android-arm-eabi@4.31.0': 333 | resolution: {integrity: sha512-9NrR4033uCbUBRgvLcBrJofa2KY9DzxL2UKZ1/4xA/mnTNyhZCWBuD8X3tPm1n4KxcgaraOYgrFKSgwjASfmlA==} 334 | cpu: [arm] 335 | os: [android] 336 | 337 | '@rollup/rollup-android-arm64@4.31.0': 338 | resolution: {integrity: sha512-iBbODqT86YBFHajxxF8ebj2hwKm1k8PTBQSojSt3d1FFt1gN+xf4CowE47iN0vOSdnd+5ierMHBbu/rHc7nq5g==} 339 | cpu: [arm64] 340 | os: [android] 341 | 342 | '@rollup/rollup-darwin-arm64@4.31.0': 343 | resolution: {integrity: sha512-WHIZfXgVBX30SWuTMhlHPXTyN20AXrLH4TEeH/D0Bolvx9PjgZnn4H677PlSGvU6MKNsjCQJYczkpvBbrBnG6g==} 344 | cpu: [arm64] 345 | os: [darwin] 346 | 347 | '@rollup/rollup-darwin-x64@4.31.0': 348 | resolution: {integrity: sha512-hrWL7uQacTEF8gdrQAqcDy9xllQ0w0zuL1wk1HV8wKGSGbKPVjVUv/DEwT2+Asabf8Dh/As+IvfdU+H8hhzrQQ==} 349 | cpu: [x64] 350 | os: [darwin] 351 | 352 | '@rollup/rollup-freebsd-arm64@4.31.0': 353 | resolution: {integrity: sha512-S2oCsZ4hJviG1QjPY1h6sVJLBI6ekBeAEssYKad1soRFv3SocsQCzX6cwnk6fID6UQQACTjeIMB+hyYrFacRew==} 354 | cpu: [arm64] 355 | os: [freebsd] 356 | 357 | '@rollup/rollup-freebsd-x64@4.31.0': 358 | resolution: {integrity: sha512-pCANqpynRS4Jirn4IKZH4tnm2+2CqCNLKD7gAdEjzdLGbH1iO0zouHz4mxqg0uEMpO030ejJ0aA6e1PJo2xrPA==} 359 | cpu: [x64] 360 | os: [freebsd] 361 | 362 | '@rollup/rollup-linux-arm-gnueabihf@4.31.0': 363 | resolution: {integrity: sha512-0O8ViX+QcBd3ZmGlcFTnYXZKGbFu09EhgD27tgTdGnkcYXLat4KIsBBQeKLR2xZDCXdIBAlWLkiXE1+rJpCxFw==} 364 | cpu: [arm] 365 | os: [linux] 366 | 367 | '@rollup/rollup-linux-arm-musleabihf@4.31.0': 368 | resolution: {integrity: sha512-w5IzG0wTVv7B0/SwDnMYmbr2uERQp999q8FMkKG1I+j8hpPX2BYFjWe69xbhbP6J9h2gId/7ogesl9hwblFwwg==} 369 | cpu: [arm] 370 | os: [linux] 371 | 372 | '@rollup/rollup-linux-arm64-gnu@4.31.0': 373 | resolution: {integrity: sha512-JyFFshbN5xwy6fulZ8B/8qOqENRmDdEkcIMF0Zz+RsfamEW+Zabl5jAb0IozP/8UKnJ7g2FtZZPEUIAlUSX8cA==} 374 | cpu: [arm64] 375 | os: [linux] 376 | 377 | '@rollup/rollup-linux-arm64-musl@4.31.0': 378 | resolution: {integrity: sha512-kpQXQ0UPFeMPmPYksiBL9WS/BDiQEjRGMfklVIsA0Sng347H8W2iexch+IEwaR7OVSKtr2ZFxggt11zVIlZ25g==} 379 | cpu: [arm64] 380 | os: [linux] 381 | 382 | '@rollup/rollup-linux-loongarch64-gnu@4.31.0': 383 | resolution: {integrity: sha512-pMlxLjt60iQTzt9iBb3jZphFIl55a70wexvo8p+vVFK+7ifTRookdoXX3bOsRdmfD+OKnMozKO6XM4zR0sHRrQ==} 384 | cpu: [loong64] 385 | os: [linux] 386 | 387 | '@rollup/rollup-linux-powerpc64le-gnu@4.31.0': 388 | resolution: {integrity: sha512-D7TXT7I/uKEuWiRkEFbed1UUYZwcJDU4vZQdPTcepK7ecPhzKOYk4Er2YR4uHKme4qDeIh6N3XrLfpuM7vzRWQ==} 389 | cpu: [ppc64] 390 | os: [linux] 391 | 392 | '@rollup/rollup-linux-riscv64-gnu@4.31.0': 393 | resolution: {integrity: sha512-wal2Tc8O5lMBtoePLBYRKj2CImUCJ4UNGJlLwspx7QApYny7K1cUYlzQ/4IGQBLmm+y0RS7dwc3TDO/pmcneTw==} 394 | cpu: [riscv64] 395 | os: [linux] 396 | 397 | '@rollup/rollup-linux-s390x-gnu@4.31.0': 398 | resolution: {integrity: sha512-O1o5EUI0+RRMkK9wiTVpk2tyzXdXefHtRTIjBbmFREmNMy7pFeYXCFGbhKFwISA3UOExlo5GGUuuj3oMKdK6JQ==} 399 | cpu: [s390x] 400 | os: [linux] 401 | 402 | '@rollup/rollup-linux-x64-gnu@4.31.0': 403 | resolution: {integrity: sha512-zSoHl356vKnNxwOWnLd60ixHNPRBglxpv2g7q0Cd3Pmr561gf0HiAcUBRL3S1vPqRC17Zo2CX/9cPkqTIiai1g==} 404 | cpu: [x64] 405 | os: [linux] 406 | 407 | '@rollup/rollup-linux-x64-musl@4.31.0': 408 | resolution: {integrity: sha512-ypB/HMtcSGhKUQNiFwqgdclWNRrAYDH8iMYH4etw/ZlGwiTVxBz2tDrGRrPlfZu6QjXwtd+C3Zib5pFqID97ZA==} 409 | cpu: [x64] 410 | os: [linux] 411 | 412 | '@rollup/rollup-win32-arm64-msvc@4.31.0': 413 | resolution: {integrity: sha512-JuhN2xdI/m8Hr+aVO3vspO7OQfUFO6bKLIRTAy0U15vmWjnZDLrEgCZ2s6+scAYaQVpYSh9tZtRijApw9IXyMw==} 414 | cpu: [arm64] 415 | os: [win32] 416 | 417 | '@rollup/rollup-win32-ia32-msvc@4.31.0': 418 | resolution: {integrity: sha512-U1xZZXYkvdf5MIWmftU8wrM5PPXzyaY1nGCI4KI4BFfoZxHamsIe+BtnPLIvvPykvQWlVbqUXdLa4aJUuilwLQ==} 419 | cpu: [ia32] 420 | os: [win32] 421 | 422 | '@rollup/rollup-win32-x64-msvc@4.31.0': 423 | resolution: {integrity: sha512-ul8rnCsUumNln5YWwz0ted2ZHFhzhRRnkpBZ+YRuHoRAlUji9KChpOUOndY7uykrPEPXVbHLlsdo6v5yXo/TXw==} 424 | cpu: [x64] 425 | os: [win32] 426 | 427 | '@shahrad/eslint-config@1.0.0': 428 | resolution: {integrity: sha512-J/RJBYyva4REnQr9C/pvT/9ydPX8zKwoV1ltzmKicX5IQKqN5S/1nrFmkZvSg8MoaXM2WM4AsNZVklTxDeW0+g==} 429 | 430 | '@shahrad/prettier-config@1.1.0': 431 | resolution: {integrity: sha512-T0HVnVKyb0FeiTx+3xG1hr7Bgw14M2VYb3RT51bvksnshH6uBtuO3S6i6q/lvO7Xp9phuBwifjzOj1SrET0bCA==} 432 | peerDependencies: 433 | prettier: '>=3.0.0' 434 | 435 | '@shahrad/tsconfig@1.1.0': 436 | resolution: {integrity: sha512-WcziTJWK7DC49kbEKPwdZ/Mnhu3H6ZehpBg4UGbyDwU2Ze/QvSjZq1Nx6Vb2Pfgwjas1CHWkIA2d3GiW35fxsw==} 437 | engines: {node: '>=18'} 438 | 439 | '@types/estree@1.0.6': 440 | resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} 441 | 442 | '@types/json-schema@7.0.15': 443 | resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} 444 | 445 | '@types/node@22.10.9': 446 | resolution: {integrity: sha512-Ir6hwgsKyNESl/gLOcEz3krR4CBGgliDqBQ2ma4wIhEx0w+xnoeTq3tdrNw15kU3SxogDjOgv9sqdtLW8mIHaw==} 447 | 448 | '@typescript-eslint/eslint-plugin@8.21.0': 449 | resolution: {integrity: sha512-eTH+UOR4I7WbdQnG4Z48ebIA6Bgi7WO8HvFEneeYBxG8qCOYgTOFPSg6ek9ITIDvGjDQzWHcoWHCDO2biByNzA==} 450 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 451 | peerDependencies: 452 | '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 453 | eslint: ^8.57.0 || ^9.0.0 454 | typescript: '>=4.8.4 <5.8.0' 455 | 456 | '@typescript-eslint/parser@8.21.0': 457 | resolution: {integrity: sha512-Wy+/sdEH9kI3w9civgACwabHbKl+qIOu0uFZ9IMKzX3Jpv9og0ZBJrZExGrPpFAY7rWsXuxs5e7CPPP17A4eYA==} 458 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 459 | peerDependencies: 460 | eslint: ^8.57.0 || ^9.0.0 461 | typescript: '>=4.8.4 <5.8.0' 462 | 463 | '@typescript-eslint/scope-manager@8.21.0': 464 | resolution: {integrity: sha512-G3IBKz0/0IPfdeGRMbp+4rbjfSSdnGkXsM/pFZA8zM9t9klXDnB/YnKOBQ0GoPmoROa4bCq2NeHgJa5ydsQ4mA==} 465 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 466 | 467 | '@typescript-eslint/type-utils@8.21.0': 468 | resolution: {integrity: sha512-95OsL6J2BtzoBxHicoXHxgk3z+9P3BEcQTpBKriqiYzLKnM2DeSqs+sndMKdamU8FosiadQFT3D+BSL9EKnAJQ==} 469 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 470 | peerDependencies: 471 | eslint: ^8.57.0 || ^9.0.0 472 | typescript: '>=4.8.4 <5.8.0' 473 | 474 | '@typescript-eslint/types@8.21.0': 475 | resolution: {integrity: sha512-PAL6LUuQwotLW2a8VsySDBwYMm129vFm4tMVlylzdoTybTHaAi0oBp7Ac6LhSrHHOdLM3efH+nAR6hAWoMF89A==} 476 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 477 | 478 | '@typescript-eslint/typescript-estree@8.21.0': 479 | resolution: {integrity: sha512-x+aeKh/AjAArSauz0GiQZsjT8ciadNMHdkUSwBB9Z6PrKc/4knM4g3UfHml6oDJmKC88a6//cdxnO/+P2LkMcg==} 480 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 481 | peerDependencies: 482 | typescript: '>=4.8.4 <5.8.0' 483 | 484 | '@typescript-eslint/utils@8.21.0': 485 | resolution: {integrity: sha512-xcXBfcq0Kaxgj7dwejMbFyq7IOHgpNMtVuDveK7w3ZGwG9owKzhALVwKpTF2yrZmEwl9SWdetf3fxNzJQaVuxw==} 486 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 487 | peerDependencies: 488 | eslint: ^8.57.0 || ^9.0.0 489 | typescript: '>=4.8.4 <5.8.0' 490 | 491 | '@typescript-eslint/visitor-keys@8.21.0': 492 | resolution: {integrity: sha512-BkLMNpdV6prozk8LlyK/SOoWLmUFi+ZD+pcqti9ILCbVvHGk1ui1g4jJOc2WDLaeExz2qWwojxlPce5PljcT3w==} 493 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 494 | 495 | '@vitest/expect@3.0.4': 496 | resolution: {integrity: sha512-Nm5kJmYw6P2BxhJPkO3eKKhGYKRsnqJqf+r0yOGRKpEP+bSCBDsjXgiu1/5QFrnPMEgzfC38ZEjvCFgaNBC0Eg==} 497 | 498 | '@vitest/mocker@3.0.4': 499 | resolution: {integrity: sha512-gEef35vKafJlfQbnyOXZ0Gcr9IBUsMTyTLXsEQwuyYAerpHqvXhzdBnDFuHLpFqth3F7b6BaFr4qV/Cs1ULx5A==} 500 | peerDependencies: 501 | msw: ^2.4.9 502 | vite: ^5.0.0 || ^6.0.0 503 | peerDependenciesMeta: 504 | msw: 505 | optional: true 506 | vite: 507 | optional: true 508 | 509 | '@vitest/pretty-format@3.0.4': 510 | resolution: {integrity: sha512-ts0fba+dEhK2aC9PFuZ9LTpULHpY/nd6jhAQ5IMU7Gaj7crPCTdCFfgvXxruRBLFS+MLraicCuFXxISEq8C93g==} 511 | 512 | '@vitest/runner@3.0.4': 513 | resolution: {integrity: sha512-dKHzTQ7n9sExAcWH/0sh1elVgwc7OJ2lMOBrAm73J7AH6Pf9T12Zh3lNE1TETZaqrWFXtLlx3NVrLRb5hCK+iw==} 514 | 515 | '@vitest/snapshot@3.0.4': 516 | resolution: {integrity: sha512-+p5knMLwIk7lTQkM3NonZ9zBewzVp9EVkVpvNta0/PlFWpiqLaRcF4+33L1it3uRUCh0BGLOaXPPGEjNKfWb4w==} 517 | 518 | '@vitest/spy@3.0.4': 519 | resolution: {integrity: sha512-sXIMF0oauYyUy2hN49VFTYodzEAu744MmGcPR3ZBsPM20G+1/cSW/n1U+3Yu/zHxX2bIDe1oJASOkml+osTU6Q==} 520 | 521 | '@vitest/utils@3.0.4': 522 | resolution: {integrity: sha512-8BqC1ksYsHtbWH+DfpOAKrFw3jl3Uf9J7yeFh85Pz52IWuh1hBBtyfEbRNNZNjl8H8A5yMLH9/t+k7HIKzQcZQ==} 523 | 524 | acorn-jsx@5.3.2: 525 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 526 | peerDependencies: 527 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 528 | 529 | acorn@8.14.0: 530 | resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} 531 | engines: {node: '>=0.4.0'} 532 | hasBin: true 533 | 534 | ajv@6.12.6: 535 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 536 | 537 | ansi-regex@5.0.1: 538 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 539 | engines: {node: '>=8'} 540 | 541 | ansi-regex@6.1.0: 542 | resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} 543 | engines: {node: '>=12'} 544 | 545 | ansi-styles@4.3.0: 546 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 547 | engines: {node: '>=8'} 548 | 549 | ansi-styles@6.2.1: 550 | resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} 551 | engines: {node: '>=12'} 552 | 553 | any-promise@1.3.0: 554 | resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} 555 | 556 | argparse@2.0.1: 557 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 558 | 559 | assertion-error@2.0.1: 560 | resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} 561 | engines: {node: '>=12'} 562 | 563 | balanced-match@1.0.2: 564 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 565 | 566 | brace-expansion@1.1.11: 567 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 568 | 569 | brace-expansion@2.0.1: 570 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 571 | 572 | braces@3.0.3: 573 | resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} 574 | engines: {node: '>=8'} 575 | 576 | bundle-require@5.1.0: 577 | resolution: {integrity: sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==} 578 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 579 | peerDependencies: 580 | esbuild: '>=0.18' 581 | 582 | cac@6.7.14: 583 | resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} 584 | engines: {node: '>=8'} 585 | 586 | callsites@3.1.0: 587 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 588 | engines: {node: '>=6'} 589 | 590 | chai@5.1.2: 591 | resolution: {integrity: sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==} 592 | engines: {node: '>=12'} 593 | 594 | chalk@4.1.2: 595 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 596 | engines: {node: '>=10'} 597 | 598 | check-error@2.1.1: 599 | resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} 600 | engines: {node: '>= 16'} 601 | 602 | chokidar@4.0.3: 603 | resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} 604 | engines: {node: '>= 14.16.0'} 605 | 606 | color-convert@2.0.1: 607 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 608 | engines: {node: '>=7.0.0'} 609 | 610 | color-name@1.1.4: 611 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 612 | 613 | commander@4.1.1: 614 | resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} 615 | engines: {node: '>= 6'} 616 | 617 | concat-map@0.0.1: 618 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 619 | 620 | consola@3.4.0: 621 | resolution: {integrity: sha512-EiPU8G6dQG0GFHNR8ljnZFki/8a+cQwEQ+7wpxdChl02Q8HXlwEZWD5lqAF8vC2sEC3Tehr8hy7vErz88LHyUA==} 622 | engines: {node: ^14.18.0 || >=16.10.0} 623 | 624 | cross-spawn@7.0.6: 625 | resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} 626 | engines: {node: '>= 8'} 627 | 628 | debug@4.4.0: 629 | resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} 630 | engines: {node: '>=6.0'} 631 | peerDependencies: 632 | supports-color: '*' 633 | peerDependenciesMeta: 634 | supports-color: 635 | optional: true 636 | 637 | deep-eql@5.0.2: 638 | resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} 639 | engines: {node: '>=6'} 640 | 641 | deep-is@0.1.4: 642 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 643 | 644 | detect-indent@7.0.1: 645 | resolution: {integrity: sha512-Mc7QhQ8s+cLrnUfU/Ji94vG/r8M26m8f++vyres4ZoojaRDpZ1eSIh/EpzLNwlWuvzSZ3UbDFspjFvTDXe6e/g==} 646 | engines: {node: '>=12.20'} 647 | 648 | detect-newline@4.0.1: 649 | resolution: {integrity: sha512-qE3Veg1YXzGHQhlA6jzebZN2qVf6NX+A7m7qlhCGG30dJixrAQhYOsJjsnBjJkCSmuOPpCk30145fr8FV0bzog==} 650 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 651 | 652 | eastasianwidth@0.2.0: 653 | resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} 654 | 655 | emoji-regex@8.0.0: 656 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 657 | 658 | emoji-regex@9.2.2: 659 | resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} 660 | 661 | es-module-lexer@1.6.0: 662 | resolution: {integrity: sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==} 663 | 664 | esbuild@0.24.2: 665 | resolution: {integrity: sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==} 666 | engines: {node: '>=18'} 667 | hasBin: true 668 | 669 | escape-string-regexp@4.0.0: 670 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 671 | engines: {node: '>=10'} 672 | 673 | eslint-scope@8.2.0: 674 | resolution: {integrity: sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==} 675 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 676 | 677 | eslint-visitor-keys@3.4.3: 678 | resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} 679 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 680 | 681 | eslint-visitor-keys@4.2.0: 682 | resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} 683 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 684 | 685 | eslint@9.18.0: 686 | resolution: {integrity: sha512-+waTfRWQlSbpt3KWE+CjrPPYnbq9kfZIYUqapc0uBXyjTp8aYXZDsUH16m39Ryq3NjAVP4tjuF7KaukeqoCoaA==} 687 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 688 | hasBin: true 689 | peerDependencies: 690 | jiti: '*' 691 | peerDependenciesMeta: 692 | jiti: 693 | optional: true 694 | 695 | espree@10.3.0: 696 | resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} 697 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 698 | 699 | esquery@1.6.0: 700 | resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} 701 | engines: {node: '>=0.10'} 702 | 703 | esrecurse@4.3.0: 704 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 705 | engines: {node: '>=4.0'} 706 | 707 | estraverse@5.3.0: 708 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 709 | engines: {node: '>=4.0'} 710 | 711 | estree-walker@3.0.3: 712 | resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} 713 | 714 | esutils@2.0.3: 715 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 716 | engines: {node: '>=0.10.0'} 717 | 718 | expect-type@1.1.0: 719 | resolution: {integrity: sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA==} 720 | engines: {node: '>=12.0.0'} 721 | 722 | fast-deep-equal@3.1.3: 723 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 724 | 725 | fast-glob@3.3.3: 726 | resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} 727 | engines: {node: '>=8.6.0'} 728 | 729 | fast-json-stable-stringify@2.1.0: 730 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 731 | 732 | fast-levenshtein@2.0.6: 733 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 734 | 735 | fastq@1.18.0: 736 | resolution: {integrity: sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw==} 737 | 738 | fdir@6.4.3: 739 | resolution: {integrity: sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==} 740 | peerDependencies: 741 | picomatch: ^3 || ^4 742 | peerDependenciesMeta: 743 | picomatch: 744 | optional: true 745 | 746 | file-entry-cache@8.0.0: 747 | resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} 748 | engines: {node: '>=16.0.0'} 749 | 750 | fill-range@7.1.1: 751 | resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} 752 | engines: {node: '>=8'} 753 | 754 | find-up@5.0.0: 755 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 756 | engines: {node: '>=10'} 757 | 758 | flat-cache@4.0.1: 759 | resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} 760 | engines: {node: '>=16'} 761 | 762 | flatted@3.3.2: 763 | resolution: {integrity: sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==} 764 | 765 | foreground-child@3.3.0: 766 | resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} 767 | engines: {node: '>=14'} 768 | 769 | fsevents@2.3.3: 770 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 771 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 772 | os: [darwin] 773 | 774 | get-stdin@9.0.0: 775 | resolution: {integrity: sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==} 776 | engines: {node: '>=12'} 777 | 778 | git-hooks-list@3.1.0: 779 | resolution: {integrity: sha512-LF8VeHeR7v+wAbXqfgRlTSX/1BJR9Q1vEMR8JAz1cEg6GX07+zyj3sAdDvYjj/xnlIfVuGgj4qBei1K3hKH+PA==} 780 | 781 | glob-parent@5.1.2: 782 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 783 | engines: {node: '>= 6'} 784 | 785 | glob-parent@6.0.2: 786 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 787 | engines: {node: '>=10.13.0'} 788 | 789 | glob@10.4.5: 790 | resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} 791 | hasBin: true 792 | 793 | globals@11.12.0: 794 | resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} 795 | engines: {node: '>=4'} 796 | 797 | globals@14.0.0: 798 | resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} 799 | engines: {node: '>=18'} 800 | 801 | globals@15.14.0: 802 | resolution: {integrity: sha512-OkToC372DtlQeje9/zHIo5CT8lRP/FUgEOKBEhU4e0abL7J7CD24fD9ohiLN5hagG/kWCYj4K5oaxxtj2Z0Dig==} 803 | engines: {node: '>=18'} 804 | 805 | graphemer@1.4.0: 806 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} 807 | 808 | has-flag@4.0.0: 809 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 810 | engines: {node: '>=8'} 811 | 812 | ignore@5.3.2: 813 | resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} 814 | engines: {node: '>= 4'} 815 | 816 | import-fresh@3.3.0: 817 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} 818 | engines: {node: '>=6'} 819 | 820 | imurmurhash@0.1.4: 821 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 822 | engines: {node: '>=0.8.19'} 823 | 824 | is-extglob@2.1.1: 825 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 826 | engines: {node: '>=0.10.0'} 827 | 828 | is-fullwidth-code-point@3.0.0: 829 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 830 | engines: {node: '>=8'} 831 | 832 | is-glob@4.0.3: 833 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 834 | engines: {node: '>=0.10.0'} 835 | 836 | is-number@7.0.0: 837 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 838 | engines: {node: '>=0.12.0'} 839 | 840 | is-plain-obj@4.1.0: 841 | resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} 842 | engines: {node: '>=12'} 843 | 844 | isexe@2.0.0: 845 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 846 | 847 | jackspeak@3.4.3: 848 | resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} 849 | 850 | joycon@3.1.1: 851 | resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} 852 | engines: {node: '>=10'} 853 | 854 | js-tokens@4.0.0: 855 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 856 | 857 | js-yaml@4.1.0: 858 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 859 | hasBin: true 860 | 861 | jsesc@3.1.0: 862 | resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} 863 | engines: {node: '>=6'} 864 | hasBin: true 865 | 866 | json-buffer@3.0.1: 867 | resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} 868 | 869 | json-schema-traverse@0.4.1: 870 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 871 | 872 | json-stable-stringify-without-jsonify@1.0.1: 873 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 874 | 875 | keyv@4.5.4: 876 | resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} 877 | 878 | levn@0.4.1: 879 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 880 | engines: {node: '>= 0.8.0'} 881 | 882 | lilconfig@3.1.3: 883 | resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} 884 | engines: {node: '>=14'} 885 | 886 | lines-and-columns@1.2.4: 887 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 888 | 889 | load-tsconfig@0.2.5: 890 | resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} 891 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 892 | 893 | locate-path@6.0.0: 894 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 895 | engines: {node: '>=10'} 896 | 897 | lodash.merge@4.6.2: 898 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 899 | 900 | lodash.sortby@4.7.0: 901 | resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} 902 | 903 | loupe@3.1.2: 904 | resolution: {integrity: sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg==} 905 | 906 | lru-cache@10.4.3: 907 | resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} 908 | 909 | magic-string@0.30.17: 910 | resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} 911 | 912 | merge2@1.4.1: 913 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 914 | engines: {node: '>= 8'} 915 | 916 | micromatch@4.0.8: 917 | resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} 918 | engines: {node: '>=8.6'} 919 | 920 | minimatch@3.1.2: 921 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 922 | 923 | minimatch@9.0.5: 924 | resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} 925 | engines: {node: '>=16 || 14 >=14.17'} 926 | 927 | minipass@7.1.2: 928 | resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} 929 | engines: {node: '>=16 || 14 >=14.17'} 930 | 931 | ms@2.1.3: 932 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 933 | 934 | mvdan-sh@0.10.1: 935 | resolution: {integrity: sha512-kMbrH0EObaKmK3nVRKUIIya1dpASHIEusM13S4V1ViHFuxuNxCo+arxoa6j/dbV22YBGjl7UKJm9QQKJ2Crzhg==} 936 | 937 | mz@2.7.0: 938 | resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} 939 | 940 | nanoid@3.3.8: 941 | resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} 942 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 943 | hasBin: true 944 | 945 | natural-compare@1.4.0: 946 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 947 | 948 | object-assign@4.1.1: 949 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} 950 | engines: {node: '>=0.10.0'} 951 | 952 | optionator@0.9.4: 953 | resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} 954 | engines: {node: '>= 0.8.0'} 955 | 956 | p-limit@3.1.0: 957 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 958 | engines: {node: '>=10'} 959 | 960 | p-locate@5.0.0: 961 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 962 | engines: {node: '>=10'} 963 | 964 | package-json-from-dist@1.0.1: 965 | resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} 966 | 967 | parent-module@1.0.1: 968 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 969 | engines: {node: '>=6'} 970 | 971 | path-exists@4.0.0: 972 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 973 | engines: {node: '>=8'} 974 | 975 | path-key@3.1.1: 976 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 977 | engines: {node: '>=8'} 978 | 979 | path-scurry@1.11.1: 980 | resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} 981 | engines: {node: '>=16 || 14 >=14.18'} 982 | 983 | pathe@2.0.2: 984 | resolution: {integrity: sha512-15Ztpk+nov8DR524R4BF7uEuzESgzUEAV4Ah7CUMNGXdE5ELuvxElxGXndBl32vMSsWa1jpNf22Z+Er3sKwq+w==} 985 | 986 | pathval@2.0.0: 987 | resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} 988 | engines: {node: '>= 14.16'} 989 | 990 | picocolors@1.1.1: 991 | resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 992 | 993 | picomatch@2.3.1: 994 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 995 | engines: {node: '>=8.6'} 996 | 997 | picomatch@4.0.2: 998 | resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} 999 | engines: {node: '>=12'} 1000 | 1001 | pirates@4.0.6: 1002 | resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} 1003 | engines: {node: '>= 6'} 1004 | 1005 | postcss-load-config@6.0.1: 1006 | resolution: {integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==} 1007 | engines: {node: '>= 18'} 1008 | peerDependencies: 1009 | jiti: '>=1.21.0' 1010 | postcss: '>=8.0.9' 1011 | tsx: ^4.8.1 1012 | yaml: ^2.4.2 1013 | peerDependenciesMeta: 1014 | jiti: 1015 | optional: true 1016 | postcss: 1017 | optional: true 1018 | tsx: 1019 | optional: true 1020 | yaml: 1021 | optional: true 1022 | 1023 | postcss@8.5.1: 1024 | resolution: {integrity: sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==} 1025 | engines: {node: ^10 || ^12 || >=14} 1026 | 1027 | prelude-ls@1.2.1: 1028 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 1029 | engines: {node: '>= 0.8.0'} 1030 | 1031 | prettier-plugin-packagejson@2.5.8: 1032 | resolution: {integrity: sha512-BaGOF63I0IJZoudxpuQe17naV93BRtK8b3byWktkJReKEMX9CC4qdGUzThPDVO/AUhPzlqDiAXbp18U6X8wLKA==} 1033 | peerDependencies: 1034 | prettier: '>= 1.16.0' 1035 | peerDependenciesMeta: 1036 | prettier: 1037 | optional: true 1038 | 1039 | prettier-plugin-sh@0.14.0: 1040 | resolution: {integrity: sha512-hfXulj5+zEl/ulrO5kMuuTPKmXvOg0bnLHY1hKFNN/N+/903iZbNp8NyZBTsgI8dtkSgFfAEIQq0IQTyP1ZVFQ==} 1041 | engines: {node: '>=16.0.0'} 1042 | peerDependencies: 1043 | prettier: ^3.0.3 1044 | 1045 | prettier@3.4.2: 1046 | resolution: {integrity: sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==} 1047 | engines: {node: '>=14'} 1048 | hasBin: true 1049 | 1050 | punycode@2.3.1: 1051 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 1052 | engines: {node: '>=6'} 1053 | 1054 | queue-microtask@1.2.3: 1055 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 1056 | 1057 | readdirp@4.1.1: 1058 | resolution: {integrity: sha512-h80JrZu/MHUZCyHu5ciuoI0+WxsCxzxJTILn6Fs8rxSnFPh+UVHYfeIxK1nVGugMqkfC4vJcBOYbkfkwYK0+gw==} 1059 | engines: {node: '>= 14.18.0'} 1060 | 1061 | resolve-from@4.0.0: 1062 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 1063 | engines: {node: '>=4'} 1064 | 1065 | resolve-from@5.0.0: 1066 | resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} 1067 | engines: {node: '>=8'} 1068 | 1069 | reusify@1.0.4: 1070 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 1071 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 1072 | 1073 | rollup@4.31.0: 1074 | resolution: {integrity: sha512-9cCE8P4rZLx9+PjoyqHLs31V9a9Vpvfo4qNcs6JCiGWYhw2gijSetFbH6SSy1whnkgcefnUwr8sad7tgqsGvnw==} 1075 | engines: {node: '>=18.0.0', npm: '>=8.0.0'} 1076 | hasBin: true 1077 | 1078 | run-parallel@1.2.0: 1079 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 1080 | 1081 | semver@7.6.3: 1082 | resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} 1083 | engines: {node: '>=10'} 1084 | hasBin: true 1085 | 1086 | sh-syntax@0.4.2: 1087 | resolution: {integrity: sha512-/l2UZ5fhGZLVZa16XQM9/Vq/hezGGbdHeVEA01uWjOL1+7Ek/gt6FquW0iKKws4a9AYPYvlz6RyVvjh3JxOteg==} 1088 | engines: {node: '>=16.0.0'} 1089 | 1090 | shebang-command@2.0.0: 1091 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 1092 | engines: {node: '>=8'} 1093 | 1094 | shebang-regex@3.0.0: 1095 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 1096 | engines: {node: '>=8'} 1097 | 1098 | siginfo@2.0.0: 1099 | resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} 1100 | 1101 | signal-exit@4.1.0: 1102 | resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} 1103 | engines: {node: '>=14'} 1104 | 1105 | sort-object-keys@1.1.3: 1106 | resolution: {integrity: sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg==} 1107 | 1108 | sort-package-json@2.14.0: 1109 | resolution: {integrity: sha512-xBRdmMjFB/KW3l51mP31dhlaiFmqkHLfWTfZAno8prb/wbDxwBPWFpxB16GZbiPbYr3wL41H8Kx22QIDWRe8WQ==} 1110 | hasBin: true 1111 | 1112 | source-map-js@1.2.1: 1113 | resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} 1114 | engines: {node: '>=0.10.0'} 1115 | 1116 | source-map@0.8.0-beta.0: 1117 | resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} 1118 | engines: {node: '>= 8'} 1119 | 1120 | stackback@0.0.2: 1121 | resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} 1122 | 1123 | std-env@3.8.0: 1124 | resolution: {integrity: sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==} 1125 | 1126 | string-width@4.2.3: 1127 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 1128 | engines: {node: '>=8'} 1129 | 1130 | string-width@5.1.2: 1131 | resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} 1132 | engines: {node: '>=12'} 1133 | 1134 | strip-ansi@6.0.1: 1135 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 1136 | engines: {node: '>=8'} 1137 | 1138 | strip-ansi@7.1.0: 1139 | resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} 1140 | engines: {node: '>=12'} 1141 | 1142 | strip-json-comments@3.1.1: 1143 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 1144 | engines: {node: '>=8'} 1145 | 1146 | sucrase@3.35.0: 1147 | resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} 1148 | engines: {node: '>=16 || 14 >=14.17'} 1149 | hasBin: true 1150 | 1151 | supports-color@7.2.0: 1152 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 1153 | engines: {node: '>=8'} 1154 | 1155 | synckit@0.9.2: 1156 | resolution: {integrity: sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==} 1157 | engines: {node: ^14.18.0 || >=16.0.0} 1158 | 1159 | thenify-all@1.6.0: 1160 | resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} 1161 | engines: {node: '>=0.8'} 1162 | 1163 | thenify@3.3.1: 1164 | resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} 1165 | 1166 | tinybench@2.9.0: 1167 | resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} 1168 | 1169 | tinyexec@0.3.2: 1170 | resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} 1171 | 1172 | tinyglobby@0.2.10: 1173 | resolution: {integrity: sha512-Zc+8eJlFMvgatPZTl6A9L/yht8QqdmUNtURHaKZLmKBE12hNPSrqNkUp2cs3M/UKmNVVAMFQYSjYIVHDjW5zew==} 1174 | engines: {node: '>=12.0.0'} 1175 | 1176 | tinypool@1.0.2: 1177 | resolution: {integrity: sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==} 1178 | engines: {node: ^18.0.0 || >=20.0.0} 1179 | 1180 | tinyrainbow@2.0.0: 1181 | resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} 1182 | engines: {node: '>=14.0.0'} 1183 | 1184 | tinyspy@3.0.2: 1185 | resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} 1186 | engines: {node: '>=14.0.0'} 1187 | 1188 | to-regex-range@5.0.1: 1189 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1190 | engines: {node: '>=8.0'} 1191 | 1192 | tr46@1.0.1: 1193 | resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} 1194 | 1195 | tree-kill@1.2.2: 1196 | resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} 1197 | hasBin: true 1198 | 1199 | ts-api-utils@2.0.0: 1200 | resolution: {integrity: sha512-xCt/TOAc+EOHS1XPnijD3/yzpH6qg2xppZO1YDqGoVsNXfQfzHpOdNuXwrwOU8u4ITXJyDCTyt8w5g1sZv9ynQ==} 1201 | engines: {node: '>=18.12'} 1202 | peerDependencies: 1203 | typescript: '>=4.8.4' 1204 | 1205 | ts-interface-checker@0.1.13: 1206 | resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} 1207 | 1208 | tslib@2.8.1: 1209 | resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} 1210 | 1211 | tsup@8.3.5: 1212 | resolution: {integrity: sha512-Tunf6r6m6tnZsG9GYWndg0z8dEV7fD733VBFzFJ5Vcm1FtlXB8xBD/rtrBi2a3YKEV7hHtxiZtW5EAVADoe1pA==} 1213 | engines: {node: '>=18'} 1214 | hasBin: true 1215 | peerDependencies: 1216 | '@microsoft/api-extractor': ^7.36.0 1217 | '@swc/core': ^1 1218 | postcss: ^8.4.12 1219 | typescript: '>=4.5.0' 1220 | peerDependenciesMeta: 1221 | '@microsoft/api-extractor': 1222 | optional: true 1223 | '@swc/core': 1224 | optional: true 1225 | postcss: 1226 | optional: true 1227 | typescript: 1228 | optional: true 1229 | 1230 | type-check@0.4.0: 1231 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 1232 | engines: {node: '>= 0.8.0'} 1233 | 1234 | typescript-eslint@8.21.0: 1235 | resolution: {integrity: sha512-txEKYY4XMKwPXxNkN8+AxAdX6iIJAPiJbHE/FpQccs/sxw8Lf26kqwC3cn0xkHlW8kEbLhkhCsjWuMveaY9Rxw==} 1236 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1237 | peerDependencies: 1238 | eslint: ^8.57.0 || ^9.0.0 1239 | typescript: '>=4.8.4 <5.8.0' 1240 | 1241 | typescript@5.7.3: 1242 | resolution: {integrity: sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==} 1243 | engines: {node: '>=14.17'} 1244 | hasBin: true 1245 | 1246 | undici-types@6.20.0: 1247 | resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} 1248 | 1249 | uri-js@4.4.1: 1250 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 1251 | 1252 | vite-node@3.0.4: 1253 | resolution: {integrity: sha512-7JZKEzcYV2Nx3u6rlvN8qdo3QV7Fxyt6hx+CCKz9fbWxdX5IvUOmTWEAxMrWxaiSf7CKGLJQ5rFu8prb/jBjOA==} 1254 | engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} 1255 | hasBin: true 1256 | 1257 | vite@6.0.11: 1258 | resolution: {integrity: sha512-4VL9mQPKoHy4+FE0NnRE/kbY51TOfaknxAjt3fJbGJxhIpBZiqVzlZDEesWWsuREXHwNdAoOFZ9MkPEVXczHwg==} 1259 | engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} 1260 | hasBin: true 1261 | peerDependencies: 1262 | '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 1263 | jiti: '>=1.21.0' 1264 | less: '*' 1265 | lightningcss: ^1.21.0 1266 | sass: '*' 1267 | sass-embedded: '*' 1268 | stylus: '*' 1269 | sugarss: '*' 1270 | terser: ^5.16.0 1271 | tsx: ^4.8.1 1272 | yaml: ^2.4.2 1273 | peerDependenciesMeta: 1274 | '@types/node': 1275 | optional: true 1276 | jiti: 1277 | optional: true 1278 | less: 1279 | optional: true 1280 | lightningcss: 1281 | optional: true 1282 | sass: 1283 | optional: true 1284 | sass-embedded: 1285 | optional: true 1286 | stylus: 1287 | optional: true 1288 | sugarss: 1289 | optional: true 1290 | terser: 1291 | optional: true 1292 | tsx: 1293 | optional: true 1294 | yaml: 1295 | optional: true 1296 | 1297 | vitest@3.0.4: 1298 | resolution: {integrity: sha512-6XG8oTKy2gnJIFTHP6LD7ExFeNLxiTkK3CfMvT7IfR8IN+BYICCf0lXUQmX7i7JoxUP8QmeP4mTnWXgflu4yjw==} 1299 | engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} 1300 | hasBin: true 1301 | peerDependencies: 1302 | '@edge-runtime/vm': '*' 1303 | '@types/debug': ^4.1.12 1304 | '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 1305 | '@vitest/browser': 3.0.4 1306 | '@vitest/ui': 3.0.4 1307 | happy-dom: '*' 1308 | jsdom: '*' 1309 | peerDependenciesMeta: 1310 | '@edge-runtime/vm': 1311 | optional: true 1312 | '@types/debug': 1313 | optional: true 1314 | '@types/node': 1315 | optional: true 1316 | '@vitest/browser': 1317 | optional: true 1318 | '@vitest/ui': 1319 | optional: true 1320 | happy-dom: 1321 | optional: true 1322 | jsdom: 1323 | optional: true 1324 | 1325 | webidl-conversions@4.0.2: 1326 | resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} 1327 | 1328 | whatwg-url@7.1.0: 1329 | resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} 1330 | 1331 | which@2.0.2: 1332 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 1333 | engines: {node: '>= 8'} 1334 | hasBin: true 1335 | 1336 | why-is-node-running@2.3.0: 1337 | resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} 1338 | engines: {node: '>=8'} 1339 | hasBin: true 1340 | 1341 | word-wrap@1.2.5: 1342 | resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} 1343 | engines: {node: '>=0.10.0'} 1344 | 1345 | wrap-ansi@7.0.0: 1346 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} 1347 | engines: {node: '>=10'} 1348 | 1349 | wrap-ansi@8.1.0: 1350 | resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} 1351 | engines: {node: '>=12'} 1352 | 1353 | yocto-queue@0.1.0: 1354 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 1355 | engines: {node: '>=10'} 1356 | 1357 | snapshots: 1358 | 1359 | '@babel/code-frame@7.26.2': 1360 | dependencies: 1361 | '@babel/helper-validator-identifier': 7.25.9 1362 | js-tokens: 4.0.0 1363 | picocolors: 1.1.1 1364 | 1365 | '@babel/generator@7.26.5': 1366 | dependencies: 1367 | '@babel/parser': 7.26.5 1368 | '@babel/types': 7.26.5 1369 | '@jridgewell/gen-mapping': 0.3.8 1370 | '@jridgewell/trace-mapping': 0.3.25 1371 | jsesc: 3.1.0 1372 | 1373 | '@babel/helper-string-parser@7.25.9': {} 1374 | 1375 | '@babel/helper-validator-identifier@7.25.9': {} 1376 | 1377 | '@babel/parser@7.26.5': 1378 | dependencies: 1379 | '@babel/types': 7.26.5 1380 | 1381 | '@babel/template@7.25.9': 1382 | dependencies: 1383 | '@babel/code-frame': 7.26.2 1384 | '@babel/parser': 7.26.5 1385 | '@babel/types': 7.26.5 1386 | 1387 | '@babel/traverse@7.26.5': 1388 | dependencies: 1389 | '@babel/code-frame': 7.26.2 1390 | '@babel/generator': 7.26.5 1391 | '@babel/parser': 7.26.5 1392 | '@babel/template': 7.25.9 1393 | '@babel/types': 7.26.5 1394 | debug: 4.4.0 1395 | globals: 11.12.0 1396 | transitivePeerDependencies: 1397 | - supports-color 1398 | 1399 | '@babel/types@7.26.5': 1400 | dependencies: 1401 | '@babel/helper-string-parser': 7.25.9 1402 | '@babel/helper-validator-identifier': 7.25.9 1403 | 1404 | '@esbuild/aix-ppc64@0.24.2': 1405 | optional: true 1406 | 1407 | '@esbuild/android-arm64@0.24.2': 1408 | optional: true 1409 | 1410 | '@esbuild/android-arm@0.24.2': 1411 | optional: true 1412 | 1413 | '@esbuild/android-x64@0.24.2': 1414 | optional: true 1415 | 1416 | '@esbuild/darwin-arm64@0.24.2': 1417 | optional: true 1418 | 1419 | '@esbuild/darwin-x64@0.24.2': 1420 | optional: true 1421 | 1422 | '@esbuild/freebsd-arm64@0.24.2': 1423 | optional: true 1424 | 1425 | '@esbuild/freebsd-x64@0.24.2': 1426 | optional: true 1427 | 1428 | '@esbuild/linux-arm64@0.24.2': 1429 | optional: true 1430 | 1431 | '@esbuild/linux-arm@0.24.2': 1432 | optional: true 1433 | 1434 | '@esbuild/linux-ia32@0.24.2': 1435 | optional: true 1436 | 1437 | '@esbuild/linux-loong64@0.24.2': 1438 | optional: true 1439 | 1440 | '@esbuild/linux-mips64el@0.24.2': 1441 | optional: true 1442 | 1443 | '@esbuild/linux-ppc64@0.24.2': 1444 | optional: true 1445 | 1446 | '@esbuild/linux-riscv64@0.24.2': 1447 | optional: true 1448 | 1449 | '@esbuild/linux-s390x@0.24.2': 1450 | optional: true 1451 | 1452 | '@esbuild/linux-x64@0.24.2': 1453 | optional: true 1454 | 1455 | '@esbuild/netbsd-arm64@0.24.2': 1456 | optional: true 1457 | 1458 | '@esbuild/netbsd-x64@0.24.2': 1459 | optional: true 1460 | 1461 | '@esbuild/openbsd-arm64@0.24.2': 1462 | optional: true 1463 | 1464 | '@esbuild/openbsd-x64@0.24.2': 1465 | optional: true 1466 | 1467 | '@esbuild/sunos-x64@0.24.2': 1468 | optional: true 1469 | 1470 | '@esbuild/win32-arm64@0.24.2': 1471 | optional: true 1472 | 1473 | '@esbuild/win32-ia32@0.24.2': 1474 | optional: true 1475 | 1476 | '@esbuild/win32-x64@0.24.2': 1477 | optional: true 1478 | 1479 | '@eslint-community/eslint-utils@4.4.1(eslint@9.18.0)': 1480 | dependencies: 1481 | eslint: 9.18.0 1482 | eslint-visitor-keys: 3.4.3 1483 | 1484 | '@eslint-community/regexpp@4.12.1': {} 1485 | 1486 | '@eslint/config-array@0.19.1': 1487 | dependencies: 1488 | '@eslint/object-schema': 2.1.5 1489 | debug: 4.4.0 1490 | minimatch: 3.1.2 1491 | transitivePeerDependencies: 1492 | - supports-color 1493 | 1494 | '@eslint/core@0.10.0': 1495 | dependencies: 1496 | '@types/json-schema': 7.0.15 1497 | 1498 | '@eslint/eslintrc@3.2.0': 1499 | dependencies: 1500 | ajv: 6.12.6 1501 | debug: 4.4.0 1502 | espree: 10.3.0 1503 | globals: 14.0.0 1504 | ignore: 5.3.2 1505 | import-fresh: 3.3.0 1506 | js-yaml: 4.1.0 1507 | minimatch: 3.1.2 1508 | strip-json-comments: 3.1.1 1509 | transitivePeerDependencies: 1510 | - supports-color 1511 | 1512 | '@eslint/js@9.18.0': {} 1513 | 1514 | '@eslint/object-schema@2.1.5': {} 1515 | 1516 | '@eslint/plugin-kit@0.2.5': 1517 | dependencies: 1518 | '@eslint/core': 0.10.0 1519 | levn: 0.4.1 1520 | 1521 | '@humanfs/core@0.19.1': {} 1522 | 1523 | '@humanfs/node@0.16.6': 1524 | dependencies: 1525 | '@humanfs/core': 0.19.1 1526 | '@humanwhocodes/retry': 0.3.1 1527 | 1528 | '@humanwhocodes/module-importer@1.0.1': {} 1529 | 1530 | '@humanwhocodes/retry@0.3.1': {} 1531 | 1532 | '@humanwhocodes/retry@0.4.1': {} 1533 | 1534 | '@ianvs/prettier-plugin-sort-imports@4.4.1(prettier@3.4.2)': 1535 | dependencies: 1536 | '@babel/generator': 7.26.5 1537 | '@babel/parser': 7.26.5 1538 | '@babel/traverse': 7.26.5 1539 | '@babel/types': 7.26.5 1540 | prettier: 3.4.2 1541 | semver: 7.6.3 1542 | transitivePeerDependencies: 1543 | - supports-color 1544 | 1545 | '@isaacs/cliui@8.0.2': 1546 | dependencies: 1547 | string-width: 5.1.2 1548 | string-width-cjs: string-width@4.2.3 1549 | strip-ansi: 7.1.0 1550 | strip-ansi-cjs: strip-ansi@6.0.1 1551 | wrap-ansi: 8.1.0 1552 | wrap-ansi-cjs: wrap-ansi@7.0.0 1553 | 1554 | '@jridgewell/gen-mapping@0.3.8': 1555 | dependencies: 1556 | '@jridgewell/set-array': 1.2.1 1557 | '@jridgewell/sourcemap-codec': 1.5.0 1558 | '@jridgewell/trace-mapping': 0.3.25 1559 | 1560 | '@jridgewell/resolve-uri@3.1.2': {} 1561 | 1562 | '@jridgewell/set-array@1.2.1': {} 1563 | 1564 | '@jridgewell/sourcemap-codec@1.5.0': {} 1565 | 1566 | '@jridgewell/trace-mapping@0.3.25': 1567 | dependencies: 1568 | '@jridgewell/resolve-uri': 3.1.2 1569 | '@jridgewell/sourcemap-codec': 1.5.0 1570 | 1571 | '@nodelib/fs.scandir@2.1.5': 1572 | dependencies: 1573 | '@nodelib/fs.stat': 2.0.5 1574 | run-parallel: 1.2.0 1575 | 1576 | '@nodelib/fs.stat@2.0.5': {} 1577 | 1578 | '@nodelib/fs.walk@1.2.8': 1579 | dependencies: 1580 | '@nodelib/fs.scandir': 2.1.5 1581 | fastq: 1.18.0 1582 | 1583 | '@pkgjs/parseargs@0.11.0': 1584 | optional: true 1585 | 1586 | '@pkgr/core@0.1.1': {} 1587 | 1588 | '@rollup/rollup-android-arm-eabi@4.31.0': 1589 | optional: true 1590 | 1591 | '@rollup/rollup-android-arm64@4.31.0': 1592 | optional: true 1593 | 1594 | '@rollup/rollup-darwin-arm64@4.31.0': 1595 | optional: true 1596 | 1597 | '@rollup/rollup-darwin-x64@4.31.0': 1598 | optional: true 1599 | 1600 | '@rollup/rollup-freebsd-arm64@4.31.0': 1601 | optional: true 1602 | 1603 | '@rollup/rollup-freebsd-x64@4.31.0': 1604 | optional: true 1605 | 1606 | '@rollup/rollup-linux-arm-gnueabihf@4.31.0': 1607 | optional: true 1608 | 1609 | '@rollup/rollup-linux-arm-musleabihf@4.31.0': 1610 | optional: true 1611 | 1612 | '@rollup/rollup-linux-arm64-gnu@4.31.0': 1613 | optional: true 1614 | 1615 | '@rollup/rollup-linux-arm64-musl@4.31.0': 1616 | optional: true 1617 | 1618 | '@rollup/rollup-linux-loongarch64-gnu@4.31.0': 1619 | optional: true 1620 | 1621 | '@rollup/rollup-linux-powerpc64le-gnu@4.31.0': 1622 | optional: true 1623 | 1624 | '@rollup/rollup-linux-riscv64-gnu@4.31.0': 1625 | optional: true 1626 | 1627 | '@rollup/rollup-linux-s390x-gnu@4.31.0': 1628 | optional: true 1629 | 1630 | '@rollup/rollup-linux-x64-gnu@4.31.0': 1631 | optional: true 1632 | 1633 | '@rollup/rollup-linux-x64-musl@4.31.0': 1634 | optional: true 1635 | 1636 | '@rollup/rollup-win32-arm64-msvc@4.31.0': 1637 | optional: true 1638 | 1639 | '@rollup/rollup-win32-ia32-msvc@4.31.0': 1640 | optional: true 1641 | 1642 | '@rollup/rollup-win32-x64-msvc@4.31.0': 1643 | optional: true 1644 | 1645 | '@shahrad/eslint-config@1.0.0(typescript@5.7.3)': 1646 | dependencies: 1647 | '@eslint/js': 9.18.0 1648 | eslint: 9.18.0 1649 | typescript-eslint: 8.21.0(eslint@9.18.0)(typescript@5.7.3) 1650 | transitivePeerDependencies: 1651 | - jiti 1652 | - supports-color 1653 | - typescript 1654 | 1655 | '@shahrad/prettier-config@1.1.0(prettier@3.4.2)': 1656 | dependencies: 1657 | '@ianvs/prettier-plugin-sort-imports': 4.4.1(prettier@3.4.2) 1658 | prettier: 3.4.2 1659 | prettier-plugin-packagejson: 2.5.8(prettier@3.4.2) 1660 | prettier-plugin-sh: 0.14.0(prettier@3.4.2) 1661 | transitivePeerDependencies: 1662 | - '@vue/compiler-sfc' 1663 | - supports-color 1664 | 1665 | '@shahrad/tsconfig@1.1.0': {} 1666 | 1667 | '@types/estree@1.0.6': {} 1668 | 1669 | '@types/json-schema@7.0.15': {} 1670 | 1671 | '@types/node@22.10.9': 1672 | dependencies: 1673 | undici-types: 6.20.0 1674 | 1675 | '@typescript-eslint/eslint-plugin@8.21.0(@typescript-eslint/parser@8.21.0(eslint@9.18.0)(typescript@5.7.3))(eslint@9.18.0)(typescript@5.7.3)': 1676 | dependencies: 1677 | '@eslint-community/regexpp': 4.12.1 1678 | '@typescript-eslint/parser': 8.21.0(eslint@9.18.0)(typescript@5.7.3) 1679 | '@typescript-eslint/scope-manager': 8.21.0 1680 | '@typescript-eslint/type-utils': 8.21.0(eslint@9.18.0)(typescript@5.7.3) 1681 | '@typescript-eslint/utils': 8.21.0(eslint@9.18.0)(typescript@5.7.3) 1682 | '@typescript-eslint/visitor-keys': 8.21.0 1683 | eslint: 9.18.0 1684 | graphemer: 1.4.0 1685 | ignore: 5.3.2 1686 | natural-compare: 1.4.0 1687 | ts-api-utils: 2.0.0(typescript@5.7.3) 1688 | typescript: 5.7.3 1689 | transitivePeerDependencies: 1690 | - supports-color 1691 | 1692 | '@typescript-eslint/parser@8.21.0(eslint@9.18.0)(typescript@5.7.3)': 1693 | dependencies: 1694 | '@typescript-eslint/scope-manager': 8.21.0 1695 | '@typescript-eslint/types': 8.21.0 1696 | '@typescript-eslint/typescript-estree': 8.21.0(typescript@5.7.3) 1697 | '@typescript-eslint/visitor-keys': 8.21.0 1698 | debug: 4.4.0 1699 | eslint: 9.18.0 1700 | typescript: 5.7.3 1701 | transitivePeerDependencies: 1702 | - supports-color 1703 | 1704 | '@typescript-eslint/scope-manager@8.21.0': 1705 | dependencies: 1706 | '@typescript-eslint/types': 8.21.0 1707 | '@typescript-eslint/visitor-keys': 8.21.0 1708 | 1709 | '@typescript-eslint/type-utils@8.21.0(eslint@9.18.0)(typescript@5.7.3)': 1710 | dependencies: 1711 | '@typescript-eslint/typescript-estree': 8.21.0(typescript@5.7.3) 1712 | '@typescript-eslint/utils': 8.21.0(eslint@9.18.0)(typescript@5.7.3) 1713 | debug: 4.4.0 1714 | eslint: 9.18.0 1715 | ts-api-utils: 2.0.0(typescript@5.7.3) 1716 | typescript: 5.7.3 1717 | transitivePeerDependencies: 1718 | - supports-color 1719 | 1720 | '@typescript-eslint/types@8.21.0': {} 1721 | 1722 | '@typescript-eslint/typescript-estree@8.21.0(typescript@5.7.3)': 1723 | dependencies: 1724 | '@typescript-eslint/types': 8.21.0 1725 | '@typescript-eslint/visitor-keys': 8.21.0 1726 | debug: 4.4.0 1727 | fast-glob: 3.3.3 1728 | is-glob: 4.0.3 1729 | minimatch: 9.0.5 1730 | semver: 7.6.3 1731 | ts-api-utils: 2.0.0(typescript@5.7.3) 1732 | typescript: 5.7.3 1733 | transitivePeerDependencies: 1734 | - supports-color 1735 | 1736 | '@typescript-eslint/utils@8.21.0(eslint@9.18.0)(typescript@5.7.3)': 1737 | dependencies: 1738 | '@eslint-community/eslint-utils': 4.4.1(eslint@9.18.0) 1739 | '@typescript-eslint/scope-manager': 8.21.0 1740 | '@typescript-eslint/types': 8.21.0 1741 | '@typescript-eslint/typescript-estree': 8.21.0(typescript@5.7.3) 1742 | eslint: 9.18.0 1743 | typescript: 5.7.3 1744 | transitivePeerDependencies: 1745 | - supports-color 1746 | 1747 | '@typescript-eslint/visitor-keys@8.21.0': 1748 | dependencies: 1749 | '@typescript-eslint/types': 8.21.0 1750 | eslint-visitor-keys: 4.2.0 1751 | 1752 | '@vitest/expect@3.0.4': 1753 | dependencies: 1754 | '@vitest/spy': 3.0.4 1755 | '@vitest/utils': 3.0.4 1756 | chai: 5.1.2 1757 | tinyrainbow: 2.0.0 1758 | 1759 | '@vitest/mocker@3.0.4(vite@6.0.11(@types/node@22.10.9))': 1760 | dependencies: 1761 | '@vitest/spy': 3.0.4 1762 | estree-walker: 3.0.3 1763 | magic-string: 0.30.17 1764 | optionalDependencies: 1765 | vite: 6.0.11(@types/node@22.10.9) 1766 | 1767 | '@vitest/pretty-format@3.0.4': 1768 | dependencies: 1769 | tinyrainbow: 2.0.0 1770 | 1771 | '@vitest/runner@3.0.4': 1772 | dependencies: 1773 | '@vitest/utils': 3.0.4 1774 | pathe: 2.0.2 1775 | 1776 | '@vitest/snapshot@3.0.4': 1777 | dependencies: 1778 | '@vitest/pretty-format': 3.0.4 1779 | magic-string: 0.30.17 1780 | pathe: 2.0.2 1781 | 1782 | '@vitest/spy@3.0.4': 1783 | dependencies: 1784 | tinyspy: 3.0.2 1785 | 1786 | '@vitest/utils@3.0.4': 1787 | dependencies: 1788 | '@vitest/pretty-format': 3.0.4 1789 | loupe: 3.1.2 1790 | tinyrainbow: 2.0.0 1791 | 1792 | acorn-jsx@5.3.2(acorn@8.14.0): 1793 | dependencies: 1794 | acorn: 8.14.0 1795 | 1796 | acorn@8.14.0: {} 1797 | 1798 | ajv@6.12.6: 1799 | dependencies: 1800 | fast-deep-equal: 3.1.3 1801 | fast-json-stable-stringify: 2.1.0 1802 | json-schema-traverse: 0.4.1 1803 | uri-js: 4.4.1 1804 | 1805 | ansi-regex@5.0.1: {} 1806 | 1807 | ansi-regex@6.1.0: {} 1808 | 1809 | ansi-styles@4.3.0: 1810 | dependencies: 1811 | color-convert: 2.0.1 1812 | 1813 | ansi-styles@6.2.1: {} 1814 | 1815 | any-promise@1.3.0: {} 1816 | 1817 | argparse@2.0.1: {} 1818 | 1819 | assertion-error@2.0.1: {} 1820 | 1821 | balanced-match@1.0.2: {} 1822 | 1823 | brace-expansion@1.1.11: 1824 | dependencies: 1825 | balanced-match: 1.0.2 1826 | concat-map: 0.0.1 1827 | 1828 | brace-expansion@2.0.1: 1829 | dependencies: 1830 | balanced-match: 1.0.2 1831 | 1832 | braces@3.0.3: 1833 | dependencies: 1834 | fill-range: 7.1.1 1835 | 1836 | bundle-require@5.1.0(esbuild@0.24.2): 1837 | dependencies: 1838 | esbuild: 0.24.2 1839 | load-tsconfig: 0.2.5 1840 | 1841 | cac@6.7.14: {} 1842 | 1843 | callsites@3.1.0: {} 1844 | 1845 | chai@5.1.2: 1846 | dependencies: 1847 | assertion-error: 2.0.1 1848 | check-error: 2.1.1 1849 | deep-eql: 5.0.2 1850 | loupe: 3.1.2 1851 | pathval: 2.0.0 1852 | 1853 | chalk@4.1.2: 1854 | dependencies: 1855 | ansi-styles: 4.3.0 1856 | supports-color: 7.2.0 1857 | 1858 | check-error@2.1.1: {} 1859 | 1860 | chokidar@4.0.3: 1861 | dependencies: 1862 | readdirp: 4.1.1 1863 | 1864 | color-convert@2.0.1: 1865 | dependencies: 1866 | color-name: 1.1.4 1867 | 1868 | color-name@1.1.4: {} 1869 | 1870 | commander@4.1.1: {} 1871 | 1872 | concat-map@0.0.1: {} 1873 | 1874 | consola@3.4.0: {} 1875 | 1876 | cross-spawn@7.0.6: 1877 | dependencies: 1878 | path-key: 3.1.1 1879 | shebang-command: 2.0.0 1880 | which: 2.0.2 1881 | 1882 | debug@4.4.0: 1883 | dependencies: 1884 | ms: 2.1.3 1885 | 1886 | deep-eql@5.0.2: {} 1887 | 1888 | deep-is@0.1.4: {} 1889 | 1890 | detect-indent@7.0.1: {} 1891 | 1892 | detect-newline@4.0.1: {} 1893 | 1894 | eastasianwidth@0.2.0: {} 1895 | 1896 | emoji-regex@8.0.0: {} 1897 | 1898 | emoji-regex@9.2.2: {} 1899 | 1900 | es-module-lexer@1.6.0: {} 1901 | 1902 | esbuild@0.24.2: 1903 | optionalDependencies: 1904 | '@esbuild/aix-ppc64': 0.24.2 1905 | '@esbuild/android-arm': 0.24.2 1906 | '@esbuild/android-arm64': 0.24.2 1907 | '@esbuild/android-x64': 0.24.2 1908 | '@esbuild/darwin-arm64': 0.24.2 1909 | '@esbuild/darwin-x64': 0.24.2 1910 | '@esbuild/freebsd-arm64': 0.24.2 1911 | '@esbuild/freebsd-x64': 0.24.2 1912 | '@esbuild/linux-arm': 0.24.2 1913 | '@esbuild/linux-arm64': 0.24.2 1914 | '@esbuild/linux-ia32': 0.24.2 1915 | '@esbuild/linux-loong64': 0.24.2 1916 | '@esbuild/linux-mips64el': 0.24.2 1917 | '@esbuild/linux-ppc64': 0.24.2 1918 | '@esbuild/linux-riscv64': 0.24.2 1919 | '@esbuild/linux-s390x': 0.24.2 1920 | '@esbuild/linux-x64': 0.24.2 1921 | '@esbuild/netbsd-arm64': 0.24.2 1922 | '@esbuild/netbsd-x64': 0.24.2 1923 | '@esbuild/openbsd-arm64': 0.24.2 1924 | '@esbuild/openbsd-x64': 0.24.2 1925 | '@esbuild/sunos-x64': 0.24.2 1926 | '@esbuild/win32-arm64': 0.24.2 1927 | '@esbuild/win32-ia32': 0.24.2 1928 | '@esbuild/win32-x64': 0.24.2 1929 | 1930 | escape-string-regexp@4.0.0: {} 1931 | 1932 | eslint-scope@8.2.0: 1933 | dependencies: 1934 | esrecurse: 4.3.0 1935 | estraverse: 5.3.0 1936 | 1937 | eslint-visitor-keys@3.4.3: {} 1938 | 1939 | eslint-visitor-keys@4.2.0: {} 1940 | 1941 | eslint@9.18.0: 1942 | dependencies: 1943 | '@eslint-community/eslint-utils': 4.4.1(eslint@9.18.0) 1944 | '@eslint-community/regexpp': 4.12.1 1945 | '@eslint/config-array': 0.19.1 1946 | '@eslint/core': 0.10.0 1947 | '@eslint/eslintrc': 3.2.0 1948 | '@eslint/js': 9.18.0 1949 | '@eslint/plugin-kit': 0.2.5 1950 | '@humanfs/node': 0.16.6 1951 | '@humanwhocodes/module-importer': 1.0.1 1952 | '@humanwhocodes/retry': 0.4.1 1953 | '@types/estree': 1.0.6 1954 | '@types/json-schema': 7.0.15 1955 | ajv: 6.12.6 1956 | chalk: 4.1.2 1957 | cross-spawn: 7.0.6 1958 | debug: 4.4.0 1959 | escape-string-regexp: 4.0.0 1960 | eslint-scope: 8.2.0 1961 | eslint-visitor-keys: 4.2.0 1962 | espree: 10.3.0 1963 | esquery: 1.6.0 1964 | esutils: 2.0.3 1965 | fast-deep-equal: 3.1.3 1966 | file-entry-cache: 8.0.0 1967 | find-up: 5.0.0 1968 | glob-parent: 6.0.2 1969 | ignore: 5.3.2 1970 | imurmurhash: 0.1.4 1971 | is-glob: 4.0.3 1972 | json-stable-stringify-without-jsonify: 1.0.1 1973 | lodash.merge: 4.6.2 1974 | minimatch: 3.1.2 1975 | natural-compare: 1.4.0 1976 | optionator: 0.9.4 1977 | transitivePeerDependencies: 1978 | - supports-color 1979 | 1980 | espree@10.3.0: 1981 | dependencies: 1982 | acorn: 8.14.0 1983 | acorn-jsx: 5.3.2(acorn@8.14.0) 1984 | eslint-visitor-keys: 4.2.0 1985 | 1986 | esquery@1.6.0: 1987 | dependencies: 1988 | estraverse: 5.3.0 1989 | 1990 | esrecurse@4.3.0: 1991 | dependencies: 1992 | estraverse: 5.3.0 1993 | 1994 | estraverse@5.3.0: {} 1995 | 1996 | estree-walker@3.0.3: 1997 | dependencies: 1998 | '@types/estree': 1.0.6 1999 | 2000 | esutils@2.0.3: {} 2001 | 2002 | expect-type@1.1.0: {} 2003 | 2004 | fast-deep-equal@3.1.3: {} 2005 | 2006 | fast-glob@3.3.3: 2007 | dependencies: 2008 | '@nodelib/fs.stat': 2.0.5 2009 | '@nodelib/fs.walk': 1.2.8 2010 | glob-parent: 5.1.2 2011 | merge2: 1.4.1 2012 | micromatch: 4.0.8 2013 | 2014 | fast-json-stable-stringify@2.1.0: {} 2015 | 2016 | fast-levenshtein@2.0.6: {} 2017 | 2018 | fastq@1.18.0: 2019 | dependencies: 2020 | reusify: 1.0.4 2021 | 2022 | fdir@6.4.3(picomatch@4.0.2): 2023 | optionalDependencies: 2024 | picomatch: 4.0.2 2025 | 2026 | file-entry-cache@8.0.0: 2027 | dependencies: 2028 | flat-cache: 4.0.1 2029 | 2030 | fill-range@7.1.1: 2031 | dependencies: 2032 | to-regex-range: 5.0.1 2033 | 2034 | find-up@5.0.0: 2035 | dependencies: 2036 | locate-path: 6.0.0 2037 | path-exists: 4.0.0 2038 | 2039 | flat-cache@4.0.1: 2040 | dependencies: 2041 | flatted: 3.3.2 2042 | keyv: 4.5.4 2043 | 2044 | flatted@3.3.2: {} 2045 | 2046 | foreground-child@3.3.0: 2047 | dependencies: 2048 | cross-spawn: 7.0.6 2049 | signal-exit: 4.1.0 2050 | 2051 | fsevents@2.3.3: 2052 | optional: true 2053 | 2054 | get-stdin@9.0.0: {} 2055 | 2056 | git-hooks-list@3.1.0: {} 2057 | 2058 | glob-parent@5.1.2: 2059 | dependencies: 2060 | is-glob: 4.0.3 2061 | 2062 | glob-parent@6.0.2: 2063 | dependencies: 2064 | is-glob: 4.0.3 2065 | 2066 | glob@10.4.5: 2067 | dependencies: 2068 | foreground-child: 3.3.0 2069 | jackspeak: 3.4.3 2070 | minimatch: 9.0.5 2071 | minipass: 7.1.2 2072 | package-json-from-dist: 1.0.1 2073 | path-scurry: 1.11.1 2074 | 2075 | globals@11.12.0: {} 2076 | 2077 | globals@14.0.0: {} 2078 | 2079 | globals@15.14.0: {} 2080 | 2081 | graphemer@1.4.0: {} 2082 | 2083 | has-flag@4.0.0: {} 2084 | 2085 | ignore@5.3.2: {} 2086 | 2087 | import-fresh@3.3.0: 2088 | dependencies: 2089 | parent-module: 1.0.1 2090 | resolve-from: 4.0.0 2091 | 2092 | imurmurhash@0.1.4: {} 2093 | 2094 | is-extglob@2.1.1: {} 2095 | 2096 | is-fullwidth-code-point@3.0.0: {} 2097 | 2098 | is-glob@4.0.3: 2099 | dependencies: 2100 | is-extglob: 2.1.1 2101 | 2102 | is-number@7.0.0: {} 2103 | 2104 | is-plain-obj@4.1.0: {} 2105 | 2106 | isexe@2.0.0: {} 2107 | 2108 | jackspeak@3.4.3: 2109 | dependencies: 2110 | '@isaacs/cliui': 8.0.2 2111 | optionalDependencies: 2112 | '@pkgjs/parseargs': 0.11.0 2113 | 2114 | joycon@3.1.1: {} 2115 | 2116 | js-tokens@4.0.0: {} 2117 | 2118 | js-yaml@4.1.0: 2119 | dependencies: 2120 | argparse: 2.0.1 2121 | 2122 | jsesc@3.1.0: {} 2123 | 2124 | json-buffer@3.0.1: {} 2125 | 2126 | json-schema-traverse@0.4.1: {} 2127 | 2128 | json-stable-stringify-without-jsonify@1.0.1: {} 2129 | 2130 | keyv@4.5.4: 2131 | dependencies: 2132 | json-buffer: 3.0.1 2133 | 2134 | levn@0.4.1: 2135 | dependencies: 2136 | prelude-ls: 1.2.1 2137 | type-check: 0.4.0 2138 | 2139 | lilconfig@3.1.3: {} 2140 | 2141 | lines-and-columns@1.2.4: {} 2142 | 2143 | load-tsconfig@0.2.5: {} 2144 | 2145 | locate-path@6.0.0: 2146 | dependencies: 2147 | p-locate: 5.0.0 2148 | 2149 | lodash.merge@4.6.2: {} 2150 | 2151 | lodash.sortby@4.7.0: {} 2152 | 2153 | loupe@3.1.2: {} 2154 | 2155 | lru-cache@10.4.3: {} 2156 | 2157 | magic-string@0.30.17: 2158 | dependencies: 2159 | '@jridgewell/sourcemap-codec': 1.5.0 2160 | 2161 | merge2@1.4.1: {} 2162 | 2163 | micromatch@4.0.8: 2164 | dependencies: 2165 | braces: 3.0.3 2166 | picomatch: 2.3.1 2167 | 2168 | minimatch@3.1.2: 2169 | dependencies: 2170 | brace-expansion: 1.1.11 2171 | 2172 | minimatch@9.0.5: 2173 | dependencies: 2174 | brace-expansion: 2.0.1 2175 | 2176 | minipass@7.1.2: {} 2177 | 2178 | ms@2.1.3: {} 2179 | 2180 | mvdan-sh@0.10.1: {} 2181 | 2182 | mz@2.7.0: 2183 | dependencies: 2184 | any-promise: 1.3.0 2185 | object-assign: 4.1.1 2186 | thenify-all: 1.6.0 2187 | 2188 | nanoid@3.3.8: {} 2189 | 2190 | natural-compare@1.4.0: {} 2191 | 2192 | object-assign@4.1.1: {} 2193 | 2194 | optionator@0.9.4: 2195 | dependencies: 2196 | deep-is: 0.1.4 2197 | fast-levenshtein: 2.0.6 2198 | levn: 0.4.1 2199 | prelude-ls: 1.2.1 2200 | type-check: 0.4.0 2201 | word-wrap: 1.2.5 2202 | 2203 | p-limit@3.1.0: 2204 | dependencies: 2205 | yocto-queue: 0.1.0 2206 | 2207 | p-locate@5.0.0: 2208 | dependencies: 2209 | p-limit: 3.1.0 2210 | 2211 | package-json-from-dist@1.0.1: {} 2212 | 2213 | parent-module@1.0.1: 2214 | dependencies: 2215 | callsites: 3.1.0 2216 | 2217 | path-exists@4.0.0: {} 2218 | 2219 | path-key@3.1.1: {} 2220 | 2221 | path-scurry@1.11.1: 2222 | dependencies: 2223 | lru-cache: 10.4.3 2224 | minipass: 7.1.2 2225 | 2226 | pathe@2.0.2: {} 2227 | 2228 | pathval@2.0.0: {} 2229 | 2230 | picocolors@1.1.1: {} 2231 | 2232 | picomatch@2.3.1: {} 2233 | 2234 | picomatch@4.0.2: {} 2235 | 2236 | pirates@4.0.6: {} 2237 | 2238 | postcss-load-config@6.0.1(postcss@8.5.1): 2239 | dependencies: 2240 | lilconfig: 3.1.3 2241 | optionalDependencies: 2242 | postcss: 8.5.1 2243 | 2244 | postcss@8.5.1: 2245 | dependencies: 2246 | nanoid: 3.3.8 2247 | picocolors: 1.1.1 2248 | source-map-js: 1.2.1 2249 | 2250 | prelude-ls@1.2.1: {} 2251 | 2252 | prettier-plugin-packagejson@2.5.8(prettier@3.4.2): 2253 | dependencies: 2254 | sort-package-json: 2.14.0 2255 | synckit: 0.9.2 2256 | optionalDependencies: 2257 | prettier: 3.4.2 2258 | 2259 | prettier-plugin-sh@0.14.0(prettier@3.4.2): 2260 | dependencies: 2261 | mvdan-sh: 0.10.1 2262 | prettier: 3.4.2 2263 | sh-syntax: 0.4.2 2264 | 2265 | prettier@3.4.2: {} 2266 | 2267 | punycode@2.3.1: {} 2268 | 2269 | queue-microtask@1.2.3: {} 2270 | 2271 | readdirp@4.1.1: {} 2272 | 2273 | resolve-from@4.0.0: {} 2274 | 2275 | resolve-from@5.0.0: {} 2276 | 2277 | reusify@1.0.4: {} 2278 | 2279 | rollup@4.31.0: 2280 | dependencies: 2281 | '@types/estree': 1.0.6 2282 | optionalDependencies: 2283 | '@rollup/rollup-android-arm-eabi': 4.31.0 2284 | '@rollup/rollup-android-arm64': 4.31.0 2285 | '@rollup/rollup-darwin-arm64': 4.31.0 2286 | '@rollup/rollup-darwin-x64': 4.31.0 2287 | '@rollup/rollup-freebsd-arm64': 4.31.0 2288 | '@rollup/rollup-freebsd-x64': 4.31.0 2289 | '@rollup/rollup-linux-arm-gnueabihf': 4.31.0 2290 | '@rollup/rollup-linux-arm-musleabihf': 4.31.0 2291 | '@rollup/rollup-linux-arm64-gnu': 4.31.0 2292 | '@rollup/rollup-linux-arm64-musl': 4.31.0 2293 | '@rollup/rollup-linux-loongarch64-gnu': 4.31.0 2294 | '@rollup/rollup-linux-powerpc64le-gnu': 4.31.0 2295 | '@rollup/rollup-linux-riscv64-gnu': 4.31.0 2296 | '@rollup/rollup-linux-s390x-gnu': 4.31.0 2297 | '@rollup/rollup-linux-x64-gnu': 4.31.0 2298 | '@rollup/rollup-linux-x64-musl': 4.31.0 2299 | '@rollup/rollup-win32-arm64-msvc': 4.31.0 2300 | '@rollup/rollup-win32-ia32-msvc': 4.31.0 2301 | '@rollup/rollup-win32-x64-msvc': 4.31.0 2302 | fsevents: 2.3.3 2303 | 2304 | run-parallel@1.2.0: 2305 | dependencies: 2306 | queue-microtask: 1.2.3 2307 | 2308 | semver@7.6.3: {} 2309 | 2310 | sh-syntax@0.4.2: 2311 | dependencies: 2312 | tslib: 2.8.1 2313 | 2314 | shebang-command@2.0.0: 2315 | dependencies: 2316 | shebang-regex: 3.0.0 2317 | 2318 | shebang-regex@3.0.0: {} 2319 | 2320 | siginfo@2.0.0: {} 2321 | 2322 | signal-exit@4.1.0: {} 2323 | 2324 | sort-object-keys@1.1.3: {} 2325 | 2326 | sort-package-json@2.14.0: 2327 | dependencies: 2328 | detect-indent: 7.0.1 2329 | detect-newline: 4.0.1 2330 | get-stdin: 9.0.0 2331 | git-hooks-list: 3.1.0 2332 | is-plain-obj: 4.1.0 2333 | semver: 7.6.3 2334 | sort-object-keys: 1.1.3 2335 | tinyglobby: 0.2.10 2336 | 2337 | source-map-js@1.2.1: {} 2338 | 2339 | source-map@0.8.0-beta.0: 2340 | dependencies: 2341 | whatwg-url: 7.1.0 2342 | 2343 | stackback@0.0.2: {} 2344 | 2345 | std-env@3.8.0: {} 2346 | 2347 | string-width@4.2.3: 2348 | dependencies: 2349 | emoji-regex: 8.0.0 2350 | is-fullwidth-code-point: 3.0.0 2351 | strip-ansi: 6.0.1 2352 | 2353 | string-width@5.1.2: 2354 | dependencies: 2355 | eastasianwidth: 0.2.0 2356 | emoji-regex: 9.2.2 2357 | strip-ansi: 7.1.0 2358 | 2359 | strip-ansi@6.0.1: 2360 | dependencies: 2361 | ansi-regex: 5.0.1 2362 | 2363 | strip-ansi@7.1.0: 2364 | dependencies: 2365 | ansi-regex: 6.1.0 2366 | 2367 | strip-json-comments@3.1.1: {} 2368 | 2369 | sucrase@3.35.0: 2370 | dependencies: 2371 | '@jridgewell/gen-mapping': 0.3.8 2372 | commander: 4.1.1 2373 | glob: 10.4.5 2374 | lines-and-columns: 1.2.4 2375 | mz: 2.7.0 2376 | pirates: 4.0.6 2377 | ts-interface-checker: 0.1.13 2378 | 2379 | supports-color@7.2.0: 2380 | dependencies: 2381 | has-flag: 4.0.0 2382 | 2383 | synckit@0.9.2: 2384 | dependencies: 2385 | '@pkgr/core': 0.1.1 2386 | tslib: 2.8.1 2387 | 2388 | thenify-all@1.6.0: 2389 | dependencies: 2390 | thenify: 3.3.1 2391 | 2392 | thenify@3.3.1: 2393 | dependencies: 2394 | any-promise: 1.3.0 2395 | 2396 | tinybench@2.9.0: {} 2397 | 2398 | tinyexec@0.3.2: {} 2399 | 2400 | tinyglobby@0.2.10: 2401 | dependencies: 2402 | fdir: 6.4.3(picomatch@4.0.2) 2403 | picomatch: 4.0.2 2404 | 2405 | tinypool@1.0.2: {} 2406 | 2407 | tinyrainbow@2.0.0: {} 2408 | 2409 | tinyspy@3.0.2: {} 2410 | 2411 | to-regex-range@5.0.1: 2412 | dependencies: 2413 | is-number: 7.0.0 2414 | 2415 | tr46@1.0.1: 2416 | dependencies: 2417 | punycode: 2.3.1 2418 | 2419 | tree-kill@1.2.2: {} 2420 | 2421 | ts-api-utils@2.0.0(typescript@5.7.3): 2422 | dependencies: 2423 | typescript: 5.7.3 2424 | 2425 | ts-interface-checker@0.1.13: {} 2426 | 2427 | tslib@2.8.1: {} 2428 | 2429 | tsup@8.3.5(postcss@8.5.1)(typescript@5.7.3): 2430 | dependencies: 2431 | bundle-require: 5.1.0(esbuild@0.24.2) 2432 | cac: 6.7.14 2433 | chokidar: 4.0.3 2434 | consola: 3.4.0 2435 | debug: 4.4.0 2436 | esbuild: 0.24.2 2437 | joycon: 3.1.1 2438 | picocolors: 1.1.1 2439 | postcss-load-config: 6.0.1(postcss@8.5.1) 2440 | resolve-from: 5.0.0 2441 | rollup: 4.31.0 2442 | source-map: 0.8.0-beta.0 2443 | sucrase: 3.35.0 2444 | tinyexec: 0.3.2 2445 | tinyglobby: 0.2.10 2446 | tree-kill: 1.2.2 2447 | optionalDependencies: 2448 | postcss: 8.5.1 2449 | typescript: 5.7.3 2450 | transitivePeerDependencies: 2451 | - jiti 2452 | - supports-color 2453 | - tsx 2454 | - yaml 2455 | 2456 | type-check@0.4.0: 2457 | dependencies: 2458 | prelude-ls: 1.2.1 2459 | 2460 | typescript-eslint@8.21.0(eslint@9.18.0)(typescript@5.7.3): 2461 | dependencies: 2462 | '@typescript-eslint/eslint-plugin': 8.21.0(@typescript-eslint/parser@8.21.0(eslint@9.18.0)(typescript@5.7.3))(eslint@9.18.0)(typescript@5.7.3) 2463 | '@typescript-eslint/parser': 8.21.0(eslint@9.18.0)(typescript@5.7.3) 2464 | '@typescript-eslint/utils': 8.21.0(eslint@9.18.0)(typescript@5.7.3) 2465 | eslint: 9.18.0 2466 | typescript: 5.7.3 2467 | transitivePeerDependencies: 2468 | - supports-color 2469 | 2470 | typescript@5.7.3: {} 2471 | 2472 | undici-types@6.20.0: {} 2473 | 2474 | uri-js@4.4.1: 2475 | dependencies: 2476 | punycode: 2.3.1 2477 | 2478 | vite-node@3.0.4(@types/node@22.10.9): 2479 | dependencies: 2480 | cac: 6.7.14 2481 | debug: 4.4.0 2482 | es-module-lexer: 1.6.0 2483 | pathe: 2.0.2 2484 | vite: 6.0.11(@types/node@22.10.9) 2485 | transitivePeerDependencies: 2486 | - '@types/node' 2487 | - jiti 2488 | - less 2489 | - lightningcss 2490 | - sass 2491 | - sass-embedded 2492 | - stylus 2493 | - sugarss 2494 | - supports-color 2495 | - terser 2496 | - tsx 2497 | - yaml 2498 | 2499 | vite@6.0.11(@types/node@22.10.9): 2500 | dependencies: 2501 | esbuild: 0.24.2 2502 | postcss: 8.5.1 2503 | rollup: 4.31.0 2504 | optionalDependencies: 2505 | '@types/node': 22.10.9 2506 | fsevents: 2.3.3 2507 | 2508 | vitest@3.0.4(@types/node@22.10.9): 2509 | dependencies: 2510 | '@vitest/expect': 3.0.4 2511 | '@vitest/mocker': 3.0.4(vite@6.0.11(@types/node@22.10.9)) 2512 | '@vitest/pretty-format': 3.0.4 2513 | '@vitest/runner': 3.0.4 2514 | '@vitest/snapshot': 3.0.4 2515 | '@vitest/spy': 3.0.4 2516 | '@vitest/utils': 3.0.4 2517 | chai: 5.1.2 2518 | debug: 4.4.0 2519 | expect-type: 1.1.0 2520 | magic-string: 0.30.17 2521 | pathe: 2.0.2 2522 | std-env: 3.8.0 2523 | tinybench: 2.9.0 2524 | tinyexec: 0.3.2 2525 | tinypool: 1.0.2 2526 | tinyrainbow: 2.0.0 2527 | vite: 6.0.11(@types/node@22.10.9) 2528 | vite-node: 3.0.4(@types/node@22.10.9) 2529 | why-is-node-running: 2.3.0 2530 | optionalDependencies: 2531 | '@types/node': 22.10.9 2532 | transitivePeerDependencies: 2533 | - jiti 2534 | - less 2535 | - lightningcss 2536 | - msw 2537 | - sass 2538 | - sass-embedded 2539 | - stylus 2540 | - sugarss 2541 | - supports-color 2542 | - terser 2543 | - tsx 2544 | - yaml 2545 | 2546 | webidl-conversions@4.0.2: {} 2547 | 2548 | whatwg-url@7.1.0: 2549 | dependencies: 2550 | lodash.sortby: 4.7.0 2551 | tr46: 1.0.1 2552 | webidl-conversions: 4.0.2 2553 | 2554 | which@2.0.2: 2555 | dependencies: 2556 | isexe: 2.0.0 2557 | 2558 | why-is-node-running@2.3.0: 2559 | dependencies: 2560 | siginfo: 2.0.0 2561 | stackback: 0.0.2 2562 | 2563 | word-wrap@1.2.5: {} 2564 | 2565 | wrap-ansi@7.0.0: 2566 | dependencies: 2567 | ansi-styles: 4.3.0 2568 | string-width: 4.2.3 2569 | strip-ansi: 6.0.1 2570 | 2571 | wrap-ansi@8.1.0: 2572 | dependencies: 2573 | ansi-styles: 6.2.1 2574 | string-width: 5.1.2 2575 | strip-ansi: 7.1.0 2576 | 2577 | yocto-queue@0.1.0: {} 2578 | --------------------------------------------------------------------------------