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