diff --git a/package.json b/package.json index 1e29c5b..d2f54b3 100644 --- a/package.json +++ b/package.json @@ -36,13 +36,15 @@ "@nanoforge-dev/utils-prettier-config": "workspace:^", "@trivago/prettier-plugin-sort-imports": "^6.0.0", "@types/node": "^24.10.1", + "@vitest/coverage-v8": "^4.0.15", "eslint": "^9.39.1", "husky": "^9.1.7", "lint-staged": "^16.2.7", "prettier": "^3.6.2", "tsup": "^8.5.1", "turbo": "^2.6.1", - "typescript": "^5.9.3" + "typescript": "^5.9.3", + "vitest": "^4.0.15" }, "packageManager": "pnpm@10.22.0", "engines": { diff --git a/packages/asset-manager/jest.config.json b/packages/asset-manager/jest.config.json deleted file mode 100644 index 6b46991..0000000 --- a/packages/asset-manager/jest.config.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "preset": "ts-jest", - "moduleFileExtensions": ["js", "json", "ts"], - "rootDir": "test", - "collectCoverageFrom": ["**/*.(t|j)s"], - "testEnvironment": "node", - "testRegex": ".*\\.spec\\.ts$", - "transform": { - "^.+\\.(t|j)s$": "ts-jest" - }, - "transformIgnorePatterns": ["/node_modules/"], - "verbose": true, - "testTimeout": 5000 -} diff --git a/packages/asset-manager/package.json b/packages/asset-manager/package.json index 5f75bdc..2be1130 100644 --- a/packages/asset-manager/package.json +++ b/packages/asset-manager/package.json @@ -50,28 +50,24 @@ "build": "tsc --noEmit && tsup", "lint": "prettier --check . && eslint --format=pretty src", "format": "prettier --write . && eslint --fix --format=pretty src", - "test:unit": "jest --config ./jest.config.json", + "test:unit": "vitest run --config ../../vitest.config.ts", "prepack": "pnpm run build && pnpm run lint", "changelog": "git cliff --prepend ./CHANGELOG.md -u -c ./cliff.toml -r ../../ --include-path 'packages/asset-manager/*'", "release": "cliff-jumper" }, "dependencies": { - "class-transformer": "^0.5.1", - "class-validator": "^0.14.2", "@nanoforge-dev/common": "workspace:^" }, "devDependencies": { "@favware/cliff-jumper": "^6.0.0", "@nanoforge-dev/utils-eslint-config": "workspace:^", "@nanoforge-dev/utils-prettier-config": "workspace:^", - "@types/jest": "^30.0.0", "eslint": "^9.39.1", "eslint-formatter-pretty": "^7.0.0", - "jest": "^30.2.0", "prettier": "^3.6.2", - "ts-jest": "^29.4.5", "tsup": "^8.5.1", - "typescript": "^5.9.3" + "typescript": "^5.9.3", + "vitest": "^4.0.15" }, "packageManager": "pnpm@10.22.0", "engines": { diff --git a/packages/asset-manager/test/asset-manager.library.spec.ts b/packages/asset-manager/test/asset-manager.library.spec.ts index 65439d7..a3845ce 100644 --- a/packages/asset-manager/test/asset-manager.library.spec.ts +++ b/packages/asset-manager/test/asset-manager.library.spec.ts @@ -1,4 +1,5 @@ import { type IConfigRegistry, InitContext } from "@nanoforge-dev/common"; +import { describe, expect, it } from "vitest"; import { EditableApplicationContext } from "../../core/src/common/context/contexts/application.editable-context"; import { EditableLibraryManager } from "../../core/src/common/library/manager/library.manager"; diff --git a/packages/asset-manager/test/tsconfig.json b/packages/asset-manager/test/tsconfig.json deleted file mode 100644 index 50d5966..0000000 --- a/packages/asset-manager/test/tsconfig.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": "../../../tsconfig.spec.json" -} diff --git a/packages/asset-manager/tsconfig.spec.json b/packages/asset-manager/tsconfig.spec.json new file mode 100644 index 0000000..8270cab --- /dev/null +++ b/packages/asset-manager/tsconfig.spec.json @@ -0,0 +1,10 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig.json", + "extends": "./tsconfig.json", + "compilerOptions": { + "noEmit": true, + "skipLibCheck": true + }, + "include": ["test/**/*.spec.ts"], + "exclude": ["node_modules"] +} diff --git a/packages/common/package.json b/packages/common/package.json index 0a624c8..8da1abc 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -54,10 +54,6 @@ "changelog": "git cliff --prepend ./CHANGELOG.md -u -c ./cliff.toml -r ../../ --include-path 'packages/common/*'", "release": "cliff-jumper" }, - "dependencies": { - "class-transformer": "^0.5.1", - "class-validator": "^0.14.2" - }, "devDependencies": { "@favware/cliff-jumper": "^6.0.0", "@nanoforge-dev/utils-eslint-config": "workspace:^", diff --git a/packages/ecs/jest.config.json b/packages/ecs/jest.config.json deleted file mode 100644 index e6f8bfb..0000000 --- a/packages/ecs/jest.config.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "preset": "ts-jest", - "moduleFileExtensions": ["js", "ts"], - "rootDir": "test", - "collectCoverageFrom": ["**/*.(t|j)s"], - "testEnvironment": "node", - "testRegex": ".*\\.spec\\.ts$", - "transform": { - "^.+\\.(t|j)s$": "ts-jest" - }, - "transformIgnorePatterns": ["/node_modules/"], - "verbose": true, - "testTimeout": 5000 -} diff --git a/packages/ecs/package.json b/packages/ecs/package.json index 8fb5fa2..f217daa 100644 --- a/packages/ecs/package.json +++ b/packages/ecs/package.json @@ -53,7 +53,7 @@ "clean": "make fclean", "lint": "prettier --check . && eslint --format=pretty src", "format": "prettier --write . && eslint --fix --format=pretty src", - "test:unit": "make fclean && make tests -j 16 && jest --config ./jest.config.json", + "test:unit": "make fclean && make tests -j 16 && vitest run --config ../../vitest.config.ts", "prepack": "pnpm run build && pnpm run lint", "changelog": "git cliff --prepend ./CHANGELOG.md -u -c ./cliff.toml -r ../../ --include-path 'packages/config/*'", "release": "cliff-jumper" @@ -67,15 +67,13 @@ "@nanoforge-dev/core": "workspace:^", "@nanoforge-dev/utils-eslint-config": "workspace:^", "@nanoforge-dev/utils-prettier-config": "workspace:^", - "@types/jest": "^30.0.0", "@types/node": "^24.10.1", "eslint": "^9.39.1", "eslint-formatter-pretty": "^7.0.0", - "jest": "^30.2.0", "prettier": "^3.6.2", - "ts-jest": "^29.4.5", "tsup": "^8.5.1", - "typescript": "^5.9.3" + "typescript": "^5.9.3", + "vitest": "^4.0.15" }, "packageManager": "pnpm@10.22.0", "engines": { diff --git a/packages/ecs/test/ecs-library.spec.ts b/packages/ecs/test/ecs-library.spec.ts index 129903d..182ad03 100644 --- a/packages/ecs/test/ecs-library.spec.ts +++ b/packages/ecs/test/ecs-library.spec.ts @@ -1,5 +1,6 @@ import { AssetManagerLibrary } from "@nanoforge-dev/asset-manager"; import { ClearContext, type IConfigRegistry, InitContext } from "@nanoforge-dev/common"; +import { beforeAll, beforeEach, describe, expect, it } from "vitest"; import { EditableApplicationContext } from "../../core/src/common/context/contexts/application.editable-context"; import { EditableLibraryManager } from "../../core/src/common/library/manager/library.manager"; @@ -43,13 +44,13 @@ describe("ECSLibrary", () => { registry = ecs.registry; }); - test("init and spawn entity", async () => { + it("init and spawn entity", async () => { const entity = registry.spawnEntity(); expect(entity).toBeDefined(); expect(entity.getId()).toBe(0); }); - test("add component to entity", async () => { + it("add component to entity", async () => { const entity = registry.spawnEntity(); const pos = new Position(1, 2); registry.addComponent(entity, pos); @@ -58,7 +59,7 @@ describe("ECSLibrary", () => { expect(components.size()).toBe(1); }); - test("clear", async () => { + it("clear", async () => { await ecs.__clear(clearContext); }); }); diff --git a/packages/ecs/test/tsconfig.json b/packages/ecs/test/tsconfig.json deleted file mode 100644 index 50d5966..0000000 --- a/packages/ecs/test/tsconfig.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": "../../../tsconfig.spec.json" -} diff --git a/packages/ecs/test/wasm/Registry.spec.ts b/packages/ecs/test/wasm/Registry.spec.ts index 2e8b9fb..5aa150b 100644 --- a/packages/ecs/test/wasm/Registry.spec.ts +++ b/packages/ecs/test/wasm/Registry.spec.ts @@ -1,3 +1,5 @@ +import { assert, describe, expect, it } from "vitest"; + import Module from "../../lib/libecs.js"; class Velocity { @@ -23,7 +25,7 @@ class Position { } describe("Registry", () => { - test("1 entity 2 components", async () => { + it("1 entity 2 components", async () => { const m = await Module(); const r = new m.Registry(); expect(r).toBeDefined(); @@ -44,7 +46,7 @@ describe("Registry", () => { expect(positions.get(e.getId())).toStrictEqual(new Position(4, 5)); }); - test("override components", async () => { + it("override components", async () => { const m = await Module(); const r = new m.Registry(); @@ -60,7 +62,7 @@ describe("Registry", () => { expect(r.getComponents(Velocity).get(e.getId())).toStrictEqual(new Velocity(4, 5)); }); - test("basic remove", async () => { + it("basic remove", async () => { const m = await Module(); const r = new m.Registry(); @@ -75,7 +77,7 @@ describe("Registry", () => { expect(r.getComponents(Velocity).get(e.getId())).toBeUndefined(); }); - test("basic kill", async () => { + it("basic kill", async () => { const m = await Module(); const r = new m.Registry(); expect(r).toBeDefined(); @@ -102,7 +104,7 @@ describe("Registry", () => { expect(r.getComponents(Position).get(e.getId())).toBeUndefined(); }); - test("system incrementing a variable", async () => { + it("system incrementing a variable", async () => { const m = await Module(); const r = new m.Registry(); @@ -119,7 +121,7 @@ describe("Registry", () => { expect(counter).toBe(16); }); - test("system incrementing component positions by velocity", async () => { + it("system incrementing component positions by velocity", async () => { const m = await Module(); const r = new m.Registry(); expect(r).toBeDefined(); @@ -166,7 +168,7 @@ describe("Registry", () => { expect(r.getComponents(Position).get(e3.getId())).toStrictEqual(new Position(0, 0)); }); - test("Try unallowed component name", async () => { + it("Try unallowed component name", async () => { const m = await Module(); const r = new m.Registry(); expect(r).toBeDefined(); @@ -178,7 +180,7 @@ describe("Registry", () => { try { r.addComponent(e, entityComp); - fail(); + assert.fail("Should have thrown an error"); } catch (e) { //@ts-ignore expect(m.getExceptionMessage(e)[1].toString()).toBeDefined(); diff --git a/packages/ecs/test/wasm/SparseArray.spec.ts b/packages/ecs/test/wasm/SparseArray.spec.ts index 1b1093d..2308c22 100644 --- a/packages/ecs/test/wasm/SparseArray.spec.ts +++ b/packages/ecs/test/wasm/SparseArray.spec.ts @@ -1,14 +1,16 @@ +import { describe, expect, it } from "vitest"; + import Module from "../../lib/libecs.js"; describe("SparseArray", () => { - test("basic instantation", async () => { + it("basic instantation", async () => { const m = await Module(); const sa = new m.SparseArray(); expect(sa).toBeDefined(); expect(sa.size()).toBe(0); }); - test("basic insert", async () => { + it("basic insert", async () => { const m = await Module(); const sa = new m.SparseArray(); sa.set(0, 1); @@ -16,7 +18,7 @@ describe("SparseArray", () => { expect(sa.get(0)).toBe(1); }); - test("basic remove", async () => { + it("basic remove", async () => { const m = await Module(); const sa = new m.SparseArray(); sa.set(0, 1); @@ -25,7 +27,7 @@ describe("SparseArray", () => { expect(sa.get(0)).toBe(undefined); }); - test("basic iteration with get and size", async () => { + it("basic iteration with get and size", async () => { const m = await Module(); const sa = new m.SparseArray(); sa.set(0, 1); diff --git a/packages/ecs/test/wasm/Zipper.spec.ts b/packages/ecs/test/wasm/Zipper.spec.ts index f200b1f..0fc87bd 100644 --- a/packages/ecs/test/wasm/Zipper.spec.ts +++ b/packages/ecs/test/wasm/Zipper.spec.ts @@ -1,3 +1,5 @@ +import { describe, expect, it } from "vitest"; + import Module from "../../lib/libecs.js"; class Velocity { @@ -23,7 +25,7 @@ class Position { } describe("Zipper", () => { - test("single simple sparse array instantation", async () => { + it("single simple sparse array instantation", async () => { const m = await Module(); const r = new m.Registry(); expect(r).toBeDefined(); @@ -45,7 +47,7 @@ describe("Zipper", () => { ]); }); - test("single complex sparse array instantation", async () => { + it("single complex sparse array instantation", async () => { const m = await Module(); const r = new m.Registry(); expect(r).toBeDefined(); @@ -65,7 +67,7 @@ describe("Zipper", () => { expect(zip[20]).toStrictEqual({ Velocity: new Velocity(4, 4) }); }); - test("multiple complex sparse array instantation", async () => { + it("multiple complex sparse array instantation", async () => { const m = await Module(); const r = new m.Registry(); expect(r).toBeDefined(); @@ -89,7 +91,7 @@ describe("Zipper", () => { } }); - test("simple indexed zipper modification", async () => { + it("simple indexed zipper modification", async () => { const m = await Module(); const r = new m.Registry(); expect(r).toBeDefined(); diff --git a/packages/ecs/tsconfig.spec.json b/packages/ecs/tsconfig.spec.json new file mode 100644 index 0000000..8270cab --- /dev/null +++ b/packages/ecs/tsconfig.spec.json @@ -0,0 +1,10 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig.json", + "extends": "./tsconfig.json", + "compilerOptions": { + "noEmit": true, + "skipLibCheck": true + }, + "include": ["test/**/*.spec.ts"], + "exclude": ["node_modules"] +} diff --git a/packages/graphics-2d/jest.config.json b/packages/graphics-2d/jest.config.json deleted file mode 100644 index 6b46991..0000000 --- a/packages/graphics-2d/jest.config.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "preset": "ts-jest", - "moduleFileExtensions": ["js", "json", "ts"], - "rootDir": "test", - "collectCoverageFrom": ["**/*.(t|j)s"], - "testEnvironment": "node", - "testRegex": ".*\\.spec\\.ts$", - "transform": { - "^.+\\.(t|j)s$": "ts-jest" - }, - "transformIgnorePatterns": ["/node_modules/"], - "verbose": true, - "testTimeout": 5000 -} diff --git a/packages/graphics-2d/package.json b/packages/graphics-2d/package.json index c268f7f..03536a8 100644 --- a/packages/graphics-2d/package.json +++ b/packages/graphics-2d/package.json @@ -50,15 +50,12 @@ "build": "tsc --noEmit && tsup", "lint": "prettier --check . && eslint --format=pretty src", "format": "prettier --write . && eslint --fix --format=pretty src", - "test:unit": "jest --config ./jest.config.json", + "test:unit": "vitest run --config ../../vitest.config.ts", "prepack": "pnpm run build && pnpm run lint", "changelog": "git cliff --prepend ./CHANGELOG.md -u -c ./cliff.toml -r ../../ --include-path 'packages/graphics-2d/*'", "release": "cliff-jumper" }, "dependencies": { - "class-transformer": "^0.5.1", - "class-validator": "^0.14.2", - "@nanoforge-dev/asset-manager": "workspace:^", "@nanoforge-dev/common": "workspace:^", "konva": "^10.0.9" }, @@ -66,14 +63,12 @@ "@favware/cliff-jumper": "^6.0.0", "@nanoforge-dev/utils-eslint-config": "workspace:^", "@nanoforge-dev/utils-prettier-config": "workspace:^", - "@types/jest": "^30.0.0", "eslint": "^9.39.1", "eslint-formatter-pretty": "^7.0.0", - "jest": "^30.2.0", "prettier": "^3.6.2", - "ts-jest": "^29.4.5", "tsup": "^8.5.1", - "typescript": "^5.9.3" + "typescript": "^5.9.3", + "vitest": "^4.0.15" }, "packageManager": "pnpm@10.22.0", "engines": { diff --git a/packages/graphics-2d/test/graphics-2d.library.spec.ts b/packages/graphics-2d/test/graphics-2d.library.spec.ts index e0134c7..ad66504 100644 --- a/packages/graphics-2d/test/graphics-2d.library.spec.ts +++ b/packages/graphics-2d/test/graphics-2d.library.spec.ts @@ -1,4 +1,5 @@ import { type IConfigRegistry, InitContext } from "@nanoforge-dev/common"; +import { describe, expect, it } from "vitest"; import { EditableApplicationContext } from "../../core/src/common/context/contexts/application.editable-context"; import { EditableLibraryManager } from "../../core/src/common/library/manager/library.manager"; diff --git a/packages/graphics-2d/test/tsconfig.json b/packages/graphics-2d/test/tsconfig.json deleted file mode 100644 index 2a82b81..0000000 --- a/packages/graphics-2d/test/tsconfig.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "extends": "../../../tsconfig.spec.json", - "compilerOptions": { - "types": ["jest", "node"] - } -} diff --git a/packages/graphics-2d/tsconfig.spec.json b/packages/graphics-2d/tsconfig.spec.json new file mode 100644 index 0000000..8270cab --- /dev/null +++ b/packages/graphics-2d/tsconfig.spec.json @@ -0,0 +1,10 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig.json", + "extends": "./tsconfig.json", + "compilerOptions": { + "noEmit": true, + "skipLibCheck": true + }, + "include": ["test/**/*.spec.ts"], + "exclude": ["node_modules"] +} diff --git a/packages/input/package.json b/packages/input/package.json index 43ea65a..9254997 100644 --- a/packages/input/package.json +++ b/packages/input/package.json @@ -55,8 +55,6 @@ "release": "cliff-jumper" }, "dependencies": { - "class-transformer": "^0.5.1", - "class-validator": "^0.14.2", "@nanoforge-dev/common": "workspace:^" }, "devDependencies": { diff --git a/packages/music/package.json b/packages/music/package.json index 7465f5e..f8d97e9 100644 --- a/packages/music/package.json +++ b/packages/music/package.json @@ -55,8 +55,6 @@ "release": "cliff-jumper" }, "dependencies": { - "class-transformer": "^0.5.1", - "class-validator": "^0.14.2", "@nanoforge-dev/common": "workspace:^" }, "devDependencies": { diff --git a/packages/sound/package.json b/packages/sound/package.json index 5fed39e..b15a96d 100644 --- a/packages/sound/package.json +++ b/packages/sound/package.json @@ -55,8 +55,6 @@ "release": "cliff-jumper" }, "dependencies": { - "class-transformer": "^0.5.1", - "class-validator": "^0.14.2", "@nanoforge-dev/common": "workspace:^" }, "devDependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d372e05..e52bc9f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -30,6 +30,9 @@ importers: '@types/node': specifier: ^24.10.1 version: 24.10.1 + '@vitest/coverage-v8': + specifier: ^4.0.15 + version: 4.0.15(vitest@4.0.15(@types/node@24.10.1)(jiti@2.6.1)(yaml@2.8.1)) eslint: specifier: ^9.39.1 version: 9.39.1(jiti@2.6.1) @@ -44,25 +47,22 @@ importers: version: 3.6.2 tsup: specifier: ^8.5.1 - version: 8.5.1(jiti@2.6.1)(typescript@5.9.3)(yaml@2.8.1) + version: 8.5.1(jiti@2.6.1)(postcss@8.5.6)(typescript@5.9.3)(yaml@2.8.1) turbo: specifier: ^2.6.1 version: 2.6.1 typescript: specifier: ^5.9.3 version: 5.9.3 + vitest: + specifier: ^4.0.15 + version: 4.0.15(@types/node@24.10.1)(jiti@2.6.1)(yaml@2.8.1) packages/asset-manager: dependencies: '@nanoforge-dev/common': specifier: workspace:^ version: link:../common - class-transformer: - specifier: ^0.5.1 - version: 0.5.1 - class-validator: - specifier: ^0.14.2 - version: 0.14.2 devDependencies: '@favware/cliff-jumper': specifier: ^6.0.0 @@ -73,39 +73,26 @@ importers: '@nanoforge-dev/utils-prettier-config': specifier: workspace:^ version: link:../../utils/prettier-config - '@types/jest': - specifier: ^30.0.0 - version: 30.0.0 eslint: specifier: ^9.39.1 version: 9.39.1(jiti@2.6.1) eslint-formatter-pretty: specifier: ^7.0.0 version: 7.0.0 - jest: - specifier: ^30.2.0 - version: 30.2.0(@types/node@24.10.1) prettier: specifier: ^3.6.2 version: 3.6.2 - ts-jest: - specifier: ^29.4.5 - version: 29.4.5(@babel/core@7.28.5)(@jest/transform@30.2.0)(@jest/types@30.2.0)(babel-jest@30.2.0(@babel/core@7.28.5))(esbuild@0.27.0)(jest-util@30.2.0)(jest@30.2.0(@types/node@24.10.1))(typescript@5.9.3) tsup: specifier: ^8.5.1 - version: 8.5.1(jiti@2.6.1)(typescript@5.9.3)(yaml@2.8.1) + version: 8.5.1(jiti@2.6.1)(postcss@8.5.6)(typescript@5.9.3)(yaml@2.8.1) typescript: specifier: ^5.9.3 version: 5.9.3 + vitest: + specifier: ^4.0.15 + version: 4.0.15(@types/node@24.10.1)(jiti@2.6.1)(yaml@2.8.1) packages/common: - dependencies: - class-transformer: - specifier: ^0.5.1 - version: 0.5.1 - class-validator: - specifier: ^0.14.2 - version: 0.14.2 devDependencies: '@favware/cliff-jumper': specifier: ^6.0.0 @@ -127,7 +114,7 @@ importers: version: 3.6.2 tsup: specifier: ^8.5.1 - version: 8.5.1(jiti@2.6.1)(typescript@5.9.3)(yaml@2.8.1) + version: 8.5.1(jiti@2.6.1)(postcss@8.5.6)(typescript@5.9.3)(yaml@2.8.1) typescript: specifier: ^5.9.3 version: 5.9.3 @@ -161,7 +148,7 @@ importers: version: 3.6.2 tsup: specifier: ^8.5.1 - version: 8.5.1(jiti@2.6.1)(typescript@5.9.3)(yaml@2.8.1) + version: 8.5.1(jiti@2.6.1)(postcss@8.5.6)(typescript@5.9.3)(yaml@2.8.1) typescript: specifier: ^5.9.3 version: 5.9.3 @@ -204,7 +191,7 @@ importers: version: 3.6.2 tsup: specifier: ^8.5.1 - version: 8.5.1(jiti@2.6.1)(typescript@5.9.3)(yaml@2.8.1) + version: 8.5.1(jiti@2.6.1)(postcss@8.5.6)(typescript@5.9.3)(yaml@2.8.1) typescript: specifier: ^5.9.3 version: 5.9.3 @@ -230,9 +217,6 @@ importers: '@nanoforge-dev/utils-prettier-config': specifier: workspace:^ version: link:../../utils/prettier-config - '@types/jest': - specifier: ^30.0.0 - version: 30.0.0 '@types/node': specifier: ^24.10.1 version: 24.10.1 @@ -242,36 +226,24 @@ importers: eslint-formatter-pretty: specifier: ^7.0.0 version: 7.0.0 - jest: - specifier: ^30.2.0 - version: 30.2.0(@types/node@24.10.1) prettier: specifier: ^3.6.2 version: 3.6.2 - ts-jest: - specifier: ^29.4.5 - version: 29.4.5(@babel/core@7.28.5)(@jest/transform@30.2.0)(@jest/types@30.2.0)(babel-jest@30.2.0(@babel/core@7.28.5))(esbuild@0.27.0)(jest-util@30.2.0)(jest@30.2.0(@types/node@24.10.1))(typescript@5.9.3) tsup: specifier: ^8.5.1 - version: 8.5.1(jiti@2.6.1)(typescript@5.9.3)(yaml@2.8.1) + version: 8.5.1(jiti@2.6.1)(postcss@8.5.6)(typescript@5.9.3)(yaml@2.8.1) typescript: specifier: ^5.9.3 version: 5.9.3 + vitest: + specifier: ^4.0.15 + version: 4.0.15(@types/node@24.10.1)(jiti@2.6.1)(yaml@2.8.1) packages/graphics-2d: dependencies: - '@nanoforge-dev/asset-manager': - specifier: workspace:^ - version: link:../asset-manager '@nanoforge-dev/common': specifier: workspace:^ version: link:../common - class-transformer: - specifier: ^0.5.1 - version: 0.5.1 - class-validator: - specifier: ^0.14.2 - version: 0.14.2 konva: specifier: ^10.0.9 version: 10.0.12 @@ -285,42 +257,30 @@ importers: '@nanoforge-dev/utils-prettier-config': specifier: workspace:^ version: link:../../utils/prettier-config - '@types/jest': - specifier: ^30.0.0 - version: 30.0.0 eslint: specifier: ^9.39.1 version: 9.39.1(jiti@2.6.1) eslint-formatter-pretty: specifier: ^7.0.0 version: 7.0.0 - jest: - specifier: ^30.2.0 - version: 30.2.0(@types/node@24.10.1) prettier: specifier: ^3.6.2 version: 3.6.2 - ts-jest: - specifier: ^29.4.5 - version: 29.4.5(@babel/core@7.28.5)(@jest/transform@30.2.0)(@jest/types@30.2.0)(babel-jest@30.2.0(@babel/core@7.28.5))(esbuild@0.27.0)(jest-util@30.2.0)(jest@30.2.0(@types/node@24.10.1))(typescript@5.9.3) tsup: specifier: ^8.5.1 - version: 8.5.1(jiti@2.6.1)(typescript@5.9.3)(yaml@2.8.1) + version: 8.5.1(jiti@2.6.1)(postcss@8.5.6)(typescript@5.9.3)(yaml@2.8.1) typescript: specifier: ^5.9.3 version: 5.9.3 + vitest: + specifier: ^4.0.15 + version: 4.0.15(@types/node@24.10.1)(jiti@2.6.1)(yaml@2.8.1) packages/input: dependencies: '@nanoforge-dev/common': specifier: workspace:^ version: link:../common - class-transformer: - specifier: ^0.5.1 - version: 0.5.1 - class-validator: - specifier: ^0.14.2 - version: 0.14.2 devDependencies: '@favware/cliff-jumper': specifier: ^6.0.0 @@ -342,7 +302,7 @@ importers: version: 3.6.2 tsup: specifier: ^8.5.1 - version: 8.5.1(jiti@2.6.1)(typescript@5.9.3)(yaml@2.8.1) + version: 8.5.1(jiti@2.6.1)(postcss@8.5.6)(typescript@5.9.3)(yaml@2.8.1) typescript: specifier: ^5.9.3 version: 5.9.3 @@ -352,12 +312,6 @@ importers: '@nanoforge-dev/common': specifier: workspace:^ version: link:../common - class-transformer: - specifier: ^0.5.1 - version: 0.5.1 - class-validator: - specifier: ^0.14.2 - version: 0.14.2 devDependencies: '@favware/cliff-jumper': specifier: ^6.0.0 @@ -379,7 +333,7 @@ importers: version: 3.6.2 tsup: specifier: ^8.5.1 - version: 8.5.1(jiti@2.6.1)(typescript@5.9.3)(yaml@2.8.1) + version: 8.5.1(jiti@2.6.1)(postcss@8.5.6)(typescript@5.9.3)(yaml@2.8.1) typescript: specifier: ^5.9.3 version: 5.9.3 @@ -389,12 +343,6 @@ importers: '@nanoforge-dev/common': specifier: workspace:^ version: link:../common - class-transformer: - specifier: ^0.5.1 - version: 0.5.1 - class-validator: - specifier: ^0.14.2 - version: 0.14.2 devDependencies: '@favware/cliff-jumper': specifier: ^6.0.0 @@ -416,7 +364,7 @@ importers: version: 3.6.2 tsup: specifier: ^8.5.1 - version: 8.5.1(jiti@2.6.1)(typescript@5.9.3)(yaml@2.8.1) + version: 8.5.1(jiti@2.6.1)(postcss@8.5.6)(typescript@5.9.3)(yaml@2.8.1) typescript: specifier: ^5.9.3 version: 5.9.3 @@ -633,6 +581,10 @@ packages: '@bcoe/v8-coverage@0.2.3': resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + '@bcoe/v8-coverage@1.0.2': + resolution: {integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==} + engines: {node: '>=18'} + '@commitlint/cli@20.1.0': resolution: {integrity: sha512-pW5ujjrOovhq5RcYv5xCpb4GkZxkO2+GtOdBW2/qrr0Ll9tl3PX0aBBobGQl3mdZUbOBgwAexEQLeH6uxL0VYg==} engines: {node: '>=v18'} @@ -732,156 +684,312 @@ packages: '@emnapi/wasi-threads@1.1.0': resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==} + '@esbuild/aix-ppc64@0.25.12': + resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + '@esbuild/aix-ppc64@0.27.0': resolution: {integrity: sha512-KuZrd2hRjz01y5JK9mEBSD3Vj3mbCvemhT466rSuJYeE/hjuBrHfjjcjMdTm/sz7au+++sdbJZJmuBwQLuw68A==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] + '@esbuild/android-arm64@0.25.12': + resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + '@esbuild/android-arm64@0.27.0': resolution: {integrity: sha512-CC3vt4+1xZrs97/PKDkl0yN7w8edvU2vZvAFGD16n9F0Cvniy5qvzRXjfO1l94efczkkQE6g1x0i73Qf5uthOQ==} engines: {node: '>=18'} cpu: [arm64] os: [android] + '@esbuild/android-arm@0.25.12': + resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + '@esbuild/android-arm@0.27.0': resolution: {integrity: sha512-j67aezrPNYWJEOHUNLPj9maeJte7uSMM6gMoxfPC9hOg8N02JuQi/T7ewumf4tNvJadFkvLZMlAq73b9uwdMyQ==} engines: {node: '>=18'} cpu: [arm] os: [android] + '@esbuild/android-x64@0.25.12': + resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + '@esbuild/android-x64@0.27.0': resolution: {integrity: sha512-wurMkF1nmQajBO1+0CJmcN17U4BP6GqNSROP8t0X/Jiw2ltYGLHpEksp9MpoBqkrFR3kv2/te6Sha26k3+yZ9Q==} engines: {node: '>=18'} cpu: [x64] os: [android] + '@esbuild/darwin-arm64@0.25.12': + resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + '@esbuild/darwin-arm64@0.27.0': resolution: {integrity: sha512-uJOQKYCcHhg07DL7i8MzjvS2LaP7W7Pn/7uA0B5S1EnqAirJtbyw4yC5jQ5qcFjHK9l6o/MX9QisBg12kNkdHg==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] + '@esbuild/darwin-x64@0.25.12': + resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + '@esbuild/darwin-x64@0.27.0': resolution: {integrity: sha512-8mG6arH3yB/4ZXiEnXof5MK72dE6zM9cDvUcPtxhUZsDjESl9JipZYW60C3JGreKCEP+p8P/72r69m4AZGJd5g==} engines: {node: '>=18'} cpu: [x64] os: [darwin] + '@esbuild/freebsd-arm64@0.25.12': + resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + '@esbuild/freebsd-arm64@0.27.0': resolution: {integrity: sha512-9FHtyO988CwNMMOE3YIeci+UV+x5Zy8fI2qHNpsEtSF83YPBmE8UWmfYAQg6Ux7Gsmd4FejZqnEUZCMGaNQHQw==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] + '@esbuild/freebsd-x64@0.25.12': + resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + '@esbuild/freebsd-x64@0.27.0': resolution: {integrity: sha512-zCMeMXI4HS/tXvJz8vWGexpZj2YVtRAihHLk1imZj4efx1BQzN76YFeKqlDr3bUWI26wHwLWPd3rwh6pe4EV7g==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] + '@esbuild/linux-arm64@0.25.12': + resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + '@esbuild/linux-arm64@0.27.0': resolution: {integrity: sha512-AS18v0V+vZiLJyi/4LphvBE+OIX682Pu7ZYNsdUHyUKSoRwdnOsMf6FDekwoAFKej14WAkOef3zAORJgAtXnlQ==} engines: {node: '>=18'} cpu: [arm64] os: [linux] + '@esbuild/linux-arm@0.25.12': + resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + '@esbuild/linux-arm@0.27.0': resolution: {integrity: sha512-t76XLQDpxgmq2cNXKTVEB7O7YMb42atj2Re2Haf45HkaUpjM2J0UuJZDuaGbPbamzZ7bawyGFUkodL+zcE+jvQ==} engines: {node: '>=18'} cpu: [arm] os: [linux] + '@esbuild/linux-ia32@0.25.12': + resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + '@esbuild/linux-ia32@0.27.0': resolution: {integrity: sha512-Mz1jxqm/kfgKkc/KLHC5qIujMvnnarD9ra1cEcrs7qshTUSksPihGrWHVG5+osAIQ68577Zpww7SGapmzSt4Nw==} engines: {node: '>=18'} cpu: [ia32] os: [linux] + '@esbuild/linux-loong64@0.25.12': + resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + '@esbuild/linux-loong64@0.27.0': resolution: {integrity: sha512-QbEREjdJeIreIAbdG2hLU1yXm1uu+LTdzoq1KCo4G4pFOLlvIspBm36QrQOar9LFduavoWX2msNFAAAY9j4BDg==} engines: {node: '>=18'} cpu: [loong64] os: [linux] + '@esbuild/linux-mips64el@0.25.12': + resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + '@esbuild/linux-mips64el@0.27.0': resolution: {integrity: sha512-sJz3zRNe4tO2wxvDpH/HYJilb6+2YJxo/ZNbVdtFiKDufzWq4JmKAiHy9iGoLjAV7r/W32VgaHGkk35cUXlNOg==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] + '@esbuild/linux-ppc64@0.25.12': + resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + '@esbuild/linux-ppc64@0.27.0': resolution: {integrity: sha512-z9N10FBD0DCS2dmSABDBb5TLAyF1/ydVb+N4pi88T45efQ/w4ohr/F/QYCkxDPnkhkp6AIpIcQKQ8F0ANoA2JA==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] + '@esbuild/linux-riscv64@0.25.12': + resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + '@esbuild/linux-riscv64@0.27.0': resolution: {integrity: sha512-pQdyAIZ0BWIC5GyvVFn5awDiO14TkT/19FTmFcPdDec94KJ1uZcmFs21Fo8auMXzD4Tt+diXu1LW1gHus9fhFQ==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] + '@esbuild/linux-s390x@0.25.12': + resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + '@esbuild/linux-s390x@0.27.0': resolution: {integrity: sha512-hPlRWR4eIDDEci953RI1BLZitgi5uqcsjKMxwYfmi4LcwyWo2IcRP+lThVnKjNtk90pLS8nKdroXYOqW+QQH+w==} engines: {node: '>=18'} cpu: [s390x] os: [linux] + '@esbuild/linux-x64@0.25.12': + resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + '@esbuild/linux-x64@0.27.0': resolution: {integrity: sha512-1hBWx4OUJE2cab++aVZ7pObD6s+DK4mPGpemtnAORBvb5l/g5xFGk0vc0PjSkrDs0XaXj9yyob3d14XqvnQ4gw==} engines: {node: '>=18'} cpu: [x64] os: [linux] + '@esbuild/netbsd-arm64@0.25.12': + resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + '@esbuild/netbsd-arm64@0.27.0': resolution: {integrity: sha512-6m0sfQfxfQfy1qRuecMkJlf1cIzTOgyaeXaiVaaki8/v+WB+U4hc6ik15ZW6TAllRlg/WuQXxWj1jx6C+dfy3w==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] + '@esbuild/netbsd-x64@0.25.12': + resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + '@esbuild/netbsd-x64@0.27.0': resolution: {integrity: sha512-xbbOdfn06FtcJ9d0ShxxvSn2iUsGd/lgPIO2V3VZIPDbEaIj1/3nBBe1AwuEZKXVXkMmpr6LUAgMkLD/4D2PPA==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] + '@esbuild/openbsd-arm64@0.25.12': + resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + '@esbuild/openbsd-arm64@0.27.0': resolution: {integrity: sha512-fWgqR8uNbCQ/GGv0yhzttj6sU/9Z5/Sv/VGU3F5OuXK6J6SlriONKrQ7tNlwBrJZXRYk5jUhuWvF7GYzGguBZQ==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] + '@esbuild/openbsd-x64@0.25.12': + resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + '@esbuild/openbsd-x64@0.27.0': resolution: {integrity: sha512-aCwlRdSNMNxkGGqQajMUza6uXzR/U0dIl1QmLjPtRbLOx3Gy3otfFu/VjATy4yQzo9yFDGTxYDo1FfAD9oRD2A==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] + '@esbuild/openharmony-arm64@0.25.12': + resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + '@esbuild/openharmony-arm64@0.27.0': resolution: {integrity: sha512-nyvsBccxNAsNYz2jVFYwEGuRRomqZ149A39SHWk4hV0jWxKM0hjBPm3AmdxcbHiFLbBSwG6SbpIcUbXjgyECfA==} engines: {node: '>=18'} cpu: [arm64] os: [openharmony] + '@esbuild/sunos-x64@0.25.12': + resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + '@esbuild/sunos-x64@0.27.0': resolution: {integrity: sha512-Q1KY1iJafM+UX6CFEL+F4HRTgygmEW568YMqDA5UV97AuZSm21b7SXIrRJDwXWPzr8MGr75fUZPV67FdtMHlHA==} engines: {node: '>=18'} cpu: [x64] os: [sunos] + '@esbuild/win32-arm64@0.25.12': + resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + '@esbuild/win32-arm64@0.27.0': resolution: {integrity: sha512-W1eyGNi6d+8kOmZIwi/EDjrL9nxQIQ0MiGqe/AWc6+IaHloxHSGoeRgDRKHFISThLmsewZ5nHFvGFWdBYlgKPg==} engines: {node: '>=18'} cpu: [arm64] os: [win32] + '@esbuild/win32-ia32@0.25.12': + resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + '@esbuild/win32-ia32@0.27.0': resolution: {integrity: sha512-30z1aKL9h22kQhilnYkORFYt+3wp7yZsHWus+wSKAJR8JtdfI76LJ4SBdMsCopTR3z/ORqVu5L1vtnHZWVj4cQ==} engines: {node: '>=18'} cpu: [ia32] os: [win32] + '@esbuild/win32-x64@0.25.12': + resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + '@esbuild/win32-x64@0.27.0': resolution: {integrity: sha512-aIitBcjQeyOhMTImhLZmtxfdOcuNRpwlPNmlFKPcHQYPhEssw75Cl1TSXJXpMkzaua9FUetx/4OQKq7eJul5Cg==} engines: {node: '>=18'} @@ -1246,6 +1354,9 @@ packages: '@sinonjs/fake-timers@13.0.5': resolution: {integrity: sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw==} + '@standard-schema/spec@1.0.0': + resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==} + '@trivago/prettier-plugin-sort-imports@6.0.0': resolution: {integrity: sha512-Xarx55ow0R8oC7ViL5fPmDsg1EBa1dVhyZFVbFXNtPPJyW2w9bJADIla8YFSaNG9N06XfcklA9O9vmw4noNxkQ==} engines: {node: '>= 20'} @@ -1280,9 +1391,15 @@ packages: '@types/babel__traverse@7.28.0': resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==} + '@types/chai@5.2.3': + resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} + '@types/conventional-commits-parser@5.0.2': resolution: {integrity: sha512-BgT2szDXnVypgpNxOK8aL5SGjUdaQbC++WZNjF1Qge3Og2+zhHj+RWhmehLhYyvQwqAmvezruVfOf8+3m74W+g==} + '@types/deep-eql@4.0.2': + resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} + '@types/eslint@9.6.1': resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} @@ -1298,9 +1415,6 @@ packages: '@types/istanbul-reports@3.0.4': resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} - '@types/jest@30.0.0': - resolution: {integrity: sha512-XTYugzhuwqWjws0CVz8QpM36+T+Dz5mTEBKhNs/esGLnCIlGdRy+Dq78NRjd7ls7r8BC8ZRMOrKlkO1hU0JOwA==} - '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} @@ -1479,6 +1593,44 @@ packages: cpu: [x64] os: [win32] + '@vitest/coverage-v8@4.0.15': + resolution: {integrity: sha512-FUJ+1RkpTFW7rQITdgTi93qOCWJobWhBirEPCeXh2SW2wsTlFxy51apDz5gzG+ZEYt/THvWeNmhdAoS9DTwpCw==} + peerDependencies: + '@vitest/browser': 4.0.15 + vitest: 4.0.15 + peerDependenciesMeta: + '@vitest/browser': + optional: true + + '@vitest/expect@4.0.15': + resolution: {integrity: sha512-Gfyva9/GxPAWXIWjyGDli9O+waHDC0Q0jaLdFP1qPAUUfo1FEXPXUfUkp3eZA0sSq340vPycSyOlYUeM15Ft1w==} + + '@vitest/mocker@4.0.15': + resolution: {integrity: sha512-CZ28GLfOEIFkvCFngN8Sfx5h+Se0zN+h4B7yOsPVCcgtiO7t5jt9xQh2E1UkFep+eb9fjyMfuC5gBypwb07fvQ==} + peerDependencies: + msw: ^2.4.9 + vite: ^6.0.0 || ^7.0.0-0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + + '@vitest/pretty-format@4.0.15': + resolution: {integrity: sha512-SWdqR8vEv83WtZcrfLNqlqeQXlQLh2iilO1Wk1gv4eiHKjEzvgHb2OVc3mIPyhZE6F+CtfYjNlDJwP5MN6Km7A==} + + '@vitest/runner@4.0.15': + resolution: {integrity: sha512-+A+yMY8dGixUhHmNdPUxOh0la6uVzun86vAbuMT3hIDxMrAOmn5ILBHm8ajrqHE0t8R9T1dGnde1A5DTnmi3qw==} + + '@vitest/snapshot@4.0.15': + resolution: {integrity: sha512-A7Ob8EdFZJIBjLjeO0DZF4lqR6U7Ydi5/5LIZ0xcI+23lYlsYJAfGn8PrIWTYdZQRNnSRlzhg0zyGu37mVdy5g==} + + '@vitest/spy@4.0.15': + resolution: {integrity: sha512-+EIjOJmnY6mIfdXtE/bnozKEvTC4Uczg19yeZ2vtCz5Yyb0QQ31QWVQ8hswJ3Ysx/K2EqaNsVanjr//2+P3FHw==} + + '@vitest/utils@4.0.15': + resolution: {integrity: sha512-HXjPW2w5dxhTD0dLwtYHDnelK3j8sR8cWIaLxr22evTyY6q8pRCjZSmhRWVjBaOVXChQd6AwMzi9pucorXCPZA==} + JSONStream@1.3.5: resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} hasBin: true @@ -1543,6 +1695,13 @@ packages: array-ify@1.0.0: resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} + assertion-error@2.0.1: + resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} + engines: {node: '>=12'} + + ast-v8-to-istanbul@0.3.8: + resolution: {integrity: sha512-szgSZqUxI5T8mLKvS7WTjF9is+MVbOeLADU73IseOcrqhxr/VAvy6wfoVE39KnKzA7JRhjF5eUagNlHwvZPlKQ==} + babel-jest@30.2.0: resolution: {integrity: sha512-0YiBEOxWqKkSQWL9nNGGEgndoeL0ZpWrbLMNL5u/Kaxrli3Eaxlt3ZtIDktEvXt4L/R9r3ODr2zKwGM/2BjxVw==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} @@ -1596,10 +1755,6 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true - bs-logger@0.2.6: - resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} - engines: {node: '>= 6'} - bser@2.1.1: resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} @@ -1631,6 +1786,10 @@ packages: caniuse-lite@1.0.30001756: resolution: {integrity: sha512-4HnCNKbMLkLdhJz3TToeVWHSnfJvPaq6vu/eRP0Ahub/07n484XHhBF5AJoSGHdVrS8tKFauUQz8Bp9P7LVx7A==} + chai@6.2.1: + resolution: {integrity: sha512-p4Z49OGG5W/WBCPSS/dH3jQ73kD6tiMmUM+bckNK6Jr5JHMG3k9bg/BvKR8lKmtVBKmOiuVaV2ws8s9oSbwysg==} + engines: {node: '>=18'} + chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} @@ -1835,6 +1994,14 @@ packages: error-ex@1.3.4: resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} + es-module-lexer@1.7.0: + resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} + + esbuild@0.25.12: + resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==} + engines: {node: '>=18'} + hasBin: true + esbuild@0.27.0: resolution: {integrity: sha512-jd0f4NHbD6cALCyGElNpGAOtWxSq46l9X/sWB0Nzd5er4Kz2YTm+Vl0qKFT9KUJvD8+fiO8AvoHhFvEatfVixA==} engines: {node: '>=18'} @@ -1948,6 +2115,9 @@ packages: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + esutils@2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} @@ -1967,6 +2137,10 @@ packages: resolution: {integrity: sha512-+I6B/IkJc1o/2tiURyz/ivu/O0nKNEArIUB5O7zBrlDVJr22SCLH3xTeEry428LvFhRzIA1g8izguxJ/gbNcVQ==} engines: {node: '>= 0.8.0'} + expect-type@1.2.2: + resolution: {integrity: sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA==} + engines: {node: '>=12.0.0'} + expect@30.2.0: resolution: {integrity: sha512-u/feCi0GPsI+988gU2FLcsHyAHTU0MX1Wg68NhAnN7z/+C5wqG+CY8J53N9ioe8RXgaoz0nBR/TYMf3AycUuPw==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} @@ -2141,11 +2315,6 @@ packages: graphemer@1.4.0: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - handlebars@4.7.8: - resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} - engines: {node: '>=0.4.7'} - hasBin: true - has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} @@ -2428,6 +2597,9 @@ packages: js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + js-tokens@9.0.1: + resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} + js-yaml@3.14.2: resolution: {integrity: sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==} hasBin: true @@ -2530,9 +2702,6 @@ packages: lodash.kebabcase@4.1.1: resolution: {integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==} - lodash.memoize@4.1.2: - resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} - lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} @@ -2568,13 +2737,13 @@ packages: magic-string@0.30.21: resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + magicast@0.5.1: + resolution: {integrity: sha512-xrHS24IxaLrvuo613F719wvOIv9xPHFWQHuvGUBmPnCA/3MQxKI3b+r7n1jAoDHmsbC5bRhTZYR77invLAxVnw==} + make-dir@4.0.0: resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} engines: {node: '>=10'} - make-error@1.3.6: - resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} - makeerror@1.0.12: resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} @@ -2628,6 +2797,11 @@ packages: resolution: {integrity: sha512-tacvGzUY5o2D8CBh2rrwxyNojUsZNU2zjNTzKQrkgGJQTbGAfArVWXSKMBokBeeg6C7OLRGUEyoFlYbfeWQIqw==} engines: {node: '>=20.17'} + nanoid@3.3.11: + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + napi-postinstall@0.3.4: resolution: {integrity: sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} @@ -2636,9 +2810,6 @@ packages: natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - neo-async@2.6.2: - resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - node-int64@0.4.0: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} @@ -2661,6 +2832,9 @@ packages: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} + obug@2.1.1: + resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==} + once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} @@ -2801,6 +2975,10 @@ packages: yaml: optional: true + postcss@8.5.6: + resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} + engines: {node: ^10 || ^12 || >=14} + prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -2872,11 +3050,6 @@ packages: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true - semver@7.7.2: - resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} - engines: {node: '>=10'} - hasBin: true - semver@7.7.3: resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==} engines: {node: '>=10'} @@ -2890,6 +3063,9 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} + siginfo@2.0.0: + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} @@ -2909,6 +3085,10 @@ packages: resolution: {integrity: sha512-QlaZEqcAH3/RtNyet1IPIYPsEWAaYyXXv1Krsi+1L/QHppjX4Ifm8MQsBISz9vE8cHicIq3clogsheili5vhaQ==} engines: {node: '>= 18'} + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + source-map-support@0.5.13: resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} @@ -2931,6 +3111,12 @@ packages: resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} engines: {node: '>=10'} + stackback@0.0.2: + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + + std-env@3.10.0: + resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} + string-argv@0.3.2: resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} engines: {node: '>=0.6.19'} @@ -3026,6 +3212,9 @@ packages: through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + tinybench@2.9.0: + resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} + tinyexec@0.3.2: resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} @@ -3037,6 +3226,10 @@ packages: resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} engines: {node: '>=12.0.0'} + tinyrainbow@3.0.3: + resolution: {integrity: sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==} + engines: {node: '>=14.0.0'} + tmpl@1.0.5: resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} @@ -3057,33 +3250,6 @@ packages: ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - ts-jest@29.4.5: - resolution: {integrity: sha512-HO3GyiWn2qvTQA4kTgjDcXiMwYQt68a1Y8+JuLRVpdIzm+UOLSHgl/XqR4c6nzJkq5rOkjc02O2I7P7l/Yof0Q==} - engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0} - hasBin: true - peerDependencies: - '@babel/core': '>=7.0.0-beta.0 <8' - '@jest/transform': ^29.0.0 || ^30.0.0 - '@jest/types': ^29.0.0 || ^30.0.0 - babel-jest: ^29.0.0 || ^30.0.0 - esbuild: '*' - jest: ^29.0.0 || ^30.0.0 - jest-util: ^29.0.0 || ^30.0.0 - typescript: '>=4.3 <6' - peerDependenciesMeta: - '@babel/core': - optional: true - '@jest/transform': - optional: true - '@jest/types': - optional: true - babel-jest: - optional: true - esbuild: - optional: true - jest-util: - optional: true - tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} @@ -3152,10 +3318,6 @@ packages: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} - type-fest@4.41.0: - resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} - engines: {node: '>=16'} - typescript-eslint@8.48.1: resolution: {integrity: sha512-FbOKN1fqNoXp1hIl5KYpObVrp0mCn+CLgn479nmu2IsRMrx2vyv74MmsBLVlhg8qVwNFGbXSp8fh1zp8pEoC2A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -3171,11 +3333,6 @@ packages: ufo@1.6.1: resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==} - uglify-js@3.19.3: - resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==} - engines: {node: '>=0.8.0'} - hasBin: true - undici-types@7.16.0: resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} @@ -3210,6 +3367,80 @@ packages: resolution: {integrity: sha512-4yoz1kEWqUjzi5zsPbAS/903QXSYp0UOtHsPpp7p9rHAw/W+dkInskAE386Fat3oKRROwO98d9ZB0G4cObgUyw==} engines: {node: '>= 0.10'} + vite@7.2.6: + resolution: {integrity: sha512-tI2l/nFHC5rLh7+5+o7QjKjSR04ivXDF4jcgV0f/bTQ+OJiITy5S6gaynVsEM+7RqzufMnVbIon6Sr5x1SDYaQ==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + '@types/node': ^20.19.0 || >=22.12.0 + jiti: '>=1.21.0' + less: ^4.0.0 + lightningcss: ^1.21.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: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + + vitest@4.0.15: + resolution: {integrity: sha512-n1RxDp8UJm6N0IbJLQo+yzLZ2sQCDyl1o0LeugbPWf8+8Fttp29GghsQBjYJVmWq3gBFfe9Hs1spR44vovn2wA==} + engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@opentelemetry/api': ^1.9.0 + '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 + '@vitest/browser-playwright': 4.0.15 + '@vitest/browser-preview': 4.0.15 + '@vitest/browser-webdriverio': 4.0.15 + '@vitest/ui': 4.0.15 + happy-dom: '*' + jsdom: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@opentelemetry/api': + optional: true + '@types/node': + optional: true + '@vitest/browser-playwright': + optional: true + '@vitest/browser-preview': + optional: true + '@vitest/browser-webdriverio': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + walker@1.0.8: resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} @@ -3218,12 +3449,14 @@ packages: engines: {node: '>= 8'} hasBin: true - word-wrap@1.2.5: - resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} - engines: {node: '>=0.10.0'} + why-is-node-running@2.3.0: + resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} + engines: {node: '>=8'} + hasBin: true - wordwrap@1.0.0: - resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} @@ -3284,7 +3517,8 @@ snapshots: js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/compat-data@7.28.5': {} + '@babel/compat-data@7.28.5': + optional: true '@babel/core@7.28.5': dependencies: @@ -3305,6 +3539,7 @@ snapshots: semver: 6.3.1 transitivePeerDependencies: - supports-color + optional: true '@babel/generator@7.28.5': dependencies: @@ -3321,6 +3556,7 @@ snapshots: browserslist: 4.28.0 lru-cache: 5.1.1 semver: 6.3.1 + optional: true '@babel/helper-globals@7.28.0': {} @@ -3330,6 +3566,7 @@ snapshots: '@babel/types': 7.28.5 transitivePeerDependencies: - supports-color + optional: true '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.5)': dependencies: @@ -3339,19 +3576,23 @@ snapshots: '@babel/traverse': 7.28.5 transitivePeerDependencies: - supports-color + optional: true - '@babel/helper-plugin-utils@7.27.1': {} + '@babel/helper-plugin-utils@7.27.1': + optional: true '@babel/helper-string-parser@7.27.1': {} '@babel/helper-validator-identifier@7.28.5': {} - '@babel/helper-validator-option@7.27.1': {} + '@babel/helper-validator-option@7.27.1': + optional: true '@babel/helpers@7.28.4': dependencies: '@babel/template': 7.27.2 '@babel/types': 7.28.5 + optional: true '@babel/parser@7.28.5': dependencies: @@ -3361,86 +3602,103 @@ snapshots: dependencies: '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 + optional: true '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.28.5)': dependencies: '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 + optional: true '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.28.5)': dependencies: '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 + optional: true '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.28.5)': dependencies: '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 + optional: true '@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.28.5)': dependencies: '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 + optional: true '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.28.5)': dependencies: '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 + optional: true '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.28.5)': dependencies: '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 + optional: true '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.5)': dependencies: '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 + optional: true '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.28.5)': dependencies: '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 + optional: true '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.28.5)': dependencies: '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 + optional: true '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.28.5)': dependencies: '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 + optional: true '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.28.5)': dependencies: '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 + optional: true '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.28.5)': dependencies: '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 + optional: true '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.28.5)': dependencies: '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 + optional: true '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.28.5)': dependencies: '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 + optional: true '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.28.5)': dependencies: '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 + optional: true '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.28.5)': dependencies: '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 + optional: true '@babel/template@7.27.2': dependencies: @@ -3465,7 +3723,10 @@ snapshots: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.28.5 - '@bcoe/v8-coverage@0.2.3': {} + '@bcoe/v8-coverage@0.2.3': + optional: true + + '@bcoe/v8-coverage@1.0.2': {} '@commitlint/cli@20.1.0(@types/node@24.10.1)(typescript@5.9.3)': dependencies: @@ -3607,81 +3868,159 @@ snapshots: tslib: 2.8.1 optional: true + '@esbuild/aix-ppc64@0.25.12': + optional: true + '@esbuild/aix-ppc64@0.27.0': optional: true + '@esbuild/android-arm64@0.25.12': + optional: true + '@esbuild/android-arm64@0.27.0': optional: true + '@esbuild/android-arm@0.25.12': + optional: true + '@esbuild/android-arm@0.27.0': optional: true + '@esbuild/android-x64@0.25.12': + optional: true + '@esbuild/android-x64@0.27.0': optional: true + '@esbuild/darwin-arm64@0.25.12': + optional: true + '@esbuild/darwin-arm64@0.27.0': optional: true + '@esbuild/darwin-x64@0.25.12': + optional: true + '@esbuild/darwin-x64@0.27.0': optional: true + '@esbuild/freebsd-arm64@0.25.12': + optional: true + '@esbuild/freebsd-arm64@0.27.0': optional: true + '@esbuild/freebsd-x64@0.25.12': + optional: true + '@esbuild/freebsd-x64@0.27.0': optional: true + '@esbuild/linux-arm64@0.25.12': + optional: true + '@esbuild/linux-arm64@0.27.0': optional: true + '@esbuild/linux-arm@0.25.12': + optional: true + '@esbuild/linux-arm@0.27.0': optional: true + '@esbuild/linux-ia32@0.25.12': + optional: true + '@esbuild/linux-ia32@0.27.0': optional: true + '@esbuild/linux-loong64@0.25.12': + optional: true + '@esbuild/linux-loong64@0.27.0': optional: true + '@esbuild/linux-mips64el@0.25.12': + optional: true + '@esbuild/linux-mips64el@0.27.0': optional: true + '@esbuild/linux-ppc64@0.25.12': + optional: true + '@esbuild/linux-ppc64@0.27.0': optional: true + '@esbuild/linux-riscv64@0.25.12': + optional: true + '@esbuild/linux-riscv64@0.27.0': optional: true + '@esbuild/linux-s390x@0.25.12': + optional: true + '@esbuild/linux-s390x@0.27.0': optional: true + '@esbuild/linux-x64@0.25.12': + optional: true + '@esbuild/linux-x64@0.27.0': optional: true + '@esbuild/netbsd-arm64@0.25.12': + optional: true + '@esbuild/netbsd-arm64@0.27.0': optional: true + '@esbuild/netbsd-x64@0.25.12': + optional: true + '@esbuild/netbsd-x64@0.27.0': optional: true + '@esbuild/openbsd-arm64@0.25.12': + optional: true + '@esbuild/openbsd-arm64@0.27.0': optional: true + '@esbuild/openbsd-x64@0.25.12': + optional: true + '@esbuild/openbsd-x64@0.27.0': optional: true + '@esbuild/openharmony-arm64@0.25.12': + optional: true + '@esbuild/openharmony-arm64@0.27.0': optional: true + '@esbuild/sunos-x64@0.25.12': + optional: true + '@esbuild/sunos-x64@0.27.0': optional: true + '@esbuild/win32-arm64@0.25.12': + optional: true + '@esbuild/win32-arm64@0.27.0': optional: true + '@esbuild/win32-ia32@0.25.12': + optional: true + '@esbuild/win32-ia32@0.27.0': optional: true + '@esbuild/win32-x64@0.25.12': + optional: true + '@esbuild/win32-x64@0.27.0': optional: true @@ -3771,6 +4110,7 @@ snapshots: strip-ansi-cjs: strip-ansi@6.0.1 wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 + optional: true '@istanbuljs/load-nyc-config@1.1.0': dependencies: @@ -3779,8 +4119,10 @@ snapshots: get-package-type: 0.1.0 js-yaml: 3.14.2 resolve-from: 5.0.0 + optional: true - '@istanbuljs/schema@0.1.3': {} + '@istanbuljs/schema@0.1.3': + optional: true '@jest/console@30.2.0': dependencies: @@ -3790,6 +4132,7 @@ snapshots: jest-message-util: 30.2.0 jest-util: 30.2.0 slash: 3.0.0 + optional: true '@jest/core@30.2.0': dependencies: @@ -3826,8 +4169,10 @@ snapshots: - esbuild-register - supports-color - ts-node + optional: true - '@jest/diff-sequences@30.0.1': {} + '@jest/diff-sequences@30.0.1': + optional: true '@jest/environment@30.2.0': dependencies: @@ -3835,10 +4180,12 @@ snapshots: '@jest/types': 30.2.0 '@types/node': 24.10.1 jest-mock: 30.2.0 + optional: true '@jest/expect-utils@30.2.0': dependencies: '@jest/get-type': 30.1.0 + optional: true '@jest/expect@30.2.0': dependencies: @@ -3846,6 +4193,7 @@ snapshots: jest-snapshot: 30.2.0 transitivePeerDependencies: - supports-color + optional: true '@jest/fake-timers@30.2.0': dependencies: @@ -3855,8 +4203,10 @@ snapshots: jest-message-util: 30.2.0 jest-mock: 30.2.0 jest-util: 30.2.0 + optional: true - '@jest/get-type@30.1.0': {} + '@jest/get-type@30.1.0': + optional: true '@jest/globals@30.2.0': dependencies: @@ -3866,11 +4216,13 @@ snapshots: jest-mock: 30.2.0 transitivePeerDependencies: - supports-color + optional: true '@jest/pattern@30.0.1': dependencies: '@types/node': 24.10.1 jest-regex-util: 30.0.1 + optional: true '@jest/reporters@30.2.0': dependencies: @@ -3899,10 +4251,12 @@ snapshots: v8-to-istanbul: 9.3.0 transitivePeerDependencies: - supports-color + optional: true '@jest/schemas@30.0.5': dependencies: '@sinclair/typebox': 0.34.41 + optional: true '@jest/snapshot-utils@30.2.0': dependencies: @@ -3910,12 +4264,14 @@ snapshots: chalk: 4.1.2 graceful-fs: 4.2.11 natural-compare: 1.4.0 + optional: true '@jest/source-map@30.0.1': dependencies: '@jridgewell/trace-mapping': 0.3.31 callsites: 3.1.0 graceful-fs: 4.2.11 + optional: true '@jest/test-result@30.2.0': dependencies: @@ -3923,6 +4279,7 @@ snapshots: '@jest/types': 30.2.0 '@types/istanbul-lib-coverage': 2.0.6 collect-v8-coverage: 1.0.3 + optional: true '@jest/test-sequencer@30.2.0': dependencies: @@ -3930,6 +4287,7 @@ snapshots: graceful-fs: 4.2.11 jest-haste-map: 30.2.0 slash: 3.0.0 + optional: true '@jest/transform@30.2.0': dependencies: @@ -3950,6 +4308,7 @@ snapshots: write-file-atomic: 5.0.1 transitivePeerDependencies: - supports-color + optional: true '@jest/types@30.2.0': dependencies: @@ -3960,6 +4319,7 @@ snapshots: '@types/node': 24.10.1 '@types/yargs': 17.0.35 chalk: 4.1.2 + optional: true '@jridgewell/gen-mapping@0.3.13': dependencies: @@ -3970,6 +4330,7 @@ snapshots: dependencies: '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 + optional: true '@jridgewell/resolve-uri@3.1.2': {} @@ -4114,17 +4475,22 @@ snapshots: '@sec-ant/readable-stream@0.4.1': {} - '@sinclair/typebox@0.34.41': {} + '@sinclair/typebox@0.34.41': + optional: true '@sindresorhus/merge-streams@4.0.0': {} '@sinonjs/commons@3.0.1': dependencies: type-detect: 4.0.8 + optional: true '@sinonjs/fake-timers@13.0.5': dependencies: '@sinonjs/commons': 3.0.1 + optional: true + + '@standard-schema/spec@1.0.0': {} '@trivago/prettier-plugin-sort-imports@6.0.0(prettier@3.6.2)': dependencies: @@ -4152,24 +4518,35 @@ snapshots: '@types/babel__generator': 7.27.0 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.28.0 + optional: true '@types/babel__generator@7.27.0': dependencies: '@babel/types': 7.28.5 + optional: true '@types/babel__template@7.4.4': dependencies: '@babel/parser': 7.28.5 '@babel/types': 7.28.5 + optional: true '@types/babel__traverse@7.28.0': dependencies: '@babel/types': 7.28.5 + optional: true + + '@types/chai@5.2.3': + dependencies: + '@types/deep-eql': 4.0.2 + assertion-error: 2.0.1 '@types/conventional-commits-parser@5.0.2': dependencies: '@types/node': 24.10.1 + '@types/deep-eql@4.0.2': {} + '@types/eslint@9.6.1': dependencies: '@types/estree': 1.0.8 @@ -4177,20 +4554,18 @@ snapshots: '@types/estree@1.0.8': {} - '@types/istanbul-lib-coverage@2.0.6': {} + '@types/istanbul-lib-coverage@2.0.6': + optional: true '@types/istanbul-lib-report@3.0.3': dependencies: '@types/istanbul-lib-coverage': 2.0.6 + optional: true '@types/istanbul-reports@3.0.4': dependencies: '@types/istanbul-lib-report': 3.0.3 - - '@types/jest@30.0.0': - dependencies: - expect: 30.2.0 - pretty-format: 30.2.0 + optional: true '@types/json-schema@7.0.15': {} @@ -4200,15 +4575,18 @@ snapshots: '@types/semver@7.7.1': {} - '@types/stack-utils@2.0.3': {} + '@types/stack-utils@2.0.3': + optional: true '@types/validator@13.15.10': {} - '@types/yargs-parser@21.0.3': {} + '@types/yargs-parser@21.0.3': + optional: true '@types/yargs@17.0.35': dependencies: '@types/yargs-parser': 21.0.3 + optional: true '@typescript-eslint/eslint-plugin@8.48.1(@typescript-eslint/parser@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)': dependencies: @@ -4302,7 +4680,8 @@ snapshots: '@typescript-eslint/types': 8.48.1 eslint-visitor-keys: 4.2.1 - '@ungap/structured-clone@1.3.0': {} + '@ungap/structured-clone@1.3.0': + optional: true '@unrs/resolver-binding-android-arm-eabi@1.11.1': optional: true @@ -4363,6 +4742,62 @@ snapshots: '@unrs/resolver-binding-win32-x64-msvc@1.11.1': optional: true + '@vitest/coverage-v8@4.0.15(vitest@4.0.15(@types/node@24.10.1)(jiti@2.6.1)(yaml@2.8.1))': + dependencies: + '@bcoe/v8-coverage': 1.0.2 + '@vitest/utils': 4.0.15 + ast-v8-to-istanbul: 0.3.8 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-report: 3.0.1 + istanbul-lib-source-maps: 5.0.6 + istanbul-reports: 3.2.0 + magicast: 0.5.1 + obug: 2.1.1 + std-env: 3.10.0 + tinyrainbow: 3.0.3 + vitest: 4.0.15(@types/node@24.10.1)(jiti@2.6.1)(yaml@2.8.1) + transitivePeerDependencies: + - supports-color + + '@vitest/expect@4.0.15': + dependencies: + '@standard-schema/spec': 1.0.0 + '@types/chai': 5.2.3 + '@vitest/spy': 4.0.15 + '@vitest/utils': 4.0.15 + chai: 6.2.1 + tinyrainbow: 3.0.3 + + '@vitest/mocker@4.0.15(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(yaml@2.8.1))': + dependencies: + '@vitest/spy': 4.0.15 + estree-walker: 3.0.3 + magic-string: 0.30.21 + optionalDependencies: + vite: 7.2.6(@types/node@24.10.1)(jiti@2.6.1)(yaml@2.8.1) + + '@vitest/pretty-format@4.0.15': + dependencies: + tinyrainbow: 3.0.3 + + '@vitest/runner@4.0.15': + dependencies: + '@vitest/utils': 4.0.15 + pathe: 2.0.3 + + '@vitest/snapshot@4.0.15': + dependencies: + '@vitest/pretty-format': 4.0.15 + magic-string: 0.30.21 + pathe: 2.0.3 + + '@vitest/spy@4.0.15': {} + + '@vitest/utils@4.0.15': + dependencies: + '@vitest/pretty-format': 4.0.15 + tinyrainbow: 3.0.3 + JSONStream@1.3.5: dependencies: jsonparse: 1.3.1 @@ -4391,6 +4826,7 @@ snapshots: ansi-escapes@4.3.2: dependencies: type-fest: 0.21.3 + optional: true ansi-escapes@7.2.0: dependencies: @@ -4404,7 +4840,8 @@ snapshots: dependencies: color-convert: 2.0.1 - ansi-styles@5.2.0: {} + ansi-styles@5.2.0: + optional: true ansi-styles@6.2.3: {} @@ -4414,15 +4851,25 @@ snapshots: dependencies: normalize-path: 3.0.0 picomatch: 2.3.1 + optional: true argparse@1.0.10: dependencies: sprintf-js: 1.0.3 + optional: true argparse@2.0.1: {} array-ify@1.0.0: {} + assertion-error@2.0.1: {} + + ast-v8-to-istanbul@0.3.8: + dependencies: + '@jridgewell/trace-mapping': 0.3.31 + estree-walker: 3.0.3 + js-tokens: 9.0.1 + babel-jest@30.2.0(@babel/core@7.28.5): dependencies: '@babel/core': 7.28.5 @@ -4435,6 +4882,7 @@ snapshots: slash: 3.0.0 transitivePeerDependencies: - supports-color + optional: true babel-plugin-istanbul@7.0.1: dependencies: @@ -4445,10 +4893,12 @@ snapshots: test-exclude: 6.0.0 transitivePeerDependencies: - supports-color + optional: true babel-plugin-jest-hoist@30.2.0: dependencies: '@types/babel__core': 7.20.5 + optional: true babel-preset-current-node-syntax@1.2.0(@babel/core@7.28.5): dependencies: @@ -4468,16 +4918,19 @@ snapshots: '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.28.5) '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.28.5) '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.28.5) + optional: true babel-preset-jest@30.2.0(@babel/core@7.28.5): dependencies: '@babel/core': 7.28.5 babel-plugin-jest-hoist: 30.2.0 babel-preset-current-node-syntax: 1.2.0(@babel/core@7.28.5) + optional: true balanced-match@1.0.2: {} - baseline-browser-mapping@2.8.29: {} + baseline-browser-mapping@2.8.29: + optional: true before-after-hook@3.0.2: {} @@ -4503,16 +4956,15 @@ snapshots: electron-to-chromium: 1.5.257 node-releases: 2.0.27 update-browserslist-db: 1.1.4(browserslist@4.28.0) - - bs-logger@0.2.6: - dependencies: - fast-json-stable-stringify: 2.1.0 + optional: true bser@2.1.1: dependencies: node-int64: 0.4.0 + optional: true - buffer-from@1.1.2: {} + buffer-from@1.1.2: + optional: true bundle-require@5.1.0(esbuild@0.27.0): dependencies: @@ -4523,11 +4975,16 @@ snapshots: callsites@3.1.0: {} - camelcase@5.3.1: {} + camelcase@5.3.1: + optional: true - camelcase@6.3.0: {} + camelcase@6.3.0: + optional: true + + caniuse-lite@1.0.30001756: + optional: true - caniuse-lite@1.0.30001756: {} + chai@6.2.1: {} chalk@4.1.2: dependencies: @@ -4536,15 +4993,18 @@ snapshots: chalk@5.6.2: {} - char-regex@1.0.2: {} + char-regex@1.0.2: + optional: true chokidar@4.0.3: dependencies: readdirp: 4.1.2 - ci-info@4.3.1: {} + ci-info@4.3.1: + optional: true - cjs-module-lexer@2.1.1: {} + cjs-module-lexer@2.1.1: + optional: true class-transformer@0.5.1: {} @@ -4569,9 +5029,11 @@ snapshots: strip-ansi: 6.0.1 wrap-ansi: 7.0.0 - co@4.6.0: {} + co@4.6.0: + optional: true - collect-v8-coverage@1.0.3: {} + collect-v8-coverage@1.0.3: + optional: true color-convert@2.0.1: dependencies: @@ -4629,7 +5091,8 @@ snapshots: conventional-commits-parser: 6.2.1 meow: 13.2.0 - convert-source-map@2.0.0: {} + convert-source-map@2.0.0: + optional: true cosmiconfig-typescript-loader@6.2.0(@types/node@24.10.1)(cosmiconfig@9.0.0(typescript@5.9.3))(typescript@5.9.3): dependencies: @@ -4659,29 +5122,36 @@ snapshots: dependencies: ms: 2.1.3 - dedent@1.7.0: {} + dedent@1.7.0: + optional: true deep-is@0.1.4: {} - deepmerge@4.3.1: {} + deepmerge@4.3.1: + optional: true - detect-newline@3.1.0: {} + detect-newline@3.1.0: + optional: true dot-prop@5.3.0: dependencies: is-obj: 2.0.0 - eastasianwidth@0.2.0: {} + eastasianwidth@0.2.0: + optional: true - electron-to-chromium@1.5.257: {} + electron-to-chromium@1.5.257: + optional: true - emittery@0.13.1: {} + emittery@0.13.1: + optional: true emoji-regex@10.6.0: {} emoji-regex@8.0.0: {} - emoji-regex@9.2.2: {} + emoji-regex@9.2.2: + optional: true env-paths@2.2.1: {} @@ -4691,6 +5161,37 @@ snapshots: dependencies: is-arrayish: 0.2.1 + es-module-lexer@1.7.0: {} + + esbuild@0.25.12: + optionalDependencies: + '@esbuild/aix-ppc64': 0.25.12 + '@esbuild/android-arm': 0.25.12 + '@esbuild/android-arm64': 0.25.12 + '@esbuild/android-x64': 0.25.12 + '@esbuild/darwin-arm64': 0.25.12 + '@esbuild/darwin-x64': 0.25.12 + '@esbuild/freebsd-arm64': 0.25.12 + '@esbuild/freebsd-x64': 0.25.12 + '@esbuild/linux-arm': 0.25.12 + '@esbuild/linux-arm64': 0.25.12 + '@esbuild/linux-ia32': 0.25.12 + '@esbuild/linux-loong64': 0.25.12 + '@esbuild/linux-mips64el': 0.25.12 + '@esbuild/linux-ppc64': 0.25.12 + '@esbuild/linux-riscv64': 0.25.12 + '@esbuild/linux-s390x': 0.25.12 + '@esbuild/linux-x64': 0.25.12 + '@esbuild/netbsd-arm64': 0.25.12 + '@esbuild/netbsd-x64': 0.25.12 + '@esbuild/openbsd-arm64': 0.25.12 + '@esbuild/openbsd-x64': 0.25.12 + '@esbuild/openharmony-arm64': 0.25.12 + '@esbuild/sunos-x64': 0.25.12 + '@esbuild/win32-arm64': 0.25.12 + '@esbuild/win32-ia32': 0.25.12 + '@esbuild/win32-x64': 0.25.12 + esbuild@0.27.0: optionalDependencies: '@esbuild/aix-ppc64': 0.27.0 @@ -4722,7 +5223,8 @@ snapshots: escalade@3.2.0: {} - escape-string-regexp@2.0.0: {} + escape-string-regexp@2.0.0: + optional: true escape-string-regexp@4.0.0: {} @@ -4838,7 +5340,8 @@ snapshots: acorn-jsx: 5.3.2(acorn@8.15.0) eslint-visitor-keys: 4.2.1 - esprima@4.0.1: {} + esprima@4.0.1: + optional: true esquery@1.6.0: dependencies: @@ -4850,6 +5353,10 @@ snapshots: estraverse@5.3.0: {} + estree-walker@3.0.3: + dependencies: + '@types/estree': 1.0.8 + esutils@2.0.3: {} eventemitter3@5.0.1: {} @@ -4865,6 +5372,7 @@ snapshots: onetime: 5.1.2 signal-exit: 3.0.7 strip-final-newline: 2.0.0 + optional: true execa@9.6.0: dependencies: @@ -4881,7 +5389,10 @@ snapshots: strip-final-newline: 4.0.0 yoctocolors: 2.1.2 - exit-x@0.2.2: {} + exit-x@0.2.2: + optional: true + + expect-type@1.2.2: {} expect@30.2.0: dependencies: @@ -4891,6 +5402,7 @@ snapshots: jest-message-util: 30.2.0 jest-mock: 30.2.0 jest-util: 30.2.0 + optional: true fast-content-type-parse@2.0.1: {} @@ -4907,6 +5419,7 @@ snapshots: fb-watchman@2.0.2: dependencies: bser: 2.1.1 + optional: true fdir@6.5.0(picomatch@4.0.3): optionalDependencies: @@ -4928,6 +5441,7 @@ snapshots: dependencies: locate-path: 5.0.0 path-exists: 4.0.0 + optional: true find-up@5.0.0: dependencies: @@ -4957,21 +5471,26 @@ snapshots: dependencies: cross-spawn: 7.0.6 signal-exit: 4.1.0 + optional: true - fs.realpath@1.0.0: {} + fs.realpath@1.0.0: + optional: true fsevents@2.3.3: optional: true - gensync@1.0.0-beta.2: {} + gensync@1.0.0-beta.2: + optional: true get-caller-file@2.0.5: {} get-east-asian-width@1.4.0: {} - get-package-type@0.1.0: {} + get-package-type@0.1.0: + optional: true - get-stream@6.0.1: {} + get-stream@6.0.1: + optional: true get-stream@9.0.1: dependencies: @@ -5025,6 +5544,7 @@ snapshots: minipass: 7.1.2 package-json-from-dist: 1.0.1 path-scurry: 1.11.1 + optional: true glob@7.2.3: dependencies: @@ -5034,6 +5554,7 @@ snapshots: minimatch: 3.1.2 once: 1.4.0 path-is-absolute: 1.0.1 + optional: true global-directory@4.0.1: dependencies: @@ -5043,26 +5564,19 @@ snapshots: globals@16.5.0: {} - graceful-fs@4.2.11: {} + graceful-fs@4.2.11: + optional: true graphemer@1.4.0: {} - handlebars@4.7.8: - dependencies: - minimist: 1.2.8 - neo-async: 2.6.2 - source-map: 0.6.1 - wordwrap: 1.0.0 - optionalDependencies: - uglify-js: 3.19.3 - has-flag@4.0.0: {} has-flag@5.0.1: {} html-escaper@2.0.2: {} - human-signals@2.1.0: {} + human-signals@2.1.0: + optional: true human-signals@8.0.1: {} @@ -5081,6 +5595,7 @@ snapshots: dependencies: pkg-dir: 4.2.0 resolve-cwd: 3.0.0 + optional: true import-meta-resolve@4.2.0: {} @@ -5090,8 +5605,10 @@ snapshots: dependencies: once: 1.4.0 wrappy: 1.0.2 + optional: true - inherits@2.0.4: {} + inherits@2.0.4: + optional: true ini@4.1.1: {} @@ -5107,7 +5624,8 @@ snapshots: dependencies: get-east-asian-width: 1.4.0 - is-generator-fn@2.1.0: {} + is-generator-fn@2.1.0: + optional: true is-glob@4.0.3: dependencies: @@ -5119,7 +5637,8 @@ snapshots: is-plain-obj@4.1.0: {} - is-stream@2.0.1: {} + is-stream@2.0.1: + optional: true is-stream@4.0.1: {} @@ -5142,6 +5661,7 @@ snapshots: semver: 7.7.3 transitivePeerDependencies: - supports-color + optional: true istanbul-lib-report@3.0.1: dependencies: @@ -5167,6 +5687,7 @@ snapshots: '@isaacs/cliui': 8.0.2 optionalDependencies: '@pkgjs/parseargs': 0.11.0 + optional: true javascript-natural-sort@0.7.1: {} @@ -5175,6 +5696,7 @@ snapshots: execa: 5.1.1 jest-util: 30.2.0 p-limit: 3.1.0 + optional: true jest-circus@30.2.0: dependencies: @@ -5201,6 +5723,7 @@ snapshots: transitivePeerDependencies: - babel-plugin-macros - supports-color + optional: true jest-cli@30.2.0(@types/node@24.10.1): dependencies: @@ -5220,6 +5743,7 @@ snapshots: - esbuild-register - supports-color - ts-node + optional: true jest-config@30.2.0(@types/node@24.10.1): dependencies: @@ -5252,6 +5776,7 @@ snapshots: transitivePeerDependencies: - babel-plugin-macros - supports-color + optional: true jest-diff@30.2.0: dependencies: @@ -5259,10 +5784,12 @@ snapshots: '@jest/get-type': 30.1.0 chalk: 4.1.2 pretty-format: 30.2.0 + optional: true jest-docblock@30.2.0: dependencies: detect-newline: 3.1.0 + optional: true jest-each@30.2.0: dependencies: @@ -5271,6 +5798,7 @@ snapshots: chalk: 4.1.2 jest-util: 30.2.0 pretty-format: 30.2.0 + optional: true jest-environment-node@30.2.0: dependencies: @@ -5281,6 +5809,7 @@ snapshots: jest-mock: 30.2.0 jest-util: 30.2.0 jest-validate: 30.2.0 + optional: true jest-haste-map@30.2.0: dependencies: @@ -5296,11 +5825,13 @@ snapshots: walker: 1.0.8 optionalDependencies: fsevents: 2.3.3 + optional: true jest-leak-detector@30.2.0: dependencies: '@jest/get-type': 30.1.0 pretty-format: 30.2.0 + optional: true jest-matcher-utils@30.2.0: dependencies: @@ -5308,6 +5839,7 @@ snapshots: chalk: 4.1.2 jest-diff: 30.2.0 pretty-format: 30.2.0 + optional: true jest-message-util@30.2.0: dependencies: @@ -5320,18 +5852,22 @@ snapshots: pretty-format: 30.2.0 slash: 3.0.0 stack-utils: 2.0.6 + optional: true jest-mock@30.2.0: dependencies: '@jest/types': 30.2.0 '@types/node': 24.10.1 jest-util: 30.2.0 + optional: true jest-pnp-resolver@1.2.3(jest-resolve@30.2.0): optionalDependencies: jest-resolve: 30.2.0 + optional: true - jest-regex-util@30.0.1: {} + jest-regex-util@30.0.1: + optional: true jest-resolve-dependencies@30.2.0: dependencies: @@ -5339,6 +5875,7 @@ snapshots: jest-snapshot: 30.2.0 transitivePeerDependencies: - supports-color + optional: true jest-resolve@30.2.0: dependencies: @@ -5350,6 +5887,7 @@ snapshots: jest-validate: 30.2.0 slash: 3.0.0 unrs-resolver: 1.11.1 + optional: true jest-runner@30.2.0: dependencies: @@ -5377,6 +5915,7 @@ snapshots: source-map-support: 0.5.13 transitivePeerDependencies: - supports-color + optional: true jest-runtime@30.2.0: dependencies: @@ -5404,6 +5943,7 @@ snapshots: strip-bom: 4.0.0 transitivePeerDependencies: - supports-color + optional: true jest-snapshot@30.2.0: dependencies: @@ -5430,6 +5970,7 @@ snapshots: synckit: 0.11.11 transitivePeerDependencies: - supports-color + optional: true jest-util@30.2.0: dependencies: @@ -5439,6 +5980,7 @@ snapshots: ci-info: 4.3.1 graceful-fs: 4.2.11 picomatch: 4.0.3 + optional: true jest-validate@30.2.0: dependencies: @@ -5448,6 +5990,7 @@ snapshots: chalk: 4.1.2 leven: 3.1.0 pretty-format: 30.2.0 + optional: true jest-watcher@30.2.0: dependencies: @@ -5459,6 +6002,7 @@ snapshots: emittery: 0.13.1 jest-util: 30.2.0 string-length: 4.0.2 + optional: true jest-worker@30.2.0: dependencies: @@ -5467,6 +6011,7 @@ snapshots: jest-util: 30.2.0 merge-stream: 2.0.0 supports-color: 8.1.1 + optional: true jest@30.2.0(@types/node@24.10.1): dependencies: @@ -5480,6 +6025,7 @@ snapshots: - esbuild-register - supports-color - ts-node + optional: true jiti@2.6.1: {} @@ -5487,10 +6033,13 @@ snapshots: js-tokens@4.0.0: {} + js-tokens@9.0.1: {} + js-yaml@3.14.2: dependencies: argparse: 1.0.10 esprima: 4.0.1 + optional: true js-yaml@4.1.0: dependencies: @@ -5512,7 +6061,8 @@ snapshots: json-stable-stringify-without-jsonify@1.0.1: {} - json5@2.2.3: {} + json5@2.2.3: + optional: true jsonparse@1.3.1: {} @@ -5522,7 +6072,8 @@ snapshots: konva@10.0.12: {} - leven@3.1.0: {} + leven@3.1.0: + optional: true levn@0.4.1: dependencies: @@ -5559,6 +6110,7 @@ snapshots: locate-path@5.0.0: dependencies: p-locate: 4.1.0 + optional: true locate-path@6.0.0: dependencies: @@ -5576,8 +6128,6 @@ snapshots: lodash.kebabcase@4.1.1: {} - lodash.memoize@4.1.2: {} - lodash.merge@4.6.2: {} lodash.mergewith@4.6.2: {} @@ -5603,38 +6153,47 @@ snapshots: strip-ansi: 7.1.2 wrap-ansi: 9.0.2 - lru-cache@10.4.3: {} + lru-cache@10.4.3: + optional: true lru-cache@5.1.1: dependencies: yallist: 3.1.1 + optional: true magic-string@0.30.21: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 - make-dir@4.0.0: + magicast@0.5.1: dependencies: - semver: 7.7.2 + '@babel/parser': 7.28.5 + '@babel/types': 7.28.5 + source-map-js: 1.2.1 - make-error@1.3.6: {} + make-dir@4.0.0: + dependencies: + semver: 7.7.3 makeerror@1.0.12: dependencies: tmpl: 1.0.5 + optional: true meow@12.1.1: {} meow@13.2.0: {} - merge-stream@2.0.0: {} + merge-stream@2.0.0: + optional: true micromatch@4.0.8: dependencies: braces: 3.0.3 picomatch: 2.3.1 - mimic-fn@2.1.0: {} + mimic-fn@2.1.0: + optional: true mimic-function@5.0.1: {} @@ -5648,7 +6207,8 @@ snapshots: minimist@1.2.8: {} - minipass@7.1.2: {} + minipass@7.1.2: + optional: true mlly@1.8.0: dependencies: @@ -5667,21 +6227,26 @@ snapshots: nano-spawn@2.0.0: {} - napi-postinstall@0.3.4: {} + nanoid@3.3.11: {} - natural-compare@1.4.0: {} + napi-postinstall@0.3.4: + optional: true - neo-async@2.6.2: {} + natural-compare@1.4.0: {} - node-int64@0.4.0: {} + node-int64@0.4.0: + optional: true - node-releases@2.0.27: {} + node-releases@2.0.27: + optional: true - normalize-path@3.0.0: {} + normalize-path@3.0.0: + optional: true npm-run-path@4.0.1: dependencies: path-key: 3.1.1 + optional: true npm-run-path@6.0.0: dependencies: @@ -5690,13 +6255,17 @@ snapshots: object-assign@4.1.1: {} + obug@2.1.1: {} + once@1.4.0: dependencies: wrappy: 1.0.2 + optional: true onetime@5.1.2: dependencies: mimic-fn: 2.1.0 + optional: true onetime@7.0.0: dependencies: @@ -5714,6 +6283,7 @@ snapshots: p-limit@2.3.0: dependencies: p-try: 2.2.0 + optional: true p-limit@3.1.0: dependencies: @@ -5726,6 +6296,7 @@ snapshots: p-locate@4.1.0: dependencies: p-limit: 2.3.0 + optional: true p-locate@5.0.0: dependencies: @@ -5735,9 +6306,11 @@ snapshots: dependencies: p-limit: 4.0.0 - p-try@2.2.0: {} + p-try@2.2.0: + optional: true - package-json-from-dist@1.0.1: {} + package-json-from-dist@1.0.1: + optional: true parent-module@1.0.1: dependencies: @@ -5762,7 +6335,8 @@ snapshots: path-exists@5.0.0: {} - path-is-absolute@1.0.1: {} + path-is-absolute@1.0.1: + optional: true path-key@3.1.1: {} @@ -5772,6 +6346,7 @@ snapshots: dependencies: lru-cache: 10.4.3 minipass: 7.1.2 + optional: true pathe@2.0.3: {} @@ -5788,6 +6363,7 @@ snapshots: pkg-dir@4.2.0: dependencies: find-up: 4.1.0 + optional: true pkg-types@1.3.1: dependencies: @@ -5799,13 +6375,20 @@ snapshots: dependencies: irregular-plurals: 3.5.0 - postcss-load-config@6.0.1(jiti@2.6.1)(yaml@2.8.1): + postcss-load-config@6.0.1(jiti@2.6.1)(postcss@8.5.6)(yaml@2.8.1): dependencies: lilconfig: 3.1.3 optionalDependencies: jiti: 2.6.1 + postcss: 8.5.6 yaml: 2.8.1 + postcss@8.5.6: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + prelude-ls@1.2.1: {} prettier-linter-helpers@1.0.0: @@ -5819,6 +6402,7 @@ snapshots: '@jest/schemas': 30.0.5 ansi-styles: 5.2.0 react-is: 18.3.1 + optional: true pretty-ms@9.3.0: dependencies: @@ -5826,9 +6410,11 @@ snapshots: punycode@2.3.1: {} - pure-rand@7.0.1: {} + pure-rand@7.0.1: + optional: true - react-is@18.3.1: {} + react-is@18.3.1: + optional: true readdirp@4.1.2: {} @@ -5839,6 +6425,7 @@ snapshots: resolve-cwd@3.0.0: dependencies: resolve-from: 5.0.0 + optional: true resolve-from@4.0.0: {} @@ -5879,9 +6466,8 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.53.3 fsevents: 2.3.3 - semver@6.3.1: {} - - semver@7.7.2: {} + semver@6.3.1: + optional: true semver@7.7.3: {} @@ -5891,11 +6477,15 @@ snapshots: shebang-regex@3.0.0: {} - signal-exit@3.0.7: {} + siginfo@2.0.0: {} + + signal-exit@3.0.7: + optional: true signal-exit@4.1.0: {} - slash@3.0.0: {} + slash@3.0.0: + optional: true slice-ansi@7.1.2: dependencies: @@ -5904,22 +6494,32 @@ snapshots: smol-toml@1.5.2: {} + source-map-js@1.2.1: {} + source-map-support@0.5.13: dependencies: buffer-from: 1.1.2 source-map: 0.6.1 + optional: true - source-map@0.6.1: {} + source-map@0.6.1: + optional: true source-map@0.7.6: {} split2@4.2.0: {} - sprintf-js@1.0.3: {} + sprintf-js@1.0.3: + optional: true stack-utils@2.0.6: dependencies: escape-string-regexp: 2.0.0 + optional: true + + stackback@0.0.2: {} + + std-env@3.10.0: {} string-argv@0.3.2: {} @@ -5927,6 +6527,7 @@ snapshots: dependencies: char-regex: 1.0.2 strip-ansi: 6.0.1 + optional: true string-width@4.2.3: dependencies: @@ -5939,6 +6540,7 @@ snapshots: eastasianwidth: 0.2.0 emoji-regex: 9.2.2 strip-ansi: 7.1.2 + optional: true string-width@7.2.0: dependencies: @@ -5959,9 +6561,11 @@ snapshots: dependencies: ansi-regex: 6.2.2 - strip-bom@4.0.0: {} + strip-bom@4.0.0: + optional: true - strip-final-newline@2.0.0: {} + strip-final-newline@2.0.0: + optional: true strip-final-newline@4.0.0: {} @@ -5986,6 +6590,7 @@ snapshots: supports-color@8.1.1: dependencies: has-flag: 4.0.0 + optional: true supports-hyperlinks@4.3.0: dependencies: @@ -6006,6 +6611,7 @@ snapshots: '@istanbuljs/schema': 0.1.3 glob: 7.2.3 minimatch: 3.1.2 + optional: true text-extensions@2.4.0: {} @@ -6019,6 +6625,8 @@ snapshots: through@2.3.8: {} + tinybench@2.9.0: {} + tinyexec@0.3.2: {} tinyexec@1.0.2: {} @@ -6028,7 +6636,10 @@ snapshots: fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 - tmpl@1.0.5: {} + tinyrainbow@3.0.3: {} + + tmpl@1.0.5: + optional: true to-regex-range@5.0.1: dependencies: @@ -6042,30 +6653,9 @@ snapshots: ts-interface-checker@0.1.13: {} - ts-jest@29.4.5(@babel/core@7.28.5)(@jest/transform@30.2.0)(@jest/types@30.2.0)(babel-jest@30.2.0(@babel/core@7.28.5))(esbuild@0.27.0)(jest-util@30.2.0)(jest@30.2.0(@types/node@24.10.1))(typescript@5.9.3): - dependencies: - bs-logger: 0.2.6 - fast-json-stable-stringify: 2.1.0 - handlebars: 4.7.8 - jest: 30.2.0(@types/node@24.10.1) - json5: 2.2.3 - lodash.memoize: 4.1.2 - make-error: 1.3.6 - semver: 7.7.3 - type-fest: 4.41.0 - typescript: 5.9.3 - yargs-parser: 21.1.1 - optionalDependencies: - '@babel/core': 7.28.5 - '@jest/transform': 30.2.0 - '@jest/types': 30.2.0 - babel-jest: 30.2.0(@babel/core@7.28.5) - esbuild: 0.27.0 - jest-util: 30.2.0 - tslib@2.8.1: {} - tsup@8.5.1(jiti@2.6.1)(typescript@5.9.3)(yaml@2.8.1): + tsup@8.5.1(jiti@2.6.1)(postcss@8.5.6)(typescript@5.9.3)(yaml@2.8.1): dependencies: bundle-require: 5.1.0(esbuild@0.27.0) cac: 6.7.14 @@ -6076,7 +6666,7 @@ snapshots: fix-dts-default-cjs-exports: 1.0.1 joycon: 3.1.1 picocolors: 1.1.1 - postcss-load-config: 6.0.1(jiti@2.6.1)(yaml@2.8.1) + postcss-load-config: 6.0.1(jiti@2.6.1)(postcss@8.5.6)(yaml@2.8.1) resolve-from: 5.0.0 rollup: 4.53.3 source-map: 0.7.6 @@ -6085,6 +6675,7 @@ snapshots: tinyglobby: 0.2.15 tree-kill: 1.2.2 optionalDependencies: + postcss: 8.5.6 typescript: 5.9.3 transitivePeerDependencies: - jiti @@ -6123,11 +6714,11 @@ snapshots: dependencies: prelude-ls: 1.2.1 - type-detect@4.0.8: {} - - type-fest@0.21.3: {} + type-detect@4.0.8: + optional: true - type-fest@4.41.0: {} + type-fest@0.21.3: + optional: true typescript-eslint@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3): dependencies: @@ -6144,9 +6735,6 @@ snapshots: ufo@1.6.1: {} - uglify-js@3.19.3: - optional: true - undici-types@7.16.0: {} unicorn-magic@0.1.0: {} @@ -6178,12 +6766,14 @@ snapshots: '@unrs/resolver-binding-win32-arm64-msvc': 1.11.1 '@unrs/resolver-binding-win32-ia32-msvc': 1.11.1 '@unrs/resolver-binding-win32-x64-msvc': 1.11.1 + optional: true update-browserslist-db@1.1.4(browserslist@4.28.0): dependencies: browserslist: 4.28.0 escalade: 3.2.0 picocolors: 1.1.1 + optional: true uri-js@4.4.1: dependencies: @@ -6194,20 +6784,76 @@ snapshots: '@jridgewell/trace-mapping': 0.3.31 '@types/istanbul-lib-coverage': 2.0.6 convert-source-map: 2.0.0 + optional: true validator@13.15.23: {} + vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(yaml@2.8.1): + dependencies: + esbuild: 0.25.12 + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + postcss: 8.5.6 + rollup: 4.53.3 + tinyglobby: 0.2.15 + optionalDependencies: + '@types/node': 24.10.1 + fsevents: 2.3.3 + jiti: 2.6.1 + yaml: 2.8.1 + + vitest@4.0.15(@types/node@24.10.1)(jiti@2.6.1)(yaml@2.8.1): + dependencies: + '@vitest/expect': 4.0.15 + '@vitest/mocker': 4.0.15(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(yaml@2.8.1)) + '@vitest/pretty-format': 4.0.15 + '@vitest/runner': 4.0.15 + '@vitest/snapshot': 4.0.15 + '@vitest/spy': 4.0.15 + '@vitest/utils': 4.0.15 + es-module-lexer: 1.7.0 + expect-type: 1.2.2 + magic-string: 0.30.21 + obug: 2.1.1 + pathe: 2.0.3 + picomatch: 4.0.3 + std-env: 3.10.0 + tinybench: 2.9.0 + tinyexec: 1.0.2 + tinyglobby: 0.2.15 + tinyrainbow: 3.0.3 + vite: 7.2.6(@types/node@24.10.1)(jiti@2.6.1)(yaml@2.8.1) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/node': 24.10.1 + transitivePeerDependencies: + - jiti + - less + - lightningcss + - msw + - sass + - sass-embedded + - stylus + - sugarss + - terser + - tsx + - yaml + walker@1.0.8: dependencies: makeerror: 1.0.12 + optional: true which@2.0.2: dependencies: isexe: 2.0.0 - word-wrap@1.2.5: {} + why-is-node-running@2.3.0: + dependencies: + siginfo: 2.0.0 + stackback: 0.0.2 - wordwrap@1.0.0: {} + word-wrap@1.2.5: {} wrap-ansi@7.0.0: dependencies: @@ -6220,6 +6866,7 @@ snapshots: ansi-styles: 6.2.3 string-width: 5.1.2 strip-ansi: 7.1.2 + optional: true wrap-ansi@9.0.2: dependencies: @@ -6227,16 +6874,19 @@ snapshots: string-width: 7.2.0 strip-ansi: 7.1.2 - wrappy@1.0.2: {} + wrappy@1.0.2: + optional: true write-file-atomic@5.0.1: dependencies: imurmurhash: 0.1.4 signal-exit: 4.1.0 + optional: true y18n@5.0.8: {} - yallist@3.1.1: {} + yallist@3.1.1: + optional: true yaml@2.8.1: {} diff --git a/tsconfig.spec.json b/tsconfig.spec.json deleted file mode 100644 index 5dcaec1..0000000 --- a/tsconfig.spec.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "compilerOptions": { - "module": "commonjs", - "noImplicitAny": false, - "noUnusedLocals": false, - "removeComments": true, - "strictNullChecks": true, - "strictPropertyInitialization": false, - "forceConsistentCasingInFileNames": true, - "noLib": false, - "emitDecoratorMetadata": true, - "experimentalDecorators": true, - "useUnknownInCatchVariables": false, - "target": "ES2023", - "sourceMap": true, - "allowJs": false, - "outDir": "dist", - "baseUrl": ".", - "paths": { - "@nanoforge-dev/asset-manager": ["./packages/asset-manager"], - "@nanoforge-dev/common": ["./packages/common"], - "@nanoforge-dev/config": ["./packages/config"], - "@nanoforge-dev/core": ["./packages/core"], - "@nanoforge-dev/core/*": ["./packages/core/*"], - "@nanoforge-dev/ecs": ["./packages/ecs"], - "@nanoforge-dev/graphics-2d": ["./packages/graphics-2d"], - "@nanoforge-dev/input": ["./packages/input"], - "@nanoforge-dev/sound": ["./packages/sound"] - } - }, - "include": ["integration/**/*", "integration/**/*.spec.ts", "packages/**/*.spec.ts"], - "exclude": ["node_modules", "dist"] -} diff --git a/vitest.config.ts b/vitest.config.ts new file mode 100644 index 0000000..20b33ae --- /dev/null +++ b/vitest.config.ts @@ -0,0 +1,24 @@ +import { defineConfig } from "vitest/config"; + +export default defineConfig({ + test: { + exclude: ["**/node_modules", "**/dist", ".idea", ".git", ".cache"], + passWithNoTests: true, + typecheck: { + enabled: true, + tsconfig: "./tsconfig.spec.json", + }, + coverage: { + enabled: true, + reporter: ["text", "lcov", "cobertura"], + provider: "v8", + include: ["src"], + exclude: [ + "**/*.{interface,type,d}.ts", + "**/{interfaces,types}/*.ts", + "**/index.{js,ts}", + "**/exports/*.{js,ts}", + ], + }, + }, +});