├── .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 |
--------------------------------------------------------------------------------