├── .npmrc ├── tsconfig.json ├── tsup.config.ts ├── vitest.config.ts ├── .prettierignore ├── .github ├── dependabot.yml └── workflows │ ├── ci.yml │ └── release.yml ├── eslint.config.mjs ├── LICENSE ├── src ├── typings.ts ├── index.ts └── index.test.ts ├── package.json ├── .gitignore ├── README.md └── pnpm-lock.yaml /.npmrc: -------------------------------------------------------------------------------- 1 | hoist=true 2 | shamefully-hoist=true 3 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/tsconfig", 3 | "extends": "@shahrad/tsconfig", 4 | "compilerOptions": { 5 | "noUncheckedIndexedAccess": false 6 | }, 7 | "include": ["**/*.ts"], 8 | "exclude": ["node_modules", "dist"] 9 | } 10 | -------------------------------------------------------------------------------- /tsup.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'tsup'; 2 | 3 | export default defineConfig({ 4 | clean: true, 5 | dts: true, 6 | splitting: true, 7 | entry: ['src/index.ts'], 8 | format: ['cjs', 'esm'], 9 | target: 'esnext', 10 | outDir: 'dist', 11 | }); 12 | -------------------------------------------------------------------------------- /vitest.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vitest/config'; 2 | 3 | export default defineConfig({ 4 | test: { 5 | environment: 'node', 6 | testTimeout: 20000, 7 | globals: true, 8 | exclude: ['**/node_modules/**', '**/dist/**'], 9 | }, 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 | package-lock.json 16 | yarn.lock 17 | pnpm-lock.yaml 18 | 19 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: 'npm' 4 | directory: '/' 5 | schedule: 6 | interval: 'daily' 7 | groups: 8 | all-dependencies: 9 | patterns: 10 | - '*' 11 | update-types: 12 | - 'minor' 13 | - 'patch' 14 | - package-ecosystem: 'github-actions' 15 | directory: '/' 16 | schedule: 17 | interval: 'daily' 18 | -------------------------------------------------------------------------------- /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 | languageOptions: { 10 | ecmaVersion: 'latest', 11 | sourceType: 'module', 12 | globals: { 13 | ...globals.node, 14 | ...globals.browser, 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@v5 13 | - uses: pnpm/action-setup@v4 14 | - uses: actions/setup-node@v6 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@v5 26 | - uses: pnpm/action-setup@v4 27 | - uses: actions/setup-node@v6 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@v5 39 | - uses: pnpm/action-setup@v4 40 | - uses: actions/setup-node@v6 41 | with: 42 | node-version: 22 43 | cache: 'pnpm' 44 | 45 | - run: pnpm install --frozen-lockfile 46 | - run: pnpm test 47 | -------------------------------------------------------------------------------- /src/typings.ts: -------------------------------------------------------------------------------- 1 | export type AnyFunction = (...args: any[]) => T; 2 | 3 | export interface DebounceOptions { 4 | /** 5 | * Execute the function immediately at the start of the wait interval. 6 | * For asynchronous functions, this is equivalent to calling on the leading edge of the timeout. 7 | * 8 | * @default false 9 | */ 10 | readonly immediate?: boolean; 11 | /** 12 | * An `AbortSignal` to cancel the debounced function. 13 | * This is only applicable to asynchronous functions. 14 | */ 15 | readonly signal?: AbortSignal; 16 | } 17 | 18 | interface DebouncedMethods { 19 | /** 20 | * Indicates whether the debounce delay is currently active. 21 | */ 22 | readonly isPending: boolean; 23 | 24 | /** 25 | * Cancels any scheduled executions. 26 | */ 27 | clear(): void; 28 | 29 | /** 30 | * If an execution is scheduled, it will be immediately executed and the timer will be cleared. 31 | * For asynchronous functions, this returns a promise that resolves with the result. 32 | */ 33 | flush: F extends AnyFunction> ? () => Promise> : () => void; 34 | } 35 | 36 | export type DebouncedFunction = DebouncedMethods & { 37 | ( 38 | ...args: Parameters 39 | ): F extends AnyFunction> ? Promise> : ReturnType | undefined; 40 | }; 41 | -------------------------------------------------------------------------------- /.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@v5 38 | - uses: pnpm/action-setup@v4 39 | - uses: actions/setup-node@v6 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 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@se-oss/debounce", 3 | "version": "1.0.1", 4 | "description": "A simple and powerful debounce library for both synchronous and asynchronous functions.", 5 | "keywords": [ 6 | "debounce", 7 | "async", 8 | "promise", 9 | "throttle", 10 | "rate-limit" 11 | ], 12 | "homepage": "https://github.com/shahradelahi/ts-debounce", 13 | "repository": "github:shahradelahi/ts-debounce", 14 | "license": "MIT", 15 | "author": "Shahrad Elahi (https://github.com/shahradelahi)", 16 | "type": "module", 17 | "exports": { 18 | ".": { 19 | "import": "./dist/index.js", 20 | "require": "./dist/index.cjs", 21 | "default": "./dist/index.js" 22 | } 23 | }, 24 | "main": "dist/index.cjs", 25 | "module": "dist/index.js", 26 | "browser": "dist/index.js", 27 | "types": "dist/index.d.ts", 28 | "files": [ 29 | "dist/**", 30 | "!**/*.d.cts" 31 | ], 32 | "scripts": { 33 | "bench": "vitest bench --run", 34 | "build": "pnpm typecheck && tsup", 35 | "clean": "git clean -dfx node_modules dist .tsbuildinfo", 36 | "dev": "tsup --watch", 37 | "format": "prettier --write .", 38 | "format:check": "prettier --check .", 39 | "lint": "pnpm typecheck && eslint .", 40 | "lint:fix": "eslint --fix .", 41 | "prepublishOnly": "pnpm build && pnpm lint && pnpm format:check && pnpm test", 42 | "test": "vitest --run", 43 | "typecheck": "tsc --noEmit" 44 | }, 45 | "prettier": "@shahrad/prettier-config", 46 | "devDependencies": { 47 | "@shahrad/eslint-config": "^1.0.1", 48 | "@shahrad/prettier-config": "^1.2.2", 49 | "@shahrad/tsconfig": "^1.2.0", 50 | "@types/node": "^24.10.0", 51 | "eslint": "^9.39.1", 52 | "globals": "^16.5.0", 53 | "prettier": "^3.6.2", 54 | "tsup": "^8.5.0", 55 | "typescript": "^5.9.3", 56 | "vitest": "^3.2.4" 57 | }, 58 | "packageManager": "pnpm@10.20.0+sha512.cf9998222162dd85864d0a8102e7892e7ba4ceadebbf5a31f9c2fce48dfce317a9c53b9f6464d1ef9042cba2e02ae02a9f7c143a2b438cd93c91840f0192b9dd" 59 | } 60 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | lerna-debug.log* 8 | 9 | # Diagnostic reports (https://nodejs.org/api/report.html) 10 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 11 | 12 | # Runtime data 13 | pids 14 | *.pid 15 | *.seed 16 | *.pid.lock 17 | 18 | # Directory for instrumented libs generated by jscoverage/JSCover 19 | lib-cov 20 | 21 | # Coverage directory used by tools like istanbul 22 | coverage 23 | *.lcov 24 | 25 | # nyc test coverage 26 | .nyc_output 27 | 28 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 29 | .grunt 30 | 31 | # Bower dependency directory (https://bower.io/) 32 | bower_components 33 | 34 | # node-waf configuration 35 | .lock-wscript 36 | 37 | # Compiled binary addons (https://nodejs.org/api/addons.html) 38 | build/Release 39 | 40 | # Dependency directories 41 | node_modules/ 42 | jspm_packages/ 43 | 44 | # Snowpack dependency directory (https://snowpack.dev/) 45 | web_modules/ 46 | 47 | # TypeScript cache 48 | *.tsbuildinfo 49 | 50 | # Optional npm cache directory 51 | .npm 52 | 53 | # Optional eslint cache 54 | .eslintcache 55 | 56 | # Optional stylelint cache 57 | .stylelintcache 58 | 59 | # Optional REPL history 60 | .node_repl_history 61 | 62 | # Output of 'npm pack' 63 | *.tgz 64 | 65 | # Yarn Integrity file 66 | .yarn-integrity 67 | 68 | # dotenv environment variable files 69 | .env 70 | .env.* 71 | !.env.example 72 | 73 | # parcel-bundler cache (https://parceljs.org/) 74 | .cache 75 | .parcel-cache 76 | 77 | # Next.js build output 78 | .next 79 | out 80 | 81 | # Nuxt.js build / generate output 82 | .nuxt 83 | dist 84 | 85 | # Gatsby files 86 | .cache/ 87 | # Comment in the public line in if your project uses Gatsby and not Next.js 88 | # https://nextjs.org/blog/next-9-1#public-directory-support 89 | # public 90 | 91 | # vuepress build output 92 | .vuepress/dist 93 | 94 | # vuepress v2.x temp and cache directory 95 | .temp 96 | .cache 97 | 98 | # Sveltekit cache directory 99 | .svelte-kit/ 100 | 101 | # vitepress build output 102 | **/.vitepress/dist 103 | 104 | # vitepress cache directory 105 | **/.vitepress/cache 106 | 107 | # Docusaurus cache and generated files 108 | .docusaurus 109 | 110 | # Serverless directories 111 | .serverless/ 112 | 113 | # FuseBox cache 114 | .fusebox/ 115 | 116 | # DynamoDB Local files 117 | .dynamodb/ 118 | 119 | # Firebase cache directory 120 | .firebase/ 121 | 122 | # TernJS port file 123 | .tern-port 124 | 125 | # Stores VSCode versions used for testing VSCode extensions 126 | .vscode-test 127 | 128 | # yarn v3 129 | .pnp.* 130 | .yarn/* 131 | !.yarn/patches 132 | !.yarn/plugins 133 | !.yarn/releases 134 | !.yarn/sdks 135 | !.yarn/versions 136 | 137 | # Vite logs files 138 | vite.config.js.timestamp-* 139 | vite.config.ts.timestamp-* 140 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # @se-oss/debounce 2 | 3 | [![CI](https://github.com/shahradelahi/ts-debounce/actions/workflows/ci.yml/badge.svg?branch=main&event=push)](https://github.com/shahradelahi/ts-debounce/actions/workflows/ci.yml) 4 | [![NPM Version](https://img.shields.io/npm/v/@se-oss/debounce.svg)](https://www.npmjs.com/package/@se-oss/debounce) 5 | [![MIT License](https://img.shields.io/badge/License-MIT-blue.svg?style=flat)](/LICENSE) 6 | ![npm bundle size](https://img.shields.io/bundlephobia/minzip/@se-oss/debounce) 7 | [![Install Size](https://packagephobia.com/badge?p=@se-oss/debounce)](https://packagephobia.com/result?p=@se-oss/debounce) 8 | 9 | _@se-oss/debounce_ is a simple and powerful debounce library for both synchronous and asynchronous functions. 10 | 11 | --- 12 | 13 | - [Installation](#-installation) 14 | - [Usage](#-usage) 15 | - [Synchronous Function](#synchronous-function) 16 | - [Asynchronous Function](#asynchronous-function) 17 | - [Documentation](#-documentation) 18 | - [Contributing](#-contributing) 19 | - [License](#license) 20 | 21 | ## 📦 Installation 22 | 23 | ```bash 24 | npm install @se-oss/debounce 25 | ``` 26 | 27 |
28 | Install using your favorite package manager 29 | 30 | **pnpm** 31 | 32 | ```bash 33 | pnpm install @se-oss/debounce 34 | ``` 35 | 36 | **yarn** 37 | 38 | ```bash 39 | yarn add @se-oss/debounce 40 | ``` 41 | 42 |
43 | 44 | ## 📖 Usage 45 | 46 | The `debounce` function works with both synchronous and asynchronous functions. It automatically detects the function type and returns a debounced version with the appropriate behavior. 47 | 48 | ### Synchronous Function 49 | 50 | Use `debounce` for synchronous functions. 51 | 52 | ```javascript 53 | import { debounce } from '@se-oss/debounce'; 54 | 55 | function resize() { 56 | console.log('height', window.innerHeight); 57 | console.log('width', window.innerWidth); 58 | } 59 | 60 | window.onresize = debounce(resize, 200); 61 | ``` 62 | 63 | ### Asynchronous Function 64 | 65 | Use `debounce` for promise-returning or `async` functions. 66 | 67 | ```javascript 68 | import { debounce } from '@se-oss/debounce'; 69 | 70 | const expensiveCall = async (input) => { 71 | // simulate network request 72 | await new Promise((resolve) => setTimeout(resolve, 100)); 73 | return input; 74 | }; 75 | 76 | const debouncedFunction = debounce(expensiveCall, 200); 77 | 78 | for (const number of [1, 2, 3]) { 79 | (async () => { 80 | console.log(await debouncedFunction(number)); 81 | })(); 82 | } 83 | // => 3 84 | // => 3 85 | // => 3 86 | ``` 87 | 88 | ## 📚 Documentation 89 | 90 | For all configuration options, please see [the API docs](https://www.jsdocs.io/package/@se-oss/debounce). 91 | 92 | ## 🤝 Contributing 93 | 94 | Want to contribute? Awesome! To show your support is to star the project, or to raise issues on [GitHub](https://github.com/shahradelahi/ts-debounce) 95 | 96 | Thanks again for your support, it is much appreciated! 🙏 97 | 98 | ## License 99 | 100 | [MIT](/LICENSE) © [Shahrad Elahi](https://github.com/shahradelahi) and [contributors](https://github.com/shahradelahi/ts-debounce/graphs/contributors). 101 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import type { AnyFunction, DebouncedFunction, DebounceOptions } from './typings'; 2 | 3 | export function debounce( 4 | fn: F, 5 | wait: number, 6 | options: DebounceOptions = {} 7 | ): DebouncedFunction { 8 | if (typeof fn !== 'function') { 9 | throw new TypeError('Expected the first parameter to be a function.'); 10 | } 11 | 12 | const { immediate = false, signal } = options; 13 | // A more robust check for async functions, less likely to be fooled by wrappers. 14 | const isAsync = 15 | fn.constructor.name === 'AsyncFunction' || 16 | Object.prototype.toString.call(fn) === '[object AsyncFunction]'; 17 | 18 | let timeoutId: ReturnType | undefined; 19 | let lastArgs: Parameters | undefined; 20 | let lastThis: unknown; 21 | 22 | // Async-specific variables 23 | let promiseHandlers: { 24 | resolve: (value: ReturnType) => void; 25 | reject: (reason?: any) => void; 26 | }[] = []; 27 | let leadingValue: Promise> | undefined; 28 | 29 | // Sync-specific variable 30 | let result: ReturnType | undefined; 31 | 32 | function run() { 33 | const args = lastArgs; 34 | const context = lastThis; 35 | lastArgs = undefined; 36 | lastThis = undefined; 37 | 38 | if (isAsync) { 39 | const currentHandlers = promiseHandlers; 40 | promiseHandlers = []; 41 | leadingValue = undefined; 42 | 43 | (async () => { 44 | try { 45 | const asyncResult = await fn.apply(context, args as Parameters); 46 | for (const handler of currentHandlers) { 47 | handler.resolve(asyncResult); 48 | } 49 | } catch (error) { 50 | for (const handler of currentHandlers) { 51 | handler.reject(error); 52 | } 53 | } 54 | })(); 55 | } else { 56 | result = fn.apply(context, args as Parameters); 57 | } 58 | } 59 | 60 | function later() { 61 | timeoutId = undefined; 62 | if (!immediate) { 63 | run(); 64 | } else if (isAsync) { 65 | // Clear leadingValue if the timeout completes without another call 66 | leadingValue = undefined; 67 | } 68 | } 69 | 70 | const onAbort = () => { 71 | if (timeoutId) clearTimeout(timeoutId); 72 | timeoutId = undefined; 73 | try { 74 | signal?.throwIfAborted(); 75 | } catch (error) { 76 | for (const handler of promiseHandlers) handler.reject(error); 77 | promiseHandlers = []; 78 | } 79 | }; 80 | 81 | if (isAsync) { 82 | const debouncedAsync = function (this: unknown, ...args: Parameters) { 83 | // eslint-disable-next-line @typescript-eslint/no-this-alias 84 | const context = this; 85 | lastArgs = args; 86 | lastThis = context; 87 | 88 | if (signal?.aborted) { 89 | return Promise.reject(signal.reason); 90 | } 91 | 92 | const callNow = immediate && timeoutId === undefined; 93 | if (timeoutId !== undefined) clearTimeout(timeoutId); 94 | timeoutId = setTimeout(later, wait); 95 | 96 | if (callNow) { 97 | leadingValue = (async () => { 98 | return await fn.apply(lastThis, lastArgs as Parameters); 99 | })(); 100 | } 101 | 102 | return new Promise((resolve, reject) => { 103 | if (callNow) { 104 | leadingValue?.then(resolve, reject); 105 | } else { 106 | promiseHandlers.push({ resolve, reject }); 107 | if (signal && promiseHandlers.length === 1) { 108 | signal.addEventListener('abort', onAbort, { once: true }); 109 | } 110 | } 111 | }); 112 | }; 113 | 114 | debouncedAsync.isPending = false; 115 | Object.defineProperty(debouncedAsync, 'isPending', { 116 | get: () => timeoutId !== undefined, 117 | }); 118 | 119 | debouncedAsync.clear = () => { 120 | if (timeoutId !== undefined) clearTimeout(timeoutId); 121 | timeoutId = undefined; 122 | lastArgs = undefined; 123 | lastThis = undefined; 124 | promiseHandlers = []; 125 | leadingValue = undefined; 126 | }; 127 | 128 | debouncedAsync.flush = () => { 129 | if (timeoutId === undefined) return Promise.resolve(undefined as any); 130 | return new Promise((resolve, reject) => { 131 | promiseHandlers.push({ resolve, reject }); 132 | run(); 133 | debouncedAsync.clear(); 134 | }); 135 | }; 136 | 137 | return debouncedAsync as DebouncedFunction; 138 | } 139 | 140 | // Sync implementation 141 | const debouncedSync = function (this: unknown, ...args: Parameters) { 142 | // eslint-disable-next-line @typescript-eslint/no-this-alias 143 | const context = this; 144 | lastArgs = args; 145 | lastThis = context; 146 | 147 | const callNow = immediate && timeoutId === undefined; 148 | if (timeoutId !== undefined) clearTimeout(timeoutId); 149 | timeoutId = setTimeout(later, wait); 150 | 151 | if (callNow) { 152 | run(); 153 | } 154 | return result; 155 | }; 156 | 157 | debouncedSync.isPending = false; 158 | Object.defineProperty(debouncedSync, 'isPending', { 159 | get: () => timeoutId !== undefined, 160 | }); 161 | 162 | debouncedSync.clear = () => { 163 | if (timeoutId !== undefined) clearTimeout(timeoutId); 164 | timeoutId = undefined; 165 | lastArgs = undefined; 166 | lastThis = undefined; 167 | }; 168 | 169 | debouncedSync.flush = () => { 170 | if (timeoutId === undefined) return; 171 | run(); 172 | debouncedSync.clear(); 173 | }; 174 | 175 | return debouncedSync as DebouncedFunction; 176 | } 177 | 178 | export type * from './typings'; 179 | -------------------------------------------------------------------------------- /src/index.test.ts: -------------------------------------------------------------------------------- 1 | import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; 2 | 3 | import { debounce } from './index'; 4 | 5 | describe('debounce', () => { 6 | beforeEach(() => { 7 | vi.useFakeTimers(); 8 | }); 9 | 10 | afterEach(() => { 11 | vi.useRealTimers(); 12 | }); 13 | 14 | describe('sync', () => { 15 | it('should debounce a function', () => { 16 | const func = vi.fn(); 17 | const debounced = debounce(func, 100); 18 | 19 | debounced(); 20 | debounced(); 21 | debounced(); 22 | 23 | expect(func).not.toHaveBeenCalled(); 24 | 25 | vi.advanceTimersByTime(100); 26 | 27 | expect(func).toHaveBeenCalledTimes(1); 28 | }); 29 | 30 | it('should call the function with the last arguments', () => { 31 | const func = vi.fn(); 32 | const debounced = debounce(func, 100); 33 | 34 | debounced(1); 35 | debounced(2); 36 | debounced(3); 37 | 38 | vi.advanceTimersByTime(100); 39 | 40 | expect(func).toHaveBeenCalledWith(3); 41 | }); 42 | 43 | it('should preserve the `this` context', () => { 44 | const context = { 45 | func: vi.fn(), 46 | }; 47 | const debounced = debounce(context.func, 100); 48 | 49 | debounced.call(context); 50 | 51 | vi.advanceTimersByTime(100); 52 | 53 | expect(context.func).toHaveBeenCalledTimes(1); 54 | expect(context.func).toHaveBeenCalledWith(); 55 | }); 56 | 57 | describe('immediate option', () => { 58 | it('should call the function immediately', () => { 59 | const func = vi.fn(); 60 | const debounced = debounce(func, 100, { immediate: true }); 61 | 62 | debounced(); 63 | 64 | expect(func).toHaveBeenCalledTimes(1); 65 | 66 | vi.advanceTimersByTime(100); 67 | 68 | expect(func).toHaveBeenCalledTimes(1); 69 | }); 70 | 71 | it('should not call the function again after the wait time', () => { 72 | const func = vi.fn(); 73 | const debounced = debounce(func, 100, { immediate: true }); 74 | 75 | debounced(); 76 | debounced(); 77 | 78 | expect(func).toHaveBeenCalledTimes(1); 79 | 80 | vi.advanceTimersByTime(100); 81 | 82 | expect(func).toHaveBeenCalledTimes(1); 83 | }); 84 | }); 85 | 86 | describe('isPending', () => { 87 | it('should be true when the function is pending', () => { 88 | const debounced = debounce(() => {}, 100); 89 | 90 | expect(debounced.isPending).toBe(false); 91 | 92 | debounced(); 93 | 94 | expect(debounced.isPending).toBe(true); 95 | 96 | vi.advanceTimersByTime(100); 97 | 98 | expect(debounced.isPending).toBe(false); 99 | }); 100 | }); 101 | 102 | describe('clear', () => { 103 | it('should cancel the execution', () => { 104 | const func = vi.fn(); 105 | const debounced = debounce(func, 100); 106 | 107 | debounced(); 108 | debounced.clear(); 109 | 110 | vi.advanceTimersByTime(100); 111 | 112 | expect(func).not.toHaveBeenCalled(); 113 | }); 114 | }); 115 | 116 | describe('flush', () => { 117 | it('should execute the function immediately', () => { 118 | const func = vi.fn(); 119 | const debounced = debounce(func, 100); 120 | 121 | debounced(); 122 | debounced.flush(); 123 | 124 | expect(func).toHaveBeenCalledTimes(1); 125 | }); 126 | 127 | it('should not execute the function again after the wait time', () => { 128 | const func = vi.fn(); 129 | const debounced = debounce(func, 100); 130 | 131 | debounced(); 132 | debounced.flush(); 133 | 134 | vi.advanceTimersByTime(100); 135 | 136 | expect(func).toHaveBeenCalledTimes(1); 137 | }); 138 | 139 | it('should do nothing if no function is pending', () => { 140 | const func = vi.fn(); 141 | const debounced = debounce(func, 100); 142 | 143 | debounced.flush(); 144 | 145 | expect(func).not.toHaveBeenCalled(); 146 | }); 147 | }); 148 | }); 149 | 150 | describe('async', () => { 151 | it('should debounce an async function', async () => { 152 | const func = vi.fn(async (x) => x); 153 | const debounced = debounce(func, 100); 154 | 155 | const p1 = debounced(1); 156 | const p2 = debounced(2); 157 | const p3 = debounced(3); 158 | 159 | await vi.advanceTimersByTimeAsync(100); 160 | 161 | const results = await Promise.all([p1, p2, p3]); 162 | 163 | expect(func).toHaveBeenCalledTimes(1); 164 | expect(func).toHaveBeenCalledWith(3); 165 | expect(results).toEqual([3, 3, 3]); 166 | }); 167 | 168 | it('should resolve with the last value', async () => { 169 | const func = vi.fn(async (x) => x); 170 | const debounced = debounce(func, 100); 171 | 172 | const promise = debounced(1); 173 | debounced(2); 174 | 175 | vi.advanceTimersByTime(100); 176 | 177 | await expect(promise).resolves.toBe(2); 178 | }); 179 | 180 | it('should reject all promises if the function rejects', async () => { 181 | const error = new Error('test error'); 182 | const func = vi.fn(async () => { 183 | throw error; 184 | }); 185 | const debounced = debounce(func, 100); 186 | 187 | const p1 = debounced(); 188 | const p2 = debounced(); 189 | 190 | vi.advanceTimersByTime(100); 191 | 192 | await expect(p1).rejects.toThrow(error); 193 | await expect(p2).rejects.toThrow(error); 194 | }); 195 | 196 | describe('immediate option', () => { 197 | it('should call the function immediately', async () => { 198 | const func = vi.fn(async (x) => x); 199 | const debounced = debounce(func, 100, { immediate: true }); 200 | 201 | const promise = debounced(1); 202 | 203 | expect(func).toHaveBeenCalledTimes(1); 204 | await expect(promise).resolves.toBe(1); 205 | 206 | vi.advanceTimersByTime(100); 207 | 208 | expect(func).toHaveBeenCalledTimes(1); 209 | }); 210 | }); 211 | 212 | describe('isPending', () => { 213 | it('should be true when the function is pending', () => { 214 | const debounced = debounce(async () => {}, 100); 215 | 216 | expect(debounced.isPending).toBe(false); 217 | 218 | debounced(); 219 | 220 | expect(debounced.isPending).toBe(true); 221 | 222 | vi.advanceTimersByTime(100); 223 | 224 | expect(debounced.isPending).toBe(false); 225 | }); 226 | }); 227 | 228 | describe('clear', () => { 229 | it('should cancel the execution', async () => { 230 | const func = vi.fn(async () => {}); 231 | const debounced = debounce(func, 100); 232 | 233 | debounced(); 234 | debounced.clear(); 235 | 236 | vi.advanceTimersByTime(100); 237 | 238 | // The promise will not resolve or reject, it will be pending forever 239 | // This is a limitation of promise cancellation 240 | expect(func).not.toHaveBeenCalled(); 241 | }); 242 | }); 243 | 244 | describe('flush', () => { 245 | it('should execute the function immediately and return a promise', async () => { 246 | const func = vi.fn(async (x) => x); 247 | const debounced = debounce(func, 100); 248 | 249 | debounced(1); 250 | const promise = debounced.flush(); 251 | 252 | expect(func).toHaveBeenCalledTimes(1); 253 | await expect(promise).resolves.toBe(1); 254 | }); 255 | 256 | it('should not execute the function again after the wait time', async () => { 257 | const func = vi.fn(async (x) => x); 258 | const debounced = debounce(func, 100); 259 | 260 | debounced(1); 261 | await debounced.flush(); 262 | 263 | vi.advanceTimersByTime(100); 264 | 265 | expect(func).toHaveBeenCalledTimes(1); 266 | }); 267 | 268 | it('should resolve with undefined if no function is pending', async () => { 269 | const func = vi.fn(async (x) => x); 270 | const debounced = debounce(func, 100); 271 | 272 | await expect(debounced.flush()).resolves.toBeUndefined(); 273 | expect(func).not.toHaveBeenCalled(); 274 | }); 275 | }); 276 | 277 | describe('signal', () => { 278 | it('should abort the debounced function', async () => { 279 | const controller = new AbortController(); 280 | const func = vi.fn(async () => {}); 281 | const debounced = debounce(func, 100, { 282 | signal: controller.signal, 283 | }); 284 | 285 | const promise = debounced(); 286 | controller.abort(); 287 | 288 | await expect(promise).rejects.toThrow('This operation was aborted'); 289 | expect(func).not.toHaveBeenCalled(); 290 | }); 291 | }); 292 | }); 293 | }); 294 | -------------------------------------------------------------------------------- /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.1 13 | version: 1.0.1(jiti@2.5.1)(typescript@5.9.3) 14 | '@shahrad/prettier-config': 15 | specifier: ^1.2.2 16 | version: 1.2.2(@ianvs/prettier-plugin-sort-imports@4.5.1(prettier@3.6.2))(prettier-plugin-packagejson@2.5.18(prettier@3.6.2))(prettier-plugin-sh@0.15.0(prettier@3.6.2))(prettier@3.6.2) 17 | '@shahrad/tsconfig': 18 | specifier: ^1.2.0 19 | version: 1.2.0 20 | '@types/node': 21 | specifier: ^24.10.0 22 | version: 24.10.0 23 | eslint: 24 | specifier: ^9.39.1 25 | version: 9.39.1(jiti@2.5.1) 26 | globals: 27 | specifier: ^16.5.0 28 | version: 16.5.0 29 | prettier: 30 | specifier: ^3.6.2 31 | version: 3.6.2 32 | tsup: 33 | specifier: ^8.5.0 34 | version: 8.5.0(jiti@2.5.1)(postcss@8.5.6)(tsx@4.20.6)(typescript@5.9.3) 35 | typescript: 36 | specifier: ^5.9.3 37 | version: 5.9.3 38 | vitest: 39 | specifier: ^3.2.4 40 | version: 3.2.4(@types/node@24.10.0)(jiti@2.5.1)(tsx@4.20.6) 41 | 42 | packages: 43 | 44 | '@babel/code-frame@7.27.1': 45 | resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} 46 | engines: {node: '>=6.9.0'} 47 | 48 | '@babel/generator@7.28.5': 49 | resolution: {integrity: sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==} 50 | engines: {node: '>=6.9.0'} 51 | 52 | '@babel/helper-globals@7.28.0': 53 | resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} 54 | engines: {node: '>=6.9.0'} 55 | 56 | '@babel/helper-string-parser@7.27.1': 57 | resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} 58 | engines: {node: '>=6.9.0'} 59 | 60 | '@babel/helper-validator-identifier@7.28.5': 61 | resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} 62 | engines: {node: '>=6.9.0'} 63 | 64 | '@babel/parser@7.28.5': 65 | resolution: {integrity: sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==} 66 | engines: {node: '>=6.0.0'} 67 | hasBin: true 68 | 69 | '@babel/template@7.27.2': 70 | resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} 71 | engines: {node: '>=6.9.0'} 72 | 73 | '@babel/traverse@7.28.5': 74 | resolution: {integrity: sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==} 75 | engines: {node: '>=6.9.0'} 76 | 77 | '@babel/types@7.28.5': 78 | resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==} 79 | engines: {node: '>=6.9.0'} 80 | 81 | '@esbuild/aix-ppc64@0.25.12': 82 | resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} 83 | engines: {node: '>=18'} 84 | cpu: [ppc64] 85 | os: [aix] 86 | 87 | '@esbuild/android-arm64@0.25.12': 88 | resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==} 89 | engines: {node: '>=18'} 90 | cpu: [arm64] 91 | os: [android] 92 | 93 | '@esbuild/android-arm@0.25.12': 94 | resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==} 95 | engines: {node: '>=18'} 96 | cpu: [arm] 97 | os: [android] 98 | 99 | '@esbuild/android-x64@0.25.12': 100 | resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==} 101 | engines: {node: '>=18'} 102 | cpu: [x64] 103 | os: [android] 104 | 105 | '@esbuild/darwin-arm64@0.25.12': 106 | resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==} 107 | engines: {node: '>=18'} 108 | cpu: [arm64] 109 | os: [darwin] 110 | 111 | '@esbuild/darwin-x64@0.25.12': 112 | resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==} 113 | engines: {node: '>=18'} 114 | cpu: [x64] 115 | os: [darwin] 116 | 117 | '@esbuild/freebsd-arm64@0.25.12': 118 | resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==} 119 | engines: {node: '>=18'} 120 | cpu: [arm64] 121 | os: [freebsd] 122 | 123 | '@esbuild/freebsd-x64@0.25.12': 124 | resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==} 125 | engines: {node: '>=18'} 126 | cpu: [x64] 127 | os: [freebsd] 128 | 129 | '@esbuild/linux-arm64@0.25.12': 130 | resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==} 131 | engines: {node: '>=18'} 132 | cpu: [arm64] 133 | os: [linux] 134 | 135 | '@esbuild/linux-arm@0.25.12': 136 | resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==} 137 | engines: {node: '>=18'} 138 | cpu: [arm] 139 | os: [linux] 140 | 141 | '@esbuild/linux-ia32@0.25.12': 142 | resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==} 143 | engines: {node: '>=18'} 144 | cpu: [ia32] 145 | os: [linux] 146 | 147 | '@esbuild/linux-loong64@0.25.12': 148 | resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==} 149 | engines: {node: '>=18'} 150 | cpu: [loong64] 151 | os: [linux] 152 | 153 | '@esbuild/linux-mips64el@0.25.12': 154 | resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==} 155 | engines: {node: '>=18'} 156 | cpu: [mips64el] 157 | os: [linux] 158 | 159 | '@esbuild/linux-ppc64@0.25.12': 160 | resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==} 161 | engines: {node: '>=18'} 162 | cpu: [ppc64] 163 | os: [linux] 164 | 165 | '@esbuild/linux-riscv64@0.25.12': 166 | resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==} 167 | engines: {node: '>=18'} 168 | cpu: [riscv64] 169 | os: [linux] 170 | 171 | '@esbuild/linux-s390x@0.25.12': 172 | resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==} 173 | engines: {node: '>=18'} 174 | cpu: [s390x] 175 | os: [linux] 176 | 177 | '@esbuild/linux-x64@0.25.12': 178 | resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==} 179 | engines: {node: '>=18'} 180 | cpu: [x64] 181 | os: [linux] 182 | 183 | '@esbuild/netbsd-arm64@0.25.12': 184 | resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==} 185 | engines: {node: '>=18'} 186 | cpu: [arm64] 187 | os: [netbsd] 188 | 189 | '@esbuild/netbsd-x64@0.25.12': 190 | resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==} 191 | engines: {node: '>=18'} 192 | cpu: [x64] 193 | os: [netbsd] 194 | 195 | '@esbuild/openbsd-arm64@0.25.12': 196 | resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==} 197 | engines: {node: '>=18'} 198 | cpu: [arm64] 199 | os: [openbsd] 200 | 201 | '@esbuild/openbsd-x64@0.25.12': 202 | resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==} 203 | engines: {node: '>=18'} 204 | cpu: [x64] 205 | os: [openbsd] 206 | 207 | '@esbuild/openharmony-arm64@0.25.12': 208 | resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==} 209 | engines: {node: '>=18'} 210 | cpu: [arm64] 211 | os: [openharmony] 212 | 213 | '@esbuild/sunos-x64@0.25.12': 214 | resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==} 215 | engines: {node: '>=18'} 216 | cpu: [x64] 217 | os: [sunos] 218 | 219 | '@esbuild/win32-arm64@0.25.12': 220 | resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==} 221 | engines: {node: '>=18'} 222 | cpu: [arm64] 223 | os: [win32] 224 | 225 | '@esbuild/win32-ia32@0.25.12': 226 | resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==} 227 | engines: {node: '>=18'} 228 | cpu: [ia32] 229 | os: [win32] 230 | 231 | '@esbuild/win32-x64@0.25.12': 232 | resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==} 233 | engines: {node: '>=18'} 234 | cpu: [x64] 235 | os: [win32] 236 | 237 | '@eslint-community/eslint-utils@4.9.0': 238 | resolution: {integrity: sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==} 239 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 240 | peerDependencies: 241 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 242 | 243 | '@eslint-community/regexpp@4.12.2': 244 | resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} 245 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 246 | 247 | '@eslint/config-array@0.21.1': 248 | resolution: {integrity: sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==} 249 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 250 | 251 | '@eslint/config-helpers@0.4.2': 252 | resolution: {integrity: sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==} 253 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 254 | 255 | '@eslint/core@0.17.0': 256 | resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==} 257 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 258 | 259 | '@eslint/eslintrc@3.3.1': 260 | resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} 261 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 262 | 263 | '@eslint/js@9.39.1': 264 | resolution: {integrity: sha512-S26Stp4zCy88tH94QbBv3XCuzRQiZ9yXofEILmglYTh/Ug/a9/umqvgFtYBAo3Lp0nsI/5/qH1CCrbdK3AP1Tw==} 265 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 266 | 267 | '@eslint/object-schema@2.1.7': 268 | resolution: {integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==} 269 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 270 | 271 | '@eslint/plugin-kit@0.4.1': 272 | resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==} 273 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 274 | 275 | '@humanfs/core@0.19.1': 276 | resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} 277 | engines: {node: '>=18.18.0'} 278 | 279 | '@humanfs/node@0.16.7': 280 | resolution: {integrity: sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==} 281 | engines: {node: '>=18.18.0'} 282 | 283 | '@humanwhocodes/module-importer@1.0.1': 284 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} 285 | engines: {node: '>=12.22'} 286 | 287 | '@humanwhocodes/retry@0.4.3': 288 | resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} 289 | engines: {node: '>=18.18'} 290 | 291 | '@ianvs/prettier-plugin-sort-imports@4.5.1': 292 | resolution: {integrity: sha512-vOQwIyQHnHz0ikvHEQDzwUkNfX74o/7qNEpm9LiPtyBvCg/AU/DOkhwe1o92chPS1QzS6G7HeiO+OwIt8a358A==} 293 | peerDependencies: 294 | '@prettier/plugin-oxc': ^0.0.4 295 | '@vue/compiler-sfc': 2.7.x || 3.x 296 | prettier: 2 || 3 || ^4.0.0-0 297 | peerDependenciesMeta: 298 | '@prettier/plugin-oxc': 299 | optional: true 300 | '@vue/compiler-sfc': 301 | optional: true 302 | 303 | '@isaacs/cliui@8.0.2': 304 | resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} 305 | engines: {node: '>=12'} 306 | 307 | '@jridgewell/gen-mapping@0.3.13': 308 | resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} 309 | 310 | '@jridgewell/resolve-uri@3.1.2': 311 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 312 | engines: {node: '>=6.0.0'} 313 | 314 | '@jridgewell/sourcemap-codec@1.5.5': 315 | resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} 316 | 317 | '@jridgewell/trace-mapping@0.3.31': 318 | resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} 319 | 320 | '@nodelib/fs.scandir@2.1.5': 321 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 322 | engines: {node: '>= 8'} 323 | 324 | '@nodelib/fs.stat@2.0.5': 325 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 326 | engines: {node: '>= 8'} 327 | 328 | '@nodelib/fs.walk@1.2.8': 329 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 330 | engines: {node: '>= 8'} 331 | 332 | '@pkgjs/parseargs@0.11.0': 333 | resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} 334 | engines: {node: '>=14'} 335 | 336 | '@pkgr/core@0.2.9': 337 | resolution: {integrity: sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==} 338 | engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} 339 | 340 | '@rollup/rollup-android-arm-eabi@4.52.5': 341 | resolution: {integrity: sha512-8c1vW4ocv3UOMp9K+gToY5zL2XiiVw3k7f1ksf4yO1FlDFQ1C2u72iACFnSOceJFsWskc2WZNqeRhFRPzv+wtQ==} 342 | cpu: [arm] 343 | os: [android] 344 | 345 | '@rollup/rollup-android-arm64@4.52.5': 346 | resolution: {integrity: sha512-mQGfsIEFcu21mvqkEKKu2dYmtuSZOBMmAl5CFlPGLY94Vlcm+zWApK7F/eocsNzp8tKmbeBP8yXyAbx0XHsFNA==} 347 | cpu: [arm64] 348 | os: [android] 349 | 350 | '@rollup/rollup-darwin-arm64@4.52.5': 351 | resolution: {integrity: sha512-takF3CR71mCAGA+v794QUZ0b6ZSrgJkArC+gUiG6LB6TQty9T0Mqh3m2ImRBOxS2IeYBo4lKWIieSvnEk2OQWA==} 352 | cpu: [arm64] 353 | os: [darwin] 354 | 355 | '@rollup/rollup-darwin-x64@4.52.5': 356 | resolution: {integrity: sha512-W901Pla8Ya95WpxDn//VF9K9u2JbocwV/v75TE0YIHNTbhqUTv9w4VuQ9MaWlNOkkEfFwkdNhXgcLqPSmHy0fA==} 357 | cpu: [x64] 358 | os: [darwin] 359 | 360 | '@rollup/rollup-freebsd-arm64@4.52.5': 361 | resolution: {integrity: sha512-QofO7i7JycsYOWxe0GFqhLmF6l1TqBswJMvICnRUjqCx8b47MTo46W8AoeQwiokAx3zVryVnxtBMcGcnX12LvA==} 362 | cpu: [arm64] 363 | os: [freebsd] 364 | 365 | '@rollup/rollup-freebsd-x64@4.52.5': 366 | resolution: {integrity: sha512-jr21b/99ew8ujZubPo9skbrItHEIE50WdV86cdSoRkKtmWa+DDr6fu2c/xyRT0F/WazZpam6kk7IHBerSL7LDQ==} 367 | cpu: [x64] 368 | os: [freebsd] 369 | 370 | '@rollup/rollup-linux-arm-gnueabihf@4.52.5': 371 | resolution: {integrity: sha512-PsNAbcyv9CcecAUagQefwX8fQn9LQ4nZkpDboBOttmyffnInRy8R8dSg6hxxl2Re5QhHBf6FYIDhIj5v982ATQ==} 372 | cpu: [arm] 373 | os: [linux] 374 | 375 | '@rollup/rollup-linux-arm-musleabihf@4.52.5': 376 | resolution: {integrity: sha512-Fw4tysRutyQc/wwkmcyoqFtJhh0u31K+Q6jYjeicsGJJ7bbEq8LwPWV/w0cnzOqR2m694/Af6hpFayLJZkG2VQ==} 377 | cpu: [arm] 378 | os: [linux] 379 | 380 | '@rollup/rollup-linux-arm64-gnu@4.52.5': 381 | resolution: {integrity: sha512-a+3wVnAYdQClOTlyapKmyI6BLPAFYs0JM8HRpgYZQO02rMR09ZcV9LbQB+NL6sljzG38869YqThrRnfPMCDtZg==} 382 | cpu: [arm64] 383 | os: [linux] 384 | 385 | '@rollup/rollup-linux-arm64-musl@4.52.5': 386 | resolution: {integrity: sha512-AvttBOMwO9Pcuuf7m9PkC1PUIKsfaAJ4AYhy944qeTJgQOqJYJ9oVl2nYgY7Rk0mkbsuOpCAYSs6wLYB2Xiw0Q==} 387 | cpu: [arm64] 388 | os: [linux] 389 | 390 | '@rollup/rollup-linux-loong64-gnu@4.52.5': 391 | resolution: {integrity: sha512-DkDk8pmXQV2wVrF6oq5tONK6UHLz/XcEVow4JTTerdeV1uqPeHxwcg7aFsfnSm9L+OO8WJsWotKM2JJPMWrQtA==} 392 | cpu: [loong64] 393 | os: [linux] 394 | 395 | '@rollup/rollup-linux-ppc64-gnu@4.52.5': 396 | resolution: {integrity: sha512-W/b9ZN/U9+hPQVvlGwjzi+Wy4xdoH2I8EjaCkMvzpI7wJUs8sWJ03Rq96jRnHkSrcHTpQe8h5Tg3ZzUPGauvAw==} 397 | cpu: [ppc64] 398 | os: [linux] 399 | 400 | '@rollup/rollup-linux-riscv64-gnu@4.52.5': 401 | resolution: {integrity: sha512-sjQLr9BW7R/ZiXnQiWPkErNfLMkkWIoCz7YMn27HldKsADEKa5WYdobaa1hmN6slu9oWQbB6/jFpJ+P2IkVrmw==} 402 | cpu: [riscv64] 403 | os: [linux] 404 | 405 | '@rollup/rollup-linux-riscv64-musl@4.52.5': 406 | resolution: {integrity: sha512-hq3jU/kGyjXWTvAh2awn8oHroCbrPm8JqM7RUpKjalIRWWXE01CQOf/tUNWNHjmbMHg/hmNCwc/Pz3k1T/j/Lg==} 407 | cpu: [riscv64] 408 | os: [linux] 409 | 410 | '@rollup/rollup-linux-s390x-gnu@4.52.5': 411 | resolution: {integrity: sha512-gn8kHOrku8D4NGHMK1Y7NA7INQTRdVOntt1OCYypZPRt6skGbddska44K8iocdpxHTMMNui5oH4elPH4QOLrFQ==} 412 | cpu: [s390x] 413 | os: [linux] 414 | 415 | '@rollup/rollup-linux-x64-gnu@4.52.5': 416 | resolution: {integrity: sha512-hXGLYpdhiNElzN770+H2nlx+jRog8TyynpTVzdlc6bndktjKWyZyiCsuDAlpd+j+W+WNqfcyAWz9HxxIGfZm1Q==} 417 | cpu: [x64] 418 | os: [linux] 419 | 420 | '@rollup/rollup-linux-x64-musl@4.52.5': 421 | resolution: {integrity: sha512-arCGIcuNKjBoKAXD+y7XomR9gY6Mw7HnFBv5Rw7wQRvwYLR7gBAgV7Mb2QTyjXfTveBNFAtPt46/36vV9STLNg==} 422 | cpu: [x64] 423 | os: [linux] 424 | 425 | '@rollup/rollup-openharmony-arm64@4.52.5': 426 | resolution: {integrity: sha512-QoFqB6+/9Rly/RiPjaomPLmR/13cgkIGfA40LHly9zcH1S0bN2HVFYk3a1eAyHQyjs3ZJYlXvIGtcCs5tko9Cw==} 427 | cpu: [arm64] 428 | os: [openharmony] 429 | 430 | '@rollup/rollup-win32-arm64-msvc@4.52.5': 431 | resolution: {integrity: sha512-w0cDWVR6MlTstla1cIfOGyl8+qb93FlAVutcor14Gf5Md5ap5ySfQ7R9S/NjNaMLSFdUnKGEasmVnu3lCMqB7w==} 432 | cpu: [arm64] 433 | os: [win32] 434 | 435 | '@rollup/rollup-win32-ia32-msvc@4.52.5': 436 | resolution: {integrity: sha512-Aufdpzp7DpOTULJCuvzqcItSGDH73pF3ko/f+ckJhxQyHtp67rHw3HMNxoIdDMUITJESNE6a8uh4Lo4SLouOUg==} 437 | cpu: [ia32] 438 | os: [win32] 439 | 440 | '@rollup/rollup-win32-x64-gnu@4.52.5': 441 | resolution: {integrity: sha512-UGBUGPFp1vkj6p8wCRraqNhqwX/4kNQPS57BCFc8wYh0g94iVIW33wJtQAx3G7vrjjNtRaxiMUylM0ktp/TRSQ==} 442 | cpu: [x64] 443 | os: [win32] 444 | 445 | '@rollup/rollup-win32-x64-msvc@4.52.5': 446 | resolution: {integrity: sha512-TAcgQh2sSkykPRWLrdyy2AiceMckNf5loITqXxFI5VuQjS5tSuw3WlwdN8qv8vzjLAUTvYaH/mVjSFpbkFbpTg==} 447 | cpu: [x64] 448 | os: [win32] 449 | 450 | '@shahrad/eslint-config@1.0.1': 451 | resolution: {integrity: sha512-Gfjh8cdcptBjL14dWACJZ0tZy8KJdcVsOVWmyKa82v5PoLPZ4avMrT1hJyEWg0APhS1054M/udaBrlCAuHJ9XQ==} 452 | 453 | '@shahrad/prettier-config@1.2.2': 454 | resolution: {integrity: sha512-D6yRqGjD9mhdC5cWQkdoatybNmp6eZJZQ1IerFaANQL1pgtNyEasE2yFy3JdDxJRbHcL2GeaI/03tEPchU+Ddw==} 455 | peerDependencies: 456 | '@ianvs/prettier-plugin-sort-imports': ^4.4 457 | prettier: '>=3.0.0' 458 | prettier-plugin-packagejson: ^2.5 459 | prettier-plugin-sh: ^0.15 460 | 461 | '@shahrad/tsconfig@1.2.0': 462 | resolution: {integrity: sha512-5NM7tPrvUGF+VPqNgsjgWJ5aLJBcNiM/7aAsXw3PEZVek4Mfxq4vd7BLbjUsYd9HizgaNeCmfK5kIsxtCXp7/Q==} 463 | engines: {node: '>=18'} 464 | 465 | '@types/chai@5.2.3': 466 | resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} 467 | 468 | '@types/deep-eql@4.0.2': 469 | resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} 470 | 471 | '@types/estree@1.0.8': 472 | resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} 473 | 474 | '@types/json-schema@7.0.15': 475 | resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} 476 | 477 | '@types/node@24.10.0': 478 | resolution: {integrity: sha512-qzQZRBqkFsYyaSWXuEHc2WR9c0a0CXwiE5FWUvn7ZM+vdy1uZLfCunD38UzhuB7YN/J11ndbDBcTmOdxJo9Q7A==} 479 | 480 | '@typescript-eslint/eslint-plugin@8.46.2': 481 | resolution: {integrity: sha512-ZGBMToy857/NIPaaCucIUQgqueOiq7HeAKkhlvqVV4lm089zUFW6ikRySx2v+cAhKeUCPuWVHeimyk6Dw1iY3w==} 482 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 483 | peerDependencies: 484 | '@typescript-eslint/parser': ^8.46.2 485 | eslint: ^8.57.0 || ^9.0.0 486 | typescript: '>=4.8.4 <6.0.0' 487 | 488 | '@typescript-eslint/parser@8.46.2': 489 | resolution: {integrity: sha512-BnOroVl1SgrPLywqxyqdJ4l3S2MsKVLDVxZvjI1Eoe8ev2r3kGDo+PcMihNmDE+6/KjkTubSJnmqGZZjQSBq/g==} 490 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 491 | peerDependencies: 492 | eslint: ^8.57.0 || ^9.0.0 493 | typescript: '>=4.8.4 <6.0.0' 494 | 495 | '@typescript-eslint/project-service@8.46.2': 496 | resolution: {integrity: sha512-PULOLZ9iqwI7hXcmL4fVfIsBi6AN9YxRc0frbvmg8f+4hQAjQ5GYNKK0DIArNo+rOKmR/iBYwkpBmnIwin4wBg==} 497 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 498 | peerDependencies: 499 | typescript: '>=4.8.4 <6.0.0' 500 | 501 | '@typescript-eslint/scope-manager@8.46.2': 502 | resolution: {integrity: sha512-LF4b/NmGvdWEHD2H4MsHD8ny6JpiVNDzrSZr3CsckEgCbAGZbYM4Cqxvi9L+WqDMT+51Ozy7lt2M+d0JLEuBqA==} 503 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 504 | 505 | '@typescript-eslint/tsconfig-utils@8.46.2': 506 | resolution: {integrity: sha512-a7QH6fw4S57+F5y2FIxxSDyi5M4UfGF+Jl1bCGd7+L4KsaUY80GsiF/t0UoRFDHAguKlBaACWJRmdrc6Xfkkag==} 507 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 508 | peerDependencies: 509 | typescript: '>=4.8.4 <6.0.0' 510 | 511 | '@typescript-eslint/type-utils@8.46.2': 512 | resolution: {integrity: sha512-HbPM4LbaAAt/DjxXaG9yiS9brOOz6fabal4uvUmaUYe6l3K1phQDMQKBRUrr06BQkxkvIZVVHttqiybM9nJsLA==} 513 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 514 | peerDependencies: 515 | eslint: ^8.57.0 || ^9.0.0 516 | typescript: '>=4.8.4 <6.0.0' 517 | 518 | '@typescript-eslint/types@8.46.2': 519 | resolution: {integrity: sha512-lNCWCbq7rpg7qDsQrd3D6NyWYu+gkTENkG5IKYhUIcxSb59SQC/hEQ+MrG4sTgBVghTonNWq42bA/d4yYumldQ==} 520 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 521 | 522 | '@typescript-eslint/typescript-estree@8.46.2': 523 | resolution: {integrity: sha512-f7rW7LJ2b7Uh2EiQ+7sza6RDZnajbNbemn54Ob6fRwQbgcIn+GWfyuHDHRYgRoZu1P4AayVScrRW+YfbTvPQoQ==} 524 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 525 | peerDependencies: 526 | typescript: '>=4.8.4 <6.0.0' 527 | 528 | '@typescript-eslint/utils@8.46.2': 529 | resolution: {integrity: sha512-sExxzucx0Tud5tE0XqR0lT0psBQvEpnpiul9XbGUB1QwpWJJAps1O/Z7hJxLGiZLBKMCutjTzDgmd1muEhBnVg==} 530 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 531 | peerDependencies: 532 | eslint: ^8.57.0 || ^9.0.0 533 | typescript: '>=4.8.4 <6.0.0' 534 | 535 | '@typescript-eslint/visitor-keys@8.46.2': 536 | resolution: {integrity: sha512-tUFMXI4gxzzMXt4xpGJEsBsTox0XbNQ1y94EwlD/CuZwFcQP79xfQqMhau9HsRc/J0cAPA/HZt1dZPtGn9V/7w==} 537 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 538 | 539 | '@vitest/expect@3.2.4': 540 | resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==} 541 | 542 | '@vitest/mocker@3.2.4': 543 | resolution: {integrity: sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==} 544 | peerDependencies: 545 | msw: ^2.4.9 546 | vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0 547 | peerDependenciesMeta: 548 | msw: 549 | optional: true 550 | vite: 551 | optional: true 552 | 553 | '@vitest/pretty-format@3.2.4': 554 | resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==} 555 | 556 | '@vitest/runner@3.2.4': 557 | resolution: {integrity: sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==} 558 | 559 | '@vitest/snapshot@3.2.4': 560 | resolution: {integrity: sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==} 561 | 562 | '@vitest/spy@3.2.4': 563 | resolution: {integrity: sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==} 564 | 565 | '@vitest/utils@3.2.4': 566 | resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==} 567 | 568 | acorn-jsx@5.3.2: 569 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 570 | peerDependencies: 571 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 572 | 573 | acorn@8.15.0: 574 | resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} 575 | engines: {node: '>=0.4.0'} 576 | hasBin: true 577 | 578 | ajv@6.12.6: 579 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 580 | 581 | ansi-regex@5.0.1: 582 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 583 | engines: {node: '>=8'} 584 | 585 | ansi-regex@6.2.2: 586 | resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} 587 | engines: {node: '>=12'} 588 | 589 | ansi-styles@4.3.0: 590 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 591 | engines: {node: '>=8'} 592 | 593 | ansi-styles@6.2.3: 594 | resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} 595 | engines: {node: '>=12'} 596 | 597 | any-promise@1.3.0: 598 | resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} 599 | 600 | argparse@2.0.1: 601 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 602 | 603 | assertion-error@2.0.1: 604 | resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} 605 | engines: {node: '>=12'} 606 | 607 | balanced-match@1.0.2: 608 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 609 | 610 | brace-expansion@1.1.12: 611 | resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} 612 | 613 | brace-expansion@2.0.2: 614 | resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} 615 | 616 | braces@3.0.3: 617 | resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} 618 | engines: {node: '>=8'} 619 | 620 | bundle-require@5.1.0: 621 | resolution: {integrity: sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==} 622 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 623 | peerDependencies: 624 | esbuild: '>=0.18' 625 | 626 | cac@6.7.14: 627 | resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} 628 | engines: {node: '>=8'} 629 | 630 | callsites@3.1.0: 631 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 632 | engines: {node: '>=6'} 633 | 634 | chai@5.3.3: 635 | resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==} 636 | engines: {node: '>=18'} 637 | 638 | chalk@4.1.2: 639 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 640 | engines: {node: '>=10'} 641 | 642 | check-error@2.1.1: 643 | resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} 644 | engines: {node: '>= 16'} 645 | 646 | chokidar@4.0.3: 647 | resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} 648 | engines: {node: '>= 14.16.0'} 649 | 650 | color-convert@2.0.1: 651 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 652 | engines: {node: '>=7.0.0'} 653 | 654 | color-name@1.1.4: 655 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 656 | 657 | commander@4.1.1: 658 | resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} 659 | engines: {node: '>= 6'} 660 | 661 | concat-map@0.0.1: 662 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 663 | 664 | confbox@0.1.8: 665 | resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} 666 | 667 | consola@3.4.2: 668 | resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} 669 | engines: {node: ^14.18.0 || >=16.10.0} 670 | 671 | cross-spawn@7.0.6: 672 | resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} 673 | engines: {node: '>= 8'} 674 | 675 | debug@4.4.3: 676 | resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} 677 | engines: {node: '>=6.0'} 678 | peerDependencies: 679 | supports-color: '*' 680 | peerDependenciesMeta: 681 | supports-color: 682 | optional: true 683 | 684 | deep-eql@5.0.2: 685 | resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} 686 | engines: {node: '>=6'} 687 | 688 | deep-is@0.1.4: 689 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 690 | 691 | detect-indent@7.0.2: 692 | resolution: {integrity: sha512-y+8xyqdGLL+6sh0tVeHcfP/QDd8gUgbasolJJpY7NgeQGSZ739bDtSiaiDgtoicy+mtYB81dKLxO9xRhCyIB3A==} 693 | engines: {node: '>=12.20'} 694 | 695 | detect-newline@4.0.1: 696 | resolution: {integrity: sha512-qE3Veg1YXzGHQhlA6jzebZN2qVf6NX+A7m7qlhCGG30dJixrAQhYOsJjsnBjJkCSmuOPpCk30145fr8FV0bzog==} 697 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 698 | 699 | eastasianwidth@0.2.0: 700 | resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} 701 | 702 | emoji-regex@8.0.0: 703 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 704 | 705 | emoji-regex@9.2.2: 706 | resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} 707 | 708 | es-module-lexer@1.7.0: 709 | resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} 710 | 711 | esbuild@0.25.12: 712 | resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==} 713 | engines: {node: '>=18'} 714 | hasBin: true 715 | 716 | escape-string-regexp@4.0.0: 717 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 718 | engines: {node: '>=10'} 719 | 720 | eslint-scope@8.4.0: 721 | resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} 722 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 723 | 724 | eslint-visitor-keys@3.4.3: 725 | resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} 726 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 727 | 728 | eslint-visitor-keys@4.2.1: 729 | resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} 730 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 731 | 732 | eslint@9.39.1: 733 | resolution: {integrity: sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==} 734 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 735 | hasBin: true 736 | peerDependencies: 737 | jiti: '*' 738 | peerDependenciesMeta: 739 | jiti: 740 | optional: true 741 | 742 | espree@10.4.0: 743 | resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} 744 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 745 | 746 | esquery@1.6.0: 747 | resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} 748 | engines: {node: '>=0.10'} 749 | 750 | esrecurse@4.3.0: 751 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 752 | engines: {node: '>=4.0'} 753 | 754 | estraverse@5.3.0: 755 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 756 | engines: {node: '>=4.0'} 757 | 758 | estree-walker@3.0.3: 759 | resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} 760 | 761 | esutils@2.0.3: 762 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 763 | engines: {node: '>=0.10.0'} 764 | 765 | expect-type@1.2.2: 766 | resolution: {integrity: sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA==} 767 | engines: {node: '>=12.0.0'} 768 | 769 | fast-deep-equal@3.1.3: 770 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 771 | 772 | fast-glob@3.3.3: 773 | resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} 774 | engines: {node: '>=8.6.0'} 775 | 776 | fast-json-stable-stringify@2.1.0: 777 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 778 | 779 | fast-levenshtein@2.0.6: 780 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 781 | 782 | fastq@1.19.1: 783 | resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} 784 | 785 | fdir@6.5.0: 786 | resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} 787 | engines: {node: '>=12.0.0'} 788 | peerDependencies: 789 | picomatch: ^3 || ^4 790 | peerDependenciesMeta: 791 | picomatch: 792 | optional: true 793 | 794 | file-entry-cache@8.0.0: 795 | resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} 796 | engines: {node: '>=16.0.0'} 797 | 798 | fill-range@7.1.1: 799 | resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} 800 | engines: {node: '>=8'} 801 | 802 | find-up@5.0.0: 803 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 804 | engines: {node: '>=10'} 805 | 806 | fix-dts-default-cjs-exports@1.0.1: 807 | resolution: {integrity: sha512-pVIECanWFC61Hzl2+oOCtoJ3F17kglZC/6N94eRWycFgBH35hHx0Li604ZIzhseh97mf2p0cv7vVrOZGoqhlEg==} 808 | 809 | flat-cache@4.0.1: 810 | resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} 811 | engines: {node: '>=16'} 812 | 813 | flatted@3.3.3: 814 | resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} 815 | 816 | foreground-child@3.3.1: 817 | resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} 818 | engines: {node: '>=14'} 819 | 820 | fsevents@2.3.3: 821 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 822 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 823 | os: [darwin] 824 | 825 | get-tsconfig@4.13.0: 826 | resolution: {integrity: sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==} 827 | 828 | git-hooks-list@4.1.1: 829 | resolution: {integrity: sha512-cmP497iLq54AZnv4YRAEMnEyQ1eIn4tGKbmswqwmFV4GBnAqE8NLtWxxdXa++AalfgL5EBH4IxTPyquEuGY/jA==} 830 | 831 | glob-parent@5.1.2: 832 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 833 | engines: {node: '>= 6'} 834 | 835 | glob-parent@6.0.2: 836 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 837 | engines: {node: '>=10.13.0'} 838 | 839 | glob@10.4.5: 840 | resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} 841 | hasBin: true 842 | 843 | globals@14.0.0: 844 | resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} 845 | engines: {node: '>=18'} 846 | 847 | globals@16.5.0: 848 | resolution: {integrity: sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==} 849 | engines: {node: '>=18'} 850 | 851 | graphemer@1.4.0: 852 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} 853 | 854 | has-flag@4.0.0: 855 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 856 | engines: {node: '>=8'} 857 | 858 | ignore@5.3.2: 859 | resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} 860 | engines: {node: '>= 4'} 861 | 862 | ignore@7.0.5: 863 | resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} 864 | engines: {node: '>= 4'} 865 | 866 | import-fresh@3.3.1: 867 | resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} 868 | engines: {node: '>=6'} 869 | 870 | imurmurhash@0.1.4: 871 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 872 | engines: {node: '>=0.8.19'} 873 | 874 | is-extglob@2.1.1: 875 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 876 | engines: {node: '>=0.10.0'} 877 | 878 | is-fullwidth-code-point@3.0.0: 879 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 880 | engines: {node: '>=8'} 881 | 882 | is-glob@4.0.3: 883 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 884 | engines: {node: '>=0.10.0'} 885 | 886 | is-number@7.0.0: 887 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 888 | engines: {node: '>=0.12.0'} 889 | 890 | is-plain-obj@4.1.0: 891 | resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} 892 | engines: {node: '>=12'} 893 | 894 | isexe@2.0.0: 895 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 896 | 897 | jackspeak@3.4.3: 898 | resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} 899 | 900 | jiti@2.5.1: 901 | resolution: {integrity: sha512-twQoecYPiVA5K/h6SxtORw/Bs3ar+mLUtoPSc7iMXzQzK8d7eJ/R09wmTwAjiamETn1cXYPGfNnu7DMoHgu12w==} 902 | hasBin: true 903 | 904 | joycon@3.1.1: 905 | resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} 906 | engines: {node: '>=10'} 907 | 908 | js-tokens@4.0.0: 909 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 910 | 911 | js-tokens@9.0.1: 912 | resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} 913 | 914 | js-yaml@4.1.0: 915 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 916 | hasBin: true 917 | 918 | jsesc@3.1.0: 919 | resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} 920 | engines: {node: '>=6'} 921 | hasBin: true 922 | 923 | json-buffer@3.0.1: 924 | resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} 925 | 926 | json-schema-traverse@0.4.1: 927 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 928 | 929 | json-stable-stringify-without-jsonify@1.0.1: 930 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 931 | 932 | keyv@4.5.4: 933 | resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} 934 | 935 | levn@0.4.1: 936 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 937 | engines: {node: '>= 0.8.0'} 938 | 939 | lilconfig@3.1.3: 940 | resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} 941 | engines: {node: '>=14'} 942 | 943 | lines-and-columns@1.2.4: 944 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 945 | 946 | load-tsconfig@0.2.5: 947 | resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} 948 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 949 | 950 | locate-path@6.0.0: 951 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 952 | engines: {node: '>=10'} 953 | 954 | lodash.merge@4.6.2: 955 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 956 | 957 | lodash.sortby@4.7.0: 958 | resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} 959 | 960 | loupe@3.2.1: 961 | resolution: {integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==} 962 | 963 | lru-cache@10.4.3: 964 | resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} 965 | 966 | magic-string@0.30.21: 967 | resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} 968 | 969 | merge2@1.4.1: 970 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 971 | engines: {node: '>= 8'} 972 | 973 | micromatch@4.0.8: 974 | resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} 975 | engines: {node: '>=8.6'} 976 | 977 | minimatch@3.1.2: 978 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 979 | 980 | minimatch@9.0.5: 981 | resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} 982 | engines: {node: '>=16 || 14 >=14.17'} 983 | 984 | minipass@7.1.2: 985 | resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} 986 | engines: {node: '>=16 || 14 >=14.17'} 987 | 988 | mlly@1.8.0: 989 | resolution: {integrity: sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==} 990 | 991 | ms@2.1.3: 992 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 993 | 994 | mvdan-sh@0.10.1: 995 | resolution: {integrity: sha512-kMbrH0EObaKmK3nVRKUIIya1dpASHIEusM13S4V1ViHFuxuNxCo+arxoa6j/dbV22YBGjl7UKJm9QQKJ2Crzhg==} 996 | deprecated: See https://github.com/mvdan/sh/issues/1145 997 | 998 | mz@2.7.0: 999 | resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} 1000 | 1001 | nanoid@3.3.11: 1002 | resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} 1003 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 1004 | hasBin: true 1005 | 1006 | natural-compare@1.4.0: 1007 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 1008 | 1009 | object-assign@4.1.1: 1010 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} 1011 | engines: {node: '>=0.10.0'} 1012 | 1013 | optionator@0.9.4: 1014 | resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} 1015 | engines: {node: '>= 0.8.0'} 1016 | 1017 | p-limit@3.1.0: 1018 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 1019 | engines: {node: '>=10'} 1020 | 1021 | p-locate@5.0.0: 1022 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 1023 | engines: {node: '>=10'} 1024 | 1025 | package-json-from-dist@1.0.1: 1026 | resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} 1027 | 1028 | parent-module@1.0.1: 1029 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 1030 | engines: {node: '>=6'} 1031 | 1032 | path-exists@4.0.0: 1033 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 1034 | engines: {node: '>=8'} 1035 | 1036 | path-key@3.1.1: 1037 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 1038 | engines: {node: '>=8'} 1039 | 1040 | path-scurry@1.11.1: 1041 | resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} 1042 | engines: {node: '>=16 || 14 >=14.18'} 1043 | 1044 | pathe@2.0.3: 1045 | resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} 1046 | 1047 | pathval@2.0.1: 1048 | resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==} 1049 | engines: {node: '>= 14.16'} 1050 | 1051 | picocolors@1.1.1: 1052 | resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 1053 | 1054 | picomatch@2.3.1: 1055 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 1056 | engines: {node: '>=8.6'} 1057 | 1058 | picomatch@4.0.3: 1059 | resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} 1060 | engines: {node: '>=12'} 1061 | 1062 | pirates@4.0.7: 1063 | resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} 1064 | engines: {node: '>= 6'} 1065 | 1066 | pkg-types@1.3.1: 1067 | resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} 1068 | 1069 | postcss-load-config@6.0.1: 1070 | resolution: {integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==} 1071 | engines: {node: '>= 18'} 1072 | peerDependencies: 1073 | jiti: '>=1.21.0' 1074 | postcss: '>=8.0.9' 1075 | tsx: ^4.8.1 1076 | yaml: ^2.4.2 1077 | peerDependenciesMeta: 1078 | jiti: 1079 | optional: true 1080 | postcss: 1081 | optional: true 1082 | tsx: 1083 | optional: true 1084 | yaml: 1085 | optional: true 1086 | 1087 | postcss@8.5.6: 1088 | resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} 1089 | engines: {node: ^10 || ^12 || >=14} 1090 | 1091 | prelude-ls@1.2.1: 1092 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 1093 | engines: {node: '>= 0.8.0'} 1094 | 1095 | prettier-plugin-packagejson@2.5.18: 1096 | resolution: {integrity: sha512-NKznPGcGrcj4NPGxnh+w78JXPyfB6I4RQSCM0v+CAXwpDG7OEpJQ5zMyfC5NBgKH1k7Skwcj5ak5by2mrHvC5g==} 1097 | peerDependencies: 1098 | prettier: '>= 1.16.0' 1099 | peerDependenciesMeta: 1100 | prettier: 1101 | optional: true 1102 | 1103 | prettier-plugin-sh@0.15.0: 1104 | resolution: {integrity: sha512-U0PikJr/yr2bzzARl43qI0mApBj0C1xdAfA04AZa6LnvIKawXHhuy2fFo6LNA7weRzGlAiNbaEFfKMFo0nZr/A==} 1105 | engines: {node: '>=16.0.0'} 1106 | peerDependencies: 1107 | prettier: ^3.0.3 1108 | 1109 | prettier@3.6.2: 1110 | resolution: {integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==} 1111 | engines: {node: '>=14'} 1112 | hasBin: true 1113 | 1114 | punycode@2.3.1: 1115 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 1116 | engines: {node: '>=6'} 1117 | 1118 | queue-microtask@1.2.3: 1119 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 1120 | 1121 | readdirp@4.1.2: 1122 | resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} 1123 | engines: {node: '>= 14.18.0'} 1124 | 1125 | resolve-from@4.0.0: 1126 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 1127 | engines: {node: '>=4'} 1128 | 1129 | resolve-from@5.0.0: 1130 | resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} 1131 | engines: {node: '>=8'} 1132 | 1133 | resolve-pkg-maps@1.0.0: 1134 | resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} 1135 | 1136 | reusify@1.1.0: 1137 | resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} 1138 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 1139 | 1140 | rollup@4.52.5: 1141 | resolution: {integrity: sha512-3GuObel8h7Kqdjt0gxkEzaifHTqLVW56Y/bjN7PSQtkKr0w3V/QYSdt6QWYtd7A1xUtYQigtdUfgj1RvWVtorw==} 1142 | engines: {node: '>=18.0.0', npm: '>=8.0.0'} 1143 | hasBin: true 1144 | 1145 | run-parallel@1.2.0: 1146 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 1147 | 1148 | semver@7.7.3: 1149 | resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==} 1150 | engines: {node: '>=10'} 1151 | hasBin: true 1152 | 1153 | sh-syntax@0.4.2: 1154 | resolution: {integrity: sha512-/l2UZ5fhGZLVZa16XQM9/Vq/hezGGbdHeVEA01uWjOL1+7Ek/gt6FquW0iKKws4a9AYPYvlz6RyVvjh3JxOteg==} 1155 | engines: {node: '>=16.0.0'} 1156 | 1157 | shebang-command@2.0.0: 1158 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 1159 | engines: {node: '>=8'} 1160 | 1161 | shebang-regex@3.0.0: 1162 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 1163 | engines: {node: '>=8'} 1164 | 1165 | siginfo@2.0.0: 1166 | resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} 1167 | 1168 | signal-exit@4.1.0: 1169 | resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} 1170 | engines: {node: '>=14'} 1171 | 1172 | sort-object-keys@1.1.3: 1173 | resolution: {integrity: sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg==} 1174 | 1175 | sort-package-json@3.4.0: 1176 | resolution: {integrity: sha512-97oFRRMM2/Js4oEA9LJhjyMlde+2ewpZQf53pgue27UkbEXfHJnDzHlUxQ/DWUkzqmp7DFwJp8D+wi/TYeQhpA==} 1177 | engines: {node: '>=20'} 1178 | hasBin: true 1179 | 1180 | source-map-js@1.2.1: 1181 | resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} 1182 | engines: {node: '>=0.10.0'} 1183 | 1184 | source-map@0.8.0-beta.0: 1185 | resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} 1186 | engines: {node: '>= 8'} 1187 | deprecated: The work that was done in this beta branch won't be included in future versions 1188 | 1189 | stackback@0.0.2: 1190 | resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} 1191 | 1192 | std-env@3.10.0: 1193 | resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} 1194 | 1195 | string-width@4.2.3: 1196 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 1197 | engines: {node: '>=8'} 1198 | 1199 | string-width@5.1.2: 1200 | resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} 1201 | engines: {node: '>=12'} 1202 | 1203 | strip-ansi@6.0.1: 1204 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 1205 | engines: {node: '>=8'} 1206 | 1207 | strip-ansi@7.1.2: 1208 | resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==} 1209 | engines: {node: '>=12'} 1210 | 1211 | strip-json-comments@3.1.1: 1212 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 1213 | engines: {node: '>=8'} 1214 | 1215 | strip-literal@3.1.0: 1216 | resolution: {integrity: sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==} 1217 | 1218 | sucrase@3.35.0: 1219 | resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} 1220 | engines: {node: '>=16 || 14 >=14.17'} 1221 | hasBin: true 1222 | 1223 | supports-color@7.2.0: 1224 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 1225 | engines: {node: '>=8'} 1226 | 1227 | synckit@0.11.8: 1228 | resolution: {integrity: sha512-+XZ+r1XGIJGeQk3VvXhT6xx/VpbHsRzsTkGgF6E5RX9TTXD0118l87puaEBZ566FhqblC6U0d4XnubznJDm30A==} 1229 | engines: {node: ^14.18.0 || >=16.0.0} 1230 | 1231 | thenify-all@1.6.0: 1232 | resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} 1233 | engines: {node: '>=0.8'} 1234 | 1235 | thenify@3.3.1: 1236 | resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} 1237 | 1238 | tinybench@2.9.0: 1239 | resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} 1240 | 1241 | tinyexec@0.3.2: 1242 | resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} 1243 | 1244 | tinyglobby@0.2.15: 1245 | resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} 1246 | engines: {node: '>=12.0.0'} 1247 | 1248 | tinypool@1.1.1: 1249 | resolution: {integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==} 1250 | engines: {node: ^18.0.0 || >=20.0.0} 1251 | 1252 | tinyrainbow@2.0.0: 1253 | resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} 1254 | engines: {node: '>=14.0.0'} 1255 | 1256 | tinyspy@4.0.4: 1257 | resolution: {integrity: sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==} 1258 | engines: {node: '>=14.0.0'} 1259 | 1260 | to-regex-range@5.0.1: 1261 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1262 | engines: {node: '>=8.0'} 1263 | 1264 | tr46@1.0.1: 1265 | resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} 1266 | 1267 | tree-kill@1.2.2: 1268 | resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} 1269 | hasBin: true 1270 | 1271 | ts-api-utils@2.1.0: 1272 | resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} 1273 | engines: {node: '>=18.12'} 1274 | peerDependencies: 1275 | typescript: '>=4.8.4' 1276 | 1277 | ts-interface-checker@0.1.13: 1278 | resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} 1279 | 1280 | tslib@2.8.1: 1281 | resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} 1282 | 1283 | tsup@8.5.0: 1284 | resolution: {integrity: sha512-VmBp77lWNQq6PfuMqCHD3xWl22vEoWsKajkF8t+yMBawlUS8JzEI+vOVMeuNZIuMML8qXRizFKi9oD5glKQVcQ==} 1285 | engines: {node: '>=18'} 1286 | hasBin: true 1287 | peerDependencies: 1288 | '@microsoft/api-extractor': ^7.36.0 1289 | '@swc/core': ^1 1290 | postcss: ^8.4.12 1291 | typescript: '>=4.5.0' 1292 | peerDependenciesMeta: 1293 | '@microsoft/api-extractor': 1294 | optional: true 1295 | '@swc/core': 1296 | optional: true 1297 | postcss: 1298 | optional: true 1299 | typescript: 1300 | optional: true 1301 | 1302 | tsx@4.20.6: 1303 | resolution: {integrity: sha512-ytQKuwgmrrkDTFP4LjR0ToE2nqgy886GpvRSpU0JAnrdBYppuY5rLkRUYPU1yCryb24SsKBTL/hlDQAEFVwtZg==} 1304 | engines: {node: '>=18.0.0'} 1305 | hasBin: true 1306 | 1307 | type-check@0.4.0: 1308 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 1309 | engines: {node: '>= 0.8.0'} 1310 | 1311 | typescript-eslint@8.46.2: 1312 | resolution: {integrity: sha512-vbw8bOmiuYNdzzV3lsiWv6sRwjyuKJMQqWulBOU7M0RrxedXledX8G8kBbQeiOYDnTfiXz0Y4081E1QMNB6iQg==} 1313 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1314 | peerDependencies: 1315 | eslint: ^8.57.0 || ^9.0.0 1316 | typescript: '>=4.8.4 <6.0.0' 1317 | 1318 | typescript@5.9.3: 1319 | resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} 1320 | engines: {node: '>=14.17'} 1321 | hasBin: true 1322 | 1323 | ufo@1.6.1: 1324 | resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==} 1325 | 1326 | undici-types@7.16.0: 1327 | resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} 1328 | 1329 | uri-js@4.4.1: 1330 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 1331 | 1332 | vite-node@3.2.4: 1333 | resolution: {integrity: sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==} 1334 | engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} 1335 | hasBin: true 1336 | 1337 | vite@7.1.12: 1338 | resolution: {integrity: sha512-ZWyE8YXEXqJrrSLvYgrRP7p62OziLW7xI5HYGWFzOvupfAlrLvURSzv/FyGyy0eidogEM3ujU+kUG1zuHgb6Ug==} 1339 | engines: {node: ^20.19.0 || >=22.12.0} 1340 | hasBin: true 1341 | peerDependencies: 1342 | '@types/node': ^20.19.0 || >=22.12.0 1343 | jiti: '>=1.21.0' 1344 | less: ^4.0.0 1345 | lightningcss: ^1.21.0 1346 | sass: ^1.70.0 1347 | sass-embedded: ^1.70.0 1348 | stylus: '>=0.54.8' 1349 | sugarss: ^5.0.0 1350 | terser: ^5.16.0 1351 | tsx: ^4.8.1 1352 | yaml: ^2.4.2 1353 | peerDependenciesMeta: 1354 | '@types/node': 1355 | optional: true 1356 | jiti: 1357 | optional: true 1358 | less: 1359 | optional: true 1360 | lightningcss: 1361 | optional: true 1362 | sass: 1363 | optional: true 1364 | sass-embedded: 1365 | optional: true 1366 | stylus: 1367 | optional: true 1368 | sugarss: 1369 | optional: true 1370 | terser: 1371 | optional: true 1372 | tsx: 1373 | optional: true 1374 | yaml: 1375 | optional: true 1376 | 1377 | vitest@3.2.4: 1378 | resolution: {integrity: sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==} 1379 | engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} 1380 | hasBin: true 1381 | peerDependencies: 1382 | '@edge-runtime/vm': '*' 1383 | '@types/debug': ^4.1.12 1384 | '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 1385 | '@vitest/browser': 3.2.4 1386 | '@vitest/ui': 3.2.4 1387 | happy-dom: '*' 1388 | jsdom: '*' 1389 | peerDependenciesMeta: 1390 | '@edge-runtime/vm': 1391 | optional: true 1392 | '@types/debug': 1393 | optional: true 1394 | '@types/node': 1395 | optional: true 1396 | '@vitest/browser': 1397 | optional: true 1398 | '@vitest/ui': 1399 | optional: true 1400 | happy-dom: 1401 | optional: true 1402 | jsdom: 1403 | optional: true 1404 | 1405 | webidl-conversions@4.0.2: 1406 | resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} 1407 | 1408 | whatwg-url@7.1.0: 1409 | resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} 1410 | 1411 | which@2.0.2: 1412 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 1413 | engines: {node: '>= 8'} 1414 | hasBin: true 1415 | 1416 | why-is-node-running@2.3.0: 1417 | resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} 1418 | engines: {node: '>=8'} 1419 | hasBin: true 1420 | 1421 | word-wrap@1.2.5: 1422 | resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} 1423 | engines: {node: '>=0.10.0'} 1424 | 1425 | wrap-ansi@7.0.0: 1426 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} 1427 | engines: {node: '>=10'} 1428 | 1429 | wrap-ansi@8.1.0: 1430 | resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} 1431 | engines: {node: '>=12'} 1432 | 1433 | yocto-queue@0.1.0: 1434 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 1435 | engines: {node: '>=10'} 1436 | 1437 | snapshots: 1438 | 1439 | '@babel/code-frame@7.27.1': 1440 | dependencies: 1441 | '@babel/helper-validator-identifier': 7.28.5 1442 | js-tokens: 4.0.0 1443 | picocolors: 1.1.1 1444 | 1445 | '@babel/generator@7.28.5': 1446 | dependencies: 1447 | '@babel/parser': 7.28.5 1448 | '@babel/types': 7.28.5 1449 | '@jridgewell/gen-mapping': 0.3.13 1450 | '@jridgewell/trace-mapping': 0.3.31 1451 | jsesc: 3.1.0 1452 | 1453 | '@babel/helper-globals@7.28.0': {} 1454 | 1455 | '@babel/helper-string-parser@7.27.1': {} 1456 | 1457 | '@babel/helper-validator-identifier@7.28.5': {} 1458 | 1459 | '@babel/parser@7.28.5': 1460 | dependencies: 1461 | '@babel/types': 7.28.5 1462 | 1463 | '@babel/template@7.27.2': 1464 | dependencies: 1465 | '@babel/code-frame': 7.27.1 1466 | '@babel/parser': 7.28.5 1467 | '@babel/types': 7.28.5 1468 | 1469 | '@babel/traverse@7.28.5': 1470 | dependencies: 1471 | '@babel/code-frame': 7.27.1 1472 | '@babel/generator': 7.28.5 1473 | '@babel/helper-globals': 7.28.0 1474 | '@babel/parser': 7.28.5 1475 | '@babel/template': 7.27.2 1476 | '@babel/types': 7.28.5 1477 | debug: 4.4.3 1478 | transitivePeerDependencies: 1479 | - supports-color 1480 | 1481 | '@babel/types@7.28.5': 1482 | dependencies: 1483 | '@babel/helper-string-parser': 7.27.1 1484 | '@babel/helper-validator-identifier': 7.28.5 1485 | 1486 | '@esbuild/aix-ppc64@0.25.12': 1487 | optional: true 1488 | 1489 | '@esbuild/android-arm64@0.25.12': 1490 | optional: true 1491 | 1492 | '@esbuild/android-arm@0.25.12': 1493 | optional: true 1494 | 1495 | '@esbuild/android-x64@0.25.12': 1496 | optional: true 1497 | 1498 | '@esbuild/darwin-arm64@0.25.12': 1499 | optional: true 1500 | 1501 | '@esbuild/darwin-x64@0.25.12': 1502 | optional: true 1503 | 1504 | '@esbuild/freebsd-arm64@0.25.12': 1505 | optional: true 1506 | 1507 | '@esbuild/freebsd-x64@0.25.12': 1508 | optional: true 1509 | 1510 | '@esbuild/linux-arm64@0.25.12': 1511 | optional: true 1512 | 1513 | '@esbuild/linux-arm@0.25.12': 1514 | optional: true 1515 | 1516 | '@esbuild/linux-ia32@0.25.12': 1517 | optional: true 1518 | 1519 | '@esbuild/linux-loong64@0.25.12': 1520 | optional: true 1521 | 1522 | '@esbuild/linux-mips64el@0.25.12': 1523 | optional: true 1524 | 1525 | '@esbuild/linux-ppc64@0.25.12': 1526 | optional: true 1527 | 1528 | '@esbuild/linux-riscv64@0.25.12': 1529 | optional: true 1530 | 1531 | '@esbuild/linux-s390x@0.25.12': 1532 | optional: true 1533 | 1534 | '@esbuild/linux-x64@0.25.12': 1535 | optional: true 1536 | 1537 | '@esbuild/netbsd-arm64@0.25.12': 1538 | optional: true 1539 | 1540 | '@esbuild/netbsd-x64@0.25.12': 1541 | optional: true 1542 | 1543 | '@esbuild/openbsd-arm64@0.25.12': 1544 | optional: true 1545 | 1546 | '@esbuild/openbsd-x64@0.25.12': 1547 | optional: true 1548 | 1549 | '@esbuild/openharmony-arm64@0.25.12': 1550 | optional: true 1551 | 1552 | '@esbuild/sunos-x64@0.25.12': 1553 | optional: true 1554 | 1555 | '@esbuild/win32-arm64@0.25.12': 1556 | optional: true 1557 | 1558 | '@esbuild/win32-ia32@0.25.12': 1559 | optional: true 1560 | 1561 | '@esbuild/win32-x64@0.25.12': 1562 | optional: true 1563 | 1564 | '@eslint-community/eslint-utils@4.9.0(eslint@9.39.1(jiti@2.5.1))': 1565 | dependencies: 1566 | eslint: 9.39.1(jiti@2.5.1) 1567 | eslint-visitor-keys: 3.4.3 1568 | 1569 | '@eslint-community/regexpp@4.12.2': {} 1570 | 1571 | '@eslint/config-array@0.21.1': 1572 | dependencies: 1573 | '@eslint/object-schema': 2.1.7 1574 | debug: 4.4.3 1575 | minimatch: 3.1.2 1576 | transitivePeerDependencies: 1577 | - supports-color 1578 | 1579 | '@eslint/config-helpers@0.4.2': 1580 | dependencies: 1581 | '@eslint/core': 0.17.0 1582 | 1583 | '@eslint/core@0.17.0': 1584 | dependencies: 1585 | '@types/json-schema': 7.0.15 1586 | 1587 | '@eslint/eslintrc@3.3.1': 1588 | dependencies: 1589 | ajv: 6.12.6 1590 | debug: 4.4.3 1591 | espree: 10.4.0 1592 | globals: 14.0.0 1593 | ignore: 5.3.2 1594 | import-fresh: 3.3.1 1595 | js-yaml: 4.1.0 1596 | minimatch: 3.1.2 1597 | strip-json-comments: 3.1.1 1598 | transitivePeerDependencies: 1599 | - supports-color 1600 | 1601 | '@eslint/js@9.39.1': {} 1602 | 1603 | '@eslint/object-schema@2.1.7': {} 1604 | 1605 | '@eslint/plugin-kit@0.4.1': 1606 | dependencies: 1607 | '@eslint/core': 0.17.0 1608 | levn: 0.4.1 1609 | 1610 | '@humanfs/core@0.19.1': {} 1611 | 1612 | '@humanfs/node@0.16.7': 1613 | dependencies: 1614 | '@humanfs/core': 0.19.1 1615 | '@humanwhocodes/retry': 0.4.3 1616 | 1617 | '@humanwhocodes/module-importer@1.0.1': {} 1618 | 1619 | '@humanwhocodes/retry@0.4.3': {} 1620 | 1621 | '@ianvs/prettier-plugin-sort-imports@4.5.1(prettier@3.6.2)': 1622 | dependencies: 1623 | '@babel/generator': 7.28.5 1624 | '@babel/parser': 7.28.5 1625 | '@babel/traverse': 7.28.5 1626 | '@babel/types': 7.28.5 1627 | prettier: 3.6.2 1628 | semver: 7.7.3 1629 | transitivePeerDependencies: 1630 | - supports-color 1631 | 1632 | '@isaacs/cliui@8.0.2': 1633 | dependencies: 1634 | string-width: 5.1.2 1635 | string-width-cjs: string-width@4.2.3 1636 | strip-ansi: 7.1.2 1637 | strip-ansi-cjs: strip-ansi@6.0.1 1638 | wrap-ansi: 8.1.0 1639 | wrap-ansi-cjs: wrap-ansi@7.0.0 1640 | 1641 | '@jridgewell/gen-mapping@0.3.13': 1642 | dependencies: 1643 | '@jridgewell/sourcemap-codec': 1.5.5 1644 | '@jridgewell/trace-mapping': 0.3.31 1645 | 1646 | '@jridgewell/resolve-uri@3.1.2': {} 1647 | 1648 | '@jridgewell/sourcemap-codec@1.5.5': {} 1649 | 1650 | '@jridgewell/trace-mapping@0.3.31': 1651 | dependencies: 1652 | '@jridgewell/resolve-uri': 3.1.2 1653 | '@jridgewell/sourcemap-codec': 1.5.5 1654 | 1655 | '@nodelib/fs.scandir@2.1.5': 1656 | dependencies: 1657 | '@nodelib/fs.stat': 2.0.5 1658 | run-parallel: 1.2.0 1659 | 1660 | '@nodelib/fs.stat@2.0.5': {} 1661 | 1662 | '@nodelib/fs.walk@1.2.8': 1663 | dependencies: 1664 | '@nodelib/fs.scandir': 2.1.5 1665 | fastq: 1.19.1 1666 | 1667 | '@pkgjs/parseargs@0.11.0': 1668 | optional: true 1669 | 1670 | '@pkgr/core@0.2.9': {} 1671 | 1672 | '@rollup/rollup-android-arm-eabi@4.52.5': 1673 | optional: true 1674 | 1675 | '@rollup/rollup-android-arm64@4.52.5': 1676 | optional: true 1677 | 1678 | '@rollup/rollup-darwin-arm64@4.52.5': 1679 | optional: true 1680 | 1681 | '@rollup/rollup-darwin-x64@4.52.5': 1682 | optional: true 1683 | 1684 | '@rollup/rollup-freebsd-arm64@4.52.5': 1685 | optional: true 1686 | 1687 | '@rollup/rollup-freebsd-x64@4.52.5': 1688 | optional: true 1689 | 1690 | '@rollup/rollup-linux-arm-gnueabihf@4.52.5': 1691 | optional: true 1692 | 1693 | '@rollup/rollup-linux-arm-musleabihf@4.52.5': 1694 | optional: true 1695 | 1696 | '@rollup/rollup-linux-arm64-gnu@4.52.5': 1697 | optional: true 1698 | 1699 | '@rollup/rollup-linux-arm64-musl@4.52.5': 1700 | optional: true 1701 | 1702 | '@rollup/rollup-linux-loong64-gnu@4.52.5': 1703 | optional: true 1704 | 1705 | '@rollup/rollup-linux-ppc64-gnu@4.52.5': 1706 | optional: true 1707 | 1708 | '@rollup/rollup-linux-riscv64-gnu@4.52.5': 1709 | optional: true 1710 | 1711 | '@rollup/rollup-linux-riscv64-musl@4.52.5': 1712 | optional: true 1713 | 1714 | '@rollup/rollup-linux-s390x-gnu@4.52.5': 1715 | optional: true 1716 | 1717 | '@rollup/rollup-linux-x64-gnu@4.52.5': 1718 | optional: true 1719 | 1720 | '@rollup/rollup-linux-x64-musl@4.52.5': 1721 | optional: true 1722 | 1723 | '@rollup/rollup-openharmony-arm64@4.52.5': 1724 | optional: true 1725 | 1726 | '@rollup/rollup-win32-arm64-msvc@4.52.5': 1727 | optional: true 1728 | 1729 | '@rollup/rollup-win32-ia32-msvc@4.52.5': 1730 | optional: true 1731 | 1732 | '@rollup/rollup-win32-x64-gnu@4.52.5': 1733 | optional: true 1734 | 1735 | '@rollup/rollup-win32-x64-msvc@4.52.5': 1736 | optional: true 1737 | 1738 | '@shahrad/eslint-config@1.0.1(jiti@2.5.1)(typescript@5.9.3)': 1739 | dependencies: 1740 | '@eslint/js': 9.39.1 1741 | eslint: 9.39.1(jiti@2.5.1) 1742 | typescript-eslint: 8.46.2(eslint@9.39.1(jiti@2.5.1))(typescript@5.9.3) 1743 | transitivePeerDependencies: 1744 | - jiti 1745 | - supports-color 1746 | - typescript 1747 | 1748 | '@shahrad/prettier-config@1.2.2(@ianvs/prettier-plugin-sort-imports@4.5.1(prettier@3.6.2))(prettier-plugin-packagejson@2.5.18(prettier@3.6.2))(prettier-plugin-sh@0.15.0(prettier@3.6.2))(prettier@3.6.2)': 1749 | dependencies: 1750 | '@ianvs/prettier-plugin-sort-imports': 4.5.1(prettier@3.6.2) 1751 | prettier: 3.6.2 1752 | prettier-plugin-packagejson: 2.5.18(prettier@3.6.2) 1753 | prettier-plugin-sh: 0.15.0(prettier@3.6.2) 1754 | 1755 | '@shahrad/tsconfig@1.2.0': {} 1756 | 1757 | '@types/chai@5.2.3': 1758 | dependencies: 1759 | '@types/deep-eql': 4.0.2 1760 | assertion-error: 2.0.1 1761 | 1762 | '@types/deep-eql@4.0.2': {} 1763 | 1764 | '@types/estree@1.0.8': {} 1765 | 1766 | '@types/json-schema@7.0.15': {} 1767 | 1768 | '@types/node@24.10.0': 1769 | dependencies: 1770 | undici-types: 7.16.0 1771 | 1772 | '@typescript-eslint/eslint-plugin@8.46.2(@typescript-eslint/parser@8.46.2(eslint@9.39.1(jiti@2.5.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.5.1))(typescript@5.9.3)': 1773 | dependencies: 1774 | '@eslint-community/regexpp': 4.12.2 1775 | '@typescript-eslint/parser': 8.46.2(eslint@9.39.1(jiti@2.5.1))(typescript@5.9.3) 1776 | '@typescript-eslint/scope-manager': 8.46.2 1777 | '@typescript-eslint/type-utils': 8.46.2(eslint@9.39.1(jiti@2.5.1))(typescript@5.9.3) 1778 | '@typescript-eslint/utils': 8.46.2(eslint@9.39.1(jiti@2.5.1))(typescript@5.9.3) 1779 | '@typescript-eslint/visitor-keys': 8.46.2 1780 | eslint: 9.39.1(jiti@2.5.1) 1781 | graphemer: 1.4.0 1782 | ignore: 7.0.5 1783 | natural-compare: 1.4.0 1784 | ts-api-utils: 2.1.0(typescript@5.9.3) 1785 | typescript: 5.9.3 1786 | transitivePeerDependencies: 1787 | - supports-color 1788 | 1789 | '@typescript-eslint/parser@8.46.2(eslint@9.39.1(jiti@2.5.1))(typescript@5.9.3)': 1790 | dependencies: 1791 | '@typescript-eslint/scope-manager': 8.46.2 1792 | '@typescript-eslint/types': 8.46.2 1793 | '@typescript-eslint/typescript-estree': 8.46.2(typescript@5.9.3) 1794 | '@typescript-eslint/visitor-keys': 8.46.2 1795 | debug: 4.4.3 1796 | eslint: 9.39.1(jiti@2.5.1) 1797 | typescript: 5.9.3 1798 | transitivePeerDependencies: 1799 | - supports-color 1800 | 1801 | '@typescript-eslint/project-service@8.46.2(typescript@5.9.3)': 1802 | dependencies: 1803 | '@typescript-eslint/tsconfig-utils': 8.46.2(typescript@5.9.3) 1804 | '@typescript-eslint/types': 8.46.2 1805 | debug: 4.4.3 1806 | typescript: 5.9.3 1807 | transitivePeerDependencies: 1808 | - supports-color 1809 | 1810 | '@typescript-eslint/scope-manager@8.46.2': 1811 | dependencies: 1812 | '@typescript-eslint/types': 8.46.2 1813 | '@typescript-eslint/visitor-keys': 8.46.2 1814 | 1815 | '@typescript-eslint/tsconfig-utils@8.46.2(typescript@5.9.3)': 1816 | dependencies: 1817 | typescript: 5.9.3 1818 | 1819 | '@typescript-eslint/type-utils@8.46.2(eslint@9.39.1(jiti@2.5.1))(typescript@5.9.3)': 1820 | dependencies: 1821 | '@typescript-eslint/types': 8.46.2 1822 | '@typescript-eslint/typescript-estree': 8.46.2(typescript@5.9.3) 1823 | '@typescript-eslint/utils': 8.46.2(eslint@9.39.1(jiti@2.5.1))(typescript@5.9.3) 1824 | debug: 4.4.3 1825 | eslint: 9.39.1(jiti@2.5.1) 1826 | ts-api-utils: 2.1.0(typescript@5.9.3) 1827 | typescript: 5.9.3 1828 | transitivePeerDependencies: 1829 | - supports-color 1830 | 1831 | '@typescript-eslint/types@8.46.2': {} 1832 | 1833 | '@typescript-eslint/typescript-estree@8.46.2(typescript@5.9.3)': 1834 | dependencies: 1835 | '@typescript-eslint/project-service': 8.46.2(typescript@5.9.3) 1836 | '@typescript-eslint/tsconfig-utils': 8.46.2(typescript@5.9.3) 1837 | '@typescript-eslint/types': 8.46.2 1838 | '@typescript-eslint/visitor-keys': 8.46.2 1839 | debug: 4.4.3 1840 | fast-glob: 3.3.3 1841 | is-glob: 4.0.3 1842 | minimatch: 9.0.5 1843 | semver: 7.7.3 1844 | ts-api-utils: 2.1.0(typescript@5.9.3) 1845 | typescript: 5.9.3 1846 | transitivePeerDependencies: 1847 | - supports-color 1848 | 1849 | '@typescript-eslint/utils@8.46.2(eslint@9.39.1(jiti@2.5.1))(typescript@5.9.3)': 1850 | dependencies: 1851 | '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1(jiti@2.5.1)) 1852 | '@typescript-eslint/scope-manager': 8.46.2 1853 | '@typescript-eslint/types': 8.46.2 1854 | '@typescript-eslint/typescript-estree': 8.46.2(typescript@5.9.3) 1855 | eslint: 9.39.1(jiti@2.5.1) 1856 | typescript: 5.9.3 1857 | transitivePeerDependencies: 1858 | - supports-color 1859 | 1860 | '@typescript-eslint/visitor-keys@8.46.2': 1861 | dependencies: 1862 | '@typescript-eslint/types': 8.46.2 1863 | eslint-visitor-keys: 4.2.1 1864 | 1865 | '@vitest/expect@3.2.4': 1866 | dependencies: 1867 | '@types/chai': 5.2.3 1868 | '@vitest/spy': 3.2.4 1869 | '@vitest/utils': 3.2.4 1870 | chai: 5.3.3 1871 | tinyrainbow: 2.0.0 1872 | 1873 | '@vitest/mocker@3.2.4(vite@7.1.12(@types/node@24.10.0)(jiti@2.5.1)(tsx@4.20.6))': 1874 | dependencies: 1875 | '@vitest/spy': 3.2.4 1876 | estree-walker: 3.0.3 1877 | magic-string: 0.30.21 1878 | optionalDependencies: 1879 | vite: 7.1.12(@types/node@24.10.0)(jiti@2.5.1)(tsx@4.20.6) 1880 | 1881 | '@vitest/pretty-format@3.2.4': 1882 | dependencies: 1883 | tinyrainbow: 2.0.0 1884 | 1885 | '@vitest/runner@3.2.4': 1886 | dependencies: 1887 | '@vitest/utils': 3.2.4 1888 | pathe: 2.0.3 1889 | strip-literal: 3.1.0 1890 | 1891 | '@vitest/snapshot@3.2.4': 1892 | dependencies: 1893 | '@vitest/pretty-format': 3.2.4 1894 | magic-string: 0.30.21 1895 | pathe: 2.0.3 1896 | 1897 | '@vitest/spy@3.2.4': 1898 | dependencies: 1899 | tinyspy: 4.0.4 1900 | 1901 | '@vitest/utils@3.2.4': 1902 | dependencies: 1903 | '@vitest/pretty-format': 3.2.4 1904 | loupe: 3.2.1 1905 | tinyrainbow: 2.0.0 1906 | 1907 | acorn-jsx@5.3.2(acorn@8.15.0): 1908 | dependencies: 1909 | acorn: 8.15.0 1910 | 1911 | acorn@8.15.0: {} 1912 | 1913 | ajv@6.12.6: 1914 | dependencies: 1915 | fast-deep-equal: 3.1.3 1916 | fast-json-stable-stringify: 2.1.0 1917 | json-schema-traverse: 0.4.1 1918 | uri-js: 4.4.1 1919 | 1920 | ansi-regex@5.0.1: {} 1921 | 1922 | ansi-regex@6.2.2: {} 1923 | 1924 | ansi-styles@4.3.0: 1925 | dependencies: 1926 | color-convert: 2.0.1 1927 | 1928 | ansi-styles@6.2.3: {} 1929 | 1930 | any-promise@1.3.0: {} 1931 | 1932 | argparse@2.0.1: {} 1933 | 1934 | assertion-error@2.0.1: {} 1935 | 1936 | balanced-match@1.0.2: {} 1937 | 1938 | brace-expansion@1.1.12: 1939 | dependencies: 1940 | balanced-match: 1.0.2 1941 | concat-map: 0.0.1 1942 | 1943 | brace-expansion@2.0.2: 1944 | dependencies: 1945 | balanced-match: 1.0.2 1946 | 1947 | braces@3.0.3: 1948 | dependencies: 1949 | fill-range: 7.1.1 1950 | 1951 | bundle-require@5.1.0(esbuild@0.25.12): 1952 | dependencies: 1953 | esbuild: 0.25.12 1954 | load-tsconfig: 0.2.5 1955 | 1956 | cac@6.7.14: {} 1957 | 1958 | callsites@3.1.0: {} 1959 | 1960 | chai@5.3.3: 1961 | dependencies: 1962 | assertion-error: 2.0.1 1963 | check-error: 2.1.1 1964 | deep-eql: 5.0.2 1965 | loupe: 3.2.1 1966 | pathval: 2.0.1 1967 | 1968 | chalk@4.1.2: 1969 | dependencies: 1970 | ansi-styles: 4.3.0 1971 | supports-color: 7.2.0 1972 | 1973 | check-error@2.1.1: {} 1974 | 1975 | chokidar@4.0.3: 1976 | dependencies: 1977 | readdirp: 4.1.2 1978 | 1979 | color-convert@2.0.1: 1980 | dependencies: 1981 | color-name: 1.1.4 1982 | 1983 | color-name@1.1.4: {} 1984 | 1985 | commander@4.1.1: {} 1986 | 1987 | concat-map@0.0.1: {} 1988 | 1989 | confbox@0.1.8: {} 1990 | 1991 | consola@3.4.2: {} 1992 | 1993 | cross-spawn@7.0.6: 1994 | dependencies: 1995 | path-key: 3.1.1 1996 | shebang-command: 2.0.0 1997 | which: 2.0.2 1998 | 1999 | debug@4.4.3: 2000 | dependencies: 2001 | ms: 2.1.3 2002 | 2003 | deep-eql@5.0.2: {} 2004 | 2005 | deep-is@0.1.4: {} 2006 | 2007 | detect-indent@7.0.2: {} 2008 | 2009 | detect-newline@4.0.1: {} 2010 | 2011 | eastasianwidth@0.2.0: {} 2012 | 2013 | emoji-regex@8.0.0: {} 2014 | 2015 | emoji-regex@9.2.2: {} 2016 | 2017 | es-module-lexer@1.7.0: {} 2018 | 2019 | esbuild@0.25.12: 2020 | optionalDependencies: 2021 | '@esbuild/aix-ppc64': 0.25.12 2022 | '@esbuild/android-arm': 0.25.12 2023 | '@esbuild/android-arm64': 0.25.12 2024 | '@esbuild/android-x64': 0.25.12 2025 | '@esbuild/darwin-arm64': 0.25.12 2026 | '@esbuild/darwin-x64': 0.25.12 2027 | '@esbuild/freebsd-arm64': 0.25.12 2028 | '@esbuild/freebsd-x64': 0.25.12 2029 | '@esbuild/linux-arm': 0.25.12 2030 | '@esbuild/linux-arm64': 0.25.12 2031 | '@esbuild/linux-ia32': 0.25.12 2032 | '@esbuild/linux-loong64': 0.25.12 2033 | '@esbuild/linux-mips64el': 0.25.12 2034 | '@esbuild/linux-ppc64': 0.25.12 2035 | '@esbuild/linux-riscv64': 0.25.12 2036 | '@esbuild/linux-s390x': 0.25.12 2037 | '@esbuild/linux-x64': 0.25.12 2038 | '@esbuild/netbsd-arm64': 0.25.12 2039 | '@esbuild/netbsd-x64': 0.25.12 2040 | '@esbuild/openbsd-arm64': 0.25.12 2041 | '@esbuild/openbsd-x64': 0.25.12 2042 | '@esbuild/openharmony-arm64': 0.25.12 2043 | '@esbuild/sunos-x64': 0.25.12 2044 | '@esbuild/win32-arm64': 0.25.12 2045 | '@esbuild/win32-ia32': 0.25.12 2046 | '@esbuild/win32-x64': 0.25.12 2047 | 2048 | escape-string-regexp@4.0.0: {} 2049 | 2050 | eslint-scope@8.4.0: 2051 | dependencies: 2052 | esrecurse: 4.3.0 2053 | estraverse: 5.3.0 2054 | 2055 | eslint-visitor-keys@3.4.3: {} 2056 | 2057 | eslint-visitor-keys@4.2.1: {} 2058 | 2059 | eslint@9.39.1(jiti@2.5.1): 2060 | dependencies: 2061 | '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1(jiti@2.5.1)) 2062 | '@eslint-community/regexpp': 4.12.2 2063 | '@eslint/config-array': 0.21.1 2064 | '@eslint/config-helpers': 0.4.2 2065 | '@eslint/core': 0.17.0 2066 | '@eslint/eslintrc': 3.3.1 2067 | '@eslint/js': 9.39.1 2068 | '@eslint/plugin-kit': 0.4.1 2069 | '@humanfs/node': 0.16.7 2070 | '@humanwhocodes/module-importer': 1.0.1 2071 | '@humanwhocodes/retry': 0.4.3 2072 | '@types/estree': 1.0.8 2073 | ajv: 6.12.6 2074 | chalk: 4.1.2 2075 | cross-spawn: 7.0.6 2076 | debug: 4.4.3 2077 | escape-string-regexp: 4.0.0 2078 | eslint-scope: 8.4.0 2079 | eslint-visitor-keys: 4.2.1 2080 | espree: 10.4.0 2081 | esquery: 1.6.0 2082 | esutils: 2.0.3 2083 | fast-deep-equal: 3.1.3 2084 | file-entry-cache: 8.0.0 2085 | find-up: 5.0.0 2086 | glob-parent: 6.0.2 2087 | ignore: 5.3.2 2088 | imurmurhash: 0.1.4 2089 | is-glob: 4.0.3 2090 | json-stable-stringify-without-jsonify: 1.0.1 2091 | lodash.merge: 4.6.2 2092 | minimatch: 3.1.2 2093 | natural-compare: 1.4.0 2094 | optionator: 0.9.4 2095 | optionalDependencies: 2096 | jiti: 2.5.1 2097 | transitivePeerDependencies: 2098 | - supports-color 2099 | 2100 | espree@10.4.0: 2101 | dependencies: 2102 | acorn: 8.15.0 2103 | acorn-jsx: 5.3.2(acorn@8.15.0) 2104 | eslint-visitor-keys: 4.2.1 2105 | 2106 | esquery@1.6.0: 2107 | dependencies: 2108 | estraverse: 5.3.0 2109 | 2110 | esrecurse@4.3.0: 2111 | dependencies: 2112 | estraverse: 5.3.0 2113 | 2114 | estraverse@5.3.0: {} 2115 | 2116 | estree-walker@3.0.3: 2117 | dependencies: 2118 | '@types/estree': 1.0.8 2119 | 2120 | esutils@2.0.3: {} 2121 | 2122 | expect-type@1.2.2: {} 2123 | 2124 | fast-deep-equal@3.1.3: {} 2125 | 2126 | fast-glob@3.3.3: 2127 | dependencies: 2128 | '@nodelib/fs.stat': 2.0.5 2129 | '@nodelib/fs.walk': 1.2.8 2130 | glob-parent: 5.1.2 2131 | merge2: 1.4.1 2132 | micromatch: 4.0.8 2133 | 2134 | fast-json-stable-stringify@2.1.0: {} 2135 | 2136 | fast-levenshtein@2.0.6: {} 2137 | 2138 | fastq@1.19.1: 2139 | dependencies: 2140 | reusify: 1.1.0 2141 | 2142 | fdir@6.5.0(picomatch@4.0.3): 2143 | optionalDependencies: 2144 | picomatch: 4.0.3 2145 | 2146 | file-entry-cache@8.0.0: 2147 | dependencies: 2148 | flat-cache: 4.0.1 2149 | 2150 | fill-range@7.1.1: 2151 | dependencies: 2152 | to-regex-range: 5.0.1 2153 | 2154 | find-up@5.0.0: 2155 | dependencies: 2156 | locate-path: 6.0.0 2157 | path-exists: 4.0.0 2158 | 2159 | fix-dts-default-cjs-exports@1.0.1: 2160 | dependencies: 2161 | magic-string: 0.30.21 2162 | mlly: 1.8.0 2163 | rollup: 4.52.5 2164 | 2165 | flat-cache@4.0.1: 2166 | dependencies: 2167 | flatted: 3.3.3 2168 | keyv: 4.5.4 2169 | 2170 | flatted@3.3.3: {} 2171 | 2172 | foreground-child@3.3.1: 2173 | dependencies: 2174 | cross-spawn: 7.0.6 2175 | signal-exit: 4.1.0 2176 | 2177 | fsevents@2.3.3: 2178 | optional: true 2179 | 2180 | get-tsconfig@4.13.0: 2181 | dependencies: 2182 | resolve-pkg-maps: 1.0.0 2183 | optional: true 2184 | 2185 | git-hooks-list@4.1.1: {} 2186 | 2187 | glob-parent@5.1.2: 2188 | dependencies: 2189 | is-glob: 4.0.3 2190 | 2191 | glob-parent@6.0.2: 2192 | dependencies: 2193 | is-glob: 4.0.3 2194 | 2195 | glob@10.4.5: 2196 | dependencies: 2197 | foreground-child: 3.3.1 2198 | jackspeak: 3.4.3 2199 | minimatch: 9.0.5 2200 | minipass: 7.1.2 2201 | package-json-from-dist: 1.0.1 2202 | path-scurry: 1.11.1 2203 | 2204 | globals@14.0.0: {} 2205 | 2206 | globals@16.5.0: {} 2207 | 2208 | graphemer@1.4.0: {} 2209 | 2210 | has-flag@4.0.0: {} 2211 | 2212 | ignore@5.3.2: {} 2213 | 2214 | ignore@7.0.5: {} 2215 | 2216 | import-fresh@3.3.1: 2217 | dependencies: 2218 | parent-module: 1.0.1 2219 | resolve-from: 4.0.0 2220 | 2221 | imurmurhash@0.1.4: {} 2222 | 2223 | is-extglob@2.1.1: {} 2224 | 2225 | is-fullwidth-code-point@3.0.0: {} 2226 | 2227 | is-glob@4.0.3: 2228 | dependencies: 2229 | is-extglob: 2.1.1 2230 | 2231 | is-number@7.0.0: {} 2232 | 2233 | is-plain-obj@4.1.0: {} 2234 | 2235 | isexe@2.0.0: {} 2236 | 2237 | jackspeak@3.4.3: 2238 | dependencies: 2239 | '@isaacs/cliui': 8.0.2 2240 | optionalDependencies: 2241 | '@pkgjs/parseargs': 0.11.0 2242 | 2243 | jiti@2.5.1: 2244 | optional: true 2245 | 2246 | joycon@3.1.1: {} 2247 | 2248 | js-tokens@4.0.0: {} 2249 | 2250 | js-tokens@9.0.1: {} 2251 | 2252 | js-yaml@4.1.0: 2253 | dependencies: 2254 | argparse: 2.0.1 2255 | 2256 | jsesc@3.1.0: {} 2257 | 2258 | json-buffer@3.0.1: {} 2259 | 2260 | json-schema-traverse@0.4.1: {} 2261 | 2262 | json-stable-stringify-without-jsonify@1.0.1: {} 2263 | 2264 | keyv@4.5.4: 2265 | dependencies: 2266 | json-buffer: 3.0.1 2267 | 2268 | levn@0.4.1: 2269 | dependencies: 2270 | prelude-ls: 1.2.1 2271 | type-check: 0.4.0 2272 | 2273 | lilconfig@3.1.3: {} 2274 | 2275 | lines-and-columns@1.2.4: {} 2276 | 2277 | load-tsconfig@0.2.5: {} 2278 | 2279 | locate-path@6.0.0: 2280 | dependencies: 2281 | p-locate: 5.0.0 2282 | 2283 | lodash.merge@4.6.2: {} 2284 | 2285 | lodash.sortby@4.7.0: {} 2286 | 2287 | loupe@3.2.1: {} 2288 | 2289 | lru-cache@10.4.3: {} 2290 | 2291 | magic-string@0.30.21: 2292 | dependencies: 2293 | '@jridgewell/sourcemap-codec': 1.5.5 2294 | 2295 | merge2@1.4.1: {} 2296 | 2297 | micromatch@4.0.8: 2298 | dependencies: 2299 | braces: 3.0.3 2300 | picomatch: 2.3.1 2301 | 2302 | minimatch@3.1.2: 2303 | dependencies: 2304 | brace-expansion: 1.1.12 2305 | 2306 | minimatch@9.0.5: 2307 | dependencies: 2308 | brace-expansion: 2.0.2 2309 | 2310 | minipass@7.1.2: {} 2311 | 2312 | mlly@1.8.0: 2313 | dependencies: 2314 | acorn: 8.15.0 2315 | pathe: 2.0.3 2316 | pkg-types: 1.3.1 2317 | ufo: 1.6.1 2318 | 2319 | ms@2.1.3: {} 2320 | 2321 | mvdan-sh@0.10.1: {} 2322 | 2323 | mz@2.7.0: 2324 | dependencies: 2325 | any-promise: 1.3.0 2326 | object-assign: 4.1.1 2327 | thenify-all: 1.6.0 2328 | 2329 | nanoid@3.3.11: {} 2330 | 2331 | natural-compare@1.4.0: {} 2332 | 2333 | object-assign@4.1.1: {} 2334 | 2335 | optionator@0.9.4: 2336 | dependencies: 2337 | deep-is: 0.1.4 2338 | fast-levenshtein: 2.0.6 2339 | levn: 0.4.1 2340 | prelude-ls: 1.2.1 2341 | type-check: 0.4.0 2342 | word-wrap: 1.2.5 2343 | 2344 | p-limit@3.1.0: 2345 | dependencies: 2346 | yocto-queue: 0.1.0 2347 | 2348 | p-locate@5.0.0: 2349 | dependencies: 2350 | p-limit: 3.1.0 2351 | 2352 | package-json-from-dist@1.0.1: {} 2353 | 2354 | parent-module@1.0.1: 2355 | dependencies: 2356 | callsites: 3.1.0 2357 | 2358 | path-exists@4.0.0: {} 2359 | 2360 | path-key@3.1.1: {} 2361 | 2362 | path-scurry@1.11.1: 2363 | dependencies: 2364 | lru-cache: 10.4.3 2365 | minipass: 7.1.2 2366 | 2367 | pathe@2.0.3: {} 2368 | 2369 | pathval@2.0.1: {} 2370 | 2371 | picocolors@1.1.1: {} 2372 | 2373 | picomatch@2.3.1: {} 2374 | 2375 | picomatch@4.0.3: {} 2376 | 2377 | pirates@4.0.7: {} 2378 | 2379 | pkg-types@1.3.1: 2380 | dependencies: 2381 | confbox: 0.1.8 2382 | mlly: 1.8.0 2383 | pathe: 2.0.3 2384 | 2385 | postcss-load-config@6.0.1(jiti@2.5.1)(postcss@8.5.6)(tsx@4.20.6): 2386 | dependencies: 2387 | lilconfig: 3.1.3 2388 | optionalDependencies: 2389 | jiti: 2.5.1 2390 | postcss: 8.5.6 2391 | tsx: 4.20.6 2392 | 2393 | postcss@8.5.6: 2394 | dependencies: 2395 | nanoid: 3.3.11 2396 | picocolors: 1.1.1 2397 | source-map-js: 1.2.1 2398 | 2399 | prelude-ls@1.2.1: {} 2400 | 2401 | prettier-plugin-packagejson@2.5.18(prettier@3.6.2): 2402 | dependencies: 2403 | sort-package-json: 3.4.0 2404 | synckit: 0.11.8 2405 | optionalDependencies: 2406 | prettier: 3.6.2 2407 | 2408 | prettier-plugin-sh@0.15.0(prettier@3.6.2): 2409 | dependencies: 2410 | mvdan-sh: 0.10.1 2411 | prettier: 3.6.2 2412 | sh-syntax: 0.4.2 2413 | 2414 | prettier@3.6.2: {} 2415 | 2416 | punycode@2.3.1: {} 2417 | 2418 | queue-microtask@1.2.3: {} 2419 | 2420 | readdirp@4.1.2: {} 2421 | 2422 | resolve-from@4.0.0: {} 2423 | 2424 | resolve-from@5.0.0: {} 2425 | 2426 | resolve-pkg-maps@1.0.0: 2427 | optional: true 2428 | 2429 | reusify@1.1.0: {} 2430 | 2431 | rollup@4.52.5: 2432 | dependencies: 2433 | '@types/estree': 1.0.8 2434 | optionalDependencies: 2435 | '@rollup/rollup-android-arm-eabi': 4.52.5 2436 | '@rollup/rollup-android-arm64': 4.52.5 2437 | '@rollup/rollup-darwin-arm64': 4.52.5 2438 | '@rollup/rollup-darwin-x64': 4.52.5 2439 | '@rollup/rollup-freebsd-arm64': 4.52.5 2440 | '@rollup/rollup-freebsd-x64': 4.52.5 2441 | '@rollup/rollup-linux-arm-gnueabihf': 4.52.5 2442 | '@rollup/rollup-linux-arm-musleabihf': 4.52.5 2443 | '@rollup/rollup-linux-arm64-gnu': 4.52.5 2444 | '@rollup/rollup-linux-arm64-musl': 4.52.5 2445 | '@rollup/rollup-linux-loong64-gnu': 4.52.5 2446 | '@rollup/rollup-linux-ppc64-gnu': 4.52.5 2447 | '@rollup/rollup-linux-riscv64-gnu': 4.52.5 2448 | '@rollup/rollup-linux-riscv64-musl': 4.52.5 2449 | '@rollup/rollup-linux-s390x-gnu': 4.52.5 2450 | '@rollup/rollup-linux-x64-gnu': 4.52.5 2451 | '@rollup/rollup-linux-x64-musl': 4.52.5 2452 | '@rollup/rollup-openharmony-arm64': 4.52.5 2453 | '@rollup/rollup-win32-arm64-msvc': 4.52.5 2454 | '@rollup/rollup-win32-ia32-msvc': 4.52.5 2455 | '@rollup/rollup-win32-x64-gnu': 4.52.5 2456 | '@rollup/rollup-win32-x64-msvc': 4.52.5 2457 | fsevents: 2.3.3 2458 | 2459 | run-parallel@1.2.0: 2460 | dependencies: 2461 | queue-microtask: 1.2.3 2462 | 2463 | semver@7.7.3: {} 2464 | 2465 | sh-syntax@0.4.2: 2466 | dependencies: 2467 | tslib: 2.8.1 2468 | 2469 | shebang-command@2.0.0: 2470 | dependencies: 2471 | shebang-regex: 3.0.0 2472 | 2473 | shebang-regex@3.0.0: {} 2474 | 2475 | siginfo@2.0.0: {} 2476 | 2477 | signal-exit@4.1.0: {} 2478 | 2479 | sort-object-keys@1.1.3: {} 2480 | 2481 | sort-package-json@3.4.0: 2482 | dependencies: 2483 | detect-indent: 7.0.2 2484 | detect-newline: 4.0.1 2485 | git-hooks-list: 4.1.1 2486 | is-plain-obj: 4.1.0 2487 | semver: 7.7.3 2488 | sort-object-keys: 1.1.3 2489 | tinyglobby: 0.2.15 2490 | 2491 | source-map-js@1.2.1: {} 2492 | 2493 | source-map@0.8.0-beta.0: 2494 | dependencies: 2495 | whatwg-url: 7.1.0 2496 | 2497 | stackback@0.0.2: {} 2498 | 2499 | std-env@3.10.0: {} 2500 | 2501 | string-width@4.2.3: 2502 | dependencies: 2503 | emoji-regex: 8.0.0 2504 | is-fullwidth-code-point: 3.0.0 2505 | strip-ansi: 6.0.1 2506 | 2507 | string-width@5.1.2: 2508 | dependencies: 2509 | eastasianwidth: 0.2.0 2510 | emoji-regex: 9.2.2 2511 | strip-ansi: 7.1.2 2512 | 2513 | strip-ansi@6.0.1: 2514 | dependencies: 2515 | ansi-regex: 5.0.1 2516 | 2517 | strip-ansi@7.1.2: 2518 | dependencies: 2519 | ansi-regex: 6.2.2 2520 | 2521 | strip-json-comments@3.1.1: {} 2522 | 2523 | strip-literal@3.1.0: 2524 | dependencies: 2525 | js-tokens: 9.0.1 2526 | 2527 | sucrase@3.35.0: 2528 | dependencies: 2529 | '@jridgewell/gen-mapping': 0.3.13 2530 | commander: 4.1.1 2531 | glob: 10.4.5 2532 | lines-and-columns: 1.2.4 2533 | mz: 2.7.0 2534 | pirates: 4.0.7 2535 | ts-interface-checker: 0.1.13 2536 | 2537 | supports-color@7.2.0: 2538 | dependencies: 2539 | has-flag: 4.0.0 2540 | 2541 | synckit@0.11.8: 2542 | dependencies: 2543 | '@pkgr/core': 0.2.9 2544 | 2545 | thenify-all@1.6.0: 2546 | dependencies: 2547 | thenify: 3.3.1 2548 | 2549 | thenify@3.3.1: 2550 | dependencies: 2551 | any-promise: 1.3.0 2552 | 2553 | tinybench@2.9.0: {} 2554 | 2555 | tinyexec@0.3.2: {} 2556 | 2557 | tinyglobby@0.2.15: 2558 | dependencies: 2559 | fdir: 6.5.0(picomatch@4.0.3) 2560 | picomatch: 4.0.3 2561 | 2562 | tinypool@1.1.1: {} 2563 | 2564 | tinyrainbow@2.0.0: {} 2565 | 2566 | tinyspy@4.0.4: {} 2567 | 2568 | to-regex-range@5.0.1: 2569 | dependencies: 2570 | is-number: 7.0.0 2571 | 2572 | tr46@1.0.1: 2573 | dependencies: 2574 | punycode: 2.3.1 2575 | 2576 | tree-kill@1.2.2: {} 2577 | 2578 | ts-api-utils@2.1.0(typescript@5.9.3): 2579 | dependencies: 2580 | typescript: 5.9.3 2581 | 2582 | ts-interface-checker@0.1.13: {} 2583 | 2584 | tslib@2.8.1: {} 2585 | 2586 | tsup@8.5.0(jiti@2.5.1)(postcss@8.5.6)(tsx@4.20.6)(typescript@5.9.3): 2587 | dependencies: 2588 | bundle-require: 5.1.0(esbuild@0.25.12) 2589 | cac: 6.7.14 2590 | chokidar: 4.0.3 2591 | consola: 3.4.2 2592 | debug: 4.4.3 2593 | esbuild: 0.25.12 2594 | fix-dts-default-cjs-exports: 1.0.1 2595 | joycon: 3.1.1 2596 | picocolors: 1.1.1 2597 | postcss-load-config: 6.0.1(jiti@2.5.1)(postcss@8.5.6)(tsx@4.20.6) 2598 | resolve-from: 5.0.0 2599 | rollup: 4.52.5 2600 | source-map: 0.8.0-beta.0 2601 | sucrase: 3.35.0 2602 | tinyexec: 0.3.2 2603 | tinyglobby: 0.2.15 2604 | tree-kill: 1.2.2 2605 | optionalDependencies: 2606 | postcss: 8.5.6 2607 | typescript: 5.9.3 2608 | transitivePeerDependencies: 2609 | - jiti 2610 | - supports-color 2611 | - tsx 2612 | - yaml 2613 | 2614 | tsx@4.20.6: 2615 | dependencies: 2616 | esbuild: 0.25.12 2617 | get-tsconfig: 4.13.0 2618 | optionalDependencies: 2619 | fsevents: 2.3.3 2620 | optional: true 2621 | 2622 | type-check@0.4.0: 2623 | dependencies: 2624 | prelude-ls: 1.2.1 2625 | 2626 | typescript-eslint@8.46.2(eslint@9.39.1(jiti@2.5.1))(typescript@5.9.3): 2627 | dependencies: 2628 | '@typescript-eslint/eslint-plugin': 8.46.2(@typescript-eslint/parser@8.46.2(eslint@9.39.1(jiti@2.5.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.5.1))(typescript@5.9.3) 2629 | '@typescript-eslint/parser': 8.46.2(eslint@9.39.1(jiti@2.5.1))(typescript@5.9.3) 2630 | '@typescript-eslint/typescript-estree': 8.46.2(typescript@5.9.3) 2631 | '@typescript-eslint/utils': 8.46.2(eslint@9.39.1(jiti@2.5.1))(typescript@5.9.3) 2632 | eslint: 9.39.1(jiti@2.5.1) 2633 | typescript: 5.9.3 2634 | transitivePeerDependencies: 2635 | - supports-color 2636 | 2637 | typescript@5.9.3: {} 2638 | 2639 | ufo@1.6.1: {} 2640 | 2641 | undici-types@7.16.0: {} 2642 | 2643 | uri-js@4.4.1: 2644 | dependencies: 2645 | punycode: 2.3.1 2646 | 2647 | vite-node@3.2.4(@types/node@24.10.0)(jiti@2.5.1)(tsx@4.20.6): 2648 | dependencies: 2649 | cac: 6.7.14 2650 | debug: 4.4.3 2651 | es-module-lexer: 1.7.0 2652 | pathe: 2.0.3 2653 | vite: 7.1.12(@types/node@24.10.0)(jiti@2.5.1)(tsx@4.20.6) 2654 | transitivePeerDependencies: 2655 | - '@types/node' 2656 | - jiti 2657 | - less 2658 | - lightningcss 2659 | - sass 2660 | - sass-embedded 2661 | - stylus 2662 | - sugarss 2663 | - supports-color 2664 | - terser 2665 | - tsx 2666 | - yaml 2667 | 2668 | vite@7.1.12(@types/node@24.10.0)(jiti@2.5.1)(tsx@4.20.6): 2669 | dependencies: 2670 | esbuild: 0.25.12 2671 | fdir: 6.5.0(picomatch@4.0.3) 2672 | picomatch: 4.0.3 2673 | postcss: 8.5.6 2674 | rollup: 4.52.5 2675 | tinyglobby: 0.2.15 2676 | optionalDependencies: 2677 | '@types/node': 24.10.0 2678 | fsevents: 2.3.3 2679 | jiti: 2.5.1 2680 | tsx: 4.20.6 2681 | 2682 | vitest@3.2.4(@types/node@24.10.0)(jiti@2.5.1)(tsx@4.20.6): 2683 | dependencies: 2684 | '@types/chai': 5.2.3 2685 | '@vitest/expect': 3.2.4 2686 | '@vitest/mocker': 3.2.4(vite@7.1.12(@types/node@24.10.0)(jiti@2.5.1)(tsx@4.20.6)) 2687 | '@vitest/pretty-format': 3.2.4 2688 | '@vitest/runner': 3.2.4 2689 | '@vitest/snapshot': 3.2.4 2690 | '@vitest/spy': 3.2.4 2691 | '@vitest/utils': 3.2.4 2692 | chai: 5.3.3 2693 | debug: 4.4.3 2694 | expect-type: 1.2.2 2695 | magic-string: 0.30.21 2696 | pathe: 2.0.3 2697 | picomatch: 4.0.3 2698 | std-env: 3.10.0 2699 | tinybench: 2.9.0 2700 | tinyexec: 0.3.2 2701 | tinyglobby: 0.2.15 2702 | tinypool: 1.1.1 2703 | tinyrainbow: 2.0.0 2704 | vite: 7.1.12(@types/node@24.10.0)(jiti@2.5.1)(tsx@4.20.6) 2705 | vite-node: 3.2.4(@types/node@24.10.0)(jiti@2.5.1)(tsx@4.20.6) 2706 | why-is-node-running: 2.3.0 2707 | optionalDependencies: 2708 | '@types/node': 24.10.0 2709 | transitivePeerDependencies: 2710 | - jiti 2711 | - less 2712 | - lightningcss 2713 | - msw 2714 | - sass 2715 | - sass-embedded 2716 | - stylus 2717 | - sugarss 2718 | - supports-color 2719 | - terser 2720 | - tsx 2721 | - yaml 2722 | 2723 | webidl-conversions@4.0.2: {} 2724 | 2725 | whatwg-url@7.1.0: 2726 | dependencies: 2727 | lodash.sortby: 4.7.0 2728 | tr46: 1.0.1 2729 | webidl-conversions: 4.0.2 2730 | 2731 | which@2.0.2: 2732 | dependencies: 2733 | isexe: 2.0.0 2734 | 2735 | why-is-node-running@2.3.0: 2736 | dependencies: 2737 | siginfo: 2.0.0 2738 | stackback: 0.0.2 2739 | 2740 | word-wrap@1.2.5: {} 2741 | 2742 | wrap-ansi@7.0.0: 2743 | dependencies: 2744 | ansi-styles: 4.3.0 2745 | string-width: 4.2.3 2746 | strip-ansi: 6.0.1 2747 | 2748 | wrap-ansi@8.1.0: 2749 | dependencies: 2750 | ansi-styles: 6.2.3 2751 | string-width: 5.1.2 2752 | strip-ansi: 7.1.2 2753 | 2754 | yocto-queue@0.1.0: {} 2755 | --------------------------------------------------------------------------------