├── .gitignore ├── src ├── test │ └── vitest.d.ts ├── lib │ ├── utils.ts │ └── types.ts ├── index.ts ├── __tests__ │ ├── flow.test.ts │ ├── async.test.ts │ ├── transform.test.ts │ ├── collection.test.ts │ ├── combine.test.ts │ └── control.test.ts ├── operators │ ├── async.ts │ ├── transform.ts │ ├── collection.ts │ ├── combine.ts │ └── control.ts └── core │ ├── types.ts │ └── flow.ts ├── vitest.config.ts ├── tsup.config.ts ├── tsconfig.json ├── .prettierrc ├── SCOPE.md ├── eslint.config.js ├── package.json ├── README.md └── pnpm-lock.yaml /.gitignore: -------------------------------------------------------------------------------- 1 | dist/ 2 | node_modules/ 3 | .DS_Store -------------------------------------------------------------------------------- /src/test/vitest.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /src/lib/utils.ts: -------------------------------------------------------------------------------- 1 | export function sleep(ms: number) { 2 | return new Promise((resolve) => setTimeout(resolve, ms)) 3 | } 4 | -------------------------------------------------------------------------------- /vitest.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vitest/config' 2 | 3 | export default defineConfig({ 4 | test: { 5 | globals: true, 6 | }, 7 | }) 8 | -------------------------------------------------------------------------------- /tsup.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'tsup' 2 | 3 | export default defineConfig({ 4 | entry: ['./src/index.ts'], 5 | format: ['cjs', 'esm'], 6 | dts: true, 7 | clean: true, 8 | treeshake: true, 9 | }) 10 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './core/flow' 2 | export * from './operators/async' 3 | export * from './operators/collection' 4 | export * from './operators/combine' 5 | export * from './operators/control' 6 | export * from './operators/transform' 7 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES2020", 4 | "module": "ESNext", 5 | "lib": ["ESNext", "DOM"], 6 | "moduleResolution": "bundler", 7 | "strict": true, 8 | "esModuleInterop": true, 9 | "skipLibCheck": true 10 | }, 11 | "include": [ 12 | "src", 13 | "tsup.config.ts", 14 | "vitest.config.ts", 15 | "src/test/vitest.d.ts" 16 | ] 17 | } 18 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "arrowParens": "always", 3 | "bracketSpacing": true, 4 | "embeddedLanguageFormatting": "auto", 5 | "htmlWhitespaceSensitivity": "css", 6 | "insertPragma": false, 7 | "printWidth": 80, 8 | "proseWrap": "preserve", 9 | "quoteProps": "as-needed", 10 | "requirePragma": false, 11 | "semi": false, 12 | "singleQuote": true, 13 | "tabWidth": 2, 14 | "trailingComma": "es5", 15 | "useTabs": false, 16 | "vueIndentScriptAndStyle": false 17 | } 18 | -------------------------------------------------------------------------------- /SCOPE.md: -------------------------------------------------------------------------------- 1 | Remaining potential scope: 2 | 3 | **Reduction Operations** 4 | 5 | ```typescript 6 | const sum = await flow([1, 2, 3]).reduce((acc, val) => acc + val, 0) 7 | 8 | const collected = await flow([1, 2, 3]).collect() 9 | 10 | // Tests would verify: 11 | // - correct reduction 12 | // - collect to array 13 | // - handles async values 14 | ``` 15 | 16 | **Advanced Operations (flatten, groupBy)** 17 | 18 | ```typescript 19 | const flattened = flow([ 20 | [1, 2], 21 | [3, 4], 22 | ]).pipe(flatten()) 23 | 24 | const grouped = flow([ 25 | { type: 'a', val: 1 }, 26 | { type: 'b', val: 2 }, 27 | { type: 'a', val: 3 }, 28 | ]).pipe(groupBy((x) => x.type)) 29 | 30 | // Tests would verify: 31 | // - proper flattening 32 | // - grouping behavior 33 | // - handling nested structures 34 | ``` 35 | -------------------------------------------------------------------------------- /src/__tests__/flow.test.ts: -------------------------------------------------------------------------------- 1 | import { describe, expect, it } from 'vitest' 2 | import { flow } from '../core/flow' 3 | 4 | describe('flow', () => { 5 | it('should work with arrays', () => { 6 | const numbers = [1, 2, 3] 7 | const numberFlow = flow(numbers) 8 | 9 | const result = [...numberFlow] 10 | 11 | expect(result).toEqual([1, 2, 3]) 12 | }) 13 | 14 | it('should work with generators', () => { 15 | function* generator() { 16 | yield 1 17 | yield 2 18 | yield 3 19 | } 20 | 21 | const generatorFlow = flow(generator()) 22 | 23 | const result = [...generatorFlow] 24 | 25 | expect(result).toEqual([1, 2, 3]) 26 | }) 27 | 28 | it('should be reusable', () => { 29 | const numbers = flow([1, 2, 3]) 30 | 31 | const firstIteration = [...numbers] 32 | const secondIteration = [...numbers] 33 | 34 | expect(firstIteration).toEqual([1, 2, 3]) 35 | expect(secondIteration).toEqual([1, 2, 3]) 36 | }) 37 | }) 38 | -------------------------------------------------------------------------------- /eslint.config.js: -------------------------------------------------------------------------------- 1 | import js from '@eslint/js' 2 | import globals from 'globals' 3 | import tseslint from 'typescript-eslint' 4 | 5 | export default tseslint.config( 6 | { ignores: ['dist'] }, 7 | { 8 | extends: [ 9 | js.configs.recommended, 10 | ...tseslint.configs.recommendedTypeChecked, 11 | ], 12 | files: ['**/*.{ts,tsx}'], 13 | languageOptions: { 14 | ecmaVersion: 2020, 15 | globals: globals.browser, 16 | parserOptions: { 17 | project: ['./tsconfig.json'], 18 | tsconfigRootDir: import.meta.dirname, 19 | }, 20 | }, 21 | rules: { 22 | 'no-await-in-loop': 'off', 23 | '@typescript-eslint/array-type': ['error', { default: 'generic' }], 24 | '@typescript-eslint/require-await': 'off', 25 | '@typescript-eslint/await-thenable': 'off', 26 | '@typescript-eslint/naming-convention': [ 27 | 'error', 28 | { 29 | selector: 'variable', 30 | types: ['boolean'], 31 | format: ['PascalCase'], 32 | prefix: ['is', 'should', 'has', 'are', 'can', 'was'], 33 | }, 34 | ], 35 | }, 36 | } 37 | ) 38 | -------------------------------------------------------------------------------- /src/__tests__/async.test.ts: -------------------------------------------------------------------------------- 1 | import { flow } from '../core/flow' 2 | import { sleep } from '../lib/utils' 3 | import { map } from '../operators/transform' 4 | 5 | describe('async operations', () => { 6 | it('should work with async iterables', async () => { 7 | async function* asyncSource() { 8 | yield 1 9 | yield 2 10 | yield 3 11 | } 12 | 13 | const numbers = flow(asyncSource()) 14 | const result = [] 15 | 16 | for await (const value of numbers) { 17 | result.push(value) 18 | } 19 | 20 | expect(result).toEqual([1, 2, 3]) 21 | }) 22 | 23 | it('should work with async transformations', async () => { 24 | const numbers = flow([1, 2, 3]).pipe(map(async (x) => x * 2)) 25 | 26 | const result = [] 27 | for await (const value of numbers) { 28 | result.push(value) 29 | } 30 | 31 | expect(result).toEqual([2, 4, 6]) 32 | }) 33 | 34 | it('should maintain order with async operations', async () => { 35 | const numbers = flow([1, 2, 3]).pipe( 36 | map(async (x) => { 37 | await sleep(Math.random() * 100) 38 | return x * 2 39 | }) 40 | ) 41 | 42 | const result = [] 43 | for await (const value of numbers) { 44 | result.push(value) 45 | } 46 | 47 | expect(result).toEqual([2, 4, 6]) 48 | }) 49 | }) 50 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@tigerabrodioss/sakuraflow", 3 | "version": "1.0.1", 4 | "description": "A library to do transformations when working with generators.", 5 | "author": "Tiger Abrodi", 6 | "license": "MIT", 7 | "type": "module", 8 | "main": "./dist/index.cjs", 9 | "module": "./dist/index.js", 10 | "types": "./dist/index.d.ts", 11 | "files": [ 12 | "dist" 13 | ], 14 | "sideEffects": false, 15 | "repository": { 16 | "type": "git", 17 | "url": "https://github.com/tigerabrodi/sakuraflow" 18 | }, 19 | "exports": { 20 | ".": { 21 | "types": "./dist/index.d.ts", 22 | "import": "./dist/index.js", 23 | "require": "./dist/index.cjs" 24 | } 25 | }, 26 | "scripts": { 27 | "test": "vitest", 28 | "build": "tsup", 29 | "lint": "eslint .", 30 | "format": "prettier --write ." 31 | }, 32 | "keywords": [ 33 | "generator", 34 | "transform", 35 | "sakuraflow" 36 | ], 37 | "packageManager": "pnpm@9.1.4", 38 | "devDependencies": { 39 | "@eslint/js": "^9.18.0", 40 | "@testing-library/jest-dom": "^6.6.3", 41 | "@types/node": "^22.10.10", 42 | "@typescript-eslint/eslint-plugin": "^8.21.0", 43 | "@typescript-eslint/parser": "^8.21.0", 44 | "globals": "^15.14.0", 45 | "gzip-size-cli": "^5.1.0", 46 | "prettier": "^3.4.2", 47 | "tslib": "^2.8.1", 48 | "tsup": "^8.3.5", 49 | "typescript": "^5.7.3", 50 | "typescript-eslint": "^8.21.0", 51 | "vitest": "^3.0.4" 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /src/operators/async.ts: -------------------------------------------------------------------------------- 1 | import { flow } from '../core/flow' 2 | import type { Flow, Operation } from '../core/types' 3 | import { sleep } from '../lib/utils' 4 | 5 | /** 6 | * Creates an operation that limits the rate at which values are emitted from the flow. 7 | * Ensures a minimum time interval between each value. 8 | * 9 | * @param msBetweenYield - The minimum number of milliseconds to wait between yielding values 10 | * 11 | * @example 12 | * ```ts 13 | * const numbers = flow([1, 2, 3]).pipe( 14 | * rateLimit(1000) // Emit one value per second 15 | * ) 16 | * 17 | * for await (const num of numbers) { 18 | * console.log(num) // Logs 1, 2, 3 with 1 second delay between each 19 | * } 20 | * ``` 21 | */ 22 | export function rateLimit( 23 | msBetweenYield: number 24 | ): Operation { 25 | return (flowInput: Flow): Flow => { 26 | async function* rateLimitGenerator() { 27 | let lastYield = 0 28 | 29 | for await (const value of flowInput) { 30 | const now = Date.now() 31 | const timeElapsedSinceLastYield = now - lastYield 32 | const timeUntilNextYield = msBetweenYield - timeElapsedSinceLastYield 33 | const hasAnyTimeToWait = timeUntilNextYield > 0 34 | 35 | if (hasAnyTimeToWait) { 36 | await sleep(timeUntilNextYield) 37 | } 38 | 39 | yield value 40 | lastYield = Date.now() 41 | } 42 | } 43 | 44 | return flow(rateLimitGenerator()) 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /src/__tests__/transform.test.ts: -------------------------------------------------------------------------------- 1 | import { flow } from '../core/flow' 2 | import { filter, map } from '../operators/transform' 3 | 4 | describe('transform', () => { 5 | describe('map', () => { 6 | it('should transform values using map', () => { 7 | const numbers = flow([1, 2, 3]).pipe(map((x) => x * 2)) 8 | 9 | const result = [...numbers] 10 | 11 | expect(result).toEqual([2, 4, 6]) 12 | }) 13 | 14 | it('should be composable with multiple operations', () => { 15 | const numbers = flow([1, 2, 3]).pipe( 16 | map((x) => x * 2), 17 | map((x) => x + 1) 18 | ) 19 | 20 | const result = [...numbers] 21 | 22 | expect(result).toEqual([3, 5, 7]) 23 | }) 24 | 25 | it('should maintain types through transformations', () => { 26 | const numbers = flow([1, 2, 3]).pipe( 27 | map((x) => x.toString()), 28 | map((x) => x.length) 29 | ) 30 | 31 | const result = [...numbers] 32 | 33 | expect(result).toEqual([1, 1, 1]) 34 | }) 35 | }) 36 | 37 | describe('filter', () => { 38 | it('should filter values based on predicate', () => { 39 | const numbers = flow([1, 2, 3, 4]).pipe(filter((x) => x % 2 === 0)) 40 | 41 | const result = [...numbers] 42 | 43 | expect(result).toEqual([2, 4]) 44 | }) 45 | 46 | it('should work with map in composition', () => { 47 | const numbers = flow([1, 2, 3, 4]).pipe( 48 | map((x) => x * 2), 49 | filter((x) => x > 4) 50 | ) 51 | 52 | const result = [...numbers] 53 | 54 | expect(result).toEqual([6, 8]) 55 | }) 56 | 57 | it('should maintain types through filtering', () => { 58 | const items = flow(['a', '', 'b', '', 'c']).pipe( 59 | filter((x) => x !== ''), 60 | map((x) => x.toUpperCase()) 61 | ) 62 | 63 | const result = [...items] 64 | 65 | expect(result).toEqual(['A', 'B', 'C']) 66 | }) 67 | }) 68 | }) 69 | -------------------------------------------------------------------------------- /src/operators/transform.ts: -------------------------------------------------------------------------------- 1 | import { flow } from '../core/flow' 2 | import { Flow } from '../core/types' 3 | 4 | import { Operation } from '../core/types' 5 | 6 | /** 7 | * Creates an operation that transforms each value in the flow using the provided function. 8 | * 9 | * @param transform - Function to apply to each value 10 | * 11 | * @example 12 | * ```ts 13 | * const numbers = flow([1, 2, 3]).pipe( 14 | * map(x => x * 2) 15 | * ) 16 | * 17 | * const result = [...numbers] 18 | * // Result: [2, 4, 6] 19 | * ``` 20 | */ 21 | export function map( 22 | transform: (value: TSource) => TResult 23 | ): Operation { 24 | return (flowInput: Flow): Flow => { 25 | function* transformGenerator() { 26 | for (const value of flowInput) { 27 | yield transform(value) 28 | } 29 | } 30 | 31 | // Flow expects an iterator 32 | // We don't wanna pass the generator function directly 33 | // By calling the generator, we get the generator object which is an iterator 34 | // you can then e.g. spread it into an array or iterate over it with a for...of loop 35 | return flow(transformGenerator()) 36 | } 37 | } 38 | 39 | /** 40 | * Creates an operation that filters values from the flow based on a predicate. 41 | * Only values that satisfy the predicate are included in the output. 42 | * 43 | * @param predicate - Function that tests each value 44 | * 45 | * @example 46 | * ```ts 47 | * const numbers = flow([1, 2, 3, 4]).pipe( 48 | * filter(x => x % 2 === 0) 49 | * ) 50 | * 51 | * const result = [...numbers] 52 | * // Result: [2, 4] 53 | * ``` 54 | */ 55 | export function filter( 56 | predicate: (value: TValue) => boolean 57 | ): Operation { 58 | return (flowInput: Flow): Flow => { 59 | function* filterGenerator() { 60 | for (const value of flowInput) { 61 | // Only yield values that pass the predicate 62 | if (predicate(value)) { 63 | yield value 64 | } 65 | } 66 | } 67 | 68 | return flow(filterGenerator()) 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /src/lib/types.ts: -------------------------------------------------------------------------------- 1 | // This is a helper type to create a tuple of a given length 2 | // How does it work? 3 | // Length is a number, it's what you pass when doing BuildTuple<5> 4 | // The second generic is optional, it's for ourselves actually 5 | // We start with a number and an empty array 6 | // We check the result length, if it is not equal to the length, we recurse 7 | // We recurse by adding one to the array and checking again 8 | // The idea is to build an array of unknown values of the given length 9 | // Eventually, you can do BuildTuple<5>["length"] and get 5 10 | export type BuildTuple< 11 | Length extends number, 12 | Result extends Array = [], 13 | > = Result['length'] extends Length 14 | ? Result 15 | : BuildTuple 16 | 17 | // This is a helper type to subtract SubtractAmount from Value e.g. Subtract<5, 3> = 2 18 | // How does it work? 19 | // We build a tuple of the value first e.g. BuildTuple<5> = [unknown, unknown, unknown, unknown, unknown] 20 | // Then we check if the tuple of the subtract amount can be fit into the value tuple 21 | // If it can not, it means the subtraction is not possible because SubtractAmount is greater than Value which this doesn't support 22 | // So we essentially Build a tuple of the SubtractAmount, we spread it into the the tuple and when we do `...infer Rest`, we get the rest of the tuple which is the reamining piece of the value tuple 23 | // e.g. 5 - 3 = BuildTuple<5> extends [...BuildTuple<3> = [unknown, unknown, unknown], ...infer Rest] ? [unknown, unknown]['length'] : never 24 | export type Subtract = 25 | BuildTuple extends [...BuildTuple, ...infer Rest] 26 | ? Rest['length'] 27 | : never 28 | 29 | // We simply access the length property of the array 30 | export type Length> = T['length'] 31 | 32 | // We get the last element of the array 33 | // We do so by inferring the last element and then returning it 34 | // eslint-disable-next-line @typescript-eslint/no-unused-vars 35 | export type Last> = T extends [...infer _, infer Last] 36 | ? Last 37 | : never 38 | 39 | export type Zero = 0 40 | export type One = 1 41 | -------------------------------------------------------------------------------- /src/__tests__/collection.test.ts: -------------------------------------------------------------------------------- 1 | import { flow } from '../core/flow' 2 | import { batch, window } from '../operators/collection' 3 | import { map } from '../operators/transform' 4 | 5 | describe('collection operators', () => { 6 | describe('batch', () => { 7 | it('should group items into batches of specified size', () => { 8 | const numbers = flow([1, 2, 3, 4, 5]).pipe(batch(2)) 9 | 10 | const result = [...numbers] 11 | expect(result).toEqual([[1, 2], [3, 4], [5]]) 12 | }) 13 | 14 | it('should work with other operators', () => { 15 | const numbers = flow([1, 2, 3, 4]).pipe( 16 | map((x) => x * 2), 17 | batch(2), 18 | map((batch) => batch.reduce((a, b) => a + b)) 19 | ) 20 | 21 | const result = [...numbers] 22 | expect(result).toEqual([6, 14]) // [2,4] -> 6, [6,8] -> 14 23 | }) 24 | 25 | it('should handle empty source', () => { 26 | const numbers = flow([]).pipe(batch(2)) 27 | 28 | const result = [...numbers] 29 | expect(result).toEqual([]) 30 | }) 31 | 32 | it('should handle batch size of 1', () => { 33 | const numbers = flow([1, 2, 3]).pipe(batch(1)) 34 | 35 | const result = [...numbers] 36 | expect(result).toEqual([[1], [2], [3]]) 37 | }) 38 | }) 39 | 40 | describe('window', () => { 41 | it('should create sliding windows of specified size', () => { 42 | const numbers = flow([1, 2, 3, 4, 5]).pipe(window(3)) 43 | 44 | const result = [...numbers] 45 | expect(result).toEqual([ 46 | [1, 2, 3], 47 | [2, 3, 4], 48 | [3, 4, 5], 49 | ]) 50 | }) 51 | 52 | it('should work with other operators', () => { 53 | const numbers = flow([1, 2, 3, 4, 5]).pipe( 54 | window(3), 55 | map((win) => win.reduce((a, b) => a + b) / win.length) // moving average 56 | ) 57 | 58 | const result = [...numbers] 59 | expect(result).toEqual([2, 3, 4]) // avg of [1,2,3], [2,3,4], [3,4,5] 60 | }) 61 | 62 | it('should handle window size larger than source', () => { 63 | const numbers = flow([1, 2]).pipe(window(3)) 64 | 65 | const result = [...numbers] 66 | expect(result).toEqual([]) 67 | }) 68 | 69 | it('should handle window size of 1', () => { 70 | const numbers = flow([1, 2, 3]).pipe(window(1)) 71 | 72 | const result = [...numbers] 73 | expect(result).toEqual([[1], [2], [3]]) 74 | }) 75 | }) 76 | }) 77 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # SakuraFlow 2 | 3 | A lightweight, memory-efficient library for working with generator functions in TypeScript. Transform, combine, and process data streams with an elegant API that maintains the benefits of lazy evaluation. 4 | 5 | ## Why? 6 | 7 | - 🌸 **Memory Efficient:** Process large datasets without loading everything into memory 8 | - 🎯 **Composable:** Build complex data transformations with simple, chainable operations 9 | - 🔄 **Lazy Evaluation:** Only process what you need, when you need it 10 | - 🎭 **Flexible:** Works with both sync and async generators 11 | - 🧪 **Type-Safe:** Built with TypeScript for great developer experience 12 | 13 | ## Installation 14 | 15 | ```bash 16 | npm install @tigerabrodioss/sakuraflow 17 | # or 18 | pnpm add @tigerabrodioss/sakuraflow 19 | # or 20 | yarn add @tigerabrodioss/sakuraflow 21 | # or 22 | bun add @tigerabrodioss/sakuraflow 23 | ``` 24 | 25 | ## Quick Example 26 | 27 | ```ts 28 | import { flow } from '@tigerabrodioss/sakuraflow' 29 | 30 | // Process numbers with multiple transformations 31 | const result = flow([1, 2, 3, 4, 5]).pipe( 32 | filter((x) => x % 2 === 0), // Keep even numbers 33 | map((x) => x * 2), // Double them 34 | batch(2) // Group in pairs 35 | ) 36 | 37 | console.log([...result]) 38 | // Output: [[2, 4], [8]] 39 | 40 | // Work with async data 41 | async function* source() { 42 | yield 1 43 | await sleep(1000) 44 | yield 2 45 | await sleep(1000) 46 | yield 3 47 | } 48 | 49 | const numbers = flow(source()).pipe( 50 | map((x) => x * 2), 51 | rateLimit(2000) // Ensure at least 2s between values 52 | ) 53 | 54 | for await (const num of numbers) { 55 | console.log(num) // Logs 2, 4, 6 with 2s delays 56 | } 57 | ``` 58 | 59 | ## API Reference 60 | 61 | ### Transform Operations 62 | 63 | ```ts 64 | map(fn: (value: T) => U) 65 | filter(predicate: (value: T) => boolean) 66 | ``` 67 | 68 | ### Control Operations 69 | 70 | ```ts 71 | take(n: number) 72 | skip(n: number) 73 | takeWhile(predicate: (value: T) => boolean) 74 | skipWhile(predicate: (value: T) => boolean) 75 | ``` 76 | 77 | ### Collection Operations 78 | 79 | ```ts 80 | batch(size: number) 81 | window(size: number) 82 | ``` 83 | 84 | ### Combine Operations 85 | 86 | ```ts 87 | concat(...flows: Flow[]) 88 | zip(otherFlow: Flow) 89 | ``` 90 | 91 | ### Async Operations 92 | 93 | ```ts 94 | rateLimit(msBetweenYield: number) 95 | ``` 96 | 97 | ## Limitations 98 | 99 | - 🚫 Maximum 10 operations inside a pipe 100 | 101 | ## License 102 | 103 | MIT 104 | -------------------------------------------------------------------------------- /src/core/types.ts: -------------------------------------------------------------------------------- 1 | // Basic types remain the same 2 | export type IterableInput = Iterable | AsyncIterable 3 | export type Operation = (flow: Flow) => Flow 4 | 5 | // We don't need the complex type machinery for unpacking tuples anymore 6 | // since we're using explicit overloads 7 | export interface Flow { 8 | [Symbol.iterator](): Iterator 9 | [Symbol.asyncIterator](): AsyncIterator 10 | isAsync(): boolean 11 | 12 | pipe(op1: Operation): Flow 13 | 14 | pipe(op1: Operation, op2: Operation): Flow 15 | 16 | pipe( 17 | op1: Operation, 18 | op2: Operation, 19 | op3: Operation 20 | ): Flow 21 | 22 | pipe( 23 | op1: Operation, 24 | op2: Operation, 25 | op3: Operation, 26 | op4: Operation 27 | ): Flow 28 | 29 | pipe( 30 | op1: Operation, 31 | op2: Operation, 32 | op3: Operation, 33 | op4: Operation, 34 | op5: Operation 35 | ): Flow 36 | pipe( 37 | op1: Operation, 38 | op2: Operation, 39 | op3: Operation, 40 | op4: Operation, 41 | op5: Operation, 42 | op6: Operation 43 | ): Flow 44 | pipe( 45 | op1: Operation, 46 | op2: Operation, 47 | op3: Operation, 48 | op4: Operation, 49 | op5: Operation, 50 | op6: Operation, 51 | op7: Operation 52 | ): Flow 53 | pipe( 54 | op1: Operation, 55 | op2: Operation, 56 | op3: Operation, 57 | op4: Operation, 58 | op5: Operation, 59 | op6: Operation, 60 | op7: Operation, 61 | op8: Operation 62 | ): Flow 63 | pipe( 64 | op1: Operation, 65 | op2: Operation, 66 | op3: Operation, 67 | op4: Operation, 68 | op5: Operation, 69 | op6: Operation, 70 | op7: Operation, 71 | op8: Operation, 72 | op9: Operation 73 | ): Flow 74 | pipe( 75 | op1: Operation, 76 | op2: Operation, 77 | op3: Operation, 78 | op4: Operation, 79 | op5: Operation, 80 | op6: Operation, 81 | op7: Operation, 82 | op8: Operation, 83 | op9: Operation, 84 | op10: Operation 85 | ): Flow 86 | } 87 | -------------------------------------------------------------------------------- /src/__tests__/combine.test.ts: -------------------------------------------------------------------------------- 1 | import { flow } from '../core/flow' 2 | import { concat, zip } from '../operators/combine' 3 | import { map } from '../operators/transform' 4 | 5 | describe('combine operators', () => { 6 | describe('concat', () => { 7 | it('should combine two flows in order', () => { 8 | const numbers = flow([1, 2]).pipe(concat(flow([3, 4]))) 9 | 10 | const result = [...numbers] 11 | expect(result).toEqual([1, 2, 3, 4]) 12 | }) 13 | 14 | it('should work with more than two flows', () => { 15 | const numbers = flow([1]).pipe(concat(flow([2]), flow([3]))) 16 | 17 | const result = [...numbers] 18 | expect(result).toEqual([1, 2, 3]) 19 | }) 20 | 21 | it('should handle empty flows', () => { 22 | const numbers = flow([]).pipe(concat(flow([1, 2]))) 23 | 24 | const result = [...numbers] 25 | expect(result).toEqual([1, 2]) 26 | }) 27 | 28 | it('should work with transformations', () => { 29 | const numbers = flow([1, 2]).pipe( 30 | map((x) => x * 2), 31 | concat(flow([5, 6])), 32 | map((x) => x + 1) 33 | ) 34 | 35 | const result = [...numbers] 36 | expect(result).toEqual([3, 5, 6, 7]) 37 | }) 38 | }) 39 | 40 | describe('zip', () => { 41 | it.only('should combine values from two flows', () => { 42 | const numbers = flow([1, 2]).pipe(zip(flow(['a', 'b']))) 43 | 44 | const result = [...numbers] 45 | expect(result).toEqual([ 46 | [1, 'a'], 47 | [2, 'b'], 48 | ]) 49 | }) 50 | 51 | it('should stop at shortest flow', () => { 52 | const numbers = flow([1, 2, 3]).pipe(zip(flow(['a', 'b']))) 53 | 54 | const result = [...numbers] 55 | expect(result).toEqual([ 56 | [1, 'a'], 57 | [2, 'b'], 58 | ]) 59 | }) 60 | 61 | it('should work with transformations', () => { 62 | const numbers = flow([1, 2]).pipe( 63 | map((x) => x * 2), 64 | zip(flow(['a', 'b'])), 65 | map(([num, str]) => `${str}${num}`) 66 | ) 67 | 68 | const result = [...numbers] 69 | expect(result).toEqual(['a2', 'b4']) 70 | }) 71 | 72 | it('should handle empty flows', () => { 73 | const numbers = flow([1, 2]).pipe(zip(flow([]))) 74 | 75 | const result = [...numbers] 76 | expect(result).toEqual([]) 77 | }) 78 | 79 | it('should work with async flows', async () => { 80 | async function* asyncSource() { 81 | yield 'a' 82 | yield 'b' 83 | } 84 | 85 | const numbers = flow([1, 2]).pipe(zip(flow(asyncSource()))) 86 | 87 | const result = [] 88 | for await (const value of numbers) { 89 | result.push(value) 90 | } 91 | 92 | expect(result).toEqual([ 93 | [1, 'a'], 94 | [2, 'b'], 95 | ]) 96 | }) 97 | }) 98 | }) 99 | -------------------------------------------------------------------------------- /src/operators/collection.ts: -------------------------------------------------------------------------------- 1 | import { flow } from '../core/flow' 2 | import type { Flow, Operation } from '../core/types' 3 | 4 | /** 5 | * Creates an operation that groups values into batches of a specified size. 6 | * The last batch may be smaller if there aren't enough values to fill it. 7 | * 8 | * @param size - The size of each batch 9 | * 10 | * @example 11 | * ```ts 12 | * const numbers = flow([1, 2, 3, 4, 5]).pipe( 13 | * batch(2) 14 | * ) 15 | * 16 | * const result = [...numbers] 17 | * // Result: [[1, 2], [3, 4], [5]] 18 | * ``` 19 | */ 20 | export function batch(size: number): Operation> { 21 | return (flowInput: Flow): Flow> => { 22 | function* batchGenerator() { 23 | let batch: Array = [] 24 | 25 | for (const value of flowInput) { 26 | batch.push(value) 27 | 28 | if (batch.length === size) { 29 | yield batch 30 | // reset when size hit 31 | batch = [] 32 | } 33 | } 34 | 35 | // Don't forget to yield the last incomplete batch 36 | if (batch.length > 0) { 37 | yield batch 38 | } 39 | } 40 | 41 | return flow(batchGenerator()) 42 | } 43 | } 44 | 45 | /** 46 | * Creates an operation that yields sliding windows of values of a specified size. 47 | * Each window contains the specified number of consecutive values from the source. 48 | * 49 | * @param size - The size of each window 50 | * 51 | * @example 52 | * ```ts 53 | * const numbers = flow([1, 2, 3, 4]).pipe( 54 | * window(2) 55 | * ) 56 | * 57 | * const result = [...numbers] 58 | * // Result: [[1, 2], [2, 3], [3, 4]] 59 | * ``` 60 | */ 61 | export function window(size: number): Operation> { 62 | return (flowInput: Flow): Flow> => { 63 | function* windowGenerator() { 64 | const window: Array = [] 65 | // Get a single iterator that we'll use throughout 66 | // Otherwise second loop can not continue where left off 67 | const iterator = flowInput[Symbol.iterator]() 68 | 69 | if (size <= 0) return 70 | 71 | // Fill initial window 72 | let next = iterator.next() 73 | 74 | // Fill initial window 75 | // Continue until we have enough values or end of input 76 | // We always do .next() and then use it's value as long as done hasn't been reached 77 | while (!next.done && window.length < size) { 78 | window.push(next.value) 79 | next = iterator.next() 80 | } 81 | 82 | // If ok, yield first window 83 | if (window.length < size) return 84 | 85 | // Yield first window 86 | yield [...window] 87 | 88 | // Continue with same iterator 89 | // We'll pick up where we left and we're also continue on the same window 90 | while (!next.done) { 91 | // Remove first element 92 | window.shift() 93 | // Add new element 94 | window.push(next.value) 95 | // Yield copy of window 96 | yield [...window] 97 | // Get next value, will continue if not done 98 | next = iterator.next() 99 | } 100 | } 101 | 102 | return flow(windowGenerator()) 103 | } 104 | } 105 | -------------------------------------------------------------------------------- /src/operators/combine.ts: -------------------------------------------------------------------------------- 1 | import { flow } from '../core/flow' 2 | import type { Flow, Operation } from '../core/types' 3 | 4 | /** 5 | * Creates an operation that concatenates multiple flows together in sequence. 6 | * Values from each flow are emitted in order after the previous flow completes. 7 | * 8 | * @param flows - The flows to concatenate after the source flow 9 | * 10 | * @example 11 | * ```ts 12 | * const numbers = flow([1, 2]).pipe( 13 | * concat(flow([3, 4]), flow([5, 6])) 14 | * ) 15 | * 16 | * const result = [...numbers] 17 | * // Result: [1, 2, 3, 4, 5, 6] 18 | * ``` 19 | */ 20 | export function concat( 21 | ...flows: Array> 22 | ): Operation { 23 | return (source: Flow): Flow => { 24 | function* concatGenerator() { 25 | // First yield all values from source 26 | // `yield*` is used to yield all values from an iterable 27 | // so youre letting the other iterables take over the control 28 | // in this case, it would mean that when source is fully done, then we continue with the code 29 | yield* source 30 | 31 | // Then yield from each additional flow 32 | for (const nextFlow of flows) { 33 | yield* nextFlow 34 | } 35 | } 36 | 37 | return flow(concatGenerator()) 38 | } 39 | } 40 | 41 | /** 42 | * Creates an operation that combines values from two flows into pairs. 43 | * Each pair contains one value from each flow. The operation completes when either flow completes. 44 | * 45 | * @param otherFlow - The flow to combine with the source flow 46 | * 47 | * @example 48 | * ```ts 49 | * const numbers = flow([1, 2, 3]).pipe( 50 | * zip(flow(['a', 'b', 'c'])) 51 | * ) 52 | * 53 | * const result = [...numbers] 54 | * // Result: [[1, 'a'], [2, 'b'], [3, 'c']] 55 | * ``` 56 | */ 57 | export function zip( 58 | otherFlow: Flow 59 | ): Operation { 60 | return (source: Flow): Flow<[TValue, TOther]> => { 61 | // Sync version 62 | function* syncZipGenerator() { 63 | const sourceIterator = source[Symbol.iterator]() 64 | const otherIterator = otherFlow[Symbol.iterator]() 65 | 66 | while (true) { 67 | const sourceNext = sourceIterator.next() 68 | const otherNext = otherIterator.next() 69 | 70 | if (sourceNext.done || otherNext.done) break 71 | 72 | yield [sourceNext.value, otherNext.value] as [TValue, TOther] 73 | } 74 | } 75 | 76 | // Async version 77 | async function* asyncZipGenerator() { 78 | const sourceIterator = source[Symbol.asyncIterator]() 79 | const otherIterator = otherFlow[Symbol.asyncIterator]() 80 | 81 | while (true) { 82 | const [sourceNext, otherNext] = await Promise.all([ 83 | sourceIterator.next(), 84 | otherIterator.next(), 85 | ]) 86 | 87 | if (sourceNext.done || otherNext.done) break 88 | 89 | yield [sourceNext.value, otherNext.value] as [TValue, TOther] 90 | } 91 | } 92 | 93 | const isAsync = source.isAsync() || otherFlow.isAsync() 94 | 95 | if (isAsync) { 96 | return flow(asyncZipGenerator()) 97 | } 98 | return flow(syncZipGenerator()) 99 | } 100 | } 101 | -------------------------------------------------------------------------------- /src/__tests__/control.test.ts: -------------------------------------------------------------------------------- 1 | import { flow } from '../core/flow' 2 | import { skip, skipWhile, take, takeWhile } from '../operators/control' 3 | import { map } from '../operators/transform' 4 | 5 | describe('control operators', () => { 6 | describe('take', () => { 7 | it('should take first n items', () => { 8 | const numbers = flow([1, 2, 3, 4, 5]).pipe(take(3)) 9 | 10 | const result = [...numbers] 11 | expect(result).toEqual([1, 2, 3]) 12 | }) 13 | 14 | it('should work with other operators', () => { 15 | const numbers = flow([1, 2, 3, 4, 5]).pipe( 16 | map((x) => x * 2), 17 | take(2) 18 | ) 19 | 20 | const result = [...numbers] 21 | expect(result).toEqual([2, 4]) 22 | }) 23 | 24 | it('should handle taking more than available', () => { 25 | const numbers = flow([1, 2]).pipe(take(5)) 26 | 27 | const result = [...numbers] 28 | expect(result).toEqual([1, 2]) 29 | }) 30 | }) 31 | 32 | describe('skip', () => { 33 | it('should skip first n items', () => { 34 | const numbers = flow([1, 2, 3, 4, 5]).pipe(skip(2)) 35 | 36 | const result = [...numbers] 37 | expect(result).toEqual([3, 4, 5]) 38 | }) 39 | 40 | it('should work with other operators', () => { 41 | const numbers = flow([1, 2, 3, 4, 5]).pipe( 42 | skip(2), 43 | map((x) => x * 2) 44 | ) 45 | 46 | const result = [...numbers] 47 | expect(result).toEqual([6, 8, 10]) 48 | }) 49 | 50 | it('should handle skipping more than available', () => { 51 | const numbers = flow([1, 2, 3]).pipe(skip(5)) 52 | 53 | const result = [...numbers] 54 | expect(result).toEqual([]) 55 | }) 56 | }) 57 | 58 | describe('takeWhile', () => { 59 | it('should take items while predicate is true', () => { 60 | const numbers = flow([1, 2, 3, 6, 8, 2]).pipe(takeWhile((x) => x < 5)) 61 | 62 | const result = [...numbers] 63 | expect(result).toEqual([1, 2, 3]) 64 | }) 65 | 66 | it('should work with other operators', () => { 67 | const numbers = flow([1, 2, 3, 4, 5]).pipe( 68 | map((x) => x * 2), 69 | takeWhile((x) => x <= 6) 70 | ) 71 | 72 | const result = [...numbers] 73 | expect(result).toEqual([2, 4, 6]) 74 | }) 75 | 76 | it('should handle empty source', () => { 77 | const numbers = flow([]).pipe(takeWhile((x) => x < 5)) 78 | 79 | const result = [...numbers] 80 | expect(result).toEqual([]) 81 | }) 82 | 83 | it('should handle always-false predicate', () => { 84 | const numbers = flow([1, 2, 3]).pipe(takeWhile(() => false)) 85 | 86 | const result = [...numbers] 87 | expect(result).toEqual([]) 88 | }) 89 | }) 90 | 91 | describe('skipWhile', () => { 92 | it('should skip items while predicate is true', () => { 93 | const numbers = flow([1, 2, 3, 6, 2, 1]).pipe(skipWhile((x) => x < 5)) 94 | 95 | const result = [...numbers] 96 | expect(result).toEqual([6, 2, 1]) 97 | }) 98 | 99 | it('should work with other operators', () => { 100 | const numbers = flow([1, 2, 3, 4, 5]).pipe( 101 | map((x) => x * 2), 102 | skipWhile((x) => x <= 6) 103 | ) 104 | 105 | const result = [...numbers] 106 | expect(result).toEqual([8, 10]) 107 | }) 108 | 109 | it('should handle empty source', () => { 110 | const numbers = flow([]).pipe(skipWhile((x) => x < 5)) 111 | 112 | const result = [...numbers] 113 | expect(result).toEqual([]) 114 | }) 115 | 116 | it('should handle always-true predicate', () => { 117 | const numbers = flow([1, 2, 3]).pipe(skipWhile(() => true)) 118 | 119 | const result = [...numbers] 120 | expect(result).toEqual([]) 121 | }) 122 | 123 | it('should include all items after predicate becomes false', () => { 124 | const numbers = flow([1, 4, 2, 3, 5, 2]).pipe(skipWhile((x) => x < 4)) 125 | 126 | const result = [...numbers] 127 | expect(result).toEqual([4, 2, 3, 5, 2]) 128 | }) 129 | }) 130 | }) 131 | -------------------------------------------------------------------------------- /src/operators/control.ts: -------------------------------------------------------------------------------- 1 | import { flow } from '../core/flow' 2 | import type { Flow, Operation } from '../core/types' 3 | 4 | /** 5 | * Creates an operation that takes only the first n values from the flow. 6 | * 7 | * @param n - The number of values to take 8 | * 9 | * @example 10 | * ```ts 11 | * const numbers = flow([1, 2, 3, 4, 5]).pipe( 12 | * take(3) 13 | * ) 14 | * 15 | * const result = [...numbers] 16 | * // Result: [1, 2, 3] 17 | * ``` 18 | */ 19 | export function take(n: number): Operation { 20 | return (flowInput: Flow): Flow => { 21 | function* takeGenerator() { 22 | let count = 0 23 | for (const value of flowInput) { 24 | // Stop the iteration if we've taken enough items 25 | if (count >= n) break 26 | yield value 27 | count++ 28 | } 29 | } 30 | 31 | return flow(takeGenerator()) 32 | } 33 | } 34 | 35 | /** 36 | * Creates an operation that skips the first n values from the flow. 37 | * 38 | * @param n - The number of values to skip 39 | * 40 | * @example 41 | * ```ts 42 | * const numbers = flow([1, 2, 3, 4, 5]).pipe( 43 | * skip(2) 44 | * ) 45 | * 46 | * const result = [...numbers] 47 | * // Result: [3, 4, 5] 48 | * ``` 49 | */ 50 | export function skip(n: number): Operation { 51 | return (flowInput: Flow): Flow => { 52 | function* skipGenerator() { 53 | let count = 0 54 | for (const value of flowInput) { 55 | // only start yielding values after we've skipped n items 56 | if (count >= n) { 57 | yield value 58 | } 59 | count++ 60 | } 61 | } 62 | 63 | return flow(skipGenerator()) 64 | } 65 | } 66 | 67 | /** 68 | * Creates an operation that takes values from the flow as long as they satisfy the predicate. 69 | * Stops taking values as soon as the predicate returns false. 70 | * 71 | * @param predicate - Function that tests each value 72 | * 73 | * @example 74 | * ```ts 75 | * const numbers = flow([1, 2, 3, 4, 1]).pipe( 76 | * takeWhile(x => x < 4) 77 | * ) 78 | * 79 | * const result = [...numbers] 80 | * // Result: [1, 2, 3] 81 | * ``` 82 | */ 83 | export function takeWhile( 84 | predicate: (value: TValue) => boolean 85 | ): Operation { 86 | return (flowInput: Flow): Flow => { 87 | function* takeWhileGenerator() { 88 | for (const value of flowInput) { 89 | // Stop the iteration if the predicate returns false 90 | if (!predicate(value)) break 91 | 92 | // While predicate returns true, yield values 93 | yield value 94 | } 95 | } 96 | 97 | return flow(takeWhileGenerator()) 98 | } 99 | } 100 | 101 | /** 102 | * Creates an operation that skips values from the flow as long as they satisfy the predicate. 103 | * Starts taking values as soon as the predicate returns false and continues taking all subsequent values. 104 | * 105 | * @param predicate - Function that tests each value 106 | * 107 | * @example 108 | * ```ts 109 | * const numbers = flow([1, 2, 3, 4, 1]).pipe( 110 | * skipWhile(x => x < 3) 111 | * ) 112 | * 113 | * const result = [...numbers] 114 | * // Result: [3, 4, 1] 115 | * ``` 116 | */ 117 | export function skipWhile( 118 | predicate: (value: TValue) => boolean 119 | ): Operation { 120 | return (flowInput: Flow): Flow => { 121 | function* skipWhileGenerator() { 122 | // We start by skipping all values 123 | let isSkipping = true 124 | 125 | for (const value of flowInput) { 126 | // If we're skipping which starts as true 127 | // and the predicate returns false, we stop skipping 128 | // predicate being false means that the condition should not be skipped anymore 129 | if (isSkipping && !predicate(value)) { 130 | isSkipping = false 131 | } 132 | 133 | if (!isSkipping) { 134 | yield value 135 | } 136 | } 137 | } 138 | 139 | return flow(skipWhileGenerator()) 140 | } 141 | } 142 | -------------------------------------------------------------------------------- /src/core/flow.ts: -------------------------------------------------------------------------------- 1 | import type { Flow, IterableInput, Operation } from './types' 2 | 3 | export class FlowImpl implements Flow { 4 | constructor(private source: IterableInput) {} 5 | 6 | isAsync(): boolean { 7 | return Symbol.asyncIterator in this.source 8 | } 9 | 10 | // This is the reason why e.g. if array you can do 11 | // const result = [...flow([1, 2, 3])] 12 | // and get [1, 2, 3] 13 | *[Symbol.iterator](): Iterator { 14 | if (Symbol.iterator in this.source) { 15 | yield* this.source 16 | } else { 17 | throw new Error('Cannot synchronously iterate over async source') 18 | } 19 | } 20 | 21 | async *[Symbol.asyncIterator](): AsyncIterator { 22 | if (Symbol.asyncIterator in this.source) { 23 | yield* this.source 24 | } else if (Symbol.iterator in this.source) { 25 | yield* this.source 26 | } else { 27 | // Should never happen, we just do this for type safety 28 | // shouldn't happen because source is always iterable 29 | throw new Error('Source must be either sync or async iterable') 30 | } 31 | } 32 | 33 | pipe(op1: Operation): Flow 34 | 35 | pipe(op1: Operation, op2: Operation): Flow 36 | 37 | pipe( 38 | op1: Operation, 39 | op2: Operation, 40 | op3: Operation 41 | ): Flow 42 | 43 | pipe( 44 | op1: Operation, 45 | op2: Operation, 46 | op3: Operation, 47 | op4: Operation 48 | ): Flow 49 | 50 | pipe( 51 | op1: Operation, 52 | op2: Operation, 53 | op3: Operation, 54 | op4: Operation, 55 | op5: Operation 56 | ): Flow 57 | pipe( 58 | op1: Operation, 59 | op2: Operation, 60 | op3: Operation, 61 | op4: Operation, 62 | op5: Operation, 63 | op6: Operation 64 | ): Flow 65 | pipe( 66 | op1: Operation, 67 | op2: Operation, 68 | op3: Operation, 69 | op4: Operation, 70 | op5: Operation, 71 | op6: Operation, 72 | op7: Operation 73 | ): Flow 74 | pipe( 75 | op1: Operation, 76 | op2: Operation, 77 | op3: Operation, 78 | op4: Operation, 79 | op5: Operation, 80 | op6: Operation, 81 | op7: Operation, 82 | op8: Operation 83 | ): Flow 84 | pipe( 85 | op1: Operation, 86 | op2: Operation, 87 | op3: Operation, 88 | op4: Operation, 89 | op5: Operation, 90 | op6: Operation, 91 | op7: Operation, 92 | op8: Operation, 93 | op9: Operation 94 | ): Flow 95 | pipe( 96 | op1: Operation, 97 | op2: Operation, 98 | op3: Operation, 99 | op4: Operation, 100 | op5: Operation, 101 | op6: Operation, 102 | op7: Operation, 103 | op8: Operation, 104 | op9: Operation, 105 | op10: Operation 106 | ): Flow 107 | // eslint-disable-next-line @typescript-eslint/no-explicit-any 108 | pipe(...operations: Array>): Flow { 109 | if (operations.length === 0) { 110 | return this 111 | } 112 | 113 | // eslint-disable-next-line @typescript-eslint/no-this-alias 114 | let result: Flow = this 115 | for (const operation of operations) { 116 | result = operation(result) 117 | } 118 | return new FlowImpl(result) 119 | } 120 | } 121 | 122 | /** 123 | * Creates a Flow instance from an iterable or async iterable source. 124 | * A Flow allows you to chain multiple operations using the pipe method, 125 | * processing data in a lazy, streaming fashion. 126 | * 127 | * @param source - An iterable or async iterable input source 128 | * @returns A Flow instance that can be used to chain operations 129 | * 130 | * @example 131 | * ```ts 132 | * const numbers = flow([1, 2, 3, 4, 5]) 133 | * .pipe( 134 | * map(x => x * 2), 135 | * filter(x => x > 5) 136 | * ); 137 | * 138 | * // Synchronously iterate 139 | * for (const num of numbers) { 140 | * console.log(num); // Outputs: 6, 8, 10 141 | * } 142 | * 143 | * // Or with async source 144 | * const asyncNumbers = flow(async function* () { 145 | * yield* [1, 2, 3]; 146 | * }()); 147 | * 148 | * for await (const num of asyncNumbers) { 149 | * console.log(num); // Outputs: 1, 2, 3 150 | * } 151 | * ``` 152 | */ 153 | export function flow(source: IterableInput): Flow { 154 | return new FlowImpl(source) 155 | } 156 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | importers: 8 | 9 | .: 10 | devDependencies: 11 | '@eslint/js': 12 | specifier: ^9.18.0 13 | version: 9.21.0 14 | '@testing-library/jest-dom': 15 | specifier: ^6.6.3 16 | version: 6.6.3 17 | '@types/node': 18 | specifier: ^22.10.10 19 | version: 22.13.5 20 | '@typescript-eslint/eslint-plugin': 21 | specifier: ^8.21.0 22 | version: 8.24.1(@typescript-eslint/parser@8.24.1(eslint@9.21.0)(typescript@5.7.3))(eslint@9.21.0)(typescript@5.7.3) 23 | '@typescript-eslint/parser': 24 | specifier: ^8.21.0 25 | version: 8.24.1(eslint@9.21.0)(typescript@5.7.3) 26 | globals: 27 | specifier: ^15.14.0 28 | version: 15.15.0 29 | gzip-size-cli: 30 | specifier: ^5.1.0 31 | version: 5.1.0 32 | prettier: 33 | specifier: ^3.4.2 34 | version: 3.5.2 35 | tslib: 36 | specifier: ^2.8.1 37 | version: 2.8.1 38 | tsup: 39 | specifier: ^8.3.5 40 | version: 8.3.6(postcss@8.5.3)(typescript@5.7.3) 41 | typescript: 42 | specifier: ^5.7.3 43 | version: 5.7.3 44 | typescript-eslint: 45 | specifier: ^8.21.0 46 | version: 8.24.1(eslint@9.21.0)(typescript@5.7.3) 47 | vitest: 48 | specifier: ^3.0.4 49 | version: 3.0.6(@types/node@22.13.5) 50 | 51 | packages: 52 | 53 | '@adobe/css-tools@4.4.2': 54 | resolution: {integrity: sha512-baYZExFpsdkBNuvGKTKWCwKH57HRZLVtycZS05WTQNVOiXVSeAki3nU35zlRbToeMW8aHlJfyS+1C4BOv27q0A==} 55 | 56 | '@babel/code-frame@7.26.2': 57 | resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} 58 | engines: {node: '>=6.9.0'} 59 | 60 | '@babel/helper-validator-identifier@7.25.9': 61 | resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} 62 | engines: {node: '>=6.9.0'} 63 | 64 | '@esbuild/aix-ppc64@0.24.2': 65 | resolution: {integrity: sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==} 66 | engines: {node: '>=18'} 67 | cpu: [ppc64] 68 | os: [aix] 69 | 70 | '@esbuild/android-arm64@0.24.2': 71 | resolution: {integrity: sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==} 72 | engines: {node: '>=18'} 73 | cpu: [arm64] 74 | os: [android] 75 | 76 | '@esbuild/android-arm@0.24.2': 77 | resolution: {integrity: sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==} 78 | engines: {node: '>=18'} 79 | cpu: [arm] 80 | os: [android] 81 | 82 | '@esbuild/android-x64@0.24.2': 83 | resolution: {integrity: sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==} 84 | engines: {node: '>=18'} 85 | cpu: [x64] 86 | os: [android] 87 | 88 | '@esbuild/darwin-arm64@0.24.2': 89 | resolution: {integrity: sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==} 90 | engines: {node: '>=18'} 91 | cpu: [arm64] 92 | os: [darwin] 93 | 94 | '@esbuild/darwin-x64@0.24.2': 95 | resolution: {integrity: sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==} 96 | engines: {node: '>=18'} 97 | cpu: [x64] 98 | os: [darwin] 99 | 100 | '@esbuild/freebsd-arm64@0.24.2': 101 | resolution: {integrity: sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==} 102 | engines: {node: '>=18'} 103 | cpu: [arm64] 104 | os: [freebsd] 105 | 106 | '@esbuild/freebsd-x64@0.24.2': 107 | resolution: {integrity: sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==} 108 | engines: {node: '>=18'} 109 | cpu: [x64] 110 | os: [freebsd] 111 | 112 | '@esbuild/linux-arm64@0.24.2': 113 | resolution: {integrity: sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==} 114 | engines: {node: '>=18'} 115 | cpu: [arm64] 116 | os: [linux] 117 | 118 | '@esbuild/linux-arm@0.24.2': 119 | resolution: {integrity: sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==} 120 | engines: {node: '>=18'} 121 | cpu: [arm] 122 | os: [linux] 123 | 124 | '@esbuild/linux-ia32@0.24.2': 125 | resolution: {integrity: sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==} 126 | engines: {node: '>=18'} 127 | cpu: [ia32] 128 | os: [linux] 129 | 130 | '@esbuild/linux-loong64@0.24.2': 131 | resolution: {integrity: sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==} 132 | engines: {node: '>=18'} 133 | cpu: [loong64] 134 | os: [linux] 135 | 136 | '@esbuild/linux-mips64el@0.24.2': 137 | resolution: {integrity: sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==} 138 | engines: {node: '>=18'} 139 | cpu: [mips64el] 140 | os: [linux] 141 | 142 | '@esbuild/linux-ppc64@0.24.2': 143 | resolution: {integrity: sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==} 144 | engines: {node: '>=18'} 145 | cpu: [ppc64] 146 | os: [linux] 147 | 148 | '@esbuild/linux-riscv64@0.24.2': 149 | resolution: {integrity: sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==} 150 | engines: {node: '>=18'} 151 | cpu: [riscv64] 152 | os: [linux] 153 | 154 | '@esbuild/linux-s390x@0.24.2': 155 | resolution: {integrity: sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==} 156 | engines: {node: '>=18'} 157 | cpu: [s390x] 158 | os: [linux] 159 | 160 | '@esbuild/linux-x64@0.24.2': 161 | resolution: {integrity: sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==} 162 | engines: {node: '>=18'} 163 | cpu: [x64] 164 | os: [linux] 165 | 166 | '@esbuild/netbsd-arm64@0.24.2': 167 | resolution: {integrity: sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==} 168 | engines: {node: '>=18'} 169 | cpu: [arm64] 170 | os: [netbsd] 171 | 172 | '@esbuild/netbsd-x64@0.24.2': 173 | resolution: {integrity: sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==} 174 | engines: {node: '>=18'} 175 | cpu: [x64] 176 | os: [netbsd] 177 | 178 | '@esbuild/openbsd-arm64@0.24.2': 179 | resolution: {integrity: sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==} 180 | engines: {node: '>=18'} 181 | cpu: [arm64] 182 | os: [openbsd] 183 | 184 | '@esbuild/openbsd-x64@0.24.2': 185 | resolution: {integrity: sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==} 186 | engines: {node: '>=18'} 187 | cpu: [x64] 188 | os: [openbsd] 189 | 190 | '@esbuild/sunos-x64@0.24.2': 191 | resolution: {integrity: sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==} 192 | engines: {node: '>=18'} 193 | cpu: [x64] 194 | os: [sunos] 195 | 196 | '@esbuild/win32-arm64@0.24.2': 197 | resolution: {integrity: sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==} 198 | engines: {node: '>=18'} 199 | cpu: [arm64] 200 | os: [win32] 201 | 202 | '@esbuild/win32-ia32@0.24.2': 203 | resolution: {integrity: sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==} 204 | engines: {node: '>=18'} 205 | cpu: [ia32] 206 | os: [win32] 207 | 208 | '@esbuild/win32-x64@0.24.2': 209 | resolution: {integrity: sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==} 210 | engines: {node: '>=18'} 211 | cpu: [x64] 212 | os: [win32] 213 | 214 | '@eslint-community/eslint-utils@4.4.1': 215 | resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} 216 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 217 | peerDependencies: 218 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 219 | 220 | '@eslint-community/regexpp@4.12.1': 221 | resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} 222 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 223 | 224 | '@eslint/config-array@0.19.2': 225 | resolution: {integrity: sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==} 226 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 227 | 228 | '@eslint/core@0.12.0': 229 | resolution: {integrity: sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==} 230 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 231 | 232 | '@eslint/eslintrc@3.3.0': 233 | resolution: {integrity: sha512-yaVPAiNAalnCZedKLdR21GOGILMLKPyqSLWaAjQFvYA2i/ciDi8ArYVr69Anohb6cH2Ukhqti4aFnYyPm8wdwQ==} 234 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 235 | 236 | '@eslint/js@9.21.0': 237 | resolution: {integrity: sha512-BqStZ3HX8Yz6LvsF5ByXYrtigrV5AXADWLAGc7PH/1SxOb7/FIYYMszZZWiUou/GB9P2lXWk2SV4d+Z8h0nknw==} 238 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 239 | 240 | '@eslint/object-schema@2.1.6': 241 | resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} 242 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 243 | 244 | '@eslint/plugin-kit@0.2.7': 245 | resolution: {integrity: sha512-JubJ5B2pJ4k4yGxaNLdbjrnk9d/iDz6/q8wOilpIowd6PJPgaxCuHBnBszq7Ce2TyMrywm5r4PnKm6V3iiZF+g==} 246 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 247 | 248 | '@humanfs/core@0.19.1': 249 | resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} 250 | engines: {node: '>=18.18.0'} 251 | 252 | '@humanfs/node@0.16.6': 253 | resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} 254 | engines: {node: '>=18.18.0'} 255 | 256 | '@humanwhocodes/module-importer@1.0.1': 257 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} 258 | engines: {node: '>=12.22'} 259 | 260 | '@humanwhocodes/retry@0.3.1': 261 | resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} 262 | engines: {node: '>=18.18'} 263 | 264 | '@humanwhocodes/retry@0.4.2': 265 | resolution: {integrity: sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==} 266 | engines: {node: '>=18.18'} 267 | 268 | '@isaacs/cliui@8.0.2': 269 | resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} 270 | engines: {node: '>=12'} 271 | 272 | '@jridgewell/gen-mapping@0.3.8': 273 | resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} 274 | engines: {node: '>=6.0.0'} 275 | 276 | '@jridgewell/resolve-uri@3.1.2': 277 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 278 | engines: {node: '>=6.0.0'} 279 | 280 | '@jridgewell/set-array@1.2.1': 281 | resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} 282 | engines: {node: '>=6.0.0'} 283 | 284 | '@jridgewell/sourcemap-codec@1.5.0': 285 | resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} 286 | 287 | '@jridgewell/trace-mapping@0.3.25': 288 | resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} 289 | 290 | '@nodelib/fs.scandir@2.1.5': 291 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 292 | engines: {node: '>= 8'} 293 | 294 | '@nodelib/fs.stat@2.0.5': 295 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 296 | engines: {node: '>= 8'} 297 | 298 | '@nodelib/fs.walk@1.2.8': 299 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 300 | engines: {node: '>= 8'} 301 | 302 | '@pkgjs/parseargs@0.11.0': 303 | resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} 304 | engines: {node: '>=14'} 305 | 306 | '@rollup/rollup-android-arm-eabi@4.34.8': 307 | resolution: {integrity: sha512-q217OSE8DTp8AFHuNHXo0Y86e1wtlfVrXiAlwkIvGRQv9zbc6mE3sjIVfwI8sYUyNxwOg0j/Vm1RKM04JcWLJw==} 308 | cpu: [arm] 309 | os: [android] 310 | 311 | '@rollup/rollup-android-arm64@4.34.8': 312 | resolution: {integrity: sha512-Gigjz7mNWaOL9wCggvoK3jEIUUbGul656opstjaUSGC3eT0BM7PofdAJaBfPFWWkXNVAXbaQtC99OCg4sJv70Q==} 313 | cpu: [arm64] 314 | os: [android] 315 | 316 | '@rollup/rollup-darwin-arm64@4.34.8': 317 | resolution: {integrity: sha512-02rVdZ5tgdUNRxIUrFdcMBZQoaPMrxtwSb+/hOfBdqkatYHR3lZ2A2EGyHq2sGOd0Owk80oV3snlDASC24He3Q==} 318 | cpu: [arm64] 319 | os: [darwin] 320 | 321 | '@rollup/rollup-darwin-x64@4.34.8': 322 | resolution: {integrity: sha512-qIP/elwR/tq/dYRx3lgwK31jkZvMiD6qUtOycLhTzCvrjbZ3LjQnEM9rNhSGpbLXVJYQ3rq39A6Re0h9tU2ynw==} 323 | cpu: [x64] 324 | os: [darwin] 325 | 326 | '@rollup/rollup-freebsd-arm64@4.34.8': 327 | resolution: {integrity: sha512-IQNVXL9iY6NniYbTaOKdrlVP3XIqazBgJOVkddzJlqnCpRi/yAeSOa8PLcECFSQochzqApIOE1GHNu3pCz+BDA==} 328 | cpu: [arm64] 329 | os: [freebsd] 330 | 331 | '@rollup/rollup-freebsd-x64@4.34.8': 332 | resolution: {integrity: sha512-TYXcHghgnCqYFiE3FT5QwXtOZqDj5GmaFNTNt3jNC+vh22dc/ukG2cG+pi75QO4kACohZzidsq7yKTKwq/Jq7Q==} 333 | cpu: [x64] 334 | os: [freebsd] 335 | 336 | '@rollup/rollup-linux-arm-gnueabihf@4.34.8': 337 | resolution: {integrity: sha512-A4iphFGNkWRd+5m3VIGuqHnG3MVnqKe7Al57u9mwgbyZ2/xF9Jio72MaY7xxh+Y87VAHmGQr73qoKL9HPbXj1g==} 338 | cpu: [arm] 339 | os: [linux] 340 | 341 | '@rollup/rollup-linux-arm-musleabihf@4.34.8': 342 | resolution: {integrity: sha512-S0lqKLfTm5u+QTxlFiAnb2J/2dgQqRy/XvziPtDd1rKZFXHTyYLoVL58M/XFwDI01AQCDIevGLbQrMAtdyanpA==} 343 | cpu: [arm] 344 | os: [linux] 345 | 346 | '@rollup/rollup-linux-arm64-gnu@4.34.8': 347 | resolution: {integrity: sha512-jpz9YOuPiSkL4G4pqKrus0pn9aYwpImGkosRKwNi+sJSkz+WU3anZe6hi73StLOQdfXYXC7hUfsQlTnjMd3s1A==} 348 | cpu: [arm64] 349 | os: [linux] 350 | 351 | '@rollup/rollup-linux-arm64-musl@4.34.8': 352 | resolution: {integrity: sha512-KdSfaROOUJXgTVxJNAZ3KwkRc5nggDk+06P6lgi1HLv1hskgvxHUKZ4xtwHkVYJ1Rep4GNo+uEfycCRRxht7+Q==} 353 | cpu: [arm64] 354 | os: [linux] 355 | 356 | '@rollup/rollup-linux-loongarch64-gnu@4.34.8': 357 | resolution: {integrity: sha512-NyF4gcxwkMFRjgXBM6g2lkT58OWztZvw5KkV2K0qqSnUEqCVcqdh2jN4gQrTn/YUpAcNKyFHfoOZEer9nwo6uQ==} 358 | cpu: [loong64] 359 | os: [linux] 360 | 361 | '@rollup/rollup-linux-powerpc64le-gnu@4.34.8': 362 | resolution: {integrity: sha512-LMJc999GkhGvktHU85zNTDImZVUCJ1z/MbAJTnviiWmmjyckP5aQsHtcujMjpNdMZPT2rQEDBlJfubhs3jsMfw==} 363 | cpu: [ppc64] 364 | os: [linux] 365 | 366 | '@rollup/rollup-linux-riscv64-gnu@4.34.8': 367 | resolution: {integrity: sha512-xAQCAHPj8nJq1PI3z8CIZzXuXCstquz7cIOL73HHdXiRcKk8Ywwqtx2wrIy23EcTn4aZ2fLJNBB8d0tQENPCmw==} 368 | cpu: [riscv64] 369 | os: [linux] 370 | 371 | '@rollup/rollup-linux-s390x-gnu@4.34.8': 372 | resolution: {integrity: sha512-DdePVk1NDEuc3fOe3dPPTb+rjMtuFw89gw6gVWxQFAuEqqSdDKnrwzZHrUYdac7A7dXl9Q2Vflxpme15gUWQFA==} 373 | cpu: [s390x] 374 | os: [linux] 375 | 376 | '@rollup/rollup-linux-x64-gnu@4.34.8': 377 | resolution: {integrity: sha512-8y7ED8gjxITUltTUEJLQdgpbPh1sUQ0kMTmufRF/Ns5tI9TNMNlhWtmPKKHCU0SilX+3MJkZ0zERYYGIVBYHIA==} 378 | cpu: [x64] 379 | os: [linux] 380 | 381 | '@rollup/rollup-linux-x64-musl@4.34.8': 382 | resolution: {integrity: sha512-SCXcP0ZpGFIe7Ge+McxY5zKxiEI5ra+GT3QRxL0pMMtxPfpyLAKleZODi1zdRHkz5/BhueUrYtYVgubqe9JBNQ==} 383 | cpu: [x64] 384 | os: [linux] 385 | 386 | '@rollup/rollup-win32-arm64-msvc@4.34.8': 387 | resolution: {integrity: sha512-YHYsgzZgFJzTRbth4h7Or0m5O74Yda+hLin0irAIobkLQFRQd1qWmnoVfwmKm9TXIZVAD0nZ+GEb2ICicLyCnQ==} 388 | cpu: [arm64] 389 | os: [win32] 390 | 391 | '@rollup/rollup-win32-ia32-msvc@4.34.8': 392 | resolution: {integrity: sha512-r3NRQrXkHr4uWy5TOjTpTYojR9XmF0j/RYgKCef+Ag46FWUTltm5ziticv8LdNsDMehjJ543x/+TJAek/xBA2w==} 393 | cpu: [ia32] 394 | os: [win32] 395 | 396 | '@rollup/rollup-win32-x64-msvc@4.34.8': 397 | resolution: {integrity: sha512-U0FaE5O1BCpZSeE6gBl3c5ObhePQSfk9vDRToMmTkbhCOgW4jqvtS5LGyQ76L1fH8sM0keRp4uDTsbjiUyjk0g==} 398 | cpu: [x64] 399 | os: [win32] 400 | 401 | '@testing-library/jest-dom@6.6.3': 402 | resolution: {integrity: sha512-IteBhl4XqYNkM54f4ejhLRJiZNqcSCoXUOG2CPK7qbD322KjQozM4kHQOfkG2oln9b9HTYqs+Sae8vBATubxxA==} 403 | engines: {node: '>=14', npm: '>=6', yarn: '>=1'} 404 | 405 | '@types/estree@1.0.6': 406 | resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} 407 | 408 | '@types/json-schema@7.0.15': 409 | resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} 410 | 411 | '@types/minimist@1.2.5': 412 | resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==} 413 | 414 | '@types/node@22.13.5': 415 | resolution: {integrity: sha512-+lTU0PxZXn0Dr1NBtC7Y8cR21AJr87dLLU953CWA6pMxxv/UDc7jYAY90upcrie1nRcD6XNG5HOYEDtgW5TxAg==} 416 | 417 | '@types/normalize-package-data@2.4.4': 418 | resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} 419 | 420 | '@typescript-eslint/eslint-plugin@8.24.1': 421 | resolution: {integrity: sha512-ll1StnKtBigWIGqvYDVuDmXJHVH4zLVot1yQ4fJtLpL7qacwkxJc1T0bptqw+miBQ/QfUbhl1TcQ4accW5KUyA==} 422 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 423 | peerDependencies: 424 | '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 425 | eslint: ^8.57.0 || ^9.0.0 426 | typescript: '>=4.8.4 <5.8.0' 427 | 428 | '@typescript-eslint/parser@8.24.1': 429 | resolution: {integrity: sha512-Tqoa05bu+t5s8CTZFaGpCH2ub3QeT9YDkXbPd3uQ4SfsLoh1/vv2GEYAioPoxCWJJNsenXlC88tRjwoHNts1oQ==} 430 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 431 | peerDependencies: 432 | eslint: ^8.57.0 || ^9.0.0 433 | typescript: '>=4.8.4 <5.8.0' 434 | 435 | '@typescript-eslint/scope-manager@8.24.1': 436 | resolution: {integrity: sha512-OdQr6BNBzwRjNEXMQyaGyZzgg7wzjYKfX2ZBV3E04hUCBDv3GQCHiz9RpqdUIiVrMgJGkXm3tcEh4vFSHreS2Q==} 437 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 438 | 439 | '@typescript-eslint/type-utils@8.24.1': 440 | resolution: {integrity: sha512-/Do9fmNgCsQ+K4rCz0STI7lYB4phTtEXqqCAs3gZW0pnK7lWNkvWd5iW545GSmApm4AzmQXmSqXPO565B4WVrw==} 441 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 442 | peerDependencies: 443 | eslint: ^8.57.0 || ^9.0.0 444 | typescript: '>=4.8.4 <5.8.0' 445 | 446 | '@typescript-eslint/types@8.24.1': 447 | resolution: {integrity: sha512-9kqJ+2DkUXiuhoiYIUvIYjGcwle8pcPpdlfkemGvTObzgmYfJ5d0Qm6jwb4NBXP9W1I5tss0VIAnWFumz3mC5A==} 448 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 449 | 450 | '@typescript-eslint/typescript-estree@8.24.1': 451 | resolution: {integrity: sha512-UPyy4MJ/0RE648DSKQe9g0VDSehPINiejjA6ElqnFaFIhI6ZEiZAkUI0D5MCk0bQcTf/LVqZStvQ6K4lPn/BRg==} 452 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 453 | peerDependencies: 454 | typescript: '>=4.8.4 <5.8.0' 455 | 456 | '@typescript-eslint/utils@8.24.1': 457 | resolution: {integrity: sha512-OOcg3PMMQx9EXspId5iktsI3eMaXVwlhC8BvNnX6B5w9a4dVgpkQZuU8Hy67TolKcl+iFWq0XX+jbDGN4xWxjQ==} 458 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 459 | peerDependencies: 460 | eslint: ^8.57.0 || ^9.0.0 461 | typescript: '>=4.8.4 <5.8.0' 462 | 463 | '@typescript-eslint/visitor-keys@8.24.1': 464 | resolution: {integrity: sha512-EwVHlp5l+2vp8CoqJm9KikPZgi3gbdZAtabKT9KPShGeOcJhsv4Zdo3oc8T8I0uKEmYoU4ItyxbptjF08enaxg==} 465 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 466 | 467 | '@vitest/expect@3.0.6': 468 | resolution: {integrity: sha512-zBduHf/ja7/QRX4HdP1DSq5XrPgdN+jzLOwaTq/0qZjYfgETNFCKf9nOAp2j3hmom3oTbczuUzrzg9Hafh7hNg==} 469 | 470 | '@vitest/mocker@3.0.6': 471 | resolution: {integrity: sha512-KPztr4/tn7qDGZfqlSPQoF2VgJcKxnDNhmfR3VgZ6Fy1bO8T9Fc1stUiTXtqz0yG24VpD00pZP5f8EOFknjNuQ==} 472 | peerDependencies: 473 | msw: ^2.4.9 474 | vite: ^5.0.0 || ^6.0.0 475 | peerDependenciesMeta: 476 | msw: 477 | optional: true 478 | vite: 479 | optional: true 480 | 481 | '@vitest/pretty-format@3.0.6': 482 | resolution: {integrity: sha512-Zyctv3dbNL+67qtHfRnUE/k8qxduOamRfAL1BurEIQSyOEFffoMvx2pnDSSbKAAVxY0Ej2J/GH2dQKI0W2JyVg==} 483 | 484 | '@vitest/runner@3.0.6': 485 | resolution: {integrity: sha512-JopP4m/jGoaG1+CBqubV/5VMbi7L+NQCJTu1J1Pf6YaUbk7bZtaq5CX7p+8sY64Sjn1UQ1XJparHfcvTTdu9cA==} 486 | 487 | '@vitest/snapshot@3.0.6': 488 | resolution: {integrity: sha512-qKSmxNQwT60kNwwJHMVwavvZsMGXWmngD023OHSgn873pV0lylK7dwBTfYP7e4URy5NiBCHHiQGA9DHkYkqRqg==} 489 | 490 | '@vitest/spy@3.0.6': 491 | resolution: {integrity: sha512-HfOGx/bXtjy24fDlTOpgiAEJbRfFxoX3zIGagCqACkFKKZ/TTOE6gYMKXlqecvxEndKFuNHcHqP081ggZ2yM0Q==} 492 | 493 | '@vitest/utils@3.0.6': 494 | resolution: {integrity: sha512-18ktZpf4GQFTbf9jK543uspU03Q2qya7ZGya5yiZ0Gx0nnnalBvd5ZBislbl2EhLjM8A8rt4OilqKG7QwcGkvQ==} 495 | 496 | acorn-jsx@5.3.2: 497 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 498 | peerDependencies: 499 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 500 | 501 | acorn@8.14.0: 502 | resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} 503 | engines: {node: '>=0.4.0'} 504 | hasBin: true 505 | 506 | ajv@6.12.6: 507 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 508 | 509 | ansi-regex@5.0.1: 510 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 511 | engines: {node: '>=8'} 512 | 513 | ansi-regex@6.1.0: 514 | resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} 515 | engines: {node: '>=12'} 516 | 517 | ansi-styles@4.3.0: 518 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 519 | engines: {node: '>=8'} 520 | 521 | ansi-styles@6.2.1: 522 | resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} 523 | engines: {node: '>=12'} 524 | 525 | any-promise@1.3.0: 526 | resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} 527 | 528 | argparse@2.0.1: 529 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 530 | 531 | aria-query@5.3.2: 532 | resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} 533 | engines: {node: '>= 0.4'} 534 | 535 | arrify@1.0.1: 536 | resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} 537 | engines: {node: '>=0.10.0'} 538 | 539 | assertion-error@2.0.1: 540 | resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} 541 | engines: {node: '>=12'} 542 | 543 | balanced-match@1.0.2: 544 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 545 | 546 | brace-expansion@1.1.11: 547 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 548 | 549 | brace-expansion@2.0.1: 550 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 551 | 552 | braces@3.0.3: 553 | resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} 554 | engines: {node: '>=8'} 555 | 556 | bundle-require@5.1.0: 557 | resolution: {integrity: sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==} 558 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 559 | peerDependencies: 560 | esbuild: '>=0.18' 561 | 562 | cac@6.7.14: 563 | resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} 564 | engines: {node: '>=8'} 565 | 566 | callsites@3.1.0: 567 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 568 | engines: {node: '>=6'} 569 | 570 | camelcase-keys@7.0.2: 571 | resolution: {integrity: sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg==} 572 | engines: {node: '>=12'} 573 | 574 | camelcase@6.3.0: 575 | resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} 576 | engines: {node: '>=10'} 577 | 578 | chai@5.2.0: 579 | resolution: {integrity: sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==} 580 | engines: {node: '>=12'} 581 | 582 | chalk@3.0.0: 583 | resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==} 584 | engines: {node: '>=8'} 585 | 586 | chalk@4.1.2: 587 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 588 | engines: {node: '>=10'} 589 | 590 | check-error@2.1.1: 591 | resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} 592 | engines: {node: '>= 16'} 593 | 594 | chokidar@4.0.3: 595 | resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} 596 | engines: {node: '>= 14.16.0'} 597 | 598 | color-convert@2.0.1: 599 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 600 | engines: {node: '>=7.0.0'} 601 | 602 | color-name@1.1.4: 603 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 604 | 605 | commander@4.1.1: 606 | resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} 607 | engines: {node: '>= 6'} 608 | 609 | concat-map@0.0.1: 610 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 611 | 612 | consola@3.4.0: 613 | resolution: {integrity: sha512-EiPU8G6dQG0GFHNR8ljnZFki/8a+cQwEQ+7wpxdChl02Q8HXlwEZWD5lqAF8vC2sEC3Tehr8hy7vErz88LHyUA==} 614 | engines: {node: ^14.18.0 || >=16.10.0} 615 | 616 | cross-spawn@7.0.6: 617 | resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} 618 | engines: {node: '>= 8'} 619 | 620 | css.escape@1.5.1: 621 | resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} 622 | 623 | debug@4.4.0: 624 | resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} 625 | engines: {node: '>=6.0'} 626 | peerDependencies: 627 | supports-color: '*' 628 | peerDependenciesMeta: 629 | supports-color: 630 | optional: true 631 | 632 | decamelize-keys@1.1.1: 633 | resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} 634 | engines: {node: '>=0.10.0'} 635 | 636 | decamelize@1.2.0: 637 | resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} 638 | engines: {node: '>=0.10.0'} 639 | 640 | decamelize@5.0.1: 641 | resolution: {integrity: sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==} 642 | engines: {node: '>=10'} 643 | 644 | deep-eql@5.0.2: 645 | resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} 646 | engines: {node: '>=6'} 647 | 648 | deep-is@0.1.4: 649 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 650 | 651 | dom-accessibility-api@0.6.3: 652 | resolution: {integrity: sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==} 653 | 654 | duplexer@0.1.2: 655 | resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} 656 | 657 | eastasianwidth@0.2.0: 658 | resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} 659 | 660 | emoji-regex@8.0.0: 661 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 662 | 663 | emoji-regex@9.2.2: 664 | resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} 665 | 666 | error-ex@1.3.2: 667 | resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} 668 | 669 | es-module-lexer@1.6.0: 670 | resolution: {integrity: sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==} 671 | 672 | esbuild@0.24.2: 673 | resolution: {integrity: sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==} 674 | engines: {node: '>=18'} 675 | hasBin: true 676 | 677 | escape-string-regexp@4.0.0: 678 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 679 | engines: {node: '>=10'} 680 | 681 | eslint-scope@8.2.0: 682 | resolution: {integrity: sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==} 683 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 684 | 685 | eslint-visitor-keys@3.4.3: 686 | resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} 687 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 688 | 689 | eslint-visitor-keys@4.2.0: 690 | resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} 691 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 692 | 693 | eslint@9.21.0: 694 | resolution: {integrity: sha512-KjeihdFqTPhOMXTt7StsDxriV4n66ueuF/jfPNC3j/lduHwr/ijDwJMsF+wyMJethgiKi5wniIE243vi07d3pg==} 695 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 696 | hasBin: true 697 | peerDependencies: 698 | jiti: '*' 699 | peerDependenciesMeta: 700 | jiti: 701 | optional: true 702 | 703 | espree@10.3.0: 704 | resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} 705 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 706 | 707 | esquery@1.6.0: 708 | resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} 709 | engines: {node: '>=0.10'} 710 | 711 | esrecurse@4.3.0: 712 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 713 | engines: {node: '>=4.0'} 714 | 715 | estraverse@5.3.0: 716 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 717 | engines: {node: '>=4.0'} 718 | 719 | estree-walker@3.0.3: 720 | resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} 721 | 722 | esutils@2.0.3: 723 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 724 | engines: {node: '>=0.10.0'} 725 | 726 | expect-type@1.1.0: 727 | resolution: {integrity: sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA==} 728 | engines: {node: '>=12.0.0'} 729 | 730 | fast-deep-equal@3.1.3: 731 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 732 | 733 | fast-glob@3.3.3: 734 | resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} 735 | engines: {node: '>=8.6.0'} 736 | 737 | fast-json-stable-stringify@2.1.0: 738 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 739 | 740 | fast-levenshtein@2.0.6: 741 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 742 | 743 | fastq@1.19.0: 744 | resolution: {integrity: sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA==} 745 | 746 | fdir@6.4.3: 747 | resolution: {integrity: sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==} 748 | peerDependencies: 749 | picomatch: ^3 || ^4 750 | peerDependenciesMeta: 751 | picomatch: 752 | optional: true 753 | 754 | file-entry-cache@8.0.0: 755 | resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} 756 | engines: {node: '>=16.0.0'} 757 | 758 | fill-range@7.1.1: 759 | resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} 760 | engines: {node: '>=8'} 761 | 762 | find-up@5.0.0: 763 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 764 | engines: {node: '>=10'} 765 | 766 | flat-cache@4.0.1: 767 | resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} 768 | engines: {node: '>=16'} 769 | 770 | flatted@3.3.3: 771 | resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} 772 | 773 | foreground-child@3.3.0: 774 | resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} 775 | engines: {node: '>=14'} 776 | 777 | fsevents@2.3.3: 778 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 779 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 780 | os: [darwin] 781 | 782 | function-bind@1.1.2: 783 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} 784 | 785 | get-stdin@9.0.0: 786 | resolution: {integrity: sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==} 787 | engines: {node: '>=12'} 788 | 789 | glob-parent@5.1.2: 790 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 791 | engines: {node: '>= 6'} 792 | 793 | glob-parent@6.0.2: 794 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 795 | engines: {node: '>=10.13.0'} 796 | 797 | glob@10.4.5: 798 | resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} 799 | hasBin: true 800 | 801 | globals@14.0.0: 802 | resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} 803 | engines: {node: '>=18'} 804 | 805 | globals@15.15.0: 806 | resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==} 807 | engines: {node: '>=18'} 808 | 809 | graphemer@1.4.0: 810 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} 811 | 812 | gzip-size-cli@5.1.0: 813 | resolution: {integrity: sha512-XBC1Ia0IWm0/cbiU33fPfNL6uFCq7IjngRkFCelullMBcEna9Re4DNPfpsRgREDpOR5FGNupBfdb377uI5o7iQ==} 814 | engines: {node: '>=12'} 815 | hasBin: true 816 | 817 | gzip-size@7.0.0: 818 | resolution: {integrity: sha512-O1Ld7Dr+nqPnmGpdhzLmMTQ4vAsD+rHwMm1NLUmoUFFymBOMKxCCrtDxqdBRYXdeEPEi3SyoR4TizJLQrnKBNA==} 819 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 820 | 821 | hard-rejection@2.1.0: 822 | resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} 823 | engines: {node: '>=6'} 824 | 825 | has-flag@4.0.0: 826 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 827 | engines: {node: '>=8'} 828 | 829 | hasown@2.0.2: 830 | resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} 831 | engines: {node: '>= 0.4'} 832 | 833 | hosted-git-info@4.1.0: 834 | resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} 835 | engines: {node: '>=10'} 836 | 837 | ignore@5.3.2: 838 | resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} 839 | engines: {node: '>= 4'} 840 | 841 | import-fresh@3.3.1: 842 | resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} 843 | engines: {node: '>=6'} 844 | 845 | imurmurhash@0.1.4: 846 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 847 | engines: {node: '>=0.8.19'} 848 | 849 | indent-string@4.0.0: 850 | resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} 851 | engines: {node: '>=8'} 852 | 853 | indent-string@5.0.0: 854 | resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==} 855 | engines: {node: '>=12'} 856 | 857 | is-arrayish@0.2.1: 858 | resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} 859 | 860 | is-core-module@2.16.1: 861 | resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} 862 | engines: {node: '>= 0.4'} 863 | 864 | is-extglob@2.1.1: 865 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 866 | engines: {node: '>=0.10.0'} 867 | 868 | is-fullwidth-code-point@3.0.0: 869 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 870 | engines: {node: '>=8'} 871 | 872 | is-glob@4.0.3: 873 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 874 | engines: {node: '>=0.10.0'} 875 | 876 | is-number@7.0.0: 877 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 878 | engines: {node: '>=0.12.0'} 879 | 880 | is-plain-obj@1.1.0: 881 | resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} 882 | engines: {node: '>=0.10.0'} 883 | 884 | isexe@2.0.0: 885 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 886 | 887 | jackspeak@3.4.3: 888 | resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} 889 | 890 | joycon@3.1.1: 891 | resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} 892 | engines: {node: '>=10'} 893 | 894 | js-tokens@4.0.0: 895 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 896 | 897 | js-yaml@4.1.0: 898 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 899 | hasBin: true 900 | 901 | json-buffer@3.0.1: 902 | resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} 903 | 904 | json-parse-even-better-errors@2.3.1: 905 | resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} 906 | 907 | json-schema-traverse@0.4.1: 908 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 909 | 910 | json-stable-stringify-without-jsonify@1.0.1: 911 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 912 | 913 | keyv@4.5.4: 914 | resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} 915 | 916 | kind-of@6.0.3: 917 | resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} 918 | engines: {node: '>=0.10.0'} 919 | 920 | levn@0.4.1: 921 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 922 | engines: {node: '>= 0.8.0'} 923 | 924 | lilconfig@3.1.3: 925 | resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} 926 | engines: {node: '>=14'} 927 | 928 | lines-and-columns@1.2.4: 929 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 930 | 931 | load-tsconfig@0.2.5: 932 | resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} 933 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 934 | 935 | locate-path@6.0.0: 936 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 937 | engines: {node: '>=10'} 938 | 939 | lodash.merge@4.6.2: 940 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 941 | 942 | lodash.sortby@4.7.0: 943 | resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} 944 | 945 | lodash@4.17.21: 946 | resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} 947 | 948 | loupe@3.1.3: 949 | resolution: {integrity: sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==} 950 | 951 | lru-cache@10.4.3: 952 | resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} 953 | 954 | lru-cache@6.0.0: 955 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} 956 | engines: {node: '>=10'} 957 | 958 | magic-string@0.30.17: 959 | resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} 960 | 961 | map-obj@1.0.1: 962 | resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} 963 | engines: {node: '>=0.10.0'} 964 | 965 | map-obj@4.3.0: 966 | resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} 967 | engines: {node: '>=8'} 968 | 969 | meow@10.1.5: 970 | resolution: {integrity: sha512-/d+PQ4GKmGvM9Bee/DPa8z3mXs/pkvJE2KEThngVNOqtmljC6K7NMPxtc2JeZYTmpWb9k/TmxjeL18ez3h7vCw==} 971 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 972 | 973 | merge2@1.4.1: 974 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 975 | engines: {node: '>= 8'} 976 | 977 | micromatch@4.0.8: 978 | resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} 979 | engines: {node: '>=8.6'} 980 | 981 | min-indent@1.0.1: 982 | resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} 983 | engines: {node: '>=4'} 984 | 985 | minimatch@3.1.2: 986 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 987 | 988 | minimatch@9.0.5: 989 | resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} 990 | engines: {node: '>=16 || 14 >=14.17'} 991 | 992 | minimist-options@4.1.0: 993 | resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} 994 | engines: {node: '>= 6'} 995 | 996 | minipass@7.1.2: 997 | resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} 998 | engines: {node: '>=16 || 14 >=14.17'} 999 | 1000 | ms@2.1.3: 1001 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 1002 | 1003 | mz@2.7.0: 1004 | resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} 1005 | 1006 | nanoid@3.3.8: 1007 | resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} 1008 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 1009 | hasBin: true 1010 | 1011 | natural-compare@1.4.0: 1012 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 1013 | 1014 | normalize-package-data@3.0.3: 1015 | resolution: {integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==} 1016 | engines: {node: '>=10'} 1017 | 1018 | object-assign@4.1.1: 1019 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} 1020 | engines: {node: '>=0.10.0'} 1021 | 1022 | optionator@0.9.4: 1023 | resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} 1024 | engines: {node: '>= 0.8.0'} 1025 | 1026 | p-limit@3.1.0: 1027 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 1028 | engines: {node: '>=10'} 1029 | 1030 | p-locate@5.0.0: 1031 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 1032 | engines: {node: '>=10'} 1033 | 1034 | package-json-from-dist@1.0.1: 1035 | resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} 1036 | 1037 | parent-module@1.0.1: 1038 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 1039 | engines: {node: '>=6'} 1040 | 1041 | parse-json@5.2.0: 1042 | resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} 1043 | engines: {node: '>=8'} 1044 | 1045 | path-exists@4.0.0: 1046 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 1047 | engines: {node: '>=8'} 1048 | 1049 | path-key@3.1.1: 1050 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 1051 | engines: {node: '>=8'} 1052 | 1053 | path-scurry@1.11.1: 1054 | resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} 1055 | engines: {node: '>=16 || 14 >=14.18'} 1056 | 1057 | pathe@2.0.3: 1058 | resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} 1059 | 1060 | pathval@2.0.0: 1061 | resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} 1062 | engines: {node: '>= 14.16'} 1063 | 1064 | picocolors@1.1.1: 1065 | resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 1066 | 1067 | picomatch@2.3.1: 1068 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 1069 | engines: {node: '>=8.6'} 1070 | 1071 | picomatch@4.0.2: 1072 | resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} 1073 | engines: {node: '>=12'} 1074 | 1075 | pirates@4.0.6: 1076 | resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} 1077 | engines: {node: '>= 6'} 1078 | 1079 | postcss-load-config@6.0.1: 1080 | resolution: {integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==} 1081 | engines: {node: '>= 18'} 1082 | peerDependencies: 1083 | jiti: '>=1.21.0' 1084 | postcss: '>=8.0.9' 1085 | tsx: ^4.8.1 1086 | yaml: ^2.4.2 1087 | peerDependenciesMeta: 1088 | jiti: 1089 | optional: true 1090 | postcss: 1091 | optional: true 1092 | tsx: 1093 | optional: true 1094 | yaml: 1095 | optional: true 1096 | 1097 | postcss@8.5.3: 1098 | resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} 1099 | engines: {node: ^10 || ^12 || >=14} 1100 | 1101 | prelude-ls@1.2.1: 1102 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 1103 | engines: {node: '>= 0.8.0'} 1104 | 1105 | prettier@3.5.2: 1106 | resolution: {integrity: sha512-lc6npv5PH7hVqozBR7lkBNOGXV9vMwROAPlumdBkX0wTbbzPu/U1hk5yL8p2pt4Xoc+2mkT8t/sow2YrV/M5qg==} 1107 | engines: {node: '>=14'} 1108 | hasBin: true 1109 | 1110 | pretty-bytes@5.6.0: 1111 | resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==} 1112 | engines: {node: '>=6'} 1113 | 1114 | punycode@2.3.1: 1115 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 1116 | engines: {node: '>=6'} 1117 | 1118 | queue-microtask@1.2.3: 1119 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 1120 | 1121 | quick-lru@5.1.1: 1122 | resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} 1123 | engines: {node: '>=10'} 1124 | 1125 | read-pkg-up@8.0.0: 1126 | resolution: {integrity: sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==} 1127 | engines: {node: '>=12'} 1128 | 1129 | read-pkg@6.0.0: 1130 | resolution: {integrity: sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==} 1131 | engines: {node: '>=12'} 1132 | 1133 | readdirp@4.1.2: 1134 | resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} 1135 | engines: {node: '>= 14.18.0'} 1136 | 1137 | redent@3.0.0: 1138 | resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} 1139 | engines: {node: '>=8'} 1140 | 1141 | redent@4.0.0: 1142 | resolution: {integrity: sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==} 1143 | engines: {node: '>=12'} 1144 | 1145 | resolve-from@4.0.0: 1146 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 1147 | engines: {node: '>=4'} 1148 | 1149 | resolve-from@5.0.0: 1150 | resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} 1151 | engines: {node: '>=8'} 1152 | 1153 | reusify@1.0.4: 1154 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 1155 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 1156 | 1157 | rollup@4.34.8: 1158 | resolution: {integrity: sha512-489gTVMzAYdiZHFVA/ig/iYFllCcWFHMvUHI1rpFmkoUtRlQxqh6/yiNqnYibjMZ2b/+FUQwldG+aLsEt6bglQ==} 1159 | engines: {node: '>=18.0.0', npm: '>=8.0.0'} 1160 | hasBin: true 1161 | 1162 | run-parallel@1.2.0: 1163 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 1164 | 1165 | semver@7.7.1: 1166 | resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} 1167 | engines: {node: '>=10'} 1168 | hasBin: true 1169 | 1170 | shebang-command@2.0.0: 1171 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 1172 | engines: {node: '>=8'} 1173 | 1174 | shebang-regex@3.0.0: 1175 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 1176 | engines: {node: '>=8'} 1177 | 1178 | siginfo@2.0.0: 1179 | resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} 1180 | 1181 | signal-exit@4.1.0: 1182 | resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} 1183 | engines: {node: '>=14'} 1184 | 1185 | source-map-js@1.2.1: 1186 | resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} 1187 | engines: {node: '>=0.10.0'} 1188 | 1189 | source-map@0.8.0-beta.0: 1190 | resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} 1191 | engines: {node: '>= 8'} 1192 | 1193 | spdx-correct@3.2.0: 1194 | resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} 1195 | 1196 | spdx-exceptions@2.5.0: 1197 | resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} 1198 | 1199 | spdx-expression-parse@3.0.1: 1200 | resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} 1201 | 1202 | spdx-license-ids@3.0.21: 1203 | resolution: {integrity: sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==} 1204 | 1205 | stackback@0.0.2: 1206 | resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} 1207 | 1208 | std-env@3.8.0: 1209 | resolution: {integrity: sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==} 1210 | 1211 | string-width@4.2.3: 1212 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 1213 | engines: {node: '>=8'} 1214 | 1215 | string-width@5.1.2: 1216 | resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} 1217 | engines: {node: '>=12'} 1218 | 1219 | strip-ansi@6.0.1: 1220 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 1221 | engines: {node: '>=8'} 1222 | 1223 | strip-ansi@7.1.0: 1224 | resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} 1225 | engines: {node: '>=12'} 1226 | 1227 | strip-indent@3.0.0: 1228 | resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} 1229 | engines: {node: '>=8'} 1230 | 1231 | strip-indent@4.0.0: 1232 | resolution: {integrity: sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==} 1233 | engines: {node: '>=12'} 1234 | 1235 | strip-json-comments@3.1.1: 1236 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 1237 | engines: {node: '>=8'} 1238 | 1239 | sucrase@3.35.0: 1240 | resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} 1241 | engines: {node: '>=16 || 14 >=14.17'} 1242 | hasBin: true 1243 | 1244 | supports-color@7.2.0: 1245 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 1246 | engines: {node: '>=8'} 1247 | 1248 | thenify-all@1.6.0: 1249 | resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} 1250 | engines: {node: '>=0.8'} 1251 | 1252 | thenify@3.3.1: 1253 | resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} 1254 | 1255 | tinybench@2.9.0: 1256 | resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} 1257 | 1258 | tinyexec@0.3.2: 1259 | resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} 1260 | 1261 | tinyglobby@0.2.12: 1262 | resolution: {integrity: sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==} 1263 | engines: {node: '>=12.0.0'} 1264 | 1265 | tinypool@1.0.2: 1266 | resolution: {integrity: sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==} 1267 | engines: {node: ^18.0.0 || >=20.0.0} 1268 | 1269 | tinyrainbow@2.0.0: 1270 | resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} 1271 | engines: {node: '>=14.0.0'} 1272 | 1273 | tinyspy@3.0.2: 1274 | resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} 1275 | engines: {node: '>=14.0.0'} 1276 | 1277 | to-regex-range@5.0.1: 1278 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1279 | engines: {node: '>=8.0'} 1280 | 1281 | tr46@1.0.1: 1282 | resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} 1283 | 1284 | tree-kill@1.2.2: 1285 | resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} 1286 | hasBin: true 1287 | 1288 | trim-newlines@4.1.1: 1289 | resolution: {integrity: sha512-jRKj0n0jXWo6kh62nA5TEh3+4igKDXLvzBJcPpiizP7oOolUrYIxmVBG9TOtHYFHoddUk6YvAkGeGoSVTXfQXQ==} 1290 | engines: {node: '>=12'} 1291 | 1292 | ts-api-utils@2.0.1: 1293 | resolution: {integrity: sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==} 1294 | engines: {node: '>=18.12'} 1295 | peerDependencies: 1296 | typescript: '>=4.8.4' 1297 | 1298 | ts-interface-checker@0.1.13: 1299 | resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} 1300 | 1301 | tslib@2.8.1: 1302 | resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} 1303 | 1304 | tsup@8.3.6: 1305 | resolution: {integrity: sha512-XkVtlDV/58S9Ye0JxUUTcrQk4S+EqlOHKzg6Roa62rdjL1nGWNUstG0xgI4vanHdfIpjP448J8vlN0oK6XOJ5g==} 1306 | engines: {node: '>=18'} 1307 | hasBin: true 1308 | peerDependencies: 1309 | '@microsoft/api-extractor': ^7.36.0 1310 | '@swc/core': ^1 1311 | postcss: ^8.4.12 1312 | typescript: '>=4.5.0' 1313 | peerDependenciesMeta: 1314 | '@microsoft/api-extractor': 1315 | optional: true 1316 | '@swc/core': 1317 | optional: true 1318 | postcss: 1319 | optional: true 1320 | typescript: 1321 | optional: true 1322 | 1323 | type-check@0.4.0: 1324 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 1325 | engines: {node: '>= 0.8.0'} 1326 | 1327 | type-fest@1.4.0: 1328 | resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} 1329 | engines: {node: '>=10'} 1330 | 1331 | typescript-eslint@8.24.1: 1332 | resolution: {integrity: sha512-cw3rEdzDqBs70TIcb0Gdzbt6h11BSs2pS0yaq7hDWDBtCCSei1pPSUXE9qUdQ/Wm9NgFg8mKtMt1b8fTHIl1jA==} 1333 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1334 | peerDependencies: 1335 | eslint: ^8.57.0 || ^9.0.0 1336 | typescript: '>=4.8.4 <5.8.0' 1337 | 1338 | typescript@5.7.3: 1339 | resolution: {integrity: sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==} 1340 | engines: {node: '>=14.17'} 1341 | hasBin: true 1342 | 1343 | undici-types@6.20.0: 1344 | resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} 1345 | 1346 | uri-js@4.4.1: 1347 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 1348 | 1349 | validate-npm-package-license@3.0.4: 1350 | resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} 1351 | 1352 | vite-node@3.0.6: 1353 | resolution: {integrity: sha512-s51RzrTkXKJrhNbUzQRsarjmAae7VmMPAsRT7lppVpIg6mK3zGthP9Hgz0YQQKuNcF+Ii7DfYk3Fxz40jRmePw==} 1354 | engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} 1355 | hasBin: true 1356 | 1357 | vite@6.1.1: 1358 | resolution: {integrity: sha512-4GgM54XrwRfrOp297aIYspIti66k56v16ZnqHvrIM7mG+HjDlAwS7p+Srr7J6fGvEdOJ5JcQ/D9T7HhtdXDTzA==} 1359 | engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} 1360 | hasBin: true 1361 | peerDependencies: 1362 | '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 1363 | jiti: '>=1.21.0' 1364 | less: '*' 1365 | lightningcss: ^1.21.0 1366 | sass: '*' 1367 | sass-embedded: '*' 1368 | stylus: '*' 1369 | sugarss: '*' 1370 | terser: ^5.16.0 1371 | tsx: ^4.8.1 1372 | yaml: ^2.4.2 1373 | peerDependenciesMeta: 1374 | '@types/node': 1375 | optional: true 1376 | jiti: 1377 | optional: true 1378 | less: 1379 | optional: true 1380 | lightningcss: 1381 | optional: true 1382 | sass: 1383 | optional: true 1384 | sass-embedded: 1385 | optional: true 1386 | stylus: 1387 | optional: true 1388 | sugarss: 1389 | optional: true 1390 | terser: 1391 | optional: true 1392 | tsx: 1393 | optional: true 1394 | yaml: 1395 | optional: true 1396 | 1397 | vitest@3.0.6: 1398 | resolution: {integrity: sha512-/iL1Sc5VeDZKPDe58oGK4HUFLhw6b5XdY1MYawjuSaDA4sEfYlY9HnS6aCEG26fX+MgUi7MwlduTBHHAI/OvMA==} 1399 | engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} 1400 | hasBin: true 1401 | peerDependencies: 1402 | '@edge-runtime/vm': '*' 1403 | '@types/debug': ^4.1.12 1404 | '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 1405 | '@vitest/browser': 3.0.6 1406 | '@vitest/ui': 3.0.6 1407 | happy-dom: '*' 1408 | jsdom: '*' 1409 | peerDependenciesMeta: 1410 | '@edge-runtime/vm': 1411 | optional: true 1412 | '@types/debug': 1413 | optional: true 1414 | '@types/node': 1415 | optional: true 1416 | '@vitest/browser': 1417 | optional: true 1418 | '@vitest/ui': 1419 | optional: true 1420 | happy-dom: 1421 | optional: true 1422 | jsdom: 1423 | optional: true 1424 | 1425 | webidl-conversions@4.0.2: 1426 | resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} 1427 | 1428 | whatwg-url@7.1.0: 1429 | resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} 1430 | 1431 | which@2.0.2: 1432 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 1433 | engines: {node: '>= 8'} 1434 | hasBin: true 1435 | 1436 | why-is-node-running@2.3.0: 1437 | resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} 1438 | engines: {node: '>=8'} 1439 | hasBin: true 1440 | 1441 | word-wrap@1.2.5: 1442 | resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} 1443 | engines: {node: '>=0.10.0'} 1444 | 1445 | wrap-ansi@7.0.0: 1446 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} 1447 | engines: {node: '>=10'} 1448 | 1449 | wrap-ansi@8.1.0: 1450 | resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} 1451 | engines: {node: '>=12'} 1452 | 1453 | yallist@4.0.0: 1454 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} 1455 | 1456 | yargs-parser@20.2.9: 1457 | resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} 1458 | engines: {node: '>=10'} 1459 | 1460 | yocto-queue@0.1.0: 1461 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 1462 | engines: {node: '>=10'} 1463 | 1464 | snapshots: 1465 | 1466 | '@adobe/css-tools@4.4.2': {} 1467 | 1468 | '@babel/code-frame@7.26.2': 1469 | dependencies: 1470 | '@babel/helper-validator-identifier': 7.25.9 1471 | js-tokens: 4.0.0 1472 | picocolors: 1.1.1 1473 | 1474 | '@babel/helper-validator-identifier@7.25.9': {} 1475 | 1476 | '@esbuild/aix-ppc64@0.24.2': 1477 | optional: true 1478 | 1479 | '@esbuild/android-arm64@0.24.2': 1480 | optional: true 1481 | 1482 | '@esbuild/android-arm@0.24.2': 1483 | optional: true 1484 | 1485 | '@esbuild/android-x64@0.24.2': 1486 | optional: true 1487 | 1488 | '@esbuild/darwin-arm64@0.24.2': 1489 | optional: true 1490 | 1491 | '@esbuild/darwin-x64@0.24.2': 1492 | optional: true 1493 | 1494 | '@esbuild/freebsd-arm64@0.24.2': 1495 | optional: true 1496 | 1497 | '@esbuild/freebsd-x64@0.24.2': 1498 | optional: true 1499 | 1500 | '@esbuild/linux-arm64@0.24.2': 1501 | optional: true 1502 | 1503 | '@esbuild/linux-arm@0.24.2': 1504 | optional: true 1505 | 1506 | '@esbuild/linux-ia32@0.24.2': 1507 | optional: true 1508 | 1509 | '@esbuild/linux-loong64@0.24.2': 1510 | optional: true 1511 | 1512 | '@esbuild/linux-mips64el@0.24.2': 1513 | optional: true 1514 | 1515 | '@esbuild/linux-ppc64@0.24.2': 1516 | optional: true 1517 | 1518 | '@esbuild/linux-riscv64@0.24.2': 1519 | optional: true 1520 | 1521 | '@esbuild/linux-s390x@0.24.2': 1522 | optional: true 1523 | 1524 | '@esbuild/linux-x64@0.24.2': 1525 | optional: true 1526 | 1527 | '@esbuild/netbsd-arm64@0.24.2': 1528 | optional: true 1529 | 1530 | '@esbuild/netbsd-x64@0.24.2': 1531 | optional: true 1532 | 1533 | '@esbuild/openbsd-arm64@0.24.2': 1534 | optional: true 1535 | 1536 | '@esbuild/openbsd-x64@0.24.2': 1537 | optional: true 1538 | 1539 | '@esbuild/sunos-x64@0.24.2': 1540 | optional: true 1541 | 1542 | '@esbuild/win32-arm64@0.24.2': 1543 | optional: true 1544 | 1545 | '@esbuild/win32-ia32@0.24.2': 1546 | optional: true 1547 | 1548 | '@esbuild/win32-x64@0.24.2': 1549 | optional: true 1550 | 1551 | '@eslint-community/eslint-utils@4.4.1(eslint@9.21.0)': 1552 | dependencies: 1553 | eslint: 9.21.0 1554 | eslint-visitor-keys: 3.4.3 1555 | 1556 | '@eslint-community/regexpp@4.12.1': {} 1557 | 1558 | '@eslint/config-array@0.19.2': 1559 | dependencies: 1560 | '@eslint/object-schema': 2.1.6 1561 | debug: 4.4.0 1562 | minimatch: 3.1.2 1563 | transitivePeerDependencies: 1564 | - supports-color 1565 | 1566 | '@eslint/core@0.12.0': 1567 | dependencies: 1568 | '@types/json-schema': 7.0.15 1569 | 1570 | '@eslint/eslintrc@3.3.0': 1571 | dependencies: 1572 | ajv: 6.12.6 1573 | debug: 4.4.0 1574 | espree: 10.3.0 1575 | globals: 14.0.0 1576 | ignore: 5.3.2 1577 | import-fresh: 3.3.1 1578 | js-yaml: 4.1.0 1579 | minimatch: 3.1.2 1580 | strip-json-comments: 3.1.1 1581 | transitivePeerDependencies: 1582 | - supports-color 1583 | 1584 | '@eslint/js@9.21.0': {} 1585 | 1586 | '@eslint/object-schema@2.1.6': {} 1587 | 1588 | '@eslint/plugin-kit@0.2.7': 1589 | dependencies: 1590 | '@eslint/core': 0.12.0 1591 | levn: 0.4.1 1592 | 1593 | '@humanfs/core@0.19.1': {} 1594 | 1595 | '@humanfs/node@0.16.6': 1596 | dependencies: 1597 | '@humanfs/core': 0.19.1 1598 | '@humanwhocodes/retry': 0.3.1 1599 | 1600 | '@humanwhocodes/module-importer@1.0.1': {} 1601 | 1602 | '@humanwhocodes/retry@0.3.1': {} 1603 | 1604 | '@humanwhocodes/retry@0.4.2': {} 1605 | 1606 | '@isaacs/cliui@8.0.2': 1607 | dependencies: 1608 | string-width: 5.1.2 1609 | string-width-cjs: string-width@4.2.3 1610 | strip-ansi: 7.1.0 1611 | strip-ansi-cjs: strip-ansi@6.0.1 1612 | wrap-ansi: 8.1.0 1613 | wrap-ansi-cjs: wrap-ansi@7.0.0 1614 | 1615 | '@jridgewell/gen-mapping@0.3.8': 1616 | dependencies: 1617 | '@jridgewell/set-array': 1.2.1 1618 | '@jridgewell/sourcemap-codec': 1.5.0 1619 | '@jridgewell/trace-mapping': 0.3.25 1620 | 1621 | '@jridgewell/resolve-uri@3.1.2': {} 1622 | 1623 | '@jridgewell/set-array@1.2.1': {} 1624 | 1625 | '@jridgewell/sourcemap-codec@1.5.0': {} 1626 | 1627 | '@jridgewell/trace-mapping@0.3.25': 1628 | dependencies: 1629 | '@jridgewell/resolve-uri': 3.1.2 1630 | '@jridgewell/sourcemap-codec': 1.5.0 1631 | 1632 | '@nodelib/fs.scandir@2.1.5': 1633 | dependencies: 1634 | '@nodelib/fs.stat': 2.0.5 1635 | run-parallel: 1.2.0 1636 | 1637 | '@nodelib/fs.stat@2.0.5': {} 1638 | 1639 | '@nodelib/fs.walk@1.2.8': 1640 | dependencies: 1641 | '@nodelib/fs.scandir': 2.1.5 1642 | fastq: 1.19.0 1643 | 1644 | '@pkgjs/parseargs@0.11.0': 1645 | optional: true 1646 | 1647 | '@rollup/rollup-android-arm-eabi@4.34.8': 1648 | optional: true 1649 | 1650 | '@rollup/rollup-android-arm64@4.34.8': 1651 | optional: true 1652 | 1653 | '@rollup/rollup-darwin-arm64@4.34.8': 1654 | optional: true 1655 | 1656 | '@rollup/rollup-darwin-x64@4.34.8': 1657 | optional: true 1658 | 1659 | '@rollup/rollup-freebsd-arm64@4.34.8': 1660 | optional: true 1661 | 1662 | '@rollup/rollup-freebsd-x64@4.34.8': 1663 | optional: true 1664 | 1665 | '@rollup/rollup-linux-arm-gnueabihf@4.34.8': 1666 | optional: true 1667 | 1668 | '@rollup/rollup-linux-arm-musleabihf@4.34.8': 1669 | optional: true 1670 | 1671 | '@rollup/rollup-linux-arm64-gnu@4.34.8': 1672 | optional: true 1673 | 1674 | '@rollup/rollup-linux-arm64-musl@4.34.8': 1675 | optional: true 1676 | 1677 | '@rollup/rollup-linux-loongarch64-gnu@4.34.8': 1678 | optional: true 1679 | 1680 | '@rollup/rollup-linux-powerpc64le-gnu@4.34.8': 1681 | optional: true 1682 | 1683 | '@rollup/rollup-linux-riscv64-gnu@4.34.8': 1684 | optional: true 1685 | 1686 | '@rollup/rollup-linux-s390x-gnu@4.34.8': 1687 | optional: true 1688 | 1689 | '@rollup/rollup-linux-x64-gnu@4.34.8': 1690 | optional: true 1691 | 1692 | '@rollup/rollup-linux-x64-musl@4.34.8': 1693 | optional: true 1694 | 1695 | '@rollup/rollup-win32-arm64-msvc@4.34.8': 1696 | optional: true 1697 | 1698 | '@rollup/rollup-win32-ia32-msvc@4.34.8': 1699 | optional: true 1700 | 1701 | '@rollup/rollup-win32-x64-msvc@4.34.8': 1702 | optional: true 1703 | 1704 | '@testing-library/jest-dom@6.6.3': 1705 | dependencies: 1706 | '@adobe/css-tools': 4.4.2 1707 | aria-query: 5.3.2 1708 | chalk: 3.0.0 1709 | css.escape: 1.5.1 1710 | dom-accessibility-api: 0.6.3 1711 | lodash: 4.17.21 1712 | redent: 3.0.0 1713 | 1714 | '@types/estree@1.0.6': {} 1715 | 1716 | '@types/json-schema@7.0.15': {} 1717 | 1718 | '@types/minimist@1.2.5': {} 1719 | 1720 | '@types/node@22.13.5': 1721 | dependencies: 1722 | undici-types: 6.20.0 1723 | 1724 | '@types/normalize-package-data@2.4.4': {} 1725 | 1726 | '@typescript-eslint/eslint-plugin@8.24.1(@typescript-eslint/parser@8.24.1(eslint@9.21.0)(typescript@5.7.3))(eslint@9.21.0)(typescript@5.7.3)': 1727 | dependencies: 1728 | '@eslint-community/regexpp': 4.12.1 1729 | '@typescript-eslint/parser': 8.24.1(eslint@9.21.0)(typescript@5.7.3) 1730 | '@typescript-eslint/scope-manager': 8.24.1 1731 | '@typescript-eslint/type-utils': 8.24.1(eslint@9.21.0)(typescript@5.7.3) 1732 | '@typescript-eslint/utils': 8.24.1(eslint@9.21.0)(typescript@5.7.3) 1733 | '@typescript-eslint/visitor-keys': 8.24.1 1734 | eslint: 9.21.0 1735 | graphemer: 1.4.0 1736 | ignore: 5.3.2 1737 | natural-compare: 1.4.0 1738 | ts-api-utils: 2.0.1(typescript@5.7.3) 1739 | typescript: 5.7.3 1740 | transitivePeerDependencies: 1741 | - supports-color 1742 | 1743 | '@typescript-eslint/parser@8.24.1(eslint@9.21.0)(typescript@5.7.3)': 1744 | dependencies: 1745 | '@typescript-eslint/scope-manager': 8.24.1 1746 | '@typescript-eslint/types': 8.24.1 1747 | '@typescript-eslint/typescript-estree': 8.24.1(typescript@5.7.3) 1748 | '@typescript-eslint/visitor-keys': 8.24.1 1749 | debug: 4.4.0 1750 | eslint: 9.21.0 1751 | typescript: 5.7.3 1752 | transitivePeerDependencies: 1753 | - supports-color 1754 | 1755 | '@typescript-eslint/scope-manager@8.24.1': 1756 | dependencies: 1757 | '@typescript-eslint/types': 8.24.1 1758 | '@typescript-eslint/visitor-keys': 8.24.1 1759 | 1760 | '@typescript-eslint/type-utils@8.24.1(eslint@9.21.0)(typescript@5.7.3)': 1761 | dependencies: 1762 | '@typescript-eslint/typescript-estree': 8.24.1(typescript@5.7.3) 1763 | '@typescript-eslint/utils': 8.24.1(eslint@9.21.0)(typescript@5.7.3) 1764 | debug: 4.4.0 1765 | eslint: 9.21.0 1766 | ts-api-utils: 2.0.1(typescript@5.7.3) 1767 | typescript: 5.7.3 1768 | transitivePeerDependencies: 1769 | - supports-color 1770 | 1771 | '@typescript-eslint/types@8.24.1': {} 1772 | 1773 | '@typescript-eslint/typescript-estree@8.24.1(typescript@5.7.3)': 1774 | dependencies: 1775 | '@typescript-eslint/types': 8.24.1 1776 | '@typescript-eslint/visitor-keys': 8.24.1 1777 | debug: 4.4.0 1778 | fast-glob: 3.3.3 1779 | is-glob: 4.0.3 1780 | minimatch: 9.0.5 1781 | semver: 7.7.1 1782 | ts-api-utils: 2.0.1(typescript@5.7.3) 1783 | typescript: 5.7.3 1784 | transitivePeerDependencies: 1785 | - supports-color 1786 | 1787 | '@typescript-eslint/utils@8.24.1(eslint@9.21.0)(typescript@5.7.3)': 1788 | dependencies: 1789 | '@eslint-community/eslint-utils': 4.4.1(eslint@9.21.0) 1790 | '@typescript-eslint/scope-manager': 8.24.1 1791 | '@typescript-eslint/types': 8.24.1 1792 | '@typescript-eslint/typescript-estree': 8.24.1(typescript@5.7.3) 1793 | eslint: 9.21.0 1794 | typescript: 5.7.3 1795 | transitivePeerDependencies: 1796 | - supports-color 1797 | 1798 | '@typescript-eslint/visitor-keys@8.24.1': 1799 | dependencies: 1800 | '@typescript-eslint/types': 8.24.1 1801 | eslint-visitor-keys: 4.2.0 1802 | 1803 | '@vitest/expect@3.0.6': 1804 | dependencies: 1805 | '@vitest/spy': 3.0.6 1806 | '@vitest/utils': 3.0.6 1807 | chai: 5.2.0 1808 | tinyrainbow: 2.0.0 1809 | 1810 | '@vitest/mocker@3.0.6(vite@6.1.1(@types/node@22.13.5))': 1811 | dependencies: 1812 | '@vitest/spy': 3.0.6 1813 | estree-walker: 3.0.3 1814 | magic-string: 0.30.17 1815 | optionalDependencies: 1816 | vite: 6.1.1(@types/node@22.13.5) 1817 | 1818 | '@vitest/pretty-format@3.0.6': 1819 | dependencies: 1820 | tinyrainbow: 2.0.0 1821 | 1822 | '@vitest/runner@3.0.6': 1823 | dependencies: 1824 | '@vitest/utils': 3.0.6 1825 | pathe: 2.0.3 1826 | 1827 | '@vitest/snapshot@3.0.6': 1828 | dependencies: 1829 | '@vitest/pretty-format': 3.0.6 1830 | magic-string: 0.30.17 1831 | pathe: 2.0.3 1832 | 1833 | '@vitest/spy@3.0.6': 1834 | dependencies: 1835 | tinyspy: 3.0.2 1836 | 1837 | '@vitest/utils@3.0.6': 1838 | dependencies: 1839 | '@vitest/pretty-format': 3.0.6 1840 | loupe: 3.1.3 1841 | tinyrainbow: 2.0.0 1842 | 1843 | acorn-jsx@5.3.2(acorn@8.14.0): 1844 | dependencies: 1845 | acorn: 8.14.0 1846 | 1847 | acorn@8.14.0: {} 1848 | 1849 | ajv@6.12.6: 1850 | dependencies: 1851 | fast-deep-equal: 3.1.3 1852 | fast-json-stable-stringify: 2.1.0 1853 | json-schema-traverse: 0.4.1 1854 | uri-js: 4.4.1 1855 | 1856 | ansi-regex@5.0.1: {} 1857 | 1858 | ansi-regex@6.1.0: {} 1859 | 1860 | ansi-styles@4.3.0: 1861 | dependencies: 1862 | color-convert: 2.0.1 1863 | 1864 | ansi-styles@6.2.1: {} 1865 | 1866 | any-promise@1.3.0: {} 1867 | 1868 | argparse@2.0.1: {} 1869 | 1870 | aria-query@5.3.2: {} 1871 | 1872 | arrify@1.0.1: {} 1873 | 1874 | assertion-error@2.0.1: {} 1875 | 1876 | balanced-match@1.0.2: {} 1877 | 1878 | brace-expansion@1.1.11: 1879 | dependencies: 1880 | balanced-match: 1.0.2 1881 | concat-map: 0.0.1 1882 | 1883 | brace-expansion@2.0.1: 1884 | dependencies: 1885 | balanced-match: 1.0.2 1886 | 1887 | braces@3.0.3: 1888 | dependencies: 1889 | fill-range: 7.1.1 1890 | 1891 | bundle-require@5.1.0(esbuild@0.24.2): 1892 | dependencies: 1893 | esbuild: 0.24.2 1894 | load-tsconfig: 0.2.5 1895 | 1896 | cac@6.7.14: {} 1897 | 1898 | callsites@3.1.0: {} 1899 | 1900 | camelcase-keys@7.0.2: 1901 | dependencies: 1902 | camelcase: 6.3.0 1903 | map-obj: 4.3.0 1904 | quick-lru: 5.1.1 1905 | type-fest: 1.4.0 1906 | 1907 | camelcase@6.3.0: {} 1908 | 1909 | chai@5.2.0: 1910 | dependencies: 1911 | assertion-error: 2.0.1 1912 | check-error: 2.1.1 1913 | deep-eql: 5.0.2 1914 | loupe: 3.1.3 1915 | pathval: 2.0.0 1916 | 1917 | chalk@3.0.0: 1918 | dependencies: 1919 | ansi-styles: 4.3.0 1920 | supports-color: 7.2.0 1921 | 1922 | chalk@4.1.2: 1923 | dependencies: 1924 | ansi-styles: 4.3.0 1925 | supports-color: 7.2.0 1926 | 1927 | check-error@2.1.1: {} 1928 | 1929 | chokidar@4.0.3: 1930 | dependencies: 1931 | readdirp: 4.1.2 1932 | 1933 | color-convert@2.0.1: 1934 | dependencies: 1935 | color-name: 1.1.4 1936 | 1937 | color-name@1.1.4: {} 1938 | 1939 | commander@4.1.1: {} 1940 | 1941 | concat-map@0.0.1: {} 1942 | 1943 | consola@3.4.0: {} 1944 | 1945 | cross-spawn@7.0.6: 1946 | dependencies: 1947 | path-key: 3.1.1 1948 | shebang-command: 2.0.0 1949 | which: 2.0.2 1950 | 1951 | css.escape@1.5.1: {} 1952 | 1953 | debug@4.4.0: 1954 | dependencies: 1955 | ms: 2.1.3 1956 | 1957 | decamelize-keys@1.1.1: 1958 | dependencies: 1959 | decamelize: 1.2.0 1960 | map-obj: 1.0.1 1961 | 1962 | decamelize@1.2.0: {} 1963 | 1964 | decamelize@5.0.1: {} 1965 | 1966 | deep-eql@5.0.2: {} 1967 | 1968 | deep-is@0.1.4: {} 1969 | 1970 | dom-accessibility-api@0.6.3: {} 1971 | 1972 | duplexer@0.1.2: {} 1973 | 1974 | eastasianwidth@0.2.0: {} 1975 | 1976 | emoji-regex@8.0.0: {} 1977 | 1978 | emoji-regex@9.2.2: {} 1979 | 1980 | error-ex@1.3.2: 1981 | dependencies: 1982 | is-arrayish: 0.2.1 1983 | 1984 | es-module-lexer@1.6.0: {} 1985 | 1986 | esbuild@0.24.2: 1987 | optionalDependencies: 1988 | '@esbuild/aix-ppc64': 0.24.2 1989 | '@esbuild/android-arm': 0.24.2 1990 | '@esbuild/android-arm64': 0.24.2 1991 | '@esbuild/android-x64': 0.24.2 1992 | '@esbuild/darwin-arm64': 0.24.2 1993 | '@esbuild/darwin-x64': 0.24.2 1994 | '@esbuild/freebsd-arm64': 0.24.2 1995 | '@esbuild/freebsd-x64': 0.24.2 1996 | '@esbuild/linux-arm': 0.24.2 1997 | '@esbuild/linux-arm64': 0.24.2 1998 | '@esbuild/linux-ia32': 0.24.2 1999 | '@esbuild/linux-loong64': 0.24.2 2000 | '@esbuild/linux-mips64el': 0.24.2 2001 | '@esbuild/linux-ppc64': 0.24.2 2002 | '@esbuild/linux-riscv64': 0.24.2 2003 | '@esbuild/linux-s390x': 0.24.2 2004 | '@esbuild/linux-x64': 0.24.2 2005 | '@esbuild/netbsd-arm64': 0.24.2 2006 | '@esbuild/netbsd-x64': 0.24.2 2007 | '@esbuild/openbsd-arm64': 0.24.2 2008 | '@esbuild/openbsd-x64': 0.24.2 2009 | '@esbuild/sunos-x64': 0.24.2 2010 | '@esbuild/win32-arm64': 0.24.2 2011 | '@esbuild/win32-ia32': 0.24.2 2012 | '@esbuild/win32-x64': 0.24.2 2013 | 2014 | escape-string-regexp@4.0.0: {} 2015 | 2016 | eslint-scope@8.2.0: 2017 | dependencies: 2018 | esrecurse: 4.3.0 2019 | estraverse: 5.3.0 2020 | 2021 | eslint-visitor-keys@3.4.3: {} 2022 | 2023 | eslint-visitor-keys@4.2.0: {} 2024 | 2025 | eslint@9.21.0: 2026 | dependencies: 2027 | '@eslint-community/eslint-utils': 4.4.1(eslint@9.21.0) 2028 | '@eslint-community/regexpp': 4.12.1 2029 | '@eslint/config-array': 0.19.2 2030 | '@eslint/core': 0.12.0 2031 | '@eslint/eslintrc': 3.3.0 2032 | '@eslint/js': 9.21.0 2033 | '@eslint/plugin-kit': 0.2.7 2034 | '@humanfs/node': 0.16.6 2035 | '@humanwhocodes/module-importer': 1.0.1 2036 | '@humanwhocodes/retry': 0.4.2 2037 | '@types/estree': 1.0.6 2038 | '@types/json-schema': 7.0.15 2039 | ajv: 6.12.6 2040 | chalk: 4.1.2 2041 | cross-spawn: 7.0.6 2042 | debug: 4.4.0 2043 | escape-string-regexp: 4.0.0 2044 | eslint-scope: 8.2.0 2045 | eslint-visitor-keys: 4.2.0 2046 | espree: 10.3.0 2047 | esquery: 1.6.0 2048 | esutils: 2.0.3 2049 | fast-deep-equal: 3.1.3 2050 | file-entry-cache: 8.0.0 2051 | find-up: 5.0.0 2052 | glob-parent: 6.0.2 2053 | ignore: 5.3.2 2054 | imurmurhash: 0.1.4 2055 | is-glob: 4.0.3 2056 | json-stable-stringify-without-jsonify: 1.0.1 2057 | lodash.merge: 4.6.2 2058 | minimatch: 3.1.2 2059 | natural-compare: 1.4.0 2060 | optionator: 0.9.4 2061 | transitivePeerDependencies: 2062 | - supports-color 2063 | 2064 | espree@10.3.0: 2065 | dependencies: 2066 | acorn: 8.14.0 2067 | acorn-jsx: 5.3.2(acorn@8.14.0) 2068 | eslint-visitor-keys: 4.2.0 2069 | 2070 | esquery@1.6.0: 2071 | dependencies: 2072 | estraverse: 5.3.0 2073 | 2074 | esrecurse@4.3.0: 2075 | dependencies: 2076 | estraverse: 5.3.0 2077 | 2078 | estraverse@5.3.0: {} 2079 | 2080 | estree-walker@3.0.3: 2081 | dependencies: 2082 | '@types/estree': 1.0.6 2083 | 2084 | esutils@2.0.3: {} 2085 | 2086 | expect-type@1.1.0: {} 2087 | 2088 | fast-deep-equal@3.1.3: {} 2089 | 2090 | fast-glob@3.3.3: 2091 | dependencies: 2092 | '@nodelib/fs.stat': 2.0.5 2093 | '@nodelib/fs.walk': 1.2.8 2094 | glob-parent: 5.1.2 2095 | merge2: 1.4.1 2096 | micromatch: 4.0.8 2097 | 2098 | fast-json-stable-stringify@2.1.0: {} 2099 | 2100 | fast-levenshtein@2.0.6: {} 2101 | 2102 | fastq@1.19.0: 2103 | dependencies: 2104 | reusify: 1.0.4 2105 | 2106 | fdir@6.4.3(picomatch@4.0.2): 2107 | optionalDependencies: 2108 | picomatch: 4.0.2 2109 | 2110 | file-entry-cache@8.0.0: 2111 | dependencies: 2112 | flat-cache: 4.0.1 2113 | 2114 | fill-range@7.1.1: 2115 | dependencies: 2116 | to-regex-range: 5.0.1 2117 | 2118 | find-up@5.0.0: 2119 | dependencies: 2120 | locate-path: 6.0.0 2121 | path-exists: 4.0.0 2122 | 2123 | flat-cache@4.0.1: 2124 | dependencies: 2125 | flatted: 3.3.3 2126 | keyv: 4.5.4 2127 | 2128 | flatted@3.3.3: {} 2129 | 2130 | foreground-child@3.3.0: 2131 | dependencies: 2132 | cross-spawn: 7.0.6 2133 | signal-exit: 4.1.0 2134 | 2135 | fsevents@2.3.3: 2136 | optional: true 2137 | 2138 | function-bind@1.1.2: {} 2139 | 2140 | get-stdin@9.0.0: {} 2141 | 2142 | glob-parent@5.1.2: 2143 | dependencies: 2144 | is-glob: 4.0.3 2145 | 2146 | glob-parent@6.0.2: 2147 | dependencies: 2148 | is-glob: 4.0.3 2149 | 2150 | glob@10.4.5: 2151 | dependencies: 2152 | foreground-child: 3.3.0 2153 | jackspeak: 3.4.3 2154 | minimatch: 9.0.5 2155 | minipass: 7.1.2 2156 | package-json-from-dist: 1.0.1 2157 | path-scurry: 1.11.1 2158 | 2159 | globals@14.0.0: {} 2160 | 2161 | globals@15.15.0: {} 2162 | 2163 | graphemer@1.4.0: {} 2164 | 2165 | gzip-size-cli@5.1.0: 2166 | dependencies: 2167 | chalk: 4.1.2 2168 | get-stdin: 9.0.0 2169 | gzip-size: 7.0.0 2170 | meow: 10.1.5 2171 | pretty-bytes: 5.6.0 2172 | 2173 | gzip-size@7.0.0: 2174 | dependencies: 2175 | duplexer: 0.1.2 2176 | 2177 | hard-rejection@2.1.0: {} 2178 | 2179 | has-flag@4.0.0: {} 2180 | 2181 | hasown@2.0.2: 2182 | dependencies: 2183 | function-bind: 1.1.2 2184 | 2185 | hosted-git-info@4.1.0: 2186 | dependencies: 2187 | lru-cache: 6.0.0 2188 | 2189 | ignore@5.3.2: {} 2190 | 2191 | import-fresh@3.3.1: 2192 | dependencies: 2193 | parent-module: 1.0.1 2194 | resolve-from: 4.0.0 2195 | 2196 | imurmurhash@0.1.4: {} 2197 | 2198 | indent-string@4.0.0: {} 2199 | 2200 | indent-string@5.0.0: {} 2201 | 2202 | is-arrayish@0.2.1: {} 2203 | 2204 | is-core-module@2.16.1: 2205 | dependencies: 2206 | hasown: 2.0.2 2207 | 2208 | is-extglob@2.1.1: {} 2209 | 2210 | is-fullwidth-code-point@3.0.0: {} 2211 | 2212 | is-glob@4.0.3: 2213 | dependencies: 2214 | is-extglob: 2.1.1 2215 | 2216 | is-number@7.0.0: {} 2217 | 2218 | is-plain-obj@1.1.0: {} 2219 | 2220 | isexe@2.0.0: {} 2221 | 2222 | jackspeak@3.4.3: 2223 | dependencies: 2224 | '@isaacs/cliui': 8.0.2 2225 | optionalDependencies: 2226 | '@pkgjs/parseargs': 0.11.0 2227 | 2228 | joycon@3.1.1: {} 2229 | 2230 | js-tokens@4.0.0: {} 2231 | 2232 | js-yaml@4.1.0: 2233 | dependencies: 2234 | argparse: 2.0.1 2235 | 2236 | json-buffer@3.0.1: {} 2237 | 2238 | json-parse-even-better-errors@2.3.1: {} 2239 | 2240 | json-schema-traverse@0.4.1: {} 2241 | 2242 | json-stable-stringify-without-jsonify@1.0.1: {} 2243 | 2244 | keyv@4.5.4: 2245 | dependencies: 2246 | json-buffer: 3.0.1 2247 | 2248 | kind-of@6.0.3: {} 2249 | 2250 | levn@0.4.1: 2251 | dependencies: 2252 | prelude-ls: 1.2.1 2253 | type-check: 0.4.0 2254 | 2255 | lilconfig@3.1.3: {} 2256 | 2257 | lines-and-columns@1.2.4: {} 2258 | 2259 | load-tsconfig@0.2.5: {} 2260 | 2261 | locate-path@6.0.0: 2262 | dependencies: 2263 | p-locate: 5.0.0 2264 | 2265 | lodash.merge@4.6.2: {} 2266 | 2267 | lodash.sortby@4.7.0: {} 2268 | 2269 | lodash@4.17.21: {} 2270 | 2271 | loupe@3.1.3: {} 2272 | 2273 | lru-cache@10.4.3: {} 2274 | 2275 | lru-cache@6.0.0: 2276 | dependencies: 2277 | yallist: 4.0.0 2278 | 2279 | magic-string@0.30.17: 2280 | dependencies: 2281 | '@jridgewell/sourcemap-codec': 1.5.0 2282 | 2283 | map-obj@1.0.1: {} 2284 | 2285 | map-obj@4.3.0: {} 2286 | 2287 | meow@10.1.5: 2288 | dependencies: 2289 | '@types/minimist': 1.2.5 2290 | camelcase-keys: 7.0.2 2291 | decamelize: 5.0.1 2292 | decamelize-keys: 1.1.1 2293 | hard-rejection: 2.1.0 2294 | minimist-options: 4.1.0 2295 | normalize-package-data: 3.0.3 2296 | read-pkg-up: 8.0.0 2297 | redent: 4.0.0 2298 | trim-newlines: 4.1.1 2299 | type-fest: 1.4.0 2300 | yargs-parser: 20.2.9 2301 | 2302 | merge2@1.4.1: {} 2303 | 2304 | micromatch@4.0.8: 2305 | dependencies: 2306 | braces: 3.0.3 2307 | picomatch: 2.3.1 2308 | 2309 | min-indent@1.0.1: {} 2310 | 2311 | minimatch@3.1.2: 2312 | dependencies: 2313 | brace-expansion: 1.1.11 2314 | 2315 | minimatch@9.0.5: 2316 | dependencies: 2317 | brace-expansion: 2.0.1 2318 | 2319 | minimist-options@4.1.0: 2320 | dependencies: 2321 | arrify: 1.0.1 2322 | is-plain-obj: 1.1.0 2323 | kind-of: 6.0.3 2324 | 2325 | minipass@7.1.2: {} 2326 | 2327 | ms@2.1.3: {} 2328 | 2329 | mz@2.7.0: 2330 | dependencies: 2331 | any-promise: 1.3.0 2332 | object-assign: 4.1.1 2333 | thenify-all: 1.6.0 2334 | 2335 | nanoid@3.3.8: {} 2336 | 2337 | natural-compare@1.4.0: {} 2338 | 2339 | normalize-package-data@3.0.3: 2340 | dependencies: 2341 | hosted-git-info: 4.1.0 2342 | is-core-module: 2.16.1 2343 | semver: 7.7.1 2344 | validate-npm-package-license: 3.0.4 2345 | 2346 | object-assign@4.1.1: {} 2347 | 2348 | optionator@0.9.4: 2349 | dependencies: 2350 | deep-is: 0.1.4 2351 | fast-levenshtein: 2.0.6 2352 | levn: 0.4.1 2353 | prelude-ls: 1.2.1 2354 | type-check: 0.4.0 2355 | word-wrap: 1.2.5 2356 | 2357 | p-limit@3.1.0: 2358 | dependencies: 2359 | yocto-queue: 0.1.0 2360 | 2361 | p-locate@5.0.0: 2362 | dependencies: 2363 | p-limit: 3.1.0 2364 | 2365 | package-json-from-dist@1.0.1: {} 2366 | 2367 | parent-module@1.0.1: 2368 | dependencies: 2369 | callsites: 3.1.0 2370 | 2371 | parse-json@5.2.0: 2372 | dependencies: 2373 | '@babel/code-frame': 7.26.2 2374 | error-ex: 1.3.2 2375 | json-parse-even-better-errors: 2.3.1 2376 | lines-and-columns: 1.2.4 2377 | 2378 | path-exists@4.0.0: {} 2379 | 2380 | path-key@3.1.1: {} 2381 | 2382 | path-scurry@1.11.1: 2383 | dependencies: 2384 | lru-cache: 10.4.3 2385 | minipass: 7.1.2 2386 | 2387 | pathe@2.0.3: {} 2388 | 2389 | pathval@2.0.0: {} 2390 | 2391 | picocolors@1.1.1: {} 2392 | 2393 | picomatch@2.3.1: {} 2394 | 2395 | picomatch@4.0.2: {} 2396 | 2397 | pirates@4.0.6: {} 2398 | 2399 | postcss-load-config@6.0.1(postcss@8.5.3): 2400 | dependencies: 2401 | lilconfig: 3.1.3 2402 | optionalDependencies: 2403 | postcss: 8.5.3 2404 | 2405 | postcss@8.5.3: 2406 | dependencies: 2407 | nanoid: 3.3.8 2408 | picocolors: 1.1.1 2409 | source-map-js: 1.2.1 2410 | 2411 | prelude-ls@1.2.1: {} 2412 | 2413 | prettier@3.5.2: {} 2414 | 2415 | pretty-bytes@5.6.0: {} 2416 | 2417 | punycode@2.3.1: {} 2418 | 2419 | queue-microtask@1.2.3: {} 2420 | 2421 | quick-lru@5.1.1: {} 2422 | 2423 | read-pkg-up@8.0.0: 2424 | dependencies: 2425 | find-up: 5.0.0 2426 | read-pkg: 6.0.0 2427 | type-fest: 1.4.0 2428 | 2429 | read-pkg@6.0.0: 2430 | dependencies: 2431 | '@types/normalize-package-data': 2.4.4 2432 | normalize-package-data: 3.0.3 2433 | parse-json: 5.2.0 2434 | type-fest: 1.4.0 2435 | 2436 | readdirp@4.1.2: {} 2437 | 2438 | redent@3.0.0: 2439 | dependencies: 2440 | indent-string: 4.0.0 2441 | strip-indent: 3.0.0 2442 | 2443 | redent@4.0.0: 2444 | dependencies: 2445 | indent-string: 5.0.0 2446 | strip-indent: 4.0.0 2447 | 2448 | resolve-from@4.0.0: {} 2449 | 2450 | resolve-from@5.0.0: {} 2451 | 2452 | reusify@1.0.4: {} 2453 | 2454 | rollup@4.34.8: 2455 | dependencies: 2456 | '@types/estree': 1.0.6 2457 | optionalDependencies: 2458 | '@rollup/rollup-android-arm-eabi': 4.34.8 2459 | '@rollup/rollup-android-arm64': 4.34.8 2460 | '@rollup/rollup-darwin-arm64': 4.34.8 2461 | '@rollup/rollup-darwin-x64': 4.34.8 2462 | '@rollup/rollup-freebsd-arm64': 4.34.8 2463 | '@rollup/rollup-freebsd-x64': 4.34.8 2464 | '@rollup/rollup-linux-arm-gnueabihf': 4.34.8 2465 | '@rollup/rollup-linux-arm-musleabihf': 4.34.8 2466 | '@rollup/rollup-linux-arm64-gnu': 4.34.8 2467 | '@rollup/rollup-linux-arm64-musl': 4.34.8 2468 | '@rollup/rollup-linux-loongarch64-gnu': 4.34.8 2469 | '@rollup/rollup-linux-powerpc64le-gnu': 4.34.8 2470 | '@rollup/rollup-linux-riscv64-gnu': 4.34.8 2471 | '@rollup/rollup-linux-s390x-gnu': 4.34.8 2472 | '@rollup/rollup-linux-x64-gnu': 4.34.8 2473 | '@rollup/rollup-linux-x64-musl': 4.34.8 2474 | '@rollup/rollup-win32-arm64-msvc': 4.34.8 2475 | '@rollup/rollup-win32-ia32-msvc': 4.34.8 2476 | '@rollup/rollup-win32-x64-msvc': 4.34.8 2477 | fsevents: 2.3.3 2478 | 2479 | run-parallel@1.2.0: 2480 | dependencies: 2481 | queue-microtask: 1.2.3 2482 | 2483 | semver@7.7.1: {} 2484 | 2485 | shebang-command@2.0.0: 2486 | dependencies: 2487 | shebang-regex: 3.0.0 2488 | 2489 | shebang-regex@3.0.0: {} 2490 | 2491 | siginfo@2.0.0: {} 2492 | 2493 | signal-exit@4.1.0: {} 2494 | 2495 | source-map-js@1.2.1: {} 2496 | 2497 | source-map@0.8.0-beta.0: 2498 | dependencies: 2499 | whatwg-url: 7.1.0 2500 | 2501 | spdx-correct@3.2.0: 2502 | dependencies: 2503 | spdx-expression-parse: 3.0.1 2504 | spdx-license-ids: 3.0.21 2505 | 2506 | spdx-exceptions@2.5.0: {} 2507 | 2508 | spdx-expression-parse@3.0.1: 2509 | dependencies: 2510 | spdx-exceptions: 2.5.0 2511 | spdx-license-ids: 3.0.21 2512 | 2513 | spdx-license-ids@3.0.21: {} 2514 | 2515 | stackback@0.0.2: {} 2516 | 2517 | std-env@3.8.0: {} 2518 | 2519 | string-width@4.2.3: 2520 | dependencies: 2521 | emoji-regex: 8.0.0 2522 | is-fullwidth-code-point: 3.0.0 2523 | strip-ansi: 6.0.1 2524 | 2525 | string-width@5.1.2: 2526 | dependencies: 2527 | eastasianwidth: 0.2.0 2528 | emoji-regex: 9.2.2 2529 | strip-ansi: 7.1.0 2530 | 2531 | strip-ansi@6.0.1: 2532 | dependencies: 2533 | ansi-regex: 5.0.1 2534 | 2535 | strip-ansi@7.1.0: 2536 | dependencies: 2537 | ansi-regex: 6.1.0 2538 | 2539 | strip-indent@3.0.0: 2540 | dependencies: 2541 | min-indent: 1.0.1 2542 | 2543 | strip-indent@4.0.0: 2544 | dependencies: 2545 | min-indent: 1.0.1 2546 | 2547 | strip-json-comments@3.1.1: {} 2548 | 2549 | sucrase@3.35.0: 2550 | dependencies: 2551 | '@jridgewell/gen-mapping': 0.3.8 2552 | commander: 4.1.1 2553 | glob: 10.4.5 2554 | lines-and-columns: 1.2.4 2555 | mz: 2.7.0 2556 | pirates: 4.0.6 2557 | ts-interface-checker: 0.1.13 2558 | 2559 | supports-color@7.2.0: 2560 | dependencies: 2561 | has-flag: 4.0.0 2562 | 2563 | thenify-all@1.6.0: 2564 | dependencies: 2565 | thenify: 3.3.1 2566 | 2567 | thenify@3.3.1: 2568 | dependencies: 2569 | any-promise: 1.3.0 2570 | 2571 | tinybench@2.9.0: {} 2572 | 2573 | tinyexec@0.3.2: {} 2574 | 2575 | tinyglobby@0.2.12: 2576 | dependencies: 2577 | fdir: 6.4.3(picomatch@4.0.2) 2578 | picomatch: 4.0.2 2579 | 2580 | tinypool@1.0.2: {} 2581 | 2582 | tinyrainbow@2.0.0: {} 2583 | 2584 | tinyspy@3.0.2: {} 2585 | 2586 | to-regex-range@5.0.1: 2587 | dependencies: 2588 | is-number: 7.0.0 2589 | 2590 | tr46@1.0.1: 2591 | dependencies: 2592 | punycode: 2.3.1 2593 | 2594 | tree-kill@1.2.2: {} 2595 | 2596 | trim-newlines@4.1.1: {} 2597 | 2598 | ts-api-utils@2.0.1(typescript@5.7.3): 2599 | dependencies: 2600 | typescript: 5.7.3 2601 | 2602 | ts-interface-checker@0.1.13: {} 2603 | 2604 | tslib@2.8.1: {} 2605 | 2606 | tsup@8.3.6(postcss@8.5.3)(typescript@5.7.3): 2607 | dependencies: 2608 | bundle-require: 5.1.0(esbuild@0.24.2) 2609 | cac: 6.7.14 2610 | chokidar: 4.0.3 2611 | consola: 3.4.0 2612 | debug: 4.4.0 2613 | esbuild: 0.24.2 2614 | joycon: 3.1.1 2615 | picocolors: 1.1.1 2616 | postcss-load-config: 6.0.1(postcss@8.5.3) 2617 | resolve-from: 5.0.0 2618 | rollup: 4.34.8 2619 | source-map: 0.8.0-beta.0 2620 | sucrase: 3.35.0 2621 | tinyexec: 0.3.2 2622 | tinyglobby: 0.2.12 2623 | tree-kill: 1.2.2 2624 | optionalDependencies: 2625 | postcss: 8.5.3 2626 | typescript: 5.7.3 2627 | transitivePeerDependencies: 2628 | - jiti 2629 | - supports-color 2630 | - tsx 2631 | - yaml 2632 | 2633 | type-check@0.4.0: 2634 | dependencies: 2635 | prelude-ls: 1.2.1 2636 | 2637 | type-fest@1.4.0: {} 2638 | 2639 | typescript-eslint@8.24.1(eslint@9.21.0)(typescript@5.7.3): 2640 | dependencies: 2641 | '@typescript-eslint/eslint-plugin': 8.24.1(@typescript-eslint/parser@8.24.1(eslint@9.21.0)(typescript@5.7.3))(eslint@9.21.0)(typescript@5.7.3) 2642 | '@typescript-eslint/parser': 8.24.1(eslint@9.21.0)(typescript@5.7.3) 2643 | '@typescript-eslint/utils': 8.24.1(eslint@9.21.0)(typescript@5.7.3) 2644 | eslint: 9.21.0 2645 | typescript: 5.7.3 2646 | transitivePeerDependencies: 2647 | - supports-color 2648 | 2649 | typescript@5.7.3: {} 2650 | 2651 | undici-types@6.20.0: {} 2652 | 2653 | uri-js@4.4.1: 2654 | dependencies: 2655 | punycode: 2.3.1 2656 | 2657 | validate-npm-package-license@3.0.4: 2658 | dependencies: 2659 | spdx-correct: 3.2.0 2660 | spdx-expression-parse: 3.0.1 2661 | 2662 | vite-node@3.0.6(@types/node@22.13.5): 2663 | dependencies: 2664 | cac: 6.7.14 2665 | debug: 4.4.0 2666 | es-module-lexer: 1.6.0 2667 | pathe: 2.0.3 2668 | vite: 6.1.1(@types/node@22.13.5) 2669 | transitivePeerDependencies: 2670 | - '@types/node' 2671 | - jiti 2672 | - less 2673 | - lightningcss 2674 | - sass 2675 | - sass-embedded 2676 | - stylus 2677 | - sugarss 2678 | - supports-color 2679 | - terser 2680 | - tsx 2681 | - yaml 2682 | 2683 | vite@6.1.1(@types/node@22.13.5): 2684 | dependencies: 2685 | esbuild: 0.24.2 2686 | postcss: 8.5.3 2687 | rollup: 4.34.8 2688 | optionalDependencies: 2689 | '@types/node': 22.13.5 2690 | fsevents: 2.3.3 2691 | 2692 | vitest@3.0.6(@types/node@22.13.5): 2693 | dependencies: 2694 | '@vitest/expect': 3.0.6 2695 | '@vitest/mocker': 3.0.6(vite@6.1.1(@types/node@22.13.5)) 2696 | '@vitest/pretty-format': 3.0.6 2697 | '@vitest/runner': 3.0.6 2698 | '@vitest/snapshot': 3.0.6 2699 | '@vitest/spy': 3.0.6 2700 | '@vitest/utils': 3.0.6 2701 | chai: 5.2.0 2702 | debug: 4.4.0 2703 | expect-type: 1.1.0 2704 | magic-string: 0.30.17 2705 | pathe: 2.0.3 2706 | std-env: 3.8.0 2707 | tinybench: 2.9.0 2708 | tinyexec: 0.3.2 2709 | tinypool: 1.0.2 2710 | tinyrainbow: 2.0.0 2711 | vite: 6.1.1(@types/node@22.13.5) 2712 | vite-node: 3.0.6(@types/node@22.13.5) 2713 | why-is-node-running: 2.3.0 2714 | optionalDependencies: 2715 | '@types/node': 22.13.5 2716 | transitivePeerDependencies: 2717 | - jiti 2718 | - less 2719 | - lightningcss 2720 | - msw 2721 | - sass 2722 | - sass-embedded 2723 | - stylus 2724 | - sugarss 2725 | - supports-color 2726 | - terser 2727 | - tsx 2728 | - yaml 2729 | 2730 | webidl-conversions@4.0.2: {} 2731 | 2732 | whatwg-url@7.1.0: 2733 | dependencies: 2734 | lodash.sortby: 4.7.0 2735 | tr46: 1.0.1 2736 | webidl-conversions: 4.0.2 2737 | 2738 | which@2.0.2: 2739 | dependencies: 2740 | isexe: 2.0.0 2741 | 2742 | why-is-node-running@2.3.0: 2743 | dependencies: 2744 | siginfo: 2.0.0 2745 | stackback: 0.0.2 2746 | 2747 | word-wrap@1.2.5: {} 2748 | 2749 | wrap-ansi@7.0.0: 2750 | dependencies: 2751 | ansi-styles: 4.3.0 2752 | string-width: 4.2.3 2753 | strip-ansi: 6.0.1 2754 | 2755 | wrap-ansi@8.1.0: 2756 | dependencies: 2757 | ansi-styles: 6.2.1 2758 | string-width: 5.1.2 2759 | strip-ansi: 7.1.0 2760 | 2761 | yallist@4.0.0: {} 2762 | 2763 | yargs-parser@20.2.9: {} 2764 | 2765 | yocto-queue@0.1.0: {} 2766 | --------------------------------------------------------------------------------