From c4718c9133e8e2ed9c1c3626eb7c8a45d26a0437 Mon Sep 17 00:00:00 2001 From: Exelo Date: Thu, 2 Apr 2026 12:50:25 +0200 Subject: [PATCH] feat: add create command --- .../ISSUE_TEMPLATE/01-command_bug_report.yml | 1 + .github/ISSUE_TEMPLATE/02-feature_request.yml | 1 + .github/issue-labeler.yml | 24 + .github/labeler.yml | 6 + .github/labels.yml | 4 + e2e/cli-create.test.ts | 258 +++ e2e/cli-generate.test.ts | 22 +- pnpm-lock.yaml | 1503 ++++++++++------- pnpm-workspace.yaml | 18 +- src/action/actions/create.action.ts | 61 + src/action/actions/install.action.ts | 4 +- src/action/actions/new.action.ts | 4 +- src/action/common/config.ts | 4 +- src/action/index.ts | 1 + src/command/command.loader.ts | 3 + src/command/commands/create.command.ts | 48 + src/lib/config/config-defaults.ts | 8 + src/lib/config/config-loader.ts | 8 +- src/lib/config/config.type.ts | 22 + src/lib/input/inputs/create/index.ts | 1 + .../input/inputs/create/type.input.spec.ts | 28 + src/lib/input/inputs/create/type.input.ts | 8 + src/lib/input/inputs/index.ts | 4 + src/lib/input/inputs/install/index.ts | 1 - src/lib/input/inputs/install/server.input.ts | 6 - src/lib/input/inputs/name.input.spec.ts | 52 + src/lib/input/inputs/{new => }/name.input.ts | 15 +- src/lib/input/inputs/new/index.ts | 2 - src/lib/input/inputs/new/name.input.spec.ts | 31 - src/lib/input/inputs/new/path.input.spec.ts | 20 - src/lib/input/inputs/new/path.input.ts | 6 - src/lib/input/inputs/path.input.spec.ts | 32 + src/lib/input/inputs/path.input.ts | 10 + .../inputs/{install => }/server.input.spec.ts | 10 +- src/lib/input/inputs/server.input.ts | 6 + src/lib/schematics/nanoforge.collection.ts | 10 + src/lib/tree-kill/tree-kill.ts | 2 - src/lib/ui/messages.ts | 6 + src/lib/utils/formatting.ts | 2 + tsconfig.json | 1 - 40 files changed, 1573 insertions(+), 680 deletions(-) create mode 100644 e2e/cli-create.test.ts create mode 100644 src/action/actions/create.action.ts create mode 100644 src/command/commands/create.command.ts create mode 100644 src/lib/input/inputs/create/index.ts create mode 100644 src/lib/input/inputs/create/type.input.spec.ts create mode 100644 src/lib/input/inputs/create/type.input.ts delete mode 100644 src/lib/input/inputs/install/server.input.ts create mode 100644 src/lib/input/inputs/name.input.spec.ts rename src/lib/input/inputs/{new => }/name.input.ts (51%) delete mode 100644 src/lib/input/inputs/new/name.input.spec.ts delete mode 100644 src/lib/input/inputs/new/path.input.spec.ts delete mode 100644 src/lib/input/inputs/new/path.input.ts create mode 100644 src/lib/input/inputs/path.input.spec.ts create mode 100644 src/lib/input/inputs/path.input.ts rename src/lib/input/inputs/{install => }/server.input.spec.ts (62%) create mode 100644 src/lib/input/inputs/server.input.ts diff --git a/.github/ISSUE_TEMPLATE/01-command_bug_report.yml b/.github/ISSUE_TEMPLATE/01-command_bug_report.yml index d8155a1..30d738b 100644 --- a/.github/ISSUE_TEMPLATE/01-command_bug_report.yml +++ b/.github/ISSUE_TEMPLATE/01-command_bug_report.yml @@ -14,6 +14,7 @@ body: label: Which command is this bug report for? options: - build + - create - dev - generate - help diff --git a/.github/ISSUE_TEMPLATE/02-feature_request.yml b/.github/ISSUE_TEMPLATE/02-feature_request.yml index 2ac7085..9012528 100644 --- a/.github/ISSUE_TEMPLATE/02-feature_request.yml +++ b/.github/ISSUE_TEMPLATE/02-feature_request.yml @@ -12,6 +12,7 @@ body: label: Which command is this feature request for? options: - build + - create - dev - generate - help diff --git a/.github/issue-labeler.yml b/.github/issue-labeler.yml index c982d4d..af0aa6e 100644 --- a/.github/issue-labeler.yml +++ b/.github/issue-labeler.yml @@ -2,6 +2,14 @@ command:build: - "### Which command is this (bug report|feature request) for\\?\\n\\nbuild\\n" +command:create: + - "### Which command is this (bug + report|feature request) for\\?\\n\\ncreate\\n" + +command:dev: + - "### Which command is this (bug + report|feature request) for\\?\\n\\ndev\\n" + command:generate: - "### Which command is this (bug report|feature request) for\\?\\n\\ngenerate\\n" @@ -14,10 +22,26 @@ command:install: - "### Which command is this (bug report|feature request) for\\?\\n\\ninstall\\n" +command:login: + - "### Which command is this (bug + report|feature request) for\\?\\n\\nlogin\\n" + +command:logout: + - "### Which command is this (bug + report|feature request) for\\?\\n\\nlogout\\n" + command:new: - "### Which command is this (bug report|feature request) for\\?\\n\\nnew\\n" +command:publish: + - "### Which command is this (bug + report|feature request) for\\?\\n\\npublish\\n" + command:start: - "### Which command is this (bug report|feature request) for\\?\\n\\nstart\\n" + +command:unpublish: + - "### Which command is this (bug + report|feature request) for\\?\\n\\nunpublish\\n" diff --git a/.github/labeler.yml b/.github/labeler.yml index f924066..19c2157 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -4,6 +4,12 @@ command:build: - src/command/commands/build.command.ts - src/action/actions/build.action.ts +command:create: + - changed-files: + - any-glob-to-any-file: + - src/command/commands/create.command.ts + - src/action/actions/create.action.ts + command:dev: - changed-files: - any-glob-to-any-file: diff --git a/.github/labels.yml b/.github/labels.yml index 1473813..3b1e5c3 100644 --- a/.github/labels.yml +++ b/.github/labels.yml @@ -46,6 +46,10 @@ description: "Related to build command" color: "aaa3dc" +- name: "command:create" + description: "Related to create command" + color: "aaa3dc" + - name: "command:dev" description: "Related to dev command" color: "aaa3dc" diff --git a/e2e/cli-create.test.ts b/e2e/cli-create.test.ts new file mode 100644 index 0000000..2777d84 --- /dev/null +++ b/e2e/cli-create.test.ts @@ -0,0 +1,258 @@ +import { existsSync, mkdirSync, rmSync } from "node:fs"; +import { resolve } from "node:path"; +import { afterAll, beforeAll, describe, expect, it } from "vitest"; + +import { runCli } from "./helpers/run-cli"; + +const tmpDir = resolve(__dirname, "../.tmp-e2e-create"); + +beforeAll(() => { + mkdirSync(tmpDir, { recursive: true }); +}); + +afterAll(() => { + rmSync(tmpDir, { recursive: true, force: true }); +}); + +describe("nf create (TypeScript, client component)", () => { + const projectDir = resolve(tmpDir, "create-ts-client"); + const appDir = resolve(projectDir, "create-app"); + + beforeAll(async () => { + mkdirSync(projectDir, { recursive: true }); + + await runCli([ + "new", + "--name", + "create-app", + "--language", + "ts", + "--package-manager", + "npm", + "--strict", + "--no-server", + "--no-init-functions", + "--skip-install", + "--no-docker", + "-d", + projectDir, + ]); + }); + + it("should create a component successfully", async () => { + const { stdout, exitCode } = await runCli([ + "create", + "component", + "--name", + "player", + "-d", + appDir, + ]); + + expect(exitCode).toBe(0); + expect(stdout).toContain("NanoForge Component/System Creation"); + expect(stdout).toContain("Element successfully created"); + }); + + it("should generate a component file in client/components", () => { + expect(existsSync(resolve(appDir, "client/components/player.component.ts"))).toBe(true); + }); + + it("should create a system successfully", async () => { + const { stdout, exitCode } = await runCli([ + "create", + "system", + "--name", + "movement", + "-d", + appDir, + ]); + + expect(exitCode).toBe(0); + expect(stdout).toContain("Element successfully created"); + }); + + it("should generate a system file in client/systems", () => { + expect(existsSync(resolve(appDir, "client/systems/movement.system.ts"))).toBe(true); + }); + + it("should accept --config option", async () => { + const { exitCode } = await runCli([ + "create", + "component", + "--name", + "health", + "--config", + "nanoforge.config.json", + "-d", + appDir, + ]); + + expect(exitCode).toBe(0); + }); + + it("should create a component with a custom path via --path", async () => { + const { exitCode } = await runCli([ + "create", + "component", + "--name", + "custom", + "--path", + "client/custom-components", + "-d", + appDir, + ]); + + expect(exitCode).toBe(0); + expect(existsSync(resolve(appDir, "client/custom-components/custom.component.ts"))).toBe(true); + }); +}); + +describe("nf create (TypeScript, server component)", () => { + const projectDir = resolve(tmpDir, "create-ts-server"); + const appDir = resolve(projectDir, "create-server-app"); + + beforeAll(async () => { + mkdirSync(projectDir, { recursive: true }); + + await runCli([ + "new", + "--name", + "create-server-app", + "--language", + "ts", + "--package-manager", + "npm", + "--no-strict", + "--server", + "--no-init-functions", + "--skip-install", + "--no-docker", + "-d", + projectDir, + ]); + }); + + it("should create a server component successfully", async () => { + const { exitCode } = await runCli([ + "create", + "component", + "--name", + "enemy", + "--server", + "-d", + appDir, + ]); + + expect(exitCode).toBe(0); + }); + + it("should generate a component file in server/components", () => { + expect(existsSync(resolve(appDir, "server/components/enemy.component.ts"))).toBe(true); + }); + + it("should create a server system successfully", async () => { + const { exitCode } = await runCli([ + "create", + "system", + "--name", + "physics", + "--server", + "-d", + appDir, + ]); + + expect(exitCode).toBe(0); + }); + + it("should generate a system file in server/systems", () => { + expect(existsSync(resolve(appDir, "server/systems/physics.system.ts"))).toBe(true); + }); + + it("should create a server component with a custom path via --path", async () => { + const { exitCode } = await runCli([ + "create", + "component", + "--name", + "network", + "--server", + "--path", + "server/custom-components", + "-d", + appDir, + ]); + + expect(exitCode).toBe(0); + expect(existsSync(resolve(appDir, "server/custom-components/network.component.ts"))).toBe(true); + }); +}); + +describe("nf create (JavaScript)", () => { + const projectDir = resolve(tmpDir, "create-js"); + const appDir = resolve(projectDir, "create-js-app"); + + beforeAll(async () => { + mkdirSync(projectDir, { recursive: true }); + + await runCli([ + "new", + "--name", + "create-js-app", + "--language", + "js", + "--package-manager", + "npm", + "--no-strict", + "--no-server", + "--no-init-functions", + "--skip-install", + "--no-docker", + "-d", + projectDir, + ]); + }); + + it("should create a JavaScript component successfully", async () => { + const { exitCode } = await runCli(["create", "component", "--name", "sprite", "-d", appDir]); + + expect(exitCode).toBe(0); + }); + + it("should generate a .js component file", () => { + expect(existsSync(resolve(appDir, "client/components/sprite.component.js"))).toBe(true); + }); + + it("should create a JavaScript system successfully", async () => { + const { exitCode } = await runCli(["create", "system", "--name", "render", "-d", appDir]); + + expect(exitCode).toBe(0); + }); + + it("should generate a .js system file", () => { + expect(existsSync(resolve(appDir, "client/systems/render.system.js"))).toBe(true); + }); +}); + +describe("nf create (error cases)", () => { + it("should fail when directory does not exist", async () => { + const { exitCode } = await runCli([ + "create", + "component", + "--name", + "test", + "-d", + resolve(tmpDir, "nonexistent"), + ]); + + expect(exitCode).not.toBe(0); + }); + + it("should fail with an invalid type", async () => { + const projectDir = resolve(tmpDir, "create-ts-client"); + const appDir = resolve(projectDir, "create-app"); + + const { exitCode } = await runCli(["create", "invalid-type", "--name", "test", "-d", appDir]); + + expect(exitCode).not.toBe(0); + }); +}); diff --git a/e2e/cli-generate.test.ts b/e2e/cli-generate.test.ts index a104a26..c024d3a 100644 --- a/e2e/cli-generate.test.ts +++ b/e2e/cli-generate.test.ts @@ -150,7 +150,7 @@ describe("nf generate (TypeScript, no server)", () => { // Entity creation and component attachment expect(content).toContain("const exampleEntity = registry.spawnEntity()"); expect(content).toContain( - 'registry.addComponent(exampleEntity, new ExampleComponent("example", 10))', + 'registry.addComponent(exampleEntity, new ExampleComponent("example", 10, undefined))', ); // System registration @@ -164,21 +164,19 @@ describe("nf generate (TypeScript, no server)", () => { save.components.push({ name: "HealthComponent", path: "./components/health.component", + paramsNames: ["health"], }); - save.entities[0].components.push({ - name: "HealthComponent", - params: ["100"], - }); + save.entities[0].components["HealthComponent"] = { health: 100 }; save.entities.push({ id: "exampleEntity2", - components: [ - { - name: "ExampleComponent", - params: ['"example2"', "15"], + components: { + ExampleComponent: { + paramA: "example2", + paramB: 15, }, - ], + }, }); writeFileSync(savePath, JSON.stringify(save, null, 2)); @@ -193,7 +191,7 @@ describe("nf generate (TypeScript, no server)", () => { expect(content).toContain("const exampleEntity2 = registry.spawnEntity()"); expect(content).toContain( - 'registry.addComponent(exampleEntity2, new ExampleComponent("example2", 15))', + 'registry.addComponent(exampleEntity2, new ExampleComponent("example2", 15, undefined))', ); // Original component should still be present @@ -201,7 +199,7 @@ describe("nf generate (TypeScript, no server)", () => { expect(content).toContain('import { ExampleComponent } from "./components/example.component"'); expect(content).toContain("const exampleEntity = registry.spawnEntity()"); expect(content).toContain( - 'registry.addComponent(exampleEntity, new ExampleComponent("example", 10))', + 'registry.addComponent(exampleEntity, new ExampleComponent("example", 10, undefined))', ); }); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 63716bd..dbb3160 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -55,8 +55,8 @@ catalogs: specifier: ^25.5.0 version: 25.5.0 bun: - specifier: ^1.3.10 - version: 1.3.10 + specifier: ^1.3.11 + version: 1.3.11 libs: chokidar: specifier: ^5.0.0 @@ -68,11 +68,11 @@ catalogs: specifier: ^0.15.1 version: 0.15.1 dotenv: - specifier: ^17.3.1 - version: 17.3.1 + specifier: ^17.4.0 + version: 17.4.0 rc9: - specifier: ^3.0.0 - version: 3.0.0 + specifier: ^3.0.1 + version: 3.0.1 reflect-metadata: specifier: ^0.2.2 version: 0.2.2 @@ -87,8 +87,8 @@ catalogs: specifier: ^6.0.2 version: 6.0.2 eslint: - specifier: ^10.0.3 - version: 10.0.3 + specifier: ^10.1.0 + version: 10.1.0 prettier: specifier: ^3.8.1 version: 3.8.1 @@ -101,21 +101,21 @@ catalogs: version: 1.2.0 schematics: '@angular-devkit/schematics': - specifier: ^21.2.2 - version: 21.2.2 + specifier: ^21.2.6 + version: 21.2.6 '@angular-devkit/schematics-cli': - specifier: ^21.2.2 - version: 21.2.2 + specifier: ^21.2.6 + version: 21.2.6 '@nanoforge-dev/schematics': - specifier: ^2.0.0 - version: 2.0.0 + specifier: ^2.1.1 + version: 2.1.1 tests: '@vitest/coverage-v8': - specifier: ^4.1.0 - version: 4.1.0 + specifier: ^4.1.2 + version: 4.1.2 vitest: - specifier: ^4.1.0 - version: 4.1.0 + specifier: ^4.1.2 + version: 4.1.2 importers: @@ -123,10 +123,10 @@ importers: dependencies: '@angular-devkit/schematics': specifier: catalog:schematics - version: 21.2.2(chokidar@5.0.0) + version: 21.2.6(chokidar@5.0.0) '@angular-devkit/schematics-cli': specifier: catalog:schematics - version: 21.2.2(@types/node@25.5.0)(chokidar@5.0.0) + version: 21.2.6(@types/node@25.5.0)(chokidar@5.0.0) '@inquirer/prompts': specifier: catalog:cli version: 8.3.2(@types/node@25.5.0) @@ -138,13 +138,13 @@ importers: version: 1.2.0 '@nanoforge-dev/schematics': specifier: catalog:schematics - version: 2.0.0(chokidar@5.0.0) + version: 2.1.1(chokidar@5.0.0) ansis: specifier: catalog:cli version: 4.2.0 bun: specifier: catalog:core - version: 1.3.10 + version: 1.3.11 chokidar: specifier: catalog:libs version: 5.0.0 @@ -159,7 +159,7 @@ importers: version: 14.0.3 dotenv: specifier: catalog:libs - version: 17.3.1 + version: 17.4.0 node-emoji: specifier: catalog:cli version: 2.2.0 @@ -168,14 +168,14 @@ importers: version: 9.3.0 rc9: specifier: catalog:libs - version: 3.0.0 + version: 3.0.1 reflect-metadata: specifier: catalog:libs version: 0.2.2 devDependencies: '@commitlint/cli': specifier: catalog:ci - version: 20.5.0(@types/node@25.5.0)(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.3.0)(typescript@5.9.3) + version: 20.5.0(@types/node@25.5.0)(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0)(typescript@5.9.3) '@commitlint/config-conventional': specifier: catalog:ci version: 20.5.0 @@ -187,7 +187,7 @@ importers: version: 1.2.3 '@nanoforge-dev/utils-eslint-config': specifier: catalog:lint - version: 1.0.2(@types/eslint@9.6.1)(eslint@10.0.3(jiti@2.6.1))(prettier@3.8.1)(typescript@5.9.3) + version: 1.0.2(@types/eslint@9.6.1)(eslint@10.1.0(jiti@2.6.1))(prettier@3.8.1)(typescript@5.9.3) '@nanoforge-dev/utils-prettier-config': specifier: catalog:lint version: 1.0.2 @@ -202,10 +202,10 @@ importers: version: 25.5.0 '@vitest/coverage-v8': specifier: catalog:tests - version: 4.1.0(vitest@4.1.0(@types/node@25.5.0)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(yaml@2.8.2))) + version: 4.1.2(vitest@4.1.2(@types/node@25.5.0)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.5)(jiti@2.6.1)(yaml@2.8.3))) eslint: specifier: catalog:lint - version: 10.0.3(jiti@2.6.1) + version: 10.1.0(jiti@2.6.1) husky: specifier: catalog:ci version: 9.1.7 @@ -217,13 +217,13 @@ importers: version: 3.8.1 tsup: specifier: catalog:build - version: 8.5.1(jiti@2.6.1)(postcss@8.5.8)(typescript@5.9.3)(yaml@2.8.2) + version: 8.5.1(jiti@2.6.1)(postcss@8.5.8)(typescript@5.9.3)(yaml@2.8.3) typescript: specifier: catalog:build version: 5.9.3 vitest: specifier: catalog:tests - version: 4.1.0(@types/node@25.5.0)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(yaml@2.8.2)) + version: 4.1.2(@types/node@25.5.0)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.5)(jiti@2.6.1)(yaml@2.8.3)) packages: @@ -245,8 +245,8 @@ packages: '@actions/io@3.0.2': resolution: {integrity: sha512-nRBchcMM+QK1pdjO7/idu86rbJI5YHUKCvKs0KxnSYbVe3F51UfGxuZX4Qy/fWlp6l7gWFwIkrOzN+oUK03kfw==} - '@angular-devkit/core@21.2.2': - resolution: {integrity: sha512-xUeKGe4BDQpkz0E6fnAPIJXE0y0nqtap0KhJIBhvN7xi3NenIzTmoi6T9Yv5OOBUdLZbOm4SOel8MhdXiIBpAQ==} + '@angular-devkit/core@21.2.6': + resolution: {integrity: sha512-u5gPTAY7MC02uACQE39xxiFcm1hslF+ih/f2borMWnhER0JNTpHjLiLRXFkq7or7+VVHU30zfhK4XNAuO4WTIg==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} peerDependencies: chokidar: ^5.0.0 @@ -254,13 +254,13 @@ packages: chokidar: optional: true - '@angular-devkit/schematics-cli@21.2.2': - resolution: {integrity: sha512-70hx5nPokuEgs7XgEXOuKBznQY1ZHjahVvUwBhWxQt4PL7EX0xePfCCHTkkk6lYHipOySquHtfClQwAQG4bm+w==} + '@angular-devkit/schematics-cli@21.2.6': + resolution: {integrity: sha512-sJeDQSgWn1tXqmC7mM3cEaAdUI53T1FmIScd7fHr2uRCIgUvXzsV0MdGf38cGhLlQeMZEfIplS+1nRXziCzC1g==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} hasBin: true - '@angular-devkit/schematics@21.2.2': - resolution: {integrity: sha512-CCeyQxGUq+oyGnHd7PfcYIVbj9pRnqjQq0rAojoAqs1BJdtInx9weLBCLy+AjM3NHePeZrnwm+wEVr8apED8kg==} + '@angular-devkit/schematics@21.2.6': + resolution: {integrity: sha512-hk2duJlPJyiMaI9MVWA5XpmlpD9C4n8qgquV/MJ7/n+ZRSwW3w1ndL5qUmA1ki+4Da54v/Rc8Wt5tUS955+93w==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} '@babel/code-frame@7.29.0': @@ -406,158 +406,167 @@ packages: '@dprint/toml@0.7.0': resolution: {integrity: sha512-eFaQTcfxKHB+YyTh83x7GEv+gDPuj9q5NFOTaoj5rZmQTbj6OgjjMxUicmS1R8zYcx8YAq5oA9J3YFa5U6x2gA==} - '@esbuild/aix-ppc64@0.27.4': - resolution: {integrity: sha512-cQPwL2mp2nSmHHJlCyoXgHGhbEPMrEEU5xhkcy3Hs/O7nGZqEpZ2sUtLaL9MORLtDfRvVl2/3PAuEkYZH0Ty8Q==} + '@emnapi/core@1.9.1': + resolution: {integrity: sha512-mukuNALVsoix/w1BJwFzwXBN/dHeejQtuVzcDsfOEsdpCumXb/E9j8w11h5S54tT1xhifGfbbSm/ICrObRb3KA==} + + '@emnapi/runtime@1.9.1': + resolution: {integrity: sha512-VYi5+ZVLhpgK4hQ0TAjiQiZ6ol0oe4mBx7mVv7IflsiEp0OWoVsp/+f9Vc1hOhE0TtkORVrI1GvzyreqpgWtkA==} + + '@emnapi/wasi-threads@1.2.0': + resolution: {integrity: sha512-N10dEJNSsUx41Z6pZsXU8FjPjpBEplgH24sfkmITrBED1/U2Esum9F3lfLrMjKHHjmi557zQn7kR9R+XWXu5Rg==} + + '@esbuild/aix-ppc64@0.27.5': + resolution: {integrity: sha512-nGsF/4C7uzUj+Nj/4J+Zt0bYQ6bz33Phz8Lb2N80Mti1HjGclTJdXZ+9APC4kLvONbjxN1zfvYNd8FEcbBK/MQ==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.27.4': - resolution: {integrity: sha512-gdLscB7v75wRfu7QSm/zg6Rx29VLdy9eTr2t44sfTW7CxwAtQghZ4ZnqHk3/ogz7xao0QAgrkradbBzcqFPasw==} + '@esbuild/android-arm64@0.27.5': + resolution: {integrity: sha512-Oeghq+XFgh1pUGd1YKs4DDoxzxkoUkvko+T/IVKwlghKLvvjbGFB3ek8VEDBmNvqhwuL0CQS3cExdzpmUyIrgA==} engines: {node: '>=18'} cpu: [arm64] os: [android] - '@esbuild/android-arm@0.27.4': - resolution: {integrity: sha512-X9bUgvxiC8CHAGKYufLIHGXPJWnr0OCdR0anD2e21vdvgCI8lIfqFbnoeOz7lBjdrAGUhqLZLcQo6MLhTO2DKQ==} + '@esbuild/android-arm@0.27.5': + resolution: {integrity: sha512-Cv781jd0Rfj/paoNrul1/r4G0HLvuFKYh7C9uHZ2Pl8YXstzvCyyeWENTFR9qFnRzNMCjXmsulZuvosDg10Mog==} engines: {node: '>=18'} cpu: [arm] os: [android] - '@esbuild/android-x64@0.27.4': - resolution: {integrity: sha512-PzPFnBNVF292sfpfhiyiXCGSn9HZg5BcAz+ivBuSsl6Rk4ga1oEXAamhOXRFyMcjwr2DVtm40G65N3GLeH1Lvw==} + '@esbuild/android-x64@0.27.5': + resolution: {integrity: sha512-nQD7lspbzerlmtNOxYMFAGmhxgzn8Z7m9jgFkh6kpkjsAhZee1w8tJW3ZlW+N9iRePz0oPUDrYrXidCPSImD0Q==} engines: {node: '>=18'} cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.27.4': - resolution: {integrity: sha512-b7xaGIwdJlht8ZFCvMkpDN6uiSmnxxK56N2GDTMYPr2/gzvfdQN8rTfBsvVKmIVY/X7EM+/hJKEIbbHs9oA4tQ==} + '@esbuild/darwin-arm64@0.27.5': + resolution: {integrity: sha512-I+Ya/MgC6rr8oRWGRDF3BXDfP8K1BVUggHqN6VI2lUZLdDi1IM1v2cy0e3lCPbP+pVcK3Tv8cgUhHse1kaNZZw==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.27.4': - resolution: {integrity: sha512-sR+OiKLwd15nmCdqpXMnuJ9W2kpy0KigzqScqHI3Hqwr7IXxBp3Yva+yJwoqh7rE8V77tdoheRYataNKL4QrPw==} + '@esbuild/darwin-x64@0.27.5': + resolution: {integrity: sha512-MCjQUtC8wWJn/pIPM7vQaO69BFgwPD1jriEdqwTCKzWjGgkMbcg+M5HzrOhPhuYe1AJjXlHmD142KQf+jnYj8A==} engines: {node: '>=18'} cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.27.4': - resolution: {integrity: sha512-jnfpKe+p79tCnm4GVav68A7tUFeKQwQyLgESwEAUzyxk/TJr4QdGog9sqWNcUbr/bZt/O/HXouspuQDd9JxFSw==} + '@esbuild/freebsd-arm64@0.27.5': + resolution: {integrity: sha512-X6xVS+goSH0UelYXnuf4GHLwpOdc8rgK/zai+dKzBMnncw7BTQIwquOodE7EKvY2UVUetSqyAfyZC1D+oqLQtg==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.27.4': - resolution: {integrity: sha512-2kb4ceA/CpfUrIcTUl1wrP/9ad9Atrp5J94Lq69w7UwOMolPIGrfLSvAKJp0RTvkPPyn6CIWrNy13kyLikZRZQ==} + '@esbuild/freebsd-x64@0.27.5': + resolution: {integrity: sha512-233X1FGo3a8x1ekLB6XT69LfZ83vqz+9z3TSEQCTYfMNY880A97nr81KbPcAMl9rmOFp11wO0dP+eB18KU/Ucg==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.27.4': - resolution: {integrity: sha512-7nQOttdzVGth1iz57kxg9uCz57dxQLHWxopL6mYuYthohPKEK0vU0C3O21CcBK6KDlkYVcnDXY099HcCDXd9dA==} + '@esbuild/linux-arm64@0.27.5': + resolution: {integrity: sha512-euKkilsNOv7x/M1NKsx5znyprbpsRFIzTV6lWziqJch7yWYayfLtZzDxDTl+LSQDJYAjd9TVb/Kt5UKIrj2e4A==} engines: {node: '>=18'} cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.27.4': - resolution: {integrity: sha512-aBYgcIxX/wd5n2ys0yESGeYMGF+pv6g0DhZr3G1ZG4jMfruU9Tl1i2Z+Wnj9/KjGz1lTLCcorqE2viePZqj4Eg==} + '@esbuild/linux-arm@0.27.5': + resolution: {integrity: sha512-0wkVrYHG4sdCCN/bcwQ7yYMXACkaHc3UFeaEOwSVW6e5RycMageYAFv+JS2bKLwHyeKVUvtoVH+5/RHq0fgeFw==} engines: {node: '>=18'} cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.27.4': - resolution: {integrity: sha512-oPtixtAIzgvzYcKBQM/qZ3R+9TEUd1aNJQu0HhGyqtx6oS7qTpvjheIWBbes4+qu1bNlo2V4cbkISr8q6gRBFA==} + '@esbuild/linux-ia32@0.27.5': + resolution: {integrity: sha512-hVRQX4+P3MS36NxOy24v/Cdsimy/5HYePw+tmPqnNN1fxV0bPrFWR6TMqwXPwoTM2VzbkA+4lbHWUKDd5ZDA/w==} engines: {node: '>=18'} cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.27.4': - resolution: {integrity: sha512-8mL/vh8qeCoRcFH2nM8wm5uJP+ZcVYGGayMavi8GmRJjuI3g1v6Z7Ni0JJKAJW+m0EtUuARb6Lmp4hMjzCBWzA==} + '@esbuild/linux-loong64@0.27.5': + resolution: {integrity: sha512-mKqqRuOPALI8nDzhOBmIS0INvZOOFGGg5n1osGIXAx8oersceEbKd4t1ACNTHM3sJBXGFAlEgqM+svzjPot+ZQ==} engines: {node: '>=18'} cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.27.4': - resolution: {integrity: sha512-1RdrWFFiiLIW7LQq9Q2NES+HiD4NyT8Itj9AUeCl0IVCA459WnPhREKgwrpaIfTOe+/2rdntisegiPWn/r/aAw==} + '@esbuild/linux-mips64el@0.27.5': + resolution: {integrity: sha512-EE/QXH9IyaAj1qeuIV5+/GZkBTipgGO782Ff7Um3vPS9cvLhJJeATy4Ggxikz2inZ46KByamMn6GqtqyVjhenA==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.27.4': - resolution: {integrity: sha512-tLCwNG47l3sd9lpfyx9LAGEGItCUeRCWeAx6x2Jmbav65nAwoPXfewtAdtbtit/pJFLUWOhpv0FpS6GQAmPrHA==} + '@esbuild/linux-ppc64@0.27.5': + resolution: {integrity: sha512-0V2iF1RGxBf1b7/BjurA5jfkl7PtySjom1r6xOK2q9KWw/XCpAdtB6KNMO+9xx69yYfSCRR9FE0TyKfHA2eQMw==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.27.4': - resolution: {integrity: sha512-BnASypppbUWyqjd1KIpU4AUBiIhVr6YlHx/cnPgqEkNoVOhHg+YiSVxM1RLfiy4t9cAulbRGTNCKOcqHrEQLIw==} + '@esbuild/linux-riscv64@0.27.5': + resolution: {integrity: sha512-rYxThBx6G9HN6tFNuvB/vykeLi4VDsm5hE5pVwzqbAjZEARQrWu3noZSfbEnPZ/CRXP3271GyFk/49up2W190g==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.27.4': - resolution: {integrity: sha512-+eUqgb/Z7vxVLezG8bVB9SfBie89gMueS+I0xYh2tJdw3vqA/0ImZJ2ROeWwVJN59ihBeZ7Tu92dF/5dy5FttA==} + '@esbuild/linux-s390x@0.27.5': + resolution: {integrity: sha512-uEP2q/4qgd8goEUc4QIdU/1P2NmEtZ/zX5u3OpLlCGhJIuBIv0s0wr7TB2nBrd3/A5XIdEkkS5ZLF0ULuvaaYQ==} engines: {node: '>=18'} cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.27.4': - resolution: {integrity: sha512-S5qOXrKV8BQEzJPVxAwnryi2+Iq5pB40gTEIT69BQONqR7JH1EPIcQ/Uiv9mCnn05jff9umq/5nqzxlqTOg9NA==} + '@esbuild/linux-x64@0.27.5': + resolution: {integrity: sha512-+Gq47Wqq6PLOOZuBzVSII2//9yyHNKZLuwfzCemqexqOQCSz0zy0O26kIzyp9EMNMK+nZ0tFHBZrCeVUuMs/ew==} engines: {node: '>=18'} cpu: [x64] os: [linux] - '@esbuild/netbsd-arm64@0.27.4': - resolution: {integrity: sha512-xHT8X4sb0GS8qTqiwzHqpY00C95DPAq7nAwX35Ie/s+LO9830hrMd3oX0ZMKLvy7vsonee73x0lmcdOVXFzd6Q==} + '@esbuild/netbsd-arm64@0.27.5': + resolution: {integrity: sha512-3F/5EG8VHfN/I+W5cO1/SV2H9Q/5r7vcHabMnBqhHK2lTWOh3F8vixNzo8lqxrlmBtZVFpW8pmITHnq54+Tq4g==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-x64@0.27.4': - resolution: {integrity: sha512-RugOvOdXfdyi5Tyv40kgQnI0byv66BFgAqjdgtAKqHoZTbTF2QqfQrFwa7cHEORJf6X2ht+l9ABLMP0dnKYsgg==} + '@esbuild/netbsd-x64@0.27.5': + resolution: {integrity: sha512-28t+Sj3CPN8vkMOlZotOmDgilQwVvxWZl7b8rxpn73Tt/gCnvrHxQUMng4uu3itdFvrtba/1nHejvxqz8xgEMA==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] - '@esbuild/openbsd-arm64@0.27.4': - resolution: {integrity: sha512-2MyL3IAaTX+1/qP0O1SwskwcwCoOI4kV2IBX1xYnDDqthmq5ArrW94qSIKCAuRraMgPOmG0RDTA74mzYNQA9ow==} + '@esbuild/openbsd-arm64@0.27.5': + resolution: {integrity: sha512-Doz/hKtiuVAi9hMsBMpwBANhIZc8l238U2Onko3t2xUp8xtM0ZKdDYHMnm/qPFVthY8KtxkXaocwmMh6VolzMA==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-x64@0.27.4': - resolution: {integrity: sha512-u8fg/jQ5aQDfsnIV6+KwLOf1CmJnfu1ShpwqdwC0uA7ZPwFws55Ngc12vBdeUdnuWoQYx/SOQLGDcdlfXhYmXQ==} + '@esbuild/openbsd-x64@0.27.5': + resolution: {integrity: sha512-WfGVaa1oz5A7+ZFPkERIbIhKT4olvGl1tyzTRaB5yoZRLqC0KwaO95FeZtOdQj/oKkjW57KcVF944m62/0GYtA==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] - '@esbuild/openharmony-arm64@0.27.4': - resolution: {integrity: sha512-JkTZrl6VbyO8lDQO3yv26nNr2RM2yZzNrNHEsj9bm6dOwwu9OYN28CjzZkH57bh4w0I2F7IodpQvUAEd1mbWXg==} + '@esbuild/openharmony-arm64@0.27.5': + resolution: {integrity: sha512-Xh+VRuh6OMh3uJ0JkCjI57l+DVe7VRGBYymen8rFPnTVgATBwA6nmToxM2OwTlSvrnWpPKkrQUj93+K9huYC6A==} engines: {node: '>=18'} cpu: [arm64] os: [openharmony] - '@esbuild/sunos-x64@0.27.4': - resolution: {integrity: sha512-/gOzgaewZJfeJTlsWhvUEmUG4tWEY2Spp5M20INYRg2ZKl9QPO3QEEgPeRtLjEWSW8FilRNacPOg8R1uaYkA6g==} + '@esbuild/sunos-x64@0.27.5': + resolution: {integrity: sha512-aC1gpJkkaUADHuAdQfuVTnqVUTLqqUNhAvEwHwVWcnVVZvNlDPGA0UveZsfXJJ9T6k9Po4eHi3c02gbdwO3g6w==} engines: {node: '>=18'} cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.27.4': - resolution: {integrity: sha512-Z9SExBg2y32smoDQdf1HRwHRt6vAHLXcxD2uGgO/v2jK7Y718Ix4ndsbNMU/+1Qiem9OiOdaqitioZwxivhXYg==} + '@esbuild/win32-arm64@0.27.5': + resolution: {integrity: sha512-0UNx2aavV0fk6UpZcwXFLztA2r/k9jTUa7OW7SAea1VYUhkug99MW1uZeXEnPn5+cHOd0n8myQay6TlFnBR07w==} engines: {node: '>=18'} cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.27.4': - resolution: {integrity: sha512-DAyGLS0Jz5G5iixEbMHi5KdiApqHBWMGzTtMiJ72ZOLhbu/bzxgAe8Ue8CTS3n3HbIUHQz/L51yMdGMeoxXNJw==} + '@esbuild/win32-ia32@0.27.5': + resolution: {integrity: sha512-5nlJ3AeJWCTSzR7AEqVjT/faWyqKU86kCi1lLmxVqmNR+j4HrYdns+eTGjS/vmrzCIe8inGQckUadvS0+JkKdQ==} engines: {node: '>=18'} cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.27.4': - resolution: {integrity: sha512-+knoa0BDoeXgkNvvV1vvbZX4+hizelrkwmGJBdT17t8FNPwG2lKemmuMZlmaNQ3ws3DKKCxpb4zRZEIp3UxFCg==} + '@esbuild/win32-x64@0.27.5': + resolution: {integrity: sha512-PWypQR+d4FLfkhBIV+/kHsUELAnMpx1bRvvsn3p+/sAERbnCzFrtDRG2Xw5n+2zPxBK2+iaP+vetsRl4Ti7WgA==} engines: {node: '>=18'} cpu: [x64] os: [win32] @@ -918,8 +927,8 @@ packages: resolution: {integrity: sha512-gKFEQFt1+RIQyRzpVyjuaXib4nBLa4g3LNfy9TEMPlXe21IZy346L3RO5PmlVslPAYJuy5chUXfBE+BmE9BedA==} engines: {node: '25'} - '@nanoforge-dev/schematics@2.0.0': - resolution: {integrity: sha512-mt0Uvi+GQE/B+TPg+u7dbc1i2bS/5RFSH0q4WnWaPVD4pEHhh1c9BPxT4QKo4uWgR6JPNuATGQ6minbUJytgcQ==} + '@nanoforge-dev/schematics@2.1.1': + resolution: {integrity: sha512-94HAGTaoHKdz7+G6x52KJPTRb4Ka2Nf9tJ1MtziijbXQZF58302NiiZb+k2j7KAAaqMXQ3GzG0r9dRH7cyqpXw==} engines: {node: '25'} '@nanoforge-dev/utils-eslint-config@1.0.2': @@ -930,6 +939,12 @@ packages: resolution: {integrity: sha512-dTa2ixPJmWVD+L13Iuxx51JIm3gaX+gnRCe8jA0PFw0xjMjLYv+0ZgbWSSVlNmowp6fqpOzfPdWADkkPNQs8LQ==} engines: {node: '25'} + '@napi-rs/wasm-runtime@1.1.2': + resolution: {integrity: sha512-sNXv5oLJ7ob93xkZ1XnxisYhGYXfaG9f65/ZgYuAu3qt7b3NadcOEhLvx28hv31PgX8SZJRYrAIPQilQmFpLVw==} + peerDependencies: + '@emnapi/core': ^1.7.1 + '@emnapi/runtime': ^1.7.1 + '@octokit/auth-token@5.1.2': resolution: {integrity: sha512-JcQDsBdg49Yky2w2ld20IHAlwr8d/d8N6NiOXbtuoPCqzbsiJgF633mVUw3x4mo0H5ypataQIX7SFu3yy44Mpw==} engines: {node: '>= 18'} @@ -1008,66 +1023,69 @@ packages: '@octokit/types@16.0.0': resolution: {integrity: sha512-sKq+9r1Mm4efXW1FCk7hFSeJo4QKreL/tTbR0rz/qx/r1Oa2VV83LTA/H/MuCOX7uCIJmQVRKBcbmWoySjAnSg==} - '@oven/bun-darwin-aarch64@1.3.10': - resolution: {integrity: sha512-PXgg5gqcS/rHwa1hF0JdM1y5TiyejVrMHoBmWY/DjtfYZoFTXie1RCFOkoG0b5diOOmUcuYarMpH7CSNTqwj+w==} + '@oven/bun-darwin-aarch64@1.3.11': + resolution: {integrity: sha512-/8IzqSu4/OWGRs7Fs2ROzGVwJMFTBQkgAp6sAthkBYoN7OiM4rY/CpPVs2X9w9N1W61CHSkEdNKi8HrLZKfK3g==} cpu: [arm64] os: [darwin] - '@oven/bun-darwin-x64-baseline@1.3.10': - resolution: {integrity: sha512-w1gaTlqU0IJCmJ1X+PGHkdNU1n8Gemx5YKkjhkJIguvFINXEBB5U1KG82QsT65Tk4KyNMfbLTlmy4giAvUoKfA==} + '@oven/bun-darwin-x64-baseline@1.3.11': + resolution: {integrity: sha512-CYjIHWaQG7T4phfjErHr6BiXRs0K/9DqMeiohJmuYSBF+H2m56vFslOenLCguGYQL9jeiiCZBeoVCpwjxZrMgQ==} cpu: [x64] os: [darwin] - '@oven/bun-darwin-x64@1.3.10': - resolution: {integrity: sha512-Nhssuh7GBpP5PiDSOl3+qnoIG7PJo+ec2oomDevnl9pRY6x6aD2gRt0JE+uf+A8Om2D6gjeHCxjEdrw5ZHE8mA==} + '@oven/bun-darwin-x64@1.3.11': + resolution: {integrity: sha512-TT7eUihnAzxM2tlZesusuC75PAOYKvUBgVU/Nm/lakZ/DpyuqhNkzUfcxSgmmK9IjVWzMmezLIGZl16XGCGJng==} cpu: [x64] os: [darwin] - '@oven/bun-linux-aarch64-musl@1.3.10': - resolution: {integrity: sha512-Ui5pAgM7JE9MzHokF0VglRMkbak3lTisY4Mf1AZutPACXWgKJC5aGrgnHBfkl7QS6fEeYb0juy1q4eRznRHOsw==} + '@oven/bun-linux-aarch64-musl@1.3.11': + resolution: {integrity: sha512-jBwYCLG5Eb+PqtFrc3Wp2WMYlw1Id75gUcsdP+ApCOpf5oQhHxkFWCjZmcDoioDmEhMWAiM3wtwSrTlPg+sI6Q==} cpu: [arm64] os: [linux] - '@oven/bun-linux-aarch64@1.3.10': - resolution: {integrity: sha512-OUgPHfL6+PM2Q+tFZjcaycN3D7gdQdYlWnwMI31DXZKY1r4HINWk9aEz9t/rNaHg65edwNrt7dsv9TF7xK8xIA==} + '@oven/bun-linux-aarch64@1.3.11': + resolution: {integrity: sha512-8XMLyRNxHF4jfLajkWt+F8UDxsWbzysyxQVMZKUXwoeGvaxB0rVd07r3YbgDtG8U6khhRFM3oaGp+CQ0whwmdA==} cpu: [arm64] os: [linux] - '@oven/bun-linux-x64-baseline@1.3.10': - resolution: {integrity: sha512-oqvMDYpX6dGJO03HgO5bXuccEsH3qbdO3MaAiAlO4CfkBPLUXz3N0DDElg5hz0L6ktdDVKbQVE5lfe+LAUISQg==} + '@oven/bun-linux-x64-baseline@1.3.11': + resolution: {integrity: sha512-KZlf1jKtf4jai8xiQv/0XRjxVVhHnw/HtUKtLdOeQpTOQ1fQFhLoz2FGGtVRd0LVa/yiRbSz9HlWIzWlmJClng==} cpu: [x64] os: [linux] - '@oven/bun-linux-x64-musl-baseline@1.3.10': - resolution: {integrity: sha512-/hOZ6S1VsTX6vtbhWVL9aAnOrdpuO54mAGUWpTdMz7dFG5UBZ/VUEiK0pBkq9A1rlBk0GeD/6Y4NBFl8Ha7cRA==} + '@oven/bun-linux-x64-musl-baseline@1.3.11': + resolution: {integrity: sha512-J+qz4Al05PrNIOdj7xsWVTyx0c/gjUauG5nKV3Rrx0Q+5JO+1pPVlnfNmWbOF9pKG4f3IGad8KXJUfGMORld+Q==} cpu: [x64] os: [linux] - '@oven/bun-linux-x64-musl@1.3.10': - resolution: {integrity: sha512-poVXvOShekbexHq45b4MH/mRjQKwACAC8lHp3Tz/hEDuz0/20oncqScnmKwzhBPEpqJvydXficXfBYuSim8opw==} + '@oven/bun-linux-x64-musl@1.3.11': + resolution: {integrity: sha512-ADImD4yCHNpqZu718E2chWcCaAHvua90yhmpzzV6fF4zOhwkGGbPCgUWmKyJ83uz+DXaPdYxX0ttDvtolrzx3Q==} cpu: [x64] os: [linux] - '@oven/bun-linux-x64@1.3.10': - resolution: {integrity: sha512-bzUgYj/PIZziB/ZesIP9HUyfvh6Vlf3od+TrbTTyVEuCSMKzDPQVW/yEbRp0tcHO3alwiEXwJDrWrHAguXlgiQ==} + '@oven/bun-linux-x64@1.3.11': + resolution: {integrity: sha512-z3GFCk1UBzDOOiEBHL32lVP7Edi26BhOjKb6bIc0nRyabbRiyON4++GR0zmd/H5zM5S0+UcXFgCGnD+b8avTLw==} cpu: [x64] os: [linux] - '@oven/bun-windows-aarch64@1.3.10': - resolution: {integrity: sha512-GXbz2swvN2DLw2dXZFeedMxSJtI64xQ9xp9Eg7Hjejg6mS2E4dP1xoQ2yAo2aZPi/2OBPAVaGzppI2q20XumHA==} + '@oven/bun-windows-aarch64@1.3.11': + resolution: {integrity: sha512-UOdkwScHRkGPz+n9ZJU7sTkTvqV7rD1SLCLaru1xH8WRsV7tDorPqNCzEN1msOIiPRK825nvAtEm9UsomO1GsA==} cpu: [arm64] os: [win32] - '@oven/bun-windows-x64-baseline@1.3.10': - resolution: {integrity: sha512-gh3UAHbUdDUG6fhLc1Csa4IGdtghue6U8oAIXWnUqawp6lwb3gOCRvp25IUnLF5vUHtgfMxuEUYV7YA2WxVutw==} + '@oven/bun-windows-x64-baseline@1.3.11': + resolution: {integrity: sha512-cCsXK9AQ9Zf18QlVnbrFu2IKfr4sf2sfbErkF2jfCzyCO9Bnhl0KRx63zlN+Ni1xU7gcBLAssgcui5R400N2eA==} cpu: [x64] os: [win32] - '@oven/bun-windows-x64@1.3.10': - resolution: {integrity: sha512-qaS1In3yfC/Z/IGQriVmF8GWwKuNqiw7feTSJWaQhH5IbL6ENR+4wGNPniZSJFaM/SKUO0e/YCRdoVBvgU4C1g==} + '@oven/bun-windows-x64@1.3.11': + resolution: {integrity: sha512-E51tyWDP1l0CbjZYhiUxhDGPaY8Hf5YBREx0PHBff1LM1/q3qsJ6ZvRUa8YbbOO0Ax9QP6GHjD9vf3n6bXZ7QA==} cpu: [x64] os: [win32] + '@oxc-project/types@0.122.0': + resolution: {integrity: sha512-oLAl5kBpV4w69UtFZ9xqcmTi+GENWOcPF7FCrczTiBbmC0ibXxCwyvZGbO39rCVEuLGAZM84DH0pUIyyv/YJzA==} + '@oxfmt/binding-android-arm-eabi@0.35.0': resolution: {integrity: sha512-BaRKlM3DyG81y/xWTsE6gZiv89F/3pHe2BqX2H4JbiB8HNVlWWtplzgATAE5IDSdwChdeuWLDTQzJ92Lglw3ZA==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1186,128 +1204,220 @@ packages: resolution: {integrity: sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - '@rollup/rollup-android-arm-eabi@4.59.0': - resolution: {integrity: sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg==} + '@rolldown/binding-android-arm64@1.0.0-rc.12': + resolution: {integrity: sha512-pv1y2Fv0JybcykuiiD3qBOBdz6RteYojRFY1d+b95WVuzx211CRh+ytI/+9iVyWQ6koTh5dawe4S/yRfOFjgaA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@rolldown/binding-darwin-arm64@1.0.0-rc.12': + resolution: {integrity: sha512-cFYr6zTG/3PXXF3pUO+umXxt1wkRK/0AYT8lDwuqvRC+LuKYWSAQAQZjCWDQpAH172ZV6ieYrNnFzVVcnSflAg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@rolldown/binding-darwin-x64@1.0.0-rc.12': + resolution: {integrity: sha512-ZCsYknnHzeXYps0lGBz8JrF37GpE9bFVefrlmDrAQhOEi4IOIlcoU1+FwHEtyXGx2VkYAvhu7dyBf75EJQffBw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@rolldown/binding-freebsd-x64@1.0.0-rc.12': + resolution: {integrity: sha512-dMLeprcVsyJsKolRXyoTH3NL6qtsT0Y2xeuEA8WQJquWFXkEC4bcu1rLZZSnZRMtAqwtrF/Ib9Ddtpa/Gkge9Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.12': + resolution: {integrity: sha512-YqWjAgGC/9M1lz3GR1r1rP79nMgo3mQiiA+Hfo+pvKFK1fAJ1bCi0ZQVh8noOqNacuY1qIcfyVfP6HoyBRZ85Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.12': + resolution: {integrity: sha512-/I5AS4cIroLpslsmzXfwbe5OmWvSsrFuEw3mwvbQ1kDxJ822hFHIx+vsN/TAzNVyepI/j/GSzrtCIwQPeKCLIg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.12': + resolution: {integrity: sha512-V6/wZztnBqlx5hJQqNWwFdxIKN0m38p8Jas+VoSfgH54HSj9tKTt1dZvG6JRHcjh6D7TvrJPWFGaY9UBVOaWPw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + + '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.12': + resolution: {integrity: sha512-AP3E9BpcUYliZCxa3w5Kwj9OtEVDYK6sVoUzy4vTOJsjPOgdaJZKFmN4oOlX0Wp0RPV2ETfmIra9x1xuayFB7g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + + '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.12': + resolution: {integrity: sha512-nWwpvUSPkoFmZo0kQazZYOrT7J5DGOJ/+QHHzjvNlooDZED8oH82Yg67HvehPPLAg5fUff7TfWFHQS8IV1n3og==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.12': + resolution: {integrity: sha512-RNrafz5bcwRy+O9e6P8Z/OCAJW/A+qtBczIqVYwTs14pf4iV1/+eKEjdOUta93q2TsT/FI0XYDP3TCky38LMAg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + + '@rolldown/binding-linux-x64-musl@1.0.0-rc.12': + resolution: {integrity: sha512-Jpw/0iwoKWx3LJ2rc1yjFrj+T7iHZn2JDg1Yny1ma0luviFS4mhAIcd1LFNxK3EYu3DHWCps0ydXQ5i/rrJ2ig==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + + '@rolldown/binding-openharmony-arm64@1.0.0-rc.12': + resolution: {integrity: sha512-vRugONE4yMfVn0+7lUKdKvN4D5YusEiPilaoO2sgUWpCvrncvWgPMzK00ZFFJuiPgLwgFNP5eSiUlv2tfc+lpA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@rolldown/binding-wasm32-wasi@1.0.0-rc.12': + resolution: {integrity: sha512-ykGiLr/6kkiHc0XnBfmFJuCjr5ZYKKofkx+chJWDjitX+KsJuAmrzWhwyOMSHzPhzOHOy7u9HlFoa5MoAOJ/Zg==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + + '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.12': + resolution: {integrity: sha512-5eOND4duWkwx1AzCxadcOrNeighiLwMInEADT0YM7xeEOOFcovWZCq8dadXgcRHSf3Ulh1kFo/qvzoFiCLOL1Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.12': + resolution: {integrity: sha512-PyqoipaswDLAZtot351MLhrlrh6lcZPo2LSYE+VDxbVk24LVKAGOuE4hb8xZQmrPAuEtTZW8E6D2zc5EUZX4Lw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + + '@rolldown/pluginutils@1.0.0-rc.12': + resolution: {integrity: sha512-HHMwmarRKvoFsJorqYlFeFRzXZqCt2ETQlEDOb9aqssrnVBB1/+xgTGtuTrIk5vzLNX1MjMtTf7W9z3tsSbrxw==} + + '@rollup/rollup-android-arm-eabi@4.60.1': + resolution: {integrity: sha512-d6FinEBLdIiK+1uACUttJKfgZREXrF0Qc2SmLII7W2AD8FfiZ9Wjd+rD/iRuf5s5dWrr1GgwXCvPqOuDquOowA==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.59.0': - resolution: {integrity: sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q==} + '@rollup/rollup-android-arm64@4.60.1': + resolution: {integrity: sha512-YjG/EwIDvvYI1YvYbHvDz/BYHtkY4ygUIXHnTdLhG+hKIQFBiosfWiACWortsKPKU/+dUwQQCKQM3qrDe8c9BA==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.59.0': - resolution: {integrity: sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==} + '@rollup/rollup-darwin-arm64@4.60.1': + resolution: {integrity: sha512-mjCpF7GmkRtSJwon+Rq1N8+pI+8l7w5g9Z3vWj4T7abguC4Czwi3Yu/pFaLvA3TTeMVjnu3ctigusqWUfjZzvw==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.59.0': - resolution: {integrity: sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==} + '@rollup/rollup-darwin-x64@4.60.1': + resolution: {integrity: sha512-haZ7hJ1JT4e9hqkoT9R/19XW2QKqjfJVv+i5AGg57S+nLk9lQnJ1F/eZloRO3o9Scy9CM3wQ9l+dkXtcBgN5Ew==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.59.0': - resolution: {integrity: sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==} + '@rollup/rollup-freebsd-arm64@4.60.1': + resolution: {integrity: sha512-czw90wpQq3ZsAVBlinZjAYTKduOjTywlG7fEeWKUA7oCmpA8xdTkxZZlwNJKWqILlq0wehoZcJYfBvOyhPTQ6w==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.59.0': - resolution: {integrity: sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==} + '@rollup/rollup-freebsd-x64@4.60.1': + resolution: {integrity: sha512-KVB2rqsxTHuBtfOeySEyzEOB7ltlB/ux38iu2rBQzkjbwRVlkhAGIEDiiYnO2kFOkJp+Z7pUXKyrRRFuFUKt+g==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.59.0': - resolution: {integrity: sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==} + '@rollup/rollup-linux-arm-gnueabihf@4.60.1': + resolution: {integrity: sha512-L+34Qqil+v5uC0zEubW7uByo78WOCIrBvci69E7sFASRl0X7b/MB6Cqd1lky/CtcSVTydWa2WZwFuWexjS5o6g==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.59.0': - resolution: {integrity: sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==} + '@rollup/rollup-linux-arm-musleabihf@4.60.1': + resolution: {integrity: sha512-n83O8rt4v34hgFzlkb1ycniJh7IR5RCIqt6mz1VRJD6pmhRi0CXdmfnLu9dIUS6buzh60IvACM842Ffb3xd6Gg==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.59.0': - resolution: {integrity: sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==} + '@rollup/rollup-linux-arm64-gnu@4.60.1': + resolution: {integrity: sha512-Nql7sTeAzhTAja3QXeAI48+/+GjBJ+QmAH13snn0AJSNL50JsDqotyudHyMbO2RbJkskbMbFJfIJKWA6R1LCJQ==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.59.0': - resolution: {integrity: sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA==} + '@rollup/rollup-linux-arm64-musl@4.60.1': + resolution: {integrity: sha512-+pUymDhd0ys9GcKZPPWlFiZ67sTWV5UU6zOJat02M1+PiuSGDziyRuI/pPue3hoUwm2uGfxdL+trT6Z9rxnlMA==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loong64-gnu@4.59.0': - resolution: {integrity: sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg==} + '@rollup/rollup-linux-loong64-gnu@4.60.1': + resolution: {integrity: sha512-VSvgvQeIcsEvY4bKDHEDWcpW4Yw7BtlKG1GUT4FzBUlEKQK0rWHYBqQt6Fm2taXS+1bXvJT6kICu5ZwqKCnvlQ==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-loong64-musl@4.59.0': - resolution: {integrity: sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q==} + '@rollup/rollup-linux-loong64-musl@4.60.1': + resolution: {integrity: sha512-4LqhUomJqwe641gsPp6xLfhqWMbQV04KtPp7/dIp0nzPxAkNY1AbwL5W0MQpcalLYk07vaW9Kp1PBhdpZYYcEw==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-ppc64-gnu@4.59.0': - resolution: {integrity: sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA==} + '@rollup/rollup-linux-ppc64-gnu@4.60.1': + resolution: {integrity: sha512-tLQQ9aPvkBxOc/EUT6j3pyeMD6Hb8QF2BTBnCQWP/uu1lhc9AIrIjKnLYMEroIz/JvtGYgI9dF3AxHZNaEH0rw==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-ppc64-musl@4.59.0': - resolution: {integrity: sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA==} + '@rollup/rollup-linux-ppc64-musl@4.60.1': + resolution: {integrity: sha512-RMxFhJwc9fSXP6PqmAz4cbv3kAyvD1etJFjTx4ONqFP9DkTkXsAMU4v3Vyc5BgzC+anz7nS/9tp4obsKfqkDHg==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.59.0': - resolution: {integrity: sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==} + '@rollup/rollup-linux-riscv64-gnu@4.60.1': + resolution: {integrity: sha512-QKgFl+Yc1eEk6MmOBfRHYF6lTxiiiV3/z/BRrbSiW2I7AFTXoBFvdMEyglohPj//2mZS4hDOqeB0H1ACh3sBbg==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-riscv64-musl@4.59.0': - resolution: {integrity: sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==} + '@rollup/rollup-linux-riscv64-musl@4.60.1': + resolution: {integrity: sha512-RAjXjP/8c6ZtzatZcA1RaQr6O1TRhzC+adn8YZDnChliZHviqIjmvFwHcxi4JKPSDAt6Uhf/7vqcBzQJy0PDJg==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.59.0': - resolution: {integrity: sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==} + '@rollup/rollup-linux-s390x-gnu@4.60.1': + resolution: {integrity: sha512-wcuocpaOlaL1COBYiA89O6yfjlp3RwKDeTIA0hM7OpmhR1Bjo9j31G1uQVpDlTvwxGn2nQs65fBFL5UFd76FcQ==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.59.0': - resolution: {integrity: sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==} + '@rollup/rollup-linux-x64-gnu@4.60.1': + resolution: {integrity: sha512-77PpsFQUCOiZR9+LQEFg9GClyfkNXj1MP6wRnzYs0EeWbPcHs02AXu4xuUbM1zhwn3wqaizle3AEYg5aeoohhg==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.59.0': - resolution: {integrity: sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg==} + '@rollup/rollup-linux-x64-musl@4.60.1': + resolution: {integrity: sha512-5cIATbk5vynAjqqmyBjlciMJl1+R/CwX9oLk/EyiFXDWd95KpHdrOJT//rnUl4cUcskrd0jCCw3wpZnhIHdD9w==} cpu: [x64] os: [linux] - '@rollup/rollup-openbsd-x64@4.59.0': - resolution: {integrity: sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ==} + '@rollup/rollup-openbsd-x64@4.60.1': + resolution: {integrity: sha512-cl0w09WsCi17mcmWqqglez9Gk8isgeWvoUZ3WiJFYSR3zjBQc2J5/ihSjpl+VLjPqjQ/1hJRcqBfLjssREQILw==} cpu: [x64] os: [openbsd] - '@rollup/rollup-openharmony-arm64@4.59.0': - resolution: {integrity: sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA==} + '@rollup/rollup-openharmony-arm64@4.60.1': + resolution: {integrity: sha512-4Cv23ZrONRbNtbZa37mLSueXUCtN7MXccChtKpUnQNgF010rjrjfHx3QxkS2PI7LqGT5xXyYs1a7LbzAwT0iCA==} cpu: [arm64] os: [openharmony] - '@rollup/rollup-win32-arm64-msvc@4.59.0': - resolution: {integrity: sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A==} + '@rollup/rollup-win32-arm64-msvc@4.60.1': + resolution: {integrity: sha512-i1okWYkA4FJICtr7KpYzFpRTHgy5jdDbZiWfvny21iIKky5YExiDXP+zbXzm3dUcFpkEeYNHgQ5fuG236JPq0g==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.59.0': - resolution: {integrity: sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA==} + '@rollup/rollup-win32-ia32-msvc@4.60.1': + resolution: {integrity: sha512-u09m3CuwLzShA0EYKMNiFgcjjzwqtUMLmuCJLeZWjjOYA3IT2Di09KaxGBTP9xVztWyIWjVdsB2E9goMjZvTQg==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-gnu@4.59.0': - resolution: {integrity: sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA==} + '@rollup/rollup-win32-x64-gnu@4.60.1': + resolution: {integrity: sha512-k+600V9Zl1CM7eZxJgMyTUzmrmhB/0XZnF4pRypKAlAgxmedUA+1v9R+XOFv56W4SlHEzfeMtzujLJD22Uz5zg==} cpu: [x64] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.59.0': - resolution: {integrity: sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA==} + '@rollup/rollup-win32-x64-msvc@4.60.1': + resolution: {integrity: sha512-lWMnixq/QzxyhTV6NjQJ4SFo1J6PvOX8vUx5Wb4bBPsEb+8xZ89Bz6kOXpfXj9ak9AHTQVQzlgzBEc1SyM27xQ==} cpu: [x64] os: [win32] @@ -1360,6 +1470,9 @@ packages: svelte: optional: true + '@tybys/wasm-util@0.10.1': + resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} + '@types/chai@5.2.3': resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} @@ -1393,102 +1506,102 @@ packages: '@types/validator@13.15.10': resolution: {integrity: sha512-T8L6i7wCuyoK8A/ZeLYt1+q0ty3Zb9+qbSSvrIVitzT3YjZqkTZ40IbRsPanlB4h1QB3JVL1SYCdR6ngtFYcuA==} - '@typescript-eslint/eslint-plugin@8.57.1': - resolution: {integrity: sha512-Gn3aqnvNl4NGc6x3/Bqk1AOn0thyTU9bqDRhiRnUWezgvr2OnhYCWCgC8zXXRVqBsIL1pSDt7T9nJUe0oM0kDQ==} + '@typescript-eslint/eslint-plugin@8.58.0': + resolution: {integrity: sha512-RLkVSiNuUP1C2ROIWfqX+YcUfLaSnxGE/8M+Y57lopVwg9VTYYfhuz15Yf1IzCKgZj6/rIbYTmJCUSqr76r0Wg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.57.1 + '@typescript-eslint/parser': ^8.58.0 eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: '>=4.8.4 <6.0.0' + typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/parser@8.57.1': - resolution: {integrity: sha512-k4eNDan0EIMTT/dUKc/g+rsJ6wcHYhNPdY19VoX/EOtaAG8DLtKCykhrUnuHPYvinn5jhAPgD2Qw9hXBwrahsw==} + '@typescript-eslint/parser@8.58.0': + resolution: {integrity: sha512-rLoGZIf9afaRBYsPUMtvkDWykwXwUPL60HebR4JgTI8mxfFe2cQTu3AGitANp4b9B2QlVru6WzjgB2IzJKiCSA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: '>=4.8.4 <6.0.0' + typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/project-service@8.57.1': - resolution: {integrity: sha512-vx1F37BRO1OftsYlmG9xay1TqnjNVlqALymwWVuYTdo18XuKxtBpCj1QlzNIEHlvlB27osvXFWptYiEWsVdYsg==} + '@typescript-eslint/project-service@8.58.0': + resolution: {integrity: sha512-8Q/wBPWLQP1j16NxoPNIKpDZFMaxl7yWIoqXWYeWO+Bbd2mjgvoF0dxP2jKZg5+x49rgKdf7Ck473M8PC3V9lg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '>=4.8.4 <6.0.0' + typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/scope-manager@8.57.1': - resolution: {integrity: sha512-hs/QcpCwlwT2L5S+3fT6gp0PabyGk4Q0Rv2doJXA0435/OpnSR3VRgvrp8Xdoc3UAYSg9cyUjTeFXZEPg/3OKg==} + '@typescript-eslint/scope-manager@8.58.0': + resolution: {integrity: sha512-W1Lur1oF50FxSnNdGp3Vs6P+yBRSmZiw4IIjEeYxd8UQJwhUF0gDgDD/W/Tgmh73mxgEU3qX0Bzdl/NGuSPEpQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.57.1': - resolution: {integrity: sha512-0lgOZB8cl19fHO4eI46YUx2EceQqhgkPSuCGLlGi79L2jwYY1cxeYc1Nae8Aw1xjgW3PKVDLlr3YJ6Bxx8HkWg==} + '@typescript-eslint/tsconfig-utils@8.58.0': + resolution: {integrity: sha512-doNSZEVJsWEu4htiVC+PR6NpM+pa+a4ClH9INRWOWCUzMst/VA9c4gXq92F8GUD1rwhNvRLkgjfYtFXegXQF7A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '>=4.8.4 <6.0.0' + typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/type-utils@8.57.1': - resolution: {integrity: sha512-+Bwwm0ScukFdyoJsh2u6pp4S9ktegF98pYUU0hkphOOqdMB+1sNQhIz8y5E9+4pOioZijrkfNO/HUJVAFFfPKA==} + '@typescript-eslint/type-utils@8.58.0': + resolution: {integrity: sha512-aGsCQImkDIqMyx1u4PrVlbi/krmDsQUs4zAcCV6M7yPcPev+RqVlndsJy9kJ8TLihW9TZ0kbDAzctpLn5o+lOg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: '>=4.8.4 <6.0.0' + typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/types@8.57.1': - resolution: {integrity: sha512-S29BOBPJSFUiblEl6RzPPjJt6w25A6XsBqRVDt53tA/tlL8q7ceQNZHTjPeONt/3S7KRI4quk+yP9jK2WjBiPQ==} + '@typescript-eslint/types@8.58.0': + resolution: {integrity: sha512-O9CjxypDT89fbHxRfETNoAnHj/i6IpRK0CvbVN3qibxlLdo5p5hcLmUuCCrHMpxiWSwKyI8mCP7qRNYuOJ0Uww==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.57.1': - resolution: {integrity: sha512-ybe2hS9G6pXpqGtPli9Gx9quNV0TWLOmh58ADlmZe9DguLq0tiAKVjirSbtM1szG6+QH6rVXyU6GTLQbWnMY+g==} + '@typescript-eslint/typescript-estree@8.58.0': + resolution: {integrity: sha512-7vv5UWbHqew/dvs+D3e1RvLv1v2eeZ9txRHPnEEBUgSNLx5ghdzjHa0sgLWYVKssH+lYmV0JaWdoubo0ncGYLA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '>=4.8.4 <6.0.0' + typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/utils@8.57.1': - resolution: {integrity: sha512-XUNSJ/lEVFttPMMoDVA2r2bwrl8/oPx8cURtczkSEswY5T3AeLmCy+EKWQNdL4u0MmAHOjcWrqJp2cdvgjn8dQ==} + '@typescript-eslint/utils@8.58.0': + resolution: {integrity: sha512-RfeSqcFeHMHlAWzt4TBjWOAtoW9lnsAGiP3GbaX9uVgTYYrMbVnGONEfUCiSss+xMHFl+eHZiipmA8WkQ7FuNA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: '>=4.8.4 <6.0.0' + typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/visitor-keys@8.57.1': - resolution: {integrity: sha512-YWnmJkXbofiz9KbnbbwuA2rpGkFPLbAIetcCNO6mJ8gdhdZ/v7WDXsoGFAJuM6ikUFKTlSQnjWnVO4ux+UzS6A==} + '@typescript-eslint/visitor-keys@8.58.0': + resolution: {integrity: sha512-XJ9UD9+bbDo4a4epraTwG3TsNPeiB9aShrUneAVXy8q4LuwowN+qu89/6ByLMINqvIMeI9H9hOHQtg/ijrYXzQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@vitest/coverage-v8@4.1.0': - resolution: {integrity: sha512-nDWulKeik2bL2Va/Wl4x7DLuTKAXa906iRFooIRPR+huHkcvp9QDkPQ2RJdmjOFrqOqvNfoSQLF68deE3xC3CQ==} + '@vitest/coverage-v8@4.1.2': + resolution: {integrity: sha512-sPK//PHO+kAkScb8XITeB1bf7fsk85Km7+rt4eeuRR3VS1/crD47cmV5wicisJmjNdfeokTZwjMk4Mj2d58Mgg==} peerDependencies: - '@vitest/browser': 4.1.0 - vitest: 4.1.0 + '@vitest/browser': 4.1.2 + vitest: 4.1.2 peerDependenciesMeta: '@vitest/browser': optional: true - '@vitest/expect@4.1.0': - resolution: {integrity: sha512-EIxG7k4wlWweuCLG9Y5InKFwpMEOyrMb6ZJ1ihYu02LVj/bzUwn2VMU+13PinsjRW75XnITeFrQBMH5+dLvCDA==} + '@vitest/expect@4.1.2': + resolution: {integrity: sha512-gbu+7B0YgUJ2nkdsRJrFFW6X7NTP44WlhiclHniUhxADQJH5Szt9mZ9hWnJPJ8YwOK5zUOSSlSvyzRf0u1DSBQ==} - '@vitest/mocker@4.1.0': - resolution: {integrity: sha512-evxREh+Hork43+Y4IOhTo+h5lGmVRyjqI739Rz4RlUPqwrkFFDF6EMvOOYjTx4E8Tl6gyCLRL8Mu7Ry12a13Tw==} + '@vitest/mocker@4.1.2': + resolution: {integrity: sha512-Ize4iQtEALHDttPRCmN+FKqOl2vxTiNUhzobQFFt/BM1lRUTG7zRCLOykG/6Vo4E4hnUdfVLo5/eqKPukcWW7Q==} peerDependencies: msw: ^2.4.9 - vite: ^6.0.0 || ^7.0.0 || ^8.0.0-0 + vite: ^6.0.0 || ^7.0.0 || ^8.0.0 peerDependenciesMeta: msw: optional: true vite: optional: true - '@vitest/pretty-format@4.1.0': - resolution: {integrity: sha512-3RZLZlh88Ib0J7NQTRATfc/3ZPOnSUn2uDBUoGNn5T36+bALixmzphN26OUD3LRXWkJu4H0s5vvUeqBiw+kS0A==} + '@vitest/pretty-format@4.1.2': + resolution: {integrity: sha512-dwQga8aejqeuB+TvXCMzSQemvV9hNEtDDpgUKDzOmNQayl2OG241PSWeJwKRH3CiC+sESrmoFd49rfnq7T4RnA==} - '@vitest/runner@4.1.0': - resolution: {integrity: sha512-Duvx2OzQ7d6OjchL+trw+aSrb9idh7pnNfxrklo14p3zmNL4qPCDeIJAK+eBKYjkIwG96Bc6vYuxhqDXQOWpoQ==} + '@vitest/runner@4.1.2': + resolution: {integrity: sha512-Gr+FQan34CdiYAwpGJmQG8PgkyFVmARK8/xSijia3eTFgVfpcpztWLuP6FttGNfPLJhaZVP/euvujeNYar36OQ==} - '@vitest/snapshot@4.1.0': - resolution: {integrity: sha512-0Vy9euT1kgsnj1CHttwi9i9o+4rRLEaPRSOJ5gyv579GJkNpgJK+B4HSv/rAWixx2wdAFci1X4CEPjiu2bXIMg==} + '@vitest/snapshot@4.1.2': + resolution: {integrity: sha512-g7yfUmxYS4mNxk31qbOYsSt2F4m1E02LFqO53Xpzg3zKMhLAPZAjjfyl9e6z7HrW6LvUdTwAQR3HHfLjpko16A==} - '@vitest/spy@4.1.0': - resolution: {integrity: sha512-pz77k+PgNpyMDv2FV6qmk5ZVau6c3R8HC8v342T2xlFxQKTrSeYw9waIJG8KgV9fFwAtTu4ceRzMivPTH6wSxw==} + '@vitest/spy@4.1.2': + resolution: {integrity: sha512-DU4fBnbVCJGNBwVA6xSToNXrkZNSiw59H8tcuUspVMsBDBST4nfvsPsEHDHGtWRRnqBERBQu7TrTKskmjqTXKA==} - '@vitest/utils@4.1.0': - resolution: {integrity: sha512-XfPXT6a8TZY3dcGY8EdwsBulFCIw+BeeX0RZn2x/BtiY/75YGh8FeWGG8QISN/WhaqSrE2OrlDgtF8q5uhOTmw==} + '@vitest/utils@4.1.2': + resolution: {integrity: sha512-xw2/TiX82lQHA06cgbqRKFb5lCAy3axQ4H4SoUFhUsg+wztiet+co86IAMDtF6Vm1hc7J6j09oh/rgDn+JdKIQ==} acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} @@ -1570,15 +1683,15 @@ packages: bottleneck@2.19.5: resolution: {integrity: sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==} - brace-expansion@2.0.2: - resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} + brace-expansion@2.0.3: + resolution: {integrity: sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA==} - brace-expansion@5.0.4: - resolution: {integrity: sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==} + brace-expansion@5.0.5: + resolution: {integrity: sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==} engines: {node: 18 || 20 || >=22} - bun@1.3.10: - resolution: {integrity: sha512-S/CXaXXIyA4CMjdMkYQ4T2YMqnAn4s0ysD3mlsY4bUiOCqGlv28zck4Wd4H4kpvbekx15S9mUeLQ7Uxd0tYTLA==} + bun@1.3.11: + resolution: {integrity: sha512-AvXWYFO6j/ZQ7bhGm4X6eilq2JHsDVC90ZM32k2B7/srhC2gs3Sdki1QTbwrdRCo8o7eT+167vcB1yzOvPdbjA==} cpu: [arm64, x64] os: [darwin, linux, win32] hasBin: true @@ -1678,12 +1791,12 @@ packages: resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} engines: {node: ^14.18.0 || >=16.10.0} - conventional-changelog-angular@8.3.0: - resolution: {integrity: sha512-DOuBwYSqWzfwuRByY9O4oOIvDlkUCTDzfbOgcSbkY+imXXj+4tmrEFao3K+FxemClYfYnZzsvudbwrhje9VHDA==} + conventional-changelog-angular@8.3.1: + resolution: {integrity: sha512-6gfI3otXK5Ph5DfCOI1dblr+kN3FAm5a97hYoQkqNZxOaYa5WKfXH+AnpsmS+iUH2mgVC2Cg2Qw9m5OKcmNrIg==} engines: {node: '>=18'} - conventional-changelog-conventionalcommits@9.3.0: - resolution: {integrity: sha512-kYFx6gAyjSIMwNtASkI3ZE99U1fuVDJr0yTYgVy+I2QG46zNZfl2her+0+eoviG82c5WQvW1jMt1eOQTeJLodA==} + conventional-changelog-conventionalcommits@9.3.1: + resolution: {integrity: sha512-dTYtpIacRpcZgrvBYvBfArMmK2xvIpv2TaxM0/ZI5CBtNUzvF2x0t15HsbRABWprS6UPmvj+PzHVjSx4qAVKyw==} engines: {node: '>=18'} conventional-changelog-preset-loader@5.0.0: @@ -1694,8 +1807,8 @@ packages: resolution: {integrity: sha512-tQMagCOC59EVgNZcC5zl7XqO30Wki9i9J3acbUvkaosCT6JX3EeFwJD7Qqp4MCikRnzS18WXV3BLIQ66ytu6+Q==} engines: {node: '>=18'} - conventional-commits-parser@6.3.0: - resolution: {integrity: sha512-RfOq/Cqy9xV9bOA8N+ZH6DlrDR+5S3Mi0B5kACEjESpE+AviIpAptx9a9cFpWCCvgRtWT+0BbUw+e1BZfts9jg==} + conventional-commits-parser@6.4.0: + resolution: {integrity: sha512-tvRg7FIBNlyPzjdG8wWRlPHQJJHI7DylhtRGeU9Lq+JuoPh5BKpPRX83ZdLrvXuOSu5Eo/e7SzOQhU4Hd2Miuw==} engines: {node: '>=18'} hasBin: true @@ -1740,18 +1853,22 @@ packages: deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - defu@6.1.4: - resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} + defu@6.1.6: + resolution: {integrity: sha512-f8mefEW4WIVg4LckePx3mALjQSPQgFlg9U8yaPdlsbdYcHQyj9n2zL2LJEA52smeYxOvmd/nB7TpMtHGMTHcug==} destr@2.0.5: resolution: {integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==} + detect-libc@2.1.2: + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} + engines: {node: '>=8'} + dot-prop@5.3.0: resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} engines: {node: '>=8'} - dotenv@17.3.1: - resolution: {integrity: sha512-IO8C/dzEb6O3F9/twg6ZLXz164a2fhTnEWb95H23Dm4OuN+92NmEAlTrupP9VW6Jm3sO26tQlqyvyi4CsnY9GA==} + dotenv@17.4.0: + resolution: {integrity: sha512-kCKF62fwtzwYm0IGBNjRUjtJgMfGapII+FslMHIjMR5KTnwEmBmWLDRSnc3XSNP8bNy34tekgQyDT0hr7pERRQ==} engines: {node: '>=12'} emoji-regex@10.6.0: @@ -1777,8 +1894,8 @@ packages: es-module-lexer@2.0.0: resolution: {integrity: sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==} - esbuild@0.27.4: - resolution: {integrity: sha512-Rq4vbHnYkK5fws5NF7MYTU68FPRE1ajX7heQ/8QXXWqNgqqJ/GkmmyxIzUnf2Sr/bakf8l54716CcMGHYhMrrQ==} + esbuild@0.27.5: + resolution: {integrity: sha512-zdQoHBjuDqKsvV5OPaWansOwfSQ0Js+Uj9J85TBvj3bFW1JjWTSULMRwdQAc8qMeIScbClxeMK0jlrtB9linhA==} engines: {node: '>=18'} hasBin: true @@ -1842,8 +1959,8 @@ packages: resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - eslint@10.0.3: - resolution: {integrity: sha512-COV33RzXZkqhG9P2rZCFl9ZmJ7WL+gQSCRzE7RhkbclbQPtLAWReL7ysA0Sh4c8Im2U9ynybdR56PV0XcKvqaQ==} + eslint@10.1.0: + resolution: {integrity: sha512-S9jlY/ELKEUwwQnqWDO+f+m6sercqOPSqXM5Go94l7DOmxHVDgmSFGWEzeE/gwgTAr0W103BWt0QLe/7mabIvA==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} hasBin: true peerDependencies: @@ -2162,8 +2279,8 @@ packages: json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - json-with-bigint@3.5.7: - resolution: {integrity: sha512-7ei3MdAI5+fJPVnKlW77TKNKwQ5ppSzWvhPuSuINT/GYW9ZOC1eRKOuhV9yHG5aEsUPj9BBx5JIekkmoLHxZOw==} + json-with-bigint@3.5.8: + resolution: {integrity: sha512-eq/4KP6K34kwa7TcFdtvnftvHCD9KvHOGGICWwMFc4dOOKF5t4iYqnfLK8otCRCRv06FXOzGGyqE8h8ElMvvdw==} jsonc-parser@3.3.1: resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==} @@ -2175,8 +2292,78 @@ packages: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} - libphonenumber-js@1.12.40: - resolution: {integrity: sha512-HKGs7GowShNls3Zh+7DTr6wYpPk5jC78l508yQQY3e8ZgJChM3A9JZghmMJZuK+5bogSfuTafpjksGSR3aMIEg==} + libphonenumber-js@1.12.41: + resolution: {integrity: sha512-lsmMmGXBxXIK/VMLEj0kL6MtUs1kBGj1nTCzi6zgQoG1DEwqwt2DQyHxcLykceIxAnfE3hya7NuIh6PpC6S3fA==} + + lightningcss-android-arm64@1.32.0: + resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [android] + + lightningcss-darwin-arm64@1.32.0: + resolution: {integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + + lightningcss-darwin-x64@1.32.0: + resolution: {integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + + lightningcss-freebsd-x64@1.32.0: + resolution: {integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + + lightningcss-linux-arm-gnueabihf@1.32.0: + resolution: {integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + + lightningcss-linux-arm64-gnu@1.32.0: + resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + + lightningcss-linux-arm64-musl@1.32.0: + resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + + lightningcss-linux-x64-gnu@1.32.0: + resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + + lightningcss-linux-x64-musl@1.32.0: + resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + + lightningcss-win32-arm64-msvc@1.32.0: + resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [win32] + + lightningcss-win32-x64-msvc@1.32.0: + resolution: {integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] + + lightningcss@1.32.0: + resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==} + engines: {node: '>= 12.0.0'} lilconfig@3.1.3: resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} @@ -2202,8 +2389,8 @@ packages: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} - lodash-es@4.17.23: - resolution: {integrity: sha512-kVI48u3PZr38HdYz98UmfPnXl2DXrpdctLrFLCd3kOx1xUkOmpFPx7gCWWM5MPkL/fD8zb+Ph0QzjGFs4+hHWg==} + lodash-es@4.18.1: + resolution: {integrity: sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==} lodash.camelcase@4.3.0: resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} @@ -2249,8 +2436,8 @@ packages: resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} engines: {node: '>=18'} - minimatch@10.2.4: - resolution: {integrity: sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==} + minimatch@10.2.5: + resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} engines: {node: 18 || 20 || >=22} minimatch@9.0.9: @@ -2260,8 +2447,8 @@ packages: minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - mlly@1.8.1: - resolution: {integrity: sha512-SnL6sNutTwRWWR/vcmCYHSADjiEesp5TGQQ0pXyLhW5IoeibRlF/CbSLailbB3CNqJUk9cVJ9dUDnbD7GrcHBQ==} + mlly@1.8.2: + resolution: {integrity: sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==} ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} @@ -2364,8 +2551,8 @@ packages: picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - picomatch@4.0.3: - resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} + picomatch@4.0.4: + resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} engines: {node: '>=12'} pirates@4.0.7: @@ -2422,8 +2609,8 @@ packages: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} - rc9@3.0.0: - resolution: {integrity: sha512-MGOue0VqscKWQ104udASX/3GYDcKyPI4j4F8gu/jHHzglpmy9a/anZK3PNe8ug6aZFl+9GxLtdhe3kVZuMaQbA==} + rc9@3.0.1: + resolution: {integrity: sha512-gMDyleLWVE+i6Sgtc0QbbY6pEKqYs97NGi6isHQPqYlLemPoO8dxQ3uGi0f4NiP98c+jMW6cG1Kx9dDwfvqARQ==} readdirp@4.1.2: resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} @@ -2459,8 +2646,13 @@ packages: rfdc@1.4.1: resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} - rollup@4.59.0: - resolution: {integrity: sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==} + rolldown@1.0.0-rc.12: + resolution: {integrity: sha512-yP4USLIMYrwpPHEFB5JGH1uxhcslv6/hL0OyvTuY+3qlOSJvZ7ntYnoWpehBxufkgN0cvXxppuTu5hHa/zPh+A==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + + rollup@4.60.1: + resolution: {integrity: sha512-VmtB2rFU/GroZ4oL8+ZqXgSA38O6GR8KSIvWmEFv63pQ0G6KaBH9s07PO8XTXP4vI+3UJUEypOfjkGfmSBBR0w==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -2502,8 +2694,8 @@ packages: resolution: {integrity: sha512-stxByr12oeeOyY2BlviTNQlYV5xOj47GirPr4yA1hE9JCtxfQN0+tVbkxwCtYDQWhEKWFHsEK48ORg5jrouCAg==} engines: {node: '>=20'} - smol-toml@1.6.0: - resolution: {integrity: sha512-4zemZi0HvTnYwLfrpk/CF9LOd9Lt87kAt50GnqhMpyF9U3poDAP2+iukq2bZsO/ufegbYehBkqINbsWxj4l4cw==} + smol-toml@1.6.1: + resolution: {integrity: sha512-dWUG8F5sIIARXih1DTaQAX4SsiTXhInKf1buxdY9DIg4ZYPZK5nGM1VRIYmEbDbsHt7USo99xSLFu5Q1IqTmsg==} engines: {node: '>= 18'} source-map-js@1.2.1: @@ -2606,8 +2798,8 @@ packages: resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} hasBin: true - ts-api-utils@2.4.0: - resolution: {integrity: sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==} + ts-api-utils@2.5.0: + resolution: {integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==} engines: {node: '>=18.12'} peerDependencies: typescript: '>=4.8.4' @@ -2645,12 +2837,12 @@ packages: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} - typescript-eslint@8.57.1: - resolution: {integrity: sha512-fLvZWf+cAGw3tqMCYzGIU6yR8K+Y9NT2z23RwOjlNFF2HwSB3KhdEFI5lSBv8tNmFkkBShSjsCjzx1vahZfISA==} + typescript-eslint@8.58.0: + resolution: {integrity: sha512-e2TQzKfaI85fO+F3QywtX+tCTsu/D3WW5LVU6nz8hTFKFZ8yBJ6mSYRpXqdR3mFjPWmO0eWsTa5f+UpAOe/FMA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: '>=4.8.4 <6.0.0' + typescript: '>=4.8.4 <6.1.0' typescript@5.9.3: resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} @@ -2685,15 +2877,16 @@ packages: resolution: {integrity: sha512-spH26xU080ydGggxRyR1Yhcbgx+j3y5jbNXk/8L+iRvdIEQ4uTRH2Sgf2dokud6Q4oAtsbNvJ1Ft+9xmm6IZcA==} engines: {node: '>= 0.10'} - vite@7.3.1: - resolution: {integrity: sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==} + vite@8.0.3: + resolution: {integrity: sha512-B9ifbFudT1TFhfltfaIPgjo9Z3mDynBTJSUYxTjOQruf/zHH+ezCQKcoqO+h7a9Pw9Nm/OtlXAiGT1axBgwqrQ==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: '@types/node': ^20.19.0 || >=22.12.0 + '@vitejs/devtools': ^0.1.0 + esbuild: ^0.27.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' @@ -2704,12 +2897,14 @@ packages: peerDependenciesMeta: '@types/node': optional: true + '@vitejs/devtools': + optional: true + esbuild: + optional: true jiti: optional: true less: optional: true - lightningcss: - optional: true sass: optional: true sass-embedded: @@ -2725,21 +2920,21 @@ packages: yaml: optional: true - vitest@4.1.0: - resolution: {integrity: sha512-YbDrMF9jM2Lqc++2530UourxZHmkKLxrs4+mYhEwqWS97WJ7wOYEkcr+QfRgJ3PW9wz3odRijLZjHEaRLTNbqw==} + vitest@4.1.2: + resolution: {integrity: sha512-xjR1dMTVHlFLh98JE3i/f/WePqJsah4A0FK9cc8Ehp9Udk0AZk6ccpIZhh1qJ/yxVWRZ+Q54ocnD8TXmkhspGg==} 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.1.0 - '@vitest/browser-preview': 4.1.0 - '@vitest/browser-webdriverio': 4.1.0 - '@vitest/ui': 4.1.0 + '@vitest/browser-playwright': 4.1.2 + '@vitest/browser-preview': 4.1.2 + '@vitest/browser-webdriverio': 4.1.2 + '@vitest/ui': 4.1.2 happy-dom: '*' jsdom: '*' - vite: ^6.0.0 || ^7.0.0 || ^8.0.0-0 + vite: ^6.0.0 || ^7.0.0 || ^8.0.0 peerDependenciesMeta: '@edge-runtime/vm': optional: true @@ -2790,8 +2985,8 @@ packages: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} - yaml@2.8.2: - resolution: {integrity: sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==} + yaml@2.8.3: + resolution: {integrity: sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==} engines: {node: '>= 14.6'} hasBin: true @@ -2848,29 +3043,29 @@ snapshots: '@actions/io@3.0.2': {} - '@angular-devkit/core@21.2.2(chokidar@5.0.0)': + '@angular-devkit/core@21.2.6(chokidar@5.0.0)': dependencies: ajv: 8.18.0 ajv-formats: 3.0.1(ajv@8.18.0) jsonc-parser: 3.3.1 - picomatch: 4.0.3 + picomatch: 4.0.4 rxjs: 7.8.2 source-map: 0.7.6 optionalDependencies: chokidar: 5.0.0 - '@angular-devkit/schematics-cli@21.2.2(@types/node@25.5.0)(chokidar@5.0.0)': + '@angular-devkit/schematics-cli@21.2.6(@types/node@25.5.0)(chokidar@5.0.0)': dependencies: - '@angular-devkit/core': 21.2.2(chokidar@5.0.0) - '@angular-devkit/schematics': 21.2.2(chokidar@5.0.0) + '@angular-devkit/core': 21.2.6(chokidar@5.0.0) + '@angular-devkit/schematics': 21.2.6(chokidar@5.0.0) '@inquirer/prompts': 7.10.1(@types/node@25.5.0) transitivePeerDependencies: - '@types/node' - chokidar - '@angular-devkit/schematics@21.2.2(chokidar@5.0.0)': + '@angular-devkit/schematics@21.2.6(chokidar@5.0.0)': dependencies: - '@angular-devkit/core': 21.2.2(chokidar@5.0.0) + '@angular-devkit/core': 21.2.6(chokidar@5.0.0) jsonc-parser: 3.3.1 magic-string: 0.30.21 ora: 9.3.0 @@ -2927,12 +3122,12 @@ snapshots: '@bcoe/v8-coverage@1.0.2': {} - '@commitlint/cli@20.5.0(@types/node@25.5.0)(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.3.0)(typescript@5.9.3)': + '@commitlint/cli@20.5.0(@types/node@25.5.0)(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0)(typescript@5.9.3)': dependencies: '@commitlint/format': 20.5.0 '@commitlint/lint': 20.5.0 '@commitlint/load': 20.5.0(@types/node@25.5.0)(typescript@5.9.3) - '@commitlint/read': 20.5.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.3.0) + '@commitlint/read': 20.5.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0) '@commitlint/types': 20.5.0 tinyexec: 1.0.4 yargs: 17.7.2 @@ -2945,7 +3140,7 @@ snapshots: '@commitlint/config-conventional@20.5.0': dependencies: '@commitlint/types': 20.5.0 - conventional-changelog-conventionalcommits: 9.3.0 + conventional-changelog-conventionalcommits: 9.3.1 '@commitlint/config-validator@20.5.0': dependencies: @@ -3000,14 +3195,14 @@ snapshots: '@commitlint/parse@20.5.0': dependencies: '@commitlint/types': 20.5.0 - conventional-changelog-angular: 8.3.0 - conventional-commits-parser: 6.3.0 + conventional-changelog-angular: 8.3.1 + conventional-commits-parser: 6.4.0 - '@commitlint/read@20.5.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.3.0)': + '@commitlint/read@20.5.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0)': dependencies: '@commitlint/top-level': 20.4.3 '@commitlint/types': 20.5.0 - git-raw-commits: 5.0.1(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.3.0) + git-raw-commits: 5.0.1(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0) minimist: 1.2.8 tinyexec: 1.0.4 transitivePeerDependencies: @@ -3038,25 +3233,25 @@ snapshots: '@commitlint/types@20.5.0': dependencies: - conventional-commits-parser: 6.3.0 + conventional-commits-parser: 6.4.0 picocolors: 1.1.1 - '@conventional-changelog/git-client@1.0.1(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.3.0)': + '@conventional-changelog/git-client@1.0.1(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0)': dependencies: '@types/semver': 7.7.1 semver: 7.7.4 optionalDependencies: conventional-commits-filter: 5.0.0 - conventional-commits-parser: 6.3.0 + conventional-commits-parser: 6.4.0 - '@conventional-changelog/git-client@2.6.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.3.0)': + '@conventional-changelog/git-client@2.6.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0)': dependencies: '@simple-libs/child-process-utils': 1.0.2 '@simple-libs/stream-utils': 1.2.0 semver: 7.7.4 optionalDependencies: conventional-commits-filter: 5.0.0 - conventional-commits-parser: 6.3.0 + conventional-commits-parser: 6.4.0 '@dprint/formatter@0.5.1': {} @@ -3064,87 +3259,103 @@ snapshots: '@dprint/toml@0.7.0': {} - '@esbuild/aix-ppc64@0.27.4': + '@emnapi/core@1.9.1': + dependencies: + '@emnapi/wasi-threads': 1.2.0 + tslib: 2.8.1 optional: true - '@esbuild/android-arm64@0.27.4': + '@emnapi/runtime@1.9.1': + dependencies: + tslib: 2.8.1 + optional: true + + '@emnapi/wasi-threads@1.2.0': + dependencies: + tslib: 2.8.1 optional: true - '@esbuild/android-arm@0.27.4': + '@esbuild/aix-ppc64@0.27.5': optional: true - '@esbuild/android-x64@0.27.4': + '@esbuild/android-arm64@0.27.5': optional: true - '@esbuild/darwin-arm64@0.27.4': + '@esbuild/android-arm@0.27.5': optional: true - '@esbuild/darwin-x64@0.27.4': + '@esbuild/android-x64@0.27.5': optional: true - '@esbuild/freebsd-arm64@0.27.4': + '@esbuild/darwin-arm64@0.27.5': optional: true - '@esbuild/freebsd-x64@0.27.4': + '@esbuild/darwin-x64@0.27.5': optional: true - '@esbuild/linux-arm64@0.27.4': + '@esbuild/freebsd-arm64@0.27.5': optional: true - '@esbuild/linux-arm@0.27.4': + '@esbuild/freebsd-x64@0.27.5': optional: true - '@esbuild/linux-ia32@0.27.4': + '@esbuild/linux-arm64@0.27.5': optional: true - '@esbuild/linux-loong64@0.27.4': + '@esbuild/linux-arm@0.27.5': optional: true - '@esbuild/linux-mips64el@0.27.4': + '@esbuild/linux-ia32@0.27.5': optional: true - '@esbuild/linux-ppc64@0.27.4': + '@esbuild/linux-loong64@0.27.5': optional: true - '@esbuild/linux-riscv64@0.27.4': + '@esbuild/linux-mips64el@0.27.5': optional: true - '@esbuild/linux-s390x@0.27.4': + '@esbuild/linux-ppc64@0.27.5': optional: true - '@esbuild/linux-x64@0.27.4': + '@esbuild/linux-riscv64@0.27.5': optional: true - '@esbuild/netbsd-arm64@0.27.4': + '@esbuild/linux-s390x@0.27.5': optional: true - '@esbuild/netbsd-x64@0.27.4': + '@esbuild/linux-x64@0.27.5': optional: true - '@esbuild/openbsd-arm64@0.27.4': + '@esbuild/netbsd-arm64@0.27.5': optional: true - '@esbuild/openbsd-x64@0.27.4': + '@esbuild/netbsd-x64@0.27.5': optional: true - '@esbuild/openharmony-arm64@0.27.4': + '@esbuild/openbsd-arm64@0.27.5': optional: true - '@esbuild/sunos-x64@0.27.4': + '@esbuild/openbsd-x64@0.27.5': optional: true - '@esbuild/win32-arm64@0.27.4': + '@esbuild/openharmony-arm64@0.27.5': optional: true - '@esbuild/win32-ia32@0.27.4': + '@esbuild/sunos-x64@0.27.5': optional: true - '@esbuild/win32-x64@0.27.4': + '@esbuild/win32-arm64@0.27.5': optional: true - '@eslint-community/eslint-utils@4.9.1(eslint@10.0.3(jiti@2.6.1))': + '@esbuild/win32-ia32@0.27.5': + optional: true + + '@esbuild/win32-x64@0.27.5': + optional: true + + '@eslint-community/eslint-utils@4.9.1(eslint@10.1.0(jiti@2.6.1))': dependencies: - eslint: 10.0.3(jiti@2.6.1) + eslint: 10.1.0(jiti@2.6.1) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.2': {} @@ -3153,7 +3364,7 @@ snapshots: dependencies: '@eslint/object-schema': 3.0.3 debug: 4.4.3 - minimatch: 10.2.4 + minimatch: 10.2.5 transitivePeerDependencies: - supports-color @@ -3189,7 +3400,7 @@ snapshots: git-cliff: 2.12.0 js-yaml: 4.1.1 semver: 7.7.4 - smol-toml: 1.6.0 + smol-toml: 1.6.1 '@favware/colorette-spinner@1.0.1': dependencies: @@ -3473,7 +3684,7 @@ snapshots: '@nanoforge-dev/loader-client@1.3.0': dependencies: '@nanoforge-dev/loader-website': 1.2.0 - bun: 1.3.10 + bun: 1.3.11 commander: 14.0.3 '@nanoforge-dev/loader-server@1.2.0': @@ -3482,24 +3693,24 @@ snapshots: '@nanoforge-dev/loader-website@1.2.0': {} - '@nanoforge-dev/schematics@2.0.0(chokidar@5.0.0)': + '@nanoforge-dev/schematics@2.1.1(chokidar@5.0.0)': dependencies: - '@angular-devkit/core': 21.2.2(chokidar@5.0.0) - '@angular-devkit/schematics': 21.2.2(chokidar@5.0.0) + '@angular-devkit/core': 21.2.6(chokidar@5.0.0) + '@angular-devkit/schematics': 21.2.6(chokidar@5.0.0) rxjs: 7.8.2 transitivePeerDependencies: - chokidar - '@nanoforge-dev/utils-eslint-config@1.0.2(@types/eslint@9.6.1)(eslint@10.0.3(jiti@2.6.1))(prettier@3.8.1)(typescript@5.9.3)': + '@nanoforge-dev/utils-eslint-config@1.0.2(@types/eslint@9.6.1)(eslint@10.1.0(jiti@2.6.1))(prettier@3.8.1)(typescript@5.9.3)': dependencies: '@eslint/js': 9.39.4 '@favware/cliff-jumper': 6.0.0 - eslint-config-prettier: 10.1.8(eslint@10.0.3(jiti@2.6.1)) + eslint-config-prettier: 10.1.8(eslint@10.1.0(jiti@2.6.1)) eslint-formatter-pretty: 7.0.0 - eslint-plugin-format: 1.5.0(eslint@10.0.3(jiti@2.6.1)) - eslint-plugin-prettier: 5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.0.3(jiti@2.6.1)))(eslint@10.0.3(jiti@2.6.1))(prettier@3.8.1) + eslint-plugin-format: 1.5.0(eslint@10.1.0(jiti@2.6.1)) + eslint-plugin-prettier: 5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.1.0(jiti@2.6.1)))(eslint@10.1.0(jiti@2.6.1))(prettier@3.8.1) globals: 16.5.0 - typescript-eslint: 8.57.1(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3) + typescript-eslint: 8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) transitivePeerDependencies: - '@types/eslint' - eslint @@ -3509,6 +3720,13 @@ snapshots: '@nanoforge-dev/utils-prettier-config@1.0.2': {} + '@napi-rs/wasm-runtime@1.1.2(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)': + dependencies: + '@emnapi/core': 1.9.1 + '@emnapi/runtime': 1.9.1 + '@tybys/wasm-util': 0.10.1 + optional: true + '@octokit/auth-token@5.1.2': {} '@octokit/auth-token@6.0.0': {} @@ -3590,7 +3808,7 @@ snapshots: '@octokit/request-error': 7.1.0 '@octokit/types': 16.0.0 fast-content-type-parse: 3.0.0 - json-with-bigint: 3.5.7 + json-with-bigint: 3.5.8 universal-user-agent: 7.0.3 '@octokit/request@9.2.4': @@ -3609,42 +3827,44 @@ snapshots: dependencies: '@octokit/openapi-types': 27.0.0 - '@oven/bun-darwin-aarch64@1.3.10': + '@oven/bun-darwin-aarch64@1.3.11': optional: true - '@oven/bun-darwin-x64-baseline@1.3.10': + '@oven/bun-darwin-x64-baseline@1.3.11': optional: true - '@oven/bun-darwin-x64@1.3.10': + '@oven/bun-darwin-x64@1.3.11': optional: true - '@oven/bun-linux-aarch64-musl@1.3.10': + '@oven/bun-linux-aarch64-musl@1.3.11': optional: true - '@oven/bun-linux-aarch64@1.3.10': + '@oven/bun-linux-aarch64@1.3.11': optional: true - '@oven/bun-linux-x64-baseline@1.3.10': + '@oven/bun-linux-x64-baseline@1.3.11': optional: true - '@oven/bun-linux-x64-musl-baseline@1.3.10': + '@oven/bun-linux-x64-musl-baseline@1.3.11': optional: true - '@oven/bun-linux-x64-musl@1.3.10': + '@oven/bun-linux-x64-musl@1.3.11': optional: true - '@oven/bun-linux-x64@1.3.10': + '@oven/bun-linux-x64@1.3.11': optional: true - '@oven/bun-windows-aarch64@1.3.10': + '@oven/bun-windows-aarch64@1.3.11': optional: true - '@oven/bun-windows-x64-baseline@1.3.10': + '@oven/bun-windows-x64-baseline@1.3.11': optional: true - '@oven/bun-windows-x64@1.3.10': + '@oven/bun-windows-x64@1.3.11': optional: true + '@oxc-project/types@0.122.0': {} + '@oxfmt/binding-android-arm-eabi@0.35.0': optional: true @@ -3704,79 +3924,131 @@ snapshots: '@pkgr/core@0.2.9': {} - '@rollup/rollup-android-arm-eabi@4.59.0': + '@rolldown/binding-android-arm64@1.0.0-rc.12': + optional: true + + '@rolldown/binding-darwin-arm64@1.0.0-rc.12': + optional: true + + '@rolldown/binding-darwin-x64@1.0.0-rc.12': + optional: true + + '@rolldown/binding-freebsd-x64@1.0.0-rc.12': + optional: true + + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.12': + optional: true + + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.12': optional: true - '@rollup/rollup-android-arm64@4.59.0': + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.12': optional: true - '@rollup/rollup-darwin-arm64@4.59.0': + '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.12': optional: true - '@rollup/rollup-darwin-x64@4.59.0': + '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.12': optional: true - '@rollup/rollup-freebsd-arm64@4.59.0': + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.12': optional: true - '@rollup/rollup-freebsd-x64@4.59.0': + '@rolldown/binding-linux-x64-musl@1.0.0-rc.12': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.59.0': + '@rolldown/binding-openharmony-arm64@1.0.0-rc.12': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.59.0': + '@rolldown/binding-wasm32-wasi@1.0.0-rc.12(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)': + dependencies: + '@napi-rs/wasm-runtime': 1.1.2(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1) + transitivePeerDependencies: + - '@emnapi/core' + - '@emnapi/runtime' + optional: true + + '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.12': + optional: true + + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.12': optional: true - '@rollup/rollup-linux-arm64-gnu@4.59.0': + '@rolldown/pluginutils@1.0.0-rc.12': {} + + '@rollup/rollup-android-arm-eabi@4.60.1': + optional: true + + '@rollup/rollup-android-arm64@4.60.1': optional: true - '@rollup/rollup-linux-arm64-musl@4.59.0': + '@rollup/rollup-darwin-arm64@4.60.1': optional: true - '@rollup/rollup-linux-loong64-gnu@4.59.0': + '@rollup/rollup-darwin-x64@4.60.1': optional: true - '@rollup/rollup-linux-loong64-musl@4.59.0': + '@rollup/rollup-freebsd-arm64@4.60.1': optional: true - '@rollup/rollup-linux-ppc64-gnu@4.59.0': + '@rollup/rollup-freebsd-x64@4.60.1': optional: true - '@rollup/rollup-linux-ppc64-musl@4.59.0': + '@rollup/rollup-linux-arm-gnueabihf@4.60.1': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.59.0': + '@rollup/rollup-linux-arm-musleabihf@4.60.1': optional: true - '@rollup/rollup-linux-riscv64-musl@4.59.0': + '@rollup/rollup-linux-arm64-gnu@4.60.1': optional: true - '@rollup/rollup-linux-s390x-gnu@4.59.0': + '@rollup/rollup-linux-arm64-musl@4.60.1': optional: true - '@rollup/rollup-linux-x64-gnu@4.59.0': + '@rollup/rollup-linux-loong64-gnu@4.60.1': optional: true - '@rollup/rollup-linux-x64-musl@4.59.0': + '@rollup/rollup-linux-loong64-musl@4.60.1': optional: true - '@rollup/rollup-openbsd-x64@4.59.0': + '@rollup/rollup-linux-ppc64-gnu@4.60.1': optional: true - '@rollup/rollup-openharmony-arm64@4.59.0': + '@rollup/rollup-linux-ppc64-musl@4.60.1': optional: true - '@rollup/rollup-win32-arm64-msvc@4.59.0': + '@rollup/rollup-linux-riscv64-gnu@4.60.1': optional: true - '@rollup/rollup-win32-ia32-msvc@4.59.0': + '@rollup/rollup-linux-riscv64-musl@4.60.1': optional: true - '@rollup/rollup-win32-x64-gnu@4.59.0': + '@rollup/rollup-linux-s390x-gnu@4.60.1': optional: true - '@rollup/rollup-win32-x64-msvc@4.59.0': + '@rollup/rollup-linux-x64-gnu@4.60.1': + optional: true + + '@rollup/rollup-linux-x64-musl@4.60.1': + optional: true + + '@rollup/rollup-openbsd-x64@4.60.1': + optional: true + + '@rollup/rollup-openharmony-arm64@4.60.1': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.60.1': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.60.1': + optional: true + + '@rollup/rollup-win32-x64-gnu@4.60.1': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.60.1': optional: true '@sapphire/result@2.8.0': {} @@ -3804,13 +4076,18 @@ snapshots: '@babel/traverse': 7.29.0 '@babel/types': 7.29.0 javascript-natural-sort: 0.7.1 - lodash-es: 4.17.23 + lodash-es: 4.18.1 minimatch: 9.0.9 parse-imports-exports: 0.2.4 prettier: 3.8.1 transitivePeerDependencies: - supports-color + '@tybys/wasm-util@0.10.1': + dependencies: + tslib: 2.8.1 + optional: true + '@types/chai@5.2.3': dependencies: '@types/deep-eql': 4.0.2 @@ -3846,101 +4123,101 @@ snapshots: '@types/validator@13.15.10': {} - '@typescript-eslint/eslint-plugin@8.57.1(@typescript-eslint/parser@8.57.1(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3))(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/eslint-plugin@8.58.0(@typescript-eslint/parser@8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3))(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.57.1(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.57.1 - '@typescript-eslint/type-utils': 8.57.1(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/utils': 8.57.1(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.57.1 - eslint: 10.0.3(jiti@2.6.1) + '@typescript-eslint/parser': 8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.58.0 + '@typescript-eslint/type-utils': 8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.58.0 + eslint: 10.1.0(jiti@2.6.1) ignore: 7.0.5 natural-compare: 1.4.0 - ts-api-utils: 2.4.0(typescript@5.9.3) + ts-api-utils: 2.5.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.57.1(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/parser@8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@typescript-eslint/scope-manager': 8.57.1 - '@typescript-eslint/types': 8.57.1 - '@typescript-eslint/typescript-estree': 8.57.1(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.57.1 + '@typescript-eslint/scope-manager': 8.58.0 + '@typescript-eslint/types': 8.58.0 + '@typescript-eslint/typescript-estree': 8.58.0(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.58.0 debug: 4.4.3 - eslint: 10.0.3(jiti@2.6.1) + eslint: 10.1.0(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.57.1(typescript@5.9.3)': + '@typescript-eslint/project-service@8.58.0(typescript@5.9.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.57.1(typescript@5.9.3) - '@typescript-eslint/types': 8.57.1 + '@typescript-eslint/tsconfig-utils': 8.58.0(typescript@5.9.3) + '@typescript-eslint/types': 8.58.0 debug: 4.4.3 typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.57.1': + '@typescript-eslint/scope-manager@8.58.0': dependencies: - '@typescript-eslint/types': 8.57.1 - '@typescript-eslint/visitor-keys': 8.57.1 + '@typescript-eslint/types': 8.58.0 + '@typescript-eslint/visitor-keys': 8.58.0 - '@typescript-eslint/tsconfig-utils@8.57.1(typescript@5.9.3)': + '@typescript-eslint/tsconfig-utils@8.58.0(typescript@5.9.3)': dependencies: typescript: 5.9.3 - '@typescript-eslint/type-utils@8.57.1(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/type-utils@8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@typescript-eslint/types': 8.57.1 - '@typescript-eslint/typescript-estree': 8.57.1(typescript@5.9.3) - '@typescript-eslint/utils': 8.57.1(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/types': 8.58.0 + '@typescript-eslint/typescript-estree': 8.58.0(typescript@5.9.3) + '@typescript-eslint/utils': 8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) debug: 4.4.3 - eslint: 10.0.3(jiti@2.6.1) - ts-api-utils: 2.4.0(typescript@5.9.3) + eslint: 10.1.0(jiti@2.6.1) + ts-api-utils: 2.5.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.57.1': {} + '@typescript-eslint/types@8.58.0': {} - '@typescript-eslint/typescript-estree@8.57.1(typescript@5.9.3)': + '@typescript-eslint/typescript-estree@8.58.0(typescript@5.9.3)': dependencies: - '@typescript-eslint/project-service': 8.57.1(typescript@5.9.3) - '@typescript-eslint/tsconfig-utils': 8.57.1(typescript@5.9.3) - '@typescript-eslint/types': 8.57.1 - '@typescript-eslint/visitor-keys': 8.57.1 + '@typescript-eslint/project-service': 8.58.0(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.58.0(typescript@5.9.3) + '@typescript-eslint/types': 8.58.0 + '@typescript-eslint/visitor-keys': 8.58.0 debug: 4.4.3 - minimatch: 10.2.4 + minimatch: 10.2.5 semver: 7.7.4 tinyglobby: 0.2.15 - ts-api-utils: 2.4.0(typescript@5.9.3) + ts-api-utils: 2.5.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.57.1(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/utils@8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.0.3(jiti@2.6.1)) - '@typescript-eslint/scope-manager': 8.57.1 - '@typescript-eslint/types': 8.57.1 - '@typescript-eslint/typescript-estree': 8.57.1(typescript@5.9.3) - eslint: 10.0.3(jiti@2.6.1) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.1.0(jiti@2.6.1)) + '@typescript-eslint/scope-manager': 8.58.0 + '@typescript-eslint/types': 8.58.0 + '@typescript-eslint/typescript-estree': 8.58.0(typescript@5.9.3) + eslint: 10.1.0(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.57.1': + '@typescript-eslint/visitor-keys@8.58.0': dependencies: - '@typescript-eslint/types': 8.57.1 + '@typescript-eslint/types': 8.58.0 eslint-visitor-keys: 5.0.1 - '@vitest/coverage-v8@4.1.0(vitest@4.1.0(@types/node@25.5.0)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(yaml@2.8.2)))': + '@vitest/coverage-v8@4.1.2(vitest@4.1.2(@types/node@25.5.0)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.5)(jiti@2.6.1)(yaml@2.8.3)))': dependencies: '@bcoe/v8-coverage': 1.0.2 - '@vitest/utils': 4.1.0 + '@vitest/utils': 4.1.2 ast-v8-to-istanbul: 1.0.0 istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 @@ -3949,46 +4226,46 @@ snapshots: obug: 2.1.1 std-env: 4.0.0 tinyrainbow: 3.1.0 - vitest: 4.1.0(@types/node@25.5.0)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(yaml@2.8.2)) + vitest: 4.1.2(@types/node@25.5.0)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.5)(jiti@2.6.1)(yaml@2.8.3)) - '@vitest/expect@4.1.0': + '@vitest/expect@4.1.2': dependencies: '@standard-schema/spec': 1.1.0 '@types/chai': 5.2.3 - '@vitest/spy': 4.1.0 - '@vitest/utils': 4.1.0 + '@vitest/spy': 4.1.2 + '@vitest/utils': 4.1.2 chai: 6.2.2 tinyrainbow: 3.1.0 - '@vitest/mocker@4.1.0(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(yaml@2.8.2))': + '@vitest/mocker@4.1.2(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.5)(jiti@2.6.1)(yaml@2.8.3))': dependencies: - '@vitest/spy': 4.1.0 + '@vitest/spy': 4.1.2 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(yaml@2.8.2) + vite: 8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.5)(jiti@2.6.1)(yaml@2.8.3) - '@vitest/pretty-format@4.1.0': + '@vitest/pretty-format@4.1.2': dependencies: tinyrainbow: 3.1.0 - '@vitest/runner@4.1.0': + '@vitest/runner@4.1.2': dependencies: - '@vitest/utils': 4.1.0 + '@vitest/utils': 4.1.2 pathe: 2.0.3 - '@vitest/snapshot@4.1.0': + '@vitest/snapshot@4.1.2': dependencies: - '@vitest/pretty-format': 4.1.0 - '@vitest/utils': 4.1.0 + '@vitest/pretty-format': 4.1.2 + '@vitest/utils': 4.1.2 magic-string: 0.30.21 pathe: 2.0.3 - '@vitest/spy@4.1.0': {} + '@vitest/spy@4.1.2': {} - '@vitest/utils@4.1.0': + '@vitest/utils@4.1.2': dependencies: - '@vitest/pretty-format': 4.1.0 + '@vitest/pretty-format': 4.1.2 convert-source-map: 2.0.0 tinyrainbow: 3.1.0 @@ -4056,32 +4333,32 @@ snapshots: bottleneck@2.19.5: {} - brace-expansion@2.0.2: + brace-expansion@2.0.3: dependencies: balanced-match: 1.0.2 - brace-expansion@5.0.4: + brace-expansion@5.0.5: dependencies: balanced-match: 4.0.4 - bun@1.3.10: + bun@1.3.11: optionalDependencies: - '@oven/bun-darwin-aarch64': 1.3.10 - '@oven/bun-darwin-x64': 1.3.10 - '@oven/bun-darwin-x64-baseline': 1.3.10 - '@oven/bun-linux-aarch64': 1.3.10 - '@oven/bun-linux-aarch64-musl': 1.3.10 - '@oven/bun-linux-x64': 1.3.10 - '@oven/bun-linux-x64-baseline': 1.3.10 - '@oven/bun-linux-x64-musl': 1.3.10 - '@oven/bun-linux-x64-musl-baseline': 1.3.10 - '@oven/bun-windows-aarch64': 1.3.10 - '@oven/bun-windows-x64': 1.3.10 - '@oven/bun-windows-x64-baseline': 1.3.10 - - bundle-require@5.1.0(esbuild@0.27.4): - dependencies: - esbuild: 0.27.4 + '@oven/bun-darwin-aarch64': 1.3.11 + '@oven/bun-darwin-x64': 1.3.11 + '@oven/bun-darwin-x64-baseline': 1.3.11 + '@oven/bun-linux-aarch64': 1.3.11 + '@oven/bun-linux-aarch64-musl': 1.3.11 + '@oven/bun-linux-x64': 1.3.11 + '@oven/bun-linux-x64-baseline': 1.3.11 + '@oven/bun-linux-x64-musl': 1.3.11 + '@oven/bun-linux-x64-musl-baseline': 1.3.11 + '@oven/bun-windows-aarch64': 1.3.11 + '@oven/bun-windows-x64': 1.3.11 + '@oven/bun-windows-x64-baseline': 1.3.11 + + bundle-require@5.1.0(esbuild@0.27.5): + dependencies: + esbuild: 0.27.5 load-tsconfig: 0.2.5 cac@6.7.14: {} @@ -4109,7 +4386,7 @@ snapshots: class-validator@0.15.1: dependencies: '@types/validator': 13.15.10 - libphonenumber-js: 1.12.40 + libphonenumber-js: 1.12.41 validator: 13.15.26 cli-cursor@5.0.0: @@ -4154,11 +4431,11 @@ snapshots: consola@3.4.2: {} - conventional-changelog-angular@8.3.0: + conventional-changelog-angular@8.3.1: dependencies: compare-func: 2.0.0 - conventional-changelog-conventionalcommits@9.3.0: + conventional-changelog-conventionalcommits@9.3.1: dependencies: compare-func: 2.0.0 @@ -4166,17 +4443,17 @@ snapshots: conventional-commits-filter@5.0.0: {} - conventional-commits-parser@6.3.0: + conventional-commits-parser@6.4.0: dependencies: '@simple-libs/stream-utils': 1.2.0 meow: 13.2.0 conventional-recommended-bump@10.0.0: dependencies: - '@conventional-changelog/git-client': 1.0.1(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.3.0) + '@conventional-changelog/git-client': 1.0.1(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0) conventional-changelog-preset-loader: 5.0.0 conventional-commits-filter: 5.0.0 - conventional-commits-parser: 6.3.0 + conventional-commits-parser: 6.4.0 meow: 13.2.0 convert-source-map@2.0.0: {} @@ -4209,15 +4486,17 @@ snapshots: deep-is@0.1.4: {} - defu@6.1.4: {} + defu@6.1.6: {} destr@2.0.5: {} + detect-libc@2.1.2: {} + dot-prop@5.3.0: dependencies: is-obj: 2.0.0 - dotenv@17.3.1: {} + dotenv@17.4.0: {} emoji-regex@10.6.0: {} @@ -4235,42 +4514,42 @@ snapshots: es-module-lexer@2.0.0: {} - esbuild@0.27.4: + esbuild@0.27.5: optionalDependencies: - '@esbuild/aix-ppc64': 0.27.4 - '@esbuild/android-arm': 0.27.4 - '@esbuild/android-arm64': 0.27.4 - '@esbuild/android-x64': 0.27.4 - '@esbuild/darwin-arm64': 0.27.4 - '@esbuild/darwin-x64': 0.27.4 - '@esbuild/freebsd-arm64': 0.27.4 - '@esbuild/freebsd-x64': 0.27.4 - '@esbuild/linux-arm': 0.27.4 - '@esbuild/linux-arm64': 0.27.4 - '@esbuild/linux-ia32': 0.27.4 - '@esbuild/linux-loong64': 0.27.4 - '@esbuild/linux-mips64el': 0.27.4 - '@esbuild/linux-ppc64': 0.27.4 - '@esbuild/linux-riscv64': 0.27.4 - '@esbuild/linux-s390x': 0.27.4 - '@esbuild/linux-x64': 0.27.4 - '@esbuild/netbsd-arm64': 0.27.4 - '@esbuild/netbsd-x64': 0.27.4 - '@esbuild/openbsd-arm64': 0.27.4 - '@esbuild/openbsd-x64': 0.27.4 - '@esbuild/openharmony-arm64': 0.27.4 - '@esbuild/sunos-x64': 0.27.4 - '@esbuild/win32-arm64': 0.27.4 - '@esbuild/win32-ia32': 0.27.4 - '@esbuild/win32-x64': 0.27.4 + '@esbuild/aix-ppc64': 0.27.5 + '@esbuild/android-arm': 0.27.5 + '@esbuild/android-arm64': 0.27.5 + '@esbuild/android-x64': 0.27.5 + '@esbuild/darwin-arm64': 0.27.5 + '@esbuild/darwin-x64': 0.27.5 + '@esbuild/freebsd-arm64': 0.27.5 + '@esbuild/freebsd-x64': 0.27.5 + '@esbuild/linux-arm': 0.27.5 + '@esbuild/linux-arm64': 0.27.5 + '@esbuild/linux-ia32': 0.27.5 + '@esbuild/linux-loong64': 0.27.5 + '@esbuild/linux-mips64el': 0.27.5 + '@esbuild/linux-ppc64': 0.27.5 + '@esbuild/linux-riscv64': 0.27.5 + '@esbuild/linux-s390x': 0.27.5 + '@esbuild/linux-x64': 0.27.5 + '@esbuild/netbsd-arm64': 0.27.5 + '@esbuild/netbsd-x64': 0.27.5 + '@esbuild/openbsd-arm64': 0.27.5 + '@esbuild/openbsd-x64': 0.27.5 + '@esbuild/openharmony-arm64': 0.27.5 + '@esbuild/sunos-x64': 0.27.5 + '@esbuild/win32-arm64': 0.27.5 + '@esbuild/win32-ia32': 0.27.5 + '@esbuild/win32-x64': 0.27.5 escalade@3.2.0: {} escape-string-regexp@4.0.0: {} - eslint-config-prettier@10.1.8(eslint@10.0.3(jiti@2.6.1)): + eslint-config-prettier@10.1.8(eslint@10.1.0(jiti@2.6.1)): dependencies: - eslint: 10.0.3(jiti@2.6.1) + eslint: 10.1.0(jiti@2.6.1) eslint-formatter-pretty@7.0.0: dependencies: @@ -4283,35 +4562,35 @@ snapshots: string-width: 8.2.0 supports-hyperlinks: 4.4.0 - eslint-formatting-reporter@0.0.0(eslint@10.0.3(jiti@2.6.1)): + eslint-formatting-reporter@0.0.0(eslint@10.1.0(jiti@2.6.1)): dependencies: - eslint: 10.0.3(jiti@2.6.1) + eslint: 10.1.0(jiti@2.6.1) prettier-linter-helpers: 1.0.1 eslint-parser-plain@0.1.1: {} - eslint-plugin-format@1.5.0(eslint@10.0.3(jiti@2.6.1)): + eslint-plugin-format@1.5.0(eslint@10.1.0(jiti@2.6.1)): dependencies: '@dprint/formatter': 0.5.1 '@dprint/markdown': 0.21.1 '@dprint/toml': 0.7.0 - eslint: 10.0.3(jiti@2.6.1) - eslint-formatting-reporter: 0.0.0(eslint@10.0.3(jiti@2.6.1)) + eslint: 10.1.0(jiti@2.6.1) + eslint-formatting-reporter: 0.0.0(eslint@10.1.0(jiti@2.6.1)) eslint-parser-plain: 0.1.1 ohash: 2.0.11 oxfmt: 0.35.0 prettier: 3.8.1 synckit: 0.11.12 - eslint-plugin-prettier@5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.0.3(jiti@2.6.1)))(eslint@10.0.3(jiti@2.6.1))(prettier@3.8.1): + eslint-plugin-prettier@5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.1.0(jiti@2.6.1)))(eslint@10.1.0(jiti@2.6.1))(prettier@3.8.1): dependencies: - eslint: 10.0.3(jiti@2.6.1) + eslint: 10.1.0(jiti@2.6.1) prettier: 3.8.1 prettier-linter-helpers: 1.0.1 synckit: 0.11.12 optionalDependencies: '@types/eslint': 9.6.1 - eslint-config-prettier: 10.1.8(eslint@10.0.3(jiti@2.6.1)) + eslint-config-prettier: 10.1.8(eslint@10.1.0(jiti@2.6.1)) eslint-rule-docs@1.1.235: {} @@ -4326,9 +4605,9 @@ snapshots: eslint-visitor-keys@5.0.1: {} - eslint@10.0.3(jiti@2.6.1): + eslint@10.1.0(jiti@2.6.1): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.0.3(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.1.0(jiti@2.6.1)) '@eslint-community/regexpp': 4.12.2 '@eslint/config-array': 0.23.3 '@eslint/config-helpers': 0.5.3 @@ -4355,7 +4634,7 @@ snapshots: imurmurhash: 0.1.4 is-glob: 4.0.3 json-stable-stringify-without-jsonify: 1.0.1 - minimatch: 10.2.4 + minimatch: 10.2.5 natural-compare: 1.4.0 optionator: 0.9.4 optionalDependencies: @@ -4428,9 +4707,9 @@ snapshots: dependencies: fast-string-width: 3.0.2 - fdir@6.5.0(picomatch@4.0.3): + fdir@6.5.0(picomatch@4.0.4): optionalDependencies: - picomatch: 4.0.3 + picomatch: 4.0.4 figures@6.1.0: dependencies: @@ -4448,8 +4727,8 @@ snapshots: fix-dts-default-cjs-exports@1.0.1: dependencies: magic-string: 0.30.21 - mlly: 1.8.1 - rollup: 4.59.0 + mlly: 1.8.2 + rollup: 4.60.1 flat-cache@4.0.1: dependencies: @@ -4499,9 +4778,9 @@ snapshots: git-cliff-windows-arm64: 2.12.0 git-cliff-windows-x64: 2.12.0 - git-raw-commits@5.0.1(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.3.0): + git-raw-commits@5.0.1(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0): dependencies: - '@conventional-changelog/git-client': 2.6.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.3.0) + '@conventional-changelog/git-client': 2.6.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0) meow: 13.2.0 transitivePeerDependencies: - conventional-commits-filter @@ -4613,7 +4892,7 @@ snapshots: json-stable-stringify-without-jsonify@1.0.1: {} - json-with-bigint@3.5.7: {} + json-with-bigint@3.5.8: {} jsonc-parser@3.3.1: {} @@ -4626,7 +4905,56 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 - libphonenumber-js@1.12.40: {} + libphonenumber-js@1.12.41: {} + + lightningcss-android-arm64@1.32.0: + optional: true + + lightningcss-darwin-arm64@1.32.0: + optional: true + + lightningcss-darwin-x64@1.32.0: + optional: true + + lightningcss-freebsd-x64@1.32.0: + optional: true + + lightningcss-linux-arm-gnueabihf@1.32.0: + optional: true + + lightningcss-linux-arm64-gnu@1.32.0: + optional: true + + lightningcss-linux-arm64-musl@1.32.0: + optional: true + + lightningcss-linux-x64-gnu@1.32.0: + optional: true + + lightningcss-linux-x64-musl@1.32.0: + optional: true + + lightningcss-win32-arm64-msvc@1.32.0: + optional: true + + lightningcss-win32-x64-msvc@1.32.0: + optional: true + + lightningcss@1.32.0: + dependencies: + detect-libc: 2.1.2 + optionalDependencies: + lightningcss-android-arm64: 1.32.0 + lightningcss-darwin-arm64: 1.32.0 + lightningcss-darwin-x64: 1.32.0 + lightningcss-freebsd-x64: 1.32.0 + lightningcss-linux-arm-gnueabihf: 1.32.0 + lightningcss-linux-arm64-gnu: 1.32.0 + lightningcss-linux-arm64-musl: 1.32.0 + lightningcss-linux-x64-gnu: 1.32.0 + lightningcss-linux-x64-musl: 1.32.0 + lightningcss-win32-arm64-msvc: 1.32.0 + lightningcss-win32-x64-msvc: 1.32.0 lilconfig@3.1.3: {} @@ -4636,10 +4964,10 @@ snapshots: dependencies: commander: 14.0.3 listr2: 9.0.5 - picomatch: 4.0.3 + picomatch: 4.0.4 string-argv: 0.3.2 tinyexec: 1.0.4 - yaml: 2.8.2 + yaml: 2.8.3 listr2@9.0.5: dependencies: @@ -4656,7 +4984,7 @@ snapshots: dependencies: p-locate: 5.0.0 - lodash-es@4.17.23: {} + lodash-es@4.18.1: {} lodash.camelcase@4.3.0: {} @@ -4701,17 +5029,17 @@ snapshots: mimic-function@5.0.1: {} - minimatch@10.2.4: + minimatch@10.2.5: dependencies: - brace-expansion: 5.0.4 + brace-expansion: 5.0.5 minimatch@9.0.9: dependencies: - brace-expansion: 2.0.2 + brace-expansion: 2.0.3 minimist@1.2.8: {} - mlly@1.8.1: + mlly@1.8.2: dependencies: acorn: 8.16.0 pathe: 2.0.3 @@ -4837,27 +5165,27 @@ snapshots: picocolors@1.1.1: {} - picomatch@4.0.3: {} + picomatch@4.0.4: {} pirates@4.0.7: {} pkg-types@1.3.1: dependencies: confbox: 0.1.8 - mlly: 1.8.1 + mlly: 1.8.2 pathe: 2.0.3 plur@5.1.0: dependencies: irregular-plurals: 3.5.0 - postcss-load-config@6.0.1(jiti@2.6.1)(postcss@8.5.8)(yaml@2.8.2): + postcss-load-config@6.0.1(jiti@2.6.1)(postcss@8.5.8)(yaml@2.8.3): dependencies: lilconfig: 3.1.3 optionalDependencies: jiti: 2.6.1 postcss: 8.5.8 - yaml: 2.8.2 + yaml: 2.8.3 postcss@8.5.8: dependencies: @@ -4879,9 +5207,9 @@ snapshots: punycode@2.3.1: {} - rc9@3.0.0: + rc9@3.0.1: dependencies: - defu: 6.1.4 + defu: 6.1.6 destr: 2.0.5 readdirp@4.1.2: {} @@ -4905,35 +5233,59 @@ snapshots: rfdc@1.4.1: {} - rollup@4.59.0: + rolldown@1.0.0-rc.12(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1): + dependencies: + '@oxc-project/types': 0.122.0 + '@rolldown/pluginutils': 1.0.0-rc.12 + optionalDependencies: + '@rolldown/binding-android-arm64': 1.0.0-rc.12 + '@rolldown/binding-darwin-arm64': 1.0.0-rc.12 + '@rolldown/binding-darwin-x64': 1.0.0-rc.12 + '@rolldown/binding-freebsd-x64': 1.0.0-rc.12 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.12 + '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.12 + '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.12 + '@rolldown/binding-linux-ppc64-gnu': 1.0.0-rc.12 + '@rolldown/binding-linux-s390x-gnu': 1.0.0-rc.12 + '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.12 + '@rolldown/binding-linux-x64-musl': 1.0.0-rc.12 + '@rolldown/binding-openharmony-arm64': 1.0.0-rc.12 + '@rolldown/binding-wasm32-wasi': 1.0.0-rc.12(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1) + '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.12 + '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.12 + transitivePeerDependencies: + - '@emnapi/core' + - '@emnapi/runtime' + + rollup@4.60.1: dependencies: '@types/estree': 1.0.8 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.59.0 - '@rollup/rollup-android-arm64': 4.59.0 - '@rollup/rollup-darwin-arm64': 4.59.0 - '@rollup/rollup-darwin-x64': 4.59.0 - '@rollup/rollup-freebsd-arm64': 4.59.0 - '@rollup/rollup-freebsd-x64': 4.59.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.59.0 - '@rollup/rollup-linux-arm-musleabihf': 4.59.0 - '@rollup/rollup-linux-arm64-gnu': 4.59.0 - '@rollup/rollup-linux-arm64-musl': 4.59.0 - '@rollup/rollup-linux-loong64-gnu': 4.59.0 - '@rollup/rollup-linux-loong64-musl': 4.59.0 - '@rollup/rollup-linux-ppc64-gnu': 4.59.0 - '@rollup/rollup-linux-ppc64-musl': 4.59.0 - '@rollup/rollup-linux-riscv64-gnu': 4.59.0 - '@rollup/rollup-linux-riscv64-musl': 4.59.0 - '@rollup/rollup-linux-s390x-gnu': 4.59.0 - '@rollup/rollup-linux-x64-gnu': 4.59.0 - '@rollup/rollup-linux-x64-musl': 4.59.0 - '@rollup/rollup-openbsd-x64': 4.59.0 - '@rollup/rollup-openharmony-arm64': 4.59.0 - '@rollup/rollup-win32-arm64-msvc': 4.59.0 - '@rollup/rollup-win32-ia32-msvc': 4.59.0 - '@rollup/rollup-win32-x64-gnu': 4.59.0 - '@rollup/rollup-win32-x64-msvc': 4.59.0 + '@rollup/rollup-android-arm-eabi': 4.60.1 + '@rollup/rollup-android-arm64': 4.60.1 + '@rollup/rollup-darwin-arm64': 4.60.1 + '@rollup/rollup-darwin-x64': 4.60.1 + '@rollup/rollup-freebsd-arm64': 4.60.1 + '@rollup/rollup-freebsd-x64': 4.60.1 + '@rollup/rollup-linux-arm-gnueabihf': 4.60.1 + '@rollup/rollup-linux-arm-musleabihf': 4.60.1 + '@rollup/rollup-linux-arm64-gnu': 4.60.1 + '@rollup/rollup-linux-arm64-musl': 4.60.1 + '@rollup/rollup-linux-loong64-gnu': 4.60.1 + '@rollup/rollup-linux-loong64-musl': 4.60.1 + '@rollup/rollup-linux-ppc64-gnu': 4.60.1 + '@rollup/rollup-linux-ppc64-musl': 4.60.1 + '@rollup/rollup-linux-riscv64-gnu': 4.60.1 + '@rollup/rollup-linux-riscv64-musl': 4.60.1 + '@rollup/rollup-linux-s390x-gnu': 4.60.1 + '@rollup/rollup-linux-x64-gnu': 4.60.1 + '@rollup/rollup-linux-x64-musl': 4.60.1 + '@rollup/rollup-openbsd-x64': 4.60.1 + '@rollup/rollup-openharmony-arm64': 4.60.1 + '@rollup/rollup-win32-arm64-msvc': 4.60.1 + '@rollup/rollup-win32-ia32-msvc': 4.60.1 + '@rollup/rollup-win32-x64-gnu': 4.60.1 + '@rollup/rollup-win32-x64-msvc': 4.60.1 fsevents: 2.3.3 rxjs@7.8.2: @@ -4968,7 +5320,7 @@ snapshots: ansi-styles: 6.2.3 is-fullwidth-code-point: 5.1.0 - smol-toml@1.6.0: {} + smol-toml@1.6.1: {} source-map-js@1.2.1: {} @@ -5050,8 +5402,8 @@ snapshots: tinyglobby@0.2.15: dependencies: - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 + fdir: 6.5.0(picomatch@4.0.4) + picomatch: 4.0.4 tinypool@2.1.0: {} @@ -5059,7 +5411,7 @@ snapshots: tree-kill@1.2.2: {} - ts-api-utils@2.4.0(typescript@5.9.3): + ts-api-utils@2.5.0(typescript@5.9.3): dependencies: typescript: 5.9.3 @@ -5067,20 +5419,20 @@ snapshots: tslib@2.8.1: {} - tsup@8.5.1(jiti@2.6.1)(postcss@8.5.8)(typescript@5.9.3)(yaml@2.8.2): + tsup@8.5.1(jiti@2.6.1)(postcss@8.5.8)(typescript@5.9.3)(yaml@2.8.3): dependencies: - bundle-require: 5.1.0(esbuild@0.27.4) + bundle-require: 5.1.0(esbuild@0.27.5) cac: 6.7.14 chokidar: 4.0.3 consola: 3.4.2 debug: 4.4.3 - esbuild: 0.27.4 + esbuild: 0.27.5 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)(postcss@8.5.8)(yaml@2.8.2) + postcss-load-config: 6.0.1(jiti@2.6.1)(postcss@8.5.8)(yaml@2.8.3) resolve-from: 5.0.0 - rollup: 4.59.0 + rollup: 4.60.1 source-map: 0.7.6 sucrase: 3.35.1 tinyexec: 0.3.2 @@ -5101,13 +5453,13 @@ snapshots: dependencies: prelude-ls: 1.2.1 - typescript-eslint@8.57.1(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3): + typescript-eslint@8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.57.1(@typescript-eslint/parser@8.57.1(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3))(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/parser': 8.57.1(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/typescript-estree': 8.57.1(typescript@5.9.3) - '@typescript-eslint/utils': 8.57.1(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3) - eslint: 10.0.3(jiti@2.6.1) + '@typescript-eslint/eslint-plugin': 8.58.0(@typescript-eslint/parser@8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3))(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.58.0(typescript@5.9.3) + '@typescript-eslint/utils': 8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) + eslint: 10.1.0(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -5132,41 +5484,44 @@ snapshots: validator@13.15.26: {} - vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(yaml@2.8.2): + vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.5)(jiti@2.6.1)(yaml@2.8.3): dependencies: - esbuild: 0.27.4 - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 + lightningcss: 1.32.0 + picomatch: 4.0.4 postcss: 8.5.8 - rollup: 4.59.0 + rolldown: 1.0.0-rc.12(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1) tinyglobby: 0.2.15 optionalDependencies: '@types/node': 25.5.0 + esbuild: 0.27.5 fsevents: 2.3.3 jiti: 2.6.1 - yaml: 2.8.2 - - vitest@4.1.0(@types/node@25.5.0)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(yaml@2.8.2)): - dependencies: - '@vitest/expect': 4.1.0 - '@vitest/mocker': 4.1.0(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(yaml@2.8.2)) - '@vitest/pretty-format': 4.1.0 - '@vitest/runner': 4.1.0 - '@vitest/snapshot': 4.1.0 - '@vitest/spy': 4.1.0 - '@vitest/utils': 4.1.0 + yaml: 2.8.3 + transitivePeerDependencies: + - '@emnapi/core' + - '@emnapi/runtime' + + vitest@4.1.2(@types/node@25.5.0)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.5)(jiti@2.6.1)(yaml@2.8.3)): + dependencies: + '@vitest/expect': 4.1.2 + '@vitest/mocker': 4.1.2(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.5)(jiti@2.6.1)(yaml@2.8.3)) + '@vitest/pretty-format': 4.1.2 + '@vitest/runner': 4.1.2 + '@vitest/snapshot': 4.1.2 + '@vitest/spy': 4.1.2 + '@vitest/utils': 4.1.2 es-module-lexer: 2.0.0 expect-type: 1.3.0 magic-string: 0.30.21 obug: 2.1.1 pathe: 2.0.3 - picomatch: 4.0.3 + picomatch: 4.0.4 std-env: 4.0.0 tinybench: 2.9.0 tinyexec: 1.0.4 tinyglobby: 0.2.15 tinyrainbow: 3.1.0 - vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(yaml@2.8.2) + vite: 8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.5)(jiti@2.6.1)(yaml@2.8.3) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 25.5.0 @@ -5204,7 +5559,7 @@ snapshots: y18n@5.0.8: {} - yaml@2.8.2: {} + yaml@2.8.3: {} yargs-parser@21.1.1: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index d890146..d8b3a61 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -18,30 +18,30 @@ catalogs: ora: ^9.3.0 core: '@types/node': ^25.5.0 - bun: ^1.3.10 + bun: ^1.3.11 libs: chokidar: ^5.0.0 class-transformer: ^0.5.1 class-validator: ^0.15.1 - dotenv: ^17.3.1 - rc9: ^3.0.0 + dotenv: ^17.4.0 + rc9: ^3.0.1 reflect-metadata: ^0.2.2 lint: '@nanoforge-dev/utils-eslint-config': ^1.0.2 '@nanoforge-dev/utils-prettier-config': ^1.0.2 '@trivago/prettier-plugin-sort-imports': ^6.0.2 - eslint: ^10.0.3 + eslint: ^10.1.0 prettier: ^3.8.1 loader: '@nanoforge-dev/loader-client': ^1.3.0 '@nanoforge-dev/loader-server': ^1.2.0 schematics: - '@angular-devkit/schematics': ^21.2.2 - '@angular-devkit/schematics-cli': ^21.2.2 - '@nanoforge-dev/schematics': ^2.0.0 + '@angular-devkit/schematics': ^21.2.6 + '@angular-devkit/schematics-cli': ^21.2.6 + '@nanoforge-dev/schematics': ^2.1.1 tests: - '@vitest/coverage-v8': ^4.1.0 - vitest: ^4.1.0 + '@vitest/coverage-v8': ^4.1.2 + vitest: ^4.1.2 onlyBuiltDependencies: - bun diff --git a/src/action/actions/create.action.ts b/src/action/actions/create.action.ts new file mode 100644 index 0000000..a2b6605 --- /dev/null +++ b/src/action/actions/create.action.ts @@ -0,0 +1,61 @@ +import { + type Input, + getCreateNameInputOrAsk, + getCreateTypeInput, + getDirectoryInput, + getPathInputWithDefault, + getServerInput, +} from "@lib/input"; +import { Collection, CollectionFactory } from "@lib/schematics"; +import { Messages } from "@lib/ui"; + +import { capitalize } from "@utils/formatting"; + +import { AbstractAction, type HandleResult } from "../abstract.action"; +import { getConfig } from "../common/config"; +import { executeSchematic } from "../common/schematics"; + +interface CreateValues { + name: string; + directory: string; + part: "client" | "server"; + language: "ts" | "js"; +} + +export class CreateAction extends AbstractAction { + protected startMessage = Messages.CREATE_START; + protected successMessage = Messages.CREATE_SUCCESS; + protected failureMessage = Messages.CREATE_FAILED; + + public async handle(args: Input, options: Input): Promise { + const directory = getDirectoryInput(options); + const config = await getConfig(options, directory, true); + + const type = getCreateTypeInput(args); + + const name = await getCreateNameInputOrAsk(options); + const isServer = getServerInput(options); + const path = getPathInputWithDefault( + options, + config[isServer ? "server" : "client"].dirs[type === "component" ? "components" : "systems"], + ); + + await this.generateElement(directory, type, { + name, + directory: path, + part: isServer ? "server" : "client", + language: config.language, + }); + + return {}; + } + + private async generateElement( + directory: string, + type: "component" | "system", + values: CreateValues, + ): Promise { + const collection = CollectionFactory.create(Collection.NANOFORGE, directory); + await executeSchematic(capitalize(type), collection, type, values); + } +} diff --git a/src/action/actions/install.action.ts b/src/action/actions/install.action.ts index 583b50a..f2e0d03 100644 --- a/src/action/actions/install.action.ts +++ b/src/action/actions/install.action.ts @@ -5,7 +5,7 @@ import { getDirectoryInput, getInstallLibInput, getInstallNamesInputOrAsk, - getInstallServerInput, + getServerInput, } from "@lib/input"; import { resolveManifestDependencies } from "@lib/manifest/manifest-resolver"; import { PackageManagerFactory } from "@lib/package-manager"; @@ -25,7 +25,7 @@ export class InstallAction extends AbstractAction { const names = await getInstallNamesInputOrAsk(args); const directory = getDirectoryInput(options); const isLib = getInstallLibInput(options); - const isServer = getInstallServerInput(options); + const isServer = getServerInput(options); return isLib ? this._installLibs(directory, names) diff --git a/src/action/actions/new.action.ts b/src/action/actions/new.action.ts index 9f7aeb9..c274d38 100644 --- a/src/action/actions/new.action.ts +++ b/src/action/actions/new.action.ts @@ -10,10 +10,10 @@ import { getNewLintInput, getNewNameInputOrAsk, getNewPackageManagerInputOrAsk, - getNewPathInput, getNewServerOrAsk, getNewSkipInstallOrAsk, getNewStrictOrAsk, + getPathInput, } from "@lib/input"; import { PackageManagerFactory } from "@lib/package-manager"; import { Collection, CollectionFactory } from "@lib/schematics"; @@ -62,7 +62,7 @@ export class NewAction extends AbstractAction { private async collectValues(inputs: Input): Promise { return { name: await getNewNameInputOrAsk(inputs), - directory: getNewPathInput(inputs), + directory: getPathInput(inputs), packageManager: await getNewPackageManagerInputOrAsk(inputs), language: await getNewLanguageInputOrAsk(inputs), strict: await getNewStrictOrAsk(inputs), diff --git a/src/action/common/config.ts b/src/action/common/config.ts index 952b2cd..f7e879e 100644 --- a/src/action/common/config.ts +++ b/src/action/common/config.ts @@ -1,6 +1,6 @@ import { type Config, loadConfig } from "@lib/config"; import { type Input, getConfigInput } from "@lib/input"; -export const getConfig = (inputs: Input, dir: string): Promise => { - return loadConfig(dir, getConfigInput(inputs)); +export const getConfig = (inputs: Input, dir: string, noThrow?: boolean): Promise => { + return loadConfig(dir, getConfigInput(inputs), noThrow); }; diff --git a/src/action/index.ts b/src/action/index.ts index f4acc36..c06307d 100644 --- a/src/action/index.ts +++ b/src/action/index.ts @@ -1,4 +1,5 @@ export * from "./actions/build.action"; +export * from "./actions/create.action"; export * from "./actions/dev.action"; export * from "./actions/generate.action"; export * from "./actions/install.action"; diff --git a/src/command/command.loader.ts b/src/command/command.loader.ts index 2032727..e758d4e 100644 --- a/src/command/command.loader.ts +++ b/src/command/command.loader.ts @@ -5,6 +5,7 @@ import { Prefixes } from "@lib/ui"; import { BuildAction, + CreateAction, DevAction, GenerateAction, InstallAction, @@ -17,6 +18,7 @@ import { } from "~/action"; import { BuildCommand } from "./commands/build.command"; +import { CreateCommand } from "./commands/create.command"; import { DevCommand } from "./commands/dev.command"; import { GenerateCommand } from "./commands/generate.command"; import { InstallCommand } from "./commands/install.command"; @@ -35,6 +37,7 @@ export class CommandLoader { new StartCommand(new StartAction()).load(program); new DevCommand(new DevAction()).load(program); new GenerateCommand(new GenerateAction()).load(program); + new CreateCommand(new CreateAction()).load(program); new LoginCommand(new LoginAction()).load(program); new LogoutCommand(new LogoutAction()).load(program); new PublishCommand(new PublishAction()).load(program); diff --git a/src/command/commands/create.command.ts b/src/command/commands/create.command.ts new file mode 100644 index 0000000..8a61eac --- /dev/null +++ b/src/command/commands/create.command.ts @@ -0,0 +1,48 @@ +import { type Command } from "commander"; + +import { CONFIG_FILE_NAME } from "@lib/constants"; + +import { AbstractCommand } from "../abstract.command"; + +interface CreateOptions { + directory?: string; + config: string; + name?: string; + server: boolean; + path?: string; +} + +export class CreateCommand extends AbstractCommand { + public load(program: Command) { + program + .command("create [type]") + .description("create nanoforge components or systems") + .option("-d, --directory [directory]", "specify the working directory of the command") + .option("-c, --config [config]", "path to the config file", CONFIG_FILE_NAME) + .option("-n, --name [name]", "name of the component/system") + .option( + "-s, --server", + "install components/systems on server (default install on client)", + false, + ) + .option( + "-p, --path [path]", + "path to the component/system folder (default: [part]/)", + ) + .action(async (type: string, rawOptions: CreateOptions) => { + const args = AbstractCommand.mapToInput({ + type, + }); + + const options = AbstractCommand.mapToInput({ + directory: rawOptions.directory, + config: rawOptions.config, + name: rawOptions.name, + server: rawOptions.server, + path: rawOptions.path, + }); + + await this.action.run(args, options); + }); + } +} diff --git a/src/lib/config/config-defaults.ts b/src/lib/config/config-defaults.ts index 46b785c..9f095d3 100644 --- a/src/lib/config/config-defaults.ts +++ b/src/lib/config/config-defaults.ts @@ -15,6 +15,10 @@ export const CONFIG_DEFAULTS: Config = { entry: ".nanoforge/editor/client/main.ts", save: ".nanoforge/client.save.json", }, + dirs: { + components: "client/components", + systems: "client/systems", + }, }, server: { enable: false, @@ -26,5 +30,9 @@ export const CONFIG_DEFAULTS: Config = { entry: ".nanoforge/editor/server/main.ts", save: ".nanoforge/server.save.json", }, + dirs: { + components: "server/components", + systems: "server/systems", + }, }, }; diff --git a/src/lib/config/config-loader.ts b/src/lib/config/config-loader.ts index 644d2de..2291f83 100644 --- a/src/lib/config/config-loader.ts +++ b/src/lib/config/config-loader.ts @@ -24,7 +24,11 @@ const getConfigPath = (directory: string, name?: string) => { } }; -export const loadConfig = async (directory: string, name?: string): Promise => { +export const loadConfig = async ( + directory: string, + name?: string, + noThrow: boolean = false, +): Promise => { if (config) return config; let rawData; @@ -33,7 +37,7 @@ export const loadConfig = async (directory: string, name?: string): Promise EditorConfig) @ValidateNested() editor!: EditorConfig; + + @Expose() + @Type(() => DirsConfig) + @ValidateNested() + dirs!: DirsConfig; } export class ServerConfig { @@ -64,6 +81,11 @@ export class ServerConfig { @Type(() => EditorConfig) @ValidateNested() editor!: EditorConfig; + + @Expose() + @Type(() => DirsConfig) + @ValidateNested() + dirs!: DirsConfig; } export class Config { diff --git a/src/lib/input/inputs/create/index.ts b/src/lib/input/inputs/create/index.ts new file mode 100644 index 0000000..6a2e98a --- /dev/null +++ b/src/lib/input/inputs/create/index.ts @@ -0,0 +1 @@ +export * from "./type.input"; diff --git a/src/lib/input/inputs/create/type.input.spec.ts b/src/lib/input/inputs/create/type.input.spec.ts new file mode 100644 index 0000000..e75628b --- /dev/null +++ b/src/lib/input/inputs/create/type.input.spec.ts @@ -0,0 +1,28 @@ +import { describe, expect, it } from "vitest"; + +import { type Input } from "../../input.type"; +import { getCreateTypeInput } from "./type.input"; + +const createInput = (entries: [string, any][]): Input => { + return new Map(entries.map(([key, value]) => [key, { value }])); +}; + +describe("getCreateTypeInput", () => { + it("should return the type input when provided", () => { + const input = createInput([["type", "component"]]); + + expect(getCreateTypeInput(input)).toBe("component"); + }); + + it("should throw when type is not provided", () => { + const input = createInput([]); + + expect(() => getCreateTypeInput(input)).toThrow(); + }); + + it("should throw when type is not a right type", () => { + const input = createInput([["type", "bad-element"]]); + + expect(() => getCreateTypeInput(input)).toThrow(); + }); +}); diff --git a/src/lib/input/inputs/create/type.input.ts b/src/lib/input/inputs/create/type.input.ts new file mode 100644 index 0000000..f277524 --- /dev/null +++ b/src/lib/input/inputs/create/type.input.ts @@ -0,0 +1,8 @@ +import { getStringInput } from "../../base-inputs"; +import { type Input } from "../../input.type"; + +export const getCreateTypeInput = (inputs: Input): "component" | "system" => { + const res = getStringInput(inputs, "type"); + if (res && ["component", "system"].includes(res)) return res as "component" | "system"; + throw new Error("Invalid type. Please enter 'component' or 'system'."); +}; diff --git a/src/lib/input/inputs/index.ts b/src/lib/input/inputs/index.ts index 955cf6f..07206ee 100644 --- a/src/lib/input/inputs/index.ts +++ b/src/lib/input/inputs/index.ts @@ -1,8 +1,12 @@ export * from "./directory.input"; export * from "./config.input"; export * from "./editor.input"; +export * from "./name.input"; +export * from "./path.input"; +export * from "./server.input"; export * from "./watch.input"; +export * from "./create"; export * from "./dev"; export * from "./install"; export * from "./login-out"; diff --git a/src/lib/input/inputs/install/index.ts b/src/lib/input/inputs/install/index.ts index 427abf8..405bd07 100644 --- a/src/lib/input/inputs/install/index.ts +++ b/src/lib/input/inputs/install/index.ts @@ -1,3 +1,2 @@ export * from "./lib.input"; export * from "./names.input"; -export * from "./server.input"; diff --git a/src/lib/input/inputs/install/server.input.ts b/src/lib/input/inputs/install/server.input.ts deleted file mode 100644 index 66e94f6..0000000 --- a/src/lib/input/inputs/install/server.input.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { getBooleanInputWithDefault } from "../../base-inputs"; -import { type Input } from "../../input.type"; - -export function getInstallServerInput(inputs: Input): boolean { - return getBooleanInputWithDefault(inputs, "server", false); -} diff --git a/src/lib/input/inputs/name.input.spec.ts b/src/lib/input/inputs/name.input.spec.ts new file mode 100644 index 0000000..e0637d6 --- /dev/null +++ b/src/lib/input/inputs/name.input.spec.ts @@ -0,0 +1,52 @@ +import { beforeEach, describe, expect, it, vi } from "vitest"; + +import { askInput } from "@lib/question"; + +import { type Input } from "../input.type"; +import { getCreateNameInputOrAsk, getNewNameInputOrAsk } from "./name.input"; + +vi.mock("@lib/question", () => ({ + askInput: vi.fn(), +})); + +beforeEach(() => { + vi.clearAllMocks(); +}); + +const createInput = (entries: [string, any][]): Input => { + return new Map(entries.map(([key, value]) => [key, { value }])); +}; + +describe("getNewNameInputOrAsk", () => { + it("should return the name input when provided", async () => { + const input = createInput([["name", "my-project"]]); + + expect(await getNewNameInputOrAsk(input)).toBe("my-project"); + expect(askInput).not.toHaveBeenCalled(); + }); + + it("should call askInput when name is not provided", async () => { + vi.mocked(askInput).mockResolvedValue("asked-name"); + const input = createInput([]); + + expect(await getNewNameInputOrAsk(input)).toBe("asked-name"); + expect(askInput).toHaveBeenCalledOnce(); + }); +}); + +describe("getCreateNameInputOrAsk", () => { + it("should return the name input when provided", async () => { + const input = createInput([["name", "my-project"]]); + + expect(await getCreateNameInputOrAsk(input)).toBe("my-project"); + expect(askInput).not.toHaveBeenCalled(); + }); + + it("should call askInput when name is not provided", async () => { + vi.mocked(askInput).mockResolvedValue("asked-name"); + const input = createInput([]); + + expect(await getCreateNameInputOrAsk(input)).toBe("asked-name"); + expect(askInput).toHaveBeenCalledOnce(); + }); +}); diff --git a/src/lib/input/inputs/new/name.input.ts b/src/lib/input/inputs/name.input.ts similarity index 51% rename from src/lib/input/inputs/new/name.input.ts rename to src/lib/input/inputs/name.input.ts index a756833..5c3366c 100644 --- a/src/lib/input/inputs/new/name.input.ts +++ b/src/lib/input/inputs/name.input.ts @@ -1,9 +1,9 @@ import { askInput } from "@lib/question"; import { Messages } from "@lib/ui"; -import { getInputOrAsk } from "../../ask-inputs"; -import { getStringInput } from "../../base-inputs"; -import { type Input } from "../../input.type"; +import { getInputOrAsk } from "../ask-inputs"; +import { getStringInput } from "../base-inputs"; +import { type Input } from "../input.type"; const getNameInput = (inputs: Input) => { return getStringInput(inputs, "name"); @@ -17,3 +17,12 @@ export const getNewNameInputOrAsk = (inputs: Input) => { }), ); }; + +export const getCreateNameInputOrAsk = (inputs: Input) => { + return getInputOrAsk(getNameInput(inputs), () => + askInput(Messages.CREATE_NAME_QUESTION, { + required: true, + default: "example", + }), + ); +}; diff --git a/src/lib/input/inputs/new/index.ts b/src/lib/input/inputs/new/index.ts index 03b3a62..9532ed4 100644 --- a/src/lib/input/inputs/new/index.ts +++ b/src/lib/input/inputs/new/index.ts @@ -2,9 +2,7 @@ export * from "./docker.input"; export * from "./init-functions.input"; export * from "./language.input"; export * from "./lint.input"; -export * from "./name.input"; export * from "./package-manager.input"; -export * from "./path.input"; export * from "./server.input"; export * from "./skip-install.input"; export * from "./strict.input"; diff --git a/src/lib/input/inputs/new/name.input.spec.ts b/src/lib/input/inputs/new/name.input.spec.ts deleted file mode 100644 index 2c29de0..0000000 --- a/src/lib/input/inputs/new/name.input.spec.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { describe, expect, it, vi } from "vitest"; - -import { askInput } from "@lib/question"; - -import { type Input } from "../../input.type"; -import { getNewNameInputOrAsk } from "./name.input"; - -vi.mock("@lib/question", () => ({ - askInput: vi.fn(), -})); - -const createInput = (entries: [string, any][]): Input => { - return new Map(entries.map(([key, value]) => [key, { value }])); -}; - -describe("getNewNameInputOrAsk", () => { - it("should return the name input when provided", async () => { - const input = createInput([["name", "my-project"]]); - - expect(await getNewNameInputOrAsk(input)).toBe("my-project"); - expect(askInput).not.toHaveBeenCalled(); - }); - - it("should call askInput when name is not provided", async () => { - vi.mocked(askInput).mockResolvedValue("asked-name"); - const input = createInput([]); - - expect(await getNewNameInputOrAsk(input)).toBe("asked-name"); - expect(askInput).toHaveBeenCalledOnce(); - }); -}); diff --git a/src/lib/input/inputs/new/path.input.spec.ts b/src/lib/input/inputs/new/path.input.spec.ts deleted file mode 100644 index 469cb0d..0000000 --- a/src/lib/input/inputs/new/path.input.spec.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { describe, expect, it } from "vitest"; - -import { type Input } from "../../input.type"; -import { getNewPathInput } from "./path.input"; - -const createInput = (entries: [string, any][]): Input => { - return new Map(entries.map(([key, value]) => [key, { value }])); -}; - -describe("getNewPathInput", () => { - it("should return the path value when provided", () => { - const input = createInput([["path", "/custom/path"]]); - expect(getNewPathInput(input)).toBe("/custom/path"); - }); - - it("should return undefined when path is missing", () => { - const input = createInput([]); - expect(getNewPathInput(input)).toBeUndefined(); - }); -}); diff --git a/src/lib/input/inputs/new/path.input.ts b/src/lib/input/inputs/new/path.input.ts deleted file mode 100644 index 347d568..0000000 --- a/src/lib/input/inputs/new/path.input.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { getStringInput } from "../../base-inputs"; -import { type Input } from "../../input.type"; - -export const getNewPathInput = (inputs: Input) => { - return getStringInput(inputs, "path"); -}; diff --git a/src/lib/input/inputs/path.input.spec.ts b/src/lib/input/inputs/path.input.spec.ts new file mode 100644 index 0000000..4aeb7f3 --- /dev/null +++ b/src/lib/input/inputs/path.input.spec.ts @@ -0,0 +1,32 @@ +import { describe, expect, it } from "vitest"; + +import { type Input } from "../input.type"; +import { getPathInput, getPathInputWithDefault } from "./path.input"; + +const createInput = (entries: [string, any][]): Input => { + return new Map(entries.map(([key, value]) => [key, { value }])); +}; + +describe("getPathInput", () => { + it("should return the path value when provided", () => { + const input = createInput([["path", "/custom/path"]]); + expect(getPathInput(input)).toBe("/custom/path"); + }); + + it("should return undefined when path is missing", () => { + const input = createInput([]); + expect(getPathInput(input)).toBeUndefined(); + }); +}); + +describe("getPathInputWithDefault", () => { + it("should return the path value when provided", () => { + const input = createInput([["path", "/custom/path"]]); + expect(getPathInputWithDefault(input, "/default/path")).toBe("/custom/path"); + }); + + it("should return undefined when path is missing", () => { + const input = createInput([]); + expect(getPathInputWithDefault(input, "/default/path")).toBe("/default/path"); + }); +}); diff --git a/src/lib/input/inputs/path.input.ts b/src/lib/input/inputs/path.input.ts new file mode 100644 index 0000000..681eeef --- /dev/null +++ b/src/lib/input/inputs/path.input.ts @@ -0,0 +1,10 @@ +import { getStringInput, getStringInputWithDefault } from "../base-inputs"; +import { type Input } from "../input.type"; + +export const getPathInput = (inputs: Input) => { + return getStringInput(inputs, "path"); +}; + +export const getPathInputWithDefault = (inputs: Input, defaultValue: string) => { + return getStringInputWithDefault(inputs, "path", defaultValue); +}; diff --git a/src/lib/input/inputs/install/server.input.spec.ts b/src/lib/input/inputs/server.input.spec.ts similarity index 62% rename from src/lib/input/inputs/install/server.input.spec.ts rename to src/lib/input/inputs/server.input.spec.ts index 96fe2cb..d2cfb0c 100644 --- a/src/lib/input/inputs/install/server.input.spec.ts +++ b/src/lib/input/inputs/server.input.spec.ts @@ -1,20 +1,20 @@ import { describe, expect, it } from "vitest"; -import { type Input } from "../../input.type"; -import { getInstallServerInput } from "./server.input"; +import { type Input } from "../input.type"; +import { getServerInput } from "./server.input"; const createInput = (entries: [string, any][]): Input => { return new Map(entries.map(([key, value]) => [key, { value }])); }; -describe("getInstallServerInput", () => { +describe("getServerInput", () => { it("should return the server value when provided", () => { const input = createInput([["server", true]]); - expect(getInstallServerInput(input)).toBe(true); + expect(getServerInput(input)).toBe(true); }); it("should return false as default when server is missing", () => { const input = createInput([]); - expect(getInstallServerInput(input)).toBe(false); + expect(getServerInput(input)).toBe(false); }); }); diff --git a/src/lib/input/inputs/server.input.ts b/src/lib/input/inputs/server.input.ts new file mode 100644 index 0000000..0e13c54 --- /dev/null +++ b/src/lib/input/inputs/server.input.ts @@ -0,0 +1,6 @@ +import { getBooleanInputWithDefault } from "../base-inputs"; +import { type Input } from "../input.type"; + +export function getServerInput(inputs: Input): boolean { + return getBooleanInputWithDefault(inputs, "server", false); +} diff --git a/src/lib/schematics/nanoforge.collection.ts b/src/lib/schematics/nanoforge.collection.ts index 9049119..fe53389 100644 --- a/src/lib/schematics/nanoforge.collection.ts +++ b/src/lib/schematics/nanoforge.collection.ts @@ -36,6 +36,16 @@ export class NanoforgeCollection extends AbstractCollection { alias: "docker", description: "Generate a Dockerfile for the application", }, + { + name: "component", + alias: "component", + description: "Generate a Component for an application", + }, + { + name: "system", + alias: "system", + description: "Generate a System for an application", + }, ]; constructor(runner: Runner, cwd?: string) { diff --git a/src/lib/tree-kill/tree-kill.ts b/src/lib/tree-kill/tree-kill.ts index 087c868..daa7901 100755 --- a/src/lib/tree-kill/tree-kill.ts +++ b/src/lib/tree-kill/tree-kill.ts @@ -1,5 +1,3 @@ -"use strict"; - import { type ChildProcessWithoutNullStreams, execSync, spawn } from "node:child_process"; export const treeKill = (pid: number, signal: NodeJS.Signals): Promise => { diff --git a/src/lib/ui/messages.ts b/src/lib/ui/messages.ts index 964233c..97f7d7d 100644 --- a/src/lib/ui/messages.ts +++ b/src/lib/ui/messages.ts @@ -46,6 +46,12 @@ export const Messages = { NEW_SKIP_INSTALL_QUESTION: "Do you want to skip dependency installation?", NEW_DOCKER_QUESTION: "Do you want to add a Dockerfile for containerization?", + // --- Create --- + CREATE_START: "NanoForge Component/System Creation", + CREATE_SUCCESS: success("Element successfully created!"), + CREATE_FAILED: failure("Creation failed!"), + CREATE_NAME_QUESTION: "What is the name of your component/system?", + // --- Generate --- GENERATE_START: "NanoForge Generate", GENERATE_SUCCESS: success("Generation succeeded!"), diff --git a/src/lib/utils/formatting.ts b/src/lib/utils/formatting.ts index 679c269..cf9ad8e 100644 --- a/src/lib/utils/formatting.ts +++ b/src/lib/utils/formatting.ts @@ -4,3 +4,5 @@ export const toKebabCase = (str: string): string => { .replace(/[\s_]+/g, "-") .toLowerCase(); }; + +export const capitalize = (str: string) => str.charAt(0).toUpperCase() + str.slice(1); diff --git a/tsconfig.json b/tsconfig.json index e6c677a..b237917 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -36,7 +36,6 @@ // Interop Constraints "allowSyntheticDefaultImports": true, - "esModuleInterop": false, "forceConsistentCasingInFileNames": true, "isolatedModules": true,