diff --git a/.nvmrc b/.nvmrc index b4040276..8a94b991 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -24.8.0 +26.10.0 diff --git a/docs/reference/functions/compareDeep.md b/docs/reference/functions/compareDeep.md new file mode 100644 index 00000000..5eb22e5a --- /dev/null +++ b/docs/reference/functions/compareDeep.md @@ -0,0 +1,30 @@ +--- +id: compareDeep +title: compareDeep +--- + +```ts +function compareDeep(objA, objB): boolean; +``` + +Defined in: [compare.ts:5](https://github.com/TanStack/store/blob/main/packages/store/src/compare.ts#L5) + +## Type Parameters + +### T + +`T` + +## Parameters + +### objA + +`T` + +### objB + +`T` + +## Returns + +`boolean` diff --git a/docs/reference/functions/compareShallow.md b/docs/reference/functions/compareShallow.md new file mode 100644 index 00000000..cf0fd2cf --- /dev/null +++ b/docs/reference/functions/compareShallow.md @@ -0,0 +1,30 @@ +--- +id: compareShallow +title: compareShallow +--- + +```ts +function compareShallow(objA, objB): boolean; +``` + +Defined in: [compare.ts:1](https://github.com/TanStack/store/blob/main/packages/store/src/compare.ts#L1) + +## Type Parameters + +### T + +`T` + +## Parameters + +### objA + +`T` + +### objB + +`T` + +## Returns + +`boolean` diff --git a/docs/reference/index.md b/docs/reference/index.md index 9ef00a64..bb4a3b91 100644 --- a/docs/reference/index.md +++ b/docs/reference/index.md @@ -33,6 +33,8 @@ title: "@tanstack/store" ## Functions - [batch](functions/batch.md) +- [compareDeep](functions/compareDeep.md) +- [compareShallow](functions/compareShallow.md) - [createAsyncAtom](functions/createAsyncAtom.md) - [createAtom](functions/createAtom.md) - [createStore](functions/createStore.md) diff --git a/package.json b/package.json index 911c1685..5e84871a 100644 --- a/package.json +++ b/package.json @@ -49,7 +49,7 @@ "@tanstack/typedoc-config": "0.3.3", "@testing-library/jest-dom": "^6.9.1", "@testing-library/user-event": "^14.6.1", - "@types/node": "^25.6.0", + "@types/node": "^26.6.0", "@vitest/coverage-istanbul": "^4.1.4", "eslint": "^10.2.0", "eslint-plugin-react-hooks": "^7.0.1", diff --git a/packages/react-store/tests/index.test.tsx b/packages/react-store/tests/index.test.tsx index 5f36579b..ac9169ba 100644 --- a/packages/react-store/tests/index.test.tsx +++ b/packages/react-store/tests/index.test.tsx @@ -11,8 +11,8 @@ import { describe, expect, it, test, vi } from 'vitest' import { createAtom, createStore } from '@tanstack/store' import { _useStore, + compareShallow, createStoreContext, - shallow, useAtom, useCreateAtom, useCreateStore, @@ -748,66 +748,66 @@ describe('shallow', () => { test('should return true for shallowly equal objects', () => { const objA = { a: 1, b: 'hello' } const objB = { a: 1, b: 'hello' } - expect(shallow(objA, objB)).toBe(true) + expect(compareShallow(objA, objB)).toBe(true) }) test('should return false for objects with different values', () => { const objA = { a: 1, b: 'hello' } const objB = { a: 2, b: 'world' } - expect(shallow(objA, objB)).toBe(false) + expect(compareShallow(objA, objB)).toBe(false) }) test('should return false for objects with different keys', () => { const objA = { a: 1, b: 'hello' } const objB = { a: 1, c: 'world' } // @ts-expect-error - expect(shallow(objA, objB)).toBe(false) + expect(compareShallow(objA, objB)).toBe(false) }) test('should return false for objects with different structures', () => { const objA = { a: 1, b: 'hello' } const objB = [1, 'hello'] // @ts-expect-error - expect(shallow(objA, objB)).toBe(false) + expect(compareShallow(objA, objB)).toBe(false) }) test('should return false for one object being null', () => { const objA = { a: 1, b: 'hello' } const objB = null - expect(shallow(objA, objB)).toBe(false) + expect(compareShallow(objA, objB)).toBe(false) }) test('should return false for one object being undefined', () => { const objA = { a: 1, b: 'hello' } const objB = undefined - expect(shallow(objA, objB)).toBe(false) + expect(compareShallow(objA, objB)).toBe(false) }) test('should return true for two null objects', () => { const objA = null const objB = null - expect(shallow(objA, objB)).toBe(true) + expect(compareShallow(objA, objB)).toBe(true) }) test('should return false for objects with different types', () => { const objA = { a: 1, b: 'hello' } const objB = { a: '1', b: 'hello' } // @ts-expect-error - expect(shallow(objA, objB)).toBe(false) + expect(compareShallow(objA, objB)).toBe(false) }) test('should return true for shallow equal objects with symbol keys', () => { const sym = Symbol.for('key') const objA = { [sym]: 1 } const objB = { [sym]: 1 } - expect(shallow(objA, objB)).toBe(true) + expect(compareShallow(objA, objB)).toBe(true) }) test('should return false for shallow different values for symbol keys', () => { const sym = Symbol.for('key') const objA = { [sym]: 1 } const objB = { [sym]: 2 } - expect(shallow(objA, objB)).toBe(false) + expect(compareShallow(objA, objB)).toBe(false) }) test('should return true for non-enumerable keys', () => { @@ -824,7 +824,7 @@ describe('shallow', () => { value: 2, }) - expect(shallow(objA, objB)).toBe(true) + expect(compareShallow(objA, objB)).toBe(true) }) test('should handle arrays inside of a useSelector', async () => { diff --git a/packages/solid-store/tests/index.test.tsx b/packages/solid-store/tests/index.test.tsx index de9895d0..d2380436 100644 --- a/packages/solid-store/tests/index.test.tsx +++ b/packages/solid-store/tests/index.test.tsx @@ -3,8 +3,8 @@ import { render, renderHook } from '@solidjs/testing-library' import { createAtom, createStore } from '@tanstack/store' import { _useStore, + compareShallow, createStoreContext, - shallow, useAtom, useSelector, useStore, @@ -263,101 +263,101 @@ describe('shallow', () => { test('should return true for shallowly equal objects', () => { const objA = { a: 1, b: 'hello' } const objB = { a: 1, b: 'hello' } - expect(shallow(objA, objB)).toBe(true) + expect(compareShallow(objA, objB)).toBe(true) }) test('should return false for objects with different values', () => { const objA = { a: 1, b: 'hello' } const objB = { a: 2, b: 'world' } - expect(shallow(objA, objB)).toBe(false) + expect(compareShallow(objA, objB)).toBe(false) }) test('should return false for objects with different keys', () => { const objA = { a: 1, b: 'hello' } const objB = { a: 1, c: 'world' } // @ts-expect-error - expect(shallow(objA, objB)).toBe(false) + expect(compareShallow(objA, objB)).toBe(false) }) test('should return false for objects with different structures', () => { const objA = { a: 1, b: 'hello' } const objB = [1, 'hello'] // @ts-expect-error - expect(shallow(objA, objB)).toBe(false) + expect(compareShallow(objA, objB)).toBe(false) }) test('should return false for one object being null', () => { const objA = { a: 1, b: 'hello' } const objB = null - expect(shallow(objA, objB)).toBe(false) + expect(compareShallow(objA, objB)).toBe(false) }) test('should return false for one object being undefined', () => { const objA = { a: 1, b: 'hello' } const objB = undefined - expect(shallow(objA, objB)).toBe(false) + expect(compareShallow(objA, objB)).toBe(false) }) test('should return true for two null objects', () => { const objA = null const objB = null - expect(shallow(objA, objB)).toBe(true) + expect(compareShallow(objA, objB)).toBe(true) }) test('should return false for objects with different types', () => { const objA = { a: 1, b: 'hello' } const objB = { a: '1', b: 'hello' } // @ts-expect-error - expect(shallow(objA, objB)).toBe(false) + expect(compareShallow(objA, objB)).toBe(false) }) test('should return true for shallow equal objects with symbol keys', () => { const sym = Symbol.for('key') const objA = { [sym]: 1 } const objB = { [sym]: 1 } - expect(shallow(objA, objB)).toBe(true) + expect(compareShallow(objA, objB)).toBe(true) }) test('should return false for shallow different values for symbol keys', () => { const sym = Symbol.for('key') const objA = { [sym]: 1 } const objB = { [sym]: 2 } - expect(shallow(objA, objB)).toBe(false) + expect(compareShallow(objA, objB)).toBe(false) }) test('should return true for shallowly equal maps', () => { const objA = new Map([['1', 'hello']]) const objB = new Map([['1', 'hello']]) - expect(shallow(objA, objB)).toBe(true) + expect(compareShallow(objA, objB)).toBe(true) }) test('should return false for maps with different values', () => { const objA = new Map([['1', 'hello']]) const objB = new Map([['1', 'world']]) - expect(shallow(objA, objB)).toBe(false) + expect(compareShallow(objA, objB)).toBe(false) }) test('should return true for shallowly equal sets', () => { const objA = new Set([1]) const objB = new Set([1]) - expect(shallow(objA, objB)).toBe(true) + expect(compareShallow(objA, objB)).toBe(true) }) test('should return false for sets with different values', () => { const objA = new Set([1]) const objB = new Set([2]) - expect(shallow(objA, objB)).toBe(false) + expect(compareShallow(objA, objB)).toBe(false) }) test('should return false for dates with different values', () => { const objA = new Date('2025-04-10T14:48:00') const objB = new Date('2025-04-10T14:58:00') - expect(shallow(objA, objB)).toBe(false) + expect(compareShallow(objA, objB)).toBe(false) }) test('should return true for equal dates', () => { const objA = new Date('2025-02-10') const objB = new Date('2025-02-10') - expect(shallow(objA, objB)).toBe(true) + expect(compareShallow(objA, objB)).toBe(true) }) }) diff --git a/packages/store/src/compare.ts b/packages/store/src/compare.ts new file mode 100644 index 00000000..36404460 --- /dev/null +++ b/packages/store/src/compare.ts @@ -0,0 +1,148 @@ +export function compareShallow(objA: T, objB: T): boolean { + return _evaluate(objA, objB, { mode: 'shallow' }, new WeakMap()) +} + +export function compareDeep(objA: T, objB: T): boolean { + return _evaluate(objA, objB, { mode: 'deep' }, new WeakMap()) +} + +function _evaluate( + objA: T, + objB: T, + config: { mode: 'shallow' | 'deep' }, + seen: WeakMap>, +): boolean { + if (Object.is(objA, objB)) { + return true + } + + if ( + typeof objA !== 'object' || + objA === null || + typeof objB !== 'object' || + objB === null + ) { + return false + } + + // guards against circular references + if (config.mode === 'deep') { + let seenB = seen.get(objA as object) + + if (seenB?.has(objB as object)) return true + + if (!seenB) { + seenB = new WeakSet() + seen.set(objA as object, seenB) + } + + seenB.add(objB as object) + } + + // guards against runtime cross type evaluation + if (Object.getPrototypeOf(objA) !== Object.getPrototypeOf(objB)) { + return false + } + + if (objA instanceof Date && objB instanceof Date) { + return objA.getTime() === objB.getTime() + } + + if ( + typeof File !== 'undefined' && + objA instanceof File && + objB instanceof File + ) { + return ( + objA.name === objB.name && + objA.size === objB.size && + objA.type === objB.type && + objA.lastModified === objB.lastModified + ) + } + + if (objA instanceof Map && objB instanceof Map) { + if (objA.size !== objB.size) return false + + if (config.mode === 'deep') { + for (const [k, v] of objA) { + if (!objB.has(k) || !_evaluate(v, objB.get(k), config, seen)) + return false + } + } + + if (config.mode === 'shallow') { + for (const [k, v] of objA) { + if (!objB.has(k) || !Object.is(v, objB.get(k))) return false + } + } + + return true + } + + if (objA instanceof Set && objB instanceof Set) { + if (objA.size !== objB.size) return false + + if (config.mode === 'deep') { + for (const v of objA) { + if (![...objB].some((bv) => _evaluate(v, bv, config, seen))) + return false + } + } + + if (config.mode === 'shallow') { + for (const v of objA) { + if (!objB.has(v)) return false + } + } + + return true + } + + if ( + objA.constructor === objB.constructor && + typeof (objA as { equals?: unknown }).equals === 'function' && + typeof (objB as { equals?: unknown }).equals === 'function' + ) { + return (objA as unknown as { equals: (other: unknown) => boolean }).equals( + objB, + ) + } + + const keysA = getOwnKeys(objA as object) + const keysB = getOwnKeys(objB as object) + + if (keysA.length !== keysB.length) { + return false + } + + if (config.mode === 'deep') { + for (const key of keysA) { + if ( + !Object.prototype.hasOwnProperty.call(objB, key) || + !_evaluate(objA[key as keyof T], objB[key as keyof T], config, seen) + ) { + return false + } + } + } + + if (config.mode === 'shallow') { + for (const key of keysA) { + if ( + !Object.prototype.hasOwnProperty.call(objB, key) || + !Object.is(objA[key as keyof T], objB[key as keyof T]) + ) { + return false + } + } + } + + return true +} + +function getOwnKeys(obj: object): Array { + return (Object.keys(obj) as Array).concat( + Object.getOwnPropertySymbols(obj), + ) +} diff --git a/packages/store/src/index.ts b/packages/store/src/index.ts index 71215a5e..80123c95 100644 --- a/packages/store/src/index.ts +++ b/packages/store/src/index.ts @@ -2,3 +2,4 @@ export * from './types' export * from './atom' export * from './store' export * from './shallow' +export * from './compare' diff --git a/packages/store/tests/compare.spec.ts b/packages/store/tests/compare.spec.ts new file mode 100644 index 00000000..dcb479b5 --- /dev/null +++ b/packages/store/tests/compare.spec.ts @@ -0,0 +1,514 @@ +import { describe, expect, it, vi } from 'vitest' +import { compareDeep, compareShallow } from '../src/compare' + +describe('evaluate', () => { + it('should test equality between primitives', () => { + const numbersTrue = compareShallow(1, 1) + expect(numbersTrue).toEqual(true) + + const stringFalse = compareShallow('uh oh', '') + expect(stringFalse).toEqual(false) + + const boolTrue = compareShallow(true, true) + expect(boolTrue).toEqual(true) + + const nullFalse = compareShallow(null, {}) + expect(nullFalse).toEqual(false) + + const undefinedFalse = compareShallow(undefined, null) + expect(undefinedFalse).toEqual(false) + }) + + it('should return false for runtime cross-type comparisons', () => { + expect(compareShallow(new Date(), new Map())).toEqual(false) + expect(compareShallow(new Date(), new Set())).toEqual(false) + expect(compareShallow(new Map(), new Set())).toEqual(false) + expect(compareShallow(new Date(), {})).toEqual(false) + expect(compareShallow(new Map(), {})).toEqual(false) + expect(compareShallow(new Set(), {})).toEqual(false) + }) + + it('should return false when comparing a subclass instance to a base class instance', () => { + class ExtendedMap extends Map {} + class ExtendedSet extends Set {} + class ExtendedDate extends Date {} + + // subclass vs base class, different prototypes, never equal + expect(compareShallow(new ExtendedMap(), new Map())).toEqual(false) + expect(compareShallow(new Map(), new ExtendedMap())).toEqual(false) + expect(compareShallow(new ExtendedSet(), new Set())).toEqual(false) + expect(compareShallow(new Set(), new ExtendedSet())).toEqual(false) + expect(compareShallow(new ExtendedDate(), new Date())).toEqual(false) + expect(compareShallow(new Date(), new ExtendedDate())).toEqual(false) + + // two instances of the same subclass with equal contents are equal + expect(compareShallow(new ExtendedMap(), new ExtendedMap())).toEqual( + true, + ) + expect(compareShallow(new ExtendedSet(), new ExtendedSet())).toEqual( + true, + ) + + // same checks hold in deep mode + expect(compareDeep(new ExtendedMap(), new Map())).toEqual(false) + expect(compareDeep(new ExtendedSet(), new Set())).toEqual(false) + expect(compareDeep(new ExtendedDate(), new Date())).toEqual(false) + expect(compareDeep(new ExtendedMap(), new ExtendedMap())).toEqual(true) + expect(compareDeep(new ExtendedSet(), new ExtendedSet())).toEqual(true) + }) + + it('should not throw a runtime error when File is undefined in the environment', () => { + vi.stubGlobal('File', undefined) + + const file1 = { + name: 'hello.txt', + size: 5, + type: 'text/plain', + lastModified: 0, + } + const file2 = { + name: 'hello.txt', + size: 5, + type: 'text/plain', + lastModified: 0, + } + + try { + expect(() => compareShallow(file1, file2)).not.toThrow() + } finally { + vi.unstubAllGlobals() + } + }) + + describe('shallow', () => { + it('should test equality between arrays', () => { + expect(compareShallow([], [])).toEqual(true) + + const arrayFalse = compareShallow([], ['']) + expect(arrayFalse).toEqual(false) + + const arrayDeepFalse = compareShallow([[1]], []) + expect(arrayDeepFalse).toEqual(false) + + const arrayNestedFalse = compareShallow([[1]], [[1]]) + expect(arrayNestedFalse).toEqual(false) + + const arrayComplexFalse = compareShallow( + [[{ test: 'true' }], null], + [[1], {}], + ) + expect(arrayComplexFalse).toEqual(false) + + const arrayComplexFalse2 = compareShallow( + [[{ test: 'true' }], null], + [[{ test: 'true' }], null], + ) + expect(arrayComplexFalse2).toEqual(false) + }) + + it('should test equality between objects', () => { + const objTrue = compareShallow({ test: 'same' }, { test: 'same' }) + expect(objTrue).toEqual(true) + + const objFalse = compareShallow({ test: 'not' }, { test: 'same' }) + expect(objFalse).toEqual(false) + + const objDeepFalse = compareShallow( + { test: 'not' }, + { test: { test: 'same' } }, + ) + expect(objDeepFalse).toEqual(false) + + const objDeepArrFalse = compareShallow({ test: [] }, { test: [[]] }) + expect(objDeepArrFalse).toEqual(false) + + const objNullFalse = compareShallow({ test: '' }, null) + expect(objNullFalse).toEqual(false) + + const objComplexFalse = compareShallow( + { test: { testTwo: '' }, arr: [[1]] }, + { test: { testTwo: false }, arr: [[1], [0]] }, + ) + expect(objComplexFalse).toEqual(false) + + const objComplexShallowFalse = compareShallow( + { test: { testTwo: '' }, arr: [[1]] }, + { test: { testTwo: '' }, arr: [[1]] }, + ) + expect(objComplexShallowFalse).toEqual(false) + }) + + it('should test equality between Date objects', () => { + const date1 = new Date('2025-01-01T00:00:00.000Z') + const date2 = new Date('2025-01-01T00:00:00.000Z') + const date3 = new Date('2025-01-02T00:00:00.000Z') + + expect(compareShallow(date1, date2)).toEqual(true) + expect(compareShallow(date1, date3)).toEqual(false) + + const dateObjectShallowFalse = compareShallow( + { date: date1 }, + { date: date2 }, + ) + expect(dateObjectShallowFalse).toEqual(false) + + const dateObjectFalse = compareShallow({ date: date1 }, { date: date3 }) + expect(dateObjectFalse).toEqual(false) + }) + + it('should test equality between Map objects', () => { + expect( + compareShallow( + new Map([ + ['a', 1], + ['b', 2], + ]), + new Map([ + ['a', 1], + ['b', 2], + ]), + ), + ).toEqual(true) + expect(compareShallow(new Map(), new Map())).toEqual(true) + expect( + compareShallow( + new Map([['a', 1]]), + new Map([ + ['a', 1], + ['b', 2], + ]), + ), + ).toEqual(false) + expect( + compareShallow( + new Map([ + ['a', 1], + ['b', 2], + ]), + new Map([ + ['a', 1], + ['c', 2], + ]), + ), + ).toEqual(false) + expect( + compareShallow( + new Map([ + ['a', 1], + ['b', 2], + ]), + new Map([ + ['a', 1], + ['b', 3], + ]), + ), + ).toEqual(false) + + const obj = { x: 1 } + expect( + compareShallow(new Map([['a', obj]]), new Map([['a', obj]])), + ).toEqual(true) + expect( + compareShallow(new Map([['a', { x: 1 }]]), new Map([['a', { x: 1 }]])), + ).toEqual(false) + }) + + it('should test equality between Set objects', () => { + expect(compareShallow(new Set([1, 2, 3]), new Set([1, 2, 3]))).toEqual( + true, + ) + expect(compareShallow(new Set(), new Set())).toEqual(true) + expect(compareShallow(new Set([1, 2]), new Set([1, 2, 3]))).toEqual(false) + expect(compareShallow(new Set([1, 2, 3]), new Set([1, 2, 4]))).toEqual( + false, + ) + + const obj = { x: 1 } + expect(compareShallow(new Set([obj]), new Set([obj]))).toEqual(true) + expect(compareShallow(new Set([{ x: 1 }]), new Set([{ x: 1 }]))).toEqual( + false, + ) + }) + + it('should test equality between File objects', () => { + const file1 = new File(['hello'], 'hello.txt', { + type: 'text/plain', + lastModified: 0, + }) + const file2 = new File(['hello'], 'hello.txt', { + type: 'text/plain', + lastModified: 0, + }) + const fileDiffName = new File(['hello'], 'world.txt', { + type: 'text/plain', + lastModified: 0, + }) + const fileDiffType = new File(['hello'], 'hello.txt', { + type: 'text/html', + lastModified: 0, + }) + const fileDiffSize = new File(['hello world'], 'hello.txt', { + type: 'text/plain', + lastModified: 0, + }) + + expect(compareShallow(file1, file2)).toEqual(true) + expect(compareShallow(file1, fileDiffName)).toEqual(false) + expect(compareShallow(file1, fileDiffType)).toEqual(false) + expect(compareShallow(file1, fileDiffSize)).toEqual(false) + + expect(compareShallow({ file: file1 }, { file: file2 })).toEqual(false) + expect(compareShallow({ file: file1 }, { file: fileDiffName })).toEqual( + false, + ) + }) + + it('should test equality between objects with Symbol keys', () => { + const sym = Symbol('id') + + expect( + compareShallow({ [sym]: 1, name: 'foo' }, { [sym]: 1, name: 'foo' }), + ).toEqual(true) + expect( + compareShallow({ [sym]: 1, name: 'foo' }, { [sym]: 2, name: 'foo' }), + ).toEqual(false) + expect(compareShallow({ [sym]: 1 } as any, {} as any)).toEqual(false) + expect(compareShallow({} as any, { [sym]: 1 } as any)).toEqual(false) + }) + }) + + describe('deep', () => { + it('should test equality between arrays', () => { + expect(compareDeep([], [])).toEqual(true) + + const arrayFalse = compareDeep([], ['']) + expect(arrayFalse).toEqual(false) + + const arrayDeepFalse = compareDeep([[1]], []) + expect(arrayDeepFalse).toEqual(false) + + const arrayDeepSearchTrue = compareDeep([[1]], [[1]]) + expect(arrayDeepSearchTrue).toEqual(true) + + const arrayComplexFalse = compareDeep( + [[{ test: 'true' }], null], + [[1], {}], + ) + expect(arrayComplexFalse).toEqual(false) + + const arrayComplexTrue = compareDeep( + [[{ test: 'true' }], null], + [[{ test: 'true' }], null], + ) + expect(arrayComplexTrue).toEqual(true) + }) + + it('should test equality between objects', () => { + const objTrue = compareDeep({ test: 'same' }, { test: 'same' }) + expect(objTrue).toEqual(true) + + const objFalse = compareDeep({ test: 'not' }, { test: 'same' }) + expect(objFalse).toEqual(false) + + const objDeepFalse = compareDeep( + { test: 'not' }, + { test: { test: 'same' } }, + ) + expect(objDeepFalse).toEqual(false) + + const objDeepArrFalse = compareDeep({ test: [] }, { test: [[]] }) + expect(objDeepArrFalse).toEqual(false) + + const objNullFalse = compareDeep({ test: '' }, null) + expect(objNullFalse).toEqual(false) + + const objComplexFalse = compareDeep( + { test: { testTwo: '' }, arr: [[1]] }, + { test: { testTwo: false }, arr: [[1], [0]] }, + ) + expect(objComplexFalse).toEqual(false) + + const objComplexTrue = compareDeep( + { test: { testTwo: '' }, arr: [[1]] }, + { test: { testTwo: '' }, arr: [[1]] }, + ) + expect(objComplexTrue).toEqual(true) + }) + + it('should test equality between Date objects', () => { + const date1 = new Date('2025-01-01T00:00:00.000Z') + const date2 = new Date('2025-01-01T00:00:00.000Z') + const date3 = new Date('2025-01-02T00:00:00.000Z') + + expect(compareDeep(date1, date2)).toEqual(true) + expect(compareDeep(date1, date3)).toEqual(false) + + const dateObjectTrue = compareDeep({ date: date1 }, { date: date2 }) + expect(dateObjectTrue).toEqual(true) + + const dateObjectFalse = compareDeep({ date: date1 }, { date: date3 }) + expect(dateObjectFalse).toEqual(false) + }) + + it('should test equality between Map objects', () => { + expect( + compareDeep( + new Map([ + ['a', 1], + ['b', 2], + ]), + new Map([ + ['a', 1], + ['b', 2], + ]), + ), + ).toEqual(true) + expect(compareDeep(new Map(), new Map())).toEqual(true) + expect( + compareDeep( + new Map([['a', 1]]), + new Map([ + ['a', 1], + ['b', 2], + ]), + ), + ).toEqual(false) + expect( + compareDeep( + new Map([ + ['a', 1], + ['b', 2], + ]), + new Map([ + ['a', 1], + ['b', 3], + ]), + ), + ).toEqual(false) + + expect( + compareDeep(new Map([['a', { x: 1 }]]), new Map([['a', { x: 1 }]])), + ).toEqual(true) + expect( + compareDeep(new Map([['a', { x: 1 }]]), new Map([['a', { x: 2 }]])), + ).toEqual(false) + expect( + compareDeep( + new Map([['a', { nested: { x: 1 } }]]), + new Map([['a', { nested: { x: 1 } }]]), + ), + ).toEqual(true) + }) + + it('should test equality between Set objects', () => { + expect(compareDeep(new Set([1, 2, 3]), new Set([1, 2, 3]))).toEqual(true) + expect(compareDeep(new Set(), new Set())).toEqual(true) + expect(compareDeep(new Set([1, 2]), new Set([1, 2, 3]))).toEqual(false) + expect(compareDeep(new Set([1, 2, 3]), new Set([1, 2, 4]))).toEqual(false) + + expect(compareDeep(new Set([{ x: 1 }]), new Set([{ x: 1 }]))).toEqual( + true, + ) + expect(compareDeep(new Set([{ x: 1 }]), new Set([{ x: 2 }]))).toEqual( + false, + ) + expect( + compareDeep( + new Set([{ nested: { x: 1 } }]), + new Set([{ nested: { x: 1 } }]), + ), + ).toEqual(true) + }) + + it('should test equality between File objects', () => { + const file1 = new File(['hello'], 'hello.txt', { + type: 'text/plain', + lastModified: 0, + }) + const file2 = new File(['hello'], 'hello.txt', { + type: 'text/plain', + lastModified: 0, + }) + const fileDiffName = new File(['hello'], 'world.txt', { + type: 'text/plain', + lastModified: 0, + }) + const fileDiffType = new File(['hello'], 'hello.txt', { + type: 'text/html', + lastModified: 0, + }) + const fileDiffSize = new File(['hello world'], 'hello.txt', { + type: 'text/plain', + lastModified: 0, + }) + + expect(compareDeep(file1, file2)).toEqual(true) + expect(compareDeep(file1, fileDiffName)).toEqual(false) + expect(compareDeep(file1, fileDiffType)).toEqual(false) + expect(compareDeep(file1, fileDiffSize)).toEqual(false) + + expect(compareDeep({ file: file1 }, { file: file2 })).toEqual(true) + expect(compareDeep({ file: file1 }, { file: fileDiffName })).toEqual( + false, + ) + }) + + it('should test equality between objects with Symbol keys', () => { + const sym = Symbol('id') + + expect( + compareDeep({ [sym]: 1, name: 'foo' }, { [sym]: 1, name: 'foo' }), + ).toEqual(true) + expect( + compareDeep({ [sym]: 1, name: 'foo' }, { [sym]: 2, name: 'foo' }), + ).toEqual(false) + expect( + compareDeep( + { [sym]: { nested: true } } as any, + { [sym]: { nested: true } } as any, + ), + ).toEqual(true) + expect( + compareDeep( + { [sym]: { nested: true } } as any, + { [sym]: { nested: false } } as any, + ), + ).toEqual(false) + }) + + it('should compare Temporal values', () => { + // @ts-ignore cannot find Temporal - implemented in node v26 but missing from Ts 6 unless target is "ESNext.Temporal" + const temporalNow = Temporal.Now.instant() + expect( + // @ts-ignore cannot find Temporal + compareDeep(temporalNow, Temporal.Now.instant().add({ seconds: 1 })), + ).toBe(false) + expect(compareDeep(temporalNow, temporalNow)).toBe(true) + }) + + it('does not delegate to equals() when only one operand exposes it', () => { + expect( + compareDeep({ equals: () => true } as unknown, {} as unknown), + ).toBe(false) + + expect( + compareDeep({} as unknown, { equals: () => true } as unknown), + ).toBe(false) + }) + + it('should handle circular references', () => { + const a: any = { x: 1 } + a.self = a + + const b: any = { x: 1 } + b.self = b + + expect(() => compareDeep(a, b)).not.toThrow() + expect(compareDeep(a, b)).toEqual(true) + + const c: any = { x: 2 } + c.self = c + expect(compareDeep(a, c)).toEqual(false) + }) + }) +}) diff --git a/packages/svelte-store/tests/index.test.ts b/packages/svelte-store/tests/index.test.ts index dc304f01..1547bb65 100644 --- a/packages/svelte-store/tests/index.test.ts +++ b/packages/svelte-store/tests/index.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it, test } from 'vitest' import { render, waitFor } from '@testing-library/svelte' import { userEvent } from '@testing-library/user-event' -import { shallow } from '../src/index.svelte.js' +import { compareShallow } from '@tanstack/store' import TestBaseStore from './BaseStore.test.svelte' import TestRerender from './Render.test.svelte' import TestValue from './Value.test.svelte' @@ -44,63 +44,63 @@ describe('shallow', () => { test('should return true for shallowly equal objects', () => { const objA = { a: 1, b: 'hello' } const objB = { a: 1, b: 'hello' } - expect(shallow(objA, objB)).toBe(true) + expect(compareShallow(objA, objB)).toBe(true) }) test('should return false for objects with different values', () => { const objA = { a: 1, b: 'hello' } const objB = { a: 2, b: 'world' } - expect(shallow(objA, objB)).toBe(false) + expect(compareShallow(objA, objB)).toBe(false) }) test('should return false for objects with different keys', () => { const objA = { a: 1, b: 'hello' } const objB = { a: 1, c: 'world' } // @ts-expect-error testing invalid input - expect(shallow(objA, objB)).toBe(false) + expect(compareShallow(objA, objB)).toBe(false) }) test('should return false for objects with different structures', () => { const objA = { a: 1, b: 'hello' } const objB = [1, 'hello'] // @ts-expect-error testing invalid input - expect(shallow(objA, objB)).toBe(false) + expect(compareShallow(objA, objB)).toBe(false) }) test('should return false for one object being null', () => { const objA = { a: 1, b: 'hello' } const objB = null - expect(shallow(objA, objB)).toBe(false) + expect(compareShallow(objA, objB)).toBe(false) }) test('should return false for one object being undefined', () => { const objA = { a: 1, b: 'hello' } const objB = undefined - expect(shallow(objA, objB)).toBe(false) + expect(compareShallow(objA, objB)).toBe(false) }) test('should return true for two null objects', () => { const objA = null const objB = null - expect(shallow(objA, objB)).toBe(true) + expect(compareShallow(objA, objB)).toBe(true) }) test('should return false for objects with different types', () => { const objA = { a: 1, b: 'hello' } const objB = { a: '1', b: 'hello' } // @ts-expect-error testing invalid input - expect(shallow(objA, objB)).toBe(false) + expect(compareShallow(objA, objB)).toBe(false) }) test('should return false for dates with different values', () => { const objA = new Date('2025-04-10T14:48:00') const objB = new Date('2025-04-10T14:58:00') - expect(shallow(objA, objB)).toBe(false) + expect(compareShallow(objA, objB)).toBe(false) }) test('should return true for equal dates', () => { const objA = new Date('2025-02-10') const objB = new Date('2025-02-10') - expect(shallow(objA, objB)).toBe(true) + expect(compareShallow(objA, objB)).toBe(true) }) }) diff --git a/packages/vue-store/tests/index.test.tsx b/packages/vue-store/tests/index.test.tsx index f9a2d0ce..1aa0c135 100644 --- a/packages/vue-store/tests/index.test.tsx +++ b/packages/vue-store/tests/index.test.tsx @@ -5,7 +5,7 @@ import { createAtom, createStore } from '@tanstack/store' import { userEvent } from '@testing-library/user-event' import { _useStore, - shallow, + compareShallow, useAtom, useSelector, useStore, @@ -378,101 +378,101 @@ describe('shallow', () => { test('should return true for shallowly equal objects', () => { const objA = { a: 1, b: 'hello' } const objB = { a: 1, b: 'hello' } - expect(shallow(objA, objB)).toBe(true) + expect(compareShallow(objA, objB)).toBe(true) }) test('should return false for objects with different values', () => { const objA = { a: 1, b: 'hello' } const objB = { a: 2, b: 'world' } - expect(shallow(objA, objB)).toBe(false) + expect(compareShallow(objA, objB)).toBe(false) }) test('should return false for objects with different keys', () => { const objA = { a: 1, b: 'hello' } const objB = { a: 1, c: 'world' } // @ts-expect-error - expect(shallow(objA, objB)).toBe(false) + expect(compareShallow(objA, objB)).toBe(false) }) test('should return false for objects with different structures', () => { const objA = { a: 1, b: 'hello' } const objB = [1, 'hello'] // @ts-expect-error - expect(shallow(objA, objB)).toBe(false) + expect(compareShallow(objA, objB)).toBe(false) }) test('should return false for one object being null', () => { const objA = { a: 1, b: 'hello' } const objB = null - expect(shallow(objA, objB)).toBe(false) + expect(compareShallow(objA, objB)).toBe(false) }) test('should return false for one object being undefined', () => { const objA = { a: 1, b: 'hello' } const objB = undefined - expect(shallow(objA, objB)).toBe(false) + expect(compareShallow(objA, objB)).toBe(false) }) test('should return true for two null objects', () => { const objA = null const objB = null - expect(shallow(objA, objB)).toBe(true) + expect(compareShallow(objA, objB)).toBe(true) }) test('should return false for objects with different types', () => { const objA = { a: 1, b: 'hello' } const objB = { a: '1', b: 'hello' } // @ts-expect-error - expect(shallow(objA, objB)).toBe(false) + expect(compareShallow(objA, objB)).toBe(false) }) test('should return true for shallow equal objects with symbol keys', () => { const sym = Symbol.for('key') const objA = { [sym]: 1 } const objB = { [sym]: 1 } - expect(shallow(objA, objB)).toBe(true) + expect(compareShallow(objA, objB)).toBe(true) }) test('should return false for shallow different values for symbol keys', () => { const sym = Symbol.for('key') const objA = { [sym]: 1 } const objB = { [sym]: 2 } - expect(shallow(objA, objB)).toBe(false) + expect(compareShallow(objA, objB)).toBe(false) }) test('should return true for shallowly equal maps', () => { const objA = new Map([['1', 'hello']]) const objB = new Map([['1', 'hello']]) - expect(shallow(objA, objB)).toBe(true) + expect(compareShallow(objA, objB)).toBe(true) }) test('should return false for maps with different values', () => { const objA = new Map([['1', 'hello']]) const objB = new Map([['1', 'world']]) - expect(shallow(objA, objB)).toBe(false) + expect(compareShallow(objA, objB)).toBe(false) }) test('should return true for shallowly equal sets', () => { const objA = new Set([1]) const objB = new Set([1]) - expect(shallow(objA, objB)).toBe(true) + expect(compareShallow(objA, objB)).toBe(true) }) test('should return false for sets with different values', () => { const objA = new Set([1]) const objB = new Set([2]) - expect(shallow(objA, objB)).toBe(false) + expect(compareShallow(objA, objB)).toBe(false) }) test('should return false for dates with different values', () => { const objA = new Date('2025-04-10T14:48:00') const objB = new Date('2025-04-10T14:58:00') - expect(shallow(objA, objB)).toBe(false) + expect(compareShallow(objA, objB)).toBe(false) }) test('should return true for equal dates', () => { const objA = new Date('2025-02-10') const objB = new Date('2025-02-10') - expect(shallow(objA, objB)).toBe(true) + expect(compareShallow(objA, objB)).toBe(true) }) }) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b0c5cd1e..2d3b05da 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -15,7 +15,7 @@ importers: version: 0.7.0 '@changesets/cli': specifier: ^2.30.0 - version: 2.30.0(@types/node@25.6.0) + version: 2.30.0(@types/node@26.6.4) '@eslint-react/eslint-plugin': specifier: ^4.2.3 version: 4.2.3(eslint@10.10.0(jiti@2.6.1))(typescript@6.0.2) @@ -32,8 +32,8 @@ importers: specifier: ^14.6.1 version: 14.6.1(@testing-library/dom@10.4.1) '@types/node': - specifier: ^25.6.0 - version: 25.6.0 + specifier: ^26.6.0 + version: 26.6.4 '@vitest/coverage-istanbul': specifier: ^4.1.4 version: 4.1.4(vitest@4.1.11) @@ -90,10 +90,10 @@ importers: version: typescript@5.8.3 vite: specifier: ^8.0.8 - version: 8.3.0(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0) + version: 8.3.0(@types/node@26.6.4)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0) vitest: specifier: ^4.1.4 - version: 4.1.11(@types/node@25.6.0)(@vitest/coverage-istanbul@4.1.4)(jsdom@29.0.2(@noble/hashes@2.2.0))(vite@8.3.0(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0)) + version: 4.1.11(@types/node@26.6.4)(@vitest/coverage-istanbul@4.1.4)(jsdom@29.0.2(@noble/hashes@2.2.0))(vite@8.3.0(@types/node@26.6.4)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0)) examples/angular/atoms: dependencies: @@ -133,7 +133,7 @@ importers: devDependencies: '@angular-devkit/build-angular': specifier: ^21.2.7 - version: 21.2.7(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2))(@angular/compiler@21.2.8)(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@25.6.0)(chokidar@5.0.0)(jiti@2.6.1)(lightningcss@1.33.0)(typescript@6.0.2)(vitest@4.1.11(@types/node@25.6.0)(@vitest/coverage-istanbul@4.1.4(vitest@4.1.11))(jsdom@29.0.2(@noble/hashes@2.2.0))(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.33.0)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0)))(yaml@2.9.0) + version: 21.2.7(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2))(@angular/compiler@21.2.8)(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@26.6.4)(chokidar@5.0.0)(jiti@2.6.1)(lightningcss@1.33.0)(typescript@6.0.2)(vitest@4.1.11(@types/node@26.6.4)(@vitest/coverage-istanbul@4.1.4(vitest@4.1.11))(jsdom@29.0.2(@noble/hashes@2.2.0))(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.33.0)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0)))(yaml@2.9.0) '@angular/cli': specifier: ^21.2.7 version: 21.2.7(@types/node@25.6.0)(chokidar@5.0.0) @@ -182,10 +182,10 @@ importers: devDependencies: '@angular-devkit/build-angular': specifier: ^21.2.7 - version: 21.2.7(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2))(@angular/compiler@21.2.8)(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@25.6.0)(chokidar@5.0.0)(jiti@2.6.1)(lightningcss@1.33.0)(typescript@6.0.2)(vitest@4.1.11(@types/node@25.6.0)(@vitest/coverage-istanbul@4.1.4(vitest@4.1.11))(jsdom@29.0.2(@noble/hashes@2.2.0))(vite@8.3.0(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0)))(yaml@2.9.0) + version: 21.2.7(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2))(@angular/compiler@21.2.8)(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@26.6.4)(chokidar@5.0.0)(jiti@2.6.1)(lightningcss@1.33.0)(typescript@6.0.2)(vitest@4.1.11(@types/node@26.6.4)(@vitest/coverage-istanbul@4.1.4(vitest@4.1.11))(jsdom@29.0.2(@noble/hashes@2.2.0))(vite@8.3.0(@types/node@26.6.4)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0)))(yaml@2.9.0) '@angular/cli': specifier: ^21.2.7 - version: 21.2.7(@types/node@25.6.0)(chokidar@5.0.0) + version: 21.2.7(@types/node@26.6.4)(chokidar@5.0.0) '@angular/compiler-cli': specifier: ^21.2.8 version: 21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2) @@ -231,10 +231,10 @@ importers: devDependencies: '@angular-devkit/build-angular': specifier: ^21.2.7 - version: 21.2.7(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2))(@angular/compiler@21.2.8)(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@25.6.0)(chokidar@5.0.0)(jiti@2.6.1)(lightningcss@1.33.0)(typescript@6.0.2)(vitest@4.1.11(@types/node@25.6.0)(@vitest/coverage-istanbul@4.1.4(vitest@4.1.11))(jsdom@29.0.2(@noble/hashes@2.2.0))(vite@8.3.0(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0)))(yaml@2.9.0) + version: 21.2.7(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2))(@angular/compiler@21.2.8)(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@26.6.4)(chokidar@5.0.0)(jiti@2.6.1)(lightningcss@1.33.0)(typescript@6.0.2)(vitest@4.1.11(@types/node@26.6.4)(@vitest/coverage-istanbul@4.1.4(vitest@4.1.11))(jsdom@29.0.2(@noble/hashes@2.2.0))(vite@8.3.0(@types/node@26.6.4)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0)))(yaml@2.9.0) '@angular/cli': specifier: ^21.2.7 - version: 21.2.7(@types/node@25.6.0)(chokidar@5.0.0) + version: 21.2.7(@types/node@26.6.4)(chokidar@5.0.0) '@angular/compiler-cli': specifier: ^21.2.8 version: 21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2) @@ -280,10 +280,10 @@ importers: devDependencies: '@angular-devkit/build-angular': specifier: ^21.2.7 - version: 21.2.7(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2))(@angular/compiler@21.2.8)(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@25.6.0)(chokidar@5.0.0)(jiti@2.6.1)(lightningcss@1.33.0)(typescript@6.0.2)(vitest@4.1.11(@types/node@25.6.0)(@vitest/coverage-istanbul@4.1.4(vitest@4.1.11))(jsdom@29.0.2(@noble/hashes@2.2.0))(vite@8.3.0(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0)))(yaml@2.9.0) + version: 21.2.7(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2))(@angular/compiler@21.2.8)(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@26.6.4)(chokidar@5.0.0)(jiti@2.6.1)(lightningcss@1.33.0)(typescript@6.0.2)(vitest@4.1.11(@types/node@26.6.4)(@vitest/coverage-istanbul@4.1.4(vitest@4.1.11))(jsdom@29.0.2(@noble/hashes@2.2.0))(vite@8.3.0(@types/node@26.6.4)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0)))(yaml@2.9.0) '@angular/cli': specifier: ^21.2.7 - version: 21.2.7(@types/node@25.6.0)(chokidar@5.0.0) + version: 21.2.7(@types/node@26.6.4)(chokidar@5.0.0) '@angular/compiler-cli': specifier: ^21.2.8 version: 21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2) @@ -329,10 +329,10 @@ importers: devDependencies: '@angular-devkit/build-angular': specifier: ^21.2.7 - version: 21.2.7(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2))(@angular/compiler@21.2.8)(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@25.6.0)(chokidar@5.0.0)(jiti@2.6.1)(lightningcss@1.33.0)(typescript@6.0.2)(vitest@4.1.11(@types/node@25.6.0)(@vitest/coverage-istanbul@4.1.4(vitest@4.1.11))(jsdom@29.0.2(@noble/hashes@2.2.0))(vite@8.3.0(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0)))(yaml@2.9.0) + version: 21.2.7(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2))(@angular/compiler@21.2.8)(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@26.6.4)(chokidar@5.0.0)(jiti@2.6.1)(lightningcss@1.33.0)(typescript@6.0.2)(vitest@4.1.11(@types/node@26.6.4)(@vitest/coverage-istanbul@4.1.4(vitest@4.1.11))(jsdom@29.0.2(@noble/hashes@2.2.0))(vite@8.3.0(@types/node@26.6.4)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0)))(yaml@2.9.0) '@angular/cli': specifier: ^21.2.7 - version: 21.2.7(@types/node@25.6.0)(chokidar@5.0.0) + version: 21.2.7(@types/node@26.6.4)(chokidar@5.0.0) '@angular/compiler-cli': specifier: ^21.2.8 version: 21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2) @@ -1066,7 +1066,7 @@ importers: devDependencies: '@analogjs/vite-plugin-angular': specifier: ^2.6.2 - version: 2.6.4(af0cad56f2e0b893e7378b47e734a84d) + version: 2.6.4(4591f4818984db6e4e29298e1c8cfb53) '@angular/common': specifier: ^21.2.8 version: 21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) @@ -1104,7 +1104,7 @@ importers: devDependencies: octane: specifier: 0.1.21 - version: 0.1.21(@typescript-eslint/types@8.58.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@8.3.0(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0)) + version: 0.1.21(@typescript-eslint/types@8.58.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@8.3.0(@types/node@26.6.4)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0)) packages/preact-store: dependencies: @@ -1114,7 +1114,7 @@ importers: devDependencies: '@preact/preset-vite': specifier: ^2.10.5 - version: 2.10.5(@babel/core@7.29.0)(preact@10.29.1)(rollup@4.60.4)(vite@8.3.0(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0)) + version: 2.10.5(@babel/core@7.29.0)(preact@10.29.1)(rollup@4.60.4)(vite@8.3.0(@types/node@26.6.4)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0)) '@testing-library/preact': specifier: ^3.2.4 version: 3.2.4(preact@10.29.1) @@ -1132,7 +1132,7 @@ importers: version: 8.58.1(eslint@10.10.0(jiti@2.6.1))(typescript@6.0.2) vitest: specifier: ^4.1.4 - version: 4.1.11(@types/node@25.6.0)(@vitest/coverage-istanbul@4.1.4)(jsdom@29.0.2(@noble/hashes@2.2.0))(vite@8.3.0(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0)) + version: 4.1.11(@types/node@25.6.0)(@vitest/coverage-istanbul@4.1.4(vitest@4.1.11))(jsdom@29.0.2(@noble/hashes@2.2.0))(vite@8.3.0(@types/node@26.6.4)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0)) packages/react-store: dependencies: @@ -1157,7 +1157,7 @@ importers: version: 1.5.0 '@vitejs/plugin-react': specifier: ^6.0.1 - version: 6.0.1(vite@8.3.0(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0)) + version: 6.0.1(vite@8.3.0(@types/node@26.6.4)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0)) react: specifier: ^19.2.5 version: 19.2.5 @@ -1179,7 +1179,7 @@ importers: version: 1.9.12 vite-plugin-solid: specifier: ^2.11.12 - version: 2.11.12(@testing-library/jest-dom@6.9.1)(solid-js@1.9.12)(vite@8.3.0(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0)) + version: 2.11.12(@testing-library/jest-dom@6.9.1)(solid-js@1.9.12)(vite@8.3.0(@types/node@26.6.4)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0)) packages/store: devDependencies: @@ -1207,10 +1207,10 @@ importers: version: 2.5.7(svelte@5.55.7(@typescript-eslint/types@8.58.1))(typescript@6.0.2) '@sveltejs/vite-plugin-svelte': specifier: ^7.0.0 - version: 7.0.0(svelte@5.55.7(@typescript-eslint/types@8.58.1))(vite@8.3.0(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0)) + version: 7.0.0(svelte@5.55.7(@typescript-eslint/types@8.58.1))(vite@8.3.0(@types/node@26.6.4)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0)) '@testing-library/svelte': specifier: ^5.3.1 - version: 5.3.1(svelte@5.55.7(@typescript-eslint/types@8.58.1))(vite@8.3.0(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0))(vitest@4.1.11(@types/node@25.6.0)(@vitest/coverage-istanbul@4.1.4(vitest@4.1.11))(jsdom@29.0.2(@noble/hashes@2.2.0))(vite@8.3.0(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0))) + version: 5.3.1(svelte@5.55.7(@typescript-eslint/types@8.58.1))(vite@8.3.0(@types/node@26.6.4)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0))(vitest@4.1.11(@types/node@26.6.4)(@vitest/coverage-istanbul@4.1.4(vitest@4.1.11))(jsdom@29.0.2(@noble/hashes@2.2.0))(vite@8.3.0(@types/node@26.6.4)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0))) eslint-plugin-svelte: specifier: ^3.17.0 version: 3.17.0(eslint@10.10.0(jiti@2.6.1))(svelte@5.55.7(@typescript-eslint/types@8.58.1)) @@ -1235,7 +1235,7 @@ importers: version: 8.1.0(@vue/compiler-sfc@3.5.32)(vue@3.5.32(typescript@6.0.2)) '@vitejs/plugin-vue': specifier: ^6.0.5 - version: 6.0.5(vite@8.3.0(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0))(vue@3.5.32(typescript@6.0.2)) + version: 6.0.5(vite@8.3.0(@types/node@26.6.4)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0))(vue@3.5.32(typescript@6.0.2)) '@vue/composition-api': specifier: ^1.7.2 version: 1.7.2(vue@3.5.32(typescript@6.0.2)) @@ -4466,6 +4466,9 @@ packages: '@types/node@25.6.0': resolution: {integrity: sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ==} + '@types/node@26.6.4': + resolution: {integrity: sha512-ldVPDCzj7fsaGZrLB0NuHuTvJcsNasysBAqMolr/cgxrLd1xbqxIr3XJiPnHHJUCxj5sNF1vnRj9aWnrVh5Jcg==} + '@types/qs@6.15.0': resolution: {integrity: sha512-JawvT8iBVWpzTrz3EGw9BTQFg3BQNmwERdKE22vlTxawwtbyUSlMppvZYKLZzB5zgACXdXxbD3m1bXaMqP/9ow==} @@ -8786,6 +8789,9 @@ packages: undici-types@7.19.2: resolution: {integrity: sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg==} + undici-types@8.9.0: + resolution: {integrity: sha512-KTDyRTYX8sWmKXAikPHHSyc63CRPETMctyjKFupcC6OBLXT3xsN0e9aF7m+mIXutFWpUXuedtowG7iLOzp0kQg==} + undici@7.24.4: resolution: {integrity: sha512-BM/JzwwaRXxrLdElV2Uo6cTLEjhSb3WXboncJamZ15NgUURmvlXvxa6xkwIOILIjPNo9i8ku136ZvWV0Uly8+w==} engines: {node: '>=20.18.1'} @@ -9411,7 +9417,7 @@ snapshots: '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 - '@analogjs/vite-plugin-angular@2.6.4(af0cad56f2e0b893e7378b47e734a84d)': + '@analogjs/vite-plugin-angular@2.6.4(4591f4818984db6e4e29298e1c8cfb53)': dependencies: magic-string: 0.30.21 obug: 2.2.1 @@ -9419,9 +9425,9 @@ snapshots: tinyglobby: 0.2.17 ts-morph: 21.0.1 optionalDependencies: - '@angular-devkit/build-angular': 21.2.7(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2))(@angular/compiler@21.2.8)(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@25.6.0)(chokidar@5.0.0)(jiti@2.6.1)(lightningcss@1.33.0)(typescript@6.0.2)(vitest@4.1.11(@types/node@25.6.0)(@vitest/coverage-istanbul@4.1.4(vitest@4.1.11))(jsdom@29.0.2(@noble/hashes@2.2.0))(vite@8.3.0(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0)))(yaml@2.9.0) - '@angular/build': 21.2.7(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2))(@angular/compiler@21.2.8)(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@25.6.0)(chokidar@5.0.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.33.0)(postcss@8.5.28)(terser@5.46.0)(tslib@2.8.1)(typescript@6.0.2)(vitest@4.1.11(@types/node@25.6.0)(@vitest/coverage-istanbul@4.1.4(vitest@4.1.11))(jsdom@29.0.2(@noble/hashes@2.2.0))(vite@8.3.0(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0)))(yaml@2.9.0) - vite: 8.3.0(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0) + '@angular-devkit/build-angular': 21.2.7(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2))(@angular/compiler@21.2.8)(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@26.6.4)(chokidar@5.0.0)(jiti@2.6.1)(lightningcss@1.33.0)(typescript@6.0.2)(vitest@4.1.11(@types/node@26.6.4)(@vitest/coverage-istanbul@4.1.4(vitest@4.1.11))(jsdom@29.0.2(@noble/hashes@2.2.0))(vite@8.3.0(@types/node@26.6.4)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0)))(yaml@2.9.0) + '@angular/build': 21.2.7(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2))(@angular/compiler@21.2.8)(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@26.6.4)(chokidar@5.0.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.33.0)(postcss@8.5.28)(terser@5.46.0)(tslib@2.8.1)(typescript@6.0.2)(vitest@4.1.11(@types/node@26.6.4)(@vitest/coverage-istanbul@4.1.4(vitest@4.1.11))(jsdom@29.0.2(@noble/hashes@2.2.0))(vite@8.3.0(@types/node@26.6.4)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0)))(yaml@2.9.0) + vite: 8.3.0(@types/node@26.6.4)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0) transitivePeerDependencies: - '@emnapi/core' - '@emnapi/runtime' @@ -9433,13 +9439,13 @@ snapshots: transitivePeerDependencies: - chokidar - '@angular-devkit/build-angular@21.2.7(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2))(@angular/compiler@21.2.8)(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@25.6.0)(chokidar@5.0.0)(jiti@2.6.1)(lightningcss@1.33.0)(typescript@6.0.2)(vitest@4.1.11(@types/node@25.6.0)(@vitest/coverage-istanbul@4.1.4(vitest@4.1.11))(jsdom@29.0.2(@noble/hashes@2.2.0))(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.33.0)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0)))(yaml@2.9.0)': + '@angular-devkit/build-angular@21.2.7(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2))(@angular/compiler@21.2.8)(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@26.6.4)(chokidar@5.0.0)(jiti@2.6.1)(lightningcss@1.33.0)(typescript@6.0.2)(vitest@4.1.11(@types/node@26.6.4)(@vitest/coverage-istanbul@4.1.4(vitest@4.1.11))(jsdom@29.0.2(@noble/hashes@2.2.0))(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.33.0)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0)))(yaml@2.9.0)': dependencies: '@ampproject/remapping': 2.3.0 '@angular-devkit/architect': 0.2102.7(chokidar@5.0.0) '@angular-devkit/build-webpack': 0.2102.7(chokidar@5.0.0)(webpack-dev-server@5.2.3(tslib@2.8.1)(webpack@5.105.2(esbuild@0.27.3)))(webpack@5.105.2(esbuild@0.27.3)) '@angular-devkit/core': 21.2.7(chokidar@5.0.0) - '@angular/build': 21.2.7(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2))(@angular/compiler@21.2.8)(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@25.6.0)(chokidar@5.0.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.33.0)(postcss@8.5.6)(terser@5.46.0)(tslib@2.8.1)(typescript@6.0.2)(vitest@4.1.11(@types/node@25.6.0)(@vitest/coverage-istanbul@4.1.4(vitest@4.1.11))(jsdom@29.0.2(@noble/hashes@2.2.0))(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.33.0)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0)))(yaml@2.9.0) + '@angular/build': 21.2.7(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2))(@angular/compiler@21.2.8)(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@26.6.4)(chokidar@5.0.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.33.0)(postcss@8.5.6)(terser@5.46.0)(tslib@2.8.1)(typescript@6.0.2)(vitest@4.1.11(@types/node@26.6.4)(@vitest/coverage-istanbul@4.1.4(vitest@4.1.11))(jsdom@29.0.2(@noble/hashes@2.2.0))(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.33.0)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0)))(yaml@2.9.0) '@angular/compiler-cli': 21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2) '@babel/core': 7.29.0 '@babel/generator': 7.29.1 @@ -9520,13 +9526,13 @@ snapshots: - webpack-cli - yaml - '@angular-devkit/build-angular@21.2.7(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2))(@angular/compiler@21.2.8)(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@25.6.0)(chokidar@5.0.0)(jiti@2.6.1)(lightningcss@1.33.0)(typescript@6.0.2)(vitest@4.1.11(@types/node@25.6.0)(@vitest/coverage-istanbul@4.1.4(vitest@4.1.11))(jsdom@29.0.2(@noble/hashes@2.2.0))(vite@8.3.0(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0)))(yaml@2.9.0)': + '@angular-devkit/build-angular@21.2.7(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2))(@angular/compiler@21.2.8)(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@26.6.4)(chokidar@5.0.0)(jiti@2.6.1)(lightningcss@1.33.0)(typescript@6.0.2)(vitest@4.1.11(@types/node@26.6.4)(@vitest/coverage-istanbul@4.1.4(vitest@4.1.11))(jsdom@29.0.2(@noble/hashes@2.2.0))(vite@8.3.0(@types/node@26.6.4)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0)))(yaml@2.9.0)': dependencies: '@ampproject/remapping': 2.3.0 '@angular-devkit/architect': 0.2102.7(chokidar@5.0.0) '@angular-devkit/build-webpack': 0.2102.7(chokidar@5.0.0)(webpack-dev-server@5.2.3(tslib@2.8.1)(webpack@5.105.2(esbuild@0.27.3)))(webpack@5.105.2(esbuild@0.27.3)) '@angular-devkit/core': 21.2.7(chokidar@5.0.0) - '@angular/build': 21.2.7(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2))(@angular/compiler@21.2.8)(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@25.6.0)(chokidar@5.0.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.33.0)(postcss@8.5.6)(terser@5.46.0)(tslib@2.8.1)(typescript@6.0.2)(vitest@4.1.11(@types/node@25.6.0)(@vitest/coverage-istanbul@4.1.4(vitest@4.1.11))(jsdom@29.0.2(@noble/hashes@2.2.0))(vite@8.3.0(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0)))(yaml@2.9.0) + '@angular/build': 21.2.7(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2))(@angular/compiler@21.2.8)(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@26.6.4)(chokidar@5.0.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.33.0)(postcss@8.5.6)(terser@5.46.0)(tslib@2.8.1)(typescript@6.0.2)(vitest@4.1.11(@types/node@26.6.4)(@vitest/coverage-istanbul@4.1.4(vitest@4.1.11))(jsdom@29.0.2(@noble/hashes@2.2.0))(vite@8.3.0(@types/node@26.6.4)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0)))(yaml@2.9.0) '@angular/compiler-cli': 21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2) '@babel/core': 7.29.0 '@babel/generator': 7.29.1 @@ -9642,7 +9648,7 @@ snapshots: '@angular/core': 21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1) tslib: 2.8.1 - '@angular/build@21.2.7(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2))(@angular/compiler@21.2.8)(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@25.6.0)(chokidar@5.0.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.33.0)(postcss@8.5.28)(terser@5.46.0)(tslib@2.8.1)(typescript@6.0.2)(vitest@4.1.11(@types/node@25.6.0)(@vitest/coverage-istanbul@4.1.4(vitest@4.1.11))(jsdom@29.0.2(@noble/hashes@2.2.0))(vite@8.3.0(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0)))(yaml@2.9.0)': + '@angular/build@21.2.7(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2))(@angular/compiler@21.2.8)(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@26.6.4)(chokidar@5.0.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.33.0)(postcss@8.5.28)(terser@5.46.0)(tslib@2.8.1)(typescript@6.0.2)(vitest@4.1.11(@types/node@26.6.4)(@vitest/coverage-istanbul@4.1.4(vitest@4.1.11))(jsdom@29.0.2(@noble/hashes@2.2.0))(vite@8.3.0(@types/node@26.6.4)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0)))(yaml@2.9.0)': dependencies: '@ampproject/remapping': 2.3.0 '@angular-devkit/architect': 0.2102.7(chokidar@5.0.0) @@ -9651,8 +9657,8 @@ snapshots: '@babel/core': 7.29.0 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-split-export-declaration': 7.24.7 - '@inquirer/confirm': 5.1.21(@types/node@25.6.0) - '@vitejs/plugin-basic-ssl': 2.1.4(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.33.0)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0)) + '@inquirer/confirm': 5.1.21(@types/node@26.6.4) + '@vitejs/plugin-basic-ssl': 2.1.4(vite@7.3.2(@types/node@26.6.4)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.33.0)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0)) beasties: 0.4.1 browserslist: 4.28.9 esbuild: 0.27.3 @@ -9673,7 +9679,7 @@ snapshots: tslib: 2.8.1 typescript: 6.0.2 undici: 7.24.4 - vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.33.0)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0) + vite: 7.3.2(@types/node@26.6.4)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.33.0)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0) watchpack: 2.5.1 optionalDependencies: '@angular/core': 21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1) @@ -9681,7 +9687,7 @@ snapshots: less: 4.4.2 lmdb: 3.5.1 postcss: 8.5.28 - vitest: 4.1.11(@types/node@25.6.0)(@vitest/coverage-istanbul@4.1.4)(jsdom@29.0.2(@noble/hashes@2.2.0))(vite@8.3.0(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0)) + vitest: 4.1.11(@types/node@26.6.4)(@vitest/coverage-istanbul@4.1.4)(jsdom@29.0.2(@noble/hashes@2.2.0))(vite@8.3.0(@types/node@26.6.4)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0)) transitivePeerDependencies: - '@emnapi/core' - '@emnapi/runtime' @@ -9698,7 +9704,7 @@ snapshots: - yaml optional: true - '@angular/build@21.2.7(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2))(@angular/compiler@21.2.8)(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@25.6.0)(chokidar@5.0.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.33.0)(postcss@8.5.6)(terser@5.46.0)(tslib@2.8.1)(typescript@6.0.2)(vitest@4.1.11(@types/node@25.6.0)(@vitest/coverage-istanbul@4.1.4(vitest@4.1.11))(jsdom@29.0.2(@noble/hashes@2.2.0))(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.33.0)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0)))(yaml@2.9.0)': + '@angular/build@21.2.7(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2))(@angular/compiler@21.2.8)(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@26.6.4)(chokidar@5.0.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.33.0)(postcss@8.5.6)(terser@5.46.0)(tslib@2.8.1)(typescript@6.0.2)(vitest@4.1.11(@types/node@26.6.4)(@vitest/coverage-istanbul@4.1.4(vitest@4.1.11))(jsdom@29.0.2(@noble/hashes@2.2.0))(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.33.0)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0)))(yaml@2.9.0)': dependencies: '@ampproject/remapping': 2.3.0 '@angular-devkit/architect': 0.2102.7(chokidar@5.0.0) @@ -9707,7 +9713,7 @@ snapshots: '@babel/core': 7.29.0 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-split-export-declaration': 7.24.7 - '@inquirer/confirm': 5.1.21(@types/node@25.6.0) + '@inquirer/confirm': 5.1.21(@types/node@26.6.4) '@vitejs/plugin-basic-ssl': 2.1.4(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.33.0)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0)) beasties: 0.4.1 browserslist: 4.28.9 @@ -9729,7 +9735,7 @@ snapshots: tslib: 2.8.1 typescript: 6.0.2 undici: 7.24.4 - vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.33.0)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0) + vite: 7.3.2(@types/node@26.6.4)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.33.0)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0) watchpack: 2.5.1 optionalDependencies: '@angular/core': 21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1) @@ -9737,7 +9743,7 @@ snapshots: less: 4.4.2 lmdb: 3.5.1 postcss: 8.5.6 - vitest: 4.1.11(@types/node@25.6.0)(@vitest/coverage-istanbul@4.1.4(vitest@4.1.11))(jsdom@29.0.2(@noble/hashes@2.2.0))(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.33.0)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0)) + vitest: 4.1.11(@types/node@26.6.4)(@vitest/coverage-istanbul@4.1.4(vitest@4.1.11))(jsdom@29.0.2(@noble/hashes@2.2.0))(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.33.0)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0)) transitivePeerDependencies: - '@emnapi/core' - '@emnapi/runtime' @@ -9753,7 +9759,7 @@ snapshots: - tsx - yaml - '@angular/build@21.2.7(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2))(@angular/compiler@21.2.8)(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@25.6.0)(chokidar@5.0.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.33.0)(postcss@8.5.6)(terser@5.46.0)(tslib@2.8.1)(typescript@6.0.2)(vitest@4.1.11(@types/node@25.6.0)(@vitest/coverage-istanbul@4.1.4(vitest@4.1.11))(jsdom@29.0.2(@noble/hashes@2.2.0))(vite@8.3.0(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0)))(yaml@2.9.0)': + '@angular/build@21.2.7(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2))(@angular/compiler@21.2.8)(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@26.6.4)(chokidar@5.0.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.33.0)(postcss@8.5.6)(terser@5.46.0)(tslib@2.8.1)(typescript@6.0.2)(vitest@4.1.11(@types/node@26.6.4)(@vitest/coverage-istanbul@4.1.4(vitest@4.1.11))(jsdom@29.0.2(@noble/hashes@2.2.0))(vite@8.3.0(@types/node@26.6.4)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0)))(yaml@2.9.0)': dependencies: '@ampproject/remapping': 2.3.0 '@angular-devkit/architect': 0.2102.7(chokidar@5.0.0) @@ -9762,8 +9768,8 @@ snapshots: '@babel/core': 7.29.0 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-split-export-declaration': 7.24.7 - '@inquirer/confirm': 5.1.21(@types/node@25.6.0) - '@vitejs/plugin-basic-ssl': 2.1.4(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.33.0)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0)) + '@inquirer/confirm': 5.1.21(@types/node@26.6.4) + '@vitejs/plugin-basic-ssl': 2.1.4(vite@7.3.2(@types/node@26.6.4)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.33.0)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0)) beasties: 0.4.1 browserslist: 4.28.9 esbuild: 0.27.3 @@ -9784,7 +9790,7 @@ snapshots: tslib: 2.8.1 typescript: 6.0.2 undici: 7.24.4 - vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.33.0)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0) + vite: 7.3.2(@types/node@26.6.4)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.33.0)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0) watchpack: 2.5.1 optionalDependencies: '@angular/core': 21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1) @@ -9792,7 +9798,7 @@ snapshots: less: 4.4.2 lmdb: 3.5.1 postcss: 8.5.6 - vitest: 4.1.11(@types/node@25.6.0)(@vitest/coverage-istanbul@4.1.4)(jsdom@29.0.2(@noble/hashes@2.2.0))(vite@8.3.0(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0)) + vitest: 4.1.11(@types/node@26.6.4)(@vitest/coverage-istanbul@4.1.4)(jsdom@29.0.2(@noble/hashes@2.2.0))(vite@8.3.0(@types/node@26.6.4)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0)) transitivePeerDependencies: - '@emnapi/core' - '@emnapi/runtime' @@ -9834,6 +9840,32 @@ snapshots: - chokidar - supports-color + '@angular/cli@21.2.7(@types/node@26.6.4)(chokidar@5.0.0)': + dependencies: + '@angular-devkit/architect': 0.2102.7(chokidar@5.0.0) + '@angular-devkit/core': 21.2.7(chokidar@5.0.0) + '@angular-devkit/schematics': 21.2.7(chokidar@5.0.0) + '@inquirer/prompts': 7.10.1(@types/node@26.6.4) + '@listr2/prompt-adapter-inquirer': 3.0.5(@inquirer/prompts@7.10.1(@types/node@26.6.4))(@types/node@26.6.4)(listr2@9.0.5) + '@modelcontextprotocol/sdk': 1.26.0(zod@4.3.6) + '@schematics/angular': 21.2.7(chokidar@5.0.0) + '@yarnpkg/lockfile': 1.1.0 + algoliasearch: 5.48.1 + ini: 6.0.0 + jsonc-parser: 3.3.1 + listr2: 9.0.5 + npm-package-arg: 13.0.2 + pacote: 21.3.1 + parse5-html-rewriting-stream: 8.0.0 + semver: 7.7.4 + yargs: 18.0.0 + zod: 4.3.6 + transitivePeerDependencies: + - '@cfworker/json-schema' + - '@types/node' + - chokidar + - supports-color + '@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2)': dependencies: '@angular/core': 21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1) @@ -10703,7 +10735,7 @@ snapshots: transitivePeerDependencies: - encoding - '@changesets/cli@2.30.0(@types/node@25.6.0)': + '@changesets/cli@2.30.0(@types/node@26.6.4)': dependencies: '@changesets/apply-release-plan': 7.1.0 '@changesets/assemble-release-plan': 6.0.9 @@ -10719,7 +10751,7 @@ snapshots: '@changesets/should-skip-package': 0.1.2 '@changesets/types': 6.1.0 '@changesets/write': 0.4.0 - '@inquirer/external-editor': 1.0.3(@types/node@25.6.0) + '@inquirer/external-editor': 1.0.3(@types/node@26.6.4) '@manypkg/get-packages': 1.1.3 ansi-colors: 4.1.3 enquirer: 2.4.1 @@ -11198,6 +11230,16 @@ snapshots: optionalDependencies: '@types/node': 25.6.0 + '@inquirer/checkbox@4.3.2(@types/node@26.6.4)': + dependencies: + '@inquirer/ansi': 1.0.2 + '@inquirer/core': 10.3.2(@types/node@26.6.4) + '@inquirer/figures': 1.0.15 + '@inquirer/type': 3.0.10(@types/node@26.6.4) + yoctocolors-cjs: 2.1.3 + optionalDependencies: + '@types/node': 26.6.4 + '@inquirer/confirm@5.1.21(@types/node@25.6.0)': dependencies: '@inquirer/core': 10.3.2(@types/node@25.6.0) @@ -11205,6 +11247,13 @@ snapshots: optionalDependencies: '@types/node': 25.6.0 + '@inquirer/confirm@5.1.21(@types/node@26.6.4)': + dependencies: + '@inquirer/core': 10.3.2(@types/node@26.6.4) + '@inquirer/type': 3.0.10(@types/node@26.6.4) + optionalDependencies: + '@types/node': 26.6.4 + '@inquirer/core@10.3.2(@types/node@25.6.0)': dependencies: '@inquirer/ansi': 1.0.2 @@ -11218,6 +11267,19 @@ snapshots: optionalDependencies: '@types/node': 25.6.0 + '@inquirer/core@10.3.2(@types/node@26.6.4)': + dependencies: + '@inquirer/ansi': 1.0.2 + '@inquirer/figures': 1.0.15 + '@inquirer/type': 3.0.10(@types/node@26.6.4) + cli-width: 4.1.0 + mute-stream: 2.0.0 + signal-exit: 4.1.0 + wrap-ansi: 6.2.0 + yoctocolors-cjs: 2.1.3 + optionalDependencies: + '@types/node': 26.6.4 + '@inquirer/editor@4.2.23(@types/node@25.6.0)': dependencies: '@inquirer/core': 10.3.2(@types/node@25.6.0) @@ -11226,6 +11288,14 @@ snapshots: optionalDependencies: '@types/node': 25.6.0 + '@inquirer/editor@4.2.23(@types/node@26.6.4)': + dependencies: + '@inquirer/core': 10.3.2(@types/node@26.6.4) + '@inquirer/external-editor': 1.0.3(@types/node@26.6.4) + '@inquirer/type': 3.0.10(@types/node@26.6.4) + optionalDependencies: + '@types/node': 26.6.4 + '@inquirer/expand@4.0.23(@types/node@25.6.0)': dependencies: '@inquirer/core': 10.3.2(@types/node@25.6.0) @@ -11234,6 +11304,14 @@ snapshots: optionalDependencies: '@types/node': 25.6.0 + '@inquirer/expand@4.0.23(@types/node@26.6.4)': + dependencies: + '@inquirer/core': 10.3.2(@types/node@26.6.4) + '@inquirer/type': 3.0.10(@types/node@26.6.4) + yoctocolors-cjs: 2.1.3 + optionalDependencies: + '@types/node': 26.6.4 + '@inquirer/external-editor@1.0.3(@types/node@25.6.0)': dependencies: chardet: 2.1.1 @@ -11241,6 +11319,13 @@ snapshots: optionalDependencies: '@types/node': 25.6.0 + '@inquirer/external-editor@1.0.3(@types/node@26.6.4)': + dependencies: + chardet: 2.1.1 + iconv-lite: 0.7.2 + optionalDependencies: + '@types/node': 26.6.4 + '@inquirer/figures@1.0.15': {} '@inquirer/input@4.3.1(@types/node@25.6.0)': @@ -11250,6 +11335,13 @@ snapshots: optionalDependencies: '@types/node': 25.6.0 + '@inquirer/input@4.3.1(@types/node@26.6.4)': + dependencies: + '@inquirer/core': 10.3.2(@types/node@26.6.4) + '@inquirer/type': 3.0.10(@types/node@26.6.4) + optionalDependencies: + '@types/node': 26.6.4 + '@inquirer/number@3.0.23(@types/node@25.6.0)': dependencies: '@inquirer/core': 10.3.2(@types/node@25.6.0) @@ -11257,6 +11349,13 @@ snapshots: optionalDependencies: '@types/node': 25.6.0 + '@inquirer/number@3.0.23(@types/node@26.6.4)': + dependencies: + '@inquirer/core': 10.3.2(@types/node@26.6.4) + '@inquirer/type': 3.0.10(@types/node@26.6.4) + optionalDependencies: + '@types/node': 26.6.4 + '@inquirer/password@4.0.23(@types/node@25.6.0)': dependencies: '@inquirer/ansi': 1.0.2 @@ -11265,6 +11364,14 @@ snapshots: optionalDependencies: '@types/node': 25.6.0 + '@inquirer/password@4.0.23(@types/node@26.6.4)': + dependencies: + '@inquirer/ansi': 1.0.2 + '@inquirer/core': 10.3.2(@types/node@26.6.4) + '@inquirer/type': 3.0.10(@types/node@26.6.4) + optionalDependencies: + '@types/node': 26.6.4 + '@inquirer/prompts@7.10.1(@types/node@25.6.0)': dependencies: '@inquirer/checkbox': 4.3.2(@types/node@25.6.0) @@ -11280,6 +11387,21 @@ snapshots: optionalDependencies: '@types/node': 25.6.0 + '@inquirer/prompts@7.10.1(@types/node@26.6.4)': + dependencies: + '@inquirer/checkbox': 4.3.2(@types/node@26.6.4) + '@inquirer/confirm': 5.1.21(@types/node@26.6.4) + '@inquirer/editor': 4.2.23(@types/node@26.6.4) + '@inquirer/expand': 4.0.23(@types/node@26.6.4) + '@inquirer/input': 4.3.1(@types/node@26.6.4) + '@inquirer/number': 3.0.23(@types/node@26.6.4) + '@inquirer/password': 4.0.23(@types/node@26.6.4) + '@inquirer/rawlist': 4.1.11(@types/node@26.6.4) + '@inquirer/search': 3.2.2(@types/node@26.6.4) + '@inquirer/select': 4.4.2(@types/node@26.6.4) + optionalDependencies: + '@types/node': 26.6.4 + '@inquirer/rawlist@4.1.11(@types/node@25.6.0)': dependencies: '@inquirer/core': 10.3.2(@types/node@25.6.0) @@ -11288,6 +11410,14 @@ snapshots: optionalDependencies: '@types/node': 25.6.0 + '@inquirer/rawlist@4.1.11(@types/node@26.6.4)': + dependencies: + '@inquirer/core': 10.3.2(@types/node@26.6.4) + '@inquirer/type': 3.0.10(@types/node@26.6.4) + yoctocolors-cjs: 2.1.3 + optionalDependencies: + '@types/node': 26.6.4 + '@inquirer/search@3.2.2(@types/node@25.6.0)': dependencies: '@inquirer/core': 10.3.2(@types/node@25.6.0) @@ -11297,6 +11427,15 @@ snapshots: optionalDependencies: '@types/node': 25.6.0 + '@inquirer/search@3.2.2(@types/node@26.6.4)': + dependencies: + '@inquirer/core': 10.3.2(@types/node@26.6.4) + '@inquirer/figures': 1.0.15 + '@inquirer/type': 3.0.10(@types/node@26.6.4) + yoctocolors-cjs: 2.1.3 + optionalDependencies: + '@types/node': 26.6.4 + '@inquirer/select@4.4.2(@types/node@25.6.0)': dependencies: '@inquirer/ansi': 1.0.2 @@ -11307,10 +11446,24 @@ snapshots: optionalDependencies: '@types/node': 25.6.0 + '@inquirer/select@4.4.2(@types/node@26.6.4)': + dependencies: + '@inquirer/ansi': 1.0.2 + '@inquirer/core': 10.3.2(@types/node@26.6.4) + '@inquirer/figures': 1.0.15 + '@inquirer/type': 3.0.10(@types/node@26.6.4) + yoctocolors-cjs: 2.1.3 + optionalDependencies: + '@types/node': 26.6.4 + '@inquirer/type@3.0.10(@types/node@25.6.0)': optionalDependencies: '@types/node': 25.6.0 + '@inquirer/type@3.0.10(@types/node@26.6.4)': + optionalDependencies: + '@types/node': 26.6.4 + '@isaacs/cliui@8.0.2': dependencies: string-width: 5.1.2 @@ -11497,6 +11650,14 @@ snapshots: transitivePeerDependencies: - '@types/node' + '@listr2/prompt-adapter-inquirer@3.0.5(@inquirer/prompts@7.10.1(@types/node@26.6.4))(@types/node@26.6.4)(listr2@9.0.5)': + dependencies: + '@inquirer/prompts': 7.10.1(@types/node@26.6.4) + '@inquirer/type': 3.0.10(@types/node@26.6.4) + listr2: 9.0.5 + transitivePeerDependencies: + - '@types/node' + '@lit-labs/ssr-dom-shim@1.5.1': {} '@lit/reactive-element@2.1.2': @@ -12101,6 +12262,25 @@ snapshots: - rollup - supports-color + '@preact/preset-vite@2.10.5(@babel/core@7.29.0)(preact@10.29.1)(rollup@4.60.4)(vite@8.3.0(@types/node@26.6.4)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0))': + dependencies: + '@babel/core': 7.29.0 + '@babel/plugin-transform-react-jsx': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-react-jsx-development': 7.27.1(@babel/core@7.29.0) + '@prefresh/vite': 2.4.12(preact@10.29.1)(vite@8.3.0(@types/node@26.6.4)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0)) + '@rollup/pluginutils': 5.3.0(rollup@4.60.4) + babel-plugin-transform-hook-names: 1.0.2(@babel/core@7.29.0) + debug: 4.4.3 + magic-string: 0.30.21 + picocolors: 1.1.1 + vite: 8.3.0(@types/node@26.6.4)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0) + vite-prerender-plugin: 0.5.13(vite@8.3.0(@types/node@26.6.4)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0)) + zimmerframe: 1.1.5 + transitivePeerDependencies: + - preact + - rollup + - supports-color + '@preact/signals-core@1.14.1': {} '@preact/signals@2.9.0(preact@10.29.1)': @@ -12128,6 +12308,18 @@ snapshots: transitivePeerDependencies: - supports-color + '@prefresh/vite@2.4.12(preact@10.29.1)(vite@8.3.0(@types/node@26.6.4)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0))': + dependencies: + '@babel/core': 7.29.0 + '@prefresh/babel-plugin': 0.5.3 + '@prefresh/core': 1.5.9(preact@10.29.1) + '@prefresh/utils': 1.2.1 + '@rollup/pluginutils': 4.2.1 + preact: 10.29.1 + vite: 8.3.0(@types/node@26.6.4)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0) + transitivePeerDependencies: + - supports-color + '@publint/pack@0.1.4': {} '@quansync/fs@1.0.0': @@ -12472,6 +12664,15 @@ snapshots: vite: 8.3.0(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0) vitefu: 1.1.2(vite@8.3.0(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0)) + '@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.7(@typescript-eslint/types@8.58.1))(vite@8.3.0(@types/node@26.6.4)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0))': + dependencies: + deepmerge: 4.3.1 + magic-string: 0.30.21 + obug: 2.2.1 + svelte: 5.55.7(@typescript-eslint/types@8.58.1) + vite: 8.3.0(@types/node@26.6.4)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0) + vitefu: 1.1.2(vite@8.3.0(@types/node@26.6.4)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0)) + '@tanstack/eslint-config@0.4.0(@typescript-eslint/utils@8.58.1(eslint@10.10.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.10.0(jiti@2.6.1))(typescript@6.0.2)': dependencies: '@eslint/js': 10.0.1(eslint@10.10.0(jiti@2.6.1)) @@ -12557,14 +12758,14 @@ snapshots: dependencies: svelte: 5.55.7(@typescript-eslint/types@8.58.1) - '@testing-library/svelte@5.3.1(svelte@5.55.7(@typescript-eslint/types@8.58.1))(vite@8.3.0(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0))(vitest@4.1.11(@types/node@25.6.0)(@vitest/coverage-istanbul@4.1.4(vitest@4.1.11))(jsdom@29.0.2(@noble/hashes@2.2.0))(vite@8.3.0(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0)))': + '@testing-library/svelte@5.3.1(svelte@5.55.7(@typescript-eslint/types@8.58.1))(vite@8.3.0(@types/node@26.6.4)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0))(vitest@4.1.11(@types/node@26.6.4)(@vitest/coverage-istanbul@4.1.4(vitest@4.1.11))(jsdom@29.0.2(@noble/hashes@2.2.0))(vite@8.3.0(@types/node@26.6.4)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0)))': dependencies: '@testing-library/dom': 10.4.1 '@testing-library/svelte-core': 1.0.0(svelte@5.55.7(@typescript-eslint/types@8.58.1)) svelte: 5.55.7(@typescript-eslint/types@8.58.1) optionalDependencies: - vite: 8.3.0(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0) - vitest: 4.1.11(@types/node@25.6.0)(@vitest/coverage-istanbul@4.1.4)(jsdom@29.0.2(@noble/hashes@2.2.0))(vite@8.3.0(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0)) + vite: 8.3.0(@types/node@26.6.4)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0) + vitest: 4.1.11(@types/node@26.6.4)(@vitest/coverage-istanbul@4.1.4)(jsdom@29.0.2(@noble/hashes@2.2.0))(vite@8.3.0(@types/node@26.6.4)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0)) '@testing-library/user-event@14.6.1(@testing-library/dom@10.4.1)': dependencies: @@ -12731,6 +12932,10 @@ snapshots: dependencies: undici-types: 7.19.2 + '@types/node@26.6.4': + dependencies: + undici-types: 8.9.0 + '@types/qs@6.15.0': {} '@types/range-parser@1.2.7': {} @@ -12932,17 +13137,32 @@ snapshots: dependencies: vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.33.0)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0) + '@vitejs/plugin-basic-ssl@2.1.4(vite@7.3.2(@types/node@26.6.4)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.33.0)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0))': + dependencies: + vite: 7.3.2(@types/node@26.6.4)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.33.0)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0) + '@vitejs/plugin-react@6.0.1(vite@8.3.0(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0))': dependencies: '@rolldown/pluginutils': 1.0.0-rc.7 vite: 8.3.0(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0) + '@vitejs/plugin-react@6.0.1(vite@8.3.0(@types/node@26.6.4)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0))': + dependencies: + '@rolldown/pluginutils': 1.0.0-rc.7 + vite: 8.3.0(@types/node@26.6.4)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0) + '@vitejs/plugin-vue@6.0.5(vite@8.3.0(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0))(vue@3.5.32(typescript@6.0.2))': dependencies: '@rolldown/pluginutils': 1.0.0-rc.2 vite: 8.3.0(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0) vue: 3.5.32(typescript@6.0.2) + '@vitejs/plugin-vue@6.0.5(vite@8.3.0(@types/node@26.6.4)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0))(vue@3.5.32(typescript@6.0.2))': + dependencies: + '@rolldown/pluginutils': 1.0.0-rc.2 + vite: 8.3.0(@types/node@26.6.4)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0) + vue: 3.5.32(typescript@6.0.2) + '@vitest/coverage-istanbul@4.1.4(vitest@4.1.11)': dependencies: '@babel/core': 7.29.0 @@ -12955,7 +13175,7 @@ snapshots: magicast: 0.5.2 obug: 2.2.1 tinyrainbow: 3.1.1 - vitest: 4.1.11(@types/node@25.6.0)(@vitest/coverage-istanbul@4.1.4)(jsdom@29.0.2(@noble/hashes@2.2.0))(vite@8.3.0(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0)) + vitest: 4.1.11(@types/node@26.6.4)(@vitest/coverage-istanbul@4.1.4)(jsdom@29.0.2(@noble/hashes@2.2.0))(vite@8.3.0(@types/node@26.6.4)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0)) transitivePeerDependencies: - supports-color @@ -12977,13 +13197,13 @@ snapshots: vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.33.0)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0) optional: true - '@vitest/mocker@4.1.11(vite@8.3.0(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0))': + '@vitest/mocker@4.1.11(vite@8.3.0(@types/node@26.6.4)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0))': dependencies: '@vitest/spy': 4.1.11 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 8.3.0(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0) + vite: 8.3.0(@types/node@26.6.4)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0) '@vitest/pretty-format@4.1.11': dependencies: @@ -16304,6 +16524,19 @@ snapshots: transitivePeerDependencies: - '@typescript-eslint/types' + octane@0.1.21(@typescript-eslint/types@8.58.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@8.3.0(@types/node@26.6.4)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0)): + dependencies: + '@tsrx/core': 0.1.56(@typescript-eslint/types@8.58.1) + '@types/react': 19.2.17 + devalue: 5.9.2 + esrap: 2.3.7(@typescript-eslint/types@8.58.1) + optionalDependencies: + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) + vite: 8.3.0(@types/node@26.6.4)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0) + transitivePeerDependencies: + - '@typescript-eslint/types' + on-finished@2.4.1: dependencies: ee-first: 1.1.1 @@ -17868,6 +18101,8 @@ snapshots: undici-types@7.19.2: {} + undici-types@8.9.0: {} + undici@7.24.4: {} undici@7.24.6: {} @@ -17957,6 +18192,21 @@ snapshots: transitivePeerDependencies: - supports-color + vite-plugin-solid@2.11.12(@testing-library/jest-dom@6.9.1)(solid-js@1.9.12)(vite@8.3.0(@types/node@26.6.4)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0)): + dependencies: + '@babel/core': 7.29.0 + '@types/babel__core': 7.20.5 + babel-preset-solid: 1.9.12(@babel/core@7.29.0)(solid-js@1.9.12) + merge-anything: 5.1.7 + solid-js: 1.9.12 + solid-refresh: 0.6.3(solid-js@1.9.12) + vite: 8.3.0(@types/node@26.6.4)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0) + vitefu: 1.1.2(vite@8.3.0(@types/node@26.6.4)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0)) + optionalDependencies: + '@testing-library/jest-dom': 6.9.1 + transitivePeerDependencies: + - supports-color + vite-prerender-plugin@0.5.13(vite@8.3.0(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0)): dependencies: kolorist: 1.8.0 @@ -17967,6 +18217,16 @@ snapshots: stack-trace: 1.0.0-pre2 vite: 8.3.0(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0) + vite-prerender-plugin@0.5.13(vite@8.3.0(@types/node@26.6.4)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0)): + dependencies: + kolorist: 1.8.0 + magic-string: 0.30.21 + node-html-parser: 6.1.13 + simple-code-frame: 1.3.0 + source-map: 0.7.6 + stack-trace: 1.0.0-pre2 + vite: 8.3.0(@types/node@26.6.4)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0) + vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.33.0)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0): dependencies: esbuild: 0.27.7 @@ -17985,6 +18245,24 @@ snapshots: terser: 5.46.0 yaml: 2.9.0 + vite@7.3.2(@types/node@26.6.4)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.33.0)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0): + dependencies: + esbuild: 0.27.7 + fdir: 6.5.0(picomatch@4.0.7) + picomatch: 4.0.7 + postcss: 8.5.28 + rollup: 4.60.4 + tinyglobby: 0.2.17 + optionalDependencies: + '@types/node': 26.6.4 + fsevents: 2.3.3 + jiti: 2.6.1 + less: 4.4.2 + lightningcss: 1.33.0 + sass: 1.97.3 + terser: 5.46.0 + yaml: 2.9.0 + vite@8.3.0(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0): dependencies: lightningcss: 1.33.0 @@ -18002,11 +18280,61 @@ snapshots: terser: 5.46.0 yaml: 2.9.0 + vite@8.3.0(@types/node@26.6.4)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0): + dependencies: + lightningcss: 1.33.0 + picomatch: 4.0.7 + postcss: 8.5.28 + rolldown: 1.2.8 + tinyglobby: 0.2.17 + optionalDependencies: + '@types/node': 26.6.4 + esbuild: 0.27.7 + fsevents: 2.3.3 + jiti: 2.6.1 + less: 4.4.2 + sass: 1.97.3 + terser: 5.46.0 + yaml: 2.9.0 + vitefu@1.1.2(vite@8.3.0(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0)): optionalDependencies: vite: 8.3.0(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0) - vitest@4.1.11(@types/node@25.6.0)(@vitest/coverage-istanbul@4.1.4(vitest@4.1.11))(jsdom@29.0.2(@noble/hashes@2.2.0))(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.33.0)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0)): + vitefu@1.1.2(vite@8.3.0(@types/node@26.6.4)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0)): + optionalDependencies: + vite: 8.3.0(@types/node@26.6.4)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0) + + vitest@4.1.11(@types/node@25.6.0)(@vitest/coverage-istanbul@4.1.4(vitest@4.1.11))(jsdom@29.0.2(@noble/hashes@2.2.0))(vite@8.3.0(@types/node@26.6.4)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0)): + dependencies: + '@vitest/expect': 4.1.11 + '@vitest/mocker': 4.1.11(vite@8.3.0(@types/node@26.6.4)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0)) + '@vitest/pretty-format': 4.1.11 + '@vitest/runner': 4.1.11 + '@vitest/snapshot': 4.1.11 + '@vitest/spy': 4.1.11 + '@vitest/utils': 4.1.11 + es-module-lexer: 2.3.2 + expect-type: 1.4.0 + magic-string: 0.30.21 + obug: 2.2.1 + pathe: 2.0.3 + picomatch: 4.0.7 + std-env: 4.2.0 + tinybench: 2.9.0 + tinyexec: 1.3.1 + tinyglobby: 0.2.17 + tinyrainbow: 3.1.1 + vite: 8.3.0(@types/node@26.6.4)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/node': 25.6.0 + '@vitest/coverage-istanbul': 4.1.4(vitest@4.1.11) + jsdom: 29.0.2(@noble/hashes@2.2.0) + transitivePeerDependencies: + - msw + + vitest@4.1.11(@types/node@26.6.4)(@vitest/coverage-istanbul@4.1.4(vitest@4.1.11))(jsdom@29.0.2(@noble/hashes@2.2.0))(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.33.0)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0)): dependencies: '@vitest/expect': 4.1.11 '@vitest/mocker': 4.1.11(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.33.0)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0)) @@ -18029,17 +18357,17 @@ snapshots: vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.33.0)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 25.6.0 + '@types/node': 26.6.4 '@vitest/coverage-istanbul': 4.1.4(vitest@4.1.11) jsdom: 29.0.2(@noble/hashes@2.2.0) transitivePeerDependencies: - msw optional: true - vitest@4.1.11(@types/node@25.6.0)(@vitest/coverage-istanbul@4.1.4)(jsdom@29.0.2(@noble/hashes@2.2.0))(vite@8.3.0(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0)): + vitest@4.1.11(@types/node@26.6.4)(@vitest/coverage-istanbul@4.1.4)(jsdom@29.0.2(@noble/hashes@2.2.0))(vite@8.3.0(@types/node@26.6.4)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0)): dependencies: '@vitest/expect': 4.1.11 - '@vitest/mocker': 4.1.11(vite@8.3.0(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0)) + '@vitest/mocker': 4.1.11(vite@8.3.0(@types/node@26.6.4)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0)) '@vitest/pretty-format': 4.1.11 '@vitest/runner': 4.1.11 '@vitest/snapshot': 4.1.11 @@ -18056,10 +18384,10 @@ snapshots: tinyexec: 1.3.1 tinyglobby: 0.2.17 tinyrainbow: 3.1.1 - vite: 8.3.0(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0) + vite: 8.3.0(@types/node@26.6.4)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.0) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 25.6.0 + '@types/node': 26.6.4 '@vitest/coverage-istanbul': 4.1.4(vitest@4.1.11) jsdom: 29.0.2(@noble/hashes@2.2.0) transitivePeerDependencies: