diff --git a/.github/ISSUE_TEMPLATE/01-packages_bug_report.yml b/.github/ISSUE_TEMPLATE/01-packages_bug_report.yml index 3b1fbb7e..469f0ed2 100644 --- a/.github/ISSUE_TEMPLATE/01-packages_bug_report.yml +++ b/.github/ISSUE_TEMPLATE/01-packages_bug_report.yml @@ -22,6 +22,7 @@ body: - ecs-lib - ecs-server - graphics-2d + - graphics-2d-editor - input - music - network-client diff --git a/.github/ISSUE_TEMPLATE/03-feature_request.yml b/.github/ISSUE_TEMPLATE/03-feature_request.yml index 1112e501..19c3b871 100644 --- a/.github/ISSUE_TEMPLATE/03-feature_request.yml +++ b/.github/ISSUE_TEMPLATE/03-feature_request.yml @@ -20,6 +20,7 @@ body: - ecs-lib - ecs-server - graphics-2d + - graphics-2d-editor - input - music - network-client diff --git a/.github/issue-labeler.yml b/.github/issue-labeler.yml index 2ae7faef..450cdb9a 100644 --- a/.github/issue-labeler.yml +++ b/.github/issue-labeler.yml @@ -34,6 +34,10 @@ packages:graphics-2d: - "### Which (package|utils|package or utils) is this (bug report|feature request) for\\?\\n\\ngraphics-2d\\n" +packages:graphics-2d-editor: + - "### Which (package|utils|package or utils) is this (bug + report|feature request) for\\?\\n\\ngraphics-2d-editor\\n" + packages:input: - "### Which (package|utils|package or utils) is this (bug report|feature request) for\\?\\n\\ninput\\n" diff --git a/.github/labeler.yml b/.github/labeler.yml index 7fcf4a9d..311df846 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -52,6 +52,12 @@ packages:graphics-2d: - packages/graphics-2d/* - packages/graphics-2d/**/* +packages:graphics-2d-editor: + - changed-files: + - any-glob-to-any-file: + - packages/graphics-2d-editor/* + - packages/graphics-2d-editor/**/* + packages:input: - changed-files: - any-glob-to-any-file: diff --git a/.github/labels.yml b/.github/labels.yml index 682f019a..ac53356d 100644 --- a/.github/labels.yml +++ b/.github/labels.yml @@ -78,6 +78,10 @@ description: "Related to Graphics2D library" color: "aaa3dc" +- name: "packages:graphics-2d-editor" + description: "Related to Graphics2D Editor library" + color: "aaa3dc" + - name: "packages:input" description: "Related to Input library" color: "aaa3dc" diff --git a/.github/workflows/alpha-release.yml b/.github/workflows/alpha-release.yml index e2698c1a..e6754ab0 100644 --- a/.github/workflows/alpha-release.yml +++ b/.github/workflows/alpha-release.yml @@ -17,6 +17,7 @@ on: - "@nanoforge-dev/ecs-lib" - "@nanoforge-dev/ecs-server" - "@nanoforge-dev/graphics-2d" + - "@nanoforge-dev/graphics-2d-editor" - "@nanoforge-dev/input" - "@nanoforge-dev/music" - "@nanoforge-dev/network-client" diff --git a/.github/workflows/pre-release.yml b/.github/workflows/pre-release.yml index bae3ae62..d4d54ce1 100644 --- a/.github/workflows/pre-release.yml +++ b/.github/workflows/pre-release.yml @@ -34,7 +34,7 @@ jobs: - name: Create release PR uses: ./node_modules/@nanoforge-dev/actions/actions/create-packages-release-pr with: - packages: "@nanoforge-dev/asset-manager,@nanoforge-dev/common,@nanoforge-dev/config,@nanoforge-dev/core,@nanoforge-dev/core-editor,@nanoforge-dev/ecs-client,@nanoforge-dev/ecs-lib,@nanoforge-dev/ecs-server,@nanoforge-dev/graphics-2d,@nanoforge-dev/input,@nanoforge-dev/music,@nanoforge-dev/network-client,@nanoforge-dev/network-server,@nanoforge-dev/sound" + packages: "@nanoforge-dev/asset-manager,@nanoforge-dev/common,@nanoforge-dev/config,@nanoforge-dev/core,@nanoforge-dev/core-editor,@nanoforge-dev/ecs-client,@nanoforge-dev/ecs-lib,@nanoforge-dev/ecs-server,@nanoforge-dev/graphics-2d,@nanoforge-dev/graphics-2d-editor,@nanoforge-dev/input,@nanoforge-dev/music,@nanoforge-dev/network-client,@nanoforge-dev/network-server,@nanoforge-dev/sound" version: ${{ inputs.version }} branch-format: "releases/nanoforge@{version}" commit-format: "chore: release @nanoforge-dev/engine@{version}" diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index a86f6ca6..eff01c55 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -26,7 +26,7 @@ jobs: - name: Release packages uses: ./node_modules/@nanoforge-dev/actions/actions/release-packages with: - packages: "@nanoforge-dev/asset-manager,@nanoforge-dev/common,@nanoforge-dev/config,@nanoforge-dev/core,@nanoforge-dev/core-editor,@nanoforge-dev/ecs-client,@nanoforge-dev/ecs-lib,@nanoforge-dev/ecs-server,@nanoforge-dev/graphics-2d,@nanoforge-dev/input,@nanoforge-dev/music,@nanoforge-dev/network-client,@nanoforge-dev/network-server,@nanoforge-dev/sound" + packages: "@nanoforge-dev/asset-manager,@nanoforge-dev/common,@nanoforge-dev/config,@nanoforge-dev/core,@nanoforge-dev/core-editor,@nanoforge-dev/ecs-client,@nanoforge-dev/ecs-lib,@nanoforge-dev/ecs-server,@nanoforge-dev/graphics-2d,@nanoforge-dev/graphics-2d-editor,@nanoforge-dev/input,@nanoforge-dev/music,@nanoforge-dev/network-client,@nanoforge-dev/network-server,@nanoforge-dev/sound" tag-format: "{version}" latest: true env: diff --git a/packages/common/src/library/libraries/index.ts b/packages/common/src/library/libraries/index.ts index 73420e55..8ce9096f 100644 --- a/packages/common/src/library/libraries/index.ts +++ b/packages/common/src/library/libraries/index.ts @@ -1,4 +1,5 @@ export type { ILibrary } from "./library.type"; +export { Library } from "./library"; export * from "./abstracts"; export * from "./consts"; diff --git a/packages/common/src/library/manager/managers/base-library.manager.ts b/packages/common/src/library/manager/managers/base-library.manager.ts index 1934ca4e..fe8be8cc 100644 --- a/packages/common/src/library/manager/managers/base-library.manager.ts +++ b/packages/common/src/library/manager/managers/base-library.manager.ts @@ -1,6 +1,7 @@ import { type LibraryContext } from "../../../context"; import { type ILibrary } from "../../libraries"; import { LibraryHandle } from "../handle/library.handle"; +import { DefaultLibrariesEnum } from "./library.manager"; export class BaseLibraryManager { protected _libraries: LibraryHandle[] = []; @@ -16,7 +17,7 @@ export class BaseLibraryManager { } protected setNewLibrary(sym: symbol, library: ILibrary, context: LibraryContext): void { - const index = this._libraries.length; + const index = Math.max(this._libraries.length, Object.keys(DefaultLibrariesEnum).length); this._setIndex(sym, index); this._set(index, sym, library, context); } diff --git a/packages/core-editor/src/application/nanoforge-application.ts b/packages/core-editor/src/application/nanoforge-application.ts index bef673db..c015675f 100644 --- a/packages/core-editor/src/application/nanoforge-application.ts +++ b/packages/core-editor/src/application/nanoforge-application.ts @@ -3,13 +3,13 @@ import { type IComponentSystemLibrary, type ILibrary, type INetworkLibrary, + type IRunOptions, NfNotInitializedException, } from "@nanoforge-dev/common"; import { ApplicationConfig } from "../../../core/src/application/application-config"; import type { IApplicationOptions } from "../../../core/src/application/application-options.type"; import { EditableApplicationContext } from "../../../core/src/common/context/contexts/application.editable-context"; -import { type IEditorRunOptions } from "../common/context/options.type"; import { Core } from "../core/core"; /** @@ -77,9 +77,9 @@ export abstract class NanoforgeApplication { /** * Initialise all registered libraries and prepare the engine for the game loop. * - * @param options - Editor run options including save/load callbacks and canvas container. + * @param options - Editor run options including save/events callbacks and canvas container. */ - public init(options: IEditorRunOptions): Promise { + public init(options: IRunOptions): Promise { this._core = new Core( this.applicationConfig, new EditableApplicationContext(this.applicationConfig.libraryManager), diff --git a/packages/core-editor/src/common/context/contexts/init.context.ts b/packages/core-editor/src/common/context/contexts/init.context.ts new file mode 100644 index 00000000..599e89aa --- /dev/null +++ b/packages/core-editor/src/common/context/contexts/init.context.ts @@ -0,0 +1,28 @@ +import { + type ApplicationContext, + type IConfigRegistry, + type IRunOptions, + InitContext, + type LibraryManager, +} from "@nanoforge-dev/common"; + +import { type EventEmitter } from "../event-emitter"; + +export class EditorInitContext extends InitContext { + private readonly _eventEmitter: EventEmitter; + + constructor( + context: ApplicationContext, + libraryManager: LibraryManager, + configRegistry: IConfigRegistry, + options: IRunOptions, + eventEmitter: EventEmitter, + ) { + super(context, libraryManager, configRegistry, options); + this._eventEmitter = eventEmitter; + } + + override get eventEmitter(): EventEmitter { + return this._eventEmitter; + } +} diff --git a/packages/core-editor/src/common/context/event-emitter.ts b/packages/core-editor/src/common/context/event-emitter.ts new file mode 100644 index 00000000..ebd0d575 --- /dev/null +++ b/packages/core-editor/src/common/context/event-emitter.ts @@ -0,0 +1,30 @@ +import type { IRunOptions } from "@nanoforge-dev/common"; + +import type { IEventEmitter, ListenerType } from "./event-emitter.type"; +import type { CoreEvents, CoreEventsMap } from "./events/core-events"; +import type { EditorEvents, EditorEventsMap } from "./events/editor-events"; + +export class EventEmitter { + private coreEvents: IEventEmitter; + private editorEvents: IEventEmitter; + + constructor(opts: IRunOptions["editor"]) { + this.coreEvents = opts.coreEvents; + this.editorEvents = opts.editorEvents; + } + + runEvents(): void { + this.coreEvents.runEvents(); + } + + emit(event: K, ...args: EditorEventsMap[K]): void { + this.editorEvents.emitEvent(event, ...args); + } + + on( + event: K, + listener: ListenerType, + ): void { + this.coreEvents.on(event, listener); + } +} diff --git a/packages/core-editor/src/common/context/events/editor-events.ts b/packages/core-editor/src/common/context/events/editor-events.ts index f340b43c..d9b72fd6 100644 --- a/packages/core-editor/src/common/context/events/editor-events.ts +++ b/packages/core-editor/src/common/context/events/editor-events.ts @@ -1,9 +1,11 @@ -// ! Please do not remove this event unless a new one replaces it, it causes types issues - export enum EditorEvents { - EMPTY = "empty", + MOVE_COMPONENT = "move-component", } export interface EditorEventsMap { - [EditorEvents.EMPTY]: []; + [EditorEvents.MOVE_COMPONENT]: [ + entityId: string, + componentId: string, + position: { x: number; y: number }, + ]; } diff --git a/packages/core-editor/src/common/context/index.ts b/packages/core-editor/src/common/context/index.ts new file mode 100644 index 00000000..8b92a342 --- /dev/null +++ b/packages/core-editor/src/common/context/index.ts @@ -0,0 +1,3 @@ +export { CoreEvents } from "./events/core-events"; +export { EditorEvents } from "./events/editor-events"; +export type { EventEmitter } from "./event-emitter"; diff --git a/packages/core-editor/src/common/context/options.type.ts b/packages/core-editor/src/common/context/options.type.ts index c2bd724f..5b121a5d 100644 --- a/packages/core-editor/src/common/context/options.type.ts +++ b/packages/core-editor/src/common/context/options.type.ts @@ -6,12 +6,15 @@ import { type Save } from "./save.type"; /** * Union of client and server editor run options accepted by * `NanoforgeApplication.init` in editor mode. + * + * @deprecated Use `IRunOptions` instead. */ export type IEditorRunOptions = IEditorRunClientOptions | IEditorRunServerOptions; /** * Run options for a client-side editor application. * + * @deprecated Use `IRunClientOptions` instead. * @remarks * Extends the base run options with editor-specific communication channels. */ @@ -36,6 +39,7 @@ export interface IEditorRunClientOptions { /** * Run options for a server-side editor application. * + * @deprecated Use `IRunServerOptions` instead. * @remarks * Extends the base server run options with editor-specific communication channels. */ diff --git a/packages/core-editor/src/core/core.ts b/packages/core-editor/src/core/core.ts index fb0fa2ac..f2f8057d 100644 --- a/packages/core-editor/src/core/core.ts +++ b/packages/core-editor/src/core/core.ts @@ -3,11 +3,12 @@ import { ClientLibraryManager, Context, type IRunnerLibrary, - InitContext, + type InitContext, type LibraryHandle, LibraryStatusEnum, NfNotInitializedException, } from "@nanoforge-dev/common"; +import { type IRunOptions } from "@nanoforge-dev/common"; import { type ECSClientLibrary } from "@nanoforge-dev/ecs-client"; import { type ApplicationConfig } from "../../../core/src/application/application-config"; @@ -16,7 +17,7 @@ import { type EditableApplicationContext } from "../../../core/src/common/contex import { EditableExecutionContext } from "../../../core/src/common/context/contexts/executions/execution.editable-context"; import { type EditableLibraryContext } from "../../../core/src/common/context/contexts/library.editable-context"; import { ConfigRegistry } from "../../../core/src/config/config-registry"; -import { type IEditorRunOptions } from "../common/context/options.type"; +import { EditorInitContext } from "../common/context/contexts/init.context"; import { CoreEditor } from "../editor/core-editor"; export class Core { @@ -31,19 +32,19 @@ export class Core { this.context = context; } - public async init(options: IEditorRunOptions, appOptions: IApplicationOptions): Promise { + public async init(options: IRunOptions, appOptions: IApplicationOptions): Promise { this.options = appOptions; this._configRegistry = new ConfigRegistry(options.env); - await this.runInit(this.getInitContext(options)); this.editor = new CoreEditor( this, options.editor, this.config.getComponentSystemLibrary().library, ); + await this.runInit(this.getInitContext(options)); } public async run(): Promise { - if (!this.options) throw new NfNotInitializedException("Core"); + if (!this.options) throw new NfNotInitializedException("Core Editor"); const context = this.getExecutionContext(); const clientContext = this.getClientContext(); @@ -77,10 +78,16 @@ export class Core { return new EditableExecutionContext(this.context, this.config.libraryManager); } - private getInitContext(options: IEditorRunOptions): InitContext { - if (!this._configRegistry) throw new NfNotInitializedException("Core"); + private getInitContext(options: IRunOptions): InitContext { + if (!this._configRegistry || !this.editor) throw new NfNotInitializedException("Core Editor"); - return new InitContext(this.context, this.config.libraryManager, this._configRegistry, options); + return new EditorInitContext( + this.context, + this.config.libraryManager, + this._configRegistry, + options, + this.editor.eventEmitter, + ); } private getClearContext(): ClearContext { diff --git a/packages/core-editor/src/editor/core-editor.ts b/packages/core-editor/src/editor/core-editor.ts index 033a4884..a968e89e 100644 --- a/packages/core-editor/src/editor/core-editor.ts +++ b/packages/core-editor/src/editor/core-editor.ts @@ -1,27 +1,27 @@ -import { NfNotFound } from "@nanoforge-dev/common"; -import { type ECSClientLibrary, type Entity } from "@nanoforge-dev/ecs-client"; +import { type IRunOptions, NfNotFound } from "@nanoforge-dev/common"; +import type { ECSClientLibrary, Entity } from "@nanoforge-dev/ecs-client"; +import { EventEmitter } from "../common/context/event-emitter"; import { CoreEvents } from "../common/context/events/core-events"; -import { type IEditorRunOptions } from "../common/context/options.type"; -import { type Save } from "../common/context/save.type"; -import { type Core } from "../core/core"; +import type { Save } from "../common/context/save.type"; +import type { Core } from "../core/core"; export class CoreEditor { - private editor: IEditorRunOptions["editor"]; + public eventEmitter: EventEmitter; private ecsLibrary: ECSClientLibrary; private lastLoadedSave: Save; private core: Core; private _isPaused: boolean = false; - constructor(core: Core, editor: IEditorRunOptions["editor"], ecsLibrary: ECSClientLibrary) { - this.editor = editor; - this.lastLoadedSave = JSON.parse(JSON.stringify(this.editor.save)); + constructor(core: Core, editor: IRunOptions["editor"], ecsLibrary: ECSClientLibrary) { + this.eventEmitter = new EventEmitter(editor); + this.lastLoadedSave = JSON.parse(JSON.stringify(editor.save)); this.ecsLibrary = ecsLibrary; - this.editor.coreEvents?.addListener(CoreEvents.HOT_RELOAD, this.hotReloadEvent.bind(this)); - this.editor.coreEvents?.addListener(CoreEvents.HARD_RELOAD, this.hardReloadEvent.bind(this)); - this.editor.coreEvents?.addListener(CoreEvents.PAUSE_GAME, this.pauseGameEvent.bind(this)); - this.editor.coreEvents?.addListener(CoreEvents.STOP_GAME, this.stopGameEvent.bind(this)); - this.editor.coreEvents?.addListener(CoreEvents.UNPAUSE_GAME, this.unpauseGameEvent.bind(this)); + this.eventEmitter.on(CoreEvents.HOT_RELOAD, this.hotReloadEvent.bind(this)); + this.eventEmitter.on(CoreEvents.HARD_RELOAD, this.hardReloadEvent.bind(this)); + this.eventEmitter.on(CoreEvents.PAUSE_GAME, this.pauseGameEvent.bind(this)); + this.eventEmitter.on(CoreEvents.STOP_GAME, this.stopGameEvent.bind(this)); + this.eventEmitter.on(CoreEvents.UNPAUSE_GAME, this.unpauseGameEvent.bind(this)); this.core = core; } @@ -30,7 +30,7 @@ export class CoreEditor { } public runEvents() { - this.editor.coreEvents?.runEvents(); + this.eventEmitter.runEvents(); } public hotReloadEvent(save: Save): void { @@ -93,8 +93,10 @@ export class CoreEditor { const reg = this.ecsLibrary.registry; return reg.entityFromIndex( reg - .getComponents({ name: "__RESERVED_ENTITY_ID" }) - .getIndex({ name: "__RESERVED_ENTITY_ID", entityId: entityId }), + .getComponents({ name: "__RESERVED_entityId" }) + // @todo There is an issue here, getIndex return index from 1 but entityFromIndex get index from 0 + // This is a temp fix + .getIndex({ name: "__RESERVED_entityId", entityId: entityId }) - 1, ); } } diff --git a/packages/core-editor/src/index.ts b/packages/core-editor/src/index.ts index 4273d62e..b6bd2792 100644 --- a/packages/core-editor/src/index.ts +++ b/packages/core-editor/src/index.ts @@ -1,4 +1,41 @@ +import type { EventEmitter } from "./common/context/event-emitter"; +import type { IEventEmitter } from "./common/context/event-emitter.type"; +import type { CoreEvents, CoreEventsMap } from "./common/context/events/core-events"; +import type { EditorEvents, EditorEventsMap } from "./common/context/events/editor-events"; +import type { Save } from "./common/context/save.type"; + +declare module "@nanoforge-dev/common" { + interface IRunClientOptions { + /** Editor integration hooks. */ + editor: { + /** Serialised scene state loaded or saved by the editor. */ + save: Save; + /** Event emitter for core-to-editor communication. */ + coreEvents: IEventEmitter; + /** Event emitter for editor-to-core communication. */ + editorEvents: IEventEmitter; + }; + } + + interface IRunServerOptions { + /** Editor integration hooks. */ + editor: { + /** Serialised scene state loaded or saved by the editor. */ + save: Save; + /** Event emitter for core-to-editor communication. */ + coreEvents: IEventEmitter; + /** Event emitter for editor-to-core communication. */ + editorEvents: IEventEmitter; + }; + } + + interface InitContext { + eventEmitter: EventEmitter; + } +} + export * from "./application/nanoforge-factory"; export type { NanoforgeClient } from "./application/nanoforge-client"; export type { NanoforgeServer } from "./application/nanoforge-server"; +export { type EventEmitter, CoreEvents, EditorEvents } from "./common/context"; diff --git a/packages/core-editor/test/editor-feature.spec.ts b/packages/core-editor/test/editor-feature.spec.ts index 9dfc5a93..b12d0de3 100644 --- a/packages/core-editor/test/editor-feature.spec.ts +++ b/packages/core-editor/test/editor-feature.spec.ts @@ -1,8 +1,8 @@ +import { type IRunOptions } from "@nanoforge-dev/common"; import { type ECSClientLibrary } from "@nanoforge-dev/ecs-client"; import { afterEach, describe, expect, it, vi } from "vitest"; import { CoreEvents } from "../src/common/context/events/core-events"; -import type { IEditorRunOptions } from "../src/common/context/options.type"; import { type Save, type SaveComponent, type SaveEntity } from "../src/common/context/save.type"; import { type Core } from "../src/core/core"; import { CoreEditor } from "../src/editor/core-editor"; @@ -23,7 +23,7 @@ describe("EditorFeatures", () => { .mockImplementation(() => {}); new CoreEditor( {} as unknown as Core, - { coreEvents: events, save: { libraries: [] } } as unknown as IEditorRunOptions["editor"], + { coreEvents: events, save: { libraries: [] } } as unknown as IRunOptions["editor"], {} as ECSClientLibrary, ).runEvents(); expect(spyHotReload).toHaveBeenCalledTimes(2); @@ -54,7 +54,7 @@ describe("EditorFeatures", () => { number: 4, bulletTypes: ["9mm"], }, - __RESERVED_ENTITY_ID: { + __RESERVED_entityId: { entityId: "ent2", }, }, @@ -64,7 +64,7 @@ describe("EditorFeatures", () => { x: 7, y: 8, }, - __RESERVED_ENTITY_ID: { + __RESERVED_entityId: { entityId: "ent3", }, }, @@ -72,7 +72,9 @@ describe("EditorFeatures", () => { )[entity]?.[component.name]; }); entityFromIndex = vi.fn((index) => { - return index; + // @todo There is an issue here, see src/editor/core-editor.ts:97 + // This is a temp fix + return index + 1; }); }, ); @@ -114,6 +116,7 @@ describe("EditorFeatures", () => { }, ]; const fakeReg = new FakeRegistry(); + const events = new EventEmitter(); new CoreEditor( {} as unknown as Core, { @@ -121,21 +124,22 @@ describe("EditorFeatures", () => { components, entities, } as any as Save, - } as any as IEditorRunOptions["editor"], + coreEvents: events, + } as any as IRunOptions["editor"], { registry: fakeReg } as any as ECSClientLibrary, ).hotReloadEvent({ components, entities } as any as Save); - expect(fakeReg.getComponents).toHaveBeenCalledWith({ name: "__RESERVED_ENTITY_ID" }); + expect(fakeReg.getComponents).toHaveBeenCalledWith({ name: "__RESERVED_entityId" }); expect(getIndex).toHaveBeenNthCalledWith(1, { entityId: "ent2", - name: "__RESERVED_ENTITY_ID", + name: "__RESERVED_entityId", }); expect(getIndex).toHaveBeenNthCalledWith(2, { entityId: "ent2", - name: "__RESERVED_ENTITY_ID", + name: "__RESERVED_entityId", }); expect(getIndex).toHaveBeenNthCalledWith(3, { entityId: "ent3", - name: "__RESERVED_ENTITY_ID", + name: "__RESERVED_entityId", }); expect(fakeReg.getEntityComponent).toHaveBeenNthCalledWith(1, 2, { name: "Position" }); expect(fakeReg.getEntityComponent).toHaveBeenNthCalledWith(2, 2, { name: "Bullets" }); diff --git a/packages/graphics-2d-editor/.cliff-jumperrc.json b/packages/graphics-2d-editor/.cliff-jumperrc.json new file mode 100644 index 00000000..b68e4434 --- /dev/null +++ b/packages/graphics-2d-editor/.cliff-jumperrc.json @@ -0,0 +1,8 @@ +{ + "$schema": "https://raw.githubusercontent.com/favware/cliff-jumper/main/assets/cliff-jumper.schema.json", + "name": "graphics-2d-editor", + "org": "nanoforge-dev", + "packagePath": "packages/graphics-2d-editor", + "tagTemplate": "{{new-version}}", + "identifierBase": false +} diff --git a/packages/graphics-2d-editor/.gitignore b/packages/graphics-2d-editor/.gitignore new file mode 100644 index 00000000..e56e932b --- /dev/null +++ b/packages/graphics-2d-editor/.gitignore @@ -0,0 +1,270 @@ +### VisualStudioCode template +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +!.vscode/*.code-snippets + +# Local History for Visual Studio Code +.history/ + +# Built Visual Studio Code Extensions +*.vsix + +### C++ template +# Prerequisites +*.d + +# Compiled Object files +*.slo +*.lo +*.o +*.obj + +# Precompiled Headers +*.gch +*.pch + +# Compiled Dynamic libraries +*.so +*.dylib +*.dll + +# Fortran module files +*.mod +*.smod + +# Compiled Static libraries +*.lai +*.la +*.a +*.lib + +# Executables +*.exe +*.out +*.app + +### JetBrains template +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/**/usage.statistics.xml +.idea/**/dictionaries +.idea/**/shelf + +# AWS User-specific +.idea/**/aws.xml + +# Generated files +.idea/**/contentModel.xml + +# Sensitive or high-churn files +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml +.idea/**/dbnavigator.xml + +# Gradle +.idea/**/gradle.xml +.idea/**/libraries + +# Gradle and Maven with auto-import +# When using Gradle or Maven with auto-import, you should exclude module files, +# since they will be recreated, and may cause churn. Uncomment if using +# auto-import. +# .idea/artifacts +# .idea/compiler.xml +# .idea/jarRepositories.xml +# .idea/modules.xml +# .idea/*.iml +# .idea/modules +# *.iml +# *.ipr + +# CMake +cmake-build-*/ + +# Mongo Explorer plugin +.idea/**/mongoSettings.xml + +# File-based project format +*.iws + +# IntelliJ +out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Cursive Clojure plugin +.idea/replstate.xml + +# SonarLint plugin +.idea/sonarlint/ + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +# Editor-based Rest Client +.idea/httpRequests + +# Android studio 3.1+ serialized cache file +.idea/caches/build_file_checksums.ser + +### Node template +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* +.pnpm-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# Snowpack dependency directory (https://snowpack.dev/) +web_modules/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional stylelint cache +.stylelintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variable files +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# parcel-bundler cache (https://parceljs.org/) +.cache +.parcel-cache + +# Next.js build output +.next +out + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and not Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# vuepress v2.x temp and cache directory +.temp +.cache + +# Docusaurus cache and generated files +.docusaurus + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port + +# Stores VSCode versions used for testing VSCode extensions +.vscode-test + +# yarn v2 +.yarn/cache +.yarn/unplugged +.yarn/build-state.yml +.yarn/install-state.gz +.pnp.* + +### Private + +# Turbo +.turbo/ + +# Compiled files +src/**/*.js +src/**/*.d.ts + +# mint-tsdocs cache +docs/.tsdocs/ diff --git a/packages/graphics-2d-editor/.idea/.gitignore b/packages/graphics-2d-editor/.idea/.gitignore new file mode 100644 index 00000000..13566b81 --- /dev/null +++ b/packages/graphics-2d-editor/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/packages/graphics-2d-editor/.idea/.name b/packages/graphics-2d-editor/.idea/.name new file mode 100644 index 00000000..31b37a23 --- /dev/null +++ b/packages/graphics-2d-editor/.idea/.name @@ -0,0 +1 @@ +[NanoForge] Engine Graphics 2D Editor \ No newline at end of file diff --git a/packages/graphics-2d-editor/.idea/[NanoForge] Engine Graphics 2D Editor.iml b/packages/graphics-2d-editor/.idea/[NanoForge] Engine Graphics 2D Editor.iml new file mode 100644 index 00000000..24643cc3 --- /dev/null +++ b/packages/graphics-2d-editor/.idea/[NanoForge] Engine Graphics 2D Editor.iml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/graphics-2d-editor/.idea/codeStyles/Project.xml b/packages/graphics-2d-editor/.idea/codeStyles/Project.xml new file mode 100644 index 00000000..a57ead77 --- /dev/null +++ b/packages/graphics-2d-editor/.idea/codeStyles/Project.xml @@ -0,0 +1,172 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/graphics-2d-editor/.idea/codeStyles/codeStyleConfig.xml b/packages/graphics-2d-editor/.idea/codeStyles/codeStyleConfig.xml new file mode 100644 index 00000000..79ee123c --- /dev/null +++ b/packages/graphics-2d-editor/.idea/codeStyles/codeStyleConfig.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/packages/graphics-2d-editor/.idea/editor.xml b/packages/graphics-2d-editor/.idea/editor.xml new file mode 100644 index 00000000..8c39ae07 --- /dev/null +++ b/packages/graphics-2d-editor/.idea/editor.xml @@ -0,0 +1,107 @@ + + + + + + \ No newline at end of file diff --git a/packages/graphics-2d-editor/.idea/git_toolbox_blame.xml b/packages/graphics-2d-editor/.idea/git_toolbox_blame.xml new file mode 100644 index 00000000..7dc12496 --- /dev/null +++ b/packages/graphics-2d-editor/.idea/git_toolbox_blame.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/packages/graphics-2d-editor/.idea/git_toolbox_prj.xml b/packages/graphics-2d-editor/.idea/git_toolbox_prj.xml new file mode 100644 index 00000000..02b915b8 --- /dev/null +++ b/packages/graphics-2d-editor/.idea/git_toolbox_prj.xml @@ -0,0 +1,15 @@ + + + + + + + \ No newline at end of file diff --git a/packages/graphics-2d-editor/.idea/inspectionProfiles/Project_Default.xml b/packages/graphics-2d-editor/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 00000000..41ec19c1 --- /dev/null +++ b/packages/graphics-2d-editor/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,12 @@ + + + + \ No newline at end of file diff --git a/packages/graphics-2d-editor/.idea/jsLinters/eslint.xml b/packages/graphics-2d-editor/.idea/jsLinters/eslint.xml new file mode 100644 index 00000000..541945bb --- /dev/null +++ b/packages/graphics-2d-editor/.idea/jsLinters/eslint.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/packages/graphics-2d-editor/.idea/misc.xml b/packages/graphics-2d-editor/.idea/misc.xml new file mode 100644 index 00000000..7ecbce57 --- /dev/null +++ b/packages/graphics-2d-editor/.idea/misc.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/graphics-2d-editor/.idea/modules.xml b/packages/graphics-2d-editor/.idea/modules.xml new file mode 100644 index 00000000..fa032c30 --- /dev/null +++ b/packages/graphics-2d-editor/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/packages/graphics-2d-editor/.idea/prettier.xml b/packages/graphics-2d-editor/.idea/prettier.xml new file mode 100644 index 00000000..0c83ac4e --- /dev/null +++ b/packages/graphics-2d-editor/.idea/prettier.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/packages/graphics-2d-editor/.idea/vcs.xml b/packages/graphics-2d-editor/.idea/vcs.xml new file mode 100644 index 00000000..b2bdec2d --- /dev/null +++ b/packages/graphics-2d-editor/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/packages/graphics-2d-editor/.nvmrc b/packages/graphics-2d-editor/.nvmrc new file mode 100644 index 00000000..a682cfb9 --- /dev/null +++ b/packages/graphics-2d-editor/.nvmrc @@ -0,0 +1 @@ +v25 diff --git a/packages/graphics-2d-editor/.prettierignore b/packages/graphics-2d-editor/.prettierignore new file mode 100644 index 00000000..64b127c9 --- /dev/null +++ b/packages/graphics-2d-editor/.prettierignore @@ -0,0 +1,11 @@ +# Ignore files for PNPM, NPM and YARN +pnpm-lock.yaml +package-lock.json +yarn.lock +bun.lock + +.turbo/ +node_modules/ +dist/ +coverage/ +CHANGELOG.md diff --git a/packages/graphics-2d-editor/CHANGELOG.md b/packages/graphics-2d-editor/CHANGELOG.md new file mode 100644 index 00000000..6361e43e --- /dev/null +++ b/packages/graphics-2d-editor/CHANGELOG.md @@ -0,0 +1,3 @@ +# Changelog + +All notable changes to this project will be documented in this file. diff --git a/packages/graphics-2d-editor/LICENSE b/packages/graphics-2d-editor/LICENSE new file mode 100644 index 00000000..62c6400b --- /dev/null +++ b/packages/graphics-2d-editor/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright © 2025 NanoForge + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/graphics-2d-editor/README.md b/packages/graphics-2d-editor/README.md new file mode 100644 index 00000000..59e503c6 --- /dev/null +++ b/packages/graphics-2d-editor/README.md @@ -0,0 +1,98 @@ +
+
+

+ NanoForge +

+
+

+ npm version + npm downloads + Tests status + Last commit + Contributors +

+
+ +## About + +`@nanoforge-dev/graphics-2d-editor` is an addon for the [NanoForge Graphics 2D library][graphics] to handle the creation of 2D graphics games in the editor. + +## Installation + +**Node.js 25 or newer is required.** + +```sh +npm install @nanoforge-dev/graphics-2d-editor +yarn add @nanoforge-dev/graphics-2d-editor +pnpm add @nanoforge-dev/graphics-2d-editor +bun add @nanoforge-dev/graphics-2d-editor +``` + +## Example usage + +Initialize the library in your main file (for the rest of the example, please refer to the graphics 2D library [documentation][graphics]). + +```ts +import { type IRunClientOptions } from "@nanoforge-dev/common"; +import { NanoforgeFactory } from "@nanoforge-dev/core"; +import { ECSClientLibrary } from "@nanoforge-dev/ecs-client"; +import { Circle, Graphics2DLibrary, Layer } from "@nanoforge-dev/graphics-2d"; +import { Graphics2DEditorLibrary } from "@nanoforge-dev/graphics-2d-editor"; + +import { CircleComponent } from "./components/CircleComponent"; + +export async function main(options: IRunClientOptions) { + const app = NanoforgeFactory.createClient(); + + const ecs = new ECSClientLibrary(); + const graphics = new Graphics2DLibrary(); + const graphicsEditor = new Graphics2DEditorLibrary(); + + app.useComponentSystem(ecs); + app.useGraphics(graphics); + app.use(Symbol.for("GraphicsEditor"), graphicsEditor); + + await app.init(options); + + const registry = ecs.registry; + + const layer = new Layer(); + graphics.stage.add(layer); + + const entity = registry.spawnEntity(); + registry.addComponent( + entity, + new CircleComponent( + new Circle({ + radius: 70, + fill: "red", + }), + layer, + ), + ); + + await app.run(); +} +``` + +## Links + +- [GitHub][source] +- [npm][npm] + +## Contributing + +Before creating an issue, please ensure that it hasn't already been reported/suggested, and double-check the +[documentation][documentation]. +See [the contribution guide][contributing] if you'd like to submit a PR. + +## Help + +If you don't understand something in the documentation, you are experiencing problems, or you just need a gentle nudge in the right direction, please don't hesitate to ask questions in [discussions][discussions]. + +[documentation]: https://github.com/NanoForge-dev/Engine +[discussions]: https://github.com/NanoForge-dev/Engine/discussions +[source]: https://github.com/NanoForge-dev/Engine/tree/main/packages/graphics-2d-editor +[graphics]: https://github.com/NanoForge-dev/Engine/tree/main/packages/graphics-2d +[npm]: https://www.npmjs.com/package/@nanoforge-dev/graphics-2d-editor +[contributing]: https://github.com/NanoForge-dev/Engine/blob/main/.github/CONTRIBUTING.md diff --git a/packages/graphics-2d-editor/cliff.toml b/packages/graphics-2d-editor/cliff.toml new file mode 100644 index 00000000..5163767e --- /dev/null +++ b/packages/graphics-2d-editor/cliff.toml @@ -0,0 +1,79 @@ +[changelog] +header = """ +# Changelog + +All notable changes to this project will be documented in this file.\n +""" +body = """ +{%- macro remote_url() -%} + https://github.com/{{ remote.github.owner }}/{{ remote.github.repo }} +{%- endmacro -%} +{% if version %}\ + # [{{ version | trim_start_matches(pat="v") }}]\ + {% if previous %}\ + {% if previous.version %}\ + ({{ self::remote_url() }}/compare/{{ previous.version }}...{{ version }})\ + {% else %}\ + ({{ self::remote_url() }}/tree/{{ version }})\ + {% endif %}\ + {% endif %} \ + - ({{ timestamp | date(format="%Y-%m-%d") }}) +{% else %}\ + # [unreleased] +{% endif %}\ +{% for group, commits in commits | group_by(attribute="group") %} + ## {{ group | upper_first }} + {% for commit in commits %} + - {% if commit.scope %}\ + **{{commit.scope}}:** \ + {% endif %}\ + {{ commit.message | upper_first }} ([{{ commit.id | truncate(length=7, end="") }}]({{ self::remote_url() }}/commit/{{ commit.id }}))\ + {% if commit.github.username %} by @{{ commit.github.username }}{%- endif %}\ + {% if commit.breaking %}\ + {% for footer in commit.footers %}\ + {% if footer.breaking %}\ + \n{% raw %} {% endraw %}- **{{ footer.token }}{{ footer.separator }}** {{ footer.value }}\ + {% endif %}\ + {% endfor %}\ + {% endif %}\ + {% endfor %} +{% endfor %}\ +{% if github.contributors | filter(attribute="is_first_time", value=true) | length %}\ + \n### New Contributors\n + {% for contributor in github.contributors | filter(attribute="is_first_time", value=true) %}\ + - @{{ contributor.username }} made their first contribution in #{{ contributor.pr_number }} + {% endfor %}\ +{% endif %}\n +""" +trim = true +footer = "" + +[git] +conventional_commits = true +filter_unconventional = true +commit_parsers = [ + { message = "^feat", group = "Features"}, + { message = "^fix", group = "Bug Fixes"}, + { message = "^docs", group = "Documentation"}, + { message = "^perf", group = "Performance"}, + { message = "^refactor", group = "Refactor"}, + { message = "^types", group = "Typings"}, + { message = ".*deprecated", body = ".*deprecated", group = "Deprecation"}, + { message = "^revert", skip = true}, + { message = "^style", group = "Styling"}, + { message = "^test", group = "Testing"}, + { message = "^chore", skip = true}, + { message = "^ci", skip = true}, + { message = "^build", skip = true}, + { body = ".*security", group = "Security"}, +] +filter_commits = true +protect_breaking_commits = true +tag_pattern = "^[0-9]+" +ignore_tags = "" +topo_order = false +sort_commits = "newest" + +[remote.github] +owner = "NanoForge-dev" +repo = "Engine" diff --git a/packages/graphics-2d-editor/eslint.config.js b/packages/graphics-2d-editor/eslint.config.js new file mode 100644 index 00000000..62ec06dc --- /dev/null +++ b/packages/graphics-2d-editor/eslint.config.js @@ -0,0 +1,3 @@ +import config from "@nanoforge-dev/utils-eslint-config"; + +export default config; diff --git a/packages/graphics-2d-editor/package.json b/packages/graphics-2d-editor/package.json new file mode 100644 index 00000000..ae8632af --- /dev/null +++ b/packages/graphics-2d-editor/package.json @@ -0,0 +1,91 @@ +{ + "$schema": "https://json.schemastore.org/package.json", + "name": "@nanoforge-dev/graphics-2d-editor", + "version": "0.0.0", + "description": "NanoForge Engine - Graphics-2d Editor", + "keywords": [ + "nanoforge", + "game", + "engine" + ], + "homepage": "https://github.com/NanoForge-dev/Engine#readme", + "bugs": "https://github.com/NanoForge-dev/Engine/issues", + "license": "MIT", + "contributors": [ + "Bill ", + "Exelo ", + "Fexkoser ", + "Tchips " + ], + "files": [ + "dist" + ], + "main": "./dist/index.cjs", + "module": "./dist/index.js", + "types": "./dist/index.d.cts", + "exports": { + ".": { + "require": { + "types": "./dist/index.d.cts", + "default": "./dist/index.cjs" + }, + "import": { + "types": "./dist/index.d.ts", + "default": "./dist/index.js" + } + }, + "./package.json": "./package.json" + }, + "type": "module", + "directories": { + "lib": "src" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/NanoForge-dev/Engine.git", + "directory": "packages/graphics-2d-editor" + }, + "funding": "https://github.com/NanoForge-dev/Engine?sponsor", + "scripts": { + "build": "tsc --noEmit && tsdown --config-loader unrun", + "lint": "prettier --check . && eslint --format=pretty src", + "format": "prettier --write . && eslint --fix --format=pretty src", + "test:unit": "vitest run --config ../../vitest.config.ts", + "prepack": "pnpm run build && pnpm run lint", + "changelog": "git cliff --prepend ./CHANGELOG.md -u -c ./cliff.toml -r ../../ --include-path 'packages/graphics-2d-editor/*'", + "release": "cliff-jumper", + "docs": "mint-tsdocs generate" + }, + "dependencies": { + "@nanoforge-dev/common": "workspace:*", + "@nanoforge-dev/core-editor": "workspace:*", + "@nanoforge-dev/ecs-lib": "workspace:*" + }, + "devDependencies": { + "@favware/cliff-jumper": "catalog:ci", + "@nanoforge-dev/utils-eslint-config": "workspace:*", + "@nanoforge-dev/utils-prettier-config": "workspace:*", + "@trivago/prettier-plugin-sort-imports": "catalog:lint", + "eslint": "catalog:lint", + "prettier": "catalog:lint", + "tsdown": "catalog:build", + "typescript": "catalog:core", + "unrun": "catalog:build", + "vitest": "catalog:test" + }, + "packageManager": "pnpm@11.5.2", + "engines": { + "node": "25" + }, + "publishConfig": { + "access": "public" + }, + "lint-staged": { + "**": [ + "prettier --ignore-unknown --write" + ], + "src/**/*.ts": [ + "eslint --fix" + ] + } +} diff --git a/packages/graphics-2d-editor/prettier.config.js b/packages/graphics-2d-editor/prettier.config.js new file mode 100644 index 00000000..27d0e269 --- /dev/null +++ b/packages/graphics-2d-editor/prettier.config.js @@ -0,0 +1,3 @@ +import config from "@nanoforge-dev/utils-prettier-config"; + +export default config; diff --git a/packages/graphics-2d-editor/src/graphics-2d-editor.library.ts b/packages/graphics-2d-editor/src/graphics-2d-editor.library.ts new file mode 100644 index 00000000..0c02202a --- /dev/null +++ b/packages/graphics-2d-editor/src/graphics-2d-editor.library.ts @@ -0,0 +1,63 @@ +import { + COMPONENT_SYSTEM_LIBRARY, + GRAPHICS_LIBRARY, + type InitContext, + Library, +} from "@nanoforge-dev/common"; +import { EditorEvents, type EventEmitter } from "@nanoforge-dev/core-editor"; +import type { AbstractECSLibrary, Registry } from "@nanoforge-dev/ecs-lib"; + +export class Graphics2DEditorLibrary extends Library { + private _eventEmitter?: EventEmitter; + private _initComponents: Map> = new Map(); + + constructor() { + super({ + dependencies: [COMPONENT_SYSTEM_LIBRARY, GRAPHICS_LIBRARY], + }); + } + + /** @internal */ + get __name(): string { + return "Graphics2DEditorLibrary"; + } + + /** @internal */ + public override async __init(context: InitContext): Promise { + this._eventEmitter = context.eventEmitter; + const reg = context.libraries.getComponentSystem().library.registry; + reg.addSystem(this._dragSystem.bind(this)); + } + + private _dragSystem(registry: Registry) { + if (!this._eventEmitter) return; + + const entities = [ + ...registry.getZipper([{ name: "__RESERVED_entityId" }, { name: "DrawableCircle2D" }]), + ...registry.getZipper([{ name: "__RESERVED_entityId" }, { name: "DrawableRect2D" }]), + ...registry.getZipper([{ name: "__RESERVED_entityId" }, { name: "DrawableText2D" }]), + ]; + entities.forEach( + ({ __RESERVED_entityId, DrawableCircle2D, DrawableRect2D, DrawableText2D }: any) => { + const entityId = __RESERVED_entityId.entityId; + if (!this._initComponents.has(entityId)) this._initComponents.set(entityId, new Set()); + const s = this._initComponents.get(entityId) as Set; + [DrawableCircle2D, DrawableRect2D, DrawableText2D].forEach((comp) => { + if (!comp) return; + if (!s.has(comp.name)) { + comp.shape.draggable(true); + comp.shape.on("dragend", ({ target }: any) => { + this._eventEmitter?.emit( + EditorEvents.MOVE_COMPONENT, + entityId, + comp.name, + target._lastPos, + ); + }); + s.add(comp.name); + } + }); + }, + ); + } +} diff --git a/packages/graphics-2d-editor/src/index.ts b/packages/graphics-2d-editor/src/index.ts new file mode 100644 index 00000000..b187dac1 --- /dev/null +++ b/packages/graphics-2d-editor/src/index.ts @@ -0,0 +1 @@ +export { Graphics2DEditorLibrary } from "./graphics-2d-editor.library"; diff --git a/packages/graphics-2d-editor/tsconfig.json b/packages/graphics-2d-editor/tsconfig.json new file mode 100644 index 00000000..1ada333c --- /dev/null +++ b/packages/graphics-2d-editor/tsconfig.json @@ -0,0 +1,15 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig.json", + "extends": "../../tsconfig.json", + "include": ["src/**/*.ts"], + "exclude": ["node_modules", "dist"], + "compilerOptions": { + "declaration": true, + "paths": { + "/snippets/*": ["./docs/snippets/*"] + } + }, + "mdx": { + "checkMdx": true + } +} diff --git a/packages/graphics-2d-editor/tsconfig.spec.json b/packages/graphics-2d-editor/tsconfig.spec.json new file mode 100644 index 00000000..8270caba --- /dev/null +++ b/packages/graphics-2d-editor/tsconfig.spec.json @@ -0,0 +1,10 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig.json", + "extends": "./tsconfig.json", + "compilerOptions": { + "noEmit": true, + "skipLibCheck": true + }, + "include": ["test/**/*.spec.ts"], + "exclude": ["node_modules"] +} diff --git a/packages/graphics-2d-editor/tsdoc.json b/packages/graphics-2d-editor/tsdoc.json new file mode 100644 index 00000000..ae9ae564 --- /dev/null +++ b/packages/graphics-2d-editor/tsdoc.json @@ -0,0 +1,14 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json", + "extends": ["@microsoft/api-extractor/extends/tsdoc-base.json"], + "tagDefinitions": [ + { + "tagName": "@default", + "syntaxKind": "block", + "allowMultiple": false + } + ], + "supportForTags": { + "@default": true + } +} diff --git a/packages/graphics-2d-editor/tsdown.config.ts b/packages/graphics-2d-editor/tsdown.config.ts new file mode 100644 index 00000000..12f5dea6 --- /dev/null +++ b/packages/graphics-2d-editor/tsdown.config.ts @@ -0,0 +1,3 @@ +import { createTsdownConfig } from "../../tsdown.config"; + +export default [createTsdownConfig()]; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 215f07ed..f0485507 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,7 +8,7 @@ catalogs: build: tsdown: specifier: ^0.22.1 - version: 0.22.0 + version: 0.22.2 unrun: specifier: ^0.3.0 version: 0.3.0 @@ -30,7 +30,7 @@ catalogs: version: 9.1.7 lint-staged: specifier: ^17.0.7 - version: 17.0.5 + version: 17.0.7 config: class-transformer: specifier: ^0.5.1 @@ -68,7 +68,7 @@ catalogs: version: 6.0.2 eslint: specifier: ^10.4.1 - version: 10.4.0 + version: 10.5.0 eslint-config-prettier: specifier: ^10.1.8 version: 10.1.8 @@ -109,7 +109,7 @@ catalogs: version: 4.1.8 vitest: specifier: ^4.1.8 - version: 4.1.7 + version: 4.1.8 importers: @@ -177,7 +177,7 @@ importers: version: link:../../packages/asset-manager '@nanoforge-dev/cli': specifier: latest - version: 1.4.2(@types/node@25.9.1) + version: 1.5.3(@types/node@25.9.1) '@nanoforge-dev/common': specifier: workspace:* version: link:../../packages/common @@ -219,7 +219,7 @@ importers: version: link:../../packages/asset-manager '@nanoforge-dev/cli': specifier: latest - version: 1.4.2(@types/node@25.9.1) + version: 1.5.3(@types/node@25.9.1) '@nanoforge-dev/common': specifier: workspace:* version: link:../../packages/common @@ -264,10 +264,10 @@ importers: version: 6.0.2(prettier@3.8.3) eslint: specifier: catalog:lint - version: 10.4.0(jiti@2.6.1) + version: 10.5.0(jiti@2.6.1) lint-staged: specifier: catalog:ci - version: 17.0.5 + version: 17.0.7 prettier: specifier: catalog:lint version: 3.8.3 @@ -295,13 +295,13 @@ importers: version: 6.0.2(prettier@3.8.3) eslint: specifier: catalog:lint - version: 10.4.0(jiti@2.6.1) + version: 10.5.0(jiti@2.6.1) prettier: specifier: catalog:lint version: 3.8.3 tsdown: specifier: catalog:build - version: 0.22.0(typescript@6.0.3)(unrun@0.3.0(synckit@0.11.12)) + version: 0.22.2(typescript@6.0.3)(unrun@0.3.0(synckit@0.11.12)) typescript: specifier: catalog:core version: 6.0.3 @@ -310,7 +310,7 @@ importers: version: 0.3.0(synckit@0.11.12) vitest: specifier: catalog:test - version: 4.1.7(@types/node@25.9.1)(@vitest/coverage-v8@4.1.8(vitest@4.1.8))(vite@8.0.14(@types/node@25.9.1)(jiti@2.6.1)(yaml@2.9.0)) + version: 4.1.8(@types/node@25.9.1)(@vitest/coverage-v8@4.1.8)(vite@8.0.14(@types/node@25.9.1)(jiti@2.6.1)(yaml@2.9.0)) packages/common: devDependencies: @@ -328,13 +328,13 @@ importers: version: 6.0.2(prettier@3.8.3) eslint: specifier: catalog:lint - version: 10.4.0(jiti@2.6.1) + version: 10.5.0(jiti@2.6.1) prettier: specifier: catalog:lint version: 3.8.3 tsdown: specifier: catalog:build - version: 0.22.0(typescript@6.0.3)(unrun@0.3.0(synckit@0.11.12)) + version: 0.22.2(typescript@6.0.3)(unrun@0.3.0(synckit@0.11.12)) typescript: specifier: catalog:core version: 6.0.3 @@ -343,7 +343,7 @@ importers: version: 0.3.0(synckit@0.11.12) vitest: specifier: catalog:test - version: 4.1.7(@types/node@25.9.1)(@vitest/coverage-v8@4.1.8(vitest@4.1.8))(vite@8.0.14(@types/node@25.9.1)(jiti@2.6.1)(yaml@2.9.0)) + version: 4.1.8(@types/node@25.9.1)(@vitest/coverage-v8@4.1.8)(vite@8.0.14(@types/node@25.9.1)(jiti@2.6.1)(yaml@2.9.0)) packages/config: dependencies: @@ -368,13 +368,13 @@ importers: version: 6.0.2(prettier@3.8.3) eslint: specifier: catalog:lint - version: 10.4.0(jiti@2.6.1) + version: 10.5.0(jiti@2.6.1) prettier: specifier: catalog:lint version: 3.8.3 tsdown: specifier: catalog:build - version: 0.22.0(typescript@6.0.3)(unrun@0.3.0(synckit@0.11.12)) + version: 0.22.2(typescript@6.0.3)(unrun@0.3.0(synckit@0.11.12)) typescript: specifier: catalog:core version: 6.0.3 @@ -414,13 +414,13 @@ importers: version: 6.0.2(prettier@3.8.3) eslint: specifier: catalog:lint - version: 10.4.0(jiti@2.6.1) + version: 10.5.0(jiti@2.6.1) prettier: specifier: catalog:lint version: 3.8.3 tsdown: specifier: catalog:build - version: 0.22.0(typescript@6.0.3)(unrun@0.3.0(synckit@0.11.12)) + version: 0.22.2(typescript@6.0.3)(unrun@0.3.0(synckit@0.11.12)) typescript: specifier: catalog:core version: 6.0.3 @@ -429,7 +429,7 @@ importers: version: 0.3.0(synckit@0.11.12) vitest: specifier: catalog:test - version: 4.1.7(@types/node@25.9.1)(@vitest/coverage-v8@4.1.8(vitest@4.1.8))(vite@8.0.14(@types/node@25.9.1)(jiti@2.6.1)(yaml@2.9.0)) + version: 4.1.8(@types/node@25.9.1)(@vitest/coverage-v8@4.1.8)(vite@8.0.14(@types/node@25.9.1)(jiti@2.6.1)(yaml@2.9.0)) packages/core-editor: dependencies: @@ -466,13 +466,13 @@ importers: version: 6.0.2(prettier@3.8.3) eslint: specifier: catalog:lint - version: 10.4.0(jiti@2.6.1) + version: 10.5.0(jiti@2.6.1) prettier: specifier: catalog:lint version: 3.8.3 tsdown: specifier: catalog:build - version: 0.22.0(typescript@6.0.3)(unrun@0.3.0(synckit@0.11.12)) + version: 0.22.2(typescript@6.0.3)(unrun@0.3.0(synckit@0.11.12)) typescript: specifier: catalog:core version: 6.0.3 @@ -481,7 +481,7 @@ importers: version: 0.3.0(synckit@0.11.12) vitest: specifier: catalog:test - version: 4.1.7(@types/node@25.9.1)(@vitest/coverage-v8@4.1.8(vitest@4.1.8))(vite@8.0.14(@types/node@25.9.1)(jiti@2.6.1)(yaml@2.9.0)) + version: 4.1.8(@types/node@25.9.1)(@vitest/coverage-v8@4.1.8)(vite@8.0.14(@types/node@25.9.1)(jiti@2.6.1)(yaml@2.9.0)) packages/ecs-client: dependencies: @@ -515,13 +515,13 @@ importers: version: 25.9.1 eslint: specifier: catalog:lint - version: 10.4.0(jiti@2.6.1) + version: 10.5.0(jiti@2.6.1) prettier: specifier: catalog:lint version: 3.8.3 tsdown: specifier: catalog:build - version: 0.22.0(typescript@6.0.3)(unrun@0.3.0(synckit@0.11.12)) + version: 0.22.2(typescript@6.0.3)(unrun@0.3.0(synckit@0.11.12)) typescript: specifier: catalog:core version: 6.0.3 @@ -530,7 +530,7 @@ importers: version: 0.3.0(synckit@0.11.12) vitest: specifier: catalog:test - version: 4.1.7(@types/node@25.9.1)(@vitest/coverage-v8@4.1.8(vitest@4.1.8))(vite@8.0.14(@types/node@25.9.1)(jiti@2.6.1)(yaml@2.9.0)) + version: 4.1.8(@types/node@25.9.1)(@vitest/coverage-v8@4.1.8)(vite@8.0.14(@types/node@25.9.1)(jiti@2.6.1)(yaml@2.9.0)) packages/ecs-lib: dependencies: @@ -555,13 +555,13 @@ importers: version: 25.9.1 eslint: specifier: catalog:lint - version: 10.4.0(jiti@2.6.1) + version: 10.5.0(jiti@2.6.1) prettier: specifier: catalog:lint version: 3.8.3 tsdown: specifier: catalog:build - version: 0.22.0(typescript@6.0.3)(unrun@0.3.0(synckit@0.11.12)) + version: 0.22.2(typescript@6.0.3)(unrun@0.3.0(synckit@0.11.12)) typescript: specifier: catalog:core version: 6.0.3 @@ -570,7 +570,7 @@ importers: version: 0.3.0(synckit@0.11.12) vitest: specifier: catalog:test - version: 4.1.7(@types/node@25.9.1)(@vitest/coverage-v8@4.1.8(vitest@4.1.8))(vite@8.0.14(@types/node@25.9.1)(jiti@2.6.1)(yaml@2.9.0)) + version: 4.1.8(@types/node@25.9.1)(@vitest/coverage-v8@4.1.8)(vite@8.0.14(@types/node@25.9.1)(jiti@2.6.1)(yaml@2.9.0)) packages/ecs-server: dependencies: @@ -604,13 +604,13 @@ importers: version: 25.9.1 eslint: specifier: catalog:lint - version: 10.4.0(jiti@2.6.1) + version: 10.5.0(jiti@2.6.1) prettier: specifier: catalog:lint version: 3.8.3 tsdown: specifier: catalog:build - version: 0.22.0(typescript@6.0.3)(unrun@0.3.0(synckit@0.11.12)) + version: 0.22.2(typescript@6.0.3)(unrun@0.3.0(synckit@0.11.12)) typescript: specifier: catalog:core version: 6.0.3 @@ -619,7 +619,7 @@ importers: version: 0.3.0(synckit@0.11.12) vitest: specifier: catalog:test - version: 4.1.7(@types/node@25.9.1)(@vitest/coverage-v8@4.1.8(vitest@4.1.8))(vite@8.0.14(@types/node@25.9.1)(jiti@2.6.1)(yaml@2.9.0)) + version: 4.1.8(@types/node@25.9.1)(@vitest/coverage-v8@4.1.8)(vite@8.0.14(@types/node@25.9.1)(jiti@2.6.1)(yaml@2.9.0)) packages/graphics-2d: dependencies: @@ -644,13 +644,13 @@ importers: version: 6.0.2(prettier@3.8.3) eslint: specifier: catalog:lint - version: 10.4.0(jiti@2.6.1) + version: 10.5.0(jiti@2.6.1) prettier: specifier: catalog:lint version: 3.8.3 tsdown: specifier: catalog:build - version: 0.22.0(typescript@6.0.3)(unrun@0.3.0(synckit@0.11.12)) + version: 0.22.2(typescript@6.0.3)(unrun@0.3.0(synckit@0.11.12)) typescript: specifier: catalog:core version: 6.0.3 @@ -659,7 +659,50 @@ importers: version: 0.3.0(synckit@0.11.12) vitest: specifier: catalog:test - version: 4.1.7(@types/node@25.9.1)(@vitest/coverage-v8@4.1.8(vitest@4.1.8))(vite@8.0.14(@types/node@25.9.1)(jiti@2.6.1)(yaml@2.9.0)) + version: 4.1.8(@types/node@25.9.1)(@vitest/coverage-v8@4.1.8)(vite@8.0.14(@types/node@25.9.1)(jiti@2.6.1)(yaml@2.9.0)) + + packages/graphics-2d-editor: + dependencies: + '@nanoforge-dev/common': + specifier: workspace:* + version: link:../common + '@nanoforge-dev/core-editor': + specifier: workspace:* + version: link:../core-editor + '@nanoforge-dev/ecs-lib': + specifier: workspace:* + version: link:../ecs-lib + devDependencies: + '@favware/cliff-jumper': + specifier: catalog:ci + version: 6.1.0 + '@nanoforge-dev/utils-eslint-config': + specifier: workspace:* + version: link:../../utils/eslint-config + '@nanoforge-dev/utils-prettier-config': + specifier: workspace:* + version: link:../../utils/prettier-config + '@trivago/prettier-plugin-sort-imports': + specifier: catalog:lint + version: 6.0.2(prettier@3.8.3) + eslint: + specifier: catalog:lint + version: 10.5.0(jiti@2.6.1) + prettier: + specifier: catalog:lint + version: 3.8.3 + tsdown: + specifier: catalog:build + version: 0.22.2(typescript@6.0.3)(unrun@0.3.0(synckit@0.11.12)) + typescript: + specifier: catalog:core + version: 6.0.3 + unrun: + specifier: catalog:build + version: 0.3.0(synckit@0.11.12) + vitest: + specifier: catalog:test + version: 4.1.8(@types/node@25.9.1)(@vitest/coverage-v8@4.1.8)(vite@8.0.14(@types/node@25.9.1)(jiti@2.6.1)(yaml@2.9.0)) packages/input: dependencies: @@ -681,13 +724,13 @@ importers: version: 6.0.2(prettier@3.8.3) eslint: specifier: catalog:lint - version: 10.4.0(jiti@2.6.1) + version: 10.5.0(jiti@2.6.1) prettier: specifier: catalog:lint version: 3.8.3 tsdown: specifier: catalog:build - version: 0.22.0(typescript@6.0.3)(unrun@0.3.0(synckit@0.11.12)) + version: 0.22.2(typescript@6.0.3)(unrun@0.3.0(synckit@0.11.12)) typescript: specifier: catalog:core version: 6.0.3 @@ -696,7 +739,7 @@ importers: version: 0.3.0(synckit@0.11.12) vitest: specifier: catalog:test - version: 4.1.7(@types/node@25.9.1)(@vitest/coverage-v8@4.1.8(vitest@4.1.8))(vite@8.0.14(@types/node@25.9.1)(jiti@2.6.1)(yaml@2.9.0)) + version: 4.1.8(@types/node@25.9.1)(@vitest/coverage-v8@4.1.8)(vite@8.0.14(@types/node@25.9.1)(jiti@2.6.1)(yaml@2.9.0)) packages/music: dependencies: @@ -718,13 +761,13 @@ importers: version: 6.0.2(prettier@3.8.3) eslint: specifier: catalog:lint - version: 10.4.0(jiti@2.6.1) + version: 10.5.0(jiti@2.6.1) prettier: specifier: catalog:lint version: 3.8.3 tsdown: specifier: catalog:build - version: 0.22.0(typescript@6.0.3)(unrun@0.3.0(synckit@0.11.12)) + version: 0.22.2(typescript@6.0.3)(unrun@0.3.0(synckit@0.11.12)) typescript: specifier: catalog:core version: 6.0.3 @@ -733,7 +776,7 @@ importers: version: 0.3.0(synckit@0.11.12) vitest: specifier: catalog:test - version: 4.1.7(@types/node@25.9.1)(@vitest/coverage-v8@4.1.8(vitest@4.1.8))(vite@8.0.14(@types/node@25.9.1)(jiti@2.6.1)(yaml@2.9.0)) + version: 4.1.8(@types/node@25.9.1)(@vitest/coverage-v8@4.1.8)(vite@8.0.14(@types/node@25.9.1)(jiti@2.6.1)(yaml@2.9.0)) packages/network-client: dependencies: @@ -758,13 +801,13 @@ importers: version: 6.0.2(prettier@3.8.3) eslint: specifier: catalog:lint - version: 10.4.0(jiti@2.6.1) + version: 10.5.0(jiti@2.6.1) prettier: specifier: catalog:lint version: 3.8.3 tsdown: specifier: catalog:build - version: 0.22.0(typescript@6.0.3)(unrun@0.3.0(synckit@0.11.12)) + version: 0.22.2(typescript@6.0.3)(unrun@0.3.0(synckit@0.11.12)) typescript: specifier: catalog:core version: 6.0.3 @@ -773,7 +816,7 @@ importers: version: 0.3.0(synckit@0.11.12) vitest: specifier: catalog:test - version: 4.1.7(@types/node@25.9.1)(@vitest/coverage-v8@4.1.8(vitest@4.1.8))(vite@8.0.14(@types/node@25.9.1)(jiti@2.6.1)(yaml@2.9.0)) + version: 4.1.8(@types/node@25.9.1)(@vitest/coverage-v8@4.1.8)(vite@8.0.14(@types/node@25.9.1)(jiti@2.6.1)(yaml@2.9.0)) packages/network-server: dependencies: @@ -810,13 +853,13 @@ importers: version: 8.18.1 eslint: specifier: catalog:lint - version: 10.4.0(jiti@2.6.1) + version: 10.5.0(jiti@2.6.1) prettier: specifier: catalog:lint version: 3.8.3 tsdown: specifier: catalog:build - version: 0.22.0(typescript@6.0.3)(unrun@0.3.0(synckit@0.11.12)) + version: 0.22.2(typescript@6.0.3)(unrun@0.3.0(synckit@0.11.12)) typescript: specifier: catalog:core version: 6.0.3 @@ -825,7 +868,7 @@ importers: version: 0.3.0(synckit@0.11.12) vitest: specifier: catalog:test - version: 4.1.7(@types/node@25.9.1)(@vitest/coverage-v8@4.1.8(vitest@4.1.8))(vite@8.0.14(@types/node@25.9.1)(jiti@2.6.1)(yaml@2.9.0)) + version: 4.1.8(@types/node@25.9.1)(@vitest/coverage-v8@4.1.8)(vite@8.0.14(@types/node@25.9.1)(jiti@2.6.1)(yaml@2.9.0)) packages/sound: dependencies: @@ -847,13 +890,13 @@ importers: version: 6.0.2(prettier@3.8.3) eslint: specifier: catalog:lint - version: 10.4.0(jiti@2.6.1) + version: 10.5.0(jiti@2.6.1) prettier: specifier: catalog:lint version: 3.8.3 tsdown: specifier: catalog:build - version: 0.22.0(typescript@6.0.3)(unrun@0.3.0(synckit@0.11.12)) + version: 0.22.2(typescript@6.0.3)(unrun@0.3.0(synckit@0.11.12)) typescript: specifier: catalog:core version: 6.0.3 @@ -862,34 +905,34 @@ importers: version: 0.3.0(synckit@0.11.12) vitest: specifier: catalog:test - version: 4.1.7(@types/node@25.9.1)(@vitest/coverage-v8@4.1.8(vitest@4.1.8))(vite@8.0.14(@types/node@25.9.1)(jiti@2.6.1)(yaml@2.9.0)) + version: 4.1.8(@types/node@25.9.1)(@vitest/coverage-v8@4.1.8)(vite@8.0.14(@types/node@25.9.1)(jiti@2.6.1)(yaml@2.9.0)) utils/eslint-config: dependencies: '@eslint/js': specifier: catalog:lint - version: 10.0.1(eslint@10.4.0(jiti@2.6.1)) + version: 10.0.1(eslint@10.5.0(jiti@2.6.1)) '@favware/cliff-jumper': specifier: catalog:ci version: 6.1.0 eslint-config-prettier: specifier: catalog:lint - version: 10.1.8(eslint@10.4.0(jiti@2.6.1)) + version: 10.1.8(eslint@10.5.0(jiti@2.6.1)) eslint-formatter-pretty: specifier: catalog:lint version: 7.1.0 eslint-plugin-format: specifier: catalog:lint - version: 2.0.1(eslint@10.4.0(jiti@2.6.1)) + version: 2.0.1(eslint@10.5.0(jiti@2.6.1)) eslint-plugin-prettier: specifier: catalog:lint - version: 5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.4.0(jiti@2.6.1)))(eslint@10.4.0(jiti@2.6.1))(prettier@3.8.3) + version: 5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.5.0(jiti@2.6.1)))(eslint@10.5.0(jiti@2.6.1))(prettier@3.8.3) globals: specifier: catalog:lint version: 17.6.0 typescript-eslint: specifier: catalog:lint - version: 8.60.0(eslint@10.4.0(jiti@2.6.1))(typescript@6.0.3) + version: 8.60.0(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) devDependencies: '@nanoforge-dev/utils-prettier-config': specifier: workspace:* @@ -899,7 +942,7 @@ importers: version: 6.0.2(prettier@3.8.3) eslint: specifier: catalog:lint - version: 10.4.0(jiti@2.6.1) + version: 10.5.0(jiti@2.6.1) prettier: specifier: catalog:lint version: 3.8.3 @@ -945,8 +988,17 @@ packages: chokidar: optional: true - '@angular-devkit/schematics-cli@21.2.12': - resolution: {integrity: sha512-av2V6RXZK4gxGpN2DaJ3hZq/hOIZEPS5gLskyaksQ+osIhihVcMcn2FGEIIF0LVwnOa4MBsanSUMS9y/z0fdhA==} + '@angular-devkit/core@21.2.15': + resolution: {integrity: sha512-x7EwuQtMGHANVznHpwyEi/3lMo/kRoaxV2w7lXbRGjTezwv4SPaOBwhrIGCbAVFs5B1ziff4jZzors4owlCTgg==} + 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 + peerDependenciesMeta: + chokidar: + optional: true + + '@angular-devkit/schematics-cli@21.2.15': + resolution: {integrity: sha512-KifSCTtGKMzDq1h99wFB3XAPTGFOmFHFZkQ0/BMl35muvt9F4s7TZWTZWrucsHgUO7q0DG832zi9nqX7gYRa/A==} 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 @@ -954,6 +1006,10 @@ packages: resolution: {integrity: sha512-29xe6C9nwHejV9zBcu0js7NmzLWuCFzBGBTmL6eD4JN1NcxEZ/nO1JuaGINjPjzb/UDXPZIqEwHbnFNcGS5v1A==} 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'} + '@angular-devkit/schematics@21.2.15': + resolution: {integrity: sha512-kHHV694KUPuXlItjvnxUspn+KYjlTKu8KINX/kT1qlogzLYojpnRwcUtZyRPUz1f/M1d3TUHVFeBKx+h5HoNcA==} + 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.7': resolution: {integrity: sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==} engines: {node: '>=6.9.0'} @@ -962,10 +1018,6 @@ packages: resolution: {integrity: sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==} engines: {node: '>=6.9.0'} - '@babel/generator@8.0.0-rc.5': - resolution: {integrity: sha512-nFZPWz3FHIS7y6rMIVoa/WBwjdutfIaRJIBQjzn+t3RnecZoRNlGmGcyR2wb0T/IgSd50Kz/6dG8/LvMCRunjg==} - engines: {node: ^22.18.0 || >=24.11.0} - '@babel/generator@8.0.0-rc.6': resolution: {integrity: sha512-6mIzgVK8DgEzvIapoQwhXTMnnkuE4STQmVv9H03i/tZ2ml8oev3TRvZJgTenK2Bsq0YWNtzOrFdTyNzCMFtjJQ==} engines: {node: ^22.18.0 || >=24.11.0} @@ -986,10 +1038,6 @@ packages: resolution: {integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@8.0.0-rc.5': - resolution: {integrity: sha512-ehJDxHvtbZ85RtX/L2fi0h9AGsBNqB5Euv1EB8RMAvGYvD+2X+QbpzzOpbklnNXO+WSZJNOaetw2BBj27xsWVg==} - engines: {node: ^22.18.0 || >=24.11.0} - '@babel/helper-validator-identifier@8.0.0-rc.6': resolution: {integrity: sha512-nVJ+1JcCgntv8d78rRo++o2wuODT0Irknx2BF8Np4Ft2CRgjLqIs4qzSZ8b66yGbBdMWGmZBO9WEZv1hhNiSpg==} engines: {node: ^22.18.0 || >=24.11.0} @@ -999,11 +1047,6 @@ packages: engines: {node: '>=6.0.0'} hasBin: true - '@babel/parser@8.0.0-rc.4': - resolution: {integrity: sha512-0S/1yefMa15N4i2v3t8Fw9pgMHhf2gF6Lc1UEXI96Ls6FNAjqvHHZouZ2ZS/deqLhbMFtmfVeFac6iTsvFbLwA==} - engines: {node: ^20.19.0 || >=22.12.0} - hasBin: true - '@babel/parser@8.0.0-rc.6': resolution: {integrity: sha512-rOS8IpdO7mQELkTPlCsTgPejO0bFuZdEDCGQJouYbYf9e1FLTym7Fei2pEjq8q7MWbX0ravcd7QQYKs1TxOuog==} engines: {node: ^22.18.0 || >=24.11.0} @@ -1132,12 +1175,21 @@ packages: '@emnapi/core@1.10.0': resolution: {integrity: sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==} + '@emnapi/core@1.11.0': + resolution: {integrity: sha512-l9Oo58x0HOP5znGzVhYW9U3e5wVuA4LAZU2AGezTmkhO1CgQRFDhDg4nneHsu/t3WniXg9QrG2nIXL/ZS8ln8Q==} + '@emnapi/runtime@1.10.0': resolution: {integrity: sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==} + '@emnapi/runtime@1.11.0': + resolution: {integrity: sha512-55coeOFKHv1ywEcUXJtWU5f+Jr/W5tZDvZig8DLKSwUN1JpROQ4rk/SNOQiFWmaR/VKF4zuFyW1B8JduOSv6Pg==} + '@emnapi/wasi-threads@1.2.1': resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==} + '@emnapi/wasi-threads@1.2.2': + resolution: {integrity: sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==} + '@eslint-community/eslint-utils@4.9.1': resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -1173,10 +1225,6 @@ packages: resolution: {integrity: sha512-vqTaUEgxzm+YDSdElad6PiRoX4t8VGDjCtt05zn4nU810UIx/uNEV7/lZJ6KwFThKZOzOxzXy48da+No7HZaMw==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - '@eslint/plugin-kit@0.7.1': - resolution: {integrity: sha512-rZAP3aVgB9ds9KOeUSL+zZ21hPmo8dh6fnIFwRQj5EAZl9gzR7wxYbYXYysAM8CTqGmUGyp2S4kUdV17MnGuWQ==} - engines: {node: ^20.19.0 || ^22.13.0 || >=24} - '@eslint/plugin-kit@0.7.2': resolution: {integrity: sha512-+CNAzxglkrpNf/kKywqQfk74QjtceuOE7Qm+AF8miRvPF/wmmK5+OJOgVh3AVTT3RP2mH3+FOaxlE5v72owk0A==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} @@ -1221,9 +1269,9 @@ packages: resolution: {integrity: sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ==} engines: {node: '>=18'} - '@inquirer/ansi@2.0.6': - resolution: {integrity: sha512-I/INw4sHGlVZ/afZOckpLiDP9SmbMl1g/GCqeHjLw1Afw/0PlRs2tRFgTGWmdI0hoNuWZn3y2iHNmG1vyECyQQ==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + '@inquirer/ansi@2.0.7': + resolution: {integrity: sha512-3eTuUO1vH2cZm2ZKHeQxnOqlTi9EfZDGgIe3BL3I4u+rJHocr9Fz86M4fjYABPvFnQG/gGK551HqDiIcETwU6Q==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} '@inquirer/checkbox@4.3.2': resolution: {integrity: sha512-VXukHf0RR1doGe6Sm4F0Em7SWYLTHSsbGfJdS9Ja2bX5/D5uwVOEjr07cncLROdBvmnvCATYEWlHqYmXv2IlQA==} @@ -1234,9 +1282,9 @@ packages: '@types/node': optional: true - '@inquirer/checkbox@5.2.0': - resolution: {integrity: sha512-1HJt+3fqxblp/GQjdntSyoSHYBc0e3CzXVgjFpKA6qFLd9FHBBqwN8Co0xYH6t2JVUZrtFwZ4bBiwptkiLxyOg==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + '@inquirer/checkbox@5.2.1': + resolution: {integrity: sha512-b6xmA/VlTe0ZgDQHDui+Nav470u7u49nRd8/iuhOcQPO9Ch7lGuogydhi2VOmNlZ+zXcM8IcPuNSwQcdJaF/kw==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: @@ -1252,9 +1300,9 @@ packages: '@types/node': optional: true - '@inquirer/confirm@6.1.0': - resolution: {integrity: sha512-USpeB76eqK7yGricDlGAupxWlp4a59qpeZOoNWaxO/nJln7agpJveyNkQ1d5u8YXG6TOqxZtQpKPORQQDrdVsA==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + '@inquirer/confirm@6.1.1': + resolution: {integrity: sha512-eb8DBZcz/2qHWQda4rk2JiQk5h9QV/cVHi1yjt0f69WFZMRFn0sJTye3EAP8icut8UDMjQPsaH5KbcOogefrFQ==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: @@ -1270,9 +1318,9 @@ packages: '@types/node': optional: true - '@inquirer/core@11.2.0': - resolution: {integrity: sha512-joR1YS2sI0us+9d0I8ViqFbrRLONO8CFTuyvBX4ZVBSch+VsZiugUABdrhBXXJR1VyEzvpz5SQCix3keETQ58g==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + '@inquirer/core@11.2.1': + resolution: {integrity: sha512-Qd6GJT1yVyrZZCfN8W2qKF5ApmqryXRhRKCuip8h01x2w/esJQ2XIYc6f9abMIHgKQdBfFTSOdbHRLAhuM09UA==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: @@ -1288,9 +1336,9 @@ packages: '@types/node': optional: true - '@inquirer/editor@5.2.0': - resolution: {integrity: sha512-/m+sgRmzSdK6HDtVnl3PmI6MnZC4O+LLezedoJcrX7mINhTjjb0hlC7aEDGZXkFTB4b5uQ0q59AhYTah88KbNg==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + '@inquirer/editor@5.2.2': + resolution: {integrity: sha512-ZRVd/oD+sYsUd5zVm0NflqEzlqfYCyHNsqkHl2oWXEUHs12tCbcSFi+wVFEvD8+LGRaMUsVrE7qeo6lSG/S1Vg==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: @@ -1306,9 +1354,9 @@ packages: '@types/node': optional: true - '@inquirer/expand@5.1.0': - resolution: {integrity: sha512-fR7g4BVnIcs+4NApF6C5byflNM/EULxSxsv/2Jvg+gmop0R6eBIPvZqE6RYnTy1tQTFnf9wyHkwNoQSZbofaGA==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + '@inquirer/expand@5.1.1': + resolution: {integrity: sha512-YmQpenjbFSHAK3sOd44puHh3V1KXXr+JiNpUztoSQ4drLh2rTVzTap/YtlAVu/5xavifIlBfNEzJ/neZJ1a/1g==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: @@ -1324,9 +1372,9 @@ packages: '@types/node': optional: true - '@inquirer/external-editor@3.0.1': - resolution: {integrity: sha512-tam+Gwjsxg2sx3iUVPkAnhKT/yrk2rd2NAa7XJU/J8OYpU0ifXsnp12xlvzp/DCpWBXVv+vLQsqnpAWwUcWD5Q==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + '@inquirer/external-editor@3.0.3': + resolution: {integrity: sha512-6thf5I8q7lZwzGLAxPaaGEREEkZ3nyePPDQ1oyobblxmEE8mqTLguScP7pDjUTAibiyb4hfXl+qjUEJ+di/aNA==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: @@ -1337,9 +1385,9 @@ packages: resolution: {integrity: sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==} engines: {node: '>=18'} - '@inquirer/figures@2.0.6': - resolution: {integrity: sha512-dsZgQtH2t5Q6ah3aPbZbeEZAxsD9qQu0DXf01AltuEfRTm+NoLN6+rLVbr+4edeEbNCp/wBNM6mALRWtsQpfkw==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + '@inquirer/figures@2.0.7': + resolution: {integrity: sha512-aJ8TBPOGB6f/2qziPfElISTCEd5XOYTFckA2SGjhNmiKzfK/u4ot3v0DUzGVdUnKjN10EqnnEPck36BkyfLnJw==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} '@inquirer/input@4.3.1': resolution: {integrity: sha512-kN0pAM4yPrLjJ1XJBjDxyfDduXOuQHrBB8aLDMueuwUGn+vNpF7Gq7TvyVxx8u4SHlFFj4trmj+a2cbpG4Jn1g==} @@ -1350,9 +1398,9 @@ packages: '@types/node': optional: true - '@inquirer/input@5.1.0': - resolution: {integrity: sha512-sVZCz6P6e8tW5g2bSFel1oLpa6jK/u7BexFfrgTqR8syIdnHqy+iopnlSbYBZMsCK52chLjhGNBxt0eRqhsghw==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + '@inquirer/input@5.1.2': + resolution: {integrity: sha512-9K/DDBSQpOyZSkt6sOVP9Vo0TR7atX2kuILsUu0x3wVcVbe97lJwIJKMLdMw25tDYuXl/qp6erT0Xs1rfmcfZg==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: @@ -1368,9 +1416,9 @@ packages: '@types/node': optional: true - '@inquirer/number@4.1.0': - resolution: {integrity: sha512-VMXB/XejCbaSTf9Xucl7dqjzzsaGsrs6XwSYXPbGZ2QbSuq/Gz8XamhSi9ClRubNXZlGry9xVg1tKkJdTDgCtQ==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + '@inquirer/number@4.1.1': + resolution: {integrity: sha512-XF4IXAbPnGPgw0wsbC/i2tPcyfdZgDpUlhsqU0SfT4IRIGWha6Xm9VRgN5yYxJq+jnyXlfXI/nQ3ulfk0iEICA==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: @@ -1386,9 +1434,9 @@ packages: '@types/node': optional: true - '@inquirer/password@5.1.0': - resolution: {integrity: sha512-5tqRuKCDIUxdPxTI/CuLnh914kz+WMPmURHKnZgui9gk43ebudEsdu4EwSn1CPSi5R+17YpBG+ba/YqTnRAcJA==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + '@inquirer/password@5.1.1': + resolution: {integrity: sha512-3XBfF7DAsp5qeDsvN5Rd1HmbNokVvEQoUM0QLrRcybC9nX96w3Pbmu7qUsb3IT3J3jBvs2+mTXaKHOUsgHMLzg==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: @@ -1404,9 +1452,9 @@ packages: '@types/node': optional: true - '@inquirer/prompts@8.5.0': - resolution: {integrity: sha512-pLjXOnY4y3R1mgyHP3pXD/8eXejp+L/dde/0N2NLKgKfMstqhNZrpvs7Wkzbl9FYFQh10LRQ7QZwq+cz9rrhyw==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + '@inquirer/prompts@8.5.2': + resolution: {integrity: sha512-IYR/3C/paEVVQYQvdDlFZVjRCJVYHHON0XXMH91KO9GSxs0TdKYWlUdvfQl2EfAHDxUaN3IBffkE/BDTh5nJ6g==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: @@ -1422,9 +1470,9 @@ packages: '@types/node': optional: true - '@inquirer/rawlist@5.3.0': - resolution: {integrity: sha512-p+vAeTAD+cGXjGleP1F5LXrX2ISxNDZm+lqeBpnJausNLSZskZZkcggwhomqP8Igx9oIjnoeOrw98xvdFvdm2w==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + '@inquirer/rawlist@5.3.1': + resolution: {integrity: sha512-QqdTqQddL3qPX/PPrjobpsO25NZ4dWXgTLenrR445L2ptLEYE6Z+PD5c5CNDJNx4ugRgELAIpSIJxZaO2jJ2Og==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: @@ -1440,9 +1488,9 @@ packages: '@types/node': optional: true - '@inquirer/search@4.2.0': - resolution: {integrity: sha512-ByURoSGIaSl5O5Q0AmYmVmUsXbMUcBGNoA3FRL7TOyiA22IeFHymJKRkuILbOIlJwqnBk7AnPpseodyFUBzg+g==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + '@inquirer/search@4.2.1': + resolution: {integrity: sha512-xJj8QWKRSrfKoBIITLZK61dD3zwo0Rz11fgDImku30/Oe81zMdIdGgrLY2h6RkJ+KZ/GhNYIRMKnH/62qBTA5g==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: @@ -1458,9 +1506,9 @@ packages: '@types/node': optional: true - '@inquirer/select@5.2.0': - resolution: {integrity: sha512-6IzkcmEbEXfgVbxZ2d1UyJFbCBoc6dTofulFmrYuomIp88HXiVqRbqbg4/mbfZhvnNo6xYmnYo2AEmDof6fQkg==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + '@inquirer/select@5.2.1': + resolution: {integrity: sha512-FlDndEUww8m7BfukO2nJa25vhD+H5jxxCv4oGioKqzyWz3nPHhhw4LKdYRSlXuAx7DsdWia7iyaBPKKS95Evfw==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: @@ -1476,9 +1524,9 @@ packages: '@types/node': optional: true - '@inquirer/type@4.0.6': - resolution: {integrity: sha512-J+9tdxOskuYuGjsvGaq00AamhDgjR7anhEW2dP4QdQpFCMPngCeC/bCYWQ5NsMWZRdsy53is7kAHb/+7cwDk2g==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + '@inquirer/type@4.0.7': + resolution: {integrity: sha512-t28inv14nMQ1PhKpsJPY+kEs/c00qzeCOS2gTNRyTjG5d6qsVA2fItxW4hkvGZ5lvanGLdtCzVIx5dwdRpN1+g==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: @@ -1531,8 +1579,8 @@ packages: resolution: {integrity: sha512-s1HdWoy92eLztffboUnKzmjIpMLWHhCKzQM/+FPR+eZgxuULDT3uUUvKeRxxobdljFuD0e14gxnbQZZRTrG1Dg==} engines: {node: '25'} - '@nanoforge-dev/cli@1.4.2': - resolution: {integrity: sha512-RA3HsOsA+nLMuQ0dw+7zXT84MYH+mWaY1verUUCNjfys0InMGt4xnNuV8Xnp6e5vNEnhisqFiqC9F1aba2pWMQ==} + '@nanoforge-dev/cli@1.5.3': + resolution: {integrity: sha512-yd91i8rYyfQxIQH7HGcoRFKr8UZXe4y0VMXWoYNa2ziwMq5LSiYi1Yat/1CgoF2qSO9/9T9r8i0dkC3auQFKgQ==} engines: {node: '25'} hasBin: true @@ -1558,6 +1606,12 @@ packages: '@emnapi/core': ^1.7.1 '@emnapi/runtime': ^1.7.1 + '@napi-rs/wasm-runtime@1.1.5': + resolution: {integrity: sha512-AWPoBRJ9tsnVhor4sjO7rkni+7p+2IAEFj6cx06UgP10jkQHqay/36uRV/bFkgrh18D9vb4cr8Q0Pthskgzy+Q==} + peerDependencies: + '@emnapi/core': ^1.7.1 + '@emnapi/runtime': ^1.7.1 + '@octokit/auth-token@6.0.0': resolution: {integrity: sha512-P4YJBPdPSpWTQ1NU4XYdvHvXJJDxM6YwpS0FZHRgP7YFkdVxsWcpWGy/NVqlAA7PcPCnMacXlRm1y2PFZRWL/w==} engines: {node: '>= 20'} @@ -1692,6 +1746,9 @@ packages: '@oxc-project/types@0.133.0': resolution: {integrity: sha512-KzkdCd6Uxqnf6l3HOw1xfatAlUURA0g14cvBYFyJ5SaNOQbOUvBr9PKArcPcrNIeRsBdgcUzOGrhKveVpvOIGA==} + '@oxc-project/types@0.135.0': + resolution: {integrity: sha512-wR+xRdFkUBMvcAjBJ2q2kcZM6d+DKu2NgoOyxZgYwZdLhmiv6+rnO8PZ/P68kMiZtIKm+pW7zyEJ4kSOs0vo+Q==} + '@oxfmt/binding-android-arm-eabi@0.35.0': resolution: {integrity: sha512-BaRKlM3DyG81y/xWTsE6gZiv89F/3pHe2BqX2H4JbiB8HNVlWWtplzgATAE5IDSdwChdeuWLDTQzJ92Lglw3ZA==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1833,6 +1890,12 @@ packages: cpu: [arm64] os: [android] + '@rolldown/binding-android-arm64@1.1.1': + resolution: {integrity: sha512-BLf9Wak/gfwVb7NQTQW4wBgL3oAfPy7ArEkhwV543OVw/uY6B47z5xYsqPSZ9PDOorvURPinws6ThaFuNgGLgA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + '@rolldown/binding-darwin-arm64@1.0.2': resolution: {integrity: sha512-vdFA9+C/rekyGce7WqHs/xoT0ioZEWaOFyZLIV1mEeNFaFDUQrPIo8Vs2GvJ6eetb3rzDUtUBgzto3ExpXJB3w==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1845,6 +1908,12 @@ packages: cpu: [arm64] os: [darwin] + '@rolldown/binding-darwin-arm64@1.1.1': + resolution: {integrity: sha512-rRZRPy/Ynb+Mxu0O6tfPldHeDgAn0sRij+IOUy6sFdUlv3hArGW/DloE3GfAxtqpOJuRNgF74Nr5gM4xBeU2jQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + '@rolldown/binding-darwin-x64@1.0.2': resolution: {integrity: sha512-BewSOwTHazv77DTYiAZXSqqKZ4KP/KonFisDMVU7PImxoWfB2aepnPhd2E4SWz3zDzYgDNbs6jBmTdgNnF02GA==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1857,6 +1926,12 @@ packages: cpu: [x64] os: [darwin] + '@rolldown/binding-darwin-x64@1.1.1': + resolution: {integrity: sha512-/MtefPxhKPyWWFM8L45OWiEqRf+eSU2Qv9ZAyTaoZOoGcoPKxbbhjTJO2/U2IThv0uDZ4NWHc3/oTsR6IEOtww==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + '@rolldown/binding-freebsd-x64@1.0.2': resolution: {integrity: sha512-m41o7M0YWtUdqk61Tb+jnKb2rN++iRdIASlExkUoKfIAH30DOHCB8fVLzSUpbWHHU8esmEioY62PxzexE8MBuA==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1869,6 +1944,12 @@ packages: cpu: [x64] os: [freebsd] + '@rolldown/binding-freebsd-x64@1.1.1': + resolution: {integrity: sha512-202K+cpIi1kx/Zn7AtxBi4LTXSY67Aszb2K9rNsuW7FeBeh0nqoNmYLOSZidV0p88VPBzMmTZcHAdPNo3kRYzQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + '@rolldown/binding-linux-arm-gnueabihf@1.0.2': resolution: {integrity: sha512-jcojB9H7W/jS29pMKWAK1N+fU99vXodHDTatS3b3y/XSOCiHo0kkA74pL3jJmkoQtYpOCxDvaKs1fo2Ij/1X5w==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1881,6 +1962,12 @@ packages: cpu: [arm] os: [linux] + '@rolldown/binding-linux-arm-gnueabihf@1.1.1': + resolution: {integrity: sha512-wl9NfeXNUwrXtUc063tddmZFUI6qiNs1CNOwni0OL4vC7MqVSYugra3ZgtDmtVy8e0DluJTENmzIv2BwqLzT4Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + '@rolldown/binding-linux-arm64-gnu@1.0.2': resolution: {integrity: sha512-1jn6qDU5iiOgFgygDzKUuKP0maTi0/f1+sBLgvij/76C77Nm3ts6ufz9Bjg5q5dduxiUIxtq86JIoBvo1xQ4Ig==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1895,6 +1982,13 @@ packages: os: [linux] libc: [glibc] + '@rolldown/binding-linux-arm64-gnu@1.1.1': + resolution: {integrity: sha512-at2EO4o7D/PJLC4Xik16bU4CcjQE2tSv1LfqMA0TRYQYQihRm3gZeDB8xaX28A9SFedibcAk5DeMCKt4REKG0A==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + '@rolldown/binding-linux-arm64-musl@1.0.2': resolution: {integrity: sha512-QVLO/czFMdoMFSqlX3bcswcJNm/23r+qoa/jgtmFc/qEp6/jXmIkDjF/XIo8dPfGaiwy1xfQn8o77L79GeXFgw==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1909,6 +2003,13 @@ packages: os: [linux] libc: [musl] + '@rolldown/binding-linux-arm64-musl@1.1.1': + resolution: {integrity: sha512-5PUjZx366h9tkJTPJF5eibxOlK3sGoeRiBJLLjjEB5/kLDuhr6qB3LkhqLz1smXNgsX+pBhnbcJBrPE30HznAA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] + '@rolldown/binding-linux-ppc64-gnu@1.0.2': resolution: {integrity: sha512-hgO5Abm0w5UL6FEa2iFnZqo2KlK7TQ5QhV5x09hujBf7t5KzHQ1VmfPuTpqRy/rNlSxua3eWH374xxiVrP+lcA==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1923,6 +2024,13 @@ packages: os: [linux] libc: [glibc] + '@rolldown/binding-linux-ppc64-gnu@1.1.1': + resolution: {integrity: sha512-1WK84XPeio3tjP1sM/TMXiC0G1i1iq1qGZ71KfNQjEFLU1kwD+Cv5T8nGySg/JUFwLbaScu6ve9DmeXlmqpkFA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] + '@rolldown/binding-linux-s390x-gnu@1.0.2': resolution: {integrity: sha512-fy8rXxuYEu602abC8MUNaPjYLIFzReOaEIEMKMUa0rFEUxNpVXhs15KSSQ4qlqSaM7B6rcj9rDZgADh/IGDzLQ==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1937,6 +2045,13 @@ packages: os: [linux] libc: [glibc] + '@rolldown/binding-linux-s390x-gnu@1.1.1': + resolution: {integrity: sha512-1nS1X5z1uMJ369RU25hTpKCFvUwXZp12dIzlzk4S+UxCTcSVGsAE6tzkOSufv/7jnmAtK0ZlrsJxh2fGmsnVSw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + '@rolldown/binding-linux-x64-gnu@1.0.2': resolution: {integrity: sha512-0+bOkiQ779+r1WpoHOWHqncvyySci0vKph+myNDYb+im6meJAzHQXay6oEgnkHuUGouM1LKTZwqKpBow6Kj7CQ==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1951,6 +2066,13 @@ packages: os: [linux] libc: [glibc] + '@rolldown/binding-linux-x64-gnu@1.1.1': + resolution: {integrity: sha512-NwX/wspnq4vYyMFsqbYvzums3ki/Tk8FZbMzMAovPDp3OfLeYKby/D+9osokadXuYEV3OvpeHlwnr/bG8QMixA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] + '@rolldown/binding-linux-x64-musl@1.0.2': resolution: {integrity: sha512-mjSkrzZK5Qsl0a9d1JgILOiuZOSDTVdKENcSXBoqbzSrspLR/4/IRVDo5wd2GgZjNss/viBFJdeq+j7qH2nypw==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1965,6 +2087,13 @@ packages: os: [linux] libc: [musl] + '@rolldown/binding-linux-x64-musl@1.1.1': + resolution: {integrity: sha512-+n46LhDrJFQM+229y4oXtVpj1G50U/+XuHMlpnisFTEXhrg9f/YIjp/HymX+PVJjBEr7XHRs3CFLelV464pqwA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] + '@rolldown/binding-openharmony-arm64@1.0.2': resolution: {integrity: sha512-1v5vHasdfQAZoEHakBV72LIFAC9JjnymsiKxp+GEr/ma3+NJCPSaYK+qavInOovJkgwFrs7GccX2d6IgDA3Z5w==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1977,6 +2106,12 @@ packages: cpu: [arm64] os: [openharmony] + '@rolldown/binding-openharmony-arm64@1.1.1': + resolution: {integrity: sha512-qGwEu47zOWYo7LdRHhCWTNhzwGtxXpdY6CERs8QEOqC0PXGGics/e3vHnyEUKt8xK6YkbZXFUCeklrpB6js8ag==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + '@rolldown/binding-wasm32-wasi@1.0.2': resolution: {integrity: sha512-mb1VobWn6NheziTk5/WEaR6AKVbrwT5sOi6C7zk3gy/pD1qtJfU1j4PgTo2NJnOtbL9Dl3Aeei8w9jJ7qC2jZQ==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1987,6 +2122,11 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} cpu: [wasm32] + '@rolldown/binding-wasm32-wasi@1.1.1': + resolution: {integrity: sha512-qczfgEH8u0wHGGOXtA7UMAybNKuQjjEXairyQaw4WzjiMztfbgatG1h4OKays/smhtwbWltpKCRGtVhU6h40Sg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [wasm32] + '@rolldown/binding-win32-arm64-msvc@1.0.2': resolution: {integrity: sha512-SqKonF56vA/L2yHwHYcEp2P34URpOZ7d1fS635cTkpDnUtEGdUbhI6NzsPdqeSWvAAeGDrxjWjNmibDIdFf9/A==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1999,6 +2139,12 @@ packages: cpu: [arm64] os: [win32] + '@rolldown/binding-win32-arm64-msvc@1.1.1': + resolution: {integrity: sha512-4psXSh63mSbwJF+mB8/9yfUUEzBiHYcUjxa32EO9ZwKy0Ypwjcg4F10D8SvVXgd+isy2UUUjF9HJJnDu1T/4Gg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + '@rolldown/binding-win32-x64-msvc@1.0.2': resolution: {integrity: sha512-v7qRI7gXLRINcOGXt+7YmAZ6iFuyZVMIoXAxhd8oP+DR9dLfL9GfNIx7PLMxmhZdvq8waUJBQiWN9EKNy+TRBQ==} engines: {node: ^20.19.0 || >=22.12.0} @@ -2011,6 +2157,12 @@ packages: cpu: [x64] os: [win32] + '@rolldown/binding-win32-x64-msvc@1.1.1': + resolution: {integrity: sha512-MUvC/HLXVjzkQkWiExdVTEEWf0py+GfWm8WKSZsekG3ih6a21iy0BHPF07X3JIf3ifoklZXTIaHTLPBgH1C3dw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + '@rolldown/pluginutils@1.0.1': resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==} @@ -2260,23 +2412,9 @@ packages: '@vitest/browser': optional: true - '@vitest/expect@4.1.7': - resolution: {integrity: sha512-1R+tw0ortHEbZDGMymm+pN7/AFQ/RkFFdtd7EN+VBpynKmLbP8A3rpEXdshBJ7+8hQ9zBJh/i1s0yKNtxAnU7w==} - '@vitest/expect@4.1.8': resolution: {integrity: sha512-h3nDO677RDLEGlBxyQ5CW8RlMThSKSRLUePLOx09gNIWRL40edgA1GCZSZgf1W55MFAG6/Sw14KeaAnqv0NKdQ==} - '@vitest/mocker@4.1.7': - resolution: {integrity: sha512-vY7nuamKgfvpA1Koa3oYIw/k7D6kZnpGyNMZW8loow2bsBYla1TFdqTaXncWdRn4pgwNs+90RhnXhJScDwQeJA==} - peerDependencies: - msw: ^2.4.9 - vite: ^6.0.0 || ^7.0.0 || ^8.0.0 - peerDependenciesMeta: - msw: - optional: true - vite: - optional: true - '@vitest/mocker@4.1.8': resolution: {integrity: sha512-LEiN/xe4OSIbKe9HQIp5OC24agGD9J5CnmMgsLohVVoOPWL9a2sBoR6VBx43jQZb7Kr1l4RCuyCJzcAa0+dojw==} peerDependencies: @@ -2288,33 +2426,18 @@ packages: vite: optional: true - '@vitest/pretty-format@4.1.7': - resolution: {integrity: sha512-umgCarTOYQWIaDMvGDRZij+6b9oVeLIyJzfN+AS88e0ZOU3QTgNNSTtjQOpcvWr3np1N0j4WgZj+sb3oYBDscw==} - '@vitest/pretty-format@4.1.8': resolution: {integrity: sha512-9GasEBxpZ1VYIpqHf/0+YGg121uSNwCKOJqIrTwWP/TB7DmFCiaBpNl3aPZzoLWfWkuqhbH8vJIVobZkvdo2cA==} - '@vitest/runner@4.1.7': - resolution: {integrity: sha512-BapjmAQ2aI78WdMEfeUWivnfVzB+VPGwWRQcJE0OUq7qEeEcBsCSf+0T5iREBNE5nBb4wA5Ya0W6IA+sghdEFw==} - '@vitest/runner@4.1.8': resolution: {integrity: sha512-EmVxeBAfMJvycdjd6Hm+RbFBbA9fKvo0Kx37hNpBYoYeavH3RNsBXWDooR1mgD52dCrxIIuP7UotpfiwOikvcg==} - '@vitest/snapshot@4.1.7': - resolution: {integrity: sha512-ZacLzja+TmJeZ1h14xW2FB/WpeimUD3haBXQPyJqxvo8jQTmfeA8zv58mtjN2C7EHXZDYVcVYdYmAxjkWVvKCw==} - '@vitest/snapshot@4.1.8': resolution: {integrity: sha512-acfZboRmAIf05DEKcBQy33VXojFJjtUdLyo7oOmV9kebb2xdU01UknNiPuPZoJZQyO7DF0gZdTGTpeAzET9QPQ==} - '@vitest/spy@4.1.7': - resolution: {integrity: sha512-kbkI5LMWakyuTIvs6fUJ5qdIVb1XVKsYJAT4OJ938cHMROYMSfmoQdZy0aaAnjbbc8F61vkoTqz/Az+/HiIu5Q==} - '@vitest/spy@4.1.8': resolution: {integrity: sha512-6EevtBp6OZOPF7bmz36HrGMeP3txgVSrgebWxHOafDXGkhIzfXK14f8KF6MuFfgXXUeHxmpD3BQxkV00/3s5mA==} - '@vitest/utils@4.1.7': - resolution: {integrity: sha512-T532WBu791cBxJlCl6SO+J14l81DQx6uQHm1bQbmCDY7nqlEIgkza/UFnSBNaUtSf41unldDFjdOBYEQC4b5Hw==} - '@vitest/utils@4.1.8': resolution: {integrity: sha512-uOJamYALNhfJ6iolExyQM40yIQwDqYnkKtQ5VCiSe17E33H0aQ/u+1GlRuz4LZBk6Mm3sg90G9hEbmEt37C1Zg==} @@ -2384,10 +2507,6 @@ packages: resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} engines: {node: '>=12'} - ansis@4.3.0: - resolution: {integrity: sha512-44mvgtPvohuU/70DdY5Oz2AIrLJ9k6/5x4KmoSvPwO+5Moijo0+N9D0fKbbYZQWP1hNm5CpOf+E01jhxG/r8xg==} - engines: {node: '>=14'} - ansis@4.3.1: resolution: {integrity: sha512-BJ8/l4R5LRE7hW9WdSuGYrLSHi2ynxeFpDFbH0K/CgNeY/tyhk+vO6TYxXC5r5CpUhNVX310xzPsN/H9lCdfOA==} engines: {node: '>=14'} @@ -2560,6 +2679,10 @@ packages: resolution: {integrity: sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==} engines: {node: '>=20'} + commander@15.0.0: + resolution: {integrity: sha512-z67u4ZhzCL/Tydu1lJARtEZYWbWaN7oYLHbsuzocr6y4N6WZAagG3RQ4FW61V1/0+jImpj293XfrcYnd1qxtPg==} + engines: {node: '>=22.12.0'} + compare-func@2.0.0: resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} @@ -2799,8 +2922,8 @@ packages: resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - eslint@10.4.0: - resolution: {integrity: sha512-loXy6bWOoP3EP6JA7jo6p5jMpBJmHmsNZM5SFRHLdh1MGOPurMnNBj4ZlAbaqUAaQWbCr7jHV4P7gzAyryZWkQ==} + eslint@10.4.1: + resolution: {integrity: sha512-AyIKhnOBuOAdueD7RB3xB+YeAWScb9jHsJBgH2Hcde8InP5JYhqrRR6iTMHyTEwgENK54Cp44e4v8BwNhsuHuw==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} hasBin: true peerDependencies: @@ -2809,8 +2932,8 @@ packages: jiti: optional: true - eslint@10.4.1: - resolution: {integrity: sha512-AyIKhnOBuOAdueD7RB3xB+YeAWScb9jHsJBgH2Hcde8InP5JYhqrRR6iTMHyTEwgENK54Cp44e4v8BwNhsuHuw==} + eslint@10.5.0: + resolution: {integrity: sha512-1y+7C+vi12bUK1IpZeaV3gsH9fHLBmPvYmPx42pvT/E9yG0IC8g3PUZZgp0+JLJl7ZDK0flc2gc+Aw9dpCvIsQ==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} hasBin: true peerDependencies: @@ -3217,10 +3340,6 @@ packages: js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - js-yaml@4.1.1: - resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} - hasBin: true - js-yaml@4.2.0: resolution: {integrity: sha512-ePWsvanv0DWuDRsW8dnt+R4jQ31SCRCQ7hhNcPXZPsoBZiemuZNYGf7adZdqX2D86j6rvKp3RpCxVTSb8WQlOw==} hasBin: true @@ -3344,11 +3463,6 @@ packages: lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - lint-staged@17.0.5: - resolution: {integrity: sha512-d12yC+/e8RhBjZtaxZn71FyrgU/P5e+uAPifhCLwdosQZP/zamSdKRWDC30ocVIbzDKiFG1McHc/LUgB92GIPw==} - engines: {node: '>=22.22.1'} - hasBin: true - lint-staged@17.0.7: resolution: {integrity: sha512-JrSobt+tW3rH8IOMi8tDZd3foorM5yPEkLD/V2NxobgHrFfHWGee4MOLVuZeScgxftEwbHrPHIFA/ZL+nUJeuA==} engines: {node: '>=22.22.1'} @@ -3458,9 +3572,9 @@ packages: resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} engines: {node: ^18.17.0 || >=20.5.0} - mute-stream@4.0.0: - resolution: {integrity: sha512-gSrprq0fJ3EiOErzjdIZrjysVVmJ4uu1QWfCDss5LypA5OXvrMje5Ym5z6V6RLyJ2eF87lasX7t6a0AnFvZblg==} - engines: {node: ^22.22.2 || ^24.15.0 || >=26.0.0} + mute-stream@3.0.0: + resolution: {integrity: sha512-dkEJPVvun4FryqBmZ5KhDo0K9iDXAwn08tMLDinNdRBNPcYEDiWYysLcc6k3mjTMlbP9KyylvRpd4wFtwrT9rw==} + engines: {node: ^20.17.0 || >=22.9.0} nanoid@3.3.12: resolution: {integrity: sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==} @@ -3672,25 +3786,6 @@ packages: rfdc@1.4.1: resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} - rolldown-plugin-dts@0.25.1: - resolution: {integrity: sha512-zK82aC/8z1iVW+g0bCnlQZq04Y5bNeL/RcRwTYBwsnU6wH0N+6vpIFkN7JC0kYRS5qKA+pxQyfIPvXJ6Q5xSpQ==} - engines: {node: ^22.18.0 || >=24.0.0} - peerDependencies: - '@ts-macro/tsc': ^0.3.6 - '@typescript/native-preview': '>=7.0.0-dev.20260325.1' - rolldown: ^1.0.0 - typescript: ^5.0.0 || ^6.0.0 - vue-tsc: ~3.2.0 - peerDependenciesMeta: - '@ts-macro/tsc': - optional: true - '@typescript/native-preview': - optional: true - typescript: - optional: true - vue-tsc: - optional: true - rolldown-plugin-dts@0.25.2: resolution: {integrity: sha512-nMhN/R+vmR8GM45ZW1FWMSjRTSDDn/6w4GTf8RNrEFCBdl8B1kySWrU1ixPtbwzXoRlcO+R/S88VgXuJQwfdDg==} engines: {node: ^22.18.0 || >=24.0.0} @@ -3720,6 +3815,11 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} hasBin: true + rolldown@1.1.1: + resolution: {integrity: sha512-IN750c0p+s3jqJIsFLRZrQazmbAB1kkQDTtQjSt/gbS2ywLhlv4R5Shazer0FZKmuo/BsO3/w2UoYnUjuOZqHg==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + run-applescript@7.1.0: resolution: {integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==} engines: {node: '>=18'} @@ -3874,18 +3974,10 @@ packages: tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} - tinyexec@1.2.2: - resolution: {integrity: sha512-M/Q0B2cp4K7kynaT/vnED1j8TlLY+Pp7C6Wl2bl/7u/F0mUVwdyOpwomQb8JpYLitHUssAJRmLZdMCGsrx7i+g==} - engines: {node: '>=18'} - tinyexec@1.2.4: resolution: {integrity: sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg==} engines: {node: '>=18'} - tinyglobby@0.2.16: - resolution: {integrity: sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==} - engines: {node: '>=12.0.0'} - tinyglobby@0.2.17: resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} engines: {node: '>=12.0.0'} @@ -3911,14 +4003,14 @@ packages: peerDependencies: typescript: '>=4.8.4' - tsdown@0.22.0: - resolution: {integrity: sha512-FgW0hHb27nGQA/+F3d5+U9wKXkfilk9DVkc5+7x/ZqF03g+Hoz/eeApT32jqxATt9eRoR+1jxk7MUMON+O4CXw==} + tsdown@0.22.1: + resolution: {integrity: sha512-Ldx1jLyDFEzsN/fMBi2TBVaZe4fuEJhIiHjQhX0pV7oa5uYz5Imdivs5mNzEXOrMEtFRR6C9BQ2YqLoroffB+Q==} engines: {node: ^22.18.0 || >=24.0.0} hasBin: true peerDependencies: '@arethetypeswrong/core': ^0.18.1 - '@tsdown/css': 0.22.0 - '@tsdown/exe': 0.22.0 + '@tsdown/css': 0.22.1 + '@tsdown/exe': 0.22.1 '@vitejs/devtools': '*' publint: ^0.3.8 tsx: '*' @@ -3945,14 +4037,14 @@ packages: unrun: optional: true - tsdown@0.22.1: - resolution: {integrity: sha512-Ldx1jLyDFEzsN/fMBi2TBVaZe4fuEJhIiHjQhX0pV7oa5uYz5Imdivs5mNzEXOrMEtFRR6C9BQ2YqLoroffB+Q==} + tsdown@0.22.2: + resolution: {integrity: sha512-VX9gsyKXsTnBZjnIM4jsHl9aRv+GfgkE/k1hQslilaBfZMlaw3JuGR+6yhiU0QxWBtOCDnTjwOSoXzgB7Rr50g==} engines: {node: ^22.18.0 || >=24.0.0} hasBin: true peerDependencies: '@arethetypeswrong/core': ^0.18.1 - '@tsdown/css': 0.22.1 - '@tsdown/exe': 0.22.1 + '@tsdown/css': 0.22.2 + '@tsdown/exe': 0.22.2 '@vitejs/devtools': '*' publint: ^0.3.8 tsx: '*' @@ -4099,47 +4191,6 @@ packages: yaml: optional: true - vitest@4.1.7: - resolution: {integrity: sha512-flYyaFd2CgoCoU+0UKt3pxksgC+S02iTDN0n3LtqaMeXsI9SBcdNujc2k0DeFLzUn/0k538yNjOSdwgCqcrwJA==} - 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.7 - '@vitest/browser-preview': 4.1.7 - '@vitest/browser-webdriverio': 4.1.7 - '@vitest/coverage-istanbul': 4.1.7 - '@vitest/coverage-v8': 4.1.7 - '@vitest/ui': 4.1.7 - happy-dom: '*' - jsdom: '*' - vite: ^6.0.0 || ^7.0.0 || ^8.0.0 - peerDependenciesMeta: - '@edge-runtime/vm': - optional: true - '@opentelemetry/api': - optional: true - '@types/node': - optional: true - '@vitest/browser-playwright': - optional: true - '@vitest/browser-preview': - optional: true - '@vitest/browser-webdriverio': - optional: true - '@vitest/coverage-istanbul': - optional: true - '@vitest/coverage-v8': - optional: true - '@vitest/ui': - optional: true - happy-dom: - optional: true - jsdom: - optional: true - vitest@4.1.8: resolution: {integrity: sha512-flY6ScbCIt9HThs+C5HS7jvGOB560DJtk/Z15IQROTA6zEy49Nh8T/dofWTQL+n3vswqn87sbJNiuqw1SDp5Ig==} engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} @@ -4322,10 +4373,21 @@ snapshots: optionalDependencies: chokidar: 5.0.0 - '@angular-devkit/schematics-cli@21.2.12(@types/node@25.9.1)(chokidar@5.0.0)': + '@angular-devkit/core@21.2.15(chokidar@5.0.0)': dependencies: - '@angular-devkit/core': 21.2.12(chokidar@5.0.0) - '@angular-devkit/schematics': 21.2.12(chokidar@5.0.0) + ajv: 8.18.0 + ajv-formats: 3.0.1(ajv@8.18.0) + jsonc-parser: 3.3.1 + picomatch: 4.0.4 + rxjs: 7.8.2 + source-map: 0.7.6 + optionalDependencies: + chokidar: 5.0.0 + + '@angular-devkit/schematics-cli@21.2.15(@types/node@25.9.1)(chokidar@5.0.0)': + dependencies: + '@angular-devkit/core': 21.2.15(chokidar@5.0.0) + '@angular-devkit/schematics': 21.2.15(chokidar@5.0.0) '@inquirer/prompts': 7.10.1(@types/node@25.9.1) transitivePeerDependencies: - '@types/node' @@ -4341,6 +4403,16 @@ snapshots: transitivePeerDependencies: - chokidar + '@angular-devkit/schematics@21.2.15(chokidar@5.0.0)': + dependencies: + '@angular-devkit/core': 21.2.15(chokidar@5.0.0) + jsonc-parser: 3.3.1 + magic-string: 0.30.21 + ora: 9.3.0 + rxjs: 7.8.2 + transitivePeerDependencies: + - chokidar + '@babel/code-frame@7.29.7': dependencies: '@babel/helper-validator-identifier': 7.29.7 @@ -4355,15 +4427,6 @@ snapshots: '@jridgewell/trace-mapping': 0.3.31 jsesc: 3.1.0 - '@babel/generator@8.0.0-rc.5': - dependencies: - '@babel/parser': 8.0.0-rc.6 - '@babel/types': 8.0.0-rc.6 - '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.31 - '@types/jsesc': 2.5.1 - jsesc: 3.1.0 - '@babel/generator@8.0.0-rc.6': dependencies: '@babel/parser': 8.0.0-rc.6 @@ -4381,18 +4444,12 @@ snapshots: '@babel/helper-validator-identifier@7.29.7': {} - '@babel/helper-validator-identifier@8.0.0-rc.5': {} - '@babel/helper-validator-identifier@8.0.0-rc.6': {} '@babel/parser@7.29.7': dependencies: '@babel/types': 7.29.7 - '@babel/parser@8.0.0-rc.4': - dependencies: - '@babel/types': 8.0.0-rc.6 - '@babel/parser@8.0.0-rc.6': dependencies: '@babel/types': 8.0.0-rc.6 @@ -4570,26 +4627,42 @@ snapshots: tslib: 2.8.1 optional: true + '@emnapi/core@1.11.0': + dependencies: + '@emnapi/wasi-threads': 1.2.2 + tslib: 2.8.1 + optional: true + '@emnapi/runtime@1.10.0': dependencies: tslib: 2.8.1 optional: true + '@emnapi/runtime@1.11.0': + dependencies: + tslib: 2.8.1 + optional: true + '@emnapi/wasi-threads@1.2.1': dependencies: tslib: 2.8.1 optional: true - '@eslint-community/eslint-utils@4.9.1(eslint@10.4.0(jiti@2.6.1))': + '@emnapi/wasi-threads@1.2.2': dependencies: - eslint: 10.4.0(jiti@2.6.1) - eslint-visitor-keys: 3.4.3 + tslib: 2.8.1 + optional: true '@eslint-community/eslint-utils@4.9.1(eslint@10.4.1(jiti@2.6.1))': dependencies: eslint: 10.4.1(jiti@2.6.1) eslint-visitor-keys: 3.4.3 + '@eslint-community/eslint-utils@4.9.1(eslint@10.5.0(jiti@2.6.1))': + dependencies: + eslint: 10.5.0(jiti@2.6.1) + eslint-visitor-keys: 3.4.3 + '@eslint-community/regexpp@4.12.2': {} '@eslint/config-array@0.23.5': @@ -4608,17 +4681,12 @@ snapshots: dependencies: '@types/json-schema': 7.0.15 - '@eslint/js@10.0.1(eslint@10.4.0(jiti@2.6.1))': + '@eslint/js@10.0.1(eslint@10.5.0(jiti@2.6.1))': optionalDependencies: - eslint: 10.4.0(jiti@2.6.1) + eslint: 10.5.0(jiti@2.6.1) '@eslint/object-schema@3.0.5': {} - '@eslint/plugin-kit@0.7.1': - dependencies: - '@eslint/core': 1.2.1 - levn: 0.4.1 - '@eslint/plugin-kit@0.7.2': dependencies: '@eslint/core': 1.2.1 @@ -4637,7 +4705,7 @@ snapshots: conventional-recommended-bump: 11.2.0 execa: 9.6.1 git-cliff: 2.13.1 - js-yaml: 4.1.1 + js-yaml: 4.2.0 semver: 7.8.1 smol-toml: 1.6.1 @@ -4670,7 +4738,7 @@ snapshots: '@inquirer/ansi@1.0.2': {} - '@inquirer/ansi@2.0.6': {} + '@inquirer/ansi@2.0.7': {} '@inquirer/checkbox@4.3.2(@types/node@25.9.1)': dependencies: @@ -4682,12 +4750,12 @@ snapshots: optionalDependencies: '@types/node': 25.9.1 - '@inquirer/checkbox@5.2.0(@types/node@25.9.1)': + '@inquirer/checkbox@5.2.1(@types/node@25.9.1)': dependencies: - '@inquirer/ansi': 2.0.6 - '@inquirer/core': 11.2.0(@types/node@25.9.1) - '@inquirer/figures': 2.0.6 - '@inquirer/type': 4.0.6(@types/node@25.9.1) + '@inquirer/ansi': 2.0.7 + '@inquirer/core': 11.2.1(@types/node@25.9.1) + '@inquirer/figures': 2.0.7 + '@inquirer/type': 4.0.7(@types/node@25.9.1) optionalDependencies: '@types/node': 25.9.1 @@ -4698,10 +4766,10 @@ snapshots: optionalDependencies: '@types/node': 25.9.1 - '@inquirer/confirm@6.1.0(@types/node@25.9.1)': + '@inquirer/confirm@6.1.1(@types/node@25.9.1)': dependencies: - '@inquirer/core': 11.2.0(@types/node@25.9.1) - '@inquirer/type': 4.0.6(@types/node@25.9.1) + '@inquirer/core': 11.2.1(@types/node@25.9.1) + '@inquirer/type': 4.0.7(@types/node@25.9.1) optionalDependencies: '@types/node': 25.9.1 @@ -4718,14 +4786,14 @@ snapshots: optionalDependencies: '@types/node': 25.9.1 - '@inquirer/core@11.2.0(@types/node@25.9.1)': + '@inquirer/core@11.2.1(@types/node@25.9.1)': dependencies: - '@inquirer/ansi': 2.0.6 - '@inquirer/figures': 2.0.6 - '@inquirer/type': 4.0.6(@types/node@25.9.1) + '@inquirer/ansi': 2.0.7 + '@inquirer/figures': 2.0.7 + '@inquirer/type': 4.0.7(@types/node@25.9.1) cli-width: 4.1.0 fast-wrap-ansi: 0.2.2 - mute-stream: 4.0.0 + mute-stream: 3.0.0 signal-exit: 4.1.0 optionalDependencies: '@types/node': 25.9.1 @@ -4738,11 +4806,11 @@ snapshots: optionalDependencies: '@types/node': 25.9.1 - '@inquirer/editor@5.2.0(@types/node@25.9.1)': + '@inquirer/editor@5.2.2(@types/node@25.9.1)': dependencies: - '@inquirer/core': 11.2.0(@types/node@25.9.1) - '@inquirer/external-editor': 3.0.1(@types/node@25.9.1) - '@inquirer/type': 4.0.6(@types/node@25.9.1) + '@inquirer/core': 11.2.1(@types/node@25.9.1) + '@inquirer/external-editor': 3.0.3(@types/node@25.9.1) + '@inquirer/type': 4.0.7(@types/node@25.9.1) optionalDependencies: '@types/node': 25.9.1 @@ -4754,10 +4822,10 @@ snapshots: optionalDependencies: '@types/node': 25.9.1 - '@inquirer/expand@5.1.0(@types/node@25.9.1)': + '@inquirer/expand@5.1.1(@types/node@25.9.1)': dependencies: - '@inquirer/core': 11.2.0(@types/node@25.9.1) - '@inquirer/type': 4.0.6(@types/node@25.9.1) + '@inquirer/core': 11.2.1(@types/node@25.9.1) + '@inquirer/type': 4.0.7(@types/node@25.9.1) optionalDependencies: '@types/node': 25.9.1 @@ -4768,7 +4836,7 @@ snapshots: optionalDependencies: '@types/node': 25.9.1 - '@inquirer/external-editor@3.0.1(@types/node@25.9.1)': + '@inquirer/external-editor@3.0.3(@types/node@25.9.1)': dependencies: chardet: 2.1.1 iconv-lite: 0.7.2 @@ -4777,7 +4845,7 @@ snapshots: '@inquirer/figures@1.0.15': {} - '@inquirer/figures@2.0.6': {} + '@inquirer/figures@2.0.7': {} '@inquirer/input@4.3.1(@types/node@25.9.1)': dependencies: @@ -4786,10 +4854,10 @@ snapshots: optionalDependencies: '@types/node': 25.9.1 - '@inquirer/input@5.1.0(@types/node@25.9.1)': + '@inquirer/input@5.1.2(@types/node@25.9.1)': dependencies: - '@inquirer/core': 11.2.0(@types/node@25.9.1) - '@inquirer/type': 4.0.6(@types/node@25.9.1) + '@inquirer/core': 11.2.1(@types/node@25.9.1) + '@inquirer/type': 4.0.7(@types/node@25.9.1) optionalDependencies: '@types/node': 25.9.1 @@ -4800,10 +4868,10 @@ snapshots: optionalDependencies: '@types/node': 25.9.1 - '@inquirer/number@4.1.0(@types/node@25.9.1)': + '@inquirer/number@4.1.1(@types/node@25.9.1)': dependencies: - '@inquirer/core': 11.2.0(@types/node@25.9.1) - '@inquirer/type': 4.0.6(@types/node@25.9.1) + '@inquirer/core': 11.2.1(@types/node@25.9.1) + '@inquirer/type': 4.0.7(@types/node@25.9.1) optionalDependencies: '@types/node': 25.9.1 @@ -4815,11 +4883,11 @@ snapshots: optionalDependencies: '@types/node': 25.9.1 - '@inquirer/password@5.1.0(@types/node@25.9.1)': + '@inquirer/password@5.1.1(@types/node@25.9.1)': dependencies: - '@inquirer/ansi': 2.0.6 - '@inquirer/core': 11.2.0(@types/node@25.9.1) - '@inquirer/type': 4.0.6(@types/node@25.9.1) + '@inquirer/ansi': 2.0.7 + '@inquirer/core': 11.2.1(@types/node@25.9.1) + '@inquirer/type': 4.0.7(@types/node@25.9.1) optionalDependencies: '@types/node': 25.9.1 @@ -4838,18 +4906,18 @@ snapshots: optionalDependencies: '@types/node': 25.9.1 - '@inquirer/prompts@8.5.0(@types/node@25.9.1)': - dependencies: - '@inquirer/checkbox': 5.2.0(@types/node@25.9.1) - '@inquirer/confirm': 6.1.0(@types/node@25.9.1) - '@inquirer/editor': 5.2.0(@types/node@25.9.1) - '@inquirer/expand': 5.1.0(@types/node@25.9.1) - '@inquirer/input': 5.1.0(@types/node@25.9.1) - '@inquirer/number': 4.1.0(@types/node@25.9.1) - '@inquirer/password': 5.1.0(@types/node@25.9.1) - '@inquirer/rawlist': 5.3.0(@types/node@25.9.1) - '@inquirer/search': 4.2.0(@types/node@25.9.1) - '@inquirer/select': 5.2.0(@types/node@25.9.1) + '@inquirer/prompts@8.5.2(@types/node@25.9.1)': + dependencies: + '@inquirer/checkbox': 5.2.1(@types/node@25.9.1) + '@inquirer/confirm': 6.1.1(@types/node@25.9.1) + '@inquirer/editor': 5.2.2(@types/node@25.9.1) + '@inquirer/expand': 5.1.1(@types/node@25.9.1) + '@inquirer/input': 5.1.2(@types/node@25.9.1) + '@inquirer/number': 4.1.1(@types/node@25.9.1) + '@inquirer/password': 5.1.1(@types/node@25.9.1) + '@inquirer/rawlist': 5.3.1(@types/node@25.9.1) + '@inquirer/search': 4.2.1(@types/node@25.9.1) + '@inquirer/select': 5.2.1(@types/node@25.9.1) optionalDependencies: '@types/node': 25.9.1 @@ -4861,10 +4929,10 @@ snapshots: optionalDependencies: '@types/node': 25.9.1 - '@inquirer/rawlist@5.3.0(@types/node@25.9.1)': + '@inquirer/rawlist@5.3.1(@types/node@25.9.1)': dependencies: - '@inquirer/core': 11.2.0(@types/node@25.9.1) - '@inquirer/type': 4.0.6(@types/node@25.9.1) + '@inquirer/core': 11.2.1(@types/node@25.9.1) + '@inquirer/type': 4.0.7(@types/node@25.9.1) optionalDependencies: '@types/node': 25.9.1 @@ -4877,11 +4945,11 @@ snapshots: optionalDependencies: '@types/node': 25.9.1 - '@inquirer/search@4.2.0(@types/node@25.9.1)': + '@inquirer/search@4.2.1(@types/node@25.9.1)': dependencies: - '@inquirer/core': 11.2.0(@types/node@25.9.1) - '@inquirer/figures': 2.0.6 - '@inquirer/type': 4.0.6(@types/node@25.9.1) + '@inquirer/core': 11.2.1(@types/node@25.9.1) + '@inquirer/figures': 2.0.7 + '@inquirer/type': 4.0.7(@types/node@25.9.1) optionalDependencies: '@types/node': 25.9.1 @@ -4895,12 +4963,12 @@ snapshots: optionalDependencies: '@types/node': 25.9.1 - '@inquirer/select@5.2.0(@types/node@25.9.1)': + '@inquirer/select@5.2.1(@types/node@25.9.1)': dependencies: - '@inquirer/ansi': 2.0.6 - '@inquirer/core': 11.2.0(@types/node@25.9.1) - '@inquirer/figures': 2.0.6 - '@inquirer/type': 4.0.6(@types/node@25.9.1) + '@inquirer/ansi': 2.0.7 + '@inquirer/core': 11.2.1(@types/node@25.9.1) + '@inquirer/figures': 2.0.7 + '@inquirer/type': 4.0.7(@types/node@25.9.1) optionalDependencies: '@types/node': 25.9.1 @@ -4908,7 +4976,7 @@ snapshots: optionalDependencies: '@types/node': 25.9.1 - '@inquirer/type@4.0.6(@types/node@25.9.1)': + '@inquirer/type@4.0.7(@types/node@25.9.1)': optionalDependencies: '@types/node': 25.9.1 @@ -4995,20 +5063,20 @@ snapshots: commander: 14.0.3 semver: 7.8.1 - '@nanoforge-dev/cli@1.4.2(@types/node@25.9.1)': + '@nanoforge-dev/cli@1.5.3(@types/node@25.9.1)': dependencies: - '@angular-devkit/schematics': 21.2.12(chokidar@5.0.0) - '@angular-devkit/schematics-cli': 21.2.12(@types/node@25.9.1)(chokidar@5.0.0) - '@inquirer/prompts': 8.5.0(@types/node@25.9.1) + '@angular-devkit/schematics': 21.2.15(chokidar@5.0.0) + '@angular-devkit/schematics-cli': 21.2.15(@types/node@25.9.1)(chokidar@5.0.0) + '@inquirer/prompts': 8.5.2(@types/node@25.9.1) '@nanoforge-dev/loader-client': 1.3.0 '@nanoforge-dev/loader-server': 1.2.0 '@nanoforge-dev/schematics': 2.1.3(chokidar@5.0.0) - ansis: 4.3.0 + ansis: 4.3.1 bun: 1.3.14 chokidar: 5.0.0 class-transformer: 0.5.1 class-validator: 0.15.1 - commander: 14.0.3 + commander: 15.0.0 dotenv: 17.4.2 node-emoji: 2.2.0 open: 11.0.0 @@ -5045,6 +5113,20 @@ snapshots: '@tybys/wasm-util': 0.10.2 optional: true + '@napi-rs/wasm-runtime@1.1.5(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': + dependencies: + '@emnapi/core': 1.10.0 + '@emnapi/runtime': 1.10.0 + '@tybys/wasm-util': 0.10.2 + optional: true + + '@napi-rs/wasm-runtime@1.1.5(@emnapi/core@1.11.0)(@emnapi/runtime@1.11.0)': + dependencies: + '@emnapi/core': 1.11.0 + '@emnapi/runtime': 1.11.0 + '@tybys/wasm-util': 0.10.2 + optional: true + '@octokit/auth-token@6.0.0': {} '@octokit/core@7.0.6': @@ -5156,6 +5238,8 @@ snapshots: '@oxc-project/types@0.133.0': {} + '@oxc-project/types@0.135.0': {} + '@oxfmt/binding-android-arm-eabi@0.35.0': optional: true @@ -5225,77 +5309,113 @@ snapshots: '@rolldown/binding-android-arm64@1.0.3': optional: true + '@rolldown/binding-android-arm64@1.1.1': + optional: true + '@rolldown/binding-darwin-arm64@1.0.2': optional: true '@rolldown/binding-darwin-arm64@1.0.3': optional: true + '@rolldown/binding-darwin-arm64@1.1.1': + optional: true + '@rolldown/binding-darwin-x64@1.0.2': optional: true '@rolldown/binding-darwin-x64@1.0.3': optional: true + '@rolldown/binding-darwin-x64@1.1.1': + optional: true + '@rolldown/binding-freebsd-x64@1.0.2': optional: true '@rolldown/binding-freebsd-x64@1.0.3': optional: true + '@rolldown/binding-freebsd-x64@1.1.1': + optional: true + '@rolldown/binding-linux-arm-gnueabihf@1.0.2': optional: true '@rolldown/binding-linux-arm-gnueabihf@1.0.3': optional: true + '@rolldown/binding-linux-arm-gnueabihf@1.1.1': + optional: true + '@rolldown/binding-linux-arm64-gnu@1.0.2': optional: true '@rolldown/binding-linux-arm64-gnu@1.0.3': optional: true + '@rolldown/binding-linux-arm64-gnu@1.1.1': + optional: true + '@rolldown/binding-linux-arm64-musl@1.0.2': optional: true '@rolldown/binding-linux-arm64-musl@1.0.3': optional: true + '@rolldown/binding-linux-arm64-musl@1.1.1': + optional: true + '@rolldown/binding-linux-ppc64-gnu@1.0.2': optional: true '@rolldown/binding-linux-ppc64-gnu@1.0.3': optional: true + '@rolldown/binding-linux-ppc64-gnu@1.1.1': + optional: true + '@rolldown/binding-linux-s390x-gnu@1.0.2': optional: true '@rolldown/binding-linux-s390x-gnu@1.0.3': optional: true + '@rolldown/binding-linux-s390x-gnu@1.1.1': + optional: true + '@rolldown/binding-linux-x64-gnu@1.0.2': optional: true '@rolldown/binding-linux-x64-gnu@1.0.3': optional: true + '@rolldown/binding-linux-x64-gnu@1.1.1': + optional: true + '@rolldown/binding-linux-x64-musl@1.0.2': optional: true '@rolldown/binding-linux-x64-musl@1.0.3': optional: true + '@rolldown/binding-linux-x64-musl@1.1.1': + optional: true + '@rolldown/binding-openharmony-arm64@1.0.2': optional: true '@rolldown/binding-openharmony-arm64@1.0.3': optional: true + '@rolldown/binding-openharmony-arm64@1.1.1': + optional: true + '@rolldown/binding-wasm32-wasi@1.0.2': dependencies: '@emnapi/core': 1.10.0 '@emnapi/runtime': 1.10.0 - '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + '@napi-rs/wasm-runtime': 1.1.5(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) optional: true '@rolldown/binding-wasm32-wasi@1.0.3': @@ -5305,18 +5425,31 @@ snapshots: '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) optional: true + '@rolldown/binding-wasm32-wasi@1.1.1': + dependencies: + '@emnapi/core': 1.11.0 + '@emnapi/runtime': 1.11.0 + '@napi-rs/wasm-runtime': 1.1.5(@emnapi/core@1.11.0)(@emnapi/runtime@1.11.0) + optional: true + '@rolldown/binding-win32-arm64-msvc@1.0.2': optional: true '@rolldown/binding-win32-arm64-msvc@1.0.3': optional: true + '@rolldown/binding-win32-arm64-msvc@1.1.1': + optional: true + '@rolldown/binding-win32-x64-msvc@1.0.2': optional: true '@rolldown/binding-win32-x64-msvc@1.0.3': optional: true + '@rolldown/binding-win32-x64-msvc@1.1.1': + optional: true + '@rolldown/pluginutils@1.0.1': {} '@rushstack/node-core-library@5.19.1(@types/node@25.9.1)': @@ -5478,15 +5611,15 @@ snapshots: dependencies: '@types/node': 25.9.1 - '@typescript-eslint/eslint-plugin@8.60.0(@typescript-eslint/parser@8.60.0(eslint@10.4.0(jiti@2.6.1))(typescript@6.0.3))(eslint@10.4.0(jiti@2.6.1))(typescript@6.0.3)': + '@typescript-eslint/eslint-plugin@8.60.0(@typescript-eslint/parser@8.60.0(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3))(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.60.0(eslint@10.4.0(jiti@2.6.1))(typescript@6.0.3) + '@typescript-eslint/parser': 8.60.0(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) '@typescript-eslint/scope-manager': 8.60.0 - '@typescript-eslint/type-utils': 8.60.0(eslint@10.4.0(jiti@2.6.1))(typescript@6.0.3) - '@typescript-eslint/utils': 8.60.0(eslint@10.4.0(jiti@2.6.1))(typescript@6.0.3) + '@typescript-eslint/type-utils': 8.60.0(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) + '@typescript-eslint/utils': 8.60.0(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) '@typescript-eslint/visitor-keys': 8.60.0 - eslint: 10.4.0(jiti@2.6.1) + eslint: 10.5.0(jiti@2.6.1) ignore: 7.0.5 natural-compare: 1.4.0 ts-api-utils: 2.5.0(typescript@6.0.3) @@ -5494,30 +5627,30 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.60.0(eslint@10.4.0(jiti@2.6.1))(typescript@6.0.3)': + '@typescript-eslint/parser@8.60.0(eslint@10.4.1(jiti@2.6.1))(typescript@6.0.3)': dependencies: '@typescript-eslint/scope-manager': 8.60.0 '@typescript-eslint/types': 8.60.0 '@typescript-eslint/typescript-estree': 8.60.0(typescript@6.0.3) '@typescript-eslint/visitor-keys': 8.60.0 debug: 4.4.3 - eslint: 10.4.0(jiti@2.6.1) + eslint: 10.4.1(jiti@2.6.1) typescript: 6.0.3 transitivePeerDependencies: - supports-color + optional: true - '@typescript-eslint/parser@8.60.0(eslint@10.4.1(jiti@2.6.1))(typescript@6.0.3)': + '@typescript-eslint/parser@8.60.0(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3)': dependencies: '@typescript-eslint/scope-manager': 8.60.0 '@typescript-eslint/types': 8.60.0 '@typescript-eslint/typescript-estree': 8.60.0(typescript@6.0.3) '@typescript-eslint/visitor-keys': 8.60.0 debug: 4.4.3 - eslint: 10.4.1(jiti@2.6.1) + eslint: 10.5.0(jiti@2.6.1) typescript: 6.0.3 transitivePeerDependencies: - supports-color - optional: true '@typescript-eslint/project-service@8.60.0(typescript@6.0.3)': dependencies: @@ -5537,13 +5670,13 @@ snapshots: dependencies: typescript: 6.0.3 - '@typescript-eslint/type-utils@8.60.0(eslint@10.4.0(jiti@2.6.1))(typescript@6.0.3)': + '@typescript-eslint/type-utils@8.60.0(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3)': dependencies: '@typescript-eslint/types': 8.60.0 '@typescript-eslint/typescript-estree': 8.60.0(typescript@6.0.3) - '@typescript-eslint/utils': 8.60.0(eslint@10.4.0(jiti@2.6.1))(typescript@6.0.3) + '@typescript-eslint/utils': 8.60.0(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) debug: 4.4.3 - eslint: 10.4.0(jiti@2.6.1) + eslint: 10.5.0(jiti@2.6.1) ts-api-utils: 2.5.0(typescript@6.0.3) typescript: 6.0.3 transitivePeerDependencies: @@ -5566,13 +5699,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.60.0(eslint@10.4.0(jiti@2.6.1))(typescript@6.0.3)': + '@typescript-eslint/utils@8.60.0(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.4.0(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.5.0(jiti@2.6.1)) '@typescript-eslint/scope-manager': 8.60.0 '@typescript-eslint/types': 8.60.0 '@typescript-eslint/typescript-estree': 8.60.0(typescript@6.0.3) - eslint: 10.4.0(jiti@2.6.1) + eslint: 10.5.0(jiti@2.6.1) typescript: 6.0.3 transitivePeerDependencies: - supports-color @@ -5596,15 +5729,6 @@ snapshots: tinyrainbow: 3.1.0 vitest: 4.1.8(@types/node@25.9.1)(@vitest/coverage-v8@4.1.8)(vite@8.0.14(@types/node@25.9.1)(jiti@2.6.1)(yaml@2.9.0)) - '@vitest/expect@4.1.7': - dependencies: - '@standard-schema/spec': 1.1.0 - '@types/chai': 5.2.3 - '@vitest/spy': 4.1.7 - '@vitest/utils': 4.1.7 - chai: 6.2.2 - tinyrainbow: 3.1.0 - '@vitest/expect@4.1.8': dependencies: '@standard-schema/spec': 1.1.0 @@ -5614,14 +5738,6 @@ snapshots: chai: 6.2.2 tinyrainbow: 3.1.0 - '@vitest/mocker@4.1.7(vite@8.0.14(@types/node@25.9.1)(jiti@2.6.1)(yaml@2.9.0))': - dependencies: - '@vitest/spy': 4.1.7 - estree-walker: 3.0.3 - magic-string: 0.30.21 - optionalDependencies: - vite: 8.0.14(@types/node@25.9.1)(jiti@2.6.1)(yaml@2.9.0) - '@vitest/mocker@4.1.8(vite@8.0.14(@types/node@25.9.1)(jiti@2.6.1)(yaml@2.9.0))': dependencies: '@vitest/spy': 4.1.8 @@ -5630,31 +5746,15 @@ snapshots: optionalDependencies: vite: 8.0.14(@types/node@25.9.1)(jiti@2.6.1)(yaml@2.9.0) - '@vitest/pretty-format@4.1.7': - dependencies: - tinyrainbow: 3.1.0 - '@vitest/pretty-format@4.1.8': dependencies: tinyrainbow: 3.1.0 - '@vitest/runner@4.1.7': - dependencies: - '@vitest/utils': 4.1.7 - pathe: 2.0.3 - '@vitest/runner@4.1.8': dependencies: '@vitest/utils': 4.1.8 pathe: 2.0.3 - '@vitest/snapshot@4.1.7': - dependencies: - '@vitest/pretty-format': 4.1.7 - '@vitest/utils': 4.1.7 - magic-string: 0.30.21 - pathe: 2.0.3 - '@vitest/snapshot@4.1.8': dependencies: '@vitest/pretty-format': 4.1.8 @@ -5662,16 +5762,8 @@ snapshots: magic-string: 0.30.21 pathe: 2.0.3 - '@vitest/spy@4.1.7': {} - '@vitest/spy@4.1.8': {} - '@vitest/utils@4.1.7': - dependencies: - '@vitest/pretty-format': 4.1.7 - convert-source-map: 2.0.0 - tinyrainbow: 3.1.0 - '@vitest/utils@4.1.8': dependencies: '@vitest/pretty-format': 4.1.8 @@ -5746,8 +5838,6 @@ snapshots: ansi-styles@6.2.3: {} - ansis@4.3.0: {} - ansis@4.3.1: {} argparse@1.0.10: @@ -5770,7 +5860,7 @@ snapshots: ast-kit@3.0.0-beta.1: dependencies: - '@babel/parser': 8.0.0-rc.4 + '@babel/parser': 8.0.0-rc.6 estree-walker: 3.0.3 pathe: 2.0.3 @@ -5919,6 +6009,8 @@ snapshots: commander@14.0.3: {} + commander@15.0.0: {} + compare-func@2.0.0: dependencies: array-ify: 1.0.0 @@ -6067,9 +6159,9 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-config-prettier@10.1.8(eslint@10.4.0(jiti@2.6.1)): + eslint-config-prettier@10.1.8(eslint@10.5.0(jiti@2.6.1)): dependencies: - eslint: 10.4.0(jiti@2.6.1) + eslint: 10.5.0(jiti@2.6.1) eslint-formatter-pretty@7.1.0: dependencies: @@ -6082,35 +6174,35 @@ snapshots: string-width: 8.2.1 supports-hyperlinks: 4.4.0 - eslint-formatting-reporter@0.0.0(eslint@10.4.0(jiti@2.6.1)): + eslint-formatting-reporter@0.0.0(eslint@10.5.0(jiti@2.6.1)): dependencies: - eslint: 10.4.0(jiti@2.6.1) + eslint: 10.5.0(jiti@2.6.1) prettier-linter-helpers: 1.0.1 eslint-parser-plain@0.1.1: {} - eslint-plugin-format@2.0.1(eslint@10.4.0(jiti@2.6.1)): + eslint-plugin-format@2.0.1(eslint@10.5.0(jiti@2.6.1)): dependencies: '@dprint/formatter': 0.5.1 '@dprint/markdown': 0.21.1 '@dprint/toml': 0.7.0 - eslint: 10.4.0(jiti@2.6.1) - eslint-formatting-reporter: 0.0.0(eslint@10.4.0(jiti@2.6.1)) + eslint: 10.5.0(jiti@2.6.1) + eslint-formatting-reporter: 0.0.0(eslint@10.5.0(jiti@2.6.1)) eslint-parser-plain: 0.1.1 ohash: 2.0.11 oxfmt: 0.35.0 prettier: 3.8.3 synckit: 0.11.12 - eslint-plugin-prettier@5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.4.0(jiti@2.6.1)))(eslint@10.4.0(jiti@2.6.1))(prettier@3.8.3): + eslint-plugin-prettier@5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.5.0(jiti@2.6.1)))(eslint@10.5.0(jiti@2.6.1))(prettier@3.8.3): dependencies: - eslint: 10.4.0(jiti@2.6.1) + eslint: 10.5.0(jiti@2.6.1) prettier: 3.8.3 prettier-linter-helpers: 1.0.1 synckit: 0.11.12 optionalDependencies: '@types/eslint': 9.6.1 - eslint-config-prettier: 10.1.8(eslint@10.4.0(jiti@2.6.1)) + eslint-config-prettier: 10.1.8(eslint@10.5.0(jiti@2.6.1)) eslint-rule-docs@1.1.235: {} @@ -6125,14 +6217,14 @@ snapshots: eslint-visitor-keys@5.0.1: {} - eslint@10.4.0(jiti@2.6.1): + eslint@10.4.1(jiti@2.6.1): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.4.0(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.4.1(jiti@2.6.1)) '@eslint-community/regexpp': 4.12.2 '@eslint/config-array': 0.23.5 '@eslint/config-helpers': 0.6.0 '@eslint/core': 1.2.1 - '@eslint/plugin-kit': 0.7.1 + '@eslint/plugin-kit': 0.7.2 '@humanfs/node': 0.16.8 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.4.3 @@ -6162,9 +6254,9 @@ snapshots: transitivePeerDependencies: - supports-color - eslint@10.4.1(jiti@2.6.1): + eslint@10.5.0(jiti@2.6.1): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.4.1(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.5.0(jiti@2.6.1)) '@eslint-community/regexpp': 4.12.2 '@eslint/config-array': 0.23.5 '@eslint/config-helpers': 0.6.0 @@ -6549,10 +6641,6 @@ snapshots: js-tokens@4.0.0: {} - js-yaml@4.1.1: - dependencies: - argparse: 2.0.1 - js-yaml@4.2.0: dependencies: argparse: 2.0.1 @@ -6643,15 +6731,6 @@ snapshots: lines-and-columns@1.2.4: {} - lint-staged@17.0.5: - dependencies: - listr2: 10.2.1 - picomatch: 4.0.4 - string-argv: 0.3.2 - tinyexec: 1.2.2 - optionalDependencies: - yaml: 2.9.0 - lint-staged@17.0.7: dependencies: listr2: 10.2.1 @@ -6779,7 +6858,7 @@ snapshots: mute-stream@2.0.0: {} - mute-stream@4.0.0: {} + mute-stream@3.0.0: {} nanoid@3.3.12: {} @@ -7005,23 +7084,23 @@ snapshots: rfdc@1.4.1: {} - rolldown-plugin-dts@0.25.1(rolldown@1.0.2)(typescript@6.0.3): + rolldown-plugin-dts@0.25.2(rolldown@1.0.3)(typescript@6.0.3): dependencies: - '@babel/generator': 8.0.0-rc.5 - '@babel/helper-validator-identifier': 8.0.0-rc.5 - '@babel/parser': 8.0.0-rc.4 + '@babel/generator': 8.0.0-rc.6 + '@babel/helper-validator-identifier': 8.0.0-rc.6 + '@babel/parser': 8.0.0-rc.6 ast-kit: 3.0.0-beta.1 birpc: 4.0.0 dts-resolver: 3.0.0 get-tsconfig: 5.0.0-beta.5 obug: 2.1.1 - rolldown: 1.0.2 + rolldown: 1.0.3 optionalDependencies: typescript: 6.0.3 transitivePeerDependencies: - oxc-resolver - rolldown-plugin-dts@0.25.2(rolldown@1.0.3)(typescript@6.0.3): + rolldown-plugin-dts@0.25.2(rolldown@1.1.1)(typescript@6.0.3): dependencies: '@babel/generator': 8.0.0-rc.6 '@babel/helper-validator-identifier': 8.0.0-rc.6 @@ -7031,7 +7110,7 @@ snapshots: dts-resolver: 3.0.0 get-tsconfig: 5.0.0-beta.5 obug: 2.1.1 - rolldown: 1.0.3 + rolldown: 1.1.1 optionalDependencies: typescript: 6.0.3 transitivePeerDependencies: @@ -7079,6 +7158,27 @@ snapshots: '@rolldown/binding-win32-arm64-msvc': 1.0.3 '@rolldown/binding-win32-x64-msvc': 1.0.3 + rolldown@1.1.1: + dependencies: + '@oxc-project/types': 0.135.0 + '@rolldown/pluginutils': 1.0.1 + optionalDependencies: + '@rolldown/binding-android-arm64': 1.1.1 + '@rolldown/binding-darwin-arm64': 1.1.1 + '@rolldown/binding-darwin-x64': 1.1.1 + '@rolldown/binding-freebsd-x64': 1.1.1 + '@rolldown/binding-linux-arm-gnueabihf': 1.1.1 + '@rolldown/binding-linux-arm64-gnu': 1.1.1 + '@rolldown/binding-linux-arm64-musl': 1.1.1 + '@rolldown/binding-linux-ppc64-gnu': 1.1.1 + '@rolldown/binding-linux-s390x-gnu': 1.1.1 + '@rolldown/binding-linux-x64-gnu': 1.1.1 + '@rolldown/binding-linux-x64-musl': 1.1.1 + '@rolldown/binding-openharmony-arm64': 1.1.1 + '@rolldown/binding-wasm32-wasi': 1.1.1 + '@rolldown/binding-win32-arm64-msvc': 1.1.1 + '@rolldown/binding-win32-x64-msvc': 1.1.1 + run-applescript@7.1.0: {} rxjs@7.8.2: @@ -7216,15 +7316,8 @@ snapshots: tinybench@2.9.0: {} - tinyexec@1.2.2: {} - tinyexec@1.2.4: {} - tinyglobby@0.2.16: - dependencies: - fdir: 6.5.0(picomatch@4.0.4) - picomatch: 4.0.4 - tinyglobby@0.2.17: dependencies: fdir: 6.5.0(picomatch@4.0.4) @@ -7242,9 +7335,9 @@ snapshots: dependencies: typescript: 6.0.3 - tsdown@0.22.0(typescript@6.0.3)(unrun@0.3.0(synckit@0.11.12)): + tsdown@0.22.1(typescript@6.0.3)(unrun@0.3.0(synckit@0.11.12)): dependencies: - ansis: 4.3.0 + ansis: 4.3.1 cac: 7.0.0 defu: 6.1.7 empathic: 2.0.1 @@ -7252,11 +7345,11 @@ snapshots: import-without-cache: 0.4.0 obug: 2.1.1 picomatch: 4.0.4 - rolldown: 1.0.2 - rolldown-plugin-dts: 0.25.1(rolldown@1.0.2)(typescript@6.0.3) + rolldown: 1.0.3 + rolldown-plugin-dts: 0.25.2(rolldown@1.0.3)(typescript@6.0.3) semver: 7.8.1 - tinyexec: 1.2.2 - tinyglobby: 0.2.16 + tinyexec: 1.2.4 + tinyglobby: 0.2.17 tree-kill: 1.2.2 unconfig-core: 7.5.0 optionalDependencies: @@ -7268,7 +7361,7 @@ snapshots: - oxc-resolver - vue-tsc - tsdown@0.22.1(typescript@6.0.3)(unrun@0.3.0(synckit@0.11.12)): + tsdown@0.22.2(typescript@6.0.3)(unrun@0.3.0(synckit@0.11.12)): dependencies: ansis: 4.3.1 cac: 7.0.0 @@ -7278,8 +7371,8 @@ snapshots: import-without-cache: 0.4.0 obug: 2.1.1 picomatch: 4.0.4 - rolldown: 1.0.3 - rolldown-plugin-dts: 0.25.2(rolldown@1.0.3)(typescript@6.0.3) + rolldown: 1.1.1 + rolldown-plugin-dts: 0.25.2(rolldown@1.1.1)(typescript@6.0.3) semver: 7.8.1 tinyexec: 1.2.4 tinyglobby: 0.2.17 @@ -7311,13 +7404,13 @@ snapshots: dependencies: prelude-ls: 1.2.1 - typescript-eslint@8.60.0(eslint@10.4.0(jiti@2.6.1))(typescript@6.0.3): + typescript-eslint@8.60.0(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.60.0(@typescript-eslint/parser@8.60.0(eslint@10.4.0(jiti@2.6.1))(typescript@6.0.3))(eslint@10.4.0(jiti@2.6.1))(typescript@6.0.3) - '@typescript-eslint/parser': 8.60.0(eslint@10.4.0(jiti@2.6.1))(typescript@6.0.3) + '@typescript-eslint/eslint-plugin': 8.60.0(@typescript-eslint/parser@8.60.0(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3))(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) + '@typescript-eslint/parser': 8.60.0(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) '@typescript-eslint/typescript-estree': 8.60.0(typescript@6.0.3) - '@typescript-eslint/utils': 8.60.0(eslint@10.4.0(jiti@2.6.1))(typescript@6.0.3) - eslint: 10.4.0(jiti@2.6.1) + '@typescript-eslint/utils': 8.60.0(eslint@10.5.0(jiti@2.6.1))(typescript@6.0.3) + eslint: 10.5.0(jiti@2.6.1) typescript: 6.0.3 transitivePeerDependencies: - supports-color @@ -7345,7 +7438,7 @@ snapshots: unrun@0.3.0(synckit@0.11.12): dependencies: - rolldown: 1.0.2 + rolldown: 1.0.3 optionalDependencies: synckit: 0.11.12 @@ -7376,34 +7469,6 @@ snapshots: jiti: 2.6.1 yaml: 2.9.0 - vitest@4.1.7(@types/node@25.9.1)(@vitest/coverage-v8@4.1.8(vitest@4.1.8))(vite@8.0.14(@types/node@25.9.1)(jiti@2.6.1)(yaml@2.9.0)): - dependencies: - '@vitest/expect': 4.1.7 - '@vitest/mocker': 4.1.7(vite@8.0.14(@types/node@25.9.1)(jiti@2.6.1)(yaml@2.9.0)) - '@vitest/pretty-format': 4.1.7 - '@vitest/runner': 4.1.7 - '@vitest/snapshot': 4.1.7 - '@vitest/spy': 4.1.7 - '@vitest/utils': 4.1.7 - es-module-lexer: 2.1.0 - expect-type: 1.3.0 - magic-string: 0.30.21 - obug: 2.1.1 - pathe: 2.0.3 - picomatch: 4.0.4 - std-env: 4.1.0 - tinybench: 2.9.0 - tinyexec: 1.2.2 - tinyglobby: 0.2.16 - tinyrainbow: 3.1.0 - vite: 8.0.14(@types/node@25.9.1)(jiti@2.6.1)(yaml@2.9.0) - why-is-node-running: 2.3.0 - optionalDependencies: - '@types/node': 25.9.1 - '@vitest/coverage-v8': 4.1.8(vitest@4.1.8) - transitivePeerDependencies: - - msw - vitest@4.1.8(@types/node@25.9.1)(@vitest/coverage-v8@4.1.8)(vite@8.0.14(@types/node@25.9.1)(jiti@2.6.1)(yaml@2.9.0)): dependencies: '@vitest/expect': 4.1.8