From 47c288322a203ca2eed799f39e697a678ac10206 Mon Sep 17 00:00:00 2001
From: Tchips46
Date: Wed, 18 Mar 2026 16:17:25 +0900
Subject: [PATCH 01/15] feat(common): editor core types
---
packages/common/src/options/index.ts | 9 ++++-
.../common/src/options/types/options.type.ts | 21 ++++++++++
.../common/src/options/types/save.type.ts | 40 +++++++++++++++++++
3 files changed, 69 insertions(+), 1 deletion(-)
create mode 100644 packages/common/src/options/types/save.type.ts
diff --git a/packages/common/src/options/index.ts b/packages/common/src/options/index.ts
index 32ab2502..1bd44e31 100644
--- a/packages/common/src/options/index.ts
+++ b/packages/common/src/options/index.ts
@@ -1 +1,8 @@
-export type { IRunClientOptions, IRunOptions, IRunServerOptions } from "./types/options.type";
+export type {
+ IRunClientOptions,
+ IRunOptions,
+ IRunServerOptions,
+ IEditorRunClientOptions,
+ IEditorRunOptions,
+ IEditorRunServerOptions,
+} from "./types/options.type";
diff --git a/packages/common/src/options/types/options.type.ts b/packages/common/src/options/types/options.type.ts
index 3ed47674..5cab0ac1 100644
--- a/packages/common/src/options/types/options.type.ts
+++ b/packages/common/src/options/types/options.type.ts
@@ -1,3 +1,5 @@
+import { type Save } from "./save.type";
+
export type IRunOptions = IRunClientOptions | IRunServerOptions;
export interface IRunClientOptions {
@@ -10,3 +12,22 @@ export interface IRunServerOptions {
files: Map;
env: Record;
}
+
+export type IEditorRunOptions = IEditorRunClientOptions | IEditorRunServerOptions;
+
+export interface IEditorRunClientOptions {
+ canvas: HTMLCanvasElement;
+ files: Map;
+ env: Record;
+ editor: {
+ save: Save;
+ };
+}
+export interface IEditorRunServerOptions {
+ canvas: HTMLCanvasElement;
+ files: Map;
+ env: Record;
+ editor: {
+ save: Save;
+ };
+}
diff --git a/packages/common/src/options/types/save.type.ts b/packages/common/src/options/types/save.type.ts
new file mode 100644
index 00000000..94371ad1
--- /dev/null
+++ b/packages/common/src/options/types/save.type.ts
@@ -0,0 +1,40 @@
+export enum SaveLibraryTypeEnum {
+ COMPONENT_SYSTEM = "component-system",
+ GRAPHICS = "graphics",
+ ASSET_MANAGER = "asset-manager",
+ NETWORK = "network",
+ INPUT = "input",
+ SOUND = "sound",
+}
+
+export interface SaveLibrary {
+ id: string;
+ type: SaveLibraryTypeEnum | string;
+ name: string;
+ path: string;
+}
+
+export interface SaveComponent {
+ name: string;
+ path: string;
+}
+
+export interface SaveSystem {
+ name: string;
+ path: string;
+}
+
+export interface SaveEntity {
+ id: string;
+ components: {
+ name: string;
+ params: string[];
+ }[];
+}
+
+export interface Save {
+ libraries: SaveLibrary[];
+ components: SaveComponent[];
+ systems: SaveSystem[];
+ entities: SaveEntity[];
+}
From fd8a64170880deacef3c890ab3c6e9b0b230b044 Mon Sep 17 00:00:00 2001
From: Tchips46
Date: Wed, 18 Mar 2026 16:17:48 +0900
Subject: [PATCH 02/15] feat(common): editor core types
---
packages/core-editor/.cliff-jumperrc.json | 7 +
packages/core-editor/.gitignore | 231 ++++++++++++++++++
packages/core-editor/.idea/.name | 1 +
.../.idea/[NanoForge] Engine Core.iml | 12 +
.../core-editor/.idea/codeStyles/Project.xml | 57 +++++
.../.idea/codeStyles/codeStyleConfig.xml | 5 +
.../core-editor/.idea/git_toolbox_blame.xml | 6 +
.../core-editor/.idea/git_toolbox_prj.xml | 15 ++
.../inspectionProfiles/Project_Default.xml | 6 +
.../core-editor/.idea/jsLinters/eslint.xml | 6 +
packages/core-editor/.idea/modules.xml | 8 +
packages/core-editor/.idea/prettier.xml | 7 +
packages/core-editor/.idea/vcs.xml | 6 +
packages/core-editor/.nvmrc | 1 +
packages/core-editor/.prettierignore | 11 +
packages/core-editor/CHANGELOG.md | 59 +++++
packages/core-editor/LICENSE | 21 ++
packages/core-editor/README.md | 68 ++++++
packages/core-editor/cliff.toml | 79 ++++++
packages/core-editor/eslint.config.js | 3 +
packages/core-editor/package.json | 91 +++++++
packages/core-editor/prettier.config.js | 3 +
.../src/application/application-config.ts | 89 +++++++
.../application/application-options.type.ts | 3 +
.../src/application/nanoforge-application.ts | 57 +++++
.../src/application/nanoforge-client.ts | 21 ++
.../src/application/nanoforge-factory.ts | 15 ++
.../src/application/nanoforge-server.ts | 3 +
.../contexts/application.editable-context.ts | 20 ++
.../executions/clear.editable-context.ts | 3 +
.../executions/execution.editable-context.ts | 3 +
.../executions/init.editable-context.ts | 3 +
.../contexts/library.editable-context.ts | 7 +
.../common/library/manager/library.manager.ts | 106 ++++++++
.../common/library/relationship-functions.ts | 122 +++++++++
.../core-editor/src/config/config-registry.ts | 19 ++
packages/core-editor/src/core/core.ts | 104 ++++++++
packages/core-editor/src/index.ts | 4 +
.../core-editor/test/config-registry.spec.ts | 54 ++++
.../test/editable-library-manager.spec.ts | 182 ++++++++++++++
.../core-editor/test/relationship.spec.ts | 135 ++++++++++
packages/core-editor/tsconfig.json | 6 +
packages/core-editor/tsconfig.spec.json | 10 +
packages/core-editor/tsup.config.ts | 3 +
packages/core-editor/typedoc.json | 5 +
45 files changed, 1677 insertions(+)
create mode 100644 packages/core-editor/.cliff-jumperrc.json
create mode 100644 packages/core-editor/.gitignore
create mode 100644 packages/core-editor/.idea/.name
create mode 100644 packages/core-editor/.idea/[NanoForge] Engine Core.iml
create mode 100644 packages/core-editor/.idea/codeStyles/Project.xml
create mode 100644 packages/core-editor/.idea/codeStyles/codeStyleConfig.xml
create mode 100644 packages/core-editor/.idea/git_toolbox_blame.xml
create mode 100644 packages/core-editor/.idea/git_toolbox_prj.xml
create mode 100644 packages/core-editor/.idea/inspectionProfiles/Project_Default.xml
create mode 100644 packages/core-editor/.idea/jsLinters/eslint.xml
create mode 100644 packages/core-editor/.idea/modules.xml
create mode 100644 packages/core-editor/.idea/prettier.xml
create mode 100644 packages/core-editor/.idea/vcs.xml
create mode 100644 packages/core-editor/.nvmrc
create mode 100644 packages/core-editor/.prettierignore
create mode 100644 packages/core-editor/CHANGELOG.md
create mode 100644 packages/core-editor/LICENSE
create mode 100644 packages/core-editor/README.md
create mode 100644 packages/core-editor/cliff.toml
create mode 100644 packages/core-editor/eslint.config.js
create mode 100644 packages/core-editor/package.json
create mode 100644 packages/core-editor/prettier.config.js
create mode 100644 packages/core-editor/src/application/application-config.ts
create mode 100644 packages/core-editor/src/application/application-options.type.ts
create mode 100644 packages/core-editor/src/application/nanoforge-application.ts
create mode 100644 packages/core-editor/src/application/nanoforge-client.ts
create mode 100644 packages/core-editor/src/application/nanoforge-factory.ts
create mode 100644 packages/core-editor/src/application/nanoforge-server.ts
create mode 100644 packages/core-editor/src/common/context/contexts/application.editable-context.ts
create mode 100644 packages/core-editor/src/common/context/contexts/executions/clear.editable-context.ts
create mode 100644 packages/core-editor/src/common/context/contexts/executions/execution.editable-context.ts
create mode 100644 packages/core-editor/src/common/context/contexts/executions/init.editable-context.ts
create mode 100644 packages/core-editor/src/common/context/contexts/library.editable-context.ts
create mode 100644 packages/core-editor/src/common/library/manager/library.manager.ts
create mode 100644 packages/core-editor/src/common/library/relationship-functions.ts
create mode 100644 packages/core-editor/src/config/config-registry.ts
create mode 100644 packages/core-editor/src/core/core.ts
create mode 100644 packages/core-editor/src/index.ts
create mode 100644 packages/core-editor/test/config-registry.spec.ts
create mode 100644 packages/core-editor/test/editable-library-manager.spec.ts
create mode 100644 packages/core-editor/test/relationship.spec.ts
create mode 100644 packages/core-editor/tsconfig.json
create mode 100644 packages/core-editor/tsconfig.spec.json
create mode 100644 packages/core-editor/tsup.config.ts
create mode 100644 packages/core-editor/typedoc.json
diff --git a/packages/core-editor/.cliff-jumperrc.json b/packages/core-editor/.cliff-jumperrc.json
new file mode 100644
index 00000000..fe6d9d4a
--- /dev/null
+++ b/packages/core-editor/.cliff-jumperrc.json
@@ -0,0 +1,7 @@
+{
+ "$schema": "https://raw.githubusercontent.com/favware/cliff-jumper/main/assets/cliff-jumper.schema.json",
+ "name": "core",
+ "org": "nanoforge-dev",
+ "packagePath": "packages/core",
+ "identifierBase": false
+}
diff --git a/packages/core-editor/.gitignore b/packages/core-editor/.gitignore
new file mode 100644
index 00000000..f7652f89
--- /dev/null
+++ b/packages/core-editor/.gitignore
@@ -0,0 +1,231 @@
+### 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
+
+### 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.*
+
+# Turbo
+.turbo/
+
+# Compiled files
+src/**/*.js
+src/**/*.d.ts
diff --git a/packages/core-editor/.idea/.name b/packages/core-editor/.idea/.name
new file mode 100644
index 00000000..3d3e7caa
--- /dev/null
+++ b/packages/core-editor/.idea/.name
@@ -0,0 +1 @@
+[NanoForge] Engine Core
\ No newline at end of file
diff --git a/packages/core-editor/.idea/[NanoForge] Engine Core.iml b/packages/core-editor/.idea/[NanoForge] Engine Core.iml
new file mode 100644
index 00000000..24643cc3
--- /dev/null
+++ b/packages/core-editor/.idea/[NanoForge] Engine Core.iml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/packages/core-editor/.idea/codeStyles/Project.xml b/packages/core-editor/.idea/codeStyles/Project.xml
new file mode 100644
index 00000000..b70d7533
--- /dev/null
+++ b/packages/core-editor/.idea/codeStyles/Project.xml
@@ -0,0 +1,57 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/packages/core-editor/.idea/codeStyles/codeStyleConfig.xml b/packages/core-editor/.idea/codeStyles/codeStyleConfig.xml
new file mode 100644
index 00000000..79ee123c
--- /dev/null
+++ b/packages/core-editor/.idea/codeStyles/codeStyleConfig.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/packages/core-editor/.idea/git_toolbox_blame.xml b/packages/core-editor/.idea/git_toolbox_blame.xml
new file mode 100644
index 00000000..7dc12496
--- /dev/null
+++ b/packages/core-editor/.idea/git_toolbox_blame.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/packages/core-editor/.idea/git_toolbox_prj.xml b/packages/core-editor/.idea/git_toolbox_prj.xml
new file mode 100644
index 00000000..02b915b8
--- /dev/null
+++ b/packages/core-editor/.idea/git_toolbox_prj.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/packages/core-editor/.idea/inspectionProfiles/Project_Default.xml b/packages/core-editor/.idea/inspectionProfiles/Project_Default.xml
new file mode 100644
index 00000000..03d9549e
--- /dev/null
+++ b/packages/core-editor/.idea/inspectionProfiles/Project_Default.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/packages/core-editor/.idea/jsLinters/eslint.xml b/packages/core-editor/.idea/jsLinters/eslint.xml
new file mode 100644
index 00000000..541945bb
--- /dev/null
+++ b/packages/core-editor/.idea/jsLinters/eslint.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/packages/core-editor/.idea/modules.xml b/packages/core-editor/.idea/modules.xml
new file mode 100644
index 00000000..99922e22
--- /dev/null
+++ b/packages/core-editor/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/packages/core-editor/.idea/prettier.xml b/packages/core-editor/.idea/prettier.xml
new file mode 100644
index 00000000..0c83ac4e
--- /dev/null
+++ b/packages/core-editor/.idea/prettier.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/packages/core-editor/.idea/vcs.xml b/packages/core-editor/.idea/vcs.xml
new file mode 100644
index 00000000..b2bdec2d
--- /dev/null
+++ b/packages/core-editor/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/packages/core-editor/.nvmrc b/packages/core-editor/.nvmrc
new file mode 100644
index 00000000..c519bf5b
--- /dev/null
+++ b/packages/core-editor/.nvmrc
@@ -0,0 +1 @@
+v24.11.0
diff --git a/packages/core-editor/.prettierignore b/packages/core-editor/.prettierignore
new file mode 100644
index 00000000..64b127c9
--- /dev/null
+++ b/packages/core-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/core-editor/CHANGELOG.md b/packages/core-editor/CHANGELOG.md
new file mode 100644
index 00000000..1d7fb605
--- /dev/null
+++ b/packages/core-editor/CHANGELOG.md
@@ -0,0 +1,59 @@
+# Changelog
+
+All notable changes to this project will be documented in this file.
+
+# [@nanoforge-dev/core@1.0.1](https://github.com/NanoForge-dev/Engine/compare/@nanoforge-dev/core@1.0.0...@nanoforge-dev/core@1.0.1) - (2026-02-16)
+
+## Documentation
+
+- Setup typedoc (#192) ([fa908e7](https://github.com/NanoForge-dev/Engine/commit/fa908e7e268fa1770be58fc62a0257f3760480b2)) by @MartinFillon
+- Fix readme badges (#186) ([fd8d93d](https://github.com/NanoForge-dev/Engine/commit/fd8d93d13a0fbad95ef9952acd10faad9e112c78)) by @Exeloo
+
+# [@nanoforge-dev/core@1.0.0](https://github.com/NanoForge-dev/Engine/tree/@nanoforge-dev/core@1.0.0) - (2026-01-09)
+
+## Bug Fixes
+
+- **graphics:** Game loop ([53329d2](https://github.com/NanoForge-dev/Engine/commit/53329d28c47bfac9fe86259e9fc6f42b206062a8)) by @Exeloo
+- **graphics:** Fix display ([d8522e5](https://github.com/NanoForge-dev/Engine/commit/d8522e56678f3bd136733f7941c1d917c18b1400)) by @Exeloo
+- **ecs:** Fix tests ([d33ada5](https://github.com/NanoForge-dev/Engine/commit/d33ada5d9c37e331b8178aa1fc0daee88b07131c)) by @Exeloo
+- **ecs:** Change type handling on lib ecs ([580192d](https://github.com/NanoForge-dev/Engine/commit/580192d5038f386c965434f78aacdf3d1e399ff8)) by @Exeloo
+
+## Documentation
+
+- Update README files with new structure and detailed usage examples for all packages (#157) ([63fab73](https://github.com/NanoForge-dev/Engine/commit/63fab7326bd9c7e6b00f950694ab16c9d9190c53)) by @Exeloo
+- Add funding (#147) ([7301fad](https://github.com/NanoForge-dev/Engine/commit/7301fad10f59b7e1f7fa788f8a2f6fc81d0db72e)) by @Exeloo
+- Add a basic introduction readme ([b240964](https://github.com/NanoForge-dev/Engine/commit/b240964a265b31769a8c5422e23e20156ba56192)) by @MartinFillon
+- Add building and dependency docs to every readme ([2d4785b](https://github.com/NanoForge-dev/Engine/commit/2d4785bdcb455e83337b37540f9ab6b3394c0850)) by @MartinFillon
+
+## Features
+
+- **packages/network:** Client and server for tcp/udp and networked pong as example (#156) ([839fb95](https://github.com/NanoForge-dev/Engine/commit/839fb95449f6ae0ee66d7f7e279374268b743f65)) by @Tchips46
+- **core:** Add client/server distinction and update rendering logic (#119) ([5271432](https://github.com/NanoForge-dev/Engine/commit/5271432710031396d7e433bfdfb015e3871f69d0)) by @Exeloo
+- Add schematics used types (#102) ([b992306](https://github.com/NanoForge-dev/Engine/commit/b9923064ba1da3164b1739fcdec5a819734c4ba2)) by @Exeloo
+- **core:** Introduce `EditableApplicationContext` for managing sound libraries ([6c7bac2](https://github.com/NanoForge-dev/Engine/commit/6c7bac261eeb7ad79203d5695d5ad76dc9e9e9f5)) by @Exeloo
+- **core:** Add Context that admit a ClientLibraryManager ([3835bc8](https://github.com/NanoForge-dev/Engine/commit/3835bc8a6e6d039f11a513b7fe54c353f90e9fe1)) by @Exeloo
+- **music:** Finish music library and add an interface for mutable libraries ([8e00c5d](https://github.com/NanoForge-dev/Engine/commit/8e00c5d00f2901ada86f59667eff7e5d3446076b)) by @MartinFillon
+- **core:** Add `class-transformer` and `class-validator` dependencies for validation utilities ([fd94fe7](https://github.com/NanoForge-dev/Engine/commit/fd94fe7755999c5529335666720899792a691a36)) by @Exeloo
+- **common, core, config:** Introduce configuration registry and validation system ([4fafb82](https://github.com/NanoForge-dev/Engine/commit/4fafb82576fec6866fc281ad5b10321d2ac430df)) by @Exeloo
+- **core:** Enhance type safety and execution context handling ([d986030](https://github.com/NanoForge-dev/Engine/commit/d986030a333bc08d2e37291d1a023cf8d7a6e1d6)) by @Exeloo
+- **app:** Add the ability to mute and unmute sounds ([947bdc0](https://github.com/NanoForge-dev/Engine/commit/947bdc00784a4c3313fe08feb4f91fc91b3ac7b7)) by @MartinFillon
+- **sound:** Add basic sound playing to example ([7335814](https://github.com/NanoForge-dev/Engine/commit/7335814fc532ee92a5f9d776f409c5faa4d56423)) by @MartinFillon
+- **core:** Add default libraries to constructor ([7d9da69](https://github.com/NanoForge-dev/Engine/commit/7d9da69be4301875020176656276236b88b737f1)) by @Exeloo
+- Add dependencies handling ([e51dd3b](https://github.com/NanoForge-dev/Engine/commit/e51dd3bdb5e2e3de21339bf6218e85f935efb9d5)) by @Exeloo
+- **common:** Add dependencies handler ([edb098a](https://github.com/NanoForge-dev/Engine/commit/edb098a65fb932ba9a9532a9b1eee7d64a7a8f0d)) by @Exeloo
+- **core:** Add tickrate and fix runner ([1dba5bd](https://github.com/NanoForge-dev/Engine/commit/1dba5bd89ffa20dfd29b079f93c3eb923ffbdbbc)) by @Exeloo
+- **input:** Add input library ([387e97d](https://github.com/NanoForge-dev/Engine/commit/387e97d7c3015a869947af4acecf48e8e1b0e2b8)) by @Exeloo
+- **game:** Create pong example game ([4b66674](https://github.com/NanoForge-dev/Engine/commit/4b66674c750f345e860d225384054423433beb07)) by @bill-h4rper
+- **game:** Add width and height ([c93c985](https://github.com/NanoForge-dev/Engine/commit/c93c985665bd99c09bc410f1499d11aeaffe3c4c)) by @Exeloo
+- **game:** Add graphics factory ([0f4453c](https://github.com/NanoForge-dev/Engine/commit/0f4453ced908b39e953a672324e97eba82bfeaa3)) by @Exeloo
+- **asset-manager:** Add asset manager ([1774a26](https://github.com/NanoForge-dev/Engine/commit/1774a26593099b4faa0a2527d1684de35211d5d2)) by @Exeloo
+- Add asset manager default in core ([26cc5a9](https://github.com/NanoForge-dev/Engine/commit/26cc5a99e014fbc8669a43cc4aa4d78ecc1dee14)) by @Exeloo
+- Add core and common ([1755c79](https://github.com/NanoForge-dev/Engine/commit/1755c799c143513d72b28edaac875267d484a44f)) by @Exeloo
+- Initial commit ([c9bb59e](https://github.com/NanoForge-dev/Engine/commit/c9bb59ee963e7b444e8668db55597915e9ef0e4b)) by @Exeloo
+
+## Refactor
+
+- **core:** Remove default libs in factory (#118) ([fa893c7](https://github.com/NanoForge-dev/Engine/commit/fa893c71616f151343c2f52a4723a64cca65814a)) by @Exeloo
+- Migrate namespaces to `@nanoforge-dev` and update related imports ([c84c927](https://github.com/NanoForge-dev/Engine/commit/c84c927ead941d914e5a9fd752fd3a5ac969f981)) by @Exeloo
+- **libraries:** Implement initialization validation and standardize nullable fields ([8b04575](https://github.com/NanoForge-dev/Engine/commit/8b04575cf7f649a440b8f40ad6114414406b0c1a)) by @Exeloo
+
diff --git a/packages/core-editor/LICENSE b/packages/core-editor/LICENSE
new file mode 100644
index 00000000..62c6400b
--- /dev/null
+++ b/packages/core-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/core-editor/README.md b/packages/core-editor/README.md
new file mode 100644
index 00000000..f114fe2e
--- /dev/null
+++ b/packages/core-editor/README.md
@@ -0,0 +1,68 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+## About
+
+`@nanoforge-dev/core` is a core package that contains game main loop. It is used to initialize the game and run it.
+
+## Installation
+
+**Node.js 24.11.0 or newer is required.**
+
+```sh
+npm install @nanoforge-dev/core
+yarn add @nanoforge-dev/core
+pnpm add @nanoforge-dev/core
+bun add @nanoforge-dev/core
+```
+
+## Example usage
+
+Initialize the game in your main file.
+
+```ts
+import { type IRunOptions } from "@nanoforge-dev/common";
+import { NanoforgeFactory } from "@nanoforge-dev/core";
+
+export async function main(options: IRunClientOptions) {
+ const app = NanoforgeFactory.createClient();
+
+ await app.init(options);
+
+ 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/core
+[npm]: https://www.npmjs.com/package/@nanoforge-dev/core
+[contributing]: https://github.com/NanoForge-dev/Engine/blob/main/.github/CONTRIBUTING.md
diff --git a/packages/core-editor/cliff.toml b/packages/core-editor/cliff.toml
new file mode 100644
index 00000000..59978d4c
--- /dev/null
+++ b/packages/core-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 = "@nanoforge-dev/core@[0-9]*"
+ignore_tags = ""
+topo_order = false
+sort_commits = "newest"
+
+[remote.github]
+owner = "NanoForge-dev"
+repo = "Engine"
diff --git a/packages/core-editor/eslint.config.js b/packages/core-editor/eslint.config.js
new file mode 100644
index 00000000..62ec06dc
--- /dev/null
+++ b/packages/core-editor/eslint.config.js
@@ -0,0 +1,3 @@
+import config from "@nanoforge-dev/utils-eslint-config";
+
+export default config;
diff --git a/packages/core-editor/package.json b/packages/core-editor/package.json
new file mode 100644
index 00000000..90e0540a
--- /dev/null
+++ b/packages/core-editor/package.json
@@ -0,0 +1,91 @@
+{
+ "$schema": "https://json.schemastore.org/package.json",
+ "name": "@nanoforge-dev/core-editor",
+ "version": "1.0",
+ "description": "NanoForge Engine - Core 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/core-editor"
+ },
+ "funding": "https://github.com/NanoForge-dev/Engine?sponsor",
+ "scripts": {
+ "build": "tsc --noEmit && tsup",
+ "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/core-editor/*'",
+ "release": "cliff-jumper"
+ },
+ "dependencies": {
+ "@nanoforge-dev/asset-manager": "workspace:*",
+ "@nanoforge-dev/common": "workspace:*",
+ "@nanoforge-dev/input": "workspace:*",
+ "class-transformer": "catalog:config",
+ "class-validator": "catalog:config"
+ },
+ "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",
+ "tsup": "catalog:build",
+ "typescript": "catalog:core",
+ "vitest": "catalog:test"
+ },
+ "packageManager": "pnpm@10.29.3",
+ "engines": {
+ "node": "25"
+ },
+ "publishConfig": {
+ "access": "public"
+ },
+ "lint-staged": {
+ "**": [
+ "prettier --ignore-unknown --write"
+ ],
+ "src/**/*.ts": [
+ "eslint --fix"
+ ]
+ }
+}
diff --git a/packages/core-editor/prettier.config.js b/packages/core-editor/prettier.config.js
new file mode 100644
index 00000000..27d0e269
--- /dev/null
+++ b/packages/core-editor/prettier.config.js
@@ -0,0 +1,3 @@
+import config from "@nanoforge-dev/utils-prettier-config";
+
+export default config;
diff --git a/packages/core-editor/src/application/application-config.ts b/packages/core-editor/src/application/application-config.ts
new file mode 100644
index 00000000..82d28bed
--- /dev/null
+++ b/packages/core-editor/src/application/application-config.ts
@@ -0,0 +1,89 @@
+import {
+ type IAssetManagerLibrary,
+ type IComponentSystemLibrary,
+ type IGraphicsLibrary,
+ type IInputLibrary,
+ type ILibrary,
+ type IMusicLibrary,
+ type INetworkLibrary,
+ type ISoundLibrary,
+ type LibraryHandle,
+} from "@nanoforge-dev/common";
+
+import { EditableLibraryManager } from "../common/library/manager/library.manager";
+
+export class ApplicationConfig {
+ private readonly _libraryManager: EditableLibraryManager;
+
+ constructor() {
+ this._libraryManager = new EditableLibraryManager();
+ }
+
+ get libraryManager(): EditableLibraryManager {
+ return this._libraryManager;
+ }
+
+ public getLibrary(sym: symbol): LibraryHandle {
+ return this._libraryManager.get(sym);
+ }
+
+ public useLibrary(sym: symbol, library: ILibrary): void {
+ this._libraryManager.set(sym, library);
+ }
+
+ public getComponentSystemLibrary() {
+ return this._libraryManager.getComponentSystem();
+ }
+
+ public useComponentSystemLibrary(library: IComponentSystemLibrary) {
+ this._libraryManager.setComponentSystem(library);
+ }
+
+ public getGraphicsLibrary() {
+ return this._libraryManager.getGraphics();
+ }
+
+ public useGraphicsLibrary(library: IGraphicsLibrary) {
+ this._libraryManager.setGraphics(library);
+ }
+
+ public getNetworkLibrary() {
+ return this._libraryManager.getNetwork();
+ }
+
+ public useNetworkLibrary(library: INetworkLibrary) {
+ this._libraryManager.setNetwork(library);
+ }
+
+ public getAssetManagerLibrary() {
+ return this._libraryManager.getAssetManager();
+ }
+
+ public useAssetManagerLibrary(library: IAssetManagerLibrary) {
+ this._libraryManager.setAssetManager(library);
+ }
+
+ public getInputLibrary() {
+ return this._libraryManager.getInput();
+ }
+
+ public useInputLibrary(library: IInputLibrary) {
+ this._libraryManager.setInput(library);
+ }
+
+ public getSoundLibrary() {
+ return this._libraryManager.getSound();
+ }
+
+ public useSoundLibrary(library: ISoundLibrary) {
+ this._libraryManager.setSound(library);
+ }
+
+ public getMusicLibrary() {
+ return this._libraryManager.getMusic();
+ }
+
+ public useMusicLibrary(library: IMusicLibrary) {
+ this._libraryManager.setMusic(library);
+ }
+}
diff --git a/packages/core-editor/src/application/application-options.type.ts b/packages/core-editor/src/application/application-options.type.ts
new file mode 100644
index 00000000..57ecc833
--- /dev/null
+++ b/packages/core-editor/src/application/application-options.type.ts
@@ -0,0 +1,3 @@
+export interface IApplicationOptions {
+ tickRate: number;
+}
diff --git a/packages/core-editor/src/application/nanoforge-application.ts b/packages/core-editor/src/application/nanoforge-application.ts
new file mode 100644
index 00000000..b35db5ae
--- /dev/null
+++ b/packages/core-editor/src/application/nanoforge-application.ts
@@ -0,0 +1,57 @@
+import {
+ type IAssetManagerLibrary,
+ type IComponentSystemLibrary,
+ type IEditorRunOptions,
+ type ILibrary,
+ type INetworkLibrary,
+ NfNotInitializedException,
+} from "@nanoforge-dev/common";
+
+import { EditableApplicationContext } from "../common/context/contexts/application.editable-context";
+import { Core } from "../core/core";
+import { ApplicationConfig } from "./application-config";
+import type { IApplicationOptions } from "./application-options.type";
+
+export abstract class NanoforgeApplication {
+ protected applicationConfig: ApplicationConfig;
+ private _core?: Core;
+ private readonly _options: IApplicationOptions;
+
+ constructor(options?: Partial) {
+ this.applicationConfig = new ApplicationConfig();
+
+ this._options = {
+ tickRate: 60,
+ ...(options ?? {}),
+ };
+ }
+
+ public use(sym: symbol, library: ILibrary): void {
+ this.applicationConfig.useLibrary(sym, library);
+ }
+
+ public useComponentSystem(library: IComponentSystemLibrary) {
+ this.applicationConfig.useComponentSystemLibrary(library);
+ }
+
+ public useNetwork(library: INetworkLibrary) {
+ this.applicationConfig.useNetworkLibrary(library);
+ }
+
+ public useAssetManager(library: IAssetManagerLibrary) {
+ this.applicationConfig.useAssetManagerLibrary(library);
+ }
+
+ public init(options: IEditorRunOptions): Promise {
+ this._core = new Core(
+ this.applicationConfig,
+ new EditableApplicationContext(this.applicationConfig.libraryManager),
+ );
+ return this._core.init(options, this._options);
+ }
+
+ public run() {
+ if (!this._core) throw new NfNotInitializedException("Core");
+ return this._core?.run();
+ }
+}
diff --git a/packages/core-editor/src/application/nanoforge-client.ts b/packages/core-editor/src/application/nanoforge-client.ts
new file mode 100644
index 00000000..1ddfe4ac
--- /dev/null
+++ b/packages/core-editor/src/application/nanoforge-client.ts
@@ -0,0 +1,21 @@
+import {
+ type IGraphicsLibrary,
+ type IInputLibrary,
+ type ISoundLibrary,
+} from "@nanoforge-dev/common";
+
+import { NanoforgeApplication } from "./nanoforge-application";
+
+export class NanoforgeClient extends NanoforgeApplication {
+ public useGraphics(library: IGraphicsLibrary) {
+ this.applicationConfig.useGraphicsLibrary(library);
+ }
+
+ public useInput(library: IInputLibrary) {
+ this.applicationConfig.useInputLibrary(library);
+ }
+
+ public useSound(library: ISoundLibrary) {
+ this.applicationConfig.useSoundLibrary(library);
+ }
+}
diff --git a/packages/core-editor/src/application/nanoforge-factory.ts b/packages/core-editor/src/application/nanoforge-factory.ts
new file mode 100644
index 00000000..84711a6d
--- /dev/null
+++ b/packages/core-editor/src/application/nanoforge-factory.ts
@@ -0,0 +1,15 @@
+import { type IApplicationOptions } from "./application-options.type";
+import { NanoforgeClient } from "./nanoforge-client";
+import { NanoforgeServer } from "./nanoforge-server";
+
+class NanoforgeFactoryStatic {
+ createClient(options?: Partial): NanoforgeClient {
+ return new NanoforgeClient(options);
+ }
+
+ createServer(options?: Partial): NanoforgeServer {
+ return new NanoforgeServer(options);
+ }
+}
+
+export const NanoforgeFactory = new NanoforgeFactoryStatic();
diff --git a/packages/core-editor/src/application/nanoforge-server.ts b/packages/core-editor/src/application/nanoforge-server.ts
new file mode 100644
index 00000000..74cca8a8
--- /dev/null
+++ b/packages/core-editor/src/application/nanoforge-server.ts
@@ -0,0 +1,3 @@
+import { NanoforgeApplication } from "./nanoforge-application";
+
+export class NanoforgeServer extends NanoforgeApplication {}
diff --git a/packages/core-editor/src/common/context/contexts/application.editable-context.ts b/packages/core-editor/src/common/context/contexts/application.editable-context.ts
new file mode 100644
index 00000000..492b797e
--- /dev/null
+++ b/packages/core-editor/src/common/context/contexts/application.editable-context.ts
@@ -0,0 +1,20 @@
+import { ApplicationContext } from "@nanoforge-dev/common";
+
+import { type EditableLibraryManager } from "../../library/manager/library.manager";
+
+export class EditableApplicationContext extends ApplicationContext {
+ private _libraryManager: EditableLibraryManager;
+
+ constructor(libraryManager: EditableLibraryManager) {
+ super();
+ this._libraryManager = libraryManager;
+ }
+
+ setDelta(delta: number) {
+ this._delta = delta;
+ }
+
+ muteSoundLibraries(): void {
+ this._libraryManager.getMutableLibraries().forEach((lib) => lib.library.mute());
+ }
+}
diff --git a/packages/core-editor/src/common/context/contexts/executions/clear.editable-context.ts b/packages/core-editor/src/common/context/contexts/executions/clear.editable-context.ts
new file mode 100644
index 00000000..1081686d
--- /dev/null
+++ b/packages/core-editor/src/common/context/contexts/executions/clear.editable-context.ts
@@ -0,0 +1,3 @@
+import { ClearContext } from "@nanoforge-dev/common";
+
+export class EditableClearContext extends ClearContext {}
diff --git a/packages/core-editor/src/common/context/contexts/executions/execution.editable-context.ts b/packages/core-editor/src/common/context/contexts/executions/execution.editable-context.ts
new file mode 100644
index 00000000..e9b5b3de
--- /dev/null
+++ b/packages/core-editor/src/common/context/contexts/executions/execution.editable-context.ts
@@ -0,0 +1,3 @@
+import { ExecutionContext } from "@nanoforge-dev/common";
+
+export class EditableExecutionContext extends ExecutionContext {}
diff --git a/packages/core-editor/src/common/context/contexts/executions/init.editable-context.ts b/packages/core-editor/src/common/context/contexts/executions/init.editable-context.ts
new file mode 100644
index 00000000..7ce44e10
--- /dev/null
+++ b/packages/core-editor/src/common/context/contexts/executions/init.editable-context.ts
@@ -0,0 +1,3 @@
+import { InitContext } from "@nanoforge-dev/common";
+
+export class EditableInitContext extends InitContext {}
diff --git a/packages/core-editor/src/common/context/contexts/library.editable-context.ts b/packages/core-editor/src/common/context/contexts/library.editable-context.ts
new file mode 100644
index 00000000..48f942e8
--- /dev/null
+++ b/packages/core-editor/src/common/context/contexts/library.editable-context.ts
@@ -0,0 +1,7 @@
+import { LibraryContext, type LibraryStatusEnum } from "@nanoforge-dev/common";
+
+export class EditableLibraryContext extends LibraryContext {
+ setStatus(status: LibraryStatusEnum) {
+ this._status = status;
+ }
+}
diff --git a/packages/core-editor/src/common/library/manager/library.manager.ts b/packages/core-editor/src/common/library/manager/library.manager.ts
new file mode 100644
index 00000000..6e17b321
--- /dev/null
+++ b/packages/core-editor/src/common/library/manager/library.manager.ts
@@ -0,0 +1,106 @@
+import {
+ ASSET_MANAGER_LIBRARY,
+ COMPONENT_SYSTEM_LIBRARY,
+ DefaultLibrariesEnum,
+ GRAPHICS_LIBRARY,
+ type IAssetManagerLibrary,
+ type IComponentSystemLibrary,
+ type IGraphicsLibrary,
+ type IInputLibrary,
+ type ILibrary,
+ type IMusicLibrary,
+ type IMutableLibrary,
+ INPUT_LIBRARY,
+ type INetworkLibrary,
+ type IRunnerLibrary,
+ type ISoundLibrary,
+ type LibraryHandle,
+ LibraryManager,
+ MUSIC_LIBRARY,
+ NETWORK_LIBRARY,
+ SOUND_LIBRARY,
+} from "@nanoforge-dev/common";
+
+import { EditableLibraryContext } from "../../context/contexts/library.editable-context";
+import { Relationship } from "../relationship-functions";
+
+const hasMethod = (obj: any, method: string) => {
+ return typeof obj[method] === "function";
+};
+
+export class EditableLibraryManager extends LibraryManager {
+ public set(sym: symbol, library: ILibrary) {
+ this.setNewLibrary(sym, library, new EditableLibraryContext());
+ }
+
+ public setComponentSystem(library: IComponentSystemLibrary): void {
+ this._set(
+ DefaultLibrariesEnum.COMPONENT_SYSTEM,
+ COMPONENT_SYSTEM_LIBRARY,
+ library,
+ new EditableLibraryContext(),
+ );
+ }
+
+ public setGraphics(library: IGraphicsLibrary): void {
+ this._set(
+ DefaultLibrariesEnum.GRAPHICS,
+ GRAPHICS_LIBRARY,
+ library,
+ new EditableLibraryContext(),
+ );
+ }
+
+ public setAssetManager(library: IAssetManagerLibrary): void {
+ this._set(
+ DefaultLibrariesEnum.ASSET_MANAGER,
+ ASSET_MANAGER_LIBRARY,
+ library,
+ new EditableLibraryContext(),
+ );
+ }
+
+ public setNetwork(library: INetworkLibrary): void {
+ this._set(DefaultLibrariesEnum.NETWORK, NETWORK_LIBRARY, library, new EditableLibraryContext());
+ }
+
+ public setInput(library: IInputLibrary): void {
+ this._set(DefaultLibrariesEnum.INPUT, INPUT_LIBRARY, library, new EditableLibraryContext());
+ }
+
+ public setSound(library: ISoundLibrary): void {
+ this._set(DefaultLibrariesEnum.SOUND, SOUND_LIBRARY, library, new EditableLibraryContext());
+ }
+
+ public setMusic(library: IMusicLibrary): void {
+ this._set(DefaultLibrariesEnum.MUSIC, MUSIC_LIBRARY, library, new EditableLibraryContext());
+ }
+
+ public getLibraries(): LibraryHandle[] {
+ return this._libraries;
+ }
+
+ public getInitLibraries(): LibraryHandle[] {
+ return Relationship.getLibrariesByDependencies(this._libraries);
+ }
+
+ public getExecutionLibraries(): LibraryHandle[] {
+ return Relationship.getLibrariesByRun(this._getRunnerLibraries());
+ }
+
+ public getClearLibraries(): LibraryHandle[] {
+ return Relationship.getLibrariesByDependencies(this._libraries, true);
+ }
+
+ public getMutableLibraries(): LibraryHandle[] {
+ return this._libraries.filter(
+ (handle) => handle && hasMethod(handle.library, "mute"),
+ ) as LibraryHandle[];
+ }
+
+ private _getRunnerLibraries(): LibraryHandle[] {
+ return this._libraries.filter(
+ (handle) => handle && hasMethod(handle.library, "__run"),
+ ) as LibraryHandle[];
+ }
+}
diff --git a/packages/core-editor/src/common/library/relationship-functions.ts b/packages/core-editor/src/common/library/relationship-functions.ts
new file mode 100644
index 00000000..d9ff0f2b
--- /dev/null
+++ b/packages/core-editor/src/common/library/relationship-functions.ts
@@ -0,0 +1,122 @@
+import { type ILibrary, type LibraryHandle } from "@nanoforge-dev/common";
+
+class RelationshipStatic {
+ getLibrariesByDependencies(libraries: LibraryHandle[], reverse: boolean = false) {
+ let response: LibraryHandle[] = [];
+ for (const library of libraries) {
+ if (!library) continue;
+ response = this._pushLibraryWithDependencies(library, response, [], libraries);
+ }
+
+ if (reverse) return response.reverse();
+ return response;
+ }
+
+ getLibrariesByRun(libraries: LibraryHandle[]) {
+ let response: LibraryHandle[] = [];
+ const dependencies = new Map>(
+ libraries.map((library) => [library.symbol, new Set()]),
+ );
+
+ for (const handle of libraries) {
+ const key = handle.symbol;
+
+ for (const before of handle.library.__relationship.runBefore) {
+ this._pushToDependencies(key, before, dependencies);
+ }
+ for (const after of handle.library.__relationship.runAfter) {
+ this._pushToDependencies(after, key, dependencies);
+ }
+ }
+
+ for (const library of libraries) {
+ response = this._pushLibraryWithDependenciesRun(
+ library,
+ dependencies,
+ response,
+ [],
+ libraries,
+ );
+ }
+ return response;
+ }
+
+ private _pushToDependencies(
+ key: symbol,
+ value: symbol,
+ dependencies: Map>,
+ ): void {
+ let curr = dependencies.get(key);
+ if (!curr) curr = new Set();
+ curr.add(value);
+ dependencies.set(key, curr);
+ }
+
+ private _pushLibraryWithDependenciesRun(
+ handle: LibraryHandle,
+ dependencies: Map>,
+ response: LibraryHandle[],
+ cache: symbol[],
+ libraries: LibraryHandle[],
+ ): LibraryHandle[] {
+ const key = handle.symbol;
+ if (this._symbolIsInList(key, response)) return response;
+
+ if (cache.includes(key)) throw new Error("Circular dependencies !");
+
+ cache.push(key);
+
+ const deps = dependencies.get(key);
+ if (!deps) throw new Error("Dependencies not found");
+
+ for (const dep of deps) {
+ if (this._symbolIsInList(dep, response)) continue;
+
+ const depHandle = libraries.find((lib) => lib?.symbol === dep) as LibraryHandle;
+ if (!depHandle) throw new Error(`Cannot find library ${dep.toString()}`);
+
+ response = this._pushLibraryWithDependenciesRun(
+ depHandle,
+ dependencies,
+ response,
+ cache,
+ libraries,
+ );
+ }
+ cache.pop();
+
+ response.push(handle);
+ return response;
+ }
+
+ private _pushLibraryWithDependencies(
+ handle: LibraryHandle,
+ response: LibraryHandle[],
+ cache: symbol[],
+ libraries: LibraryHandle[],
+ ): LibraryHandle[] {
+ if (this._symbolIsInList(handle.symbol, response)) return response;
+
+ if (cache.includes(handle.symbol)) throw new Error("Circular dependencies !");
+
+ cache.push(handle.symbol);
+ for (const dep of handle.library.__relationship.dependencies) {
+ if (this._symbolIsInList(dep, response)) continue;
+
+ const depHandle = libraries.find((lib) => lib?.symbol === dep) as LibraryHandle;
+ if (!depHandle) throw new Error(`Cannot find library ${dep.toString()}`);
+
+ response = this._pushLibraryWithDependencies(depHandle, response, cache, libraries);
+ }
+ cache.pop();
+
+ response.push(handle);
+ return response;
+ }
+
+ private _symbolIsInList(sym: symbol, libraries: LibraryHandle[]): boolean {
+ return libraries.some((lib) => lib.symbol === sym);
+ }
+}
+
+export const Relationship = new RelationshipStatic();
diff --git a/packages/core-editor/src/config/config-registry.ts b/packages/core-editor/src/config/config-registry.ts
new file mode 100644
index 00000000..946ed1dc
--- /dev/null
+++ b/packages/core-editor/src/config/config-registry.ts
@@ -0,0 +1,19 @@
+import { plainToInstance } from "class-transformer";
+import { validate } from "class-validator";
+
+export class ConfigRegistry {
+ private readonly _env: Record;
+
+ constructor(env: Record) {
+ this._env = env;
+ }
+
+ async registerConfig(config: new () => T): Promise {
+ const data = plainToInstance(config, this._env, { excludeExtraneousValues: true });
+ const errors = await validate(data);
+ if (errors.length > 0) {
+ throw new Error(errors.toString());
+ }
+ return data;
+ }
+}
diff --git a/packages/core-editor/src/core/core.ts b/packages/core-editor/src/core/core.ts
new file mode 100644
index 00000000..3d9d15d1
--- /dev/null
+++ b/packages/core-editor/src/core/core.ts
@@ -0,0 +1,104 @@
+import {
+ ClearContext,
+ ClientLibraryManager,
+ Context,
+ type IEditorRunOptions,
+ type IRunnerLibrary,
+ InitContext,
+ type LibraryHandle,
+ LibraryStatusEnum,
+ NfNotInitializedException,
+} from "@nanoforge-dev/common";
+
+import { type ApplicationConfig } from "../application/application-config";
+import type { IApplicationOptions } from "../application/application-options.type";
+import { type EditableApplicationContext } from "../common/context/contexts/application.editable-context";
+import { EditableExecutionContext } from "../common/context/contexts/executions/execution.editable-context";
+import { type EditableLibraryContext } from "../common/context/contexts/library.editable-context";
+import { ConfigRegistry } from "../config/config-registry";
+
+export class Core {
+ private readonly config: ApplicationConfig;
+ private readonly context: EditableApplicationContext;
+ private options?: IApplicationOptions;
+ private _configRegistry?: ConfigRegistry;
+
+ constructor(config: ApplicationConfig, context: EditableApplicationContext) {
+ this.config = config;
+ this.context = context;
+ }
+
+ public async init(options: IEditorRunOptions, appOptions: IApplicationOptions): Promise {
+ this.options = appOptions;
+ this._configRegistry = new ConfigRegistry(options.env);
+ await this.runInit(this.getInitContext(options));
+ }
+
+ public async run(): Promise {
+ if (!this.options) throw new NfNotInitializedException("Core");
+
+ const context = this.getExecutionContext();
+ const clientContext = this.getClientContext();
+ const libraries = this.config.libraryManager.getExecutionLibraries();
+
+ const runner = async (delta: number) => {
+ this.context.setDelta(delta);
+ await this.runExecute(clientContext, libraries);
+ };
+
+ const tickLengthMs = 1000 / this.options.tickRate;
+ let previousTick = Date.now();
+
+ const render = async () => {
+ if (!context.application.isRunning) {
+ await this.runClear(this.getClearContext());
+ return;
+ }
+ const tickStart = Date.now();
+ await runner(tickStart - previousTick);
+ previousTick = tickStart;
+ setTimeout(render, tickLengthMs + tickStart - Date.now());
+ };
+
+ context.application.setIsRunning(true);
+ setTimeout(render);
+ }
+
+ private getInitContext(options: IEditorRunOptions): InitContext {
+ if (!this._configRegistry) throw new NfNotInitializedException("Core");
+
+ return new InitContext(this.context, this.config.libraryManager, this._configRegistry, options);
+ }
+
+ private getExecutionContext(): EditableExecutionContext {
+ return new EditableExecutionContext(this.context, this.config.libraryManager);
+ }
+
+ private getClearContext(): ClearContext {
+ return new ClearContext(this.context, this.config.libraryManager);
+ }
+
+ private getClientContext(): Context {
+ return new Context(this.context, new ClientLibraryManager(this.config.libraryManager));
+ }
+
+ private async runInit(context: InitContext): Promise {
+ for (const handle of this.config.libraryManager.getInitLibraries()) {
+ await handle.library.__init(context);
+ (handle.context as EditableLibraryContext).setStatus(LibraryStatusEnum.LOADED);
+ }
+ }
+
+ private async runExecute(context: Context, libraries: LibraryHandle[]) {
+ for (const handle of libraries) {
+ await handle.library.__run(context);
+ }
+ }
+
+ private async runClear(context: ClearContext) {
+ for (const handle of this.config.libraryManager.getClearLibraries()) {
+ await handle.library.__clear(context);
+ (handle.context as EditableLibraryContext).setStatus(LibraryStatusEnum.CLEAR);
+ }
+ }
+}
diff --git a/packages/core-editor/src/index.ts b/packages/core-editor/src/index.ts
new file mode 100644
index 00000000..4273d62e
--- /dev/null
+++ b/packages/core-editor/src/index.ts
@@ -0,0 +1,4 @@
+export * from "./application/nanoforge-factory";
+
+export type { NanoforgeClient } from "./application/nanoforge-client";
+export type { NanoforgeServer } from "./application/nanoforge-server";
diff --git a/packages/core-editor/test/config-registry.spec.ts b/packages/core-editor/test/config-registry.spec.ts
new file mode 100644
index 00000000..0a1e2844
--- /dev/null
+++ b/packages/core-editor/test/config-registry.spec.ts
@@ -0,0 +1,54 @@
+import { Expose } from "class-transformer";
+import { IsString } from "class-validator";
+import { describe, expect, it } from "vitest";
+
+import { ConfigRegistry } from "../src/config/config-registry";
+
+class ValidConfig {
+ @Expose()
+ @IsString()
+ name!: string;
+}
+
+class OptionalConfig {
+ @Expose()
+ @IsString()
+ name!: string;
+
+ @Expose()
+ host?: string;
+}
+
+describe("ConfigRegistry", () => {
+ describe("registerConfig", () => {
+ it("should return a transformed config instance when env is valid", async () => {
+ const registry = new ConfigRegistry({ name: "hello" });
+ const config = await registry.registerConfig(ValidConfig);
+ expect(config).toBeInstanceOf(ValidConfig);
+ expect(config.name).toBe("hello");
+ });
+
+ it("should exclude values not decorated with @Expose", async () => {
+ const registry = new ConfigRegistry({ name: "hello", extra: "ignored" });
+ const config = await registry.registerConfig(ValidConfig);
+ expect((config as any)["extra"]).toBeUndefined();
+ });
+
+ it("should throw when a required field is missing", async () => {
+ const registry = new ConfigRegistry({});
+ await expect(registry.registerConfig(ValidConfig)).rejects.toThrow();
+ });
+
+ it("should throw when a field has the wrong type", async () => {
+ const registry = new ConfigRegistry({ name: 42 });
+ await expect(registry.registerConfig(ValidConfig)).rejects.toThrow();
+ });
+
+ it("should map multiple env fields correctly", async () => {
+ const registry = new ConfigRegistry({ name: "world", host: "localhost" });
+ const config = await registry.registerConfig(OptionalConfig);
+ expect(config.name).toBe("world");
+ expect(config.host).toBe("localhost");
+ });
+ });
+});
diff --git a/packages/core-editor/test/editable-library-manager.spec.ts b/packages/core-editor/test/editable-library-manager.spec.ts
new file mode 100644
index 00000000..0e808baa
--- /dev/null
+++ b/packages/core-editor/test/editable-library-manager.spec.ts
@@ -0,0 +1,182 @@
+import { COMPONENT_SYSTEM_LIBRARY, type ILibrary, LibraryStatusEnum } from "@nanoforge-dev/common";
+import { beforeEach, describe, expect, it } from "vitest";
+
+import { Library } from "../../common/src/library/libraries/library";
+import { EditableLibraryManager } from "../src/common/library/manager/library.manager";
+
+class StubLibrary extends Library {
+ private readonly _name: string;
+
+ constructor(name: string, options?: ConstructorParameters[0]) {
+ super(options);
+ this._name = name;
+ }
+
+ get __name(): string {
+ return this._name;
+ }
+}
+
+class StubRunnerLibrary extends StubLibrary {
+ async __run(): Promise {}
+}
+
+class StubMutableLibrary extends StubLibrary {
+ mute(): void {}
+}
+
+describe("EditableLibraryManager", () => {
+ let manager: EditableLibraryManager;
+
+ beforeEach(() => {
+ manager = new EditableLibraryManager();
+ });
+
+ describe("typed setters and getters", () => {
+ it("should store and retrieve a component system library", () => {
+ const lib = new StubLibrary("ComponentSystem");
+ manager.setComponentSystem(lib as any);
+ expect(manager.getComponentSystem().library).toBe(lib);
+ });
+
+ it("should store and retrieve a graphics library", () => {
+ const lib = new StubLibrary("Graphics");
+ manager.setGraphics(lib as any);
+ expect(manager.getGraphics().library).toBe(lib);
+ });
+
+ it("should store and retrieve an asset manager library", () => {
+ const lib = new StubLibrary("AssetManager");
+ manager.setAssetManager(lib as any);
+ expect(manager.getAssetManager().library).toBe(lib);
+ });
+
+ it("should store and retrieve a network library", () => {
+ const lib = new StubLibrary("Network");
+ manager.setNetwork(lib as any);
+ expect(manager.getNetwork().library).toBe(lib);
+ });
+
+ it("should store and retrieve an input library", () => {
+ const lib = new StubLibrary("Input");
+ manager.setInput(lib as any);
+ expect(manager.getInput().library).toBe(lib);
+ });
+
+ it("should store and retrieve a sound library", () => {
+ const lib = new StubLibrary("Sound");
+ manager.setSound(lib as any);
+ expect(manager.getSound().library).toBe(lib);
+ });
+
+ it("should store and retrieve a music library", () => {
+ const lib = new StubLibrary("Music");
+ manager.setMusic(lib as any);
+ expect(manager.getMusic().library).toBe(lib);
+ });
+
+ it("should throw when getting a typed library that was not set", () => {
+ expect(() => manager.getComponentSystem()).toThrow();
+ });
+ });
+
+ describe("set and get (custom symbol)", () => {
+ it("should store and retrieve a library by Symbol.for key", () => {
+ const sym = Symbol.for("customLib");
+ const lib = new StubLibrary("Custom");
+
+ manager.setAssetManager(new StubLibrary("Asset") as any);
+ manager.set(sym, lib as unknown as ILibrary);
+
+ expect(manager.get(sym).library).toBe(lib);
+ });
+ });
+
+ describe("getLibraries", () => {
+ it("should return the list of all set libraries", () => {
+ const lib = new StubLibrary("ComponentSystem");
+ manager.setComponentSystem(lib as any);
+ const libs = manager.getLibraries().filter(Boolean);
+ expect(libs.some((h) => h.library === (lib as unknown as ILibrary))).toBe(true);
+ });
+ });
+
+ describe("getInitLibraries", () => {
+ it("should return libraries in dependency order", () => {
+ const libA = new StubLibrary("A", { dependencies: [COMPONENT_SYSTEM_LIBRARY] });
+ const libB = new StubLibrary("B");
+
+ manager.setComponentSystem(libB as any);
+ manager.setGraphics(libA as any);
+
+ const order = manager.getInitLibraries().map((h) => h.library.__name);
+ const idxB = order.indexOf("B");
+ const idxA = order.indexOf("A");
+
+ expect(idxB).toBeLessThan(idxA);
+ });
+
+ it("should return all set libraries", () => {
+ manager.setAssetManager(new StubLibrary("Asset") as any);
+ manager.setGraphics(new StubLibrary("Graphics") as any);
+
+ expect(manager.getInitLibraries().length).toBe(2);
+ });
+ });
+
+ describe("getClearLibraries", () => {
+ it("should return libraries in reverse dependency order", () => {
+ const libA = new StubLibrary("A", { dependencies: [COMPONENT_SYSTEM_LIBRARY] });
+ const libB = new StubLibrary("B");
+
+ manager.setComponentSystem(libB as any);
+ manager.setGraphics(libA as any);
+
+ const order = manager.getClearLibraries().map((h) => h.library.__name);
+ const idxA = order.indexOf("A");
+ const idxB = order.indexOf("B");
+
+ expect(idxA).toBeLessThan(idxB);
+ });
+ });
+
+ describe("getExecutionLibraries", () => {
+ it("should only return libraries that implement __run", () => {
+ manager.setComponentSystem(new StubLibrary("NotARunner") as any);
+ manager.setGraphics(new StubRunnerLibrary("Runner") as any);
+
+ const runners = manager.getExecutionLibraries();
+ expect(runners.every((h) => typeof (h.library as any).__run === "function")).toBe(true);
+ expect(runners.some((h) => h.library.__name === "Runner")).toBe(true);
+ expect(runners.some((h) => h.library.__name === "NotARunner")).toBe(false);
+ });
+
+ it("should return empty when no runner libraries are set", () => {
+ manager.setComponentSystem(new StubLibrary("Static") as any);
+ expect(manager.getExecutionLibraries()).toHaveLength(0);
+ });
+ });
+
+ describe("getMutableLibraries", () => {
+ it("should only return libraries that implement mute", () => {
+ manager.setSound(new StubMutableLibrary("MutableSound") as any);
+ manager.setGraphics(new StubLibrary("NonMutableGraphics") as any);
+
+ const mutable = manager.getMutableLibraries();
+ expect(mutable.some((h) => h.library.__name === "MutableSound")).toBe(true);
+ expect(mutable.some((h) => h.library.__name === "NonMutableGraphics")).toBe(false);
+ });
+
+ it("should return empty when no mutable libraries are set", () => {
+ manager.setGraphics(new StubLibrary("Graphics") as any);
+ expect(manager.getMutableLibraries()).toHaveLength(0);
+ });
+ });
+
+ describe("library context status", () => {
+ it("should start with UNLOADED status", () => {
+ manager.setComponentSystem(new StubLibrary("Comp") as any);
+ expect(manager.getComponentSystem().context.status).toBe(LibraryStatusEnum.UNLOADED);
+ });
+ });
+});
diff --git a/packages/core-editor/test/relationship.spec.ts b/packages/core-editor/test/relationship.spec.ts
new file mode 100644
index 00000000..776fa493
--- /dev/null
+++ b/packages/core-editor/test/relationship.spec.ts
@@ -0,0 +1,135 @@
+import { type ILibrary, LibraryContext, LibraryHandle } from "@nanoforge-dev/common";
+import { describe, expect, it } from "vitest";
+
+import { Library } from "../../common/src/library/libraries/library";
+import { Relationship } from "../src/common/library/relationship-functions";
+
+class StubLibrary extends Library {
+ private readonly _name: string;
+
+ constructor(name: string, options?: ConstructorParameters[0]) {
+ super(options);
+ this._name = name;
+ }
+
+ get __name(): string {
+ return this._name;
+ }
+}
+
+const makeHandle = (
+ sym: symbol,
+ name: string,
+ options?: ConstructorParameters[0],
+): LibraryHandle => {
+ return new LibraryHandle(
+ sym,
+ new StubLibrary(name, options) as unknown as ILibrary,
+ new LibraryContext(),
+ );
+};
+
+describe("Relationship.getLibrariesByDependencies", () => {
+ it("should return libraries in same order when no dependencies are declared", () => {
+ const symA = Symbol("A");
+ const symB = Symbol("B");
+ const handleA = makeHandle(symA, "A");
+ const handleB = makeHandle(symB, "B");
+
+ const result = Relationship.getLibrariesByDependencies([handleA, handleB]);
+ expect(result.map((h) => h.library.__name)).toEqual(["A", "B"]);
+ });
+
+ it("should put a dependency before the library that depends on it", () => {
+ const symA = Symbol("A");
+ const symB = Symbol("B");
+ const handleB = makeHandle(symB, "B");
+ const handleA = makeHandle(symA, "A", { dependencies: [symB] });
+
+ const result = Relationship.getLibrariesByDependencies([handleA, handleB]);
+ const names = result.map((h) => h.library.__name);
+ expect(names.indexOf("B")).toBeLessThan(names.indexOf("A"));
+ });
+
+ it("should not duplicate a shared dependency", () => {
+ const symDep = Symbol("Dep");
+ const symA = Symbol("A");
+ const symB = Symbol("B");
+ const handleDep = makeHandle(symDep, "Dep");
+ const handleA = makeHandle(symA, "A", { dependencies: [symDep] });
+ const handleB = makeHandle(symB, "B", { dependencies: [symDep] });
+
+ const result = Relationship.getLibrariesByDependencies([handleA, handleB, handleDep]);
+ const names = result.map((h) => h.library.__name);
+ expect(names.filter((n) => n === "Dep")).toHaveLength(1);
+ });
+
+ it("should return libraries in reverse dependency order when reverse=true", () => {
+ const symA = Symbol("A");
+ const symB = Symbol("B");
+ const handleB = makeHandle(symB, "B");
+ const handleA = makeHandle(symA, "A", { dependencies: [symB] });
+
+ const result = Relationship.getLibrariesByDependencies([handleA, handleB], true);
+ const names = result.map((h) => h.library.__name);
+ expect(names.indexOf("A")).toBeLessThan(names.indexOf("B"));
+ });
+
+ it("should throw on circular dependencies", () => {
+ const symA = Symbol("A");
+ const symB = Symbol("B");
+ const handleA = makeHandle(symA, "A", { dependencies: [symB] });
+ const handleB = makeHandle(symB, "B", { dependencies: [symA] });
+
+ expect(() => Relationship.getLibrariesByDependencies([handleA, handleB])).toThrow(
+ /[Cc]ircular/,
+ );
+ });
+});
+
+describe("Relationship.getLibrariesByRun", () => {
+ it("should return all runner libraries when no ordering is specified", () => {
+ const symA = Symbol("A");
+ const symB = Symbol("B");
+ const handleA = makeHandle(symA, "A");
+ const handleB = makeHandle(symB, "B");
+
+ const result = Relationship.getLibrariesByRun([handleA, handleB]);
+ expect(result).toHaveLength(2);
+ });
+
+ it("should place a library before another when runBefore is set", () => {
+ const symA = Symbol("A");
+ const symB = Symbol("B");
+ const handleA = makeHandle(symA, "A", { runBefore: [symB] });
+ const handleB = makeHandle(symB, "B");
+
+ const result = Relationship.getLibrariesByRun([handleA, handleB]);
+ const names = result.map((h) => h.library.__name);
+ expect(names.indexOf("B")).toBeLessThan(names.indexOf("A"));
+ });
+
+ it("should place a library after another when runAfter is set", () => {
+ const symA = Symbol("A");
+ const symB = Symbol("B");
+ const handleA = makeHandle(symA, "A");
+ const handleB = makeHandle(symB, "B", { runAfter: [symA] });
+
+ const result = Relationship.getLibrariesByRun([handleA, handleB]);
+ const names = result.map((h) => h.library.__name);
+ expect(names.indexOf("B")).toBeLessThan(names.indexOf("A"));
+ });
+
+ it("should throw on circular run dependencies", () => {
+ const symA = Symbol("A");
+ const symB = Symbol("B");
+ const handleA = makeHandle(symA, "A", { runBefore: [symB] });
+ const handleB = makeHandle(symB, "B", { runBefore: [symA] });
+
+ expect(() => Relationship.getLibrariesByRun([handleA, handleB])).toThrow(/[Cc]ircular/);
+ });
+
+ it("should return empty array for empty input", () => {
+ expect(Relationship.getLibrariesByRun([])).toHaveLength(0);
+ });
+});
diff --git a/packages/core-editor/tsconfig.json b/packages/core-editor/tsconfig.json
new file mode 100644
index 00000000..9e6d724b
--- /dev/null
+++ b/packages/core-editor/tsconfig.json
@@ -0,0 +1,6 @@
+{
+ "$schema": "https://json.schemastore.org/tsconfig.json",
+ "extends": "../../tsconfig.json",
+ "include": ["src/**/*.ts"],
+ "exclude": ["node_modules", "dist"]
+}
diff --git a/packages/core-editor/tsconfig.spec.json b/packages/core-editor/tsconfig.spec.json
new file mode 100644
index 00000000..8270caba
--- /dev/null
+++ b/packages/core-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/core-editor/tsup.config.ts b/packages/core-editor/tsup.config.ts
new file mode 100644
index 00000000..f3b6e6ce
--- /dev/null
+++ b/packages/core-editor/tsup.config.ts
@@ -0,0 +1,3 @@
+import { createTsupConfig } from "../../tsup.config.js";
+
+export default [createTsupConfig()];
diff --git a/packages/core-editor/typedoc.json b/packages/core-editor/typedoc.json
new file mode 100644
index 00000000..7e2ec1a3
--- /dev/null
+++ b/packages/core-editor/typedoc.json
@@ -0,0 +1,5 @@
+{
+ "extends": ["../../typedoc.base.json"],
+ "entryPoints": ["src/index.ts"],
+ "skipErrorChecking": true
+}
From 55775981da5e5a5b114bb6b017079455356089e3 Mon Sep 17 00:00:00 2001
From: Tchips46
Date: Wed, 25 Mar 2026 15:43:47 +0900
Subject: [PATCH 03/15] feat(core-editor): hot reload from save
---
packages/common/src/options/index.ts | 9 +---
.../common/src/options/types/options.type.ts | 21 --------
packages/core-editor/package.json | 2 +
.../src/application/application-config.ts | 4 +-
.../src/application/nanoforge-application.ts | 2 +-
.../src/common/context/options.type.ts | 20 +++++++
.../src/common/context}/save.type.ts | 6 +--
packages/core-editor/src/core/core.ts | 10 +++-
.../core-editor/src/editor/core-editor.ts | 37 +++++++++++++
.../core-editor/test/editor-feature.spec.ts | 54 +++++++++++++++++++
pnpm-lock.yaml | 52 ++++++++++++++++++
11 files changed, 180 insertions(+), 37 deletions(-)
create mode 100644 packages/core-editor/src/common/context/options.type.ts
rename packages/{common/src/options/types => core-editor/src/common/context}/save.type.ts (89%)
create mode 100644 packages/core-editor/src/editor/core-editor.ts
create mode 100644 packages/core-editor/test/editor-feature.spec.ts
diff --git a/packages/common/src/options/index.ts b/packages/common/src/options/index.ts
index 1bd44e31..32ab2502 100644
--- a/packages/common/src/options/index.ts
+++ b/packages/common/src/options/index.ts
@@ -1,8 +1 @@
-export type {
- IRunClientOptions,
- IRunOptions,
- IRunServerOptions,
- IEditorRunClientOptions,
- IEditorRunOptions,
- IEditorRunServerOptions,
-} from "./types/options.type";
+export type { IRunClientOptions, IRunOptions, IRunServerOptions } from "./types/options.type";
diff --git a/packages/common/src/options/types/options.type.ts b/packages/common/src/options/types/options.type.ts
index 5cab0ac1..3ed47674 100644
--- a/packages/common/src/options/types/options.type.ts
+++ b/packages/common/src/options/types/options.type.ts
@@ -1,5 +1,3 @@
-import { type Save } from "./save.type";
-
export type IRunOptions = IRunClientOptions | IRunServerOptions;
export interface IRunClientOptions {
@@ -12,22 +10,3 @@ export interface IRunServerOptions {
files: Map;
env: Record;
}
-
-export type IEditorRunOptions = IEditorRunClientOptions | IEditorRunServerOptions;
-
-export interface IEditorRunClientOptions {
- canvas: HTMLCanvasElement;
- files: Map;
- env: Record;
- editor: {
- save: Save;
- };
-}
-export interface IEditorRunServerOptions {
- canvas: HTMLCanvasElement;
- files: Map;
- env: Record;
- editor: {
- save: Save;
- };
-}
diff --git a/packages/core-editor/package.json b/packages/core-editor/package.json
index 90e0540a..cf532b87 100644
--- a/packages/core-editor/package.json
+++ b/packages/core-editor/package.json
@@ -58,6 +58,8 @@
"dependencies": {
"@nanoforge-dev/asset-manager": "workspace:*",
"@nanoforge-dev/common": "workspace:*",
+ "@nanoforge-dev/ecs-client": "workspace:*",
+ "@nanoforge-dev/ecs-server": "workspace:*",
"@nanoforge-dev/input": "workspace:*",
"class-transformer": "catalog:config",
"class-validator": "catalog:config"
diff --git a/packages/core-editor/src/application/application-config.ts b/packages/core-editor/src/application/application-config.ts
index 82d28bed..7eeede0c 100644
--- a/packages/core-editor/src/application/application-config.ts
+++ b/packages/core-editor/src/application/application-config.ts
@@ -31,8 +31,8 @@ export class ApplicationConfig {
this._libraryManager.set(sym, library);
}
- public getComponentSystemLibrary() {
- return this._libraryManager.getComponentSystem();
+ public getComponentSystemLibrary() {
+ return this._libraryManager.getComponentSystem();
}
public useComponentSystemLibrary(library: IComponentSystemLibrary) {
diff --git a/packages/core-editor/src/application/nanoforge-application.ts b/packages/core-editor/src/application/nanoforge-application.ts
index b35db5ae..81f6ea6e 100644
--- a/packages/core-editor/src/application/nanoforge-application.ts
+++ b/packages/core-editor/src/application/nanoforge-application.ts
@@ -1,13 +1,13 @@
import {
type IAssetManagerLibrary,
type IComponentSystemLibrary,
- type IEditorRunOptions,
type ILibrary,
type INetworkLibrary,
NfNotInitializedException,
} from "@nanoforge-dev/common";
import { EditableApplicationContext } from "../common/context/contexts/application.editable-context";
+import { type IEditorRunOptions } from "../common/context/options.type";
import { Core } from "../core/core";
import { ApplicationConfig } from "./application-config";
import type { IApplicationOptions } from "./application-options.type";
diff --git a/packages/core-editor/src/common/context/options.type.ts b/packages/core-editor/src/common/context/options.type.ts
new file mode 100644
index 00000000..4aa66560
--- /dev/null
+++ b/packages/core-editor/src/common/context/options.type.ts
@@ -0,0 +1,20 @@
+import { type Save } from "./save.type";
+
+export type IEditorRunOptions = IEditorRunClientOptions | IEditorRunServerOptions;
+
+export interface IEditorRunClientOptions {
+ canvas: HTMLCanvasElement;
+ files: Map;
+ env: Record;
+ editor: {
+ save: Save;
+ };
+}
+export interface IEditorRunServerOptions {
+ canvas: HTMLCanvasElement;
+ files: Map;
+ env: Record;
+ editor: {
+ save: Save;
+ };
+}
diff --git a/packages/common/src/options/types/save.type.ts b/packages/core-editor/src/common/context/save.type.ts
similarity index 89%
rename from packages/common/src/options/types/save.type.ts
rename to packages/core-editor/src/common/context/save.type.ts
index 94371ad1..36372a33 100644
--- a/packages/common/src/options/types/save.type.ts
+++ b/packages/core-editor/src/common/context/save.type.ts
@@ -17,6 +17,7 @@ export interface SaveLibrary {
export interface SaveComponent {
name: string;
path: string;
+ paramsNames: string[];
}
export interface SaveSystem {
@@ -26,10 +27,7 @@ export interface SaveSystem {
export interface SaveEntity {
id: string;
- components: {
- name: string;
- params: string[];
- }[];
+ components: Record>;
}
export interface Save {
diff --git a/packages/core-editor/src/core/core.ts b/packages/core-editor/src/core/core.ts
index 3d9d15d1..437da6b7 100644
--- a/packages/core-editor/src/core/core.ts
+++ b/packages/core-editor/src/core/core.ts
@@ -2,25 +2,29 @@ import {
ClearContext,
ClientLibraryManager,
Context,
- type IEditorRunOptions,
type IRunnerLibrary,
InitContext,
type LibraryHandle,
LibraryStatusEnum,
NfNotInitializedException,
} from "@nanoforge-dev/common";
+import { type ECSClientLibrary } from "@nanoforge-dev/ecs-client";
+import { type ECSServerLibrary } from "@nanoforge-dev/ecs-server";
import { type ApplicationConfig } from "../application/application-config";
import type { IApplicationOptions } from "../application/application-options.type";
import { type EditableApplicationContext } from "../common/context/contexts/application.editable-context";
import { EditableExecutionContext } from "../common/context/contexts/executions/execution.editable-context";
import { type EditableLibraryContext } from "../common/context/contexts/library.editable-context";
+import { type IEditorRunOptions } from "../common/context/options.type";
import { ConfigRegistry } from "../config/config-registry";
+import { CoreEditor } from "../editor/core-editor";
export class Core {
private readonly config: ApplicationConfig;
private readonly context: EditableApplicationContext;
private options?: IApplicationOptions;
+ public editor?: CoreEditor;
private _configRegistry?: ConfigRegistry;
constructor(config: ApplicationConfig, context: EditableApplicationContext) {
@@ -30,6 +34,10 @@ export class Core {
public async init(options: IEditorRunOptions, appOptions: IApplicationOptions): Promise {
this.options = appOptions;
+ this.editor = new CoreEditor(
+ options.editor,
+ this.config.getComponentSystemLibrary().library,
+ );
this._configRegistry = new ConfigRegistry(options.env);
await this.runInit(this.getInitContext(options));
}
diff --git a/packages/core-editor/src/editor/core-editor.ts b/packages/core-editor/src/editor/core-editor.ts
new file mode 100644
index 00000000..23fed3b8
--- /dev/null
+++ b/packages/core-editor/src/editor/core-editor.ts
@@ -0,0 +1,37 @@
+import { NfNotFound } from "@nanoforge-dev/common";
+import { type ECSClientLibrary } from "@nanoforge-dev/ecs-client";
+import { type ECSServerLibrary } from "@nanoforge-dev/ecs-server";
+
+import type { IEditorRunOptions } from "../common/context/options.type";
+import type { SaveComponent, SaveEntity } from "../common/context/save.type";
+
+export class CoreEditor {
+ private editor: IEditorRunOptions["editor"];
+ private ecsLibrary: ECSClientLibrary | ECSServerLibrary;
+ constructor(
+ editor: IEditorRunOptions["editor"],
+ ecsLibrary: ECSClientLibrary | ECSServerLibrary,
+ ) {
+ this.editor = editor;
+ this.ecsLibrary = ecsLibrary;
+ }
+
+ public askEntityHotReload(saveComponents: SaveComponent[], entityToReload: SaveEntity[]): void {
+ const reg = this.ecsLibrary.registry;
+ entityToReload.forEach(({ id, components }) => {
+ Object.entries(components).forEach(([componentName, params]) => {
+ const ogComponent = saveComponents.find(({ name: paramName }) => {
+ if (!ogComponent) {
+ throw new NfNotFound("Component: " + componentName + " not found in saved components");
+ }
+ return paramName == componentName;
+ });
+ const ecsComponent = reg.getComponents({ name: componentName }).get(Number(id));
+ Object.entries(params).forEach(([paramName, paramValue]) => {
+ ecsComponent[paramName] = paramValue;
+ });
+ reg.getComponents({ name: componentName }).set(Number(id), ecsComponent);
+ });
+ });
+ }
+}
diff --git a/packages/core-editor/test/editor-feature.spec.ts b/packages/core-editor/test/editor-feature.spec.ts
new file mode 100644
index 00000000..0a1e2844
--- /dev/null
+++ b/packages/core-editor/test/editor-feature.spec.ts
@@ -0,0 +1,54 @@
+import { Expose } from "class-transformer";
+import { IsString } from "class-validator";
+import { describe, expect, it } from "vitest";
+
+import { ConfigRegistry } from "../src/config/config-registry";
+
+class ValidConfig {
+ @Expose()
+ @IsString()
+ name!: string;
+}
+
+class OptionalConfig {
+ @Expose()
+ @IsString()
+ name!: string;
+
+ @Expose()
+ host?: string;
+}
+
+describe("ConfigRegistry", () => {
+ describe("registerConfig", () => {
+ it("should return a transformed config instance when env is valid", async () => {
+ const registry = new ConfigRegistry({ name: "hello" });
+ const config = await registry.registerConfig(ValidConfig);
+ expect(config).toBeInstanceOf(ValidConfig);
+ expect(config.name).toBe("hello");
+ });
+
+ it("should exclude values not decorated with @Expose", async () => {
+ const registry = new ConfigRegistry({ name: "hello", extra: "ignored" });
+ const config = await registry.registerConfig(ValidConfig);
+ expect((config as any)["extra"]).toBeUndefined();
+ });
+
+ it("should throw when a required field is missing", async () => {
+ const registry = new ConfigRegistry({});
+ await expect(registry.registerConfig(ValidConfig)).rejects.toThrow();
+ });
+
+ it("should throw when a field has the wrong type", async () => {
+ const registry = new ConfigRegistry({ name: 42 });
+ await expect(registry.registerConfig(ValidConfig)).rejects.toThrow();
+ });
+
+ it("should map multiple env fields correctly", async () => {
+ const registry = new ConfigRegistry({ name: "world", host: "localhost" });
+ const config = await registry.registerConfig(OptionalConfig);
+ expect(config.name).toBe("world");
+ expect(config.host).toBe("localhost");
+ });
+ });
+});
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 11ff0268..403cf820 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -420,6 +420,58 @@ importers:
specifier: catalog:test
version: 4.0.18(@types/node@25.5.0)(jiti@2.6.1)(yaml@2.8.2)
+ packages/core-editor:
+ dependencies:
+ '@nanoforge-dev/asset-manager':
+ specifier: workspace:*
+ version: link:../asset-manager
+ '@nanoforge-dev/common':
+ specifier: workspace:*
+ version: link:../common
+ '@nanoforge-dev/ecs-client':
+ specifier: workspace:*
+ version: link:../ecs-client
+ '@nanoforge-dev/ecs-server':
+ specifier: workspace:*
+ version: link:../ecs-server
+ '@nanoforge-dev/input':
+ specifier: workspace:*
+ version: link:../input
+ class-transformer:
+ specifier: catalog:config
+ version: 0.5.1
+ class-validator:
+ specifier: catalog:config
+ version: 0.14.4
+ devDependencies:
+ '@favware/cliff-jumper':
+ specifier: catalog:ci
+ version: 6.0.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.1)
+ eslint:
+ specifier: catalog:lint
+ version: 10.0.2(jiti@2.6.1)
+ prettier:
+ specifier: catalog:lint
+ version: 3.8.1
+ tsup:
+ specifier: catalog:build
+ version: 8.5.1(jiti@2.6.1)(postcss@8.5.8)(typescript@5.9.3)(yaml@2.8.2)
+ typescript:
+ specifier: catalog:core
+ version: 5.9.3
+ vitest:
+ specifier: catalog:test
+ version: 4.0.18(@types/node@25.3.5)(jiti@2.6.1)(yaml@2.8.2)
+
packages/ecs-client:
dependencies:
'@nanoforge-dev/common':
From dce9293db19e7b18ac5286f1a822cd30c7832fea Mon Sep 17 00:00:00 2001
From: Tchips46
Date: Wed, 25 Mar 2026 16:01:28 +0900
Subject: [PATCH 04/15] feat(core-editor): hot reload from save
---
packages/core-editor/src/core/core.ts | 1 -
packages/core-editor/src/editor/core-editor.ts | 8 +-------
2 files changed, 1 insertion(+), 8 deletions(-)
diff --git a/packages/core-editor/src/core/core.ts b/packages/core-editor/src/core/core.ts
index 437da6b7..9ea80077 100644
--- a/packages/core-editor/src/core/core.ts
+++ b/packages/core-editor/src/core/core.ts
@@ -35,7 +35,6 @@ export class Core {
public async init(options: IEditorRunOptions, appOptions: IApplicationOptions): Promise {
this.options = appOptions;
this.editor = new CoreEditor(
- options.editor,
this.config.getComponentSystemLibrary().library,
);
this._configRegistry = new ConfigRegistry(options.env);
diff --git a/packages/core-editor/src/editor/core-editor.ts b/packages/core-editor/src/editor/core-editor.ts
index 23fed3b8..c739ee34 100644
--- a/packages/core-editor/src/editor/core-editor.ts
+++ b/packages/core-editor/src/editor/core-editor.ts
@@ -2,17 +2,11 @@ import { NfNotFound } from "@nanoforge-dev/common";
import { type ECSClientLibrary } from "@nanoforge-dev/ecs-client";
import { type ECSServerLibrary } from "@nanoforge-dev/ecs-server";
-import type { IEditorRunOptions } from "../common/context/options.type";
import type { SaveComponent, SaveEntity } from "../common/context/save.type";
export class CoreEditor {
- private editor: IEditorRunOptions["editor"];
private ecsLibrary: ECSClientLibrary | ECSServerLibrary;
- constructor(
- editor: IEditorRunOptions["editor"],
- ecsLibrary: ECSClientLibrary | ECSServerLibrary,
- ) {
- this.editor = editor;
+ constructor(ecsLibrary: ECSClientLibrary | ECSServerLibrary) {
this.ecsLibrary = ecsLibrary;
}
From 2f88c580fe7e457887997e685b4f6a412e09f556 Mon Sep 17 00:00:00 2001
From: Tchips46
Date: Wed, 25 Mar 2026 16:08:47 +0900
Subject: [PATCH 05/15] feat(core-editor): hot reload from save
---
packages/core-editor/src/editor/core-editor.ts | 6 +++---
packages/ecs-lib/lib/libecs.d.ts | 2 +-
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/packages/core-editor/src/editor/core-editor.ts b/packages/core-editor/src/editor/core-editor.ts
index c739ee34..1acf374c 100644
--- a/packages/core-editor/src/editor/core-editor.ts
+++ b/packages/core-editor/src/editor/core-editor.ts
@@ -15,11 +15,11 @@ export class CoreEditor {
entityToReload.forEach(({ id, components }) => {
Object.entries(components).forEach(([componentName, params]) => {
const ogComponent = saveComponents.find(({ name: paramName }) => {
- if (!ogComponent) {
- throw new NfNotFound("Component: " + componentName + " not found in saved components");
- }
return paramName == componentName;
});
+ if (!ogComponent) {
+ throw new NfNotFound("Component: " + componentName + " not found in saved components");
+ }
const ecsComponent = reg.getComponents({ name: componentName }).get(Number(id));
Object.entries(params).forEach(([paramName, paramValue]) => {
ecsComponent[paramName] = paramValue;
diff --git a/packages/ecs-lib/lib/libecs.d.ts b/packages/ecs-lib/lib/libecs.d.ts
index 6ff945f1..d4d8cf0b 100644
--- a/packages/ecs-lib/lib/libecs.d.ts
+++ b/packages/ecs-lib/lib/libecs.d.ts
@@ -16,7 +16,7 @@ export interface ClassHandle {
[Symbol.dispose](): void;
clone(): this;
}
-export interface container extends ClassHandle {
+export interface container extends ClassHandle, Iterable {
size(): number;
get(_0: number): any | undefined | undefined;
push_back(_0?: any): void;
From 8fdfc1f2a47b854e5ec4a24f3a7c9ec78c56d9ad Mon Sep 17 00:00:00 2001
From: Tchips46
Date: Thu, 26 Mar 2026 10:19:26 +0900
Subject: [PATCH 06/15] feat(core-editor): ask hot reload
---
packages/core-editor/package.json | 1 -
packages/core-editor/src/core/core.ts | 5 +-
.../core-editor/src/editor/core-editor.ts | 25 ++-
.../core-editor/test/editor-feature.spec.ts | 157 +++++++++++++-----
packages/ecs-client/src/index.ts | 2 +
packages/ecs-lib/src/index.ts | 2 +-
packages/ecs-server/src/index.ts | 2 +
pnpm-lock.yaml | 3 -
8 files changed, 136 insertions(+), 61 deletions(-)
diff --git a/packages/core-editor/package.json b/packages/core-editor/package.json
index cf532b87..8f9080bf 100644
--- a/packages/core-editor/package.json
+++ b/packages/core-editor/package.json
@@ -59,7 +59,6 @@
"@nanoforge-dev/asset-manager": "workspace:*",
"@nanoforge-dev/common": "workspace:*",
"@nanoforge-dev/ecs-client": "workspace:*",
- "@nanoforge-dev/ecs-server": "workspace:*",
"@nanoforge-dev/input": "workspace:*",
"class-transformer": "catalog:config",
"class-validator": "catalog:config"
diff --git a/packages/core-editor/src/core/core.ts b/packages/core-editor/src/core/core.ts
index 9ea80077..657d810d 100644
--- a/packages/core-editor/src/core/core.ts
+++ b/packages/core-editor/src/core/core.ts
@@ -9,7 +9,6 @@ import {
NfNotInitializedException,
} from "@nanoforge-dev/common";
import { type ECSClientLibrary } from "@nanoforge-dev/ecs-client";
-import { type ECSServerLibrary } from "@nanoforge-dev/ecs-server";
import { type ApplicationConfig } from "../application/application-config";
import type { IApplicationOptions } from "../application/application-options.type";
@@ -34,9 +33,7 @@ export class Core {
public async init(options: IEditorRunOptions, appOptions: IApplicationOptions): Promise {
this.options = appOptions;
- this.editor = new CoreEditor(
- this.config.getComponentSystemLibrary().library,
- );
+ this.editor = new CoreEditor(this.config.getComponentSystemLibrary().library);
this._configRegistry = new ConfigRegistry(options.env);
await this.runInit(this.getInitContext(options));
}
diff --git a/packages/core-editor/src/editor/core-editor.ts b/packages/core-editor/src/editor/core-editor.ts
index 1acf374c..5b0bc74c 100644
--- a/packages/core-editor/src/editor/core-editor.ts
+++ b/packages/core-editor/src/editor/core-editor.ts
@@ -1,16 +1,15 @@
import { NfNotFound } from "@nanoforge-dev/common";
-import { type ECSClientLibrary } from "@nanoforge-dev/ecs-client";
-import { type ECSServerLibrary } from "@nanoforge-dev/ecs-server";
+import { type ECSClientLibrary, type Entity } from "@nanoforge-dev/ecs-client";
import type { SaveComponent, SaveEntity } from "../common/context/save.type";
export class CoreEditor {
- private ecsLibrary: ECSClientLibrary | ECSServerLibrary;
- constructor(ecsLibrary: ECSClientLibrary | ECSServerLibrary) {
+ private ecsLibrary: ECSClientLibrary;
+ constructor(ecsLibrary: ECSClientLibrary) {
this.ecsLibrary = ecsLibrary;
}
- public askEntityHotReload(saveComponents: SaveComponent[], entityToReload: SaveEntity[]): void {
+ public askEntitiesHotReload(saveComponents: SaveComponent[], entityToReload: SaveEntity[]): void {
const reg = this.ecsLibrary.registry;
entityToReload.forEach(({ id, components }) => {
Object.entries(components).forEach(([componentName, params]) => {
@@ -20,12 +19,24 @@ export class CoreEditor {
if (!ogComponent) {
throw new NfNotFound("Component: " + componentName + " not found in saved components");
}
- const ecsComponent = reg.getComponents({ name: componentName }).get(Number(id));
+ const ecsEntity: Entity = this.getEntityFromEntityId(id);
+ const ecsComponent = reg.getEntityComponent(ecsEntity, {
+ name: componentName,
+ });
Object.entries(params).forEach(([paramName, paramValue]) => {
ecsComponent[paramName] = paramValue;
});
- reg.getComponents({ name: componentName }).set(Number(id), ecsComponent);
+ reg.addComponent(ecsEntity, ecsComponent);
});
});
}
+
+ private getEntityFromEntityId(entityId: string): Entity {
+ const reg = this.ecsLibrary.registry;
+ return reg.entityFromIndex(
+ reg
+ .getComponentsConst({ name: "__RESERVED_ENTITY_ID" })
+ .getIndex({ name: "__RESERVED_ENTITY_ID", entityId: entityId }),
+ );
+ }
}
diff --git a/packages/core-editor/test/editor-feature.spec.ts b/packages/core-editor/test/editor-feature.spec.ts
index 0a1e2844..b5674dcf 100644
--- a/packages/core-editor/test/editor-feature.spec.ts
+++ b/packages/core-editor/test/editor-feature.spec.ts
@@ -1,54 +1,121 @@
-import { Expose } from "class-transformer";
-import { IsString } from "class-validator";
-import { describe, expect, it } from "vitest";
+import { type ECSClientLibrary } from "@nanoforge-dev/ecs-client";
+import { describe, expect, it, vi } from "vitest";
-import { ConfigRegistry } from "../src/config/config-registry";
+import { type SaveComponent, type SaveEntity } from "../src/common/context/save.type";
+import { CoreEditor } from "../src/editor/core-editor";
-class ValidConfig {
- @Expose()
- @IsString()
- name!: string;
-}
-
-class OptionalConfig {
- @Expose()
- @IsString()
- name!: string;
-
- @Expose()
- host?: string;
-}
-
-describe("ConfigRegistry", () => {
- describe("registerConfig", () => {
- it("should return a transformed config instance when env is valid", async () => {
- const registry = new ConfigRegistry({ name: "hello" });
- const config = await registry.registerConfig(ValidConfig);
- expect(config).toBeInstanceOf(ValidConfig);
- expect(config.name).toBe("hello");
- });
-
- it("should exclude values not decorated with @Expose", async () => {
- const registry = new ConfigRegistry({ name: "hello", extra: "ignored" });
- const config = await registry.registerConfig(ValidConfig);
- expect((config as any)["extra"]).toBeUndefined();
- });
+const getIndex = vi.fn((component) => {
+ return Number(component.entityId.slice(-1));
+});
- it("should throw when a required field is missing", async () => {
- const registry = new ConfigRegistry({});
- await expect(registry.registerConfig(ValidConfig)).rejects.toThrow();
+const FakeRegistry = vi.fn(
+ class {
+ addComponent = vi.fn();
+ getComponentsConst = vi.fn(() => ({ getIndex }));
+ getEntityComponent = vi.fn((entity: number, component) => {
+ return (
+ {
+ 2: {
+ Position: {
+ name: "Position",
+ x: 3,
+ y: 4,
+ },
+ Bullets: {
+ name: "Bullets",
+ number: 4,
+ bulletTypes: ["9mm"],
+ },
+ __RESERVED_ENTITY_ID: {
+ entityId: "ent2",
+ },
+ },
+ 3: {
+ Position: {
+ name: "Position",
+ x: 7,
+ y: 8,
+ },
+ __RESERVED_ENTITY_ID: {
+ entityId: "ent3",
+ },
+ },
+ } as Record>
+ )[entity]?.[component.name];
});
-
- it("should throw when a field has the wrong type", async () => {
- const registry = new ConfigRegistry({ name: 42 });
- await expect(registry.registerConfig(ValidConfig)).rejects.toThrow();
+ entityFromIndex = vi.fn((index) => {
+ return index;
});
+ },
+);
- it("should map multiple env fields correctly", async () => {
- const registry = new ConfigRegistry({ name: "world", host: "localhost" });
- const config = await registry.registerConfig(OptionalConfig);
- expect(config.name).toBe("world");
- expect(config.host).toBe("localhost");
+describe("EditorFeatures", () => {
+ describe("askEntitiesHotReload", () => {
+ it("should reload entities with new save variables", async () => {
+ const components: SaveComponent[] = [
+ {
+ name: "Position",
+ path: "/tmp/pos",
+ paramsNames: ["x", "y"],
+ },
+ {
+ name: "Bullets",
+ path: "/tmp/pos",
+ paramsNames: ["bulletTypes", "number"],
+ },
+ ];
+ const entities: SaveEntity[] = [
+ {
+ id: "ent2",
+ components: {
+ Position: {
+ x: 1,
+ y: 2,
+ },
+ Bullets: {
+ bulletTypes: ["fire", "water", "rocket"],
+ number: 1000,
+ },
+ },
+ },
+ {
+ id: "ent3",
+ components: {
+ Position: {
+ x: 5,
+ y: 6,
+ },
+ },
+ },
+ ];
+ const fakeReg = new FakeRegistry();
+ new CoreEditor({ registry: fakeReg } as any as ECSClientLibrary).askEntitiesHotReload(
+ components,
+ entities,
+ );
+ expect(fakeReg.getComponentsConst).toHaveBeenCalledWith({ name: "__RESERVED_ENTITY_ID" });
+ expect(getIndex).toHaveBeenNthCalledWith(1, {
+ entityId: "ent2",
+ name: "__RESERVED_ENTITY_ID",
+ });
+ expect(getIndex).toHaveBeenNthCalledWith(2, {
+ entityId: "ent2",
+ name: "__RESERVED_ENTITY_ID",
+ });
+ expect(getIndex).toHaveBeenNthCalledWith(3, {
+ entityId: "ent3",
+ name: "__RESERVED_ENTITY_ID",
+ });
+ expect(fakeReg.getEntityComponent).toHaveBeenNthCalledWith(1, 2, { name: "Position" });
+ expect(fakeReg.getEntityComponent).toHaveBeenNthCalledWith(2, 2, { name: "Bullets" });
+ expect(fakeReg.getEntityComponent).toHaveBeenNthCalledWith(3, 3, { name: "Position" });
+ expect(fakeReg.addComponent).toHaveBeenNthCalledWith(1, 2, { name: "Position", x: 1, y: 2 });
+ expect(fakeReg.addComponent).toHaveBeenNthCalledWith(2, 2, {
+ name: "Bullets",
+ bulletTypes: ["fire", "water", "rocket"],
+ number: 1000,
+ });
+ expect(fakeReg.addComponent).toHaveBeenNthCalledWith(3, 3, { name: "Position", x: 5, y: 6 });
});
});
});
diff --git a/packages/ecs-client/src/index.ts b/packages/ecs-client/src/index.ts
index 5e93dd98..8759c383 100644
--- a/packages/ecs-client/src/index.ts
+++ b/packages/ecs-client/src/index.ts
@@ -6,6 +6,8 @@ export type {
EditorSystemManifest,
System,
Registry,
+ Entity,
+ SparseArray,
} from "@nanoforge-dev/ecs-lib";
export { ECSClientLibrary } from "./ecs-client-library";
diff --git a/packages/ecs-lib/src/index.ts b/packages/ecs-lib/src/index.ts
index ab84137a..a0d20643 100644
--- a/packages/ecs-lib/src/index.ts
+++ b/packages/ecs-lib/src/index.ts
@@ -1,3 +1,3 @@
export { AbstractECSLibrary } from "./ecs-library.abstract";
-export type { Component, System, Registry } from "../lib/libecs";
+export type { Component, System, Registry, SparseArray, Entity } from "../lib/libecs";
export type * from "./editor-manifest.type";
diff --git a/packages/ecs-server/src/index.ts b/packages/ecs-server/src/index.ts
index 0c14ef42..045ba79b 100644
--- a/packages/ecs-server/src/index.ts
+++ b/packages/ecs-server/src/index.ts
@@ -6,6 +6,8 @@ export type {
EditorSystemManifest,
System,
Registry,
+ Entity,
+ SparseArray,
} from "@nanoforge-dev/ecs-lib";
export { ECSServerLibrary } from "./ecs-server-library";
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 403cf820..db262e37 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -431,9 +431,6 @@ importers:
'@nanoforge-dev/ecs-client':
specifier: workspace:*
version: link:../ecs-client
- '@nanoforge-dev/ecs-server':
- specifier: workspace:*
- version: link:../ecs-server
'@nanoforge-dev/input':
specifier: workspace:*
version: link:../input
From c2a2addf5f7c33834c72ceb47aa0d3997d6c0d7f Mon Sep 17 00:00:00 2001
From: Tchips46
Date: Thu, 26 Mar 2026 10:23:49 +0900
Subject: [PATCH 07/15] feat: merge main
---
pnpm-lock.yaml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index db262e37..3d326ec2 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -455,7 +455,7 @@ importers:
version: 6.0.2(prettier@3.8.1)
eslint:
specifier: catalog:lint
- version: 10.0.2(jiti@2.6.1)
+ version: 10.0.3(jiti@2.6.1)
prettier:
specifier: catalog:lint
version: 3.8.1
From 308be20596dc01696ecc66a2ddf30e7973901aae Mon Sep 17 00:00:00 2001
From: Tchips46
Date: Thu, 26 Mar 2026 11:26:35 +0900
Subject: [PATCH 08/15] feat(core-editor): event executor
---
.../src/common/context/event-emitter.type.ts | 8 ++
.../src/common/context/options.type.ts | 3 +
packages/core-editor/src/core/core.ts | 6 +-
.../core-editor/src/editor/core-editor.ts | 28 +++-
.../core-editor/test/editor-feature.spec.ts | 123 +++++++++++-------
5 files changed, 112 insertions(+), 56 deletions(-)
create mode 100644 packages/core-editor/src/common/context/event-emitter.type.ts
diff --git a/packages/core-editor/src/common/context/event-emitter.type.ts b/packages/core-editor/src/common/context/event-emitter.type.ts
new file mode 100644
index 00000000..c9c040d0
--- /dev/null
+++ b/packages/core-editor/src/common/context/event-emitter.type.ts
@@ -0,0 +1,8 @@
+export enum EventTypeEnum {
+ HOT_RELOAD = "hot-reload",
+ HARD_RELOAD = "hard-reload",
+}
+
+export interface EventEmitter {
+ eventQueue: (EventTypeEnum | string)[];
+}
diff --git a/packages/core-editor/src/common/context/options.type.ts b/packages/core-editor/src/common/context/options.type.ts
index 4aa66560..3a06c151 100644
--- a/packages/core-editor/src/common/context/options.type.ts
+++ b/packages/core-editor/src/common/context/options.type.ts
@@ -1,3 +1,4 @@
+import { type EventEmitter } from "./event-emitter.type";
import { type Save } from "./save.type";
export type IEditorRunOptions = IEditorRunClientOptions | IEditorRunServerOptions;
@@ -8,6 +9,7 @@ export interface IEditorRunClientOptions {
env: Record;
editor: {
save: Save;
+ events: EventEmitter;
};
}
export interface IEditorRunServerOptions {
@@ -16,5 +18,6 @@ export interface IEditorRunServerOptions {
env: Record;
editor: {
save: Save;
+ events: EventEmitter;
};
}
diff --git a/packages/core-editor/src/core/core.ts b/packages/core-editor/src/core/core.ts
index 657d810d..9857164b 100644
--- a/packages/core-editor/src/core/core.ts
+++ b/packages/core-editor/src/core/core.ts
@@ -33,9 +33,12 @@ export class Core {
public async init(options: IEditorRunOptions, appOptions: IApplicationOptions): Promise {
this.options = appOptions;
- this.editor = new CoreEditor(this.config.getComponentSystemLibrary().library);
this._configRegistry = new ConfigRegistry(options.env);
await this.runInit(this.getInitContext(options));
+ this.editor = new CoreEditor(
+ options.editor,
+ this.config.getComponentSystemLibrary().library,
+ );
}
public async run(): Promise {
@@ -47,6 +50,7 @@ export class Core {
const runner = async (delta: number) => {
this.context.setDelta(delta);
+ this.editor?.runEvents();
await this.runExecute(clientContext, libraries);
};
diff --git a/packages/core-editor/src/editor/core-editor.ts b/packages/core-editor/src/editor/core-editor.ts
index 5b0bc74c..2f454410 100644
--- a/packages/core-editor/src/editor/core-editor.ts
+++ b/packages/core-editor/src/editor/core-editor.ts
@@ -1,19 +1,37 @@
import { NfNotFound } from "@nanoforge-dev/common";
import { type ECSClientLibrary, type Entity } from "@nanoforge-dev/ecs-client";
-import type { SaveComponent, SaveEntity } from "../common/context/save.type";
+import { EventTypeEnum } from "../common/context/event-emitter.type";
+import { type IEditorRunOptions } from "../common/context/options.type";
export class CoreEditor {
+ private editor: IEditorRunOptions["editor"];
private ecsLibrary: ECSClientLibrary;
- constructor(ecsLibrary: ECSClientLibrary) {
+ constructor(editor: IEditorRunOptions["editor"], ecsLibrary: ECSClientLibrary) {
+ this.editor = editor;
this.ecsLibrary = ecsLibrary;
}
- public askEntitiesHotReload(saveComponents: SaveComponent[], entityToReload: SaveEntity[]): void {
+ public runEvents() {
+ const events: (EventTypeEnum | string)[] = this.editor.events.eventQueue;
+ while (events.length > 0) {
+ const event = events.shift();
+ switch (event) {
+ case EventTypeEnum.HOT_RELOAD:
+ this.askEntitiesHotReload();
+ break;
+ default:
+ console.warn(`Unknown event type ${event}`);
+ }
+ }
+ }
+
+ public askEntitiesHotReload(): void {
const reg = this.ecsLibrary.registry;
- entityToReload.forEach(({ id, components }) => {
+ const save = this.editor.save;
+ save.entities.forEach(({ id, components }) => {
Object.entries(components).forEach(([componentName, params]) => {
- const ogComponent = saveComponents.find(({ name: paramName }) => {
+ const ogComponent = save.components.find(({ name: paramName }) => {
return paramName == componentName;
});
if (!ogComponent) {
diff --git a/packages/core-editor/test/editor-feature.spec.ts b/packages/core-editor/test/editor-feature.spec.ts
index b5674dcf..2c67193c 100644
--- a/packages/core-editor/test/editor-feature.spec.ts
+++ b/packages/core-editor/test/editor-feature.spec.ts
@@ -1,57 +1,75 @@
import { type ECSClientLibrary } from "@nanoforge-dev/ecs-client";
-import { describe, expect, it, vi } from "vitest";
+import { afterEach, describe, expect, it, vi } from "vitest";
-import { type SaveComponent, type SaveEntity } from "../src/common/context/save.type";
+import { type EventEmitter, EventTypeEnum } from "../src/common/context/event-emitter.type";
+import type { IEditorRunOptions } from "../src/common/context/options.type";
+import { type Save, type SaveComponent, type SaveEntity } from "../src/common/context/save.type";
import { CoreEditor } from "../src/editor/core-editor";
-const getIndex = vi.fn((component) => {
- return Number(component.entityId.slice(-1));
-});
-
-const FakeRegistry = vi.fn(
- class {
- addComponent = vi.fn();
- getComponentsConst = vi.fn(() => ({ getIndex }));
- getEntityComponent = vi.fn((entity: number, component) => {
- return (
- {
- 2: {
- Position: {
- name: "Position",
- x: 3,
- y: 4,
- },
- Bullets: {
- name: "Bullets",
- number: 4,
- bulletTypes: ["9mm"],
- },
- __RESERVED_ENTITY_ID: {
- entityId: "ent2",
- },
- },
- 3: {
- Position: {
- name: "Position",
- x: 7,
- y: 8,
- },
- __RESERVED_ENTITY_ID: {
- entityId: "ent3",
- },
- },
- } as Record>
- )[entity]?.[component.name];
- });
- entityFromIndex = vi.fn((index) => {
- return index;
+describe("EditorFeatures", () => {
+ afterEach(() => {
+ vi.restoreAllMocks();
+ });
+ describe("eventEmitter", () => {
+ it("should execute eventQueue once", async () => {
+ const events: EventEmitter = {
+ eventQueue: [EventTypeEnum.HOT_RELOAD, EventTypeEnum.HOT_RELOAD],
+ };
+ const spyHotReload = vi
+ .spyOn(CoreEditor.prototype, "askEntitiesHotReload")
+ .mockImplementation(() => {});
+ new CoreEditor({ events } as IEditorRunOptions["editor"], {} as ECSClientLibrary).runEvents();
+ expect(spyHotReload).toHaveBeenCalledTimes(2);
});
- },
-);
+ });
-describe("EditorFeatures", () => {
describe("askEntitiesHotReload", () => {
it("should reload entities with new save variables", async () => {
+ const getIndex = vi.fn((component) => {
+ return Number(component.entityId.slice(-1));
+ });
+
+ const FakeRegistry = vi.fn(
+ class {
+ addComponent = vi.fn();
+ getComponentsConst = vi.fn(() => ({ getIndex }));
+ getEntityComponent = vi.fn((entity: number, component) => {
+ return (
+ {
+ 2: {
+ Position: {
+ name: "Position",
+ x: 3,
+ y: 4,
+ },
+ Bullets: {
+ name: "Bullets",
+ number: 4,
+ bulletTypes: ["9mm"],
+ },
+ __RESERVED_ENTITY_ID: {
+ entityId: "ent2",
+ },
+ },
+ 3: {
+ Position: {
+ name: "Position",
+ x: 7,
+ y: 8,
+ },
+ __RESERVED_ENTITY_ID: {
+ entityId: "ent3",
+ },
+ },
+ } as Record>
+ )[entity]?.[component.name];
+ });
+ entityFromIndex = vi.fn((index) => {
+ return index;
+ });
+ },
+ );
+
const components: SaveComponent[] = [
{
name: "Position",
@@ -89,10 +107,15 @@ describe("EditorFeatures", () => {
},
];
const fakeReg = new FakeRegistry();
- new CoreEditor({ registry: fakeReg } as any as ECSClientLibrary).askEntitiesHotReload(
- components,
- entities,
- );
+ new CoreEditor(
+ {
+ save: {
+ components,
+ entities,
+ } as any as Save,
+ } as any as IEditorRunOptions["editor"],
+ { registry: fakeReg } as any as ECSClientLibrary,
+ ).askEntitiesHotReload();
expect(fakeReg.getComponentsConst).toHaveBeenCalledWith({ name: "__RESERVED_ENTITY_ID" });
expect(getIndex).toHaveBeenNthCalledWith(1, {
entityId: "ent2",
From 08bbe57cf3778d68d5d1b8f53bf07af05df76616 Mon Sep 17 00:00:00 2001
From: Tchips46
Date: Tue, 31 Mar 2026 00:55:20 +0900
Subject: [PATCH 09/15] feat(core-editor): cleaner event manager
---
packages/core-editor/.cliff-jumperrc.json | 2 +-
packages/core-editor/.idea/.name | 2 +-
...iml => [NanoForge] Engine Core Editor.iml} | 0
packages/core-editor/.idea/modules.xml | 2 +-
packages/core-editor/CHANGELOG.md | 45 -----------------
packages/core-editor/README.md | 19 ++++---
packages/core-editor/cliff.toml | 2 +-
packages/core-editor/package.json | 2 +-
.../src/common/context/event-emitter.type.ts | 20 +++++++-
.../src/common/context/options.type.ts | 9 ++--
.../core-editor/src/editor/core-editor.ts | 13 +----
.../src/editor/event-emitter.manager.ts | 50 +++++++++++++++++++
.../core-editor/test/editor-feature.spec.ts | 15 ++++--
13 files changed, 99 insertions(+), 82 deletions(-)
rename packages/core-editor/.idea/{[NanoForge] Engine Core.iml => [NanoForge] Engine Core Editor.iml} (100%)
create mode 100644 packages/core-editor/src/editor/event-emitter.manager.ts
diff --git a/packages/core-editor/.cliff-jumperrc.json b/packages/core-editor/.cliff-jumperrc.json
index fe6d9d4a..05f3e85e 100644
--- a/packages/core-editor/.cliff-jumperrc.json
+++ b/packages/core-editor/.cliff-jumperrc.json
@@ -2,6 +2,6 @@
"$schema": "https://raw.githubusercontent.com/favware/cliff-jumper/main/assets/cliff-jumper.schema.json",
"name": "core",
"org": "nanoforge-dev",
- "packagePath": "packages/core",
+ "packagePath": "packages/core-editor",
"identifierBase": false
}
diff --git a/packages/core-editor/.idea/.name b/packages/core-editor/.idea/.name
index 3d3e7caa..b5da13ff 100644
--- a/packages/core-editor/.idea/.name
+++ b/packages/core-editor/.idea/.name
@@ -1 +1 @@
-[NanoForge] Engine Core
\ No newline at end of file
+[NanoForge] Engine Core Editor
\ No newline at end of file
diff --git a/packages/core-editor/.idea/[NanoForge] Engine Core.iml b/packages/core-editor/.idea/[NanoForge] Engine Core Editor.iml
similarity index 100%
rename from packages/core-editor/.idea/[NanoForge] Engine Core.iml
rename to packages/core-editor/.idea/[NanoForge] Engine Core Editor.iml
diff --git a/packages/core-editor/.idea/modules.xml b/packages/core-editor/.idea/modules.xml
index 99922e22..529602fb 100644
--- a/packages/core-editor/.idea/modules.xml
+++ b/packages/core-editor/.idea/modules.xml
@@ -2,7 +2,7 @@
-
+
\ No newline at end of file
diff --git a/packages/core-editor/CHANGELOG.md b/packages/core-editor/CHANGELOG.md
index 1d7fb605..53aaa9de 100644
--- a/packages/core-editor/CHANGELOG.md
+++ b/packages/core-editor/CHANGELOG.md
@@ -2,58 +2,13 @@
All notable changes to this project will be documented in this file.
-# [@nanoforge-dev/core@1.0.1](https://github.com/NanoForge-dev/Engine/compare/@nanoforge-dev/core@1.0.0...@nanoforge-dev/core@1.0.1) - (2026-02-16)
-
## Documentation
-- Setup typedoc (#192) ([fa908e7](https://github.com/NanoForge-dev/Engine/commit/fa908e7e268fa1770be58fc62a0257f3760480b2)) by @MartinFillon
-- Fix readme badges (#186) ([fd8d93d](https://github.com/NanoForge-dev/Engine/commit/fd8d93d13a0fbad95ef9952acd10faad9e112c78)) by @Exeloo
-
-# [@nanoforge-dev/core@1.0.0](https://github.com/NanoForge-dev/Engine/tree/@nanoforge-dev/core@1.0.0) - (2026-01-09)
-
## Bug Fixes
-- **graphics:** Game loop ([53329d2](https://github.com/NanoForge-dev/Engine/commit/53329d28c47bfac9fe86259e9fc6f42b206062a8)) by @Exeloo
-- **graphics:** Fix display ([d8522e5](https://github.com/NanoForge-dev/Engine/commit/d8522e56678f3bd136733f7941c1d917c18b1400)) by @Exeloo
-- **ecs:** Fix tests ([d33ada5](https://github.com/NanoForge-dev/Engine/commit/d33ada5d9c37e331b8178aa1fc0daee88b07131c)) by @Exeloo
-- **ecs:** Change type handling on lib ecs ([580192d](https://github.com/NanoForge-dev/Engine/commit/580192d5038f386c965434f78aacdf3d1e399ff8)) by @Exeloo
-
## Documentation
-- Update README files with new structure and detailed usage examples for all packages (#157) ([63fab73](https://github.com/NanoForge-dev/Engine/commit/63fab7326bd9c7e6b00f950694ab16c9d9190c53)) by @Exeloo
-- Add funding (#147) ([7301fad](https://github.com/NanoForge-dev/Engine/commit/7301fad10f59b7e1f7fa788f8a2f6fc81d0db72e)) by @Exeloo
-- Add a basic introduction readme ([b240964](https://github.com/NanoForge-dev/Engine/commit/b240964a265b31769a8c5422e23e20156ba56192)) by @MartinFillon
-- Add building and dependency docs to every readme ([2d4785b](https://github.com/NanoForge-dev/Engine/commit/2d4785bdcb455e83337b37540f9ab6b3394c0850)) by @MartinFillon
-
## Features
-- **packages/network:** Client and server for tcp/udp and networked pong as example (#156) ([839fb95](https://github.com/NanoForge-dev/Engine/commit/839fb95449f6ae0ee66d7f7e279374268b743f65)) by @Tchips46
-- **core:** Add client/server distinction and update rendering logic (#119) ([5271432](https://github.com/NanoForge-dev/Engine/commit/5271432710031396d7e433bfdfb015e3871f69d0)) by @Exeloo
-- Add schematics used types (#102) ([b992306](https://github.com/NanoForge-dev/Engine/commit/b9923064ba1da3164b1739fcdec5a819734c4ba2)) by @Exeloo
-- **core:** Introduce `EditableApplicationContext` for managing sound libraries ([6c7bac2](https://github.com/NanoForge-dev/Engine/commit/6c7bac261eeb7ad79203d5695d5ad76dc9e9e9f5)) by @Exeloo
-- **core:** Add Context that admit a ClientLibraryManager ([3835bc8](https://github.com/NanoForge-dev/Engine/commit/3835bc8a6e6d039f11a513b7fe54c353f90e9fe1)) by @Exeloo
-- **music:** Finish music library and add an interface for mutable libraries ([8e00c5d](https://github.com/NanoForge-dev/Engine/commit/8e00c5d00f2901ada86f59667eff7e5d3446076b)) by @MartinFillon
-- **core:** Add `class-transformer` and `class-validator` dependencies for validation utilities ([fd94fe7](https://github.com/NanoForge-dev/Engine/commit/fd94fe7755999c5529335666720899792a691a36)) by @Exeloo
-- **common, core, config:** Introduce configuration registry and validation system ([4fafb82](https://github.com/NanoForge-dev/Engine/commit/4fafb82576fec6866fc281ad5b10321d2ac430df)) by @Exeloo
-- **core:** Enhance type safety and execution context handling ([d986030](https://github.com/NanoForge-dev/Engine/commit/d986030a333bc08d2e37291d1a023cf8d7a6e1d6)) by @Exeloo
-- **app:** Add the ability to mute and unmute sounds ([947bdc0](https://github.com/NanoForge-dev/Engine/commit/947bdc00784a4c3313fe08feb4f91fc91b3ac7b7)) by @MartinFillon
-- **sound:** Add basic sound playing to example ([7335814](https://github.com/NanoForge-dev/Engine/commit/7335814fc532ee92a5f9d776f409c5faa4d56423)) by @MartinFillon
-- **core:** Add default libraries to constructor ([7d9da69](https://github.com/NanoForge-dev/Engine/commit/7d9da69be4301875020176656276236b88b737f1)) by @Exeloo
-- Add dependencies handling ([e51dd3b](https://github.com/NanoForge-dev/Engine/commit/e51dd3bdb5e2e3de21339bf6218e85f935efb9d5)) by @Exeloo
-- **common:** Add dependencies handler ([edb098a](https://github.com/NanoForge-dev/Engine/commit/edb098a65fb932ba9a9532a9b1eee7d64a7a8f0d)) by @Exeloo
-- **core:** Add tickrate and fix runner ([1dba5bd](https://github.com/NanoForge-dev/Engine/commit/1dba5bd89ffa20dfd29b079f93c3eb923ffbdbbc)) by @Exeloo
-- **input:** Add input library ([387e97d](https://github.com/NanoForge-dev/Engine/commit/387e97d7c3015a869947af4acecf48e8e1b0e2b8)) by @Exeloo
-- **game:** Create pong example game ([4b66674](https://github.com/NanoForge-dev/Engine/commit/4b66674c750f345e860d225384054423433beb07)) by @bill-h4rper
-- **game:** Add width and height ([c93c985](https://github.com/NanoForge-dev/Engine/commit/c93c985665bd99c09bc410f1499d11aeaffe3c4c)) by @Exeloo
-- **game:** Add graphics factory ([0f4453c](https://github.com/NanoForge-dev/Engine/commit/0f4453ced908b39e953a672324e97eba82bfeaa3)) by @Exeloo
-- **asset-manager:** Add asset manager ([1774a26](https://github.com/NanoForge-dev/Engine/commit/1774a26593099b4faa0a2527d1684de35211d5d2)) by @Exeloo
-- Add asset manager default in core ([26cc5a9](https://github.com/NanoForge-dev/Engine/commit/26cc5a99e014fbc8669a43cc4aa4d78ecc1dee14)) by @Exeloo
-- Add core and common ([1755c79](https://github.com/NanoForge-dev/Engine/commit/1755c799c143513d72b28edaac875267d484a44f)) by @Exeloo
-- Initial commit ([c9bb59e](https://github.com/NanoForge-dev/Engine/commit/c9bb59ee963e7b444e8668db55597915e9ef0e4b)) by @Exeloo
-
## Refactor
-- **core:** Remove default libs in factory (#118) ([fa893c7](https://github.com/NanoForge-dev/Engine/commit/fa893c71616f151343c2f52a4723a64cca65814a)) by @Exeloo
-- Migrate namespaces to `@nanoforge-dev` and update related imports ([c84c927](https://github.com/NanoForge-dev/Engine/commit/c84c927ead941d914e5a9fd752fd3a5ac969f981)) by @Exeloo
-- **libraries:** Implement initialization validation and standardize nullable fields ([8b04575](https://github.com/NanoForge-dev/Engine/commit/8b04575cf7f649a440b8f40ad6114414406b0c1a)) by @Exeloo
-
diff --git a/packages/core-editor/README.md b/packages/core-editor/README.md
index f114fe2e..af648541 100644
--- a/packages/core-editor/README.md
+++ b/packages/core-editor/README.md
@@ -16,17 +16,17 @@
## About
-`@nanoforge-dev/core` is a core package that contains game main loop. It is used to initialize the game and run it.
+`@nanoforge-dev/core-editor` is a core package that contains game main loop. It is used to initialize the game and run it.
## Installation
**Node.js 24.11.0 or newer is required.**
```sh
-npm install @nanoforge-dev/core
-yarn add @nanoforge-dev/core
-pnpm add @nanoforge-dev/core
-bun add @nanoforge-dev/core
+npm install @nanoforge-dev/core-editor
+yarn add @nanoforge-dev/core-editor
+pnpm add @nanoforge-dev/core-editor
+bun add @nanoforge-dev/core-editor
```
## Example usage
@@ -34,10 +34,9 @@ bun add @nanoforge-dev/core
Initialize the game in your main file.
```ts
-import { type IRunOptions } from "@nanoforge-dev/common";
-import { NanoforgeFactory } from "@nanoforge-dev/core";
+import { IEditorRunOptions, NanoforgeFactory } from "@nanoforge-dev/core-editor";
-export async function main(options: IRunClientOptions) {
+export async function main(options: IEditorRunOptions) {
const app = NanoforgeFactory.createClient();
await app.init(options);
@@ -63,6 +62,6 @@ If you don't understand something in the documentation, you are experiencing pro
[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/core
-[npm]: https://www.npmjs.com/package/@nanoforge-dev/core
+[source]: https://github.com/NanoForge-dev/Engine/tree/main/packages/core-editor
+[npm]: https://www.npmjs.com/package/@nanoforge-dev/core-editor
[contributing]: https://github.com/NanoForge-dev/Engine/blob/main/.github/CONTRIBUTING.md
diff --git a/packages/core-editor/cliff.toml b/packages/core-editor/cliff.toml
index 59978d4c..a9abf0b7 100644
--- a/packages/core-editor/cliff.toml
+++ b/packages/core-editor/cliff.toml
@@ -69,7 +69,7 @@ commit_parsers = [
]
filter_commits = true
protect_breaking_commits = true
-tag_pattern = "@nanoforge-dev/core@[0-9]*"
+tag_pattern = "@nanoforge-dev/core-editor@[0-9]*"
ignore_tags = ""
topo_order = false
sort_commits = "newest"
diff --git a/packages/core-editor/package.json b/packages/core-editor/package.json
index 8f9080bf..c2fe4a6a 100644
--- a/packages/core-editor/package.json
+++ b/packages/core-editor/package.json
@@ -1,7 +1,7 @@
{
"$schema": "https://json.schemastore.org/package.json",
"name": "@nanoforge-dev/core-editor",
- "version": "1.0",
+ "version": "0.0",
"description": "NanoForge Engine - Core Editor",
"keywords": [
"nanoforge",
diff --git a/packages/core-editor/src/common/context/event-emitter.type.ts b/packages/core-editor/src/common/context/event-emitter.type.ts
index c9c040d0..c90caba3 100644
--- a/packages/core-editor/src/common/context/event-emitter.type.ts
+++ b/packages/core-editor/src/common/context/event-emitter.type.ts
@@ -3,6 +3,22 @@ export enum EventTypeEnum {
HARD_RELOAD = "hard-reload",
}
-export interface EventEmitter {
- eventQueue: (EventTypeEnum | string)[];
+export type ListenerType = (...args: any[]) => void;
+
+export interface IEventEmitter {
+ listeners: Record;
+ eventQueue: { event: EventTypeEnum | string; args: any[] }[];
+
+ runEvents: () => void;
+
+ emitEvent: (event: EventTypeEnum, ...args: any) => void;
+
+ addListener: (event: EventTypeEnum | string, listener: ListenerType) => void;
+ on: (event: EventTypeEnum | string, listener: ListenerType) => void;
+
+ removeListener: (event: EventTypeEnum | string, listener: ListenerType) => void;
+ off: (event: EventTypeEnum | string, listener: ListenerType) => void;
+
+ removeListenersForEvent: (event: EventTypeEnum | string) => void;
+ removeAllListeners: () => void;
}
diff --git a/packages/core-editor/src/common/context/options.type.ts b/packages/core-editor/src/common/context/options.type.ts
index 3a06c151..1fc49839 100644
--- a/packages/core-editor/src/common/context/options.type.ts
+++ b/packages/core-editor/src/common/context/options.type.ts
@@ -1,4 +1,4 @@
-import { type EventEmitter } from "./event-emitter.type";
+import { type EventEmitter } from "../../editor/event-emitter.manager";
import { type Save } from "./save.type";
export type IEditorRunOptions = IEditorRunClientOptions | IEditorRunServerOptions;
@@ -9,15 +9,16 @@ export interface IEditorRunClientOptions {
env: Record;
editor: {
save: Save;
- events: EventEmitter;
+ coreEvents: EventEmitter;
+ editorEvents: EventEmitter;
};
}
export interface IEditorRunServerOptions {
- canvas: HTMLCanvasElement;
files: Map;
env: Record;
editor: {
save: Save;
- events: EventEmitter;
+ coreEvents: EventEmitter;
+ editorEvents: EventEmitter;
};
}
diff --git a/packages/core-editor/src/editor/core-editor.ts b/packages/core-editor/src/editor/core-editor.ts
index 2f454410..553638d5 100644
--- a/packages/core-editor/src/editor/core-editor.ts
+++ b/packages/core-editor/src/editor/core-editor.ts
@@ -10,20 +10,11 @@ export class CoreEditor {
constructor(editor: IEditorRunOptions["editor"], ecsLibrary: ECSClientLibrary) {
this.editor = editor;
this.ecsLibrary = ecsLibrary;
+ this.editor.coreEvents?.addListener(EventTypeEnum.HOT_RELOAD, this.askEntitiesHotReload);
}
public runEvents() {
- const events: (EventTypeEnum | string)[] = this.editor.events.eventQueue;
- while (events.length > 0) {
- const event = events.shift();
- switch (event) {
- case EventTypeEnum.HOT_RELOAD:
- this.askEntitiesHotReload();
- break;
- default:
- console.warn(`Unknown event type ${event}`);
- }
- }
+ this.editor.coreEvents?.runEvents();
}
public askEntitiesHotReload(): void {
diff --git a/packages/core-editor/src/editor/event-emitter.manager.ts b/packages/core-editor/src/editor/event-emitter.manager.ts
new file mode 100644
index 00000000..3498d826
--- /dev/null
+++ b/packages/core-editor/src/editor/event-emitter.manager.ts
@@ -0,0 +1,50 @@
+import {
+ type EventTypeEnum,
+ type IEventEmitter,
+ type ListenerType,
+} from "../common/context/event-emitter.type";
+
+export class EventEmitter implements IEventEmitter {
+ public listeners: Record = {};
+ public eventQueue: { event: EventTypeEnum | string; args: any[] }[] = [];
+
+ public runEvents = () => {
+ this.eventQueue.forEach(({ event, args }) => {
+ this.listeners[event]?.forEach((listener) => {
+ listener(...args);
+ });
+ });
+ this.eventQueue = [];
+ };
+
+ public emitEvent(event: EventTypeEnum | string, ...args: any[]) {
+ this.eventQueue.push({ event, args });
+ }
+
+ public addListener(event: EventTypeEnum | string, listener: ListenerType): void {
+ if (!this.listeners[event]) this.listeners[event] = [];
+ this.listeners[event].push(listener);
+ }
+ public on(event: EventTypeEnum | string, listener: ListenerType): void {
+ this.addListener(event, listener);
+ }
+
+ public removeListener(event: EventTypeEnum | string, listener: ListenerType): void {
+ if (!this.listeners[event]) return;
+ const index = this.listeners[event].indexOf(listener);
+ if (index >= 0) {
+ this.listeners[event].splice(index, 1);
+ }
+ }
+ public off(event: EventTypeEnum | string, listener: ListenerType): void {
+ this.removeListener(event, listener);
+ }
+
+ public removeListenersForEvent(event: EventTypeEnum | string): void {
+ if (!this.listeners[event]) return;
+ this.listeners[event] = [];
+ }
+ public removeAllListeners(): void {
+ this.listeners = {};
+ }
+}
diff --git a/packages/core-editor/test/editor-feature.spec.ts b/packages/core-editor/test/editor-feature.spec.ts
index 2c67193c..bd442f78 100644
--- a/packages/core-editor/test/editor-feature.spec.ts
+++ b/packages/core-editor/test/editor-feature.spec.ts
@@ -1,24 +1,29 @@
import { type ECSClientLibrary } from "@nanoforge-dev/ecs-client";
import { afterEach, describe, expect, it, vi } from "vitest";
-import { type EventEmitter, EventTypeEnum } from "../src/common/context/event-emitter.type";
+import { EventTypeEnum } from "../src/common/context/event-emitter.type";
import type { IEditorRunOptions } from "../src/common/context/options.type";
import { type Save, type SaveComponent, type SaveEntity } from "../src/common/context/save.type";
import { CoreEditor } from "../src/editor/core-editor";
+import { EventEmitter } from "../src/editor/event-emitter.manager";
describe("EditorFeatures", () => {
afterEach(() => {
vi.restoreAllMocks();
});
+
describe("eventEmitter", () => {
it("should execute eventQueue once", async () => {
- const events: EventEmitter = {
- eventQueue: [EventTypeEnum.HOT_RELOAD, EventTypeEnum.HOT_RELOAD],
- };
+ const events = new EventEmitter();
+ events.emitEvent(EventTypeEnum.HOT_RELOAD);
+ events.emitEvent(EventTypeEnum.HOT_RELOAD);
const spyHotReload = vi
.spyOn(CoreEditor.prototype, "askEntitiesHotReload")
.mockImplementation(() => {});
- new CoreEditor({ events } as IEditorRunOptions["editor"], {} as ECSClientLibrary).runEvents();
+ new CoreEditor(
+ { coreEvents: events } as IEditorRunOptions["editor"],
+ {} as ECSClientLibrary,
+ ).runEvents();
expect(spyHotReload).toHaveBeenCalledTimes(2);
});
});
From 78d9d43f6679926aa2cea324dda23b5951282dd6 Mon Sep 17 00:00:00 2001
From: Tchips46
Date: Tue, 31 Mar 2026 00:55:58 +0900
Subject: [PATCH 10/15] fix(core-editor): cliffer name
---
packages/core-editor/.cliff-jumperrc.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/packages/core-editor/.cliff-jumperrc.json b/packages/core-editor/.cliff-jumperrc.json
index 05f3e85e..c760745b 100644
--- a/packages/core-editor/.cliff-jumperrc.json
+++ b/packages/core-editor/.cliff-jumperrc.json
@@ -1,6 +1,6 @@
{
"$schema": "https://raw.githubusercontent.com/favware/cliff-jumper/main/assets/cliff-jumper.schema.json",
- "name": "core",
+ "name": "core-editor",
"org": "nanoforge-dev",
"packagePath": "packages/core-editor",
"identifierBase": false
From 462d859dc96b4a549ac591df571855791ad7e2b8 Mon Sep 17 00:00:00 2001
From: Tchips46
Date: Tue, 31 Mar 2026 10:47:47 +0900
Subject: [PATCH 11/15] feat(core-editor): use core fonctions
---
.../src/application/application-config.ts | 89 ---------
.../application/application-options.type.ts | 3 -
.../src/application/nanoforge-application.ts | 6 +-
.../src/application/nanoforge-factory.ts | 2 +-
.../contexts/application.editable-context.ts | 20 --
.../executions/clear.editable-context.ts | 3 -
.../executions/execution.editable-context.ts | 3 -
.../executions/init.editable-context.ts | 3 -
.../contexts/library.editable-context.ts | 7 -
.../common/library/manager/library.manager.ts | 106 ----------
.../common/library/relationship-functions.ts | 122 ------------
.../core-editor/src/config/config-registry.ts | 19 --
packages/core-editor/src/core/core.ts | 12 +-
.../core-editor/test/config-registry.spec.ts | 54 ------
.../test/editable-library-manager.spec.ts | 182 ------------------
.../core-editor/test/relationship.spec.ts | 135 -------------
packages/core-editor/tsconfig.json | 7 +-
.../src/application/application-config.ts | 4 +-
18 files changed, 18 insertions(+), 759 deletions(-)
delete mode 100644 packages/core-editor/src/application/application-config.ts
delete mode 100644 packages/core-editor/src/application/application-options.type.ts
delete mode 100644 packages/core-editor/src/common/context/contexts/application.editable-context.ts
delete mode 100644 packages/core-editor/src/common/context/contexts/executions/clear.editable-context.ts
delete mode 100644 packages/core-editor/src/common/context/contexts/executions/execution.editable-context.ts
delete mode 100644 packages/core-editor/src/common/context/contexts/executions/init.editable-context.ts
delete mode 100644 packages/core-editor/src/common/context/contexts/library.editable-context.ts
delete mode 100644 packages/core-editor/src/common/library/manager/library.manager.ts
delete mode 100644 packages/core-editor/src/common/library/relationship-functions.ts
delete mode 100644 packages/core-editor/src/config/config-registry.ts
delete mode 100644 packages/core-editor/test/config-registry.spec.ts
delete mode 100644 packages/core-editor/test/editable-library-manager.spec.ts
delete mode 100644 packages/core-editor/test/relationship.spec.ts
diff --git a/packages/core-editor/src/application/application-config.ts b/packages/core-editor/src/application/application-config.ts
deleted file mode 100644
index 7eeede0c..00000000
--- a/packages/core-editor/src/application/application-config.ts
+++ /dev/null
@@ -1,89 +0,0 @@
-import {
- type IAssetManagerLibrary,
- type IComponentSystemLibrary,
- type IGraphicsLibrary,
- type IInputLibrary,
- type ILibrary,
- type IMusicLibrary,
- type INetworkLibrary,
- type ISoundLibrary,
- type LibraryHandle,
-} from "@nanoforge-dev/common";
-
-import { EditableLibraryManager } from "../common/library/manager/library.manager";
-
-export class ApplicationConfig {
- private readonly _libraryManager: EditableLibraryManager;
-
- constructor() {
- this._libraryManager = new EditableLibraryManager();
- }
-
- get libraryManager(): EditableLibraryManager {
- return this._libraryManager;
- }
-
- public getLibrary(sym: symbol): LibraryHandle {
- return this._libraryManager.get(sym);
- }
-
- public useLibrary(sym: symbol, library: ILibrary): void {
- this._libraryManager.set(sym, library);
- }
-
- public getComponentSystemLibrary() {
- return this._libraryManager.getComponentSystem();
- }
-
- public useComponentSystemLibrary(library: IComponentSystemLibrary) {
- this._libraryManager.setComponentSystem(library);
- }
-
- public getGraphicsLibrary() {
- return this._libraryManager.getGraphics();
- }
-
- public useGraphicsLibrary(library: IGraphicsLibrary) {
- this._libraryManager.setGraphics(library);
- }
-
- public getNetworkLibrary() {
- return this._libraryManager.getNetwork();
- }
-
- public useNetworkLibrary(library: INetworkLibrary) {
- this._libraryManager.setNetwork(library);
- }
-
- public getAssetManagerLibrary() {
- return this._libraryManager.getAssetManager();
- }
-
- public useAssetManagerLibrary(library: IAssetManagerLibrary) {
- this._libraryManager.setAssetManager(library);
- }
-
- public getInputLibrary() {
- return this._libraryManager.getInput();
- }
-
- public useInputLibrary(library: IInputLibrary) {
- this._libraryManager.setInput(library);
- }
-
- public getSoundLibrary() {
- return this._libraryManager.getSound();
- }
-
- public useSoundLibrary(library: ISoundLibrary) {
- this._libraryManager.setSound(library);
- }
-
- public getMusicLibrary() {
- return this._libraryManager.getMusic();
- }
-
- public useMusicLibrary(library: IMusicLibrary) {
- this._libraryManager.setMusic(library);
- }
-}
diff --git a/packages/core-editor/src/application/application-options.type.ts b/packages/core-editor/src/application/application-options.type.ts
deleted file mode 100644
index 57ecc833..00000000
--- a/packages/core-editor/src/application/application-options.type.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-export interface IApplicationOptions {
- tickRate: number;
-}
diff --git a/packages/core-editor/src/application/nanoforge-application.ts b/packages/core-editor/src/application/nanoforge-application.ts
index 81f6ea6e..66bb18eb 100644
--- a/packages/core-editor/src/application/nanoforge-application.ts
+++ b/packages/core-editor/src/application/nanoforge-application.ts
@@ -6,11 +6,11 @@ import {
NfNotInitializedException,
} from "@nanoforge-dev/common";
-import { EditableApplicationContext } from "../common/context/contexts/application.editable-context";
+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";
-import { ApplicationConfig } from "./application-config";
-import type { IApplicationOptions } from "./application-options.type";
export abstract class NanoforgeApplication {
protected applicationConfig: ApplicationConfig;
diff --git a/packages/core-editor/src/application/nanoforge-factory.ts b/packages/core-editor/src/application/nanoforge-factory.ts
index 84711a6d..98ec685e 100644
--- a/packages/core-editor/src/application/nanoforge-factory.ts
+++ b/packages/core-editor/src/application/nanoforge-factory.ts
@@ -1,4 +1,4 @@
-import { type IApplicationOptions } from "./application-options.type";
+import { type IApplicationOptions } from "../../../core/src/application/application-options.type";
import { NanoforgeClient } from "./nanoforge-client";
import { NanoforgeServer } from "./nanoforge-server";
diff --git a/packages/core-editor/src/common/context/contexts/application.editable-context.ts b/packages/core-editor/src/common/context/contexts/application.editable-context.ts
deleted file mode 100644
index 492b797e..00000000
--- a/packages/core-editor/src/common/context/contexts/application.editable-context.ts
+++ /dev/null
@@ -1,20 +0,0 @@
-import { ApplicationContext } from "@nanoforge-dev/common";
-
-import { type EditableLibraryManager } from "../../library/manager/library.manager";
-
-export class EditableApplicationContext extends ApplicationContext {
- private _libraryManager: EditableLibraryManager;
-
- constructor(libraryManager: EditableLibraryManager) {
- super();
- this._libraryManager = libraryManager;
- }
-
- setDelta(delta: number) {
- this._delta = delta;
- }
-
- muteSoundLibraries(): void {
- this._libraryManager.getMutableLibraries().forEach((lib) => lib.library.mute());
- }
-}
diff --git a/packages/core-editor/src/common/context/contexts/executions/clear.editable-context.ts b/packages/core-editor/src/common/context/contexts/executions/clear.editable-context.ts
deleted file mode 100644
index 1081686d..00000000
--- a/packages/core-editor/src/common/context/contexts/executions/clear.editable-context.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-import { ClearContext } from "@nanoforge-dev/common";
-
-export class EditableClearContext extends ClearContext {}
diff --git a/packages/core-editor/src/common/context/contexts/executions/execution.editable-context.ts b/packages/core-editor/src/common/context/contexts/executions/execution.editable-context.ts
deleted file mode 100644
index e9b5b3de..00000000
--- a/packages/core-editor/src/common/context/contexts/executions/execution.editable-context.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-import { ExecutionContext } from "@nanoforge-dev/common";
-
-export class EditableExecutionContext extends ExecutionContext {}
diff --git a/packages/core-editor/src/common/context/contexts/executions/init.editable-context.ts b/packages/core-editor/src/common/context/contexts/executions/init.editable-context.ts
deleted file mode 100644
index 7ce44e10..00000000
--- a/packages/core-editor/src/common/context/contexts/executions/init.editable-context.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-import { InitContext } from "@nanoforge-dev/common";
-
-export class EditableInitContext extends InitContext {}
diff --git a/packages/core-editor/src/common/context/contexts/library.editable-context.ts b/packages/core-editor/src/common/context/contexts/library.editable-context.ts
deleted file mode 100644
index 48f942e8..00000000
--- a/packages/core-editor/src/common/context/contexts/library.editable-context.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-import { LibraryContext, type LibraryStatusEnum } from "@nanoforge-dev/common";
-
-export class EditableLibraryContext extends LibraryContext {
- setStatus(status: LibraryStatusEnum) {
- this._status = status;
- }
-}
diff --git a/packages/core-editor/src/common/library/manager/library.manager.ts b/packages/core-editor/src/common/library/manager/library.manager.ts
deleted file mode 100644
index 6e17b321..00000000
--- a/packages/core-editor/src/common/library/manager/library.manager.ts
+++ /dev/null
@@ -1,106 +0,0 @@
-import {
- ASSET_MANAGER_LIBRARY,
- COMPONENT_SYSTEM_LIBRARY,
- DefaultLibrariesEnum,
- GRAPHICS_LIBRARY,
- type IAssetManagerLibrary,
- type IComponentSystemLibrary,
- type IGraphicsLibrary,
- type IInputLibrary,
- type ILibrary,
- type IMusicLibrary,
- type IMutableLibrary,
- INPUT_LIBRARY,
- type INetworkLibrary,
- type IRunnerLibrary,
- type ISoundLibrary,
- type LibraryHandle,
- LibraryManager,
- MUSIC_LIBRARY,
- NETWORK_LIBRARY,
- SOUND_LIBRARY,
-} from "@nanoforge-dev/common";
-
-import { EditableLibraryContext } from "../../context/contexts/library.editable-context";
-import { Relationship } from "../relationship-functions";
-
-const hasMethod = (obj: any, method: string) => {
- return typeof obj[method] === "function";
-};
-
-export class EditableLibraryManager extends LibraryManager {
- public set(sym: symbol, library: ILibrary) {
- this.setNewLibrary(sym, library, new EditableLibraryContext());
- }
-
- public setComponentSystem(library: IComponentSystemLibrary): void {
- this._set(
- DefaultLibrariesEnum.COMPONENT_SYSTEM,
- COMPONENT_SYSTEM_LIBRARY,
- library,
- new EditableLibraryContext(),
- );
- }
-
- public setGraphics(library: IGraphicsLibrary): void {
- this._set(
- DefaultLibrariesEnum.GRAPHICS,
- GRAPHICS_LIBRARY,
- library,
- new EditableLibraryContext(),
- );
- }
-
- public setAssetManager(library: IAssetManagerLibrary): void {
- this._set(
- DefaultLibrariesEnum.ASSET_MANAGER,
- ASSET_MANAGER_LIBRARY,
- library,
- new EditableLibraryContext(),
- );
- }
-
- public setNetwork(library: INetworkLibrary): void {
- this._set(DefaultLibrariesEnum.NETWORK, NETWORK_LIBRARY, library, new EditableLibraryContext());
- }
-
- public setInput(library: IInputLibrary): void {
- this._set(DefaultLibrariesEnum.INPUT, INPUT_LIBRARY, library, new EditableLibraryContext());
- }
-
- public setSound(library: ISoundLibrary): void {
- this._set(DefaultLibrariesEnum.SOUND, SOUND_LIBRARY, library, new EditableLibraryContext());
- }
-
- public setMusic(library: IMusicLibrary): void {
- this._set(DefaultLibrariesEnum.MUSIC, MUSIC_LIBRARY, library, new EditableLibraryContext());
- }
-
- public getLibraries(): LibraryHandle[] {
- return this._libraries;
- }
-
- public getInitLibraries(): LibraryHandle[] {
- return Relationship.getLibrariesByDependencies(this._libraries);
- }
-
- public getExecutionLibraries(): LibraryHandle[] {
- return Relationship.getLibrariesByRun(this._getRunnerLibraries());
- }
-
- public getClearLibraries(): LibraryHandle[] {
- return Relationship.getLibrariesByDependencies(this._libraries, true);
- }
-
- public getMutableLibraries(): LibraryHandle[] {
- return this._libraries.filter(
- (handle) => handle && hasMethod(handle.library, "mute"),
- ) as LibraryHandle[];
- }
-
- private _getRunnerLibraries(): LibraryHandle[] {
- return this._libraries.filter(
- (handle) => handle && hasMethod(handle.library, "__run"),
- ) as LibraryHandle[];
- }
-}
diff --git a/packages/core-editor/src/common/library/relationship-functions.ts b/packages/core-editor/src/common/library/relationship-functions.ts
deleted file mode 100644
index d9ff0f2b..00000000
--- a/packages/core-editor/src/common/library/relationship-functions.ts
+++ /dev/null
@@ -1,122 +0,0 @@
-import { type ILibrary, type LibraryHandle } from "@nanoforge-dev/common";
-
-class RelationshipStatic {
- getLibrariesByDependencies(libraries: LibraryHandle[], reverse: boolean = false) {
- let response: LibraryHandle[] = [];
- for (const library of libraries) {
- if (!library) continue;
- response = this._pushLibraryWithDependencies(library, response, [], libraries);
- }
-
- if (reverse) return response.reverse();
- return response;
- }
-
- getLibrariesByRun(libraries: LibraryHandle[]) {
- let response: LibraryHandle[] = [];
- const dependencies = new Map>(
- libraries.map((library) => [library.symbol, new Set()]),
- );
-
- for (const handle of libraries) {
- const key = handle.symbol;
-
- for (const before of handle.library.__relationship.runBefore) {
- this._pushToDependencies(key, before, dependencies);
- }
- for (const after of handle.library.__relationship.runAfter) {
- this._pushToDependencies(after, key, dependencies);
- }
- }
-
- for (const library of libraries) {
- response = this._pushLibraryWithDependenciesRun(
- library,
- dependencies,
- response,
- [],
- libraries,
- );
- }
- return response;
- }
-
- private _pushToDependencies(
- key: symbol,
- value: symbol,
- dependencies: Map>,
- ): void {
- let curr = dependencies.get(key);
- if (!curr) curr = new Set();
- curr.add(value);
- dependencies.set(key, curr);
- }
-
- private _pushLibraryWithDependenciesRun(
- handle: LibraryHandle,
- dependencies: Map>,
- response: LibraryHandle[],
- cache: symbol[],
- libraries: LibraryHandle[],
- ): LibraryHandle[] {
- const key = handle.symbol;
- if (this._symbolIsInList(key, response)) return response;
-
- if (cache.includes(key)) throw new Error("Circular dependencies !");
-
- cache.push(key);
-
- const deps = dependencies.get(key);
- if (!deps) throw new Error("Dependencies not found");
-
- for (const dep of deps) {
- if (this._symbolIsInList(dep, response)) continue;
-
- const depHandle = libraries.find((lib) => lib?.symbol === dep) as LibraryHandle;
- if (!depHandle) throw new Error(`Cannot find library ${dep.toString()}`);
-
- response = this._pushLibraryWithDependenciesRun(
- depHandle,
- dependencies,
- response,
- cache,
- libraries,
- );
- }
- cache.pop();
-
- response.push(handle);
- return response;
- }
-
- private _pushLibraryWithDependencies(
- handle: LibraryHandle,
- response: LibraryHandle[],
- cache: symbol[],
- libraries: LibraryHandle[],
- ): LibraryHandle[] {
- if (this._symbolIsInList(handle.symbol, response)) return response;
-
- if (cache.includes(handle.symbol)) throw new Error("Circular dependencies !");
-
- cache.push(handle.symbol);
- for (const dep of handle.library.__relationship.dependencies) {
- if (this._symbolIsInList(dep, response)) continue;
-
- const depHandle = libraries.find((lib) => lib?.symbol === dep) as LibraryHandle;
- if (!depHandle) throw new Error(`Cannot find library ${dep.toString()}`);
-
- response = this._pushLibraryWithDependencies(depHandle, response, cache, libraries);
- }
- cache.pop();
-
- response.push(handle);
- return response;
- }
-
- private _symbolIsInList(sym: symbol, libraries: LibraryHandle[]): boolean {
- return libraries.some((lib) => lib.symbol === sym);
- }
-}
-
-export const Relationship = new RelationshipStatic();
diff --git a/packages/core-editor/src/config/config-registry.ts b/packages/core-editor/src/config/config-registry.ts
deleted file mode 100644
index 946ed1dc..00000000
--- a/packages/core-editor/src/config/config-registry.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-import { plainToInstance } from "class-transformer";
-import { validate } from "class-validator";
-
-export class ConfigRegistry {
- private readonly _env: Record;
-
- constructor(env: Record) {
- this._env = env;
- }
-
- async registerConfig(config: new () => T): Promise {
- const data = plainToInstance(config, this._env, { excludeExtraneousValues: true });
- const errors = await validate(data);
- if (errors.length > 0) {
- throw new Error(errors.toString());
- }
- return data;
- }
-}
diff --git a/packages/core-editor/src/core/core.ts b/packages/core-editor/src/core/core.ts
index 9857164b..b917ce2e 100644
--- a/packages/core-editor/src/core/core.ts
+++ b/packages/core-editor/src/core/core.ts
@@ -10,13 +10,13 @@ import {
} from "@nanoforge-dev/common";
import { type ECSClientLibrary } from "@nanoforge-dev/ecs-client";
-import { type ApplicationConfig } from "../application/application-config";
-import type { IApplicationOptions } from "../application/application-options.type";
-import { type EditableApplicationContext } from "../common/context/contexts/application.editable-context";
-import { EditableExecutionContext } from "../common/context/contexts/executions/execution.editable-context";
-import { type EditableLibraryContext } from "../common/context/contexts/library.editable-context";
+import { type ApplicationConfig } from "../../../core/src/application/application-config";
+import type { IApplicationOptions } from "../../../core/src/application/application-options.type";
+import { type EditableApplicationContext } from "../../../core/src/common/context/contexts/application.editable-context";
+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 { ConfigRegistry } from "../config/config-registry";
import { CoreEditor } from "../editor/core-editor";
export class Core {
diff --git a/packages/core-editor/test/config-registry.spec.ts b/packages/core-editor/test/config-registry.spec.ts
deleted file mode 100644
index 0a1e2844..00000000
--- a/packages/core-editor/test/config-registry.spec.ts
+++ /dev/null
@@ -1,54 +0,0 @@
-import { Expose } from "class-transformer";
-import { IsString } from "class-validator";
-import { describe, expect, it } from "vitest";
-
-import { ConfigRegistry } from "../src/config/config-registry";
-
-class ValidConfig {
- @Expose()
- @IsString()
- name!: string;
-}
-
-class OptionalConfig {
- @Expose()
- @IsString()
- name!: string;
-
- @Expose()
- host?: string;
-}
-
-describe("ConfigRegistry", () => {
- describe("registerConfig", () => {
- it("should return a transformed config instance when env is valid", async () => {
- const registry = new ConfigRegistry({ name: "hello" });
- const config = await registry.registerConfig(ValidConfig);
- expect(config).toBeInstanceOf(ValidConfig);
- expect(config.name).toBe("hello");
- });
-
- it("should exclude values not decorated with @Expose", async () => {
- const registry = new ConfigRegistry({ name: "hello", extra: "ignored" });
- const config = await registry.registerConfig(ValidConfig);
- expect((config as any)["extra"]).toBeUndefined();
- });
-
- it("should throw when a required field is missing", async () => {
- const registry = new ConfigRegistry({});
- await expect(registry.registerConfig(ValidConfig)).rejects.toThrow();
- });
-
- it("should throw when a field has the wrong type", async () => {
- const registry = new ConfigRegistry({ name: 42 });
- await expect(registry.registerConfig(ValidConfig)).rejects.toThrow();
- });
-
- it("should map multiple env fields correctly", async () => {
- const registry = new ConfigRegistry({ name: "world", host: "localhost" });
- const config = await registry.registerConfig(OptionalConfig);
- expect(config.name).toBe("world");
- expect(config.host).toBe("localhost");
- });
- });
-});
diff --git a/packages/core-editor/test/editable-library-manager.spec.ts b/packages/core-editor/test/editable-library-manager.spec.ts
deleted file mode 100644
index 0e808baa..00000000
--- a/packages/core-editor/test/editable-library-manager.spec.ts
+++ /dev/null
@@ -1,182 +0,0 @@
-import { COMPONENT_SYSTEM_LIBRARY, type ILibrary, LibraryStatusEnum } from "@nanoforge-dev/common";
-import { beforeEach, describe, expect, it } from "vitest";
-
-import { Library } from "../../common/src/library/libraries/library";
-import { EditableLibraryManager } from "../src/common/library/manager/library.manager";
-
-class StubLibrary extends Library {
- private readonly _name: string;
-
- constructor(name: string, options?: ConstructorParameters[0]) {
- super(options);
- this._name = name;
- }
-
- get __name(): string {
- return this._name;
- }
-}
-
-class StubRunnerLibrary extends StubLibrary {
- async __run(): Promise {}
-}
-
-class StubMutableLibrary extends StubLibrary {
- mute(): void {}
-}
-
-describe("EditableLibraryManager", () => {
- let manager: EditableLibraryManager;
-
- beforeEach(() => {
- manager = new EditableLibraryManager();
- });
-
- describe("typed setters and getters", () => {
- it("should store and retrieve a component system library", () => {
- const lib = new StubLibrary("ComponentSystem");
- manager.setComponentSystem(lib as any);
- expect(manager.getComponentSystem().library).toBe(lib);
- });
-
- it("should store and retrieve a graphics library", () => {
- const lib = new StubLibrary("Graphics");
- manager.setGraphics(lib as any);
- expect(manager.getGraphics().library).toBe(lib);
- });
-
- it("should store and retrieve an asset manager library", () => {
- const lib = new StubLibrary("AssetManager");
- manager.setAssetManager(lib as any);
- expect(manager.getAssetManager().library).toBe(lib);
- });
-
- it("should store and retrieve a network library", () => {
- const lib = new StubLibrary("Network");
- manager.setNetwork(lib as any);
- expect(manager.getNetwork().library).toBe(lib);
- });
-
- it("should store and retrieve an input library", () => {
- const lib = new StubLibrary("Input");
- manager.setInput(lib as any);
- expect(manager.getInput().library).toBe(lib);
- });
-
- it("should store and retrieve a sound library", () => {
- const lib = new StubLibrary("Sound");
- manager.setSound(lib as any);
- expect(manager.getSound().library).toBe(lib);
- });
-
- it("should store and retrieve a music library", () => {
- const lib = new StubLibrary("Music");
- manager.setMusic(lib as any);
- expect(manager.getMusic().library).toBe(lib);
- });
-
- it("should throw when getting a typed library that was not set", () => {
- expect(() => manager.getComponentSystem()).toThrow();
- });
- });
-
- describe("set and get (custom symbol)", () => {
- it("should store and retrieve a library by Symbol.for key", () => {
- const sym = Symbol.for("customLib");
- const lib = new StubLibrary("Custom");
-
- manager.setAssetManager(new StubLibrary("Asset") as any);
- manager.set(sym, lib as unknown as ILibrary);
-
- expect(manager.get(sym).library).toBe(lib);
- });
- });
-
- describe("getLibraries", () => {
- it("should return the list of all set libraries", () => {
- const lib = new StubLibrary("ComponentSystem");
- manager.setComponentSystem(lib as any);
- const libs = manager.getLibraries().filter(Boolean);
- expect(libs.some((h) => h.library === (lib as unknown as ILibrary))).toBe(true);
- });
- });
-
- describe("getInitLibraries", () => {
- it("should return libraries in dependency order", () => {
- const libA = new StubLibrary("A", { dependencies: [COMPONENT_SYSTEM_LIBRARY] });
- const libB = new StubLibrary("B");
-
- manager.setComponentSystem(libB as any);
- manager.setGraphics(libA as any);
-
- const order = manager.getInitLibraries().map((h) => h.library.__name);
- const idxB = order.indexOf("B");
- const idxA = order.indexOf("A");
-
- expect(idxB).toBeLessThan(idxA);
- });
-
- it("should return all set libraries", () => {
- manager.setAssetManager(new StubLibrary("Asset") as any);
- manager.setGraphics(new StubLibrary("Graphics") as any);
-
- expect(manager.getInitLibraries().length).toBe(2);
- });
- });
-
- describe("getClearLibraries", () => {
- it("should return libraries in reverse dependency order", () => {
- const libA = new StubLibrary("A", { dependencies: [COMPONENT_SYSTEM_LIBRARY] });
- const libB = new StubLibrary("B");
-
- manager.setComponentSystem(libB as any);
- manager.setGraphics(libA as any);
-
- const order = manager.getClearLibraries().map((h) => h.library.__name);
- const idxA = order.indexOf("A");
- const idxB = order.indexOf("B");
-
- expect(idxA).toBeLessThan(idxB);
- });
- });
-
- describe("getExecutionLibraries", () => {
- it("should only return libraries that implement __run", () => {
- manager.setComponentSystem(new StubLibrary("NotARunner") as any);
- manager.setGraphics(new StubRunnerLibrary("Runner") as any);
-
- const runners = manager.getExecutionLibraries();
- expect(runners.every((h) => typeof (h.library as any).__run === "function")).toBe(true);
- expect(runners.some((h) => h.library.__name === "Runner")).toBe(true);
- expect(runners.some((h) => h.library.__name === "NotARunner")).toBe(false);
- });
-
- it("should return empty when no runner libraries are set", () => {
- manager.setComponentSystem(new StubLibrary("Static") as any);
- expect(manager.getExecutionLibraries()).toHaveLength(0);
- });
- });
-
- describe("getMutableLibraries", () => {
- it("should only return libraries that implement mute", () => {
- manager.setSound(new StubMutableLibrary("MutableSound") as any);
- manager.setGraphics(new StubLibrary("NonMutableGraphics") as any);
-
- const mutable = manager.getMutableLibraries();
- expect(mutable.some((h) => h.library.__name === "MutableSound")).toBe(true);
- expect(mutable.some((h) => h.library.__name === "NonMutableGraphics")).toBe(false);
- });
-
- it("should return empty when no mutable libraries are set", () => {
- manager.setGraphics(new StubLibrary("Graphics") as any);
- expect(manager.getMutableLibraries()).toHaveLength(0);
- });
- });
-
- describe("library context status", () => {
- it("should start with UNLOADED status", () => {
- manager.setComponentSystem(new StubLibrary("Comp") as any);
- expect(manager.getComponentSystem().context.status).toBe(LibraryStatusEnum.UNLOADED);
- });
- });
-});
diff --git a/packages/core-editor/test/relationship.spec.ts b/packages/core-editor/test/relationship.spec.ts
deleted file mode 100644
index 776fa493..00000000
--- a/packages/core-editor/test/relationship.spec.ts
+++ /dev/null
@@ -1,135 +0,0 @@
-import { type ILibrary, LibraryContext, LibraryHandle } from "@nanoforge-dev/common";
-import { describe, expect, it } from "vitest";
-
-import { Library } from "../../common/src/library/libraries/library";
-import { Relationship } from "../src/common/library/relationship-functions";
-
-class StubLibrary extends Library {
- private readonly _name: string;
-
- constructor(name: string, options?: ConstructorParameters[0]) {
- super(options);
- this._name = name;
- }
-
- get __name(): string {
- return this._name;
- }
-}
-
-const makeHandle = (
- sym: symbol,
- name: string,
- options?: ConstructorParameters[0],
-): LibraryHandle => {
- return new LibraryHandle(
- sym,
- new StubLibrary(name, options) as unknown as ILibrary,
- new LibraryContext(),
- );
-};
-
-describe("Relationship.getLibrariesByDependencies", () => {
- it("should return libraries in same order when no dependencies are declared", () => {
- const symA = Symbol("A");
- const symB = Symbol("B");
- const handleA = makeHandle(symA, "A");
- const handleB = makeHandle(symB, "B");
-
- const result = Relationship.getLibrariesByDependencies([handleA, handleB]);
- expect(result.map((h) => h.library.__name)).toEqual(["A", "B"]);
- });
-
- it("should put a dependency before the library that depends on it", () => {
- const symA = Symbol("A");
- const symB = Symbol("B");
- const handleB = makeHandle(symB, "B");
- const handleA = makeHandle(symA, "A", { dependencies: [symB] });
-
- const result = Relationship.getLibrariesByDependencies([handleA, handleB]);
- const names = result.map((h) => h.library.__name);
- expect(names.indexOf("B")).toBeLessThan(names.indexOf("A"));
- });
-
- it("should not duplicate a shared dependency", () => {
- const symDep = Symbol("Dep");
- const symA = Symbol("A");
- const symB = Symbol("B");
- const handleDep = makeHandle(symDep, "Dep");
- const handleA = makeHandle(symA, "A", { dependencies: [symDep] });
- const handleB = makeHandle(symB, "B", { dependencies: [symDep] });
-
- const result = Relationship.getLibrariesByDependencies([handleA, handleB, handleDep]);
- const names = result.map((h) => h.library.__name);
- expect(names.filter((n) => n === "Dep")).toHaveLength(1);
- });
-
- it("should return libraries in reverse dependency order when reverse=true", () => {
- const symA = Symbol("A");
- const symB = Symbol("B");
- const handleB = makeHandle(symB, "B");
- const handleA = makeHandle(symA, "A", { dependencies: [symB] });
-
- const result = Relationship.getLibrariesByDependencies([handleA, handleB], true);
- const names = result.map((h) => h.library.__name);
- expect(names.indexOf("A")).toBeLessThan(names.indexOf("B"));
- });
-
- it("should throw on circular dependencies", () => {
- const symA = Symbol("A");
- const symB = Symbol("B");
- const handleA = makeHandle(symA, "A", { dependencies: [symB] });
- const handleB = makeHandle(symB, "B", { dependencies: [symA] });
-
- expect(() => Relationship.getLibrariesByDependencies([handleA, handleB])).toThrow(
- /[Cc]ircular/,
- );
- });
-});
-
-describe("Relationship.getLibrariesByRun", () => {
- it("should return all runner libraries when no ordering is specified", () => {
- const symA = Symbol("A");
- const symB = Symbol("B");
- const handleA = makeHandle(symA, "A");
- const handleB = makeHandle(symB, "B");
-
- const result = Relationship.getLibrariesByRun([handleA, handleB]);
- expect(result).toHaveLength(2);
- });
-
- it("should place a library before another when runBefore is set", () => {
- const symA = Symbol("A");
- const symB = Symbol("B");
- const handleA = makeHandle(symA, "A", { runBefore: [symB] });
- const handleB = makeHandle(symB, "B");
-
- const result = Relationship.getLibrariesByRun([handleA, handleB]);
- const names = result.map((h) => h.library.__name);
- expect(names.indexOf("B")).toBeLessThan(names.indexOf("A"));
- });
-
- it("should place a library after another when runAfter is set", () => {
- const symA = Symbol("A");
- const symB = Symbol("B");
- const handleA = makeHandle(symA, "A");
- const handleB = makeHandle(symB, "B", { runAfter: [symA] });
-
- const result = Relationship.getLibrariesByRun([handleA, handleB]);
- const names = result.map((h) => h.library.__name);
- expect(names.indexOf("B")).toBeLessThan(names.indexOf("A"));
- });
-
- it("should throw on circular run dependencies", () => {
- const symA = Symbol("A");
- const symB = Symbol("B");
- const handleA = makeHandle(symA, "A", { runBefore: [symB] });
- const handleB = makeHandle(symB, "B", { runBefore: [symA] });
-
- expect(() => Relationship.getLibrariesByRun([handleA, handleB])).toThrow(/[Cc]ircular/);
- });
-
- it("should return empty array for empty input", () => {
- expect(Relationship.getLibrariesByRun([])).toHaveLength(0);
- });
-});
diff --git a/packages/core-editor/tsconfig.json b/packages/core-editor/tsconfig.json
index 9e6d724b..2a9635c8 100644
--- a/packages/core-editor/tsconfig.json
+++ b/packages/core-editor/tsconfig.json
@@ -2,5 +2,10 @@
"$schema": "https://json.schemastore.org/tsconfig.json",
"extends": "../../tsconfig.json",
"include": ["src/**/*.ts"],
- "exclude": ["node_modules", "dist"]
+ "exclude": ["node_modules", "dist"],
+ "compilerOptions": {
+ "paths": {
+ "@core/*": ["../core/src"]
+ }
+ }
}
diff --git a/packages/core/src/application/application-config.ts b/packages/core/src/application/application-config.ts
index 82d28bed..7eeede0c 100644
--- a/packages/core/src/application/application-config.ts
+++ b/packages/core/src/application/application-config.ts
@@ -31,8 +31,8 @@ export class ApplicationConfig {
this._libraryManager.set(sym, library);
}
- public getComponentSystemLibrary() {
- return this._libraryManager.getComponentSystem();
+ public getComponentSystemLibrary() {
+ return this._libraryManager.getComponentSystem();
}
public useComponentSystemLibrary(library: IComponentSystemLibrary) {
From 1d44aecc8cd7213cabc1b858b0b5a5b4e0ac77be Mon Sep 17 00:00:00 2001
From: Tchips46
Date: Tue, 31 Mar 2026 11:47:43 +0900
Subject: [PATCH 12/15] fix(core-editor): version as str
---
packages/core-editor/package.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/packages/core-editor/package.json b/packages/core-editor/package.json
index c2fe4a6a..74bd0ece 100644
--- a/packages/core-editor/package.json
+++ b/packages/core-editor/package.json
@@ -1,7 +1,7 @@
{
"$schema": "https://json.schemastore.org/package.json",
"name": "@nanoforge-dev/core-editor",
- "version": "0.0",
+ "version": "0.0.0",
"description": "NanoForge Engine - Core Editor",
"keywords": [
"nanoforge",
From 3bafec1ffa7127aa017db6417a58186f3e32f2e1 Mon Sep 17 00:00:00 2001
From: Tchips46
Date: Tue, 31 Mar 2026 15:04:26 +0900
Subject: [PATCH 13/15] fix(core-editor): review
---
packages/core-editor/CHANGELOG.md | 14 --------------
packages/core-editor/README.md | 26 ++++++--------------------
packages/core-editor/tsconfig.json | 7 +------
3 files changed, 7 insertions(+), 40 deletions(-)
diff --git a/packages/core-editor/CHANGELOG.md b/packages/core-editor/CHANGELOG.md
index 53aaa9de..e69de29b 100644
--- a/packages/core-editor/CHANGELOG.md
+++ b/packages/core-editor/CHANGELOG.md
@@ -1,14 +0,0 @@
-# Changelog
-
-All notable changes to this project will be documented in this file.
-
-## Documentation
-
-## Bug Fixes
-
-## Documentation
-
-## Features
-
-## Refactor
-
diff --git a/packages/core-editor/README.md b/packages/core-editor/README.md
index af648541..7daa7a82 100644
--- a/packages/core-editor/README.md
+++ b/packages/core-editor/README.md
@@ -5,18 +5,20 @@
-
-
+
+
-
+
## About
-`@nanoforge-dev/core-editor` is a core package that contains game main loop. It is used to initialize the game and run it.
+`@nanoforge-dev/core-editor` is a package made to allow the editor to make change to a game even if it's already compiled and running.
+
+If you want a core to run your game use the `@nanoforge-dev/core`.
## Installation
@@ -29,22 +31,6 @@ pnpm add @nanoforge-dev/core-editor
bun add @nanoforge-dev/core-editor
```
-## Example usage
-
-Initialize the game in your main file.
-
-```ts
-import { IEditorRunOptions, NanoforgeFactory } from "@nanoforge-dev/core-editor";
-
-export async function main(options: IEditorRunOptions) {
- const app = NanoforgeFactory.createClient();
-
- await app.init(options);
-
- await app.run();
-}
-```
-
## Links
- [GitHub][source]
diff --git a/packages/core-editor/tsconfig.json b/packages/core-editor/tsconfig.json
index 2a9635c8..9e6d724b 100644
--- a/packages/core-editor/tsconfig.json
+++ b/packages/core-editor/tsconfig.json
@@ -2,10 +2,5 @@
"$schema": "https://json.schemastore.org/tsconfig.json",
"extends": "../../tsconfig.json",
"include": ["src/**/*.ts"],
- "exclude": ["node_modules", "dist"],
- "compilerOptions": {
- "paths": {
- "@core/*": ["../core/src"]
- }
- }
+ "exclude": ["node_modules", "dist"]
}
From 5ade84d9d670d3e860c8f6f35238ff11d05b7f83 Mon Sep 17 00:00:00 2001
From: Tchips46
Date: Tue, 31 Mar 2026 16:14:00 +0900
Subject: [PATCH 14/15] fix(core-editor): review
---
.../core-editor/src/common/context/options.type.ts | 10 +++++-----
packages/core-editor/test/editor-feature.spec.ts | 2 +-
.../helpers/event-emitter.ts} | 2 +-
3 files changed, 7 insertions(+), 7 deletions(-)
rename packages/core-editor/{src/editor/event-emitter.manager.ts => test/helpers/event-emitter.ts} (96%)
diff --git a/packages/core-editor/src/common/context/options.type.ts b/packages/core-editor/src/common/context/options.type.ts
index 1fc49839..eabf7e62 100644
--- a/packages/core-editor/src/common/context/options.type.ts
+++ b/packages/core-editor/src/common/context/options.type.ts
@@ -1,4 +1,4 @@
-import { type EventEmitter } from "../../editor/event-emitter.manager";
+import { type IEventEmitter } from "./event-emitter.type";
import { type Save } from "./save.type";
export type IEditorRunOptions = IEditorRunClientOptions | IEditorRunServerOptions;
@@ -9,8 +9,8 @@ export interface IEditorRunClientOptions {
env: Record;
editor: {
save: Save;
- coreEvents: EventEmitter;
- editorEvents: EventEmitter;
+ coreEvents: IEventEmitter;
+ editorEvents: IEventEmitter;
};
}
export interface IEditorRunServerOptions {
@@ -18,7 +18,7 @@ export interface IEditorRunServerOptions {
env: Record;
editor: {
save: Save;
- coreEvents: EventEmitter;
- editorEvents: EventEmitter;
+ coreEvents: IEventEmitter;
+ editorEvents: IEventEmitter;
};
}
diff --git a/packages/core-editor/test/editor-feature.spec.ts b/packages/core-editor/test/editor-feature.spec.ts
index bd442f78..c02f1a03 100644
--- a/packages/core-editor/test/editor-feature.spec.ts
+++ b/packages/core-editor/test/editor-feature.spec.ts
@@ -5,7 +5,7 @@ import { EventTypeEnum } from "../src/common/context/event-emitter.type";
import type { IEditorRunOptions } from "../src/common/context/options.type";
import { type Save, type SaveComponent, type SaveEntity } from "../src/common/context/save.type";
import { CoreEditor } from "../src/editor/core-editor";
-import { EventEmitter } from "../src/editor/event-emitter.manager";
+import { EventEmitter } from "./helpers/event-emitter";
describe("EditorFeatures", () => {
afterEach(() => {
diff --git a/packages/core-editor/src/editor/event-emitter.manager.ts b/packages/core-editor/test/helpers/event-emitter.ts
similarity index 96%
rename from packages/core-editor/src/editor/event-emitter.manager.ts
rename to packages/core-editor/test/helpers/event-emitter.ts
index 3498d826..95c6eb62 100644
--- a/packages/core-editor/src/editor/event-emitter.manager.ts
+++ b/packages/core-editor/test/helpers/event-emitter.ts
@@ -2,7 +2,7 @@ import {
type EventTypeEnum,
type IEventEmitter,
type ListenerType,
-} from "../common/context/event-emitter.type";
+} from "../../src/common/context/event-emitter.type";
export class EventEmitter implements IEventEmitter {
public listeners: Record = {};
From 206f5b7cfaec086f2b2b0cb91d6c44d57939cd76 Mon Sep 17 00:00:00 2001
From: Tchips46
Date: Thu, 2 Apr 2026 09:06:59 +0900
Subject: [PATCH 15/15] fix(core-editor): regen pnpm lock
---
pnpm-lock.yaml | 2382 +++++++++++++++++++++++++++---------------------
1 file changed, 1324 insertions(+), 1058 deletions(-)
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 3d326ec2..30ece6fb 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -15,19 +15,19 @@ catalogs:
version: 20.5.0
'@commitlint/config-conventional':
specifier: ^20.4.3
- version: 20.4.3
+ version: 20.5.0
'@favware/cliff-jumper':
specifier: ^6.0.0
version: 6.0.0
'@nanoforge-dev/actions':
specifier: ^1.1.0
- version: 1.1.0
+ version: 1.2.3
husky:
specifier: ^9.1.7
version: 9.1.7
lint-staged:
specifier: ^16.3.3
- version: 16.3.3
+ version: 16.4.0
config:
class-transformer:
specifier: ^0.5.1
@@ -41,17 +41,17 @@ catalogs:
version: 25.5.0
turbo:
specifier: ^2.8.16
- version: 2.8.16
+ version: 2.9.3
typescript:
specifier: ^5.9.3
version: 5.9.3
docs:
typedoc:
specifier: ^0.28.17
- version: 0.28.17
+ version: 0.28.18
typedoc-plugin-markdown:
specifier: ^4.10.0
- version: 4.10.0
+ version: 4.11.0
graphics:
konva:
specifier: ^10.2.3
@@ -65,7 +65,7 @@ catalogs:
version: 6.0.2
eslint:
specifier: ^10.0.3
- version: 10.0.3
+ version: 10.1.0
eslint-config-prettier:
specifier: ^10.1.8
version: 10.1.8
@@ -86,7 +86,7 @@ catalogs:
version: 3.8.1
typescript-eslint:
specifier: ^8.57.1
- version: 8.57.1
+ version: 8.58.0
network:
'@mapbox/node-pre-gyp':
specifier: ^2.0.3
@@ -99,14 +99,14 @@ catalogs:
version: 0.4.7
ws:
specifier: ^8.19.0
- version: 8.19.0
+ version: 8.20.0
test:
'@vitest/coverage-v8':
specifier: ^4.0.18
- version: 4.0.18
+ version: 4.1.2
vitest:
specifier: ^4.0.18
- version: 4.0.18
+ version: 4.1.2
importers:
@@ -118,13 +118,13 @@ importers:
devDependencies:
'@commitlint/cli':
specifier: catalog:ci
- version: 20.5.0(@types/node@25.5.0)(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.3.0)(typescript@5.9.3)
+ version: 20.5.0(@types/node@25.5.0)(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0)(typescript@5.9.3)
'@commitlint/config-conventional':
specifier: catalog:ci
- version: 20.4.3
+ version: 20.5.0
'@nanoforge-dev/actions':
specifier: catalog:ci
- version: 1.1.0
+ version: 1.2.3
'@nanoforge-dev/utils-eslint-config':
specifier: workspace:*
version: link:utils/eslint-config
@@ -139,37 +139,37 @@ importers:
version: 25.5.0
'@vitest/coverage-v8':
specifier: catalog:test
- version: 4.0.18(vitest@4.0.18(@types/node@25.5.0)(jiti@2.6.1)(yaml@2.8.2))
+ version: 4.1.2(vitest@4.1.2(@types/node@25.5.0)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(yaml@2.8.3)))
eslint:
specifier: catalog:lint
- version: 10.0.3(jiti@2.6.1)
+ version: 10.1.0(jiti@2.6.1)
husky:
specifier: catalog:ci
version: 9.1.7
lint-staged:
specifier: catalog:ci
- version: 16.3.3
+ version: 16.4.0
prettier:
specifier: catalog:lint
version: 3.8.1
tsup:
specifier: catalog:build
- version: 8.5.1(jiti@2.6.1)(postcss@8.5.8)(typescript@5.9.3)(yaml@2.8.2)
+ version: 8.5.1(jiti@2.6.1)(postcss@8.5.8)(typescript@5.9.3)(yaml@2.8.3)
turbo:
specifier: catalog:core
- version: 2.8.16
+ version: 2.9.3
typedoc:
specifier: catalog:docs
- version: 0.28.17(typescript@5.9.3)
+ version: 0.28.18(typescript@5.9.3)
typedoc-plugin-markdown:
specifier: catalog:docs
- version: 4.10.0(typedoc@0.28.17(typescript@5.9.3))
+ version: 4.11.0(typedoc@0.28.18(typescript@5.9.3))
typescript:
specifier: catalog:core
version: 5.9.3
vitest:
specifier: catalog:test
- version: 4.0.18(@types/node@25.5.0)(jiti@2.6.1)(yaml@2.8.2)
+ version: 4.1.2(@types/node@25.5.0)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(yaml@2.8.3))
e2e/game:
devDependencies:
@@ -265,10 +265,10 @@ importers:
version: 6.0.2(prettier@3.8.1)
eslint:
specifier: catalog:lint
- version: 10.0.3(jiti@2.6.1)
+ version: 10.1.0(jiti@2.6.1)
lint-staged:
specifier: catalog:ci
- version: 16.3.3
+ version: 16.4.0
prettier:
specifier: catalog:lint
version: 3.8.1
@@ -296,19 +296,19 @@ importers:
version: 6.0.2(prettier@3.8.1)
eslint:
specifier: catalog:lint
- version: 10.0.3(jiti@2.6.1)
+ version: 10.1.0(jiti@2.6.1)
prettier:
specifier: catalog:lint
version: 3.8.1
tsup:
specifier: catalog:build
- version: 8.5.1(jiti@2.6.1)(postcss@8.5.8)(typescript@5.9.3)(yaml@2.8.2)
+ version: 8.5.1(jiti@2.6.1)(postcss@8.5.8)(typescript@5.9.3)(yaml@2.8.3)
typescript:
specifier: catalog:core
version: 5.9.3
vitest:
specifier: catalog:test
- version: 4.0.18(@types/node@25.5.0)(jiti@2.6.1)(yaml@2.8.2)
+ version: 4.1.2(@types/node@25.5.0)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(yaml@2.8.3))
packages/common:
devDependencies:
@@ -326,19 +326,19 @@ importers:
version: 6.0.2(prettier@3.8.1)
eslint:
specifier: catalog:lint
- version: 10.0.3(jiti@2.6.1)
+ version: 10.1.0(jiti@2.6.1)
prettier:
specifier: catalog:lint
version: 3.8.1
tsup:
specifier: catalog:build
- version: 8.5.1(jiti@2.6.1)(postcss@8.5.8)(typescript@5.9.3)(yaml@2.8.2)
+ version: 8.5.1(jiti@2.6.1)(postcss@8.5.8)(typescript@5.9.3)(yaml@2.8.3)
typescript:
specifier: catalog:core
version: 5.9.3
vitest:
specifier: catalog:test
- version: 4.0.18(@types/node@25.5.0)(jiti@2.6.1)(yaml@2.8.2)
+ version: 4.1.2(@types/node@25.5.0)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(yaml@2.8.3))
packages/config:
dependencies:
@@ -363,13 +363,13 @@ importers:
version: 6.0.2(prettier@3.8.1)
eslint:
specifier: catalog:lint
- version: 10.0.3(jiti@2.6.1)
+ version: 10.1.0(jiti@2.6.1)
prettier:
specifier: catalog:lint
version: 3.8.1
tsup:
specifier: catalog:build
- version: 8.5.1(jiti@2.6.1)(postcss@8.5.8)(typescript@5.9.3)(yaml@2.8.2)
+ version: 8.5.1(jiti@2.6.1)(postcss@8.5.8)(typescript@5.9.3)(yaml@2.8.3)
typescript:
specifier: catalog:core
version: 5.9.3
@@ -406,19 +406,19 @@ importers:
version: 6.0.2(prettier@3.8.1)
eslint:
specifier: catalog:lint
- version: 10.0.3(jiti@2.6.1)
+ version: 10.1.0(jiti@2.6.1)
prettier:
specifier: catalog:lint
version: 3.8.1
tsup:
specifier: catalog:build
- version: 8.5.1(jiti@2.6.1)(postcss@8.5.8)(typescript@5.9.3)(yaml@2.8.2)
+ version: 8.5.1(jiti@2.6.1)(postcss@8.5.8)(typescript@5.9.3)(yaml@2.8.3)
typescript:
specifier: catalog:core
version: 5.9.3
vitest:
specifier: catalog:test
- version: 4.0.18(@types/node@25.5.0)(jiti@2.6.1)(yaml@2.8.2)
+ version: 4.1.2(@types/node@25.5.0)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(yaml@2.8.3))
packages/core-editor:
dependencies:
@@ -455,19 +455,19 @@ importers:
version: 6.0.2(prettier@3.8.1)
eslint:
specifier: catalog:lint
- version: 10.0.3(jiti@2.6.1)
+ version: 10.1.0(jiti@2.6.1)
prettier:
specifier: catalog:lint
version: 3.8.1
tsup:
specifier: catalog:build
- version: 8.5.1(jiti@2.6.1)(postcss@8.5.8)(typescript@5.9.3)(yaml@2.8.2)
+ version: 8.5.1(jiti@2.6.1)(postcss@8.5.8)(typescript@5.9.3)(yaml@2.8.3)
typescript:
specifier: catalog:core
version: 5.9.3
vitest:
specifier: catalog:test
- version: 4.0.18(@types/node@25.3.5)(jiti@2.6.1)(yaml@2.8.2)
+ version: 4.1.2(@types/node@25.5.0)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(yaml@2.8.3))
packages/ecs-client:
dependencies:
@@ -501,19 +501,19 @@ importers:
version: 25.5.0
eslint:
specifier: catalog:lint
- version: 10.0.3(jiti@2.6.1)
+ version: 10.1.0(jiti@2.6.1)
prettier:
specifier: catalog:lint
version: 3.8.1
tsup:
specifier: catalog:build
- version: 8.5.1(jiti@2.6.1)(postcss@8.5.8)(typescript@5.9.3)(yaml@2.8.2)
+ version: 8.5.1(jiti@2.6.1)(postcss@8.5.8)(typescript@5.9.3)(yaml@2.8.3)
typescript:
specifier: catalog:core
version: 5.9.3
vitest:
specifier: catalog:test
- version: 4.0.18(@types/node@25.5.0)(jiti@2.6.1)(yaml@2.8.2)
+ version: 4.1.2(@types/node@25.5.0)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(yaml@2.8.3))
packages/ecs-lib:
dependencies:
@@ -538,19 +538,19 @@ importers:
version: 25.5.0
eslint:
specifier: catalog:lint
- version: 10.0.3(jiti@2.6.1)
+ version: 10.1.0(jiti@2.6.1)
prettier:
specifier: catalog:lint
version: 3.8.1
tsup:
specifier: catalog:build
- version: 8.5.1(jiti@2.6.1)(postcss@8.5.8)(typescript@5.9.3)(yaml@2.8.2)
+ version: 8.5.1(jiti@2.6.1)(postcss@8.5.8)(typescript@5.9.3)(yaml@2.8.3)
typescript:
specifier: catalog:core
version: 5.9.3
vitest:
specifier: catalog:test
- version: 4.0.18(@types/node@25.5.0)(jiti@2.6.1)(yaml@2.8.2)
+ version: 4.1.2(@types/node@25.5.0)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(yaml@2.8.3))
packages/ecs-server:
dependencies:
@@ -584,19 +584,19 @@ importers:
version: 25.5.0
eslint:
specifier: catalog:lint
- version: 10.0.3(jiti@2.6.1)
+ version: 10.1.0(jiti@2.6.1)
prettier:
specifier: catalog:lint
version: 3.8.1
tsup:
specifier: catalog:build
- version: 8.5.1(jiti@2.6.1)(postcss@8.5.8)(typescript@5.9.3)(yaml@2.8.2)
+ version: 8.5.1(jiti@2.6.1)(postcss@8.5.8)(typescript@5.9.3)(yaml@2.8.3)
typescript:
specifier: catalog:core
version: 5.9.3
vitest:
specifier: catalog:test
- version: 4.0.18(@types/node@25.5.0)(jiti@2.6.1)(yaml@2.8.2)
+ version: 4.1.2(@types/node@25.5.0)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(yaml@2.8.3))
packages/graphics-2d:
dependencies:
@@ -621,19 +621,19 @@ importers:
version: 6.0.2(prettier@3.8.1)
eslint:
specifier: catalog:lint
- version: 10.0.3(jiti@2.6.1)
+ version: 10.1.0(jiti@2.6.1)
prettier:
specifier: catalog:lint
version: 3.8.1
tsup:
specifier: catalog:build
- version: 8.5.1(jiti@2.6.1)(postcss@8.5.8)(typescript@5.9.3)(yaml@2.8.2)
+ version: 8.5.1(jiti@2.6.1)(postcss@8.5.8)(typescript@5.9.3)(yaml@2.8.3)
typescript:
specifier: catalog:core
version: 5.9.3
vitest:
specifier: catalog:test
- version: 4.0.18(@types/node@25.5.0)(jiti@2.6.1)(yaml@2.8.2)
+ version: 4.1.2(@types/node@25.5.0)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(yaml@2.8.3))
packages/input:
dependencies:
@@ -655,19 +655,19 @@ importers:
version: 6.0.2(prettier@3.8.1)
eslint:
specifier: catalog:lint
- version: 10.0.3(jiti@2.6.1)
+ version: 10.1.0(jiti@2.6.1)
prettier:
specifier: catalog:lint
version: 3.8.1
tsup:
specifier: catalog:build
- version: 8.5.1(jiti@2.6.1)(postcss@8.5.8)(typescript@5.9.3)(yaml@2.8.2)
+ version: 8.5.1(jiti@2.6.1)(postcss@8.5.8)(typescript@5.9.3)(yaml@2.8.3)
typescript:
specifier: catalog:core
version: 5.9.3
vitest:
specifier: catalog:test
- version: 4.0.18(@types/node@25.5.0)(jiti@2.6.1)(yaml@2.8.2)
+ version: 4.1.2(@types/node@25.5.0)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(yaml@2.8.3))
packages/music:
dependencies:
@@ -689,19 +689,19 @@ importers:
version: 6.0.2(prettier@3.8.1)
eslint:
specifier: catalog:lint
- version: 10.0.3(jiti@2.6.1)
+ version: 10.1.0(jiti@2.6.1)
prettier:
specifier: catalog:lint
version: 3.8.1
tsup:
specifier: catalog:build
- version: 8.5.1(jiti@2.6.1)(postcss@8.5.8)(typescript@5.9.3)(yaml@2.8.2)
+ version: 8.5.1(jiti@2.6.1)(postcss@8.5.8)(typescript@5.9.3)(yaml@2.8.3)
typescript:
specifier: catalog:core
version: 5.9.3
vitest:
specifier: catalog:test
- version: 4.0.18(@types/node@25.5.0)(jiti@2.6.1)(yaml@2.8.2)
+ version: 4.1.2(@types/node@25.5.0)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(yaml@2.8.3))
packages/network-client:
dependencies:
@@ -726,19 +726,19 @@ importers:
version: 6.0.2(prettier@3.8.1)
eslint:
specifier: catalog:lint
- version: 10.0.3(jiti@2.6.1)
+ version: 10.1.0(jiti@2.6.1)
prettier:
specifier: catalog:lint
version: 3.8.1
tsup:
specifier: catalog:build
- version: 8.5.1(jiti@2.6.1)(postcss@8.5.8)(typescript@5.9.3)(yaml@2.8.2)
+ version: 8.5.1(jiti@2.6.1)(postcss@8.5.8)(typescript@5.9.3)(yaml@2.8.3)
typescript:
specifier: catalog:core
version: 5.9.3
vitest:
specifier: catalog:test
- version: 4.0.18(@types/node@25.5.0)(jiti@2.6.1)(yaml@2.8.2)
+ version: 4.1.2(@types/node@25.5.0)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(yaml@2.8.3))
packages/network-server:
dependencies:
@@ -756,7 +756,7 @@ importers:
version: 0.4.7
ws:
specifier: catalog:network
- version: 8.19.0
+ version: 8.20.0
devDependencies:
'@favware/cliff-jumper':
specifier: catalog:ci
@@ -775,19 +775,19 @@ importers:
version: 8.18.1
eslint:
specifier: catalog:lint
- version: 10.0.3(jiti@2.6.1)
+ version: 10.1.0(jiti@2.6.1)
prettier:
specifier: catalog:lint
version: 3.8.1
tsup:
specifier: catalog:build
- version: 8.5.1(jiti@2.6.1)(postcss@8.5.8)(typescript@5.9.3)(yaml@2.8.2)
+ version: 8.5.1(jiti@2.6.1)(postcss@8.5.8)(typescript@5.9.3)(yaml@2.8.3)
typescript:
specifier: catalog:core
version: 5.9.3
vitest:
specifier: catalog:test
- version: 4.0.18(@types/node@25.5.0)(jiti@2.6.1)(yaml@2.8.2)
+ version: 4.1.2(@types/node@25.5.0)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(yaml@2.8.3))
packages/sound:
dependencies:
@@ -809,46 +809,46 @@ importers:
version: 6.0.2(prettier@3.8.1)
eslint:
specifier: catalog:lint
- version: 10.0.3(jiti@2.6.1)
+ version: 10.1.0(jiti@2.6.1)
prettier:
specifier: catalog:lint
version: 3.8.1
tsup:
specifier: catalog:build
- version: 8.5.1(jiti@2.6.1)(postcss@8.5.8)(typescript@5.9.3)(yaml@2.8.2)
+ version: 8.5.1(jiti@2.6.1)(postcss@8.5.8)(typescript@5.9.3)(yaml@2.8.3)
typescript:
specifier: catalog:core
version: 5.9.3
vitest:
specifier: catalog:test
- version: 4.0.18(@types/node@25.5.0)(jiti@2.6.1)(yaml@2.8.2)
+ version: 4.1.2(@types/node@25.5.0)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(yaml@2.8.3))
utils/eslint-config:
dependencies:
'@eslint/js':
specifier: catalog:lint
- version: 10.0.1(eslint@10.0.3(jiti@2.6.1))
+ version: 10.0.1(eslint@10.1.0(jiti@2.6.1))
'@favware/cliff-jumper':
specifier: catalog:ci
version: 6.0.0
eslint-config-prettier:
specifier: catalog:lint
- version: 10.1.8(eslint@10.0.3(jiti@2.6.1))
+ version: 10.1.8(eslint@10.1.0(jiti@2.6.1))
eslint-formatter-pretty:
specifier: catalog:lint
version: 7.0.0
eslint-plugin-format:
specifier: catalog:lint
- version: 2.0.1(eslint@10.0.3(jiti@2.6.1))
+ version: 2.0.1(eslint@10.1.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.0.3(jiti@2.6.1)))(eslint@10.0.3(jiti@2.6.1))(prettier@3.8.1)
+ version: 5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.1.0(jiti@2.6.1)))(eslint@10.1.0(jiti@2.6.1))(prettier@3.8.1)
globals:
specifier: catalog:lint
version: 17.4.0
typescript-eslint:
specifier: catalog:lint
- version: 8.57.1(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3)
+ version: 8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3)
devDependencies:
'@nanoforge-dev/utils-prettier-config':
specifier: workspace:*
@@ -858,7 +858,7 @@ importers:
version: 6.0.2(prettier@3.8.1)
eslint:
specifier: catalog:lint
- version: 10.0.3(jiti@2.6.1)
+ version: 10.1.0(jiti@2.6.1)
prettier:
specifier: catalog:lint
version: 3.8.1
@@ -877,23 +877,26 @@ importers:
packages:
- '@actions/core@2.0.3':
- resolution: {integrity: sha512-Od9Thc3T1mQJYddvVPM4QGiLUewdh+3txmDYHHxoNdkqysR1MbCT+rFOtNUxYAz+7+6RIsqipVahY2GJqGPyxA==}
+ '@actions/core@3.0.0':
+ resolution: {integrity: sha512-zYt6cz+ivnTmiT/ksRVriMBOiuoUpDCJJlZ5KPl2/FRdvwU3f7MPh9qftvbkXJThragzUZieit2nyHUyw53Seg==}
- '@actions/exec@2.0.0':
- resolution: {integrity: sha512-k8ngrX2voJ/RIN6r9xB82NVqKpnMRtxDoiO+g3olkIUpQNqjArXrCQceduQZCQj3P3xm32pChRLqRrtXTlqhIw==}
+ '@actions/exec@3.0.0':
+ resolution: {integrity: sha512-6xH/puSoNBXb72VPlZVm7vQ+svQpFyA96qdDBvhB8eNZOE8LtPf9L4oAsfzK/crCL8YZ+19fKYVnM63Sl+Xzlw==}
- '@actions/github@7.0.0':
- resolution: {integrity: sha512-PyGODO938aoBTZd/IfN/+e+Pd5hUcVpyf+thm4CPESLeqhdSkq5QwMTGX9v84XHE1ifmHWBQ60KB8kIgm96opw==}
+ '@actions/github@9.0.0':
+ resolution: {integrity: sha512-yJ0RoswsAaKcvkmpCE4XxBRiy/whH2SdTBHWzs0gi4wkqTDhXMChjSdqBz/F4AeiDlP28rQqL33iHb+kjAMX6w==}
'@actions/http-client@3.0.2':
resolution: {integrity: sha512-JP38FYYpyqvUsz+Igqlc/JG6YO9PaKuvqjM3iGvaLqFnJ7TFmcLyy2IDrY0bI0qCQug8E9K+elv5ZNfw62ZJzA==}
- '@actions/io@2.0.0':
- resolution: {integrity: sha512-Jv33IN09XLO+0HS79aaODsvIRyduiF7NY/F6LYeK5oeUmrsz7aFdRphQjFoESF4jS7lMauDOttKALcpapVDIAg==}
+ '@actions/http-client@4.0.0':
+ resolution: {integrity: sha512-QuwPsgVMsD6qaPD57GLZi9sqzAZCtiJT8kVBCDpLtxhL5MydQ4gS+DrejtZZPdIYyB1e95uCK9Luyds7ybHI3g==}
+
+ '@actions/io@3.0.2':
+ resolution: {integrity: sha512-nRBchcMM+QK1pdjO7/idu86rbJI5YHUKCvKs0KxnSYbVe3F51UfGxuZX4Qy/fWlp6l7gWFwIkrOzN+oUK03kfw==}
- '@angular-devkit/core@21.2.3':
- resolution: {integrity: sha512-i++JVHOijyFckjdYqKbSXUpKnvmO2a0Utt/wQVwiLAT0O9H1hR/2NGPzubB4hnLMNSyVWY8diminaF23mZ0xjA==}
+ '@angular-devkit/core@21.2.6':
+ resolution: {integrity: sha512-u5gPTAY7MC02uACQE39xxiFcm1hslF+ih/f2borMWnhER0JNTpHjLiLRXFkq7or7+VVHU30zfhK4XNAuO4WTIg==}
engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'}
peerDependencies:
chokidar: ^5.0.0
@@ -901,13 +904,13 @@ packages:
chokidar:
optional: true
- '@angular-devkit/schematics-cli@21.2.3':
- resolution: {integrity: sha512-Xq2kGRgnOoTcE3STO/fZ0h4mayvXs0EKFefMlEsJdM/6mmVF1UfeiDlIwpyMzo9X//AJQfqcS0rd5FDPmT9LNg==}
+ '@angular-devkit/schematics-cli@21.2.6':
+ resolution: {integrity: sha512-sJeDQSgWn1tXqmC7mM3cEaAdUI53T1FmIScd7fHr2uRCIgUvXzsV0MdGf38cGhLlQeMZEfIplS+1nRXziCzC1g==}
engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'}
hasBin: true
- '@angular-devkit/schematics@21.2.3':
- resolution: {integrity: sha512-tc/bBloRTVIBWGRiMPln1QbW+2QPj+YnWL/nG79abLKWkdrL9dJLcCRXY7dsPNrxOc/QF+8tVpnr8JofhWL9cQ==}
+ '@angular-devkit/schematics@21.2.6':
+ resolution: {integrity: sha512-hk2duJlPJyiMaI9MVWA5XpmlpD9C4n8qgquV/MJ7/n+ZRSwW3w1ndL5qUmA1ki+4Da54v/Rc8Wt5tUS955+93w==}
engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'}
'@babel/code-frame@7.29.0':
@@ -930,8 +933,8 @@ packages:
resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==}
engines: {node: '>=6.9.0'}
- '@babel/parser@7.29.0':
- resolution: {integrity: sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==}
+ '@babel/parser@7.29.2':
+ resolution: {integrity: sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==}
engines: {node: '>=6.0.0'}
hasBin: true
@@ -956,8 +959,8 @@ packages:
engines: {node: '>=v18'}
hasBin: true
- '@commitlint/config-conventional@20.4.3':
- resolution: {integrity: sha512-9RtLySbYQAs8yEqWEqhSZo9nYhbm57jx7qHXtgRmv/nmeQIjjMcwf6Dl+y5UZcGWgWx435TAYBURONaJIuCjWg==}
+ '@commitlint/config-conventional@20.5.0':
+ resolution: {integrity: sha512-t3Ni88rFw1XMa4nZHgOKJ8fIAT9M2j5TnKyTqJzsxea7FUetlNdYFus9dz+MhIRZmc16P0PPyEfh6X2d/qw8SA==}
engines: {node: '>=v18'}
'@commitlint/config-validator@20.5.0':
@@ -1016,10 +1019,6 @@ packages:
resolution: {integrity: sha512-qD9xfP6dFg5jQ3NMrOhG0/w5y3bBUsVGyJvXxdWEwBm8hyx4WOk3kKXw28T5czBYvyeCVJgJJ6aoJZUWDpaacQ==}
engines: {node: '>=v18'}
- '@commitlint/types@20.4.3':
- resolution: {integrity: sha512-51OWa1Gi6ODOasPmfJPq6js4pZoomima4XLZZCrkldaH2V5Nb3bVhNXPeT6XV0gubbainSpTw4zi68NqAeCNCg==}
- engines: {node: '>=v18'}
-
'@commitlint/types@20.5.0':
resolution: {integrity: sha512-ZJoS8oSq2CAZEpc/YI9SulLrdiIyXeHb/OGqGrkUP6Q7YV+0ouNAa7GjqRdXeQPncHQIDz/jbCTlHScvYvO/gA==}
engines: {node: '>=v18'}
@@ -1057,158 +1056,167 @@ packages:
'@dprint/toml@0.7.0':
resolution: {integrity: sha512-eFaQTcfxKHB+YyTh83x7GEv+gDPuj9q5NFOTaoj5rZmQTbj6OgjjMxUicmS1R8zYcx8YAq5oA9J3YFa5U6x2gA==}
- '@esbuild/aix-ppc64@0.27.3':
- resolution: {integrity: sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==}
+ '@emnapi/core@1.9.1':
+ resolution: {integrity: sha512-mukuNALVsoix/w1BJwFzwXBN/dHeejQtuVzcDsfOEsdpCumXb/E9j8w11h5S54tT1xhifGfbbSm/ICrObRb3KA==}
+
+ '@emnapi/runtime@1.9.1':
+ resolution: {integrity: sha512-VYi5+ZVLhpgK4hQ0TAjiQiZ6ol0oe4mBx7mVv7IflsiEp0OWoVsp/+f9Vc1hOhE0TtkORVrI1GvzyreqpgWtkA==}
+
+ '@emnapi/wasi-threads@1.2.0':
+ resolution: {integrity: sha512-N10dEJNSsUx41Z6pZsXU8FjPjpBEplgH24sfkmITrBED1/U2Esum9F3lfLrMjKHHjmi557zQn7kR9R+XWXu5Rg==}
+
+ '@esbuild/aix-ppc64@0.27.4':
+ resolution: {integrity: sha512-cQPwL2mp2nSmHHJlCyoXgHGhbEPMrEEU5xhkcy3Hs/O7nGZqEpZ2sUtLaL9MORLtDfRvVl2/3PAuEkYZH0Ty8Q==}
engines: {node: '>=18'}
cpu: [ppc64]
os: [aix]
- '@esbuild/android-arm64@0.27.3':
- resolution: {integrity: sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==}
+ '@esbuild/android-arm64@0.27.4':
+ resolution: {integrity: sha512-gdLscB7v75wRfu7QSm/zg6Rx29VLdy9eTr2t44sfTW7CxwAtQghZ4ZnqHk3/ogz7xao0QAgrkradbBzcqFPasw==}
engines: {node: '>=18'}
cpu: [arm64]
os: [android]
- '@esbuild/android-arm@0.27.3':
- resolution: {integrity: sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==}
+ '@esbuild/android-arm@0.27.4':
+ resolution: {integrity: sha512-X9bUgvxiC8CHAGKYufLIHGXPJWnr0OCdR0anD2e21vdvgCI8lIfqFbnoeOz7lBjdrAGUhqLZLcQo6MLhTO2DKQ==}
engines: {node: '>=18'}
cpu: [arm]
os: [android]
- '@esbuild/android-x64@0.27.3':
- resolution: {integrity: sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==}
+ '@esbuild/android-x64@0.27.4':
+ resolution: {integrity: sha512-PzPFnBNVF292sfpfhiyiXCGSn9HZg5BcAz+ivBuSsl6Rk4ga1oEXAamhOXRFyMcjwr2DVtm40G65N3GLeH1Lvw==}
engines: {node: '>=18'}
cpu: [x64]
os: [android]
- '@esbuild/darwin-arm64@0.27.3':
- resolution: {integrity: sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==}
+ '@esbuild/darwin-arm64@0.27.4':
+ resolution: {integrity: sha512-b7xaGIwdJlht8ZFCvMkpDN6uiSmnxxK56N2GDTMYPr2/gzvfdQN8rTfBsvVKmIVY/X7EM+/hJKEIbbHs9oA4tQ==}
engines: {node: '>=18'}
cpu: [arm64]
os: [darwin]
- '@esbuild/darwin-x64@0.27.3':
- resolution: {integrity: sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==}
+ '@esbuild/darwin-x64@0.27.4':
+ resolution: {integrity: sha512-sR+OiKLwd15nmCdqpXMnuJ9W2kpy0KigzqScqHI3Hqwr7IXxBp3Yva+yJwoqh7rE8V77tdoheRYataNKL4QrPw==}
engines: {node: '>=18'}
cpu: [x64]
os: [darwin]
- '@esbuild/freebsd-arm64@0.27.3':
- resolution: {integrity: sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==}
+ '@esbuild/freebsd-arm64@0.27.4':
+ resolution: {integrity: sha512-jnfpKe+p79tCnm4GVav68A7tUFeKQwQyLgESwEAUzyxk/TJr4QdGog9sqWNcUbr/bZt/O/HXouspuQDd9JxFSw==}
engines: {node: '>=18'}
cpu: [arm64]
os: [freebsd]
- '@esbuild/freebsd-x64@0.27.3':
- resolution: {integrity: sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==}
+ '@esbuild/freebsd-x64@0.27.4':
+ resolution: {integrity: sha512-2kb4ceA/CpfUrIcTUl1wrP/9ad9Atrp5J94Lq69w7UwOMolPIGrfLSvAKJp0RTvkPPyn6CIWrNy13kyLikZRZQ==}
engines: {node: '>=18'}
cpu: [x64]
os: [freebsd]
- '@esbuild/linux-arm64@0.27.3':
- resolution: {integrity: sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==}
+ '@esbuild/linux-arm64@0.27.4':
+ resolution: {integrity: sha512-7nQOttdzVGth1iz57kxg9uCz57dxQLHWxopL6mYuYthohPKEK0vU0C3O21CcBK6KDlkYVcnDXY099HcCDXd9dA==}
engines: {node: '>=18'}
cpu: [arm64]
os: [linux]
- '@esbuild/linux-arm@0.27.3':
- resolution: {integrity: sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==}
+ '@esbuild/linux-arm@0.27.4':
+ resolution: {integrity: sha512-aBYgcIxX/wd5n2ys0yESGeYMGF+pv6g0DhZr3G1ZG4jMfruU9Tl1i2Z+Wnj9/KjGz1lTLCcorqE2viePZqj4Eg==}
engines: {node: '>=18'}
cpu: [arm]
os: [linux]
- '@esbuild/linux-ia32@0.27.3':
- resolution: {integrity: sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==}
+ '@esbuild/linux-ia32@0.27.4':
+ resolution: {integrity: sha512-oPtixtAIzgvzYcKBQM/qZ3R+9TEUd1aNJQu0HhGyqtx6oS7qTpvjheIWBbes4+qu1bNlo2V4cbkISr8q6gRBFA==}
engines: {node: '>=18'}
cpu: [ia32]
os: [linux]
- '@esbuild/linux-loong64@0.27.3':
- resolution: {integrity: sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==}
+ '@esbuild/linux-loong64@0.27.4':
+ resolution: {integrity: sha512-8mL/vh8qeCoRcFH2nM8wm5uJP+ZcVYGGayMavi8GmRJjuI3g1v6Z7Ni0JJKAJW+m0EtUuARb6Lmp4hMjzCBWzA==}
engines: {node: '>=18'}
cpu: [loong64]
os: [linux]
- '@esbuild/linux-mips64el@0.27.3':
- resolution: {integrity: sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==}
+ '@esbuild/linux-mips64el@0.27.4':
+ resolution: {integrity: sha512-1RdrWFFiiLIW7LQq9Q2NES+HiD4NyT8Itj9AUeCl0IVCA459WnPhREKgwrpaIfTOe+/2rdntisegiPWn/r/aAw==}
engines: {node: '>=18'}
cpu: [mips64el]
os: [linux]
- '@esbuild/linux-ppc64@0.27.3':
- resolution: {integrity: sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==}
+ '@esbuild/linux-ppc64@0.27.4':
+ resolution: {integrity: sha512-tLCwNG47l3sd9lpfyx9LAGEGItCUeRCWeAx6x2Jmbav65nAwoPXfewtAdtbtit/pJFLUWOhpv0FpS6GQAmPrHA==}
engines: {node: '>=18'}
cpu: [ppc64]
os: [linux]
- '@esbuild/linux-riscv64@0.27.3':
- resolution: {integrity: sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==}
+ '@esbuild/linux-riscv64@0.27.4':
+ resolution: {integrity: sha512-BnASypppbUWyqjd1KIpU4AUBiIhVr6YlHx/cnPgqEkNoVOhHg+YiSVxM1RLfiy4t9cAulbRGTNCKOcqHrEQLIw==}
engines: {node: '>=18'}
cpu: [riscv64]
os: [linux]
- '@esbuild/linux-s390x@0.27.3':
- resolution: {integrity: sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==}
+ '@esbuild/linux-s390x@0.27.4':
+ resolution: {integrity: sha512-+eUqgb/Z7vxVLezG8bVB9SfBie89gMueS+I0xYh2tJdw3vqA/0ImZJ2ROeWwVJN59ihBeZ7Tu92dF/5dy5FttA==}
engines: {node: '>=18'}
cpu: [s390x]
os: [linux]
- '@esbuild/linux-x64@0.27.3':
- resolution: {integrity: sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==}
+ '@esbuild/linux-x64@0.27.4':
+ resolution: {integrity: sha512-S5qOXrKV8BQEzJPVxAwnryi2+Iq5pB40gTEIT69BQONqR7JH1EPIcQ/Uiv9mCnn05jff9umq/5nqzxlqTOg9NA==}
engines: {node: '>=18'}
cpu: [x64]
os: [linux]
- '@esbuild/netbsd-arm64@0.27.3':
- resolution: {integrity: sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==}
+ '@esbuild/netbsd-arm64@0.27.4':
+ resolution: {integrity: sha512-xHT8X4sb0GS8qTqiwzHqpY00C95DPAq7nAwX35Ie/s+LO9830hrMd3oX0ZMKLvy7vsonee73x0lmcdOVXFzd6Q==}
engines: {node: '>=18'}
cpu: [arm64]
os: [netbsd]
- '@esbuild/netbsd-x64@0.27.3':
- resolution: {integrity: sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==}
+ '@esbuild/netbsd-x64@0.27.4':
+ resolution: {integrity: sha512-RugOvOdXfdyi5Tyv40kgQnI0byv66BFgAqjdgtAKqHoZTbTF2QqfQrFwa7cHEORJf6X2ht+l9ABLMP0dnKYsgg==}
engines: {node: '>=18'}
cpu: [x64]
os: [netbsd]
- '@esbuild/openbsd-arm64@0.27.3':
- resolution: {integrity: sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==}
+ '@esbuild/openbsd-arm64@0.27.4':
+ resolution: {integrity: sha512-2MyL3IAaTX+1/qP0O1SwskwcwCoOI4kV2IBX1xYnDDqthmq5ArrW94qSIKCAuRraMgPOmG0RDTA74mzYNQA9ow==}
engines: {node: '>=18'}
cpu: [arm64]
os: [openbsd]
- '@esbuild/openbsd-x64@0.27.3':
- resolution: {integrity: sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==}
+ '@esbuild/openbsd-x64@0.27.4':
+ resolution: {integrity: sha512-u8fg/jQ5aQDfsnIV6+KwLOf1CmJnfu1ShpwqdwC0uA7ZPwFws55Ngc12vBdeUdnuWoQYx/SOQLGDcdlfXhYmXQ==}
engines: {node: '>=18'}
cpu: [x64]
os: [openbsd]
- '@esbuild/openharmony-arm64@0.27.3':
- resolution: {integrity: sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==}
+ '@esbuild/openharmony-arm64@0.27.4':
+ resolution: {integrity: sha512-JkTZrl6VbyO8lDQO3yv26nNr2RM2yZzNrNHEsj9bm6dOwwu9OYN28CjzZkH57bh4w0I2F7IodpQvUAEd1mbWXg==}
engines: {node: '>=18'}
cpu: [arm64]
os: [openharmony]
- '@esbuild/sunos-x64@0.27.3':
- resolution: {integrity: sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==}
+ '@esbuild/sunos-x64@0.27.4':
+ resolution: {integrity: sha512-/gOzgaewZJfeJTlsWhvUEmUG4tWEY2Spp5M20INYRg2ZKl9QPO3QEEgPeRtLjEWSW8FilRNacPOg8R1uaYkA6g==}
engines: {node: '>=18'}
cpu: [x64]
os: [sunos]
- '@esbuild/win32-arm64@0.27.3':
- resolution: {integrity: sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==}
+ '@esbuild/win32-arm64@0.27.4':
+ resolution: {integrity: sha512-Z9SExBg2y32smoDQdf1HRwHRt6vAHLXcxD2uGgO/v2jK7Y718Ix4ndsbNMU/+1Qiem9OiOdaqitioZwxivhXYg==}
engines: {node: '>=18'}
cpu: [arm64]
os: [win32]
- '@esbuild/win32-ia32@0.27.3':
- resolution: {integrity: sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==}
+ '@esbuild/win32-ia32@0.27.4':
+ resolution: {integrity: sha512-DAyGLS0Jz5G5iixEbMHi5KdiApqHBWMGzTtMiJ72ZOLhbu/bzxgAe8Ue8CTS3n3HbIUHQz/L51yMdGMeoxXNJw==}
engines: {node: '>=18'}
cpu: [ia32]
os: [win32]
- '@esbuild/win32-x64@0.27.3':
- resolution: {integrity: sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==}
+ '@esbuild/win32-x64@0.27.4':
+ resolution: {integrity: sha512-+knoa0BDoeXgkNvvV1vvbZX4+hizelrkwmGJBdT17t8FNPwG2lKemmuMZlmaNQ3ws3DKKCxpb4zRZEIp3UxFCg==}
engines: {node: '>=18'}
cpu: [x64]
os: [win32]
@@ -1227,8 +1235,8 @@ packages:
resolution: {integrity: sha512-j+eEWmB6YYLwcNOdlwQ6L2OsptI/LO6lNBuLIqe5R7RetD658HLoF+Mn7LzYmAWWNNzdC6cqP+L6r8ujeYXWLw==}
engines: {node: ^20.19.0 || ^22.13.0 || >=24}
- '@eslint/config-helpers@0.5.2':
- resolution: {integrity: sha512-a5MxrdDXEvqnIq+LisyCX6tQMPF/dSJpCfBgBauY+pNZ28yCtSsTvyTYrMhaI+LK26bVyCJfJkT0u8KIj2i1dQ==}
+ '@eslint/config-helpers@0.5.3':
+ resolution: {integrity: sha512-lzGN0onllOZCGroKJmRwY6QcEHxbjBw1gwB8SgRSqK8YbbtEXMvKynsXc3553ckIEBxsbMBU7oOZXKIPGZNeZw==}
engines: {node: ^20.19.0 || ^22.13.0 || >=24}
'@eslint/core@1.1.1':
@@ -1252,10 +1260,6 @@ packages:
resolution: {integrity: sha512-iH1B076HoAshH1mLpHMgwdGeTs0CYwL0SPMkGuSebZrwBp16v415e9NZXg2jtrqPVQjf6IANe2Vtlr5KswtcZQ==}
engines: {node: ^20.19.0 || ^22.13.0 || >=24}
- '@fastify/busboy@2.1.1':
- resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==}
- engines: {node: '>=14'}
-
'@favware/cliff-jumper@6.0.0':
resolution: {integrity: sha512-9uXg/fGHFLh4AnG3HCtlrrrmDvUnmr5vrbs7H9pet3WlUCsGGGqeNT0bFb8LG0M0GatYUi9RM/F60p1yn2ndEA==}
engines: {node: '>=v18'}
@@ -1288,8 +1292,8 @@ packages:
resolution: {integrity: sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ==}
engines: {node: '>=18'}
- '@inquirer/ansi@2.0.3':
- resolution: {integrity: sha512-g44zhR3NIKVs0zUesa4iMzExmZpLUdTLRMCStqX3GE5NT6VkPcxQGJ+uC8tDgBUC/vB1rUhUd55cOf++4NZcmw==}
+ '@inquirer/ansi@2.0.4':
+ resolution: {integrity: sha512-DpcZrQObd7S0R/U3bFdkcT5ebRwbTTC4D3tCc1vsJizmgPLxNJBo+AAFmrZwe8zk30P2QzgzGWZ3Q9uJwWuhIg==}
engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'}
'@inquirer/checkbox@4.3.2':
@@ -1301,8 +1305,8 @@ packages:
'@types/node':
optional: true
- '@inquirer/checkbox@5.1.0':
- resolution: {integrity: sha512-/HjF1LN0a1h4/OFsbGKHNDtWICFU/dqXCdym719HFTyJo9IG7Otr+ziGWc9S0iQuohRZllh+WprSgd5UW5Fw0g==}
+ '@inquirer/checkbox@5.1.2':
+ resolution: {integrity: sha512-PubpMPO2nJgMufkoB3P2wwxNXEMUXnBIKi/ACzDUYfaoPuM7gSTmuxJeMscoLVEsR4qqrCMf5p0SiYGWnVJ8kw==}
engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'}
peerDependencies:
'@types/node': '>=18'
@@ -1319,8 +1323,8 @@ packages:
'@types/node':
optional: true
- '@inquirer/confirm@6.0.8':
- resolution: {integrity: sha512-Di6dgmiZ9xCSUxWUReWTqDtbhXCuG2MQm2xmgSAIruzQzBqNf49b8E07/vbCYY506kDe8BiwJbegXweG8M1klw==}
+ '@inquirer/confirm@6.0.10':
+ resolution: {integrity: sha512-tiNyA73pgpQ0FQ7axqtoLUe4GDYjNCDcVsbgcA5anvwg2z6i+suEngLKKJrWKJolT//GFPZHwN30binDIHgSgQ==}
engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'}
peerDependencies:
'@types/node': '>=18'
@@ -1337,8 +1341,8 @@ packages:
'@types/node':
optional: true
- '@inquirer/core@11.1.5':
- resolution: {integrity: sha512-QQPAX+lka8GyLcZ7u7Nb1h6q72iZ/oy0blilC3IB2nSt1Qqxp7akt94Jqhi/DzARuN3Eo9QwJRvtl4tmVe4T5A==}
+ '@inquirer/core@11.1.7':
+ resolution: {integrity: sha512-1BiBNDk9btIwYIzNZpkikIHXWeNzNncJePPqwDyVMhXhD1ebqbpn1mKGctpoqAbzywZfdG0O4tvmsGIcOevAPQ==}
engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'}
peerDependencies:
'@types/node': '>=18'
@@ -1355,8 +1359,8 @@ packages:
'@types/node':
optional: true
- '@inquirer/editor@5.0.8':
- resolution: {integrity: sha512-sLcpbb9B3XqUEGrj1N66KwhDhEckzZ4nI/W6SvLXyBX8Wic3LDLENlWRvkOGpCPoserabe+MxQkpiMoI8irvyA==}
+ '@inquirer/editor@5.0.10':
+ resolution: {integrity: sha512-VJx4XyaKea7t8hEApTw5dxeIyMtWXre2OiyJcICCRZI4hkoHsMoCnl/KbUnJJExLbH9csLLHMVR144ZhFE1CwA==}
engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'}
peerDependencies:
'@types/node': '>=18'
@@ -1373,8 +1377,8 @@ packages:
'@types/node':
optional: true
- '@inquirer/expand@5.0.8':
- resolution: {integrity: sha512-QieW3F1prNw3j+hxO7/NKkG1pk3oz7pOB6+5Upwu3OIwADfPX0oZVppsqlL+Vl/uBHHDSOBY0BirLctLnXwGGg==}
+ '@inquirer/expand@5.0.10':
+ resolution: {integrity: sha512-fC0UHJPXsTRvY2fObiwuQYaAnHrp3aDqfwKUJSdfpgv18QUG054ezGbaRNStk/BKD5IPijeMKWej8VV8O5Q/eQ==}
engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'}
peerDependencies:
'@types/node': '>=18'
@@ -1391,8 +1395,8 @@ packages:
'@types/node':
optional: true
- '@inquirer/external-editor@2.0.3':
- resolution: {integrity: sha512-LgyI7Agbda74/cL5MvA88iDpvdXI2KuMBCGRkbCl2Dg1vzHeOgs+s0SDcXV7b+WZJrv2+ERpWSM65Fpi9VfY3w==}
+ '@inquirer/external-editor@2.0.4':
+ resolution: {integrity: sha512-Prenuv9C1PHj2Itx0BcAOVBTonz02Hc2Nd2DbU67PdGUaqn0nPCnV34oDyyoaZHnmfRxkpuhh/u51ThkrO+RdA==}
engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'}
peerDependencies:
'@types/node': '>=18'
@@ -1404,8 +1408,8 @@ packages:
resolution: {integrity: sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==}
engines: {node: '>=18'}
- '@inquirer/figures@2.0.3':
- resolution: {integrity: sha512-y09iGt3JKoOCBQ3w4YrSJdokcD8ciSlMIWsD+auPu+OZpfxLuyz+gICAQ6GCBOmJJt4KEQGHuZSVff2jiNOy7g==}
+ '@inquirer/figures@2.0.4':
+ resolution: {integrity: sha512-eLBsjlS7rPS3WEhmOmh1znQ5IsQrxWzxWDxO51e4urv+iVrSnIHbq4zqJIOiyNdYLa+BVjwOtdetcQx1lWPpiQ==}
engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'}
'@inquirer/input@4.3.1':
@@ -1417,8 +1421,8 @@ packages:
'@types/node':
optional: true
- '@inquirer/input@5.0.8':
- resolution: {integrity: sha512-p0IJslw0AmedLEkOU+yrEX3Aj2RTpQq7ZOf8nc1DIhjzaxRWrrgeuE5Kyh39fVRgtcACaMXx/9WNo8+GjgBOfw==}
+ '@inquirer/input@5.0.10':
+ resolution: {integrity: sha512-nvZ6qEVeX/zVtZ1dY2hTGDQpVGD3R7MYPLODPgKO8Y+RAqxkrP3i/3NwF3fZpLdaMiNuK0z2NaYIx9tPwiSegQ==}
engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'}
peerDependencies:
'@types/node': '>=18'
@@ -1435,8 +1439,8 @@ packages:
'@types/node':
optional: true
- '@inquirer/number@4.0.8':
- resolution: {integrity: sha512-uGLiQah9A0F9UIvJBX52m0CnqtLaym0WpT9V4YZrjZ+YRDKZdwwoEPz06N6w8ChE2lrnsdyhY9sL+Y690Kh9gQ==}
+ '@inquirer/number@4.0.10':
+ resolution: {integrity: sha512-Ht8OQstxiS3APMGjHV0aYAjRAysidWdwurWEo2i8yI5xbhOBWqizT0+MU1S2GCcuhIBg+3SgWVjEoXgfhY+XaA==}
engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'}
peerDependencies:
'@types/node': '>=18'
@@ -1453,8 +1457,8 @@ packages:
'@types/node':
optional: true
- '@inquirer/password@5.0.8':
- resolution: {integrity: sha512-zt1sF4lYLdvPqvmvHdmjOzuUUjuCQ897pdUCO8RbXMUDKXJTTyOQgtn23le+jwcb+MpHl3VAFvzIdxRAf6aPlA==}
+ '@inquirer/password@5.0.10':
+ resolution: {integrity: sha512-QbNyvIE8q2GTqKLYSsA8ATG+eETo+m31DSR0+AU7x3d2FhaTWzqQek80dj3JGTo743kQc6mhBR0erMjYw5jQ0A==}
engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'}
peerDependencies:
'@types/node': '>=18'
@@ -1471,8 +1475,8 @@ packages:
'@types/node':
optional: true
- '@inquirer/prompts@8.3.0':
- resolution: {integrity: sha512-JAj66kjdH/F1+B7LCigjARbwstt3SNUOSzMdjpsvwJmzunK88gJeXmcm95L9nw1KynvFVuY4SzXh/3Y0lvtgSg==}
+ '@inquirer/prompts@8.3.2':
+ resolution: {integrity: sha512-yFroiSj2iiBFlm59amdTvAcQFvWS6ph5oKESls/uqPBect7rTU2GbjyZO2DqxMGuIwVA8z0P4K6ViPcd/cp+0w==}
engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'}
peerDependencies:
'@types/node': '>=18'
@@ -1489,8 +1493,8 @@ packages:
'@types/node':
optional: true
- '@inquirer/rawlist@5.2.4':
- resolution: {integrity: sha512-fTuJ5Cq9W286isLxwj6GGyfTjx1Zdk4qppVEPexFuA6yioCCXS4V1zfKroQqw7QdbDPN73xs2DiIAlo55+kBqg==}
+ '@inquirer/rawlist@5.2.6':
+ resolution: {integrity: sha512-jfw0MLJ5TilNsa9zlJ6nmRM0ZFVZhhTICt4/6CU2Dv1ndY7l3sqqo1gIYZyMMDw0LvE1u1nzJNisfHEhJIxq5w==}
engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'}
peerDependencies:
'@types/node': '>=18'
@@ -1507,8 +1511,8 @@ packages:
'@types/node':
optional: true
- '@inquirer/search@4.1.4':
- resolution: {integrity: sha512-9yPTxq7LPmYjrGn3DRuaPuPbmC6u3fiWcsE9ggfLcdgO/ICHYgxq7mEy1yJ39brVvgXhtOtvDVjDh9slJxE4LQ==}
+ '@inquirer/search@4.1.6':
+ resolution: {integrity: sha512-3/6kTRae98hhDevENScy7cdFEuURnSpM3JbBNg8yfXLw88HgTOl+neUuy/l9W0No5NzGsLVydhBzTIxZP7yChQ==}
engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'}
peerDependencies:
'@types/node': '>=18'
@@ -1525,8 +1529,8 @@ packages:
'@types/node':
optional: true
- '@inquirer/select@5.1.0':
- resolution: {integrity: sha512-OyYbKnchS1u+zRe14LpYrN8S0wH1vD0p2yKISvSsJdH2TpI87fh4eZdWnpdbrGauCRWDph3NwxRmM4Pcm/hx1Q==}
+ '@inquirer/select@5.1.2':
+ resolution: {integrity: sha512-kTK8YIkHV+f02y7bWCh7E0u2/11lul5WepVTclr3UMBtBr05PgcZNWfMa7FY57ihpQFQH/spLMHTcr0rXy50tA==}
engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'}
peerDependencies:
'@types/node': '>=18'
@@ -1543,8 +1547,8 @@ packages:
'@types/node':
optional: true
- '@inquirer/type@4.0.3':
- resolution: {integrity: sha512-cKZN7qcXOpj1h+1eTTcGDVLaBIHNMT1Rz9JqJP5MnEJ0JhgVWllx7H/tahUp5YEK1qaByH2Itb8wLG/iScD5kw==}
+ '@inquirer/type@4.0.4':
+ resolution: {integrity: sha512-PamArxO3cFJZoOzspzo6cxVlLeIftyBsZw/S9bKY5DzxqJVZgjoj1oP8d0rskKtp7sZxBycsoer1g6UeJV1BBA==}
engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'}
peerDependencies:
'@types/node': '>=18'
@@ -1574,8 +1578,8 @@ packages:
engines: {node: '>=18'}
hasBin: true
- '@nanoforge-dev/actions@1.1.0':
- resolution: {integrity: sha512-BTZyJ69Ax5nvMYqFRzj4WGvFTUW4W9JSDSaln4DwJmDtS3davkwphuXS85WEghQ1lpbp+gHuOUXu6Xj56gwW2w==}
+ '@nanoforge-dev/actions@1.2.3':
+ resolution: {integrity: sha512-YVQ1e3H5MVHGBku2bA+lMLb+mkDXvJvYN228V6L0R+HXxo82X3Y1oVDKzlsnz+GRvYejJXEsY6jzPrV3pzbGwA==}
engines: {node: '25'}
'@nanoforge-dev/cli@1.3.0':
@@ -1599,58 +1603,61 @@ packages:
resolution: {integrity: sha512-OMw6k8eh5TlwPIwlbem/SozPCb+lkmHtSIcxI8LqDG0CLwC0YzJ3WIZ0uLuEhATbVSHZXy7tstS92XZV4ZlEFg==}
engines: {node: '25'}
- '@octokit/auth-token@4.0.0':
- resolution: {integrity: sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==}
- engines: {node: '>= 18'}
+ '@napi-rs/wasm-runtime@1.1.2':
+ resolution: {integrity: sha512-sNXv5oLJ7ob93xkZ1XnxisYhGYXfaG9f65/ZgYuAu3qt7b3NadcOEhLvx28hv31PgX8SZJRYrAIPQilQmFpLVw==}
+ peerDependencies:
+ '@emnapi/core': ^1.7.1
+ '@emnapi/runtime': ^1.7.1
'@octokit/auth-token@5.1.2':
resolution: {integrity: sha512-JcQDsBdg49Yky2w2ld20IHAlwr8d/d8N6NiOXbtuoPCqzbsiJgF633mVUw3x4mo0H5ypataQIX7SFu3yy44Mpw==}
engines: {node: '>= 18'}
- '@octokit/core@5.2.2':
- resolution: {integrity: sha512-/g2d4sW9nUDJOMz3mabVQvOGhVa4e/BN/Um7yca9Bb2XTzPPnfTWHWQg+IsEYO7M3Vx+EXvaM/I2pJWIMun1bg==}
- engines: {node: '>= 18'}
+ '@octokit/auth-token@6.0.0':
+ resolution: {integrity: sha512-P4YJBPdPSpWTQ1NU4XYdvHvXJJDxM6YwpS0FZHRgP7YFkdVxsWcpWGy/NVqlAA7PcPCnMacXlRm1y2PFZRWL/w==}
+ engines: {node: '>= 20'}
'@octokit/core@6.1.6':
resolution: {integrity: sha512-kIU8SLQkYWGp3pVKiYzA5OSaNF5EE03P/R8zEmmrG6XwOg5oBjXyQVVIauQ0dgau4zYhpZEhJrvIYt6oM+zZZA==}
engines: {node: '>= 18'}
+ '@octokit/core@7.0.6':
+ resolution: {integrity: sha512-DhGl4xMVFGVIyMwswXeyzdL4uXD5OGILGX5N8Y+f6W7LhC1Ze2poSNrkF/fedpVDHEEZ+PHFW0vL14I+mm8K3Q==}
+ engines: {node: '>= 20'}
+
'@octokit/endpoint@10.1.4':
resolution: {integrity: sha512-OlYOlZIsfEVZm5HCSR8aSg02T2lbUWOsCQoPKfTXJwDzcHQBrVBGdGXb89dv2Kw2ToZaRtudp8O3ZIYoaOjKlA==}
engines: {node: '>= 18'}
- '@octokit/endpoint@9.0.6':
- resolution: {integrity: sha512-H1fNTMA57HbkFESSt3Y9+FBICv+0jFceJFPWDePYlR/iMGrwM5ph+Dd4XRQs+8X+PUFURLQgX9ChPfhJ/1uNQw==}
- engines: {node: '>= 18'}
-
- '@octokit/graphql@7.1.1':
- resolution: {integrity: sha512-3mkDltSfcDUoa176nlGoA32RGjeWjl3K7F/BwHwRMJUW/IteSa4bnSV8p2ThNkcIcZU2umkZWxwETSSCJf2Q7g==}
- engines: {node: '>= 18'}
+ '@octokit/endpoint@11.0.3':
+ resolution: {integrity: sha512-FWFlNxghg4HrXkD3ifYbS/IdL/mDHjh9QcsNyhQjN8dplUoZbejsdpmuqdA76nxj2xoWPs7p8uX2SNr9rYu0Ag==}
+ engines: {node: '>= 20'}
'@octokit/graphql@8.2.2':
resolution: {integrity: sha512-Yi8hcoqsrXGdt0yObxbebHXFOiUA+2v3n53epuOg1QUgOB6c4XzvisBNVXJSl8RYA5KrDuSL2yq9Qmqe5N0ryA==}
engines: {node: '>= 18'}
- '@octokit/openapi-types@20.0.0':
- resolution: {integrity: sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA==}
-
- '@octokit/openapi-types@24.2.0':
- resolution: {integrity: sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==}
+ '@octokit/graphql@9.0.3':
+ resolution: {integrity: sha512-grAEuupr/C1rALFnXTv6ZQhFuL1D8G5y8CN04RgrO4FIPMrtm+mcZzFG7dcBm+nq+1ppNixu+Jd78aeJOYxlGA==}
+ engines: {node: '>= 20'}
'@octokit/openapi-types@25.1.0':
resolution: {integrity: sha512-idsIggNXUKkk0+BExUn1dQ92sfysJrje03Q0bv0e+KPLrvyqZF8MnBpFz8UNfYDwB3Ie7Z0TByjWfzxt7vseaA==}
- '@octokit/plugin-paginate-rest@9.2.2':
- resolution: {integrity: sha512-u3KYkGF7GcZnSD/3UP0S7K5XUFT2FkOQdcfXZGZQPGv3lm4F2Xbf71lvjldr8c1H3nNbF+33cLEkWYbokGWqiQ==}
- engines: {node: '>= 18'}
+ '@octokit/openapi-types@27.0.0':
+ resolution: {integrity: sha512-whrdktVs1h6gtR+09+QsNk2+FO+49j6ga1c55YZudfEG+oKJVvJLQi3zkOm5JjiUXAagWK2tI2kTGKJ2Ys7MGA==}
+
+ '@octokit/plugin-paginate-rest@14.0.0':
+ resolution: {integrity: sha512-fNVRE7ufJiAA3XUrha2omTA39M6IXIc6GIZLvlbsm8QOQCYvpq/LkMNGyFlB1d8hTDzsAXa3OKtybdMAYsV/fw==}
+ engines: {node: '>= 20'}
peerDependencies:
- '@octokit/core': '5'
+ '@octokit/core': '>=6'
- '@octokit/plugin-rest-endpoint-methods@10.4.1':
- resolution: {integrity: sha512-xV1b+ceKV9KytQe3zCVqjg+8GTGfDYwaT1ATU5isiUyVtlVAO3HNdzpS4sr4GBx4hxQ46s7ITtZrAsxG22+rVg==}
- engines: {node: '>= 18'}
+ '@octokit/plugin-rest-endpoint-methods@17.0.0':
+ resolution: {integrity: sha512-B5yCyIlOJFPqUUeiD0cnBJwWJO8lkJs5d8+ze9QDP6SvfiXSz1BF+91+0MeI1d2yxgOhU/O+CvtiZ9jSkHhFAw==}
+ engines: {node: '>= 20'}
peerDependencies:
- '@octokit/core': '5'
+ '@octokit/core': '>=6'
'@octokit/plugin-retry@7.2.1':
resolution: {integrity: sha512-wUc3gv0D6vNHpGxSaR3FlqJpTXGWgqmk607N9L3LvPL4QjaxDgX/1nY2mGpT37Khn+nlIXdljczkRnNdTTV3/A==}
@@ -1658,91 +1665,91 @@ packages:
peerDependencies:
'@octokit/core': '>=6'
- '@octokit/request-error@5.1.1':
- resolution: {integrity: sha512-v9iyEQJH6ZntoENr9/yXxjuezh4My67CBSu9r6Ve/05Iu5gNgnisNWOsoJHTP6k0Rr0+HQIpnH+kyammu90q/g==}
- engines: {node: '>= 18'}
-
'@octokit/request-error@6.1.8':
resolution: {integrity: sha512-WEi/R0Jmq+IJKydWlKDmryPcmdYSVjL3ekaiEL1L9eo1sUnqMJ+grqmC9cjk7CA7+b2/T397tO5d8YLOH3qYpQ==}
engines: {node: '>= 18'}
- '@octokit/request@8.4.1':
- resolution: {integrity: sha512-qnB2+SY3hkCmBxZsR/MPCybNmbJe4KAlfWErXq+rBKkQJlbjdJeS85VI9r8UqeLYLvnAenU8Q1okM/0MBsAGXw==}
- engines: {node: '>= 18'}
+ '@octokit/request-error@7.1.0':
+ resolution: {integrity: sha512-KMQIfq5sOPpkQYajXHwnhjCC0slzCNScLHs9JafXc4RAJI+9f+jNDlBNaIMTvazOPLgb4BnlhGJOTbnN0wIjPw==}
+ engines: {node: '>= 20'}
+
+ '@octokit/request@10.0.8':
+ resolution: {integrity: sha512-SJZNwY9pur9Agf7l87ywFi14W+Hd9Jg6Ifivsd33+/bGUQIjNujdFiXII2/qSlN2ybqUHfp5xpekMEjIBTjlSw==}
+ engines: {node: '>= 20'}
'@octokit/request@9.2.4':
resolution: {integrity: sha512-q8ybdytBmxa6KogWlNa818r0k1wlqzNC+yNkcQDECHvQo8Vmstrg18JwqJHdJdUiHD2sjlwBgSm9kHkOKe2iyA==}
engines: {node: '>= 18'}
- '@octokit/types@12.6.0':
- resolution: {integrity: sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw==}
-
- '@octokit/types@13.10.0':
- resolution: {integrity: sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==}
-
'@octokit/types@14.1.0':
resolution: {integrity: sha512-1y6DgTy8Jomcpu33N+p5w58l6xyt55Ar2I91RPiIA0xCJBXyUAhXCcmZaDWSANiha7R9a6qJJ2CRomGPZ6f46g==}
- '@oven/bun-darwin-aarch64@1.3.10':
- resolution: {integrity: sha512-PXgg5gqcS/rHwa1hF0JdM1y5TiyejVrMHoBmWY/DjtfYZoFTXie1RCFOkoG0b5diOOmUcuYarMpH7CSNTqwj+w==}
+ '@octokit/types@16.0.0':
+ resolution: {integrity: sha512-sKq+9r1Mm4efXW1FCk7hFSeJo4QKreL/tTbR0rz/qx/r1Oa2VV83LTA/H/MuCOX7uCIJmQVRKBcbmWoySjAnSg==}
+
+ '@oven/bun-darwin-aarch64@1.3.11':
+ resolution: {integrity: sha512-/8IzqSu4/OWGRs7Fs2ROzGVwJMFTBQkgAp6sAthkBYoN7OiM4rY/CpPVs2X9w9N1W61CHSkEdNKi8HrLZKfK3g==}
cpu: [arm64]
os: [darwin]
- '@oven/bun-darwin-x64-baseline@1.3.10':
- resolution: {integrity: sha512-w1gaTlqU0IJCmJ1X+PGHkdNU1n8Gemx5YKkjhkJIguvFINXEBB5U1KG82QsT65Tk4KyNMfbLTlmy4giAvUoKfA==}
+ '@oven/bun-darwin-x64-baseline@1.3.11':
+ resolution: {integrity: sha512-CYjIHWaQG7T4phfjErHr6BiXRs0K/9DqMeiohJmuYSBF+H2m56vFslOenLCguGYQL9jeiiCZBeoVCpwjxZrMgQ==}
cpu: [x64]
os: [darwin]
- '@oven/bun-darwin-x64@1.3.10':
- resolution: {integrity: sha512-Nhssuh7GBpP5PiDSOl3+qnoIG7PJo+ec2oomDevnl9pRY6x6aD2gRt0JE+uf+A8Om2D6gjeHCxjEdrw5ZHE8mA==}
+ '@oven/bun-darwin-x64@1.3.11':
+ resolution: {integrity: sha512-TT7eUihnAzxM2tlZesusuC75PAOYKvUBgVU/Nm/lakZ/DpyuqhNkzUfcxSgmmK9IjVWzMmezLIGZl16XGCGJng==}
cpu: [x64]
os: [darwin]
- '@oven/bun-linux-aarch64-musl@1.3.10':
- resolution: {integrity: sha512-Ui5pAgM7JE9MzHokF0VglRMkbak3lTisY4Mf1AZutPACXWgKJC5aGrgnHBfkl7QS6fEeYb0juy1q4eRznRHOsw==}
+ '@oven/bun-linux-aarch64-musl@1.3.11':
+ resolution: {integrity: sha512-jBwYCLG5Eb+PqtFrc3Wp2WMYlw1Id75gUcsdP+ApCOpf5oQhHxkFWCjZmcDoioDmEhMWAiM3wtwSrTlPg+sI6Q==}
cpu: [arm64]
os: [linux]
- '@oven/bun-linux-aarch64@1.3.10':
- resolution: {integrity: sha512-OUgPHfL6+PM2Q+tFZjcaycN3D7gdQdYlWnwMI31DXZKY1r4HINWk9aEz9t/rNaHg65edwNrt7dsv9TF7xK8xIA==}
+ '@oven/bun-linux-aarch64@1.3.11':
+ resolution: {integrity: sha512-8XMLyRNxHF4jfLajkWt+F8UDxsWbzysyxQVMZKUXwoeGvaxB0rVd07r3YbgDtG8U6khhRFM3oaGp+CQ0whwmdA==}
cpu: [arm64]
os: [linux]
- '@oven/bun-linux-x64-baseline@1.3.10':
- resolution: {integrity: sha512-oqvMDYpX6dGJO03HgO5bXuccEsH3qbdO3MaAiAlO4CfkBPLUXz3N0DDElg5hz0L6ktdDVKbQVE5lfe+LAUISQg==}
+ '@oven/bun-linux-x64-baseline@1.3.11':
+ resolution: {integrity: sha512-KZlf1jKtf4jai8xiQv/0XRjxVVhHnw/HtUKtLdOeQpTOQ1fQFhLoz2FGGtVRd0LVa/yiRbSz9HlWIzWlmJClng==}
cpu: [x64]
os: [linux]
- '@oven/bun-linux-x64-musl-baseline@1.3.10':
- resolution: {integrity: sha512-/hOZ6S1VsTX6vtbhWVL9aAnOrdpuO54mAGUWpTdMz7dFG5UBZ/VUEiK0pBkq9A1rlBk0GeD/6Y4NBFl8Ha7cRA==}
+ '@oven/bun-linux-x64-musl-baseline@1.3.11':
+ resolution: {integrity: sha512-J+qz4Al05PrNIOdj7xsWVTyx0c/gjUauG5nKV3Rrx0Q+5JO+1pPVlnfNmWbOF9pKG4f3IGad8KXJUfGMORld+Q==}
cpu: [x64]
os: [linux]
- '@oven/bun-linux-x64-musl@1.3.10':
- resolution: {integrity: sha512-poVXvOShekbexHq45b4MH/mRjQKwACAC8lHp3Tz/hEDuz0/20oncqScnmKwzhBPEpqJvydXficXfBYuSim8opw==}
+ '@oven/bun-linux-x64-musl@1.3.11':
+ resolution: {integrity: sha512-ADImD4yCHNpqZu718E2chWcCaAHvua90yhmpzzV6fF4zOhwkGGbPCgUWmKyJ83uz+DXaPdYxX0ttDvtolrzx3Q==}
cpu: [x64]
os: [linux]
- '@oven/bun-linux-x64@1.3.10':
- resolution: {integrity: sha512-bzUgYj/PIZziB/ZesIP9HUyfvh6Vlf3od+TrbTTyVEuCSMKzDPQVW/yEbRp0tcHO3alwiEXwJDrWrHAguXlgiQ==}
+ '@oven/bun-linux-x64@1.3.11':
+ resolution: {integrity: sha512-z3GFCk1UBzDOOiEBHL32lVP7Edi26BhOjKb6bIc0nRyabbRiyON4++GR0zmd/H5zM5S0+UcXFgCGnD+b8avTLw==}
cpu: [x64]
os: [linux]
- '@oven/bun-windows-aarch64@1.3.10':
- resolution: {integrity: sha512-GXbz2swvN2DLw2dXZFeedMxSJtI64xQ9xp9Eg7Hjejg6mS2E4dP1xoQ2yAo2aZPi/2OBPAVaGzppI2q20XumHA==}
+ '@oven/bun-windows-aarch64@1.3.11':
+ resolution: {integrity: sha512-UOdkwScHRkGPz+n9ZJU7sTkTvqV7rD1SLCLaru1xH8WRsV7tDorPqNCzEN1msOIiPRK825nvAtEm9UsomO1GsA==}
cpu: [arm64]
os: [win32]
- '@oven/bun-windows-x64-baseline@1.3.10':
- resolution: {integrity: sha512-gh3UAHbUdDUG6fhLc1Csa4IGdtghue6U8oAIXWnUqawp6lwb3gOCRvp25IUnLF5vUHtgfMxuEUYV7YA2WxVutw==}
+ '@oven/bun-windows-x64-baseline@1.3.11':
+ resolution: {integrity: sha512-cCsXK9AQ9Zf18QlVnbrFu2IKfr4sf2sfbErkF2jfCzyCO9Bnhl0KRx63zlN+Ni1xU7gcBLAssgcui5R400N2eA==}
cpu: [x64]
os: [win32]
- '@oven/bun-windows-x64@1.3.10':
- resolution: {integrity: sha512-qaS1In3yfC/Z/IGQriVmF8GWwKuNqiw7feTSJWaQhH5IbL6ENR+4wGNPniZSJFaM/SKUO0e/YCRdoVBvgU4C1g==}
+ '@oven/bun-windows-x64@1.3.11':
+ resolution: {integrity: sha512-E51tyWDP1l0CbjZYhiUxhDGPaY8Hf5YBREx0PHBff1LM1/q3qsJ6ZvRUa8YbbOO0Ax9QP6GHjD9vf3n6bXZ7QA==}
cpu: [x64]
os: [win32]
+ '@oxc-project/types@0.122.0':
+ resolution: {integrity: sha512-oLAl5kBpV4w69UtFZ9xqcmTi+GENWOcPF7FCrczTiBbmC0ibXxCwyvZGbO39rCVEuLGAZM84DH0pUIyyv/YJzA==}
+
'@oxfmt/binding-android-arm-eabi@0.35.0':
resolution: {integrity: sha512-BaRKlM3DyG81y/xWTsE6gZiv89F/3pHe2BqX2H4JbiB8HNVlWWtplzgATAE5IDSdwChdeuWLDTQzJ92Lglw3ZA==}
engines: {node: ^20.19.0 || >=22.12.0}
@@ -1869,141 +1876,239 @@ packages:
resolution: {integrity: sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==}
engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
- '@rollup/rollup-android-arm-eabi@4.59.0':
- resolution: {integrity: sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg==}
+ '@rolldown/binding-android-arm64@1.0.0-rc.12':
+ resolution: {integrity: sha512-pv1y2Fv0JybcykuiiD3qBOBdz6RteYojRFY1d+b95WVuzx211CRh+ytI/+9iVyWQ6koTh5dawe4S/yRfOFjgaA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [android]
+
+ '@rolldown/binding-darwin-arm64@1.0.0-rc.12':
+ resolution: {integrity: sha512-cFYr6zTG/3PXXF3pUO+umXxt1wkRK/0AYT8lDwuqvRC+LuKYWSAQAQZjCWDQpAH172ZV6ieYrNnFzVVcnSflAg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@rolldown/binding-darwin-x64@1.0.0-rc.12':
+ resolution: {integrity: sha512-ZCsYknnHzeXYps0lGBz8JrF37GpE9bFVefrlmDrAQhOEi4IOIlcoU1+FwHEtyXGx2VkYAvhu7dyBf75EJQffBw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [darwin]
+
+ '@rolldown/binding-freebsd-x64@1.0.0-rc.12':
+ resolution: {integrity: sha512-dMLeprcVsyJsKolRXyoTH3NL6qtsT0Y2xeuEA8WQJquWFXkEC4bcu1rLZZSnZRMtAqwtrF/Ib9Ddtpa/Gkge9Q==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.12':
+ resolution: {integrity: sha512-YqWjAgGC/9M1lz3GR1r1rP79nMgo3mQiiA+Hfo+pvKFK1fAJ1bCi0ZQVh8noOqNacuY1qIcfyVfP6HoyBRZ85Q==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [linux]
+
+ '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.12':
+ resolution: {integrity: sha512-/I5AS4cIroLpslsmzXfwbe5OmWvSsrFuEw3mwvbQ1kDxJ822hFHIx+vsN/TAzNVyepI/j/GSzrtCIwQPeKCLIg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
+
+ '@rolldown/binding-linux-arm64-musl@1.0.0-rc.12':
+ resolution: {integrity: sha512-V6/wZztnBqlx5hJQqNWwFdxIKN0m38p8Jas+VoSfgH54HSj9tKTt1dZvG6JRHcjh6D7TvrJPWFGaY9UBVOaWPw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
+
+ '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.12':
+ resolution: {integrity: sha512-AP3E9BpcUYliZCxa3w5Kwj9OtEVDYK6sVoUzy4vTOJsjPOgdaJZKFmN4oOlX0Wp0RPV2ETfmIra9x1xuayFB7g==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [ppc64]
+ os: [linux]
+ libc: [glibc]
+
+ '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.12':
+ resolution: {integrity: sha512-nWwpvUSPkoFmZo0kQazZYOrT7J5DGOJ/+QHHzjvNlooDZED8oH82Yg67HvehPPLAg5fUff7TfWFHQS8IV1n3og==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [s390x]
+ os: [linux]
+ libc: [glibc]
+
+ '@rolldown/binding-linux-x64-gnu@1.0.0-rc.12':
+ resolution: {integrity: sha512-RNrafz5bcwRy+O9e6P8Z/OCAJW/A+qtBczIqVYwTs14pf4iV1/+eKEjdOUta93q2TsT/FI0XYDP3TCky38LMAg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
+
+ '@rolldown/binding-linux-x64-musl@1.0.0-rc.12':
+ resolution: {integrity: sha512-Jpw/0iwoKWx3LJ2rc1yjFrj+T7iHZn2JDg1Yny1ma0luviFS4mhAIcd1LFNxK3EYu3DHWCps0ydXQ5i/rrJ2ig==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
+
+ '@rolldown/binding-openharmony-arm64@1.0.0-rc.12':
+ resolution: {integrity: sha512-vRugONE4yMfVn0+7lUKdKvN4D5YusEiPilaoO2sgUWpCvrncvWgPMzK00ZFFJuiPgLwgFNP5eSiUlv2tfc+lpA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [openharmony]
+
+ '@rolldown/binding-wasm32-wasi@1.0.0-rc.12':
+ resolution: {integrity: sha512-ykGiLr/6kkiHc0XnBfmFJuCjr5ZYKKofkx+chJWDjitX+KsJuAmrzWhwyOMSHzPhzOHOy7u9HlFoa5MoAOJ/Zg==}
+ engines: {node: '>=14.0.0'}
+ cpu: [wasm32]
+
+ '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.12':
+ resolution: {integrity: sha512-5eOND4duWkwx1AzCxadcOrNeighiLwMInEADT0YM7xeEOOFcovWZCq8dadXgcRHSf3Ulh1kFo/qvzoFiCLOL1Q==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [win32]
+
+ '@rolldown/binding-win32-x64-msvc@1.0.0-rc.12':
+ resolution: {integrity: sha512-PyqoipaswDLAZtot351MLhrlrh6lcZPo2LSYE+VDxbVk24LVKAGOuE4hb8xZQmrPAuEtTZW8E6D2zc5EUZX4Lw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [win32]
+
+ '@rolldown/pluginutils@1.0.0-rc.12':
+ resolution: {integrity: sha512-HHMwmarRKvoFsJorqYlFeFRzXZqCt2ETQlEDOb9aqssrnVBB1/+xgTGtuTrIk5vzLNX1MjMtTf7W9z3tsSbrxw==}
+
+ '@rollup/rollup-android-arm-eabi@4.60.1':
+ resolution: {integrity: sha512-d6FinEBLdIiK+1uACUttJKfgZREXrF0Qc2SmLII7W2AD8FfiZ9Wjd+rD/iRuf5s5dWrr1GgwXCvPqOuDquOowA==}
cpu: [arm]
os: [android]
- '@rollup/rollup-android-arm64@4.59.0':
- resolution: {integrity: sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q==}
+ '@rollup/rollup-android-arm64@4.60.1':
+ resolution: {integrity: sha512-YjG/EwIDvvYI1YvYbHvDz/BYHtkY4ygUIXHnTdLhG+hKIQFBiosfWiACWortsKPKU/+dUwQQCKQM3qrDe8c9BA==}
cpu: [arm64]
os: [android]
- '@rollup/rollup-darwin-arm64@4.59.0':
- resolution: {integrity: sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==}
+ '@rollup/rollup-darwin-arm64@4.60.1':
+ resolution: {integrity: sha512-mjCpF7GmkRtSJwon+Rq1N8+pI+8l7w5g9Z3vWj4T7abguC4Czwi3Yu/pFaLvA3TTeMVjnu3ctigusqWUfjZzvw==}
cpu: [arm64]
os: [darwin]
- '@rollup/rollup-darwin-x64@4.59.0':
- resolution: {integrity: sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==}
+ '@rollup/rollup-darwin-x64@4.60.1':
+ resolution: {integrity: sha512-haZ7hJ1JT4e9hqkoT9R/19XW2QKqjfJVv+i5AGg57S+nLk9lQnJ1F/eZloRO3o9Scy9CM3wQ9l+dkXtcBgN5Ew==}
cpu: [x64]
os: [darwin]
- '@rollup/rollup-freebsd-arm64@4.59.0':
- resolution: {integrity: sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==}
+ '@rollup/rollup-freebsd-arm64@4.60.1':
+ resolution: {integrity: sha512-czw90wpQq3ZsAVBlinZjAYTKduOjTywlG7fEeWKUA7oCmpA8xdTkxZZlwNJKWqILlq0wehoZcJYfBvOyhPTQ6w==}
cpu: [arm64]
os: [freebsd]
- '@rollup/rollup-freebsd-x64@4.59.0':
- resolution: {integrity: sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==}
+ '@rollup/rollup-freebsd-x64@4.60.1':
+ resolution: {integrity: sha512-KVB2rqsxTHuBtfOeySEyzEOB7ltlB/ux38iu2rBQzkjbwRVlkhAGIEDiiYnO2kFOkJp+Z7pUXKyrRRFuFUKt+g==}
cpu: [x64]
os: [freebsd]
- '@rollup/rollup-linux-arm-gnueabihf@4.59.0':
- resolution: {integrity: sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==}
+ '@rollup/rollup-linux-arm-gnueabihf@4.60.1':
+ resolution: {integrity: sha512-L+34Qqil+v5uC0zEubW7uByo78WOCIrBvci69E7sFASRl0X7b/MB6Cqd1lky/CtcSVTydWa2WZwFuWexjS5o6g==}
cpu: [arm]
os: [linux]
libc: [glibc]
- '@rollup/rollup-linux-arm-musleabihf@4.59.0':
- resolution: {integrity: sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==}
+ '@rollup/rollup-linux-arm-musleabihf@4.60.1':
+ resolution: {integrity: sha512-n83O8rt4v34hgFzlkb1ycniJh7IR5RCIqt6mz1VRJD6pmhRi0CXdmfnLu9dIUS6buzh60IvACM842Ffb3xd6Gg==}
cpu: [arm]
os: [linux]
libc: [musl]
- '@rollup/rollup-linux-arm64-gnu@4.59.0':
- resolution: {integrity: sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==}
+ '@rollup/rollup-linux-arm64-gnu@4.60.1':
+ resolution: {integrity: sha512-Nql7sTeAzhTAja3QXeAI48+/+GjBJ+QmAH13snn0AJSNL50JsDqotyudHyMbO2RbJkskbMbFJfIJKWA6R1LCJQ==}
cpu: [arm64]
os: [linux]
libc: [glibc]
- '@rollup/rollup-linux-arm64-musl@4.59.0':
- resolution: {integrity: sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA==}
+ '@rollup/rollup-linux-arm64-musl@4.60.1':
+ resolution: {integrity: sha512-+pUymDhd0ys9GcKZPPWlFiZ67sTWV5UU6zOJat02M1+PiuSGDziyRuI/pPue3hoUwm2uGfxdL+trT6Z9rxnlMA==}
cpu: [arm64]
os: [linux]
libc: [musl]
- '@rollup/rollup-linux-loong64-gnu@4.59.0':
- resolution: {integrity: sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg==}
+ '@rollup/rollup-linux-loong64-gnu@4.60.1':
+ resolution: {integrity: sha512-VSvgvQeIcsEvY4bKDHEDWcpW4Yw7BtlKG1GUT4FzBUlEKQK0rWHYBqQt6Fm2taXS+1bXvJT6kICu5ZwqKCnvlQ==}
cpu: [loong64]
os: [linux]
libc: [glibc]
- '@rollup/rollup-linux-loong64-musl@4.59.0':
- resolution: {integrity: sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q==}
+ '@rollup/rollup-linux-loong64-musl@4.60.1':
+ resolution: {integrity: sha512-4LqhUomJqwe641gsPp6xLfhqWMbQV04KtPp7/dIp0nzPxAkNY1AbwL5W0MQpcalLYk07vaW9Kp1PBhdpZYYcEw==}
cpu: [loong64]
os: [linux]
libc: [musl]
- '@rollup/rollup-linux-ppc64-gnu@4.59.0':
- resolution: {integrity: sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA==}
+ '@rollup/rollup-linux-ppc64-gnu@4.60.1':
+ resolution: {integrity: sha512-tLQQ9aPvkBxOc/EUT6j3pyeMD6Hb8QF2BTBnCQWP/uu1lhc9AIrIjKnLYMEroIz/JvtGYgI9dF3AxHZNaEH0rw==}
cpu: [ppc64]
os: [linux]
libc: [glibc]
- '@rollup/rollup-linux-ppc64-musl@4.59.0':
- resolution: {integrity: sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA==}
+ '@rollup/rollup-linux-ppc64-musl@4.60.1':
+ resolution: {integrity: sha512-RMxFhJwc9fSXP6PqmAz4cbv3kAyvD1etJFjTx4ONqFP9DkTkXsAMU4v3Vyc5BgzC+anz7nS/9tp4obsKfqkDHg==}
cpu: [ppc64]
os: [linux]
libc: [musl]
- '@rollup/rollup-linux-riscv64-gnu@4.59.0':
- resolution: {integrity: sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==}
+ '@rollup/rollup-linux-riscv64-gnu@4.60.1':
+ resolution: {integrity: sha512-QKgFl+Yc1eEk6MmOBfRHYF6lTxiiiV3/z/BRrbSiW2I7AFTXoBFvdMEyglohPj//2mZS4hDOqeB0H1ACh3sBbg==}
cpu: [riscv64]
os: [linux]
libc: [glibc]
- '@rollup/rollup-linux-riscv64-musl@4.59.0':
- resolution: {integrity: sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==}
+ '@rollup/rollup-linux-riscv64-musl@4.60.1':
+ resolution: {integrity: sha512-RAjXjP/8c6ZtzatZcA1RaQr6O1TRhzC+adn8YZDnChliZHviqIjmvFwHcxi4JKPSDAt6Uhf/7vqcBzQJy0PDJg==}
cpu: [riscv64]
os: [linux]
libc: [musl]
- '@rollup/rollup-linux-s390x-gnu@4.59.0':
- resolution: {integrity: sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==}
+ '@rollup/rollup-linux-s390x-gnu@4.60.1':
+ resolution: {integrity: sha512-wcuocpaOlaL1COBYiA89O6yfjlp3RwKDeTIA0hM7OpmhR1Bjo9j31G1uQVpDlTvwxGn2nQs65fBFL5UFd76FcQ==}
cpu: [s390x]
os: [linux]
libc: [glibc]
- '@rollup/rollup-linux-x64-gnu@4.59.0':
- resolution: {integrity: sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==}
+ '@rollup/rollup-linux-x64-gnu@4.60.1':
+ resolution: {integrity: sha512-77PpsFQUCOiZR9+LQEFg9GClyfkNXj1MP6wRnzYs0EeWbPcHs02AXu4xuUbM1zhwn3wqaizle3AEYg5aeoohhg==}
cpu: [x64]
os: [linux]
libc: [glibc]
- '@rollup/rollup-linux-x64-musl@4.59.0':
- resolution: {integrity: sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg==}
+ '@rollup/rollup-linux-x64-musl@4.60.1':
+ resolution: {integrity: sha512-5cIATbk5vynAjqqmyBjlciMJl1+R/CwX9oLk/EyiFXDWd95KpHdrOJT//rnUl4cUcskrd0jCCw3wpZnhIHdD9w==}
cpu: [x64]
os: [linux]
libc: [musl]
- '@rollup/rollup-openbsd-x64@4.59.0':
- resolution: {integrity: sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ==}
+ '@rollup/rollup-openbsd-x64@4.60.1':
+ resolution: {integrity: sha512-cl0w09WsCi17mcmWqqglez9Gk8isgeWvoUZ3WiJFYSR3zjBQc2J5/ihSjpl+VLjPqjQ/1hJRcqBfLjssREQILw==}
cpu: [x64]
os: [openbsd]
- '@rollup/rollup-openharmony-arm64@4.59.0':
- resolution: {integrity: sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA==}
+ '@rollup/rollup-openharmony-arm64@4.60.1':
+ resolution: {integrity: sha512-4Cv23ZrONRbNtbZa37mLSueXUCtN7MXccChtKpUnQNgF010rjrjfHx3QxkS2PI7LqGT5xXyYs1a7LbzAwT0iCA==}
cpu: [arm64]
os: [openharmony]
- '@rollup/rollup-win32-arm64-msvc@4.59.0':
- resolution: {integrity: sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A==}
+ '@rollup/rollup-win32-arm64-msvc@4.60.1':
+ resolution: {integrity: sha512-i1okWYkA4FJICtr7KpYzFpRTHgy5jdDbZiWfvny21iIKky5YExiDXP+zbXzm3dUcFpkEeYNHgQ5fuG236JPq0g==}
cpu: [arm64]
os: [win32]
- '@rollup/rollup-win32-ia32-msvc@4.59.0':
- resolution: {integrity: sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA==}
+ '@rollup/rollup-win32-ia32-msvc@4.60.1':
+ resolution: {integrity: sha512-u09m3CuwLzShA0EYKMNiFgcjjzwqtUMLmuCJLeZWjjOYA3IT2Di09KaxGBTP9xVztWyIWjVdsB2E9goMjZvTQg==}
cpu: [ia32]
os: [win32]
- '@rollup/rollup-win32-x64-gnu@4.59.0':
- resolution: {integrity: sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA==}
+ '@rollup/rollup-win32-x64-gnu@4.60.1':
+ resolution: {integrity: sha512-k+600V9Zl1CM7eZxJgMyTUzmrmhB/0XZnF4pRypKAlAgxmedUA+1v9R+XOFv56W4SlHEzfeMtzujLJD22Uz5zg==}
cpu: [x64]
os: [win32]
- '@rollup/rollup-win32-x64-msvc@4.59.0':
- resolution: {integrity: sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA==}
+ '@rollup/rollup-win32-x64-msvc@4.60.1':
+ resolution: {integrity: sha512-lWMnixq/QzxyhTV6NjQJ4SFo1J6PvOX8vUx5Wb4bBPsEb+8xZ89Bz6kOXpfXj9ak9AHTQVQzlgzBEc1SyM27xQ==}
cpu: [x64]
os: [win32]
@@ -2071,6 +2176,39 @@ packages:
svelte:
optional: true
+ '@turbo/darwin-64@2.9.3':
+ resolution: {integrity: sha512-P8foouaP+y/p+hhEGBoZpzMbpVvUMwPjDpcy6wN7EYfvvyISD1USuV27qWkczecihwuPJzQ1lDBuL8ERcavTyg==}
+ cpu: [x64]
+ os: [darwin]
+
+ '@turbo/darwin-arm64@2.9.3':
+ resolution: {integrity: sha512-SIzEkvtNdzdI50FJDaIQ6kQGqgSSdFPcdn0wqmmONN6iGKjy6hsT+EH99GP65FsfV7DLZTh2NmtTIRl2kdoz5Q==}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@turbo/linux-64@2.9.3':
+ resolution: {integrity: sha512-pLRwFmcHHNBvsCySLS6OFabr/07kDT2pxEt/k6eBf/3asiVQZKJ7Rk88AafQx2aYA641qek4RsXvYO3JYpiBug==}
+ cpu: [x64]
+ os: [linux]
+
+ '@turbo/linux-arm64@2.9.3':
+ resolution: {integrity: sha512-gy6ApUroC2Nzv+qjGtE/uPNkhHAFU4c8God+zd5Aiv9L9uBgHlxVJpHT3XWl5xwlJZ2KWuMrlHTaS5kmNB+q1Q==}
+ cpu: [arm64]
+ os: [linux]
+
+ '@turbo/windows-64@2.9.3':
+ resolution: {integrity: sha512-d0YelTX6hAsB7kIEtGB3PzIzSfAg3yDoUlHwuwJc3adBXUsyUIs0YLG+1NNtuhcDOUGnWQeKUoJ2pGWvbpRj7w==}
+ cpu: [x64]
+ os: [win32]
+
+ '@turbo/windows-arm64@2.9.3':
+ resolution: {integrity: sha512-/08CwpKJl3oRY8nOlh2YgilZVJDHsr60XTNxRhuDeuFXONpUZ5X+Nv65izbG/xBew9qxcJFbDX9/sAmAX+ITcQ==}
+ cpu: [arm64]
+ os: [win32]
+
+ '@tybys/wasm-util@0.10.1':
+ resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==}
+
'@types/chai@5.2.3':
resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==}
@@ -2092,9 +2230,6 @@ packages:
'@types/json-schema@7.0.15':
resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
- '@types/node@25.3.5':
- resolution: {integrity: sha512-oX8xrhvpiyRCQkG1MFchB09f+cXftgIXb3a7UUa4Y3wpmZPw5tyZGTLWhlESOLq1Rq6oDlc8npVU2/9xiCuXMA==}
-
'@types/node@25.5.0':
resolution: {integrity: sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw==}
@@ -2110,102 +2245,102 @@ packages:
'@types/ws@8.18.1':
resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==}
- '@typescript-eslint/eslint-plugin@8.57.1':
- resolution: {integrity: sha512-Gn3aqnvNl4NGc6x3/Bqk1AOn0thyTU9bqDRhiRnUWezgvr2OnhYCWCgC8zXXRVqBsIL1pSDt7T9nJUe0oM0kDQ==}
+ '@typescript-eslint/eslint-plugin@8.58.0':
+ resolution: {integrity: sha512-RLkVSiNuUP1C2ROIWfqX+YcUfLaSnxGE/8M+Y57lopVwg9VTYYfhuz15Yf1IzCKgZj6/rIbYTmJCUSqr76r0Wg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- '@typescript-eslint/parser': ^8.57.1
+ '@typescript-eslint/parser': ^8.58.0
eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
- typescript: '>=4.8.4 <6.0.0'
+ typescript: '>=4.8.4 <6.1.0'
- '@typescript-eslint/parser@8.57.1':
- resolution: {integrity: sha512-k4eNDan0EIMTT/dUKc/g+rsJ6wcHYhNPdY19VoX/EOtaAG8DLtKCykhrUnuHPYvinn5jhAPgD2Qw9hXBwrahsw==}
+ '@typescript-eslint/parser@8.58.0':
+ resolution: {integrity: sha512-rLoGZIf9afaRBYsPUMtvkDWykwXwUPL60HebR4JgTI8mxfFe2cQTu3AGitANp4b9B2QlVru6WzjgB2IzJKiCSA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
- typescript: '>=4.8.4 <6.0.0'
+ typescript: '>=4.8.4 <6.1.0'
- '@typescript-eslint/project-service@8.57.1':
- resolution: {integrity: sha512-vx1F37BRO1OftsYlmG9xay1TqnjNVlqALymwWVuYTdo18XuKxtBpCj1QlzNIEHlvlB27osvXFWptYiEWsVdYsg==}
+ '@typescript-eslint/project-service@8.58.0':
+ resolution: {integrity: sha512-8Q/wBPWLQP1j16NxoPNIKpDZFMaxl7yWIoqXWYeWO+Bbd2mjgvoF0dxP2jKZg5+x49rgKdf7Ck473M8PC3V9lg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- typescript: '>=4.8.4 <6.0.0'
+ typescript: '>=4.8.4 <6.1.0'
- '@typescript-eslint/scope-manager@8.57.1':
- resolution: {integrity: sha512-hs/QcpCwlwT2L5S+3fT6gp0PabyGk4Q0Rv2doJXA0435/OpnSR3VRgvrp8Xdoc3UAYSg9cyUjTeFXZEPg/3OKg==}
+ '@typescript-eslint/scope-manager@8.58.0':
+ resolution: {integrity: sha512-W1Lur1oF50FxSnNdGp3Vs6P+yBRSmZiw4IIjEeYxd8UQJwhUF0gDgDD/W/Tgmh73mxgEU3qX0Bzdl/NGuSPEpQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@typescript-eslint/tsconfig-utils@8.57.1':
- resolution: {integrity: sha512-0lgOZB8cl19fHO4eI46YUx2EceQqhgkPSuCGLlGi79L2jwYY1cxeYc1Nae8Aw1xjgW3PKVDLlr3YJ6Bxx8HkWg==}
+ '@typescript-eslint/tsconfig-utils@8.58.0':
+ resolution: {integrity: sha512-doNSZEVJsWEu4htiVC+PR6NpM+pa+a4ClH9INRWOWCUzMst/VA9c4gXq92F8GUD1rwhNvRLkgjfYtFXegXQF7A==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- typescript: '>=4.8.4 <6.0.0'
+ typescript: '>=4.8.4 <6.1.0'
- '@typescript-eslint/type-utils@8.57.1':
- resolution: {integrity: sha512-+Bwwm0ScukFdyoJsh2u6pp4S9ktegF98pYUU0hkphOOqdMB+1sNQhIz8y5E9+4pOioZijrkfNO/HUJVAFFfPKA==}
+ '@typescript-eslint/type-utils@8.58.0':
+ resolution: {integrity: sha512-aGsCQImkDIqMyx1u4PrVlbi/krmDsQUs4zAcCV6M7yPcPev+RqVlndsJy9kJ8TLihW9TZ0kbDAzctpLn5o+lOg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
- typescript: '>=4.8.4 <6.0.0'
+ typescript: '>=4.8.4 <6.1.0'
- '@typescript-eslint/types@8.57.1':
- resolution: {integrity: sha512-S29BOBPJSFUiblEl6RzPPjJt6w25A6XsBqRVDt53tA/tlL8q7ceQNZHTjPeONt/3S7KRI4quk+yP9jK2WjBiPQ==}
+ '@typescript-eslint/types@8.58.0':
+ resolution: {integrity: sha512-O9CjxypDT89fbHxRfETNoAnHj/i6IpRK0CvbVN3qibxlLdo5p5hcLmUuCCrHMpxiWSwKyI8mCP7qRNYuOJ0Uww==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@typescript-eslint/typescript-estree@8.57.1':
- resolution: {integrity: sha512-ybe2hS9G6pXpqGtPli9Gx9quNV0TWLOmh58ADlmZe9DguLq0tiAKVjirSbtM1szG6+QH6rVXyU6GTLQbWnMY+g==}
+ '@typescript-eslint/typescript-estree@8.58.0':
+ resolution: {integrity: sha512-7vv5UWbHqew/dvs+D3e1RvLv1v2eeZ9txRHPnEEBUgSNLx5ghdzjHa0sgLWYVKssH+lYmV0JaWdoubo0ncGYLA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- typescript: '>=4.8.4 <6.0.0'
+ typescript: '>=4.8.4 <6.1.0'
- '@typescript-eslint/utils@8.57.1':
- resolution: {integrity: sha512-XUNSJ/lEVFttPMMoDVA2r2bwrl8/oPx8cURtczkSEswY5T3AeLmCy+EKWQNdL4u0MmAHOjcWrqJp2cdvgjn8dQ==}
+ '@typescript-eslint/utils@8.58.0':
+ resolution: {integrity: sha512-RfeSqcFeHMHlAWzt4TBjWOAtoW9lnsAGiP3GbaX9uVgTYYrMbVnGONEfUCiSss+xMHFl+eHZiipmA8WkQ7FuNA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
- typescript: '>=4.8.4 <6.0.0'
+ typescript: '>=4.8.4 <6.1.0'
- '@typescript-eslint/visitor-keys@8.57.1':
- resolution: {integrity: sha512-YWnmJkXbofiz9KbnbbwuA2rpGkFPLbAIetcCNO6mJ8gdhdZ/v7WDXsoGFAJuM6ikUFKTlSQnjWnVO4ux+UzS6A==}
+ '@typescript-eslint/visitor-keys@8.58.0':
+ resolution: {integrity: sha512-XJ9UD9+bbDo4a4epraTwG3TsNPeiB9aShrUneAVXy8q4LuwowN+qu89/6ByLMINqvIMeI9H9hOHQtg/ijrYXzQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@vitest/coverage-v8@4.0.18':
- resolution: {integrity: sha512-7i+N2i0+ME+2JFZhfuz7Tg/FqKtilHjGyGvoHYQ6iLV0zahbsJ9sljC9OcFcPDbhYKCet+sG8SsVqlyGvPflZg==}
+ '@vitest/coverage-v8@4.1.2':
+ resolution: {integrity: sha512-sPK//PHO+kAkScb8XITeB1bf7fsk85Km7+rt4eeuRR3VS1/crD47cmV5wicisJmjNdfeokTZwjMk4Mj2d58Mgg==}
peerDependencies:
- '@vitest/browser': 4.0.18
- vitest: 4.0.18
+ '@vitest/browser': 4.1.2
+ vitest: 4.1.2
peerDependenciesMeta:
'@vitest/browser':
optional: true
- '@vitest/expect@4.0.18':
- resolution: {integrity: sha512-8sCWUyckXXYvx4opfzVY03EOiYVxyNrHS5QxX3DAIi5dpJAAkyJezHCP77VMX4HKA2LDT/Jpfo8i2r5BE3GnQQ==}
+ '@vitest/expect@4.1.2':
+ resolution: {integrity: sha512-gbu+7B0YgUJ2nkdsRJrFFW6X7NTP44WlhiclHniUhxADQJH5Szt9mZ9hWnJPJ8YwOK5zUOSSlSvyzRf0u1DSBQ==}
- '@vitest/mocker@4.0.18':
- resolution: {integrity: sha512-HhVd0MDnzzsgevnOWCBj5Otnzobjy5wLBe4EdeeFGv8luMsGcYqDuFRMcttKWZA5vVO8RFjexVovXvAM4JoJDQ==}
+ '@vitest/mocker@4.1.2':
+ resolution: {integrity: sha512-Ize4iQtEALHDttPRCmN+FKqOl2vxTiNUhzobQFFt/BM1lRUTG7zRCLOykG/6Vo4E4hnUdfVLo5/eqKPukcWW7Q==}
peerDependencies:
msw: ^2.4.9
- vite: ^6.0.0 || ^7.0.0-0
+ vite: ^6.0.0 || ^7.0.0 || ^8.0.0
peerDependenciesMeta:
msw:
optional: true
vite:
optional: true
- '@vitest/pretty-format@4.0.18':
- resolution: {integrity: sha512-P24GK3GulZWC5tz87ux0m8OADrQIUVDPIjjj65vBXYG17ZeU3qD7r+MNZ1RNv4l8CGU2vtTRqixrOi9fYk/yKw==}
+ '@vitest/pretty-format@4.1.2':
+ resolution: {integrity: sha512-dwQga8aejqeuB+TvXCMzSQemvV9hNEtDDpgUKDzOmNQayl2OG241PSWeJwKRH3CiC+sESrmoFd49rfnq7T4RnA==}
- '@vitest/runner@4.0.18':
- resolution: {integrity: sha512-rpk9y12PGa22Jg6g5M3UVVnTS7+zycIGk9ZNGN+m6tZHKQb7jrP7/77WfZy13Y/EUDd52NDsLRQhYKtv7XfPQw==}
+ '@vitest/runner@4.1.2':
+ resolution: {integrity: sha512-Gr+FQan34CdiYAwpGJmQG8PgkyFVmARK8/xSijia3eTFgVfpcpztWLuP6FttGNfPLJhaZVP/euvujeNYar36OQ==}
- '@vitest/snapshot@4.0.18':
- resolution: {integrity: sha512-PCiV0rcl7jKQjbgYqjtakly6T1uwv/5BQ9SwBLekVg/EaYeQFPiXcgrC2Y7vDMA8dM1SUEAEV82kgSQIlXNMvA==}
+ '@vitest/snapshot@4.1.2':
+ resolution: {integrity: sha512-g7yfUmxYS4mNxk31qbOYsSt2F4m1E02LFqO53Xpzg3zKMhLAPZAjjfyl9e6z7HrW6LvUdTwAQR3HHfLjpko16A==}
- '@vitest/spy@4.0.18':
- resolution: {integrity: sha512-cbQt3PTSD7P2OARdVW3qWER5EGq7PHlvE+QfzSC0lbwO+xnt7+XH06ZzFjFRgzUX//JmpxrCu92VdwvEPlWSNw==}
+ '@vitest/spy@4.1.2':
+ resolution: {integrity: sha512-DU4fBnbVCJGNBwVA6xSToNXrkZNSiw59H8tcuUspVMsBDBST4nfvsPsEHDHGtWRRnqBERBQu7TrTKskmjqTXKA==}
- '@vitest/utils@4.0.18':
- resolution: {integrity: sha512-msMRKLMVLWygpK3u2Hybgi4MNjcYJvwTb0Ru09+fOyCXIgT5raYP041DRRdiJiI3k/2U6SEbAETB3YtBrUkCFA==}
+ '@vitest/utils@4.1.2':
+ resolution: {integrity: sha512-xw2/TiX82lQHA06cgbqRKFb5lCAy3axQ4H4SoUFhUsg+wztiet+co86IAMDtF6Vm1hc7J6j09oh/rgDn+JdKIQ==}
abbrev@3.0.1:
resolution: {integrity: sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==}
@@ -2276,8 +2411,8 @@ packages:
resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==}
engines: {node: '>=12'}
- ast-v8-to-istanbul@0.3.12:
- resolution: {integrity: sha512-BRRC8VRZY2R4Z4lFIL35MwNXmwVqBityvOIwETtsCSwvjl0IdgFsy9NhdaA6j74nUdtJJlIypeRhpDam19Wq3g==}
+ ast-v8-to-istanbul@1.0.0:
+ resolution: {integrity: sha512-1fSfIwuDICFA4LKkCzRPO7F0hzFf0B7+Xqrl27ynQaa+Rh0e1Es0v6kWHPott3lU10AyAr7oKHa65OppjLn3Rg==}
balanced-match@1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
@@ -2286,28 +2421,24 @@ packages:
resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==}
engines: {node: 18 || 20 || >=22}
- before-after-hook@2.2.3:
- resolution: {integrity: sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==}
-
before-after-hook@3.0.2:
resolution: {integrity: sha512-Nik3Sc0ncrMK4UUdXQmAnRtzmNQTAAXmXIopizwZ1W1t8QmfJj+zL4OA2I7XPTPW5z5TDqv4hRo/JzouDJnX3A==}
+ before-after-hook@4.0.0:
+ resolution: {integrity: sha512-q6tR3RPqIB1pMiTRMFcZwuG5T8vwp+vUvEG0vuI6B+Rikh5BfPp2fQ82c925FOs+b0lcFQ8CFrL+KbilfZFhOQ==}
+
bottleneck@2.19.5:
resolution: {integrity: sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==}
- brace-expansion@2.0.2:
- resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==}
+ brace-expansion@2.0.3:
+ resolution: {integrity: sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA==}
- brace-expansion@5.0.4:
- resolution: {integrity: sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==}
+ brace-expansion@5.0.5:
+ resolution: {integrity: sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==}
engines: {node: 18 || 20 || >=22}
- braces@3.0.3:
- resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
- engines: {node: '>=8'}
-
- bun@1.3.10:
- resolution: {integrity: sha512-S/CXaXXIyA4CMjdMkYQ4T2YMqnAn4s0ysD3mlsY4bUiOCqGlv28zck4Wd4H4kpvbekx15S9mUeLQ7Uxd0tYTLA==}
+ bun@1.3.11:
+ resolution: {integrity: sha512-AvXWYFO6j/ZQ7bhGm4X6eilq2JHsDVC90ZM32k2B7/srhC2gs3Sdki1QTbwrdRCo8o7eT+167vcB1yzOvPdbjA==}
cpu: [arm64, x64]
os: [darwin, linux, win32]
hasBin: true
@@ -2414,12 +2545,12 @@ packages:
resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==}
engines: {node: ^14.18.0 || >=16.10.0}
- conventional-changelog-angular@8.3.0:
- resolution: {integrity: sha512-DOuBwYSqWzfwuRByY9O4oOIvDlkUCTDzfbOgcSbkY+imXXj+4tmrEFao3K+FxemClYfYnZzsvudbwrhje9VHDA==}
+ conventional-changelog-angular@8.3.1:
+ resolution: {integrity: sha512-6gfI3otXK5Ph5DfCOI1dblr+kN3FAm5a97hYoQkqNZxOaYa5WKfXH+AnpsmS+iUH2mgVC2Cg2Qw9m5OKcmNrIg==}
engines: {node: '>=18'}
- conventional-changelog-conventionalcommits@9.3.0:
- resolution: {integrity: sha512-kYFx6gAyjSIMwNtASkI3ZE99U1fuVDJr0yTYgVy+I2QG46zNZfl2her+0+eoviG82c5WQvW1jMt1eOQTeJLodA==}
+ conventional-changelog-conventionalcommits@9.3.1:
+ resolution: {integrity: sha512-dTYtpIacRpcZgrvBYvBfArMmK2xvIpv2TaxM0/ZI5CBtNUzvF2x0t15HsbRABWprS6UPmvj+PzHVjSx4qAVKyw==}
engines: {node: '>=18'}
conventional-changelog-preset-loader@5.0.0:
@@ -2430,8 +2561,8 @@ packages:
resolution: {integrity: sha512-tQMagCOC59EVgNZcC5zl7XqO30Wki9i9J3acbUvkaosCT6JX3EeFwJD7Qqp4MCikRnzS18WXV3BLIQ66ytu6+Q==}
engines: {node: '>=18'}
- conventional-commits-parser@6.3.0:
- resolution: {integrity: sha512-RfOq/Cqy9xV9bOA8N+ZH6DlrDR+5S3Mi0B5kACEjESpE+AviIpAptx9a9cFpWCCvgRtWT+0BbUw+e1BZfts9jg==}
+ conventional-commits-parser@6.4.0:
+ resolution: {integrity: sha512-tvRg7FIBNlyPzjdG8wWRlPHQJJHI7DylhtRGeU9Lq+JuoPh5BKpPRX83ZdLrvXuOSu5Eo/e7SzOQhU4Hd2Miuw==}
engines: {node: '>=18'}
hasBin: true
@@ -2440,6 +2571,9 @@ packages:
engines: {node: '>=18'}
hasBin: true
+ convert-source-map@2.0.0:
+ resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
+
cosmiconfig-typescript-loader@6.2.0:
resolution: {integrity: sha512-GEN39v7TgdxgIoNcdkRE3uiAzQt3UXLyHbRHD6YoL048XAeOomyxaP+Hh/+2C6C2wYjxJ2onhJcsQp+L4YEkVQ==}
engines: {node: '>=v18'}
@@ -2473,11 +2607,8 @@ packages:
deep-is@0.1.4:
resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
- defu@6.1.4:
- resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==}
-
- deprecation@2.3.1:
- resolution: {integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==}
+ defu@6.1.6:
+ resolution: {integrity: sha512-f8mefEW4WIVg4LckePx3mALjQSPQgFlg9U8yaPdlsbdYcHQyj9n2zL2LJEA52smeYxOvmd/nB7TpMtHGMTHcug==}
destr@2.0.5:
resolution: {integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==}
@@ -2494,8 +2625,8 @@ packages:
resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==}
engines: {node: '>=8'}
- dotenv@17.3.1:
- resolution: {integrity: sha512-IO8C/dzEb6O3F9/twg6ZLXz164a2fhTnEWb95H23Dm4OuN+92NmEAlTrupP9VW6Jm3sO26tQlqyvyi4CsnY9GA==}
+ dotenv@17.4.0:
+ resolution: {integrity: sha512-kCKF62fwtzwYm0IGBNjRUjtJgMfGapII+FslMHIjMR5KTnwEmBmWLDRSnc3XSNP8bNy34tekgQyDT0hr7pERRQ==}
engines: {node: '>=12'}
emoji-regex@10.6.0:
@@ -2522,11 +2653,11 @@ packages:
error-ex@1.3.4:
resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==}
- es-module-lexer@1.7.0:
- resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==}
+ es-module-lexer@2.0.0:
+ resolution: {integrity: sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==}
- esbuild@0.27.3:
- resolution: {integrity: sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==}
+ esbuild@0.27.4:
+ resolution: {integrity: sha512-Rq4vbHnYkK5fws5NF7MYTU68FPRE1ajX7heQ/8QXXWqNgqqJ/GkmmyxIzUnf2Sr/bakf8l54716CcMGHYhMrrQ==}
engines: {node: '>=18'}
hasBin: true
@@ -2590,8 +2721,8 @@ packages:
resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==}
engines: {node: ^20.19.0 || ^22.13.0 || >=24}
- eslint@10.0.3:
- resolution: {integrity: sha512-COV33RzXZkqhG9P2rZCFl9ZmJ7WL+gQSCRzE7RhkbclbQPtLAWReL7ysA0Sh4c8Im2U9ynybdR56PV0XcKvqaQ==}
+ eslint@10.1.0:
+ resolution: {integrity: sha512-S9jlY/ELKEUwwQnqWDO+f+m6sercqOPSqXM5Go94l7DOmxHVDgmSFGWEzeE/gwgTAr0W103BWt0QLe/7mabIvA==}
engines: {node: ^20.19.0 || ^22.13.0 || >=24}
hasBin: true
peerDependencies:
@@ -2600,8 +2731,8 @@ packages:
jiti:
optional: true
- espree@11.1.1:
- resolution: {integrity: sha512-AVHPqQoZYc+RUM4/3Ly5udlZY/U4LS8pIG05jEjWM2lQMU/oaZ7qshzAl2YP1tfNmXfftH3ohurfwNAug+MnsQ==}
+ espree@11.2.0:
+ resolution: {integrity: sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==}
engines: {node: ^20.19.0 || ^22.13.0 || >=24}
esquery@1.7.0:
@@ -2637,6 +2768,9 @@ packages:
fast-content-type-parse@2.0.1:
resolution: {integrity: sha512-nGqtvLrj5w0naR6tDPfB4cUmYCqouzyQiz6C5y/LtcDllJdrcc6WaWW6iXyIIOErTa/XRybj28aasdn4LkVk6Q==}
+ fast-content-type-parse@3.0.0:
+ resolution: {integrity: sha512-ZvLdcY8P+N8mGQJahJV5G4U88CSvT1rP8ApL6uETe88MBXrBHAkZlSEySdUlyztF7ccb+Znos3TFqaepHxdhBg==}
+
fast-deep-equal@3.1.3:
resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
@@ -2678,10 +2812,6 @@ packages:
resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==}
engines: {node: '>=16.0.0'}
- fill-range@7.1.1:
- resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
- engines: {node: '>=8'}
-
find-up@5.0.0:
resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
engines: {node: '>=10'}
@@ -2693,8 +2823,8 @@ packages:
resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==}
engines: {node: '>=16'}
- flatted@3.3.4:
- resolution: {integrity: sha512-3+mMldrTAPdta5kjX2G2J7iX4zxtnwpdA8Tr2ZSjkyPSanvbZAcy6flmtnXbEybHrDcU9641lxrMfFuUxVz9vA==}
+ flatted@3.4.2:
+ resolution: {integrity: sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==}
fsevents@2.3.3:
resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
@@ -2843,10 +2973,6 @@ packages:
resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==}
engines: {node: '>=12'}
- is-number@7.0.0:
- resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
- engines: {node: '>=0.12.0'}
-
is-obj@2.0.0:
resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==}
engines: {node: '>=8'}
@@ -2919,6 +3045,9 @@ packages:
json-stable-stringify-without-jsonify@1.0.1:
resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
+ json-with-bigint@3.5.8:
+ resolution: {integrity: sha512-eq/4KP6K34kwa7TcFdtvnftvHCD9KvHOGGICWwMFc4dOOKF5t4iYqnfLK8otCRCRv06FXOzGGyqE8h8ElMvvdw==}
+
jsonc-parser@3.3.1:
resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==}
@@ -2932,8 +3061,82 @@ packages:
resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
engines: {node: '>= 0.8.0'}
- libphonenumber-js@1.12.38:
- resolution: {integrity: sha512-vwzxmasAy9hZigxtqTbFEwp8ZdZ975TiqVDwj5bKx5sR+zi5ucUQy9mbVTkKM9GzqdLdxux/hTw2nmN5J7POMA==}
+ libphonenumber-js@1.12.41:
+ resolution: {integrity: sha512-lsmMmGXBxXIK/VMLEj0kL6MtUs1kBGj1nTCzi6zgQoG1DEwqwt2DQyHxcLykceIxAnfE3hya7NuIh6PpC6S3fA==}
+
+ lightningcss-android-arm64@1.32.0:
+ resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [android]
+
+ lightningcss-darwin-arm64@1.32.0:
+ resolution: {integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [darwin]
+
+ lightningcss-darwin-x64@1.32.0:
+ resolution: {integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [darwin]
+
+ lightningcss-freebsd-x64@1.32.0:
+ resolution: {integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [freebsd]
+
+ lightningcss-linux-arm-gnueabihf@1.32.0:
+ resolution: {integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm]
+ os: [linux]
+
+ lightningcss-linux-arm64-gnu@1.32.0:
+ resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
+
+ lightningcss-linux-arm64-musl@1.32.0:
+ resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
+
+ lightningcss-linux-x64-gnu@1.32.0:
+ resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
+
+ lightningcss-linux-x64-musl@1.32.0:
+ resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
+
+ lightningcss-win32-arm64-msvc@1.32.0:
+ resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [win32]
+
+ lightningcss-win32-x64-msvc@1.32.0:
+ resolution: {integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [win32]
+
+ lightningcss@1.32.0:
+ resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==}
+ engines: {node: '>= 12.0.0'}
lilconfig@3.1.3:
resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==}
@@ -2945,8 +3148,8 @@ packages:
linkify-it@5.0.0:
resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==}
- lint-staged@16.3.3:
- resolution: {integrity: sha512-RLq2koZ5fGWrx7tcqx2tSTMQj4lRkfNJaebO/li/uunhCJbtZqwTuwPHpgIimAHHi/2nZIiGrkCHDCOeR1onxA==}
+ lint-staged@16.4.0:
+ resolution: {integrity: sha512-lBWt8hujh/Cjysw5GYVmZpFHXDCgZzhrOm8vbcUdobADZNOK/bRshr2kM3DfgrrtR1DQhfupW9gnIXOfiFi+bw==}
engines: {node: '>=20.17'}
hasBin: true
@@ -2962,8 +3165,8 @@ packages:
resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
engines: {node: '>=10'}
- lodash-es@4.17.23:
- resolution: {integrity: sha512-kVI48u3PZr38HdYz98UmfPnXl2DXrpdctLrFLCd3kOx1xUkOmpFPx7gCWWM5MPkL/fD8zb+Ph0QzjGFs4+hHWg==}
+ lodash-es@4.18.1:
+ resolution: {integrity: sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==}
lodash.camelcase@4.3.0:
resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==}
@@ -3015,16 +3218,12 @@ packages:
resolution: {integrity: sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==}
engines: {node: '>=18'}
- micromatch@4.0.8:
- resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
- engines: {node: '>=8.6'}
-
mimic-function@5.0.1:
resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==}
engines: {node: '>=18'}
- minimatch@10.2.4:
- resolution: {integrity: sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==}
+ minimatch@10.2.5:
+ resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==}
engines: {node: 18 || 20 || >=22}
minimatch@9.0.9:
@@ -3042,8 +3241,8 @@ packages:
resolution: {integrity: sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==}
engines: {node: '>= 18'}
- mlly@1.8.1:
- resolution: {integrity: sha512-SnL6sNutTwRWWR/vcmCYHSADjiEesp5TGQQ0pXyLhW5IoeibRlF/CbSLailbB3CNqJUk9cVJ9dUDnbD7GrcHBQ==}
+ mlly@1.8.2:
+ resolution: {integrity: sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==}
ms@2.1.3:
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
@@ -3099,9 +3298,6 @@ packages:
ohash@2.0.11:
resolution: {integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==}
- once@1.4.0:
- resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
-
onetime@7.0.0:
resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==}
engines: {node: '>=18'}
@@ -3163,12 +3359,8 @@ packages:
picocolors@1.1.1:
resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
- picomatch@2.3.1:
- resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
- engines: {node: '>=8.6'}
-
- picomatch@4.0.3:
- resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==}
+ picomatch@4.0.4:
+ resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==}
engines: {node: '>=12'}
pirates@4.0.7:
@@ -3229,8 +3421,8 @@ packages:
resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
engines: {node: '>=6'}
- rc9@3.0.0:
- resolution: {integrity: sha512-MGOue0VqscKWQ104udASX/3GYDcKyPI4j4F8gu/jHHzglpmy9a/anZK3PNe8ug6aZFl+9GxLtdhe3kVZuMaQbA==}
+ rc9@3.0.1:
+ resolution: {integrity: sha512-gMDyleLWVE+i6Sgtc0QbbY6pEKqYs97NGi6isHQPqYlLemPoO8dxQ3uGi0f4NiP98c+jMW6cG1Kx9dDwfvqARQ==}
readdirp@4.1.2:
resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==}
@@ -3266,8 +3458,13 @@ packages:
rfdc@1.4.1:
resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==}
- rollup@4.59.0:
- resolution: {integrity: sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==}
+ rolldown@1.0.0-rc.12:
+ resolution: {integrity: sha512-yP4USLIMYrwpPHEFB5JGH1uxhcslv6/hL0OyvTuY+3qlOSJvZ7ntYnoWpehBxufkgN0cvXxppuTu5hHa/zPh+A==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ hasBin: true
+
+ rollup@4.60.1:
+ resolution: {integrity: sha512-VmtB2rFU/GroZ4oL8+ZqXgSA38O6GR8KSIvWmEFv63pQ0G6KaBH9s07PO8XTXP4vI+3UJUEypOfjkGfmSBBR0w==}
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
hasBin: true
@@ -3309,8 +3506,8 @@ packages:
resolution: {integrity: sha512-stxByr12oeeOyY2BlviTNQlYV5xOj47GirPr4yA1hE9JCtxfQN0+tVbkxwCtYDQWhEKWFHsEK48ORg5jrouCAg==}
engines: {node: '>=20'}
- smol-toml@1.6.0:
- resolution: {integrity: sha512-4zemZi0HvTnYwLfrpk/CF9LOd9Lt87kAt50GnqhMpyF9U3poDAP2+iukq2bZsO/ufegbYehBkqINbsWxj4l4cw==}
+ smol-toml@1.6.1:
+ resolution: {integrity: sha512-dWUG8F5sIIARXih1DTaQAX4SsiTXhInKf1buxdY9DIg4ZYPZK5nGM1VRIYmEbDbsHt7USo99xSLFu5Q1IqTmsg==}
engines: {node: '>= 18'}
source-map-js@1.2.1:
@@ -3324,8 +3521,8 @@ packages:
stackback@0.0.2:
resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==}
- std-env@3.10.0:
- resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==}
+ std-env@4.0.0:
+ resolution: {integrity: sha512-zUMPtQ/HBY3/50VbpkupYHbRroTRZJPRLvreamgErJVys0ceuzMkD44J/QjqhHjOzK42GQ3QZIeFG1OYfOtKqQ==}
stdin-discarder@0.3.1:
resolution: {integrity: sha512-reExS1kSGoElkextOcPkel4NE99S0BWxjUHQeDFnR8S993JxpPX7KU4MNmO19NXhlJp+8dmdCbKQVNgLJh2teA==}
@@ -3380,8 +3577,8 @@ packages:
resolution: {integrity: sha512-Bh7QjT8/SuKUIfObSXNHNSK6WHo6J1tHCqJsuaFDP7gP0fkzSfTxI8y85JrppZ0h8l0maIgc2tfuZQ6/t3GtnQ==}
engines: {node: ^14.18.0 || >=16.0.0}
- tar@7.5.10:
- resolution: {integrity: sha512-8mOPs1//5q/rlkNSPcCegA6hiHJYDmSLEI8aMH/CdSQJNWztHC9WHNam5zdQlfpTwB9Xp7IBEsHfV5LKMJGVAw==}
+ tar@7.5.13:
+ resolution: {integrity: sha512-tOG/7GyXpFevhXVh8jOPJrmtRpOTsYqUIkVdVooZYJS/z8WhfQUX8RJILmeuJNinGAMSu1veBr4asSHFt5/hng==}
engines: {node: '>=18'}
thenify-all@1.6.0:
@@ -3397,8 +3594,8 @@ packages:
tinyexec@0.3.2:
resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==}
- tinyexec@1.0.2:
- resolution: {integrity: sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==}
+ tinyexec@1.0.4:
+ resolution: {integrity: sha512-u9r3uZC0bdpGOXtlxUIdwf9pkmvhqJdrVCH9fapQtgy/OeTTMZ1nqH7agtvEfmGui6e1XxjcdrlxvxJvc3sMqw==}
engines: {node: '>=18'}
tinyglobby@0.2.15:
@@ -3409,14 +3606,10 @@ packages:
resolution: {integrity: sha512-Pugqs6M0m7Lv1I7FtxN4aoyToKg1C4tu+/381vH35y8oENM/Ai7f7C4StcoK4/+BSw9ebcS8jRiVrORFKCALLw==}
engines: {node: ^20.0.0 || >=22.0.0}
- tinyrainbow@3.0.3:
- resolution: {integrity: sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==}
+ tinyrainbow@3.1.0:
+ resolution: {integrity: sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==}
engines: {node: '>=14.0.0'}
- to-regex-range@5.0.1:
- resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
- engines: {node: '>=8.0'}
-
tr46@0.0.3:
resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
@@ -3424,8 +3617,8 @@ packages:
resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==}
hasBin: true
- ts-api-utils@2.4.0:
- resolution: {integrity: sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==}
+ ts-api-utils@2.5.0:
+ resolution: {integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==}
engines: {node: '>=18.12'}
peerDependencies:
typescript: '>=4.8.4'
@@ -3459,63 +3652,33 @@ packages:
resolution: {integrity: sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==}
engines: {node: '>=0.6.11 <=0.7.0 || >=0.7.3'}
- turbo-darwin-64@2.8.16:
- resolution: {integrity: sha512-KWa4hUMWrpADC6Q/wIHRkBLw6X6MV9nx6X7hSXbTrrMz0KdaKhmfudUZ3sS76bJFmgArBU25cSc0AUyyrswYxg==}
- cpu: [x64]
- os: [darwin]
-
- turbo-darwin-arm64@2.8.16:
- resolution: {integrity: sha512-NBgaqBDLQSZlJR4D5XCkQq6noaO0RvIgwm5eYFJYL3bH5dNu8o0UBpq7C5DYnQI8+ybyoHFjT5/icN4LeUYLow==}
- cpu: [arm64]
- os: [darwin]
-
- turbo-linux-64@2.8.16:
- resolution: {integrity: sha512-VYPdcCRevI9kR/hr1H1xwXy7QQt/jNKiim1e1mjANBXD2E9VZWMkIL74J1Huad5MbU3/jw7voHOqDPLJPC2p6w==}
- cpu: [x64]
- os: [linux]
-
- turbo-linux-arm64@2.8.16:
- resolution: {integrity: sha512-beq8tgUVI3uwkQkXJMiOr/hfxQRw54M3elpBwqgYFfemiK5LhCjjcwO0DkE8GZZfElBIlk+saMAQOZy3885wNQ==}
- cpu: [arm64]
- os: [linux]
-
- turbo-windows-64@2.8.16:
- resolution: {integrity: sha512-Ig7b46iUgiOIkea/D3Z7H+zNzvzSnIJcLYFpZLA0RxbUTrbLhv9qIPwv3pT9p/abmu0LXVKHxaOo+p26SuDhzw==}
- cpu: [x64]
- os: [win32]
-
- turbo-windows-arm64@2.8.16:
- resolution: {integrity: sha512-fOWjbEA2PiE2HEnFQrwNZKYEdjewyPc2no9GmrXklZnTCuMsxeCN39aVlKpKpim03Zq/ykIuvApGwq8ZbfS2Yw==}
- cpu: [arm64]
- os: [win32]
-
- turbo@2.8.16:
- resolution: {integrity: sha512-u6e9e3cTTpE2adQ1DYm3A3r8y3LAONEx1jYvJx6eIgSY4bMLxIxs0riWzI0Z/IK903ikiUzRPZ2c1Ph5lVLkhA==}
+ turbo@2.9.3:
+ resolution: {integrity: sha512-J/VUvsGRykPb9R8Kh8dHVBOqioDexLk9BhLCU/ZybRR+HN9UR3cURdazFvNgMDt9zPP8TF6K73Z+tplfmi0PqQ==}
hasBin: true
type-check@0.4.0:
resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
engines: {node: '>= 0.8.0'}
- typedoc-plugin-markdown@4.10.0:
- resolution: {integrity: sha512-psrg8Rtnv4HPWCsoxId+MzEN8TVK5jeKCnTbnGAbTBqcDapR9hM41bJT/9eAyKn9C2MDG9Qjh3MkltAYuLDoXg==}
+ typedoc-plugin-markdown@4.11.0:
+ resolution: {integrity: sha512-2iunh2ALyfyh204OF7h2u0kuQ84xB3jFZtFyUr01nThJkLvR8oGGSSDlyt2gyO4kXhvUxDcVbO0y43+qX+wFbw==}
engines: {node: '>= 18'}
peerDependencies:
typedoc: 0.28.x
- typedoc@0.28.17:
- resolution: {integrity: sha512-ZkJ2G7mZrbxrKxinTQMjFqsCoYY6a5Luwv2GKbTnBCEgV2ihYm5CflA9JnJAwH0pZWavqfYxmDkFHPt4yx2oDQ==}
+ typedoc@0.28.18:
+ resolution: {integrity: sha512-NTWTUOFRQ9+SGKKTuWKUioUkjxNwtS3JDRPVKZAXGHZy2wCA8bdv2iJiyeePn0xkmK+TCCqZFT0X7+2+FLjngA==}
engines: {node: '>= 18', pnpm: '>= 10'}
hasBin: true
peerDependencies:
- typescript: 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x || 5.6.x || 5.7.x || 5.8.x || 5.9.x
+ typescript: 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x || 5.6.x || 5.7.x || 5.8.x || 5.9.x || 6.0.x
- typescript-eslint@8.57.1:
- resolution: {integrity: sha512-fLvZWf+cAGw3tqMCYzGIU6yR8K+Y9NT2z23RwOjlNFF2HwSB3KhdEFI5lSBv8tNmFkkBShSjsCjzx1vahZfISA==}
+ typescript-eslint@8.58.0:
+ resolution: {integrity: sha512-e2TQzKfaI85fO+F3QywtX+tCTsu/D3WW5LVU6nz8hTFKFZ8yBJ6mSYRpXqdR3mFjPWmO0eWsTa5f+UpAOe/FMA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
- typescript: '>=4.8.4 <6.0.0'
+ typescript: '>=4.8.4 <6.1.0'
typescript@5.9.3:
resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==}
@@ -3531,12 +3694,8 @@ packages:
undici-types@7.18.2:
resolution: {integrity: sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==}
- undici@5.29.0:
- resolution: {integrity: sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==}
- engines: {node: '>=14.0'}
-
- undici@6.23.0:
- resolution: {integrity: sha512-VfQPToRA5FZs/qJxLIinmU59u0r7LXqoJkCzinq3ckNJp3vKEh7jTWN589YQ5+aoAC/TGRLyJLCPKcLQbM8r9g==}
+ undici@6.24.1:
+ resolution: {integrity: sha512-sC+b0tB1whOCzbtlx20fx3WgCXwkW627p4EA9uM+/tNNPkSS+eSEld6pAs9nDv7WbY1UUljBMYPtu9BCOrCWKA==}
engines: {node: '>=18.17'}
unicode-emoji-modifier-base@1.0.0:
@@ -3547,9 +3706,6 @@ packages:
resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==}
engines: {node: '>=18'}
- universal-user-agent@6.0.1:
- resolution: {integrity: sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==}
-
universal-user-agent@7.0.3:
resolution: {integrity: sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A==}
@@ -3560,15 +3716,16 @@ packages:
resolution: {integrity: sha512-spH26xU080ydGggxRyR1Yhcbgx+j3y5jbNXk/8L+iRvdIEQ4uTRH2Sgf2dokud6Q4oAtsbNvJ1Ft+9xmm6IZcA==}
engines: {node: '>= 0.10'}
- vite@7.3.1:
- resolution: {integrity: sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==}
+ vite@8.0.3:
+ resolution: {integrity: sha512-B9ifbFudT1TFhfltfaIPgjo9Z3mDynBTJSUYxTjOQruf/zHH+ezCQKcoqO+h7a9Pw9Nm/OtlXAiGT1axBgwqrQ==}
engines: {node: ^20.19.0 || >=22.12.0}
hasBin: true
peerDependencies:
'@types/node': ^20.19.0 || >=22.12.0
+ '@vitejs/devtools': ^0.1.0
+ esbuild: ^0.27.0
jiti: '>=1.21.0'
less: ^4.0.0
- lightningcss: ^1.21.0
sass: ^1.70.0
sass-embedded: ^1.70.0
stylus: '>=0.54.8'
@@ -3579,12 +3736,14 @@ packages:
peerDependenciesMeta:
'@types/node':
optional: true
+ '@vitejs/devtools':
+ optional: true
+ esbuild:
+ optional: true
jiti:
optional: true
less:
optional: true
- lightningcss:
- optional: true
sass:
optional: true
sass-embedded:
@@ -3600,20 +3759,21 @@ packages:
yaml:
optional: true
- vitest@4.0.18:
- resolution: {integrity: sha512-hOQuK7h0FGKgBAas7v0mSAsnvrIgAvWmRFjmzpJ7SwFHH3g1k2u37JtYwOwmEKhK6ZO3v9ggDBBm0La1LCK4uQ==}
+ vitest@4.1.2:
+ resolution: {integrity: sha512-xjR1dMTVHlFLh98JE3i/f/WePqJsah4A0FK9cc8Ehp9Udk0AZk6ccpIZhh1qJ/yxVWRZ+Q54ocnD8TXmkhspGg==}
engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0}
hasBin: true
peerDependencies:
'@edge-runtime/vm': '*'
'@opentelemetry/api': ^1.9.0
'@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0
- '@vitest/browser-playwright': 4.0.18
- '@vitest/browser-preview': 4.0.18
- '@vitest/browser-webdriverio': 4.0.18
- '@vitest/ui': 4.0.18
+ '@vitest/browser-playwright': 4.1.2
+ '@vitest/browser-preview': 4.1.2
+ '@vitest/browser-webdriverio': 4.1.2
+ '@vitest/ui': 4.1.2
happy-dom: '*'
jsdom: '*'
+ vite: ^6.0.0 || ^7.0.0 || ^8.0.0
peerDependenciesMeta:
'@edge-runtime/vm':
optional: true
@@ -3669,17 +3829,14 @@ packages:
resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==}
engines: {node: '>=18'}
- wrappy@1.0.2:
- resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
-
wrtc@0.4.7:
resolution: {integrity: sha512-P6Hn7VT4lfSH49HxLHcHhDq+aFf/jd9dPY7lDHeFhZ22N3858EKuwm2jmnlPzpsRGEPaoF6XwkcxY5SYnt4f/g==}
engines: {node: ^8.11.2 || >=10.0.0}
bundledDependencies:
- node-pre-gyp
- ws@8.19.0:
- resolution: {integrity: sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==}
+ ws@8.20.0:
+ resolution: {integrity: sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==}
engines: {node: '>=10.0.0'}
peerDependencies:
bufferutil: ^4.0.1
@@ -3698,8 +3855,8 @@ packages:
resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==}
engines: {node: '>=18'}
- yaml@2.8.2:
- resolution: {integrity: sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==}
+ yaml@2.8.3:
+ resolution: {integrity: sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==}
engines: {node: '>= 14.6'}
hasBin: true
@@ -3725,55 +3882,60 @@ packages:
snapshots:
- '@actions/core@2.0.3':
+ '@actions/core@3.0.0':
dependencies:
- '@actions/exec': 2.0.0
- '@actions/http-client': 3.0.2
+ '@actions/exec': 3.0.0
+ '@actions/http-client': 4.0.0
- '@actions/exec@2.0.0':
+ '@actions/exec@3.0.0':
dependencies:
- '@actions/io': 2.0.0
+ '@actions/io': 3.0.2
- '@actions/github@7.0.0':
+ '@actions/github@9.0.0':
dependencies:
'@actions/http-client': 3.0.2
- '@octokit/core': 5.2.2
- '@octokit/plugin-paginate-rest': 9.2.2(@octokit/core@5.2.2)
- '@octokit/plugin-rest-endpoint-methods': 10.4.1(@octokit/core@5.2.2)
- '@octokit/request': 8.4.1
- '@octokit/request-error': 5.1.1
- undici: 5.29.0
+ '@octokit/core': 7.0.6
+ '@octokit/plugin-paginate-rest': 14.0.0(@octokit/core@7.0.6)
+ '@octokit/plugin-rest-endpoint-methods': 17.0.0(@octokit/core@7.0.6)
+ '@octokit/request': 10.0.8
+ '@octokit/request-error': 7.1.0
+ undici: 6.24.1
'@actions/http-client@3.0.2':
dependencies:
tunnel: 0.0.6
- undici: 6.23.0
+ undici: 6.24.1
- '@actions/io@2.0.0': {}
+ '@actions/http-client@4.0.0':
+ dependencies:
+ tunnel: 0.0.6
+ undici: 6.24.1
+
+ '@actions/io@3.0.2': {}
- '@angular-devkit/core@21.2.3(chokidar@5.0.0)':
+ '@angular-devkit/core@21.2.6(chokidar@5.0.0)':
dependencies:
ajv: 8.18.0
ajv-formats: 3.0.1(ajv@8.18.0)
jsonc-parser: 3.3.1
- picomatch: 4.0.3
+ picomatch: 4.0.4
rxjs: 7.8.2
source-map: 0.7.6
optionalDependencies:
chokidar: 5.0.0
- '@angular-devkit/schematics-cli@21.2.3(@types/node@25.5.0)(chokidar@5.0.0)':
+ '@angular-devkit/schematics-cli@21.2.6(@types/node@25.5.0)(chokidar@5.0.0)':
dependencies:
- '@angular-devkit/core': 21.2.3(chokidar@5.0.0)
- '@angular-devkit/schematics': 21.2.3(chokidar@5.0.0)
+ '@angular-devkit/core': 21.2.6(chokidar@5.0.0)
+ '@angular-devkit/schematics': 21.2.6(chokidar@5.0.0)
'@inquirer/prompts': 7.10.1(@types/node@25.5.0)
transitivePeerDependencies:
- '@types/node'
- chokidar
- '@angular-devkit/schematics@21.2.3(chokidar@5.0.0)':
+ '@angular-devkit/schematics@21.2.6(chokidar@5.0.0)':
dependencies:
- '@angular-devkit/core': 21.2.3(chokidar@5.0.0)
+ '@angular-devkit/core': 21.2.6(chokidar@5.0.0)
jsonc-parser: 3.3.1
magic-string: 0.30.21
ora: 9.3.0
@@ -3789,7 +3951,7 @@ snapshots:
'@babel/generator@7.29.1':
dependencies:
- '@babel/parser': 7.29.0
+ '@babel/parser': 7.29.2
'@babel/types': 7.29.0
'@jridgewell/gen-mapping': 0.3.13
'@jridgewell/trace-mapping': 0.3.31
@@ -3801,14 +3963,14 @@ snapshots:
'@babel/helper-validator-identifier@7.28.5': {}
- '@babel/parser@7.29.0':
+ '@babel/parser@7.29.2':
dependencies:
'@babel/types': 7.29.0
'@babel/template@7.28.6':
dependencies:
'@babel/code-frame': 7.29.0
- '@babel/parser': 7.29.0
+ '@babel/parser': 7.29.2
'@babel/types': 7.29.0
'@babel/traverse@7.29.0':
@@ -3816,7 +3978,7 @@ snapshots:
'@babel/code-frame': 7.29.0
'@babel/generator': 7.29.1
'@babel/helper-globals': 7.28.0
- '@babel/parser': 7.29.0
+ '@babel/parser': 7.29.2
'@babel/template': 7.28.6
'@babel/types': 7.29.0
debug: 4.4.3
@@ -3830,14 +3992,14 @@ snapshots:
'@bcoe/v8-coverage@1.0.2': {}
- '@commitlint/cli@20.5.0(@types/node@25.5.0)(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.3.0)(typescript@5.9.3)':
+ '@commitlint/cli@20.5.0(@types/node@25.5.0)(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0)(typescript@5.9.3)':
dependencies:
'@commitlint/format': 20.5.0
'@commitlint/lint': 20.5.0
'@commitlint/load': 20.5.0(@types/node@25.5.0)(typescript@5.9.3)
- '@commitlint/read': 20.5.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.3.0)
+ '@commitlint/read': 20.5.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0)
'@commitlint/types': 20.5.0
- tinyexec: 1.0.2
+ tinyexec: 1.0.4
yargs: 17.7.2
transitivePeerDependencies:
- '@types/node'
@@ -3845,10 +4007,10 @@ snapshots:
- conventional-commits-parser
- typescript
- '@commitlint/config-conventional@20.4.3':
+ '@commitlint/config-conventional@20.5.0':
dependencies:
- '@commitlint/types': 20.4.3
- conventional-changelog-conventionalcommits: 9.3.0
+ '@commitlint/types': 20.5.0
+ conventional-changelog-conventionalcommits: 9.3.1
'@commitlint/config-validator@20.5.0':
dependencies:
@@ -3903,16 +4065,16 @@ snapshots:
'@commitlint/parse@20.5.0':
dependencies:
'@commitlint/types': 20.5.0
- conventional-changelog-angular: 8.3.0
- conventional-commits-parser: 6.3.0
+ conventional-changelog-angular: 8.3.1
+ conventional-commits-parser: 6.4.0
- '@commitlint/read@20.5.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.3.0)':
+ '@commitlint/read@20.5.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0)':
dependencies:
'@commitlint/top-level': 20.4.3
'@commitlint/types': 20.5.0
- git-raw-commits: 5.0.1(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.3.0)
+ git-raw-commits: 5.0.1(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0)
minimist: 1.2.8
- tinyexec: 1.0.2
+ tinyexec: 1.0.4
transitivePeerDependencies:
- conventional-commits-filter
- conventional-commits-parser
@@ -3939,32 +4101,27 @@ snapshots:
dependencies:
escalade: 3.2.0
- '@commitlint/types@20.4.3':
- dependencies:
- conventional-commits-parser: 6.3.0
- picocolors: 1.1.1
-
'@commitlint/types@20.5.0':
dependencies:
- conventional-commits-parser: 6.3.0
+ conventional-commits-parser: 6.4.0
picocolors: 1.1.1
- '@conventional-changelog/git-client@1.0.1(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.3.0)':
+ '@conventional-changelog/git-client@1.0.1(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0)':
dependencies:
'@types/semver': 7.7.1
semver: 7.7.4
optionalDependencies:
conventional-commits-filter: 5.0.0
- conventional-commits-parser: 6.3.0
+ conventional-commits-parser: 6.4.0
- '@conventional-changelog/git-client@2.6.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.3.0)':
+ '@conventional-changelog/git-client@2.6.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0)':
dependencies:
'@simple-libs/child-process-utils': 1.0.2
'@simple-libs/stream-utils': 1.2.0
semver: 7.7.4
optionalDependencies:
conventional-commits-filter: 5.0.0
- conventional-commits-parser: 6.3.0
+ conventional-commits-parser: 6.4.0
'@dprint/formatter@0.5.1': {}
@@ -3972,87 +4129,103 @@ snapshots:
'@dprint/toml@0.7.0': {}
- '@esbuild/aix-ppc64@0.27.3':
+ '@emnapi/core@1.9.1':
+ dependencies:
+ '@emnapi/wasi-threads': 1.2.0
+ tslib: 2.8.1
+ optional: true
+
+ '@emnapi/runtime@1.9.1':
+ dependencies:
+ tslib: 2.8.1
+ optional: true
+
+ '@emnapi/wasi-threads@1.2.0':
+ dependencies:
+ tslib: 2.8.1
optional: true
- '@esbuild/android-arm64@0.27.3':
+ '@esbuild/aix-ppc64@0.27.4':
optional: true
- '@esbuild/android-arm@0.27.3':
+ '@esbuild/android-arm64@0.27.4':
optional: true
- '@esbuild/android-x64@0.27.3':
+ '@esbuild/android-arm@0.27.4':
optional: true
- '@esbuild/darwin-arm64@0.27.3':
+ '@esbuild/android-x64@0.27.4':
optional: true
- '@esbuild/darwin-x64@0.27.3':
+ '@esbuild/darwin-arm64@0.27.4':
optional: true
- '@esbuild/freebsd-arm64@0.27.3':
+ '@esbuild/darwin-x64@0.27.4':
optional: true
- '@esbuild/freebsd-x64@0.27.3':
+ '@esbuild/freebsd-arm64@0.27.4':
optional: true
- '@esbuild/linux-arm64@0.27.3':
+ '@esbuild/freebsd-x64@0.27.4':
optional: true
- '@esbuild/linux-arm@0.27.3':
+ '@esbuild/linux-arm64@0.27.4':
optional: true
- '@esbuild/linux-ia32@0.27.3':
+ '@esbuild/linux-arm@0.27.4':
optional: true
- '@esbuild/linux-loong64@0.27.3':
+ '@esbuild/linux-ia32@0.27.4':
optional: true
- '@esbuild/linux-mips64el@0.27.3':
+ '@esbuild/linux-loong64@0.27.4':
optional: true
- '@esbuild/linux-ppc64@0.27.3':
+ '@esbuild/linux-mips64el@0.27.4':
optional: true
- '@esbuild/linux-riscv64@0.27.3':
+ '@esbuild/linux-ppc64@0.27.4':
optional: true
- '@esbuild/linux-s390x@0.27.3':
+ '@esbuild/linux-riscv64@0.27.4':
optional: true
- '@esbuild/linux-x64@0.27.3':
+ '@esbuild/linux-s390x@0.27.4':
optional: true
- '@esbuild/netbsd-arm64@0.27.3':
+ '@esbuild/linux-x64@0.27.4':
optional: true
- '@esbuild/netbsd-x64@0.27.3':
+ '@esbuild/netbsd-arm64@0.27.4':
optional: true
- '@esbuild/openbsd-arm64@0.27.3':
+ '@esbuild/netbsd-x64@0.27.4':
optional: true
- '@esbuild/openbsd-x64@0.27.3':
+ '@esbuild/openbsd-arm64@0.27.4':
optional: true
- '@esbuild/openharmony-arm64@0.27.3':
+ '@esbuild/openbsd-x64@0.27.4':
optional: true
- '@esbuild/sunos-x64@0.27.3':
+ '@esbuild/openharmony-arm64@0.27.4':
optional: true
- '@esbuild/win32-arm64@0.27.3':
+ '@esbuild/sunos-x64@0.27.4':
optional: true
- '@esbuild/win32-ia32@0.27.3':
+ '@esbuild/win32-arm64@0.27.4':
optional: true
- '@esbuild/win32-x64@0.27.3':
+ '@esbuild/win32-ia32@0.27.4':
optional: true
- '@eslint-community/eslint-utils@4.9.1(eslint@10.0.3(jiti@2.6.1))':
+ '@esbuild/win32-x64@0.27.4':
+ optional: true
+
+ '@eslint-community/eslint-utils@4.9.1(eslint@10.1.0(jiti@2.6.1))':
dependencies:
- eslint: 10.0.3(jiti@2.6.1)
+ eslint: 10.1.0(jiti@2.6.1)
eslint-visitor-keys: 3.4.3
'@eslint-community/regexpp@4.12.2': {}
@@ -4061,11 +4234,11 @@ snapshots:
dependencies:
'@eslint/object-schema': 3.0.3
debug: 4.4.3
- minimatch: 10.2.4
+ minimatch: 10.2.5
transitivePeerDependencies:
- supports-color
- '@eslint/config-helpers@0.5.2':
+ '@eslint/config-helpers@0.5.3':
dependencies:
'@eslint/core': 1.1.1
@@ -4073,9 +4246,9 @@ snapshots:
dependencies:
'@types/json-schema': 7.0.15
- '@eslint/js@10.0.1(eslint@10.0.3(jiti@2.6.1))':
+ '@eslint/js@10.0.1(eslint@10.1.0(jiti@2.6.1))':
optionalDependencies:
- eslint: 10.0.3(jiti@2.6.1)
+ eslint: 10.1.0(jiti@2.6.1)
'@eslint/object-schema@3.0.3': {}
@@ -4084,8 +4257,6 @@ snapshots:
'@eslint/core': 1.1.1
levn: 0.4.1
- '@fastify/busboy@2.1.1': {}
-
'@favware/cliff-jumper@6.0.0':
dependencies:
'@favware/colorette-spinner': 1.0.1
@@ -4101,7 +4272,7 @@ snapshots:
git-cliff: 2.12.0
js-yaml: 4.1.1
semver: 7.7.4
- smol-toml: 1.6.0
+ smol-toml: 1.6.1
'@favware/colorette-spinner@1.0.1':
dependencies:
@@ -4128,7 +4299,7 @@ snapshots:
'@inquirer/ansi@1.0.2': {}
- '@inquirer/ansi@2.0.3': {}
+ '@inquirer/ansi@2.0.4': {}
'@inquirer/checkbox@4.3.2(@types/node@25.5.0)':
dependencies:
@@ -4140,12 +4311,12 @@ snapshots:
optionalDependencies:
'@types/node': 25.5.0
- '@inquirer/checkbox@5.1.0(@types/node@25.5.0)':
+ '@inquirer/checkbox@5.1.2(@types/node@25.5.0)':
dependencies:
- '@inquirer/ansi': 2.0.3
- '@inquirer/core': 11.1.5(@types/node@25.5.0)
- '@inquirer/figures': 2.0.3
- '@inquirer/type': 4.0.3(@types/node@25.5.0)
+ '@inquirer/ansi': 2.0.4
+ '@inquirer/core': 11.1.7(@types/node@25.5.0)
+ '@inquirer/figures': 2.0.4
+ '@inquirer/type': 4.0.4(@types/node@25.5.0)
optionalDependencies:
'@types/node': 25.5.0
@@ -4156,10 +4327,10 @@ snapshots:
optionalDependencies:
'@types/node': 25.5.0
- '@inquirer/confirm@6.0.8(@types/node@25.5.0)':
+ '@inquirer/confirm@6.0.10(@types/node@25.5.0)':
dependencies:
- '@inquirer/core': 11.1.5(@types/node@25.5.0)
- '@inquirer/type': 4.0.3(@types/node@25.5.0)
+ '@inquirer/core': 11.1.7(@types/node@25.5.0)
+ '@inquirer/type': 4.0.4(@types/node@25.5.0)
optionalDependencies:
'@types/node': 25.5.0
@@ -4176,11 +4347,11 @@ snapshots:
optionalDependencies:
'@types/node': 25.5.0
- '@inquirer/core@11.1.5(@types/node@25.5.0)':
+ '@inquirer/core@11.1.7(@types/node@25.5.0)':
dependencies:
- '@inquirer/ansi': 2.0.3
- '@inquirer/figures': 2.0.3
- '@inquirer/type': 4.0.3(@types/node@25.5.0)
+ '@inquirer/ansi': 2.0.4
+ '@inquirer/figures': 2.0.4
+ '@inquirer/type': 4.0.4(@types/node@25.5.0)
cli-width: 4.1.0
fast-wrap-ansi: 0.2.0
mute-stream: 3.0.0
@@ -4196,11 +4367,11 @@ snapshots:
optionalDependencies:
'@types/node': 25.5.0
- '@inquirer/editor@5.0.8(@types/node@25.5.0)':
+ '@inquirer/editor@5.0.10(@types/node@25.5.0)':
dependencies:
- '@inquirer/core': 11.1.5(@types/node@25.5.0)
- '@inquirer/external-editor': 2.0.3(@types/node@25.5.0)
- '@inquirer/type': 4.0.3(@types/node@25.5.0)
+ '@inquirer/core': 11.1.7(@types/node@25.5.0)
+ '@inquirer/external-editor': 2.0.4(@types/node@25.5.0)
+ '@inquirer/type': 4.0.4(@types/node@25.5.0)
optionalDependencies:
'@types/node': 25.5.0
@@ -4212,10 +4383,10 @@ snapshots:
optionalDependencies:
'@types/node': 25.5.0
- '@inquirer/expand@5.0.8(@types/node@25.5.0)':
+ '@inquirer/expand@5.0.10(@types/node@25.5.0)':
dependencies:
- '@inquirer/core': 11.1.5(@types/node@25.5.0)
- '@inquirer/type': 4.0.3(@types/node@25.5.0)
+ '@inquirer/core': 11.1.7(@types/node@25.5.0)
+ '@inquirer/type': 4.0.4(@types/node@25.5.0)
optionalDependencies:
'@types/node': 25.5.0
@@ -4226,7 +4397,7 @@ snapshots:
optionalDependencies:
'@types/node': 25.5.0
- '@inquirer/external-editor@2.0.3(@types/node@25.5.0)':
+ '@inquirer/external-editor@2.0.4(@types/node@25.5.0)':
dependencies:
chardet: 2.1.1
iconv-lite: 0.7.2
@@ -4235,7 +4406,7 @@ snapshots:
'@inquirer/figures@1.0.15': {}
- '@inquirer/figures@2.0.3': {}
+ '@inquirer/figures@2.0.4': {}
'@inquirer/input@4.3.1(@types/node@25.5.0)':
dependencies:
@@ -4244,10 +4415,10 @@ snapshots:
optionalDependencies:
'@types/node': 25.5.0
- '@inquirer/input@5.0.8(@types/node@25.5.0)':
+ '@inquirer/input@5.0.10(@types/node@25.5.0)':
dependencies:
- '@inquirer/core': 11.1.5(@types/node@25.5.0)
- '@inquirer/type': 4.0.3(@types/node@25.5.0)
+ '@inquirer/core': 11.1.7(@types/node@25.5.0)
+ '@inquirer/type': 4.0.4(@types/node@25.5.0)
optionalDependencies:
'@types/node': 25.5.0
@@ -4258,10 +4429,10 @@ snapshots:
optionalDependencies:
'@types/node': 25.5.0
- '@inquirer/number@4.0.8(@types/node@25.5.0)':
+ '@inquirer/number@4.0.10(@types/node@25.5.0)':
dependencies:
- '@inquirer/core': 11.1.5(@types/node@25.5.0)
- '@inquirer/type': 4.0.3(@types/node@25.5.0)
+ '@inquirer/core': 11.1.7(@types/node@25.5.0)
+ '@inquirer/type': 4.0.4(@types/node@25.5.0)
optionalDependencies:
'@types/node': 25.5.0
@@ -4273,11 +4444,11 @@ snapshots:
optionalDependencies:
'@types/node': 25.5.0
- '@inquirer/password@5.0.8(@types/node@25.5.0)':
+ '@inquirer/password@5.0.10(@types/node@25.5.0)':
dependencies:
- '@inquirer/ansi': 2.0.3
- '@inquirer/core': 11.1.5(@types/node@25.5.0)
- '@inquirer/type': 4.0.3(@types/node@25.5.0)
+ '@inquirer/ansi': 2.0.4
+ '@inquirer/core': 11.1.7(@types/node@25.5.0)
+ '@inquirer/type': 4.0.4(@types/node@25.5.0)
optionalDependencies:
'@types/node': 25.5.0
@@ -4296,18 +4467,18 @@ snapshots:
optionalDependencies:
'@types/node': 25.5.0
- '@inquirer/prompts@8.3.0(@types/node@25.5.0)':
- dependencies:
- '@inquirer/checkbox': 5.1.0(@types/node@25.5.0)
- '@inquirer/confirm': 6.0.8(@types/node@25.5.0)
- '@inquirer/editor': 5.0.8(@types/node@25.5.0)
- '@inquirer/expand': 5.0.8(@types/node@25.5.0)
- '@inquirer/input': 5.0.8(@types/node@25.5.0)
- '@inquirer/number': 4.0.8(@types/node@25.5.0)
- '@inquirer/password': 5.0.8(@types/node@25.5.0)
- '@inquirer/rawlist': 5.2.4(@types/node@25.5.0)
- '@inquirer/search': 4.1.4(@types/node@25.5.0)
- '@inquirer/select': 5.1.0(@types/node@25.5.0)
+ '@inquirer/prompts@8.3.2(@types/node@25.5.0)':
+ dependencies:
+ '@inquirer/checkbox': 5.1.2(@types/node@25.5.0)
+ '@inquirer/confirm': 6.0.10(@types/node@25.5.0)
+ '@inquirer/editor': 5.0.10(@types/node@25.5.0)
+ '@inquirer/expand': 5.0.10(@types/node@25.5.0)
+ '@inquirer/input': 5.0.10(@types/node@25.5.0)
+ '@inquirer/number': 4.0.10(@types/node@25.5.0)
+ '@inquirer/password': 5.0.10(@types/node@25.5.0)
+ '@inquirer/rawlist': 5.2.6(@types/node@25.5.0)
+ '@inquirer/search': 4.1.6(@types/node@25.5.0)
+ '@inquirer/select': 5.1.2(@types/node@25.5.0)
optionalDependencies:
'@types/node': 25.5.0
@@ -4319,10 +4490,10 @@ snapshots:
optionalDependencies:
'@types/node': 25.5.0
- '@inquirer/rawlist@5.2.4(@types/node@25.5.0)':
+ '@inquirer/rawlist@5.2.6(@types/node@25.5.0)':
dependencies:
- '@inquirer/core': 11.1.5(@types/node@25.5.0)
- '@inquirer/type': 4.0.3(@types/node@25.5.0)
+ '@inquirer/core': 11.1.7(@types/node@25.5.0)
+ '@inquirer/type': 4.0.4(@types/node@25.5.0)
optionalDependencies:
'@types/node': 25.5.0
@@ -4335,11 +4506,11 @@ snapshots:
optionalDependencies:
'@types/node': 25.5.0
- '@inquirer/search@4.1.4(@types/node@25.5.0)':
+ '@inquirer/search@4.1.6(@types/node@25.5.0)':
dependencies:
- '@inquirer/core': 11.1.5(@types/node@25.5.0)
- '@inquirer/figures': 2.0.3
- '@inquirer/type': 4.0.3(@types/node@25.5.0)
+ '@inquirer/core': 11.1.7(@types/node@25.5.0)
+ '@inquirer/figures': 2.0.4
+ '@inquirer/type': 4.0.4(@types/node@25.5.0)
optionalDependencies:
'@types/node': 25.5.0
@@ -4353,12 +4524,12 @@ snapshots:
optionalDependencies:
'@types/node': 25.5.0
- '@inquirer/select@5.1.0(@types/node@25.5.0)':
+ '@inquirer/select@5.1.2(@types/node@25.5.0)':
dependencies:
- '@inquirer/ansi': 2.0.3
- '@inquirer/core': 11.1.5(@types/node@25.5.0)
- '@inquirer/figures': 2.0.3
- '@inquirer/type': 4.0.3(@types/node@25.5.0)
+ '@inquirer/ansi': 2.0.4
+ '@inquirer/core': 11.1.7(@types/node@25.5.0)
+ '@inquirer/figures': 2.0.4
+ '@inquirer/type': 4.0.4(@types/node@25.5.0)
optionalDependencies:
'@types/node': 25.5.0
@@ -4366,7 +4537,7 @@ snapshots:
optionalDependencies:
'@types/node': 25.5.0
- '@inquirer/type@4.0.3(@types/node@25.5.0)':
+ '@inquirer/type@4.0.4(@types/node@25.5.0)':
optionalDependencies:
'@types/node': 25.5.0
@@ -4396,35 +4567,35 @@ snapshots:
node-fetch: 2.7.0
nopt: 8.1.0
semver: 7.7.4
- tar: 7.5.10
+ tar: 7.5.13
transitivePeerDependencies:
- encoding
- supports-color
- '@nanoforge-dev/actions@1.1.0':
+ '@nanoforge-dev/actions@1.2.3':
dependencies:
- '@actions/core': 2.0.3
- '@actions/github': 7.0.0
+ '@actions/core': 3.0.0
+ '@actions/github': 9.0.0
commander: 14.0.3
'@nanoforge-dev/cli@1.3.0(@types/node@25.5.0)':
dependencies:
- '@angular-devkit/schematics': 21.2.3(chokidar@5.0.0)
- '@angular-devkit/schematics-cli': 21.2.3(@types/node@25.5.0)(chokidar@5.0.0)
- '@inquirer/prompts': 8.3.0(@types/node@25.5.0)
+ '@angular-devkit/schematics': 21.2.6(chokidar@5.0.0)
+ '@angular-devkit/schematics-cli': 21.2.6(@types/node@25.5.0)(chokidar@5.0.0)
+ '@inquirer/prompts': 8.3.2(@types/node@25.5.0)
'@nanoforge-dev/loader-client': 1.3.0
'@nanoforge-dev/loader-server': 1.2.0
'@nanoforge-dev/schematics': 1.2.2(chokidar@5.0.0)
ansis: 4.2.0
- bun: 1.3.10
+ bun: 1.3.11
chokidar: 5.0.0
class-transformer: 0.5.1
class-validator: 0.15.1
commander: 14.0.3
- dotenv: 17.3.1
+ dotenv: 17.4.0
node-emoji: 2.2.0
ora: 9.3.0
- rc9: 3.0.0
+ rc9: 3.0.1
reflect-metadata: 0.2.2
transitivePeerDependencies:
- '@types/node'
@@ -4432,7 +4603,7 @@ snapshots:
'@nanoforge-dev/loader-client@1.3.0':
dependencies:
'@nanoforge-dev/loader-website': 1.2.0
- bun: 1.3.10
+ bun: 1.3.11
commander: 14.0.3
'@nanoforge-dev/loader-server@1.2.0':
@@ -4443,25 +4614,22 @@ snapshots:
'@nanoforge-dev/schematics@1.2.2(chokidar@5.0.0)':
dependencies:
- '@angular-devkit/core': 21.2.3(chokidar@5.0.0)
- '@angular-devkit/schematics': 21.2.3(chokidar@5.0.0)
+ '@angular-devkit/core': 21.2.6(chokidar@5.0.0)
+ '@angular-devkit/schematics': 21.2.6(chokidar@5.0.0)
rxjs: 7.8.2
transitivePeerDependencies:
- chokidar
- '@octokit/auth-token@4.0.0': {}
+ '@napi-rs/wasm-runtime@1.1.2(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)':
+ dependencies:
+ '@emnapi/core': 1.9.1
+ '@emnapi/runtime': 1.9.1
+ '@tybys/wasm-util': 0.10.1
+ optional: true
'@octokit/auth-token@5.1.2': {}
- '@octokit/core@5.2.2':
- dependencies:
- '@octokit/auth-token': 4.0.0
- '@octokit/graphql': 7.1.1
- '@octokit/request': 8.4.1
- '@octokit/request-error': 5.1.1
- '@octokit/types': 13.10.0
- before-after-hook: 2.2.3
- universal-user-agent: 6.0.1
+ '@octokit/auth-token@6.0.0': {}
'@octokit/core@6.1.6':
dependencies:
@@ -4473,21 +4641,25 @@ snapshots:
before-after-hook: 3.0.2
universal-user-agent: 7.0.3
- '@octokit/endpoint@10.1.4':
+ '@octokit/core@7.0.6':
dependencies:
- '@octokit/types': 14.1.0
+ '@octokit/auth-token': 6.0.0
+ '@octokit/graphql': 9.0.3
+ '@octokit/request': 10.0.8
+ '@octokit/request-error': 7.1.0
+ '@octokit/types': 16.0.0
+ before-after-hook: 4.0.0
universal-user-agent: 7.0.3
- '@octokit/endpoint@9.0.6':
+ '@octokit/endpoint@10.1.4':
dependencies:
- '@octokit/types': 13.10.0
- universal-user-agent: 6.0.1
+ '@octokit/types': 14.1.0
+ universal-user-agent: 7.0.3
- '@octokit/graphql@7.1.1':
+ '@octokit/endpoint@11.0.3':
dependencies:
- '@octokit/request': 8.4.1
- '@octokit/types': 13.10.0
- universal-user-agent: 6.0.1
+ '@octokit/types': 16.0.0
+ universal-user-agent: 7.0.3
'@octokit/graphql@8.2.2':
dependencies:
@@ -4495,21 +4667,25 @@ snapshots:
'@octokit/types': 14.1.0
universal-user-agent: 7.0.3
- '@octokit/openapi-types@20.0.0': {}
-
- '@octokit/openapi-types@24.2.0': {}
+ '@octokit/graphql@9.0.3':
+ dependencies:
+ '@octokit/request': 10.0.8
+ '@octokit/types': 16.0.0
+ universal-user-agent: 7.0.3
'@octokit/openapi-types@25.1.0': {}
- '@octokit/plugin-paginate-rest@9.2.2(@octokit/core@5.2.2)':
+ '@octokit/openapi-types@27.0.0': {}
+
+ '@octokit/plugin-paginate-rest@14.0.0(@octokit/core@7.0.6)':
dependencies:
- '@octokit/core': 5.2.2
- '@octokit/types': 12.6.0
+ '@octokit/core': 7.0.6
+ '@octokit/types': 16.0.0
- '@octokit/plugin-rest-endpoint-methods@10.4.1(@octokit/core@5.2.2)':
+ '@octokit/plugin-rest-endpoint-methods@17.0.0(@octokit/core@7.0.6)':
dependencies:
- '@octokit/core': 5.2.2
- '@octokit/types': 12.6.0
+ '@octokit/core': 7.0.6
+ '@octokit/types': 16.0.0
'@octokit/plugin-retry@7.2.1(@octokit/core@6.1.6)':
dependencies:
@@ -4518,22 +4694,22 @@ snapshots:
'@octokit/types': 14.1.0
bottleneck: 2.19.5
- '@octokit/request-error@5.1.1':
- dependencies:
- '@octokit/types': 13.10.0
- deprecation: 2.3.1
- once: 1.4.0
-
'@octokit/request-error@6.1.8':
dependencies:
'@octokit/types': 14.1.0
- '@octokit/request@8.4.1':
+ '@octokit/request-error@7.1.0':
dependencies:
- '@octokit/endpoint': 9.0.6
- '@octokit/request-error': 5.1.1
- '@octokit/types': 13.10.0
- universal-user-agent: 6.0.1
+ '@octokit/types': 16.0.0
+
+ '@octokit/request@10.0.8':
+ dependencies:
+ '@octokit/endpoint': 11.0.3
+ '@octokit/request-error': 7.1.0
+ '@octokit/types': 16.0.0
+ fast-content-type-parse: 3.0.0
+ json-with-bigint: 3.5.8
+ universal-user-agent: 7.0.3
'@octokit/request@9.2.4':
dependencies:
@@ -4543,54 +4719,52 @@ snapshots:
fast-content-type-parse: 2.0.1
universal-user-agent: 7.0.3
- '@octokit/types@12.6.0':
- dependencies:
- '@octokit/openapi-types': 20.0.0
-
- '@octokit/types@13.10.0':
- dependencies:
- '@octokit/openapi-types': 24.2.0
-
'@octokit/types@14.1.0':
dependencies:
'@octokit/openapi-types': 25.1.0
- '@oven/bun-darwin-aarch64@1.3.10':
+ '@octokit/types@16.0.0':
+ dependencies:
+ '@octokit/openapi-types': 27.0.0
+
+ '@oven/bun-darwin-aarch64@1.3.11':
optional: true
- '@oven/bun-darwin-x64-baseline@1.3.10':
+ '@oven/bun-darwin-x64-baseline@1.3.11':
optional: true
- '@oven/bun-darwin-x64@1.3.10':
+ '@oven/bun-darwin-x64@1.3.11':
optional: true
- '@oven/bun-linux-aarch64-musl@1.3.10':
+ '@oven/bun-linux-aarch64-musl@1.3.11':
optional: true
- '@oven/bun-linux-aarch64@1.3.10':
+ '@oven/bun-linux-aarch64@1.3.11':
optional: true
- '@oven/bun-linux-x64-baseline@1.3.10':
+ '@oven/bun-linux-x64-baseline@1.3.11':
optional: true
- '@oven/bun-linux-x64-musl-baseline@1.3.10':
+ '@oven/bun-linux-x64-musl-baseline@1.3.11':
optional: true
- '@oven/bun-linux-x64-musl@1.3.10':
+ '@oven/bun-linux-x64-musl@1.3.11':
optional: true
- '@oven/bun-linux-x64@1.3.10':
+ '@oven/bun-linux-x64@1.3.11':
optional: true
- '@oven/bun-windows-aarch64@1.3.10':
+ '@oven/bun-windows-aarch64@1.3.11':
optional: true
- '@oven/bun-windows-x64-baseline@1.3.10':
+ '@oven/bun-windows-x64-baseline@1.3.11':
optional: true
- '@oven/bun-windows-x64@1.3.10':
+ '@oven/bun-windows-x64@1.3.11':
optional: true
+ '@oxc-project/types@0.122.0': {}
+
'@oxfmt/binding-android-arm-eabi@0.35.0':
optional: true
@@ -4650,79 +4824,131 @@ snapshots:
'@pkgr/core@0.2.9': {}
- '@rollup/rollup-android-arm-eabi@4.59.0':
+ '@rolldown/binding-android-arm64@1.0.0-rc.12':
+ optional: true
+
+ '@rolldown/binding-darwin-arm64@1.0.0-rc.12':
+ optional: true
+
+ '@rolldown/binding-darwin-x64@1.0.0-rc.12':
+ optional: true
+
+ '@rolldown/binding-freebsd-x64@1.0.0-rc.12':
+ optional: true
+
+ '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.12':
+ optional: true
+
+ '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.12':
+ optional: true
+
+ '@rolldown/binding-linux-arm64-musl@1.0.0-rc.12':
+ optional: true
+
+ '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.12':
+ optional: true
+
+ '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.12':
optional: true
- '@rollup/rollup-android-arm64@4.59.0':
+ '@rolldown/binding-linux-x64-gnu@1.0.0-rc.12':
optional: true
- '@rollup/rollup-darwin-arm64@4.59.0':
+ '@rolldown/binding-linux-x64-musl@1.0.0-rc.12':
optional: true
- '@rollup/rollup-darwin-x64@4.59.0':
+ '@rolldown/binding-openharmony-arm64@1.0.0-rc.12':
optional: true
- '@rollup/rollup-freebsd-arm64@4.59.0':
+ '@rolldown/binding-wasm32-wasi@1.0.0-rc.12(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)':
+ dependencies:
+ '@napi-rs/wasm-runtime': 1.1.2(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)
+ transitivePeerDependencies:
+ - '@emnapi/core'
+ - '@emnapi/runtime'
optional: true
- '@rollup/rollup-freebsd-x64@4.59.0':
+ '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.12':
optional: true
- '@rollup/rollup-linux-arm-gnueabihf@4.59.0':
+ '@rolldown/binding-win32-x64-msvc@1.0.0-rc.12':
optional: true
- '@rollup/rollup-linux-arm-musleabihf@4.59.0':
+ '@rolldown/pluginutils@1.0.0-rc.12': {}
+
+ '@rollup/rollup-android-arm-eabi@4.60.1':
optional: true
- '@rollup/rollup-linux-arm64-gnu@4.59.0':
+ '@rollup/rollup-android-arm64@4.60.1':
optional: true
- '@rollup/rollup-linux-arm64-musl@4.59.0':
+ '@rollup/rollup-darwin-arm64@4.60.1':
optional: true
- '@rollup/rollup-linux-loong64-gnu@4.59.0':
+ '@rollup/rollup-darwin-x64@4.60.1':
optional: true
- '@rollup/rollup-linux-loong64-musl@4.59.0':
+ '@rollup/rollup-freebsd-arm64@4.60.1':
optional: true
- '@rollup/rollup-linux-ppc64-gnu@4.59.0':
+ '@rollup/rollup-freebsd-x64@4.60.1':
optional: true
- '@rollup/rollup-linux-ppc64-musl@4.59.0':
+ '@rollup/rollup-linux-arm-gnueabihf@4.60.1':
optional: true
- '@rollup/rollup-linux-riscv64-gnu@4.59.0':
+ '@rollup/rollup-linux-arm-musleabihf@4.60.1':
optional: true
- '@rollup/rollup-linux-riscv64-musl@4.59.0':
+ '@rollup/rollup-linux-arm64-gnu@4.60.1':
optional: true
- '@rollup/rollup-linux-s390x-gnu@4.59.0':
+ '@rollup/rollup-linux-arm64-musl@4.60.1':
optional: true
- '@rollup/rollup-linux-x64-gnu@4.59.0':
+ '@rollup/rollup-linux-loong64-gnu@4.60.1':
optional: true
- '@rollup/rollup-linux-x64-musl@4.59.0':
+ '@rollup/rollup-linux-loong64-musl@4.60.1':
optional: true
- '@rollup/rollup-openbsd-x64@4.59.0':
+ '@rollup/rollup-linux-ppc64-gnu@4.60.1':
optional: true
- '@rollup/rollup-openharmony-arm64@4.59.0':
+ '@rollup/rollup-linux-ppc64-musl@4.60.1':
optional: true
- '@rollup/rollup-win32-arm64-msvc@4.59.0':
+ '@rollup/rollup-linux-riscv64-gnu@4.60.1':
optional: true
- '@rollup/rollup-win32-ia32-msvc@4.59.0':
+ '@rollup/rollup-linux-riscv64-musl@4.60.1':
optional: true
- '@rollup/rollup-win32-x64-gnu@4.59.0':
+ '@rollup/rollup-linux-s390x-gnu@4.60.1':
optional: true
- '@rollup/rollup-win32-x64-msvc@4.59.0':
+ '@rollup/rollup-linux-x64-gnu@4.60.1':
+ optional: true
+
+ '@rollup/rollup-linux-x64-musl@4.60.1':
+ optional: true
+
+ '@rollup/rollup-openbsd-x64@4.60.1':
+ optional: true
+
+ '@rollup/rollup-openharmony-arm64@4.60.1':
+ optional: true
+
+ '@rollup/rollup-win32-arm64-msvc@4.60.1':
+ optional: true
+
+ '@rollup/rollup-win32-ia32-msvc@4.60.1':
+ optional: true
+
+ '@rollup/rollup-win32-x64-gnu@4.60.1':
+ optional: true
+
+ '@rollup/rollup-win32-x64-msvc@4.60.1':
optional: true
'@sapphire/result@2.8.0': {}
@@ -4766,17 +4992,40 @@ snapshots:
'@trivago/prettier-plugin-sort-imports@6.0.2(prettier@3.8.1)':
dependencies:
'@babel/generator': 7.29.1
- '@babel/parser': 7.29.0
+ '@babel/parser': 7.29.2
'@babel/traverse': 7.29.0
'@babel/types': 7.29.0
javascript-natural-sort: 0.7.1
- lodash-es: 4.17.23
+ lodash-es: 4.18.1
minimatch: 9.0.9
parse-imports-exports: 0.2.4
prettier: 3.8.1
transitivePeerDependencies:
- supports-color
+ '@turbo/darwin-64@2.9.3':
+ optional: true
+
+ '@turbo/darwin-arm64@2.9.3':
+ optional: true
+
+ '@turbo/linux-64@2.9.3':
+ optional: true
+
+ '@turbo/linux-arm64@2.9.3':
+ optional: true
+
+ '@turbo/windows-64@2.9.3':
+ optional: true
+
+ '@turbo/windows-arm64@2.9.3':
+ optional: true
+
+ '@tybys/wasm-util@0.10.1':
+ dependencies:
+ tslib: 2.8.1
+ optional: true
+
'@types/chai@5.2.3':
dependencies:
'@types/deep-eql': 4.0.2
@@ -4799,10 +5048,6 @@ snapshots:
'@types/json-schema@7.0.15': {}
- '@types/node@25.3.5':
- dependencies:
- undici-types: 7.18.2
-
'@types/node@25.5.0':
dependencies:
undici-types: 7.18.2
@@ -4815,151 +5060,153 @@ snapshots:
'@types/ws@8.18.1':
dependencies:
- '@types/node': 25.3.5
+ '@types/node': 25.5.0
- '@typescript-eslint/eslint-plugin@8.57.1(@typescript-eslint/parser@8.57.1(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3))(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3)':
+ '@typescript-eslint/eslint-plugin@8.58.0(@typescript-eslint/parser@8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3))(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3)':
dependencies:
'@eslint-community/regexpp': 4.12.2
- '@typescript-eslint/parser': 8.57.1(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3)
- '@typescript-eslint/scope-manager': 8.57.1
- '@typescript-eslint/type-utils': 8.57.1(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3)
- '@typescript-eslint/utils': 8.57.1(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3)
- '@typescript-eslint/visitor-keys': 8.57.1
- eslint: 10.0.3(jiti@2.6.1)
+ '@typescript-eslint/parser': 8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/scope-manager': 8.58.0
+ '@typescript-eslint/type-utils': 8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/utils': 8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/visitor-keys': 8.58.0
+ eslint: 10.1.0(jiti@2.6.1)
ignore: 7.0.5
natural-compare: 1.4.0
- ts-api-utils: 2.4.0(typescript@5.9.3)
+ ts-api-utils: 2.5.0(typescript@5.9.3)
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/parser@8.57.1(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3)':
+ '@typescript-eslint/parser@8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3)':
dependencies:
- '@typescript-eslint/scope-manager': 8.57.1
- '@typescript-eslint/types': 8.57.1
- '@typescript-eslint/typescript-estree': 8.57.1(typescript@5.9.3)
- '@typescript-eslint/visitor-keys': 8.57.1
+ '@typescript-eslint/scope-manager': 8.58.0
+ '@typescript-eslint/types': 8.58.0
+ '@typescript-eslint/typescript-estree': 8.58.0(typescript@5.9.3)
+ '@typescript-eslint/visitor-keys': 8.58.0
debug: 4.4.3
- eslint: 10.0.3(jiti@2.6.1)
+ eslint: 10.1.0(jiti@2.6.1)
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/project-service@8.57.1(typescript@5.9.3)':
+ '@typescript-eslint/project-service@8.58.0(typescript@5.9.3)':
dependencies:
- '@typescript-eslint/tsconfig-utils': 8.57.1(typescript@5.9.3)
- '@typescript-eslint/types': 8.57.1
+ '@typescript-eslint/tsconfig-utils': 8.58.0(typescript@5.9.3)
+ '@typescript-eslint/types': 8.58.0
debug: 4.4.3
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/scope-manager@8.57.1':
+ '@typescript-eslint/scope-manager@8.58.0':
dependencies:
- '@typescript-eslint/types': 8.57.1
- '@typescript-eslint/visitor-keys': 8.57.1
+ '@typescript-eslint/types': 8.58.0
+ '@typescript-eslint/visitor-keys': 8.58.0
- '@typescript-eslint/tsconfig-utils@8.57.1(typescript@5.9.3)':
+ '@typescript-eslint/tsconfig-utils@8.58.0(typescript@5.9.3)':
dependencies:
typescript: 5.9.3
- '@typescript-eslint/type-utils@8.57.1(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3)':
+ '@typescript-eslint/type-utils@8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3)':
dependencies:
- '@typescript-eslint/types': 8.57.1
- '@typescript-eslint/typescript-estree': 8.57.1(typescript@5.9.3)
- '@typescript-eslint/utils': 8.57.1(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/types': 8.58.0
+ '@typescript-eslint/typescript-estree': 8.58.0(typescript@5.9.3)
+ '@typescript-eslint/utils': 8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3)
debug: 4.4.3
- eslint: 10.0.3(jiti@2.6.1)
- ts-api-utils: 2.4.0(typescript@5.9.3)
+ eslint: 10.1.0(jiti@2.6.1)
+ ts-api-utils: 2.5.0(typescript@5.9.3)
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/types@8.57.1': {}
+ '@typescript-eslint/types@8.58.0': {}
- '@typescript-eslint/typescript-estree@8.57.1(typescript@5.9.3)':
+ '@typescript-eslint/typescript-estree@8.58.0(typescript@5.9.3)':
dependencies:
- '@typescript-eslint/project-service': 8.57.1(typescript@5.9.3)
- '@typescript-eslint/tsconfig-utils': 8.57.1(typescript@5.9.3)
- '@typescript-eslint/types': 8.57.1
- '@typescript-eslint/visitor-keys': 8.57.1
+ '@typescript-eslint/project-service': 8.58.0(typescript@5.9.3)
+ '@typescript-eslint/tsconfig-utils': 8.58.0(typescript@5.9.3)
+ '@typescript-eslint/types': 8.58.0
+ '@typescript-eslint/visitor-keys': 8.58.0
debug: 4.4.3
- minimatch: 10.2.4
+ minimatch: 10.2.5
semver: 7.7.4
tinyglobby: 0.2.15
- ts-api-utils: 2.4.0(typescript@5.9.3)
+ ts-api-utils: 2.5.0(typescript@5.9.3)
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/utils@8.57.1(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3)':
+ '@typescript-eslint/utils@8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3)':
dependencies:
- '@eslint-community/eslint-utils': 4.9.1(eslint@10.0.3(jiti@2.6.1))
- '@typescript-eslint/scope-manager': 8.57.1
- '@typescript-eslint/types': 8.57.1
- '@typescript-eslint/typescript-estree': 8.57.1(typescript@5.9.3)
- eslint: 10.0.3(jiti@2.6.1)
+ '@eslint-community/eslint-utils': 4.9.1(eslint@10.1.0(jiti@2.6.1))
+ '@typescript-eslint/scope-manager': 8.58.0
+ '@typescript-eslint/types': 8.58.0
+ '@typescript-eslint/typescript-estree': 8.58.0(typescript@5.9.3)
+ eslint: 10.1.0(jiti@2.6.1)
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/visitor-keys@8.57.1':
+ '@typescript-eslint/visitor-keys@8.58.0':
dependencies:
- '@typescript-eslint/types': 8.57.1
+ '@typescript-eslint/types': 8.58.0
eslint-visitor-keys: 5.0.1
- '@vitest/coverage-v8@4.0.18(vitest@4.0.18(@types/node@25.5.0)(jiti@2.6.1)(yaml@2.8.2))':
+ '@vitest/coverage-v8@4.1.2(vitest@4.1.2(@types/node@25.5.0)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(yaml@2.8.3)))':
dependencies:
'@bcoe/v8-coverage': 1.0.2
- '@vitest/utils': 4.0.18
- ast-v8-to-istanbul: 0.3.12
+ '@vitest/utils': 4.1.2
+ ast-v8-to-istanbul: 1.0.0
istanbul-lib-coverage: 3.2.2
istanbul-lib-report: 3.0.1
istanbul-reports: 3.2.0
magicast: 0.5.2
obug: 2.1.1
- std-env: 3.10.0
- tinyrainbow: 3.0.3
- vitest: 4.0.18(@types/node@25.5.0)(jiti@2.6.1)(yaml@2.8.2)
+ std-env: 4.0.0
+ tinyrainbow: 3.1.0
+ vitest: 4.1.2(@types/node@25.5.0)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(yaml@2.8.3))
- '@vitest/expect@4.0.18':
+ '@vitest/expect@4.1.2':
dependencies:
'@standard-schema/spec': 1.1.0
'@types/chai': 5.2.3
- '@vitest/spy': 4.0.18
- '@vitest/utils': 4.0.18
+ '@vitest/spy': 4.1.2
+ '@vitest/utils': 4.1.2
chai: 6.2.2
- tinyrainbow: 3.0.3
+ tinyrainbow: 3.1.0
- '@vitest/mocker@4.0.18(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(yaml@2.8.2))':
+ '@vitest/mocker@4.1.2(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(yaml@2.8.3))':
dependencies:
- '@vitest/spy': 4.0.18
+ '@vitest/spy': 4.1.2
estree-walker: 3.0.3
magic-string: 0.30.21
optionalDependencies:
- vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(yaml@2.8.2)
+ vite: 8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(yaml@2.8.3)
- '@vitest/pretty-format@4.0.18':
+ '@vitest/pretty-format@4.1.2':
dependencies:
- tinyrainbow: 3.0.3
+ tinyrainbow: 3.1.0
- '@vitest/runner@4.0.18':
+ '@vitest/runner@4.1.2':
dependencies:
- '@vitest/utils': 4.0.18
+ '@vitest/utils': 4.1.2
pathe: 2.0.3
- '@vitest/snapshot@4.0.18':
+ '@vitest/snapshot@4.1.2':
dependencies:
- '@vitest/pretty-format': 4.0.18
+ '@vitest/pretty-format': 4.1.2
+ '@vitest/utils': 4.1.2
magic-string: 0.30.21
pathe: 2.0.3
- '@vitest/spy@4.0.18': {}
+ '@vitest/spy@4.1.2': {}
- '@vitest/utils@4.0.18':
+ '@vitest/utils@4.1.2':
dependencies:
- '@vitest/pretty-format': 4.0.18
- tinyrainbow: 3.0.3
+ '@vitest/pretty-format': 4.1.2
+ convert-source-map: 2.0.0
+ tinyrainbow: 3.1.0
abbrev@3.0.1: {}
@@ -5013,7 +5260,7 @@ snapshots:
assertion-error@2.0.1: {}
- ast-v8-to-istanbul@0.3.12:
+ ast-v8-to-istanbul@1.0.0:
dependencies:
'@jridgewell/trace-mapping': 0.3.31
estree-walker: 3.0.3
@@ -5023,42 +5270,38 @@ snapshots:
balanced-match@4.0.4: {}
- before-after-hook@2.2.3: {}
-
before-after-hook@3.0.2: {}
+ before-after-hook@4.0.0: {}
+
bottleneck@2.19.5: {}
- brace-expansion@2.0.2:
+ brace-expansion@2.0.3:
dependencies:
balanced-match: 1.0.2
- brace-expansion@5.0.4:
+ brace-expansion@5.0.5:
dependencies:
balanced-match: 4.0.4
- braces@3.0.3:
- dependencies:
- fill-range: 7.1.1
-
- bun@1.3.10:
+ bun@1.3.11:
optionalDependencies:
- '@oven/bun-darwin-aarch64': 1.3.10
- '@oven/bun-darwin-x64': 1.3.10
- '@oven/bun-darwin-x64-baseline': 1.3.10
- '@oven/bun-linux-aarch64': 1.3.10
- '@oven/bun-linux-aarch64-musl': 1.3.10
- '@oven/bun-linux-x64': 1.3.10
- '@oven/bun-linux-x64-baseline': 1.3.10
- '@oven/bun-linux-x64-musl': 1.3.10
- '@oven/bun-linux-x64-musl-baseline': 1.3.10
- '@oven/bun-windows-aarch64': 1.3.10
- '@oven/bun-windows-x64': 1.3.10
- '@oven/bun-windows-x64-baseline': 1.3.10
-
- bundle-require@5.1.0(esbuild@0.27.3):
- dependencies:
- esbuild: 0.27.3
+ '@oven/bun-darwin-aarch64': 1.3.11
+ '@oven/bun-darwin-x64': 1.3.11
+ '@oven/bun-darwin-x64-baseline': 1.3.11
+ '@oven/bun-linux-aarch64': 1.3.11
+ '@oven/bun-linux-aarch64-musl': 1.3.11
+ '@oven/bun-linux-x64': 1.3.11
+ '@oven/bun-linux-x64-baseline': 1.3.11
+ '@oven/bun-linux-x64-musl': 1.3.11
+ '@oven/bun-linux-x64-musl-baseline': 1.3.11
+ '@oven/bun-windows-aarch64': 1.3.11
+ '@oven/bun-windows-x64': 1.3.11
+ '@oven/bun-windows-x64-baseline': 1.3.11
+
+ bundle-require@5.1.0(esbuild@0.27.4):
+ dependencies:
+ esbuild: 0.27.4
load-tsconfig: 0.2.5
cac@6.7.14: {}
@@ -5088,13 +5331,13 @@ snapshots:
class-validator@0.14.4:
dependencies:
'@types/validator': 13.15.10
- libphonenumber-js: 1.12.38
+ libphonenumber-js: 1.12.41
validator: 13.15.26
class-validator@0.15.1:
dependencies:
'@types/validator': 13.15.10
- libphonenumber-js: 1.12.38
+ libphonenumber-js: 1.12.41
validator: 13.15.26
cli-cursor@5.0.0:
@@ -5139,11 +5382,11 @@ snapshots:
consola@3.4.2: {}
- conventional-changelog-angular@8.3.0:
+ conventional-changelog-angular@8.3.1:
dependencies:
compare-func: 2.0.0
- conventional-changelog-conventionalcommits@9.3.0:
+ conventional-changelog-conventionalcommits@9.3.1:
dependencies:
compare-func: 2.0.0
@@ -5151,19 +5394,21 @@ snapshots:
conventional-commits-filter@5.0.0: {}
- conventional-commits-parser@6.3.0:
+ conventional-commits-parser@6.4.0:
dependencies:
'@simple-libs/stream-utils': 1.2.0
meow: 13.2.0
conventional-recommended-bump@10.0.0:
dependencies:
- '@conventional-changelog/git-client': 1.0.1(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.3.0)
+ '@conventional-changelog/git-client': 1.0.1(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0)
conventional-changelog-preset-loader: 5.0.0
conventional-commits-filter: 5.0.0
- conventional-commits-parser: 6.3.0
+ conventional-commits-parser: 6.4.0
meow: 13.2.0
+ convert-source-map@2.0.0: {}
+
cosmiconfig-typescript-loader@6.2.0(@types/node@25.5.0)(cosmiconfig@9.0.1(typescript@5.9.3))(typescript@5.9.3):
dependencies:
'@types/node': 25.5.0
@@ -5192,9 +5437,7 @@ snapshots:
deep-is@0.1.4: {}
- defu@6.1.4: {}
-
- deprecation@2.3.1: {}
+ defu@6.1.6: {}
destr@2.0.5: {}
@@ -5209,7 +5452,7 @@ snapshots:
dependencies:
is-obj: 2.0.0
- dotenv@17.3.1: {}
+ dotenv@17.4.0: {}
emoji-regex@10.6.0: {}
@@ -5227,44 +5470,44 @@ snapshots:
dependencies:
is-arrayish: 0.2.1
- es-module-lexer@1.7.0: {}
+ es-module-lexer@2.0.0: {}
- esbuild@0.27.3:
+ esbuild@0.27.4:
optionalDependencies:
- '@esbuild/aix-ppc64': 0.27.3
- '@esbuild/android-arm': 0.27.3
- '@esbuild/android-arm64': 0.27.3
- '@esbuild/android-x64': 0.27.3
- '@esbuild/darwin-arm64': 0.27.3
- '@esbuild/darwin-x64': 0.27.3
- '@esbuild/freebsd-arm64': 0.27.3
- '@esbuild/freebsd-x64': 0.27.3
- '@esbuild/linux-arm': 0.27.3
- '@esbuild/linux-arm64': 0.27.3
- '@esbuild/linux-ia32': 0.27.3
- '@esbuild/linux-loong64': 0.27.3
- '@esbuild/linux-mips64el': 0.27.3
- '@esbuild/linux-ppc64': 0.27.3
- '@esbuild/linux-riscv64': 0.27.3
- '@esbuild/linux-s390x': 0.27.3
- '@esbuild/linux-x64': 0.27.3
- '@esbuild/netbsd-arm64': 0.27.3
- '@esbuild/netbsd-x64': 0.27.3
- '@esbuild/openbsd-arm64': 0.27.3
- '@esbuild/openbsd-x64': 0.27.3
- '@esbuild/openharmony-arm64': 0.27.3
- '@esbuild/sunos-x64': 0.27.3
- '@esbuild/win32-arm64': 0.27.3
- '@esbuild/win32-ia32': 0.27.3
- '@esbuild/win32-x64': 0.27.3
+ '@esbuild/aix-ppc64': 0.27.4
+ '@esbuild/android-arm': 0.27.4
+ '@esbuild/android-arm64': 0.27.4
+ '@esbuild/android-x64': 0.27.4
+ '@esbuild/darwin-arm64': 0.27.4
+ '@esbuild/darwin-x64': 0.27.4
+ '@esbuild/freebsd-arm64': 0.27.4
+ '@esbuild/freebsd-x64': 0.27.4
+ '@esbuild/linux-arm': 0.27.4
+ '@esbuild/linux-arm64': 0.27.4
+ '@esbuild/linux-ia32': 0.27.4
+ '@esbuild/linux-loong64': 0.27.4
+ '@esbuild/linux-mips64el': 0.27.4
+ '@esbuild/linux-ppc64': 0.27.4
+ '@esbuild/linux-riscv64': 0.27.4
+ '@esbuild/linux-s390x': 0.27.4
+ '@esbuild/linux-x64': 0.27.4
+ '@esbuild/netbsd-arm64': 0.27.4
+ '@esbuild/netbsd-x64': 0.27.4
+ '@esbuild/openbsd-arm64': 0.27.4
+ '@esbuild/openbsd-x64': 0.27.4
+ '@esbuild/openharmony-arm64': 0.27.4
+ '@esbuild/sunos-x64': 0.27.4
+ '@esbuild/win32-arm64': 0.27.4
+ '@esbuild/win32-ia32': 0.27.4
+ '@esbuild/win32-x64': 0.27.4
escalade@3.2.0: {}
escape-string-regexp@4.0.0: {}
- eslint-config-prettier@10.1.8(eslint@10.0.3(jiti@2.6.1)):
+ eslint-config-prettier@10.1.8(eslint@10.1.0(jiti@2.6.1)):
dependencies:
- eslint: 10.0.3(jiti@2.6.1)
+ eslint: 10.1.0(jiti@2.6.1)
eslint-formatter-pretty@7.0.0:
dependencies:
@@ -5277,35 +5520,35 @@ snapshots:
string-width: 8.2.0
supports-hyperlinks: 4.4.0
- eslint-formatting-reporter@0.0.0(eslint@10.0.3(jiti@2.6.1)):
+ eslint-formatting-reporter@0.0.0(eslint@10.1.0(jiti@2.6.1)):
dependencies:
- eslint: 10.0.3(jiti@2.6.1)
+ eslint: 10.1.0(jiti@2.6.1)
prettier-linter-helpers: 1.0.1
eslint-parser-plain@0.1.1: {}
- eslint-plugin-format@2.0.1(eslint@10.0.3(jiti@2.6.1)):
+ eslint-plugin-format@2.0.1(eslint@10.1.0(jiti@2.6.1)):
dependencies:
'@dprint/formatter': 0.5.1
'@dprint/markdown': 0.21.1
'@dprint/toml': 0.7.0
- eslint: 10.0.3(jiti@2.6.1)
- eslint-formatting-reporter: 0.0.0(eslint@10.0.3(jiti@2.6.1))
+ eslint: 10.1.0(jiti@2.6.1)
+ eslint-formatting-reporter: 0.0.0(eslint@10.1.0(jiti@2.6.1))
eslint-parser-plain: 0.1.1
ohash: 2.0.11
oxfmt: 0.35.0
prettier: 3.8.1
synckit: 0.11.12
- eslint-plugin-prettier@5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.0.3(jiti@2.6.1)))(eslint@10.0.3(jiti@2.6.1))(prettier@3.8.1):
+ eslint-plugin-prettier@5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.1.0(jiti@2.6.1)))(eslint@10.1.0(jiti@2.6.1))(prettier@3.8.1):
dependencies:
- eslint: 10.0.3(jiti@2.6.1)
+ eslint: 10.1.0(jiti@2.6.1)
prettier: 3.8.1
prettier-linter-helpers: 1.0.1
synckit: 0.11.12
optionalDependencies:
'@types/eslint': 9.6.1
- eslint-config-prettier: 10.1.8(eslint@10.0.3(jiti@2.6.1))
+ eslint-config-prettier: 10.1.8(eslint@10.1.0(jiti@2.6.1))
eslint-rule-docs@1.1.235: {}
@@ -5320,12 +5563,12 @@ snapshots:
eslint-visitor-keys@5.0.1: {}
- eslint@10.0.3(jiti@2.6.1):
+ eslint@10.1.0(jiti@2.6.1):
dependencies:
- '@eslint-community/eslint-utils': 4.9.1(eslint@10.0.3(jiti@2.6.1))
+ '@eslint-community/eslint-utils': 4.9.1(eslint@10.1.0(jiti@2.6.1))
'@eslint-community/regexpp': 4.12.2
'@eslint/config-array': 0.23.3
- '@eslint/config-helpers': 0.5.2
+ '@eslint/config-helpers': 0.5.3
'@eslint/core': 1.1.1
'@eslint/plugin-kit': 0.6.1
'@humanfs/node': 0.16.7
@@ -5338,7 +5581,7 @@ snapshots:
escape-string-regexp: 4.0.0
eslint-scope: 9.1.2
eslint-visitor-keys: 5.0.1
- espree: 11.1.1
+ espree: 11.2.0
esquery: 1.7.0
esutils: 2.0.3
fast-deep-equal: 3.1.3
@@ -5349,7 +5592,7 @@ snapshots:
imurmurhash: 0.1.4
is-glob: 4.0.3
json-stable-stringify-without-jsonify: 1.0.1
- minimatch: 10.2.4
+ minimatch: 10.2.5
natural-compare: 1.4.0
optionator: 0.9.4
optionalDependencies:
@@ -5357,7 +5600,7 @@ snapshots:
transitivePeerDependencies:
- supports-color
- espree@11.1.1:
+ espree@11.2.0:
dependencies:
acorn: 8.16.0
acorn-jsx: 5.3.2(acorn@8.16.0)
@@ -5400,6 +5643,8 @@ snapshots:
fast-content-type-parse@2.0.1: {}
+ fast-content-type-parse@3.0.0: {}
+
fast-deep-equal@3.1.3: {}
fast-diff@1.3.0: {}
@@ -5420,9 +5665,9 @@ snapshots:
dependencies:
fast-string-width: 3.0.2
- fdir@6.5.0(picomatch@4.0.3):
+ fdir@6.5.0(picomatch@4.0.4):
optionalDependencies:
- picomatch: 4.0.3
+ picomatch: 4.0.4
figures@6.1.0:
dependencies:
@@ -5432,10 +5677,6 @@ snapshots:
dependencies:
flat-cache: 4.0.1
- fill-range@7.1.1:
- dependencies:
- to-regex-range: 5.0.1
-
find-up@5.0.0:
dependencies:
locate-path: 6.0.0
@@ -5444,15 +5685,15 @@ snapshots:
fix-dts-default-cjs-exports@1.0.1:
dependencies:
magic-string: 0.30.21
- mlly: 1.8.1
- rollup: 4.59.0
+ mlly: 1.8.2
+ rollup: 4.60.1
flat-cache@4.0.1:
dependencies:
- flatted: 3.3.4
+ flatted: 3.4.2
keyv: 4.5.4
- flatted@3.3.4: {}
+ flatted@3.4.2: {}
fsevents@2.3.3:
optional: true
@@ -5495,9 +5736,9 @@ snapshots:
git-cliff-windows-arm64: 2.12.0
git-cliff-windows-x64: 2.12.0
- git-raw-commits@5.0.1(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.3.0):
+ git-raw-commits@5.0.1(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0):
dependencies:
- '@conventional-changelog/git-client': 2.6.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.3.0)
+ '@conventional-changelog/git-client': 2.6.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0)
meow: 13.2.0
transitivePeerDependencies:
- conventional-commits-filter
@@ -5567,8 +5808,6 @@ snapshots:
is-interactive@2.0.0: {}
- is-number@7.0.0: {}
-
is-obj@2.0.0: {}
is-plain-obj@4.1.0: {}
@@ -5618,6 +5857,8 @@ snapshots:
json-stable-stringify-without-jsonify@1.0.1: {}
+ json-with-bigint@3.5.8: {}
+
jsonc-parser@3.3.1: {}
keyv@4.5.4:
@@ -5631,7 +5872,56 @@ snapshots:
prelude-ls: 1.2.1
type-check: 0.4.0
- libphonenumber-js@1.12.38: {}
+ libphonenumber-js@1.12.41: {}
+
+ lightningcss-android-arm64@1.32.0:
+ optional: true
+
+ lightningcss-darwin-arm64@1.32.0:
+ optional: true
+
+ lightningcss-darwin-x64@1.32.0:
+ optional: true
+
+ lightningcss-freebsd-x64@1.32.0:
+ optional: true
+
+ lightningcss-linux-arm-gnueabihf@1.32.0:
+ optional: true
+
+ lightningcss-linux-arm64-gnu@1.32.0:
+ optional: true
+
+ lightningcss-linux-arm64-musl@1.32.0:
+ optional: true
+
+ lightningcss-linux-x64-gnu@1.32.0:
+ optional: true
+
+ lightningcss-linux-x64-musl@1.32.0:
+ optional: true
+
+ lightningcss-win32-arm64-msvc@1.32.0:
+ optional: true
+
+ lightningcss-win32-x64-msvc@1.32.0:
+ optional: true
+
+ lightningcss@1.32.0:
+ dependencies:
+ detect-libc: 2.1.2
+ optionalDependencies:
+ lightningcss-android-arm64: 1.32.0
+ lightningcss-darwin-arm64: 1.32.0
+ lightningcss-darwin-x64: 1.32.0
+ lightningcss-freebsd-x64: 1.32.0
+ lightningcss-linux-arm-gnueabihf: 1.32.0
+ lightningcss-linux-arm64-gnu: 1.32.0
+ lightningcss-linux-arm64-musl: 1.32.0
+ lightningcss-linux-x64-gnu: 1.32.0
+ lightningcss-linux-x64-musl: 1.32.0
+ lightningcss-win32-arm64-msvc: 1.32.0
+ lightningcss-win32-x64-msvc: 1.32.0
lilconfig@3.1.3: {}
@@ -5641,14 +5931,14 @@ snapshots:
dependencies:
uc.micro: 2.1.0
- lint-staged@16.3.3:
+ lint-staged@16.4.0:
dependencies:
commander: 14.0.3
listr2: 9.0.5
- micromatch: 4.0.8
+ picomatch: 4.0.4
string-argv: 0.3.2
- tinyexec: 1.0.2
- yaml: 2.8.2
+ tinyexec: 1.0.4
+ yaml: 2.8.3
listr2@9.0.5:
dependencies:
@@ -5665,7 +5955,7 @@ snapshots:
dependencies:
p-locate: 5.0.0
- lodash-es@4.17.23: {}
+ lodash-es@4.18.1: {}
lodash.camelcase@4.3.0: {}
@@ -5700,7 +5990,7 @@ snapshots:
magicast@0.5.2:
dependencies:
- '@babel/parser': 7.29.0
+ '@babel/parser': 7.29.2
'@babel/types': 7.29.0
source-map-js: 1.2.1
@@ -5721,20 +6011,15 @@ snapshots:
meow@13.2.0: {}
- micromatch@4.0.8:
- dependencies:
- braces: 3.0.3
- picomatch: 2.3.1
-
mimic-function@5.0.1: {}
- minimatch@10.2.4:
+ minimatch@10.2.5:
dependencies:
- brace-expansion: 5.0.4
+ brace-expansion: 5.0.5
minimatch@9.0.9:
dependencies:
- brace-expansion: 2.0.2
+ brace-expansion: 2.0.3
minimist@1.2.8: {}
@@ -5744,7 +6029,7 @@ snapshots:
dependencies:
minipass: 7.1.3
- mlly@1.8.1:
+ mlly@1.8.2:
dependencies:
acorn: 8.16.0
pathe: 2.0.3
@@ -5793,10 +6078,6 @@ snapshots:
ohash@2.0.11: {}
- once@1.4.0:
- dependencies:
- wrappy: 1.0.2
-
onetime@7.0.0:
dependencies:
mimic-function: 5.0.1
@@ -5882,29 +6163,27 @@ snapshots:
picocolors@1.1.1: {}
- picomatch@2.3.1: {}
-
- picomatch@4.0.3: {}
+ picomatch@4.0.4: {}
pirates@4.0.7: {}
pkg-types@1.3.1:
dependencies:
confbox: 0.1.8
- mlly: 1.8.1
+ mlly: 1.8.2
pathe: 2.0.3
plur@5.1.0:
dependencies:
irregular-plurals: 3.5.0
- postcss-load-config@6.0.1(jiti@2.6.1)(postcss@8.5.8)(yaml@2.8.2):
+ postcss-load-config@6.0.1(jiti@2.6.1)(postcss@8.5.8)(yaml@2.8.3):
dependencies:
lilconfig: 3.1.3
optionalDependencies:
jiti: 2.6.1
postcss: 8.5.8
- yaml: 2.8.2
+ yaml: 2.8.3
postcss@8.5.8:
dependencies:
@@ -5928,9 +6207,9 @@ snapshots:
punycode@2.3.1: {}
- rc9@3.0.0:
+ rc9@3.0.1:
dependencies:
- defu: 6.1.4
+ defu: 6.1.6
destr: 2.0.5
readdirp@4.1.2: {}
@@ -5954,35 +6233,59 @@ snapshots:
rfdc@1.4.1: {}
- rollup@4.59.0:
+ rolldown@1.0.0-rc.12(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1):
+ dependencies:
+ '@oxc-project/types': 0.122.0
+ '@rolldown/pluginutils': 1.0.0-rc.12
+ optionalDependencies:
+ '@rolldown/binding-android-arm64': 1.0.0-rc.12
+ '@rolldown/binding-darwin-arm64': 1.0.0-rc.12
+ '@rolldown/binding-darwin-x64': 1.0.0-rc.12
+ '@rolldown/binding-freebsd-x64': 1.0.0-rc.12
+ '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.12
+ '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.12
+ '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.12
+ '@rolldown/binding-linux-ppc64-gnu': 1.0.0-rc.12
+ '@rolldown/binding-linux-s390x-gnu': 1.0.0-rc.12
+ '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.12
+ '@rolldown/binding-linux-x64-musl': 1.0.0-rc.12
+ '@rolldown/binding-openharmony-arm64': 1.0.0-rc.12
+ '@rolldown/binding-wasm32-wasi': 1.0.0-rc.12(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)
+ '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.12
+ '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.12
+ transitivePeerDependencies:
+ - '@emnapi/core'
+ - '@emnapi/runtime'
+
+ rollup@4.60.1:
dependencies:
'@types/estree': 1.0.8
optionalDependencies:
- '@rollup/rollup-android-arm-eabi': 4.59.0
- '@rollup/rollup-android-arm64': 4.59.0
- '@rollup/rollup-darwin-arm64': 4.59.0
- '@rollup/rollup-darwin-x64': 4.59.0
- '@rollup/rollup-freebsd-arm64': 4.59.0
- '@rollup/rollup-freebsd-x64': 4.59.0
- '@rollup/rollup-linux-arm-gnueabihf': 4.59.0
- '@rollup/rollup-linux-arm-musleabihf': 4.59.0
- '@rollup/rollup-linux-arm64-gnu': 4.59.0
- '@rollup/rollup-linux-arm64-musl': 4.59.0
- '@rollup/rollup-linux-loong64-gnu': 4.59.0
- '@rollup/rollup-linux-loong64-musl': 4.59.0
- '@rollup/rollup-linux-ppc64-gnu': 4.59.0
- '@rollup/rollup-linux-ppc64-musl': 4.59.0
- '@rollup/rollup-linux-riscv64-gnu': 4.59.0
- '@rollup/rollup-linux-riscv64-musl': 4.59.0
- '@rollup/rollup-linux-s390x-gnu': 4.59.0
- '@rollup/rollup-linux-x64-gnu': 4.59.0
- '@rollup/rollup-linux-x64-musl': 4.59.0
- '@rollup/rollup-openbsd-x64': 4.59.0
- '@rollup/rollup-openharmony-arm64': 4.59.0
- '@rollup/rollup-win32-arm64-msvc': 4.59.0
- '@rollup/rollup-win32-ia32-msvc': 4.59.0
- '@rollup/rollup-win32-x64-gnu': 4.59.0
- '@rollup/rollup-win32-x64-msvc': 4.59.0
+ '@rollup/rollup-android-arm-eabi': 4.60.1
+ '@rollup/rollup-android-arm64': 4.60.1
+ '@rollup/rollup-darwin-arm64': 4.60.1
+ '@rollup/rollup-darwin-x64': 4.60.1
+ '@rollup/rollup-freebsd-arm64': 4.60.1
+ '@rollup/rollup-freebsd-x64': 4.60.1
+ '@rollup/rollup-linux-arm-gnueabihf': 4.60.1
+ '@rollup/rollup-linux-arm-musleabihf': 4.60.1
+ '@rollup/rollup-linux-arm64-gnu': 4.60.1
+ '@rollup/rollup-linux-arm64-musl': 4.60.1
+ '@rollup/rollup-linux-loong64-gnu': 4.60.1
+ '@rollup/rollup-linux-loong64-musl': 4.60.1
+ '@rollup/rollup-linux-ppc64-gnu': 4.60.1
+ '@rollup/rollup-linux-ppc64-musl': 4.60.1
+ '@rollup/rollup-linux-riscv64-gnu': 4.60.1
+ '@rollup/rollup-linux-riscv64-musl': 4.60.1
+ '@rollup/rollup-linux-s390x-gnu': 4.60.1
+ '@rollup/rollup-linux-x64-gnu': 4.60.1
+ '@rollup/rollup-linux-x64-musl': 4.60.1
+ '@rollup/rollup-openbsd-x64': 4.60.1
+ '@rollup/rollup-openharmony-arm64': 4.60.1
+ '@rollup/rollup-win32-arm64-msvc': 4.60.1
+ '@rollup/rollup-win32-ia32-msvc': 4.60.1
+ '@rollup/rollup-win32-x64-gnu': 4.60.1
+ '@rollup/rollup-win32-x64-msvc': 4.60.1
fsevents: 2.3.3
rxjs@7.8.2:
@@ -6017,7 +6320,7 @@ snapshots:
ansi-styles: 6.2.3
is-fullwidth-code-point: 5.1.0
- smol-toml@1.6.0: {}
+ smol-toml@1.6.1: {}
source-map-js@1.2.1: {}
@@ -6025,7 +6328,7 @@ snapshots:
stackback@0.0.2: {}
- std-env@3.10.0: {}
+ std-env@4.0.0: {}
stdin-discarder@0.3.1: {}
@@ -6083,7 +6386,7 @@ snapshots:
dependencies:
'@pkgr/core': 0.2.9
- tar@7.5.10:
+ tar@7.5.13:
dependencies:
'@isaacs/fs-minipass': 4.0.1
chownr: 3.0.0
@@ -6103,26 +6406,22 @@ snapshots:
tinyexec@0.3.2: {}
- tinyexec@1.0.2: {}
+ tinyexec@1.0.4: {}
tinyglobby@0.2.15:
dependencies:
- fdir: 6.5.0(picomatch@4.0.3)
- picomatch: 4.0.3
+ fdir: 6.5.0(picomatch@4.0.4)
+ picomatch: 4.0.4
tinypool@2.1.0: {}
- tinyrainbow@3.0.3: {}
-
- to-regex-range@5.0.1:
- dependencies:
- is-number: 7.0.0
+ tinyrainbow@3.1.0: {}
tr46@0.0.3: {}
tree-kill@1.2.2: {}
- ts-api-utils@2.4.0(typescript@5.9.3):
+ ts-api-utils@2.5.0(typescript@5.9.3):
dependencies:
typescript: 5.9.3
@@ -6130,20 +6429,20 @@ snapshots:
tslib@2.8.1: {}
- tsup@8.5.1(jiti@2.6.1)(postcss@8.5.8)(typescript@5.9.3)(yaml@2.8.2):
+ tsup@8.5.1(jiti@2.6.1)(postcss@8.5.8)(typescript@5.9.3)(yaml@2.8.3):
dependencies:
- bundle-require: 5.1.0(esbuild@0.27.3)
+ bundle-require: 5.1.0(esbuild@0.27.4)
cac: 6.7.14
chokidar: 4.0.3
consola: 3.4.2
debug: 4.4.3
- esbuild: 0.27.3
+ esbuild: 0.27.4
fix-dts-default-cjs-exports: 1.0.1
joycon: 3.1.1
picocolors: 1.1.1
- postcss-load-config: 6.0.1(jiti@2.6.1)(postcss@8.5.8)(yaml@2.8.2)
+ postcss-load-config: 6.0.1(jiti@2.6.1)(postcss@8.5.8)(yaml@2.8.3)
resolve-from: 5.0.0
- rollup: 4.59.0
+ rollup: 4.60.1
source-map: 0.7.6
sucrase: 3.35.1
tinyexec: 0.3.2
@@ -6160,57 +6459,39 @@ snapshots:
tunnel@0.0.6: {}
- turbo-darwin-64@2.8.16:
- optional: true
-
- turbo-darwin-arm64@2.8.16:
- optional: true
-
- turbo-linux-64@2.8.16:
- optional: true
-
- turbo-linux-arm64@2.8.16:
- optional: true
-
- turbo-windows-64@2.8.16:
- optional: true
-
- turbo-windows-arm64@2.8.16:
- optional: true
-
- turbo@2.8.16:
+ turbo@2.9.3:
optionalDependencies:
- turbo-darwin-64: 2.8.16
- turbo-darwin-arm64: 2.8.16
- turbo-linux-64: 2.8.16
- turbo-linux-arm64: 2.8.16
- turbo-windows-64: 2.8.16
- turbo-windows-arm64: 2.8.16
+ '@turbo/darwin-64': 2.9.3
+ '@turbo/darwin-arm64': 2.9.3
+ '@turbo/linux-64': 2.9.3
+ '@turbo/linux-arm64': 2.9.3
+ '@turbo/windows-64': 2.9.3
+ '@turbo/windows-arm64': 2.9.3
type-check@0.4.0:
dependencies:
prelude-ls: 1.2.1
- typedoc-plugin-markdown@4.10.0(typedoc@0.28.17(typescript@5.9.3)):
+ typedoc-plugin-markdown@4.11.0(typedoc@0.28.18(typescript@5.9.3)):
dependencies:
- typedoc: 0.28.17(typescript@5.9.3)
+ typedoc: 0.28.18(typescript@5.9.3)
- typedoc@0.28.17(typescript@5.9.3):
+ typedoc@0.28.18(typescript@5.9.3):
dependencies:
'@gerrit0/mini-shiki': 3.23.0
lunr: 2.3.9
markdown-it: 14.1.1
- minimatch: 9.0.9
+ minimatch: 10.2.5
typescript: 5.9.3
- yaml: 2.8.2
+ yaml: 2.8.3
- typescript-eslint@8.57.1(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3):
+ typescript-eslint@8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3):
dependencies:
- '@typescript-eslint/eslint-plugin': 8.57.1(@typescript-eslint/parser@8.57.1(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3))(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3)
- '@typescript-eslint/parser': 8.57.1(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3)
- '@typescript-eslint/typescript-estree': 8.57.1(typescript@5.9.3)
- '@typescript-eslint/utils': 8.57.1(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3)
- eslint: 10.0.3(jiti@2.6.1)
+ '@typescript-eslint/eslint-plugin': 8.58.0(@typescript-eslint/parser@8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3))(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/parser': 8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/typescript-estree': 8.58.0(typescript@5.9.3)
+ '@typescript-eslint/utils': 8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3)
+ eslint: 10.1.0(jiti@2.6.1)
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
@@ -6223,18 +6504,12 @@ snapshots:
undici-types@7.18.2: {}
- undici@5.29.0:
- dependencies:
- '@fastify/busboy': 2.1.1
-
- undici@6.23.0: {}
+ undici@6.24.1: {}
unicode-emoji-modifier-base@1.0.0: {}
unicorn-magic@0.3.0: {}
- universal-user-agent@6.0.1: {}
-
universal-user-agent@7.0.3: {}
uri-js@4.4.1:
@@ -6243,56 +6518,49 @@ snapshots:
validator@13.15.26: {}
- vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(yaml@2.8.2):
+ vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(yaml@2.8.3):
dependencies:
- esbuild: 0.27.3
- fdir: 6.5.0(picomatch@4.0.3)
- picomatch: 4.0.3
+ lightningcss: 1.32.0
+ picomatch: 4.0.4
postcss: 8.5.8
- rollup: 4.59.0
+ rolldown: 1.0.0-rc.12(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)
tinyglobby: 0.2.15
optionalDependencies:
'@types/node': 25.5.0
+ esbuild: 0.27.4
fsevents: 2.3.3
jiti: 2.6.1
- yaml: 2.8.2
-
- vitest@4.0.18(@types/node@25.5.0)(jiti@2.6.1)(yaml@2.8.2):
- dependencies:
- '@vitest/expect': 4.0.18
- '@vitest/mocker': 4.0.18(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(yaml@2.8.2))
- '@vitest/pretty-format': 4.0.18
- '@vitest/runner': 4.0.18
- '@vitest/snapshot': 4.0.18
- '@vitest/spy': 4.0.18
- '@vitest/utils': 4.0.18
- es-module-lexer: 1.7.0
+ yaml: 2.8.3
+ transitivePeerDependencies:
+ - '@emnapi/core'
+ - '@emnapi/runtime'
+
+ vitest@4.1.2(@types/node@25.5.0)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(yaml@2.8.3)):
+ dependencies:
+ '@vitest/expect': 4.1.2
+ '@vitest/mocker': 4.1.2(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(yaml@2.8.3))
+ '@vitest/pretty-format': 4.1.2
+ '@vitest/runner': 4.1.2
+ '@vitest/snapshot': 4.1.2
+ '@vitest/spy': 4.1.2
+ '@vitest/utils': 4.1.2
+ es-module-lexer: 2.0.0
expect-type: 1.3.0
magic-string: 0.30.21
obug: 2.1.1
pathe: 2.0.3
- picomatch: 4.0.3
- std-env: 3.10.0
+ picomatch: 4.0.4
+ std-env: 4.0.0
tinybench: 2.9.0
- tinyexec: 1.0.2
+ tinyexec: 1.0.4
tinyglobby: 0.2.15
- tinyrainbow: 3.0.3
- vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(yaml@2.8.2)
+ tinyrainbow: 3.1.0
+ vite: 8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(yaml@2.8.3)
why-is-node-running: 2.3.0
optionalDependencies:
'@types/node': 25.5.0
transitivePeerDependencies:
- - jiti
- - less
- - lightningcss
- msw
- - sass
- - sass-embedded
- - stylus
- - sugarss
- - terser
- - tsx
- - yaml
webidl-conversions@3.0.1: {}
@@ -6333,19 +6601,17 @@ snapshots:
string-width: 7.2.0
strip-ansi: 7.2.0
- wrappy@1.0.2: {}
-
wrtc@0.4.7:
optionalDependencies:
domexception: 1.0.1
- ws@8.19.0: {}
+ ws@8.20.0: {}
y18n@5.0.8: {}
yallist@5.0.0: {}
- yaml@2.8.2: {}
+ yaml@2.8.3: {}
yargs-parser@21.1.1: {}