From 131df821f89df9695690cde6835ea79e53948dc3 Mon Sep 17 00:00:00 2001 From: Michael Sweeney Date: Tue, 15 Oct 2024 18:14:06 -0700 Subject: [PATCH 1/4] New implementation of proxyMap and proxySet with performance improvements (#965) * pushing up to get more eyes on it * added test for snapshot * taking a break * taking a break * removing extra set methods for now * sealed proxied obects * got all tests to pass * got rid of comma * got rid of set tests in utils folder * update version after update * updated to allow values to be keys * updated to allow values to be keys * updated package.json scripts * 2.0.1 * changing brances so storing attempts * updates * fixed get * added return type to fix types on snapshot * added this.data.length in has method * updated has to only show this.data.map if key doesn't exist * updated has to only show this.data.map if key doesn't exist * changed has to check if it's in a snapshot * remove getVersion - doesn't work * added back in canProxy * imported canProxy from valtio * removed unneeded functions and checks that are done in valtio core * changed canProxy * pushing up for proxyMap testing * removed unused file * updated proxyMap to use sparse array * removed use of internal map * added proxySet * moved proxySet to be the main one * added old proxySet in for reference * fixed proxySet * made proxyMap get set and delete consistent * better syntax for maybeProxify * added benchmarks for proxyMap * added benchmarks for proxySet * removed deno from lock file * removed all test files * updated maybeproxify in proxySet * pnpm frozen lockfile * change autoinstall peers to true in pnpm-lock * changed vitest.config.mts to ts * changed version number back and updated import paths to be relative * fixed toJSON to remain in order and proxified keys in .has() for proxyMap * tested set vs filter on empty slots * fixed pnpm lock file * ran pnpm install * auto-install-peers fix * added isSnapshot function for better readability * removed unused package * removed linked package in package.json * fixed lock file * changed to isProxy with this context * Update src/vanilla/utils/proxyMap.ts Co-authored-by: Daishi Kato * pushing up for testing * pushing up for testing * fixed delete, has and get * fixed delete, has and get * uploading newest changes * uploading newest changes * reverting * fixed import in test file * updated to use nextIndex * put nextIndex on the object itself * added undefined values to initialization * updated entries check * changed nextIndex to use local var * cached indexMap.has to index * removed unneeded index.has call * added this.nextIndex * replaced this.data.length with this.nextIndex * refactor * updated initial data and initial next data * added filled proxyMap and new benchmark * benchmark minSize * Revert "benchmark minSize" This reverts commit 91206ebf93f3415f2dcde735faf5d4eeb16d87ea. * compare 3 * compare 3 * keyVal * new keyval * minor optimization * added MIN_DATA_SIZE constant * move keyval * revert some changes * rename * removed old benchmarks and added vitest benchmarks for proxyMap * fixed lock file * added ts extension for older versions of ts in test file * changed MapIterator to IterableIterator * no longer importing with .ts extension * no longer importing with .ts extension * proxySet changes and added keyvals solution * removed ts extension from imports in proxySet and proxyMap-indexMap-keyvals * fixed toJSON in proxySet * change MapIterator to IterableIterator * add tree1 impl * got lock file from main * fixing lock file * added ts extensions backf * removed test example * extensions added back * recreating lockfile * reverting changes for website lockfile and todo-with-proxyMap lockfile * removed ts extension from proxyMap.bench.ts * reverted changes for lockfile and package.json * removed old btree implementation * changed MapIterator to IterableIterator * incomplete rawMap impl * a minor fix * fix? * export them properly * rename a little bit * revert default * fixed size issue * removed unneeded copy of key-vals * snap map * just to avoid warnings * an improvement to rawMap1, not sure if it works * enumerable size * Revert "enumerable size" This reverts commit 5acaed02a7c09f986b55a60778974693995206fb. * hack with _registerSnap * added benchmarks * do not enumerate index * added snap registry to keyval * fixed index check * added snap awareness to proxySet * added snap test to proxySet * fix * removed variations * removed subscribes in proxyMap * recover tree1 -> tree2 * fix a bug * added old file for reference * tree2 impl * refactor * bench tree2 * tests * updated proxySet * refactor proxyMap&Set * removed test file * merged branch and got to merge status * removed todo comment * added review suggestions * added review suggestions for proxySet as well * avoid maybeProxify * no need to add key in this data * removed isProxy check on has calls * removed maybeProxify from proxySet * added back in maybeProxify to proxySet * refactor --------- Co-authored-by: Daishi Kato Co-authored-by: daishi --- src/vanilla/utils/proxyMap.ts | 202 +++++++++++++++++------------- src/vanilla/utils/proxySet.ts | 225 ++++++++++++++++++++++++---------- tests/proxyMap.bench.ts | 150 +++++++++++++++++++++++ tests/proxyMap.test.tsx | 17 ++- tests/proxySet.test.tsx | 32 ++++- 5 files changed, 478 insertions(+), 148 deletions(-) create mode 100644 tests/proxyMap.bench.ts diff --git a/src/vanilla/utils/proxyMap.ts b/src/vanilla/utils/proxyMap.ts index 6fc3a9c0..40950b02 100644 --- a/src/vanilla/utils/proxyMap.ts +++ b/src/vanilla/utils/proxyMap.ts @@ -1,111 +1,149 @@ -import { proxy } from '../../vanilla.ts' +import { proxy, unstable_getInternalStates } from '../../vanilla.ts' -type KeyValRecord = [key: K, value: V] +const { proxyStateMap, snapCache } = unstable_getInternalStates() +const isProxy = (x: any) => proxyStateMap.has(x) -type InternalProxyMap = Map & { - data: KeyValRecord[] - toJSON: object +type InternalProxyObject = Map & { + data: Array + index: number + toJSON: () => Map } -/** - * proxyMap - * - * This is to create a proxy which mimic the native Map behavior. - * The API is the same as Map API - * - * @example - * import { proxyMap } from 'valtio/utils' - * const state = proxyMap([["key", "value"]]) - * - * //can be used inside a proxy as well - * const state = proxy({ - * count: 1, - * map: proxyMap() - * }) - * - * // When using an object as a key, you can wrap it with `ref` so it's not proxied - * // this is useful if you want to preserve the key equality - * import { ref } from 'valtio' - * - * const key = ref({}) - * state.set(key, "value") - * state.get(key) //value - * - * const key = {} - * state.set(key, "value") - * state.get(key) //undefined - */ -export function proxyMap(entries?: Iterable | null) { - const map: InternalProxyMap = proxy({ - data: Array.from(entries || []) as KeyValRecord[], - has(key) { - return this.data.some((p) => p[0] === key) +export function proxyMap(entries?: Iterable<[K, V]> | undefined | null) { + const initialData: Array = [] + let initialIndex = 0 + const indexMap = new Map() + + const snapMapCache = new WeakMap>() + const registerSnapMap = () => { + const cache = snapCache.get(vObject) + const latestSnap = cache?.[1] + if (latestSnap && !snapMapCache.has(latestSnap)) { + const clonedMap = new Map(indexMap) + snapMapCache.set(latestSnap, clonedMap) + } + } + const getMapForThis = (x: any) => snapMapCache.get(x) || indexMap + + if (entries) { + if (typeof entries[Symbol.iterator] !== 'function') { + throw new TypeError( + 'proxyMap:\n\tinitial state must be iterable\n\t\ttip: structure should be [[key, value]]', + ) + } + for (const [key, value] of entries) { + indexMap.set(key, initialIndex) + initialData[initialIndex++] = value + } + } + + const vObject: InternalProxyObject = { + data: initialData, + index: initialIndex, + get size() { + if (!isProxy(this)) { + registerSnapMap() + } + const map = getMapForThis(this) + return map.size + }, + get(key: K) { + const map = getMapForThis(this) + const index = map.get(key) + if (index === undefined) { + // eslint-disable-next-line @typescript-eslint/no-unused-expressions + this.index // touch property for tracking + return undefined + } + return this.data[index] + }, + has(key: K) { + const map = getMapForThis(this) + const exists = map.has(key) + if (!exists) { + // eslint-disable-next-line @typescript-eslint/no-unused-expressions + this.index // touch property for tracking + } + return exists }, - set(key, value) { - const record = this.data.find((p) => p[0] === key) - if (record) { - record[1] = value + set(key: K, value: V) { + if (!isProxy(this)) { + throw new Error('Cannot perform mutations on a snapshot') + } + const index = indexMap.get(key) + if (index === undefined) { + indexMap.set(key, this.index) + this.data[this.index++] = value } else { - this.data.push([key, value]) + this.data[index] = value } return this }, - get(key) { - return this.data.find((p) => p[0] === key)?.[1] - }, - delete(key) { - const index = this.data.findIndex((p) => p[0] === key) - if (index === -1) { + delete(key: K) { + if (!isProxy(this)) { + throw new Error('Cannot perform mutations on a snapshot') + } + const index = indexMap.get(key) + if (index === undefined) { return false } - this.data.splice(index, 1) + delete this.data[index] + indexMap.delete(key) return true }, clear() { - this.data.splice(0) - }, - get size() { - return this.data.length - }, - toJSON() { - return new Map(this.data) - }, - forEach(cb) { - this.data.forEach((p) => { - cb(p[1], p[0], this) + if (!isProxy(this)) { + throw new Error('Cannot perform mutations on a snapshot') + } + this.data.length = 0 // empty array + this.index = 0 + indexMap.clear() + }, + forEach(cb: (value: V, key: K, map: Map) => void) { + const map = getMapForThis(this) + map.forEach((index, key) => { + cb(this.data[index]!, key, this) }) }, - keys() { - return this.data.map((p) => p[0]).values() - }, - values() { - return this.data.map((p) => p[1]).values() + *entries(): MapIterator<[K, V]> { + const map = getMapForThis(this) + for (const [key, index] of map) { + yield [key, this.data[index]!] + } }, - entries() { - return new Map(this.data).entries() + *keys(): IterableIterator { + const map = getMapForThis(this) + for (const key of map.keys()) { + yield key + } }, - get [Symbol.toStringTag]() { - return 'Map' + *values(): IterableIterator { + const map = getMapForThis(this) + for (const index of map.values()) { + yield this.data[index]! + } }, [Symbol.iterator]() { return this.entries() }, - }) - - Object.defineProperties(map, { - data: { - enumerable: false, - }, - size: { - enumerable: false, + get [Symbol.toStringTag]() { + return 'Map' }, - toJSON: { - enumerable: false, + toJSON(): Map { + return new Map(this.entries()) }, + } + + const proxiedObject = proxy(vObject) + Object.defineProperties(proxiedObject, { + size: { enumerable: false }, + index: { enumerable: false }, + data: { enumerable: false }, + toJSON: { enumerable: false }, }) - Object.seal(map) + Object.seal(proxiedObject) - return map as unknown as Map & { + return proxiedObject as unknown as Map & { $$valtioSnapshot: Omit, 'set' | 'delete' | 'clear'> } } diff --git a/src/vanilla/utils/proxySet.ts b/src/vanilla/utils/proxySet.ts index 575d218c..7ba52119 100644 --- a/src/vanilla/utils/proxySet.ts +++ b/src/vanilla/utils/proxySet.ts @@ -1,98 +1,195 @@ -import { proxy } from '../../vanilla.ts' +import { proxy, unstable_getInternalStates } from '../../vanilla.ts' + +const { proxyStateMap, snapCache } = unstable_getInternalStates() +const maybeProxify = (x: any) => (typeof x === 'object' ? proxy({ x }).x : x) +const isProxy = (x: any) => proxyStateMap.has(x) -// properties that we don't want to expose to the end-user type InternalProxySet = Set & { data: T[] toJSON: object + index: number + intersection: (other: Set) => Set + isDisjointFrom: (other: Set) => boolean + isSubsetOf: (other: Set) => boolean + isSupersetOf: (other: Set) => boolean + symmetricDifference: (other: Set) => Set + union: (other: Set) => Set } -/** - * proxySet - * - * This is to create a proxy which mimic the native Set behavior. - * The API is the same as Set API - * - * @example - * import { proxySet } from 'valtio/utils' - * const state = proxySet([1,2,3]) - * //can be used inside a proxy as well - * const state = proxy({ - * count: 1, - * set: proxySet() - * }) - */ export function proxySet(initialValues?: Iterable | null) { - const set: InternalProxySet = proxy({ - data: Array.from(new Set(initialValues)), - has(value) { - return this.data.indexOf(value) !== -1 - }, - add(value) { - let hasProxy = false - if (typeof value === 'object' && value !== null) { - hasProxy = this.data.indexOf(proxy(value as T & object)) !== -1 + const initialData: T[] = [] + const indexMap = new Map() + let initialIndex = 0 + + const snapMapCache = new WeakMap>() + const registerSnapMap = () => { + const cache = snapCache.get(vObject) + const latestSnap = cache?.[1] + if (latestSnap && !snapMapCache.has(latestSnap)) { + const clonedMap = new Map(indexMap) + snapMapCache.set(latestSnap, clonedMap) + } + } + const getMapForThis = (x: any) => snapMapCache.get(x) || indexMap + + if (initialValues) { + if (typeof initialValues[Symbol.iterator] !== 'function') { + throw new TypeError('not iterable') + } + for (const value of initialValues) { + if (!indexMap.has(value)) { + const v = maybeProxify(value) + indexMap.set(v, initialIndex) + initialData[initialIndex++] = v } - if (this.data.indexOf(value) === -1 && !hasProxy) { - this.data.push(value) + } + } + + const vObject: InternalProxySet = { + data: initialData, + index: initialIndex, + get size() { + if (!isProxy(this)) { + registerSnapMap() + } + return indexMap.size + }, + has(value: T) { + const map = getMapForThis(this) + const v = maybeProxify(value) + const exists = map.has(v) + if (!exists) { + // eslint-disable-next-line @typescript-eslint/no-unused-expressions + this.index // touch property for tracking + } + return exists + }, + add(value: T) { + if (!isProxy(this)) { + throw new Error('Cannot perform mutations on a snapshot') + } + const v = maybeProxify(value) + if (!indexMap.has(v)) { + indexMap.set(v, this.index) + this.data[this.index++] = v } return this }, - delete(value) { - const index = this.data.indexOf(value) - if (index === -1) { + delete(value: T) { + if (!isProxy(this)) { + throw new Error('Cannot perform mutations on a snapshot') + } + const v = maybeProxify(value) + const index = indexMap.get(v) + if (index === undefined) { return false } - this.data.splice(index, 1) + delete this.data[index] + indexMap.delete(v) return true }, clear() { - this.data.splice(0) - }, - get size() { - return this.data.length + if (!isProxy(this)) { + throw new Error('Cannot perform mutations on a snapshot') + } + this.data.length = 0 // empty array + this.index = 0 + indexMap.clear() }, forEach(cb) { - this.data.forEach((value) => { - cb(value, value, this) + const map = getMapForThis(this) + map.forEach((index) => { + cb(this.data[index]!, this.data[index]!, this) }) }, - get [Symbol.toStringTag]() { - return 'Set' + *values(): IterableIterator { + const map = getMapForThis(this) + for (const index of map.values()) { + yield this.data[index]! + } + }, + keys(): IterableIterator { + return this.values() + }, + *entries(): IterableIterator<[T, T]> { + const map = getMapForThis(this) + for (const index of map.values()) { + const value = this.data[index]! + yield [value, value] + } }, - toJSON() { - return new Set(this.data) + toJSON(): Set { + return new Set(this.values()) }, [Symbol.iterator]() { - return this.data[Symbol.iterator]() + return this.values() }, - values() { - return this.data.values() + get [Symbol.toStringTag]() { + return 'Set' }, - keys() { - // for Set.keys is an alias for Set.values() - return this.data.values() + intersection(other: Set): Set { + const otherSet = proxySet(other) + const resultSet = proxySet() + for (const value of this.values()) { + if (otherSet.has(value)) { + resultSet.add(value) + } + } + return proxySet(resultSet) }, - entries() { - // array.entries returns [index, value] while Set [value, value] - return new Set(this.data).entries() + isDisjointFrom(other: Set): boolean { + const otherSet = proxySet(other) + return ( + this.size === other.size && + [...this.values()].every((value) => !otherSet.has(value)) + ) }, - }) - - Object.defineProperties(set, { - data: { - enumerable: false, + isSubsetOf(other: Set) { + const otherSet = proxySet(other) + return ( + this.size <= other.size && + [...this.values()].every((value) => otherSet.has(value)) + ) }, - size: { - enumerable: false, + isSupersetOf(other: Set) { + const otherSet = proxySet(other) + return ( + this.size >= other.size && + [...otherSet].every((value) => this.has(value)) + ) }, - toJSON: { - enumerable: false, + symmetricDifference(other: Set) { + const resultSet = proxySet() + const otherSet = proxySet(other) + for (const value of this.values()) { + if (!otherSet.has(value)) { + resultSet.add(value) + } + } + return proxySet(resultSet) }, - }) + union(other: Set) { + const resultSet = proxySet() + const otherSet = proxySet(other) + for (const value of this.values()) { + resultSet.add(value) + } + for (const value of otherSet) { + resultSet.add(value) + } + return proxySet(resultSet) + }, + } - Object.seal(set) + const proxiedObject = proxy(vObject) + Object.defineProperties(proxiedObject, { + size: { enumerable: false }, + data: { enumerable: false }, + toJSON: { enumerable: false }, + }) + Object.seal(proxiedObject) - return set as unknown as Set & { - $$valtioSnapshot: Omit, 'add' | 'delete' | 'clear'> + return proxiedObject as unknown as InternalProxySet & { + $$valtioSnapshot: Omit, 'set' | 'delete' | 'clear'> } } diff --git a/tests/proxyMap.bench.ts b/tests/proxyMap.bench.ts new file mode 100644 index 00000000..8a6bacf4 --- /dev/null +++ b/tests/proxyMap.bench.ts @@ -0,0 +1,150 @@ +/* eslint-disable vitest/consistent-test-it */ +import { bench, describe, test } from 'vitest' +import { proxy, snapshot } from 'valtio' +import { proxyMap } from 'valtio/utils' + +// Helper function to generate test data +function generateTestData(size: number): [number, number][] { + const data: [any, any][] = [] + for (let i = 0; i < size; i++) { + data.push([{ id: i }, { i }]) + } + return data +} + +const TEST_SIZES = [1000, 10_000, 100_000] + +TEST_SIZES.forEach((size) => { + describe.skip(`Insertion -${size} items`, () => { + const testData = generateTestData(size) + + bench('proxyMap', () => { + const map = proxyMap() + testData.forEach(([key, value]) => { + map.set(key, value) + }) + }) + }) + + describe.skip(`Insertion and Update -${size} items`, () => { + const testData = generateTestData(size) + + bench('proxyMap', () => { + const map = proxyMap() + testData.forEach(([key, value]) => { + map.set(key, value) + map.set(key, -1) + }) + }) + }) + + describe.skip(`Retrieval -${size} items`, () => { + const testData = generateTestData(size) + + bench('proxyMap', () => { + const map = proxyMap(testData) + testData.forEach(([key]) => { + map.get(key) + }) + }) + }) + + describe.skip(`Deletion -${size} items`, () => { + const testData = generateTestData(size) + + bench('proxyMap', () => { + const map = proxyMap(testData) + testData.forEach(([key]) => { + map.delete(key) + }) + }) + }) + + describe.skip(`Iteration -${size} items`, () => { + const testData = generateTestData(size) + + bench('proxyMap', () => { + const map = proxyMap(testData) + testData.forEach(([key, value]) => {}) + }) + }) + + describe.skip(`Insertion, Retrieval, and Deletion -${size} items`, () => { + const testData = generateTestData(size) + bench('proxyMap', () => { + const map = proxyMap(testData) + testData.forEach(([key, value]) => { + map.set(key, value) + map.get(key) + map.delete(key) + }) + }) + }) + + describe.skip(`entries -${size} items`, () => { + const testData = generateTestData(size) + + bench('proxyMap', () => { + const map = proxyMap(testData) + for (const [k, v] of map.entries()) { + const _k = k + const _v = v + } + }) + }) + + describe.skip(`keys -${size} items`, () => { + const testData = generateTestData(size) + + bench('proxyMap', () => { + const map = proxyMap(testData) + for (const k of map.keys()) { + const _k = k + } + }) + }) + + describe.skip(`values -${size} items`, () => { + const testData = generateTestData(size) + + bench('proxyMap', () => { + const map = proxyMap(testData) + for (const v of map.values()) { + const _v = v + } + }) + }) + + describe.skip(`snapshot -${size} items`, () => { + const testData = generateTestData(size) + + bench('proxyMap', () => { + const map = proxyMap(testData) + const snap = snapshot(map) + testData.forEach(([key, value]) => { + snap.get(key) + }) + }) + }) + + describe(`snapshot & modify -${size} items`, () => { + const testData = generateTestData(size) + const oneData = generateTestData(1)[0]! + + bench('proxyMap', () => { + const map = proxyMap(testData) + const snap1 = snapshot(map) + map.set(oneData[0], oneData[1]) + const snap2 = snapshot(map) + }) + }) + + describe.skip('Clear -${size} items', () => { + const testData = generateTestData(size) + const map = proxyMap(testData) + + bench('proxyMap', () => { + map.clear() + }) + }) +}) diff --git a/tests/proxyMap.test.tsx b/tests/proxyMap.test.tsx index 8b5955df..b0aa959b 100644 --- a/tests/proxyMap.test.tsx +++ b/tests/proxyMap.test.tsx @@ -319,8 +319,23 @@ describe('proxyMap internal', () => { ).toBe(false) }) }) - describe('snapshot', () => { + it('should error when trying to mutate a snapshot', () => { + const state = proxyMap() + const snap = snapshot(state) + + // @ts-expect-error - snapshot should not be able to mutate + expect(() => snap.set('foo', 'bar')).toThrow( + 'Cannot perform mutations on a snapshot', + ) + // @ts-expect-error - snapshot should not be able to mutate + expect(() => snap.delete('foo')).toThrow( + 'Cannot perform mutations on a snapshot', + ) + // @ts-expect-error - snapshot should not be able to mutate + expect(() => snap.clear()).toThrow('Cannot perform mutations on a snapshot') + }) + it('should not change snapshot with modifying the original proxy', async () => { const state = proxyMap([ ['key1', {}], diff --git a/tests/proxySet.test.tsx b/tests/proxySet.test.tsx index 74d1db39..8ff894a9 100644 --- a/tests/proxySet.test.tsx +++ b/tests/proxySet.test.tsx @@ -1,7 +1,7 @@ import { StrictMode } from 'react' import { fireEvent, render, waitFor } from '@testing-library/react' import { describe, expect, it, vi } from 'vitest' -import { proxy, useSnapshot } from 'valtio' +import { proxy, snapshot, useSnapshot } from 'valtio' import { proxySet } from 'valtio/utils' // used to initialize proxySet during tests @@ -335,3 +335,33 @@ describe('proxySet internal', () => { ).toBe(false) }) }) + +describe('snapshot behavior', () => { + it('should error when trying to mutate a snapshot', () => { + const state = proxySet() + const snap = snapshot(state) + + expect(() => snap.add('foo')).toThrow( + 'Cannot perform mutations on a snapshot', + ) + // @ts-expect-error - snapshot should not be able to mutate + expect(() => snap.delete('foo')).toThrow( + 'Cannot perform mutations on a snapshot', + ) + // @ts-expect-error - snapshot should not be able to mutate + expect(() => snap.clear()).toThrow('Cannot perform mutations on a snapshot') + }) + + it('should work with deleting a key', async () => { + const state = proxySet(['val1', 'val2']) + const snap1 = snapshot(state) + expect(snap1.has('val1')).toBe(true) + expect(snap1.has('val2')).toBe(true) + state.delete('val1') + const snap2 = snapshot(state) + expect(snap1.has('val1')).toBe(true) + expect(snap1.has('val2')).toBe(true) + expect(snap2.has('val1')).toBe(false) + expect(snap2.has('val2')).toBe(true) + }) +}) From 2a96acf15de0c2d900e9d5b157aaacc345c22993 Mon Sep 17 00:00:00 2001 From: Michael Sweeney Date: Tue, 15 Oct 2024 20:00:15 -0700 Subject: [PATCH 2/4] added jsdoc comments for proxyMap and proxySet (#974) * added jsdoc comments for proxyMap and proxySet * fixed spacing in jsdoc comment --- src/vanilla/utils/proxyMap.ts | 28 ++++++++++++++++++++++++++++ src/vanilla/utils/proxySet.ts | 15 +++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/src/vanilla/utils/proxyMap.ts b/src/vanilla/utils/proxyMap.ts index 40950b02..44adf1c8 100644 --- a/src/vanilla/utils/proxyMap.ts +++ b/src/vanilla/utils/proxyMap.ts @@ -9,6 +9,34 @@ type InternalProxyObject = Map & { toJSON: () => Map } +/** + * proxyMap + * + * This is to create a proxy which mimic the native Map behavior. + * The API is the same as Map API + * + * @example + * import { proxyMap } from 'valtio/utils' + * const state = proxyMap([["key", "value"]]) + * + * // can be used inside a proxy as well + * const state = proxy({ + * count: 1, + * map: proxyMap() + * }) + * + * // When using an object as a key, you can wrap it with `ref` so it's not proxied + * // this is useful if you want to preserve the key equality + * import { ref } from 'valtio' + * + * const key = ref({}) + * state.set(key, "value") + * state.get(key) //value + * + * const key = {} + * state.set(key, "value") + * state.get(key) //undefined + */ export function proxyMap(entries?: Iterable<[K, V]> | undefined | null) { const initialData: Array = [] let initialIndex = 0 diff --git a/src/vanilla/utils/proxySet.ts b/src/vanilla/utils/proxySet.ts index 7ba52119..65cf11d0 100644 --- a/src/vanilla/utils/proxySet.ts +++ b/src/vanilla/utils/proxySet.ts @@ -16,6 +16,21 @@ type InternalProxySet = Set & { union: (other: Set) => Set } +/** + * proxySet + * + * This is to create a proxy which mimic the native Set behavior. + * The API is the same as Set API + * + * @example + * import { proxySet } from 'valtio/utils' + * const state = proxySet([1,2,3]) + * // can be used inside a proxy as well + * const state = proxy({ + * count: 1, + * set: proxySet() + * }) + */ export function proxySet(initialValues?: Iterable | null) { const initialData: T[] = [] const indexMap = new Map() From 90bf703d30332ad1735d38abb6cf698503697cbe Mon Sep 17 00:00:00 2001 From: Daishi Kato Date: Wed, 16 Oct 2024 23:04:47 +0900 Subject: [PATCH 3/4] chore(deps): update dev dependencies (#976) --- .github/workflows/test-multiple-versions.yml | 4 +- package.json | 42 +- pnpm-lock.yaml | 1292 +++++++++++++----- src/react.ts | 2 + tests/basic.test.tsx | 27 +- tests/class.test.tsx | 57 +- tests/ref.test.tsx | 15 +- 7 files changed, 1000 insertions(+), 439 deletions(-) diff --git a/.github/workflows/test-multiple-versions.yml b/.github/workflows/test-multiple-versions.yml index 125357e1..af6fc2bd 100644 --- a/.github/workflows/test-multiple-versions.yml +++ b/.github/workflows/test-multiple-versions.yml @@ -32,8 +32,8 @@ jobs: - 18.2.0 - 18.3.1 - 19.0.0-rc.0 - - 19.0.0-rc-7771d3a7-20240827 - - 0.0.0-experimental-7771d3a7-20240827 + - 19.0.0-rc-83825814-20241015 + - 0.0.0-experimental-83825814-20241015 steps: - uses: actions/checkout@v4 - uses: pnpm/action-setup@v4 diff --git a/package.json b/package.json index eb4771a2..ebc75e79 100644 --- a/package.json +++ b/package.json @@ -107,30 +107,30 @@ }, "devDependencies": { "@redux-devtools/extension": "^3.3.0", - "@rollup/plugin-alias": "^5.1.0", - "@rollup/plugin-node-resolve": "^15.2.3", - "@rollup/plugin-replace": "^5.0.7", - "@rollup/plugin-typescript": "^11.1.6", + "@rollup/plugin-alias": "^5.1.1", + "@rollup/plugin-node-resolve": "^15.3.0", + "@rollup/plugin-replace": "^6.0.1", + "@rollup/plugin-typescript": "^12.1.1", "@testing-library/react": "^16.0.1", "@types/jsdom": "^21.1.7", - "@types/react": "^18.3.4", - "@types/react-dom": "^18.3.0", - "@typescript-eslint/eslint-plugin": "^8.3.0", - "@typescript-eslint/parser": "^8.3.0", - "@vitest/coverage-v8": "^2.0.5", - "@vitest/ui": "^2.0.5", - "esbuild": "^0.23.1", + "@types/react": "^18.3.11", + "@types/react-dom": "^18.3.1", + "@typescript-eslint/eslint-plugin": "^8.9.0", + "@typescript-eslint/parser": "^8.9.0", + "@vitest/coverage-v8": "^2.1.3", + "@vitest/ui": "^2.1.3", + "esbuild": "^0.24.0", "eslint": "8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-import-resolver-alias": "^1.1.2", - "eslint-plugin-import": "^2.29.1", + "eslint-plugin-import": "^2.31.0", "eslint-plugin-prettier": "^5.2.1", - "eslint-plugin-react": "^7.35.0", - "eslint-plugin-react-compiler": "0.0.0-experimental-9aef357-20240815", - "eslint-plugin-react-hooks": "^4.6.2", + "eslint-plugin-react": "^7.37.1", + "eslint-plugin-react-compiler": "0.0.0-experimental-605e95c-20241015", + "eslint-plugin-react-hooks": "^5.0.0", "eslint-plugin-vitest": "^0.5.4", "jest-leak-detector": "^29.7.0", - "jsdom": "^25.0.0", + "jsdom": "^25.0.1", "json": "^11.0.0", "postinstall-postinstall": "^2.1.0", "prettier": "^3.3.3", @@ -138,15 +138,15 @@ "react": "19.0.0-rc.0", "react-dom": "19.0.0-rc.0", "redux": "^5.0.1", - "rollup": "^4.21.1", + "rollup": "^4.24.0", "rollup-plugin-esbuild": "^6.1.1", "shelljs": "^0.8.5", "shx": "^0.3.4", "ts-expect": "^1.3.0", - "tslib": "^2.7.0", - "typescript": "^5.6.2", - "vite": "^5.4.2", - "vitest": "^2.0.5" + "tslib": "^2.8.0", + "typescript": "^5.6.3", + "vite": "^5.4.9", + "vitest": "^2.1.3" }, "peerDependencies": { "@types/react": ">=18.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1e0346ef..8ae253f9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -16,44 +16,44 @@ importers: specifier: ^3.3.0 version: 3.3.0(redux@5.0.1) '@rollup/plugin-alias': - specifier: ^5.1.0 - version: 5.1.0(rollup@4.22.2) + specifier: ^5.1.1 + version: 5.1.1(rollup@4.24.0) '@rollup/plugin-node-resolve': - specifier: ^15.2.3 - version: 15.2.3(rollup@4.22.2) + specifier: ^15.3.0 + version: 15.3.0(rollup@4.24.0) '@rollup/plugin-replace': - specifier: ^5.0.7 - version: 5.0.7(rollup@4.22.2) + specifier: ^6.0.1 + version: 6.0.1(rollup@4.24.0) '@rollup/plugin-typescript': - specifier: ^11.1.6 - version: 11.1.6(rollup@4.22.2)(tslib@2.7.0)(typescript@5.6.2) + specifier: ^12.1.1 + version: 12.1.1(rollup@4.24.0)(tslib@2.8.0)(typescript@5.6.3) '@testing-library/react': specifier: ^16.0.1 - version: 16.0.1(@testing-library/dom@10.4.0)(@types/react-dom@18.3.0)(@types/react@18.3.8)(react-dom@19.0.0-rc.0)(react@19.0.0-rc.0) + version: 16.0.1(@testing-library/dom@10.4.0)(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@19.0.0-rc.0)(react@19.0.0-rc.0) '@types/jsdom': specifier: ^21.1.7 version: 21.1.7 '@types/react': - specifier: ^18.3.4 - version: 18.3.8 + specifier: ^18.3.11 + version: 18.3.11 '@types/react-dom': - specifier: ^18.3.0 - version: 18.3.0 + specifier: ^18.3.1 + version: 18.3.1 '@typescript-eslint/eslint-plugin': - specifier: ^8.3.0 - version: 8.6.0(@typescript-eslint/parser@8.6.0)(eslint@8.57.0)(typescript@5.6.2) + specifier: ^8.9.0 + version: 8.9.0(@typescript-eslint/parser@8.9.0)(eslint@8.57.0)(typescript@5.6.3) '@typescript-eslint/parser': - specifier: ^8.3.0 - version: 8.6.0(eslint@8.57.0)(typescript@5.6.2) + specifier: ^8.9.0 + version: 8.9.0(eslint@8.57.0)(typescript@5.6.3) '@vitest/coverage-v8': - specifier: ^2.0.5 - version: 2.1.1(vitest@2.1.1) + specifier: ^2.1.3 + version: 2.1.3(vitest@2.1.3) '@vitest/ui': - specifier: ^2.0.5 - version: 2.1.1(vitest@2.1.1) + specifier: ^2.1.3 + version: 2.1.3(vitest@2.1.3) esbuild: - specifier: ^0.23.1 - version: 0.23.1 + specifier: ^0.24.0 + version: 0.24.0 eslint: specifier: 8.57.0 version: 8.57.0 @@ -62,31 +62,31 @@ importers: version: 9.1.0(eslint@8.57.0) eslint-import-resolver-alias: specifier: ^1.1.2 - version: 1.1.2(eslint-plugin-import@2.30.0) + version: 1.1.2(eslint-plugin-import@2.31.0) eslint-plugin-import: - specifier: ^2.29.1 - version: 2.30.0(@typescript-eslint/parser@8.6.0)(eslint@8.57.0) + specifier: ^2.31.0 + version: 2.31.0(@typescript-eslint/parser@8.9.0)(eslint@8.57.0) eslint-plugin-prettier: specifier: ^5.2.1 version: 5.2.1(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.3.3) eslint-plugin-react: - specifier: ^7.35.0 - version: 7.36.1(eslint@8.57.0) + specifier: ^7.37.1 + version: 7.37.1(eslint@8.57.0) eslint-plugin-react-compiler: - specifier: 0.0.0-experimental-9aef357-20240815 - version: 0.0.0-experimental-9aef357-20240815(eslint@8.57.0) + specifier: 0.0.0-experimental-605e95c-20241015 + version: 0.0.0-experimental-605e95c-20241015(eslint@8.57.0) eslint-plugin-react-hooks: - specifier: ^4.6.2 - version: 4.6.2(eslint@8.57.0) + specifier: ^5.0.0 + version: 5.0.0(eslint@8.57.0) eslint-plugin-vitest: specifier: ^0.5.4 - version: 0.5.4(@typescript-eslint/eslint-plugin@8.6.0)(eslint@8.57.0)(typescript@5.6.2)(vitest@2.1.1) + version: 0.5.4(@typescript-eslint/eslint-plugin@8.9.0)(eslint@8.57.0)(typescript@5.6.3)(vitest@2.1.3) jest-leak-detector: specifier: ^29.7.0 version: 29.7.0 jsdom: - specifier: ^25.0.0 - version: 25.0.0 + specifier: ^25.0.1 + version: 25.0.1 json: specifier: ^11.0.0 version: 11.0.0 @@ -109,11 +109,11 @@ importers: specifier: ^5.0.1 version: 5.0.1 rollup: - specifier: ^4.21.1 - version: 4.22.2 + specifier: ^4.24.0 + version: 4.24.0 rollup-plugin-esbuild: specifier: ^6.1.1 - version: 6.1.1(esbuild@0.23.1)(rollup@4.22.2) + version: 6.1.1(esbuild@0.24.0)(rollup@4.24.0) shelljs: specifier: ^0.8.5 version: 0.8.5 @@ -124,17 +124,17 @@ importers: specifier: ^1.3.0 version: 1.3.0 tslib: - specifier: ^2.7.0 - version: 2.7.0 + specifier: ^2.8.0 + version: 2.8.0 typescript: - specifier: ^5.6.2 - version: 5.6.2 + specifier: ^5.6.3 + version: 5.6.3 vite: - specifier: ^5.4.2 - version: 5.4.7 + specifier: ^5.4.9 + version: 5.4.9 vitest: - specifier: ^2.0.5 - version: 2.1.1(@vitest/ui@2.1.1)(jsdom@25.0.0) + specifier: ^2.1.3 + version: 2.1.3(@vitest/ui@2.1.3)(jsdom@25.0.1) examples/counter: dependencies: @@ -292,10 +292,23 @@ packages: '@babel/highlight': 7.24.7 picocolors: 1.1.0 + /@babel/code-frame@7.25.7: + resolution: {integrity: sha512-0xZJFNE5XMpENsgfHYTw8FbX4kv53mFLn2i3XPoq69LyhYSCBJtitaHx9QnsVTrsogI4Z3+HtEfZ2/GFPOtf5g==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/highlight': 7.25.7 + picocolors: 1.1.0 + dev: true + /@babel/compat-data@7.25.4: resolution: {integrity: sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==} engines: {node: '>=6.9.0'} + /@babel/compat-data@7.25.8: + resolution: {integrity: sha512-ZsysZyXY4Tlx+Q53XdnOFmqwfB9QDTHYxaZYajWRoBLuLEAwI2UIbtxOjWh/cFaa9IKUlcB+DDuoskLuKu56JA==} + engines: {node: '>=6.9.0'} + dev: true + /@babel/core@7.12.3: resolution: {integrity: sha512-0qXcZYKZp3/6N2jKYVxZv0aNCsxTSVCiK72DTiTYZAu7sjg73W0/aynWjMbiGd87EQL4WyA8reiJVh92AVla9g==} engines: {node: '>=6.9.0'} @@ -341,6 +354,29 @@ packages: transitivePeerDependencies: - supports-color + /@babel/core@7.25.8: + resolution: {integrity: sha512-Oixnb+DzmRT30qu9d3tJSQkxuygWm32DFykT4bRoORPa9hZ/L4KhVB/XiRm6KG+roIEM7DBQlmg27kw2HZkdZg==} + engines: {node: '>=6.9.0'} + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.25.7 + '@babel/generator': 7.25.7 + '@babel/helper-compilation-targets': 7.25.7 + '@babel/helper-module-transforms': 7.25.7(@babel/core@7.25.8) + '@babel/helpers': 7.25.7 + '@babel/parser': 7.25.8 + '@babel/template': 7.25.7 + '@babel/traverse': 7.25.7 + '@babel/types': 7.25.8 + convert-source-map: 2.0.0 + debug: 4.3.7 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/generator@7.25.6: resolution: {integrity: sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==} engines: {node: '>=6.9.0'} @@ -350,12 +386,29 @@ packages: '@jridgewell/trace-mapping': 0.3.25 jsesc: 2.5.2 + /@babel/generator@7.25.7: + resolution: {integrity: sha512-5Dqpl5fyV9pIAD62yK9P7fcA768uVPUyrQmqpqstHWgMma4feF1x/oFysBCVZLY5wJ2GkMUCdsNDnGZrPoR6rA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.25.8 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 3.0.2 + dev: true + /@babel/helper-annotate-as-pure@7.24.7: resolution: {integrity: sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.25.6 + /@babel/helper-annotate-as-pure@7.25.7: + resolution: {integrity: sha512-4xwU8StnqnlIhhioZf1tqnVWeQ9pvH/ujS8hRfw/WOza+/a+1qv69BWNy+oY231maTCWgKWhfBU7kDpsds6zAA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.25.8 + dev: true + /@babel/helper-builder-binary-assignment-operator-visitor@7.24.7: resolution: {integrity: sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==} engines: {node: '>=6.9.0'} @@ -375,6 +428,17 @@ packages: lru-cache: 5.1.1 semver: 6.3.1 + /@babel/helper-compilation-targets@7.25.7: + resolution: {integrity: sha512-DniTEax0sv6isaw6qSQSfV4gVRNtw2rte8HHM45t9ZR0xILaufBRNkpMifCRiAPyvL4ACD6v0gfCwCmtOQaV4A==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/compat-data': 7.25.8 + '@babel/helper-validator-option': 7.25.7 + browserslist: 4.24.0 + lru-cache: 5.1.1 + semver: 6.3.1 + dev: true + /@babel/helper-create-class-features-plugin@7.25.4(@babel/core@7.12.3): resolution: {integrity: sha512-ro/bFs3/84MDgDmMwbcHgDa8/E6J3QKNTk4xJJnVeFtGE+tL0K26E3pNxhYz2b67fJpt7Aphw5XcploKXuCvCQ==} engines: {node: '>=6.9.0'} @@ -409,6 +473,24 @@ packages: transitivePeerDependencies: - supports-color + /@babel/helper-create-class-features-plugin@7.25.7(@babel/core@7.25.8): + resolution: {integrity: sha512-bD4WQhbkx80mAyj/WCm4ZHcF4rDxkoLFO6ph8/5/mQ3z4vAzltQXAmbc7GvVJx5H+lk5Mi5EmbTeox5nMGCsbw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-annotate-as-pure': 7.25.7 + '@babel/helper-member-expression-to-functions': 7.25.7 + '@babel/helper-optimise-call-expression': 7.25.7 + '@babel/helper-replace-supers': 7.25.7(@babel/core@7.25.8) + '@babel/helper-skip-transparent-expression-wrappers': 7.25.7 + '@babel/traverse': 7.25.7 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/helper-create-regexp-features-plugin@7.25.2(@babel/core@7.12.3): resolution: {integrity: sha512-+wqVGP+DFmqwFD3EH6TMTfUNeqDehV3E/dl+Sd54eaXqm17tEUNbEIn4sVivVowbvUpOtIGxdo3GoXyDH9N/9g==} engines: {node: '>=6.9.0'} @@ -468,6 +550,16 @@ packages: transitivePeerDependencies: - supports-color + /@babel/helper-member-expression-to-functions@7.25.7: + resolution: {integrity: sha512-O31Ssjd5K6lPbTX9AAYpSKrZmLeagt9uwschJd+Ixo6QiRyfpvgtVQp8qrDR9UNFjZ8+DO34ZkdrN+BnPXemeA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/traverse': 7.25.7 + '@babel/types': 7.25.8 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/helper-module-imports@7.24.7: resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} engines: {node: '>=6.9.0'} @@ -477,6 +569,16 @@ packages: transitivePeerDependencies: - supports-color + /@babel/helper-module-imports@7.25.7: + resolution: {integrity: sha512-o0xCgpNmRohmnoWKQ0Ij8IdddjyBFE4T2kagL/x6M3+4zUgc+4qTOUBoNe4XxDskt1HPKO007ZPiMgLDq2s7Kw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/traverse': 7.25.7 + '@babel/types': 7.25.8 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/helper-module-transforms@7.25.2(@babel/core@7.12.3): resolution: {integrity: sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==} engines: {node: '>=6.9.0'} @@ -505,16 +607,43 @@ packages: transitivePeerDependencies: - supports-color + /@babel/helper-module-transforms@7.25.7(@babel/core@7.25.8): + resolution: {integrity: sha512-k/6f8dKG3yDz/qCwSM+RKovjMix563SLxQFo0UhRNo239SP6n9u5/eLtKD6EAjwta2JHJ49CsD8pms2HdNiMMQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-module-imports': 7.25.7 + '@babel/helper-simple-access': 7.25.7 + '@babel/helper-validator-identifier': 7.25.7 + '@babel/traverse': 7.25.7 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/helper-optimise-call-expression@7.24.7: resolution: {integrity: sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.25.6 + /@babel/helper-optimise-call-expression@7.25.7: + resolution: {integrity: sha512-VAwcwuYhv/AT+Vfr28c9y6SHzTan1ryqrydSTFGjU0uDJHw3uZ+PduI8plCLkRsDnqK2DMEDmwrOQRsK/Ykjng==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.25.8 + dev: true + /@babel/helper-plugin-utils@7.24.8: resolution: {integrity: sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==} engines: {node: '>=6.9.0'} + /@babel/helper-plugin-utils@7.25.7: + resolution: {integrity: sha512-eaPZai0PiqCi09pPs3pAFfl/zYgGaE6IdXtYvmf0qlcDTd3WCtO7JWCcRd64e0EQrcYgiHibEZnOGsSY4QSgaw==} + engines: {node: '>=6.9.0'} + dev: true + /@babel/helper-remap-async-to-generator@7.25.0(@babel/core@7.12.3): resolution: {integrity: sha512-NhavI2eWEIz/H9dbrG0TuOicDhNexze43i5z7lEqwYm0WEZVTwnPpA0EafUTP7+6/W79HWIP2cTe3Z5NiSTVpw==} engines: {node: '>=6.9.0'} @@ -567,6 +696,20 @@ packages: transitivePeerDependencies: - supports-color + /@babel/helper-replace-supers@7.25.7(@babel/core@7.25.8): + resolution: {integrity: sha512-iy8JhqlUW9PtZkd4pHM96v6BdJ66Ba9yWSE4z0W4TvSZwLBPkyDsiIU3ENe4SmrzRBs76F7rQXTy1lYC49n6Lw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-member-expression-to-functions': 7.25.7 + '@babel/helper-optimise-call-expression': 7.25.7 + '@babel/traverse': 7.25.7 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/helper-simple-access@7.24.7: resolution: {integrity: sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==} engines: {node: '>=6.9.0'} @@ -576,6 +719,16 @@ packages: transitivePeerDependencies: - supports-color + /@babel/helper-simple-access@7.25.7: + resolution: {integrity: sha512-FPGAkJmyoChQeM+ruBGIDyrT2tKfZJO8NcxdC+CWNJi7N8/rZpSxK7yvBJ5O/nF1gfu5KzN7VKG3YVSLFfRSxQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/traverse': 7.25.7 + '@babel/types': 7.25.8 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/helper-skip-transparent-expression-wrappers@7.24.7: resolution: {integrity: sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==} engines: {node: '>=6.9.0'} @@ -585,18 +738,43 @@ packages: transitivePeerDependencies: - supports-color + /@babel/helper-skip-transparent-expression-wrappers@7.25.7: + resolution: {integrity: sha512-pPbNbchZBkPMD50K0p3JGcFMNLVUCuU/ABybm/PGNj4JiHrpmNyqqCphBk4i19xXtNV0JhldQJJtbSW5aUvbyA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/traverse': 7.25.7 + '@babel/types': 7.25.8 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/helper-string-parser@7.24.8: resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==} engines: {node: '>=6.9.0'} + /@babel/helper-string-parser@7.25.7: + resolution: {integrity: sha512-CbkjYdsJNHFk8uqpEkpCvRs3YRp9tY6FmFY7wLMSYuGYkrdUi7r2lc4/wqsvlHoMznX3WJ9IP8giGPq68T/Y6g==} + engines: {node: '>=6.9.0'} + dev: true + /@babel/helper-validator-identifier@7.24.7: resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} engines: {node: '>=6.9.0'} + /@babel/helper-validator-identifier@7.25.7: + resolution: {integrity: sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg==} + engines: {node: '>=6.9.0'} + dev: true + /@babel/helper-validator-option@7.24.8: resolution: {integrity: sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==} engines: {node: '>=6.9.0'} + /@babel/helper-validator-option@7.25.7: + resolution: {integrity: sha512-ytbPLsm+GjArDYXJ8Ydr1c/KJuutjF2besPNbIZnZ6MKUxi/uTA22t2ymmA4WFjZFpjiAMO0xuuJPqK2nvDVfQ==} + engines: {node: '>=6.9.0'} + dev: true + /@babel/helper-wrap-function@7.25.0: resolution: {integrity: sha512-s6Q1ebqutSiZnEjaofc/UKDyC4SbzV5n5SrA2Gq8UawLycr3i04f1dX4OzoQVnexm6aOCh37SQNYlJ/8Ku+PMQ==} engines: {node: '>=6.9.0'} @@ -614,6 +792,14 @@ packages: '@babel/template': 7.25.0 '@babel/types': 7.25.6 + /@babel/helpers@7.25.7: + resolution: {integrity: sha512-Sv6pASx7Esm38KQpF/U/OXLwPPrdGHNKoeblRxgZRLXnAtnkEe4ptJPDtAZM7fBLadbc1Q07kQpSiGQ0Jg6tRA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.25.7 + '@babel/types': 7.25.8 + dev: true + /@babel/highlight@7.24.7: resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} engines: {node: '>=6.9.0'} @@ -623,6 +809,16 @@ packages: js-tokens: 4.0.0 picocolors: 1.1.0 + /@babel/highlight@7.25.7: + resolution: {integrity: sha512-iYyACpW3iW8Fw+ZybQK+drQre+ns/tKpXbNESfrhNnPLIklLbXr7MYJ6gPEd0iETGLOK+SxMjVvKb/ffmk+FEw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.25.7 + chalk: 2.4.2 + js-tokens: 4.0.0 + picocolors: 1.1.0 + dev: true + /@babel/parser@7.25.6: resolution: {integrity: sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==} engines: {node: '>=6.0.0'} @@ -630,6 +826,14 @@ packages: dependencies: '@babel/types': 7.25.6 + /@babel/parser@7.25.8: + resolution: {integrity: sha512-HcttkxzdPucv3nNFmfOOMfFf64KgdJVqm1KaCm25dPGMLElo9nsLvXeJECQg8UzPuBGLyTSA0ZzqCtDSzKTEoQ==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.25.8 + dev: true + /@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.3(@babel/core@7.12.3): resolution: {integrity: sha512-wUrcsxZg6rqBXG05HG1FPYgsP6EvwF4WpBbxIpWIIYnH8wG0gzx3yZY3dtEHas4sTAOGkbTsc9EGPxwff8lRoA==} engines: {node: '>=6.9.0'} @@ -815,6 +1019,20 @@ packages: transitivePeerDependencies: - supports-color + /@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.25.8): + resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-methods instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-create-class-features-plugin': 7.25.7(@babel/core@7.25.8) + '@babel/helper-plugin-utils': 7.25.7 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.12.3): resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} engines: {node: '>=6.9.0'} @@ -2673,6 +2891,13 @@ packages: dependencies: regenerator-runtime: 0.14.1 + /@babel/runtime@7.25.7: + resolution: {integrity: sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==} + engines: {node: '>=6.9.0'} + dependencies: + regenerator-runtime: 0.14.1 + dev: true + /@babel/template@7.25.0: resolution: {integrity: sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==} engines: {node: '>=6.9.0'} @@ -2681,6 +2906,15 @@ packages: '@babel/parser': 7.25.6 '@babel/types': 7.25.6 + /@babel/template@7.25.7: + resolution: {integrity: sha512-wRwtAgI3bAS+JGU2upWNL9lSlDcRCqD05BZ1n3X2ONLH1WilFP6O1otQjeMK/1g0pvYcXC7b/qVUB1keofjtZA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.25.7 + '@babel/parser': 7.25.8 + '@babel/types': 7.25.8 + dev: true + /@babel/traverse@7.25.6: resolution: {integrity: sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==} engines: {node: '>=6.9.0'} @@ -2695,6 +2929,21 @@ packages: transitivePeerDependencies: - supports-color + /@babel/traverse@7.25.7: + resolution: {integrity: sha512-jatJPT1Zjqvh/1FyJs6qAHL+Dzb7sTb+xr7Q+gM1b+1oBsMsQQ4FkVKb6dFlJvLlVssqkRzV05Jzervt9yhnzg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.25.7 + '@babel/generator': 7.25.7 + '@babel/parser': 7.25.8 + '@babel/template': 7.25.7 + '@babel/types': 7.25.8 + debug: 4.3.7 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/types@7.25.6: resolution: {integrity: sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==} engines: {node: '>=6.9.0'} @@ -2703,6 +2952,15 @@ packages: '@babel/helper-validator-identifier': 7.24.7 to-fast-properties: 2.0.0 + /@babel/types@7.25.8: + resolution: {integrity: sha512-JWtuCu8VQsMladxVz/P4HzHUGCAwpuqacmowgXFs5XjxIgKuNjnLokQzuVjlTvIzODaDmpjT3oxcC48vyk9EWg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.25.7 + '@babel/helper-validator-identifier': 7.25.7 + to-fast-properties: 2.0.0 + dev: true + /@bcoe/v8-coverage@0.2.3: resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} @@ -2730,8 +2988,8 @@ packages: dev: true optional: true - /@esbuild/aix-ppc64@0.23.1: - resolution: {integrity: sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==} + /@esbuild/aix-ppc64@0.24.0: + resolution: {integrity: sha512-WtKdFM7ls47zkKHFVzMz8opM7LkcsIp9amDUBIAWirg70RM71WRSjdILPsY5Uv1D42ZpUfaPILDlfactHgsRkw==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] @@ -2748,8 +3006,8 @@ packages: dev: true optional: true - /@esbuild/android-arm64@0.23.1: - resolution: {integrity: sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==} + /@esbuild/android-arm64@0.24.0: + resolution: {integrity: sha512-Vsm497xFM7tTIPYK9bNTYJyF/lsP590Qc1WxJdlB6ljCbdZKU9SY8i7+Iin4kyhV/KV5J2rOKsBQbB77Ab7L/w==} engines: {node: '>=18'} cpu: [arm64] os: [android] @@ -2766,8 +3024,8 @@ packages: dev: true optional: true - /@esbuild/android-arm@0.23.1: - resolution: {integrity: sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==} + /@esbuild/android-arm@0.24.0: + resolution: {integrity: sha512-arAtTPo76fJ/ICkXWetLCc9EwEHKaeya4vMrReVlEIUCAUncH7M4bhMQ+M9Vf+FFOZJdTNMXNBrWwW+OXWpSew==} engines: {node: '>=18'} cpu: [arm] os: [android] @@ -2784,8 +3042,8 @@ packages: dev: true optional: true - /@esbuild/android-x64@0.23.1: - resolution: {integrity: sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==} + /@esbuild/android-x64@0.24.0: + resolution: {integrity: sha512-t8GrvnFkiIY7pa7mMgJd7p8p8qqYIz1NYiAoKc75Zyv73L3DZW++oYMSHPRarcotTKuSs6m3hTOa5CKHaS02TQ==} engines: {node: '>=18'} cpu: [x64] os: [android] @@ -2802,8 +3060,8 @@ packages: dev: true optional: true - /@esbuild/darwin-arm64@0.23.1: - resolution: {integrity: sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==} + /@esbuild/darwin-arm64@0.24.0: + resolution: {integrity: sha512-CKyDpRbK1hXwv79soeTJNHb5EiG6ct3efd/FTPdzOWdbZZfGhpbcqIpiD0+vwmpu0wTIL97ZRPZu8vUt46nBSw==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] @@ -2820,8 +3078,8 @@ packages: dev: true optional: true - /@esbuild/darwin-x64@0.23.1: - resolution: {integrity: sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==} + /@esbuild/darwin-x64@0.24.0: + resolution: {integrity: sha512-rgtz6flkVkh58od4PwTRqxbKH9cOjaXCMZgWD905JOzjFKW+7EiUObfd/Kav+A6Gyud6WZk9w+xu6QLytdi2OA==} engines: {node: '>=18'} cpu: [x64] os: [darwin] @@ -2838,8 +3096,8 @@ packages: dev: true optional: true - /@esbuild/freebsd-arm64@0.23.1: - resolution: {integrity: sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==} + /@esbuild/freebsd-arm64@0.24.0: + resolution: {integrity: sha512-6Mtdq5nHggwfDNLAHkPlyLBpE5L6hwsuXZX8XNmHno9JuL2+bg2BX5tRkwjyfn6sKbxZTq68suOjgWqCicvPXA==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] @@ -2856,8 +3114,8 @@ packages: dev: true optional: true - /@esbuild/freebsd-x64@0.23.1: - resolution: {integrity: sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==} + /@esbuild/freebsd-x64@0.24.0: + resolution: {integrity: sha512-D3H+xh3/zphoX8ck4S2RxKR6gHlHDXXzOf6f/9dbFt/NRBDIE33+cVa49Kil4WUjxMGW0ZIYBYtaGCa2+OsQwQ==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] @@ -2874,8 +3132,8 @@ packages: dev: true optional: true - /@esbuild/linux-arm64@0.23.1: - resolution: {integrity: sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==} + /@esbuild/linux-arm64@0.24.0: + resolution: {integrity: sha512-TDijPXTOeE3eaMkRYpcy3LarIg13dS9wWHRdwYRnzlwlA370rNdZqbcp0WTyyV/k2zSxfko52+C7jU5F9Tfj1g==} engines: {node: '>=18'} cpu: [arm64] os: [linux] @@ -2892,8 +3150,8 @@ packages: dev: true optional: true - /@esbuild/linux-arm@0.23.1: - resolution: {integrity: sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==} + /@esbuild/linux-arm@0.24.0: + resolution: {integrity: sha512-gJKIi2IjRo5G6Glxb8d3DzYXlxdEj2NlkixPsqePSZMhLudqPhtZ4BUrpIuTjJYXxvF9njql+vRjB2oaC9XpBw==} engines: {node: '>=18'} cpu: [arm] os: [linux] @@ -2910,8 +3168,8 @@ packages: dev: true optional: true - /@esbuild/linux-ia32@0.23.1: - resolution: {integrity: sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==} + /@esbuild/linux-ia32@0.24.0: + resolution: {integrity: sha512-K40ip1LAcA0byL05TbCQ4yJ4swvnbzHscRmUilrmP9Am7//0UjPreh4lpYzvThT2Quw66MhjG//20mrufm40mA==} engines: {node: '>=18'} cpu: [ia32] os: [linux] @@ -2937,8 +3195,8 @@ packages: dev: true optional: true - /@esbuild/linux-loong64@0.23.1: - resolution: {integrity: sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==} + /@esbuild/linux-loong64@0.24.0: + resolution: {integrity: sha512-0mswrYP/9ai+CU0BzBfPMZ8RVm3RGAN/lmOMgW4aFUSOQBjA31UP8Mr6DDhWSuMwj7jaWOT0p0WoZ6jeHhrD7g==} engines: {node: '>=18'} cpu: [loong64] os: [linux] @@ -2955,8 +3213,8 @@ packages: dev: true optional: true - /@esbuild/linux-mips64el@0.23.1: - resolution: {integrity: sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==} + /@esbuild/linux-mips64el@0.24.0: + resolution: {integrity: sha512-hIKvXm0/3w/5+RDtCJeXqMZGkI2s4oMUGj3/jM0QzhgIASWrGO5/RlzAzm5nNh/awHE0A19h/CvHQe6FaBNrRA==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] @@ -2973,8 +3231,8 @@ packages: dev: true optional: true - /@esbuild/linux-ppc64@0.23.1: - resolution: {integrity: sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==} + /@esbuild/linux-ppc64@0.24.0: + resolution: {integrity: sha512-HcZh5BNq0aC52UoocJxaKORfFODWXZxtBaaZNuN3PUX3MoDsChsZqopzi5UupRhPHSEHotoiptqikjN/B77mYQ==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] @@ -2991,8 +3249,8 @@ packages: dev: true optional: true - /@esbuild/linux-riscv64@0.23.1: - resolution: {integrity: sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==} + /@esbuild/linux-riscv64@0.24.0: + resolution: {integrity: sha512-bEh7dMn/h3QxeR2KTy1DUszQjUrIHPZKyO6aN1X4BCnhfYhuQqedHaa5MxSQA/06j3GpiIlFGSsy1c7Gf9padw==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] @@ -3009,8 +3267,8 @@ packages: dev: true optional: true - /@esbuild/linux-s390x@0.23.1: - resolution: {integrity: sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==} + /@esbuild/linux-s390x@0.24.0: + resolution: {integrity: sha512-ZcQ6+qRkw1UcZGPyrCiHHkmBaj9SiCD8Oqd556HldP+QlpUIe2Wgn3ehQGVoPOvZvtHm8HPx+bH20c9pvbkX3g==} engines: {node: '>=18'} cpu: [s390x] os: [linux] @@ -3027,8 +3285,8 @@ packages: dev: true optional: true - /@esbuild/linux-x64@0.23.1: - resolution: {integrity: sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==} + /@esbuild/linux-x64@0.24.0: + resolution: {integrity: sha512-vbutsFqQ+foy3wSSbmjBXXIJ6PL3scghJoM8zCL142cGaZKAdCZHyf+Bpu/MmX9zT9Q0zFBVKb36Ma5Fzfa8xA==} engines: {node: '>=18'} cpu: [x64] os: [linux] @@ -3045,8 +3303,8 @@ packages: dev: true optional: true - /@esbuild/netbsd-x64@0.23.1: - resolution: {integrity: sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==} + /@esbuild/netbsd-x64@0.24.0: + resolution: {integrity: sha512-hjQ0R/ulkO8fCYFsG0FZoH+pWgTTDreqpqY7UnQntnaKv95uP5iW3+dChxnx7C3trQQU40S+OgWhUVwCjVFLvg==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] @@ -3054,8 +3312,8 @@ packages: dev: true optional: true - /@esbuild/openbsd-arm64@0.23.1: - resolution: {integrity: sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==} + /@esbuild/openbsd-arm64@0.24.0: + resolution: {integrity: sha512-MD9uzzkPQbYehwcN583yx3Tu5M8EIoTD+tUgKF982WYL9Pf5rKy9ltgD0eUgs8pvKnmizxjXZyLt0z6DC3rRXg==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] @@ -3072,8 +3330,8 @@ packages: dev: true optional: true - /@esbuild/openbsd-x64@0.23.1: - resolution: {integrity: sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==} + /@esbuild/openbsd-x64@0.24.0: + resolution: {integrity: sha512-4ir0aY1NGUhIC1hdoCzr1+5b43mw99uNwVzhIq1OY3QcEwPDO3B7WNXBzaKY5Nsf1+N11i1eOfFcq+D/gOS15Q==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] @@ -3090,8 +3348,8 @@ packages: dev: true optional: true - /@esbuild/sunos-x64@0.23.1: - resolution: {integrity: sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==} + /@esbuild/sunos-x64@0.24.0: + resolution: {integrity: sha512-jVzdzsbM5xrotH+W5f1s+JtUy1UWgjU0Cf4wMvffTB8m6wP5/kx0KiaLHlbJO+dMgtxKV8RQ/JvtlFcdZ1zCPA==} engines: {node: '>=18'} cpu: [x64] os: [sunos] @@ -3108,8 +3366,8 @@ packages: dev: true optional: true - /@esbuild/win32-arm64@0.23.1: - resolution: {integrity: sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==} + /@esbuild/win32-arm64@0.24.0: + resolution: {integrity: sha512-iKc8GAslzRpBytO2/aN3d2yb2z8XTVfNV0PjGlCxKo5SgWmNXx82I/Q3aG1tFfS+A2igVCY97TJ8tnYwpUWLCA==} engines: {node: '>=18'} cpu: [arm64] os: [win32] @@ -3126,8 +3384,8 @@ packages: dev: true optional: true - /@esbuild/win32-ia32@0.23.1: - resolution: {integrity: sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==} + /@esbuild/win32-ia32@0.24.0: + resolution: {integrity: sha512-vQW36KZolfIudCcTnaTpmLQ24Ha1RjygBo39/aLkM2kmjkWmZGEJ5Gn9l5/7tzXA42QGIoWbICfg6KLLkIw6yw==} engines: {node: '>=18'} cpu: [ia32] os: [win32] @@ -3144,8 +3402,8 @@ packages: dev: true optional: true - /@esbuild/win32-x64@0.23.1: - resolution: {integrity: sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==} + /@esbuild/win32-x64@0.24.0: + resolution: {integrity: sha512-7IAFPrjSQIJrGsK6flwg7NFmwBoSTyF3rl7If0hNUFQU4ilTsEPL6GuMuU9BfIWVVGuRnuIidkSMC+c0Otu8IA==} engines: {node: '>=18'} cpu: [x64] os: [win32] @@ -3189,7 +3447,7 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 - debug: 4.3.7(supports-color@6.1.0) + debug: 4.3.7 espree: 9.6.1 globals: 13.24.0 ignore: 5.3.2 @@ -3242,7 +3500,7 @@ packages: deprecated: Use @eslint/config-array instead dependencies: '@humanwhocodes/object-schema': 2.0.3 - debug: 4.3.7(supports-color@6.1.0) + debug: 4.3.7 minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -3602,13 +3860,13 @@ packages: peerDependencies: redux: ^3.1.0 || ^4.0.0 || ^5.0.0 dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.25.7 immutable: 4.3.7 redux: 5.0.1 dev: true - /@rollup/plugin-alias@5.1.0(rollup@4.22.2): - resolution: {integrity: sha512-lpA3RZ9PdIG7qqhEfv79tBffNaoDuukFDrmhLqg9ifv99u/ehn+lOg30x2zmhf8AQqQUZaMk/B9fZraQ6/acDQ==} + /@rollup/plugin-alias@5.1.1(rollup@4.24.0): + resolution: {integrity: sha512-PR9zDb+rOzkRb2VD+EuKB7UC41vU5DIwZ5qqCpk0KJudcWAyi8rvYOhS7+L5aZCspw1stTViLgN5v6FF1p5cgQ==} engines: {node: '>=14.0.0'} peerDependencies: rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 @@ -3616,12 +3874,11 @@ packages: rollup: optional: true dependencies: - rollup: 4.22.2 - slash: 4.0.0 + rollup: 4.24.0 dev: true - /@rollup/plugin-node-resolve@15.2.3(rollup@4.22.2): - resolution: {integrity: sha512-j/lym8nf5E21LwBT4Df1VD6hRO2L2iwUeUmP7litikRsVp1H6NWx20NEp0Y7su+7XGc476GnXXc4kFeZNGmaSQ==} + /@rollup/plugin-node-resolve@15.3.0(rollup@4.24.0): + resolution: {integrity: sha512-9eO5McEICxMzJpDW9OnMYSv4Sta3hmt7VtBFz5zR9273suNOydOyq/FrGeGy+KsTRFm8w0SLVhzig2ILFT63Ag==} engines: {node: '>=14.0.0'} peerDependencies: rollup: ^2.78.0||^3.0.0||^4.0.0 @@ -3629,13 +3886,12 @@ packages: rollup: optional: true dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.22.2) + '@rollup/pluginutils': 5.1.2(rollup@4.24.0) '@types/resolve': 1.20.2 deepmerge: 4.3.1 - is-builtin-module: 3.2.1 is-module: 1.0.0 resolve: 1.22.8 - rollup: 4.22.2 + rollup: 4.24.0 dev: true /@rollup/plugin-node-resolve@7.1.3(rollup@1.32.1): @@ -3660,8 +3916,8 @@ packages: magic-string: 0.25.9 rollup: 1.32.1 - /@rollup/plugin-replace@5.0.7(rollup@4.22.2): - resolution: {integrity: sha512-PqxSfuorkHz/SPpyngLyg5GCEkOcee9M1bkxiVDr41Pd61mqP1PLOoDPbpl44SB2mQGKwV/In74gqQmGITOhEQ==} + /@rollup/plugin-replace@6.0.1(rollup@4.24.0): + resolution: {integrity: sha512-2sPh9b73dj5IxuMmDAsQWVFT7mR+yoHweBaXG2W/R8vQ+IWZlnaI7BR7J6EguVQUp1hd8Z7XuozpDjEKQAAC2Q==} engines: {node: '>=14.0.0'} peerDependencies: rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 @@ -3669,13 +3925,13 @@ packages: rollup: optional: true dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.22.2) - magic-string: 0.30.11 - rollup: 4.22.2 + '@rollup/pluginutils': 5.1.2(rollup@4.24.0) + magic-string: 0.30.12 + rollup: 4.24.0 dev: true - /@rollup/plugin-typescript@11.1.6(rollup@4.22.2)(tslib@2.7.0)(typescript@5.6.2): - resolution: {integrity: sha512-R92yOmIACgYdJ7dJ97p4K69I8gg6IEHt8M7dUBxN3W6nrO8uUxX5ixl0yU/N3aZTi8WhPuICvOHXQvF6FaykAA==} + /@rollup/plugin-typescript@12.1.1(rollup@4.24.0)(tslib@2.8.0)(typescript@5.6.3): + resolution: {integrity: sha512-t7O653DpfB5MbFrqPe/VcKFFkvRuFNp9qId3xq4Eth5xlyymzxNpye2z8Hrl0RIMuXTSr5GGcFpkdlMeacUiFQ==} engines: {node: '>=14.0.0'} peerDependencies: rollup: ^2.14.0||^3.0.0||^4.0.0 @@ -3687,11 +3943,11 @@ packages: tslib: optional: true dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.22.2) + '@rollup/pluginutils': 5.1.2(rollup@4.24.0) resolve: 1.22.8 - rollup: 4.22.2 - tslib: 2.7.0 - typescript: 5.6.2 + rollup: 4.24.0 + tslib: 2.8.0 + typescript: 5.6.3 dev: true /@rollup/pluginutils@3.1.0(rollup@1.32.1): @@ -3705,8 +3961,8 @@ packages: picomatch: 2.3.1 rollup: 1.32.1 - /@rollup/pluginutils@5.1.0(rollup@4.22.2): - resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==} + /@rollup/pluginutils@5.1.2(rollup@4.24.0): + resolution: {integrity: sha512-/FIdS3PyZ39bjZlwqFnWqCOVnW7o963LtKMwQOD0NhQqw22gSr2YY1afu3FxRip4ZCZNsD5jq6Aaz6QV3D/Njw==} engines: {node: '>=14.0.0'} peerDependencies: rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 @@ -3717,7 +3973,7 @@ packages: '@types/estree': 1.0.6 estree-walker: 2.0.2 picomatch: 2.3.1 - rollup: 4.22.2 + rollup: 4.24.0 dev: true /@rollup/rollup-android-arm-eabi@4.22.2: @@ -3728,6 +3984,14 @@ packages: dev: true optional: true + /@rollup/rollup-android-arm-eabi@4.24.0: + resolution: {integrity: sha512-Q6HJd7Y6xdB48x8ZNVDOqsbh2uByBhgK8PiQgPhwkIw/HC/YX5Ghq2mQY5sRMZWHb3VsFkWooUVOZHKr7DmDIA==} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + /@rollup/rollup-android-arm64@4.22.2: resolution: {integrity: sha512-I+B1v0a4iqdS9DvYt1RJZ3W+Oh9EVWjbY6gp79aAYipIbxSLEoQtFQlZEnUuwhDXCqMxJ3hluxKAdPD+GiluFQ==} cpu: [arm64] @@ -3736,6 +4000,14 @@ packages: dev: true optional: true + /@rollup/rollup-android-arm64@4.24.0: + resolution: {integrity: sha512-ijLnS1qFId8xhKjT81uBHuuJp2lU4x2yxa4ctFPtG+MqEE6+C5f/+X/bStmxapgmwLwiL3ih122xv8kVARNAZA==} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + /@rollup/rollup-darwin-arm64@4.22.2: resolution: {integrity: sha512-BTHO7rR+LC67OP7I8N8GvdvnQqzFujJYWo7qCQ8fGdQcb8Gn6EQY+K1P+daQLnDCuWKbZ+gHAQZuKiQkXkqIYg==} cpu: [arm64] @@ -3744,6 +4016,14 @@ packages: dev: true optional: true + /@rollup/rollup-darwin-arm64@4.24.0: + resolution: {integrity: sha512-bIv+X9xeSs1XCk6DVvkO+S/z8/2AMt/2lMqdQbMrmVpgFvXlmde9mLcbQpztXm1tajC3raFDqegsH18HQPMYtA==} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + /@rollup/rollup-darwin-x64@4.22.2: resolution: {integrity: sha512-1esGwDNFe2lov4I6GsEeYaAMHwkqk0IbuGH7gXGdBmd/EP9QddJJvTtTF/jv+7R8ZTYPqwcdLpMTxK8ytP6k6Q==} cpu: [x64] @@ -3752,6 +4032,14 @@ packages: dev: true optional: true + /@rollup/rollup-darwin-x64@4.24.0: + resolution: {integrity: sha512-X6/nOwoFN7RT2svEQWUsW/5C/fYMBe4fnLK9DQk4SX4mgVBiTA9h64kjUYPvGQ0F/9xwJ5U5UfTbl6BEjaQdBQ==} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + /@rollup/rollup-linux-arm-gnueabihf@4.22.2: resolution: {integrity: sha512-GBHuY07x96OTEM3OQLNaUSUwrOhdMea/LDmlFHi/HMonrgF6jcFrrFFwJhhe84XtA1oK/Qh4yFS+VMREf6dobg==} cpu: [arm] @@ -3760,6 +4048,14 @@ packages: dev: true optional: true + /@rollup/rollup-linux-arm-gnueabihf@4.24.0: + resolution: {integrity: sha512-0KXvIJQMOImLCVCz9uvvdPgfyWo93aHHp8ui3FrtOP57svqrF/roSSR5pjqL2hcMp0ljeGlU4q9o/rQaAQ3AYA==} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@rollup/rollup-linux-arm-musleabihf@4.22.2: resolution: {integrity: sha512-Dbfa9Sc1G1lWxop0gNguXOfGhaXQWAGhZUcqA0Vs6CnJq8JW/YOw/KvyGtQFmz4yDr0H4v9X248SM7bizYj4yQ==} cpu: [arm] @@ -3768,6 +4064,14 @@ packages: dev: true optional: true + /@rollup/rollup-linux-arm-musleabihf@4.24.0: + resolution: {integrity: sha512-it2BW6kKFVh8xk/BnHfakEeoLPv8STIISekpoF+nBgWM4d55CZKc7T4Dx1pEbTnYm/xEKMgy1MNtYuoA8RFIWw==} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@rollup/rollup-linux-arm64-gnu@4.22.2: resolution: {integrity: sha512-Z1YpgBvFYhZIyBW5BoopwSg+t7yqEhs5HCei4JbsaXnhz/eZehT18DaXl957aaE9QK7TRGFryCAtStZywcQe1A==} cpu: [arm64] @@ -3776,6 +4080,14 @@ packages: dev: true optional: true + /@rollup/rollup-linux-arm64-gnu@4.24.0: + resolution: {integrity: sha512-i0xTLXjqap2eRfulFVlSnM5dEbTVque/3Pi4g2y7cxrs7+a9De42z4XxKLYJ7+OhE3IgxvfQM7vQc43bwTgPwA==} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@rollup/rollup-linux-arm64-musl@4.22.2: resolution: {integrity: sha512-66Zszr7i/JaQ0u/lefcfaAw16wh3oT72vSqubIMQqWzOg85bGCPhoeykG/cC5uvMzH80DQa2L539IqKht6twVA==} cpu: [arm64] @@ -3784,6 +4096,14 @@ packages: dev: true optional: true + /@rollup/rollup-linux-arm64-musl@4.24.0: + resolution: {integrity: sha512-9E6MKUJhDuDh604Qco5yP/3qn3y7SLXYuiC0Rpr89aMScS2UAmK1wHP2b7KAa1nSjWJc/f/Lc0Wl1L47qjiyQw==} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@rollup/rollup-linux-powerpc64le-gnu@4.22.2: resolution: {integrity: sha512-HpJCMnlMTfEhwo19bajvdraQMcAq3FX08QDx3OfQgb+414xZhKNf3jNvLFYKbbDSGBBrQh5yNwWZrdK0g0pokg==} cpu: [ppc64] @@ -3792,6 +4112,14 @@ packages: dev: true optional: true + /@rollup/rollup-linux-powerpc64le-gnu@4.24.0: + resolution: {integrity: sha512-2XFFPJ2XMEiF5Zi2EBf4h73oR1V/lycirxZxHZNc93SqDN/IWhYYSYj8I9381ikUFXZrz2v7r2tOVk2NBwxrWw==} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@rollup/rollup-linux-riscv64-gnu@4.22.2: resolution: {integrity: sha512-/egzQzbOSRef2vYCINKITGrlwkzP7uXRnL+xU2j75kDVp3iPdcF0TIlfwTRF8woBZllhk3QaxNOEj2Ogh3t9hg==} cpu: [riscv64] @@ -3800,6 +4128,14 @@ packages: dev: true optional: true + /@rollup/rollup-linux-riscv64-gnu@4.24.0: + resolution: {integrity: sha512-M3Dg4hlwuntUCdzU7KjYqbbd+BLq3JMAOhCKdBE3TcMGMZbKkDdJ5ivNdehOssMCIokNHFOsv7DO4rlEOfyKpg==} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@rollup/rollup-linux-s390x-gnu@4.22.2: resolution: {integrity: sha512-qgYbOEbrPfEkH/OnUJd1/q4s89FvNJQIUldx8X2F/UM5sEbtkqZpf2s0yly2jSCKr1zUUOY1hnTP2J1WOzMAdA==} cpu: [s390x] @@ -3808,6 +4144,14 @@ packages: dev: true optional: true + /@rollup/rollup-linux-s390x-gnu@4.24.0: + resolution: {integrity: sha512-mjBaoo4ocxJppTorZVKWFpy1bfFj9FeCMJqzlMQGjpNPY9JwQi7OuS1axzNIk0nMX6jSgy6ZURDZ2w0QW6D56g==} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@rollup/rollup-linux-x64-gnu@4.22.2: resolution: {integrity: sha512-a0lkvNhFLhf+w7A95XeBqGQaG0KfS3hPFJnz1uraSdUe/XImkp/Psq0Ca0/UdD5IEAGoENVmnYrzSC9Y2a2uKQ==} cpu: [x64] @@ -3816,6 +4160,14 @@ packages: dev: true optional: true + /@rollup/rollup-linux-x64-gnu@4.24.0: + resolution: {integrity: sha512-ZXFk7M72R0YYFN5q13niV0B7G8/5dcQ9JDp8keJSfr3GoZeXEoMHP/HlvqROA3OMbMdfr19IjCeNAnPUG93b6A==} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@rollup/rollup-linux-x64-musl@4.22.2: resolution: {integrity: sha512-sSWBVZgzwtsuG9Dxi9kjYOUu/wKW+jrbzj4Cclabqnfkot8Z3VEHcIgyenA3lLn/Fu11uDviWjhctulkhEO60g==} cpu: [x64] @@ -3824,6 +4176,14 @@ packages: dev: true optional: true + /@rollup/rollup-linux-x64-musl@4.24.0: + resolution: {integrity: sha512-w1i+L7kAXZNdYl+vFvzSZy8Y1arS7vMgIy8wusXJzRrPyof5LAb02KGr1PD2EkRcl73kHulIID0M501lN+vobQ==} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@rollup/rollup-win32-arm64-msvc@4.22.2: resolution: {integrity: sha512-t/YgCbZ638R/r7IKb9yCM6nAek1RUvyNdfU0SHMDLOf6GFe/VG1wdiUAsxTWHKqjyzkRGg897ZfCpdo1bsCSsA==} cpu: [arm64] @@ -3832,6 +4192,14 @@ packages: dev: true optional: true + /@rollup/rollup-win32-arm64-msvc@4.24.0: + resolution: {integrity: sha512-VXBrnPWgBpVDCVY6XF3LEW0pOU51KbaHhccHw6AS6vBWIC60eqsH19DAeeObl+g8nKAz04QFdl/Cefta0xQtUQ==} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@rollup/rollup-win32-ia32-msvc@4.22.2: resolution: {integrity: sha512-kTmX5uGs3WYOA+gYDgI6ITkZng9SP71FEMoHNkn+cnmb9Zuyyay8pf0oO5twtTwSjNGy1jlaWooTIr+Dw4tIbw==} cpu: [ia32] @@ -3840,6 +4208,14 @@ packages: dev: true optional: true + /@rollup/rollup-win32-ia32-msvc@4.24.0: + resolution: {integrity: sha512-xrNcGDU0OxVcPTH/8n/ShH4UevZxKIO6HJFK0e15XItZP2UcaiLFd5kiX7hJnqCbSztUF8Qot+JWBC/QXRPYWQ==} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@rollup/rollup-win32-x64-msvc@4.22.2: resolution: {integrity: sha512-Yy8So+SoRz8I3NS4Bjh91BICPOSVgdompTIPYTByUqU66AXSIOgmW3Lv1ke3NORPqxdF+RdrZET+8vYai6f4aA==} cpu: [x64] @@ -3848,6 +4224,14 @@ packages: dev: true optional: true + /@rollup/rollup-win32-x64-msvc@4.24.0: + resolution: {integrity: sha512-fbMkAF7fufku0N2dE5TBXcNlg0pt0cJue4xBRE2Qc5Vqikxr4VCgKj/ht6SMdFcOacVA9rqF70APJ8RN/4vMJw==} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@rtsao/scc@1.1.0: resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} @@ -3970,8 +4354,8 @@ packages: resolution: {integrity: sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==} engines: {node: '>=18'} dependencies: - '@babel/code-frame': 7.24.7 - '@babel/runtime': 7.25.6 + '@babel/code-frame': 7.25.7 + '@babel/runtime': 7.25.7 '@types/aria-query': 5.0.4 aria-query: 5.3.0 chalk: 4.1.2 @@ -3980,7 +4364,7 @@ packages: pretty-format: 27.5.1 dev: true - /@testing-library/react@16.0.1(@testing-library/dom@10.4.0)(@types/react-dom@18.3.0)(@types/react@18.3.8)(react-dom@19.0.0-rc.0)(react@19.0.0-rc.0): + /@testing-library/react@16.0.1(@testing-library/dom@10.4.0)(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@19.0.0-rc.0)(react@19.0.0-rc.0): resolution: {integrity: sha512-dSmwJVtJXmku+iocRhWOUFbrERC76TX2Mnf0ATODz8brzAZrMBbzLwQixlBSanZxR6LddK3eiwpSFZgDET1URg==} engines: {node: '>=18'} peerDependencies: @@ -3995,10 +4379,10 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.25.7 '@testing-library/dom': 10.4.0 - '@types/react': 18.3.8 - '@types/react-dom': 18.3.0 + '@types/react': 18.3.11 + '@types/react-dom': 18.3.1 react: 19.0.0-rc.0 react-dom: 19.0.0-rc.0(react@19.0.0-rc.0) dev: true @@ -4082,9 +4466,9 @@ packages: /@types/jsdom@21.1.7: resolution: {integrity: sha512-yOriVnggzrnQ3a9OKOCxaVuSug3w3/SbOj5i7VwXWZEyUNl3bLF9V3MfxGbZKuwqJOQyRfqXyROBB1CoZLFWzA==} dependencies: - '@types/node': 22.5.5 + '@types/node': 22.7.5 '@types/tough-cookie': 4.0.5 - parse5: 7.1.2 + parse5: 7.2.0 dev: true /@types/json-schema@7.0.15: @@ -4101,6 +4485,12 @@ packages: dependencies: undici-types: 6.19.8 + /@types/node@22.7.5: + resolution: {integrity: sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==} + dependencies: + undici-types: 6.19.8 + dev: true + /@types/normalize-package-data@2.4.4: resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -4127,6 +4517,12 @@ packages: '@types/react': 18.3.8 dev: true + /@types/react-dom@18.3.1: + resolution: {integrity: sha512-qW1Mfv8taImTthu4KoXgDfLuk4bydU6Q/TkADnDWWHwi4NX4BR+LWfTp2sVmTqRrsHvyDDTelgelxJ+SsejKKQ==} + dependencies: + '@types/react': 18.3.11 + dev: true + /@types/react@17.0.20: resolution: {integrity: sha512-wWZrPlihslrPpcKyCSlmIlruakxr57/buQN1RjlIeaaTWDLtJkTtRW429MoQJergvVKc4IWBpRhWw7YNh/7GVA==} dependencies: @@ -4134,6 +4530,13 @@ packages: '@types/scheduler': 0.23.0 csstype: 3.1.3 + /@types/react@18.3.11: + resolution: {integrity: sha512-r6QZ069rFTjrEYgFdOck1gK7FLVsgJE7tTz0pQBczlBNUhBNk0MQH4UbnFSwjpQLMkLzgqvBBa+qGpLje16eTQ==} + dependencies: + '@types/prop-types': 15.7.13 + csstype: 3.1.3 + dev: true + /@types/react@18.3.8: resolution: {integrity: sha512-syBUrW3/XpnW4WJ41Pft+I+aPoDVbrBVQGEnbD7NijDGlVC+8gV/XKRY+7vMDlfPpbwYt0l1vd/Sj8bJGMbs9Q==} dependencies: @@ -4220,8 +4623,8 @@ packages: transitivePeerDependencies: - supports-color - /@typescript-eslint/eslint-plugin@8.6.0(@typescript-eslint/parser@8.6.0)(eslint@8.57.0)(typescript@5.6.2): - resolution: {integrity: sha512-UOaz/wFowmoh2G6Mr9gw60B1mm0MzUtm6Ic8G2yM1Le6gyj5Loi/N+O5mocugRGY+8OeeKmkMmbxNqUCq3B4Sg==} + /@typescript-eslint/eslint-plugin@8.9.0(@typescript-eslint/parser@8.9.0)(eslint@8.57.0)(typescript@5.6.3): + resolution: {integrity: sha512-Y1n621OCy4m7/vTXNlCbMVp87zSd7NH0L9cXD8aIpOaNlzeWxIK4+Q19A68gSmTNRZn92UjocVUWDthGxtqHFg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 @@ -4232,17 +4635,17 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.11.1 - '@typescript-eslint/parser': 8.6.0(eslint@8.57.0)(typescript@5.6.2) - '@typescript-eslint/scope-manager': 8.6.0 - '@typescript-eslint/type-utils': 8.6.0(eslint@8.57.0)(typescript@5.6.2) - '@typescript-eslint/utils': 8.6.0(eslint@8.57.0)(typescript@5.6.2) - '@typescript-eslint/visitor-keys': 8.6.0 + '@typescript-eslint/parser': 8.9.0(eslint@8.57.0)(typescript@5.6.3) + '@typescript-eslint/scope-manager': 8.9.0 + '@typescript-eslint/type-utils': 8.9.0(eslint@8.57.0)(typescript@5.6.3) + '@typescript-eslint/utils': 8.9.0(eslint@8.57.0)(typescript@5.6.3) + '@typescript-eslint/visitor-keys': 8.9.0 eslint: 8.57.0 graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 - ts-api-utils: 1.3.0(typescript@5.6.2) - typescript: 5.6.2 + ts-api-utils: 1.3.0(typescript@5.6.3) + typescript: 5.6.3 transitivePeerDependencies: - supports-color dev: true @@ -4299,8 +4702,8 @@ packages: transitivePeerDependencies: - supports-color - /@typescript-eslint/parser@8.6.0(eslint@8.57.0)(typescript@5.6.2): - resolution: {integrity: sha512-eQcbCuA2Vmw45iGfcyG4y6rS7BhWfz9MQuk409WD47qMM+bKCGQWXxvoOs1DUp+T7UBMTtRTVT+kXr7Sh4O9Ow==} + /@typescript-eslint/parser@8.9.0(eslint@8.57.0)(typescript@5.6.3): + resolution: {integrity: sha512-U+BLn2rqTTHnc4FL3FJjxaXptTxmf9sNftJK62XLz4+GxG3hLHm/SUNaaXP5Y4uTiuYoL5YLy4JBCJe3+t8awQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -4309,13 +4712,13 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 8.6.0 - '@typescript-eslint/types': 8.6.0 - '@typescript-eslint/typescript-estree': 8.6.0(typescript@5.6.2) - '@typescript-eslint/visitor-keys': 8.6.0 - debug: 4.3.7(supports-color@6.1.0) + '@typescript-eslint/scope-manager': 8.9.0 + '@typescript-eslint/types': 8.9.0 + '@typescript-eslint/typescript-estree': 8.9.0(typescript@5.6.3) + '@typescript-eslint/visitor-keys': 8.9.0 + debug: 4.3.7 eslint: 8.57.0 - typescript: 5.6.2 + typescript: 5.6.3 transitivePeerDependencies: - supports-color dev: true @@ -4335,16 +4738,16 @@ packages: '@typescript-eslint/visitor-keys': 7.18.0 dev: true - /@typescript-eslint/scope-manager@8.6.0: - resolution: {integrity: sha512-ZuoutoS5y9UOxKvpc/GkvF4cuEmpokda4wRg64JEia27wX+PysIE9q+lzDtlHHgblwUWwo5/Qn+/WyTUvDwBHw==} + /@typescript-eslint/scope-manager@8.9.0: + resolution: {integrity: sha512-bZu9bUud9ym1cabmOYH9S6TnbWRzpklVmwqICeOulTCZ9ue2/pczWzQvt/cGj2r2o1RdKoZbuEMalJJSYw3pHQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} dependencies: - '@typescript-eslint/types': 8.6.0 - '@typescript-eslint/visitor-keys': 8.6.0 + '@typescript-eslint/types': 8.9.0 + '@typescript-eslint/visitor-keys': 8.9.0 dev: true - /@typescript-eslint/type-utils@8.6.0(eslint@8.57.0)(typescript@5.6.2): - resolution: {integrity: sha512-dtePl4gsuenXVwC7dVNlb4mGDcKjDT/Ropsk4za/ouMBPplCLyznIaR+W65mvCvsyS97dymoBRrioEXI7k0XIg==} + /@typescript-eslint/type-utils@8.9.0(eslint@8.57.0)(typescript@5.6.3): + resolution: {integrity: sha512-JD+/pCqlKqAk5961vxCluK+clkppHY07IbV3vett97KOV+8C6l+CPEPwpUuiMwgbOz/qrN3Ke4zzjqbT+ls+1Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '*' @@ -4352,11 +4755,11 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 8.6.0(typescript@5.6.2) - '@typescript-eslint/utils': 8.6.0(eslint@8.57.0)(typescript@5.6.2) - debug: 4.3.7(supports-color@6.1.0) - ts-api-utils: 1.3.0(typescript@5.6.2) - typescript: 5.6.2 + '@typescript-eslint/typescript-estree': 8.9.0(typescript@5.6.3) + '@typescript-eslint/utils': 8.9.0(eslint@8.57.0)(typescript@5.6.3) + debug: 4.3.7 + ts-api-utils: 1.3.0(typescript@5.6.3) + typescript: 5.6.3 transitivePeerDependencies: - eslint - supports-color @@ -4375,8 +4778,8 @@ packages: engines: {node: ^18.18.0 || >=20.0.0} dev: true - /@typescript-eslint/types@8.6.0: - resolution: {integrity: sha512-rojqFZGd4MQxw33SrOy09qIDS8WEldM8JWtKQLAjf/X5mGSeEFh5ixQlxssMNyPslVIk9yzWqXCsV2eFhYrYUw==} + /@typescript-eslint/types@8.9.0: + resolution: {integrity: sha512-SjgkvdYyt1FAPhU9c6FiYCXrldwYYlIQLkuc+LfAhCna6ggp96ACncdtlbn8FmnG72tUkXclrDExOpEYf1nfJQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} dev: true @@ -4421,7 +4824,7 @@ packages: transitivePeerDependencies: - supports-color - /@typescript-eslint/typescript-estree@7.18.0(typescript@5.6.2): + /@typescript-eslint/typescript-estree@7.18.0(typescript@5.6.3): resolution: {integrity: sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: @@ -4432,19 +4835,19 @@ packages: dependencies: '@typescript-eslint/types': 7.18.0 '@typescript-eslint/visitor-keys': 7.18.0 - debug: 4.3.7(supports-color@6.1.0) + debug: 4.3.7 globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.6.3 - ts-api-utils: 1.3.0(typescript@5.6.2) - typescript: 5.6.2 + ts-api-utils: 1.3.0(typescript@5.6.3) + typescript: 5.6.3 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/typescript-estree@8.6.0(typescript@5.6.2): - resolution: {integrity: sha512-MOVAzsKJIPIlLK239l5s06YXjNqpKTVhBVDnqUumQJja5+Y94V3+4VUFRA0G60y2jNnTVwRCkhyGQpavfsbq/g==} + /@typescript-eslint/typescript-estree@8.9.0(typescript@5.6.3): + resolution: {integrity: sha512-9iJYTgKLDG6+iqegehc5+EqE6sqaee7kb8vWpmHZ86EqwDjmlqNNHeqDVqb9duh+BY6WCNHfIGvuVU3Tf9Db0g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '*' @@ -4452,20 +4855,20 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 8.6.0 - '@typescript-eslint/visitor-keys': 8.6.0 - debug: 4.3.7(supports-color@6.1.0) + '@typescript-eslint/types': 8.9.0 + '@typescript-eslint/visitor-keys': 8.9.0 + debug: 4.3.7 fast-glob: 3.3.2 is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.6.3 - ts-api-utils: 1.3.0(typescript@5.6.2) - typescript: 5.6.2 + ts-api-utils: 1.3.0(typescript@5.6.3) + typescript: 5.6.3 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/utils@7.18.0(eslint@8.57.0)(typescript@5.6.2): + /@typescript-eslint/utils@7.18.0(eslint@8.57.0)(typescript@5.6.3): resolution: {integrity: sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: @@ -4474,23 +4877,23 @@ packages: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) '@typescript-eslint/scope-manager': 7.18.0 '@typescript-eslint/types': 7.18.0 - '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.6.2) + '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.6.3) eslint: 8.57.0 transitivePeerDependencies: - supports-color - typescript dev: true - /@typescript-eslint/utils@8.6.0(eslint@8.57.0)(typescript@5.6.2): - resolution: {integrity: sha512-eNp9cWnYf36NaOVjkEUznf6fEgVy1TWpE0o52e4wtojjBx7D1UV2WAWGzR+8Y5lVFtpMLPwNbC67T83DWSph4A==} + /@typescript-eslint/utils@8.9.0(eslint@8.57.0)(typescript@5.6.3): + resolution: {integrity: sha512-PKgMmaSo/Yg/F7kIZvrgrWa1+Vwn036CdNUvYFEkYbPwOH4i8xvkaRlu148W3vtheWK9ckKRIz7PBP5oUlkrvQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@typescript-eslint/scope-manager': 8.6.0 - '@typescript-eslint/types': 8.6.0 - '@typescript-eslint/typescript-estree': 8.6.0(typescript@5.6.2) + '@typescript-eslint/scope-manager': 8.9.0 + '@typescript-eslint/types': 8.9.0 + '@typescript-eslint/typescript-estree': 8.9.0(typescript@5.6.3) eslint: 8.57.0 transitivePeerDependencies: - supports-color @@ -4518,11 +4921,11 @@ packages: eslint-visitor-keys: 3.4.3 dev: true - /@typescript-eslint/visitor-keys@8.6.0: - resolution: {integrity: sha512-wapVFfZg9H0qOYh4grNVQiMklJGluQrOUiOhYRrQWhx7BY/+I1IYb8BczWNbbUpO+pqy0rDciv3lQH5E1bCLrg==} + /@typescript-eslint/visitor-keys@8.9.0: + resolution: {integrity: sha512-Ht4y38ubk4L5/U8xKUBfKNYGmvKvA1CANoxiTRMM+tOLk3lbF3DvzZCxJCRSE+2GdCMSh6zq9VZJc3asc1XuAA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} dependencies: - '@typescript-eslint/types': 8.6.0 + '@typescript-eslint/types': 8.9.0 eslint-visitor-keys: 3.4.3 dev: true @@ -4562,45 +4965,45 @@ packages: - supports-color dev: true - /@vitest/coverage-v8@2.1.1(vitest@2.1.1): - resolution: {integrity: sha512-md/A7A3c42oTT8JUHSqjP5uKTWJejzUW4jalpvs+rZ27gsURsMU8DEb+8Jf8C6Kj2gwfSHJqobDNBuoqlm0cFw==} + /@vitest/coverage-v8@2.1.3(vitest@2.1.3): + resolution: {integrity: sha512-2OJ3c7UPoFSmBZwqD2VEkUw6A/tzPF0LmW0ZZhhB8PFxuc+9IBG/FaSM+RLEenc7ljzFvGN+G0nGQoZnh7sy2A==} peerDependencies: - '@vitest/browser': 2.1.1 - vitest: 2.1.1 + '@vitest/browser': 2.1.3 + vitest: 2.1.3 peerDependenciesMeta: '@vitest/browser': optional: true dependencies: '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 0.2.3 - debug: 4.3.7(supports-color@6.1.0) + debug: 4.3.7 istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 istanbul-lib-source-maps: 5.0.6 istanbul-reports: 3.1.7 - magic-string: 0.30.11 + magic-string: 0.30.12 magicast: 0.3.5 std-env: 3.7.0 test-exclude: 7.0.1 tinyrainbow: 1.2.0 - vitest: 2.1.1(@vitest/ui@2.1.1)(jsdom@25.0.0) + vitest: 2.1.3(@vitest/ui@2.1.3)(jsdom@25.0.1) transitivePeerDependencies: - supports-color dev: true - /@vitest/expect@2.1.1: - resolution: {integrity: sha512-YeueunS0HiHiQxk+KEOnq/QMzlUuOzbU1Go+PgAsHvvv3tUkJPm9xWt+6ITNTlzsMXUjmgm5T+U7KBPK2qQV6w==} + /@vitest/expect@2.1.3: + resolution: {integrity: sha512-SNBoPubeCJhZ48agjXruCI57DvxcsivVDdWz+SSsmjTT4QN/DfHk3zB/xKsJqMs26bLZ/pNRLnCf0j679i0uWQ==} dependencies: - '@vitest/spy': 2.1.1 - '@vitest/utils': 2.1.1 + '@vitest/spy': 2.1.3 + '@vitest/utils': 2.1.3 chai: 5.1.1 tinyrainbow: 1.2.0 dev: true - /@vitest/mocker@2.1.1(@vitest/spy@2.1.1)(vite@5.4.7): - resolution: {integrity: sha512-LNN5VwOEdJqCmJ/2XJBywB11DLlkbY0ooDJW3uRX5cZyYCrc4PI/ePX0iQhE3BiEGiQmK4GE7Q/PqCkkaiPnrA==} + /@vitest/mocker@2.1.3(@vitest/spy@2.1.3)(vite@5.4.9): + resolution: {integrity: sha512-eSpdY/eJDuOvuTA3ASzCjdithHa+GIF1L4PqtEELl6Qa3XafdMLBpBlZCIUCX2J+Q6sNmjmxtosAG62fK4BlqQ==} peerDependencies: - '@vitest/spy': 2.1.1 + '@vitest/spy': 2.1.3 msw: ^2.3.5 vite: ^5.0.0 peerDependenciesMeta: @@ -4609,59 +5012,59 @@ packages: vite: optional: true dependencies: - '@vitest/spy': 2.1.1 + '@vitest/spy': 2.1.3 estree-walker: 3.0.3 - magic-string: 0.30.11 - vite: 5.4.7 + magic-string: 0.30.12 + vite: 5.4.9 dev: true - /@vitest/pretty-format@2.1.1: - resolution: {integrity: sha512-SjxPFOtuINDUW8/UkElJYQSFtnWX7tMksSGW0vfjxMneFqxVr8YJ979QpMbDW7g+BIiq88RAGDjf7en6rvLPPQ==} + /@vitest/pretty-format@2.1.3: + resolution: {integrity: sha512-XH1XdtoLZCpqV59KRbPrIhFCOO0hErxrQCMcvnQete3Vibb9UeIOX02uFPfVn3Z9ZXsq78etlfyhnkmIZSzIwQ==} dependencies: tinyrainbow: 1.2.0 dev: true - /@vitest/runner@2.1.1: - resolution: {integrity: sha512-uTPuY6PWOYitIkLPidaY5L3t0JJITdGTSwBtwMjKzo5O6RCOEncz9PUN+0pDidX8kTHYjO0EwUIvhlGpnGpxmA==} + /@vitest/runner@2.1.3: + resolution: {integrity: sha512-JGzpWqmFJ4fq5ZKHtVO3Xuy1iF2rHGV4d/pdzgkYHm1+gOzNZtqjvyiaDGJytRyMU54qkxpNzCx+PErzJ1/JqQ==} dependencies: - '@vitest/utils': 2.1.1 + '@vitest/utils': 2.1.3 pathe: 1.1.2 dev: true - /@vitest/snapshot@2.1.1: - resolution: {integrity: sha512-BnSku1WFy7r4mm96ha2FzN99AZJgpZOWrAhtQfoxjUU5YMRpq1zmHRq7a5K9/NjqonebO7iVDla+VvZS8BOWMw==} + /@vitest/snapshot@2.1.3: + resolution: {integrity: sha512-qWC2mWc7VAXmjAkEKxrScWHWFyCQx/cmiZtuGqMi+WwqQJ2iURsVY4ZfAK6dVo6K2smKRU6l3BPwqEBvhnpQGg==} dependencies: - '@vitest/pretty-format': 2.1.1 - magic-string: 0.30.11 + '@vitest/pretty-format': 2.1.3 + magic-string: 0.30.12 pathe: 1.1.2 dev: true - /@vitest/spy@2.1.1: - resolution: {integrity: sha512-ZM39BnZ9t/xZ/nF4UwRH5il0Sw93QnZXd9NAZGRpIgj0yvVwPpLd702s/Cx955rGaMlyBQkZJ2Ir7qyY48VZ+g==} + /@vitest/spy@2.1.3: + resolution: {integrity: sha512-Nb2UzbcUswzeSP7JksMDaqsI43Sj5+Kry6ry6jQJT4b5gAK+NS9NED6mDb8FlMRCX8m5guaHCDZmqYMMWRy5nQ==} dependencies: tinyspy: 3.0.2 dev: true - /@vitest/ui@2.1.1(vitest@2.1.1): - resolution: {integrity: sha512-IIxo2LkQDA+1TZdPLYPclzsXukBWd5dX2CKpGqH8CCt8Wh0ZuDn4+vuQ9qlppEju6/igDGzjWF/zyorfsf+nHg==} + /@vitest/ui@2.1.3(vitest@2.1.3): + resolution: {integrity: sha512-2XwTrHVJw3t9NYES26LQUYy51ZB8W4bRPgqUH2Eyda3kIuOlYw1ZdPNU22qcVlUVx4WKgECFQOSXuopsczuVjQ==} peerDependencies: - vitest: 2.1.1 + vitest: 2.1.3 dependencies: - '@vitest/utils': 2.1.1 + '@vitest/utils': 2.1.3 fflate: 0.8.2 flatted: 3.3.1 pathe: 1.1.2 sirv: 2.0.4 - tinyglobby: 0.2.6 + tinyglobby: 0.2.9 tinyrainbow: 1.2.0 - vitest: 2.1.1(@vitest/ui@2.1.1)(jsdom@25.0.0) + vitest: 2.1.3(@vitest/ui@2.1.3)(jsdom@25.0.1) dev: true - /@vitest/utils@2.1.1: - resolution: {integrity: sha512-Y6Q9TsI+qJ2CC0ZKj6VBb+T8UPz593N113nnUykqwANqhgf3QkZeHFlusgKLTqrnVHbj/XDKZcDHol+dxVT+rQ==} + /@vitest/utils@2.1.3: + resolution: {integrity: sha512-xpiVfDSg1RrYT0tX6czgerkpcKFmFOF/gCr30+Mve5V2kewCy4Prn1/NDMSRwaSmT7PRaOF83wu+bEtsY1wrvA==} dependencies: - '@vitest/pretty-format': 2.1.1 - loupe: 3.1.1 + '@vitest/pretty-format': 2.1.3 + loupe: 3.1.2 tinyrainbow: 1.2.0 dev: true @@ -4854,7 +5257,7 @@ packages: resolution: {integrity: sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==} engines: {node: '>= 14'} dependencies: - debug: 4.3.7(supports-color@6.1.0) + debug: 4.3.7 transitivePeerDependencies: - supports-color dev: true @@ -5651,6 +6054,17 @@ packages: node-releases: 2.0.18 update-browserslist-db: 1.1.0(browserslist@4.23.3) + /browserslist@4.24.0: + resolution: {integrity: sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001669 + electron-to-chromium: 1.5.39 + node-releases: 2.0.18 + update-browserslist-db: 1.1.1(browserslist@4.24.0) + dev: true + /bser@2.1.1: resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} dependencies: @@ -5805,6 +6219,10 @@ packages: /caniuse-lite@1.0.30001662: resolution: {integrity: sha512-sgMUVwLmGseH8ZIrm1d51UbrhqMCH3jvS7gF/M6byuHOnKyLOBL7W8yz5V02OHwgLGA36o/AFhWzzh4uc5aqTA==} + /caniuse-lite@1.0.30001669: + resolution: {integrity: sha512-DlWzFDJqstqtIVx1zeSpIMLjunf5SmwOw0N2Ck/QSQdS8PLS4+9HrLaYei4w8BIAL7IB/UEDu889d8vhCTPA0w==} + dev: true + /capture-exit@2.0.0: resolution: {integrity: sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==} engines: {node: 6.* || 8.* || >= 10.*} @@ -5822,7 +6240,7 @@ packages: assertion-error: 2.0.1 check-error: 2.1.1 deep-eql: 5.0.2 - loupe: 3.1.1 + loupe: 3.1.2 pathval: 2.0.0 dev: true @@ -6486,6 +6904,16 @@ packages: ms: 2.0.0 supports-color: 6.1.0 + /debug@3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.3 + /debug@3.2.7(supports-color@6.1.0): resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} peerDependencies: @@ -6497,6 +6925,18 @@ packages: ms: 2.1.3 supports-color: 6.1.0 + /debug@4.3.7: + resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.3 + dev: true + /debug@4.3.7(supports-color@6.1.0): resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} engines: {node: '>=6.0'} @@ -6835,6 +7275,10 @@ packages: /electron-to-chromium@1.5.26: resolution: {integrity: sha512-Z+OMe9M/V6Ep9n/52+b7lkvYEps26z4Yz3vjWL1V61W0q+VLF1pOHhMY17sa4roz4AWmULSI8E6SAojZA5L0YQ==} + /electron-to-chromium@1.5.39: + resolution: {integrity: sha512-4xkpSR6CjuiaNyvwiWDI85N9AxsvbPawB8xc7yzLPonYTuP19BVgYweKyUMFtHEZgIcHWMt1ks5Cqx2m+6/Grg==} + dev: true + /elliptic@6.5.7: resolution: {integrity: sha512-ESVCtTwiA+XhY3wyh24QqRGBoP3rEdDUl3EDUUo9tft074fi19IrdpH7hLCMMP3CIj7jb3W96rn8lt/BqIlt5Q==} dependencies: @@ -6953,7 +7397,7 @@ packages: object-inspect: 1.13.2 object-keys: 1.1.1 object.assign: 4.1.5 - regexp.prototype.flags: 1.5.2 + regexp.prototype.flags: 1.5.3 safe-array-concat: 1.1.2 safe-regex-test: 1.0.3 string.prototype.trim: 1.2.9 @@ -7011,6 +7455,26 @@ packages: iterator.prototype: 1.1.2 safe-array-concat: 1.1.2 + /es-iterator-helpers@1.1.0: + resolution: {integrity: sha512-/SurEfycdyssORP/E+bj4sEu1CWw4EmLDsHynHwSXQ7utgbrMRWW195pTrCjFgFCddf/UkYm3oqKPRq5i8bJbw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + es-set-tostringtag: 2.0.3 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + globalthis: 1.0.4 + has-property-descriptors: 1.0.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + internal-slot: 1.0.7 + iterator.prototype: 1.1.3 + safe-array-concat: 1.1.2 + dev: true + /es-module-lexer@1.5.4: resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==} dev: true @@ -7306,36 +7770,36 @@ packages: '@esbuild/win32-x64': 0.21.5 dev: true - /esbuild@0.23.1: - resolution: {integrity: sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==} + /esbuild@0.24.0: + resolution: {integrity: sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ==} engines: {node: '>=18'} hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/aix-ppc64': 0.23.1 - '@esbuild/android-arm': 0.23.1 - '@esbuild/android-arm64': 0.23.1 - '@esbuild/android-x64': 0.23.1 - '@esbuild/darwin-arm64': 0.23.1 - '@esbuild/darwin-x64': 0.23.1 - '@esbuild/freebsd-arm64': 0.23.1 - '@esbuild/freebsd-x64': 0.23.1 - '@esbuild/linux-arm': 0.23.1 - '@esbuild/linux-arm64': 0.23.1 - '@esbuild/linux-ia32': 0.23.1 - '@esbuild/linux-loong64': 0.23.1 - '@esbuild/linux-mips64el': 0.23.1 - '@esbuild/linux-ppc64': 0.23.1 - '@esbuild/linux-riscv64': 0.23.1 - '@esbuild/linux-s390x': 0.23.1 - '@esbuild/linux-x64': 0.23.1 - '@esbuild/netbsd-x64': 0.23.1 - '@esbuild/openbsd-arm64': 0.23.1 - '@esbuild/openbsd-x64': 0.23.1 - '@esbuild/sunos-x64': 0.23.1 - '@esbuild/win32-arm64': 0.23.1 - '@esbuild/win32-ia32': 0.23.1 - '@esbuild/win32-x64': 0.23.1 + '@esbuild/aix-ppc64': 0.24.0 + '@esbuild/android-arm': 0.24.0 + '@esbuild/android-arm64': 0.24.0 + '@esbuild/android-x64': 0.24.0 + '@esbuild/darwin-arm64': 0.24.0 + '@esbuild/darwin-x64': 0.24.0 + '@esbuild/freebsd-arm64': 0.24.0 + '@esbuild/freebsd-x64': 0.24.0 + '@esbuild/linux-arm': 0.24.0 + '@esbuild/linux-arm64': 0.24.0 + '@esbuild/linux-ia32': 0.24.0 + '@esbuild/linux-loong64': 0.24.0 + '@esbuild/linux-mips64el': 0.24.0 + '@esbuild/linux-ppc64': 0.24.0 + '@esbuild/linux-riscv64': 0.24.0 + '@esbuild/linux-s390x': 0.24.0 + '@esbuild/linux-x64': 0.24.0 + '@esbuild/netbsd-x64': 0.24.0 + '@esbuild/openbsd-arm64': 0.24.0 + '@esbuild/openbsd-x64': 0.24.0 + '@esbuild/sunos-x64': 0.24.0 + '@esbuild/win32-arm64': 0.24.0 + '@esbuild/win32-ia32': 0.24.0 + '@esbuild/win32-x64': 0.24.0 dev: true /escalade@3.2.0: @@ -7427,19 +7891,19 @@ packages: eslint-plugin-testing-library: 3.10.2(eslint@7.32.0)(typescript@4.4.2) typescript: 4.4.2 - /eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.30.0): + /eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.31.0): resolution: {integrity: sha512-WdviM1Eu834zsfjHtcGHtGfcu+F30Od3V7I9Fi57uhBEwPkjDcii7/yW8jAT+gOhn4P/vOxxNAXbFAKsrrc15w==} engines: {node: '>= 4'} peerDependencies: eslint-plugin-import: '>=1.4.0' dependencies: - eslint-plugin-import: 2.30.0(@typescript-eslint/parser@8.6.0)(eslint@8.57.0) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.9.0)(eslint@8.57.0) dev: true /eslint-import-resolver-node@0.3.9: resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} dependencies: - debug: 3.2.7(supports-color@6.1.0) + debug: 3.2.7 is-core-module: 2.15.1 resolve: 1.22.8 transitivePeerDependencies: @@ -7473,8 +7937,8 @@ packages: transitivePeerDependencies: - supports-color - /eslint-module-utils@2.11.0(@typescript-eslint/parser@8.6.0)(eslint-import-resolver-node@0.3.9)(eslint@8.57.0): - resolution: {integrity: sha512-gbBE5Hitek/oG6MUVj6sFuzEjA/ClzNflVrLovHi/JgLdC7fiN5gLAY1WIPW1a0V5I999MnsrvVrCOGmmVqDBQ==} + /eslint-module-utils@2.12.0(@typescript-eslint/parser@8.9.0)(eslint-import-resolver-node@0.3.9)(eslint@8.57.0): + resolution: {integrity: sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==} engines: {node: '>=4'} peerDependencies: '@typescript-eslint/parser': '*' @@ -7494,8 +7958,8 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 8.6.0(eslint@8.57.0)(typescript@5.6.2) - debug: 3.2.7(supports-color@6.1.0) + '@typescript-eslint/parser': 8.9.0(eslint@8.57.0)(typescript@5.6.3) + debug: 3.2.7 eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: @@ -7547,27 +8011,27 @@ packages: - eslint-import-resolver-webpack - supports-color - /eslint-plugin-import@2.30.0(@typescript-eslint/parser@8.6.0)(eslint@8.57.0): - resolution: {integrity: sha512-/mHNE9jINJfiD2EKkg1BKyPyUk4zdnT54YgbOgfjSakWT5oyX/qQLVNTkehyfpcMxZXMy1zyonZ2v7hZTX43Yw==} + /eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.9.0)(eslint@8.57.0): + resolution: {integrity: sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==} engines: {node: '>=4'} peerDependencies: '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 peerDependenciesMeta: '@typescript-eslint/parser': optional: true dependencies: '@rtsao/scc': 1.1.0 - '@typescript-eslint/parser': 8.6.0(eslint@8.57.0)(typescript@5.6.2) + '@typescript-eslint/parser': 8.9.0(eslint@8.57.0)(typescript@5.6.3) array-includes: 3.1.8 array.prototype.findlastindex: 1.2.5 array.prototype.flat: 1.3.2 array.prototype.flatmap: 1.3.2 - debug: 3.2.7(supports-color@6.1.0) + debug: 3.2.7 doctrine: 2.1.0 eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.11.0(@typescript-eslint/parser@8.6.0)(eslint-import-resolver-node@0.3.9)(eslint@8.57.0) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.9.0)(eslint-import-resolver-node@0.3.9)(eslint@8.57.0) hasown: 2.0.2 is-core-module: 2.15.1 is-glob: 4.0.3 @@ -7576,6 +8040,7 @@ packages: object.groupby: 1.0.3 object.values: 1.2.0 semver: 6.3.1 + string.prototype.trimend: 1.0.8 tsconfig-paths: 3.15.0 transitivePeerDependencies: - eslint-import-resolver-typescript @@ -7642,18 +8107,18 @@ packages: eslint-config-prettier: 9.1.0(eslint@8.57.0) prettier: 3.3.3 prettier-linter-helpers: 1.0.0 - synckit: 0.9.1 + synckit: 0.9.2 dev: true - /eslint-plugin-react-compiler@0.0.0-experimental-9aef357-20240815(eslint@8.57.0): - resolution: {integrity: sha512-2IgS9nY34TMqSKRC8wBvt3Lm3RGduHqa1prpEKaNkr7Fc1HUnRVIodaV6C6VcuWXt/WgeWo6Avqr5kX3MKTT2w==} + /eslint-plugin-react-compiler@0.0.0-experimental-605e95c-20241015(eslint@8.57.0): + resolution: {integrity: sha512-YefQd/ZGYx5UWRRusUyf8PDmf2MPHrOGj2vZQbhJc9zUoGD3RGEJueTsIl4EZTGXjJOIe/TnuznDAa1laUyMYQ==} engines: {node: ^14.17.0 || ^16.0.0 || >= 18.0.0} peerDependencies: eslint: '>=7' dependencies: - '@babel/core': 7.25.2 - '@babel/parser': 7.25.6 - '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.25.2) + '@babel/core': 7.25.8 + '@babel/parser': 7.25.8 + '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.25.8) eslint: 8.57.0 hermes-parser: 0.20.1 zod: 3.23.8 @@ -7670,11 +8135,11 @@ packages: dependencies: eslint: 7.32.0 - /eslint-plugin-react-hooks@4.6.2(eslint@8.57.0): - resolution: {integrity: sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==} + /eslint-plugin-react-hooks@5.0.0(eslint@8.57.0): + resolution: {integrity: sha512-hIOwI+5hYGpJEc4uPRmz2ulCjAGD/N13Lukkh8cLV0i2IRk/bdZDYjgLVHj+U9Z704kLIdIO6iueGvxNur0sgw==} engines: {node: '>=10'} peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 dependencies: eslint: 8.57.0 dev: true @@ -7705,8 +8170,8 @@ packages: string.prototype.matchall: 4.0.11 string.prototype.repeat: 1.0.0 - /eslint-plugin-react@7.36.1(eslint@8.57.0): - resolution: {integrity: sha512-/qwbqNXZoq+VP30s1d4Nc1C5GTxjJQjk4Jzs4Wq2qzxFM7dSmuG2UkIjg2USMLh3A/aVcUNrK7v0J5U1XEGGwA==} + /eslint-plugin-react@7.37.1(eslint@8.57.0): + resolution: {integrity: sha512-xwTnwDqzbDRA8uJ7BMxPs/EXRB3i8ZfnOIp8BsxEQkT0nHPp+WWceqGgo6rKb9ctNi8GJLDT4Go5HAWELa/WMg==} engines: {node: '>=4'} peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 @@ -7716,7 +8181,7 @@ packages: array.prototype.flatmap: 1.3.2 array.prototype.tosorted: 1.1.4 doctrine: 2.1.0 - es-iterator-helpers: 1.0.19 + es-iterator-helpers: 1.1.0 eslint: 8.57.0 estraverse: 5.3.0 hasown: 2.0.2 @@ -7744,7 +8209,7 @@ packages: - supports-color - typescript - /eslint-plugin-vitest@0.5.4(@typescript-eslint/eslint-plugin@8.6.0)(eslint@8.57.0)(typescript@5.6.2)(vitest@2.1.1): + /eslint-plugin-vitest@0.5.4(@typescript-eslint/eslint-plugin@8.9.0)(eslint@8.57.0)(typescript@5.6.3)(vitest@2.1.3): resolution: {integrity: sha512-um+odCkccAHU53WdKAw39MY61+1x990uXjSPguUCq3VcEHdqJrOb8OTMrbYlY6f9jAKx7x98kLVlIe3RJeJqoQ==} engines: {node: ^18.0.0 || >= 20.0.0} peerDependencies: @@ -7757,10 +8222,10 @@ packages: vitest: optional: true dependencies: - '@typescript-eslint/eslint-plugin': 8.6.0(@typescript-eslint/parser@8.6.0)(eslint@8.57.0)(typescript@5.6.2) - '@typescript-eslint/utils': 7.18.0(eslint@8.57.0)(typescript@5.6.2) + '@typescript-eslint/eslint-plugin': 8.9.0(@typescript-eslint/parser@8.9.0)(eslint@8.57.0)(typescript@5.6.3) + '@typescript-eslint/utils': 7.18.0(eslint@8.57.0)(typescript@5.6.3) eslint: 8.57.0 - vitest: 2.1.1(@vitest/ui@2.1.1)(jsdom@25.0.0) + vitest: 2.1.3(@vitest/ui@2.1.3)(jsdom@25.0.1) transitivePeerDependencies: - supports-color - typescript @@ -7896,7 +8361,7 @@ packages: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.7(supports-color@6.1.0) + debug: 4.3.7 doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.2 @@ -8201,8 +8666,8 @@ packages: dependencies: bser: 2.1.1 - /fdir@6.3.0(picomatch@4.0.2): - resolution: {integrity: sha512-QOnuT+BOtivR77wYvCWHfGt9s4Pz1VIMbD463vegT5MLqNXy8rYFT/lPVEqf/bhYeT6qmqrNHhsX+rWwe3rOCQ==} + /fdir@6.4.0(picomatch@4.0.2): + resolution: {integrity: sha512-3oB133prH1o4j/L5lLW7uOCF1PlD+/It2L0eL/iAqWMB91RBbqTewABqxhj0ibBd90EEmWZq7ntIWzVaWcXTGQ==} peerDependencies: picomatch: ^3 || ^4 peerDependenciesMeta: @@ -8395,8 +8860,8 @@ packages: combined-stream: 1.0.8 mime-types: 2.1.35 - /form-data@4.0.0: - resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} + /form-data@4.0.1: + resolution: {integrity: sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==} engines: {node: '>= 6'} dependencies: asynckit: 0.4.0 @@ -8511,10 +8976,6 @@ packages: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} - /get-func-name@2.0.2: - resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} - dev: true - /get-intrinsic@1.2.4: resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} engines: {node: '>= 0.4'} @@ -8589,7 +9050,7 @@ packages: jackspeak: 3.4.3 minimatch: 9.0.5 minipass: 7.1.2 - package-json-from-dist: 1.0.0 + package-json-from-dist: 1.0.1 path-scurry: 1.11.1 dev: true @@ -8927,7 +9388,7 @@ packages: engines: {node: '>= 14'} dependencies: agent-base: 7.1.1 - debug: 4.3.7(supports-color@6.1.0) + debug: 4.3.7 transitivePeerDependencies: - supports-color dev: true @@ -8971,7 +9432,7 @@ packages: engines: {node: '>= 14'} dependencies: agent-base: 7.1.1 - debug: 4.3.7(supports-color@6.1.0) + debug: 4.3.7 transitivePeerDependencies: - supports-color dev: true @@ -9206,13 +9667,6 @@ packages: /is-buffer@1.1.6: resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} - /is-builtin-module@3.2.1: - resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} - engines: {node: '>=6'} - dependencies: - builtin-modules: 3.3.0 - dev: true - /is-callable@1.2.7: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} @@ -9554,7 +10008,7 @@ packages: engines: {node: '>=10'} dependencies: '@jridgewell/trace-mapping': 0.3.25 - debug: 4.3.7(supports-color@6.1.0) + debug: 4.3.7 istanbul-lib-coverage: 3.2.2 transitivePeerDependencies: - supports-color @@ -9576,6 +10030,17 @@ packages: reflect.getprototypeof: 1.0.6 set-function-name: 2.0.2 + /iterator.prototype@1.1.3: + resolution: {integrity: sha512-FW5iMbeQ6rBGm/oKgzq2aW4KvAGpxPzYES8N4g4xNXUKpL1mclMvOe+76AcLDTvD+Ze+sOpVhgdAQEKF4L9iGQ==} + engines: {node: '>= 0.4'} + dependencies: + define-properties: 1.2.1 + get-intrinsic: 1.2.4 + has-symbols: 1.0.3 + reflect.getprototypeof: 1.0.6 + set-function-name: 2.0.2 + dev: true + /jackspeak@3.4.3: resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} dependencies: @@ -10147,8 +10612,8 @@ packages: - supports-color - utf-8-validate - /jsdom@25.0.0: - resolution: {integrity: sha512-OhoFVT59T7aEq75TVw9xxEfkXgacpqAhQaYgP9y/fDqWQCMB/b1H66RfmPm/MaeaAIU9nDwMOVTlPN51+ao6CQ==} + /jsdom@25.0.1: + resolution: {integrity: sha512-8i7LzZj7BF8uplX+ZyOlIz86V6TAsSs+np6m1kpW9u0JWi4z/1t+FzcK1aek+ybTnAC4KhBL4uXCNT0wcUIeCw==} engines: {node: '>=18'} peerDependencies: canvas: ^2.11.2 @@ -10159,17 +10624,17 @@ packages: cssstyle: 4.1.0 data-urls: 5.0.0 decimal.js: 10.4.3 - form-data: 4.0.0 + form-data: 4.0.1 html-encoding-sniffer: 4.0.0 http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.5 is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.12 - parse5: 7.1.2 + nwsapi: 2.2.13 + parse5: 7.2.0 rrweb-cssom: 0.7.1 saxes: 6.0.0 symbol-tree: 3.2.4 - tough-cookie: 4.1.4 + tough-cookie: 5.0.0 w3c-xmlserializer: 5.0.0 webidl-conversions: 7.0.0 whatwg-encoding: 3.1.1 @@ -10192,6 +10657,12 @@ packages: engines: {node: '>=4'} hasBin: true + /jsesc@3.0.2: + resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} + engines: {node: '>=6'} + hasBin: true + dev: true + /json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} @@ -10439,10 +10910,8 @@ packages: dependencies: js-tokens: 4.0.0 - /loupe@3.1.1: - resolution: {integrity: sha512-edNu/8D5MKVfGVFRhFf8aAxiTM6Wumfz5XsaatSxlD3w4R1d/WEKUTydCdPGbl9K7QG/Ca3GnDV2sIKIpXRQcw==} - dependencies: - get-func-name: 2.0.2 + /loupe@3.1.2: + resolution: {integrity: sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg==} dev: true /lower-case@2.0.2: @@ -10475,8 +10944,8 @@ packages: dependencies: sourcemap-codec: 1.4.8 - /magic-string@0.30.11: - resolution: {integrity: sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==} + /magic-string@0.30.12: + resolution: {integrity: sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==} dependencies: '@jridgewell/sourcemap-codec': 1.5.0 dev: true @@ -10484,8 +10953,8 @@ packages: /magicast@0.3.5: resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==} dependencies: - '@babel/parser': 7.25.6 - '@babel/types': 7.25.6 + '@babel/parser': 7.25.8 + '@babel/types': 7.25.8 source-map-js: 1.2.1 dev: true @@ -10945,6 +11414,10 @@ packages: /nwsapi@2.2.12: resolution: {integrity: sha512-qXDmcVlZV4XRtKFzddidpfVP4oMSGhga+xdMc25mv8kaLUHtgzCDhUxkrN8exkGdTlLNaXj7CV3GtON7zuGZ+w==} + /nwsapi@2.2.13: + resolution: {integrity: sha512-cTGB9ptp9dY9A5VbMSe7fQBcl/tt22Vcqdq8+eN93rblOuE0aCFu4aZ2vMwct/2t+lFnosm8RkQW1I0Omb1UtQ==} + dev: true + /object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} @@ -11168,8 +11641,8 @@ packages: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} - /package-json-from-dist@1.0.0: - resolution: {integrity: sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==} + /package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} dev: true /pako@1.0.11: @@ -11224,8 +11697,8 @@ packages: /parse5@6.0.1: resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} - /parse5@7.1.2: - resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} + /parse5@7.2.0: + resolution: {integrity: sha512-ZkDsAOcxsUMZ4Lz5fVciOehNcJ+Gb8gTzcA4yl3wnc273BAybYWrQ+Ks/OjCjSEpjvQkDSeZbybK9qj2VHHdGA==} dependencies: entities: 4.5.0 dev: true @@ -12566,6 +13039,15 @@ packages: es-errors: 1.3.0 set-function-name: 2.0.2 + /regexp.prototype.flags@1.5.3: + resolution: {integrity: sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-errors: 1.3.0 + set-function-name: 2.0.2 + /regexpp@3.2.0: resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} engines: {node: '>=8'} @@ -12755,19 +13237,19 @@ packages: transitivePeerDependencies: - supports-color - /rollup-plugin-esbuild@6.1.1(esbuild@0.23.1)(rollup@4.22.2): + /rollup-plugin-esbuild@6.1.1(esbuild@0.24.0)(rollup@4.24.0): resolution: {integrity: sha512-CehMY9FAqJD5OUaE/Mi1r5z0kNeYxItmRO2zG4Qnv2qWKF09J2lTy5GUzjJR354ZPrLkCj4fiBN41lo8PzBUhw==} engines: {node: '>=14.18.0'} peerDependencies: esbuild: '>=0.18.0' rollup: ^1.20.0 || ^2.0.0 || ^3.0.0 || ^4.0.0 dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.22.2) - debug: 4.3.7(supports-color@6.1.0) + '@rollup/pluginutils': 5.1.2(rollup@4.24.0) + debug: 4.3.7 es-module-lexer: 1.5.4 - esbuild: 0.23.1 + esbuild: 0.24.0 get-tsconfig: 4.8.1 - rollup: 4.22.2 + rollup: 4.24.0 transitivePeerDependencies: - supports-color dev: true @@ -12832,6 +13314,32 @@ packages: fsevents: 2.3.3 dev: true + /rollup@4.24.0: + resolution: {integrity: sha512-DOmrlGSXNk1DM0ljiQA+i+o0rSLhtii1je5wgk60j49d1jHT5YYttBv1iWOnYSTG+fZZESUOSNiAl89SIet+Cg==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + dependencies: + '@types/estree': 1.0.6 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.24.0 + '@rollup/rollup-android-arm64': 4.24.0 + '@rollup/rollup-darwin-arm64': 4.24.0 + '@rollup/rollup-darwin-x64': 4.24.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.24.0 + '@rollup/rollup-linux-arm-musleabihf': 4.24.0 + '@rollup/rollup-linux-arm64-gnu': 4.24.0 + '@rollup/rollup-linux-arm64-musl': 4.24.0 + '@rollup/rollup-linux-powerpc64le-gnu': 4.24.0 + '@rollup/rollup-linux-riscv64-gnu': 4.24.0 + '@rollup/rollup-linux-s390x-gnu': 4.24.0 + '@rollup/rollup-linux-x64-gnu': 4.24.0 + '@rollup/rollup-linux-x64-musl': 4.24.0 + '@rollup/rollup-win32-arm64-msvc': 4.24.0 + '@rollup/rollup-win32-ia32-msvc': 4.24.0 + '@rollup/rollup-win32-x64-msvc': 4.24.0 + fsevents: 2.3.3 + dev: true + /rrweb-cssom@0.7.1: resolution: {integrity: sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==} dev: true @@ -13200,11 +13708,6 @@ packages: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} - /slash@4.0.0: - resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} - engines: {node: '>=12'} - dev: true - /slice-ansi@4.0.0: resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} engines: {node: '>=10'} @@ -13501,7 +14004,7 @@ packages: gopd: 1.0.1 has-symbols: 1.0.3 internal-slot: 1.0.7 - regexp.prototype.flags: 1.5.2 + regexp.prototype.flags: 1.5.3 set-function-name: 2.0.2 side-channel: 1.0.6 @@ -13690,12 +14193,12 @@ packages: /symbol-tree@3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} - /synckit@0.9.1: - resolution: {integrity: sha512-7gr8p9TQP6RAHusBOSLs46F4564ZrjV8xFmw5zCmgmhGUcw2hxsShhJ6CEiHQMgPDwAQ1fWHPM0ypc4RMAig4A==} + /synckit@0.9.2: + resolution: {integrity: sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==} engines: {node: ^14.18.0 || >=16.0.0} dependencies: '@pkgr/core': 0.1.1 - tslib: 2.7.0 + tslib: 2.8.0 dev: true /table@6.8.2: @@ -13843,15 +14346,15 @@ packages: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} dev: true - /tinyexec@0.3.0: - resolution: {integrity: sha512-tVGE0mVJPGb0chKhqmsoosjsS+qUnJVGJpZgsHYQcGoPlG3B51R3PouqTgEGH2Dc9jjFyOqOpix6ZHNMXp1FZg==} + /tinyexec@0.3.1: + resolution: {integrity: sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ==} dev: true - /tinyglobby@0.2.6: - resolution: {integrity: sha512-NbBoFBpqfcgd1tCiO8Lkfdk+xrA7mlLR9zgvZcZWQQwU63XAfUePyd6wZBaU93Hqw347lHnwFzttAkemHzzz4g==} + /tinyglobby@0.2.9: + resolution: {integrity: sha512-8or1+BGEdk1Zkkw2ii16qSS7uVrQJPre5A9o/XkWPATkk23FZh/15BKFxPnlTy6vkljZxLqYCzzBMj30ZrSvjw==} engines: {node: '>=12.0.0'} dependencies: - fdir: 6.3.0(picomatch@4.0.2) + fdir: 6.4.0(picomatch@4.0.2) picomatch: 4.0.2 dev: true @@ -13870,6 +14373,17 @@ packages: engines: {node: '>=14.0.0'} dev: true + /tldts-core@6.1.52: + resolution: {integrity: sha512-j4OxQI5rc1Ve/4m/9o2WhWSC4jGc4uVbCINdOEJRAraCi0YqTqgMcxUx7DbmuP0G3PCixoof/RZB0Q5Kh9tagw==} + dev: true + + /tldts@6.1.52: + resolution: {integrity: sha512-fgrDJXDjbAverY6XnIt0lNfv8A0cf7maTEaZxNykLGsLG7XP+5xhjBTrt/ieAsFjAlZ+G5nmXomLcZDkxXnDzw==} + hasBin: true + dependencies: + tldts-core: 6.1.52 + dev: true + /tmpl@1.0.5: resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} @@ -13926,6 +14440,13 @@ packages: universalify: 0.2.0 url-parse: 1.5.10 + /tough-cookie@5.0.0: + resolution: {integrity: sha512-FRKsF7cz96xIIeMZ82ehjC3xW2E+O2+v11udrDYewUbszngYhsGa8z6YUMMzO9QJZzzyd0nGGXnML/TReX6W8Q==} + engines: {node: '>=16'} + dependencies: + tldts: 6.1.52 + dev: true + /tr46@2.1.0: resolution: {integrity: sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==} engines: {node: '>=8'} @@ -13942,13 +14463,13 @@ packages: /tryer@1.0.1: resolution: {integrity: sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==} - /ts-api-utils@1.3.0(typescript@5.6.2): + /ts-api-utils@1.3.0(typescript@5.6.3): resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} engines: {node: '>=16'} peerDependencies: typescript: '>=4.2.0' dependencies: - typescript: 5.6.2 + typescript: 5.6.3 dev: true /ts-expect@1.3.0: @@ -13980,6 +14501,10 @@ packages: /tslib@2.7.0: resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==} + /tslib@2.8.0: + resolution: {integrity: sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==} + dev: true + /tsutils@3.21.0(typescript@4.4.2): resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} @@ -14097,6 +14622,12 @@ packages: hasBin: true dev: true + /typescript@5.6.3: + resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==} + engines: {node: '>=14.17'} + hasBin: true + dev: true + /uarray@1.0.0: resolution: {integrity: sha512-LHmiAd5QuAv7pU2vbh+Zq9YOnqVK0H764p2Ozinpfy9ka58OID4IsGLiXsitqH7n0NAIDxvax1A/kDXpii/Ckg==} dev: false @@ -14219,6 +14750,17 @@ packages: escalade: 3.2.0 picocolors: 1.1.0 + /update-browserslist-db@1.1.1(browserslist@4.24.0): + resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + dependencies: + browserslist: 4.24.0 + escalade: 3.2.0 + picocolors: 1.1.0 + dev: true + /uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: @@ -14409,15 +14951,15 @@ packages: /vendors@1.0.4: resolution: {integrity: sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==} - /vite-node@2.1.1: - resolution: {integrity: sha512-N/mGckI1suG/5wQI35XeR9rsMsPqKXzq1CdUndzVstBj/HvyxxGctwnK6WX43NGt5L3Z5tcRf83g4TITKJhPrA==} + /vite-node@2.1.3: + resolution: {integrity: sha512-I1JadzO+xYX887S39Do+paRePCKoiDrWRRjp9kkG5he0t7RXNvPAJPCQSJqbGN4uCrFFeS3Kj3sLqY8NMYBEdA==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true dependencies: cac: 6.7.14 - debug: 4.3.7(supports-color@6.1.0) + debug: 4.3.7 pathe: 1.1.2 - vite: 5.4.7 + vite: 5.4.9 transitivePeerDependencies: - '@types/node' - less @@ -14492,15 +15034,53 @@ packages: fsevents: 2.3.3 dev: true - /vitest@2.1.1(@vitest/ui@2.1.1)(jsdom@25.0.0): - resolution: {integrity: sha512-97We7/VC0e9X5zBVkvt7SGQMGrRtn3KtySFQG5fpaMlS+l62eeXRQO633AYhSTC3z7IMebnPPNjGXVGNRFlxBA==} + /vite@5.4.9: + resolution: {integrity: sha512-20OVpJHh0PAM0oSOELa5GaZNWeDjcAvQjGXy2Uyr+Tp+/D2/Hdz6NLgpJLsarPTA2QJ6v8mX2P1ZfbsSKvdMkg==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || >=20.0.0 + less: '*' + lightningcss: ^1.21.0 + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + dependencies: + esbuild: 0.21.5 + postcss: 8.4.47 + rollup: 4.24.0 + optionalDependencies: + fsevents: 2.3.3 + dev: true + + /vitest@2.1.3(@vitest/ui@2.1.3)(jsdom@25.0.1): + resolution: {integrity: sha512-Zrxbg/WiIvUP2uEzelDNTXmEMJXuzJ1kCpbDvaKByFA9MNeO95V+7r/3ti0qzJzrxdyuUw5VduN7k+D3VmVOSA==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@types/node': ^18.0.0 || >=20.0.0 - '@vitest/browser': 2.1.1 - '@vitest/ui': 2.1.1 + '@vitest/browser': 2.1.3 + '@vitest/ui': 2.1.3 happy-dom: '*' jsdom: '*' peerDependenciesMeta: @@ -14517,26 +15097,26 @@ packages: jsdom: optional: true dependencies: - '@vitest/expect': 2.1.1 - '@vitest/mocker': 2.1.1(@vitest/spy@2.1.1)(vite@5.4.7) - '@vitest/pretty-format': 2.1.1 - '@vitest/runner': 2.1.1 - '@vitest/snapshot': 2.1.1 - '@vitest/spy': 2.1.1 - '@vitest/ui': 2.1.1(vitest@2.1.1) - '@vitest/utils': 2.1.1 + '@vitest/expect': 2.1.3 + '@vitest/mocker': 2.1.3(@vitest/spy@2.1.3)(vite@5.4.9) + '@vitest/pretty-format': 2.1.3 + '@vitest/runner': 2.1.3 + '@vitest/snapshot': 2.1.3 + '@vitest/spy': 2.1.3 + '@vitest/ui': 2.1.3(vitest@2.1.3) + '@vitest/utils': 2.1.3 chai: 5.1.1 - debug: 4.3.7(supports-color@6.1.0) - jsdom: 25.0.0 - magic-string: 0.30.11 + debug: 4.3.7 + jsdom: 25.0.1 + magic-string: 0.30.12 pathe: 1.1.2 std-env: 3.7.0 tinybench: 2.9.0 - tinyexec: 0.3.0 + tinyexec: 0.3.1 tinypool: 1.0.1 tinyrainbow: 1.2.0 - vite: 5.4.7 - vite-node: 2.1.1 + vite: 5.4.9 + vite-node: 2.1.3 why-is-node-running: 2.3.0 transitivePeerDependencies: - less diff --git a/src/react.ts b/src/react.ts index f3de4e81..55bfd819 100644 --- a/src/react.ts +++ b/src/react.ts @@ -23,6 +23,8 @@ const useAffectedDebugValue = ( useEffect(() => { pathList.current = affectedToPathList(state, affected, true) }) + // TODO consider if we can remove this eslint rule exception + // eslint-disable-next-line react-compiler/react-compiler useDebugValue(pathList.current) } const condUseAffectedDebugValue = useAffectedDebugValue diff --git a/tests/basic.test.tsx b/tests/basic.test.tsx index dd2ce18b..cf314e43 100644 --- a/tests/basic.test.tsx +++ b/tests/basic.test.tsx @@ -3,6 +3,15 @@ import { fireEvent, render, waitFor } from '@testing-library/react' import { expect, it, vi } from 'vitest' import { proxy, snapshot, useSnapshot } from 'valtio' +const useCommitCount = () => { + const commitCountRef = useRef(1) + useEffect(() => { + commitCountRef.current += 1 + }) + // eslint-disable-next-line react-compiler/react-compiler + return commitCountRef.current +} + it('simple counter', async () => { const obj = proxy({ count: 0 }) @@ -34,14 +43,10 @@ it('no extra re-renders (commits)', async () => { const Counter = () => { const snap = useSnapshot(obj) - const commitsRef = useRef(1) - useEffect(() => { - commitsRef.current += 1 - }) return ( <>
- count: {snap.count} ({commitsRef.current}) + count: {snap.count} ({useCommitCount()})
@@ -50,14 +55,10 @@ it('no extra re-renders (commits)', async () => { const Counter2 = () => { const snap = useSnapshot(obj) - const commitsRef = useRef(1) - useEffect(() => { - commitsRef.current += 1 - }) return ( <>
- count2: {snap.count2} ({commitsRef.current}) + count2: {snap.count2} ({useCommitCount()})
@@ -402,14 +403,10 @@ it('counter with sync option', async () => { const Counter = () => { const snap = useSnapshot(obj, { sync: true }) - const commitsRef = useRef(1) - useEffect(() => { - commitsRef.current += 1 - }) return ( <>
- count: {snap.count} ({commitsRef.current}) + count: {snap.count} ({useCommitCount()})
diff --git a/tests/class.test.tsx b/tests/class.test.tsx index 40779530..b1846e5c 100644 --- a/tests/class.test.tsx +++ b/tests/class.test.tsx @@ -3,6 +3,15 @@ import { fireEvent, render, waitFor } from '@testing-library/react' import { it } from 'vitest' import { proxy, useSnapshot } from 'valtio' +const useCommitCount = () => { + const commitCountRef = useRef(0) + useEffect(() => { + commitCountRef.current += 1 + }) + // eslint-disable-next-line react-compiler/react-compiler + return commitCountRef.current +} + it('simple class without methods', async () => { class CountClass { public count: number @@ -49,14 +58,10 @@ it('no extra re-renders with class', async () => { const Counter = () => { const snap = useSnapshot(obj) - const commitsRef = useRef(0) - useEffect(() => { - commitsRef.current += 1 - }) return ( <>
- count: {snap.count} ({commitsRef.current}) + count: {snap.count} ({useCommitCount()})
@@ -65,14 +70,10 @@ it('no extra re-renders with class', async () => { const Counter2 = () => { const snap = useSnapshot(obj) - const commitsRef = useRef(0) - useEffect(() => { - commitsRef.current += 1 - }) return ( <>
- count2: {snap.count2} ({commitsRef.current}) + count2: {snap.count2} ({useCommitCount()})
@@ -158,14 +159,10 @@ it('class with a method', async () => { const Counter = () => { const snap = useSnapshot(obj) - const commitsRef = useRef(0) - useEffect(() => { - commitsRef.current += 1 - }) return ( <>
- doubled: {snap.doubled()} ({commitsRef.current}) + doubled: {snap.doubled()} ({useCommitCount()})
@@ -174,13 +171,9 @@ it('class with a method', async () => { const Counter2 = () => { const snap = useSnapshot(obj) - const commitsRef = useRef(0) - useEffect(() => { - commitsRef.current += 1 - }) return (
- count: {snap.count} ({commitsRef.current}) + count: {snap.count} ({useCommitCount()})
) } @@ -226,14 +219,10 @@ it('inherited class with a method', async () => { const Counter = () => { const snap = useSnapshot(obj) - const commitsRef = useRef(0) - useEffect(() => { - commitsRef.current += 1 - }) return ( <>
- doubled: {snap.doubled()} ({commitsRef.current}) + doubled: {snap.doubled()} ({useCommitCount()})
@@ -242,14 +231,10 @@ it('inherited class with a method', async () => { const Counter2 = () => { const snap = useSnapshot(obj) - const commitsRef = useRef(0) - useEffect(() => { - commitsRef.current += 1 - }) return ( <>
- count2: {snap.count2} ({commitsRef.current}) + count2: {snap.count2} ({useCommitCount()})
@@ -301,14 +286,10 @@ it('no extra re-renders with getters', async () => { const Counter = () => { const snap = useSnapshot(obj) - const commitsRef = useRef(0) - useEffect(() => { - commitsRef.current += 1 - }) return ( <>
- count: {snap.count1} ({commitsRef.current}) + count: {snap.count1} ({useCommitCount()})
@@ -317,14 +298,10 @@ it('no extra re-renders with getters', async () => { const Counter2 = () => { const snap = useSnapshot(obj) - const commitsRef = useRef(0) - useEffect(() => { - commitsRef.current += 1 - }) return ( <>
- sum: {snap.sum} ({commitsRef.current}) + sum: {snap.sum} ({useCommitCount()})
diff --git a/tests/ref.test.tsx b/tests/ref.test.tsx index 72ee5f70..363688c2 100644 --- a/tests/ref.test.tsx +++ b/tests/ref.test.tsx @@ -3,19 +3,24 @@ import { fireEvent, render } from '@testing-library/react' import { expect, it, vi } from 'vitest' import { proxy, ref, snapshot, subscribe, useSnapshot } from 'valtio' +const useCommitCount = () => { + const commitCountRef = useRef(1) + useEffect(() => { + commitCountRef.current += 1 + }) + // eslint-disable-next-line react-compiler/react-compiler + return commitCountRef.current +} + it('should trigger re-render setting objects with ref wrapper', async () => { const obj = proxy({ nested: ref({ count: 0 }) }) const Counter = () => { const snap = useSnapshot(obj) - const commitsRef = useRef(1) - useEffect(() => { - commitsRef.current += 1 - }) return ( <>
- count: {snap.nested.count} ({commitsRef.current}) + count: {snap.nested.count} ({useCommitCount()})
From 552992ca8f8d52554962c9a86f7afabef8b0173a Mon Sep 17 00:00:00 2001 From: daishi Date: Wed, 16 Oct 2024 23:11:45 +0900 Subject: [PATCH 4/4] 2.1.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index ebc75e79..12fa6c70 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "description": "🧙 Valtio makes proxy-state simple for React and Vanilla", "private": true, "type": "commonjs", - "version": "2.0.0", + "version": "2.1.0", "main": "./index.js", "types": "./index.d.ts", "typesVersions": {