From 577ff297bac04bffbf984cfbe36992f674afe589 Mon Sep 17 00:00:00 2001 From: Exelo Date: Thu, 4 Jun 2026 12:29:16 +0900 Subject: [PATCH] ci: add new release workflow --- .github/workflows/alpha-release.yml | 43 + .github/workflows/pre-release.yml | 20 +- .github/workflows/release-tag.yml | 31 - .github/workflows/release.yml | 69 +- .husky/commit-msg | 2 +- .husky/pre-commit | 2 +- apps/client/.cliff-jumperrc.json | 1 + apps/client/cliff.toml | 2 +- apps/server/.cliff-jumperrc.json | 1 + apps/server/cliff.toml | 2 +- apps/website/.cliff-jumperrc.json | 1 + apps/website/cliff.toml | 2 +- docs/docs/architecture.mdx | 157 +++ docs/docs/architecture.rst | 195 ---- docs/docs/client.mdx | 102 ++ docs/docs/client.rst | 143 --- docs/docs/index.mdx | 19 + docs/docs/index.rst | 10 - docs/docs/server.mdx | 141 +++ docs/docs/server.rst | 173 --- docs/docs/website.mdx | 209 ++++ docs/docs/website.rst | 246 ---- docs/guides/contributing.mdx | 210 ++++ docs/guides/contributing.rst | 249 ---- docs/guides/getting-started.mdx | 196 ++++ docs/guides/getting-started.rst | 242 ---- docs/guides/index.mdx | 13 + docs/guides/index.rst | 8 - docs/index.rst | 24 - package.json | 2 +- pnpm-lock.yaml | 1680 +++++++++++++++------------ pnpm-workspace.yaml | 27 +- 32 files changed, 2082 insertions(+), 2140 deletions(-) create mode 100644 .github/workflows/alpha-release.yml delete mode 100644 .github/workflows/release-tag.yml create mode 100644 docs/docs/architecture.mdx delete mode 100644 docs/docs/architecture.rst create mode 100644 docs/docs/client.mdx delete mode 100644 docs/docs/client.rst create mode 100644 docs/docs/index.mdx delete mode 100644 docs/docs/index.rst create mode 100644 docs/docs/server.mdx delete mode 100644 docs/docs/server.rst create mode 100644 docs/docs/website.mdx delete mode 100644 docs/docs/website.rst create mode 100644 docs/guides/contributing.mdx delete mode 100644 docs/guides/contributing.rst create mode 100644 docs/guides/getting-started.mdx delete mode 100644 docs/guides/getting-started.rst create mode 100644 docs/guides/index.mdx delete mode 100644 docs/guides/index.rst delete mode 100644 docs/index.rst diff --git a/.github/workflows/alpha-release.yml b/.github/workflows/alpha-release.yml new file mode 100644 index 0000000..9e3a076 --- /dev/null +++ b/.github/workflows/alpha-release.yml @@ -0,0 +1,43 @@ +name: Alpha Release + +on: + workflow_dispatch: + inputs: + package: + description: "The published name of a single package to release" + type: choice + required: true + options: + - "@nanoforge-dev/loader-client" + - "@nanoforge-dev/loader-server" + - "@nanoforge-dev/loader-website" + dry_run: + description: Perform a dry run? + type: boolean + default: false + +permissions: + contents: write + id-token: write + +jobs: + alpha-release: + name: Alpha release + runs-on: ubuntu-latest + if: github.repository_owner == 'NanoForge-dev' + steps: + - name: Checkout repository + uses: actions/checkout@v6 + + - name: Prepare + uses: ./.github/actions/prepare + + - name: Release alpha + uses: ./node_modules/@nanoforge-dev/actions/actions/release-dev + with: + package: ${{ inputs.package }} + tag: alpha + dry: ${{ inputs.dry_run }} + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_PUBLISH_TOKEN }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/pre-release.yml b/.github/workflows/pre-release.yml index 8a1a252..21ec4c8 100644 --- a/.github/workflows/pre-release.yml +++ b/.github/workflows/pre-release.yml @@ -3,18 +3,10 @@ name: Pre-Release on: workflow_dispatch: inputs: - package: - description: "The published name of a single package to release" - type: choice - required: true - options: - - "@nanoforge-dev/loader-client" - - "@nanoforge-dev/loader-server" - - "@nanoforge-dev/loader-website" version: - description: "New version of the package (leave empty for auto generated version)" + description: New version for the packages type: string - required: false + required: true dry_run: description: Perform a dry run? type: boolean @@ -39,11 +31,13 @@ jobs: - name: Prepare uses: ./.github/actions/prepare - - name: Release packages - uses: ./node_modules/@nanoforge-dev/actions/dist/create-release-pr + - name: Create release PR + uses: ./node_modules/@nanoforge-dev/actions/actions/create-packages-release-pr with: - package: ${{ inputs.package }} + packages: "@nanoforge-dev/loader-client,@nanoforge-dev/loader-server,@nanoforge-dev/loader-website" version: ${{ inputs.version }} + branch-format: "releases/loader@{version}" + commit-format: "chore: release @nanoforge-dev/loader@{version}" dry: ${{ inputs.dry_run }} env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/release-tag.yml b/.github/workflows/release-tag.yml deleted file mode 100644 index 1e631d1..0000000 --- a/.github/workflows/release-tag.yml +++ /dev/null @@ -1,31 +0,0 @@ -name: Release Tag - -on: - pull_request: - types: - - closed - branches: - - main - -permissions: - contents: write - -jobs: - create-release-tag: - name: Create release tag - runs-on: ubuntu-latest - if: github.repository_owner == 'NanoForge-dev' && github.event.pull_request.merged == true && startsWith(github.head_ref, 'releases/') - steps: - - name: Checkout repository - uses: actions/checkout@v6 - - - name: Prepare - uses: ./.github/actions/prepare - - - name: Create release tag - uses: ./node_modules/@nanoforge-dev/actions/dist/create-release-tag - with: - commit: ${{ github.sha }} - branch: ${{ github.head_ref }} - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index f9fe68e..42b4c3c 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,34 +1,21 @@ name: Release on: - workflow_dispatch: - inputs: - package: - description: "The published name of a single package to release" - type: choice - required: false - options: - - "all" - - "@nanoforge-dev/loader-client" - - "@nanoforge-dev/loader-server" - - "@nanoforge-dev/loader-website" - exclude: - description: "Comma separated list of packages to exclude from release (if not depended upon)" - required: false - type: string - dry_run: - description: Perform a dry run? - type: boolean - default: false + pull_request: + types: + - closed + branches: + - main permissions: contents: write + id-token: write jobs: - npm-publish: - name: npm publish + release: + name: Release runs-on: ubuntu-latest - if: github.repository_owner == 'NanoForge-dev' + if: github.repository_owner == 'NanoForge-dev' && github.event.pull_request.merged == true && startsWith(github.head_ref, 'releases/loader@') steps: - name: Checkout repository uses: actions/checkout@v6 @@ -37,11 +24,41 @@ jobs: uses: ./.github/actions/prepare - name: Release packages - uses: ./node_modules/@nanoforge-dev/actions/dist/release-packages + uses: ./node_modules/@nanoforge-dev/actions/actions/release-packages with: - package: ${{ inputs.package }} - exclude: ${{ inputs.exclude }} - dry: ${{ inputs.dry_run }} + packages: "@nanoforge-dev/loader-client,@nanoforge-dev/loader-server,@nanoforge-dev/loader-website" + tag-format: "{version}" + latest: true env: NODE_AUTH_TOKEN: ${{ secrets.NPM_PUBLISH_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + publish-docs: + name: Publish docs + runs-on: ubuntu-latest + if: github.repository_owner == 'NanoForge-dev' + needs: [release] + steps: + - name: Checkout repository + uses: actions/checkout@v6 + with: + fetch-depth: 0 + fetch-tags: true + + - name: Checkout docs repository + uses: actions/checkout@v6 + with: + fetch-depth: 0 + fetch-tags: true + path: docs-dist + repository: nanoforge-dev/docs + token: ${{ secrets.ACTIONS_KEY }} + + - name: Prepare + uses: ./.github/actions/prepare + + - name: Publish docs + uses: ./node_modules/@nanoforge-dev/actions/actions/synchronize-docs + with: + repository: loader + category: cli diff --git a/.husky/commit-msg b/.husky/commit-msg index 2a397b8..9ef41ae 100644 --- a/.husky/commit-msg +++ b/.husky/commit-msg @@ -1 +1 @@ -pnpm --no-install commitlint --edit "$1" +pnpm commitlint --edit "$1" diff --git a/.husky/pre-commit b/.husky/pre-commit index c7acc22..cb2c84d 100644 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -1 +1 @@ -pnpm --no-install lint-staged +pnpm lint-staged diff --git a/apps/client/.cliff-jumperrc.json b/apps/client/.cliff-jumperrc.json index 162cabc..2b59ae3 100644 --- a/apps/client/.cliff-jumperrc.json +++ b/apps/client/.cliff-jumperrc.json @@ -3,5 +3,6 @@ "name": "loader-client", "org": "nanoforge-dev", "packagePath": "apps/client", + "tagTemplate": "{{new-version}}", "identifierBase": false } diff --git a/apps/client/cliff.toml b/apps/client/cliff.toml index 51af6b8..0aa338d 100644 --- a/apps/client/cliff.toml +++ b/apps/client/cliff.toml @@ -69,7 +69,7 @@ commit_parsers = [ ] filter_commits = true protect_breaking_commits = true -tag_pattern = "@nanoforge-dev/loader-client@[0-9]*" +tag_pattern = "^[0-9]+" ignore_tags = "" topo_order = false sort_commits = "newest" diff --git a/apps/server/.cliff-jumperrc.json b/apps/server/.cliff-jumperrc.json index e92e2c2..7af45ef 100644 --- a/apps/server/.cliff-jumperrc.json +++ b/apps/server/.cliff-jumperrc.json @@ -3,5 +3,6 @@ "name": "loader-server", "org": "nanoforge-dev", "packagePath": "apps/server", + "tagTemplate": "{{new-version}}", "identifierBase": false } diff --git a/apps/server/cliff.toml b/apps/server/cliff.toml index 59bd9d9..0aa338d 100644 --- a/apps/server/cliff.toml +++ b/apps/server/cliff.toml @@ -69,7 +69,7 @@ commit_parsers = [ ] filter_commits = true protect_breaking_commits = true -tag_pattern = "@nanoforge-dev/loader-server@[0-9]*" +tag_pattern = "^[0-9]+" ignore_tags = "" topo_order = false sort_commits = "newest" diff --git a/apps/website/.cliff-jumperrc.json b/apps/website/.cliff-jumperrc.json index 5bccfb8..f41ca04 100644 --- a/apps/website/.cliff-jumperrc.json +++ b/apps/website/.cliff-jumperrc.json @@ -3,5 +3,6 @@ "name": "loader-website", "org": "nanoforge-dev", "packagePath": "apps/website", + "tagTemplate": "{{new-version}}", "identifierBase": false } diff --git a/apps/website/cliff.toml b/apps/website/cliff.toml index 6bf6a4d..0aa338d 100644 --- a/apps/website/cliff.toml +++ b/apps/website/cliff.toml @@ -69,7 +69,7 @@ commit_parsers = [ ] filter_commits = true protect_breaking_commits = true -tag_pattern = "@nanoforge-dev/loader-website@[0-9]*" +tag_pattern = "^[0-9]+" ignore_tags = "" topo_order = false sort_commits = "newest" diff --git a/docs/docs/architecture.mdx b/docs/docs/architecture.mdx new file mode 100644 index 0000000..df7d46a --- /dev/null +++ b/docs/docs/architecture.mdx @@ -0,0 +1,157 @@ +--- +title: "Architecture" +description: "How NanoForge Loader works — runtime modes, package structure, and data flows." +--- + +## Overview + +NanoForge Loader is a runtime system that serves and executes NanoForge game +engine projects. It provides two execution modes: + +- **Client mode**: Serves a web interface where users can load and play games directly in the browser using WebGL. +- **Server mode**: Executes game server logic in a Node.js worker thread, suitable for multiplayer game backends. + +Both loaders share a common architecture: they read game files from a directory, +generate a manifest of assets, and execute the game's `main.js` entry point. + +## Technology Stack + +| Component | Technology | +| --------------- | ----------------------------------- | +| Language | TypeScript (strict mode) | +| Runtime | Bun (bundler and runtime) | +| Module Formats | ESM + CJS (dual package) | +| Target | Browser (client) / Node.js (server) | +| Package Manager | pnpm 10.x | +| Node Version | 25 | +| Linter | ESLint 9.x | +| Formatter | Prettier 3.x | +| CI/CD | GitHub Actions | + +## Package Architecture + +The loader is organized as a monorepo with three packages: + +``` +loader/ ++-- apps/ +| +-- client/ # Browser loader server +| | +-- src/ +| | | +-- server.ts # HTTP server entry point +| | | +-- env.ts # Environment configuration +| | | +-- files.ts # File utilities +| | | +-- manifest.ts # Manifest generation +| | | +-- watch.ts # File watcher for hot reload +| | +-- package.json +| +-- server/ # Node.js server loader +| | +-- src/ +| | | +-- server.ts # Bootstrap entry point +| | | +-- worker.ts # Worker thread implementation +| | | +-- env.ts # Environment configuration +| | | +-- files.ts # File utilities +| | | +-- watch.ts # File watcher for hot reload +| | +-- package.json +| +-- website/ # Web interface +| +-- src/ +| | +-- index.ts # Main entry point +| | +-- cache/ # Caching logic +| | +-- file-system/ # File system abstraction +| | +-- game/ # Game runner +| | +-- loader/ # Game file loader +| | +-- types/ # TypeScript types +| | +-- utils/ # Utility functions +| | +-- version/ # Version management +| +-- package.json ++-- package.json # Root workspace config ++-- pnpm-workspace.yaml # pnpm workspace definition ++-- turbo.json # Turbo build configuration +``` + +## Client Loader Flow + +The client loader implements an HTTP server using Bun: + +1. **Server Initialization**: Starts an HTTP server on the configured port. + +2. **Route Handling**: + - `/` — Serves the website `index.html` + - `/*` — Serves static website assets + - `/manifest` — Returns the game file manifest (JSON) + - `/env` — Returns public environment variables + - `/game/*` — Serves game files from the game directory + +3. **Manifest Generation**: On each `/manifest` request, scans the game directory and builds a list of all game files with their paths. + +4. **Hot Reload** (optional): When `WATCH=true`, starts a WebSocket server that notifies the browser when game files change. + +``` +Browser Client Loader Game Directory + | | | + |----GET /manifest-------->| | + | |---scan directory--------->| + | |<--file list---------------| + |<---JSON manifest---------| | + | | | + |----GET /game/main.js---->| | + | |---read file-------------->| + |<---JavaScript file-------| | + | | | + |====WebSocket (watch)=====| | + |<---file changed----------|<--fsnotify---------------| +``` + +## Server Loader Flow + +The server loader executes game logic in a Node.js worker thread: + +1. **Bootstrap**: Reads the game directory and locates `main.js`. +2. **Worker Fork**: Spawns a child process that runs the worker script. +3. **Game Execution**: The worker imports `main.js` and calls its `main()` function with a file map containing all game assets. +4. **Hot Reload** (optional): When watch mode is enabled, the worker process is killed and restarted when files change. + +``` +Server Loader Worker Thread Game Code + | | | + |---fork(worker.js)--------->| | + | |---import main.js-------->| + | |<--main function----------| + | |---call main()----------->| + | | | +[file change detected] | | + |---kill worker------------->| | + |---fork new worker--------->| | +``` + +## Website Architecture + +The website package provides the browser-side game loader: + +1. **Manifest Fetching**: Requests `/manifest` from the client server. +2. **File Caching**: Downloads game files and stores them in browser storage (IndexedDB via the file-system abstraction). +3. **Version Checking**: Compares the manifest version with cached version to determine if files need updating. +4. **Game Loading**: Imports the main module and creates a file map for the game to access assets. +5. **Game Execution**: Calls the game's `main()` function with container and file references. +6. **Watch Integration**: Subscribes to the WebSocket for hot reload notifications during development. + +## Build Pipeline + +The project uses Bun for building and bundling: + +```bash +# Build all packages +pnpm run build + +# What happens internally: +# 1. website: bun build -> dist/index.html + assets +# 2. client: bun build -> dist/server.js +# 3. server: bun build -> dist/server.js + dist/worker.js +``` + +Each package produces optimized bundles for its target environment: + +- **Website**: Browser bundle with HTML entry point +- **Client**: Bun-targeted server bundle +- **Server**: Node.js-targeted bundles for server and worker + +Turbo is used to orchestrate builds across packages with proper dependency +ordering (website must build before client). diff --git a/docs/docs/architecture.rst b/docs/docs/architecture.rst deleted file mode 100644 index 1fc527c..0000000 --- a/docs/docs/architecture.rst +++ /dev/null @@ -1,195 +0,0 @@ -Architecture -============ - -Overview --------- - -NanoForge Loader is a runtime system that serves and executes NanoForge game -engine projects. It provides two execution modes: - -- **Client mode**: Serves a web interface where users can load and play games - directly in the browser using WebGL. -- **Server mode**: Executes game server logic in a Node.js worker thread, - suitable for multiplayer game backends. - -Both loaders share a common architecture: they read game files from a directory, -generate a manifest of assets, and execute the game's ``main.js`` entry point. - -Technology Stack ----------------- - -.. list-table:: - :header-rows: 1 - :widths: 30 70 - - * - Component - - Technology - * - Language - - TypeScript (strict mode) - * - Runtime - - Bun (bundler and runtime) - * - Module Formats - - ESM + CJS (dual package) - * - Target - - Browser (client) / Node.js (server) - * - Package Manager - - pnpm 10.x - * - Node Version - - 25 - * - Linter - - ESLint 9.x - * - Formatter - - Prettier 3.x - * - CI/CD - - GitHub Actions - -Package Architecture --------------------- - -The loader is organized as a monorepo with three packages: - -:: - - loader/ - +-- apps/ - | +-- client/ # Browser loader server - | | +-- src/ - | | | +-- server.ts # HTTP server entry point - | | | +-- env.ts # Environment configuration - | | | +-- files.ts # File utilities - | | | +-- manifest.ts # Manifest generation - | | | +-- watch.ts # File watcher for hot reload - | | +-- package.json - | +-- server/ # Node.js server loader - | | +-- src/ - | | | +-- server.ts # Bootstrap entry point - | | | +-- worker.ts # Worker thread implementation - | | | +-- env.ts # Environment configuration - | | | +-- files.ts # File utilities - | | | +-- watch.ts # File watcher for hot reload - | | +-- package.json - | +-- website/ # Web interface - | +-- src/ - | | +-- index.ts # Main entry point - | | +-- cache/ # Caching logic - | | +-- file-system/ # File system abstraction - | | +-- game/ # Game runner - | | +-- loader/ # Game file loader - | | +-- types/ # TypeScript types - | | +-- utils/ # Utility functions - | | +-- version/ # Version management - | +-- package.json - +-- package.json # Root workspace config - +-- pnpm-workspace.yaml # pnpm workspace definition - +-- turbo.json # Turbo build configuration - -Client Loader Flow ------------------- - -The client loader implements an HTTP server using Bun: - -1. **Server Initialization**: Starts an HTTP server on the configured port. - -2. **Route Handling**: - - - ``/`` - Serves the website ``index.html`` - - ``/*`` - Serves static website assets - - ``/manifest`` - Returns the game file manifest (JSON) - - ``/env`` - Returns public environment variables - - ``/game/*`` - Serves game files from the game directory - -3. **Manifest Generation**: On each ``/manifest`` request, scans the game - directory and builds a list of all game files with their paths. - -4. **Hot Reload** (optional): When ``WATCH=true``, starts a WebSocket server - that notifies the browser when game files change. - -.. code-block:: text - - Browser Client Loader Game Directory - | | | - |----GET /manifest-------->| | - | |---scan directory--------->| - | |<--file list---------------| - |<---JSON manifest---------| | - | | | - |----GET /game/main.js---->| | - | |---read file-------------->| - |<---JavaScript file-------| | - | | | - |====WebSocket (watch)=====| | - |<---file changed----------|<--fsnotify---------------| - -Server Loader Flow ------------------- - -The server loader executes game logic in a Node.js worker thread: - -1. **Bootstrap**: Reads the game directory and locates ``main.js``. - -2. **Worker Fork**: Spawns a child process that runs the worker script. - -3. **Game Execution**: The worker imports ``main.js`` and calls its ``main()`` - function with a file map containing all game assets. - -4. **Hot Reload** (optional): When watch mode is enabled, the worker process - is killed and restarted when files change. - -.. code-block:: text - - Server Loader Worker Thread Game Code - | | | - |---fork(worker.js)--------->| | - | |---import main.js-------->| - | |<--main function----------| - | |---call main()----------->| - | | | - [file change detected] | | - |---kill worker------------->| | - |---fork new worker--------->| | - -Website Architecture --------------------- - -The website package provides the browser-side game loader: - -1. **Manifest Fetching**: Requests ``/manifest`` from the client server. - -2. **File Caching**: Downloads game files and stores them in browser storage - (IndexedDB via the file-system abstraction). - -3. **Version Checking**: Compares the manifest version with cached version - to determine if files need updating. - -4. **Game Loading**: Imports the main module and creates a file map for - the game to access assets. - -5. **Game Execution**: Calls the game's ``main()`` function with container - and file references. - -6. **Watch Integration**: Subscribes to the WebSocket for hot reload - notifications during development. - -Build Pipeline --------------- - -The project uses Bun for building and bundling: - -.. code-block:: bash - - # Build all packages - pnpm run build - - # What happens internally: - # 1. website: bun build -> dist/index.html + assets - # 2. client: bun build -> dist/server.js - # 3. server: bun build -> dist/server.js + dist/worker.js - -Each package produces optimized bundles for its target environment: - -- **Website**: Browser bundle with HTML entry point -- **Client**: Bun-targeted server bundle -- **Server**: Node.js-targeted bundles for server and worker - -Turbo is used to orchestrate builds across packages with proper dependency -ordering (website must build before client). diff --git a/docs/docs/client.mdx b/docs/docs/client.mdx new file mode 100644 index 0000000..1c4847c --- /dev/null +++ b/docs/docs/client.mdx @@ -0,0 +1,102 @@ +--- +title: "Client Loader" +description: "HTTP server that serves the web interface and game files for browser-based NanoForge games." +--- + +**Package**: `@nanoforge-dev/loader-client` + +The client loader is a Bun-based HTTP server that: + +- Serves the loader website interface +- Provides a manifest endpoint listing all game files +- Serves game files from a configured directory +- Optionally enables hot reload via WebSocket + +## Environment Variables + +| Variable | Required | Description | +| ----------------------- | -------- | ------------------------------------------------------------- | +| `PORT` | Yes | Port number for the HTTP server | +| `GAME_DIR` | Yes | Absolute path to the game directory | +| `WATCH` | No | Set to `"true"` to enable hot reload | +| `WATCH_PORT` | No | Port for the WebSocket watch server | +| `WATCH_SERVER_GAME_DIR` | No | Game directory for server-side watch | +| `PUBLIC_*` | No | Any variable prefixed with `PUBLIC_` is exposed to the client | + +## API Endpoints + +| Endpoint | Description | +| --------------- | -------------------------------------------- | +| `GET /` | Serves the main `index.html` page | +| `GET /*` | Serves static website assets | +| `GET /manifest` | Returns the game manifest as JSON | +| `GET /env` | Returns public environment variables as JSON | +| `GET /game/*` | Serves files from the game directory | + +## Manifest Format + +The `/manifest` endpoint returns a JSON object: + +```typescript +interface IManifest { + version: string; + files: { path: string }[]; + watch: { enable: false } | { enable: true; url: string }; +} +``` + +## Source Modules + +### server.ts + +Main entry point that creates and configures the Bun HTTP server with all route handlers. + +### env.ts + +Environment variable accessors: + +```typescript +function getPort(): string; +function getGameDir(): string; +function getWatch(): string | undefined; +function getWatchPort(): string | undefined; +function getWatchServerGameDir(): string | undefined; +function getPublicEnv(): Record; +``` + +### manifest.ts + +Manifest generation: + +```typescript +const MANIFEST: IManifest; +function updateManifest(gameDir: string): Promise; +``` + +### watch.ts + +File watching for hot reload: + +```typescript +function startWatch( + gameDir: string, + watchPort: string | undefined, + watchServerGameDir: string | undefined, +): void; +``` + +## Usage + +```bash +# Set required environment variables +export PORT=3000 +export GAME_DIR=/path/to/game + +# Start the client loader +pnpm --filter @nanoforge-dev/loader-client start + +# With hot reload +export WATCH=true +export WATCH_PORT=3001 +pnpm --filter @nanoforge-dev/loader-client start +``` diff --git a/docs/docs/client.rst b/docs/docs/client.rst deleted file mode 100644 index c454163..0000000 --- a/docs/docs/client.rst +++ /dev/null @@ -1,143 +0,0 @@ -client -============= - -**Package**: ``@nanoforge-dev/loader-client`` - -The client loader serves a web interface for loading and running NanoForge -games in the browser. It provides an HTTP server that serves the website -assets and game files. - -Overview --------- - -The client loader is a Bun-based HTTP server that: - -- Serves the loader website interface -- Provides a manifest endpoint listing all game files -- Serves game files from a configured directory -- Optionall:white_check_mark: y enables hot reload via WebSocket - -Environment Variables ---------------------- - -.. list-table:: - :header-rows: 1 - :widths: 25 15 60 - - * - Variable - - Required - - Description - * - ``PORT`` - - Yes - - Port number for the HTTP server - * - ``GAME_DIR`` - - Yes - - Absolute path to the game directory - * - ``WATCH`` - - No - - Set to ``"true"`` to enable hot reload - * - ``WATCH_PORT`` - - No - - Port for the WebSocket watch server - * - ``WATCH_SERVER_GAME_DIR`` - - No - - Game directory for server-side watch - * - ``PUBLIC_*`` - - No - - Any variable prefixed with ``PUBLIC_`` is exposed to the client - -API Endpoints -------------- - -.. list-table:: - :header-rows: 1 - :widths: 20 80 - - * - Endpoint - - Description - * - ``GET /`` - - Serves the main ``index.html`` page - * - ``GET /*`` - - Serves static website assets - * - ``GET /manifest`` - - Returns the game manifest as JSON - * - ``GET /env`` - - Returns public environment variables as JSON - * - ``GET /game/*`` - - Serves files from the game directory - -Manifest Format ---------------- - -The ``/manifest`` endpoint returns a JSON object: - -.. code-block:: typescript - - interface IManifest { - version: string; - files: { path: string }[]; - watch: { enable: false } | { enable: true; url: string }; - } - -Source Modules --------------- - -server.ts -^^^^^^^^^ - -Main entry point that creates and configures the Bun HTTP server with all -route handlers. - -env.ts -^^^^^^ - -Environment variable accessors: - -.. code-block:: typescript - - function getPort(): string - function getGameDir(): string - function getWatch(): string | undefined - function getWatchPort(): string | undefined - function getWatchServerGameDir(): string | undefined - function getPublicEnv(): Record - -manifest.ts -^^^^^^^^^^^ - -Manifest generation: - -.. code-block:: typescript - - const MANIFEST: IManifest - function updateManifest(gameDir: string): Promise - -watch.ts -^^^^^^^^ - -File watching for hot reload: - -.. code-block:: typescript - - function startWatch( - gameDir: string, - watchPort: string | undefined, - watchServerGameDir: string | undefined - ): void - -Usage ------ - -.. code-block:: bash - - # Set required environment variables - export PORT=3000 - export GAME_DIR=/path/to/game - - # Start the client loader - pnpm --filter @nanoforge-dev/loader-client start - - # With hot reload - export WATCH=true - export WATCH_PORT=3001 - pnpm --filter @nanoforge-dev/loader-client start diff --git a/docs/docs/index.mdx b/docs/docs/index.mdx new file mode 100644 index 0000000..d4c5e50 --- /dev/null +++ b/docs/docs/index.mdx @@ -0,0 +1,19 @@ +--- +title: "Technical Documentation" +description: "Architecture, package APIs, and module references for NanoForge Loader." +--- + + + + Runtime modes, package structure, data flows, and the build pipeline. + + + HTTP server that serves the web interface and game files for browser-based games. + + + Worker-thread-based loader for executing game server logic in Node.js. + + + Browser-side module handling manifest fetching, file caching, and game initialization. + + diff --git a/docs/docs/index.rst b/docs/docs/index.rst deleted file mode 100644 index d997893..0000000 --- a/docs/docs/index.rst +++ /dev/null @@ -1,10 +0,0 @@ -Technical Documentation -====================== - -.. toctree:: - :maxdepth: 2 - - architecture - client - website - server diff --git a/docs/docs/server.mdx b/docs/docs/server.mdx new file mode 100644 index 0000000..505484d --- /dev/null +++ b/docs/docs/server.mdx @@ -0,0 +1,141 @@ +--- +title: "Server Loader" +description: "Executes NanoForge game server logic in an isolated Node.js worker thread with optional hot reload." +--- + +**Package**: `@nanoforge-dev/loader-server` + +The server loader: + +- Scans the game directory for files +- Locates the `main.js` entry point +- Forks a worker process to execute game code +- Provides file paths to the game via a Map +- Optionally restarts on file changes + +## Environment Variables + +| Variable | Required | Description | +| ---------- | -------- | ------------------------------------- | +| `GAME_DIR` | Yes | Absolute path to the game directory | +| `WATCH` | No | Set to any value to enable hot reload | + +## Game Entry Point + +The server loader expects a `main.js` file in the game directory that exports a `main` function: + +```typescript +interface RunOptions { + files: Map; +} + +export async function main(options: RunOptions): Promise { + // Game server logic + const files = options.files; + // files.get("/assets/config.json") -> absolute path to file +} +``` + +The `files` map contains all game files with their relative paths as keys and absolute file system paths as values. + +## Worker Thread + +The game code runs in a separate worker thread (child process), which: + +- Isolates game code from the loader process +- Enables clean restarts during hot reload +- Prevents game crashes from affecting the loader + +## Source Modules + +### server.ts + +Bootstrap entry point that: + +1. Reads the game directory +2. Locates `main.js` +3. Forks the worker process +4. Sets up file watching if enabled + +```typescript +async function bootstrap(): Promise; +``` + +### worker.ts + +Worker thread implementation that: + +1. Receives the main path and file list via process arguments +2. Imports the game's main module using `createRequire` +3. Calls the `main()` function with the files map + +```typescript +interface MainFunction { + main: (options: { files: Map }) => Promise; +} +``` + +### env.ts + +Environment variable accessors: + +```typescript +function getGameDir(): string; +function getWatch(): string | undefined; +``` + +### files.ts + +File system utilities: + +```typescript +function getFiles(gameDir: string): [string, string][]; +``` + +Returns an array of tuples containing `[relativePath, absolutePath]` for all files in the game directory. + +### watch.ts + +File watching for hot reload: + +```typescript +function startWatch(gameDir: string, callback: () => Promise): void; +``` + +Calls the callback function when files change, allowing the server to restart the worker process. + +## Usage + +```bash +# Set required environment variables +export GAME_DIR=/path/to/game + +# Start the server loader +pnpm --filter @nanoforge-dev/loader-server start + +# With hot reload +export WATCH=1 +pnpm --filter @nanoforge-dev/loader-server start +``` + +## Example Game Server + +```javascript +// main.js +export async function main(options) { + const { files } = options; + + console.log("Server starting..."); + console.log("Available files:", [...files.keys()]); + + // Read a config file + const configPath = files.get("/config.json"); + if (configPath) { + const config = await import(configPath, { with: { type: "json" } }); + console.log("Config loaded:", config); + } + + // Your game server logic here + // e.g., start a WebSocket server, initialize game state, etc. +} +``` diff --git a/docs/docs/server.rst b/docs/docs/server.rst deleted file mode 100644 index f98ce97..0000000 --- a/docs/docs/server.rst +++ /dev/null @@ -1,173 +0,0 @@ -server -============= - -**Package**: ``@nanoforge-dev/loader-server`` - -The server loader executes NanoForge game server logic in a Node.js -environment. It runs the game's ``main.js`` in a worker thread with -file access and optional hot reload. - -Overview --------- - -The server loader: - -- Scans the game directory for files -- Locates the ``main.js`` entry point -- Forks a worker process to execute game code -- Provides file paths to the game via a Map -- Optionally restarts on file changes - -Environment Variables ---------------------- - -.. list-table:: - :header-rows: 1 - :widths: 25 15 60 - - * - Variable - - Required - - Description - * - ``GAME_DIR`` - - Yes - - Absolute path to the game directory - * - ``WATCH`` - - No - - Set to any value to enable hot reload - -Game Entry Point ----------------- - -The server loader expects a ``main.js`` file in the game directory that -exports a ``main`` function: - -.. code-block:: typescript - - interface RunOptions { - files: Map; - } - - export async function main(options: RunOptions): Promise { - // Game server logic - const files = options.files; - // files.get("/assets/config.json") -> absolute path to file - } - -The ``files`` map contains all game files with their relative paths as keys -and absolute file system paths as values. - -Worker Thread -------------- - -The game code runs in a separate worker thread (child process), which: - -- Isolates game code from the loader process -- Enables clean restarts during hot reload -- Prevents game crashes from affecting the loader - -Source Modules --------------- - -server.ts -^^^^^^^^^ - -Bootstrap entry point that: - -1. Reads the game directory -2. Locates ``main.js`` -3. Forks the worker process -4. Sets up file watching if enabled - -.. code-block:: typescript - - async function bootstrap(): Promise - -worker.ts -^^^^^^^^^ - -Worker thread implementation that: - -1. Receives the main path and file list via process arguments -2. Imports the game's main module using ``createRequire`` -3. Calls the ``main()`` function with the files map - -.. code-block:: typescript - - interface MainFunction { - main: (options: { files: Map }) => Promise; - } - -env.ts -^^^^^^ - -Environment variable accessors: - -.. code-block:: typescript - - function getGameDir(): string - function getWatch(): string | undefined - -files.ts -^^^^^^^^ - -File system utilities: - -.. code-block:: typescript - - function getFiles(gameDir: string): [string, string][] - -Returns an array of tuples containing ``[relativePath, absolutePath]`` for -all files in the game directory. - -watch.ts -^^^^^^^^ - -File watching for hot reload: - -.. code-block:: typescript - - function startWatch( - gameDir: string, - callback: () => Promise - ): void - -Calls the callback function when files change, allowing the server to -restart the worker process. - -Usage ------ - -.. code-block:: bash - - # Set required environment variables - export GAME_DIR=/path/to/game - - # Start the server loader - pnpm --filter @nanoforge-dev/loader-server start - - # With hot reload - export WATCH=1 - pnpm --filter @nanoforge-dev/loader-server start - -Example Game Server -------------------- - -.. code-block:: javascript - - // main.js - export async function main(options) { - const { files } = options; - - console.log("Server starting..."); - console.log("Available files:", [...files.keys()]); - - // Read a config file - const configPath = files.get("/config.json"); - if (configPath) { - const config = await import(configPath, { with: { type: "json" } }); - console.log("Config loaded:", config); - } - - // Your game server logic here - // e.g., start a WebSocket server, initialize game state, etc. - } diff --git a/docs/docs/website.mdx b/docs/docs/website.mdx new file mode 100644 index 0000000..cb3a480 --- /dev/null +++ b/docs/docs/website.mdx @@ -0,0 +1,209 @@ +--- +title: "Website" +description: "Browser-side interface for loading, caching, and running NanoForge games." +--- + +**Package**: `@nanoforge-dev/loader-website` + +The website is a client-side application that: + +- Fetches the game manifest from the loader server +- Caches game files in browser storage +- Loads and executes the game's main module +- Provides a container and file access to the game +- Supports hot reload via WebSocket + +## Modules + +### loader + +**Path**: `src/loader/` + +Loads game files from the manifest and prepares them for execution. + +```typescript +async function loadGameFiles(manifest: IExtendedManifest): Promise<[Map, any]>; +``` + +Returns a tuple containing: + +1. A map of file paths to local (cached) paths +2. The imported main module + +The loader iterates through manifest files, caches each file locally, dynamically imports `main.js`, and returns the main module's exports. + +### game + +**Path**: `src/game/` + +Handles game execution and window management. + +```typescript +function runGame(mainModule: any, options: Omit): void; +``` + +Switches the UI to game mode, gets the container element, and calls the game's `main()` function with options. + +### cache + +**Path**: `src/cache/` + +Manages browser-side caching of game files for offline support and faster subsequent loads. + +### file-system + +**Path**: `src/file-system/` + +Provides a file system abstraction over browser storage APIs (IndexedDB): + +```typescript +class FileSystemManager { + async getDirectory(path: string): Promise; + async getFile(path: string): Promise; +} + +class FileSystemDirectory { + async list(): Promise; + async create(): Promise; +} + +class FileSystemFile { + async read(): Promise; + async write(data: Blob): Promise; + async exists(): Promise; +} + +class FileSystemHandler { + // Low-level storage interface +} +``` + +### manifest + +**Path**: `src/manifest.ts` + +Manifest fetching and validation: + +```typescript +async function getManifest(): Promise; +function isManifestUpToDate(manifest: IManifest): boolean; +``` + +### version + +**Path**: `src/version/` + +Manages version tracking for cache invalidation: + +```typescript +function getVersion(): string | null; +function setVersion(version: string): void; +``` + +### watch + +**Path**: `src/watch.ts` + +WebSocket connection for hot reload notifications. + +### window + +**Path**: `src/window.ts` + +UI state management: + +```typescript +function setLoadingStatus(status: string): void; +function changeWindowToGame(): void; +``` + +### utils + +**Path**: `src/utils/` + + + + ```typescript + class Logger { + constructor(prefix: string) + info(...args: any[]): void + warn(...args: any[]): void + error(...args: any[]): void + } + ``` + + + ```typescript + function getElementById(id: string): HTMLElement + function addScript(src: string): void + ``` + + + ```typescript + function delay(ms: number): Promise + ``` + + + +## Types + +### IManifest + +```typescript +interface IManifest { + version: string; + files: IManifestFile[]; + watch: { enable: false } | { enable: true; url: string }; +} +``` + +### IManifestFile + +```typescript +interface IManifestFile { + path: string; +} +``` + +### IExtendedManifest + +Extended manifest with local file paths after caching: + +```typescript +interface IExtendedManifest { + files: IExtendedManifestFile[]; +} +``` + +### IExtendedManifestFile + +```typescript +interface IExtendedManifestFile extends IManifestFile { + localPath: string; // Local cached path (blob URL or IndexedDB path) +} +``` + +### IGameOptions + +Options passed to the game's main function: + +```typescript +interface IGameOptions { + container: HTMLDivElement; + files: Map; +} +``` + +## Build Output + +The website builds to static assets: + +``` +dist/ ++-- index.html # Main HTML entry point ++-- index.js # Bundled JavaScript ++-- style.css # Styles ++-- assets/ # Static assets +``` + +These files are served by the client loader and consumed by the browser. diff --git a/docs/docs/website.rst b/docs/docs/website.rst deleted file mode 100644 index fa3f8f7..0000000 --- a/docs/docs/website.rst +++ /dev/null @@ -1,246 +0,0 @@ -website -============== - -**Package**: ``@nanoforge-dev/loader-website`` - -The website package provides the browser-side interface for loading and -running NanoForge games. It handles manifest fetching, file caching, -and game initialization. - -Overview --------- - -The website is a client-side application that: - -- Fetches the game manifest from the loader server -- Caches game files in browser storage -- Loads and executes the game's main module -- Provides a container and file access to the game -- Supports hot reload via WebSocket - -Modules -------- - -loader -^^^^^^ - -**Path**: ``src/loader/`` - -Loads game files from the manifest and prepares them for execution. - -.. code-block:: typescript - - async function loadGameFiles( - manifest: IExtendedManifest - ): Promise<[Map, any]> - -Returns a tuple containing: - -1. A map of file paths to local (cached) paths -2. The imported main module - -The loader: - -- Iterates through manifest files -- Caches each file locally -- Dynamically imports ``main.js`` -- Returns the main module's exports - -game -^^^^ - -**Path**: ``src/game/`` - -Handles game execution and window management. - -.. code-block:: typescript - - function runGame( - mainModule: any, - options: Omit - ): void - -- Switches the UI to game mode -- Gets the container element -- Calls the game's ``main()`` function with options - -cache -^^^^^ - -**Path**: ``src/cache/`` - -Manages browser-side caching of game files for offline support and -faster subsequent loads. - -file-system -^^^^^^^^^^^ - -**Path**: ``src/file-system/`` - -Provides a file system abstraction over browser storage APIs (IndexedDB): - -.. code-block:: typescript - - class FileSystemManager { - async getDirectory(path: string): Promise - async getFile(path: string): Promise - } - - class FileSystemDirectory { - async list(): Promise - async create(): Promise - } - - class FileSystemFile { - async read(): Promise - async write(data: Blob): Promise - async exists(): Promise - } - - class FileSystemHandler { - // Low-level storage interface - } - -manifest -^^^^^^^^ - -**Path**: ``src/manifest.ts`` - -Manifest fetching and validation: - -.. code-block:: typescript - - async function getManifest(): Promise - function isManifestUpToDate(manifest: IManifest): boolean - -version -^^^^^^^ - -**Path**: ``src/version/`` - -Manages version tracking for cache invalidation: - -.. code-block:: typescript - - function getVersion(): string | null - function setVersion(version: string): void - -watch -^^^^^ - -**Path**: ``src/watch.ts`` - -WebSocket connection for hot reload notifications. - -window -^^^^^^ - -**Path**: ``src/window.ts`` - -UI state management: - -.. code-block:: typescript - - function setLoadingStatus(status: string): void - function changeWindowToGame(): void - -utils -^^^^^ - -**Path**: ``src/utils/`` - -Utility functions: - -**logger.utils.ts** - -.. code-block:: typescript - - class Logger { - constructor(prefix: string) - info(...args: any[]): void - warn(...args: any[]): void - error(...args: any[]): void - } - -**document.utils.ts** - -.. code-block:: typescript - - function getElementById(id: string): HTMLElement - function addScript(src: string): void - -**delay.utils.ts** - -.. code-block:: typescript - - function delay(ms: number): Promise - -Types ------ - -IManifest -^^^^^^^^^ - -.. code-block:: typescript - - interface IManifest { - version: string; - files: IManifestFile[]; - watch: { enable: false } | { enable: true; url: string }; - } - -IManifestFile -^^^^^^^^^^^^^ - -.. code-block:: typescript - - interface IManifestFile { - path: string; - } - -IExtendedManifest -^^^^^^^^^^^^^^^^^ - -Extended manifest with local file paths after caching: - -.. code-block:: typescript - - interface IExtendedManifest { - files: IExtendedManifestFile[]; - } - -IExtendedManifestFile -^^^^^^^^^^^^^^^^^^^^^ - -.. code-block:: typescript - - interface IExtendedManifestFile extends IManifestFile { - localPath: string; // Local cached path (blob URL or IndexedDB path) - } - -IGameOptions -^^^^^^^^^^^^ - -Options passed to the game's main function: - -.. code-block:: typescript - - interface IGameOptions { - container: HTMLDivElement; - files: Map; - } - -Build Output ------------- - -The website builds to static assets: - -:: - - dist/ - +-- index.html # Main HTML entry point - +-- index.js # Bundled JavaScript - +-- style.css # Styles - +-- assets/ # Static assets - -These files are served by the client loader and consumed by the browser. diff --git a/docs/guides/contributing.mdx b/docs/guides/contributing.mdx new file mode 100644 index 0000000..74fecf5 --- /dev/null +++ b/docs/guides/contributing.mdx @@ -0,0 +1,210 @@ +--- +title: "Contributing" +description: "How to contribute to the NanoForge Loader project." +--- + +## Prerequisites + +- [Node.js](https://nodejs.org/) version 25 +- [pnpm](https://pnpm.io/installation) 10.x +- [Bun](https://bun.sh/) runtime + +## Setup + + + + ```bash + git clone https://github.com//Loader.git + cd Loader + ``` + + + ```bash + git checkout main + ``` + + + ```bash + pnpm install --frozen-lockfile + ``` + + This also sets up Husky git hooks via the `prepare` script. + + + + ```bash + git checkout -b feat/my-feature + ``` + + + +## Development Workflow + +1. Make your changes in the appropriate `apps/` package: + - `apps/client/` — Client loader server + - `apps/server/` — Server loader + - `apps/website/` — Browser interface + +2. Run formatting and lint fixes: + + ```bash + pnpm format + ``` + +3. Build all packages to verify there are no errors: + + ```bash + pnpm build + ``` + +4. Run the full lint check: + + ```bash + pnpm lint + ``` + +## Building Individual Packages + +```bash +# Build website +pnpm --filter @nanoforge-dev/loader-website build + +# Build client +pnpm --filter @nanoforge-dev/loader-client build + +# Build server +pnpm --filter @nanoforge-dev/loader-server build +``` + + + The client package depends on the website package. Build website first when making changes to + both. + + +## Commit Convention + +This project uses [Conventional Commits](https://www.conventionalcommits.org/). +Every commit message must follow this format: + +``` +(): + +[optional body] + +[optional footer(s)] +``` + +### Types + +| Type | Purpose | +| ---------- | ------------------------------------------- | +| `feat` | A new feature | +| `fix` | A bug fix | +| `docs` | Documentation changes | +| `chore` | Maintenance tasks (deps, CI, tooling) | +| `refactor` | Code restructuring without behavior change | +| `perf` | Performance improvements | +| `test` | Adding or updating tests | +| `style` | Code style changes (formatting, whitespace) | + +### Scopes + +| Scope | Package | +| ---------------- | --------------------- | +| `loader-client` | Client loader package | +| `loader-server` | Server loader package | +| `loader-website` | Website package | + +### Examples + +```text +feat(loader-client): add WebSocket reconnection logic +fix(loader-server): correct worker restart on file change +docs: update getting started guide +chore(deps): update bun to v1.2 +``` + +Commit messages are validated by `commitlint` via a git hook. Commits that do not follow the convention are rejected. + +## Pull Request Process + + + ```bash git push origin feat/my-feature ``` + + [Open a pull request](https://github.com/NanoForge-dev/Loader/compare) against the `main` + branch. + + Ensure the CI pipeline passes (lint checks, builds). + Request a review from a maintainer. + Once approved, the PR is merged into `main`. + + +## Code Style + +The project enforces consistent code style through ESLint and Prettier. + +**Naming conventions:** + +- **Files**: kebab-case (`file-system-manager.ts`) +- **Classes**: PascalCase (`FileSystemManager`) +- **Functions**: camelCase (`loadGameFiles`) +- **Constants**: SCREAMING_SNAKE_CASE (`MANIFEST`) +- **Interfaces**: PascalCase with `I` prefix (`IManifest`) + +**Import ordering** (enforced by Prettier plugin): + +1. Node.js built-in modules (`node:path`, `node:fs`) +2. External packages +3. Internal modules (relative imports) + +## Project Structure + +When adding code, follow the existing structure: + +- **Client**: HTTP server logic in `apps/client/src/` +- **Server**: Bootstrap and worker in `apps/server/src/` +- **Website**: Browser modules in `apps/website/src/` + +Each package has its own: + +- `src/` directory for source code +- `package.json` with package-specific scripts +- `CHANGELOG.md` for release notes + +## Dependencies + +Dependencies are managed through pnpm workspace version catalogs defined in +`pnpm-workspace.yaml`. When adding or updating a dependency, use the catalog +reference rather than a direct version: + +```json +{ + "devDependencies": { + "typescript": "catalog:build", + "eslint": "catalog:lint" + } +} +``` + +## Release Process + +Releases are managed using `cliff-jumper`: + +```bash +# Generate changelog and bump version +pnpm --filter @nanoforge-dev/loader-client release +pnpm --filter @nanoforge-dev/loader-server release +pnpm --filter @nanoforge-dev/loader-website release +``` + +Each package maintains its own version and changelog. + +## Reporting Issues + +Report bugs and request features on the +[GitHub Issues](https://github.com/NanoForge-dev/Loader/issues) page. + +## Security + +For security vulnerabilities, refer to the `SECURITY.md` file in the +repository root for the responsible disclosure process. diff --git a/docs/guides/contributing.rst b/docs/guides/contributing.rst deleted file mode 100644 index 26d184a..0000000 --- a/docs/guides/contributing.rst +++ /dev/null @@ -1,249 +0,0 @@ -Contributing -============ - -This guide explains how to contribute to the NanoForge Loader project. - -Prerequisites -------------- - -- `Node.js `_ version 25 -- `pnpm `_ 10.x -- `Bun `_ runtime - -Setup ------ - -1. **Fork and clone** the repository: - - .. code-block:: bash - - git clone https://github.com//Loader.git - cd Loader - -2. **Ensure you are on the main branch**: - - .. code-block:: bash - - git checkout main - -3. **Install dependencies**: - - .. code-block:: bash - - pnpm install --frozen-lockfile - - This also sets up Husky git hooks via the ``prepare`` script. - -4. **Create a feature branch**: - - .. code-block:: bash - - git checkout -b feat/my-feature - -Development Workflow --------------------- - -1. Make your changes in the appropriate ``apps/`` package: - - - ``apps/client/`` - Client loader server - - ``apps/server/`` - Server loader - - ``apps/website/`` - Browser interface - -2. Run formatting and lint fixes: - - .. code-block:: bash - - pnpm format - -3. Build all packages to verify there are no errors: - - .. code-block:: bash - - pnpm build - -4. Run the full lint check: - - .. code-block:: bash - - pnpm lint - -Building Individual Packages ----------------------------- - -To build a specific package: - -.. code-block:: bash - - # Build website - pnpm --filter @nanoforge-dev/loader-website build - - # Build client - pnpm --filter @nanoforge-dev/loader-client build - - # Build server - pnpm --filter @nanoforge-dev/loader-server build - -.. note:: - - The client package depends on the website package. Build website first - when making changes to both. - -Commit Convention ------------------ - -This project uses `Conventional Commits `_. -Every commit message must follow this format: - -:: - - (): - - [optional body] - - [optional footer(s)] - -Valid types: - -.. list-table:: - :header-rows: 1 - :widths: 15 85 - - * - Type - - Purpose - * - ``feat`` - - A new feature - * - ``fix`` - - A bug fix - * - ``docs`` - - Documentation changes - * - ``chore`` - - Maintenance tasks (deps, CI, tooling) - * - ``refactor`` - - Code restructuring without behavior change - * - ``perf`` - - Performance improvements - * - ``test`` - - Adding or updating tests - * - ``style`` - - Code style changes (formatting, whitespace) - -Scopes for this project: - -.. list-table:: - :header-rows: 1 - :widths: 20 80 - - * - Scope - - Package - * - ``loader-client`` - - Client loader package - * - ``loader-server`` - - Server loader package - * - ``loader-website`` - - Website package - -Examples: - -.. code-block:: text - - feat(loader-client): add WebSocket reconnection logic - fix(loader-server): correct worker restart on file change - docs: update getting started guide - chore(deps): update bun to v1.2 - -Commit messages are validated by ``commitlint`` via a git hook. Commits that -do not follow the convention are rejected. - -Pull Request Process --------------------- - -1. Push your branch to your fork: - - .. code-block:: bash - - git push origin feat/my-feature - -2. `Open a pull request `_ - against the ``main`` branch. - -3. Ensure the CI pipeline passes (lint checks, builds). - -4. Request a review from a maintainer. - -5. Once approved, the PR is merged into ``main``. - -Code Style ----------- - -The project enforces consistent code style through ESLint and Prettier. - -Naming conventions: - -- **Files**: kebab-case (``file-system-manager.ts``) -- **Classes**: PascalCase (``FileSystemManager``) -- **Functions**: camelCase (``loadGameFiles``) -- **Constants**: SCREAMING_SNAKE_CASE (``MANIFEST``) -- **Interfaces**: PascalCase with ``I`` prefix (``IManifest``) - -Import ordering (enforced by Prettier plugin): - -1. Node.js built-in modules (``node:path``, ``node:fs``) -2. External packages -3. Internal modules (relative imports) - -Project Structure ------------------ - -When adding code, follow the existing structure: - -- **Client**: HTTP server logic in ``apps/client/src/`` -- **Server**: Bootstrap and worker in ``apps/server/src/`` -- **Website**: Browser modules in ``apps/website/src/`` - -Each package has its own: - -- ``src/`` directory for source code -- ``package.json`` with package-specific scripts -- ``CHANGELOG.md`` for release notes - -Dependencies ------------- - -Dependencies are managed through pnpm workspace version catalogs defined in -``pnpm-workspace.yaml``. When adding or updating a dependency, use the catalog -reference rather than a direct version: - -.. code-block:: json - - { - "devDependencies": { - "typescript": "catalog:build", - "eslint": "catalog:lint" - } - } - -Release Process ---------------- - -Releases are managed using ``cliff-jumper``: - -.. code-block:: bash - - # Generate changelog and bump version - pnpm --filter @nanoforge-dev/loader-client release - pnpm --filter @nanoforge-dev/loader-server release - pnpm --filter @nanoforge-dev/loader-website release - -Each package maintains its own version and changelog. - -Reporting Issues ----------------- - -Report bugs and request features on the -`GitHub Issues `_ page. - -Security --------- - -For security vulnerabilities, refer to the ``SECURITY.md`` file in the -repository root for the responsible disclosure process. diff --git a/docs/guides/getting-started.mdx b/docs/guides/getting-started.mdx new file mode 100644 index 0000000..22964db --- /dev/null +++ b/docs/guides/getting-started.mdx @@ -0,0 +1,196 @@ +--- +title: "Getting Started" +description: "How to use the NanoForge Loader packages to run NanoForge game engine projects." +--- + +## Prerequisites + +- [Node.js](https://nodejs.org/) version 25 or later +- [Bun](https://bun.sh/) runtime (for client loader) +- A package manager: npm, yarn, pnpm, or bun + +## Installation + +Install the loader packages as dependencies in your project: + + + +```bash npm +npm install @nanoforge-dev/loader-client @nanoforge-dev/loader-server +``` + +```bash pnpm +pnpm add @nanoforge-dev/loader-client @nanoforge-dev/loader-server +``` + +```bash yarn +yarn add @nanoforge-dev/loader-client @nanoforge-dev/loader-server +``` + +```bash bun +bun add @nanoforge-dev/loader-client @nanoforge-dev/loader-server +``` + + + +## Running the Client Loader + +The client loader serves your game in a browser environment. + +### Basic Usage + +Set the required environment variables and start the loader: + +```bash +export PORT=3000 +export GAME_DIR=/path/to/your/game +pnpm --filter @nanoforge-dev/loader-client start +``` + +Open `http://localhost:3000` in your browser to load and play the game. + +### With Hot Reload + +Enable hot reload for development: + +```bash +export PORT=3000 +export GAME_DIR=/path/to/your/game +export WATCH=true +export WATCH_PORT=3001 +pnpm --filter @nanoforge-dev/loader-client start +``` + +The browser will automatically reload when game files change. + +### Environment Variables + +| Variable | Description | +| ----------------------- | -------------------------------------------------------- | +| `PORT` | HTTP server port (required) | +| `GAME_DIR` | Path to game directory (required) | +| `WATCH` | Set to `"true"` to enable hot reload | +| `WATCH_PORT` | WebSocket port for hot reload notifications | +| `WATCH_SERVER_GAME_DIR` | Server game directory for watch coordination | +| `PUBLIC_*` | Any `PUBLIC_` prefixed variable is exposed to the client | + +## Running the Server Loader + +The server loader executes your game's server-side logic. + +### Basic Usage + +Set the game directory and start the loader: + +```bash +export GAME_DIR=/path/to/your/game +pnpm --filter @nanoforge-dev/loader-server start +``` + +The server will locate `main.js` in your game directory and execute it in a worker thread. + +### With Hot Reload + +Enable hot reload for development: + +```bash +export GAME_DIR=/path/to/your/game +export WATCH=1 +pnpm --filter @nanoforge-dev/loader-server start +``` + +The worker will restart when game files change. + +### Game Entry Point + +Your game must have a `main.js` file that exports a `main` function: + +```javascript +// main.js +export async function main(options) { + const files = options.files; + console.log("Server started with files:", [...files.keys()]); + + // Your game server logic here +} +``` + +The `options.files` map contains all game files with their paths. + +## Project Structure + +A typical NanoForge game project structure: + +``` +my-game/ ++-- main.js # Entry point (exports main function) ++-- assets/ +| +-- sprites/ +| +-- sounds/ +| +-- config.json ++-- components/ ++-- systems/ ++-- package.json +``` + +The loader will include all files in the manifest and make them available to your game code. + +## Using with NanoForge CLI + +The loader is typically invoked through the NanoForge CLI rather than directly: + +```bash +# Run client (browser) game +nanoforge run --part client + +# Run server game +nanoforge run --part server + +# Development mode with hot reload +nanoforge dev +``` + +The CLI handles environment variable setup and loader invocation. + +## Typical Development Workflow + + + + ```bash schematics @nanoforge-dev/schematics:application my-game ``` + + ```bash cd my-game pnpm install ``` + + ```bash schematics @nanoforge-dev/schematics:part-base my-game --part=client ``` + + + ```bash schematics @nanoforge-dev/schematics:part-main my-game --part=client ``` + + ```bash pnpm build ``` + + ```bash export PORT=3000 export GAME_DIR=$(pwd)/dist/client export WATCH=true pnpm --filter + @nanoforge-dev/loader-client start ``` + + Navigate to `http://localhost:3000` to play your game. + + +## Troubleshooting + + + + Set the `PORT` environment variable before starting the client loader. + + + Set the `GAME_DIR` environment variable to your game's build output directory. + + + Ensure your game directory contains a `main.js` file that exports a `main` function. + + + Check the browser console for errors. Ensure the game was built correctly and all assets are + present in the game directory. + + + Verify `WATCH=true` is set and the `WATCH_PORT` is available. Check that no firewall is blocking + WebSocket connections. + + diff --git a/docs/guides/getting-started.rst b/docs/guides/getting-started.rst deleted file mode 100644 index 13b9d66..0000000 --- a/docs/guides/getting-started.rst +++ /dev/null @@ -1,242 +0,0 @@ -Getting Started -=============== - -This guide explains how to use the NanoForge Loader packages to run -NanoForge game engine projects. - -Prerequisites -------------- - -- `Node.js `_ version 25 or later -- `Bun `_ runtime (for client loader) -- A package manager: npm, yarn, pnpm, or bun - -Installation ------------- - -Install the loader packages as dependencies in your project: - -.. code-block:: bash - - # npm - npm install @nanoforge-dev/loader-client @nanoforge-dev/loader-server - - # pnpm - pnpm add @nanoforge-dev/loader-client @nanoforge-dev/loader-server - - # yarn - yarn add @nanoforge-dev/loader-client @nanoforge-dev/loader-server - - # bun - bun add @nanoforge-dev/loader-client @nanoforge-dev/loader-server - -Running the Client Loader -------------------------- - -The client loader serves your game in a browser environment. - -Basic Usage -^^^^^^^^^^^ - -Set the required environment variables and start the loader: - -.. code-block:: bash - - export PORT=3000 - export GAME_DIR=/path/to/your/game - pnpm --filter @nanoforge-dev/loader-client start - -Open ``http://localhost:3000`` in your browser to load and play the game. - -With Hot Reload -^^^^^^^^^^^^^^^ - -Enable hot reload for development: - -.. code-block:: bash - - export PORT=3000 - export GAME_DIR=/path/to/your/game - export WATCH=true - export WATCH_PORT=3001 - pnpm --filter @nanoforge-dev/loader-client start - -The browser will automatically reload when game files change. - -Environment Variables -^^^^^^^^^^^^^^^^^^^^^ - -.. list-table:: - :header-rows: 1 - :widths: 25 75 - - * - Variable - - Description - * - ``PORT`` - - HTTP server port (required) - * - ``GAME_DIR`` - - Path to game directory (required) - * - ``WATCH`` - - Set to ``"true"`` to enable hot reload - * - ``WATCH_PORT`` - - WebSocket port for hot reload notifications - * - ``WATCH_SERVER_GAME_DIR`` - - Server game directory for watch coordination - * - ``PUBLIC_*`` - - Any ``PUBLIC_`` prefixed variable is exposed to the client - -Running the Server Loader -------------------------- - -The server loader executes your game's server-side logic. - -Basic Usage -^^^^^^^^^^^ - -Set the game directory and start the loader: - -.. code-block:: bash - - export GAME_DIR=/path/to/your/game - pnpm --filter @nanoforge-dev/loader-server start - -The server will locate ``main.js`` in your game directory and execute it -in a worker thread. - -With Hot Reload -^^^^^^^^^^^^^^^ - -Enable hot reload for development: - -.. code-block:: bash - - export GAME_DIR=/path/to/your/game - export WATCH=1 - pnpm --filter @nanoforge-dev/loader-server start - -The worker will restart when game files change. - -Game Entry Point -^^^^^^^^^^^^^^^^ - -Your game must have a ``main.js`` file that exports a ``main`` function: - -.. code-block:: javascript - - // main.js - export async function main(options) { - const files = options.files; - console.log("Server started with files:", [...files.keys()]); - - // Your game server logic here - } - -The ``options.files`` map contains all game files with their paths. - -Project Structure ------------------ - -A typical NanoForge game project structure: - -:: - - my-game/ - +-- main.js # Entry point (exports main function) - +-- assets/ - | +-- sprites/ - | +-- sounds/ - | +-- config.json - +-- components/ - +-- systems/ - +-- package.json - -The loader will include all files in the manifest and make them available -to your game code. - -Using with NanoForge CLI ------------------------- - -The loader is typically invoked through the NanoForge CLI rather than -directly: - -.. code-block:: bash - - # Run client (browser) game - nanoforge run --part client - - # Run server game - nanoforge run --part server - - # Development mode with hot reload - nanoforge dev - -The CLI handles environment variable setup and loader invocation. - -Typical Development Workflow ----------------------------- - -1. **Create a NanoForge project** using schematics: - - .. code-block:: bash - - schematics @nanoforge-dev/schematics:application my-game - -2. **Install dependencies**: - - .. code-block:: bash - - cd my-game - pnpm install - -3. **Generate client base code**: - - .. code-block:: bash - - schematics @nanoforge-dev/schematics:part-base my-game --part=client - -4. **Generate main entry point**: - - .. code-block:: bash - - schematics @nanoforge-dev/schematics:part-main my-game --part=client - -5. **Build your game**: - - .. code-block:: bash - - pnpm build - -6. **Run in development mode** with hot reload: - - .. code-block:: bash - - export PORT=3000 - export GAME_DIR=$(pwd)/dist/client - export WATCH=true - pnpm --filter @nanoforge-dev/loader-client start - -7. **Open the browser** at ``http://localhost:3000`` to play your game. - -Troubleshooting ---------------- - -Common issues and solutions: - -**"PORT env variable not found"** - Set the ``PORT`` environment variable before starting the client loader. - -**"GAME_DIR env variable not found"** - Set the ``GAME_DIR`` environment variable to your game's build output - directory. - -**"No main.js found"** - Ensure your game directory contains a ``main.js`` file that exports - a ``main`` function. - -**Game not loading in browser** - Check the browser console for errors. Ensure the game was built - correctly and all assets are present in the game directory. - -**Hot reload not working** - Verify ``WATCH=true`` is set and the ``WATCH_PORT`` is available. - Check that no firewall is blocking WebSocket connections. diff --git a/docs/guides/index.mdx b/docs/guides/index.mdx new file mode 100644 index 0000000..de53b74 --- /dev/null +++ b/docs/guides/index.mdx @@ -0,0 +1,13 @@ +--- +title: "Guides" +description: "Step-by-step guides for using and contributing to NanoForge Loader." +--- + + + + Install the loader packages and run your first NanoForge game in browser or server mode. + + + Set up a local dev environment, follow the commit convention, and open a pull request. + + diff --git a/docs/guides/index.rst b/docs/guides/index.rst deleted file mode 100644 index f5b5208..0000000 --- a/docs/guides/index.rst +++ /dev/null @@ -1,8 +0,0 @@ -Guides -====== - -.. toctree:: - :maxdepth: 2 - - getting-started - contributing diff --git a/docs/index.rst b/docs/index.rst deleted file mode 100644 index afac8c1..0000000 --- a/docs/index.rst +++ /dev/null @@ -1,24 +0,0 @@ -NanoForge Loader -================ - -``@nanoforge-dev/loader`` provides runtime loaders for the NanoForge game engine. -It enables serving, loading, and executing NanoForge games in both browser and -server environments with hot-reload support for development. - -The project consists of three packages: - -- **loader-client**: Browser-based loader with web interface -- **loader-server**: Server-side loader with worker thread support -- **loader-website**: Interactive web interface for game loading - -.. toctree:: - :maxdepth: 2 - :caption: Technical Documentation - - docs/index - -.. toctree:: - :maxdepth: 2 - :caption: Guides - - guides/index diff --git a/package.json b/package.json index d28d402..6035313 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,7 @@ "turbo": "catalog:build", "typescript": "catalog:build" }, - "packageManager": "pnpm@10.28.1", + "packageManager": "pnpm@11.5.1", "engines": { "node": "25" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 23644b2..6841b22 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,40 +7,40 @@ settings: catalogs: build: turbo: - specifier: ^2.9.4 - version: 2.9.4 + specifier: ^2.9.16 + version: 2.9.16 typescript: - specifier: ^5.9.3 - version: 5.9.3 + specifier: ^6.0.3 + version: 6.0.3 ci: '@commitlint/cli': - specifier: ^20.5.0 - version: 20.5.0 + specifier: ^21.0.2 + version: 21.0.2 '@commitlint/config-conventional': - specifier: ^20.5.0 - version: 20.5.0 + specifier: ^21.0.2 + version: 21.0.2 '@favware/cliff-jumper': specifier: ^6.0.0 - version: 6.0.0 + version: 6.1.0 '@nanoforge-dev/actions': - specifier: ^1.2.3 - version: 1.2.3 + specifier: ^2.1.2 + version: 2.1.2 husky: specifier: ^9.1.7 version: 9.1.7 lint-staged: - specifier: ^16.4.0 - version: 16.4.0 + specifier: ^17.0.7 + version: 17.0.7 core: '@types/bun': - specifier: ^1.3.13 - version: 1.3.13 + specifier: ^1.3.14 + version: 1.3.14 '@types/node': - specifier: ^25.5.2 - version: 25.5.2 + specifier: ^25.9.1 + version: 25.9.1 bun: specifier: ^1.3.13 - version: 1.3.13 + version: 1.3.14 commander: specifier: ^14.0.3 version: 14.0.3 @@ -55,11 +55,11 @@ catalogs: specifier: ^6.0.2 version: 6.0.2 eslint: - specifier: ^10.2.0 - version: 10.2.0 + specifier: ^10.4.1 + version: 10.4.1 prettier: - specifier: ^3.8.1 - version: 3.8.1 + specifier: ^3.8.3 + version: 3.8.3 importers: @@ -67,46 +67,46 @@ importers: devDependencies: '@commitlint/cli': specifier: catalog:ci - version: 20.5.0(@types/node@25.5.2)(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.3.0)(typescript@5.9.3) + version: 21.0.2(@types/node@25.9.1)(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0)(typescript@6.0.3) '@commitlint/config-conventional': specifier: catalog:ci - version: 20.5.0 + version: 21.0.2 '@nanoforge-dev/actions': specifier: catalog:ci - version: 1.2.3 + version: 2.1.2 '@nanoforge-dev/utils-eslint-config': specifier: catalog:lint - version: 1.0.2(@types/eslint@9.6.1)(eslint@10.2.0(jiti@2.6.1))(prettier@3.8.1)(typescript@5.9.3) + version: 1.0.2(@types/eslint@9.6.1)(eslint@10.4.1(jiti@2.6.1))(prettier@3.8.3)(typescript@6.0.3) '@nanoforge-dev/utils-prettier-config': specifier: catalog:lint version: 1.0.2 '@trivago/prettier-plugin-sort-imports': specifier: catalog:lint - version: 6.0.2(prettier@3.8.1) + version: 6.0.2(prettier@3.8.3) '@types/bun': specifier: catalog:core - version: 1.3.13 + version: 1.3.14 '@types/node': specifier: catalog:core - version: 25.5.2 + version: 25.9.1 eslint: specifier: catalog:lint - version: 10.2.0(jiti@2.6.1) + version: 10.4.1(jiti@2.6.1) husky: specifier: catalog:ci version: 9.1.7 lint-staged: specifier: catalog:ci - version: 16.4.0 + version: 17.0.7 prettier: specifier: catalog:lint - version: 3.8.1 + version: 3.8.3 turbo: specifier: catalog:build - version: 2.9.4 + version: 2.9.16 typescript: specifier: catalog:build - version: 5.9.3 + version: 6.0.3 apps/client: dependencies: @@ -115,35 +115,35 @@ importers: version: link:../website bun: specifier: catalog:core - version: 1.3.13 + version: 1.3.14 commander: specifier: catalog:core version: 14.0.3 devDependencies: '@favware/cliff-jumper': specifier: catalog:ci - version: 6.0.0 + version: 6.1.0 '@nanoforge-dev/utils-eslint-config': specifier: catalog:lint - version: 1.0.2(@types/eslint@9.6.1)(eslint@10.2.0(jiti@2.6.1))(prettier@3.8.1)(typescript@5.9.3) + version: 1.0.2(@types/eslint@9.6.1)(eslint@10.4.1(jiti@2.6.1))(prettier@3.8.3)(typescript@6.0.3) '@nanoforge-dev/utils-prettier-config': specifier: catalog:lint version: 1.0.2 '@trivago/prettier-plugin-sort-imports': specifier: catalog:lint - version: 6.0.2(prettier@3.8.1) + version: 6.0.2(prettier@3.8.3) '@types/bun': specifier: catalog:core - version: 1.3.13 + version: 1.3.14 eslint: specifier: catalog:lint - version: 10.2.0(jiti@2.6.1) + version: 10.4.1(jiti@2.6.1) prettier: specifier: catalog:lint - version: 3.8.1 + version: 3.8.3 typescript: specifier: catalog:build - version: 5.9.3 + version: 6.0.3 apps/server: dependencies: @@ -153,203 +153,260 @@ importers: devDependencies: '@favware/cliff-jumper': specifier: catalog:ci - version: 6.0.0 + version: 6.1.0 '@nanoforge-dev/utils-eslint-config': specifier: catalog:lint - version: 1.0.2(@types/eslint@9.6.1)(eslint@10.2.0(jiti@2.6.1))(prettier@3.8.1)(typescript@5.9.3) + version: 1.0.2(@types/eslint@9.6.1)(eslint@10.4.1(jiti@2.6.1))(prettier@3.8.3)(typescript@6.0.3) '@nanoforge-dev/utils-prettier-config': specifier: catalog:lint version: 1.0.2 '@trivago/prettier-plugin-sort-imports': specifier: catalog:lint - version: 6.0.2(prettier@3.8.1) + version: 6.0.2(prettier@3.8.3) bun: specifier: catalog:core - version: 1.3.13 + version: 1.3.14 eslint: specifier: catalog:lint - version: 10.2.0(jiti@2.6.1) + version: 10.4.1(jiti@2.6.1) prettier: specifier: catalog:lint - version: 3.8.1 + version: 3.8.3 typescript: specifier: catalog:build - version: 5.9.3 + version: 6.0.3 apps/website: devDependencies: '@favware/cliff-jumper': specifier: catalog:ci - version: 6.0.0 + version: 6.1.0 '@nanoforge-dev/utils-eslint-config': specifier: catalog:lint - version: 1.0.2(@types/eslint@9.6.1)(eslint@10.2.0(jiti@2.6.1))(prettier@3.8.1)(typescript@5.9.3) + version: 1.0.2(@types/eslint@9.6.1)(eslint@10.4.1(jiti@2.6.1))(prettier@3.8.3)(typescript@6.0.3) '@nanoforge-dev/utils-prettier-config': specifier: catalog:lint version: 1.0.2 '@trivago/prettier-plugin-sort-imports': specifier: catalog:lint - version: 6.0.2(prettier@3.8.1) + version: 6.0.2(prettier@3.8.3) '@types/bun': specifier: catalog:core - version: 1.3.13 + version: 1.3.14 bun: specifier: catalog:core - version: 1.3.13 + version: 1.3.14 eslint: specifier: catalog:lint - version: 10.2.0(jiti@2.6.1) + version: 10.4.1(jiti@2.6.1) prettier: specifier: catalog:lint - version: 3.8.1 + version: 3.8.3 typescript: specifier: catalog:build - version: 5.9.3 + version: 6.0.3 packages: - '@actions/core@3.0.0': - resolution: {integrity: sha512-zYt6cz+ivnTmiT/ksRVriMBOiuoUpDCJJlZ5KPl2/FRdvwU3f7MPh9qftvbkXJThragzUZieit2nyHUyw53Seg==} + '@actions/core@3.0.1': + resolution: {integrity: sha512-a6d/Nwahm9fliVGRhdhofo40HjHQasUPusmc7vBfyky+7Z+P2A1J68zyFVaNcEclc/Se+eO595oAr5nwEIoIUA==} '@actions/exec@3.0.0': resolution: {integrity: sha512-6xH/puSoNBXb72VPlZVm7vQ+svQpFyA96qdDBvhB8eNZOE8LtPf9L4oAsfzK/crCL8YZ+19fKYVnM63Sl+Xzlw==} - '@actions/github@9.0.0': - resolution: {integrity: sha512-yJ0RoswsAaKcvkmpCE4XxBRiy/whH2SdTBHWzs0gi4wkqTDhXMChjSdqBz/F4AeiDlP28rQqL33iHb+kjAMX6w==} + '@actions/github@9.1.1': + resolution: {integrity: sha512-tL5JbYOBZHc0ngEnCsaDcryUizIUIlQyIMwy1Wkx93H5HzbBJ7TbiPx2PnFjBwZW0Vh05JmfFZhecE6gglYegA==} '@actions/http-client@3.0.2': resolution: {integrity: sha512-JP38FYYpyqvUsz+Igqlc/JG6YO9PaKuvqjM3iGvaLqFnJ7TFmcLyy2IDrY0bI0qCQug8E9K+elv5ZNfw62ZJzA==} - '@actions/http-client@4.0.0': - resolution: {integrity: sha512-QuwPsgVMsD6qaPD57GLZi9sqzAZCtiJT8kVBCDpLtxhL5MydQ4gS+DrejtZZPdIYyB1e95uCK9Luyds7ybHI3g==} + '@actions/http-client@4.0.1': + resolution: {integrity: sha512-+Nvd1ImaOZBSoPbsUtEhv+1z99H12xzncCkz0a3RuehINE81FZSe2QTj3uvAPTcJX/SCzUQHQ0D1GrPMbrPitg==} '@actions/io@3.0.2': resolution: {integrity: sha512-nRBchcMM+QK1pdjO7/idu86rbJI5YHUKCvKs0KxnSYbVe3F51UfGxuZX4Qy/fWlp6l7gWFwIkrOzN+oUK03kfw==} - '@babel/code-frame@7.29.0': - resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==} + '@babel/code-frame@7.29.7': + resolution: {integrity: sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==} engines: {node: '>=6.9.0'} - '@babel/generator@7.29.1': - resolution: {integrity: sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==} + '@babel/generator@7.29.7': + resolution: {integrity: sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==} engines: {node: '>=6.9.0'} - '@babel/helper-globals@7.28.0': - resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} + '@babel/helper-globals@7.29.7': + resolution: {integrity: sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==} engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@7.27.1': - resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} + '@babel/helper-string-parser@7.29.7': + resolution: {integrity: sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.28.5': - resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} + '@babel/helper-validator-identifier@7.29.7': + resolution: {integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==} engines: {node: '>=6.9.0'} - '@babel/parser@7.29.0': - resolution: {integrity: sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==} + '@babel/parser@7.29.7': + resolution: {integrity: sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==} engines: {node: '>=6.0.0'} hasBin: true - '@babel/template@7.28.6': - resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==} + '@babel/template@7.29.7': + resolution: {integrity: sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.29.0': - resolution: {integrity: sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==} + '@babel/traverse@7.29.7': + resolution: {integrity: sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==} engines: {node: '>=6.9.0'} - '@babel/types@7.29.0': - resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} + '@babel/types@7.29.7': + resolution: {integrity: sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==} engines: {node: '>=6.9.0'} - '@commitlint/cli@20.5.0': - resolution: {integrity: sha512-yNkyN/tuKTJS3wdVfsZ2tXDM4G4Gi7z+jW54Cki8N8tZqwKBltbIvUUrSbT4hz1bhW/h0CdR+5sCSpXD+wMKaQ==} + '@commitlint/cli@20.5.3': + resolution: {integrity: sha512-OJdL0EXWD5y9LPa0nr/geOwzaS8BsdaybKkcloB0JgsguGxNv2R+hC2FTPqrAcprg35zF33KOQerY0x8W1aesA==} engines: {node: '>=v18'} hasBin: true - '@commitlint/config-conventional@20.5.0': - resolution: {integrity: sha512-t3Ni88rFw1XMa4nZHgOKJ8fIAT9M2j5TnKyTqJzsxea7FUetlNdYFus9dz+MhIRZmc16P0PPyEfh6X2d/qw8SA==} + '@commitlint/cli@21.0.2': + resolution: {integrity: sha512-YMmfLbqBg+ZRvvmPhc+cilSQFrh/AgzVgCT1U/OifmUZEwPbvCtA8rN//YNaF9d5eoZphxVMGYtmwA2QgQORgg==} + engines: {node: '>=22.12.0'} + hasBin: true + + '@commitlint/config-conventional@20.5.3': + resolution: {integrity: sha512-j34Qqeaa152chJgz2ysyk0BCpHenJn1lV0Rx0VXf8k3ccQcED+48EZrzMvo9jLmJUyBrrBwvu89I+2er4gW7QQ==} engines: {node: '>=v18'} + '@commitlint/config-conventional@21.0.2': + resolution: {integrity: sha512-P/ZRhryQmkj0Z0dY9FOoRwe3xkwJyyAdtXwt01NT2kuZttcG2CNYp1q5Ci3u+nDT2jcbJRw2kt13Czl1qKNPfg==} + engines: {node: '>=22.12.0'} + '@commitlint/config-validator@20.5.0': resolution: {integrity: sha512-T/Uh6iJUzyx7j35GmHWdIiGRQB+ouZDk0pwAaYq4SXgB54KZhFdJ0vYmxiW6AMYICTIWuyMxDBl1jK74oFp/Gw==} engines: {node: '>=v18'} - '@commitlint/ensure@20.5.0': - resolution: {integrity: sha512-IpHqAUesBeW1EDDdjzJeaOxU9tnogLAyXLRBn03SHlj1SGENn2JGZqSWGkFvBJkJzfXAuCNtsoYzax+ZPS+puw==} + '@commitlint/config-validator@21.0.1': + resolution: {integrity: sha512-Zd2UFdndeMMaW2O96HK0tdfT4gOImUvidMpAd/pws2zZ4m1nrAZ/9b/v2JYuE8fs86GpXv9F7LNaIuCIWhY+pA==} + engines: {node: '>=22.12.0'} + + '@commitlint/ensure@20.5.3': + resolution: {integrity: sha512-4i4AgNvH62owG9MwSiWKrle7HGNpBHHdLnWFIp5fTsHUYe5kRuh15t08L/0pdbbrRk8JKXQxxN4hZQcn+szkrw==} engines: {node: '>=v18'} + '@commitlint/ensure@21.0.1': + resolution: {integrity: sha512-jJ1037967wU7YN/xkv+iRlOBlmaOXPhPO5KQSqya6GyXzBlwuLzELBFao16DVg9dZyqmNrhewzwZ3SAibetHBQ==} + engines: {node: '>=22.12.0'} + '@commitlint/execute-rule@20.0.0': resolution: {integrity: sha512-xyCoOShoPuPL44gVa+5EdZsBVao/pNzpQhkzq3RdtlFdKZtjWcLlUFQHSWBuhk5utKYykeJPSz2i8ABHQA+ZZw==} engines: {node: '>=v18'} + '@commitlint/execute-rule@21.0.1': + resolution: {integrity: sha512-RifH+FmImozKBE6mozhF4K3r2RRKP7SMi/Q/zLCmExtp5e05lhHOUYqGBlFBAGNHaZxU/WYw1XuugYK9jQzqnA==} + engines: {node: '>=22.12.0'} + '@commitlint/format@20.5.0': resolution: {integrity: sha512-TI9EwFU/qZWSK7a5qyXMpKPPv3qta7FO4tKW+Wt2al7sgMbLWTsAcDpX1cU8k16TRdsiiet9aOw0zpvRXNJu7Q==} engines: {node: '>=v18'} + '@commitlint/format@21.0.1': + resolution: {integrity: sha512-ksmG2+cHGtuDPQQbhBbC4unwm444+6TiPw0d1bKf67hntgZqZ8E0g1MuYKUuyT5IH4IMmXZhKq22/Z3jBvtQIw==} + engines: {node: '>=22.12.0'} + '@commitlint/is-ignored@20.5.0': resolution: {integrity: sha512-JWLarAsurHJhPozbuAH6GbP4p/hdOCoqS9zJMfqwswne+/GPs5V0+rrsfOkP68Y8PSLphwtFXV0EzJ+GTXTTGg==} engines: {node: '>=v18'} - '@commitlint/lint@20.5.0': - resolution: {integrity: sha512-jiM3hNUdu04jFBf1VgPdjtIPvbuVfDTBAc6L98AWcoLjF5sYqkulBHBzlVWll4rMF1T5zeQFB6r//a+s+BBKlA==} + '@commitlint/is-ignored@21.0.2': + resolution: {integrity: sha512-H5z4t8PC9tUsmZ/o+EptM3Nq8sTFtskAShdcqxCoyzklW5eaVT5xbrDAET2uypzir9Vsj4ZZmBtyKjYe2XqgeQ==} + engines: {node: '>=22.12.0'} + + '@commitlint/lint@20.5.3': + resolution: {integrity: sha512-M7JbWBNr2gXKaPc4i/KipsuW1gkDHpj35KPjWtKy3Z+2AQw5wu1gBi1LIO0uoaij67CqY4K8PxPZSGens4evCw==} engines: {node: '>=v18'} - '@commitlint/load@20.5.0': - resolution: {integrity: sha512-sLhhYTL/KxeOTZjjabKDhwidGZan84XKK1+XFkwDYL/4883kIajcz/dZFAhBJmZPtL8+nBx6bnkzA95YxPeDPw==} + '@commitlint/lint@21.0.2': + resolution: {integrity: sha512-PnUmLYGeGLfW8oVatR9KpNxSHYAnJOEWlMZzfdeFOUq6WUrFx1fGQaWCWJqMoIll/xPM+GdfJV+tKHZVHhl0Fg==} + engines: {node: '>=22.12.0'} + + '@commitlint/load@20.5.3': + resolution: {integrity: sha512-1FDZWuKyu98Myb8i7Tp31jPU2rZpOwAdYRyJcy2KoGg7Xk2A+bgHN8smhMaaNSNkmE8fwt53BokywZq8Gv/5XQ==} engines: {node: '>=v18'} + '@commitlint/load@21.0.2': + resolution: {integrity: sha512-lwUE70hN0/qE/ZRROhbaX65ly/FF12DrqfReLCESo37M0OQCFAf2jRS+2tSCSORq+bm4Kdju7qNDj46uc1QzTA==} + engines: {node: '>=22.12.0'} + '@commitlint/message@20.4.3': resolution: {integrity: sha512-6akwCYrzcrFcTYz9GyUaWlhisY4lmQ3KvrnabmhoeAV8nRH4dXJAh4+EUQ3uArtxxKQkvxJS78hNX2EU3USgxQ==} engines: {node: '>=v18'} + '@commitlint/message@21.0.2': + resolution: {integrity: sha512-5n4aqHGD/FNnom/D5L8i7cYtV+xjuXcBL832C3w9VglEsZzIsoHpJsvxzJ7cgiOsOdc/2jU4t5+7qMHh7GBX3g==} + engines: {node: '>=22.12.0'} + '@commitlint/parse@20.5.0': resolution: {integrity: sha512-SeKWHBMk7YOTnnEWUhx+d1a9vHsjjuo6Uo1xRfPNfeY4bdYFasCH1dDpAv13Lyn+dDPOels+jP6D2GRZqzc5fA==} engines: {node: '>=v18'} + '@commitlint/parse@21.0.2': + resolution: {integrity: sha512-QVZJhGHTm+oiuWyEKOCTQ0ZM3mfJ0eGWFeHuj7WzSKEth+UukcCHac9GD8pgdFlg/qGkFWOtyaNd1T8REgagaw==} + engines: {node: '>=22.12.0'} + '@commitlint/read@20.5.0': resolution: {integrity: sha512-JDEIJ2+GnWpK8QqwfmW7O42h0aycJEWNqcdkJnyzLD11nf9dW2dWLTVEa8Wtlo4IZFGLPATjR5neA5QlOvIH1w==} engines: {node: '>=v18'} - '@commitlint/resolve-extends@20.5.0': - resolution: {integrity: sha512-3SHPWUW2v0tyspCTcfSsYml0gses92l6TlogwzvM2cbxDgmhSRc+fldDjvGkCXJrjSM87BBaWYTPWwwyASZRrg==} + '@commitlint/read@21.0.2': + resolution: {integrity: sha512-BtsrnLVycSSKf4Q0gMch4giCj5NNlmcbhc8ra5vONgGtP2IjRDo33bEFtr5Pm+2N+5fXGWb2MksWPrspPfdhdw==} + engines: {node: '>=22.12.0'} + + '@commitlint/resolve-extends@20.5.3': + resolution: {integrity: sha512-+ogW9v/u9JqpvAgTrLra/YTFo0KkjU6iNblF89pPsj4NebNc+DAWctsludwezI8YnsjBmfHpApSwcXprN/f/ew==} engines: {node: '>=v18'} - '@commitlint/rules@20.5.0': - resolution: {integrity: sha512-5NdQXQEdnDPT5pK8O39ZA7HohzPRHEsDGU23cyVCNPQy4WegAbAwrQk3nIu7p2sl3dutPk8RZd91yKTrMTnRkQ==} + '@commitlint/resolve-extends@21.0.1': + resolution: {integrity: sha512-0DhjYWL6uYrY16Efa032fYk3woGJDU4AGWiG1XXltT9AMUNYKyb5cIZU2ivbaMZ3+kKFqUjikD2cjh66Sbh/Sg==} + engines: {node: '>=22.12.0'} + + '@commitlint/rules@20.5.3': + resolution: {integrity: sha512-MPlMnb9D3wbszYMp+1hPtuhtPJndRo6I6yfkZVA4+jR8w7Kqp0u2u/Y+gzbaItx5Lltq5rw7FSZQWJMoXUC4NQ==} engines: {node: '>=v18'} + '@commitlint/rules@21.0.2': + resolution: {integrity: sha512-k6tQ69Td7t2qUSIbik8D3TL1q3ZJpkEbV+yLogDzCRAdOxJm4ndhtBNREsLA1/puRfWvzS9eioF2w43WT+hHgQ==} + engines: {node: '>=22.12.0'} + '@commitlint/to-lines@20.0.0': resolution: {integrity: sha512-2l9gmwiCRqZNWgV+pX1X7z4yP0b3ex/86UmUFgoRt672Ez6cAM2lOQeHFRUTuE6sPpi8XBCGnd8Kh3bMoyHwJw==} engines: {node: '>=v18'} + '@commitlint/to-lines@21.0.1': + resolution: {integrity: sha512-bd1BFII7p1EQZre9Kaj+kKaMFP3cFCdt21K7DItVux9XP5WjLgJ0/Uy1pJJh9aPwVJ6SKg62PxqlZaHI8hQAXw==} + engines: {node: '>=22.12.0'} + '@commitlint/top-level@20.4.3': resolution: {integrity: sha512-qD9xfP6dFg5jQ3NMrOhG0/w5y3bBUsVGyJvXxdWEwBm8hyx4WOk3kKXw28T5czBYvyeCVJgJJ6aoJZUWDpaacQ==} engines: {node: '>=v18'} + '@commitlint/top-level@21.0.2': + resolution: {integrity: sha512-s9KKM+e+mXgFeIh4n7KmOGAVT3mkJ3Fp1bBYHIK5pjeUwlEMzp/tZfb5u0Poa680AsQTXMEMRxZi1vQ9m2X5ug==} + engines: {node: '>=22.12.0'} + '@commitlint/types@20.5.0': resolution: {integrity: sha512-ZJoS8oSq2CAZEpc/YI9SulLrdiIyXeHb/OGqGrkUP6Q7YV+0ouNAa7GjqRdXeQPncHQIDz/jbCTlHScvYvO/gA==} engines: {node: '>=v18'} - '@conventional-changelog/git-client@1.0.1': - resolution: {integrity: sha512-PJEqBwAleffCMETaVm/fUgHldzBE35JFk3/9LL6NUA5EXa3qednu+UT6M7E5iBu3zIQZCULYIiZ90fBYHt6xUw==} - engines: {node: '>=18'} - peerDependencies: - conventional-commits-filter: ^5.0.0 - conventional-commits-parser: ^6.0.0 - peerDependenciesMeta: - conventional-commits-filter: - optional: true - conventional-commits-parser: - optional: true + '@commitlint/types@21.0.1': + resolution: {integrity: sha512-4u7w8jcoCUFWhjWnASYzZHAP34OqOtuFBN87nQmFvqda03YU0T6z+yB4w0gSAMpekiRqqGk5rt+qSlW+a2vSEg==} + engines: {node: '>=22.12.0'} - '@conventional-changelog/git-client@2.6.0': - resolution: {integrity: sha512-T+uPDciKf0/ioNNDpMGc8FDsehJClZP0yR3Q5MN6wE/Y/1QZ7F+80OgznnTCOlMEG4AV0LvH2UJi3C/nBnaBUg==} + '@conventional-changelog/git-client@2.7.0': + resolution: {integrity: sha512-j7A8/LBEQ+3rugMzPXoKYzyUPpw/0CBQCyvtTR7Lmu4olG4yRC/Tfkq79Mr3yuPs0SUitlO2HwGP3gitMJnRFw==} engines: {node: '>=18'} peerDependencies: conventional-commits-filter: ^5.0.0 - conventional-commits-parser: ^6.3.0 + conventional-commits-parser: ^6.4.0 peerDependenciesMeta: conventional-commits-filter: optional: true @@ -375,32 +432,32 @@ packages: resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/config-array@0.23.4': - resolution: {integrity: sha512-lf19F24LSMfF8weXvW5QEtnLqW70u7kgit5e9PSx0MsHAFclGd1T9ynvWEMDT1w5J4Qt54tomGeAhdoAku1Xow==} + '@eslint/config-array@0.23.5': + resolution: {integrity: sha512-Y3kKLvC1dvTOT+oGlqNQ1XLqK6D1HU2YXPc52NmAlJZbMMWDzGYXMiPRJ8TYD39muD/OTjlZmNJ4ib7dvSrMBA==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - '@eslint/config-helpers@0.5.4': - resolution: {integrity: sha512-jJhqiY3wPMlWWO3370M86CPJ7pt8GmEwSLglMfQhjXal07RCvhmU0as4IuUEW5SJeunfItiEetHmSxCCe9lDBg==} + '@eslint/config-helpers@0.6.0': + resolution: {integrity: sha512-ii6Bw9jJ2zi2cWA2Z+9/QZ/+3DX6kwaV5Q986D/CdP3Lap3w/pgQZ373FV7byY/i7L4IRH/G43I5dz1ClsCbpA==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - '@eslint/core@1.2.0': - resolution: {integrity: sha512-8FTGbNzTvmSlc4cZBaShkC6YvFMG0riksYWRFKXztqVdXaQbcZLXlFbSpC05s70sGEsXAw0qwhx69JiW7hQS7A==} + '@eslint/core@1.2.1': + resolution: {integrity: sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} '@eslint/js@9.39.4': resolution: {integrity: sha512-nE7DEIchvtiFTwBw4Lfbu59PG+kCofhjsKaCWzxTpt4lfRjRMqG6uMBzKXuEcyXhOHoUp9riAm7/aWYGhXZ9cw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/object-schema@3.0.4': - resolution: {integrity: sha512-55lO/7+Yp0ISKRP0PsPtNTeNGapXaO085aELZmWCVc5SH3jfrqpuU6YgOdIxMS99ZHkQN1cXKE+cdIqwww9ptw==} + '@eslint/object-schema@3.0.5': + resolution: {integrity: sha512-vqTaUEgxzm+YDSdElad6PiRoX4t8VGDjCtt05zn4nU810UIx/uNEV7/lZJ6KwFThKZOzOxzXy48da+No7HZaMw==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - '@eslint/plugin-kit@0.7.0': - resolution: {integrity: sha512-ejvBr8MQCbVsWNZnCwDXjUKq40MDmHalq7cJ6e9s/qzTUFIIo/afzt1Vui9T97FM/V/pN4YsFVoed5NIa96RDg==} + '@eslint/plugin-kit@0.7.2': + resolution: {integrity: sha512-+CNAzxglkrpNf/kKywqQfk74QjtceuOE7Qm+AF8miRvPF/wmmK5+OJOgVh3AVTT3RP2mH3+FOaxlE5v72owk0A==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - '@favware/cliff-jumper@6.0.0': - resolution: {integrity: sha512-9uXg/fGHFLh4AnG3HCtlrrrmDvUnmr5vrbs7H9pet3WlUCsGGGqeNT0bFb8LG0M0GatYUi9RM/F60p1yn2ndEA==} + '@favware/cliff-jumper@6.1.0': + resolution: {integrity: sha512-BTuJ3evIMbkXgcQSk9K9B2vAuENi0bzS6qhtKLx6ZO/LTUIuoJfG05IsLqTngwBsJ6ZGnN3dXYGK/ANVMT8Xrw==} engines: {node: '>=v18'} hasBin: true @@ -408,12 +465,16 @@ packages: resolution: {integrity: sha512-PPYtcLzhSafdylp8NBOxMCYIcLqTUMNiQc7ciBoAIvxNG2egM+P7e2nNPui5+Svyk89Q+Tnbrp139ZRIIBw3IA==} engines: {node: '>=v16'} - '@humanfs/core@0.19.1': - resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} + '@humanfs/core@0.19.2': + resolution: {integrity: sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==} engines: {node: '>=18.18.0'} - '@humanfs/node@0.16.7': - resolution: {integrity: sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==} + '@humanfs/node@0.16.8': + resolution: {integrity: sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==} + engines: {node: '>=18.18.0'} + + '@humanfs/types@0.15.0': + resolution: {integrity: sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==} engines: {node: '>=18.18.0'} '@humanwhocodes/module-importer@1.0.1': @@ -437,8 +498,8 @@ packages: '@jridgewell/trace-mapping@0.3.31': resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} - '@nanoforge-dev/actions@1.2.3': - resolution: {integrity: sha512-YVQ1e3H5MVHGBku2bA+lMLb+mkDXvJvYN228V6L0R+HXxo82X3Y1oVDKzlsnz+GRvYejJXEsY6jzPrV3pzbGwA==} + '@nanoforge-dev/actions@2.1.2': + resolution: {integrity: sha512-s1HdWoy92eLztffboUnKzmjIpMLWHhCKzQM/+FPR+eZgxuULDT3uUUvKeRxxobdljFuD0e14gxnbQZZRTrG1Dg==} engines: {node: '25'} '@nanoforge-dev/utils-eslint-config@1.0.2': @@ -449,41 +510,22 @@ packages: resolution: {integrity: sha512-dTa2ixPJmWVD+L13Iuxx51JIm3gaX+gnRCe8jA0PFw0xjMjLYv+0ZgbWSSVlNmowp6fqpOzfPdWADkkPNQs8LQ==} engines: {node: '25'} - '@octokit/auth-token@5.1.2': - resolution: {integrity: sha512-JcQDsBdg49Yky2w2ld20IHAlwr8d/d8N6NiOXbtuoPCqzbsiJgF633mVUw3x4mo0H5ypataQIX7SFu3yy44Mpw==} - 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@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/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/openapi-types@27.0.0': resolution: {integrity: sha512-whrdktVs1h6gtR+09+QsNk2+FO+49j6ga1c55YZudfEG+oKJVvJLQi3zkOm5JjiUXAagWK2tI2kTGKJ2Ys7MGA==} @@ -499,91 +541,100 @@ packages: peerDependencies: '@octokit/core': '>=6' - '@octokit/plugin-retry@7.2.1': - resolution: {integrity: sha512-wUc3gv0D6vNHpGxSaR3FlqJpTXGWgqmk607N9L3LvPL4QjaxDgX/1nY2mGpT37Khn+nlIXdljczkRnNdTTV3/A==} - engines: {node: '>= 18'} + '@octokit/plugin-retry@8.1.0': + resolution: {integrity: sha512-O1FZgXeiGb2sowEr/hYTr6YunGdSAFWnr2fyW39Ah85H8O33ELASQxcvOFF5LE6Tjekcyu2ms4qAzJVhSaJxTw==} + engines: {node: '>= 20'} peerDependencies: - '@octokit/core': '>=6' - - '@octokit/request-error@6.1.8': - resolution: {integrity: sha512-WEi/R0Jmq+IJKydWlKDmryPcmdYSVjL3ekaiEL1L9eo1sUnqMJ+grqmC9cjk7CA7+b2/T397tO5d8YLOH3qYpQ==} - engines: {node: '>= 18'} + '@octokit/core': '>=7' '@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==} + '@octokit/request@10.0.10': + resolution: {integrity: sha512-KxNC2pTqqhszMNrf12ZRd4PonRgyJdsM4F/jySiddQK+DsRcfBtUvqn8t7UsyZhnRJHvX46OohDt5N3VqIWC2w==} engines: {node: '>= 20'} - '@octokit/request@9.2.4': - resolution: {integrity: sha512-q8ybdytBmxa6KogWlNa818r0k1wlqzNC+yNkcQDECHvQo8Vmstrg18JwqJHdJdUiHD2sjlwBgSm9kHkOKe2iyA==} - engines: {node: '>= 18'} - - '@octokit/types@14.1.0': - resolution: {integrity: sha512-1y6DgTy8Jomcpu33N+p5w58l6xyt55Ar2I91RPiIA0xCJBXyUAhXCcmZaDWSANiha7R9a6qJJ2CRomGPZ6f46g==} - '@octokit/types@16.0.0': resolution: {integrity: sha512-sKq+9r1Mm4efXW1FCk7hFSeJo4QKreL/tTbR0rz/qx/r1Oa2VV83LTA/H/MuCOX7uCIJmQVRKBcbmWoySjAnSg==} - '@oven/bun-darwin-aarch64@1.3.13': - resolution: {integrity: sha512-qAS6Hg8Q14ckfBuqJ2Zh7gBQSVSUHeibSq4OFqBTv6DzyJuxYlr0sdYQzmYmnbPxbqobekqUDTa/4XEaqRi7vg==} + '@oven/bun-darwin-aarch64@1.3.14': + resolution: {integrity: sha512-Omj20SuiHBOUjUBIyqtkNjSUIjOtEOJwmbix/ZyFH4BaQ6OZTaaRWIR4TjHVz0yadHgli6lLTiAh1uarnvD49A==} cpu: [arm64] os: [darwin] - '@oven/bun-darwin-x64-baseline@1.3.13': - resolution: {integrity: sha512-gMEQayUpmCPYaE9zkNBj9TiQqHupnhjOYcuSzxFjzIjHJBUO4VjNnrpbKVeXNs+rKHFothORDd2QKquu5paSPQ==} + '@oven/bun-darwin-x64-baseline@1.3.14': + resolution: {integrity: sha512-OSfsTZstc898HHElhU4NccaBGOSSDn5VfahiVTnidZ9B/+wb7WTyfZJaBeJcfjwJ9H2W9uTh2TGtl3UfcXgV9g==} cpu: [x64] os: [darwin] - '@oven/bun-darwin-x64@1.3.13': - resolution: {integrity: sha512-kGePeDD4IN4imo+H4uLjQGZLmvyYQg+nKr2P0nt4ksXXrWA4HE+mb0/TUPHfRI127DocXQpew+fvrHuHR5mpJQ==} + '@oven/bun-darwin-x64@1.3.14': + resolution: {integrity: sha512-FFj3QdU/OhlDyZOJ8CWfN5eWLpRlT4qjZg7lMQi7jA6GuoY5ajlO1zWLP/MuHYRSbXQUvV52RejNi8DVnAp13w==} cpu: [x64] os: [darwin] - '@oven/bun-linux-aarch64-musl@1.3.13': - resolution: {integrity: sha512-UV9EE18VE5aRhWtV2L6MTAGGn3slhJJ2OW/m+FJM15maHm0qf1V7TaZY0FovxhdQRvnklSiQ7Ntv0H5TUX4w0g==} + '@oven/bun-freebsd-aarch64@1.3.14': + resolution: {integrity: sha512-LIKrXaFxAHybVO5Pf+9XP2FHUj/5APvXTUKk9dqHm5iFz4oH+W24cmhjkJirNujh9hKeTyrpWSe3no9JZKowIw==} + cpu: [arm64] + os: [freebsd] + + '@oven/bun-freebsd-x64@1.3.14': + resolution: {integrity: sha512-uwD+fGUH1ADpIF3B1U2jWzzb20QwRLZfj5QZ28GUCGrAJ/nTmWrD6YYGsblCY1wuhldRez3lU40AyuvSCyLYmw==} + cpu: [x64] + os: [freebsd] + + '@oven/bun-linux-aarch64-android@1.3.14': + resolution: {integrity: sha512-y4kq5b85lsrmFb9Xvi4w9mA5IEFJkLMrSmYn06q24KjL9rUWDWO3VFZEtteZxUN5+ec3Zm5S8OnJw1umaCbVjA==} + cpu: [arm64] + os: [android] + + '@oven/bun-linux-aarch64-musl@1.3.14': + resolution: {integrity: sha512-jmqOA92Cd1NL/1XBd4bFkJLxQ86K0RW7ohxS2qzzAvuitO4JiIxjjTeCspoU44zCozH72HpfZfUE2On31OjnWA==} cpu: [arm64] os: [linux] - '@oven/bun-linux-aarch64@1.3.13': - resolution: {integrity: sha512-NbLOJdr+RBFO1vFZ2YUFg4oVJ+2ua6zrwo4ZWRs0jKKcGJWtbY2wY5uz+i0PkwH6b9HYaYDgVTzE4ev06ncYZw==} + '@oven/bun-linux-aarch64@1.3.14': + resolution: {integrity: sha512-X5SsPZHs+iYO8R/efIcRtc7gT2Q2DgPfliCxEkx4cXBumwkw0c/EsHMNwH3EgGpCDaZ7IYVPhpCG/xBOQHEwZw==} cpu: [arm64] os: [linux] - '@oven/bun-linux-x64-baseline@1.3.13': - resolution: {integrity: sha512-fOi4ziKzgJG4UrrNd4AicBs6Fu9GY5xOqg+9tC76nuZNDAdSh6++kzab6TNi1Ck0Yzq6zIBIdGit6/0uSbBn8A==} + '@oven/bun-linux-x64-android@1.3.14': + resolution: {integrity: sha512-qe9e1d+3VAEU7nAA2ol9Jvmy/o99PVMSgZhHn7Q/9O3YcDrfEqyQ8zm4zoe5qTEo8HZH0dN03Le0Ys2eQPs7eg==} + cpu: [x64] + os: [android] + + '@oven/bun-linux-x64-baseline@1.3.14': + resolution: {integrity: sha512-q/8EdOC0yUE8FPeoOVq8/Pw5I9/tJaYmUfO/uDUAREx8IUnOJH1RJ5A3BjFqre8pvJoiZA9AovPJq5FnNNjSxA==} cpu: [x64] os: [linux] - '@oven/bun-linux-x64-musl-baseline@1.3.13': - resolution: {integrity: sha512-fqBKuiiWLEu2dVkowZaXgKS98xfrvBqivdoxRtRP3eINcpI1dcelGbsOz+Xphn7tbGAuBiE1/0AelvvvdqS9rg==} + '@oven/bun-linux-x64-musl-baseline@1.3.14': + resolution: {integrity: sha512-n6iE71G4lQE4XkrZhQQcL5YUlxDbnq6nqV7zeQi33PMsLT/0kYE+RvHOtBWZ3w0wMdXZfINmp63hIb9ijUBGtw==} cpu: [x64] os: [linux] - '@oven/bun-linux-x64-musl@1.3.13': - resolution: {integrity: sha512-+VHhE44kEjCXcTFHyc81zfTxL9+vzh9RqIh7gM1iWNhxpctD9kzntbUkP3UTFTwwNjoou1o8VRyxQafvc4OepA==} + '@oven/bun-linux-x64-musl@1.3.14': + resolution: {integrity: sha512-GBCB/k/sIqcr06eTNgg7g46qiUv35Jasx4XiccJ/n7RGqrE4RWUD/XJBbWFprVPjvqd59+QtSnS99XGqvftHfg==} cpu: [x64] os: [linux] - '@oven/bun-linux-x64@1.3.13': - resolution: {integrity: sha512-UwttIUXoe9fS+40OcjoaRHgZw+HCPFqBVWEXkXqAJ3W7wA0XPZrWsoMAD9sGh3TaLqrwdiMo5xPogwpXhOtVXA==} + '@oven/bun-linux-x64@1.3.14': + resolution: {integrity: sha512-7OVTAKvwfPmSbIV1HpdOoVVx5VRc427GuPPne93N6vk4eQBPId9nXmZDh9/zGaKPdbVjVtQSZafWQoUjx38Utw==} cpu: [x64] os: [linux] - '@oven/bun-windows-aarch64@1.3.13': - resolution: {integrity: sha512-+EvdRWRCRg95Xea4M2lqSJFTjzQBTJDQTMlbG8bmwFkVTN16MdmSH7xhfxVQWUOyZBLEpIwuNFIlBBxVCwSUyQ==} + '@oven/bun-windows-aarch64@1.3.14': + resolution: {integrity: sha512-T7s3x/BsVKQObGU6QDkZeI6wKynzqGbBH1yI77jrrj5siElclxr3DQrDIk8CV4G5/SJq2HHq4kpLyYY2DKCSmA==} cpu: [arm64] os: [win32] - '@oven/bun-windows-x64-baseline@1.3.13': - resolution: {integrity: sha512-6gy4hhQSjq/T/S9hC9m3NxY0RY+9Ww+XNlB+8koIMTsMSYEjk7Ho+hFHQz1Bn4W61Ub7Vykufg+jgDgPfa2GFA==} + '@oven/bun-windows-x64-baseline@1.3.14': + resolution: {integrity: sha512-uIjLUC1S9DWgICzuoMba7vurBJnBruE4S5CxnvmZkdqWVXRzx1Rgu636HoH+k0qeaQCFh3jeG3JQ1y6fRHv0sw==} cpu: [x64] os: [win32] - '@oven/bun-windows-x64@1.3.13': - resolution: {integrity: sha512-vqDEFX63ZZQF3YstPSpPD+RxNm5AILPdUuuKpNwsj7ld4NjhdHUYkAmLXDtKNWt9JMRL10bop//W8faY/LV+RQ==} + '@oven/bun-windows-x64@1.3.14': + resolution: {integrity: sha512-mUFWL3BoYkNpjd8e9PqROiFF/1Xeotq20mABJsiQH62jM1g5zqWh4khw1RZ6bX8Q8fWvlPaxG1PjofkmjUi3vg==} cpu: [x64] os: [win32] @@ -634,48 +685,56 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] + libc: [glibc] '@oxfmt/binding-linux-arm64-musl@0.35.0': resolution: {integrity: sha512-5Okqi+uhYFxwKz8hcnUftNNwdm8BCkf6GSCbcz9xJxYMm87k1E4p7PEmAAbhLTk7cjSdDre6TDL0pDzNX+Y22Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] + libc: [musl] '@oxfmt/binding-linux-ppc64-gnu@0.35.0': resolution: {integrity: sha512-9k66pbZQXM/lBJWys3Xbc5yhl4JexyfqkEf/tvtq8976VIJnLAAL3M127xHA3ifYSqxdVHfVGTg84eiBHCGcNw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] + libc: [glibc] '@oxfmt/binding-linux-riscv64-gnu@0.35.0': resolution: {integrity: sha512-aUcY9ofKPtjO52idT6t0SAQvEF6ctjzUQa1lLp7GDsRpSBvuTrBQGeq0rYKz3gN8dMIQ7mtMdGD9tT4LhR8jAQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] + libc: [glibc] '@oxfmt/binding-linux-riscv64-musl@0.35.0': resolution: {integrity: sha512-C6yhY5Hvc2sGM+mCPek9ZLe5xRUOC/BvhAt2qIWFAeXMn4il04EYIjl3DsWiJr0xDMTJhvMOmD55xTRPlNp39w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] + libc: [musl] '@oxfmt/binding-linux-s390x-gnu@0.35.0': resolution: {integrity: sha512-RG2hlvOMK4OMZpO3mt8MpxLQ0AAezlFqhn5mI/g5YrVbPFyoCv9a34AAvbSJS501ocOxlFIRcKEuw5hFvddf9g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] + libc: [glibc] '@oxfmt/binding-linux-x64-gnu@0.35.0': resolution: {integrity: sha512-wzmh90Pwvqj9xOKHJjkQYBpydRkaXG77ZvDz+iFDRRQpnqIEqGm5gmim2s6vnZIkDGsvKCuTdtxm0GFmBjM1+w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] + libc: [glibc] '@oxfmt/binding-linux-x64-musl@0.35.0': resolution: {integrity: sha512-+HCqYCJPCUy5I+b2cf+gUVaApfgtoQT3HdnSg/l7NIcLHOhKstlYaGyrFZLmUpQt4WkFbpGKZZayG6zjRU0KFA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] + libc: [musl] '@oxfmt/binding-openharmony-arm64@0.35.0': resolution: {integrity: sha512-kFYmWfR9YL78XyO5ws+1dsxNvZoD973qfVMNFOS4e9bcHXGF7DvGC2tY5UDFwyMCeB33t3sDIuGONKggnVNSJA==} @@ -701,16 +760,16 @@ packages: cpu: [x64] os: [win32] - '@pkgr/core@0.2.9': - resolution: {integrity: sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==} - engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + '@pkgr/core@0.3.6': + resolution: {integrity: sha512-SEeaJLb3qBNF/OaXnaR1NmmBbFYk1zC0ZH/52fATcRPLFg/p791YrcyFFy44Bo9sLaGuSuLp5Q6axbb/O+v/RA==} + engines: {node: ^14.18.0 || >=16.0.0} '@sapphire/result@2.8.0': resolution: {integrity: sha512-693yWouX+hR9uJm1Jgq0uSSjbSD3UrblMaxiuGbHPjSwzLCSZTcm0h3kvdVhq3o/yl4+oeAWW3hiaJ0TELuRJQ==} engines: {node: '>=v14.0.0', npm: '>=7.0.0'} - '@sapphire/utilities@3.18.1': - resolution: {integrity: sha512-zyEyQOQb2/t2mKRmu8T+M4r1Ulb+54BjwDS5pfzf6abGzTAcUg4VDWjHeKX7p3IgiZTcpN4Ij77b9k+K1KV4Lg==} + '@sapphire/utilities@3.18.2': + resolution: {integrity: sha512-QGLdC9+pT74Zd7aaObqn0EUfq40c4dyTL65pFnkM6WO1QYN7Yg/s4CdH+CXmx0Zcu6wcfCWILSftXPMosJHP5A==} engines: {node: '>=v14.0.0'} '@sec-ant/readable-stream@0.4.1': @@ -747,38 +806,38 @@ packages: svelte: optional: true - '@turbo/darwin-64@2.9.4': - resolution: {integrity: sha512-ZSlPqJ5Vqg/wgVw8P3AOVCIosnbBilOxLq7TMz3MN/9U46DUYfdG2jtfevNDufyxyrg98pcPs/GBgDRaaids6g==} + '@turbo/darwin-64@2.9.16': + resolution: {integrity: sha512-jLjApWTSNd7JZ5JaLYfelW1ytnGQOvB7ivl+2RD1xQvJTbi8I9gBjzcga7tDZVPyaxpl10YTfJt3BrYXR18KDw==} cpu: [x64] os: [darwin] - '@turbo/darwin-arm64@2.9.4': - resolution: {integrity: sha512-9cjTWe4OiNlFMSRggPNh+TJlRs7MS5FWrHc96MOzft5vESWjjpvaadYPv5ykDW7b45mVHOF2U/W+48LoX9USWw==} + '@turbo/darwin-arm64@2.9.16': + resolution: {integrity: sha512-YPgrn+5HIGzrx0O2a631SV4MBQUe4W/DafMFUuBVgaU32PW9/OTT0ehviF0QSxTXuRJlHvW2eUTemddF5/spmw==} cpu: [arm64] os: [darwin] - '@turbo/linux-64@2.9.4': - resolution: {integrity: sha512-Cl1GjxqBXQ+r9KKowmXG+lhD1gclLp48/SE7NxL//66iaMytRw0uiphWGOkccD92iPiRjHLRUaA9lOTtgr5OCA==} + '@turbo/linux-64@2.9.16': + resolution: {integrity: sha512-vAEf1H6l26lTpl9FJ/peQo1NUB8RC0sbEJJz5mPcUhHA2bPDup2x3CZPgo/bH8S4cUcBLm4FN3UHd5iUO2RAew==} cpu: [x64] os: [linux] - '@turbo/linux-arm64@2.9.4': - resolution: {integrity: sha512-j2hPAKVmGNN2EsKigEWD+43y9m7zaPhNAs6ptsyfq0u7evHHBAXAwOfv86OEMg/gvC+pwGip0i1CIm1bR1vYug==} + '@turbo/linux-arm64@2.9.16': + resolution: {integrity: sha512-xDBLR2PZg4BrQOchfG6svgpv5FCNJ2TOtT2psLdEJcdKo1BH+pnPs9Xj6pvUjgfkHbuvBOfeE4R6tvxMoQKDHQ==} cpu: [arm64] os: [linux] - '@turbo/windows-64@2.9.4': - resolution: {integrity: sha512-1jWPjCe9ZRmsDTXE7uzqfySNQspnUx0g6caqvwps+k/sc+fm9hC/4zRQKlXZLbVmP3Xxp601Ju71boegHdnYGw==} + '@turbo/windows-64@2.9.16': + resolution: {integrity: sha512-NBAJnaUiGdgkSzQwUIdOvkCkcpTSu58G/sBGa0mvBtzfvFOOgrQwepKOOQ8cp6sWM6OcKDNFj2p1dsZA1OWjPg==} cpu: [x64] os: [win32] - '@turbo/windows-arm64@2.9.4': - resolution: {integrity: sha512-dlko15TQVu/BFYmIY018Y3covWMRQlUgAkD+OOk+Rokcfj6VY02Vv4mCfT/Zns6B4q8jGbOd6IZhnCFYsE8Viw==} + '@turbo/windows-arm64@2.9.16': + resolution: {integrity: sha512-Y7SJppD0Z8wjO3Ec0ZGd9KQ4Yv0BMnA8CIowj5Vp+OEVsosXDG2weK6/t1RRLfJmc2Ozrnd6y4DOgQys+mn3WQ==} cpu: [arm64] os: [win32] - '@types/bun@1.3.13': - resolution: {integrity: sha512-9fqXWk5YIHGGnUau9TEi+qdlTYDAnOj+xLCmSTwXfAIqXr2x4tytJb43E9uCvt09zJURKXwAtkoH4nLQfzeTXw==} + '@types/bun@1.3.14': + resolution: {integrity: sha512-h1hFqFVcvAvD9j9K7ZW7vd82aSA+rTdznZa+5bwvCwqSB1jmmfLcbIWhOLx1/+boy/xmjgCs/OMUL8hRJSmnPw==} '@types/eslint@9.6.1': resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} @@ -786,75 +845,72 @@ packages: '@types/esrecurse@4.3.1': resolution: {integrity: sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==} - '@types/estree@1.0.8': - resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + '@types/estree@1.0.9': + resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - '@types/node@25.5.2': - resolution: {integrity: sha512-tO4ZIRKNC+MDWV4qKVZe3Ql/woTnmHDr5JD8UI5hn2pwBrHEwOEMZK7WlNb5RKB6EoJ02gwmQS9OrjuFnZYdpg==} - - '@types/semver@7.7.1': - resolution: {integrity: sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==} + '@types/node@25.9.1': + resolution: {integrity: sha512-xfrlY7UD5rMJk3ZVJP8BNzS28J36YJg+xp+LPXV1TdWxr8uMH5A860QNxYDGQe/ylDSgjxE52Q9VnO7p75tJxg==} - '@typescript-eslint/eslint-plugin@8.56.1': - resolution: {integrity: sha512-Jz9ZztpB37dNC+HU2HI28Bs9QXpzCz+y/twHOwhyrIRdbuVDxSytJNDl6z/aAKlaRIwC7y8wJdkBv7FxYGgi0A==} + '@typescript-eslint/eslint-plugin@8.60.1': + resolution: {integrity: sha512-JQ4S5GB0tfjO8BuJ4fcX+HodkzJjYBV+7OJ+wLygaX7OGQ7FudyHL4NSCA6ob+w3Yn+5MkKIozOwQhXeM7opVg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.56.1 + '@typescript-eslint/parser': ^8.60.1 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.56.1': - resolution: {integrity: sha512-klQbnPAAiGYFyI02+znpBRLyjL4/BrBd0nyWkdC0s/6xFLkXYQ8OoRrSkqacS1ddVxf/LDyODIKbQ5TgKAf/Fg==} + '@typescript-eslint/parser@8.60.1': + resolution: {integrity: sha512-A0M6ua6H252bVjPvvtSgl2QA4+ET9S5Mtkb2GDyTxIhH/C4qDItT7RQNO5PhMC6NXGYXOR9dIalcDDgBKT7oFA==} 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.56.1': - resolution: {integrity: sha512-TAdqQTzHNNvlVFfR+hu2PDJrURiwKsUvxFn1M0h95BB8ah5jejas08jUWG4dBA68jDMI988IvtfdAI53JzEHOQ==} + '@typescript-eslint/project-service@8.60.1': + resolution: {integrity: sha512-eXkTH2bxmXlqD1RnOPmLZ9ZM9D3VwSx04JOwBnP9RQ+yUA5a2Mu7SfW8uaV2Aon53NJzZlZYuX7tn91Izf+xaw==} 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.56.1': - resolution: {integrity: sha512-YAi4VDKcIZp0O4tz/haYKhmIDZFEUPOreKbfdAN3SzUDMcPhJ8QI99xQXqX+HoUVq8cs85eRKnD+rne2UAnj2w==} + '@typescript-eslint/scope-manager@8.60.1': + resolution: {integrity: sha512-gvI5OQoptnxQnchOirukCuQ55svJSTuD/4k5+pC267xyBtYry748R9/c3tYUzb/iE6RZfllRz2lVulLCHkTm4w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.56.1': - resolution: {integrity: sha512-qOtCYzKEeyr3aR9f28mPJqBty7+DBqsdd63eO0yyDwc6vgThj2UjWfJIcsFeSucYydqcuudMOprZ+x1SpF3ZuQ==} + '@typescript-eslint/tsconfig-utils@8.60.1': + resolution: {integrity: sha512-nh8w4qAteiKuZu3pSSzG/yGKpw0OlkrKnzFmbVRenKaD4qc+7i1GrmZaLVkr8rk4uipiPGMOW4YsM6WmKZ5CvA==} 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.56.1': - resolution: {integrity: sha512-yB/7dxi7MgTtGhZdaHCemf7PuwrHMenHjmzgUW1aJpO+bBU43OycnM3Wn+DdvDO/8zzA9HlhaJ0AUGuvri4oGg==} + '@typescript-eslint/type-utils@8.60.1': + resolution: {integrity: sha512-sdwTrpjosW7ANQYJ39ZBF1ZyEMEGVB2UsikrserVM/30a/F1dTLnu9bGxEdosugyu5caigjLrR2qiD11asjI1A==} 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.56.1': - resolution: {integrity: sha512-dbMkdIUkIkchgGDIv7KLUpa0Mda4IYjo4IAMJUZ+3xNoUXxMsk9YtKpTHSChRS85o+H9ftm51gsK1dZReY9CVw==} + '@typescript-eslint/types@8.60.1': + resolution: {integrity: sha512-4h0tY8ppCkdCzcrl2YM5M3my0xsE1Tf8om3owEu5oPWmXwkKRmk0j0LGDzYBGUcAlesEbxBhazqu/K4cu3Ug7w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.56.1': - resolution: {integrity: sha512-qzUL1qgalIvKWAf9C1HpvBjif+Vm6rcT5wZd4VoMb9+Km3iS3Cv9DY6dMRMDtPnwRAFyAi7YXJpTIEXLvdfPxg==} + '@typescript-eslint/typescript-estree@8.60.1': + resolution: {integrity: sha512-alpRkfG8hlVE5kdJW2GkfgDgXxold3e8e4l6EnmhRmRLbekgAPCCGDVD++sABy9FcgPFroq+uFcCSM1vR57Cew==} 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.56.1': - resolution: {integrity: sha512-HPAVNIME3tABJ61siYlHzSWCGtOoeP2RTIaHXFMPqjrQKCGB9OgUVdiNgH7TJS2JNIQ5qQ4RsAUDuGaGme/KOA==} + '@typescript-eslint/utils@8.60.1': + resolution: {integrity: sha512-h2MPBLoNtjc3qZWfY3Tl51yPorQ2McHn8pJfcMNTcIvrrZrr90Ykffit0yjrPFWQcRcUxzH20+6OcVdW4yHtUg==} 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.56.1': - resolution: {integrity: sha512-KiROIzYdEV85YygXw6BI/Dx4fnBlFQu6Mq4QE4MOH9fFnhohw6wX/OAvDY2/C+ut0I3RSPKenvZJIVYqJNkhEw==} + '@typescript-eslint/visitor-keys@8.60.1': + resolution: {integrity: sha512-EbGRQg4FhrmwLodl+t3JNAnXHWVr9Vp+Zl1QBZVPY4ByfkzIT8cX3K6QWODHtkIZqqJVEWvhHSx3v5PDHsaQag==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} acorn-jsx@5.3.2: @@ -867,11 +923,11 @@ packages: engines: {node: '>=0.4.0'} hasBin: true - ajv@6.14.0: - resolution: {integrity: sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==} + ajv@6.15.0: + resolution: {integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==} - ajv@8.18.0: - resolution: {integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==} + ajv@8.20.0: + resolution: {integrity: sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==} ansi-escapes@7.3.0: resolution: {integrity: sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==} @@ -906,29 +962,26 @@ packages: resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} engines: {node: 18 || 20 || >=22} - 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.1.1: + resolution: {integrity: sha512-WR1cURNjuvBLMZBMbqM0UoE+WAfdUcEV1ccD8PVBVOI+Z3ND4+SZbN8RsfT2bMuG1qwz5RFvPukSZm5fF2D5eA==} - brace-expansion@5.0.4: - resolution: {integrity: sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==} + brace-expansion@5.0.6: + resolution: {integrity: sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==} engines: {node: 18 || 20 || >=22} - bun-types@1.3.13: - resolution: {integrity: sha512-QXKeHLlOLqQX9LgYaHJfzdBaV21T63HhFJnvuRCcjZiaUDpbs5ED1MgxbMra71CsryN/1dAoXuJJJwIv/2drVA==} + bun-types@1.3.14: + resolution: {integrity: sha512-4N0ig0fEomHt5R0KCFWjovxow98rIoRwKolrYdCcknNwMekCXRnWEUvgu5soYV8QXtVsrUD8B95MBOZGPvr6KQ==} - bun@1.3.13: - resolution: {integrity: sha512-b9T4xZ8KqCHs4+TkHJv540LG1B8OD7noKu0Qaizusx3jFtMDHY6osNqgbaOlwW2B8RB2AKzz+sjzlGKIGxIjZw==} + bun@1.3.14: + resolution: {integrity: sha512-aB6GVd42x1Y5ie1K16SF+oLGtgSkwX9hgoDdIW88pjvfTccU8F1vfpoOt34QLv0dZ1v3XimtaxPlZUG81Gx9Zg==} cpu: [arm64, x64] - os: [darwin, linux, win32] + os: [darwin, linux, android, freebsd, win32] hasBin: true callsites@3.1.0: @@ -951,6 +1004,10 @@ packages: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} + cliui@9.0.1: + resolution: {integrity: sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==} + engines: {node: '>=20'} + color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} @@ -961,10 +1018,6 @@ packages: colorette@2.0.20: resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} - commander@13.1.0: - resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==} - engines: {node: '>=18'} - commander@14.0.3: resolution: {integrity: sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==} engines: {node: '>=20'} @@ -972,12 +1025,16 @@ packages: compare-func@2.0.0: resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} - conventional-changelog-angular@8.3.0: - resolution: {integrity: sha512-DOuBwYSqWzfwuRByY9O4oOIvDlkUCTDzfbOgcSbkY+imXXj+4tmrEFao3K+FxemClYfYnZzsvudbwrhje9VHDA==} + content-type@2.0.0: + resolution: {integrity: sha512-j/O/d7GcZCyNl7/hwZAb606rzqkyvaDctLmckbxLzHvFBzTJHuGEdodATcP3yIRoDrLHkIATJuvzbFlp/ki2cQ==} + engines: {node: '>=18'} + + 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: @@ -988,18 +1045,18 @@ 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 - conventional-recommended-bump@10.0.0: - resolution: {integrity: sha512-RK/fUnc2btot0oEVtrj3p2doImDSs7iiz/bftFCDzels0Qs1mxLghp+DFHMaOC0qiCI6sWzlTDyBFSYuot6pRA==} + conventional-recommended-bump@11.2.0: + resolution: {integrity: sha512-lqIdmw330QdMBgfL0e6+6q5OMKyIpy4OZNmepit6FS3GldhkG+70drZjuZ0A5NFpze5j85dlYs3GabQXl6sMHw==} engines: {node: '>=18'} hasBin: true - cosmiconfig-typescript-loader@6.2.0: - resolution: {integrity: sha512-GEN39v7TgdxgIoNcdkRE3uiAzQt3UXLyHbRHD6YoL048XAeOomyxaP+Hh/+2C6C2wYjxJ2onhJcsQp+L4YEkVQ==} + cosmiconfig-typescript-loader@6.3.0: + resolution: {integrity: sha512-Akr82WH1Wfqatyiqpj8HDkO2o2KmJRu1FhKfSNJP3K4IdXwHfEyL7MOb62i1AGQVLtIQM+iCE9CGOtrfhR+mmA==} engines: {node: '>=v18'} peerDependencies: '@types/node': '*' @@ -1052,6 +1109,9 @@ packages: error-ex@1.3.4: resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} + es-toolkit@1.47.0: + resolution: {integrity: sha512-n1GuoD0WEQZMBk5tttoZSqwgyLx01oqa5XsBmCHwPyNe1S9jPBEmtR2pSgp2kJuWE3ciFZ6yRHmY4pM4C3OOkw==} + escalade@3.2.0: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} @@ -1066,8 +1126,8 @@ packages: peerDependencies: eslint: '>=7.0.0' - eslint-formatter-pretty@7.0.0: - resolution: {integrity: sha512-1CaE7Pnce8Csy+tlTEbFC2q5qgT5cJo2a0UkEOds+Y5+mI1nX3DApIhcBP8EPwV8TgTpLlzOfw8mcBJBAs3Y9Q==} + eslint-formatter-pretty@7.1.0: + resolution: {integrity: sha512-iyPrgpwKC3MMM75Wxn0VouD89HolpG+BL95NOxgwOWO0R+Omapo7gFX2xcGVsUDS7KiXLtDuynLbNbOARSE7YA==} engines: {node: '>=18'} eslint-formatting-reporter@0.0.0: @@ -1083,8 +1143,8 @@ packages: peerDependencies: eslint: ^8.40.0 || ^9.0.0 || ^10.0.0 - eslint-plugin-prettier@5.5.5: - resolution: {integrity: sha512-hscXkbqUZ2sPithAuLm5MXL+Wph+U7wHngPBv9OMWwlP8iaflyxpjTYZkmdgB4/vPIhemRlBEoLrH7UC1n7aUw==} + eslint-plugin-prettier@5.5.6: + resolution: {integrity: sha512-ifetmTcxWfz+4qRW3pH/ujdTq2jQIj59AxJMIN26K5avYgU8dxycUETQonWiW+wPrYXA0j3Try0l1CnwVQtDqQ==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: '@types/eslint': '>=8.0.0' @@ -1112,8 +1172,8 @@ packages: resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - eslint@10.2.0: - resolution: {integrity: sha512-+L0vBFYGIpSNIt/KWTpFonPrqYvgKw1eUI5Vn7mEogrQcWtWYtNQ7dNqC+px/J0idT3BAkiWrhfS7k+Tum8TUA==} + eslint@10.4.1: + resolution: {integrity: sha512-AyIKhnOBuOAdueD7RB3xB+YeAWScb9jHsJBgH2Hcde8InP5JYhqrRR6iTMHyTEwgENK54Cp44e4v8BwNhsuHuw==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} hasBin: true peerDependencies: @@ -1149,12 +1209,6 @@ packages: resolution: {integrity: sha512-9Be3ZoN4LmYR90tUoVu2te2BsbzHfhJyfEiAVfz7N5/zv+jduIfLrV2xdQXOHbaD6KgpGdO9PRPM1Y4Q9QkPkA==} engines: {node: ^18.19.0 || >=20.5.0} - 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==} @@ -1167,8 +1221,8 @@ packages: fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - fast-uri@3.1.0: - resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} + fast-uri@3.1.2: + resolution: {integrity: sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==} fdir@6.5.0: resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} @@ -1195,54 +1249,54 @@ 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==} get-caller-file@2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} - get-east-asian-width@1.5.0: - resolution: {integrity: sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==} + get-east-asian-width@1.6.0: + resolution: {integrity: sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==} engines: {node: '>=18'} get-stream@9.0.1: resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==} engines: {node: '>=18'} - git-cliff-darwin-arm64@2.12.0: - resolution: {integrity: sha512-k3jzFDmkjc+6MjpnqvRenzMWRbZN5J+w3iQ8WNt9pSmPewNJIm92O/G6AbAxQaCbSfzQapeZ0e+5wSacVc62GA==} + git-cliff-darwin-arm64@2.13.1: + resolution: {integrity: sha512-3ebPUnUlLmrSZDHknSZQmyZV7DEJVtKse8I25Am0cENET5Py9u9Hg9k8IRXdiDtHtPDs6MYZx7BOi11WtcfqSg==} cpu: [arm64] os: [darwin] - git-cliff-darwin-x64@2.12.0: - resolution: {integrity: sha512-Kkoe+nfmXM/WMcZuC+OaIGA5vj847Ima6NEaaHnyb7Xsri+OAJryPXlABV7q6UeGfiiN2MlL8UsoHgnIEIQLqQ==} + git-cliff-darwin-x64@2.13.1: + resolution: {integrity: sha512-KZfggGAiw1EvZH3BOUclEU4eGCP2+Z+lH/N2Ni3FH9L2M1U7FYJqqaMhqgO8azTj67betvDshH8WBUkIkSsVxA==} cpu: [x64] os: [darwin] - git-cliff-linux-arm64@2.12.0: - resolution: {integrity: sha512-eTp2gZjV4LmfzdlhFsYFYuWf5mojALU03X/37r3VmnpuabaijuTEQo/zm/0BKP8gPiLKLR4ofdUvE1OSisCE1A==} + git-cliff-linux-arm64@2.13.1: + resolution: {integrity: sha512-clNRcNzdvk4GKyTt3ZhhWqcrjVRghcUcGNSV/Y87YJf3Mc/zl9ajUAhnXPOBSX/KWBr2od5SmkCt0qGYagY07g==} cpu: [arm64] os: [linux] - git-cliff-linux-x64@2.12.0: - resolution: {integrity: sha512-abidFG6dH2N5hPUF245/kRYdwViP11Pz7ZwIW/a86CJLZ/WSE7dJt0f2cUIkxTcFSsp11OwuLc5k1hAbwmiIRw==} + git-cliff-linux-x64@2.13.1: + resolution: {integrity: sha512-gZcIQhIQ1lDUMD8UieUSEZAYoyZN7nPd8O3VQoj1Ddhqll4UAS1Zxms1SU3U8pb0UTdc2m3ia/wtOnyhvbjdjQ==} cpu: [x64] os: [linux] - git-cliff-windows-arm64@2.12.0: - resolution: {integrity: sha512-rFuI+D/3Yq3jqafazZw5E68HsXEvcwI/B/5IPDIZD+QqZh8vETf4IXs7wVxYWWtHQJDC+G9ZrR3vE5648mdG3A==} + git-cliff-windows-arm64@2.13.1: + resolution: {integrity: sha512-+XubuQv68DuDwF0u6Af5d889MEf/RD48VBQS7ZmPi4sUSCXAZqRm1/ApCsStLqxMDCf1+7s05B/kNbm9wjV80A==} cpu: [arm64] os: [win32] - git-cliff-windows-x64@2.12.0: - resolution: {integrity: sha512-jskb3nyVGr4dekHSCDM/J6iho45t37wnmMGkPNq42kOoUp04JS96yMBrNRdXfXV9ViZsaZq3NaNu1e3QkhFlyA==} + git-cliff-windows-x64@2.13.1: + resolution: {integrity: sha512-Bi8ehp1VMkomY7M/356PgovKQ8CBRiuOOkq+aWC2evQuMFfXWjG0GBlPED9QkZoUJ4iQ5ygB5DYdK3BjhaOyPw==} cpu: [x64] os: [win32] - git-cliff@2.12.0: - resolution: {integrity: sha512-kjTm5439LsvMs/xRxndWBUetrA4aQfLE8DTbR/ER5H7fGn7ioeFG9YNAK1V7dpTtNi6k2uKYY4f3EvT8J1d+1Q==} - engines: {node: '>=18.19 || >=20.6 || >=21'} + git-cliff@2.13.1: + resolution: {integrity: sha512-2BzXwrom+SMHeNA5Ut+MtzqXejg0wbVwmzj3k7e9w62UQoyCDrM9UIcvtl6hnT3jocEQ1zLRQBaXXx97Gmnk7A==} + engines: {node: ^18.19 || >=20.6} hasBin: true git-raw-commits@5.0.1: @@ -1254,9 +1308,9 @@ packages: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} - global-directory@4.0.1: - resolution: {integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==} - engines: {node: '>=18'} + global-directory@5.0.0: + resolution: {integrity: sha512-1pgFdhK3J2LeM+dVf2Pd424yHx2ou338lC0ErNP2hPx4j8eW1Sp0XqSjNxtk6Tc4Kr5wlWtSvz8cn2yb7/SG/w==} + engines: {node: '>=20'} globals@16.5.0: resolution: {integrity: sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==} @@ -1294,9 +1348,9 @@ packages: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} - ini@4.1.1: - resolution: {integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + ini@6.0.0: + resolution: {integrity: sha512-IBTdIkzZNOpqm7q3dRqJvMaldXjDHWkEDfrwGEQTs5eaQMWV+djAhR+wahyNNMAa+qpbDUhBMVt4ZKNwpPm7xQ==} + engines: {node: ^20.17.0 || >=22.9.0} irregular-plurals@3.5.0: resolution: {integrity: sha512-1ANGLZ+Nkv1ptFb2pa8oG8Lem4krflKuX/gINiHJHjJUKaJHk/SXk5x6K3J+39/p0h1RQ2saROclJJ+QLvETCQ==} @@ -1350,8 +1404,8 @@ packages: js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - js-yaml@4.1.1: - resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} + js-yaml@4.2.0: + resolution: {integrity: sha512-ePWsvanv0DWuDRsW8dnt+R4jQ31SCRCQ7hhNcPXZPsoBZiemuZNYGf7adZdqX2D86j6rvKp3RpCxVTSb8WQlOw==} hasBin: true jsesc@3.1.0: @@ -1374,8 +1428,8 @@ packages: json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - json-with-bigint@3.5.7: - resolution: {integrity: sha512-7ei3MdAI5+fJPVnKlW77TKNKwQ5ppSzWvhPuSuINT/GYW9ZOC1eRKOuhV9yHG5aEsUPj9BBx5JIekkmoLHxZOw==} + json-with-bigint@3.5.8: + resolution: {integrity: sha512-eq/4KP6K34kwa7TcFdtvnftvHCD9KvHOGGICWwMFc4dOOKF5t4iYqnfLK8otCRCRv06FXOzGGyqE8h8ElMvvdw==} keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} @@ -1392,6 +1446,15 @@ packages: engines: {node: '>=20.17'} hasBin: true + lint-staged@17.0.7: + resolution: {integrity: sha512-JrSobt+tW3rH8IOMi8tDZd3foorM5yPEkLD/V2NxobgHrFfHWGee4MOLVuZeScgxftEwbHrPHIFA/ZL+nUJeuA==} + engines: {node: '>=22.22.1'} + hasBin: true + + listr2@10.2.1: + resolution: {integrity: sha512-7I5knELsJKTUjXG+A6BkKAiGkW1i25fNa/xlUl9hFtk15WbE9jndA89xu5FzQKrY5llajE1hfZZFMILXkDHk/Q==} + engines: {node: '>=22.13.0'} + listr2@9.0.5: resolution: {integrity: sha512-ME4Fb83LgEgwNw96RKNvKV4VTLuXfoKudAmm2lP8Kk87KaMK0/Xrx/aAkMWmT8mDb+3MlFDspfbCs7adjRxA2g==} engines: {node: '>=20.0.0'} @@ -1400,26 +1463,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.camelcase@4.3.0: - resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} - - lodash.kebabcase@4.1.1: - resolution: {integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==} - - lodash.mergewith@4.6.2: - resolution: {integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==} - - lodash.snakecase@4.1.1: - resolution: {integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==} - - lodash.startcase@4.4.0: - resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} - - lodash.upperfirst@4.3.1: - resolution: {integrity: sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==} + lodash-es@4.18.1: + resolution: {integrity: sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==} log-symbols@7.0.1: resolution: {integrity: sha512-ja1E3yCr9i/0hmBVaM0bfwDjnGy8I/s6PP4DFp+yP+a+mrHO4Rm7DtmnqROTUkHIkqffC84YY7AeqX6oFk0WFg==} @@ -1437,8 +1482,8 @@ packages: resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} engines: {node: '>=18'} - minimatch@10.2.4: - resolution: {integrity: sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==} + minimatch@10.2.5: + resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} engines: {node: 18 || 20 || >=22} minimatch@9.0.9: @@ -1515,8 +1560,8 @@ packages: picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - picomatch@4.0.3: - resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} + picomatch@4.0.4: + resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} engines: {node: '>=12'} plur@5.1.0: @@ -1531,8 +1576,8 @@ packages: resolution: {integrity: sha512-SxToR7P8Y2lWmv/kTzVLC1t/GDI2WGjMwNhLLE9qtH8Q13C+aEmuRlzDst4Up4s0Wc8sF2M+J57iB3cMLqftfg==} engines: {node: '>=6.0.0'} - prettier@3.8.1: - resolution: {integrity: sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==} + prettier@3.8.3: + resolution: {integrity: sha512-7igPTM53cGHMW8xWuVTydi2KO233VFiTNyF5hLJqpilHfmn8C8gPf+PS7dUT64YcXFbiMGZxS9pCSxL/Dxm/Jw==} engines: {node: '>=14'} hasBin: true @@ -1567,8 +1612,8 @@ packages: rfdc@1.4.1: resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} - semver@7.7.4: - resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==} + semver@7.8.1: + resolution: {integrity: sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg==} engines: {node: '>=10'} hasBin: true @@ -1592,8 +1637,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'} string-argv@0.3.2: @@ -1608,8 +1653,8 @@ packages: resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} engines: {node: '>=18'} - string-width@8.2.0: - resolution: {integrity: sha512-6hJPQ8N0V0P3SNmP6h2J99RLuzrWz2gvT7VnK5tKvrNqJoyS9W4/Fb8mo31UiPvy00z7DQXkP2hnKBVav76thw==} + string-width@8.2.1: + resolution: {integrity: sha512-IIaP0g3iy9Cyy18w3M9YcaDudujEAVHKt3a3QJg1+sr/oX96TbaGUubG0hJyCjCBThFH+tFpcIyoUHUn1ogaLA==} engines: {node: '>=20'} strip-ansi@6.0.1: @@ -1632,24 +1677,24 @@ packages: resolution: {integrity: sha512-UKbpT93hN5Nr9go5UY7bopIB9YQlMz9nm/ct4IXt/irb5YRkn9WaqrOBJGZ5Pwvsd5FQzSVeYlGdXoCAPQZrPg==} engines: {node: '>=20'} - synckit@0.11.12: - resolution: {integrity: sha512-Bh7QjT8/SuKUIfObSXNHNSK6WHo6J1tHCqJsuaFDP7gP0fkzSfTxI8y85JrppZ0h8l0maIgc2tfuZQ6/t3GtnQ==} + synckit@0.11.13: + resolution: {integrity: sha512-eNRKgb3z66Yp3D2CixVujOUvXLFUTij/zVnV8KRyvFdQwpz7I5DS8UfRkTeLzb64u+dkzDSdelE24izu+zSSUg==} engines: {node: ^14.18.0 || >=16.0.0} - tinyexec@1.0.4: - resolution: {integrity: sha512-u9r3uZC0bdpGOXtlxUIdwf9pkmvhqJdrVCH9fapQtgy/OeTTMZ1nqH7agtvEfmGui6e1XxjcdrlxvxJvc3sMqw==} + tinyexec@1.2.4: + resolution: {integrity: sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg==} engines: {node: '>=18'} - tinyglobby@0.2.15: - resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} + tinyglobby@0.2.17: + resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} engines: {node: '>=12.0.0'} tinypool@2.1.0: resolution: {integrity: sha512-Pugqs6M0m7Lv1I7FtxN4aoyToKg1C4tu+/381vH35y8oENM/Ai7f7C4StcoK4/+BSw9ebcS8jRiVrORFKCALLw==} engines: {node: ^20.0.0 || >=22.0.0} - 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' @@ -1658,31 +1703,31 @@ packages: resolution: {integrity: sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==} engines: {node: '>=0.6.11 <=0.7.0 || >=0.7.3'} - turbo@2.9.4: - resolution: {integrity: sha512-wZ/kMcZCuK5oEp7sXSSo/5fzKjP9I2EhoiarZjyCm2Ixk0WxFrC/h0gF3686eHHINoFQOOSWgB/pGfvkR8rkgQ==} + turbo@2.9.16: + resolution: {integrity: sha512-NqgRQy6j6dPYcdSdv0q1g9QsZg7SWg87RERM8otw/1AtKU2yTFVClOM7cbwKzOonZr/Ek1blTBucw64L9H0Bwg==} hasBin: true type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} - typescript-eslint@8.56.1: - resolution: {integrity: sha512-U4lM6pjmBX7J5wk4szltF7I1cGBHXZopnAXCMXb3+fZ3B/0Z3hq3wS/CCUB2NZBNAExK92mCU2tEohWuwVMsDQ==} + typescript-eslint@8.60.1: + resolution: {integrity: sha512-6m5hkkRAp8lKvhVpcprAIn5KkehQEh+47oHH2VGnExEh7dhNxXlg6GPAOIu6TxbVQxhebrJDvjl3020ooiWCMA==} 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==} + typescript@6.0.3: + resolution: {integrity: sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==} engines: {node: '>=14.17'} hasBin: true - undici-types@7.18.2: - resolution: {integrity: sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==} + undici-types@7.24.6: + resolution: {integrity: sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==} - undici@6.23.0: - resolution: {integrity: sha512-VfQPToRA5FZs/qJxLIinmU59u0r7LXqoJkCzinq3ckNJp3vKEh7jTWN589YQ5+aoAC/TGRLyJLCPKcLQbM8r9g==} + undici@6.26.0: + resolution: {integrity: sha512-4yqz8a3n5HmGTlsbADNtr/dJlhkh/55Rq798G6ibiULcXbDtaLpTl1pvdqcbFfeoj3iSi52lePFM7h9H21cw/A==} engines: {node: '>=18.17'} unicorn-magic@0.3.0: @@ -1704,6 +1749,10 @@ packages: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} + wrap-ansi@10.0.0: + resolution: {integrity: sha512-SGcvg80f0wUy2/fXES19feHMz8E0JoXv2uNgHOu4Dgi2OrCy1lqwFYEJz1BLbDI0exjPMe/ZdzZ/YpGECBG/aQ==} + engines: {node: '>=20'} + wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} @@ -1716,8 +1765,8 @@ packages: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} - yaml@2.8.2: - resolution: {integrity: sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==} + yaml@2.9.0: + resolution: {integrity: sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==} engines: {node: '>= 14.6'} hasBin: true @@ -1725,10 +1774,18 @@ packages: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} + yargs-parser@22.0.0: + resolution: {integrity: sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==} + engines: {node: ^20.19.0 || ^22.12.0 || >=23} + yargs@17.7.2: resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} engines: {node: '>=12'} + yargs@18.0.0: + resolution: {integrity: sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==} + engines: {node: ^20.19.0 || ^22.12.0 || >=23} + yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} @@ -1739,92 +1796,92 @@ packages: snapshots: - '@actions/core@3.0.0': + '@actions/core@3.0.1': dependencies: '@actions/exec': 3.0.0 - '@actions/http-client': 4.0.0 + '@actions/http-client': 4.0.1 '@actions/exec@3.0.0': dependencies: '@actions/io': 3.0.2 - '@actions/github@9.0.0': + '@actions/github@9.1.1': dependencies: '@actions/http-client': 3.0.2 '@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': 10.0.10 '@octokit/request-error': 7.1.0 - undici: 6.23.0 + undici: 6.26.0 '@actions/http-client@3.0.2': dependencies: tunnel: 0.0.6 - undici: 6.23.0 + undici: 6.26.0 - '@actions/http-client@4.0.0': + '@actions/http-client@4.0.1': dependencies: tunnel: 0.0.6 - undici: 6.23.0 + undici: 6.26.0 '@actions/io@3.0.2': {} - '@babel/code-frame@7.29.0': + '@babel/code-frame@7.29.7': dependencies: - '@babel/helper-validator-identifier': 7.28.5 + '@babel/helper-validator-identifier': 7.29.7 js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/generator@7.29.1': + '@babel/generator@7.29.7': dependencies: - '@babel/parser': 7.29.0 - '@babel/types': 7.29.0 + '@babel/parser': 7.29.7 + '@babel/types': 7.29.7 '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 jsesc: 3.1.0 - '@babel/helper-globals@7.28.0': {} + '@babel/helper-globals@7.29.7': {} - '@babel/helper-string-parser@7.27.1': {} + '@babel/helper-string-parser@7.29.7': {} - '@babel/helper-validator-identifier@7.28.5': {} + '@babel/helper-validator-identifier@7.29.7': {} - '@babel/parser@7.29.0': + '@babel/parser@7.29.7': dependencies: - '@babel/types': 7.29.0 + '@babel/types': 7.29.7 - '@babel/template@7.28.6': + '@babel/template@7.29.7': dependencies: - '@babel/code-frame': 7.29.0 - '@babel/parser': 7.29.0 - '@babel/types': 7.29.0 + '@babel/code-frame': 7.29.7 + '@babel/parser': 7.29.7 + '@babel/types': 7.29.7 - '@babel/traverse@7.29.0': + '@babel/traverse@7.29.7': dependencies: - '@babel/code-frame': 7.29.0 - '@babel/generator': 7.29.1 - '@babel/helper-globals': 7.28.0 - '@babel/parser': 7.29.0 - '@babel/template': 7.28.6 - '@babel/types': 7.29.0 + '@babel/code-frame': 7.29.7 + '@babel/generator': 7.29.7 + '@babel/helper-globals': 7.29.7 + '@babel/parser': 7.29.7 + '@babel/template': 7.29.7 + '@babel/types': 7.29.7 debug: 4.4.3 transitivePeerDependencies: - supports-color - '@babel/types@7.29.0': + '@babel/types@7.29.7': dependencies: - '@babel/helper-string-parser': 7.27.1 - '@babel/helper-validator-identifier': 7.28.5 + '@babel/helper-string-parser': 7.29.7 + '@babel/helper-validator-identifier': 7.29.7 - '@commitlint/cli@20.5.0(@types/node@25.5.2)(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.3.0)(typescript@5.9.3)': + '@commitlint/cli@20.5.3(@types/node@25.9.1)(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0)(typescript@6.0.3)': dependencies: '@commitlint/format': 20.5.0 - '@commitlint/lint': 20.5.0 - '@commitlint/load': 20.5.0(@types/node@25.5.2)(typescript@5.9.3) - '@commitlint/read': 20.5.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.3.0) + '@commitlint/lint': 20.5.3 + '@commitlint/load': 20.5.3(@types/node@25.9.1)(typescript@6.0.3) + '@commitlint/read': 20.5.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0) '@commitlint/types': 20.5.0 - tinyexec: 1.0.4 + tinyexec: 1.2.4 yargs: 17.7.2 transitivePeerDependencies: - '@types/node' @@ -1832,54 +1889,114 @@ snapshots: - conventional-commits-parser - typescript - '@commitlint/config-conventional@20.5.0': + '@commitlint/cli@21.0.2(@types/node@25.9.1)(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0)(typescript@6.0.3)': + dependencies: + '@commitlint/format': 21.0.1 + '@commitlint/lint': 21.0.2 + '@commitlint/load': 21.0.2(@types/node@25.9.1)(typescript@6.0.3) + '@commitlint/read': 21.0.2(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0) + '@commitlint/types': 21.0.1 + tinyexec: 1.2.4 + yargs: 18.0.0 + transitivePeerDependencies: + - '@types/node' + - conventional-commits-filter + - conventional-commits-parser + - typescript + + '@commitlint/config-conventional@20.5.3': dependencies: '@commitlint/types': 20.5.0 - conventional-changelog-conventionalcommits: 9.3.0 + conventional-changelog-conventionalcommits: 9.3.1 + + '@commitlint/config-conventional@21.0.2': + dependencies: + '@commitlint/types': 21.0.1 + conventional-changelog-conventionalcommits: 9.3.1 '@commitlint/config-validator@20.5.0': dependencies: '@commitlint/types': 20.5.0 - ajv: 8.18.0 + ajv: 8.20.0 + + '@commitlint/config-validator@21.0.1': + dependencies: + '@commitlint/types': 21.0.1 + ajv: 8.20.0 - '@commitlint/ensure@20.5.0': + '@commitlint/ensure@20.5.3': dependencies: '@commitlint/types': 20.5.0 - lodash.camelcase: 4.3.0 - lodash.kebabcase: 4.1.1 - lodash.snakecase: 4.1.1 - lodash.startcase: 4.4.0 - lodash.upperfirst: 4.3.1 + es-toolkit: 1.47.0 + + '@commitlint/ensure@21.0.1': + dependencies: + '@commitlint/types': 21.0.1 + es-toolkit: 1.47.0 '@commitlint/execute-rule@20.0.0': {} + '@commitlint/execute-rule@21.0.1': {} + '@commitlint/format@20.5.0': dependencies: '@commitlint/types': 20.5.0 picocolors: 1.1.1 + '@commitlint/format@21.0.1': + dependencies: + '@commitlint/types': 21.0.1 + picocolors: 1.1.1 + '@commitlint/is-ignored@20.5.0': dependencies: '@commitlint/types': 20.5.0 - semver: 7.7.4 + semver: 7.8.1 + + '@commitlint/is-ignored@21.0.2': + dependencies: + '@commitlint/types': 21.0.1 + semver: 7.8.1 - '@commitlint/lint@20.5.0': + '@commitlint/lint@20.5.3': dependencies: '@commitlint/is-ignored': 20.5.0 '@commitlint/parse': 20.5.0 - '@commitlint/rules': 20.5.0 + '@commitlint/rules': 20.5.3 '@commitlint/types': 20.5.0 - '@commitlint/load@20.5.0(@types/node@25.5.2)(typescript@5.9.3)': + '@commitlint/lint@21.0.2': + dependencies: + '@commitlint/is-ignored': 21.0.2 + '@commitlint/parse': 21.0.2 + '@commitlint/rules': 21.0.2 + '@commitlint/types': 21.0.1 + + '@commitlint/load@20.5.3(@types/node@25.9.1)(typescript@6.0.3)': dependencies: '@commitlint/config-validator': 20.5.0 '@commitlint/execute-rule': 20.0.0 - '@commitlint/resolve-extends': 20.5.0 + '@commitlint/resolve-extends': 20.5.3 '@commitlint/types': 20.5.0 - cosmiconfig: 9.0.1(typescript@5.9.3) - cosmiconfig-typescript-loader: 6.2.0(@types/node@25.5.2)(cosmiconfig@9.0.1(typescript@5.9.3))(typescript@5.9.3) + cosmiconfig: 9.0.1(typescript@6.0.3) + cosmiconfig-typescript-loader: 6.3.0(@types/node@25.9.1)(cosmiconfig@9.0.1(typescript@6.0.3))(typescript@6.0.3) + es-toolkit: 1.47.0 + is-plain-obj: 4.1.0 + picocolors: 1.1.1 + transitivePeerDependencies: + - '@types/node' + - typescript + + '@commitlint/load@21.0.2(@types/node@25.9.1)(typescript@6.0.3)': + dependencies: + '@commitlint/config-validator': 21.0.1 + '@commitlint/execute-rule': 21.0.1 + '@commitlint/resolve-extends': 21.0.1 + '@commitlint/types': 21.0.1 + cosmiconfig: 9.0.1(typescript@6.0.3) + cosmiconfig-typescript-loader: 6.3.0(@types/node@25.9.1)(cosmiconfig@9.0.1(typescript@6.0.3))(typescript@6.0.3) + es-toolkit: 1.47.0 is-plain-obj: 4.1.0 - lodash.mergewith: 4.6.2 picocolors: 1.1.1 transitivePeerDependencies: - '@types/node' @@ -1887,66 +2004,102 @@ snapshots: '@commitlint/message@20.4.3': {} + '@commitlint/message@21.0.2': {} + '@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/parse@21.0.2': + dependencies: + '@commitlint/types': 21.0.1 + 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.4.0)': dependencies: '@commitlint/top-level': 20.4.3 '@commitlint/types': 20.5.0 - git-raw-commits: 5.0.1(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.3.0) + git-raw-commits: 5.0.1(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0) minimist: 1.2.8 - tinyexec: 1.0.4 + tinyexec: 1.2.4 + transitivePeerDependencies: + - conventional-commits-filter + - conventional-commits-parser + + '@commitlint/read@21.0.2(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0)': + dependencies: + '@commitlint/top-level': 21.0.2 + '@commitlint/types': 21.0.1 + git-raw-commits: 5.0.1(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0) + tinyexec: 1.2.4 transitivePeerDependencies: - conventional-commits-filter - conventional-commits-parser - '@commitlint/resolve-extends@20.5.0': + '@commitlint/resolve-extends@20.5.3': dependencies: '@commitlint/config-validator': 20.5.0 '@commitlint/types': 20.5.0 - global-directory: 4.0.1 + es-toolkit: 1.47.0 + global-directory: 5.0.0 import-meta-resolve: 4.2.0 - lodash.mergewith: 4.6.2 resolve-from: 5.0.0 - '@commitlint/rules@20.5.0': + '@commitlint/resolve-extends@21.0.1': + dependencies: + '@commitlint/config-validator': 21.0.1 + '@commitlint/types': 21.0.1 + es-toolkit: 1.47.0 + global-directory: 5.0.0 + resolve-from: 5.0.0 + + '@commitlint/rules@20.5.3': dependencies: - '@commitlint/ensure': 20.5.0 + '@commitlint/ensure': 20.5.3 '@commitlint/message': 20.4.3 '@commitlint/to-lines': 20.0.0 '@commitlint/types': 20.5.0 + '@commitlint/rules@21.0.2': + dependencies: + '@commitlint/ensure': 21.0.1 + '@commitlint/message': 21.0.2 + '@commitlint/to-lines': 21.0.1 + '@commitlint/types': 21.0.1 + '@commitlint/to-lines@20.0.0': {} + '@commitlint/to-lines@21.0.1': {} + '@commitlint/top-level@20.4.3': dependencies: escalade: 3.2.0 + '@commitlint/top-level@21.0.2': + dependencies: + escalade: 3.2.0 + '@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)': + '@commitlint/types@21.0.1': 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 + picocolors: 1.1.1 - '@conventional-changelog/git-client@2.6.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.3.0)': + '@conventional-changelog/git-client@2.7.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 + semver: 7.8.1 optionalDependencies: conventional-commits-filter: 5.0.0 - conventional-commits-parser: 6.3.0 + conventional-commits-parser: 6.4.0 '@dprint/formatter@0.5.1': {} @@ -1954,66 +2107,71 @@ snapshots: '@dprint/toml@0.7.0': {} - '@eslint-community/eslint-utils@4.9.1(eslint@10.2.0(jiti@2.6.1))': + '@eslint-community/eslint-utils@4.9.1(eslint@10.4.1(jiti@2.6.1))': dependencies: - eslint: 10.2.0(jiti@2.6.1) + eslint: 10.4.1(jiti@2.6.1) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.2': {} - '@eslint/config-array@0.23.4': + '@eslint/config-array@0.23.5': dependencies: - '@eslint/object-schema': 3.0.4 + '@eslint/object-schema': 3.0.5 debug: 4.4.3 - minimatch: 10.2.4 + minimatch: 10.2.5 transitivePeerDependencies: - supports-color - '@eslint/config-helpers@0.5.4': + '@eslint/config-helpers@0.6.0': dependencies: - '@eslint/core': 1.2.0 + '@eslint/core': 1.2.1 - '@eslint/core@1.2.0': + '@eslint/core@1.2.1': dependencies: '@types/json-schema': 7.0.15 '@eslint/js@9.39.4': {} - '@eslint/object-schema@3.0.4': {} + '@eslint/object-schema@3.0.5': {} - '@eslint/plugin-kit@0.7.0': + '@eslint/plugin-kit@0.7.2': dependencies: - '@eslint/core': 1.2.0 + '@eslint/core': 1.2.1 levn: 0.4.1 - '@favware/cliff-jumper@6.0.0': + '@favware/cliff-jumper@6.1.0': dependencies: '@favware/colorette-spinner': 1.0.1 - '@octokit/auth-token': 5.1.2 - '@octokit/core': 6.1.6 - '@octokit/plugin-retry': 7.2.1(@octokit/core@6.1.6) + '@octokit/auth-token': 6.0.0 + '@octokit/core': 7.0.6 + '@octokit/plugin-retry': 8.1.0(@octokit/core@7.0.6) '@sapphire/result': 2.8.0 - '@sapphire/utilities': 3.18.1 + '@sapphire/utilities': 3.18.2 colorette: 2.0.20 - commander: 13.1.0 - conventional-recommended-bump: 10.0.0 + commander: 14.0.3 + conventional-recommended-bump: 11.2.0 execa: 9.6.1 - git-cliff: 2.12.0 - js-yaml: 4.1.1 - semver: 7.7.4 - smol-toml: 1.6.0 + git-cliff: 2.13.1 + js-yaml: 4.2.0 + semver: 7.8.1 + smol-toml: 1.6.1 '@favware/colorette-spinner@1.0.1': dependencies: colorette: 2.0.20 - '@humanfs/core@0.19.1': {} + '@humanfs/core@0.19.2': + dependencies: + '@humanfs/types': 0.15.0 - '@humanfs/node@0.16.7': + '@humanfs/node@0.16.8': dependencies: - '@humanfs/core': 0.19.1 + '@humanfs/core': 0.19.2 + '@humanfs/types': 0.15.0 '@humanwhocodes/retry': 0.4.3 + '@humanfs/types@0.15.0': {} + '@humanwhocodes/module-importer@1.0.1': {} '@humanwhocodes/retry@0.4.3': {} @@ -2032,22 +2190,23 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 - '@nanoforge-dev/actions@1.2.3': + '@nanoforge-dev/actions@2.1.2': dependencies: - '@actions/core': 3.0.0 - '@actions/github': 9.0.0 + '@actions/core': 3.0.1 + '@actions/github': 9.1.1 commander: 14.0.3 + semver: 7.8.1 - '@nanoforge-dev/utils-eslint-config@1.0.2(@types/eslint@9.6.1)(eslint@10.2.0(jiti@2.6.1))(prettier@3.8.1)(typescript@5.9.3)': + '@nanoforge-dev/utils-eslint-config@1.0.2(@types/eslint@9.6.1)(eslint@10.4.1(jiti@2.6.1))(prettier@3.8.3)(typescript@6.0.3)': dependencies: '@eslint/js': 9.39.4 - '@favware/cliff-jumper': 6.0.0 - eslint-config-prettier: 10.1.8(eslint@10.2.0(jiti@2.6.1)) - eslint-formatter-pretty: 7.0.0 - eslint-plugin-format: 1.5.0(eslint@10.2.0(jiti@2.6.1)) - eslint-plugin-prettier: 5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.2.0(jiti@2.6.1)))(eslint@10.2.0(jiti@2.6.1))(prettier@3.8.1) + '@favware/cliff-jumper': 6.1.0 + eslint-config-prettier: 10.1.8(eslint@10.4.1(jiti@2.6.1)) + eslint-formatter-pretty: 7.1.0 + eslint-plugin-format: 1.5.0(eslint@10.4.1(jiti@2.6.1)) + eslint-plugin-prettier: 5.5.6(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.4.1(jiti@2.6.1)))(eslint@10.4.1(jiti@2.6.1))(prettier@3.8.3) globals: 16.5.0 - typescript-eslint: 8.56.1(eslint@10.2.0(jiti@2.6.1))(typescript@5.9.3) + typescript-eslint: 8.60.1(eslint@10.4.1(jiti@2.6.1))(typescript@6.0.3) transitivePeerDependencies: - '@types/eslint' - eslint @@ -2057,54 +2216,29 @@ snapshots: '@nanoforge-dev/utils-prettier-config@1.0.2': {} - '@octokit/auth-token@5.1.2': {} - '@octokit/auth-token@6.0.0': {} - '@octokit/core@6.1.6': - dependencies: - '@octokit/auth-token': 5.1.2 - '@octokit/graphql': 8.2.2 - '@octokit/request': 9.2.4 - '@octokit/request-error': 6.1.8 - '@octokit/types': 14.1.0 - before-after-hook: 3.0.2 - universal-user-agent: 7.0.3 - '@octokit/core@7.0.6': dependencies: '@octokit/auth-token': 6.0.0 '@octokit/graphql': 9.0.3 - '@octokit/request': 10.0.8 + '@octokit/request': 10.0.10 '@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@10.1.4': - dependencies: - '@octokit/types': 14.1.0 - universal-user-agent: 7.0.3 - '@octokit/endpoint@11.0.3': dependencies: '@octokit/types': 16.0.0 universal-user-agent: 7.0.3 - '@octokit/graphql@8.2.2': - dependencies: - '@octokit/request': 9.2.4 - '@octokit/types': 14.1.0 - universal-user-agent: 7.0.3 - '@octokit/graphql@9.0.3': dependencies: - '@octokit/request': 10.0.8 + '@octokit/request': 10.0.10 '@octokit/types': 16.0.0 universal-user-agent: 7.0.3 - '@octokit/openapi-types@25.1.0': {} - '@octokit/openapi-types@27.0.0': {} '@octokit/plugin-paginate-rest@14.0.0(@octokit/core@7.0.6)': @@ -2117,80 +2251,76 @@ snapshots: '@octokit/core': 7.0.6 '@octokit/types': 16.0.0 - '@octokit/plugin-retry@7.2.1(@octokit/core@6.1.6)': + '@octokit/plugin-retry@8.1.0(@octokit/core@7.0.6)': dependencies: - '@octokit/core': 6.1.6 - '@octokit/request-error': 6.1.8 - '@octokit/types': 14.1.0 + '@octokit/core': 7.0.6 + '@octokit/request-error': 7.1.0 + '@octokit/types': 16.0.0 bottleneck: 2.19.5 - '@octokit/request-error@6.1.8': - dependencies: - '@octokit/types': 14.1.0 - '@octokit/request-error@7.1.0': dependencies: '@octokit/types': 16.0.0 - '@octokit/request@10.0.8': + '@octokit/request@10.0.10': 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.7 - universal-user-agent: 7.0.3 - - '@octokit/request@9.2.4': - dependencies: - '@octokit/endpoint': 10.1.4 - '@octokit/request-error': 6.1.8 - '@octokit/types': 14.1.0 - fast-content-type-parse: 2.0.1 + content-type: 2.0.0 + json-with-bigint: 3.5.8 universal-user-agent: 7.0.3 - '@octokit/types@14.1.0': - dependencies: - '@octokit/openapi-types': 25.1.0 - '@octokit/types@16.0.0': dependencies: '@octokit/openapi-types': 27.0.0 - '@oven/bun-darwin-aarch64@1.3.13': + '@oven/bun-darwin-aarch64@1.3.14': optional: true - '@oven/bun-darwin-x64-baseline@1.3.13': + '@oven/bun-darwin-x64-baseline@1.3.14': optional: true - '@oven/bun-darwin-x64@1.3.13': + '@oven/bun-darwin-x64@1.3.14': optional: true - '@oven/bun-linux-aarch64-musl@1.3.13': + '@oven/bun-freebsd-aarch64@1.3.14': optional: true - '@oven/bun-linux-aarch64@1.3.13': + '@oven/bun-freebsd-x64@1.3.14': optional: true - '@oven/bun-linux-x64-baseline@1.3.13': + '@oven/bun-linux-aarch64-android@1.3.14': optional: true - '@oven/bun-linux-x64-musl-baseline@1.3.13': + '@oven/bun-linux-aarch64-musl@1.3.14': optional: true - '@oven/bun-linux-x64-musl@1.3.13': + '@oven/bun-linux-aarch64@1.3.14': optional: true - '@oven/bun-linux-x64@1.3.13': + '@oven/bun-linux-x64-android@1.3.14': optional: true - '@oven/bun-windows-aarch64@1.3.13': + '@oven/bun-linux-x64-baseline@1.3.14': optional: true - '@oven/bun-windows-x64-baseline@1.3.13': + '@oven/bun-linux-x64-musl-baseline@1.3.14': optional: true - '@oven/bun-windows-x64@1.3.13': + '@oven/bun-linux-x64-musl@1.3.14': + optional: true + + '@oven/bun-linux-x64@1.3.14': + optional: true + + '@oven/bun-windows-aarch64@1.3.14': + optional: true + + '@oven/bun-windows-x64-baseline@1.3.14': + optional: true + + '@oven/bun-windows-x64@1.3.14': optional: true '@oxfmt/binding-android-arm-eabi@0.35.0': @@ -2250,11 +2380,11 @@ snapshots: '@oxfmt/binding-win32-x64-msvc@0.35.0': optional: true - '@pkgr/core@0.2.9': {} + '@pkgr/core@0.3.6': {} '@sapphire/result@2.8.0': {} - '@sapphire/utilities@3.18.1': {} + '@sapphire/utilities@3.18.2': {} '@sec-ant/readable-stream@0.4.1': {} @@ -2266,148 +2396,146 @@ snapshots: '@sindresorhus/merge-streams@4.0.0': {} - '@trivago/prettier-plugin-sort-imports@6.0.2(prettier@3.8.1)': + '@trivago/prettier-plugin-sort-imports@6.0.2(prettier@3.8.3)': dependencies: - '@babel/generator': 7.29.1 - '@babel/parser': 7.29.0 - '@babel/traverse': 7.29.0 - '@babel/types': 7.29.0 + '@babel/generator': 7.29.7 + '@babel/parser': 7.29.7 + '@babel/traverse': 7.29.7 + '@babel/types': 7.29.7 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 + prettier: 3.8.3 transitivePeerDependencies: - supports-color - '@turbo/darwin-64@2.9.4': + '@turbo/darwin-64@2.9.16': optional: true - '@turbo/darwin-arm64@2.9.4': + '@turbo/darwin-arm64@2.9.16': optional: true - '@turbo/linux-64@2.9.4': + '@turbo/linux-64@2.9.16': optional: true - '@turbo/linux-arm64@2.9.4': + '@turbo/linux-arm64@2.9.16': optional: true - '@turbo/windows-64@2.9.4': + '@turbo/windows-64@2.9.16': optional: true - '@turbo/windows-arm64@2.9.4': + '@turbo/windows-arm64@2.9.16': optional: true - '@types/bun@1.3.13': + '@types/bun@1.3.14': dependencies: - bun-types: 1.3.13 + bun-types: 1.3.14 '@types/eslint@9.6.1': dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 '@types/json-schema': 7.0.15 '@types/esrecurse@4.3.1': {} - '@types/estree@1.0.8': {} + '@types/estree@1.0.9': {} '@types/json-schema@7.0.15': {} - '@types/node@25.5.2': + '@types/node@25.9.1': dependencies: - undici-types: 7.18.2 - - '@types/semver@7.7.1': {} + undici-types: 7.24.6 - '@typescript-eslint/eslint-plugin@8.56.1(@typescript-eslint/parser@8.56.1(eslint@10.2.0(jiti@2.6.1))(typescript@5.9.3))(eslint@10.2.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/eslint-plugin@8.60.1(@typescript-eslint/parser@8.60.1(eslint@10.4.1(jiti@2.6.1))(typescript@6.0.3))(eslint@10.4.1(jiti@2.6.1))(typescript@6.0.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.56.1(eslint@10.2.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.56.1 - '@typescript-eslint/type-utils': 8.56.1(eslint@10.2.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/utils': 8.56.1(eslint@10.2.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.56.1 - eslint: 10.2.0(jiti@2.6.1) + '@typescript-eslint/parser': 8.60.1(eslint@10.4.1(jiti@2.6.1))(typescript@6.0.3) + '@typescript-eslint/scope-manager': 8.60.1 + '@typescript-eslint/type-utils': 8.60.1(eslint@10.4.1(jiti@2.6.1))(typescript@6.0.3) + '@typescript-eslint/utils': 8.60.1(eslint@10.4.1(jiti@2.6.1))(typescript@6.0.3) + '@typescript-eslint/visitor-keys': 8.60.1 + eslint: 10.4.1(jiti@2.6.1) ignore: 7.0.5 natural-compare: 1.4.0 - ts-api-utils: 2.4.0(typescript@5.9.3) - typescript: 5.9.3 + ts-api-utils: 2.5.0(typescript@6.0.3) + typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.56.1(eslint@10.2.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/parser@8.60.1(eslint@10.4.1(jiti@2.6.1))(typescript@6.0.3)': dependencies: - '@typescript-eslint/scope-manager': 8.56.1 - '@typescript-eslint/types': 8.56.1 - '@typescript-eslint/typescript-estree': 8.56.1(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.56.1 + '@typescript-eslint/scope-manager': 8.60.1 + '@typescript-eslint/types': 8.60.1 + '@typescript-eslint/typescript-estree': 8.60.1(typescript@6.0.3) + '@typescript-eslint/visitor-keys': 8.60.1 debug: 4.4.3 - eslint: 10.2.0(jiti@2.6.1) - typescript: 5.9.3 + eslint: 10.4.1(jiti@2.6.1) + typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.56.1(typescript@5.9.3)': + '@typescript-eslint/project-service@8.60.1(typescript@6.0.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.56.1(typescript@5.9.3) - '@typescript-eslint/types': 8.56.1 + '@typescript-eslint/tsconfig-utils': 8.60.1(typescript@6.0.3) + '@typescript-eslint/types': 8.60.1 debug: 4.4.3 - typescript: 5.9.3 + typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.56.1': + '@typescript-eslint/scope-manager@8.60.1': dependencies: - '@typescript-eslint/types': 8.56.1 - '@typescript-eslint/visitor-keys': 8.56.1 + '@typescript-eslint/types': 8.60.1 + '@typescript-eslint/visitor-keys': 8.60.1 - '@typescript-eslint/tsconfig-utils@8.56.1(typescript@5.9.3)': + '@typescript-eslint/tsconfig-utils@8.60.1(typescript@6.0.3)': dependencies: - typescript: 5.9.3 + typescript: 6.0.3 - '@typescript-eslint/type-utils@8.56.1(eslint@10.2.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/type-utils@8.60.1(eslint@10.4.1(jiti@2.6.1))(typescript@6.0.3)': dependencies: - '@typescript-eslint/types': 8.56.1 - '@typescript-eslint/typescript-estree': 8.56.1(typescript@5.9.3) - '@typescript-eslint/utils': 8.56.1(eslint@10.2.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/types': 8.60.1 + '@typescript-eslint/typescript-estree': 8.60.1(typescript@6.0.3) + '@typescript-eslint/utils': 8.60.1(eslint@10.4.1(jiti@2.6.1))(typescript@6.0.3) debug: 4.4.3 - eslint: 10.2.0(jiti@2.6.1) - ts-api-utils: 2.4.0(typescript@5.9.3) - typescript: 5.9.3 + eslint: 10.4.1(jiti@2.6.1) + ts-api-utils: 2.5.0(typescript@6.0.3) + typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.56.1': {} + '@typescript-eslint/types@8.60.1': {} - '@typescript-eslint/typescript-estree@8.56.1(typescript@5.9.3)': + '@typescript-eslint/typescript-estree@8.60.1(typescript@6.0.3)': dependencies: - '@typescript-eslint/project-service': 8.56.1(typescript@5.9.3) - '@typescript-eslint/tsconfig-utils': 8.56.1(typescript@5.9.3) - '@typescript-eslint/types': 8.56.1 - '@typescript-eslint/visitor-keys': 8.56.1 + '@typescript-eslint/project-service': 8.60.1(typescript@6.0.3) + '@typescript-eslint/tsconfig-utils': 8.60.1(typescript@6.0.3) + '@typescript-eslint/types': 8.60.1 + '@typescript-eslint/visitor-keys': 8.60.1 debug: 4.4.3 - minimatch: 10.2.4 - semver: 7.7.4 - tinyglobby: 0.2.15 - ts-api-utils: 2.4.0(typescript@5.9.3) - typescript: 5.9.3 + minimatch: 10.2.5 + semver: 7.8.1 + tinyglobby: 0.2.17 + ts-api-utils: 2.5.0(typescript@6.0.3) + typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.56.1(eslint@10.2.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/utils@8.60.1(eslint@10.4.1(jiti@2.6.1))(typescript@6.0.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.2.0(jiti@2.6.1)) - '@typescript-eslint/scope-manager': 8.56.1 - '@typescript-eslint/types': 8.56.1 - '@typescript-eslint/typescript-estree': 8.56.1(typescript@5.9.3) - eslint: 10.2.0(jiti@2.6.1) - typescript: 5.9.3 + '@eslint-community/eslint-utils': 4.9.1(eslint@10.4.1(jiti@2.6.1)) + '@typescript-eslint/scope-manager': 8.60.1 + '@typescript-eslint/types': 8.60.1 + '@typescript-eslint/typescript-estree': 8.60.1(typescript@6.0.3) + eslint: 10.4.1(jiti@2.6.1) + typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.56.1': + '@typescript-eslint/visitor-keys@8.60.1': dependencies: - '@typescript-eslint/types': 8.56.1 + '@typescript-eslint/types': 8.60.1 eslint-visitor-keys: 5.0.1 acorn-jsx@5.3.2(acorn@8.16.0): @@ -2416,17 +2544,17 @@ snapshots: acorn@8.16.0: {} - ajv@6.14.0: + ajv@6.15.0: dependencies: fast-deep-equal: 3.1.3 fast-json-stable-stringify: 2.1.0 json-schema-traverse: 0.4.1 uri-js: 4.4.1 - ajv@8.18.0: + ajv@8.20.0: dependencies: fast-deep-equal: 3.1.3 - fast-uri: 3.1.0 + fast-uri: 3.1.2 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 @@ -2452,38 +2580,40 @@ snapshots: balanced-match@4.0.4: {} - before-after-hook@3.0.2: {} - before-after-hook@4.0.0: {} bottleneck@2.19.5: {} - brace-expansion@2.0.2: + brace-expansion@2.1.1: dependencies: balanced-match: 1.0.2 - brace-expansion@5.0.4: + brace-expansion@5.0.6: dependencies: balanced-match: 4.0.4 - bun-types@1.3.13: + bun-types@1.3.14: dependencies: - '@types/node': 25.5.2 + '@types/node': 25.9.1 - bun@1.3.13: + bun@1.3.14: optionalDependencies: - '@oven/bun-darwin-aarch64': 1.3.13 - '@oven/bun-darwin-x64': 1.3.13 - '@oven/bun-darwin-x64-baseline': 1.3.13 - '@oven/bun-linux-aarch64': 1.3.13 - '@oven/bun-linux-aarch64-musl': 1.3.13 - '@oven/bun-linux-x64': 1.3.13 - '@oven/bun-linux-x64-baseline': 1.3.13 - '@oven/bun-linux-x64-musl': 1.3.13 - '@oven/bun-linux-x64-musl-baseline': 1.3.13 - '@oven/bun-windows-aarch64': 1.3.13 - '@oven/bun-windows-x64': 1.3.13 - '@oven/bun-windows-x64-baseline': 1.3.13 + '@oven/bun-darwin-aarch64': 1.3.14 + '@oven/bun-darwin-x64': 1.3.14 + '@oven/bun-darwin-x64-baseline': 1.3.14 + '@oven/bun-freebsd-aarch64': 1.3.14 + '@oven/bun-freebsd-x64': 1.3.14 + '@oven/bun-linux-aarch64': 1.3.14 + '@oven/bun-linux-aarch64-android': 1.3.14 + '@oven/bun-linux-aarch64-musl': 1.3.14 + '@oven/bun-linux-x64': 1.3.14 + '@oven/bun-linux-x64-android': 1.3.14 + '@oven/bun-linux-x64-baseline': 1.3.14 + '@oven/bun-linux-x64-musl': 1.3.14 + '@oven/bun-linux-x64-musl-baseline': 1.3.14 + '@oven/bun-windows-aarch64': 1.3.14 + '@oven/bun-windows-x64': 1.3.14 + '@oven/bun-windows-x64-baseline': 1.3.14 callsites@3.1.0: {} @@ -2496,7 +2626,7 @@ snapshots: cli-truncate@5.2.0: dependencies: slice-ansi: 8.0.0 - string-width: 8.2.0 + string-width: 8.2.1 cliui@8.0.1: dependencies: @@ -2504,6 +2634,12 @@ snapshots: strip-ansi: 6.0.1 wrap-ansi: 7.0.0 + cliui@9.0.1: + dependencies: + string-width: 7.2.0 + strip-ansi: 7.2.0 + wrap-ansi: 9.0.2 + color-convert@2.0.1: dependencies: color-name: 1.1.4 @@ -2512,8 +2648,6 @@ snapshots: colorette@2.0.20: {} - commander@13.1.0: {} - commander@14.0.3: {} compare-func@2.0.0: @@ -2521,11 +2655,13 @@ snapshots: array-ify: 1.0.0 dot-prop: 5.3.0 - conventional-changelog-angular@8.3.0: + content-type@2.0.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 @@ -2533,34 +2669,34 @@ 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: + conventional-recommended-bump@11.2.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': 2.7.0(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 - cosmiconfig-typescript-loader@6.2.0(@types/node@25.5.2)(cosmiconfig@9.0.1(typescript@5.9.3))(typescript@5.9.3): + cosmiconfig-typescript-loader@6.3.0(@types/node@25.9.1)(cosmiconfig@9.0.1(typescript@6.0.3))(typescript@6.0.3): dependencies: - '@types/node': 25.5.2 - cosmiconfig: 9.0.1(typescript@5.9.3) + '@types/node': 25.9.1 + cosmiconfig: 9.0.1(typescript@6.0.3) jiti: 2.6.1 - typescript: 5.9.3 + typescript: 6.0.3 - cosmiconfig@9.0.1(typescript@5.9.3): + cosmiconfig@9.0.1(typescript@6.0.3): dependencies: env-paths: 2.2.1 import-fresh: 3.3.1 - js-yaml: 4.1.1 + js-yaml: 4.2.0 parse-json: 5.2.0 optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.3 cross-spawn@7.0.6: dependencies: @@ -2590,15 +2726,17 @@ snapshots: dependencies: is-arrayish: 0.2.1 + es-toolkit@1.47.0: {} + escalade@3.2.0: {} escape-string-regexp@4.0.0: {} - eslint-config-prettier@10.1.8(eslint@10.2.0(jiti@2.6.1)): + eslint-config-prettier@10.1.8(eslint@10.4.1(jiti@2.6.1)): dependencies: - eslint: 10.2.0(jiti@2.6.1) + eslint: 10.4.1(jiti@2.6.1) - eslint-formatter-pretty@7.0.0: + eslint-formatter-pretty@7.1.0: dependencies: '@types/eslint': 9.6.1 ansi-escapes: 7.3.0 @@ -2606,45 +2744,45 @@ snapshots: eslint-rule-docs: 1.1.235 log-symbols: 7.0.1 plur: 5.1.0 - string-width: 8.2.0 + string-width: 8.2.1 supports-hyperlinks: 4.4.0 - eslint-formatting-reporter@0.0.0(eslint@10.2.0(jiti@2.6.1)): + eslint-formatting-reporter@0.0.0(eslint@10.4.1(jiti@2.6.1)): dependencies: - eslint: 10.2.0(jiti@2.6.1) + eslint: 10.4.1(jiti@2.6.1) prettier-linter-helpers: 1.0.1 eslint-parser-plain@0.1.1: {} - eslint-plugin-format@1.5.0(eslint@10.2.0(jiti@2.6.1)): + eslint-plugin-format@1.5.0(eslint@10.4.1(jiti@2.6.1)): dependencies: '@dprint/formatter': 0.5.1 '@dprint/markdown': 0.21.1 '@dprint/toml': 0.7.0 - eslint: 10.2.0(jiti@2.6.1) - eslint-formatting-reporter: 0.0.0(eslint@10.2.0(jiti@2.6.1)) + eslint: 10.4.1(jiti@2.6.1) + eslint-formatting-reporter: 0.0.0(eslint@10.4.1(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 + prettier: 3.8.3 + synckit: 0.11.13 - eslint-plugin-prettier@5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.2.0(jiti@2.6.1)))(eslint@10.2.0(jiti@2.6.1))(prettier@3.8.1): + eslint-plugin-prettier@5.5.6(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.4.1(jiti@2.6.1)))(eslint@10.4.1(jiti@2.6.1))(prettier@3.8.3): dependencies: - eslint: 10.2.0(jiti@2.6.1) - prettier: 3.8.1 + eslint: 10.4.1(jiti@2.6.1) + prettier: 3.8.3 prettier-linter-helpers: 1.0.1 - synckit: 0.11.12 + synckit: 0.11.13 optionalDependencies: '@types/eslint': 9.6.1 - eslint-config-prettier: 10.1.8(eslint@10.2.0(jiti@2.6.1)) + eslint-config-prettier: 10.1.8(eslint@10.4.1(jiti@2.6.1)) eslint-rule-docs@1.1.235: {} eslint-scope@9.1.2: dependencies: '@types/esrecurse': 4.3.1 - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 esrecurse: 4.3.0 estraverse: 5.3.0 @@ -2652,19 +2790,19 @@ snapshots: eslint-visitor-keys@5.0.1: {} - eslint@10.2.0(jiti@2.6.1): + eslint@10.4.1(jiti@2.6.1): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.2.0(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.4.1(jiti@2.6.1)) '@eslint-community/regexpp': 4.12.2 - '@eslint/config-array': 0.23.4 - '@eslint/config-helpers': 0.5.4 - '@eslint/core': 1.2.0 - '@eslint/plugin-kit': 0.7.0 - '@humanfs/node': 0.16.7 + '@eslint/config-array': 0.23.5 + '@eslint/config-helpers': 0.6.0 + '@eslint/core': 1.2.1 + '@eslint/plugin-kit': 0.7.2 + '@humanfs/node': 0.16.8 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.4.3 - '@types/estree': 1.0.8 - ajv: 6.14.0 + '@types/estree': 1.0.9 + ajv: 6.15.0 cross-spawn: 7.0.6 debug: 4.4.3 escape-string-regexp: 4.0.0 @@ -2681,7 +2819,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: @@ -2724,10 +2862,6 @@ snapshots: strip-final-newline: 4.0.0 yoctocolors: 2.1.2 - 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: {} @@ -2736,11 +2870,11 @@ snapshots: fast-levenshtein@2.0.6: {} - fast-uri@3.1.0: {} + fast-uri@3.1.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: @@ -2757,52 +2891,52 @@ snapshots: 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: {} get-caller-file@2.0.5: {} - get-east-asian-width@1.5.0: {} + get-east-asian-width@1.6.0: {} get-stream@9.0.1: dependencies: '@sec-ant/readable-stream': 0.4.1 is-stream: 4.0.1 - git-cliff-darwin-arm64@2.12.0: + git-cliff-darwin-arm64@2.13.1: optional: true - git-cliff-darwin-x64@2.12.0: + git-cliff-darwin-x64@2.13.1: optional: true - git-cliff-linux-arm64@2.12.0: + git-cliff-linux-arm64@2.13.1: optional: true - git-cliff-linux-x64@2.12.0: + git-cliff-linux-x64@2.13.1: optional: true - git-cliff-windows-arm64@2.12.0: + git-cliff-windows-arm64@2.13.1: optional: true - git-cliff-windows-x64@2.12.0: + git-cliff-windows-x64@2.13.1: optional: true - git-cliff@2.12.0: + git-cliff@2.13.1: dependencies: execa: 9.6.1 optionalDependencies: - git-cliff-darwin-arm64: 2.12.0 - git-cliff-darwin-x64: 2.12.0 - git-cliff-linux-arm64: 2.12.0 - git-cliff-linux-x64: 2.12.0 - git-cliff-windows-arm64: 2.12.0 - git-cliff-windows-x64: 2.12.0 + git-cliff-darwin-arm64: 2.13.1 + git-cliff-darwin-x64: 2.13.1 + git-cliff-linux-arm64: 2.13.1 + git-cliff-linux-x64: 2.13.1 + git-cliff-windows-arm64: 2.13.1 + git-cliff-windows-x64: 2.13.1 - 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.7.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0) meow: 13.2.0 transitivePeerDependencies: - conventional-commits-filter @@ -2812,9 +2946,9 @@ snapshots: dependencies: is-glob: 4.0.3 - global-directory@4.0.1: + global-directory@5.0.0: dependencies: - ini: 4.1.1 + ini: 6.0.0 globals@16.5.0: {} @@ -2837,7 +2971,7 @@ snapshots: imurmurhash@0.1.4: {} - ini@4.1.1: {} + ini@6.0.0: {} irregular-plurals@3.5.0: {} @@ -2849,7 +2983,7 @@ snapshots: is-fullwidth-code-point@5.1.0: dependencies: - get-east-asian-width: 1.5.0 + get-east-asian-width: 1.6.0 is-glob@4.0.3: dependencies: @@ -2871,7 +3005,7 @@ snapshots: js-tokens@4.0.0: {} - js-yaml@4.1.1: + js-yaml@4.2.0: dependencies: argparse: 2.0.1 @@ -2887,7 +3021,7 @@ snapshots: json-stable-stringify-without-jsonify@1.0.1: {} - json-with-bigint@3.5.7: {} + json-with-bigint@3.5.8: {} keyv@4.5.4: dependencies: @@ -2904,10 +3038,27 @@ snapshots: dependencies: commander: 14.0.3 listr2: 9.0.5 - picomatch: 4.0.3 + picomatch: 4.0.4 string-argv: 0.3.2 - tinyexec: 1.0.4 - yaml: 2.8.2 + tinyexec: 1.2.4 + yaml: 2.9.0 + + lint-staged@17.0.7: + dependencies: + listr2: 10.2.1 + picomatch: 4.0.4 + string-argv: 0.3.2 + tinyexec: 1.2.4 + optionalDependencies: + yaml: 2.9.0 + + listr2@10.2.1: + dependencies: + cli-truncate: 5.2.0 + eventemitter3: 5.0.4 + log-update: 6.1.0 + rfdc: 1.4.1 + wrap-ansi: 10.0.0 listr2@9.0.5: dependencies: @@ -2922,19 +3073,7 @@ snapshots: dependencies: p-locate: 5.0.0 - lodash-es@4.17.23: {} - - lodash.camelcase@4.3.0: {} - - lodash.kebabcase@4.1.1: {} - - lodash.mergewith@4.6.2: {} - - lodash.snakecase@4.1.1: {} - - lodash.startcase@4.4.0: {} - - lodash.upperfirst@4.3.1: {} + lodash-es@4.18.1: {} log-symbols@7.0.1: dependencies: @@ -2953,13 +3092,13 @@ snapshots: mimic-function@5.0.1: {} - minimatch@10.2.4: + minimatch@10.2.5: dependencies: - brace-expansion: 5.0.4 + brace-expansion: 5.0.6 minimatch@9.0.9: dependencies: - brace-expansion: 2.0.2 + brace-expansion: 2.1.1 minimist@1.2.8: {} @@ -3029,7 +3168,7 @@ snapshots: parse-json@5.2.0: dependencies: - '@babel/code-frame': 7.29.0 + '@babel/code-frame': 7.29.7 error-ex: 1.3.4 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -3046,7 +3185,7 @@ snapshots: picocolors@1.1.1: {} - picomatch@4.0.3: {} + picomatch@4.0.4: {} plur@5.1.0: dependencies: @@ -3058,7 +3197,7 @@ snapshots: dependencies: fast-diff: 1.3.0 - prettier@3.8.1: {} + prettier@3.8.3: {} pretty-ms@9.3.0: dependencies: @@ -3081,7 +3220,7 @@ snapshots: rfdc@1.4.1: {} - semver@7.7.4: {} + semver@7.8.1: {} shebang-command@2.0.0: dependencies: @@ -3101,7 +3240,7 @@ snapshots: ansi-styles: 6.2.3 is-fullwidth-code-point: 5.1.0 - smol-toml@1.6.0: {} + smol-toml@1.6.1: {} string-argv@0.3.2: {} @@ -3114,12 +3253,12 @@ snapshots: string-width@7.2.0: dependencies: emoji-regex: 10.6.0 - get-east-asian-width: 1.5.0 + get-east-asian-width: 1.6.0 strip-ansi: 7.2.0 - string-width@8.2.0: + string-width@8.2.1: dependencies: - get-east-asian-width: 1.5.0 + get-east-asian-width: 1.6.0 strip-ansi: 7.2.0 strip-ansi@6.0.1: @@ -3139,54 +3278,54 @@ snapshots: has-flag: 5.0.1 supports-color: 10.2.2 - synckit@0.11.12: + synckit@0.11.13: dependencies: - '@pkgr/core': 0.2.9 + '@pkgr/core': 0.3.6 - tinyexec@1.0.4: {} + tinyexec@1.2.4: {} - tinyglobby@0.2.15: + tinyglobby@0.2.17: 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: {} - ts-api-utils@2.4.0(typescript@5.9.3): + ts-api-utils@2.5.0(typescript@6.0.3): dependencies: - typescript: 5.9.3 + typescript: 6.0.3 tunnel@0.0.6: {} - turbo@2.9.4: + turbo@2.9.16: optionalDependencies: - '@turbo/darwin-64': 2.9.4 - '@turbo/darwin-arm64': 2.9.4 - '@turbo/linux-64': 2.9.4 - '@turbo/linux-arm64': 2.9.4 - '@turbo/windows-64': 2.9.4 - '@turbo/windows-arm64': 2.9.4 + '@turbo/darwin-64': 2.9.16 + '@turbo/darwin-arm64': 2.9.16 + '@turbo/linux-64': 2.9.16 + '@turbo/linux-arm64': 2.9.16 + '@turbo/windows-64': 2.9.16 + '@turbo/windows-arm64': 2.9.16 type-check@0.4.0: dependencies: prelude-ls: 1.2.1 - typescript-eslint@8.56.1(eslint@10.2.0(jiti@2.6.1))(typescript@5.9.3): + typescript-eslint@8.60.1(eslint@10.4.1(jiti@2.6.1))(typescript@6.0.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.56.1(@typescript-eslint/parser@8.56.1(eslint@10.2.0(jiti@2.6.1))(typescript@5.9.3))(eslint@10.2.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/parser': 8.56.1(eslint@10.2.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/typescript-estree': 8.56.1(typescript@5.9.3) - '@typescript-eslint/utils': 8.56.1(eslint@10.2.0(jiti@2.6.1))(typescript@5.9.3) - eslint: 10.2.0(jiti@2.6.1) - typescript: 5.9.3 + '@typescript-eslint/eslint-plugin': 8.60.1(@typescript-eslint/parser@8.60.1(eslint@10.4.1(jiti@2.6.1))(typescript@6.0.3))(eslint@10.4.1(jiti@2.6.1))(typescript@6.0.3) + '@typescript-eslint/parser': 8.60.1(eslint@10.4.1(jiti@2.6.1))(typescript@6.0.3) + '@typescript-eslint/typescript-estree': 8.60.1(typescript@6.0.3) + '@typescript-eslint/utils': 8.60.1(eslint@10.4.1(jiti@2.6.1))(typescript@6.0.3) + eslint: 10.4.1(jiti@2.6.1) + typescript: 6.0.3 transitivePeerDependencies: - supports-color - typescript@5.9.3: {} + typescript@6.0.3: {} - undici-types@7.18.2: {} + undici-types@7.24.6: {} - undici@6.23.0: {} + undici@6.26.0: {} unicorn-magic@0.3.0: {} @@ -3202,6 +3341,12 @@ snapshots: word-wrap@1.2.5: {} + wrap-ansi@10.0.0: + dependencies: + ansi-styles: 6.2.3 + string-width: 8.2.1 + strip-ansi: 7.2.0 + wrap-ansi@7.0.0: dependencies: ansi-styles: 4.3.0 @@ -3216,10 +3361,12 @@ snapshots: y18n@5.0.8: {} - yaml@2.8.2: {} + yaml@2.9.0: {} yargs-parser@21.1.1: {} + yargs-parser@22.0.0: {} + yargs@17.7.2: dependencies: cliui: 8.0.1 @@ -3230,6 +3377,15 @@ snapshots: y18n: 5.0.8 yargs-parser: 21.1.1 + yargs@18.0.0: + dependencies: + cliui: 9.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + string-width: 7.2.0 + y18n: 5.0.8 + yargs-parser: 22.0.0 + yocto-queue@0.1.0: {} yoctocolors@2.1.2: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index bcbb0ef..cd7d004 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,32 +1,35 @@ packages: - apps/* +allowBuilds: + bun: true + catalogs: build: tsup: ^8.5.1 - turbo: ^2.9.4 - typescript: ^5.9.3 + turbo: ^2.9.16 + typescript: ^6.0.3 ci: - '@commitlint/cli': ^20.5.0 - '@commitlint/config-conventional': ^20.5.0 + '@commitlint/cli': ^21.0.2 + '@commitlint/config-conventional': ^21.0.2 '@favware/cliff-jumper': ^6.0.0 - '@nanoforge-dev/actions': ^1.2.3 + '@nanoforge-dev/actions': ^2.1.2 husky: ^9.1.7 - lint-staged: ^16.4.0 + lint-staged: ^17.0.7 core: - '@types/bun': ^1.3.13 - '@types/node': ^25.5.2 + '@types/bun': ^1.3.14 + '@types/node': ^25.9.1 bun: ^1.3.13 commander: ^14.0.3 lint: '@nanoforge-dev/utils-eslint-config': ^1.0.2 '@nanoforge-dev/utils-prettier-config': ^1.0.2 '@trivago/prettier-plugin-sort-imports': ^6.0.2 - eslint: ^10.2.0 - prettier: ^3.8.1 + eslint: ^10.4.1 + prettier: ^3.8.3 schematics: '@angular-devkit/core': ^21.1.1 '@angular-devkit/schematics': ^21.1.1 -onlyBuiltDependencies: - - bun +minimumReleaseAgeExclude: + - '@nanoforge-dev/actions@2.1.2'