diff --git a/packages/logic/package.json b/packages/logic/package.json index a14d11f..c338457 100644 --- a/packages/logic/package.json +++ b/packages/logic/package.json @@ -18,12 +18,9 @@ "test": "vitest run --config vitest.config.ts" }, "dependencies": { - "js-sha512": "^0.8.0" + "js-sha512": "^0.9.0" }, "devDependencies": { - "chai": "^4.3.10", - "chai-bytes": "^0.1.2", - "lodash-es": "^4.17.21", - "vitest": "^2.0.5" + "vitest": "^4.0.16" } } diff --git a/packages/logic/src/util/BytesLike.ts b/packages/logic/src/util/BytesLike.ts index e435357..bbcb31d 100644 --- a/packages/logic/src/util/BytesLike.ts +++ b/packages/logic/src/util/BytesLike.ts @@ -1,2 +1,2 @@ -export type Bytes = ArrayBuffer | DataView | Uint8Array; +export type Bytes = ArrayBuffer | DataView | Uint8Array; export type BytesLike = Bytes | string; diff --git a/packages/logic/src/util/LiteHashDRBG.ts b/packages/logic/src/util/LiteHashDRBG.ts index ca8bb03..096f5b3 100644 --- a/packages/logic/src/util/LiteHashDRBG.ts +++ b/packages/logic/src/util/LiteHashDRBG.ts @@ -121,7 +121,7 @@ export class LiteHashDRBG implements RNG { return maxInt; } - public nextBytes(bytes: number, baseBytes?: number): Uint8Array { + public nextBytes(bytes: number, baseBytes?: number): Uint8Array { bytes |= 0; if (bytes <= 0) { throw new Error(`${bytes} <= 0`); @@ -171,7 +171,7 @@ export class LiteHashDRBG implements RNG { return result; } - public nextBits(bits: number, baseBytes?: number): Uint8Array { + public nextBits(bits: number, baseBytes?: number): Uint8Array { bits |= 0; const bytes = (bits + 7) >> 3; const headBits = bits & 0x7; diff --git a/packages/logic/src/util/RNG.ts b/packages/logic/src/util/RNG.ts index 613be4f..f8e2d20 100644 --- a/packages/logic/src/util/RNG.ts +++ b/packages/logic/src/util/RNG.ts @@ -5,8 +5,8 @@ export interface RNG { */ getMaxInt(): number; - nextBytes(bytes: number): Uint8Array; - nextBits(bits: number): Uint8Array; + nextBytes(bytes: number): Uint8Array; + nextBits(bits: number): Uint8Array; nextInt(max?: number): number; nextFloat1(): number; diff --git a/packages/logic/src/util/convertBytesLikeToUint8Array.ts b/packages/logic/src/util/convertBytesLikeToUint8Array.ts index 5caf8fc..2cbca28 100644 --- a/packages/logic/src/util/convertBytesLikeToUint8Array.ts +++ b/packages/logic/src/util/convertBytesLikeToUint8Array.ts @@ -1,17 +1,31 @@ import type { BytesLike } from './BytesLike.js'; -export function convertBytesLikeToUint8Array(data: BytesLike, encodeUTF8 = true): Uint8Array { +export function convertBytesLikeToUint8Array( + data: BytesLike, + encodeUTF8 = true +): Uint8Array { if (data instanceof Uint8Array) { - return data; + if ( + data.buffer instanceof ArrayBuffer + && data.byteOffset === 0 + && data.byteLength === data.buffer.byteLength + ) { + return data; + } + return new Uint8Array(data) as Uint8Array; } if (data instanceof ArrayBuffer) { return new Uint8Array(data); } + if (data instanceof DataView) { + const view = new Uint8Array(data.buffer, data.byteOffset, data.byteLength); + return new Uint8Array(view) as Uint8Array; + } if (typeof (data) === 'string') { if (encodeUTF8) { - return (new TextEncoder()).encode(data); + return (new TextEncoder()).encode(data) as Uint8Array; } - return new Uint8Array(data.split('').map((s) => s.codePointAt(0) as number)); + return new Uint8Array(data.split('').map((s) => s.codePointAt(0) as number)) as Uint8Array; } - return new Uint8Array(data.buffer); + throw new Error('Unsupported BytesLike'); } diff --git a/packages/logic/test/rng.test.ts b/packages/logic/test/rng.test.ts index 4778459..032876c 100644 --- a/packages/logic/test/rng.test.ts +++ b/packages/logic/test/rng.test.ts @@ -1,17 +1,23 @@ -import chai, { assert } from 'chai'; -import chaiBytes from 'chai-bytes'; +import { describe, expect, it } from 'vitest'; import { bufferByteSize, LiteHashDRBG } from '../src/util/LiteHashDRBG.js'; import { RandUtil } from '../src/util/RandUtil.js'; import { convertBytesLikeToArrayBuffer } from '../src/util/convertBytesLikeToArrayBuffer.js'; import { convertBytesLikeToUint8Array as toBytes } from '../src/util/convertBytesLikeToUint8Array.js'; -import _ from 'lodash-es'; -chai.use(chaiBytes); - -type Bytes = ArrayBuffer | DataView | Uint8Array; +type Bytes = ArrayBuffer | DataView | Uint8Array; type MaybeBytes = Bytes | string; -function fillBlock(body: MaybeBytes, filler: MaybeBytes = '\0', length = bufferByteSize): Uint8Array { +const range = (count: number): number[] => Array.from({ length: count }, (_, idx) => idx); + +const expectBytes = (actual: Uint8Array, expected: Uint8Array): void => { + expect(Array.from(actual)).toEqual(Array.from(expected)); +}; + +function fillBlock( + body: MaybeBytes, + filler: MaybeBytes = '\0', + length = bufferByteSize +): Uint8Array { const u8Body = toBytes(body); const u8Filler = toBytes(filler, false); @@ -19,7 +25,7 @@ function fillBlock(body: MaybeBytes, filler: MaybeBytes = '\0', length = bufferB throw new Error('filler must have length'); } - const buffer = new Uint8Array(length); + const buffer = new Uint8Array(length); buffer.set(u8Body, 0); let bufferIdx = u8Body.byteLength; @@ -36,7 +42,6 @@ function fillBlock(body: MaybeBytes, filler: MaybeBytes = '\0', length = bufferB return buffer; } - class DummyBlockRNG extends LiteHashDRBG { private repeatBlockCnt: number; private repeatBlock: ArrayBuffer[]; @@ -48,7 +53,7 @@ class DummyBlockRNG extends LiteHashDRBG { for (const rawBlock of repeatBlock) { const block = convertBytesLikeToArrayBuffer(rawBlock); if (block.byteLength !== bufferByteSize) { - throw new Error; + throw new Error('invalid block size'); } this.repeatBlock.push(block); } @@ -70,25 +75,26 @@ class DummyBlockRNG extends LiteHashDRBG { const fixedKey = 'HelloWorld'; - describe('RNGtestDummy', () => { const rng = new DummyBlockRNG([ fillBlock('', "\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xaa\xbb\xcc\xdd\xee\xff") ]); it('BasicConvert', () => { - assert.equal(toBytes("\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xaa\xbb\xcc\xdd\xee\xff", false).length, 16); + expect(toBytes("\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xaa\xbb\xcc\xdd\xee\xff", false).length) + .toBe(16); }); + it('SimpleByte', () => { - assert.equalBytes(toBytes("\x00", false), rng.nextBytes(1), 'b1'); - assert.equalBytes(toBytes("\x11\x22", false), rng.nextBytes(2), 'b2'); - assert.equalBytes(toBytes("\x33\x44\x55", false), rng.nextBytes(3), 'b3'); - assert.equalBytes(toBytes("\x66\x77\x88\x99", false), rng.nextBytes(4), 'b4'); + expectBytes(toBytes("\x00", false), rng.nextBytes(1)); + expectBytes(toBytes("\x11\x22", false), rng.nextBytes(2)); + expectBytes(toBytes("\x33\x44\x55", false), rng.nextBytes(3)); + expectBytes(toBytes("\x66\x77\x88\x99", false), rng.nextBytes(4)); }); it('OverflowBlock', () => { - for (const idx in _.range(16)) { - assert.equalBytes( + for (let idx = 0; idx < 16; idx += 1) { + expectBytes( toBytes("\xaa\xbb\xcc\xdd\xee\xff\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99", false), rng.nextBytes(16) ); @@ -96,41 +102,41 @@ describe('RNGtestDummy', () => { }); it('MultiBlock', () => { - assert.equalBytes( + expectBytes( fillBlock('', "\xaa\xbb\xcc\xdd\xee\xff\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99", bufferByteSize * 2), rng.nextBytes(bufferByteSize * 2) ); }); it('bitTest', () => { - assert.equalBytes(toBytes("\x00", false), rng.nextBits(1)); //aa - assert.equalBytes(toBytes("\x01", false), rng.nextBits(1)); //bb - assert.equalBytes(toBytes("\xcc", false), rng.nextBits(8)); //cc - assert.equalBytes(toBytes("\xdd\x02", false), rng.nextBits(10)); //ddee - assert.equalBytes(toBytes("\x7f", false), rng.nextBits(7)); //ff - assert.equalBytes(toBytes("\x00\x11\x22\x33\x44\x55\x06", false), rng.nextBits(53)); + expectBytes(toBytes("\x00", false), rng.nextBits(1)); //aa + expectBytes(toBytes("\x01", false), rng.nextBits(1)); //bb + expectBytes(toBytes("\xcc", false), rng.nextBits(8)); //cc + expectBytes(toBytes("\xdd\x02", false), rng.nextBits(10)); //ddee + expectBytes(toBytes("\x7f", false), rng.nextBits(7)); //ff + expectBytes(toBytes("\x00\x11\x22\x33\x44\x55\x06", false), rng.nextBits(53)); }); it('int', () => { - assert.equal(0x77, rng.nextInt(0xff)); - assert.equal(0x9988, rng.nextInt((1 << 16) - 1)); - assert.equal(0xddccbbaa, rng.nextInt(0xffffffff)); - assert.equal(0x0433221100ffee, rng.nextInt()); - assert.equal(0x05, rng.nextInt(0x0f)); //55 - assert.equal(0x06, rng.nextInt(0x12)); //66 - assert.equal(0x08, rng.nextInt(99)); //77(119 -> 7bit) -> 88(136 -> 8bit -> 8) - assert.equal(0x99, rng.nextInt(0x99)); //99 - assert.equal(0xaa, rng.nextInt(0xaa)); //aa (fit Max) + expect(rng.nextInt(0xff)).toBe(0x77); + expect(rng.nextInt((1 << 16) - 1)).toBe(0x9988); + expect(rng.nextInt(0xffffffff)).toBe(0xddccbbaa); + expect(rng.nextInt()).toBe(0x0433221100ffee); + expect(rng.nextInt(0x0f)).toBe(0x05); //55 + expect(rng.nextInt(0x12)).toBe(0x06); //66 + expect(rng.nextInt(99)).toBe(0x08); //77(119 -> 7bit) -> 88(136 -> 8bit -> 8) + expect(rng.nextInt(0x99)).toBe(0x99); //99 + expect(rng.nextInt(0xaa)).toBe(0xaa); //aa (fit Max) }); it('float', () => { const floatMax = 2 ** 53; const fa = rng.nextFloat1(); - assert.equal(0x1100ffeeddccbb / floatMax, fa); - assert.isTrue(0.5313720384 > fa); - assert.isTrue(0.5313720383 < fa); + expect(fa).toBe(0x1100ffeeddccbb / floatMax); + expect(0.5313720384 > fa).toBe(true); + expect(0.5313720383 < fa).toBe(true); const fb = rng.nextFloat1(); - assert.equal(0x08776655443322 / floatMax, fb); + expect(fb).toBe(0x08776655443322 / floatMax); }); }); @@ -147,8 +153,7 @@ describe('RandUtilDummy', () => { * 2, [7,0,1,2,3,4,6,5] * 1, [7,0,1,2,3,4,5,6] */ - assert.deepEqual( - randUtil.shuffle(Array.from(_.range(8))), + expect(randUtil.shuffle(range(8))).toEqual( [7, 0, 1, 2, 3, 4, 5, 6] ); @@ -163,8 +168,7 @@ describe('RandUtilDummy', () => { * 1, [0,8,1,2,3,4,5,6,7,9] * 0, [0,8,1,2,3,4,5,6,7,9] */ - assert.deepEqual( - randUtil.shuffle(Array.from(_.range(10))), + expect(randUtil.shuffle(range(10))).toEqual( [0, 8, 1, 2, 3, 4, 5, 6, 7, 9] ); }); @@ -172,22 +176,21 @@ describe('RandUtilDummy', () => { const rng = new DummyBlockRNG([fillBlock('', '\x17\x16\x15\x14\x13\x12\x11\x10')]); const randUtil = new RandUtil(rng); it('choice', () => { - - //0x17(7), 0x16(6) - assert.equal(randUtil.choice([0, 1, 2, 3, 4, 5]), 5); + expect(randUtil.choice([0, 1, 2, 3, 4, 5])).toBe(5); //0x15(5), Set 순서 유지 - assert.equal(randUtil.choice(new Set([5, 3, 1, 2, 8, 0])), 8); + expect(randUtil.choice(new Set([5, 3, 1, 2, 8, 0]))).toBe(8); //0x14(4), 정렬 순서상 숫자(소-대) > 문자열(삽입순) > 심볼 순서 - assert.equal(randUtil.choice({ c: 'c', a: 'a', b: 'b', 4: 'x', 2: 't', '3': 'q' }), 'c'); + expect(randUtil.choice({ c: 'c', a: 'a', b: 'b', 4: 'x', 2: 't', '3': 'q' })) + .toBe('c'); }); it('choiceUsingWeight', () => { //0.6275740099377194 * 38.1 = 23.91 - assert.equal(randUtil.choiceUsingWeight({ + expect(randUtil.choiceUsingWeight({ a: 0.1, b: 10, tt: 2, @@ -195,50 +198,50 @@ describe('RandUtilDummy', () => { c: 20, d: 0, e: 6 - }), 'c'); + })).toBe('c'); //0.658946544056166 - assert.equal(randUtil.choiceUsingWeightPair([ + expect(randUtil.choiceUsingWeightPair([ ['xx', 10], - ]), 'xx'); + ])).toBe('xx'); //0.6903152783785083 * 27.3 = 18.84560709973328 - assert.equal(randUtil.choiceUsingWeightPair([ + expect(randUtil.choiceUsingWeightPair([ ['e', 10], ['d', 4], ['c', 0.1], ['baba', 0.2], ['q', 9], ['xt', 4] - ]), 'q'); + ])).toBe('q'); }); }); describe('RNGexpectedError', () => { const rng = new LiteHashDRBG(fixedKey); it('nextBits0', () => { - assert.throw(() => rng.nextBits(0)); + expect(() => rng.nextBits(0)).toThrow(); }); it('nextBits-1', () => { - assert.throw(() => rng.nextBits(-1)); + expect(() => rng.nextBits(-1)).toThrow(); }); it('nextBytes0', () => { - assert.throw(() => rng.nextBytes(0)); + expect(() => rng.nextBytes(0)).toThrow(); }); it('nextBytes-1', () => { - assert.throw(() => rng.nextBytes(-1)); + expect(() => rng.nextBytes(-1)).toThrow(); }); const randUtil = new RandUtil(rng); it('utilEmptyChoice', () => { - assert.throw(() => randUtil.choice([])); + expect(() => randUtil.choice([])).toThrow(); }); it('utilEmptyChoiceUsingWeight', () => { - assert.throw(() => randUtil.choiceUsingWeight({})); + expect(() => randUtil.choiceUsingWeight({})).toThrow(); }); it('utilEmptyChoiceUsingWeightPair', () => { - assert.throw(() => randUtil.choiceUsingWeightPair([])); + expect(() => randUtil.choiceUsingWeightPair([])).toThrow(); }); }); @@ -275,11 +278,11 @@ describe('RNGAcceptable', () => { it('RNGLong', () => { const longKey = fixedKey; - for (const _a of _.range(8)) { + for (let idx = 0; idx < 8; idx += 1) { longKey.concat(longKey); } const rngLong = new LiteHashDRBG(longKey); - for (const _a of _.range(10)) { + for (let idx = 0; idx < 10; idx += 1) { rngLong.nextBytes(16); } }); @@ -314,21 +317,21 @@ describe('RNG', () => { const rng = new LiteHashDRBG(fixedKey); let offset = 0; - assert.equalBytes(rng.nextBytes(10), testVector.slice(offset, offset + 10), '1'); + expectBytes(rng.nextBytes(10), testVector.slice(offset, offset + 10)); offset += 10; - assert.equalBytes(rng.nextBytes(32), testVector.slice(offset, offset + 32), '2'); + expectBytes(rng.nextBytes(32), testVector.slice(offset, offset + 32)); offset += 32; - assert.equalBytes(rng.nextBytes(1), testVector.slice(offset, offset + 1), '3'); + expectBytes(rng.nextBytes(1), testVector.slice(offset, offset + 1)); offset += 1; - assert.equalBytes(rng.nextBytes(64), testVector.slice(offset, offset + 64), '4'); + expectBytes(rng.nextBytes(64), testVector.slice(offset, offset + 64)); offset += 64; - assert.equalBytes(rng.nextBytes(5), testVector.slice(offset, offset + 5), '5'); + expectBytes(rng.nextBytes(5), testVector.slice(offset, offset + 5)); offset += 5; const lastA = rng.nextBytes(16, 18); const lastB = new Uint8Array(18); lastB.set(testVector.slice(offset, offset + 16)); - assert.equalBytes(lastA, lastB); + expectBytes(lastA, lastB); }); it('bits', () => { @@ -344,11 +347,11 @@ describe('RNG', () => { const B = new Uint8Array(testVector.slice(offset, offset + bytes)); offset += bytes; - if (bits % 8 != 0) { + if (bits % 8 !== 0) { const bitMask = 0xff >> (8 - (bits % 8)); B[bytes - 1] &= bitMask; } - assert.equalBytes(A, B); + expectBytes(A, B); } }); @@ -362,8 +365,8 @@ describe('RNG', () => { new Uint8Array(testVector.slice(bufferByteSize * 4, bufferByteSize * 5)), ]); - for (const idx of _.range(18)) { - assert.equal(rng.nextFloat1(), rng2.nextFloat1(), `float${idx}`); + for (const idx of range(18)) { + expect(rng.nextFloat1()).toBe(rng2.nextFloat1()); } }); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index cf2e406..c3fd62d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -30,161 +30,170 @@ importers: packages/logic: dependencies: js-sha512: - specifier: ^0.8.0 - version: 0.8.0 + specifier: ^0.9.0 + version: 0.9.0 devDependencies: - chai: - specifier: ^4.3.10 - version: 4.5.0 - chai-bytes: - specifier: ^0.1.2 - version: 0.1.2(chai@4.5.0) - lodash-es: - specifier: ^4.17.21 - version: 4.17.22 vitest: - specifier: ^2.0.5 - version: 2.1.9(@types/node@20.19.27) + specifier: ^4.0.16 + version: 4.0.16(@types/node@20.19.27) tools/build-scripts: {} packages: - '@esbuild/aix-ppc64@0.21.5': - resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} - engines: {node: '>=12'} + '@esbuild/aix-ppc64@0.27.2': + resolution: {integrity: sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==} + engines: {node: '>=18'} cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.21.5': - resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} - engines: {node: '>=12'} + '@esbuild/android-arm64@0.27.2': + resolution: {integrity: sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==} + engines: {node: '>=18'} cpu: [arm64] os: [android] - '@esbuild/android-arm@0.21.5': - resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} - engines: {node: '>=12'} + '@esbuild/android-arm@0.27.2': + resolution: {integrity: sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==} + engines: {node: '>=18'} cpu: [arm] os: [android] - '@esbuild/android-x64@0.21.5': - resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} - engines: {node: '>=12'} + '@esbuild/android-x64@0.27.2': + resolution: {integrity: sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==} + engines: {node: '>=18'} cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.21.5': - resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} - engines: {node: '>=12'} + '@esbuild/darwin-arm64@0.27.2': + resolution: {integrity: sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==} + engines: {node: '>=18'} cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.21.5': - resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} - engines: {node: '>=12'} + '@esbuild/darwin-x64@0.27.2': + resolution: {integrity: sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==} + engines: {node: '>=18'} cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.21.5': - resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} - engines: {node: '>=12'} + '@esbuild/freebsd-arm64@0.27.2': + resolution: {integrity: sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==} + engines: {node: '>=18'} cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.21.5': - resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} - engines: {node: '>=12'} + '@esbuild/freebsd-x64@0.27.2': + resolution: {integrity: sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==} + engines: {node: '>=18'} cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.21.5': - resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} - engines: {node: '>=12'} + '@esbuild/linux-arm64@0.27.2': + resolution: {integrity: sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==} + engines: {node: '>=18'} cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.21.5': - resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} - engines: {node: '>=12'} + '@esbuild/linux-arm@0.27.2': + resolution: {integrity: sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==} + engines: {node: '>=18'} cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.21.5': - resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} - engines: {node: '>=12'} + '@esbuild/linux-ia32@0.27.2': + resolution: {integrity: sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==} + engines: {node: '>=18'} cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.21.5': - resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} - engines: {node: '>=12'} + '@esbuild/linux-loong64@0.27.2': + resolution: {integrity: sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==} + engines: {node: '>=18'} cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.21.5': - resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} - engines: {node: '>=12'} + '@esbuild/linux-mips64el@0.27.2': + resolution: {integrity: sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==} + engines: {node: '>=18'} cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.21.5': - resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} - engines: {node: '>=12'} + '@esbuild/linux-ppc64@0.27.2': + resolution: {integrity: sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==} + engines: {node: '>=18'} cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.21.5': - resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} - engines: {node: '>=12'} + '@esbuild/linux-riscv64@0.27.2': + resolution: {integrity: sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==} + engines: {node: '>=18'} cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.21.5': - resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} - engines: {node: '>=12'} + '@esbuild/linux-s390x@0.27.2': + resolution: {integrity: sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==} + engines: {node: '>=18'} cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.21.5': - resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} - engines: {node: '>=12'} + '@esbuild/linux-x64@0.27.2': + resolution: {integrity: sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==} + engines: {node: '>=18'} cpu: [x64] os: [linux] - '@esbuild/netbsd-x64@0.21.5': - resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} - engines: {node: '>=12'} + '@esbuild/netbsd-arm64@0.27.2': + resolution: {integrity: sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.27.2': + resolution: {integrity: sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==} + engines: {node: '>=18'} cpu: [x64] os: [netbsd] - '@esbuild/openbsd-x64@0.21.5': - resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} - engines: {node: '>=12'} + '@esbuild/openbsd-arm64@0.27.2': + resolution: {integrity: sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.27.2': + resolution: {integrity: sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==} + engines: {node: '>=18'} cpu: [x64] os: [openbsd] - '@esbuild/sunos-x64@0.21.5': - resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} - engines: {node: '>=12'} + '@esbuild/openharmony-arm64@0.27.2': + resolution: {integrity: sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + + '@esbuild/sunos-x64@0.27.2': + resolution: {integrity: sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==} + engines: {node: '>=18'} cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.21.5': - resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} - engines: {node: '>=12'} + '@esbuild/win32-arm64@0.27.2': + resolution: {integrity: sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==} + engines: {node: '>=18'} cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.21.5': - resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} - engines: {node: '>=12'} + '@esbuild/win32-ia32@0.27.2': + resolution: {integrity: sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==} + engines: {node: '>=18'} cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.21.5': - resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} - engines: {node: '>=12'} + '@esbuild/win32-x64@0.27.2': + resolution: {integrity: sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==} + engines: {node: '>=18'} cpu: [x64] os: [win32] @@ -301,96 +310,64 @@ packages: cpu: [x64] os: [win32] + '@standard-schema/spec@1.1.0': + resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} + + '@types/chai@5.2.3': + resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} + + '@types/deep-eql@4.0.2': + resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} + '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} '@types/node@20.19.27': resolution: {integrity: sha512-N2clP5pJhB2YnZJ3PIHFk5RkygRX5WO/5f0WC08tp0wd+sv0rsJk3MqWn3CbNmT2J505a5336jaQj4ph1AdMug==} - '@vitest/expect@2.1.9': - resolution: {integrity: sha512-UJCIkTBenHeKT1TTlKMJWy1laZewsRIzYighyYiJKZreqtdxSos/S1t+ktRMQWu2CKqaarrkeszJx1cgC5tGZw==} + '@vitest/expect@4.0.16': + resolution: {integrity: sha512-eshqULT2It7McaJkQGLkPjPjNph+uevROGuIMJdG3V+0BSR2w9u6J9Lwu+E8cK5TETlfou8GRijhafIMhXsimA==} - '@vitest/mocker@2.1.9': - resolution: {integrity: sha512-tVL6uJgoUdi6icpxmdrn5YNo3g3Dxv+IHJBr0GXHaEdTcw3F+cPKnsXFhli6nO+f/6SDKPHEK1UN+k+TQv0Ehg==} + '@vitest/mocker@4.0.16': + resolution: {integrity: sha512-yb6k4AZxJTB+q9ycAvsoxGn+j/po0UaPgajllBgt1PzoMAAmJGYFdDk0uCcRcxb3BrME34I6u8gHZTQlkqSZpg==} peerDependencies: msw: ^2.4.9 - vite: ^5.0.0 + vite: ^6.0.0 || ^7.0.0-0 peerDependenciesMeta: msw: optional: true vite: optional: true - '@vitest/pretty-format@2.1.9': - resolution: {integrity: sha512-KhRIdGV2U9HOUzxfiHmY8IFHTdqtOhIzCpd8WRdJiE7D/HUcZVD0EgQCVjm+Q9gkUXWgBvMmTtZgIG48wq7sOQ==} + '@vitest/pretty-format@4.0.16': + resolution: {integrity: sha512-eNCYNsSty9xJKi/UdVD8Ou16alu7AYiS2fCPRs0b1OdhJiV89buAXQLpTbe+X8V9L6qrs9CqyvU7OaAopJYPsA==} - '@vitest/runner@2.1.9': - resolution: {integrity: sha512-ZXSSqTFIrzduD63btIfEyOmNcBmQvgOVsPNPe0jYtESiXkhd8u2erDLnMxmGrDCwHCCHE7hxwRDCT3pt0esT4g==} + '@vitest/runner@4.0.16': + resolution: {integrity: sha512-VWEDm5Wv9xEo80ctjORcTQRJ539EGPB3Pb9ApvVRAY1U/WkHXmmYISqU5E79uCwcW7xYUV38gwZD+RV755fu3Q==} - '@vitest/snapshot@2.1.9': - resolution: {integrity: sha512-oBO82rEjsxLNJincVhLhaxxZdEtV0EFHMK5Kmx5sJ6H9L183dHECjiefOAdnqpIgT5eZwT04PoggUnW88vOBNQ==} + '@vitest/snapshot@4.0.16': + resolution: {integrity: sha512-sf6NcrYhYBsSYefxnry+DR8n3UV4xWZwWxYbCJUt2YdvtqzSPR7VfGrY0zsv090DAbjFZsi7ZaMi1KnSRyK1XA==} - '@vitest/spy@2.1.9': - resolution: {integrity: sha512-E1B35FwzXXTs9FHNK6bDszs7mtydNi5MIfUWpceJ8Xbfb1gBMscAnwLbEu+B44ed6W3XjL9/ehLPHR1fkf1KLQ==} + '@vitest/spy@4.0.16': + resolution: {integrity: sha512-4jIOWjKP0ZUaEmJm00E0cOBLU+5WE0BpeNr3XN6TEF05ltro6NJqHWxXD0kA8/Zc8Nh23AT8WQxwNG+WeROupw==} - '@vitest/utils@2.1.9': - resolution: {integrity: sha512-v0psaMSkNJ3A2NMrUEHFRzJtDPFn+/VWZ5WxImB21T9fjucJRmS7xCS3ppEnARb9y11OAzaD+P2Ps+b+BGX5iQ==} - - assertion-error@1.1.0: - resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} + '@vitest/utils@4.0.16': + resolution: {integrity: sha512-h8z9yYhV3e1LEfaQ3zdypIrnAg/9hguReGZoS7Gl0aBG5xgA410zBqECqmaF/+RkTggRsfnzc1XaAHA6bmUufA==} assertion-error@2.0.1: resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} engines: {node: '>=12'} - cac@6.7.14: - resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} - engines: {node: '>=8'} - - chai-bytes@0.1.2: - resolution: {integrity: sha512-0ol6oJS0y1ozj6AZK8n1pyv1/G+l44nqUJygAkK1UrYl+IOGie5vcrEdrAlwmLYGIA9NVvtHWosPYwWWIXf/XA==} - engines: {node: '>=4'} - peerDependencies: - chai: '>=2 <5' - - chai@4.5.0: - resolution: {integrity: sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==} - engines: {node: '>=4'} - - chai@5.3.3: - resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==} + chai@6.2.2: + resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==} engines: {node: '>=18'} - check-error@1.0.3: - resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} - - check-error@2.1.1: - resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} - engines: {node: '>= 16'} - - debug@4.4.3: - resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - deep-eql@4.1.4: - resolution: {integrity: sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==} - engines: {node: '>=6'} - - deep-eql@5.0.2: - resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} - engines: {node: '>=6'} - es-module-lexer@1.7.0: resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} - esbuild@0.21.5: - resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} - engines: {node: '>=12'} + esbuild@0.27.2: + resolution: {integrity: sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==} + engines: {node: '>=18'} hasBin: true estree-walker@3.0.3: @@ -400,50 +377,44 @@ packages: resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} engines: {node: '>=12.0.0'} + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] - get-func-name@2.0.2: - resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} - - js-sha512@0.8.0: - resolution: {integrity: sha512-PWsmefG6Jkodqt+ePTvBZCSMFgN7Clckjd0O7su3I0+BW2QWUTJNzjktHsztGLhncP2h8mcF9V9Y2Ha59pAViQ==} - - lodash-es@4.17.22: - resolution: {integrity: sha512-XEawp1t0gxSi9x01glktRZ5HDy0HXqrM0x5pXQM98EaI0NxO6jVM7omDOxsuEo5UIASAnm2bRp1Jt/e0a2XU8Q==} - - loupe@2.3.7: - resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} - - loupe@3.2.1: - resolution: {integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==} + js-sha512@0.9.0: + resolution: {integrity: sha512-mirki9WS/SUahm+1TbAPkqvbCiCfOAAsyXeHxK1UkullnJVVqoJG2pL9ObvT05CN+tM7fxhfYm0NbXn+1hWoZg==} magic-string@0.30.21: resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} - ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - nanoid@3.3.11: resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - pathe@1.1.2: - resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} + obug@2.1.1: + resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==} - pathval@1.1.1: - resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} - - pathval@2.0.1: - resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==} - engines: {node: '>= 14.16'} + pathe@2.0.3: + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + picomatch@4.0.3: + resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} + engines: {node: '>=12'} + postcss@8.5.6: resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} engines: {node: ^10 || ^12 || >=14} @@ -469,25 +440,18 @@ packages: tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} - tinyexec@0.3.2: - resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} + tinyexec@1.0.2: + resolution: {integrity: sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==} + engines: {node: '>=18'} - tinypool@1.1.1: - resolution: {integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==} - engines: {node: ^18.0.0 || >=20.0.0} + tinyglobby@0.2.15: + resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} + engines: {node: '>=12.0.0'} - tinyrainbow@1.2.0: - resolution: {integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==} + tinyrainbow@3.0.3: + resolution: {integrity: sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==} engines: {node: '>=14.0.0'} - tinyspy@3.0.2: - resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} - engines: {node: '>=14.0.0'} - - type-detect@4.1.0: - resolution: {integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==} - engines: {node: '>=4'} - typescript@5.9.3: resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} engines: {node: '>=14.17'} @@ -496,27 +460,27 @@ packages: undici-types@6.21.0: resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} - vite-node@2.1.9: - resolution: {integrity: sha512-AM9aQ/IPrW/6ENLQg3AGY4K1N2TGZdR5e4gu/MmmR2xR3Ll1+dib+nook92g4TV3PXVyeyxdWwtaCAiUL0hMxA==} - engines: {node: ^18.0.0 || >=20.0.0} - hasBin: true - - vite@5.4.21: - resolution: {integrity: sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==} - engines: {node: ^18.0.0 || >=20.0.0} + vite@7.3.0: + resolution: {integrity: sha512-dZwN5L1VlUBewiP6H9s2+B3e3Jg96D0vzN+Ry73sOefebhYr9f94wwkMNN/9ouoU8pV1BqA1d1zGk8928cx0rg==} + engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: - '@types/node': ^18.0.0 || >=20.0.0 - less: '*' + '@types/node': ^20.19.0 || >=22.12.0 + jiti: '>=1.21.0' + less: ^4.0.0 lightningcss: ^1.21.0 - sass: '*' - sass-embedded: '*' - stylus: '*' - sugarss: '*' - terser: ^5.4.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: '>=0.54.8' + sugarss: ^5.0.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 peerDependenciesMeta: '@types/node': optional: true + jiti: + optional: true less: optional: true lightningcss: @@ -531,24 +495,37 @@ packages: optional: true terser: optional: true + tsx: + optional: true + yaml: + optional: true - vitest@2.1.9: - resolution: {integrity: sha512-MSmPM9REYqDGBI8439mA4mWhV5sKmDlBKWIYbA3lRb2PTHACE0mgKwA8yQ2xq9vxDTuk4iPrECBAEW2aoFXY0Q==} - engines: {node: ^18.0.0 || >=20.0.0} + vitest@4.0.16: + resolution: {integrity: sha512-E4t7DJ9pESL6E3I8nFjPa4xGUd3PmiWDLsDztS2qXSJWfHtbQnwAWylaBvSNY48I3vr8PTqIZlyK8TE3V3CA4Q==} + engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' - '@types/node': ^18.0.0 || >=20.0.0 - '@vitest/browser': 2.1.9 - '@vitest/ui': 2.1.9 + '@opentelemetry/api': ^1.9.0 + '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 + '@vitest/browser-playwright': 4.0.16 + '@vitest/browser-preview': 4.0.16 + '@vitest/browser-webdriverio': 4.0.16 + '@vitest/ui': 4.0.16 happy-dom: '*' jsdom: '*' peerDependenciesMeta: '@edge-runtime/vm': optional: true + '@opentelemetry/api': + optional: true '@types/node': optional: true - '@vitest/browser': + '@vitest/browser-playwright': + optional: true + '@vitest/browser-preview': + optional: true + '@vitest/browser-webdriverio': optional: true '@vitest/ui': optional: true @@ -564,73 +541,82 @@ packages: snapshots: - '@esbuild/aix-ppc64@0.21.5': + '@esbuild/aix-ppc64@0.27.2': optional: true - '@esbuild/android-arm64@0.21.5': + '@esbuild/android-arm64@0.27.2': optional: true - '@esbuild/android-arm@0.21.5': + '@esbuild/android-arm@0.27.2': optional: true - '@esbuild/android-x64@0.21.5': + '@esbuild/android-x64@0.27.2': optional: true - '@esbuild/darwin-arm64@0.21.5': + '@esbuild/darwin-arm64@0.27.2': optional: true - '@esbuild/darwin-x64@0.21.5': + '@esbuild/darwin-x64@0.27.2': optional: true - '@esbuild/freebsd-arm64@0.21.5': + '@esbuild/freebsd-arm64@0.27.2': optional: true - '@esbuild/freebsd-x64@0.21.5': + '@esbuild/freebsd-x64@0.27.2': optional: true - '@esbuild/linux-arm64@0.21.5': + '@esbuild/linux-arm64@0.27.2': optional: true - '@esbuild/linux-arm@0.21.5': + '@esbuild/linux-arm@0.27.2': optional: true - '@esbuild/linux-ia32@0.21.5': + '@esbuild/linux-ia32@0.27.2': optional: true - '@esbuild/linux-loong64@0.21.5': + '@esbuild/linux-loong64@0.27.2': optional: true - '@esbuild/linux-mips64el@0.21.5': + '@esbuild/linux-mips64el@0.27.2': optional: true - '@esbuild/linux-ppc64@0.21.5': + '@esbuild/linux-ppc64@0.27.2': optional: true - '@esbuild/linux-riscv64@0.21.5': + '@esbuild/linux-riscv64@0.27.2': optional: true - '@esbuild/linux-s390x@0.21.5': + '@esbuild/linux-s390x@0.27.2': optional: true - '@esbuild/linux-x64@0.21.5': + '@esbuild/linux-x64@0.27.2': optional: true - '@esbuild/netbsd-x64@0.21.5': + '@esbuild/netbsd-arm64@0.27.2': optional: true - '@esbuild/openbsd-x64@0.21.5': + '@esbuild/netbsd-x64@0.27.2': optional: true - '@esbuild/sunos-x64@0.21.5': + '@esbuild/openbsd-arm64@0.27.2': optional: true - '@esbuild/win32-arm64@0.21.5': + '@esbuild/openbsd-x64@0.27.2': optional: true - '@esbuild/win32-ia32@0.21.5': + '@esbuild/openharmony-arm64@0.27.2': optional: true - '@esbuild/win32-x64@0.21.5': + '@esbuild/sunos-x64@0.27.2': + optional: true + + '@esbuild/win32-arm64@0.27.2': + optional: true + + '@esbuild/win32-ia32@0.27.2': + optional: true + + '@esbuild/win32-x64@0.27.2': optional: true '@jridgewell/sourcemap-codec@1.5.5': {} @@ -701,123 +687,94 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.54.0': optional: true + '@standard-schema/spec@1.1.0': {} + + '@types/chai@5.2.3': + dependencies: + '@types/deep-eql': 4.0.2 + assertion-error: 2.0.1 + + '@types/deep-eql@4.0.2': {} + '@types/estree@1.0.8': {} '@types/node@20.19.27': dependencies: undici-types: 6.21.0 - '@vitest/expect@2.1.9': + '@vitest/expect@4.0.16': dependencies: - '@vitest/spy': 2.1.9 - '@vitest/utils': 2.1.9 - chai: 5.3.3 - tinyrainbow: 1.2.0 + '@standard-schema/spec': 1.1.0 + '@types/chai': 5.2.3 + '@vitest/spy': 4.0.16 + '@vitest/utils': 4.0.16 + chai: 6.2.2 + tinyrainbow: 3.0.3 - '@vitest/mocker@2.1.9(vite@5.4.21(@types/node@20.19.27))': + '@vitest/mocker@4.0.16(vite@7.3.0(@types/node@20.19.27))': dependencies: - '@vitest/spy': 2.1.9 + '@vitest/spy': 4.0.16 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 5.4.21(@types/node@20.19.27) + vite: 7.3.0(@types/node@20.19.27) - '@vitest/pretty-format@2.1.9': + '@vitest/pretty-format@4.0.16': dependencies: - tinyrainbow: 1.2.0 + tinyrainbow: 3.0.3 - '@vitest/runner@2.1.9': + '@vitest/runner@4.0.16': dependencies: - '@vitest/utils': 2.1.9 - pathe: 1.1.2 + '@vitest/utils': 4.0.16 + pathe: 2.0.3 - '@vitest/snapshot@2.1.9': + '@vitest/snapshot@4.0.16': dependencies: - '@vitest/pretty-format': 2.1.9 + '@vitest/pretty-format': 4.0.16 magic-string: 0.30.21 - pathe: 1.1.2 + pathe: 2.0.3 - '@vitest/spy@2.1.9': + '@vitest/spy@4.0.16': {} + + '@vitest/utils@4.0.16': dependencies: - tinyspy: 3.0.2 - - '@vitest/utils@2.1.9': - dependencies: - '@vitest/pretty-format': 2.1.9 - loupe: 3.2.1 - tinyrainbow: 1.2.0 - - assertion-error@1.1.0: {} + '@vitest/pretty-format': 4.0.16 + tinyrainbow: 3.0.3 assertion-error@2.0.1: {} - cac@6.7.14: {} - - chai-bytes@0.1.2(chai@4.5.0): - dependencies: - chai: 4.5.0 - - chai@4.5.0: - dependencies: - assertion-error: 1.1.0 - check-error: 1.0.3 - deep-eql: 4.1.4 - get-func-name: 2.0.2 - loupe: 2.3.7 - pathval: 1.1.1 - type-detect: 4.1.0 - - chai@5.3.3: - dependencies: - assertion-error: 2.0.1 - check-error: 2.1.1 - deep-eql: 5.0.2 - loupe: 3.2.1 - pathval: 2.0.1 - - check-error@1.0.3: - dependencies: - get-func-name: 2.0.2 - - check-error@2.1.1: {} - - debug@4.4.3: - dependencies: - ms: 2.1.3 - - deep-eql@4.1.4: - dependencies: - type-detect: 4.1.0 - - deep-eql@5.0.2: {} + chai@6.2.2: {} es-module-lexer@1.7.0: {} - esbuild@0.21.5: + esbuild@0.27.2: optionalDependencies: - '@esbuild/aix-ppc64': 0.21.5 - '@esbuild/android-arm': 0.21.5 - '@esbuild/android-arm64': 0.21.5 - '@esbuild/android-x64': 0.21.5 - '@esbuild/darwin-arm64': 0.21.5 - '@esbuild/darwin-x64': 0.21.5 - '@esbuild/freebsd-arm64': 0.21.5 - '@esbuild/freebsd-x64': 0.21.5 - '@esbuild/linux-arm': 0.21.5 - '@esbuild/linux-arm64': 0.21.5 - '@esbuild/linux-ia32': 0.21.5 - '@esbuild/linux-loong64': 0.21.5 - '@esbuild/linux-mips64el': 0.21.5 - '@esbuild/linux-ppc64': 0.21.5 - '@esbuild/linux-riscv64': 0.21.5 - '@esbuild/linux-s390x': 0.21.5 - '@esbuild/linux-x64': 0.21.5 - '@esbuild/netbsd-x64': 0.21.5 - '@esbuild/openbsd-x64': 0.21.5 - '@esbuild/sunos-x64': 0.21.5 - '@esbuild/win32-arm64': 0.21.5 - '@esbuild/win32-ia32': 0.21.5 - '@esbuild/win32-x64': 0.21.5 + '@esbuild/aix-ppc64': 0.27.2 + '@esbuild/android-arm': 0.27.2 + '@esbuild/android-arm64': 0.27.2 + '@esbuild/android-x64': 0.27.2 + '@esbuild/darwin-arm64': 0.27.2 + '@esbuild/darwin-x64': 0.27.2 + '@esbuild/freebsd-arm64': 0.27.2 + '@esbuild/freebsd-x64': 0.27.2 + '@esbuild/linux-arm': 0.27.2 + '@esbuild/linux-arm64': 0.27.2 + '@esbuild/linux-ia32': 0.27.2 + '@esbuild/linux-loong64': 0.27.2 + '@esbuild/linux-mips64el': 0.27.2 + '@esbuild/linux-ppc64': 0.27.2 + '@esbuild/linux-riscv64': 0.27.2 + '@esbuild/linux-s390x': 0.27.2 + '@esbuild/linux-x64': 0.27.2 + '@esbuild/netbsd-arm64': 0.27.2 + '@esbuild/netbsd-x64': 0.27.2 + '@esbuild/openbsd-arm64': 0.27.2 + '@esbuild/openbsd-x64': 0.27.2 + '@esbuild/openharmony-arm64': 0.27.2 + '@esbuild/sunos-x64': 0.27.2 + '@esbuild/win32-arm64': 0.27.2 + '@esbuild/win32-ia32': 0.27.2 + '@esbuild/win32-x64': 0.27.2 estree-walker@3.0.3: dependencies: @@ -825,37 +782,29 @@ snapshots: expect-type@1.3.0: {} + fdir@6.5.0(picomatch@4.0.3): + optionalDependencies: + picomatch: 4.0.3 + fsevents@2.3.3: optional: true - get-func-name@2.0.2: {} - - js-sha512@0.8.0: {} - - lodash-es@4.17.22: {} - - loupe@2.3.7: - dependencies: - get-func-name: 2.0.2 - - loupe@3.2.1: {} + js-sha512@0.9.0: {} magic-string@0.30.21: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 - ms@2.1.3: {} - nanoid@3.3.11: {} - pathe@1.1.2: {} + obug@2.1.1: {} - pathval@1.1.1: {} - - pathval@2.0.1: {} + pathe@2.0.3: {} picocolors@1.1.1: {} + picomatch@4.0.3: {} + postcss@8.5.6: dependencies: nanoid: 3.3.11 @@ -900,72 +849,57 @@ snapshots: tinybench@2.9.0: {} - tinyexec@0.3.2: {} + tinyexec@1.0.2: {} - tinypool@1.1.1: {} + tinyglobby@0.2.15: + dependencies: + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 - tinyrainbow@1.2.0: {} - - tinyspy@3.0.2: {} - - type-detect@4.1.0: {} + tinyrainbow@3.0.3: {} typescript@5.9.3: {} undici-types@6.21.0: {} - vite-node@2.1.9(@types/node@20.19.27): + vite@7.3.0(@types/node@20.19.27): dependencies: - cac: 6.7.14 - debug: 4.4.3 - es-module-lexer: 1.7.0 - pathe: 1.1.2 - vite: 5.4.21(@types/node@20.19.27) - transitivePeerDependencies: - - '@types/node' - - less - - lightningcss - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - vite@5.4.21(@types/node@20.19.27): - dependencies: - esbuild: 0.21.5 + esbuild: 0.27.2 + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 postcss: 8.5.6 rollup: 4.54.0 + tinyglobby: 0.2.15 optionalDependencies: '@types/node': 20.19.27 fsevents: 2.3.3 - vitest@2.1.9(@types/node@20.19.27): + vitest@4.0.16(@types/node@20.19.27): dependencies: - '@vitest/expect': 2.1.9 - '@vitest/mocker': 2.1.9(vite@5.4.21(@types/node@20.19.27)) - '@vitest/pretty-format': 2.1.9 - '@vitest/runner': 2.1.9 - '@vitest/snapshot': 2.1.9 - '@vitest/spy': 2.1.9 - '@vitest/utils': 2.1.9 - chai: 5.3.3 - debug: 4.4.3 + '@vitest/expect': 4.0.16 + '@vitest/mocker': 4.0.16(vite@7.3.0(@types/node@20.19.27)) + '@vitest/pretty-format': 4.0.16 + '@vitest/runner': 4.0.16 + '@vitest/snapshot': 4.0.16 + '@vitest/spy': 4.0.16 + '@vitest/utils': 4.0.16 + es-module-lexer: 1.7.0 expect-type: 1.3.0 magic-string: 0.30.21 - pathe: 1.1.2 + obug: 2.1.1 + pathe: 2.0.3 + picomatch: 4.0.3 std-env: 3.10.0 tinybench: 2.9.0 - tinyexec: 0.3.2 - tinypool: 1.1.1 - tinyrainbow: 1.2.0 - vite: 5.4.21(@types/node@20.19.27) - vite-node: 2.1.9(@types/node@20.19.27) + tinyexec: 1.0.2 + tinyglobby: 0.2.15 + tinyrainbow: 3.0.3 + vite: 7.3.0(@types/node@20.19.27) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 20.19.27 transitivePeerDependencies: + - jiti - less - lightningcss - msw @@ -973,8 +907,9 @@ snapshots: - sass-embedded - stylus - sugarss - - supports-color - terser + - tsx + - yaml why-is-node-running@2.3.0: dependencies: