From 498cc70895bc22498b36be1c6ce37c1b3238dc61 Mon Sep 17 00:00:00 2001 From: Jake Klassen Date: Fri, 13 Mar 2026 10:07:29 -0400 Subject: [PATCH 1/3] chore: migrate from eslint+prettier to Vite+ (oxlint+oxfmt) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace eslint and prettier with Vite+ unified toolchain (oxlint for linting, oxfmt for formatting). Standardize all package lint scripts to use `vp lint` / `vp lint --fix`. Add per-package oxlint/oxfmt configs for VS Code multi-root workspace support. Remove orphaned ecs-benchmark CI workflow. Delete stale docs (benchmark.md, hierarchy-ideas.md, performance-plan.md, tasks.md) — content moved to GitHub issues #6 and #7. Co-Authored-By: Claude Opus 4.6 --- .oxfmtrc.json | 8 + .oxlintrc.json | 227 ++ .prettierrc | 6 - .vite-hooks/pre-commit | 1 + .vscode/settings.json | 20 +- AGENTS.md | 76 + CLAUDE.md | 105 +- benchmark.md | 22 - eslint.config.mjs | 80 - hierarchy-ideas.md | 290 -- jekyll.config.yml | 4 +- netlify.toml | 4 +- package.json | 15 +- packages/benchmark/.oxfmtrc.json | 8 + packages/benchmark/.oxlintrc.json | 3 + packages/benchmark/.prettierrc | 6 - packages/benchmark/.vscode/settings.json | 2 +- packages/benchmark/package.json | 4 +- packages/benchmark/renovate.json | 6 +- .../ecs-benchmark/.github/workflows/main.yml | 23 - packages/ecs-benchmark/.oxfmtrc.json | 8 + packages/ecs-benchmark/.oxlintrc.json | 3 + packages/ecs-benchmark/.prettierrc | 6 - packages/ecs-benchmark/package.json | 7 +- packages/examples/.oxfmtrc.json | 8 + packages/examples/.oxlintrc.json | 3 + packages/examples/.prettierrc | 6 - packages/examples/index.html | 42 +- packages/examples/package.json | 15 +- packages/examples/public/css/demo.css | 44 +- packages/examples/public/js/feather-init.js | 10 +- packages/examples/public/js/feather.min.js | 2126 ++++++++++++++- packages/examples/src/demos/basic/index.html | 76 +- .../src/demos/bouncy-rectangles/index.html | 64 +- .../src/demos/debug-rendering/index.html | 70 +- .../systems/sprite-animation-system.ts | 4 +- .../src/demos/falling-sand/index.html | 74 +- .../examples/src/demos/falling-sand/main.ts | 7 +- .../examples/src/demos/pixel-text/index.html | 76 +- .../components/sprite-outline-animation.ts | 2 +- .../shmup/components/text-blink-animation.ts | 2 +- packages/examples/src/demos/shmup/content.ts | 8 +- .../enemy/switch-enemy-to-attach-mode.ts | 16 +- packages/examples/src/demos/shmup/index.html | 84 +- packages/examples/src/demos/shmup/scene.ts | 2 +- .../systems/destroy-boss-event-system.ts | 8 +- .../shmup/systems/sprite-animation-system.ts | 4 +- .../sprite-outline-animation-system.ts | 4 +- .../sprite-outline-rendering-system.ts | 2 +- .../systems/text-blink-animation-system.ts | 4 +- .../src/demos/sprite-animation/index.html | 70 +- .../src/demos/sprite-tweening/index.html | 70 +- .../src/demos/sprite-tweening/main.ts | 2 +- packages/examples/src/lib/canvas.ts | 8 +- packages/examples/src/lib/event-emitter.ts | 3 +- .../examples/src/lib/pixel-text/renderer.ts | 3 +- packages/examples/src/style.css | 52 +- packages/examples/src/vite-env.d.ts | 2 +- packages/examples/tsconfig.json | 5 +- packages/examples/vite.config.ts | 62 +- packages/game-benchmark/.oxfmtrc.json | 8 + packages/game-benchmark/.oxlintrc.json | 3 + packages/game-benchmark/README.md | 31 +- packages/game-benchmark/package.json | 2 + .../games/ant-simulation/miniplex/index.ts | 17 +- .../src/games/ant-simulation/objecs/index.ts | 24 +- .../ant-simulation/systems/render-system.ts | 8 +- .../ant-simulation/systems/steering-system.ts | 16 +- .../src/games/boids/miniplex/index.ts | 24 +- .../src/games/boids/objecs/index.ts | 22 +- .../games/boids/systems/explosion-system.ts | 4 +- .../src/games/mutation/miniplex/index.ts | 17 +- .../src/games/mutation/objecs/index.ts | 18 +- packages/game-benchmark/src/index.ts | 16 +- packages/game-benchmark/src/profiler.ts | 10 +- packages/objecs/.oxfmtrc.json | 8 + packages/objecs/.oxlintrc.json | 3 + packages/objecs/.prettierrc | 6 - packages/objecs/README.md | 72 +- packages/objecs/package.json | 25 +- packages/objecs/src/archetype.test.ts | 2 +- packages/objecs/src/archetype.ts | 20 +- packages/objecs/src/world.test.ts | 2 +- packages/objecs/src/world.ts | 25 +- packages/objecs/vite.config.ts | 3 +- packages/perf-proofs/.oxfmtrc.json | 8 + packages/perf-proofs/.oxlintrc.json | 3 + packages/perf-proofs/package.json | 2 + .../src/array/every-vs-for-loop.ts | 1 + .../array/for-of-vs-for-index-vs-foreach.ts | 6 +- .../perf-proofs/src/array/fused-every-some.ts | 7 +- .../iteration/iterator-protocol-overhead.ts | 6 +- .../src/map-set/map-vs-object-lookup.ts | 6 +- .../src/set/set-alloc-vs-alternatives.ts | 1 + .../src/set/set-vs-array-iteration.ts | 6 +- .../src/set/small-set-vs-small-array.ts | 1 + performance-plan.md | 154 -- pnpm-lock.yaml | 2396 +++++++++-------- pnpm-workspace.yaml | 18 +- tasks.md | 3 - vite.config.ts | 243 ++ workspace.code-workspace | 41 +- 102 files changed, 4824 insertions(+), 2436 deletions(-) create mode 100644 .oxfmtrc.json create mode 100644 .oxlintrc.json delete mode 100644 .prettierrc create mode 100755 .vite-hooks/pre-commit create mode 100644 AGENTS.md delete mode 100644 benchmark.md delete mode 100644 eslint.config.mjs delete mode 100644 hierarchy-ideas.md create mode 100644 packages/benchmark/.oxfmtrc.json create mode 100644 packages/benchmark/.oxlintrc.json delete mode 100644 packages/benchmark/.prettierrc delete mode 100644 packages/ecs-benchmark/.github/workflows/main.yml create mode 100644 packages/ecs-benchmark/.oxfmtrc.json create mode 100644 packages/ecs-benchmark/.oxlintrc.json delete mode 100644 packages/ecs-benchmark/.prettierrc create mode 100644 packages/examples/.oxfmtrc.json create mode 100644 packages/examples/.oxlintrc.json delete mode 100644 packages/examples/.prettierrc create mode 100644 packages/game-benchmark/.oxfmtrc.json create mode 100644 packages/game-benchmark/.oxlintrc.json create mode 100644 packages/objecs/.oxfmtrc.json create mode 100644 packages/objecs/.oxlintrc.json delete mode 100644 packages/objecs/.prettierrc create mode 100644 packages/perf-proofs/.oxfmtrc.json create mode 100644 packages/perf-proofs/.oxlintrc.json delete mode 100644 performance-plan.md delete mode 100644 tasks.md create mode 100644 vite.config.ts diff --git a/.oxfmtrc.json b/.oxfmtrc.json new file mode 100644 index 0000000..0c947e9 --- /dev/null +++ b/.oxfmtrc.json @@ -0,0 +1,8 @@ +{ + "semi": true, + "tabWidth": 2, + "trailingComma": "all", + "useTabs": true, + "printWidth": 80, + "sortPackageJson": false +} diff --git a/.oxlintrc.json b/.oxlintrc.json new file mode 100644 index 0000000..cdce640 --- /dev/null +++ b/.oxlintrc.json @@ -0,0 +1,227 @@ +{ + "plugins": ["oxc", "typescript", "unicorn", "react"], + "categories": { + "correctness": "warn" + }, + "env": { + "builtin": true + }, + "ignorePatterns": [ + "**/node_modules", + "**/build", + "**/dist", + "**/public", + "packages/ecs-benchmark/**" + ], + "rules": { + "constructor-super": "error", + "for-direction": "error", + "getter-return": "error", + "no-async-promise-executor": "error", + "no-case-declarations": "error", + "no-class-assign": "error", + "no-compare-neg-zero": "error", + "no-cond-assign": "error", + "no-const-assign": "error", + "no-constant-binary-expression": "error", + "no-constant-condition": "error", + "no-control-regex": "error", + "no-debugger": "error", + "no-delete-var": "error", + "no-dupe-class-members": "error", + "no-dupe-else-if": "error", + "no-dupe-keys": "error", + "no-duplicate-case": "error", + "no-empty": "error", + "no-empty-character-class": "error", + "no-empty-pattern": "error", + "no-empty-static-block": "error", + "no-ex-assign": "error", + "no-extra-boolean-cast": "error", + "no-fallthrough": "error", + "no-func-assign": "error", + "no-global-assign": "error", + "no-import-assign": "error", + "no-invalid-regexp": "error", + "no-irregular-whitespace": "error", + "no-loss-of-precision": "error", + "no-misleading-character-class": "error", + "no-new-native-nonconstructor": "error", + "no-nonoctal-decimal-escape": "error", + "no-obj-calls": "error", + "no-prototype-builtins": "error", + "no-redeclare": "error", + "no-regex-spaces": "error", + "no-self-assign": "error", + "no-setter-return": "error", + "no-shadow-restricted-names": "error", + "no-sparse-arrays": "error", + "no-this-before-super": "error", + "no-undef": "error", + "no-unreachable": "error", + "no-unsafe-finally": "error", + "no-unsafe-negation": "error", + "no-unsafe-optional-chaining": "error", + "no-unused-labels": "error", + "no-unused-private-class-members": "error", + "no-unused-vars": "error", + "no-useless-backreference": "error", + "no-useless-catch": "error", + "no-useless-escape": "error", + "no-with": "error", + "require-yield": "error", + "use-isnan": "error", + "valid-typeof": "error", + "@typescript-eslint/ban-ts-comment": "error", + "no-array-constructor": "error", + "@typescript-eslint/no-duplicate-enum-values": "error", + "@typescript-eslint/no-empty-object-type": "error", + "@typescript-eslint/no-explicit-any": "error", + "@typescript-eslint/no-extra-non-null-assertion": "error", + "@typescript-eslint/no-misused-new": "error", + "@typescript-eslint/no-namespace": "error", + "@typescript-eslint/no-non-null-asserted-optional-chain": "error", + "@typescript-eslint/no-require-imports": "error", + "@typescript-eslint/no-this-alias": "error", + "@typescript-eslint/no-unnecessary-type-constraint": "error", + "@typescript-eslint/no-unsafe-declaration-merging": "error", + "@typescript-eslint/no-unsafe-function-type": "error", + "no-unused-expressions": "error", + "@typescript-eslint/no-wrapper-object-types": "error", + "@typescript-eslint/prefer-as-const": "error", + "@typescript-eslint/prefer-namespace-keyword": "error", + "@typescript-eslint/triple-slash-reference": "error", + "@typescript-eslint/await-thenable": "error", + "@typescript-eslint/no-array-delete": "error", + "@typescript-eslint/no-base-to-string": "error", + "@typescript-eslint/no-confusing-void-expression": "error", + "@typescript-eslint/no-deprecated": "error", + "@typescript-eslint/no-duplicate-type-constituents": "error", + "@typescript-eslint/no-dynamic-delete": "error", + "@typescript-eslint/no-extraneous-class": "error", + "@typescript-eslint/no-floating-promises": "error", + "@typescript-eslint/no-for-in-array": "error", + "@typescript-eslint/no-implied-eval": "error", + "@typescript-eslint/no-invalid-void-type": "error", + "@typescript-eslint/no-meaningless-void-operator": "error", + "@typescript-eslint/no-misused-promises": "error", + "@typescript-eslint/no-misused-spread": "error", + "@typescript-eslint/no-mixed-enums": "error", + "@typescript-eslint/no-non-null-asserted-nullish-coalescing": "error", + "@typescript-eslint/no-non-null-assertion": "error", + "@typescript-eslint/no-redundant-type-constituents": "error", + "@typescript-eslint/no-unnecessary-boolean-literal-compare": "error", + "@typescript-eslint/no-unnecessary-condition": "error", + "@typescript-eslint/no-unnecessary-template-expression": "error", + "@typescript-eslint/no-unnecessary-type-arguments": "error", + "@typescript-eslint/no-unnecessary-type-assertion": "error", + "@typescript-eslint/no-unnecessary-type-conversion": "error", + "@typescript-eslint/no-unnecessary-type-parameters": "error", + "@typescript-eslint/no-unsafe-argument": "error", + "@typescript-eslint/no-unsafe-assignment": "error", + "@typescript-eslint/no-unsafe-call": "error", + "@typescript-eslint/no-unsafe-enum-comparison": "error", + "@typescript-eslint/no-unsafe-member-access": "error", + "@typescript-eslint/no-unsafe-return": "error", + "@typescript-eslint/no-unsafe-unary-minus": "error", + "no-useless-constructor": "error", + "@typescript-eslint/no-useless-default-assignment": "error", + "@typescript-eslint/only-throw-error": "error", + "@typescript-eslint/prefer-literal-enum-member": "error", + "@typescript-eslint/prefer-promise-reject-errors": "error", + "@typescript-eslint/prefer-reduce-type-parameter": "error", + "@typescript-eslint/prefer-return-this-type": "error", + "@typescript-eslint/related-getter-setter-pairs": "error", + "@typescript-eslint/require-await": "error", + "@typescript-eslint/restrict-plus-operands": [ + "error", + { + "allowAny": false, + "allowBoolean": false, + "allowNullish": false, + "allowNumberAndString": false, + "allowRegExp": false + } + ], + "@typescript-eslint/restrict-template-expressions": [ + "error", + { + "allowAny": false, + "allowBoolean": false, + "allowNever": false, + "allowNullish": false, + "allowNumber": true, + "allowRegExp": false + } + ], + "@typescript-eslint/return-await": [ + "error", + "error-handling-correctness-only" + ], + "@typescript-eslint/unbound-method": "error", + "@typescript-eslint/unified-signatures": "error", + "@typescript-eslint/use-unknown-in-catch-callback-variable": "error", + "@typescript-eslint/adjacent-overload-signatures": "error", + "@typescript-eslint/array-type": "off", + "@typescript-eslint/ban-tslint-comment": "error", + "@typescript-eslint/class-literal-property-style": "error", + "@typescript-eslint/consistent-generic-constructors": "error", + "@typescript-eslint/consistent-indexed-object-style": "error", + "@typescript-eslint/consistent-type-assertions": "error", + "@typescript-eslint/consistent-type-definitions": "off", + "@typescript-eslint/no-confusing-non-null-assertion": "error", + "no-empty-function": "error", + "@typescript-eslint/no-inferrable-types": "error", + "@typescript-eslint/non-nullable-type-assertion-style": "error", + "@typescript-eslint/prefer-find": "error", + "@typescript-eslint/prefer-for-of": "error", + "@typescript-eslint/prefer-function-type": "error", + "@typescript-eslint/prefer-includes": "error", + "@typescript-eslint/prefer-nullish-coalescing": "error", + "@typescript-eslint/prefer-optional-chain": "error", + "@typescript-eslint/prefer-regexp-exec": "error", + "@typescript-eslint/prefer-string-starts-ends-with": "error" + }, + "overrides": [ + { + "files": ["**/*.{js,mjs,cjs,ts,mts,cts}"], + "rules": { + "depend/ban-dependencies": "error" + }, + "jsPlugins": ["eslint-plugin-depend"], + "env": { + "browser": true + } + }, + { + "files": ["**/*.ts", "**/*.tsx", "**/*.mts", "**/*.cts"], + "rules": { + "constructor-super": "off", + "getter-return": "off", + "no-class-assign": "off", + "no-const-assign": "off", + "no-dupe-class-members": "off", + "no-dupe-keys": "off", + "no-func-assign": "off", + "no-import-assign": "off", + "no-new-native-nonconstructor": "off", + "no-obj-calls": "off", + "no-redeclare": "off", + "no-setter-return": "off", + "no-this-before-super": "off", + "no-undef": "off", + "no-unreachable": "off", + "no-unsafe-negation": "off", + "no-var": "error", + "no-with": "off", + "prefer-const": "error", + "prefer-rest-params": "error", + "prefer-spread": "error" + } + } + ], + "options": { + "typeAware": true, + "typeCheck": true + } +} diff --git a/.prettierrc b/.prettierrc deleted file mode 100644 index a6fe5ed..0000000 --- a/.prettierrc +++ /dev/null @@ -1,6 +0,0 @@ -{ - "semi": true, - "tabWidth": 2, - "trailingComma": "all", - "useTabs": true -} diff --git a/.vite-hooks/pre-commit b/.vite-hooks/pre-commit new file mode 100755 index 0000000..85fb65b --- /dev/null +++ b/.vite-hooks/pre-commit @@ -0,0 +1 @@ +vp staged diff --git a/.vscode/settings.json b/.vscode/settings.json index 045a3c8..c3e9650 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,3 +1,21 @@ { - "typescript.preferences.importModuleSpecifierEnding": "js" + "js/ts.preferences.importModuleSpecifierEnding": "js", + "editor.defaultFormatter": "oxc.oxc-vscode", + "editor.formatOnSave": true, + "editor.formatOnSaveMode": "file", + "editor.codeActionsOnSave": { + "source.fixAll.oxc": "explicit" + }, + "[typescript]": { + "editor.defaultFormatter": "oxc.oxc-vscode" + }, + "[javascript]": { + "editor.defaultFormatter": "oxc.oxc-vscode" + }, + "[typescriptreact]": { + "editor.defaultFormatter": "oxc.oxc-vscode" + }, + "[javascriptreact]": { + "editor.defaultFormatter": "oxc.oxc-vscode" + } } diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..8573476 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,76 @@ + + +# Using Vite+, the Unified Toolchain for the Web + +This project is using Vite+, a unified toolchain built on top of Vite, Rolldown, Vitest, tsdown, Oxlint, Oxfmt, and Vite Task. Vite+ wraps runtime management, package management, and frontend tooling in a single global CLI called `vp`. Vite+ is distinct from Vite, but it invokes Vite through `vp dev` and `vp build`. + +## Vite+ Workflow + +`vp` is a global binary that handles the full development lifecycle. Run `vp help` to print a list of commands and `vp --help` for information about a specific command. + +### Start + +- create - Create a new project from a template +- migrate - Migrate an existing project to Vite+ +- config - Configure hooks and agent integration +- staged - Run linters on staged files +- install (`i`) - Install dependencies +- env - Manage Node.js versions + +### Develop + +- dev - Run the development server +- check - Run format, lint, and TypeScript type checks +- lint - Lint code +- fmt - Format code +- test - Run tests + +### Execute + +- run - Run monorepo tasks +- exec - Execute a command from local `node_modules/.bin` +- dlx - Execute a package binary without installing it as a dependency +- cache - Manage the task cache + +### Build + +- build - Build for production +- pack - Build libraries +- preview - Preview production build + +### Manage Dependencies + +Vite+ automatically detects and wraps the underlying package manager such as pnpm, npm, or Yarn through the `packageManager` field in `package.json` or package manager-specific lockfiles. + +- add - Add packages to dependencies +- remove (`rm`, `un`, `uninstall`) - Remove packages from dependencies +- update (`up`) - Update packages to latest versions +- dedupe - Deduplicate dependencies +- outdated - Check for outdated packages +- list (`ls`) - List installed packages +- why (`explain`) - Show why a package is installed +- info (`view`, `show`) - View package information from the registry +- link (`ln`) / unlink - Manage local package links +- pm - Forward a command to the package manager + +### Maintain + +- upgrade - Update `vp` itself to the latest version + +These commands map to their corresponding tools. For example, `vp dev --port 3000` runs Vite's dev server and works the same as Vite. `vp test` runs JavaScript tests through the bundled Vitest. The version of all tools can be checked using `vp --version`. This is useful when researching documentation, features, and bugs. + +## Common Pitfalls + +- **Using the package manager directly:** Do not use pnpm, npm, or Yarn directly. Vite+ can handle all package manager operations. +- **Always use Vite commands to run tools:** Don't attempt to run `vp vitest` or `vp oxlint`. They do not exist. Use `vp test` and `vp lint` instead. +- **Running scripts:** Vite+ commands take precedence over `package.json` scripts. If there is a `test` script defined in `scripts` that conflicts with the built-in `vp test` command, run it using `vp run test`. +- **Do not install Vitest, Oxlint, Oxfmt, or tsdown directly:** Vite+ wraps these tools. They must not be installed directly. You cannot upgrade these tools by installing their latest versions. Always use Vite+ commands. +- **Use Vite+ wrappers for one-off binaries:** Use `vp dlx` instead of package-manager-specific `dlx`/`npx` commands. +- **Import JavaScript modules from `vite-plus`:** Instead of importing from `vite` or `vitest`, all modules should be imported from the project's `vite-plus` dependency. For example, `import { defineConfig } from 'vite-plus';` or `import { expect, test, vi } from 'vite-plus/test';`. You must not install `vitest` to import test utilities. +- **Type-Aware Linting:** There is no need to install `oxlint-tsgolint`, `vp lint --type-aware` works out of the box. + +## Review Checklist for Agents + +- [ ] Run `vp install` after pulling remote changes and before getting started. +- [ ] Run `vp check` and `vp test` to validate changes. + diff --git a/CLAUDE.md b/CLAUDE.md index 8b9dd29..ddf6a59 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -18,6 +18,7 @@ objECS is a TypeScript Entity Component System (ECS) library for game developmen ## Common Commands ### Root-level + ```bash pnpm install # Install all dependencies pnpm lint # Lint all packages @@ -25,6 +26,7 @@ pnpm lint:fix # Fix lint issues ``` ### Core Library (packages/objecs) + ```bash pnpm --filter objecs build # Build the library (runs lint first) pnpm --filter objecs test # Run tests in watch mode @@ -33,12 +35,14 @@ pnpm --filter objecs lint # Lint the library ``` ### Examples (packages/examples) + ```bash pnpm --filter examples dev # Start Vite dev server pnpm --filter examples build # Build examples ``` ### Benchmarks + ```bash pnpm --filter ecs-benchmark start # Run ECS comparison benchmarks pnpm --filter perf-proofs start # Run all micro-benchmarks @@ -46,6 +50,7 @@ pnpm --filter perf-proofs start:object # Run object pattern benchma ``` ### Game Benchmarks + ```bash # Boids benchmark, no rendering, 10 trials × 10s, objecs only node packages/game-benchmark/src/index.ts --no-render -g boids -d 10 -t 10 -l objecs @@ -66,9 +71,9 @@ node packages/game-benchmark/src/index.ts --no-render -g boids -d 10 -t 10 -l ob ```typescript // Define entity type with all possible components type Entity = { - position?: { x: number; y: number }; - velocity?: { x: number; y: number }; - health?: number; + position?: { x: number; y: number }; + velocity?: { x: number; y: number }; + health?: number; }; // Create world and entities @@ -76,11 +81,11 @@ const world = new World(); world.createEntity({ position: { x: 0, y: 0 }, velocity: { x: 1, y: 0 } }); // Create archetype query (entities matching these components) -const movingEntities = world.archetype('position', 'velocity'); +const movingEntities = world.archetype("position", "velocity"); // Iterate in systems for (const entity of movingEntities.entities) { - entity.position.x += entity.velocity.x * dt; + entity.position.x += entity.velocity.x * dt; } ``` @@ -93,6 +98,7 @@ for (const entity of movingEntities.entities) { ## Development Workflow Uses [Conventional Commits](https://www.conventionalcommits.org/). For releases: + 1. Run `bumpp` to interactively create a version tag 2. Create GitHub release to trigger publish workflow @@ -104,10 +110,10 @@ In the core library (`packages/objecs/src/`), always use `entity[component] !== ```typescript // WRONG — ~10% slower due to static method call overhead -Object.hasOwn(entity, component as string) +Object.hasOwn(entity, component as string); // CORRECT — V8 inline-caches simple property reads -entity[component as string] !== undefined +entity[component as string] !== undefined; ``` **Why this is safe:** objecs uses `delete entity[component]` to remove components, never sets them to `undefined`. So `!== undefined` is semantically equivalent to `hasOwn` for our use case, but V8 can inline-cache property reads while `Object.hasOwn` goes through full function call machinery. @@ -120,15 +126,15 @@ In archetype matching and similar hot paths, use `for-of` loops with early retur ```typescript // WRONG — callback overhead per iteration -const matches = components.every(c => entity[c] !== undefined); -const excluded = excluding?.some(c => entity[c] !== undefined) ?? false; +const matches = components.every((c) => entity[c] !== undefined); +const excluded = excluding?.some((c) => entity[c] !== undefined) ?? false; // CORRECT — fused loop, no closures, early exit for (const c of components) { - if (entity[c as string] === undefined) return false; + if (entity[c as string] === undefined) return false; } for (const c of excluding) { - if (entity[c as string] !== undefined) return false; + if (entity[c as string] !== undefined) return false; } return true; ``` @@ -155,3 +161,80 @@ These patterns showed micro-benchmark wins but didn't hold up or aren't worth th ## Testing Tests use Vitest. Test files are colocated with source (`.test.ts` suffix). + + + +# Using Vite+, the Unified Toolchain for the Web + +This project is using Vite+, a unified toolchain built on top of Vite, Rolldown, Vitest, tsdown, Oxlint, Oxfmt, and Vite Task. Vite+ wraps runtime management, package management, and frontend tooling in a single global CLI called `vp`. Vite+ is distinct from Vite, but it invokes Vite through `vp dev` and `vp build`. + +## Vite+ Workflow + +`vp` is a global binary that handles the full development lifecycle. Run `vp help` to print a list of commands and `vp --help` for information about a specific command. + +### Start + +- create - Create a new project from a template +- migrate - Migrate an existing project to Vite+ +- config - Configure hooks and agent integration +- staged - Run linters on staged files +- install (`i`) - Install dependencies +- env - Manage Node.js versions + +### Develop + +- dev - Run the development server +- check - Run format, lint, and TypeScript type checks +- lint - Lint code +- fmt - Format code +- test - Run tests + +### Execute + +- run - Run monorepo tasks +- exec - Execute a command from local `node_modules/.bin` +- dlx - Execute a package binary without installing it as a dependency +- cache - Manage the task cache + +### Build + +- build - Build for production +- pack - Build libraries +- preview - Preview production build + +### Manage Dependencies + +Vite+ automatically detects and wraps the underlying package manager such as pnpm, npm, or Yarn through the `packageManager` field in `package.json` or package manager-specific lockfiles. + +- add - Add packages to dependencies +- remove (`rm`, `un`, `uninstall`) - Remove packages from dependencies +- update (`up`) - Update packages to latest versions +- dedupe - Deduplicate dependencies +- outdated - Check for outdated packages +- list (`ls`) - List installed packages +- why (`explain`) - Show why a package is installed +- info (`view`, `show`) - View package information from the registry +- link (`ln`) / unlink - Manage local package links +- pm - Forward a command to the package manager + +### Maintain + +- upgrade - Update `vp` itself to the latest version + +These commands map to their corresponding tools. For example, `vp dev --port 3000` runs Vite's dev server and works the same as Vite. `vp test` runs JavaScript tests through the bundled Vitest. The version of all tools can be checked using `vp --version`. This is useful when researching documentation, features, and bugs. + +## Common Pitfalls + +- **Using the package manager directly:** Do not use pnpm, npm, or Yarn directly. Vite+ can handle all package manager operations. +- **Always use Vite commands to run tools:** Don't attempt to run `vp vitest` or `vp oxlint`. They do not exist. Use `vp test` and `vp lint` instead. +- **Running scripts:** Vite+ commands take precedence over `package.json` scripts. If there is a `test` script defined in `scripts` that conflicts with the built-in `vp test` command, run it using `vp run test`. +- **Do not install Vitest, Oxlint, Oxfmt, or tsdown directly:** Vite+ wraps these tools. They must not be installed directly. You cannot upgrade these tools by installing their latest versions. Always use Vite+ commands. +- **Use Vite+ wrappers for one-off binaries:** Use `vp dlx` instead of package-manager-specific `dlx`/`npx` commands. +- **Import JavaScript modules from `vite-plus`:** Instead of importing from `vite` or `vitest`, all modules should be imported from the project's `vite-plus` dependency. For example, `import { defineConfig } from 'vite-plus';` or `import { expect, test, vi } from 'vite-plus/test';`. You must not install `vitest` to import test utilities. +- **Type-Aware Linting:** There is no need to install `oxlint-tsgolint`, `vp lint --type-aware` works out of the box. + +## Review Checklist for Agents + +- [ ] Run `vp install` after pulling remote changes and before getting started. +- [ ] Run `vp check` and `vp test` to validate changes. + diff --git a/benchmark.md b/benchmark.md deleted file mode 100644 index 9566d88..0000000 --- a/benchmark.md +++ /dev/null @@ -1,22 +0,0 @@ - -> ecs-benchmark@ start /home/jakeklassen/code/packages/objecs/packages/ecs-benchmark -> node src/bench.js objecs miniplex - -objecs - packed_5 139,836 op/s - simple_iter 80,937 op/s - frag_iter 44,291 op/s - entity_cycle 7,556 op/s - add_remove 21,209 op/s - -miniplex - packed_5 180,113 op/s - simple_iter 178,320 op/s - frag_iter 50,361 op/s - entity_cycle 2,176 op/s - add_remove 2,100 op/s - -| op/s | packed_5 | simple_iter | frag_iter | entity_cycle | add_remove | -| ---- | --: |--: |--: |--: |--: | -| objecs | 139,836 | 80,937 | 44,291 | 7,556 | 21,209 | -| miniplex | 180,113 | 178,320 | 50,361 | 2,176 | 2,100 | diff --git a/eslint.config.mjs b/eslint.config.mjs deleted file mode 100644 index ef9ac1c..0000000 --- a/eslint.config.mjs +++ /dev/null @@ -1,80 +0,0 @@ -import eslint from "@eslint/js"; -import globals from "globals"; -import { defineConfig } from "eslint/config"; -import tseslint from "typescript-eslint"; -import eslintConfigPrettier from "eslint-config-prettier/flat"; -import depend from "eslint-plugin-depend"; - -export default defineConfig( - { - ignores: [ - "**/node_modules", - "**/build", - "**/dist", - "**/public", - // This package mixes a lot of packages that I don't control, so ignore it. - "packages/ecs-benchmark/**", - // Benchmarks intentionally use varied loop styles, non-null assertions, etc. - "packages/perf-proofs/**", - ], - }, - { - files: ["**/*.{js,mjs,cjs,ts,mts,cts}"], - languageOptions: { globals: globals.browser }, - plugins: { depend }, - extends: ["depend/flat/recommended"], - }, - eslintConfigPrettier, - eslint.configs.recommended, - tseslint.configs.recommended, - tseslint.configs.strictTypeChecked, - tseslint.configs.stylisticTypeChecked, - { - languageOptions: { - parserOptions: { - projectService: true, - tsconfigRootDir: import.meta.dirname, - }, - }, - }, - { - files: ["packages/objecs/src/**/*.ts"], - rules: { - "no-restricted-syntax": [ - "error", - { - selector: - "CallExpression[callee.object.name='Object'][callee.property.name='hasOwn']", - message: - "Use `entity[prop] !== undefined` instead of Object.hasOwn() in core library. Object.hasOwn is ~10% slower due to static method call overhead. See CLAUDE.md Performance Conventions.", - }, - ], - }, - }, - { - rules: { - "@typescript-eslint/array-type": "off", - "@typescript-eslint/restrict-template-expressions": [ - "error", - { - allowNumber: true, - }, - ], - "@typescript-eslint/consistent-type-definitions": "off", - "@typescript-eslint/interface-name-prefix": "off", - "@typescript-eslint/explicit-function-return-type": "off", - "@typescript-eslint/no-explicit-any": "off", - "@typescript-eslint/camelcase": "off", - "@typescript-eslint/no-var-requires": "off", - "no-unused-vars": "off", - - "@typescript-eslint/no-unused-vars": [ - "error", - { - argsIgnorePattern: "^_", - varsIgnorePattern: "^_", - }, - ], - }, - }, -); diff --git a/hierarchy-ideas.md b/hierarchy-ideas.md deleted file mode 100644 index 02a1ef9..0000000 --- a/hierarchy-ideas.md +++ /dev/null @@ -1,290 +0,0 @@ -# Hierarchy and Scene Graph Ideas for objECS - -This document captures ideas for implementing parent-child hierarchy and scene graph functionality in objECS, inspired by [Wicked Engine's ECS article](https://wickedengine.net/2019/09/entity-component-system/). - -## Current State - -The shmup demo uses a simple pattern for hierarchy: - -```typescript -// Entity type has parent reference -parent?: SetRequired; -localTransform?: Transform; - -// local-transform-system.ts manually updates child positions -entity.transform.position.x = - entity.parent.transform.position.x + entity.localTransform.position.x; -``` - -This works but doesn't handle: -- Deep hierarchies (grandchildren) -- Processing order (parent must update before child) -- Rotation/scale inheritance -- Attach/detach operations - -## Wicked Engine's Approach - -Key concepts from the C++ implementation: - -1. **HierarchyComponent** - stores parent entity + parent's inverse world matrix at attach time -2. **Ordering guarantee** - parents are always processed before children (topological sort) -3. **Attach/Detach operations** - handle matrix math and maintain ordering -4. **Two transforms** - local (relative to parent) and world (absolute) - -## Challenges for objECS - -| Wicked Engine | objECS | -|---------------|--------| -| Integer entity IDs | Object references | -| Ordered arrays per component | Unordered Sets | -| Component managers with sorting | Simple archetypes | - -## Potential Approaches - -### Approach 1: Depth-based Sorting (Pattern-based) - -Add a `hierarchyDepth` to entities and sort before processing. This is more of a "pattern" than a native feature - users implement it in their entity types and systems. - -```typescript -type Entity = { - transform?: Transform; - localTransform?: Transform; // Position relative to parent - parent?: Entity; - hierarchyDepth?: number; // 0 = root, 1 = child of root, etc. - children?: Set; // Optional: for fast traversal -}; - -function hierarchySystemFactory(world: World) { - const hierarchical = world.archetype("transform", "localTransform", "parent"); - - return function hierarchySystem() { - // Sort by depth to ensure parents update before children - const sorted = [...hierarchical.entities].sort( - (a, b) => (a.hierarchyDepth ?? 0) - (b.hierarchyDepth ?? 0) - ); - - for (const entity of sorted) { - const parent = entity.parent!; - - // Compose local transform with parent's world transform - entity.transform.position.x = - parent.transform!.position.x + entity.localTransform.position.x; - entity.transform.position.y = - parent.transform!.position.y + entity.localTransform.position.y; - // ... rotation, scale would need matrix math - } - }; -} -``` - -With utility functions: - -```typescript -function attachToParent( - world: World, - child: Entity, - parent: Entity -) { - const parentDepth = parent.hierarchyDepth ?? 0; - - world.addEntityComponents(child, "parent", parent); - world.addEntityComponents(child, "hierarchyDepth", parentDepth + 1); - - // Store current world position as local offset - if (child.transform && parent.transform) { - world.addEntityComponents(child, "localTransform", { - position: { - x: child.transform.position.x - parent.transform.position.x, - y: child.transform.position.y - parent.transform.position.y, - }, - rotation: child.transform.rotation - parent.transform.rotation, - scale: { ...child.transform.scale }, - }); - } - - // Track children for fast detach/reparenting - parent.children ??= new Set(); - parent.children.add(child); -} - -function detachFromParent(world: World, child: Entity) { - const parent = child.parent; - if (!parent) return; - - parent.children?.delete(child); - world.removeEntityComponents(child, "parent", "localTransform", "hierarchyDepth"); -} -``` - -**Pros:** -- Simple, fits objECS philosophy -- No new abstractions needed -- Users can customize behavior - -**Cons:** -- Sorting cost O(n log n) per frame -- Manual bookkeeping required -- Easy to forget depth updates - ---- - -### Approach 2: SceneGraph Class (Structured) - -A dedicated hierarchy manager that works alongside the ECS: - -```typescript -class SceneGraph { - #roots = new Set(); - #parentMap = new Map(); - #childrenMap = new Map>(); - #depthMap = new Map(); - - attach(child: Entity, parent: Entity) { - this.detach(child); // Remove from current parent if any - - this.#parentMap.set(child, parent); - - const children = this.#childrenMap.get(parent) ?? new Set(); - children.add(child); - this.#childrenMap.set(parent, children); - - this.#updateDepths(child, this.getDepth(parent) + 1); - this.#roots.delete(child); - } - - detach(entity: Entity) { - const parent = this.#parentMap.get(entity); - if (parent) { - this.#childrenMap.get(parent)?.delete(entity); - this.#parentMap.delete(entity); - this.#roots.add(entity); - this.#updateDepths(entity, 0); - } - } - - getParent(entity: Entity): Entity | undefined { - return this.#parentMap.get(entity); - } - - getChildren(entity: Entity): ReadonlySet { - return this.#childrenMap.get(entity) ?? new Set(); - } - - getDepth(entity: Entity): number { - return this.#depthMap.get(entity) ?? 0; - } - - // Iterate in topological order (parents before children) - *traverse(): Generator { - const visited = new Set(); - - function* visit(entity: Entity, graph: SceneGraph): Generator { - if (visited.has(entity)) return; - visited.add(entity); - - yield entity; - - for (const child of graph.getChildren(entity)) { - yield* visit(child, graph); - } - } - - for (const root of this.#roots) { - yield* visit(root, this); - } - } - - #updateDepths(entity: Entity, depth: number) { - this.#depthMap.set(entity, depth); - for (const child of this.#childrenMap.get(entity) ?? []) { - this.#updateDepths(child, depth + 1); - } - } -} -``` - -Usage: - -```typescript -const world = new World(); -const sceneGraph = new SceneGraph(); - -const player = world.createEntity({ transform: {...} }); -const thruster = world.createEntity({ transform: {...}, localTransform: {...} }); - -sceneGraph.attach(thruster, player); - -// In system - iterate in correct order -function hierarchySystem() { - for (const entity of sceneGraph.traverse()) { - const parent = sceneGraph.getParent(entity); - if (parent && entity.localTransform && entity.transform && parent.transform) { - // Update world transform from parent + local - } - } -} -``` - -**Pros:** -- Clean separation of concerns -- Guarantees correct traversal order -- Centralized hierarchy management -- Could be published as `objecs-hierarchy` package - -**Cons:** -- Additional data structure to maintain -- Need to sync with entity lifecycle (delete entity = detach) -- Slight indirection - ---- - -### Approach 3: Matrix-based Transforms (Full Scene Graph) - -For proper rotation/scale inheritance, matrix math is needed: - -```typescript -type Transform = { - position: Vector2d; - rotation: number; - scale: Vector2d; - localMatrix?: Mat3; // Computed from position/rotation/scale - worldMatrix?: Mat3; // Cached world matrix (local * parent.world) -}; - -function composeTransform(local: Transform, parentWorld: Mat3): Mat3 { - const localMatrix = Mat3.fromTRS(local.position, local.rotation, local.scale); - return Mat3.multiply(parentWorld, localMatrix); -} - -function decomposeMatrix(matrix: Mat3): { position: Vector2d; rotation: number; scale: Vector2d } { - // Extract position, rotation, scale from matrix -} -``` - -This would require a small math library (or use gl-matrix). - ---- - -## Recommendations - -1. **Start with Approach 1** for simple cases (position-only parenting) -2. **Evolve to Approach 2** if hierarchy becomes central to the game -3. **Add Approach 3** only if rotation/scale inheritance is needed - -The SceneGraph class (Approach 2) could potentially be: -- A separate package (`objecs-hierarchy`) -- Built into objECS core with opt-in usage -- Documented as a recommended pattern - -## Open Questions - -- Should SceneGraph automatically sync with World entity deletions? -- Should transforms be split into `localTransform` and `worldTransform` always? -- How to handle dirty flags / caching for performance? -- Should hierarchy be query-able via archetypes? (e.g., `world.archetype("parent")`) - -## References - -- [Wicked Engine ECS](https://wickedengine.net/2019/09/entity-component-system/) -- [Unity's Transform hierarchy](https://docs.unity3d.com/Manual/class-Transform.html) -- [Bevy's Parent/Children components](https://bevyengine.org/learn/book/getting-started/hierarchy/) diff --git a/jekyll.config.yml b/jekyll.config.yml index 53c30fa..5cb0ee2 100644 --- a/jekyll.config.yml +++ b/jekyll.config.yml @@ -1,4 +1,4 @@ # Used to configure jekyll for typedoc include: - - '_*_.html' - - '_*_.*.html' + - "_*_.html" + - "_*_.*.html" diff --git a/netlify.toml b/netlify.toml index 1ca5b93..c208a88 100644 --- a/netlify.toml +++ b/netlify.toml @@ -1,4 +1,4 @@ [build] - publish = "packages/examples/dist" +publish = "packages/examples/dist" - command = "pnpm --version; pnpm install && pnpm --filter objecs build && pnpm --filter examples build" \ No newline at end of file +command = "pnpm --version; pnpm install && pnpm --filter objecs build && pnpm --filter examples build" diff --git a/package.json b/package.json index 6940eb1..0212941 100644 --- a/package.json +++ b/package.json @@ -3,23 +3,20 @@ "private": true, "type": "module", "scripts": { - "lint": "eslint \"packages/**/*.{js,jsx,ts,tsx}\" eslint.config.mjs", - "lint:fix": "eslint --fix \"packages/**/*.{js,jsx,ts,tsx}\" eslint.config.mjs" + "lint": "vp lint", + "lint:fix": "vp lint --fix", + "prepare": "vp config" }, "keywords": [], "author": "", "license": "ISC", "packageManager": "pnpm@10.32.1", "devDependencies": { - "@eslint/js": "9.39.2", - "@types/eslint": "^9.6.1", - "@typescript-eslint/utils": "8.53.0", - "eslint": "^9.39.4", - "eslint-config-prettier": "^10.1.8", "eslint-plugin-depend": "1.5.0", "globals": "17.4.0", + "oxlint-tsgolint": "0.16.0", "typescript": "5.9.3", - "typescript-eslint": "8.57.0", - "typeslayer": "0.1.31" + "typeslayer": "0.1.31", + "vite-plus": "catalog:" } } diff --git a/packages/benchmark/.oxfmtrc.json b/packages/benchmark/.oxfmtrc.json new file mode 100644 index 0000000..0c947e9 --- /dev/null +++ b/packages/benchmark/.oxfmtrc.json @@ -0,0 +1,8 @@ +{ + "semi": true, + "tabWidth": 2, + "trailingComma": "all", + "useTabs": true, + "printWidth": 80, + "sortPackageJson": false +} diff --git a/packages/benchmark/.oxlintrc.json b/packages/benchmark/.oxlintrc.json new file mode 100644 index 0000000..41a1459 --- /dev/null +++ b/packages/benchmark/.oxlintrc.json @@ -0,0 +1,3 @@ +{ + "extends": ["../../.oxlintrc.json"] +} diff --git a/packages/benchmark/.prettierrc b/packages/benchmark/.prettierrc deleted file mode 100644 index 9d6d0ee..0000000 --- a/packages/benchmark/.prettierrc +++ /dev/null @@ -1,6 +0,0 @@ -{ - "semi": true, - "tabWidth": 2, - "trailingComma": "all", - "useTabs": true -} diff --git a/packages/benchmark/.vscode/settings.json b/packages/benchmark/.vscode/settings.json index 25fa621..4d360cb 100644 --- a/packages/benchmark/.vscode/settings.json +++ b/packages/benchmark/.vscode/settings.json @@ -1,3 +1,3 @@ { - "typescript.tsdk": "node_modules/typescript/lib" + "typescript.tsdk": "node_modules/typescript/lib" } diff --git a/packages/benchmark/package.json b/packages/benchmark/package.json index 0ae62ec..34cd2d5 100644 --- a/packages/benchmark/package.json +++ b/packages/benchmark/package.json @@ -5,8 +5,8 @@ "main": "index.js", "type": "module", "scripts": { - "lint": "eslint \"src/**/*.{js,jsx,ts,tsx}\"", - "lint:fix": "eslint --fix \"src/**/*.{js,jsx,ts,tsx}\"", + "lint": "vp lint", + "lint:fix": "vp lint --fix", "start": "tsx src/bench.ts" }, "keywords": [], diff --git a/packages/benchmark/renovate.json b/packages/benchmark/renovate.json index 39a2b6e..7ec37f6 100644 --- a/packages/benchmark/renovate.json +++ b/packages/benchmark/renovate.json @@ -1,6 +1,4 @@ { - "$schema": "https://docs.renovatebot.com/renovate-schema.json", - "extends": [ - "config:base" - ] + "$schema": "https://docs.renovatebot.com/renovate-schema.json", + "extends": ["config:base"] } diff --git a/packages/ecs-benchmark/.github/workflows/main.yml b/packages/ecs-benchmark/.github/workflows/main.yml deleted file mode 100644 index 6d2bad3..0000000 --- a/packages/ecs-benchmark/.github/workflows/main.yml +++ /dev/null @@ -1,23 +0,0 @@ -name: CI - -on: [push, pull_request] - -jobs: - lint: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - run: npm ci - - run: npm run check-format - bench-obj: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - run: npm ci - - run: npm run start -- @obj - bench-soa: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - run: npm ci - - run: npm run start -- @soa diff --git a/packages/ecs-benchmark/.oxfmtrc.json b/packages/ecs-benchmark/.oxfmtrc.json new file mode 100644 index 0000000..0c947e9 --- /dev/null +++ b/packages/ecs-benchmark/.oxfmtrc.json @@ -0,0 +1,8 @@ +{ + "semi": true, + "tabWidth": 2, + "trailingComma": "all", + "useTabs": true, + "printWidth": 80, + "sortPackageJson": false +} diff --git a/packages/ecs-benchmark/.oxlintrc.json b/packages/ecs-benchmark/.oxlintrc.json new file mode 100644 index 0000000..41a1459 --- /dev/null +++ b/packages/ecs-benchmark/.oxlintrc.json @@ -0,0 +1,3 @@ +{ + "extends": ["../../.oxlintrc.json"] +} diff --git a/packages/ecs-benchmark/.prettierrc b/packages/ecs-benchmark/.prettierrc deleted file mode 100644 index 9d6d0ee..0000000 --- a/packages/ecs-benchmark/.prettierrc +++ /dev/null @@ -1,6 +0,0 @@ -{ - "semi": true, - "tabWidth": 2, - "trailingComma": "all", - "useTabs": true -} diff --git a/packages/ecs-benchmark/package.json b/packages/ecs-benchmark/package.json index da54027..d851249 100644 --- a/packages/ecs-benchmark/package.json +++ b/packages/ecs-benchmark/package.json @@ -4,8 +4,8 @@ "type": "module", "scripts": { "start": "node src/bench.js", - "lint": "prettier --check 'src/**/*.js'", - "lint:fix": "prettier --write 'src/**/*.js'" + "lint": "vp lint", + "lint:fix": "vp lint --fix" }, "dependencies": { "@jakeklassen/ecs": "4.0.7", @@ -26,7 +26,6 @@ "wolf-ecs": "2.1.3" }, "devDependencies": { - "@types/node": "^24.12.0", - "prettier": "^3.8.1" + "@types/node": "^24.12.0" } } diff --git a/packages/examples/.oxfmtrc.json b/packages/examples/.oxfmtrc.json new file mode 100644 index 0000000..0c947e9 --- /dev/null +++ b/packages/examples/.oxfmtrc.json @@ -0,0 +1,8 @@ +{ + "semi": true, + "tabWidth": 2, + "trailingComma": "all", + "useTabs": true, + "printWidth": 80, + "sortPackageJson": false +} diff --git a/packages/examples/.oxlintrc.json b/packages/examples/.oxlintrc.json new file mode 100644 index 0000000..41a1459 --- /dev/null +++ b/packages/examples/.oxlintrc.json @@ -0,0 +1,3 @@ +{ + "extends": ["../../.oxlintrc.json"] +} diff --git a/packages/examples/.prettierrc b/packages/examples/.prettierrc deleted file mode 100644 index a6fe5ed..0000000 --- a/packages/examples/.prettierrc +++ /dev/null @@ -1,6 +0,0 @@ -{ - "semi": true, - "tabWidth": 2, - "trailingComma": "all", - "useTabs": true -} diff --git a/packages/examples/index.html b/packages/examples/index.html index 9addc67..caa3704 100644 --- a/packages/examples/index.html +++ b/packages/examples/index.html @@ -1,23 +1,23 @@ - + - - - - - ECS Examples - - - - - + + + + + ECS Examples + + + + + diff --git a/packages/examples/package.json b/packages/examples/package.json index 030cc56..151bff0 100644 --- a/packages/examples/package.json +++ b/packages/examples/package.json @@ -4,24 +4,25 @@ "version": "0.0.0", "type": "module", "scripts": { - "dev": "vite", - "build": "tsc && vite build", - "lint": "prettier --check 'src/**/*.ts'", - "lint:fix": "prettier --write 'src/**/*.ts'", - "preview": "vite preview" + "dev": "vp dev", + "build": "tsc && vp build", + "lint": "vp lint", + "lint:fix": "vp lint --fix", + "preview": "vp preview" }, "devDependencies": { "@types/color": "4.2.0", "@types/file-saver": "2.0.7", "@types/wicg-file-system-access": "2023.10.7", - "prettier": "^3.8.1", "typescript": "5.9.3", - "vite": "^7.3.1" + "vite": "npm:@voidzero-dev/vite-plus-core@latest", + "vite-plus": "catalog:" }, "dependencies": { "@tweakpane/core": "2.0.5", "color": "5.0.3", "dot-path-value": "0.0.11", + "esbuild": "0.27.4", "fast-xml-parser": "5.5.5", "file-saver": "2.0.5", "gameinput": "0.0.9", diff --git a/packages/examples/public/css/demo.css b/packages/examples/public/css/demo.css index e49fb0d..21f13df 100644 --- a/packages/examples/public/css/demo.css +++ b/packages/examples/public/css/demo.css @@ -1,37 +1,37 @@ html, body { - background-color: #1a1d21; - padding: 0; - margin: 0; - overflow: hidden; + background-color: #1a1d21; + padding: 0; + margin: 0; + overflow: hidden; } #container { - margin: 0; - padding: 0; - height: 100vh; - width: 100%; - display: flex; - flex-direction: column; + margin: 0; + padding: 0; + height: 100vh; + width: 100%; + display: flex; + flex-direction: column; } #wrapper { - position: relative; - margin: auto; + position: relative; + margin: auto; } #status { - position: absolute; - top: 0; - right: 0; - padding: 1em; - /* common monospace font */ - font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; - /* pleasing off white color */ - color: #cacaca; - z-index: 2; + position: absolute; + top: 0; + right: 0; + padding: 1em; + /* common monospace font */ + font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; + /* pleasing off white color */ + color: #cacaca; + z-index: 2; } .hidden { - display: none; + display: none; } diff --git a/packages/examples/public/js/feather-init.js b/packages/examples/public/js/feather-init.js index bfb8dbe..7de4a19 100644 --- a/packages/examples/public/js/feather-init.js +++ b/packages/examples/public/js/feather-init.js @@ -1,9 +1,9 @@ const timer = setInterval(() => { - if (globalThis.feather == null) { - return; - } + if (globalThis.feather == null) { + return; + } - globalThis.feather.replace(); + globalThis.feather.replace(); - clearInterval(timer); + clearInterval(timer); }, 50); diff --git a/packages/examples/public/js/feather.min.js b/packages/examples/public/js/feather.min.js index 19243bc..80b43e2 100644 --- a/packages/examples/public/js/feather.min.js +++ b/packages/examples/public/js/feather.min.js @@ -1,13 +1,2129 @@ -!function(e,n){"object"==typeof exports&&"object"==typeof module?module.exports=n():"function"==typeof define&&define.amd?define([],n):"object"==typeof exports?exports.feather=n():e.feather=n()}("undefined"!=typeof self?self:this,function(){return function(e){var n={};function i(t){if(n[t])return n[t].exports;var l=n[t]={i:t,l:!1,exports:{}};return e[t].call(l.exports,l,l.exports,i),l.l=!0,l.exports}return i.m=e,i.c=n,i.d=function(e,n,t){i.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:t})},i.r=function(e){Object.defineProperty(e,"__esModule",{value:!0})},i.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(n,"a",n),n},i.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},i.p="",i(i.s=80)}([function(e,n,i){(function(n){var i="object",t=function(e){return e&&e.Math==Math&&e};e.exports=t(typeof globalThis==i&&globalThis)||t(typeof window==i&&window)||t(typeof self==i&&self)||t(typeof n==i&&n)||Function("return this")()}).call(this,i(75))},function(e,n){var i={}.hasOwnProperty;e.exports=function(e,n){return i.call(e,n)}},function(e,n,i){var t=i(0),l=i(11),r=i(33),o=i(62),a=t.Symbol,c=l("wks");e.exports=function(e){return c[e]||(c[e]=o&&a[e]||(o?a:r)("Symbol."+e))}},function(e,n,i){var t=i(6);e.exports=function(e){if(!t(e))throw TypeError(String(e)+" is not an object");return e}},function(e,n){e.exports=function(e){try{return!!e()}catch(e){return!0}}},function(e,n,i){var t=i(8),l=i(7),r=i(10);e.exports=t?function(e,n,i){return l.f(e,n,r(1,i))}:function(e,n,i){return e[n]=i,e}},function(e,n){e.exports=function(e){return"object"==typeof e?null!==e:"function"==typeof e}},function(e,n,i){var t=i(8),l=i(35),r=i(3),o=i(18),a=Object.defineProperty;n.f=t?a:function(e,n,i){if(r(e),n=o(n,!0),r(i),l)try{return a(e,n,i)}catch(e){}if("get"in i||"set"in i)throw TypeError("Accessors not supported");return"value"in i&&(e[n]=i.value),e}},function(e,n,i){var t=i(4);e.exports=!t(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(e,n){e.exports={}},function(e,n){e.exports=function(e,n){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:n}}},function(e,n,i){var t=i(0),l=i(19),r=i(17),o=t["__core-js_shared__"]||l("__core-js_shared__",{});(e.exports=function(e,n){return o[e]||(o[e]=void 0!==n?n:{})})("versions",[]).push({version:"3.1.3",mode:r?"pure":"global",copyright:"© 2019 Denis Pushkarev (zloirock.ru)"})},function(e,n,i){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var t=o(i(43)),l=o(i(41)),r=o(i(40));function o(e){return e&&e.__esModule?e:{default:e}}n.default=Object.keys(l.default).map(function(e){return new t.default(e,l.default[e],r.default[e])}).reduce(function(e,n){return e[n.name]=n,e},{})},function(e,n){e.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},function(e,n,i){var t=i(72),l=i(20);e.exports=function(e){return t(l(e))}},function(e,n){e.exports={}},function(e,n,i){var t=i(11),l=i(33),r=t("keys");e.exports=function(e){return r[e]||(r[e]=l(e))}},function(e,n){e.exports=!1},function(e,n,i){var t=i(6);e.exports=function(e,n){if(!t(e))return e;var i,l;if(n&&"function"==typeof(i=e.toString)&&!t(l=i.call(e)))return l;if("function"==typeof(i=e.valueOf)&&!t(l=i.call(e)))return l;if(!n&&"function"==typeof(i=e.toString)&&!t(l=i.call(e)))return l;throw TypeError("Can't convert object to primitive value")}},function(e,n,i){var t=i(0),l=i(5);e.exports=function(e,n){try{l(t,e,n)}catch(i){t[e]=n}return n}},function(e,n){e.exports=function(e){if(void 0==e)throw TypeError("Can't call method on "+e);return e}},function(e,n){var i=Math.ceil,t=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(e>0?t:i)(e)}},function(e,n,i){var t; -/*! +!(function (e, n) { + "object" == typeof exports && "object" == typeof module + ? (module.exports = n()) + : "function" == typeof define && define.amd + ? define([], n) + : "object" == typeof exports + ? (exports.feather = n()) + : (e.feather = n()); +})("undefined" != typeof self ? self : this, function () { + return (function (e) { + var n = {}; + function i(t) { + if (n[t]) return n[t].exports; + var l = (n[t] = { i: t, l: !1, exports: {} }); + return (e[t].call(l.exports, l, l.exports, i), (l.l = !0), l.exports); + } + return ( + (i.m = e), + (i.c = n), + (i.d = function (e, n, t) { + i.o(e, n) || + Object.defineProperty(e, n, { + configurable: !1, + enumerable: !0, + get: t, + }); + }), + (i.r = function (e) { + Object.defineProperty(e, "__esModule", { value: !0 }); + }), + (i.n = function (e) { + var n = + e && e.__esModule + ? function () { + return e.default; + } + : function () { + return e; + }; + return (i.d(n, "a", n), n); + }), + (i.o = function (e, n) { + return Object.prototype.hasOwnProperty.call(e, n); + }), + (i.p = ""), + i((i.s = 80)) + ); + })([ + function (e, n, i) { + (function (n) { + var i = "object", + t = function (e) { + return e && e.Math == Math && e; + }; + e.exports = + t(typeof globalThis == i && globalThis) || + t(typeof window == i && window) || + t(typeof self == i && self) || + t(typeof n == i && n) || + Function("return this")(); + }).call(this, i(75)); + }, + function (e, n) { + var i = {}.hasOwnProperty; + e.exports = function (e, n) { + return i.call(e, n); + }; + }, + function (e, n, i) { + var t = i(0), + l = i(11), + r = i(33), + o = i(62), + a = t.Symbol, + c = l("wks"); + e.exports = function (e) { + return c[e] || (c[e] = (o && a[e]) || (o ? a : r)("Symbol." + e)); + }; + }, + function (e, n, i) { + var t = i(6); + e.exports = function (e) { + if (!t(e)) throw TypeError(String(e) + " is not an object"); + return e; + }; + }, + function (e, n) { + e.exports = function (e) { + try { + return !!e(); + } catch (e) { + return !0; + } + }; + }, + function (e, n, i) { + var t = i(8), + l = i(7), + r = i(10); + e.exports = t + ? function (e, n, i) { + return l.f(e, n, r(1, i)); + } + : function (e, n, i) { + return ((e[n] = i), e); + }; + }, + function (e, n) { + e.exports = function (e) { + return "object" == typeof e ? null !== e : "function" == typeof e; + }; + }, + function (e, n, i) { + var t = i(8), + l = i(35), + r = i(3), + o = i(18), + a = Object.defineProperty; + n.f = t + ? a + : function (e, n, i) { + if ((r(e), (n = o(n, !0)), r(i), l)) + try { + return a(e, n, i); + } catch (e) {} + if ("get" in i || "set" in i) + throw TypeError("Accessors not supported"); + return ("value" in i && (e[n] = i.value), e); + }; + }, + function (e, n, i) { + var t = i(4); + e.exports = !t(function () { + return ( + 7 != + Object.defineProperty({}, "a", { + get: function () { + return 7; + }, + }).a + ); + }); + }, + function (e, n) { + e.exports = {}; + }, + function (e, n) { + e.exports = function (e, n) { + return { + enumerable: !(1 & e), + configurable: !(2 & e), + writable: !(4 & e), + value: n, + }; + }; + }, + function (e, n, i) { + var t = i(0), + l = i(19), + r = i(17), + o = t["__core-js_shared__"] || l("__core-js_shared__", {}); + (e.exports = function (e, n) { + return o[e] || (o[e] = void 0 !== n ? n : {}); + })("versions", []).push({ + version: "3.1.3", + mode: r ? "pure" : "global", + copyright: "© 2019 Denis Pushkarev (zloirock.ru)", + }); + }, + function (e, n, i) { + "use strict"; + Object.defineProperty(n, "__esModule", { value: !0 }); + var t = o(i(43)), + l = o(i(41)), + r = o(i(40)); + function o(e) { + return e && e.__esModule ? e : { default: e }; + } + n.default = Object.keys(l.default) + .map(function (e) { + return new t.default(e, l.default[e], r.default[e]); + }) + .reduce(function (e, n) { + return ((e[n.name] = n), e); + }, {}); + }, + function (e, n) { + e.exports = [ + "constructor", + "hasOwnProperty", + "isPrototypeOf", + "propertyIsEnumerable", + "toLocaleString", + "toString", + "valueOf", + ]; + }, + function (e, n, i) { + var t = i(72), + l = i(20); + e.exports = function (e) { + return t(l(e)); + }; + }, + function (e, n) { + e.exports = {}; + }, + function (e, n, i) { + var t = i(11), + l = i(33), + r = t("keys"); + e.exports = function (e) { + return r[e] || (r[e] = l(e)); + }; + }, + function (e, n) { + e.exports = !1; + }, + function (e, n, i) { + var t = i(6); + e.exports = function (e, n) { + if (!t(e)) return e; + var i, l; + if (n && "function" == typeof (i = e.toString) && !t((l = i.call(e)))) + return l; + if ("function" == typeof (i = e.valueOf) && !t((l = i.call(e)))) + return l; + if (!n && "function" == typeof (i = e.toString) && !t((l = i.call(e)))) + return l; + throw TypeError("Can't convert object to primitive value"); + }; + }, + function (e, n, i) { + var t = i(0), + l = i(5); + e.exports = function (e, n) { + try { + l(t, e, n); + } catch (i) { + t[e] = n; + } + return n; + }; + }, + function (e, n) { + e.exports = function (e) { + if (void 0 == e) throw TypeError("Can't call method on " + e); + return e; + }; + }, + function (e, n) { + var i = Math.ceil, + t = Math.floor; + e.exports = function (e) { + return isNaN((e = +e)) ? 0 : (e > 0 ? t : i)(e); + }; + }, + function (e, n, i) { + var t; + /*! Copyright (c) 2016 Jed Watson. Licensed under the MIT License (MIT), see http://jedwatson.github.io/classnames */ -/*! + /*! Copyright (c) 2016 Jed Watson. Licensed under the MIT License (MIT), see http://jedwatson.github.io/classnames */ -!function(){"use strict";var i=function(){function e(){}function n(e,n){for(var i=n.length,t=0;t0?l(t(e),9007199254740991):0}},function(e,n,i){var t=i(1),l=i(14),r=i(68),o=i(15),a=r(!1);e.exports=function(e,n){var i,r=l(e),c=0,p=[];for(i in r)!t(o,i)&&t(r,i)&&p.push(i);for(;n.length>c;)t(r,i=n[c++])&&(~a(p,i)||p.push(i));return p}},function(e,n,i){var t=i(0),l=i(11),r=i(5),o=i(1),a=i(19),c=i(36),p=i(37),y=p.get,h=p.enforce,x=String(c).split("toString");l("inspectSource",function(e){return c.call(e)}),(e.exports=function(e,n,i,l){var c=!!l&&!!l.unsafe,p=!!l&&!!l.enumerable,y=!!l&&!!l.noTargetGet;"function"==typeof i&&("string"!=typeof n||o(i,"name")||r(i,"name",n),h(i).source=x.join("string"==typeof n?n:"")),e!==t?(c?!y&&e[n]&&(p=!0):delete e[n],p?e[n]=i:r(e,n,i)):p?e[n]=i:a(n,i)})(Function.prototype,"toString",function(){return"function"==typeof this&&y(this).source||c.call(this)})},function(e,n){var i={}.toString;e.exports=function(e){return i.call(e).slice(8,-1)}},function(e,n,i){var t=i(8),l=i(73),r=i(10),o=i(14),a=i(18),c=i(1),p=i(35),y=Object.getOwnPropertyDescriptor;n.f=t?y:function(e,n){if(e=o(e),n=a(n,!0),p)try{return y(e,n)}catch(e){}if(c(e,n))return r(!l.f.call(e,n),e[n])}},function(e,n,i){var t=i(0),l=i(31).f,r=i(5),o=i(29),a=i(19),c=i(71),p=i(65);e.exports=function(e,n){var i,y,h,x,s,u=e.target,d=e.global,f=e.stat;if(i=d?t:f?t[u]||a(u,{}):(t[u]||{}).prototype)for(y in n){if(x=n[y],h=e.noTargetGet?(s=l(i,y))&&s.value:i[y],!p(d?y:u+(f?".":"#")+y,e.forced)&&void 0!==h){if(typeof x==typeof h)continue;c(x,h)}(e.sham||h&&h.sham)&&r(x,"sham",!0),o(i,y,x,e)}}},function(e,n){var i=0,t=Math.random();e.exports=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++i+t).toString(36))}},function(e,n,i){var t=i(0),l=i(6),r=t.document,o=l(r)&&l(r.createElement);e.exports=function(e){return o?r.createElement(e):{}}},function(e,n,i){var t=i(8),l=i(4),r=i(34);e.exports=!t&&!l(function(){return 7!=Object.defineProperty(r("div"),"a",{get:function(){return 7}}).a})},function(e,n,i){var t=i(11);e.exports=t("native-function-to-string",Function.toString)},function(e,n,i){var t,l,r,o=i(76),a=i(0),c=i(6),p=i(5),y=i(1),h=i(16),x=i(15),s=a.WeakMap;if(o){var u=new s,d=u.get,f=u.has,g=u.set;t=function(e,n){return g.call(u,e,n),n},l=function(e){return d.call(u,e)||{}},r=function(e){return f.call(u,e)}}else{var v=h("state");x[v]=!0,t=function(e,n){return p(e,v,n),n},l=function(e){return y(e,v)?e[v]:{}},r=function(e){return y(e,v)}}e.exports={set:t,get:l,has:r,enforce:function(e){return r(e)?l(e):t(e,{})},getterFor:function(e){return function(n){var i;if(!c(n)||(i=l(n)).type!==e)throw TypeError("Incompatible receiver, "+e+" required");return i}}}},function(e,n,i){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var t=Object.assign||function(e){for(var n=1;n0&&void 0!==arguments[0]?arguments[0]:{};if("undefined"==typeof document)throw new Error("`feather.replace()` only works in a browser environment.");var n=document.querySelectorAll("[data-feather]");Array.from(n).forEach(function(n){return function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=function(e){return Array.from(e.attributes).reduce(function(e,n){return e[n.name]=n.value,e},{})}(e),o=i["data-feather"];delete i["data-feather"];var a=r.default[o].toSvg(t({},n,i,{class:(0,l.default)(n.class,i.class)})),c=(new DOMParser).parseFromString(a,"image/svg+xml").querySelector("svg");e.parentNode.replaceChild(c,e)}(n,e)})}},function(e,n,i){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var t,l=i(12),r=(t=l)&&t.__esModule?t:{default:t};n.default=function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(console.warn("feather.toSvg() is deprecated. Please use feather.icons[name].toSvg() instead."),!e)throw new Error("The required `key` (icon name) parameter is missing.");if(!r.default[e])throw new Error("No icon matching '"+e+"'. See the complete list of icons at https://feathericons.com");return r.default[e].toSvg(n)}},function(e){e.exports={activity:["pulse","health","action","motion"],airplay:["stream","cast","mirroring"],"alert-circle":["warning","alert","danger"],"alert-octagon":["warning","alert","danger"],"alert-triangle":["warning","alert","danger"],"align-center":["text alignment","center"],"align-justify":["text alignment","justified"],"align-left":["text alignment","left"],"align-right":["text alignment","right"],anchor:[],archive:["index","box"],"at-sign":["mention","at","email","message"],award:["achievement","badge"],aperture:["camera","photo"],"bar-chart":["statistics","diagram","graph"],"bar-chart-2":["statistics","diagram","graph"],battery:["power","electricity"],"battery-charging":["power","electricity"],bell:["alarm","notification","sound"],"bell-off":["alarm","notification","silent"],bluetooth:["wireless"],"book-open":["read","library"],book:["read","dictionary","booklet","magazine","library"],bookmark:["read","clip","marker","tag"],box:["cube"],briefcase:["work","bag","baggage","folder"],calendar:["date"],camera:["photo"],cast:["chromecast","airplay"],"chevron-down":["expand"],"chevron-up":["collapse"],circle:["off","zero","record"],clipboard:["copy"],clock:["time","watch","alarm"],"cloud-drizzle":["weather","shower"],"cloud-lightning":["weather","bolt"],"cloud-rain":["weather"],"cloud-snow":["weather","blizzard"],cloud:["weather"],codepen:["logo"],codesandbox:["logo"],code:["source","programming"],coffee:["drink","cup","mug","tea","cafe","hot","beverage"],columns:["layout"],command:["keyboard","cmd","terminal","prompt"],compass:["navigation","safari","travel","direction"],copy:["clone","duplicate"],"corner-down-left":["arrow","return"],"corner-down-right":["arrow"],"corner-left-down":["arrow"],"corner-left-up":["arrow"],"corner-right-down":["arrow"],"corner-right-up":["arrow"],"corner-up-left":["arrow"],"corner-up-right":["arrow"],cpu:["processor","technology"],"credit-card":["purchase","payment","cc"],crop:["photo","image"],crosshair:["aim","target"],database:["storage","memory"],delete:["remove"],disc:["album","cd","dvd","music"],"dollar-sign":["currency","money","payment"],droplet:["water"],edit:["pencil","change"],"edit-2":["pencil","change"],"edit-3":["pencil","change"],eye:["view","watch"],"eye-off":["view","watch","hide","hidden"],"external-link":["outbound"],facebook:["logo","social"],"fast-forward":["music"],figma:["logo","design","tool"],"file-minus":["delete","remove","erase"],"file-plus":["add","create","new"],"file-text":["data","txt","pdf"],film:["movie","video"],filter:["funnel","hopper"],flag:["report"],"folder-minus":["directory"],"folder-plus":["directory"],folder:["directory"],framer:["logo","design","tool"],frown:["emoji","face","bad","sad","emotion"],gift:["present","box","birthday","party"],"git-branch":["code","version control"],"git-commit":["code","version control"],"git-merge":["code","version control"],"git-pull-request":["code","version control"],github:["logo","version control"],gitlab:["logo","version control"],globe:["world","browser","language","translate"],"hard-drive":["computer","server","memory","data"],hash:["hashtag","number","pound"],headphones:["music","audio","sound"],heart:["like","love","emotion"],"help-circle":["question mark"],hexagon:["shape","node.js","logo"],home:["house","living"],image:["picture"],inbox:["email"],instagram:["logo","camera"],key:["password","login","authentication","secure"],layers:["stack"],layout:["window","webpage"],"life-bouy":["help","life ring","support"],link:["chain","url"],"link-2":["chain","url"],linkedin:["logo","social media"],list:["options"],lock:["security","password","secure"],"log-in":["sign in","arrow","enter"],"log-out":["sign out","arrow","exit"],mail:["email","message"],"map-pin":["location","navigation","travel","marker"],map:["location","navigation","travel"],maximize:["fullscreen"],"maximize-2":["fullscreen","arrows","expand"],meh:["emoji","face","neutral","emotion"],menu:["bars","navigation","hamburger"],"message-circle":["comment","chat"],"message-square":["comment","chat"],"mic-off":["record","sound","mute"],mic:["record","sound","listen"],minimize:["exit fullscreen","close"],"minimize-2":["exit fullscreen","arrows","close"],minus:["subtract"],monitor:["tv","screen","display"],moon:["dark","night"],"more-horizontal":["ellipsis"],"more-vertical":["ellipsis"],"mouse-pointer":["arrow","cursor"],move:["arrows"],music:["note"],navigation:["location","travel"],"navigation-2":["location","travel"],octagon:["stop"],package:["box","container"],paperclip:["attachment"],pause:["music","stop"],"pause-circle":["music","audio","stop"],"pen-tool":["vector","drawing"],percent:["discount"],"phone-call":["ring"],"phone-forwarded":["call"],"phone-incoming":["call"],"phone-missed":["call"],"phone-off":["call","mute"],"phone-outgoing":["call"],phone:["call"],play:["music","start"],"pie-chart":["statistics","diagram"],"play-circle":["music","start"],plus:["add","new"],"plus-circle":["add","new"],"plus-square":["add","new"],pocket:["logo","save"],power:["on","off"],printer:["fax","office","device"],radio:["signal"],"refresh-cw":["synchronise","arrows"],"refresh-ccw":["arrows"],repeat:["loop","arrows"],rewind:["music"],"rotate-ccw":["arrow"],"rotate-cw":["arrow"],rss:["feed","subscribe"],save:["floppy disk"],scissors:["cut"],search:["find","magnifier","magnifying glass"],send:["message","mail","email","paper airplane","paper aeroplane"],settings:["cog","edit","gear","preferences"],"share-2":["network","connections"],shield:["security","secure"],"shield-off":["security","insecure"],"shopping-bag":["ecommerce","cart","purchase","store"],"shopping-cart":["ecommerce","cart","purchase","store"],shuffle:["music"],"skip-back":["music"],"skip-forward":["music"],slack:["logo"],slash:["ban","no"],sliders:["settings","controls"],smartphone:["cellphone","device"],smile:["emoji","face","happy","good","emotion"],speaker:["audio","music"],star:["bookmark","favorite","like"],"stop-circle":["media","music"],sun:["brightness","weather","light"],sunrise:["weather","time","morning","day"],sunset:["weather","time","evening","night"],tablet:["device"],tag:["label"],target:["logo","bullseye"],terminal:["code","command line","prompt"],thermometer:["temperature","celsius","fahrenheit","weather"],"thumbs-down":["dislike","bad","emotion"],"thumbs-up":["like","good","emotion"],"toggle-left":["on","off","switch"],"toggle-right":["on","off","switch"],tool:["settings","spanner"],trash:["garbage","delete","remove","bin"],"trash-2":["garbage","delete","remove","bin"],triangle:["delta"],truck:["delivery","van","shipping","transport","lorry"],tv:["television","stream"],twitch:["logo"],twitter:["logo","social"],type:["text"],umbrella:["rain","weather"],unlock:["security"],"user-check":["followed","subscribed"],"user-minus":["delete","remove","unfollow","unsubscribe"],"user-plus":["new","add","create","follow","subscribe"],"user-x":["delete","remove","unfollow","unsubscribe","unavailable"],user:["person","account"],users:["group"],"video-off":["camera","movie","film"],video:["camera","movie","film"],voicemail:["phone"],volume:["music","sound","mute"],"volume-1":["music","sound"],"volume-2":["music","sound"],"volume-x":["music","sound","mute"],watch:["clock","time"],"wifi-off":["disabled"],wifi:["connection","signal","wireless"],wind:["weather","air"],"x-circle":["cancel","close","delete","remove","times","clear"],"x-octagon":["delete","stop","alert","warning","times","clear"],"x-square":["cancel","close","delete","remove","times","clear"],x:["cancel","close","delete","remove","times","clear"],youtube:["logo","video","play"],"zap-off":["flash","camera","lightning"],zap:["flash","camera","lightning"],"zoom-in":["magnifying glass"],"zoom-out":["magnifying glass"]}},function(e){e.exports={activity:'',airplay:'',"alert-circle":'',"alert-octagon":'',"alert-triangle":'',"align-center":'',"align-justify":'',"align-left":'',"align-right":'',anchor:'',aperture:'',archive:'',"arrow-down-circle":'',"arrow-down-left":'',"arrow-down-right":'',"arrow-down":'',"arrow-left-circle":'',"arrow-left":'',"arrow-right-circle":'',"arrow-right":'',"arrow-up-circle":'',"arrow-up-left":'',"arrow-up-right":'',"arrow-up":'',"at-sign":'',award:'',"bar-chart-2":'',"bar-chart":'',"battery-charging":'',battery:'',"bell-off":'',bell:'',bluetooth:'',bold:'',"book-open":'',book:'',bookmark:'',box:'',briefcase:'',calendar:'',"camera-off":'',camera:'',cast:'',"check-circle":'',"check-square":'',check:'',"chevron-down":'',"chevron-left":'',"chevron-right":'',"chevron-up":'',"chevrons-down":'',"chevrons-left":'',"chevrons-right":'',"chevrons-up":'',chrome:'',circle:'',clipboard:'',clock:'',"cloud-drizzle":'',"cloud-lightning":'',"cloud-off":'',"cloud-rain":'',"cloud-snow":'',cloud:'',code:'',codepen:'',codesandbox:'',coffee:'',columns:'',command:'',compass:'',copy:'',"corner-down-left":'',"corner-down-right":'',"corner-left-down":'',"corner-left-up":'',"corner-right-down":'',"corner-right-up":'',"corner-up-left":'',"corner-up-right":'',cpu:'',"credit-card":'',crop:'',crosshair:'',database:'',delete:'',disc:'',"divide-circle":'',"divide-square":'',divide:'',"dollar-sign":'',"download-cloud":'',download:'',dribbble:'',droplet:'',"edit-2":'',"edit-3":'',edit:'',"external-link":'',"eye-off":'',eye:'',facebook:'',"fast-forward":'',feather:'',figma:'',"file-minus":'',"file-plus":'',"file-text":'',file:'',film:'',filter:'',flag:'',"folder-minus":'',"folder-plus":'',folder:'',framer:'',frown:'',gift:'',"git-branch":'',"git-commit":'',"git-merge":'',"git-pull-request":'',github:'',gitlab:'',globe:'',grid:'',"hard-drive":'',hash:'',headphones:'',heart:'',"help-circle":'',hexagon:'',home:'',image:'',inbox:'',info:'',instagram:'',italic:'',key:'',layers:'',layout:'',"life-buoy":'',"link-2":'',link:'',linkedin:'',list:'',loader:'',lock:'',"log-in":'',"log-out":'',mail:'',"map-pin":'',map:'',"maximize-2":'',maximize:'',meh:'',menu:'',"message-circle":'',"message-square":'',"mic-off":'',mic:'',"minimize-2":'',minimize:'',"minus-circle":'',"minus-square":'',minus:'',monitor:'',moon:'',"more-horizontal":'',"more-vertical":'',"mouse-pointer":'',move:'',music:'',"navigation-2":'',navigation:'',octagon:'',package:'',paperclip:'',"pause-circle":'',pause:'',"pen-tool":'',percent:'',"phone-call":'',"phone-forwarded":'',"phone-incoming":'',"phone-missed":'',"phone-off":'',"phone-outgoing":'',phone:'',"pie-chart":'',"play-circle":'',play:'',"plus-circle":'',"plus-square":'',plus:'',pocket:'',power:'',printer:'',radio:'',"refresh-ccw":'',"refresh-cw":'',repeat:'',rewind:'',"rotate-ccw":'',"rotate-cw":'',rss:'',save:'',scissors:'',search:'',send:'',server:'',settings:'',"share-2":'',share:'',"shield-off":'',shield:'',"shopping-bag":'',"shopping-cart":'',shuffle:'',sidebar:'',"skip-back":'',"skip-forward":'',slack:'',slash:'',sliders:'',smartphone:'',smile:'',speaker:'',square:'',star:'',"stop-circle":'',sun:'',sunrise:'',sunset:'',table:'',tablet:'',tag:'',target:'',terminal:'',thermometer:'',"thumbs-down":'',"thumbs-up":'',"toggle-left":'',"toggle-right":'',tool:'',"trash-2":'',trash:'',trello:'',"trending-down":'',"trending-up":'',triangle:'',truck:'',tv:'',twitch:'',twitter:'',type:'',umbrella:'',underline:'',unlock:'',"upload-cloud":'',upload:'',"user-check":'',"user-minus":'',"user-plus":'',"user-x":'',user:'',users:'',"video-off":'',video:'',voicemail:'',"volume-1":'',"volume-2":'',"volume-x":'',volume:'',watch:'',"wifi-off":'',wifi:'',wind:'',"x-circle":'',"x-octagon":'',"x-square":'',x:'',youtube:'',"zap-off":'',zap:'',"zoom-in":'',"zoom-out":''}},function(e){e.exports={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":2,"stroke-linecap":"round","stroke-linejoin":"round"}},function(e,n,i){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var t=Object.assign||function(e){for(var n=1;n2&&void 0!==arguments[2]?arguments[2]:[];!function(e,n){if(!(e instanceof n))throw new TypeError("Cannot call a class as a function")}(this,e),this.name=n,this.contents=i,this.tags=l,this.attrs=t({},o.default,{class:"feather feather-"+n})}return l(e,[{key:"toSvg",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return""+this.contents+""}},{key:"toString",value:function(){return this.contents}}]),e}();n.default=c},function(e,n,i){"use strict";var t=o(i(12)),l=o(i(39)),r=o(i(38));function o(e){return e&&e.__esModule?e:{default:e}}e.exports={icons:t.default,toSvg:l.default,replace:r.default}},function(e,n,i){e.exports=i(0)},function(e,n,i){var t=i(2)("iterator"),l=!1;try{var r=0,o={next:function(){return{done:!!r++}},return:function(){l=!0}};o[t]=function(){return this},Array.from(o,function(){throw 2})}catch(e){}e.exports=function(e,n){if(!n&&!l)return!1;var i=!1;try{var r={};r[t]=function(){return{next:function(){return{done:i=!0}}}},e(r)}catch(e){}return i}},function(e,n,i){var t=i(30),l=i(2)("toStringTag"),r="Arguments"==t(function(){return arguments}());e.exports=function(e){var n,i,o;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(i=function(e,n){try{return e[n]}catch(e){}}(n=Object(e),l))?i:r?t(n):"Object"==(o=t(n))&&"function"==typeof n.callee?"Arguments":o}},function(e,n,i){var t=i(47),l=i(9),r=i(2)("iterator");e.exports=function(e){if(void 0!=e)return e[r]||e["@@iterator"]||l[t(e)]}},function(e,n,i){"use strict";var t=i(18),l=i(7),r=i(10);e.exports=function(e,n,i){var o=t(n);o in e?l.f(e,o,r(0,i)):e[o]=i}},function(e,n,i){var t=i(2),l=i(9),r=t("iterator"),o=Array.prototype;e.exports=function(e){return void 0!==e&&(l.Array===e||o[r]===e)}},function(e,n,i){var t=i(3);e.exports=function(e,n,i,l){try{return l?n(t(i)[0],i[1]):n(i)}catch(n){var r=e.return;throw void 0!==r&&t(r.call(e)),n}}},function(e,n){e.exports=function(e){if("function"!=typeof e)throw TypeError(String(e)+" is not a function");return e}},function(e,n,i){var t=i(52);e.exports=function(e,n,i){if(t(e),void 0===n)return e;switch(i){case 0:return function(){return e.call(n)};case 1:return function(i){return e.call(n,i)};case 2:return function(i,t){return e.call(n,i,t)};case 3:return function(i,t,l){return e.call(n,i,t,l)}}return function(){return e.apply(n,arguments)}}},function(e,n,i){"use strict";var t=i(53),l=i(24),r=i(51),o=i(50),a=i(27),c=i(49),p=i(48);e.exports=function(e){var n,i,y,h,x=l(e),s="function"==typeof this?this:Array,u=arguments.length,d=u>1?arguments[1]:void 0,f=void 0!==d,g=0,v=p(x);if(f&&(d=t(d,u>2?arguments[2]:void 0,2)),void 0==v||s==Array&&o(v))for(i=new s(n=a(x.length));n>g;g++)c(i,g,f?d(x[g],g):x[g]);else for(h=v.call(x),i=new s;!(y=h.next()).done;g++)c(i,g,f?r(h,d,[y.value,g],!0):y.value);return i.length=g,i}},function(e,n,i){var t=i(32),l=i(54);t({target:"Array",stat:!0,forced:!i(46)(function(e){Array.from(e)})},{from:l})},function(e,n,i){var t=i(6),l=i(3);e.exports=function(e,n){if(l(e),!t(n)&&null!==n)throw TypeError("Can't set "+String(n)+" as a prototype")}},function(e,n,i){var t=i(56);e.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var e,n=!1,i={};try{(e=Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set).call(i,[]),n=i instanceof Array}catch(e){}return function(i,l){return t(i,l),n?e.call(i,l):i.__proto__=l,i}}():void 0)},function(e,n,i){var t=i(0).document;e.exports=t&&t.documentElement},function(e,n,i){var t=i(28),l=i(13);e.exports=Object.keys||function(e){return t(e,l)}},function(e,n,i){var t=i(8),l=i(7),r=i(3),o=i(59);e.exports=t?Object.defineProperties:function(e,n){r(e);for(var i,t=o(n),a=t.length,c=0;a>c;)l.f(e,i=t[c++],n[i]);return e}},function(e,n,i){var t=i(3),l=i(60),r=i(13),o=i(15),a=i(58),c=i(34),p=i(16)("IE_PROTO"),y=function(){},h=function(){var e,n=c("iframe"),i=r.length;for(n.style.display="none",a.appendChild(n),n.src=String("javascript:"),(e=n.contentWindow.document).open(),e.write(" - + + - - - -
-
- - -
+ + + +
+
+ + +
-
- -
-
+
+ +
+
- - - + + + diff --git a/packages/examples/src/demos/bouncy-rectangles/index.html b/packages/examples/src/demos/bouncy-rectangles/index.html index c3a26bd..68b307e 100644 --- a/packages/examples/src/demos/bouncy-rectangles/index.html +++ b/packages/examples/src/demos/bouncy-rectangles/index.html @@ -1,38 +1,38 @@ - + - - - - - Demos - Bouncy Rectangles + + + + + Demos - Bouncy Rectangles - - + + - - - -
-
- - -
+ + + +
+
+ + +
-
- -
-
+
+ +
+
- - - + + + diff --git a/packages/examples/src/demos/debug-rendering/index.html b/packages/examples/src/demos/debug-rendering/index.html index d5784a7..e97b760 100644 --- a/packages/examples/src/demos/debug-rendering/index.html +++ b/packages/examples/src/demos/debug-rendering/index.html @@ -1,41 +1,41 @@ - + - - - - - Demos - Debug Rendering + + + + + Demos - Debug Rendering - - + + - - - -
-
- - -
+ + + +
+
+ + +
-
- -
-
+
+ +
+
- - - + + + diff --git a/packages/examples/src/demos/debug-rendering/systems/sprite-animation-system.ts b/packages/examples/src/demos/debug-rendering/systems/sprite-animation-system.ts index 2a2ec71..753b422 100644 --- a/packages/examples/src/demos/debug-rendering/systems/sprite-animation-system.ts +++ b/packages/examples/src/demos/debug-rendering/systems/sprite-animation-system.ts @@ -21,10 +21,10 @@ export function spriteAnimationSystemFactory(world: World) { spriteAnimation.frameSequence.length; const frameIndex = - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + // oxlint-disable-next-line @typescript-eslint/no-non-null-assertion spriteAnimation.frameSequence[spriteAnimation.currentFrame]!; - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + // oxlint-disable-next-line @typescript-eslint/no-non-null-assertion const frame = spriteAnimation.frames[frameIndex]!; sprite.frame = frame; diff --git a/packages/examples/src/demos/falling-sand/index.html b/packages/examples/src/demos/falling-sand/index.html index 24abdd5..8a09c1b 100644 --- a/packages/examples/src/demos/falling-sand/index.html +++ b/packages/examples/src/demos/falling-sand/index.html @@ -1,44 +1,44 @@ - + - - - - - Demos - Falling Sand + + + + + Demos - Falling Sand - - + + - - - -
-
- - -
+ transform: scale(4); + image-rendering: pixelated; + cursor: pointer; + /* cursor: url('https://fav.farm/👆') 15 0, auto; */ + } + + + +
+
+ + +
-
- -
-
+
+ +
+
- - - + + + diff --git a/packages/examples/src/demos/falling-sand/main.ts b/packages/examples/src/demos/falling-sand/main.ts index 9e8ed1f..1bf73be 100644 --- a/packages/examples/src/demos/falling-sand/main.ts +++ b/packages/examples/src/demos/falling-sand/main.ts @@ -48,9 +48,10 @@ canvas.addEventListener("mousemove", (e: MouseEvent) => { const world = new World(); -const entityGrid: Entity[] = new Array( - canvas.width * canvas.height, -).fill(null as unknown as Entity); +const entityGrid = Array.from( + { length: canvas.width * canvas.height }, + () => null as unknown as Entity, +); // ! This is a hack because the ECS has no concept of // ! reversed iteration. diff --git a/packages/examples/src/demos/pixel-text/index.html b/packages/examples/src/demos/pixel-text/index.html index e7d2d33..8855a1f 100644 --- a/packages/examples/src/demos/pixel-text/index.html +++ b/packages/examples/src/demos/pixel-text/index.html @@ -1,44 +1,44 @@ - + - - - - - Demos - Pixel Text + + + + + Demos - Pixel Text - - + + - - - -
-
- - -
+ + + +
+
+ + +
-
- -
-
+
+ +
+
- - - + + + diff --git a/packages/examples/src/demos/shmup/components/sprite-outline-animation.ts b/packages/examples/src/demos/shmup/components/sprite-outline-animation.ts index bb92bf0..00527cb 100644 --- a/packages/examples/src/demos/shmup/components/sprite-outline-animation.ts +++ b/packages/examples/src/demos/shmup/components/sprite-outline-animation.ts @@ -11,7 +11,7 @@ export function spriteOutlineAnimationFactory({ }): NonNullable { const delta = 0; const currentColorIndex = 0; - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + // oxlint-disable-next-line @typescript-eslint/no-non-null-assertion const color = colors[colorSequence[currentColorIndex]!]!; const frameRate = durationMs / 1_000 / colorSequence.length; diff --git a/packages/examples/src/demos/shmup/components/text-blink-animation.ts b/packages/examples/src/demos/shmup/components/text-blink-animation.ts index 46f47ef..06ed6bb 100644 --- a/packages/examples/src/demos/shmup/components/text-blink-animation.ts +++ b/packages/examples/src/demos/shmup/components/text-blink-animation.ts @@ -11,7 +11,7 @@ export function textBlinkAnimationFactory({ }): NonNullable { const delta = 0; const currentColorIndex = 0; - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + // oxlint-disable-next-line @typescript-eslint/no-non-null-assertion const color = colors[colorSequence[currentColorIndex]!]!; const frameRate = durationMs / 1_000 / colorSequence.length; diff --git a/packages/examples/src/demos/shmup/content.ts b/packages/examples/src/demos/shmup/content.ts index 05b31c4..2d2bb8d 100644 --- a/packages/examples/src/demos/shmup/content.ts +++ b/packages/examples/src/demos/shmup/content.ts @@ -17,7 +17,7 @@ import { shockwaveSystemFactory } from "./systems/shockwave-system.ts"; export type LoadedContent = Awaited>; type Explosion = HTMLCanvasElement | ImageBitmap | OffscreenCanvas; -// eslint-disable-next-line @typescript-eslint/no-extraneous-class +// oxlint-disable-next-line @typescript-eslint/no-extraneous-class export class Content { public static async load({ explosionsSheetImageUrl, @@ -548,7 +548,7 @@ export class Content { for (let offset = 0; offset < byteCharacters.length; offset += 1024) { const slice = byteCharacters.slice(offset, offset + 1024); - const byteNumbers = new Array(slice.length); + const byteNumbers = Array.from({ length: slice.length }); for (let i = 0; i < slice.length; i++) { byteNumbers[i] = slice.charCodeAt(i); } @@ -765,7 +765,7 @@ export class Content { for (let offset = 0; offset < byteCharacters.length; offset += 1024) { const slice = byteCharacters.slice(offset, offset + 1024); - const byteNumbers = new Array(slice.length); + const byteNumbers = Array.from({ length: slice.length }); for (let i = 0; i < slice.length; i++) { byteNumbers[i] = slice.charCodeAt(i); } @@ -831,7 +831,7 @@ export class Content { for (let offset = 0; offset < byteCharacters.length; offset += 1024) { const slice = byteCharacters.slice(offset, offset + 1024); - const byteNumbers = new Array(slice.length); + const byteNumbers = Array.from({ length: slice.length }); for (let i = 0; i < slice.length; i++) { byteNumbers[i] = slice.charCodeAt(i); } diff --git a/packages/examples/src/demos/shmup/enemy/switch-enemy-to-attach-mode.ts b/packages/examples/src/demos/shmup/enemy/switch-enemy-to-attach-mode.ts index ff8027d..36102a5 100644 --- a/packages/examples/src/demos/shmup/enemy/switch-enemy-to-attach-mode.ts +++ b/packages/examples/src/demos/shmup/enemy/switch-enemy-to-attach-mode.ts @@ -101,8 +101,10 @@ export function switchEnemyToAttackMode({ enemy.enemyType === EnemyType.RedFlameGuy || enemy.enemyType === EnemyType.YellowShip ) { - world.addEntityComponents(enemy, "tweens", [ - ...(enemy.tweens ?? []).concat( + world.addEntityComponents( + enemy, + "tweens", + (enemy.tweens ?? []).concat( tweenFactory("transform.position.x", { duration: 80, destroyAfter: 2000, @@ -114,7 +116,7 @@ export function switchEnemyToAttackMode({ maxIterations: Infinity, }), ), - ]); + ); } timer.add(new TimeSpan(2000), () => { @@ -145,9 +147,11 @@ export function switchEnemyToAttackMode({ enemy.enemyType === EnemyType.GreenAlien || enemy.enemyType === EnemyType.RedFlameGuy ) { - world.addEntityComponents(enemy, "tweens", [ - ...(enemy.tweens ?? []).concat(tweens), - ]); + world.addEntityComponents( + enemy, + "tweens", + (enemy.tweens ?? []).concat(tweens), + ); } world.addEntityComponents(enemy, "direction", direction); diff --git a/packages/examples/src/demos/shmup/index.html b/packages/examples/src/demos/shmup/index.html index 8267973..2535064 100644 --- a/packages/examples/src/demos/shmup/index.html +++ b/packages/examples/src/demos/shmup/index.html @@ -1,49 +1,49 @@ - + - - - - - - Demos - Shmup (Cherry Bomb) + + + + + + Demos - Shmup (Cherry Bomb) - + - + - - - -
-
- - - - - - -
+ + + +
+
+ + + + + + +
-
- -
-
+
+ +
+
- - - + + + diff --git a/packages/examples/src/demos/shmup/scene.ts b/packages/examples/src/demos/shmup/scene.ts index 87de7e5..fe4150a 100644 --- a/packages/examples/src/demos/shmup/scene.ts +++ b/packages/examples/src/demos/shmup/scene.ts @@ -66,7 +66,7 @@ export class Scene { this.textCache = props.textCache; } - // eslint-disable-next-line @typescript-eslint/no-empty-function + // oxlint-disable-next-line @typescript-eslint/no-empty-function protected initialize() {} protected clearSystems() { diff --git a/packages/examples/src/demos/shmup/systems/destroy-boss-event-system.ts b/packages/examples/src/demos/shmup/systems/destroy-boss-event-system.ts index 74cb75e..9dcdfa8 100644 --- a/packages/examples/src/demos/shmup/systems/destroy-boss-event-system.ts +++ b/packages/examples/src/demos/shmup/systems/destroy-boss-event-system.ts @@ -78,8 +78,10 @@ export function destroyBossEventSystemFactory({ world.removeEntityComponents(boss, "boxCollider"); // Shake the boss - world.addEntityComponents(boss, "tweens", [ - ...(boss.tweens ?? []).concat( + world.addEntityComponents( + boss, + "tweens", + (boss.tweens ?? []).concat( tweenFactory("transform.position.x", { duration: 80, easing: Easing.InSine, @@ -90,7 +92,7 @@ export function destroyBossEventSystemFactory({ maxIterations: Infinity, }), ), - ]); + ); world.addEntityComponents(boss, "tagDisabled", true); diff --git a/packages/examples/src/demos/shmup/systems/sprite-animation-system.ts b/packages/examples/src/demos/shmup/systems/sprite-animation-system.ts index 60ecc3c..855ecb1 100644 --- a/packages/examples/src/demos/shmup/systems/sprite-animation-system.ts +++ b/packages/examples/src/demos/shmup/systems/sprite-animation-system.ts @@ -28,10 +28,10 @@ export function spriteAnimationSystemFactory({ spriteAnimation.frameSequence.length; const frameIndex = - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + // oxlint-disable-next-line @typescript-eslint/no-non-null-assertion spriteAnimation.frameSequence[spriteAnimation.currentFrame]!; - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + // oxlint-disable-next-line @typescript-eslint/no-non-null-assertion const frame = spriteAnimation.frames[frameIndex]!; sprite.frame = frame; diff --git a/packages/examples/src/demos/shmup/systems/sprite-outline-animation-system.ts b/packages/examples/src/demos/shmup/systems/sprite-outline-animation-system.ts index 0e506ae..491b69a 100644 --- a/packages/examples/src/demos/shmup/systems/sprite-outline-animation-system.ts +++ b/packages/examples/src/demos/shmup/systems/sprite-outline-animation-system.ts @@ -22,9 +22,9 @@ export function spriteOutlineAnimationSystemFactory({ } spriteOutlineAnimation.color = - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + // oxlint-disable-next-line @typescript-eslint/no-non-null-assertion spriteOutlineAnimation.colors[ - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + // oxlint-disable-next-line @typescript-eslint/no-non-null-assertion spriteOutlineAnimation.colorSequence[ spriteOutlineAnimation.currentColorIndex ]! diff --git a/packages/examples/src/demos/shmup/systems/sprite-outline-rendering-system.ts b/packages/examples/src/demos/shmup/systems/sprite-outline-rendering-system.ts index 97ed005..6568d8e 100644 --- a/packages/examples/src/demos/shmup/systems/sprite-outline-rendering-system.ts +++ b/packages/examples/src/demos/shmup/systems/sprite-outline-rendering-system.ts @@ -86,7 +86,7 @@ export function spriteOutlineRenderingSystemFactory({ // const r = pixels[i]; // const g = pixels[i + 1]; // const b = pixels[i + 2]; - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + // oxlint-disable-next-line @typescript-eslint/no-non-null-assertion const a = pixels[i + 3]!; // Check if the current pixel is non-transparent diff --git a/packages/examples/src/demos/shmup/systems/text-blink-animation-system.ts b/packages/examples/src/demos/shmup/systems/text-blink-animation-system.ts index a8ec84c..989fa08 100644 --- a/packages/examples/src/demos/shmup/systems/text-blink-animation-system.ts +++ b/packages/examples/src/demos/shmup/systems/text-blink-animation-system.ts @@ -25,10 +25,10 @@ export function textBlinkAnimationSystemFactory({ } const colorSequence = - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + // oxlint-disable-next-line @typescript-eslint/no-non-null-assertion textBlinkAnimation.colorSequence[textBlinkAnimation.currentColorIndex]!; - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + // oxlint-disable-next-line @typescript-eslint/no-non-null-assertion textBlinkAnimation.color = textBlinkAnimation.colors[colorSequence]!; const textBuffer = textCache.get(entity); diff --git a/packages/examples/src/demos/sprite-animation/index.html b/packages/examples/src/demos/sprite-animation/index.html index 0fb2936..7ca88d5 100644 --- a/packages/examples/src/demos/sprite-animation/index.html +++ b/packages/examples/src/demos/sprite-animation/index.html @@ -1,41 +1,41 @@ - + - - - - - Demos - Sprite Animation + + + + + Demos - Sprite Animation - - + + - - - -
-
- - -
+ + + +
+
+ + +
-
- -
-
+
+ +
+
- - - + + + diff --git a/packages/examples/src/demos/sprite-tweening/index.html b/packages/examples/src/demos/sprite-tweening/index.html index 090c726..c2ff069 100644 --- a/packages/examples/src/demos/sprite-tweening/index.html +++ b/packages/examples/src/demos/sprite-tweening/index.html @@ -1,41 +1,41 @@ - + - - - - - Demos - Sprite Tweening + + + + + Demos - Sprite Tweening - - + + - - - -
-
- - -
+ + + +
+
+ + +
-
- -
-
+
+ +
+
- - - + + + diff --git a/packages/examples/src/demos/sprite-tweening/main.ts b/packages/examples/src/demos/sprite-tweening/main.ts index b34c640..83e640e 100644 --- a/packages/examples/src/demos/sprite-tweening/main.ts +++ b/packages/examples/src/demos/sprite-tweening/main.ts @@ -67,7 +67,7 @@ world.createEntity({ tweenFactory("transform.rotation", { duration: 1000, easing: Easing.Linear, - from: (0 * Math.PI) / 180, + from: 0, to: (360 * Math.PI) / 180, yoyo: true, }), diff --git a/packages/examples/src/lib/canvas.ts b/packages/examples/src/lib/canvas.ts index ea69ddf..44aebec 100644 --- a/packages/examples/src/lib/canvas.ts +++ b/packages/examples/src/lib/canvas.ts @@ -112,13 +112,13 @@ export function pal( // Loop through each pixel and swap its color based on the palette for (let i = 0; i < pixels.length; i += 4) { - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + // oxlint-disable-next-line @typescript-eslint/no-non-null-assertion const r = pixels[i]!; - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + // oxlint-disable-next-line @typescript-eslint/no-non-null-assertion const g = pixels[i + 1]!; - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + // oxlint-disable-next-line @typescript-eslint/no-non-null-assertion const b = pixels[i + 2]!; - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + // oxlint-disable-next-line @typescript-eslint/no-non-null-assertion const a = pixels[i + 3]!; if (a === 0) { diff --git a/packages/examples/src/lib/event-emitter.ts b/packages/examples/src/lib/event-emitter.ts index 7614433..be42238 100644 --- a/packages/examples/src/lib/event-emitter.ts +++ b/packages/examples/src/lib/event-emitter.ts @@ -1,5 +1,6 @@ export class EventEmitter< - T extends Record any>, + // oxlint-disable-next-line @typescript-eslint/no-explicit-any + T extends Record void>, > extends Map { public on(event: K, listener: T[K]) { if (!this.has(event)) { diff --git a/packages/examples/src/lib/pixel-text/renderer.ts b/packages/examples/src/lib/pixel-text/renderer.ts index eb68d72..d8755be 100644 --- a/packages/examples/src/lib/pixel-text/renderer.ts +++ b/packages/examples/src/lib/pixel-text/renderer.ts @@ -47,7 +47,8 @@ export class Renderer { constructor(options: IRendererOptions) { this.options = { - ...{ color: "white", colorSymbols }, + color: "white", + colorSymbols, ...options, }; diff --git a/packages/examples/src/style.css b/packages/examples/src/style.css index e09c0ff..394ce71 100644 --- a/packages/examples/src/style.css +++ b/packages/examples/src/style.css @@ -1,41 +1,41 @@ :root { - font-family: Inter, Avenir, Helvetica, Arial, sans-serif; - font-size: 16px; - line-height: 24px; - font-weight: 400; + font-family: Inter, Avenir, Helvetica, Arial, sans-serif; + font-size: 16px; + line-height: 24px; + font-weight: 400; - color-scheme: light dark; - color: rgba(255, 255, 255, 0.87); - background-color: #1a1d21; + color-scheme: light dark; + color: rgba(255, 255, 255, 0.87); + background-color: #1a1d21; - font-synthesis: none; - text-rendering: optimizeLegibility; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - -webkit-text-size-adjust: 100%; + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + -webkit-text-size-adjust: 100%; } a { - font-weight: 500; - color: #646cff; - text-decoration: inherit; + font-weight: 500; + color: #646cff; + text-decoration: inherit; } a:hover { - color: #535bf2; + color: #535bf2; } body { - margin: 0; - padding: 0; - display: flex; - place-items: center; - min-width: 320px; - min-height: 100vh; + margin: 0; + padding: 0; + display: flex; + place-items: center; + min-width: 320px; + min-height: 100vh; } #app { - max-width: 1280px; - margin: 0 auto; - padding: 2rem; - text-align: center; + max-width: 1280px; + margin: 0 auto; + padding: 2rem; + text-align: center; } diff --git a/packages/examples/src/vite-env.d.ts b/packages/examples/src/vite-env.d.ts index 11f02fe..bc2d8a3 100644 --- a/packages/examples/src/vite-env.d.ts +++ b/packages/examples/src/vite-env.d.ts @@ -1 +1 @@ -/// +/// diff --git a/packages/examples/tsconfig.json b/packages/examples/tsconfig.json index 09d75af..39b9dbc 100644 --- a/packages/examples/tsconfig.json +++ b/packages/examples/tsconfig.json @@ -17,12 +17,11 @@ "noImplicitOverride": true, "noUncheckedIndexedAccess": true, "skipLibCheck": true, - "baseUrl": ".", "types": ["@types/wicg-file-system-access"], "allowImportingTsExtensions": true, "paths": { - "#/*": ["src/*"], - "#/assets/*": ["assets/*"] + "#/*": ["./src/*"], + "#/assets/*": ["./assets/*"] } }, "include": ["src", "basic"] diff --git a/packages/examples/vite.config.ts b/packages/examples/vite.config.ts index c791be5..d9bf2db 100644 --- a/packages/examples/vite.config.ts +++ b/packages/examples/vite.config.ts @@ -1,36 +1,36 @@ -import { resolve } from 'node:path'; -import fs from 'node:fs/promises'; -import { defineConfig } from 'vite'; +import { resolve } from "node:path"; +import fs from "node:fs/promises"; +import { defineConfig } from "vite-plus"; const demoInputs = await fs - .readdir(resolve(__dirname, './src/demos')) - .then((directories) => - Object.fromEntries( - directories.map((directory) => [ - directory, - `src/demos/${directory}/index.html`, - ]), - ), - ); + .readdir(resolve(__dirname, "./src/demos")) + .then((directories) => + Object.fromEntries( + directories.map((directory) => [ + directory, + `src/demos/${directory}/index.html`, + ]), + ), + ); export default defineConfig({ - build: { - rollupOptions: { - input: { - main: resolve(__dirname, 'index.html'), - ...demoInputs, - }, - }, - target: 'esnext', - }, - esbuild: { - minifyIdentifiers: false, - }, - resolve: { - // https://github.com/vitejs/vite/issues/88#issuecomment-784441588 - alias: { - '#/assets': resolve(__dirname, 'assets'), - '#': resolve(__dirname, 'src'), - }, - }, + build: { + rollupOptions: { + input: { + main: resolve(__dirname, "index.html"), + ...demoInputs, + }, + }, + target: "esnext", + }, + esbuild: { + minifyIdentifiers: false, + }, + resolve: { + // https://github.com/vitejs/vite/issues/88#issuecomment-784441588 + alias: { + "#/assets": resolve(__dirname, "assets"), + "#": resolve(__dirname, "src"), + }, + }, }); diff --git a/packages/game-benchmark/.oxfmtrc.json b/packages/game-benchmark/.oxfmtrc.json new file mode 100644 index 0000000..0c947e9 --- /dev/null +++ b/packages/game-benchmark/.oxfmtrc.json @@ -0,0 +1,8 @@ +{ + "semi": true, + "tabWidth": 2, + "trailingComma": "all", + "useTabs": true, + "printWidth": 80, + "sortPackageJson": false +} diff --git a/packages/game-benchmark/.oxlintrc.json b/packages/game-benchmark/.oxlintrc.json new file mode 100644 index 0000000..41a1459 --- /dev/null +++ b/packages/game-benchmark/.oxlintrc.json @@ -0,0 +1,3 @@ +{ + "extends": ["../../.oxlintrc.json"] +} diff --git a/packages/game-benchmark/README.md b/packages/game-benchmark/README.md index 606c22d..663b19d 100644 --- a/packages/game-benchmark/README.md +++ b/packages/game-benchmark/README.md @@ -60,29 +60,30 @@ pnpm start -g mutation -d 5 -t 10 ## Options -| Option | Short | Default | Description | -|--------|-------|---------|-------------| -| `--game ` | `-g` | `boids` | Game/simulation to run | -| `--lib ` | `-l` | all | ECS library to test (can specify multiple) | -| `--duration ` | `-d` | `10` | Duration in seconds per library | -| `--count ` | `-c` | `500` | Entity count (500 boids, 50 ants, 1000 mutation) | -| `--trials ` | `-t` | `1` | Number of trials per library | -| `--headless` | | | Run without window | -| `--no-headless` | | | Run with window (each lib shown sequentially) | -| `--no-render` | | | Skip all rendering to isolate ECS performance | -| `--help` | | | Show help | +| Option | Short | Default | Description | +| ------------------- | ----- | ------- | ------------------------------------------------ | +| `--game ` | `-g` | `boids` | Game/simulation to run | +| `--lib ` | `-l` | all | ECS library to test (can specify multiple) | +| `--duration ` | `-d` | `10` | Duration in seconds per library | +| `--count ` | `-c` | `500` | Entity count (500 boids, 50 ants, 1000 mutation) | +| `--trials ` | `-t` | `1` | Number of trials per library | +| `--headless` | | | Run without window | +| `--no-headless` | | | Run with window (each lib shown sequentially) | +| `--no-render` | | | Skip all rendering to isolate ECS performance | +| `--help` | | | Show help | **Window defaults:** + - Single library → shows window - Multiple libraries → headless (use `--no-headless` to show windows) - `--no-render` and `mutation` game → always headless ## Supported Libraries -| Library | Description | -|---------|-------------| -| `objecs` | objecs ECS library (workspace) | -| `miniplex` | miniplex ECS library | +| Library | Description | +| ---------- | ------------------------------ | +| `objecs` | objecs ECS library (workspace) | +| `miniplex` | miniplex ECS library | ## Games diff --git a/packages/game-benchmark/package.json b/packages/game-benchmark/package.json index 6afbee5..c25e55d 100644 --- a/packages/game-benchmark/package.json +++ b/packages/game-benchmark/package.json @@ -7,6 +7,8 @@ "start": "node src/index.ts", "start:boids": "node src/index.ts --game boids", "start:ants": "node src/index.ts --game ants", + "lint": "vp lint", + "lint:fix": "vp lint --fix", "typecheck": "tsc --noEmit" }, "dependencies": { diff --git a/packages/game-benchmark/src/games/ant-simulation/miniplex/index.ts b/packages/game-benchmark/src/games/ant-simulation/miniplex/index.ts index b08fae4..bfd0538 100644 --- a/packages/game-benchmark/src/games/ant-simulation/miniplex/index.ts +++ b/packages/game-benchmark/src/games/ant-simulation/miniplex/index.ts @@ -162,12 +162,10 @@ export async function runAntSimulationGame( // Wall avoidance const wallMargin = 30; - if (pos.x < wallMargin) - desiredX += (wallMargin - pos.x) / wallMargin; + if (pos.x < wallMargin) desiredX += (wallMargin - pos.x) / wallMargin; if (pos.x > config.width - wallMargin) desiredX -= (pos.x - (config.width - wallMargin)) / wallMargin; - if (pos.y < wallMargin) - desiredY += (wallMargin - pos.y) / wallMargin; + if (pos.y < wallMargin) desiredY += (wallMargin - pos.y) / wallMargin; if (pos.y > config.height - wallMargin) desiredY -= (pos.y - (config.height - wallMargin)) / wallMargin; @@ -479,11 +477,11 @@ export async function runAntSimulationGame( nestDeliverySystem(); if (!skipRender) { - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + // oxlint-disable-next-line @typescript-eslint/no-non-null-assertion renderSystem!(); if (window && !window.destroyed) { - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + // oxlint-disable-next-line @typescript-eslint/no-non-null-assertion const buffer = canvas!.toBuffer("raw"); window.render( config.width, @@ -543,7 +541,12 @@ function samplePheromones( for (const angle of angles) { const sensorX = x + Math.cos(angle) * sensorDist; const sensorY = y + Math.sin(angle) * sensorDist; - const strength = pheromoneMap.readArea(sensorX, sensorY, sensorRadius, type); + const strength = pheromoneMap.readArea( + sensorX, + sensorY, + sensorRadius, + type, + ); strengths.push(strength); } diff --git a/packages/game-benchmark/src/games/ant-simulation/objecs/index.ts b/packages/game-benchmark/src/games/ant-simulation/objecs/index.ts index 275266e..bb1b017 100644 --- a/packages/game-benchmark/src/games/ant-simulation/objecs/index.ts +++ b/packages/game-benchmark/src/games/ant-simulation/objecs/index.ts @@ -2,7 +2,11 @@ import Canvas from "canvas"; import sdl from "@kmamal/sdl"; import { World } from "objecs"; import { Profiler } from "../../../profiler.ts"; -import { DEFAULT_CONFIG, type Entity, type AntSimulationConfig } from "../types.ts"; +import { + DEFAULT_CONFIG, + type Entity, + type AntSimulationConfig, +} from "../types.ts"; import { PheromoneMap } from "../pheromone-map.ts"; import { createSteeringSystem } from "../systems/steering-system.ts"; import { createMovementSystem } from "../systems/movement-system.ts"; @@ -102,7 +106,11 @@ export async function runAntSimulationGame( { x: config.width * 0.8, y: config.height * 0.8 }, ]; - for (let c = 0; c < Math.min(config.foodClusters, clusterPositions.length); c++) { + for ( + let c = 0; + c < Math.min(config.foodClusters, clusterPositions.length); + c++ + ) { const cluster = clusterPositions[c]; const clusterRadius = 40; @@ -126,7 +134,13 @@ export async function runAntSimulationGame( // Create systems const steeringSystem = profiler.profileSystem( "steering", - createSteeringSystem(antArchetype, foodArchetype, nestPos, pheromoneMap, config), + createSteeringSystem( + antArchetype, + foodArchetype, + nestPos, + pheromoneMap, + config, + ), ); const movementSystem = profiler.profileSystem( @@ -203,11 +217,11 @@ export async function runAntSimulationGame( foodCollected = nestDeliverySystem(); if (!skipRender) { - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + // oxlint-disable-next-line @typescript-eslint/no-non-null-assertion renderSystem!(foodCollected); if (window && !window.destroyed) { - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + // oxlint-disable-next-line @typescript-eslint/no-non-null-assertion const buffer = canvas!.toBuffer("raw"); window.render( config.width, diff --git a/packages/game-benchmark/src/games/ant-simulation/systems/render-system.ts b/packages/game-benchmark/src/games/ant-simulation/systems/render-system.ts index 975445b..d6b80cf 100644 --- a/packages/game-benchmark/src/games/ant-simulation/systems/render-system.ts +++ b/packages/game-benchmark/src/games/ant-simulation/systems/render-system.ts @@ -34,7 +34,13 @@ export function createRenderSystem( for (const nest of nests.entities) { ctx.fillStyle = config.nestColor; ctx.beginPath(); - ctx.arc(nest.position.x, nest.position.y, nest.nest.radius, 0, Math.PI * 2); + ctx.arc( + nest.position.x, + nest.position.y, + nest.nest.radius, + 0, + Math.PI * 2, + ); ctx.fill(); // Draw food count diff --git a/packages/game-benchmark/src/games/ant-simulation/systems/steering-system.ts b/packages/game-benchmark/src/games/ant-simulation/systems/steering-system.ts index 69ff749..15ef2b1 100644 --- a/packages/game-benchmark/src/games/ant-simulation/systems/steering-system.ts +++ b/packages/game-benchmark/src/games/ant-simulation/systems/steering-system.ts @@ -110,7 +110,8 @@ export function createSteeringSystem( } // Add random wander - const wanderAngle = (Math.random() - 0.5) * 2 * Math.PI * config.wanderStrength; + const wanderAngle = + (Math.random() - 0.5) * 2 * Math.PI * config.wanderStrength; const cos = Math.cos(wanderAngle); const sin = Math.sin(wanderAngle); const wanderedX = desiredX * cos - desiredY * sin; @@ -121,9 +122,11 @@ export function createSteeringSystem( // Wall avoidance - steer away from edges const wallMargin = 30; if (pos.x < wallMargin) desiredX += (wallMargin - pos.x) / wallMargin; - if (pos.x > config.width - wallMargin) desiredX -= (pos.x - (config.width - wallMargin)) / wallMargin; + if (pos.x > config.width - wallMargin) + desiredX -= (pos.x - (config.width - wallMargin)) / wallMargin; if (pos.y < wallMargin) desiredY += (wallMargin - pos.y) / wallMargin; - if (pos.y > config.height - wallMargin) desiredY -= (pos.y - (config.height - wallMargin)) / wallMargin; + if (pos.y > config.height - wallMargin) + desiredY -= (pos.y - (config.height - wallMargin)) / wallMargin; // Normalize desired direction const desiredMag = Math.sqrt(desiredX * desiredX + desiredY * desiredY); @@ -173,7 +176,12 @@ function samplePheromones( for (const angle of angles) { const sensorX = x + Math.cos(angle) * sensorDist; const sensorY = y + Math.sin(angle) * sensorDist; - const strength = pheromoneMap.readArea(sensorX, sensorY, sensorRadius, type); + const strength = pheromoneMap.readArea( + sensorX, + sensorY, + sensorRadius, + type, + ); strengths.push(strength); } diff --git a/packages/game-benchmark/src/games/boids/miniplex/index.ts b/packages/game-benchmark/src/games/boids/miniplex/index.ts index 1e64da2..dafd8ae 100644 --- a/packages/game-benchmark/src/games/boids/miniplex/index.ts +++ b/packages/game-benchmark/src/games/boids/miniplex/index.ts @@ -31,7 +31,7 @@ export async function runBoidsGame(options: BoidsGameOptions = {}) { height: config.height, accelerated: true, vsync: false, - }) + }) : null; const canvas = skipRender @@ -376,14 +376,14 @@ export async function runBoidsGame(options: BoidsGameOptions = {}) { boundsSystem(); if (!skipRender) { - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + // oxlint-disable-next-line @typescript-eslint/no-non-null-assertion renderSystem!(); // Render explosion effect if (currentExplosion) { - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + // oxlint-disable-next-line @typescript-eslint/no-non-null-assertion ctx!.beginPath(); - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + // oxlint-disable-next-line @typescript-eslint/no-non-null-assertion ctx!.arc( currentExplosion.x, currentExplosion.y, @@ -391,17 +391,17 @@ export async function runBoidsGame(options: BoidsGameOptions = {}) { 0, Math.PI * 2, ); - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + // oxlint-disable-next-line @typescript-eslint/no-non-null-assertion ctx!.strokeStyle = "rgba(255, 100, 50, 0.5)"; - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + // oxlint-disable-next-line @typescript-eslint/no-non-null-assertion ctx!.lineWidth = 2; - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + // oxlint-disable-next-line @typescript-eslint/no-non-null-assertion ctx!.stroke(); // Inner glow - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + // oxlint-disable-next-line @typescript-eslint/no-non-null-assertion ctx!.beginPath(); - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + // oxlint-disable-next-line @typescript-eslint/no-non-null-assertion ctx!.arc( currentExplosion.x, currentExplosion.y, @@ -409,14 +409,14 @@ export async function runBoidsGame(options: BoidsGameOptions = {}) { 0, Math.PI * 2, ); - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + // oxlint-disable-next-line @typescript-eslint/no-non-null-assertion ctx!.fillStyle = "rgba(255, 200, 100, 0.3)"; - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + // oxlint-disable-next-line @typescript-eslint/no-non-null-assertion ctx!.fill(); } if (window && !window.destroyed) { - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + // oxlint-disable-next-line @typescript-eslint/no-non-null-assertion const buffer = canvas!.toBuffer("raw"); window.render( config.width, diff --git a/packages/game-benchmark/src/games/boids/objecs/index.ts b/packages/game-benchmark/src/games/boids/objecs/index.ts index d763535..a2a0aba 100644 --- a/packages/game-benchmark/src/games/boids/objecs/index.ts +++ b/packages/game-benchmark/src/games/boids/objecs/index.ts @@ -33,7 +33,7 @@ export async function runBoidsGame(options: BoidsGameOptions = {}) { height: config.height, accelerated: true, vsync: false, - }) + }) : null; const canvas = skipRender @@ -149,23 +149,35 @@ export async function runBoidsGame(options: BoidsGameOptions = {}) { boundsSystem(); if (!skipRender) { - /* eslint-disable @typescript-eslint/no-non-null-assertion -- guaranteed non-null when !skipRender */ + /* oxlint-disable @typescript-eslint/no-non-null-assertion -- guaranteed non-null when !skipRender */ const renderCtx = ctx!; const renderCanvas = canvas!; renderSystem!(); - /* eslint-enable @typescript-eslint/no-non-null-assertion */ + /* oxlint-enable @typescript-eslint/no-non-null-assertion */ // Render explosion effect if (explosion) { renderCtx.beginPath(); - renderCtx.arc(explosion.x, explosion.y, explosion.radius, 0, Math.PI * 2); + renderCtx.arc( + explosion.x, + explosion.y, + explosion.radius, + 0, + Math.PI * 2, + ); renderCtx.strokeStyle = "rgba(255, 100, 50, 0.5)"; renderCtx.lineWidth = 2; renderCtx.stroke(); // Inner glow renderCtx.beginPath(); - renderCtx.arc(explosion.x, explosion.y, explosion.radius * 0.3, 0, Math.PI * 2); + renderCtx.arc( + explosion.x, + explosion.y, + explosion.radius * 0.3, + 0, + Math.PI * 2, + ); renderCtx.fillStyle = "rgba(255, 200, 100, 0.3)"; renderCtx.fill(); } diff --git a/packages/game-benchmark/src/games/boids/systems/explosion-system.ts b/packages/game-benchmark/src/games/boids/systems/explosion-system.ts index fc30e61..e42e47c 100644 --- a/packages/game-benchmark/src/games/boids/systems/explosion-system.ts +++ b/packages/game-benchmark/src/games/boids/systems/explosion-system.ts @@ -63,7 +63,9 @@ export function createExplosionSystem( forceMagnitude = config.explosionForce * 0.5 * - (1 - (dist - explosion.radius) / (avoidanceRadius - explosion.radius)); + (1 - + (dist - explosion.radius) / + (avoidanceRadius - explosion.radius)); } // Normalize direction and apply force to acceleration diff --git a/packages/game-benchmark/src/games/mutation/miniplex/index.ts b/packages/game-benchmark/src/games/mutation/miniplex/index.ts index 8d95c65..ae8eabb 100644 --- a/packages/game-benchmark/src/games/mutation/miniplex/index.ts +++ b/packages/game-benchmark/src/games/mutation/miniplex/index.ts @@ -1,6 +1,11 @@ import { World } from "miniplex"; import { Profiler } from "../../../profiler.ts"; -import { DEFAULT_CONFIG, type Entity, type MutationConfig, type MutationGameOptions } from "../types.ts"; +import { + DEFAULT_CONFIG, + type Entity, + type MutationConfig, + type MutationGameOptions, +} from "../types.ts"; export async function runMutationGame(options: MutationGameOptions = {}) { const config: MutationConfig = { ...DEFAULT_CONFIG, ...options.config }; @@ -83,12 +88,7 @@ export async function runMutationGame(options: MutationGameOptions = {}) { const mutationCount = Math.floor(config.entityCount * config.mutationRate); // Optional component definitions for random mutation - const optionalComponents = [ - "shield", - "poisoned", - "stunned", - "buff", - ] as const; + const optionalComponents = ["shield", "poisoned", "stunned", "buff"] as const; type OptionalComponent = (typeof optionalComponents)[number]; @@ -126,8 +126,7 @@ export async function runMutationGame(options: MutationGameOptions = {}) { for (const query of queries) { for (const entity of query.entities) { // Touch entity to verify membership — read position.x - sum += (entity as Entity & { position: { x: number } }).position - .x; + sum += (entity as Entity & { position: { x: number } }).position.x; } } return sum; diff --git a/packages/game-benchmark/src/games/mutation/objecs/index.ts b/packages/game-benchmark/src/games/mutation/objecs/index.ts index 9ae543e..c4ee3c0 100644 --- a/packages/game-benchmark/src/games/mutation/objecs/index.ts +++ b/packages/game-benchmark/src/games/mutation/objecs/index.ts @@ -1,6 +1,11 @@ import { World } from "objecs"; import { Profiler } from "../../../profiler.ts"; -import { DEFAULT_CONFIG, type Entity, type MutationConfig, type MutationGameOptions } from "../types.ts"; +import { + DEFAULT_CONFIG, + type Entity, + type MutationConfig, + type MutationGameOptions, +} from "../types.ts"; export async function runMutationGame(options: MutationGameOptions = {}) { const config: MutationConfig = { ...DEFAULT_CONFIG, ...options.config }; @@ -21,9 +26,7 @@ export async function runMutationGame(options: MutationGameOptions = {}) { const shieldedNotPoisoned = world .archetype("health", "shield") .without("poisoned"); - const buffedNotStunned = world - .archetype("health", "buff") - .without("stunned"); + const buffedNotStunned = world.archetype("health", "buff").without("stunned"); const poisonedAndStunned = world.archetype("poisoned", "stunned"); const damageEntities = world.archetype("damage"); const fullyCombat = world.archetype("health", "damage", "shield"); @@ -86,7 +89,10 @@ export async function runMutationGame(options: MutationGameOptions = {}) { type OptionalComponent = (typeof optionalComponents)[number]; - const componentFactories: Record Entity[OptionalComponent]> = { + const componentFactories: Record< + OptionalComponent, + () => Entity[OptionalComponent] + > = { shield: () => ({ strength: 10 + Math.random() * 90 }), poisoned: () => ({ tickDamage: 1 + Math.random() * 5 }), stunned: () => ({ duration: 0.5 + Math.random() * 2 }), @@ -109,7 +115,7 @@ export async function runMutationGame(options: MutationGameOptions = {}) { world.addEntityComponents( entity, comp, - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + // oxlint-disable-next-line @typescript-eslint/no-non-null-assertion componentFactories[comp]()!, ); } diff --git a/packages/game-benchmark/src/index.ts b/packages/game-benchmark/src/index.ts index 7975e38..a6ee909 100644 --- a/packages/game-benchmark/src/index.ts +++ b/packages/game-benchmark/src/index.ts @@ -138,7 +138,9 @@ const availableLibraries = getAvailableLibraries(game); if (values.lib && values.lib.length > 0) { const invalid = values.lib.filter((l) => !availableLibraries.includes(l)); if (invalid.length > 0) { - console.error(`Unknown libraries for "${game}": ${invalid.join(", ")}. Valid: ${availableLibraries.join(", ")}`); + console.error( + `Unknown libraries for "${game}": ${invalid.join(", ")}. Valid: ${availableLibraries.join(", ")}`, + ); process.exit(1); } libraries = values.lib; @@ -204,9 +206,7 @@ interface BenchmarkResult { systemTimings: Map; } -async function runSingleTrial( - lib: string, -): Promise { +async function runSingleTrial(lib: string): Promise { switch (game) { case "boids": { const result = await runBoidsGame({ @@ -319,10 +319,7 @@ for (const lib of libraries) { } } - const systemTimings = new Map< - string, - { mean: number; stddev: number } - >(); + const systemTimings = new Map(); for (const name of allSystemNames) { const timingValues = trialResults .map((t) => t.systemTimings.get(name)) @@ -447,8 +444,7 @@ if (results.length > 1) { } } else { const systemHeader = - "System".padEnd(15) + - results.map((r) => r.library.padStart(12)).join(""); + "System".padEnd(15) + results.map((r) => r.library.padStart(12)).join(""); console.log(systemHeader); console.log("-".repeat(15 + results.length * 12)); diff --git a/packages/game-benchmark/src/profiler.ts b/packages/game-benchmark/src/profiler.ts index 2df4a6f..722f95e 100644 --- a/packages/game-benchmark/src/profiler.ts +++ b/packages/game-benchmark/src/profiler.ts @@ -89,8 +89,14 @@ export class Profiler { return { count: this.#frameTimes.length, avgMs: avg, - minMs: this.#frameTimes.reduce((m, t) => (t < m ? t : m), this.#frameTimes[0]), - maxMs: this.#frameTimes.reduce((m, t) => (t > m ? t : m), this.#frameTimes[0]), + minMs: this.#frameTimes.reduce( + (m, t) => (t < m ? t : m), + this.#frameTimes[0], + ), + maxMs: this.#frameTimes.reduce( + (m, t) => (t > m ? t : m), + this.#frameTimes[0], + ), avgFps: 1000 / avg, }; } diff --git a/packages/objecs/.oxfmtrc.json b/packages/objecs/.oxfmtrc.json new file mode 100644 index 0000000..0c947e9 --- /dev/null +++ b/packages/objecs/.oxfmtrc.json @@ -0,0 +1,8 @@ +{ + "semi": true, + "tabWidth": 2, + "trailingComma": "all", + "useTabs": true, + "printWidth": 80, + "sortPackageJson": false +} diff --git a/packages/objecs/.oxlintrc.json b/packages/objecs/.oxlintrc.json new file mode 100644 index 0000000..41a1459 --- /dev/null +++ b/packages/objecs/.oxlintrc.json @@ -0,0 +1,3 @@ +{ + "extends": ["../../.oxlintrc.json"] +} diff --git a/packages/objecs/.prettierrc b/packages/objecs/.prettierrc deleted file mode 100644 index a6fe5ed..0000000 --- a/packages/objecs/.prettierrc +++ /dev/null @@ -1,6 +0,0 @@ -{ - "semi": true, - "tabWidth": 2, - "trailingComma": "all", - "useTabs": true -} diff --git a/packages/objecs/README.md b/packages/objecs/README.md index 80e777e..91d936a 100644 --- a/packages/objecs/README.md +++ b/packages/objecs/README.md @@ -33,11 +33,11 @@ import { World } from "objecs"; // 1. Define your entity type with all possible components type Entity = { - position?: { x: number; y: number }; - velocity?: { x: number; y: number }; - health?: number; - player?: true; - enemy?: true; + position?: { x: number; y: number }; + velocity?: { x: number; y: number }; + health?: number; + player?: true; + enemy?: true; }; // 2. Create a world @@ -45,17 +45,17 @@ const world = new World(); // 3. Create entities with components const player = world.createEntity({ - position: { x: 100, y: 100 }, - velocity: { x: 0, y: 0 }, - health: 100, - player: true, + position: { x: 100, y: 100 }, + velocity: { x: 0, y: 0 }, + health: 100, + player: true, }); world.createEntity({ - position: { x: 200, y: 50 }, - velocity: { x: -50, y: 0 }, - health: 30, - enemy: true, + position: { x: 200, y: 50 }, + velocity: { x: -50, y: 0 }, + health: 30, + enemy: true, }); // 4. Create archetypes (queries) to filter entities @@ -64,11 +64,11 @@ const enemies = world.archetype("position", "health", "enemy"); // 5. Use archetypes in your systems function movementSystem(dt: number) { - for (const entity of movables.entities) { - // TypeScript knows entity has position and velocity - entity.position.x += entity.velocity.x * dt; - entity.position.y += entity.velocity.y * dt; - } + for (const entity of movables.entities) { + // TypeScript knows entity has position and velocity + entity.position.x += entity.velocity.x * dt; + entity.position.y += entity.velocity.y * dt; + } } ``` @@ -88,8 +88,8 @@ Creates a new entity, optionally with initial components. ```typescript const entity = world.createEntity({ - position: { x: 0, y: 0 }, - sprite: { texture: "player.png" }, + position: { x: 0, y: 0 }, + sprite: { texture: "player.png" }, }); ``` @@ -109,7 +109,7 @@ Creates an archetype query that matches entities with all specified components. const renderables = world.archetype("position", "sprite"); for (const entity of renderables.entities) { - // entity.position and entity.sprite are guaranteed to exist + // entity.position and entity.sprite are guaranteed to exist } ``` @@ -144,8 +144,8 @@ Creates a new archetype that excludes entities with certain components. ```typescript // Get all enemies that are NOT invulnerable const vulnerableEnemies = world - .archetype("position", "health", "enemy") - .without("invulnerable"); + .archetype("position", "health", "enemy") + .without("invulnerable"); ``` ## Patterns @@ -156,22 +156,22 @@ objECS doesn't prescribe how to structure systems. A simple pattern is factory f ```typescript function createMovementSystem(world: World) { - const movables = world.archetype("position", "velocity"); - - return function movementSystem(dt: number) { - for (const entity of movables.entities) { - entity.position.x += entity.velocity.x * dt; - entity.position.y += entity.velocity.y * dt; - } - }; + const movables = world.archetype("position", "velocity"); + + return function movementSystem(dt: number) { + for (const entity of movables.entities) { + entity.position.x += entity.velocity.x * dt; + entity.position.y += entity.velocity.y * dt; + } + }; } // Usage const movementSystem = createMovementSystem(world); function gameLoop(dt: number) { - movementSystem(dt); - // ... other systems + movementSystem(dt); + // ... other systems } ``` @@ -181,9 +181,9 @@ Use `true` as a component value for tag components: ```typescript type Entity = { - player?: true; - enemy?: true; - invulnerable?: true; + player?: true; + enemy?: true; + invulnerable?: true; }; world.createEntity({ player: true, invulnerable: true }); diff --git a/packages/objecs/package.json b/packages/objecs/package.json index d903d5a..cc9cc29 100644 --- a/packages/objecs/package.json +++ b/packages/objecs/package.json @@ -22,16 +22,16 @@ }, "scripts": { "postdocs": "cp jekyll.config.yml docs/config.yml && touch docs/.nojekyll", - "lint": "eslint \"src/**/*.{js,jsx,ts,tsx}\"", - "lint:fix": "eslint --fix \"src/**/*.{js,jsx,ts,tsx}\"", + "lint": "vp lint", + "lint:fix": "vp lint --fix", "prebuild": "pnpm run clean", "build": "pnpm run lint && tsup", "build:watch": "nodemon --exec 'pnpm run build || exit 1'", "prepublishOnly": "nr build", "release": "bumpp --commit --push --tag && pnpm publish", - "test": "vitest", + "test": "vp test", "pretest:coverage": "pnpm run clean", - "test:coverage": "vitest run --coverage", + "test:coverage": "vp test run --coverage", "clean": "rimraf dist", "check-exports": "attw --pack ." }, @@ -44,28 +44,19 @@ "typescript" ], "devDependencies": { - "@antfu/ni": "28.1.0", + "@antfu/ni": "29.0.0", "@arethetypeswrong/cli": "0.18.2", - "@eslint/eslintrc": "3.3.5", - "@eslint/js": "9.39.2", "@types/benchmark": "^2.1.5", - "@types/eslint": "^9.6.1", "@types/node": "^24.12.0", - "@typescript-eslint/eslint-plugin": "^8.57.0", - "@typescript-eslint/parser": "^8.57.0", "benchmark": "^2.1.4", "bumpp": "10.4.1", - "eslint": "^9.39.4", - "eslint-config-prettier": "^10.1.8", - "eslint-plugin-depend": "1.5.0", - "eslint-plugin-prettier": "5.5.5", "globals": "17.4.0", "nodemon": "^3.1.14", - "prettier": "^3.8.1", "rimraf": "^6.1.3", "tsup": "^8.5.1", "typescript": "^5.9.3", - "vite": "7.3.1", - "vitest": "4.1.0" + "vite": "npm:@voidzero-dev/vite-plus-core@latest", + "vite-plus": "catalog:", + "vitest": "npm:@voidzero-dev/vite-plus-test@latest" } } diff --git a/packages/objecs/src/archetype.test.ts b/packages/objecs/src/archetype.test.ts index 5c99fde..b455e1e 100644 --- a/packages/objecs/src/archetype.test.ts +++ b/packages/objecs/src/archetype.test.ts @@ -1,4 +1,4 @@ -import { describe, expect, expectTypeOf, it } from "vitest"; +import { describe, expect, expectTypeOf, it } from "vite-plus/test"; import { EntityCollection, ReadonlyEntityCollection, diff --git a/packages/objecs/src/archetype.ts b/packages/objecs/src/archetype.ts index 83ffc7c..56ac89b 100644 --- a/packages/objecs/src/archetype.ts +++ b/packages/objecs/src/archetype.ts @@ -1,4 +1,10 @@ -import { type EntityBase, EntityCollection, type ReadonlyEntityCollection, type SafeEntity, World } from "./world.js"; +import { + type EntityBase, + EntityCollection, + type ReadonlyEntityCollection, + type SafeEntity, + World, +} from "./world.js"; /** * An archetype is a collection of entities that share the same components. @@ -32,7 +38,7 @@ export class Archetype< this.#components = components; this.#excluding = without; - // eslint-disable-next-line @typescript-eslint/no-unsafe-argument + // oxlint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-explicit-any world.registerArchetype(this as any); } @@ -73,7 +79,7 @@ export class Archetype< } if (this.matches(entity)) { - // eslint-disable-next-line @typescript-eslint/no-unsafe-argument + // oxlint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-explicit-any this.#entities.add(entity as any); } @@ -81,7 +87,7 @@ export class Archetype< } public removeEntity(entity: Entity): this { - // eslint-disable-next-line @typescript-eslint/no-unsafe-argument + // oxlint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-explicit-any this.#entities.remove(entity as any); return this; @@ -138,11 +144,11 @@ export class Archetype< Array> >({ entities, - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment + // oxlint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-explicit-any world: this.#world as any, - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment + // oxlint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-explicit-any components: this.#components as any, - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment + // oxlint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-explicit-any without: components as any, }); diff --git a/packages/objecs/src/world.test.ts b/packages/objecs/src/world.test.ts index bf02f4b..0c51768 100644 --- a/packages/objecs/src/world.test.ts +++ b/packages/objecs/src/world.test.ts @@ -1,4 +1,4 @@ -import { describe, expect, expectTypeOf, it } from "vitest"; +import { describe, expect, expectTypeOf, it } from "vite-plus/test"; import { type EntityBase, ReadonlyEntityCollection, World } from "./world.js"; type Entity = { diff --git a/packages/objecs/src/world.ts b/packages/objecs/src/world.ts index 641d2f9..f899cf8 100644 --- a/packages/objecs/src/world.ts +++ b/packages/objecs/src/world.ts @@ -148,11 +148,7 @@ export class EntityCollection implements ReadonlyEntityCollection { } forEach( - callbackfn: ( - value: T, - value2: T, - set: ReadonlyEntityCollection, - ) => void, + callbackfn: (value: T, value2: T, set: ReadonlyEntityCollection) => void, thisArg?: unknown, ): void { for (const entity of this.#entities) { @@ -167,7 +163,10 @@ export class EntityCollection implements ReadonlyEntityCollection { export class World { #archetypes = new Set>>(); #entities = new EntityCollection(); - #componentIndex = new Map>>>(); + #componentIndex = new Map< + keyof Entity, + Set>> + >(); public get archetypes(): Set>> { return this.#archetypes; @@ -177,8 +176,10 @@ export class World { * Register an archetype and index it by its components for fast lookup. * @remarks Used internally by Archetype constructor. */ - public registerArchetype(archetype: Archetype>): void { - // eslint-disable-next-line @typescript-eslint/no-unsafe-argument + public registerArchetype( + archetype: Archetype>, + ): void { + // oxlint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-explicit-any this.#archetypes.add(archetype as any); for (const component of archetype.components) { @@ -224,7 +225,6 @@ export class World { // perf: manual loop avoids .every() callback overhead let matchesArchetype = true; for (const component of components) { - if (entity[component as string] === undefined) { matchesArchetype = false; break; @@ -313,7 +313,7 @@ export class World { // Single component: addEntityComponents(entity, "key", value) if (typeof componentOrComponents === "string" && value !== undefined) { - // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // oxlint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore entity[componentOrComponents] = value; changedKeys.push(componentOrComponents as keyof Entity); @@ -321,7 +321,7 @@ export class World { // Multiple components: addEntityComponents(entity, { key: value, ... }) const components = componentOrComponents as Record; for (const key in components) { - // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access + // oxlint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-explicit-any (entity as any)[key] = components[key]; changedKeys.push(key as keyof Entity); } @@ -362,7 +362,7 @@ export class World { ): void { if (this.#entities.has(entity)) { for (const component of components) { - // eslint-disable-next-line @typescript-eslint/no-dynamic-delete + // oxlint-disable-next-line @typescript-eslint/no-dynamic-delete delete entity[component]; } @@ -378,5 +378,4 @@ export class World { } } } - } diff --git a/packages/objecs/vite.config.ts b/packages/objecs/vite.config.ts index a0be5ea..4606e1b 100644 --- a/packages/objecs/vite.config.ts +++ b/packages/objecs/vite.config.ts @@ -1,6 +1,7 @@ import path from "node:path"; -import { defineConfig } from "vite"; +import { defineConfig } from "vite-plus"; +// oxlint-disable-next-line typescript/no-unsafe-assignment const config = defineConfig({ resolve: { // https://github.com/vitejs/vite/issues/88#issuecomment-784441588 diff --git a/packages/perf-proofs/.oxfmtrc.json b/packages/perf-proofs/.oxfmtrc.json new file mode 100644 index 0000000..0c947e9 --- /dev/null +++ b/packages/perf-proofs/.oxfmtrc.json @@ -0,0 +1,8 @@ +{ + "semi": true, + "tabWidth": 2, + "trailingComma": "all", + "useTabs": true, + "printWidth": 80, + "sortPackageJson": false +} diff --git a/packages/perf-proofs/.oxlintrc.json b/packages/perf-proofs/.oxlintrc.json new file mode 100644 index 0000000..41a1459 --- /dev/null +++ b/packages/perf-proofs/.oxlintrc.json @@ -0,0 +1,3 @@ +{ + "extends": ["../../.oxlintrc.json"] +} diff --git a/packages/perf-proofs/package.json b/packages/perf-proofs/package.json index 2a01360..480db0c 100644 --- a/packages/perf-proofs/package.json +++ b/packages/perf-proofs/package.json @@ -11,6 +11,8 @@ "start:set": "for f in src/set/*.ts; do echo \"\\n--- $f ---\"; node --expose-gc \"$f\"; done", "start:iteration": "for f in src/iteration/*.ts; do echo \"\\n--- $f ---\"; node --expose-gc \"$f\"; done", "start:function": "for f in src/function/*.ts; do echo \"\\n--- $f ---\"; node --expose-gc \"$f\"; done", + "lint": "vp lint", + "lint:fix": "vp lint --fix", "typecheck": "tsc --noEmit" }, "dependencies": { diff --git a/packages/perf-proofs/src/array/every-vs-for-loop.ts b/packages/perf-proofs/src/array/every-vs-for-loop.ts index efe4ad5..180e0a9 100644 --- a/packages/perf-proofs/src/array/every-vs-for-loop.ts +++ b/packages/perf-proofs/src/array/every-vs-for-loop.ts @@ -29,6 +29,7 @@ for (const count of [2, 3, 5]) { bench(`for (indexed) — ${count} components`, () => { let result = true; + // oxlint-disable-next-line @typescript-eslint/prefer-for-of -- benchmarking indexed loop vs .every() for (let i = 0; i < components.length; i++) { if (entity[components[i]] === undefined) { result = false; diff --git a/packages/perf-proofs/src/array/for-of-vs-for-index-vs-foreach.ts b/packages/perf-proofs/src/array/for-of-vs-for-index-vs-foreach.ts index fc6fd63..e818a29 100644 --- a/packages/perf-proofs/src/array/for-of-vs-for-index-vs-foreach.ts +++ b/packages/perf-proofs/src/array/for-of-vs-for-index-vs-foreach.ts @@ -9,7 +9,10 @@ import { run, bench, summary } from "mitata"; // --- Setup --- -type Entity = { position: { x: number; y: number }; velocity: { x: number; y: number } }; +type Entity = { + position: { x: number; y: number }; + velocity: { x: number; y: number }; +}; function makeEntities(n: number): Entity[] { return Array.from({ length: n }, (_, i) => ({ @@ -32,6 +35,7 @@ for (const size of [100, 1000, 10_000]) { }); bench(`for (indexed) — ${size} entities`, () => { + // oxlint-disable-next-line @typescript-eslint/prefer-for-of -- benchmarking indexed vs for-of for (let i = 0; i < entities.length; i++) { const e = entities[i]; e.position.x += e.velocity.x; diff --git a/packages/perf-proofs/src/array/fused-every-some.ts b/packages/perf-proofs/src/array/fused-every-some.ts index 1e90e72..e243f6d 100644 --- a/packages/perf-proofs/src/array/fused-every-some.ts +++ b/packages/perf-proofs/src/array/fused-every-some.ts @@ -49,9 +49,7 @@ function matchesEverySome( ): boolean { const matchesArchetype = include.every((c) => e[c] !== undefined); const matchesExcluding = - exclude.length > 0 - ? exclude.some((c) => e[c] !== undefined) - : false; + exclude.length > 0 ? exclude.some((c) => e[c] !== undefined) : false; return matchesArchetype && !matchesExcluding; } @@ -61,9 +59,11 @@ function matchesFused( include: string[], exclude: string[], ): boolean { + // oxlint-disable-next-line @typescript-eslint/prefer-for-of -- benchmarking indexed vs for-of for (let i = 0; i < include.length; i++) { if (e[include[i]] === undefined) return false; } + // oxlint-disable-next-line @typescript-eslint/prefer-for-of -- benchmarking indexed vs for-of for (let i = 0; i < exclude.length; i++) { if (e[exclude[i]] !== undefined) return false; } @@ -91,6 +91,7 @@ for (const { include, exclude } of configs) { const b = matchesFused(entity, include, exclude); const c = matchesFusedForOf(entity, include, exclude); if (a !== b || a !== c) { + // oxlint-disable-next-line @typescript-eslint/restrict-template-expressions -- debug output throw new Error(`Mismatch: every/some=${a} fused=${b} fusedForOf=${c}`); } } diff --git a/packages/perf-proofs/src/iteration/iterator-protocol-overhead.ts b/packages/perf-proofs/src/iteration/iterator-protocol-overhead.ts index 6551426..abce692 100644 --- a/packages/perf-proofs/src/iteration/iterator-protocol-overhead.ts +++ b/packages/perf-proofs/src/iteration/iterator-protocol-overhead.ts @@ -12,7 +12,10 @@ import { run, bench, summary } from "mitata"; // --- Setup --- -type Entity = { position: { x: number; y: number }; velocity: { x: number; y: number } }; +type Entity = { + position: { x: number; y: number }; + velocity: { x: number; y: number }; +}; // Simulate EntityCollection — wraps an array, delegates iterator class FakeCollection { @@ -61,6 +64,7 @@ for (const size of [100, 1000, 10_000]) { bench(`for (indexed) collection.raw — ${size}`, () => { const raw = collection.raw; + // oxlint-disable-next-line @typescript-eslint/prefer-for-of -- benchmarking indexed vs iterator protocol for (let i = 0; i < raw.length; i++) { const e = raw[i]; e.position.x += e.velocity.x; diff --git a/packages/perf-proofs/src/map-set/map-vs-object-lookup.ts b/packages/perf-proofs/src/map-set/map-vs-object-lookup.ts index edf07f2..5b0ce41 100644 --- a/packages/perf-proofs/src/map-set/map-vs-object-lookup.ts +++ b/packages/perf-proofs/src/map-set/map-vs-object-lookup.ts @@ -13,7 +13,7 @@ const keys = Array.from({ length: 20 }, (_, i) => `component_${i}`); const missingKey = "nonexistent"; const map = new Map(); -const obj: Record = {}; +const obj: Record = {}; for (let i = 0; i < keys.length; i++) { map.set(keys[i], i); @@ -46,6 +46,7 @@ summary(() => { bench("Map.get — all 20 keys", () => { let sum = 0; for (const k of keys) { + // oxlint-disable-next-line @typescript-eslint/no-non-null-assertion -- keys are known present sum += map.get(k)!; } return sum; @@ -54,7 +55,7 @@ summary(() => { bench("obj[key] — all 20 keys", () => { let sum = 0; for (const k of keys) { - sum += obj[k]; + sum += obj[k] ?? 0; } return sum; }); @@ -68,6 +69,7 @@ summary(() => { } let sum = 0; for (const k of keys) { + // oxlint-disable-next-line @typescript-eslint/no-non-null-assertion -- keys are known present sum += m.get(k)!; } return sum; diff --git a/packages/perf-proofs/src/set/set-alloc-vs-alternatives.ts b/packages/perf-proofs/src/set/set-alloc-vs-alternatives.ts index 271411f..91acad1 100644 --- a/packages/perf-proofs/src/set/set-alloc-vs-alternatives.ts +++ b/packages/perf-proofs/src/set/set-alloc-vs-alternatives.ts @@ -120,6 +120,7 @@ function withDuplicatesArr( for (const key of keys) { const arr = index.get(key); if (arr !== undefined) { + // oxlint-disable-next-line @typescript-eslint/prefer-for-of -- benchmarking indexed loop for (let i = 0; i < arr.length; i++) { callback(arr[i]); } diff --git a/packages/perf-proofs/src/set/set-vs-array-iteration.ts b/packages/perf-proofs/src/set/set-vs-array-iteration.ts index 5c8cc02..741d9f1 100644 --- a/packages/perf-proofs/src/set/set-vs-array-iteration.ts +++ b/packages/perf-proofs/src/set/set-vs-array-iteration.ts @@ -12,7 +12,10 @@ import { run, bench, summary } from "mitata"; type FakeArchetype = { id: number; components: number[] }; -function makeData(n: number): { set: Set; arr: FakeArchetype[] } { +function makeData(n: number): { + set: Set; + arr: FakeArchetype[]; +} { const arr = Array.from({ length: n }, (_, i) => ({ id: i, components: [i, i + 1, i + 2], @@ -44,6 +47,7 @@ for (const size of [5, 10, 50, 100]) { bench(`for (indexed) Array — ${size} items`, () => { let sum = 0; + // oxlint-disable-next-line @typescript-eslint/prefer-for-of -- benchmarking indexed vs for-of for (let i = 0; i < arr.length; i++) { sum += arr[i].id; } diff --git a/packages/perf-proofs/src/set/small-set-vs-small-array.ts b/packages/perf-proofs/src/set/small-set-vs-small-array.ts index d4dce3f..b8a4b7d 100644 --- a/packages/perf-proofs/src/set/small-set-vs-small-array.ts +++ b/packages/perf-proofs/src/set/small-set-vs-small-array.ts @@ -70,6 +70,7 @@ for (const size of [2, 5, 8, 15]) { bench(`for (indexed) Array — ${size} items`, () => { let sum = 0; + // oxlint-disable-next-line @typescript-eslint/prefer-for-of -- benchmarking indexed vs for-of for (let i = 0; i < arr.length; i++) { sum += arr[i].id; } diff --git a/performance-plan.md b/performance-plan.md deleted file mode 100644 index 45bd6db..0000000 --- a/performance-plan.md +++ /dev/null @@ -1,154 +0,0 @@ -# objecs Performance Improvement Plan - -## Benchmark Results (Baseline) - -``` -> ecs-benchmark@ start -> node src/bench.js objecs miniplex - -objecs - packed_5 139,836 op/s - simple_iter 80,937 op/s - frag_iter 44,291 op/s - entity_cycle 7,556 op/s - add_remove 21,209 op/s - -miniplex - packed_5 180,113 op/s - simple_iter 178,320 op/s - frag_iter 50,361 op/s - entity_cycle 2,176 op/s - add_remove 2,100 op/s -``` - -| Benchmark | objecs | miniplex | Winner | Gap | -|-----------|--------|----------|--------|-----| -| packed_5 | 139,836 | 180,113 | miniplex | **-22%** | -| simple_iter | 80,937 | 178,320 | miniplex | **-55%** | -| frag_iter | 44,291 | 50,361 | miniplex | -12% | -| entity_cycle | 7,556 | 2,176 | **objecs** | +247% | -| add_remove | 21,209 | 2,100 | **objecs** | +910% | - -## Key Architectural Differences - -| Aspect | objecs | miniplex | -|--------|--------|----------| -| Entity storage | `Set` | `Array + Map` | -| Removal | `Set.delete()` | Swap-and-pop (O(1)) | -| Iterator | Set's default | Custom, reuses result object | -| Query caching | None (new each call) | Cached by config key | -| Component check | `component in entity` | `entity[component] !== undefined` | -| Events | None | onEntityAdded/Removed (causes overhead) | - -## Analysis - -### Why miniplex wins iteration benchmarks: -1. **Array iteration is ~2x faster than Set iteration** in V8 -2. **Custom iterator reuses result object** (avoids GC pressure) -3. **Better cache locality** with contiguous array memory - -### Why objecs wins mutation benchmarks: -1. **No event emission overhead** (miniplex emits events on every add/remove) -2. **Simpler removeComponent** (miniplex copies entity to create "future" state) -3. **Leaner code paths** for add/remove operations - -## Refactor Guidelines - -1. **Cannot sacrifice DX or type safety** - maintain the current API and TypeScript experience -2. **Validate with benchmarks**: `pnpm --filter ecs-benchmark start objecs miniplex` -3. **Tests must pass**: `pnpm --filter objecs test --run` - -## Plan of Attack - -### Phase 1: Switch to Array + Map (Highest Impact) - -**Goal:** Close the 55% gap in `simple_iter` - -1. Replace `Set` with `Array` for storage -2. Add `Map` for O(1) index lookups -3. Implement swap-and-pop removal to maintain O(1) deletion -4. Create optimized custom iterator that reuses result objects - -**Expected impact:** 40-60% improvement in iteration benchmarks - -### Phase 2: Query/Archetype Caching - -**Goal:** Reduce redundant archetype creation overhead - -1. Cache archetypes by component signature (sorted, stringified) -2. Return existing archetype if query already exists -3. This matches miniplex's behavior - -**Expected impact:** Reduced memory allocation, faster repeated queries - -### Phase 3: Micro-optimizations - -1. Change `component in entity` → `entity[component] !== undefined` -2. Inline hot-path operations where possible -3. Avoid creating closures in frequently-called methods - -### Phase 4: Maintain Mutation Advantage - -Ensure our changes don't regress entity_cycle and add_remove performance: -- Keep event-free design -- Avoid copying entities for "future" state checks - -## Risk Assessment - -| Change | Risk | Mitigation | -|--------|------|------------| -| Array + Map | Medium - API change for iteration | Keep `ReadonlySet` facade or expose array | -| Swap-and-pop | Low - internal detail | Entity order becomes undefined (usually fine for ECS) | -| Query caching | Low | Use weak references if memory is concern | - -## Progress Log - -### Phase 1 Results ✅ - -Converted from `Set` to `EntityCollection` (Array + Map) with native array iteration delegation. - -**Before (baseline with Set):** -``` -objecs - packed_5 139,836 op/s - simple_iter 80,937 op/s - frag_iter 44,291 op/s - entity_cycle 7,556 op/s - add_remove 21,209 op/s -``` - -**After Phase 1:** -``` -objecs - packed_5 156,720 op/s (+12%) - simple_iter 155,658 op/s (+92%) - frag_iter 49,980 op/s (+13%) - entity_cycle 3,970 op/s (-47%) - add_remove 22,525 op/s (+6%) -``` - -**Comparison with miniplex after Phase 1:** -| Benchmark | objecs | miniplex | Diff | -|-----------|--------|----------|------| -| packed_5 | 156,720 | 183,637 | -15% | -| simple_iter | 155,658 | 161,876 | -4% | -| frag_iter | 49,980 | 51,206 | -2% | -| entity_cycle | 3,970 | 2,247 | +77% ✅ | -| add_remove | 22,525 | 2,092 | +977% ✅ | - -**Key changes:** -- Created `EntityCollection` class with Array + Map internals -- Added `ReadonlyEntityCollection` interface (simpler than `ReadonlySet` to avoid ES2024 Iterator Helpers complexity) -- Implemented swap-and-pop O(1) removal -- Delegated iteration to native array iterator for maximum performance - -**Tradeoff:** entity_cycle regressed 47% from baseline, but still 77% faster than miniplex. The regression is likely due to Map overhead for index tracking. - -### Phase 2 Results -- [ ] Pending - -### Phase 3 Results -- [ ] Pending - -### Final Results -- [ ] Pending diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ebf05f7..6f0d2bd 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4,40 +4,38 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false +catalogs: + default: + vite-plus: + specifier: latest + version: 0.1.11 + +overrides: + vite: npm:@voidzero-dev/vite-plus-core@latest + vitest: npm:@voidzero-dev/vite-plus-test@latest + importers: .: devDependencies: - '@eslint/js': - specifier: 9.39.2 - version: 9.39.2 - '@types/eslint': - specifier: ^9.6.1 - version: 9.6.1 - '@typescript-eslint/utils': - specifier: 8.53.0 - version: 8.53.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) - eslint: - specifier: ^9.39.4 - version: 9.39.4(jiti@2.6.1) - eslint-config-prettier: - specifier: ^10.1.8 - version: 10.1.8(eslint@9.39.4(jiti@2.6.1)) eslint-plugin-depend: specifier: 1.5.0 version: 1.5.0(eslint@9.39.4(jiti@2.6.1)) globals: specifier: 17.4.0 version: 17.4.0 + oxlint-tsgolint: + specifier: 0.16.0 + version: 0.16.0 typescript: specifier: 5.9.3 version: 5.9.3 - typescript-eslint: - specifier: 8.57.0 - version: 8.57.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) typeslayer: specifier: 0.1.31 version: 0.1.31 + vite-plus: + specifier: 'catalog:' + version: 0.1.11(@arethetypeswrong/core@0.18.2)(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(typescript@5.9.3)(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2) packages/benchmark: dependencies: @@ -77,7 +75,7 @@ importers: dependencies: '@jakeklassen/ecs': specifier: 4.0.7 - version: 4.0.7(jiti@2.6.1)(postcss@8.5.6)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2) + version: 4.0.7(jiti@2.6.1)(postcss@8.5.8)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2) '@javelin/ecs': specifier: 0.22.0 version: 0.22.0 @@ -127,9 +125,6 @@ importers: '@types/node': specifier: ^24.12.0 version: 24.12.0 - prettier: - specifier: ^3.8.1 - version: 3.8.1 packages/examples: dependencies: @@ -142,6 +137,9 @@ importers: dot-path-value: specifier: 0.0.11 version: 0.0.11 + esbuild: + specifier: 0.27.4 + version: 0.27.4 fast-xml-parser: specifier: 5.5.5 version: 5.5.5 @@ -150,7 +148,7 @@ importers: version: 2.0.5 gameinput: specifier: 0.0.9 - version: 0.0.9(postcss@8.5.6)(typescript@5.9.3) + version: 0.0.9(postcss@8.5.8)(typescript@5.9.3) jszip: specifier: 3.10.1 version: 3.10.1 @@ -194,15 +192,15 @@ importers: '@types/wicg-file-system-access': specifier: 2023.10.7 version: 2023.10.7 - prettier: - specifier: ^3.8.1 - version: 3.8.1 typescript: specifier: 5.9.3 version: 5.9.3 vite: - specifier: ^7.3.1 - version: 7.3.1(@types/node@24.12.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) + specifier: npm:@voidzero-dev/vite-plus-core@latest + version: '@voidzero-dev/vite-plus-core@0.1.11(@arethetypeswrong/core@0.18.2)(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)' + vite-plus: + specifier: 'catalog:' + version: 0.1.11(@arethetypeswrong/core@0.18.2)(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(typescript@5.9.3)(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2) packages/game-benchmark: dependencies: @@ -232,74 +230,47 @@ importers: packages/objecs: devDependencies: '@antfu/ni': - specifier: 28.1.0 - version: 28.1.0 + specifier: 29.0.0 + version: 29.0.0 '@arethetypeswrong/cli': specifier: 0.18.2 version: 0.18.2 - '@eslint/eslintrc': - specifier: 3.3.5 - version: 3.3.5 - '@eslint/js': - specifier: 9.39.2 - version: 9.39.2 '@types/benchmark': specifier: ^2.1.5 version: 2.1.5 - '@types/eslint': - specifier: ^9.6.1 - version: 9.6.1 '@types/node': specifier: ^24.12.0 version: 24.12.0 - '@typescript-eslint/eslint-plugin': - specifier: ^8.57.0 - version: 8.57.0(@typescript-eslint/parser@8.57.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/parser': - specifier: ^8.57.0 - version: 8.57.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) benchmark: specifier: ^2.1.4 version: 2.1.4 bumpp: specifier: 10.4.1 version: 10.4.1 - eslint: - specifier: ^9.39.4 - version: 9.39.4(jiti@2.6.1) - eslint-config-prettier: - specifier: ^10.1.8 - version: 10.1.8(eslint@9.39.4(jiti@2.6.1)) - eslint-plugin-depend: - specifier: 1.5.0 - version: 1.5.0(eslint@9.39.4(jiti@2.6.1)) - eslint-plugin-prettier: - specifier: 5.5.5 - version: 5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.39.4(jiti@2.6.1)))(eslint@9.39.4(jiti@2.6.1))(prettier@3.8.1) globals: specifier: 17.4.0 version: 17.4.0 nodemon: specifier: ^3.1.14 version: 3.1.14 - prettier: - specifier: ^3.8.1 - version: 3.8.1 rimraf: specifier: ^6.1.3 version: 6.1.3 tsup: specifier: ^8.5.1 - version: 8.5.1(jiti@2.6.1)(postcss@8.5.6)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2) + version: 8.5.1(jiti@2.6.1)(postcss@8.5.8)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2) typescript: specifier: ^5.9.3 version: 5.9.3 vite: - specifier: 7.3.1 - version: 7.3.1(@types/node@24.12.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) + specifier: npm:@voidzero-dev/vite-plus-core@latest + version: '@voidzero-dev/vite-plus-core@0.1.11(@arethetypeswrong/core@0.18.2)(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)' + vite-plus: + specifier: 'catalog:' + version: 0.1.11(@arethetypeswrong/core@0.18.2)(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(typescript@5.9.3)(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2) vitest: - specifier: 4.1.0 - version: 4.1.0(@types/node@24.12.0)(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) + specifier: npm:@voidzero-dev/vite-plus-test@latest + version: '@voidzero-dev/vite-plus-test@0.1.11(@arethetypeswrong/core@0.18.2)(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(typescript@5.9.3)(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2)' packages/perf-proofs: dependencies: @@ -319,8 +290,8 @@ packages: '@andrewbranch/untar.js@1.0.3': resolution: {integrity: sha512-Jh15/qVmrLGhkKJBdXlK1+9tY4lZruYjsgkDFj08ZmDiWVBLJcqkok7Z0/R0In+i1rScBpJlSvrTS2Lm41Pbnw==} - '@antfu/ni@28.1.0': - resolution: {integrity: sha512-CwNepqzcItyoRDlZyQXFzgSPbPoek7Udb5URvhIS3fWVZwfXiwYcgrfsFBGWQLylVSPC6S47gTjBLbt/OzC2Vw==} + '@antfu/ni@29.0.0': + resolution: {integrity: sha512-JbKx3nSr2HRLtchKfg6RCBB6lwJvYZIeGFTO0fzjXdaekIFHPMN6gfnRUZU1raPvXTVF7EqGTWEreDnZVvrzwQ==} engines: {node: '>=20'} hasBin: true @@ -349,14 +320,8 @@ packages: cpu: [ppc64] os: [aix] - '@esbuild/aix-ppc64@0.27.1': - resolution: {integrity: sha512-HHB50pdsBX6k47S4u5g/CaLjqS3qwaOVE5ILsq64jyzgMhLuCuZ8rGzM9yhsAjfjkbgUPMzZEPa7DAp7yz6vuA==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] - - '@esbuild/aix-ppc64@0.27.2': - resolution: {integrity: sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==} + '@esbuild/aix-ppc64@0.27.4': + resolution: {integrity: sha512-cQPwL2mp2nSmHHJlCyoXgHGhbEPMrEEU5xhkcy3Hs/O7nGZqEpZ2sUtLaL9MORLtDfRvVl2/3PAuEkYZH0Ty8Q==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] @@ -373,14 +338,8 @@ packages: cpu: [arm64] os: [android] - '@esbuild/android-arm64@0.27.1': - resolution: {integrity: sha512-45fuKmAJpxnQWixOGCrS+ro4Uvb4Re9+UTieUY2f8AEc+t7d4AaZ6eUJ3Hva7dtrxAAWHtlEFsXFMAgNnGU9uQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [android] - - '@esbuild/android-arm64@0.27.2': - resolution: {integrity: sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==} + '@esbuild/android-arm64@0.27.4': + resolution: {integrity: sha512-gdLscB7v75wRfu7QSm/zg6Rx29VLdy9eTr2t44sfTW7CxwAtQghZ4ZnqHk3/ogz7xao0QAgrkradbBzcqFPasw==} engines: {node: '>=18'} cpu: [arm64] os: [android] @@ -397,14 +356,8 @@ packages: cpu: [arm] os: [android] - '@esbuild/android-arm@0.27.1': - resolution: {integrity: sha512-kFqa6/UcaTbGm/NncN9kzVOODjhZW8e+FRdSeypWe6j33gzclHtwlANs26JrupOntlcWmB0u8+8HZo8s7thHvg==} - engines: {node: '>=18'} - cpu: [arm] - os: [android] - - '@esbuild/android-arm@0.27.2': - resolution: {integrity: sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==} + '@esbuild/android-arm@0.27.4': + resolution: {integrity: sha512-X9bUgvxiC8CHAGKYufLIHGXPJWnr0OCdR0anD2e21vdvgCI8lIfqFbnoeOz7lBjdrAGUhqLZLcQo6MLhTO2DKQ==} engines: {node: '>=18'} cpu: [arm] os: [android] @@ -421,14 +374,8 @@ packages: cpu: [x64] os: [android] - '@esbuild/android-x64@0.27.1': - resolution: {integrity: sha512-LBEpOz0BsgMEeHgenf5aqmn/lLNTFXVfoWMUox8CtWWYK9X4jmQzWjoGoNb8lmAYml/tQ/Ysvm8q7szu7BoxRQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [android] - - '@esbuild/android-x64@0.27.2': - resolution: {integrity: sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==} + '@esbuild/android-x64@0.27.4': + resolution: {integrity: sha512-PzPFnBNVF292sfpfhiyiXCGSn9HZg5BcAz+ivBuSsl6Rk4ga1oEXAamhOXRFyMcjwr2DVtm40G65N3GLeH1Lvw==} engines: {node: '>=18'} cpu: [x64] os: [android] @@ -445,14 +392,8 @@ packages: cpu: [arm64] os: [darwin] - '@esbuild/darwin-arm64@0.27.1': - resolution: {integrity: sha512-veg7fL8eMSCVKL7IW4pxb54QERtedFDfY/ASrumK/SbFsXnRazxY4YykN/THYqFnFwJ0aVjiUrVG2PwcdAEqQQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] - - '@esbuild/darwin-arm64@0.27.2': - resolution: {integrity: sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==} + '@esbuild/darwin-arm64@0.27.4': + resolution: {integrity: sha512-b7xaGIwdJlht8ZFCvMkpDN6uiSmnxxK56N2GDTMYPr2/gzvfdQN8rTfBsvVKmIVY/X7EM+/hJKEIbbHs9oA4tQ==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] @@ -469,14 +410,8 @@ packages: cpu: [x64] os: [darwin] - '@esbuild/darwin-x64@0.27.1': - resolution: {integrity: sha512-+3ELd+nTzhfWb07Vol7EZ+5PTbJ/u74nC6iv4/lwIU99Ip5uuY6QoIf0Hn4m2HoV0qcnRivN3KSqc+FyCHjoVQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [darwin] - - '@esbuild/darwin-x64@0.27.2': - resolution: {integrity: sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==} + '@esbuild/darwin-x64@0.27.4': + resolution: {integrity: sha512-sR+OiKLwd15nmCdqpXMnuJ9W2kpy0KigzqScqHI3Hqwr7IXxBp3Yva+yJwoqh7rE8V77tdoheRYataNKL4QrPw==} engines: {node: '>=18'} cpu: [x64] os: [darwin] @@ -493,14 +428,8 @@ packages: cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-arm64@0.27.1': - resolution: {integrity: sha512-/8Rfgns4XD9XOSXlzUDepG8PX+AVWHliYlUkFI3K3GB6tqbdjYqdhcb4BKRd7C0BhZSoaCxhv8kTcBrcZWP+xg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] - - '@esbuild/freebsd-arm64@0.27.2': - resolution: {integrity: sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==} + '@esbuild/freebsd-arm64@0.27.4': + resolution: {integrity: sha512-jnfpKe+p79tCnm4GVav68A7tUFeKQwQyLgESwEAUzyxk/TJr4QdGog9sqWNcUbr/bZt/O/HXouspuQDd9JxFSw==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] @@ -517,14 +446,8 @@ packages: cpu: [x64] os: [freebsd] - '@esbuild/freebsd-x64@0.27.1': - resolution: {integrity: sha512-GITpD8dK9C+r+5yRT/UKVT36h/DQLOHdwGVwwoHidlnA168oD3uxA878XloXebK4Ul3gDBBIvEdL7go9gCUFzQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [freebsd] - - '@esbuild/freebsd-x64@0.27.2': - resolution: {integrity: sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==} + '@esbuild/freebsd-x64@0.27.4': + resolution: {integrity: sha512-2kb4ceA/CpfUrIcTUl1wrP/9ad9Atrp5J94Lq69w7UwOMolPIGrfLSvAKJp0RTvkPPyn6CIWrNy13kyLikZRZQ==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] @@ -541,14 +464,8 @@ packages: cpu: [arm64] os: [linux] - '@esbuild/linux-arm64@0.27.1': - resolution: {integrity: sha512-W9//kCrh/6in9rWIBdKaMtuTTzNj6jSeG/haWBADqLLa9P8O5YSRDzgD5y9QBok4AYlzS6ARHifAb75V6G670Q==} - engines: {node: '>=18'} - cpu: [arm64] - os: [linux] - - '@esbuild/linux-arm64@0.27.2': - resolution: {integrity: sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==} + '@esbuild/linux-arm64@0.27.4': + resolution: {integrity: sha512-7nQOttdzVGth1iz57kxg9uCz57dxQLHWxopL6mYuYthohPKEK0vU0C3O21CcBK6KDlkYVcnDXY099HcCDXd9dA==} engines: {node: '>=18'} cpu: [arm64] os: [linux] @@ -565,14 +482,8 @@ packages: cpu: [arm] os: [linux] - '@esbuild/linux-arm@0.27.1': - resolution: {integrity: sha512-ieMID0JRZY/ZeCrsFQ3Y3NlHNCqIhTprJfDgSB3/lv5jJZ8FX3hqPyXWhe+gvS5ARMBJ242PM+VNz/ctNj//eA==} - engines: {node: '>=18'} - cpu: [arm] - os: [linux] - - '@esbuild/linux-arm@0.27.2': - resolution: {integrity: sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==} + '@esbuild/linux-arm@0.27.4': + resolution: {integrity: sha512-aBYgcIxX/wd5n2ys0yESGeYMGF+pv6g0DhZr3G1ZG4jMfruU9Tl1i2Z+Wnj9/KjGz1lTLCcorqE2viePZqj4Eg==} engines: {node: '>=18'} cpu: [arm] os: [linux] @@ -589,14 +500,8 @@ packages: cpu: [ia32] os: [linux] - '@esbuild/linux-ia32@0.27.1': - resolution: {integrity: sha512-VIUV4z8GD8rtSVMfAj1aXFahsi/+tcoXXNYmXgzISL+KB381vbSTNdeZHHHIYqFyXcoEhu9n5cT+05tRv13rlw==} - engines: {node: '>=18'} - cpu: [ia32] - os: [linux] - - '@esbuild/linux-ia32@0.27.2': - resolution: {integrity: sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==} + '@esbuild/linux-ia32@0.27.4': + resolution: {integrity: sha512-oPtixtAIzgvzYcKBQM/qZ3R+9TEUd1aNJQu0HhGyqtx6oS7qTpvjheIWBbes4+qu1bNlo2V4cbkISr8q6gRBFA==} engines: {node: '>=18'} cpu: [ia32] os: [linux] @@ -613,14 +518,8 @@ packages: cpu: [loong64] os: [linux] - '@esbuild/linux-loong64@0.27.1': - resolution: {integrity: sha512-l4rfiiJRN7sTNI//ff65zJ9z8U+k6zcCg0LALU5iEWzY+a1mVZ8iWC1k5EsNKThZ7XCQ6YWtsZ8EWYm7r1UEsg==} - engines: {node: '>=18'} - cpu: [loong64] - os: [linux] - - '@esbuild/linux-loong64@0.27.2': - resolution: {integrity: sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==} + '@esbuild/linux-loong64@0.27.4': + resolution: {integrity: sha512-8mL/vh8qeCoRcFH2nM8wm5uJP+ZcVYGGayMavi8GmRJjuI3g1v6Z7Ni0JJKAJW+m0EtUuARb6Lmp4hMjzCBWzA==} engines: {node: '>=18'} cpu: [loong64] os: [linux] @@ -637,14 +536,8 @@ packages: cpu: [mips64el] os: [linux] - '@esbuild/linux-mips64el@0.27.1': - resolution: {integrity: sha512-U0bEuAOLvO/DWFdygTHWY8C067FXz+UbzKgxYhXC0fDieFa0kDIra1FAhsAARRJbvEyso8aAqvPdNxzWuStBnA==} - engines: {node: '>=18'} - cpu: [mips64el] - os: [linux] - - '@esbuild/linux-mips64el@0.27.2': - resolution: {integrity: sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==} + '@esbuild/linux-mips64el@0.27.4': + resolution: {integrity: sha512-1RdrWFFiiLIW7LQq9Q2NES+HiD4NyT8Itj9AUeCl0IVCA459WnPhREKgwrpaIfTOe+/2rdntisegiPWn/r/aAw==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] @@ -661,14 +554,8 @@ packages: cpu: [ppc64] os: [linux] - '@esbuild/linux-ppc64@0.27.1': - resolution: {integrity: sha512-NzdQ/Xwu6vPSf/GkdmRNsOfIeSGnh7muundsWItmBsVpMoNPVpM61qNzAVY3pZ1glzzAxLR40UyYM23eaDDbYQ==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [linux] - - '@esbuild/linux-ppc64@0.27.2': - resolution: {integrity: sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==} + '@esbuild/linux-ppc64@0.27.4': + resolution: {integrity: sha512-tLCwNG47l3sd9lpfyx9LAGEGItCUeRCWeAx6x2Jmbav65nAwoPXfewtAdtbtit/pJFLUWOhpv0FpS6GQAmPrHA==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] @@ -685,14 +572,8 @@ packages: cpu: [riscv64] os: [linux] - '@esbuild/linux-riscv64@0.27.1': - resolution: {integrity: sha512-7zlw8p3IApcsN7mFw0O1Z1PyEk6PlKMu18roImfl3iQHTnr/yAfYv6s4hXPidbDoI2Q0pW+5xeoM4eTCC0UdrQ==} - engines: {node: '>=18'} - cpu: [riscv64] - os: [linux] - - '@esbuild/linux-riscv64@0.27.2': - resolution: {integrity: sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==} + '@esbuild/linux-riscv64@0.27.4': + resolution: {integrity: sha512-BnASypppbUWyqjd1KIpU4AUBiIhVr6YlHx/cnPgqEkNoVOhHg+YiSVxM1RLfiy4t9cAulbRGTNCKOcqHrEQLIw==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] @@ -709,14 +590,8 @@ packages: cpu: [s390x] os: [linux] - '@esbuild/linux-s390x@0.27.1': - resolution: {integrity: sha512-cGj5wli+G+nkVQdZo3+7FDKC25Uh4ZVwOAK6A06Hsvgr8WqBBuOy/1s+PUEd/6Je+vjfm6stX0kmib5b/O2Ykw==} - engines: {node: '>=18'} - cpu: [s390x] - os: [linux] - - '@esbuild/linux-s390x@0.27.2': - resolution: {integrity: sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==} + '@esbuild/linux-s390x@0.27.4': + resolution: {integrity: sha512-+eUqgb/Z7vxVLezG8bVB9SfBie89gMueS+I0xYh2tJdw3vqA/0ImZJ2ROeWwVJN59ihBeZ7Tu92dF/5dy5FttA==} engines: {node: '>=18'} cpu: [s390x] os: [linux] @@ -733,26 +608,14 @@ packages: cpu: [x64] os: [linux] - '@esbuild/linux-x64@0.27.1': - resolution: {integrity: sha512-z3H/HYI9MM0HTv3hQZ81f+AKb+yEoCRlUby1F80vbQ5XdzEMyY/9iNlAmhqiBKw4MJXwfgsh7ERGEOhrM1niMA==} - engines: {node: '>=18'} - cpu: [x64] - os: [linux] - - '@esbuild/linux-x64@0.27.2': - resolution: {integrity: sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==} + '@esbuild/linux-x64@0.27.4': + resolution: {integrity: sha512-S5qOXrKV8BQEzJPVxAwnryi2+Iq5pB40gTEIT69BQONqR7JH1EPIcQ/Uiv9mCnn05jff9umq/5nqzxlqTOg9NA==} engines: {node: '>=18'} cpu: [x64] os: [linux] - '@esbuild/netbsd-arm64@0.27.1': - resolution: {integrity: sha512-wzC24DxAvk8Em01YmVXyjl96Mr+ecTPyOuADAvjGg+fyBpGmxmcr2E5ttf7Im8D0sXZihpxzO1isus8MdjMCXQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [netbsd] - - '@esbuild/netbsd-arm64@0.27.2': - resolution: {integrity: sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==} + '@esbuild/netbsd-arm64@0.27.4': + resolution: {integrity: sha512-xHT8X4sb0GS8qTqiwzHqpY00C95DPAq7nAwX35Ie/s+LO9830hrMd3oX0ZMKLvy7vsonee73x0lmcdOVXFzd6Q==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] @@ -769,14 +632,8 @@ packages: cpu: [x64] os: [netbsd] - '@esbuild/netbsd-x64@0.27.1': - resolution: {integrity: sha512-1YQ8ybGi2yIXswu6eNzJsrYIGFpnlzEWRl6iR5gMgmsrR0FcNoV1m9k9sc3PuP5rUBLshOZylc9nqSgymI+TYg==} - engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] - - '@esbuild/netbsd-x64@0.27.2': - resolution: {integrity: sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==} + '@esbuild/netbsd-x64@0.27.4': + resolution: {integrity: sha512-RugOvOdXfdyi5Tyv40kgQnI0byv66BFgAqjdgtAKqHoZTbTF2QqfQrFwa7cHEORJf6X2ht+l9ABLMP0dnKYsgg==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] @@ -787,14 +644,8 @@ packages: cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-arm64@0.27.1': - resolution: {integrity: sha512-5Z+DzLCrq5wmU7RDaMDe2DVXMRm2tTDvX2KU14JJVBN2CT/qov7XVix85QoJqHltpvAOZUAc3ndU56HSMWrv8g==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] - - '@esbuild/openbsd-arm64@0.27.2': - resolution: {integrity: sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==} + '@esbuild/openbsd-arm64@0.27.4': + resolution: {integrity: sha512-2MyL3IAaTX+1/qP0O1SwskwcwCoOI4kV2IBX1xYnDDqthmq5ArrW94qSIKCAuRraMgPOmG0RDTA74mzYNQA9ow==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] @@ -811,26 +662,14 @@ packages: cpu: [x64] os: [openbsd] - '@esbuild/openbsd-x64@0.27.1': - resolution: {integrity: sha512-Q73ENzIdPF5jap4wqLtsfh8YbYSZ8Q0wnxplOlZUOyZy7B4ZKW8DXGWgTCZmF8VWD7Tciwv5F4NsRf6vYlZtqg==} + '@esbuild/openbsd-x64@0.27.4': + resolution: {integrity: sha512-u8fg/jQ5aQDfsnIV6+KwLOf1CmJnfu1ShpwqdwC0uA7ZPwFws55Ngc12vBdeUdnuWoQYx/SOQLGDcdlfXhYmXQ==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] - '@esbuild/openbsd-x64@0.27.2': - resolution: {integrity: sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] - - '@esbuild/openharmony-arm64@0.27.1': - resolution: {integrity: sha512-ajbHrGM/XiK+sXM0JzEbJAen+0E+JMQZ2l4RR4VFwvV9JEERx+oxtgkpoKv1SevhjavK2z2ReHk32pjzktWbGg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openharmony] - - '@esbuild/openharmony-arm64@0.27.2': - resolution: {integrity: sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==} + '@esbuild/openharmony-arm64@0.27.4': + resolution: {integrity: sha512-JkTZrl6VbyO8lDQO3yv26nNr2RM2yZzNrNHEsj9bm6dOwwu9OYN28CjzZkH57bh4w0I2F7IodpQvUAEd1mbWXg==} engines: {node: '>=18'} cpu: [arm64] os: [openharmony] @@ -847,14 +686,8 @@ packages: cpu: [x64] os: [sunos] - '@esbuild/sunos-x64@0.27.1': - resolution: {integrity: sha512-IPUW+y4VIjuDVn+OMzHc5FV4GubIwPnsz6ubkvN8cuhEqH81NovB53IUlrlBkPMEPxvNnf79MGBoz8rZ2iW8HA==} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] - - '@esbuild/sunos-x64@0.27.2': - resolution: {integrity: sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==} + '@esbuild/sunos-x64@0.27.4': + resolution: {integrity: sha512-/gOzgaewZJfeJTlsWhvUEmUG4tWEY2Spp5M20INYRg2ZKl9QPO3QEEgPeRtLjEWSW8FilRNacPOg8R1uaYkA6g==} engines: {node: '>=18'} cpu: [x64] os: [sunos] @@ -871,14 +704,8 @@ packages: cpu: [arm64] os: [win32] - '@esbuild/win32-arm64@0.27.1': - resolution: {integrity: sha512-RIVRWiljWA6CdVu8zkWcRmGP7iRRIIwvhDKem8UMBjPql2TXM5PkDVvvrzMtj1V+WFPB4K7zkIGM7VzRtFkjdg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] - - '@esbuild/win32-arm64@0.27.2': - resolution: {integrity: sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==} + '@esbuild/win32-arm64@0.27.4': + resolution: {integrity: sha512-Z9SExBg2y32smoDQdf1HRwHRt6vAHLXcxD2uGgO/v2jK7Y718Ix4ndsbNMU/+1Qiem9OiOdaqitioZwxivhXYg==} engines: {node: '>=18'} cpu: [arm64] os: [win32] @@ -895,14 +722,8 @@ packages: cpu: [ia32] os: [win32] - '@esbuild/win32-ia32@0.27.1': - resolution: {integrity: sha512-2BR5M8CPbptC1AK5JbJT1fWrHLvejwZidKx3UMSF0ecHMa+smhi16drIrCEggkgviBwLYd5nwrFLSl5Kho96RQ==} - engines: {node: '>=18'} - cpu: [ia32] - os: [win32] - - '@esbuild/win32-ia32@0.27.2': - resolution: {integrity: sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==} + '@esbuild/win32-ia32@0.27.4': + resolution: {integrity: sha512-DAyGLS0Jz5G5iixEbMHi5KdiApqHBWMGzTtMiJ72ZOLhbu/bzxgAe8Ue8CTS3n3HbIUHQz/L51yMdGMeoxXNJw==} engines: {node: '>=18'} cpu: [ia32] os: [win32] @@ -919,34 +740,18 @@ packages: cpu: [x64] os: [win32] - '@esbuild/win32-x64@0.27.1': - resolution: {integrity: sha512-d5X6RMYv6taIymSk8JBP+nxv8DQAMY6A51GPgusqLdK9wBz5wWIXy1KjTck6HnjE9hqJzJRdk+1p/t5soSbCtw==} - engines: {node: '>=18'} - cpu: [x64] - os: [win32] - - '@esbuild/win32-x64@0.27.2': - resolution: {integrity: sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==} + '@esbuild/win32-x64@0.27.4': + resolution: {integrity: sha512-+knoa0BDoeXgkNvvV1vvbZX4+hizelrkwmGJBdT17t8FNPwG2lKemmuMZlmaNQ3ws3DKKCxpb4zRZEIp3UxFCg==} engines: {node: '>=18'} cpu: [x64] os: [win32] - '@eslint-community/eslint-utils@4.9.0': - resolution: {integrity: sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - '@eslint-community/eslint-utils@4.9.1': resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - '@eslint-community/regexpp@4.12.1': - resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint-community/regexpp@4.12.2': resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} @@ -967,10 +772,6 @@ packages: resolution: {integrity: sha512-4IlJx0X0qftVsN5E+/vGujTRIFtwuLbNsVUe7TO6zYPDR1O6nFwvwhIKEKSrl6dZchmYBITazxKoUYOjdtjlRg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.39.2': - resolution: {integrity: sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.39.4': resolution: {integrity: sha512-nE7DEIchvtiFTwBw4Lfbu59PG+kCofhjsKaCWzxTpt4lfRjRMqG6uMBzKXuEcyXhOHoUp9riAm7/aWYGhXZ9cw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1193,9 +994,6 @@ packages: '@jridgewell/sourcemap-codec@1.5.0': resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} - '@jridgewell/sourcemap-codec@1.5.5': - resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} - '@jridgewell/trace-mapping@0.3.18': resolution: {integrity: sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==} @@ -1224,13 +1022,293 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} + '@oxc-project/runtime@0.115.0': + resolution: {integrity: sha512-Rg8Wlt5dCbXhQnsXPrkOjL1DTSvXLgb2R/KYfnf1/K+R0k6UMLEmbQXPM+kwrWqSmWA2t0B1EtHy2/3zikQpvQ==} + engines: {node: ^20.19.0 || >=22.12.0} + + '@oxc-project/types@0.115.0': + resolution: {integrity: sha512-4n91DKnebUS4yjUHl2g3/b2T+IUdCfmoZGhmwsovZCDaJSs+QkVAM+0AqqTxHSsHfeiMuueT75cZaZcT/m0pSw==} + + '@oxfmt/binding-android-arm-eabi@0.40.0': + resolution: {integrity: sha512-S6zd5r1w/HmqR8t0CTnGjFTBLDq2QKORPwriCHxo4xFNuhmOTABGjPaNvCJJVnrKBLsohOeiDX3YqQfJPF+FXw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [android] + + '@oxfmt/binding-android-arm64@0.40.0': + resolution: {integrity: sha512-/mbS9UUP/5Vbl2D6osIdcYiP0oie63LKMoTyGj5hyMCK/SFkl3EhtyRAfdjPvuvHC0SXdW6ePaTKkBSq1SNcIw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@oxfmt/binding-darwin-arm64@0.40.0': + resolution: {integrity: sha512-wRt8fRdfLiEhnRMBonlIbKrJWixoEmn6KCjKE9PElnrSDSXETGZfPb8ee+nQNTobXkCVvVLytp2o0obAsxl78Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@oxfmt/binding-darwin-x64@0.40.0': + resolution: {integrity: sha512-fzowhqbOE/NRy+AE5ob0+Y4X243WbWzDb00W+pKwD7d9tOqsAFbtWUwIyqqCoCLxj791m2xXIEeLH/3uz7zCCg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@oxfmt/binding-freebsd-x64@0.40.0': + resolution: {integrity: sha512-agZ9ITaqdBjcerRRFEHB8s0OyVcQW8F9ZxsszjxzeSthQ4fcN2MuOtQFWec1ed8/lDa50jSLHVE2/xPmTgtCfQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@oxfmt/binding-linux-arm-gnueabihf@0.40.0': + resolution: {integrity: sha512-ZM2oQ47p28TP1DVIp7HL1QoMUgqlBFHey0ksHct7tMXoU5BqjNvPWw7888azzMt25lnyPODVuye1wvNbvVUFOA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxfmt/binding-linux-arm-musleabihf@0.40.0': + resolution: {integrity: sha512-RBFPAxRAIsMisKM47Oe6Lwdv6agZYLz02CUhVCD1sOv5ajAcRMrnwCFBPWwGXpazToW2mjnZxFos8TuFjTU15A==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxfmt/binding-linux-arm64-gnu@0.40.0': + resolution: {integrity: sha512-Nb2XbQ+wV3W2jSIihXdPj7k83eOxeSgYP3N/SRXvQ6ZYPIk6Q86qEh5Gl/7OitX3bQoQrESqm1yMLvZV8/J7dA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@oxfmt/binding-linux-arm64-musl@0.40.0': + resolution: {integrity: sha512-tGmWhLD/0YMotCdfezlT6tC/MJG/wKpo4vnQ3Cq+4eBk/BwNv7EmkD0VkD5F/dYkT3b8FNU01X2e8vvJuWoM1w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@oxfmt/binding-linux-ppc64-gnu@0.40.0': + resolution: {integrity: sha512-rVbFyM3e7YhkVnp0IVYjaSHfrBWcTRWb60LEcdNAJcE2mbhTpbqKufx0FrhWfoxOrW/+7UJonAOShoFFLigDqQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@oxfmt/binding-linux-riscv64-gnu@0.40.0': + resolution: {integrity: sha512-3ZqBw14JtWeEoLiioJcXSJz8RQyPE+3jLARnYM1HdPzZG4vk+Ua8CUupt2+d+vSAvMyaQBTN2dZK+kbBS/j5mA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@oxfmt/binding-linux-riscv64-musl@0.40.0': + resolution: {integrity: sha512-JJ4PPSdcbGBjPvb+O7xYm2FmAsKCyuEMYhqatBAHMp/6TA6rVlf9Z/sYPa4/3Bommb+8nndm15SPFRHEPU5qFA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + libc: [musl] + + '@oxfmt/binding-linux-s390x-gnu@0.40.0': + resolution: {integrity: sha512-Kp0zNJoX9Ik77wUya2tpBY3W9f40VUoMQLWVaob5SgCrblH/t2xr/9B2bWHfs0WCefuGmqXcB+t0Lq77sbBmZw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@oxfmt/binding-linux-x64-gnu@0.40.0': + resolution: {integrity: sha512-7YTCNzleWTaQTqNGUNQ66qVjpoV6DjbCOea+RnpMBly2bpzrI/uu7Rr+2zcgRfNxyjXaFTVQKaRKjqVdeUfeVA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@oxfmt/binding-linux-x64-musl@0.40.0': + resolution: {integrity: sha512-hWnSzJ0oegeOwfOEeejYXfBqmnRGHusgtHfCPzmvJvHTwy1s3Neo59UKc1CmpE3zxvrCzJoVHos0rr97GHMNPw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] + + '@oxfmt/binding-openharmony-arm64@0.40.0': + resolution: {integrity: sha512-28sJC1lR4qtBJGzSRRbPnSW3GxU2+4YyQFE6rCmsUYqZ5XYH8jg0/w+CvEzQ8TuAQz5zLkcA25nFQGwoU0PT3Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@oxfmt/binding-win32-arm64-msvc@0.40.0': + resolution: {integrity: sha512-cDkRnyT0dqwF5oIX1Cv59HKCeZQFbWWdUpXa3uvnHFT2iwYSSZspkhgjXjU6iDp5pFPaAEAe9FIbMoTgkTmKPg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@oxfmt/binding-win32-ia32-msvc@0.40.0': + resolution: {integrity: sha512-7rPemBJjqm5Gkv6ZRCPvK8lE6AqQ/2z31DRdWazyx2ZvaSgL7QGofHXHNouRpPvNsT9yxRNQJgigsWkc+0qg4w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ia32] + os: [win32] + + '@oxfmt/binding-win32-x64-msvc@0.40.0': + resolution: {integrity: sha512-/Zmj0yTYSvmha6TG1QnoLqVT7ZMRDqXvFXXBQpIjteEwx9qvUYMBH2xbiOFhDeMUJkGwC3D6fdKsFtaqUvkwNA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + + '@oxlint-tsgolint/darwin-arm64@0.16.0': + resolution: {integrity: sha512-WQt5lGwRPJBw7q2KNR0mSPDAaMmZmVvDlEEti96xLO7ONhyomQc6fBZxxwZ4qTFedjJnrHX94sFelZ4OKzS7UQ==} + cpu: [arm64] + os: [darwin] + + '@oxlint-tsgolint/darwin-x64@0.16.0': + resolution: {integrity: sha512-VJo29XOzdkalvCTiE2v6FU3qZlgHaM8x8hUEVJGPU2i5W+FlocPpmn00+Ld2n7Q0pqIjyD5EyvZ5UmoIEJMfqg==} + cpu: [x64] + os: [darwin] + + '@oxlint-tsgolint/linux-arm64@0.16.0': + resolution: {integrity: sha512-MPfqRt1+XRHv9oHomcBMQ3KpTE+CSkZz14wUxDQoqTNdUlV0HWdzwIE9q65I3D9YyxEnqpM7j4qtDQ3apqVvbQ==} + cpu: [arm64] + os: [linux] + + '@oxlint-tsgolint/linux-x64@0.16.0': + resolution: {integrity: sha512-XQSwVUsnwLokMhe1TD6IjgvW5WMTPzOGGkdFDtXWQmlN2YeTw94s/NN0KgDrn2agM1WIgAenEkvnm0u7NgwEyw==} + cpu: [x64] + os: [linux] + + '@oxlint-tsgolint/win32-arm64@0.16.0': + resolution: {integrity: sha512-EWdlspQiiFGsP2AiCYdhg5dTYyAlj6y1nRyNI2dQWq4Q/LITFHiSRVPe+7m7K7lcsZCEz2icN/bCeSkZaORqIg==} + cpu: [arm64] + os: [win32] + + '@oxlint-tsgolint/win32-x64@0.16.0': + resolution: {integrity: sha512-1ufk8cgktXJuJZHKF63zCHAkaLMwZrEXnZ89H2y6NO85PtOXqu4zbdNl0VBpPP3fCUuUBu9RvNqMFiv0VsbXWA==} + cpu: [x64] + os: [win32] + + '@oxlint/binding-android-arm-eabi@1.55.0': + resolution: {integrity: sha512-NhvgAhncTSOhRahQSCnkK/4YIGPjTmhPurQQ2dwt2IvwCMTvZRW5vF2K10UBOxFve4GZDMw6LtXZdC2qeuYIVQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [android] + + '@oxlint/binding-android-arm64@1.55.0': + resolution: {integrity: sha512-P9iWRh+Ugqhg+D7rkc7boHX8o3H2h7YPcZHQIgvVBgnua5tk4LR2L+IBlreZs58/95cd2x3/004p5VsQM9z4SA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@oxlint/binding-darwin-arm64@1.55.0': + resolution: {integrity: sha512-esakkJIt7WFAhT30P/Qzn96ehFpzdZ1mNuzpOb8SCW7lI4oB8VsyQnkSHREM671jfpuBb/o2ppzBCx5l0jpgMA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@oxlint/binding-darwin-x64@1.55.0': + resolution: {integrity: sha512-xDMFRCCAEK9fOH6As2z8ELsC+VDGSFRHwIKVSilw+xhgLwTDFu37rtmRbmUlx8rRGS6cWKQPTc47AVxAZEVVPQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@oxlint/binding-freebsd-x64@1.55.0': + resolution: {integrity: sha512-mYZqnwUD7ALCRxGenyLd1uuG+rHCL+OTT6S8FcAbVm/ZT2AZMGjvibp3F6k1SKOb2aeqFATmwRykrE41Q0GWVw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@oxlint/binding-linux-arm-gnueabihf@1.55.0': + resolution: {integrity: sha512-LcX6RYcF9vL9ESGwJW3yyIZ/d/ouzdOKXxCdey1q0XJOW1asrHsIg5MmyKdEBR4plQx+shvYeQne7AzW5f3T1w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxlint/binding-linux-arm-musleabihf@1.55.0': + resolution: {integrity: sha512-C+8GS1rPtK+dI7mJFkqoRBkDuqbrNihnyYQsJPS9ez+8zF9JzfvU19lawqt4l/Y23o5uQswE/DORa8aiXUih3w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxlint/binding-linux-arm64-gnu@1.55.0': + resolution: {integrity: sha512-ErLE4XbmcCopA4/CIDiH6J1IAaDOMnf/KSx/aFObs4/OjAAM3sFKWGZ57pNOMxhhyBdcmcXwYymph9GwcpcqgQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@oxlint/binding-linux-arm64-musl@1.55.0': + resolution: {integrity: sha512-/kp65avi6zZfqEng56TTuhiy3P/3pgklKIdf38yvYeJ9/PgEeRA2A2AqKAKbZBNAqUzrzHhz9jF6j/PZvhJzTQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@oxlint/binding-linux-ppc64-gnu@1.55.0': + resolution: {integrity: sha512-A6pTdXwcEEwL/nmz0eUJ6WxmxcoIS+97GbH96gikAyre3s5deC7sts38ZVVowjS2QQFuSWkpA4ZmQC0jZSNvJQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@oxlint/binding-linux-riscv64-gnu@1.55.0': + resolution: {integrity: sha512-clj0lnIN+V52G9tdtZl0LbdTSurnZ1NZj92Je5X4lC7gP5jiCSW+Y/oiDiSauBAD4wrHt2S7nN3pA0zfKYK/6Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@oxlint/binding-linux-riscv64-musl@1.55.0': + resolution: {integrity: sha512-NNu08pllN5x/O94/sgR3DA8lbrGBnTHsINZZR0hcav1sj79ksTiKKm1mRzvZvacwQ0hUnGinFo+JO75ok2PxYg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + libc: [musl] + + '@oxlint/binding-linux-s390x-gnu@1.55.0': + resolution: {integrity: sha512-BvfQz3PRlWZRoEZ17dZCqgQsMRdpzGZomJkVATwCIGhHVVeHJMQdmdXPSjcT1DCNUrOjXnVyj1RGDj5+/Je2+Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@oxlint/binding-linux-x64-gnu@1.55.0': + resolution: {integrity: sha512-ngSOoFCSBMKVQd24H8zkbcBNc7EHhjnF1sv3mC9NNXQ/4rRjI/4Dj9+9XoDZeFEkF1SX1COSBXF1b2Pr9rqdEw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@oxlint/binding-linux-x64-musl@1.55.0': + resolution: {integrity: sha512-BDpP7W8GlaG7BR6QjGZAleYzxoyKc/D24spZIF2mB3XsfALQJJT/OBmP8YpeTb1rveFSBHzl8T7l0aqwkWNdGA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] + + '@oxlint/binding-openharmony-arm64@1.55.0': + resolution: {integrity: sha512-PS6GFvmde/pc3fCA2Srt51glr8Lcxhpf6WIBFfLphndjRrD34NEcses4TSxQrEcxYo6qVywGfylM0ZhSCF2gGA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@oxlint/binding-win32-arm64-msvc@1.55.0': + resolution: {integrity: sha512-P6JcLJGs/q1UOvDLzN8otd9JsH4tsuuPDv+p7aHqHM3PrKmYdmUvkNj4K327PTd35AYcznOCN+l4ZOaq76QzSw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@oxlint/binding-win32-ia32-msvc@1.55.0': + resolution: {integrity: sha512-gzkk4zE2zsE+WmRxFOiAZHpCpUNDFytEakqNXoNHW+PnYEOTPKDdW6nrzgSeTbGKVPXNAKQnRnMgrh7+n3Xueg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ia32] + os: [win32] + + '@oxlint/binding-win32-x64-msvc@1.55.0': + resolution: {integrity: sha512-ZFALNow2/og75gvYzNP7qe+rREQ5xunktwA+lgykoozHZ6hw9bqg4fn5j2UvG4gIn1FXqrZHkOAXuPf5+GOYTQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + '@pkgjs/parseargs@0.11.0': resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} - '@pkgr/core@0.2.9': - resolution: {integrity: sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==} - engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + '@polka/url@1.0.0-next.29': + resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==} '@rollup/rollup-android-arm-eabi@4.21.3': resolution: {integrity: sha512-MmKSfaB9GX+zXl6E8z4koOr/xU63AMVleLEa64v7R0QF/ZloMs5vcD1sHgM64GXXS1csaJutG+ddtzcueI/BLg==} @@ -1247,8 +1325,8 @@ packages: cpu: [arm] os: [android] - '@rollup/rollup-android-arm-eabi@4.55.1': - resolution: {integrity: sha512-9R0DM/ykwfGIlNu6+2U09ga0WXeZ9MRC2Ter8jnz8415VbuIykVuc6bhdrbORFZANDmTDvq26mJrEVTl8TdnDg==} + '@rollup/rollup-android-arm-eabi@4.59.0': + resolution: {integrity: sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg==} cpu: [arm] os: [android] @@ -1267,8 +1345,8 @@ packages: cpu: [arm64] os: [android] - '@rollup/rollup-android-arm64@4.55.1': - resolution: {integrity: sha512-eFZCb1YUqhTysgW3sj/55du5cG57S7UTNtdMjCW7LwVcj3dTTcowCsC8p7uBdzKsZYa8J7IDE8lhMI+HX1vQvg==} + '@rollup/rollup-android-arm64@4.59.0': + resolution: {integrity: sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q==} cpu: [arm64] os: [android] @@ -1287,8 +1365,8 @@ packages: cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-arm64@4.55.1': - resolution: {integrity: sha512-p3grE2PHcQm2e8PSGZdzIhCKbMCw/xi9XvMPErPhwO17vxtvCN5FEA2mSLgmKlCjHGMQTP6phuQTYWUnKewwGg==} + '@rollup/rollup-darwin-arm64@4.59.0': + resolution: {integrity: sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==} cpu: [arm64] os: [darwin] @@ -1307,8 +1385,8 @@ packages: cpu: [x64] os: [darwin] - '@rollup/rollup-darwin-x64@4.55.1': - resolution: {integrity: sha512-rDUjG25C9qoTm+e02Esi+aqTKSBYwVTaoS1wxcN47/Luqef57Vgp96xNANwt5npq9GDxsH7kXxNkJVEsWEOEaQ==} + '@rollup/rollup-darwin-x64@4.59.0': + resolution: {integrity: sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==} cpu: [x64] os: [darwin] @@ -1317,8 +1395,8 @@ packages: cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-arm64@4.55.1': - resolution: {integrity: sha512-+JiU7Jbp5cdxekIgdte0jfcu5oqw4GCKr6i3PJTlXTCU5H5Fvtkpbs4XJHRmWNXF+hKmn4v7ogI5OQPaupJgOg==} + '@rollup/rollup-freebsd-arm64@4.59.0': + resolution: {integrity: sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==} cpu: [arm64] os: [freebsd] @@ -1327,8 +1405,8 @@ packages: cpu: [x64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.55.1': - resolution: {integrity: sha512-V5xC1tOVWtLLmr3YUk2f6EJK4qksksOYiz/TCsFHu/R+woubcLWdC9nZQmwjOAbmExBIVKsm1/wKmEy4z4u4Bw==} + '@rollup/rollup-freebsd-x64@4.59.0': + resolution: {integrity: sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==} cpu: [x64] os: [freebsd] @@ -1349,8 +1427,8 @@ packages: cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-gnueabihf@4.55.1': - resolution: {integrity: sha512-Rn3n+FUk2J5VWx+ywrG/HGPTD9jXNbicRtTM11e/uorplArnXZYsVifnPPqNNP5BsO3roI4n8332ukpY/zN7rQ==} + '@rollup/rollup-linux-arm-gnueabihf@4.59.0': + resolution: {integrity: sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==} cpu: [arm] os: [linux] libc: [glibc] @@ -1367,8 +1445,8 @@ packages: os: [linux] libc: [musl] - '@rollup/rollup-linux-arm-musleabihf@4.55.1': - resolution: {integrity: sha512-grPNWydeKtc1aEdrJDWk4opD7nFtQbMmV7769hiAaYyUKCT1faPRm2av8CX1YJsZ4TLAZcg9gTR1KvEzoLjXkg==} + '@rollup/rollup-linux-arm-musleabihf@4.59.0': + resolution: {integrity: sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==} cpu: [arm] os: [linux] libc: [musl] @@ -1391,8 +1469,8 @@ packages: os: [linux] libc: [glibc] - '@rollup/rollup-linux-arm64-gnu@4.55.1': - resolution: {integrity: sha512-a59mwd1k6x8tXKcUxSyISiquLwB5pX+fJW9TkWU46lCqD/GRDe9uDN31jrMmVP3feI3mhAdvcCClhV8V5MhJFQ==} + '@rollup/rollup-linux-arm64-gnu@4.59.0': + resolution: {integrity: sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==} cpu: [arm64] os: [linux] libc: [glibc] @@ -1415,20 +1493,20 @@ packages: os: [linux] libc: [musl] - '@rollup/rollup-linux-arm64-musl@4.55.1': - resolution: {integrity: sha512-puS1MEgWX5GsHSoiAsF0TYrpomdvkaXm0CofIMG5uVkP6IBV+ZO9xhC5YEN49nsgYo1DuuMquF9+7EDBVYu4uA==} + '@rollup/rollup-linux-arm64-musl@4.59.0': + resolution: {integrity: sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA==} cpu: [arm64] os: [linux] libc: [musl] - '@rollup/rollup-linux-loong64-gnu@4.55.1': - resolution: {integrity: sha512-r3Wv40in+lTsULSb6nnoudVbARdOwb2u5fpeoOAZjFLznp6tDU8kd+GTHmJoqZ9lt6/Sys33KdIHUaQihFcu7g==} + '@rollup/rollup-linux-loong64-gnu@4.59.0': + resolution: {integrity: sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg==} cpu: [loong64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-loong64-musl@4.55.1': - resolution: {integrity: sha512-MR8c0+UxAlB22Fq4R+aQSPBayvYa3+9DrwG/i1TKQXFYEaoW3B5b/rkSRIypcZDdWjWnpcvxbNaAJDcSbJU3Lw==} + '@rollup/rollup-linux-loong64-musl@4.59.0': + resolution: {integrity: sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q==} cpu: [loong64] os: [linux] libc: [musl] @@ -1451,14 +1529,14 @@ packages: os: [linux] libc: [glibc] - '@rollup/rollup-linux-ppc64-gnu@4.55.1': - resolution: {integrity: sha512-3KhoECe1BRlSYpMTeVrD4sh2Pw2xgt4jzNSZIIPLFEsnQn9gAnZagW9+VqDqAHgm1Xc77LzJOo2LdigS5qZ+gw==} + '@rollup/rollup-linux-ppc64-gnu@4.59.0': + resolution: {integrity: sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA==} cpu: [ppc64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-ppc64-musl@4.55.1': - resolution: {integrity: sha512-ziR1OuZx0vdYZZ30vueNZTg73alF59DicYrPViG0NEgDVN8/Jl87zkAPu4u6VjZST2llgEUjaiNl9JM6HH1Vdw==} + '@rollup/rollup-linux-ppc64-musl@4.59.0': + resolution: {integrity: sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA==} cpu: [ppc64] os: [linux] libc: [musl] @@ -1475,8 +1553,8 @@ packages: os: [linux] libc: [glibc] - '@rollup/rollup-linux-riscv64-gnu@4.55.1': - resolution: {integrity: sha512-uW0Y12ih2XJRERZ4jAfKamTyIHVMPQnTZcQjme2HMVDAHY4amf5u414OqNYC+x+LzRdRcnIG1YodLrrtA8xsxw==} + '@rollup/rollup-linux-riscv64-gnu@4.59.0': + resolution: {integrity: sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==} cpu: [riscv64] os: [linux] libc: [glibc] @@ -1487,8 +1565,8 @@ packages: os: [linux] libc: [musl] - '@rollup/rollup-linux-riscv64-musl@4.55.1': - resolution: {integrity: sha512-u9yZ0jUkOED1BFrqu3BwMQoixvGHGZ+JhJNkNKY/hyoEgOwlqKb62qu+7UjbPSHYjiVy8kKJHvXKv5coH4wDeg==} + '@rollup/rollup-linux-riscv64-musl@4.59.0': + resolution: {integrity: sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==} cpu: [riscv64] os: [linux] libc: [musl] @@ -1505,8 +1583,8 @@ packages: os: [linux] libc: [glibc] - '@rollup/rollup-linux-s390x-gnu@4.55.1': - resolution: {integrity: sha512-/0PenBCmqM4ZUd0190j7J0UsQ/1nsi735iPRakO8iPciE7BQ495Y6msPzaOmvx0/pn+eJVVlZrNrSh4WSYLxNg==} + '@rollup/rollup-linux-s390x-gnu@4.59.0': + resolution: {integrity: sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==} cpu: [s390x] os: [linux] libc: [glibc] @@ -1529,8 +1607,8 @@ packages: os: [linux] libc: [glibc] - '@rollup/rollup-linux-x64-gnu@4.55.1': - resolution: {integrity: sha512-a8G4wiQxQG2BAvo+gU6XrReRRqj+pLS2NGXKm8io19goR+K8lw269eTrPkSdDTALwMmJp4th2Uh0D8J9bEV1vg==} + '@rollup/rollup-linux-x64-gnu@4.59.0': + resolution: {integrity: sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==} cpu: [x64] os: [linux] libc: [glibc] @@ -1553,19 +1631,19 @@ packages: os: [linux] libc: [musl] - '@rollup/rollup-linux-x64-musl@4.55.1': - resolution: {integrity: sha512-bD+zjpFrMpP/hqkfEcnjXWHMw5BIghGisOKPj+2NaNDuVT+8Ds4mPf3XcPHuat1tz89WRL+1wbcxKY3WSbiT7w==} + '@rollup/rollup-linux-x64-musl@4.59.0': + resolution: {integrity: sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg==} cpu: [x64] os: [linux] libc: [musl] - '@rollup/rollup-openbsd-x64@4.55.1': - resolution: {integrity: sha512-eLXw0dOiqE4QmvikfQ6yjgkg/xDM+MdU9YJuP4ySTibXU0oAvnEWXt7UDJmD4UkYialMfOGFPJnIHSe/kdzPxg==} + '@rollup/rollup-openbsd-x64@4.59.0': + resolution: {integrity: sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ==} cpu: [x64] os: [openbsd] - '@rollup/rollup-openharmony-arm64@4.55.1': - resolution: {integrity: sha512-xzm44KgEP11te3S2HCSyYf5zIzWmx3n8HDCc7EE59+lTcswEWNpvMLfd9uJvVX8LCg9QWG67Xt75AuHn4vgsXw==} + '@rollup/rollup-openharmony-arm64@4.59.0': + resolution: {integrity: sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA==} cpu: [arm64] os: [openharmony] @@ -1584,8 +1662,8 @@ packages: cpu: [arm64] os: [win32] - '@rollup/rollup-win32-arm64-msvc@4.55.1': - resolution: {integrity: sha512-yR6Bl3tMC/gBok5cz/Qi0xYnVbIxGx5Fcf/ca0eB6/6JwOY+SRUcJfI0OpeTpPls7f194as62thCt/2BjxYN8g==} + '@rollup/rollup-win32-arm64-msvc@4.59.0': + resolution: {integrity: sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A==} cpu: [arm64] os: [win32] @@ -1604,13 +1682,13 @@ packages: cpu: [ia32] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.55.1': - resolution: {integrity: sha512-3fZBidchE0eY0oFZBnekYCfg+5wAB0mbpCBuofh5mZuzIU/4jIVkbESmd2dOsFNS78b53CYv3OAtwqkZZmU5nA==} + '@rollup/rollup-win32-ia32-msvc@4.59.0': + resolution: {integrity: sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-gnu@4.55.1': - resolution: {integrity: sha512-xGGY5pXj69IxKb4yv/POoocPy/qmEGhimy/FoTpTSVju3FYXUQQMFCaZZXJVidsmGxRioZAwpThl/4zX41gRKg==} + '@rollup/rollup-win32-x64-gnu@4.59.0': + resolution: {integrity: sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA==} cpu: [x64] os: [win32] @@ -1629,8 +1707,8 @@ packages: cpu: [x64] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.55.1': - resolution: {integrity: sha512-SPEpaL6DX4rmcXtnhdrQYgzQ5W2uW3SCJch88lB2zImhJRhIIK44fkUrgIV/Q8yUNfw5oyZ5vkeQsZLhCb06lw==} + '@rollup/rollup-win32-x64-msvc@4.59.0': + resolution: {integrity: sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA==} cpu: [x64] os: [win32] @@ -1674,9 +1752,6 @@ packages: '@types/deep-eql@4.0.2': resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} - '@types/eslint@9.6.1': - resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} - '@types/estree@1.0.5': resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} @@ -1698,102 +1773,6 @@ packages: '@types/wicg-file-system-access@2023.10.7': resolution: {integrity: sha512-g49ijasEJvCd7ifmAY2D0wdEtt1xRjBbA33PJTiv8mKBr7DoMsPeISoJ8oQOTopSRi+FBWPpPW5ouDj2QPKtGA==} - '@typescript-eslint/eslint-plugin@8.57.0': - resolution: {integrity: sha512-qeu4rTHR3/IaFORbD16gmjq9+rEs9fGKdX0kF6BKSfi+gCuG3RCKLlSBYzn/bGsY9Tj7KE/DAQStbp8AHJGHEQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - '@typescript-eslint/parser': ^8.57.0 - eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/parser@8.57.0': - resolution: {integrity: sha512-XZzOmihLIr8AD1b9hL9ccNMzEMWt/dE2u7NyTY9jJG6YNiNthaD5XtUHVF2uCXZ15ng+z2hT3MVuxnUYhq6k1g==} - 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-eslint/project-service@8.53.0': - resolution: {integrity: sha512-Bl6Gdr7NqkqIP5yP9z1JU///Nmes4Eose6L1HwpuVHwScgDPPuEWbUVhvlZmb8hy0vX9syLk5EGNL700WcBlbg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/project-service@8.57.0': - resolution: {integrity: sha512-pR+dK0BlxCLxtWfaKQWtYr7MhKmzqZxuii+ZjuFlZlIGRZm22HnXFqa2eY+90MUz8/i80YJmzFGDUsi8dMOV5w==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/scope-manager@8.53.0': - resolution: {integrity: sha512-kWNj3l01eOGSdVBnfAF2K1BTh06WS0Yet6JUgb9Cmkqaz3Jlu0fdVUjj9UI8gPidBWSMqDIglmEXifSgDT/D0g==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/scope-manager@8.57.0': - resolution: {integrity: sha512-nvExQqAHF01lUM66MskSaZulpPL5pgy5hI5RfrxviLgzZVffB5yYzw27uK/ft8QnKXI2X0LBrHJFr1TaZtAibw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/tsconfig-utils@8.53.0': - resolution: {integrity: sha512-K6Sc0R5GIG6dNoPdOooQ+KtvT5KCKAvTcY8h2rIuul19vxH5OTQk7ArKkd4yTzkw66WnNY0kPPzzcmWA+XRmiA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/tsconfig-utils@8.57.0': - resolution: {integrity: sha512-LtXRihc5ytjJIQEH+xqjB0+YgsV4/tW35XKX3GTZHpWtcC8SPkT/d4tqdf1cKtesryHm2bgp6l555NYcT2NLvA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/type-utils@8.57.0': - resolution: {integrity: sha512-yjgh7gmDcJ1+TcEg8x3uWQmn8ifvSupnPfjP21twPKrDP/pTHlEQgmKcitzF/rzPSmv7QjJ90vRpN4U+zoUjwQ==} - 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-eslint/types@8.53.0': - resolution: {integrity: sha512-Bmh9KX31Vlxa13+PqPvt4RzKRN1XORYSLlAE+sO1i28NkisGbTtSLFVB3l7PWdHtR3E0mVMuC7JilWJ99m2HxQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/types@8.57.0': - resolution: {integrity: sha512-dTLI8PEXhjUC7B9Kre+u0XznO696BhXcTlOn0/6kf1fHaQW8+VjJAVHJ3eTI14ZapTxdkOmc80HblPQLaEeJdg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/typescript-estree@8.53.0': - resolution: {integrity: sha512-pw0c0Gdo7Z4xOG987u3nJ8akL9093yEEKv8QTJ+Bhkghj1xyj8cgPaavlr9rq8h7+s6plUJ4QJYw2gCZodqmGw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/typescript-estree@8.57.0': - resolution: {integrity: sha512-m7faHcyVg0BT3VdYTlX8GdJEM7COexXxS6KqGopxdtkQRvBanK377QDHr4W/vIPAR+ah9+B/RclSW5ldVniO1Q==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/utils@8.53.0': - resolution: {integrity: sha512-XDY4mXTez3Z1iRDI5mbRhH4DFSt46oaIFsLg+Zn97+sYrXACziXSQcSelMybnVZ5pa1P6xYkPr5cMJyunM1ZDA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/utils@8.57.0': - resolution: {integrity: sha512-5iIHvpD3CZe06riAsbNxxreP+MuYgVUsV0n4bwLH//VJmgtt54sQeY2GszntJ4BjYCpMzrfVh2SBnUQTtys2lQ==} - 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-eslint/visitor-keys@8.53.0': - resolution: {integrity: sha512-LZ2NqIHFhvFwxG0qZeLL9DvdNAHPGCY5dIRwBhyYeU+LfLhcStE1ImjsuTG/WaVh3XysGaeLW8Rqq7cGkPCFvw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/visitor-keys@8.57.0': - resolution: {integrity: sha512-zm6xx8UT/Xy2oSr2ZXD0pZo7Jx2XsCoID2IUh9YSTFRu7z+WdwYTRk6LhUftm1crwqbuoF6I8zAFeCMw0YjwDg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typeslayer/darwin-arm64@0.1.31': resolution: {integrity: sha512-59HGe8aXVFEEHvikShJio583dLR+Fqets2lnCUjsDsHBG+WRVATc7THkahB8LghY2y8s5liaBofhlOrRb/1kzg==} cpu: [arm64] @@ -1812,34 +1791,128 @@ packages: os: [win32] hasBin: true - '@vitest/expect@4.1.0': - resolution: {integrity: sha512-EIxG7k4wlWweuCLG9Y5InKFwpMEOyrMb6ZJ1ihYu02LVj/bzUwn2VMU+13PinsjRW75XnITeFrQBMH5+dLvCDA==} - - '@vitest/mocker@4.1.0': - resolution: {integrity: sha512-evxREh+Hork43+Y4IOhTo+h5lGmVRyjqI739Rz4RlUPqwrkFFDF6EMvOOYjTx4E8Tl6gyCLRL8Mu7Ry12a13Tw==} + '@voidzero-dev/vite-plus-core@0.1.11': + resolution: {integrity: sha512-feyYRSg3u8acYNC1fF4EGfgYZm2efZB8YWTjz4NrU0Ulhlni1C6COMwHSDVpu9F4Jh+WcSsBWL3ZC1WvLa7jCw==} + engines: {node: ^20.19.0 || >=22.12.0} peerDependencies: - msw: ^2.4.9 - vite: ^6.0.0 || ^7.0.0 || ^8.0.0-0 + '@arethetypeswrong/core': ^0.18.1 + '@tsdown/css': 0.21.2 + '@tsdown/exe': 0.21.2 + '@types/node': ^20.19.0 || >=22.12.0 + '@vitejs/devtools': ^0.0.0-alpha.31 + esbuild: ^0.27.0 + jiti: '>=1.21.0' + less: ^4.0.0 + publint: ^0.3.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: '>=0.54.8' + sugarss: ^5.0.0 + terser: ^5.16.0 + tsx: ^4.8.1 + typescript: ^5.0.0 + unplugin-unused: ^0.5.0 + yaml: ^2.4.2 peerDependenciesMeta: - msw: + '@arethetypeswrong/core': optional: true - vite: + '@tsdown/css': + optional: true + '@tsdown/exe': + optional: true + '@types/node': + optional: true + '@vitejs/devtools': + optional: true + esbuild: + optional: true + jiti: optional: true + less: + optional: true + publint: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + typescript: + optional: true + unplugin-unused: + optional: true + yaml: + optional: true + + '@voidzero-dev/vite-plus-darwin-arm64@0.1.11': + resolution: {integrity: sha512-ENokEkMhDMJ9nM/tUDAXvtah/P3cAnEbkeKCCxJgFvTTGnGM8eBvP2qpJeTrfhy9ndIWihcsfMufszinLsfhUg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] - '@vitest/pretty-format@4.1.0': - resolution: {integrity: sha512-3RZLZlh88Ib0J7NQTRATfc/3ZPOnSUn2uDBUoGNn5T36+bALixmzphN26OUD3LRXWkJu4H0s5vvUeqBiw+kS0A==} + '@voidzero-dev/vite-plus-darwin-x64@0.1.11': + resolution: {integrity: sha512-gOSGYtXq5qigDsiW+oCrefv4K8WUSnZ5vH+kPHDvpsMXlqxR0rY6xrJgkJ2tCkWdCig8YHVDascSV/cj4nGwsw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@voidzero-dev/vite-plus-linux-arm64-gnu@0.1.11': + resolution: {integrity: sha512-aDVe1vvhtXBqZdmCiCSm3DUl5/O+x5CeAcjPPTLSsEX79cSfvkD0UU26lQ8eX+pr3xVDEocJTtTLmOMVImGlyA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] - '@vitest/runner@4.1.0': - resolution: {integrity: sha512-Duvx2OzQ7d6OjchL+trw+aSrb9idh7pnNfxrklo14p3zmNL4qPCDeIJAK+eBKYjkIwG96Bc6vYuxhqDXQOWpoQ==} + '@voidzero-dev/vite-plus-linux-x64-gnu@0.1.11': + resolution: {integrity: sha512-rkaKCGq/CFML2M7c0ixUOuhE6qi961x84/ZFQhkUy2MJw3RP7R/M1BDyWr2qEq20SgRWLkffcWMni3P2JnmrBw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] - '@vitest/snapshot@4.1.0': - resolution: {integrity: sha512-0Vy9euT1kgsnj1CHttwi9i9o+4rRLEaPRSOJ5gyv579GJkNpgJK+B4HSv/rAWixx2wdAFci1X4CEPjiu2bXIMg==} + '@voidzero-dev/vite-plus-test@0.1.11': + resolution: {integrity: sha512-3kBfi/LyPOGnLCmvYtgM5GZVAyiJiYjgdm9Fu9WLLl56zcSljj0TBG19eaKY6v/j2VJ+7o80n/A/MPz46lzMFA==} + engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} + peerDependencies: + '@edge-runtime/vm': '*' + '@opentelemetry/api': ^1.9.0 + '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 + '@vitest/ui': 4.1.0 + happy-dom: '*' + jsdom: '*' + vite: ^6.0.0 || ^7.0.0 || ^8.0.0-0 + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@opentelemetry/api': + optional: true + '@types/node': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true - '@vitest/spy@4.1.0': - resolution: {integrity: sha512-pz77k+PgNpyMDv2FV6qmk5ZVau6c3R8HC8v342T2xlFxQKTrSeYw9waIJG8KgV9fFwAtTu4ceRzMivPTH6wSxw==} + '@voidzero-dev/vite-plus-win32-arm64-msvc@0.1.11': + resolution: {integrity: sha512-MerozzH8QYY+V5l6ZQq+vrtx75rnPlmc+TauH5hL08oEWx7ScwfrNKyamnv5rg7HWBx/ryuaYaJCjODOu7MjSg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] - '@vitest/utils@4.1.0': - resolution: {integrity: sha512-XfPXT6a8TZY3dcGY8EdwsBulFCIw+BeeX0RZn2x/BtiY/75YGh8FeWGG8QISN/WhaqSrE2OrlDgtF8q5uhOTmw==} + '@voidzero-dev/vite-plus-win32-x64-msvc@0.1.11': + resolution: {integrity: sha512-ubGlfvkfWT4Eivg3O2lxMyA6h7u1XZm4XdW3MUZIXXd9Q/iIRVJdSsEg78C/OZ3e8Qofszsro6P8ZrQo8ROQxg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} @@ -1915,10 +1988,6 @@ packages: resolution: {integrity: sha512-1pHv8LX9CpKut1Zp4EXey7Z8OfH11ONNH6Dhi2WDUt31VVZFXZzKwXcysBgqSumFCmR+0dqjMK5v5JiFHzi0+g==} engines: {node: 20 || >=22} - balanced-match@4.0.4: - resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} - engines: {node: 18 || 20 || >=22} - base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} @@ -1948,10 +2017,6 @@ packages: resolution: {integrity: sha512-Pdk8c9poy+YhOgVWw1JNN22/HcivgKWwpxKq04M/jTmHyCZn12WPJebZxdjSa5TmBqISrUSgNYU3eRORljfCCw==} engines: {node: 20 || >=22} - brace-expansion@5.0.4: - resolution: {integrity: sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==} - engines: {node: 18 || 20 || >=22} - braces@3.0.2: resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} engines: {node: '>=8'} @@ -2010,10 +2075,6 @@ packages: resolution: {integrity: sha512-ej1sPFR5+0YWtaVp6S1N1FVz69TQCqmrkGeRvQxZeAB1nAIcjNTHVwrZtYtWFFBmQsF40/uDLehsW5KuYC99mg==} engines: {node: ^18.12.0 || >= 20.9.0} - chai@6.2.2: - resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==} - engines: {node: '>=18'} - chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} @@ -2118,9 +2179,6 @@ packages: resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} engines: {node: ^14.18.0 || >=16.10.0} - convert-source-map@2.0.0: - resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} @@ -2231,8 +2289,8 @@ packages: resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} engines: {node: '>=18'} - es-module-lexer@2.0.0: - resolution: {integrity: sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==} + es-module-lexer@1.7.0: + resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} esbuild@0.19.7: resolution: {integrity: sha512-6brbTZVqxhqgbpqBR5MzErImcpA0SQdoKOkcWK/U30HtQxnokIpG3TX2r0IJqbFUzqLjhU/zC1S5ndgakObVCQ==} @@ -2244,13 +2302,8 @@ packages: engines: {node: '>=18'} hasBin: true - esbuild@0.27.1: - resolution: {integrity: sha512-yY35KZckJJuVVPXpvjgxiCuVEJT67F6zDeVTv4rizyPrfGBUpZQsvmxnN+C371c2esD/hNMjj4tpBhuueLN7aA==} - engines: {node: '>=18'} - hasBin: true - - esbuild@0.27.2: - resolution: {integrity: sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==} + esbuild@0.27.4: + resolution: {integrity: sha512-Rq4vbHnYkK5fws5NF7MYTU68FPRE1ajX7heQ/8QXXWqNgqqJ/GkmmyxIzUnf2Sr/bakf8l54716CcMGHYhMrrQ==} engines: {node: '>=18'} hasBin: true @@ -2262,31 +2315,11 @@ packages: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} - eslint-config-prettier@10.1.8: - resolution: {integrity: sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==} - hasBin: true - peerDependencies: - eslint: '>=7.0.0' - eslint-plugin-depend@1.5.0: resolution: {integrity: sha512-i3UeLYmclf1Icp35+6W7CR4Bp2PIpDgBuf/mpmXK5UeLkZlvYJ21VuQKKHHAIBKRTPivPGX/gZl5JGno1o9Y0A==} peerDependencies: eslint: '>=8.40.0' - eslint-plugin-prettier@5.5.5: - resolution: {integrity: sha512-hscXkbqUZ2sPithAuLm5MXL+Wph+U7wHngPBv9OMWwlP8iaflyxpjTYZkmdgB4/vPIhemRlBEoLrH7UC1n7aUw==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - '@types/eslint': '>=8.0.0' - eslint: '>=8.0.0' - eslint-config-prettier: '>= 7.0.0 <10.0.0 || >=10.1.0' - prettier: '>=3.0.0' - peerDependenciesMeta: - '@types/eslint': - optional: true - eslint-config-prettier: - optional: true - eslint-scope@8.4.0: resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -2299,10 +2332,6 @@ packages: resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint-visitor-keys@5.0.1: - resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} - engines: {node: ^20.19.0 || ^22.13.0 || >=24} - eslint@9.39.4: resolution: {integrity: sha512-XoMjdBOwe/esVgEvLmNsD3IRHkm7fbKIUGvrleloJXUZgDHig2IPWNniv+GwjyJXzuNqVjlr5+4yVUZjycJwfQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -2317,8 +2346,8 @@ packages: resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - esquery@1.6.0: - resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} + esquery@1.7.0: + resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==} engines: {node: '>=0.10'} esrecurse@4.3.0: @@ -2329,9 +2358,6 @@ packages: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} - estree-walker@3.0.3: - resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} - esutils@2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} @@ -2347,19 +2373,12 @@ packages: resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} engines: {node: '>=6'} - expect-type@1.3.0: - resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} - engines: {node: '>=12.0.0'} - exsolve@1.0.8: resolution: {integrity: sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==} fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - fast-diff@1.3.0: - resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} - fast-glob@3.3.3: resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} engines: {node: '>=8.6.0'} @@ -2434,8 +2453,8 @@ packages: resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} engines: {node: '>=16'} - flatted@3.3.3: - resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} + flatted@3.4.1: + resolution: {integrity: sha512-IxfVbRFVlV8V/yRaGzk0UVIcsKKHMSfYw66T/u4nTwlWteQePsxe//LjudR1AMX4tZW3WFCh3Zqa/sjlqpbURQ==} foreground-child@3.1.1: resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} @@ -2544,10 +2563,6 @@ packages: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} - ignore@7.0.5: - resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} - engines: {node: '>= 4'} - immediate@3.0.6: resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} @@ -2641,21 +2656,95 @@ packages: just-safe-get@4.2.0: resolution: {integrity: sha512-+tS4Bvgr/FnmYxOGbwziJ8I2BFk+cP1gQHm6rm7zo61w1SbxBwWGEq/Ryy9Gb6bvnloPq6pz7Bmm4a0rjTNlXA==} - just-safe-set@4.2.1: - resolution: {integrity: sha512-La5CP41Ycv52+E4g7w1sRV8XXk7Sp8a/TwWQAYQKn6RsQz1FD4Z/rDRRmqV3wJznS1MDF3YxK7BCudX1J8FxLg==} + just-safe-set@4.2.1: + resolution: {integrity: sha512-La5CP41Ycv52+E4g7w1sRV8XXk7Sp8a/TwWQAYQKn6RsQz1FD4Z/rDRRmqV3wJznS1MDF3YxK7BCudX1J8FxLg==} + + just-shuffle@4.2.0: + resolution: {integrity: sha512-/dDmNseAWLf3XkFY9xf3/BdQoiy27LNUy/7uG4zdSAX526nIHMYPYeJ4pN4lT1/pgNEX8XCXPtUB6gJqTpBEng==} + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + lie@3.3.0: + resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==} + + lightningcss-android-arm64@1.32.0: + resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [android] + + lightningcss-darwin-arm64@1.32.0: + resolution: {integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + + lightningcss-darwin-x64@1.32.0: + resolution: {integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + + lightningcss-freebsd-x64@1.32.0: + resolution: {integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + + lightningcss-linux-arm-gnueabihf@1.32.0: + resolution: {integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + + lightningcss-linux-arm64-gnu@1.32.0: + resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + lightningcss-linux-arm64-musl@1.32.0: + resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [musl] - just-shuffle@4.2.0: - resolution: {integrity: sha512-/dDmNseAWLf3XkFY9xf3/BdQoiy27LNUy/7uG4zdSAX526nIHMYPYeJ4pN4lT1/pgNEX8XCXPtUB6gJqTpBEng==} + lightningcss-linux-x64-gnu@1.32.0: + resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [glibc] - keyv@4.5.4: - resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + lightningcss-linux-x64-musl@1.32.0: + resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [musl] - levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} + lightningcss-win32-arm64-msvc@1.32.0: + resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [win32] - lie@3.3.0: - resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==} + lightningcss-win32-x64-msvc@1.32.0: + resolution: {integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] + + lightningcss@1.32.0: + resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==} + engines: {node: '>= 12.0.0'} lilconfig@3.0.0: resolution: {integrity: sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==} @@ -2699,9 +2788,6 @@ packages: magic-string@0.30.17: resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} - magic-string@0.30.21: - resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} - marked-terminal@7.3.0: resolution: {integrity: sha512-t4rBvPsHc57uE/2nJOLmMbZCQ4tgAccAED3ngXQqW6g+TxA488JzJ+FK3lQkzBQOI1mRV/r/Kq+1ZlJ4D0owQw==} engines: {node: '>=16.0.0'} @@ -2736,10 +2822,6 @@ packages: resolution: {integrity: sha512-+G4CpNBxa5MprY+04MbgOw1v7So6n5JY166pFi9KfYwT78fxScCeSNQSNzp6dpPSW2rONOps6Ocam1wFhCgoVw==} engines: {node: 18 || 20 || >=22} - minimatch@10.2.4: - resolution: {integrity: sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==} - engines: {node: 18 || 20 || >=22} - minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} @@ -2780,6 +2862,10 @@ packages: module-replacements@2.11.0: resolution: {integrity: sha512-j5sNQm3VCpQQ7nTqGeOZtoJtV3uKERgCBm9QRhmGRiXiqkf7iRFOkfxdJRZWLkqYY8PNf4cDQF/WfXUYLENrRA==} + mrmime@2.0.1: + resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==} + engines: {node: '>=10'} + ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} @@ -2853,6 +2939,25 @@ packages: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} + oxfmt@0.40.0: + resolution: {integrity: sha512-g0C3I7xUj4b4DcagevM9kgH6+pUHytikxUcn3/VUkvzTNaaXBeyZqb7IBsHwojeXm4mTBEC/aBjBTMVUkZwWUQ==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + + oxlint-tsgolint@0.16.0: + resolution: {integrity: sha512-4RuJK2jP08XwqtUu+5yhCbxEauCm6tv2MFHKEMsjbosK2+vy5us82oI3VLuHwbNyZG7ekZA26U2LLHnGR4frIA==} + hasBin: true + + oxlint@1.55.0: + resolution: {integrity: sha512-T+FjepiyWpaZMhekqRpH8Z3I4vNM610p6w+Vjfqgj5TZUxHXl7N8N5IPvmOU8U4XdTRxqtNNTh9Y4hLtr7yvFg==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + oxlint-tsgolint: '>=0.15.0' + peerDependenciesMeta: + oxlint-tsgolint: + optional: true + p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} @@ -2948,6 +3053,10 @@ packages: resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} engines: {node: '>= 6'} + pixelmatch@7.1.0: + resolution: {integrity: sha512-1wrVzJ2STrpmONHKBy228LM1b84msXDUoAzVEl0R8Mz4Ce6EPr+IVtxm8+yvrqLYMHswREkjYFaMxnyGnaY3Ng==} + hasBin: true + pkg-types@1.3.1: resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} @@ -2957,6 +3066,10 @@ packages: platform@1.3.6: resolution: {integrity: sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg==} + pngjs@7.0.0: + resolution: {integrity: sha512-LKWqWJRhstyYo9pGvgor/ivk2w94eSjE3RGVuzLGlr3NmD8bf7RcYGze1mNdEHRP6TRP6rMuDHk5t44hnTRyow==} + engines: {node: '>=14.19.0'} + postcss-load-config@4.0.2: resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} engines: {node: '>= 14'} @@ -2991,6 +3104,10 @@ packages: resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} engines: {node: ^10 || ^12 || >=14} + postcss@8.5.8: + resolution: {integrity: sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==} + engines: {node: ^10 || ^12 || >=14} + prebuild-install@7.1.3: resolution: {integrity: sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==} engines: {node: '>=10'} @@ -3000,15 +3117,6 @@ packages: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} - prettier-linter-helpers@1.0.1: - resolution: {integrity: sha512-SxToR7P8Y2lWmv/kTzVLC1t/GDI2WGjMwNhLLE9qtH8Q13C+aEmuRlzDst4Up4s0Wc8sF2M+J57iB3cMLqftfg==} - engines: {node: '>=6.0.0'} - - prettier@3.8.1: - resolution: {integrity: sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==} - engines: {node: '>=14'} - hasBin: true - process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} @@ -3094,8 +3202,8 @@ packages: engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true - rollup@4.55.1: - resolution: {integrity: sha512-wDv/Ht1BNHB4upNbK74s9usvl7hObDnvVzknxqY/E/O3X6rW1U1rV1aENEfJ54eFZDTNo7zv1f5N4edCluH7+A==} + rollup@4.59.0: + resolution: {integrity: sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -3140,9 +3248,6 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - siginfo@2.0.0: - resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} - signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} @@ -3160,6 +3265,10 @@ packages: resolution: {integrity: sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==} engines: {node: '>=10'} + sirv@3.0.2: + resolution: {integrity: sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==} + engines: {node: '>=18'} + skin-tone@2.0.0: resolution: {integrity: sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA==} engines: {node: '>=8'} @@ -3181,9 +3290,6 @@ packages: engines: {node: '>= 8'} deprecated: The work that was done in this beta branch won't be included in future versions - stackback@0.0.2: - resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} - std-env@4.0.0: resolution: {integrity: sha512-zUMPtQ/HBY3/50VbpkupYHbRroTRZJPRLvreamgErJVys0ceuzMkD44J/QjqhHjOzK42GQ3QZIeFG1OYfOtKqQ==} @@ -3243,10 +3349,6 @@ packages: resolution: {integrity: sha512-zFObLMyZeEwzAoKCyu1B91U79K2t7ApXuQfo8OuxwXLDgcKxuwM+YvcbIhm6QWqz7mHUH1TVytR1PwVVjEuMig==} engines: {node: '>=14.18'} - synckit@0.11.12: - resolution: {integrity: sha512-Bh7QjT8/SuKUIfObSXNHNSK6WHo6J1tHCqJsuaFDP7gP0fkzSfTxI8y85JrppZ0h8l0maIgc2tfuZQ6/t3GtnQ==} - engines: {node: ^14.18.0 || >=16.0.0} - tagged-tag@1.0.0: resolution: {integrity: sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==} engines: {node: '>=20'} @@ -3294,14 +3396,18 @@ packages: resolution: {integrity: sha512-NbBoFBpqfcgd1tCiO8Lkfdk+xrA7mlLR9zgvZcZWQQwU63XAfUePyd6wZBaU93Hqw347lHnwFzttAkemHzzz4g==} engines: {node: '>=12.0.0'} - tinyrainbow@3.1.0: - resolution: {integrity: sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==} - engines: {node: '>=14.0.0'} + tinypool@2.1.0: + resolution: {integrity: sha512-Pugqs6M0m7Lv1I7FtxN4aoyToKg1C4tu+/381vH35y8oENM/Ai7f7C4StcoK4/+BSw9ebcS8jRiVrORFKCALLw==} + engines: {node: ^20.0.0 || >=22.0.0} to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} + totalist@3.0.1: + resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} + engines: {node: '>=6'} + touch@3.1.1: resolution: {integrity: sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==} hasBin: true @@ -3313,12 +3419,6 @@ packages: resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} hasBin: true - ts-api-utils@2.4.0: - resolution: {integrity: sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==} - engines: {node: '>=18.12'} - peerDependencies: - typescript: '>=4.8.4' - ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} @@ -3412,13 +3512,6 @@ packages: typedef@1.0.4: resolution: {integrity: sha512-tu/YCc4L0n6Yxh3fxzGIki9Pw2oBTMb1YKshFvVPN2nHX62PQmvPGxh783mly1GhvB/fM5WNd7PH7PXhTr8BEA==} - typescript-eslint@8.57.0: - resolution: {integrity: sha512-W8GcigEMEeB07xEZol8oJ26rigm3+bfPHxHvwbYUlu1fUDsGuQ7Hiskx5xGW/xM4USc9Ephe3jtv7ZYPQntHeA==} - 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@5.6.1-rc: resolution: {integrity: sha512-E3b2+1zEFu84jB0YQi9BORDjz9+jGbwwy1Zi3G0LUNw7a7cePUrHMRNy8aPh53nXpkFGVHSxIZo5vKTfYaFiBQ==} engines: {node: '>=14.17'} @@ -3461,6 +3554,11 @@ packages: resolution: {integrity: sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + vite-plus@0.1.11: + resolution: {integrity: sha512-mDUbWirSUWtS/diQiq1QkHGsMNQWu90kSH5s7RWqVnV9s1PRxQ1IcH6mIeOG7YzPJlfO1vQbONZRsOfdyj9IKw==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + vite@7.3.1: resolution: {integrity: sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==} engines: {node: ^20.19.0 || >=22.12.0} @@ -3501,41 +3599,6 @@ packages: yaml: optional: true - vitest@4.1.0: - resolution: {integrity: sha512-YbDrMF9jM2Lqc++2530UourxZHmkKLxrs4+mYhEwqWS97WJ7wOYEkcr+QfRgJ3PW9wz3odRijLZjHEaRLTNbqw==} - engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} - hasBin: true - peerDependencies: - '@edge-runtime/vm': '*' - '@opentelemetry/api': ^1.9.0 - '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 - '@vitest/browser-playwright': 4.1.0 - '@vitest/browser-preview': 4.1.0 - '@vitest/browser-webdriverio': 4.1.0 - '@vitest/ui': 4.1.0 - happy-dom: '*' - jsdom: '*' - vite: ^6.0.0 || ^7.0.0 || ^8.0.0-0 - peerDependenciesMeta: - '@edge-runtime/vm': - optional: true - '@opentelemetry/api': - optional: true - '@types/node': - optional: true - '@vitest/browser-playwright': - optional: true - '@vitest/browser-preview': - optional: true - '@vitest/browser-webdriverio': - optional: true - '@vitest/ui': - optional: true - happy-dom: - optional: true - jsdom: - optional: true - webidl-conversions@4.0.2: resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} @@ -3547,11 +3610,6 @@ packages: engines: {node: '>= 8'} hasBin: true - why-is-node-running@2.3.0: - resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} - engines: {node: '>=8'} - hasBin: true - wolf-ecs@2.1.3: resolution: {integrity: sha512-zTmUsc85VrvFWi7BtZGgF2ZVtcohtMEeSC3fQrWVOENDJkXEm380EFsthr6tFWRJACFLWkw0zUCR6aBFuyTq+A==} @@ -3570,6 +3628,18 @@ packages: wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + ws@8.19.0: + resolution: {integrity: sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} @@ -3603,7 +3673,7 @@ snapshots: '@andrewbranch/untar.js@1.0.3': {} - '@antfu/ni@28.1.0': + '@antfu/ni@29.0.0': dependencies: ansis: 4.2.0 fzf: 0.5.2 @@ -3645,10 +3715,7 @@ snapshots: '@esbuild/aix-ppc64@0.23.1': optional: true - '@esbuild/aix-ppc64@0.27.1': - optional: true - - '@esbuild/aix-ppc64@0.27.2': + '@esbuild/aix-ppc64@0.27.4': optional: true '@esbuild/android-arm64@0.19.7': @@ -3657,10 +3724,7 @@ snapshots: '@esbuild/android-arm64@0.23.1': optional: true - '@esbuild/android-arm64@0.27.1': - optional: true - - '@esbuild/android-arm64@0.27.2': + '@esbuild/android-arm64@0.27.4': optional: true '@esbuild/android-arm@0.19.7': @@ -3669,10 +3733,7 @@ snapshots: '@esbuild/android-arm@0.23.1': optional: true - '@esbuild/android-arm@0.27.1': - optional: true - - '@esbuild/android-arm@0.27.2': + '@esbuild/android-arm@0.27.4': optional: true '@esbuild/android-x64@0.19.7': @@ -3681,10 +3742,7 @@ snapshots: '@esbuild/android-x64@0.23.1': optional: true - '@esbuild/android-x64@0.27.1': - optional: true - - '@esbuild/android-x64@0.27.2': + '@esbuild/android-x64@0.27.4': optional: true '@esbuild/darwin-arm64@0.19.7': @@ -3693,10 +3751,7 @@ snapshots: '@esbuild/darwin-arm64@0.23.1': optional: true - '@esbuild/darwin-arm64@0.27.1': - optional: true - - '@esbuild/darwin-arm64@0.27.2': + '@esbuild/darwin-arm64@0.27.4': optional: true '@esbuild/darwin-x64@0.19.7': @@ -3705,10 +3760,7 @@ snapshots: '@esbuild/darwin-x64@0.23.1': optional: true - '@esbuild/darwin-x64@0.27.1': - optional: true - - '@esbuild/darwin-x64@0.27.2': + '@esbuild/darwin-x64@0.27.4': optional: true '@esbuild/freebsd-arm64@0.19.7': @@ -3717,10 +3769,7 @@ snapshots: '@esbuild/freebsd-arm64@0.23.1': optional: true - '@esbuild/freebsd-arm64@0.27.1': - optional: true - - '@esbuild/freebsd-arm64@0.27.2': + '@esbuild/freebsd-arm64@0.27.4': optional: true '@esbuild/freebsd-x64@0.19.7': @@ -3729,10 +3778,7 @@ snapshots: '@esbuild/freebsd-x64@0.23.1': optional: true - '@esbuild/freebsd-x64@0.27.1': - optional: true - - '@esbuild/freebsd-x64@0.27.2': + '@esbuild/freebsd-x64@0.27.4': optional: true '@esbuild/linux-arm64@0.19.7': @@ -3741,10 +3787,7 @@ snapshots: '@esbuild/linux-arm64@0.23.1': optional: true - '@esbuild/linux-arm64@0.27.1': - optional: true - - '@esbuild/linux-arm64@0.27.2': + '@esbuild/linux-arm64@0.27.4': optional: true '@esbuild/linux-arm@0.19.7': @@ -3753,10 +3796,7 @@ snapshots: '@esbuild/linux-arm@0.23.1': optional: true - '@esbuild/linux-arm@0.27.1': - optional: true - - '@esbuild/linux-arm@0.27.2': + '@esbuild/linux-arm@0.27.4': optional: true '@esbuild/linux-ia32@0.19.7': @@ -3765,10 +3805,7 @@ snapshots: '@esbuild/linux-ia32@0.23.1': optional: true - '@esbuild/linux-ia32@0.27.1': - optional: true - - '@esbuild/linux-ia32@0.27.2': + '@esbuild/linux-ia32@0.27.4': optional: true '@esbuild/linux-loong64@0.19.7': @@ -3777,10 +3814,7 @@ snapshots: '@esbuild/linux-loong64@0.23.1': optional: true - '@esbuild/linux-loong64@0.27.1': - optional: true - - '@esbuild/linux-loong64@0.27.2': + '@esbuild/linux-loong64@0.27.4': optional: true '@esbuild/linux-mips64el@0.19.7': @@ -3789,10 +3823,7 @@ snapshots: '@esbuild/linux-mips64el@0.23.1': optional: true - '@esbuild/linux-mips64el@0.27.1': - optional: true - - '@esbuild/linux-mips64el@0.27.2': + '@esbuild/linux-mips64el@0.27.4': optional: true '@esbuild/linux-ppc64@0.19.7': @@ -3801,10 +3832,7 @@ snapshots: '@esbuild/linux-ppc64@0.23.1': optional: true - '@esbuild/linux-ppc64@0.27.1': - optional: true - - '@esbuild/linux-ppc64@0.27.2': + '@esbuild/linux-ppc64@0.27.4': optional: true '@esbuild/linux-riscv64@0.19.7': @@ -3813,10 +3841,7 @@ snapshots: '@esbuild/linux-riscv64@0.23.1': optional: true - '@esbuild/linux-riscv64@0.27.1': - optional: true - - '@esbuild/linux-riscv64@0.27.2': + '@esbuild/linux-riscv64@0.27.4': optional: true '@esbuild/linux-s390x@0.19.7': @@ -3825,10 +3850,7 @@ snapshots: '@esbuild/linux-s390x@0.23.1': optional: true - '@esbuild/linux-s390x@0.27.1': - optional: true - - '@esbuild/linux-s390x@0.27.2': + '@esbuild/linux-s390x@0.27.4': optional: true '@esbuild/linux-x64@0.19.7': @@ -3837,16 +3859,10 @@ snapshots: '@esbuild/linux-x64@0.23.1': optional: true - '@esbuild/linux-x64@0.27.1': - optional: true - - '@esbuild/linux-x64@0.27.2': + '@esbuild/linux-x64@0.27.4': optional: true - '@esbuild/netbsd-arm64@0.27.1': - optional: true - - '@esbuild/netbsd-arm64@0.27.2': + '@esbuild/netbsd-arm64@0.27.4': optional: true '@esbuild/netbsd-x64@0.19.7': @@ -3855,19 +3871,13 @@ snapshots: '@esbuild/netbsd-x64@0.23.1': optional: true - '@esbuild/netbsd-x64@0.27.1': - optional: true - - '@esbuild/netbsd-x64@0.27.2': + '@esbuild/netbsd-x64@0.27.4': optional: true '@esbuild/openbsd-arm64@0.23.1': optional: true - '@esbuild/openbsd-arm64@0.27.1': - optional: true - - '@esbuild/openbsd-arm64@0.27.2': + '@esbuild/openbsd-arm64@0.27.4': optional: true '@esbuild/openbsd-x64@0.19.7': @@ -3876,16 +3886,10 @@ snapshots: '@esbuild/openbsd-x64@0.23.1': optional: true - '@esbuild/openbsd-x64@0.27.1': - optional: true - - '@esbuild/openbsd-x64@0.27.2': + '@esbuild/openbsd-x64@0.27.4': optional: true - '@esbuild/openharmony-arm64@0.27.1': - optional: true - - '@esbuild/openharmony-arm64@0.27.2': + '@esbuild/openharmony-arm64@0.27.4': optional: true '@esbuild/sunos-x64@0.19.7': @@ -3894,10 +3898,7 @@ snapshots: '@esbuild/sunos-x64@0.23.1': optional: true - '@esbuild/sunos-x64@0.27.1': - optional: true - - '@esbuild/sunos-x64@0.27.2': + '@esbuild/sunos-x64@0.27.4': optional: true '@esbuild/win32-arm64@0.19.7': @@ -3906,10 +3907,7 @@ snapshots: '@esbuild/win32-arm64@0.23.1': optional: true - '@esbuild/win32-arm64@0.27.1': - optional: true - - '@esbuild/win32-arm64@0.27.2': + '@esbuild/win32-arm64@0.27.4': optional: true '@esbuild/win32-ia32@0.19.7': @@ -3918,10 +3916,7 @@ snapshots: '@esbuild/win32-ia32@0.23.1': optional: true - '@esbuild/win32-ia32@0.27.1': - optional: true - - '@esbuild/win32-ia32@0.27.2': + '@esbuild/win32-ia32@0.27.4': optional: true '@esbuild/win32-x64@0.19.7': @@ -3930,24 +3925,14 @@ snapshots: '@esbuild/win32-x64@0.23.1': optional: true - '@esbuild/win32-x64@0.27.1': + '@esbuild/win32-x64@0.27.4': optional: true - '@esbuild/win32-x64@0.27.2': - optional: true - - '@eslint-community/eslint-utils@4.9.0(eslint@9.39.4(jiti@2.6.1))': - dependencies: - eslint: 9.39.4(jiti@2.6.1) - eslint-visitor-keys: 3.4.3 - '@eslint-community/eslint-utils@4.9.1(eslint@9.39.4(jiti@2.6.1))': dependencies: eslint: 9.39.4(jiti@2.6.1) eslint-visitor-keys: 3.4.3 - '@eslint-community/regexpp@4.12.1': {} - '@eslint-community/regexpp@4.12.2': {} '@eslint/config-array@0.21.2': @@ -3980,8 +3965,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.39.2': {} - '@eslint/js@9.39.4': {} '@eslint/object-schema@2.1.7': {} @@ -4115,9 +4098,9 @@ snapshots: dependencies: minipass: 7.1.2 - '@jakeklassen/ecs@4.0.7(jiti@2.6.1)(postcss@8.5.6)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)': + '@jakeklassen/ecs@4.0.7(jiti@2.6.1)(postcss@8.5.8)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)': dependencies: - tsup: 8.3.0(jiti@2.6.1)(postcss@8.5.6)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2) + tsup: 8.3.0(jiti@2.6.1)(postcss@8.5.8)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2) type-fest: 4.26.1 transitivePeerDependencies: - '@microsoft/api-extractor' @@ -4147,8 +4130,6 @@ snapshots: '@jridgewell/sourcemap-codec@1.5.0': {} - '@jridgewell/sourcemap-codec@1.5.5': {} - '@jridgewell/trace-mapping@0.3.18': dependencies: '@jridgewell/resolve-uri': 3.1.0 @@ -4164,26 +4145,162 @@ snapshots: dependencies: '@braidai/lang': 1.1.1 - '@miniplex/bucket@2.0.0': - dependencies: - eventery: 0.0.4 + '@miniplex/bucket@2.0.0': + dependencies: + eventery: 0.0.4 + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.15.0 + + '@oxc-project/runtime@0.115.0': {} + + '@oxc-project/types@0.115.0': {} + + '@oxfmt/binding-android-arm-eabi@0.40.0': + optional: true + + '@oxfmt/binding-android-arm64@0.40.0': + optional: true + + '@oxfmt/binding-darwin-arm64@0.40.0': + optional: true + + '@oxfmt/binding-darwin-x64@0.40.0': + optional: true + + '@oxfmt/binding-freebsd-x64@0.40.0': + optional: true + + '@oxfmt/binding-linux-arm-gnueabihf@0.40.0': + optional: true + + '@oxfmt/binding-linux-arm-musleabihf@0.40.0': + optional: true + + '@oxfmt/binding-linux-arm64-gnu@0.40.0': + optional: true + + '@oxfmt/binding-linux-arm64-musl@0.40.0': + optional: true + + '@oxfmt/binding-linux-ppc64-gnu@0.40.0': + optional: true + + '@oxfmt/binding-linux-riscv64-gnu@0.40.0': + optional: true + + '@oxfmt/binding-linux-riscv64-musl@0.40.0': + optional: true + + '@oxfmt/binding-linux-s390x-gnu@0.40.0': + optional: true + + '@oxfmt/binding-linux-x64-gnu@0.40.0': + optional: true + + '@oxfmt/binding-linux-x64-musl@0.40.0': + optional: true + + '@oxfmt/binding-openharmony-arm64@0.40.0': + optional: true + + '@oxfmt/binding-win32-arm64-msvc@0.40.0': + optional: true + + '@oxfmt/binding-win32-ia32-msvc@0.40.0': + optional: true + + '@oxfmt/binding-win32-x64-msvc@0.40.0': + optional: true + + '@oxlint-tsgolint/darwin-arm64@0.16.0': + optional: true + + '@oxlint-tsgolint/darwin-x64@0.16.0': + optional: true + + '@oxlint-tsgolint/linux-arm64@0.16.0': + optional: true + + '@oxlint-tsgolint/linux-x64@0.16.0': + optional: true + + '@oxlint-tsgolint/win32-arm64@0.16.0': + optional: true + + '@oxlint-tsgolint/win32-x64@0.16.0': + optional: true + + '@oxlint/binding-android-arm-eabi@1.55.0': + optional: true + + '@oxlint/binding-android-arm64@1.55.0': + optional: true + + '@oxlint/binding-darwin-arm64@1.55.0': + optional: true + + '@oxlint/binding-darwin-x64@1.55.0': + optional: true + + '@oxlint/binding-freebsd-x64@1.55.0': + optional: true + + '@oxlint/binding-linux-arm-gnueabihf@1.55.0': + optional: true + + '@oxlint/binding-linux-arm-musleabihf@1.55.0': + optional: true + + '@oxlint/binding-linux-arm64-gnu@1.55.0': + optional: true + + '@oxlint/binding-linux-arm64-musl@1.55.0': + optional: true + + '@oxlint/binding-linux-ppc64-gnu@1.55.0': + optional: true + + '@oxlint/binding-linux-riscv64-gnu@1.55.0': + optional: true + + '@oxlint/binding-linux-riscv64-musl@1.55.0': + optional: true + + '@oxlint/binding-linux-s390x-gnu@1.55.0': + optional: true + + '@oxlint/binding-linux-x64-gnu@1.55.0': + optional: true + + '@oxlint/binding-linux-x64-musl@1.55.0': + optional: true - '@nodelib/fs.scandir@2.1.5': - dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 + '@oxlint/binding-openharmony-arm64@1.55.0': + optional: true - '@nodelib/fs.stat@2.0.5': {} + '@oxlint/binding-win32-arm64-msvc@1.55.0': + optional: true - '@nodelib/fs.walk@1.2.8': - dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.15.0 + '@oxlint/binding-win32-ia32-msvc@1.55.0': + optional: true + + '@oxlint/binding-win32-x64-msvc@1.55.0': + optional: true '@pkgjs/parseargs@0.11.0': optional: true - '@pkgr/core@0.2.9': {} + '@polka/url@1.0.0-next.29': {} '@rollup/rollup-android-arm-eabi@4.21.3': optional: true @@ -4194,7 +4311,7 @@ snapshots: '@rollup/rollup-android-arm-eabi@4.5.2': optional: true - '@rollup/rollup-android-arm-eabi@4.55.1': + '@rollup/rollup-android-arm-eabi@4.59.0': optional: true '@rollup/rollup-android-arm64@4.21.3': @@ -4206,7 +4323,7 @@ snapshots: '@rollup/rollup-android-arm64@4.5.2': optional: true - '@rollup/rollup-android-arm64@4.55.1': + '@rollup/rollup-android-arm64@4.59.0': optional: true '@rollup/rollup-darwin-arm64@4.21.3': @@ -4218,7 +4335,7 @@ snapshots: '@rollup/rollup-darwin-arm64@4.5.2': optional: true - '@rollup/rollup-darwin-arm64@4.55.1': + '@rollup/rollup-darwin-arm64@4.59.0': optional: true '@rollup/rollup-darwin-x64@4.21.3': @@ -4230,19 +4347,19 @@ snapshots: '@rollup/rollup-darwin-x64@4.5.2': optional: true - '@rollup/rollup-darwin-x64@4.55.1': + '@rollup/rollup-darwin-x64@4.59.0': optional: true '@rollup/rollup-freebsd-arm64@4.41.1': optional: true - '@rollup/rollup-freebsd-arm64@4.55.1': + '@rollup/rollup-freebsd-arm64@4.59.0': optional: true '@rollup/rollup-freebsd-x64@4.41.1': optional: true - '@rollup/rollup-freebsd-x64@4.55.1': + '@rollup/rollup-freebsd-x64@4.59.0': optional: true '@rollup/rollup-linux-arm-gnueabihf@4.21.3': @@ -4254,7 +4371,7 @@ snapshots: '@rollup/rollup-linux-arm-gnueabihf@4.5.2': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.55.1': + '@rollup/rollup-linux-arm-gnueabihf@4.59.0': optional: true '@rollup/rollup-linux-arm-musleabihf@4.21.3': @@ -4263,7 +4380,7 @@ snapshots: '@rollup/rollup-linux-arm-musleabihf@4.41.1': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.55.1': + '@rollup/rollup-linux-arm-musleabihf@4.59.0': optional: true '@rollup/rollup-linux-arm64-gnu@4.21.3': @@ -4275,7 +4392,7 @@ snapshots: '@rollup/rollup-linux-arm64-gnu@4.5.2': optional: true - '@rollup/rollup-linux-arm64-gnu@4.55.1': + '@rollup/rollup-linux-arm64-gnu@4.59.0': optional: true '@rollup/rollup-linux-arm64-musl@4.21.3': @@ -4287,13 +4404,13 @@ snapshots: '@rollup/rollup-linux-arm64-musl@4.5.2': optional: true - '@rollup/rollup-linux-arm64-musl@4.55.1': + '@rollup/rollup-linux-arm64-musl@4.59.0': optional: true - '@rollup/rollup-linux-loong64-gnu@4.55.1': + '@rollup/rollup-linux-loong64-gnu@4.59.0': optional: true - '@rollup/rollup-linux-loong64-musl@4.55.1': + '@rollup/rollup-linux-loong64-musl@4.59.0': optional: true '@rollup/rollup-linux-loongarch64-gnu@4.41.1': @@ -4305,10 +4422,10 @@ snapshots: '@rollup/rollup-linux-powerpc64le-gnu@4.41.1': optional: true - '@rollup/rollup-linux-ppc64-gnu@4.55.1': + '@rollup/rollup-linux-ppc64-gnu@4.59.0': optional: true - '@rollup/rollup-linux-ppc64-musl@4.55.1': + '@rollup/rollup-linux-ppc64-musl@4.59.0': optional: true '@rollup/rollup-linux-riscv64-gnu@4.21.3': @@ -4317,13 +4434,13 @@ snapshots: '@rollup/rollup-linux-riscv64-gnu@4.41.1': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.55.1': + '@rollup/rollup-linux-riscv64-gnu@4.59.0': optional: true '@rollup/rollup-linux-riscv64-musl@4.41.1': optional: true - '@rollup/rollup-linux-riscv64-musl@4.55.1': + '@rollup/rollup-linux-riscv64-musl@4.59.0': optional: true '@rollup/rollup-linux-s390x-gnu@4.21.3': @@ -4332,7 +4449,7 @@ snapshots: '@rollup/rollup-linux-s390x-gnu@4.41.1': optional: true - '@rollup/rollup-linux-s390x-gnu@4.55.1': + '@rollup/rollup-linux-s390x-gnu@4.59.0': optional: true '@rollup/rollup-linux-x64-gnu@4.21.3': @@ -4344,7 +4461,7 @@ snapshots: '@rollup/rollup-linux-x64-gnu@4.5.2': optional: true - '@rollup/rollup-linux-x64-gnu@4.55.1': + '@rollup/rollup-linux-x64-gnu@4.59.0': optional: true '@rollup/rollup-linux-x64-musl@4.21.3': @@ -4356,13 +4473,13 @@ snapshots: '@rollup/rollup-linux-x64-musl@4.5.2': optional: true - '@rollup/rollup-linux-x64-musl@4.55.1': + '@rollup/rollup-linux-x64-musl@4.59.0': optional: true - '@rollup/rollup-openbsd-x64@4.55.1': + '@rollup/rollup-openbsd-x64@4.59.0': optional: true - '@rollup/rollup-openharmony-arm64@4.55.1': + '@rollup/rollup-openharmony-arm64@4.59.0': optional: true '@rollup/rollup-win32-arm64-msvc@4.21.3': @@ -4374,7 +4491,7 @@ snapshots: '@rollup/rollup-win32-arm64-msvc@4.5.2': optional: true - '@rollup/rollup-win32-arm64-msvc@4.55.1': + '@rollup/rollup-win32-arm64-msvc@4.59.0': optional: true '@rollup/rollup-win32-ia32-msvc@4.21.3': @@ -4386,10 +4503,10 @@ snapshots: '@rollup/rollup-win32-ia32-msvc@4.5.2': optional: true - '@rollup/rollup-win32-ia32-msvc@4.55.1': + '@rollup/rollup-win32-ia32-msvc@4.59.0': optional: true - '@rollup/rollup-win32-x64-gnu@4.55.1': + '@rollup/rollup-win32-x64-gnu@4.59.0': optional: true '@rollup/rollup-win32-x64-msvc@4.21.3': @@ -4401,7 +4518,7 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.5.2': optional: true - '@rollup/rollup-win32-x64-msvc@4.55.1': + '@rollup/rollup-win32-x64-msvc@4.59.0': optional: true '@sindresorhus/is@4.6.0': {} @@ -4438,11 +4555,6 @@ snapshots: '@types/deep-eql@4.0.2': {} - '@types/eslint@9.6.1': - dependencies: - '@types/estree': 1.0.7 - '@types/json-schema': 7.0.15 - '@types/estree@1.0.5': {} '@types/estree@1.0.7': {} @@ -4459,197 +4571,87 @@ snapshots: '@types/wicg-file-system-access@2023.10.7': {} - '@typescript-eslint/eslint-plugin@8.57.0(@typescript-eslint/parser@8.57.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)': - dependencies: - '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.57.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.57.0 - '@typescript-eslint/type-utils': 8.57.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/utils': 8.57.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.57.0 - eslint: 9.39.4(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 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/parser@8.57.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)': - dependencies: - '@typescript-eslint/scope-manager': 8.57.0 - '@typescript-eslint/types': 8.57.0 - '@typescript-eslint/typescript-estree': 8.57.0(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.57.0 - debug: 4.4.3 - eslint: 9.39.4(jiti@2.6.1) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/project-service@8.53.0(typescript@5.9.3)': - dependencies: - '@typescript-eslint/tsconfig-utils': 8.53.0(typescript@5.9.3) - '@typescript-eslint/types': 8.53.0 - debug: 4.4.3 - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/project-service@8.57.0(typescript@5.9.3)': - dependencies: - '@typescript-eslint/tsconfig-utils': 8.57.0(typescript@5.9.3) - '@typescript-eslint/types': 8.57.0 - debug: 4.4.3 - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/scope-manager@8.53.0': - dependencies: - '@typescript-eslint/types': 8.53.0 - '@typescript-eslint/visitor-keys': 8.53.0 - - '@typescript-eslint/scope-manager@8.57.0': - dependencies: - '@typescript-eslint/types': 8.57.0 - '@typescript-eslint/visitor-keys': 8.57.0 - - '@typescript-eslint/tsconfig-utils@8.53.0(typescript@5.9.3)': - dependencies: - typescript: 5.9.3 - - '@typescript-eslint/tsconfig-utils@8.57.0(typescript@5.9.3)': - dependencies: - typescript: 5.9.3 - - '@typescript-eslint/type-utils@8.57.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)': - dependencies: - '@typescript-eslint/types': 8.57.0 - '@typescript-eslint/typescript-estree': 8.57.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.57.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) - debug: 4.4.3 - eslint: 9.39.4(jiti@2.6.1) - ts-api-utils: 2.4.0(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/types@8.53.0': {} - - '@typescript-eslint/types@8.57.0': {} - - '@typescript-eslint/typescript-estree@8.53.0(typescript@5.9.3)': - dependencies: - '@typescript-eslint/project-service': 8.53.0(typescript@5.9.3) - '@typescript-eslint/tsconfig-utils': 8.53.0(typescript@5.9.3) - '@typescript-eslint/types': 8.53.0 - '@typescript-eslint/visitor-keys': 8.53.0 - debug: 4.4.3 - minimatch: 9.0.5 - semver: 7.7.3 - tinyglobby: 0.2.15 - ts-api-utils: 2.4.0(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color + '@typeslayer/darwin-arm64@0.1.31': + optional: true - '@typescript-eslint/typescript-estree@8.57.0(typescript@5.9.3)': - dependencies: - '@typescript-eslint/project-service': 8.57.0(typescript@5.9.3) - '@typescript-eslint/tsconfig-utils': 8.57.0(typescript@5.9.3) - '@typescript-eslint/types': 8.57.0 - '@typescript-eslint/visitor-keys': 8.57.0 - 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 - transitivePeerDependencies: - - supports-color + '@typeslayer/linux-x64@0.1.31': + optional: true - '@typescript-eslint/utils@8.53.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)': - dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.6.1)) - '@typescript-eslint/scope-manager': 8.53.0 - '@typescript-eslint/types': 8.53.0 - '@typescript-eslint/typescript-estree': 8.53.0(typescript@5.9.3) - eslint: 9.39.4(jiti@2.6.1) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color + '@typeslayer/win32-x64@0.1.31': + optional: true - '@typescript-eslint/utils@8.57.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)': + '@voidzero-dev/vite-plus-core@0.1.11(@arethetypeswrong/core@0.18.2)(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.6.1)) - '@typescript-eslint/scope-manager': 8.57.0 - '@typescript-eslint/types': 8.57.0 - '@typescript-eslint/typescript-estree': 8.57.0(typescript@5.9.3) - eslint: 9.39.4(jiti@2.6.1) + '@oxc-project/runtime': 0.115.0 + '@oxc-project/types': 0.115.0 + lightningcss: 1.32.0 + postcss: 8.5.6 + optionalDependencies: + '@arethetypeswrong/core': 0.18.2 + '@types/node': 24.12.0 + esbuild: 0.27.4 + fsevents: 2.3.3 + jiti: 2.6.1 + tsx: 4.21.0 typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/visitor-keys@8.53.0': - dependencies: - '@typescript-eslint/types': 8.53.0 - eslint-visitor-keys: 4.2.1 + yaml: 2.8.2 - '@typescript-eslint/visitor-keys@8.57.0': - dependencies: - '@typescript-eslint/types': 8.57.0 - eslint-visitor-keys: 5.0.1 + '@voidzero-dev/vite-plus-darwin-arm64@0.1.11': + optional: true - '@typeslayer/darwin-arm64@0.1.31': + '@voidzero-dev/vite-plus-darwin-x64@0.1.11': optional: true - '@typeslayer/linux-x64@0.1.31': + '@voidzero-dev/vite-plus-linux-arm64-gnu@0.1.11': optional: true - '@typeslayer/win32-x64@0.1.31': + '@voidzero-dev/vite-plus-linux-x64-gnu@0.1.11': optional: true - '@vitest/expect@4.1.0': + '@voidzero-dev/vite-plus-test@0.1.11(@arethetypeswrong/core@0.18.2)(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(typescript@5.9.3)(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2)': dependencies: '@standard-schema/spec': 1.1.0 '@types/chai': 5.2.3 - '@vitest/spy': 4.1.0 - '@vitest/utils': 4.1.0 - chai: 6.2.2 - tinyrainbow: 3.1.0 - - '@vitest/mocker@4.1.0(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))': - dependencies: - '@vitest/spy': 4.1.0 - estree-walker: 3.0.3 - magic-string: 0.30.21 + '@voidzero-dev/vite-plus-core': 0.1.11(@arethetypeswrong/core@0.18.2)(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2) + es-module-lexer: 1.7.0 + obug: 2.1.1 + pixelmatch: 7.1.0 + pngjs: 7.0.0 + sirv: 3.0.2 + std-env: 4.0.0 + tinybench: 2.9.0 + tinyexec: 1.0.2 + tinyglobby: 0.2.15 + vite: 7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.8.2) + ws: 8.19.0 optionalDependencies: - vite: 7.3.1(@types/node@24.12.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) - - '@vitest/pretty-format@4.1.0': - dependencies: - tinyrainbow: 3.1.0 - - '@vitest/runner@4.1.0': - dependencies: - '@vitest/utils': 4.1.0 - pathe: 2.0.3 - - '@vitest/snapshot@4.1.0': - dependencies: - '@vitest/pretty-format': 4.1.0 - '@vitest/utils': 4.1.0 - magic-string: 0.30.21 - pathe: 2.0.3 + '@types/node': 24.12.0 + transitivePeerDependencies: + - '@arethetypeswrong/core' + - '@tsdown/css' + - '@tsdown/exe' + - '@vitejs/devtools' + - bufferutil + - esbuild + - jiti + - less + - publint + - sass + - sass-embedded + - stylus + - sugarss + - terser + - tsx + - typescript + - unplugin-unused + - utf-8-validate + - yaml - '@vitest/spy@4.1.0': {} + '@voidzero-dev/vite-plus-win32-arm64-msvc@0.1.11': + optional: true - '@vitest/utils@4.1.0': - dependencies: - '@vitest/pretty-format': 4.1.0 - convert-source-map: 2.0.0 - tinyrainbow: 3.1.0 + '@voidzero-dev/vite-plus-win32-x64-msvc@0.1.11': + optional: true acorn-jsx@5.3.2(acorn@8.15.0): dependencies: @@ -4703,8 +4705,6 @@ snapshots: balanced-match@4.0.3: {} - balanced-match@4.0.4: {} - base64-js@1.5.1: {} benchmark@2.1.4: @@ -4740,10 +4740,6 @@ snapshots: dependencies: balanced-match: 4.0.3 - brace-expansion@5.0.4: - dependencies: - balanced-match: 4.0.4 - braces@3.0.2: dependencies: fill-range: 7.0.1 @@ -4783,9 +4779,9 @@ snapshots: esbuild: 0.23.1 load-tsconfig: 0.2.5 - bundle-require@5.1.0(esbuild@0.27.1): + bundle-require@5.1.0(esbuild@0.27.4): dependencies: - esbuild: 0.27.1 + esbuild: 0.27.4 load-tsconfig: 0.2.5 c12@3.3.3: @@ -4814,8 +4810,6 @@ snapshots: node-addon-api: 7.1.1 prebuild-install: 7.1.3 - chai@6.2.2: {} - chalk@4.1.2: dependencies: ansi-styles: 4.3.0 @@ -4925,8 +4919,6 @@ snapshots: consola@3.4.2: {} - convert-source-map@2.0.0: {} - core-util-is@1.0.3: {} cross-spawn@7.0.6: @@ -4997,7 +4989,7 @@ snapshots: environment@1.1.0: {} - es-module-lexer@2.0.0: {} + es-module-lexer@1.7.0: {} esbuild@0.19.7: optionalDependencies: @@ -5051,72 +5043,39 @@ snapshots: '@esbuild/win32-ia32': 0.23.1 '@esbuild/win32-x64': 0.23.1 - esbuild@0.27.1: - optionalDependencies: - '@esbuild/aix-ppc64': 0.27.1 - '@esbuild/android-arm': 0.27.1 - '@esbuild/android-arm64': 0.27.1 - '@esbuild/android-x64': 0.27.1 - '@esbuild/darwin-arm64': 0.27.1 - '@esbuild/darwin-x64': 0.27.1 - '@esbuild/freebsd-arm64': 0.27.1 - '@esbuild/freebsd-x64': 0.27.1 - '@esbuild/linux-arm': 0.27.1 - '@esbuild/linux-arm64': 0.27.1 - '@esbuild/linux-ia32': 0.27.1 - '@esbuild/linux-loong64': 0.27.1 - '@esbuild/linux-mips64el': 0.27.1 - '@esbuild/linux-ppc64': 0.27.1 - '@esbuild/linux-riscv64': 0.27.1 - '@esbuild/linux-s390x': 0.27.1 - '@esbuild/linux-x64': 0.27.1 - '@esbuild/netbsd-arm64': 0.27.1 - '@esbuild/netbsd-x64': 0.27.1 - '@esbuild/openbsd-arm64': 0.27.1 - '@esbuild/openbsd-x64': 0.27.1 - '@esbuild/openharmony-arm64': 0.27.1 - '@esbuild/sunos-x64': 0.27.1 - '@esbuild/win32-arm64': 0.27.1 - '@esbuild/win32-ia32': 0.27.1 - '@esbuild/win32-x64': 0.27.1 - - esbuild@0.27.2: + esbuild@0.27.4: optionalDependencies: - '@esbuild/aix-ppc64': 0.27.2 - '@esbuild/android-arm': 0.27.2 - '@esbuild/android-arm64': 0.27.2 - '@esbuild/android-x64': 0.27.2 - '@esbuild/darwin-arm64': 0.27.2 - '@esbuild/darwin-x64': 0.27.2 - '@esbuild/freebsd-arm64': 0.27.2 - '@esbuild/freebsd-x64': 0.27.2 - '@esbuild/linux-arm': 0.27.2 - '@esbuild/linux-arm64': 0.27.2 - '@esbuild/linux-ia32': 0.27.2 - '@esbuild/linux-loong64': 0.27.2 - '@esbuild/linux-mips64el': 0.27.2 - '@esbuild/linux-ppc64': 0.27.2 - '@esbuild/linux-riscv64': 0.27.2 - '@esbuild/linux-s390x': 0.27.2 - '@esbuild/linux-x64': 0.27.2 - '@esbuild/netbsd-arm64': 0.27.2 - '@esbuild/netbsd-x64': 0.27.2 - '@esbuild/openbsd-arm64': 0.27.2 - '@esbuild/openbsd-x64': 0.27.2 - '@esbuild/openharmony-arm64': 0.27.2 - '@esbuild/sunos-x64': 0.27.2 - '@esbuild/win32-arm64': 0.27.2 - '@esbuild/win32-ia32': 0.27.2 - '@esbuild/win32-x64': 0.27.2 + '@esbuild/aix-ppc64': 0.27.4 + '@esbuild/android-arm': 0.27.4 + '@esbuild/android-arm64': 0.27.4 + '@esbuild/android-x64': 0.27.4 + '@esbuild/darwin-arm64': 0.27.4 + '@esbuild/darwin-x64': 0.27.4 + '@esbuild/freebsd-arm64': 0.27.4 + '@esbuild/freebsd-x64': 0.27.4 + '@esbuild/linux-arm': 0.27.4 + '@esbuild/linux-arm64': 0.27.4 + '@esbuild/linux-ia32': 0.27.4 + '@esbuild/linux-loong64': 0.27.4 + '@esbuild/linux-mips64el': 0.27.4 + '@esbuild/linux-ppc64': 0.27.4 + '@esbuild/linux-riscv64': 0.27.4 + '@esbuild/linux-s390x': 0.27.4 + '@esbuild/linux-x64': 0.27.4 + '@esbuild/netbsd-arm64': 0.27.4 + '@esbuild/netbsd-x64': 0.27.4 + '@esbuild/openbsd-arm64': 0.27.4 + '@esbuild/openbsd-x64': 0.27.4 + '@esbuild/openharmony-arm64': 0.27.4 + '@esbuild/sunos-x64': 0.27.4 + '@esbuild/win32-arm64': 0.27.4 + '@esbuild/win32-ia32': 0.27.4 + '@esbuild/win32-x64': 0.27.4 escalade@3.2.0: {} escape-string-regexp@4.0.0: {} - eslint-config-prettier@10.1.8(eslint@9.39.4(jiti@2.6.1)): - dependencies: - eslint: 9.39.4(jiti@2.6.1) - eslint-plugin-depend@1.5.0(eslint@9.39.4(jiti@2.6.1)): dependencies: empathic: 2.0.0 @@ -5124,16 +5083,6 @@ snapshots: module-replacements: 2.11.0 semver: 7.7.4 - eslint-plugin-prettier@5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.39.4(jiti@2.6.1)))(eslint@9.39.4(jiti@2.6.1))(prettier@3.8.1): - dependencies: - eslint: 9.39.4(jiti@2.6.1) - prettier: 3.8.1 - prettier-linter-helpers: 1.0.1 - synckit: 0.11.12 - optionalDependencies: - '@types/eslint': 9.6.1 - eslint-config-prettier: 10.1.8(eslint@9.39.4(jiti@2.6.1)) - eslint-scope@8.4.0: dependencies: esrecurse: 4.3.0 @@ -5143,12 +5092,10 @@ snapshots: eslint-visitor-keys@4.2.1: {} - eslint-visitor-keys@5.0.1: {} - eslint@9.39.4(jiti@2.6.1): dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.4(jiti@2.6.1)) - '@eslint-community/regexpp': 4.12.1 + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.6.1)) + '@eslint-community/regexpp': 4.12.2 '@eslint/config-array': 0.21.2 '@eslint/config-helpers': 0.4.2 '@eslint/core': 0.17.0 @@ -5167,7 +5114,7 @@ snapshots: eslint-scope: 8.4.0 eslint-visitor-keys: 4.2.1 espree: 10.4.0 - esquery: 1.6.0 + esquery: 1.7.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 file-entry-cache: 8.0.0 @@ -5192,7 +5139,7 @@ snapshots: acorn-jsx: 5.3.2(acorn@8.15.0) eslint-visitor-keys: 4.2.1 - esquery@1.6.0: + esquery@1.7.0: dependencies: estraverse: 5.3.0 @@ -5202,10 +5149,6 @@ snapshots: estraverse@5.3.0: {} - estree-walker@3.0.3: - dependencies: - '@types/estree': 1.0.8 - esutils@2.0.3: {} eventery@0.0.4: {} @@ -5224,14 +5167,10 @@ snapshots: expand-template@2.0.3: {} - expect-type@1.3.0: {} - exsolve@1.0.8: {} fast-deep-equal@3.1.3: {} - fast-diff@1.3.0: {} - fast-glob@3.3.3: dependencies: '@nodelib/fs.stat': 2.0.5 @@ -5299,10 +5238,10 @@ snapshots: flat-cache@4.0.1: dependencies: - flatted: 3.3.3 + flatted: 3.4.1 keyv: 4.5.4 - flatted@3.3.3: {} + flatted@3.4.1: {} foreground-child@3.1.1: dependencies: @@ -5318,9 +5257,9 @@ snapshots: fzf@0.5.2: {} - gameinput@0.0.9(postcss@8.5.6)(typescript@5.9.3): + gameinput@0.0.9(postcss@8.5.8)(typescript@5.9.3): dependencies: - tsup: 8.0.1(postcss@8.5.6)(typescript@5.9.3) + tsup: 8.0.1(postcss@8.5.8)(typescript@5.9.3) type-fest: 4.9.0 transitivePeerDependencies: - '@microsoft/api-extractor' @@ -5416,8 +5355,6 @@ snapshots: ignore@5.3.2: {} - ignore@7.0.5: {} - immediate@3.0.6: {} import-fresh@3.3.1: @@ -5510,6 +5447,55 @@ snapshots: dependencies: immediate: 3.0.6 + lightningcss-android-arm64@1.32.0: + optional: true + + lightningcss-darwin-arm64@1.32.0: + optional: true + + lightningcss-darwin-x64@1.32.0: + optional: true + + lightningcss-freebsd-x64@1.32.0: + optional: true + + lightningcss-linux-arm-gnueabihf@1.32.0: + optional: true + + lightningcss-linux-arm64-gnu@1.32.0: + optional: true + + lightningcss-linux-arm64-musl@1.32.0: + optional: true + + lightningcss-linux-x64-gnu@1.32.0: + optional: true + + lightningcss-linux-x64-musl@1.32.0: + optional: true + + lightningcss-win32-arm64-msvc@1.32.0: + optional: true + + lightningcss-win32-x64-msvc@1.32.0: + optional: true + + lightningcss@1.32.0: + dependencies: + detect-libc: 2.1.2 + optionalDependencies: + lightningcss-android-arm64: 1.32.0 + lightningcss-darwin-arm64: 1.32.0 + lightningcss-darwin-x64: 1.32.0 + lightningcss-freebsd-x64: 1.32.0 + lightningcss-linux-arm-gnueabihf: 1.32.0 + lightningcss-linux-arm64-gnu: 1.32.0 + lightningcss-linux-arm64-musl: 1.32.0 + lightningcss-linux-x64-gnu: 1.32.0 + lightningcss-linux-x64-musl: 1.32.0 + lightningcss-win32-arm64-msvc: 1.32.0 + lightningcss-win32-x64-msvc: 1.32.0 + lilconfig@3.0.0: {} lilconfig@3.1.2: {} @@ -5538,10 +5524,6 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 - magic-string@0.30.21: - dependencies: - '@jridgewell/sourcemap-codec': 1.5.5 - marked-terminal@7.3.0(marked@9.1.6): dependencies: ansi-escapes: 7.0.0 @@ -5572,10 +5554,6 @@ snapshots: dependencies: brace-expansion: 5.0.2 - minimatch@10.2.4: - dependencies: - brace-expansion: 5.0.4 - minimatch@3.1.2: dependencies: brace-expansion: 1.1.11 @@ -5617,6 +5595,8 @@ snapshots: module-replacements@2.11.0: {} + mrmime@2.0.1: {} + ms@2.1.2: {} ms@2.1.3: {} @@ -5696,6 +5676,62 @@ snapshots: type-check: 0.4.0 word-wrap: 1.2.5 + oxfmt@0.40.0: + dependencies: + tinypool: 2.1.0 + optionalDependencies: + '@oxfmt/binding-android-arm-eabi': 0.40.0 + '@oxfmt/binding-android-arm64': 0.40.0 + '@oxfmt/binding-darwin-arm64': 0.40.0 + '@oxfmt/binding-darwin-x64': 0.40.0 + '@oxfmt/binding-freebsd-x64': 0.40.0 + '@oxfmt/binding-linux-arm-gnueabihf': 0.40.0 + '@oxfmt/binding-linux-arm-musleabihf': 0.40.0 + '@oxfmt/binding-linux-arm64-gnu': 0.40.0 + '@oxfmt/binding-linux-arm64-musl': 0.40.0 + '@oxfmt/binding-linux-ppc64-gnu': 0.40.0 + '@oxfmt/binding-linux-riscv64-gnu': 0.40.0 + '@oxfmt/binding-linux-riscv64-musl': 0.40.0 + '@oxfmt/binding-linux-s390x-gnu': 0.40.0 + '@oxfmt/binding-linux-x64-gnu': 0.40.0 + '@oxfmt/binding-linux-x64-musl': 0.40.0 + '@oxfmt/binding-openharmony-arm64': 0.40.0 + '@oxfmt/binding-win32-arm64-msvc': 0.40.0 + '@oxfmt/binding-win32-ia32-msvc': 0.40.0 + '@oxfmt/binding-win32-x64-msvc': 0.40.0 + + oxlint-tsgolint@0.16.0: + optionalDependencies: + '@oxlint-tsgolint/darwin-arm64': 0.16.0 + '@oxlint-tsgolint/darwin-x64': 0.16.0 + '@oxlint-tsgolint/linux-arm64': 0.16.0 + '@oxlint-tsgolint/linux-x64': 0.16.0 + '@oxlint-tsgolint/win32-arm64': 0.16.0 + '@oxlint-tsgolint/win32-x64': 0.16.0 + + oxlint@1.55.0(oxlint-tsgolint@0.16.0): + optionalDependencies: + '@oxlint/binding-android-arm-eabi': 1.55.0 + '@oxlint/binding-android-arm64': 1.55.0 + '@oxlint/binding-darwin-arm64': 1.55.0 + '@oxlint/binding-darwin-x64': 1.55.0 + '@oxlint/binding-freebsd-x64': 1.55.0 + '@oxlint/binding-linux-arm-gnueabihf': 1.55.0 + '@oxlint/binding-linux-arm-musleabihf': 1.55.0 + '@oxlint/binding-linux-arm64-gnu': 1.55.0 + '@oxlint/binding-linux-arm64-musl': 1.55.0 + '@oxlint/binding-linux-ppc64-gnu': 1.55.0 + '@oxlint/binding-linux-riscv64-gnu': 1.55.0 + '@oxlint/binding-linux-riscv64-musl': 1.55.0 + '@oxlint/binding-linux-s390x-gnu': 1.55.0 + '@oxlint/binding-linux-x64-gnu': 1.55.0 + '@oxlint/binding-linux-x64-musl': 1.55.0 + '@oxlint/binding-openharmony-arm64': 1.55.0 + '@oxlint/binding-win32-arm64-msvc': 1.55.0 + '@oxlint/binding-win32-ia32-msvc': 1.55.0 + '@oxlint/binding-win32-x64-msvc': 1.55.0 + oxlint-tsgolint: 0.16.0 + p-limit@3.1.0: dependencies: yocto-queue: 0.1.0 @@ -5764,6 +5800,10 @@ snapshots: pirates@4.0.6: {} + pixelmatch@7.1.0: + dependencies: + pngjs: 7.0.0 + pkg-types@1.3.1: dependencies: confbox: 0.1.8 @@ -5778,19 +5818,21 @@ snapshots: platform@1.3.6: {} - postcss-load-config@4.0.2(postcss@8.5.6): + pngjs@7.0.0: {} + + postcss-load-config@4.0.2(postcss@8.5.8): dependencies: lilconfig: 3.0.0 yaml: 2.3.4 optionalDependencies: - postcss: 8.5.6 + postcss: 8.5.8 - postcss-load-config@6.0.1(jiti@2.6.1)(postcss@8.5.6)(tsx@4.21.0)(yaml@2.8.2): + postcss-load-config@6.0.1(jiti@2.6.1)(postcss@8.5.8)(tsx@4.21.0)(yaml@2.8.2): dependencies: lilconfig: 3.1.2 optionalDependencies: jiti: 2.6.1 - postcss: 8.5.6 + postcss: 8.5.8 tsx: 4.21.0 yaml: 2.8.2 @@ -5800,6 +5842,12 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 + postcss@8.5.8: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + prebuild-install@7.1.3: dependencies: detect-libc: 2.1.2 @@ -5817,12 +5865,6 @@ snapshots: prelude-ls@1.2.1: {} - prettier-linter-helpers@1.0.1: - dependencies: - fast-diff: 1.3.0 - - prettier@3.8.1: {} - process-nextick-args@2.0.1: {} pstree.remy@1.1.8: {} @@ -5953,35 +5995,35 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.5.2 fsevents: 2.3.3 - rollup@4.55.1: + rollup@4.59.0: dependencies: '@types/estree': 1.0.8 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.55.1 - '@rollup/rollup-android-arm64': 4.55.1 - '@rollup/rollup-darwin-arm64': 4.55.1 - '@rollup/rollup-darwin-x64': 4.55.1 - '@rollup/rollup-freebsd-arm64': 4.55.1 - '@rollup/rollup-freebsd-x64': 4.55.1 - '@rollup/rollup-linux-arm-gnueabihf': 4.55.1 - '@rollup/rollup-linux-arm-musleabihf': 4.55.1 - '@rollup/rollup-linux-arm64-gnu': 4.55.1 - '@rollup/rollup-linux-arm64-musl': 4.55.1 - '@rollup/rollup-linux-loong64-gnu': 4.55.1 - '@rollup/rollup-linux-loong64-musl': 4.55.1 - '@rollup/rollup-linux-ppc64-gnu': 4.55.1 - '@rollup/rollup-linux-ppc64-musl': 4.55.1 - '@rollup/rollup-linux-riscv64-gnu': 4.55.1 - '@rollup/rollup-linux-riscv64-musl': 4.55.1 - '@rollup/rollup-linux-s390x-gnu': 4.55.1 - '@rollup/rollup-linux-x64-gnu': 4.55.1 - '@rollup/rollup-linux-x64-musl': 4.55.1 - '@rollup/rollup-openbsd-x64': 4.55.1 - '@rollup/rollup-openharmony-arm64': 4.55.1 - '@rollup/rollup-win32-arm64-msvc': 4.55.1 - '@rollup/rollup-win32-ia32-msvc': 4.55.1 - '@rollup/rollup-win32-x64-gnu': 4.55.1 - '@rollup/rollup-win32-x64-msvc': 4.55.1 + '@rollup/rollup-android-arm-eabi': 4.59.0 + '@rollup/rollup-android-arm64': 4.59.0 + '@rollup/rollup-darwin-arm64': 4.59.0 + '@rollup/rollup-darwin-x64': 4.59.0 + '@rollup/rollup-freebsd-arm64': 4.59.0 + '@rollup/rollup-freebsd-x64': 4.59.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.59.0 + '@rollup/rollup-linux-arm-musleabihf': 4.59.0 + '@rollup/rollup-linux-arm64-gnu': 4.59.0 + '@rollup/rollup-linux-arm64-musl': 4.59.0 + '@rollup/rollup-linux-loong64-gnu': 4.59.0 + '@rollup/rollup-linux-loong64-musl': 4.59.0 + '@rollup/rollup-linux-ppc64-gnu': 4.59.0 + '@rollup/rollup-linux-ppc64-musl': 4.59.0 + '@rollup/rollup-linux-riscv64-gnu': 4.59.0 + '@rollup/rollup-linux-riscv64-musl': 4.59.0 + '@rollup/rollup-linux-s390x-gnu': 4.59.0 + '@rollup/rollup-linux-x64-gnu': 4.59.0 + '@rollup/rollup-linux-x64-musl': 4.59.0 + '@rollup/rollup-openbsd-x64': 4.59.0 + '@rollup/rollup-openharmony-arm64': 4.59.0 + '@rollup/rollup-win32-arm64-msvc': 4.59.0 + '@rollup/rollup-win32-ia32-msvc': 4.59.0 + '@rollup/rollup-win32-x64-gnu': 4.59.0 + '@rollup/rollup-win32-x64-msvc': 4.59.0 fsevents: 2.3.3 run-parallel@1.2.0: @@ -6037,8 +6079,6 @@ snapshots: shebang-regex@3.0.0: {} - siginfo@2.0.0: {} - signal-exit@3.0.7: {} signal-exit@4.1.0: {} @@ -6055,6 +6095,12 @@ snapshots: dependencies: semver: 7.7.1 + sirv@3.0.2: + dependencies: + '@polka/url': 1.0.0-next.29 + mrmime: 2.0.1 + totalist: 3.0.1 + skin-tone@2.0.0: dependencies: unicode-emoji-modifier-base: 1.0.0 @@ -6069,8 +6115,6 @@ snapshots: dependencies: whatwg-url: 7.1.0 - stackback@0.0.2: {} - std-env@4.0.0: {} string-width@4.2.3: @@ -6138,10 +6182,6 @@ snapshots: has-flag: 4.0.0 supports-color: 7.2.0 - synckit@0.11.12: - dependencies: - '@pkgr/core': 0.2.9 - tagged-tag@1.0.0: {} tar-fs@2.1.4: @@ -6200,12 +6240,14 @@ snapshots: fdir: 6.3.0(picomatch@4.0.2) picomatch: 4.0.2 - tinyrainbow@3.1.0: {} + tinypool@2.1.0: {} to-regex-range@5.0.1: dependencies: is-number: 7.0.0 + totalist@3.0.1: {} + touch@3.1.1: {} tr46@1.0.1: @@ -6214,16 +6256,12 @@ snapshots: tree-kill@1.2.2: {} - ts-api-utils@2.4.0(typescript@5.9.3): - dependencies: - typescript: 5.9.3 - ts-interface-checker@0.1.13: {} tslib@2.8.1: optional: true - tsup@8.0.1(postcss@8.5.6)(typescript@5.9.3): + tsup@8.0.1(postcss@8.5.8)(typescript@5.9.3): dependencies: bundle-require: 4.0.2(esbuild@0.19.7) cac: 6.7.14 @@ -6233,20 +6271,20 @@ snapshots: execa: 5.1.1 globby: 11.1.0 joycon: 3.1.1 - postcss-load-config: 4.0.2(postcss@8.5.6) + postcss-load-config: 4.0.2(postcss@8.5.8) resolve-from: 5.0.0 rollup: 4.5.2 source-map: 0.8.0-beta.0 sucrase: 3.34.0 tree-kill: 1.2.2 optionalDependencies: - postcss: 8.5.6 + postcss: 8.5.8 typescript: 5.9.3 transitivePeerDependencies: - supports-color - ts-node - tsup@8.3.0(jiti@2.6.1)(postcss@8.5.6)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2): + tsup@8.3.0(jiti@2.6.1)(postcss@8.5.8)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2): dependencies: bundle-require: 5.0.0(esbuild@0.23.1) cac: 6.7.14 @@ -6257,7 +6295,7 @@ snapshots: execa: 5.1.1 joycon: 3.1.1 picocolors: 1.1.0 - postcss-load-config: 6.0.1(jiti@2.6.1)(postcss@8.5.6)(tsx@4.21.0)(yaml@2.8.2) + postcss-load-config: 6.0.1(jiti@2.6.1)(postcss@8.5.8)(tsx@4.21.0)(yaml@2.8.2) resolve-from: 5.0.0 rollup: 4.21.3 source-map: 0.8.0-beta.0 @@ -6265,7 +6303,7 @@ snapshots: tinyglobby: 0.2.6 tree-kill: 1.2.2 optionalDependencies: - postcss: 8.5.6 + postcss: 8.5.8 typescript: 5.9.3 transitivePeerDependencies: - jiti @@ -6273,18 +6311,18 @@ snapshots: - tsx - yaml - tsup@8.5.1(jiti@2.6.1)(postcss@8.5.6)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2): + tsup@8.5.1(jiti@2.6.1)(postcss@8.5.8)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2): dependencies: - bundle-require: 5.1.0(esbuild@0.27.1) + bundle-require: 5.1.0(esbuild@0.27.4) cac: 6.7.14 chokidar: 4.0.3 consola: 3.4.2 debug: 4.4.1 - esbuild: 0.27.1 + esbuild: 0.27.4 fix-dts-default-cjs-exports: 1.0.1 joycon: 3.1.1 picocolors: 1.1.1 - postcss-load-config: 6.0.1(jiti@2.6.1)(postcss@8.5.6)(tsx@4.21.0)(yaml@2.8.2) + postcss-load-config: 6.0.1(jiti@2.6.1)(postcss@8.5.8)(tsx@4.21.0)(yaml@2.8.2) resolve-from: 5.0.0 rollup: 4.41.1 source-map: 0.7.6 @@ -6293,7 +6331,7 @@ snapshots: tinyglobby: 0.2.14 tree-kill: 1.2.2 optionalDependencies: - postcss: 8.5.6 + postcss: 8.5.8 typescript: 5.9.3 transitivePeerDependencies: - jiti @@ -6303,7 +6341,7 @@ snapshots: tsx@4.21.0: dependencies: - esbuild: 0.27.1 + esbuild: 0.27.4 get-tsconfig: 4.12.0 optionalDependencies: fsevents: 2.3.3 @@ -6328,17 +6366,6 @@ snapshots: typedef@1.0.4: {} - typescript-eslint@8.57.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3): - dependencies: - '@typescript-eslint/eslint-plugin': 8.57.0(@typescript-eslint/parser@8.57.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/parser': 8.57.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/typescript-estree': 8.57.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.57.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.39.4(jiti@2.6.1) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - typescript@5.6.1-rc: {} typescript@5.9.3: {} @@ -6367,48 +6394,68 @@ snapshots: validate-npm-package-name@5.0.1: {} - vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2): + vite-plus@0.1.11(@arethetypeswrong/core@0.18.2)(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(typescript@5.9.3)(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2): + dependencies: + '@oxc-project/types': 0.115.0 + '@voidzero-dev/vite-plus-core': 0.1.11(@arethetypeswrong/core@0.18.2)(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2) + '@voidzero-dev/vite-plus-test': 0.1.11(@arethetypeswrong/core@0.18.2)(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(typescript@5.9.3)(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2) + cac: 6.7.14 + cross-spawn: 7.0.6 + oxfmt: 0.40.0 + oxlint: 1.55.0(oxlint-tsgolint@0.16.0) + oxlint-tsgolint: 0.16.0 + picocolors: 1.1.1 + optionalDependencies: + '@voidzero-dev/vite-plus-darwin-arm64': 0.1.11 + '@voidzero-dev/vite-plus-darwin-x64': 0.1.11 + '@voidzero-dev/vite-plus-linux-arm64-gnu': 0.1.11 + '@voidzero-dev/vite-plus-linux-x64-gnu': 0.1.11 + '@voidzero-dev/vite-plus-win32-arm64-msvc': 0.1.11 + '@voidzero-dev/vite-plus-win32-x64-msvc': 0.1.11 + transitivePeerDependencies: + - '@arethetypeswrong/core' + - '@edge-runtime/vm' + - '@opentelemetry/api' + - '@tsdown/css' + - '@tsdown/exe' + - '@types/node' + - '@vitejs/devtools' + - '@vitest/ui' + - bufferutil + - esbuild + - happy-dom + - jiti + - jsdom + - less + - publint + - sass + - sass-embedded + - stylus + - sugarss + - terser + - tsx + - typescript + - unplugin-unused + - utf-8-validate + - vite + - yaml + + vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.8.2): dependencies: - esbuild: 0.27.2 + esbuild: 0.27.4 fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 - postcss: 8.5.6 - rollup: 4.55.1 + postcss: 8.5.8 + rollup: 4.59.0 tinyglobby: 0.2.15 optionalDependencies: '@types/node': 24.12.0 fsevents: 2.3.3 jiti: 2.6.1 + lightningcss: 1.32.0 tsx: 4.21.0 yaml: 2.8.2 - vitest@4.1.0(@types/node@24.12.0)(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)): - dependencies: - '@vitest/expect': 4.1.0 - '@vitest/mocker': 4.1.0(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) - '@vitest/pretty-format': 4.1.0 - '@vitest/runner': 4.1.0 - '@vitest/snapshot': 4.1.0 - '@vitest/spy': 4.1.0 - '@vitest/utils': 4.1.0 - es-module-lexer: 2.0.0 - expect-type: 1.3.0 - magic-string: 0.30.21 - obug: 2.1.1 - pathe: 2.0.3 - picomatch: 4.0.3 - std-env: 4.0.0 - tinybench: 2.9.0 - tinyexec: 1.0.2 - tinyglobby: 0.2.15 - tinyrainbow: 3.1.0 - vite: 7.3.1(@types/node@24.12.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) - why-is-node-running: 2.3.0 - optionalDependencies: - '@types/node': 24.12.0 - transitivePeerDependencies: - - msw - webidl-conversions@4.0.2: {} whatwg-url@7.1.0: @@ -6421,11 +6468,6 @@ snapshots: dependencies: isexe: 2.0.0 - why-is-node-running@2.3.0: - dependencies: - siginfo: 2.0.0 - stackback: 0.0.2 - wolf-ecs@2.1.3: {} word-wrap@1.2.5: {} @@ -6444,6 +6486,8 @@ snapshots: wrappy@1.0.2: {} + ws@8.19.0: {} + y18n@5.0.8: {} yallist@5.0.0: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 3e59b51..14edb6d 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,10 +1,24 @@ packages: - packages/* - - '!**/test/**' + - "!**/test/**" onlyBuiltDependencies: - - '@kmamal/sdl' + - "@kmamal/sdl" - canvas - esbuild - sharp - typeslayer +catalog: + vite: npm:@voidzero-dev/vite-plus-core@latest + vitest: npm:@voidzero-dev/vite-plus-test@latest + vite-plus: latest +overrides: + vite: "catalog:" + vitest: "catalog:" +peerDependencyRules: + allowAny: + - vite + - vitest + allowedVersions: + vite: "*" + vitest: "*" diff --git a/tasks.md b/tasks.md deleted file mode 100644 index 6269f20..0000000 --- a/tasks.md +++ /dev/null @@ -1,3 +0,0 @@ -# Tasks - -[ ] Port https://wickedengine.net/2019/09/entity-component-system/ ideas. Archetypes _need_ to support sorting. diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 0000000..4e2cda3 --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,243 @@ +import { defineConfig } from "vite-plus"; + +export default defineConfig({ + staged: { + "*": "vp check --fix", + }, + lint: { + plugins: ["oxc", "typescript", "unicorn", "react"], + categories: { + correctness: "warn", + }, + env: { + builtin: true, + }, + ignorePatterns: [ + "**/node_modules", + "**/build", + "**/dist", + "**/public", + "packages/ecs-benchmark/**", + ], + rules: { + "constructor-super": "error", + "for-direction": "error", + "getter-return": "error", + "no-async-promise-executor": "error", + "no-case-declarations": "error", + "no-class-assign": "error", + "no-compare-neg-zero": "error", + "no-cond-assign": "error", + "no-const-assign": "error", + "no-constant-binary-expression": "error", + "no-constant-condition": "error", + "no-control-regex": "error", + "no-debugger": "error", + "no-delete-var": "error", + "no-dupe-class-members": "error", + "no-dupe-else-if": "error", + "no-dupe-keys": "error", + "no-duplicate-case": "error", + "no-empty": "error", + "no-empty-character-class": "error", + "no-empty-pattern": "error", + "no-empty-static-block": "error", + "no-ex-assign": "error", + "no-extra-boolean-cast": "error", + "no-fallthrough": "error", + "no-func-assign": "error", + "no-global-assign": "error", + "no-import-assign": "error", + "no-invalid-regexp": "error", + "no-irregular-whitespace": "error", + "no-loss-of-precision": "error", + "no-misleading-character-class": "error", + "no-new-native-nonconstructor": "error", + "no-nonoctal-decimal-escape": "error", + "no-obj-calls": "error", + "no-prototype-builtins": "error", + "no-redeclare": "error", + "no-regex-spaces": "error", + "no-self-assign": "error", + "no-setter-return": "error", + "no-shadow-restricted-names": "error", + "no-sparse-arrays": "error", + "no-this-before-super": "error", + "no-undef": "error", + "no-unreachable": "error", + "no-unsafe-finally": "error", + "no-unsafe-negation": "error", + "no-unsafe-optional-chaining": "error", + "no-unused-labels": "error", + "no-unused-private-class-members": "error", + "no-unused-vars": "error", + "no-useless-backreference": "error", + "no-useless-catch": "error", + "no-useless-escape": "error", + "no-with": "error", + "require-yield": "error", + "use-isnan": "error", + "valid-typeof": "error", + "@typescript-eslint/ban-ts-comment": "error", + "no-array-constructor": "error", + "@typescript-eslint/no-duplicate-enum-values": "error", + "@typescript-eslint/no-empty-object-type": "error", + "@typescript-eslint/no-explicit-any": "error", + "@typescript-eslint/no-extra-non-null-assertion": "error", + "@typescript-eslint/no-misused-new": "error", + "@typescript-eslint/no-namespace": "error", + "@typescript-eslint/no-non-null-asserted-optional-chain": "error", + "@typescript-eslint/no-require-imports": "error", + "@typescript-eslint/no-this-alias": "error", + "@typescript-eslint/no-unnecessary-type-constraint": "error", + "@typescript-eslint/no-unsafe-declaration-merging": "error", + "@typescript-eslint/no-unsafe-function-type": "error", + "no-unused-expressions": "error", + "@typescript-eslint/no-wrapper-object-types": "error", + "@typescript-eslint/prefer-as-const": "error", + "@typescript-eslint/prefer-namespace-keyword": "error", + "@typescript-eslint/triple-slash-reference": "error", + "@typescript-eslint/await-thenable": "error", + "@typescript-eslint/no-array-delete": "error", + "@typescript-eslint/no-base-to-string": "error", + "@typescript-eslint/no-confusing-void-expression": "error", + "@typescript-eslint/no-deprecated": "error", + "@typescript-eslint/no-duplicate-type-constituents": "error", + "@typescript-eslint/no-dynamic-delete": "error", + "@typescript-eslint/no-extraneous-class": "error", + "@typescript-eslint/no-floating-promises": "error", + "@typescript-eslint/no-for-in-array": "error", + "@typescript-eslint/no-implied-eval": "error", + "@typescript-eslint/no-invalid-void-type": "error", + "@typescript-eslint/no-meaningless-void-operator": "error", + "@typescript-eslint/no-misused-promises": "error", + "@typescript-eslint/no-misused-spread": "error", + "@typescript-eslint/no-mixed-enums": "error", + "@typescript-eslint/no-non-null-asserted-nullish-coalescing": "error", + "@typescript-eslint/no-non-null-assertion": "error", + "@typescript-eslint/no-redundant-type-constituents": "error", + "@typescript-eslint/no-unnecessary-boolean-literal-compare": "error", + "@typescript-eslint/no-unnecessary-condition": "error", + "@typescript-eslint/no-unnecessary-template-expression": "error", + "@typescript-eslint/no-unnecessary-type-arguments": "error", + "@typescript-eslint/no-unnecessary-type-assertion": "error", + "@typescript-eslint/no-unnecessary-type-conversion": "error", + "@typescript-eslint/no-unnecessary-type-parameters": "error", + "@typescript-eslint/no-unsafe-argument": "error", + "@typescript-eslint/no-unsafe-assignment": "error", + "@typescript-eslint/no-unsafe-call": "error", + "@typescript-eslint/no-unsafe-enum-comparison": "error", + "@typescript-eslint/no-unsafe-member-access": "error", + "@typescript-eslint/no-unsafe-return": "error", + "@typescript-eslint/no-unsafe-unary-minus": "error", + "no-useless-constructor": "error", + "@typescript-eslint/no-useless-default-assignment": "error", + "@typescript-eslint/only-throw-error": "error", + "@typescript-eslint/prefer-literal-enum-member": "error", + "@typescript-eslint/prefer-promise-reject-errors": "error", + "@typescript-eslint/prefer-reduce-type-parameter": "error", + "@typescript-eslint/prefer-return-this-type": "error", + "@typescript-eslint/related-getter-setter-pairs": "error", + "@typescript-eslint/require-await": "error", + "@typescript-eslint/restrict-plus-operands": [ + "error", + { + allowAny: false, + allowBoolean: false, + allowNullish: false, + allowNumberAndString: false, + allowRegExp: false, + }, + ], + "@typescript-eslint/restrict-template-expressions": [ + "error", + { + allowAny: false, + allowBoolean: false, + allowNever: false, + allowNullish: false, + allowNumber: true, + allowRegExp: false, + }, + ], + "@typescript-eslint/return-await": [ + "error", + "error-handling-correctness-only", + ], + "@typescript-eslint/unbound-method": "error", + "@typescript-eslint/unified-signatures": "error", + "@typescript-eslint/use-unknown-in-catch-callback-variable": "error", + "@typescript-eslint/adjacent-overload-signatures": "error", + "@typescript-eslint/array-type": "off", + "@typescript-eslint/ban-tslint-comment": "error", + "@typescript-eslint/class-literal-property-style": "error", + "@typescript-eslint/consistent-generic-constructors": "error", + "@typescript-eslint/consistent-indexed-object-style": "error", + "@typescript-eslint/consistent-type-assertions": "error", + "@typescript-eslint/consistent-type-definitions": "off", + "@typescript-eslint/no-confusing-non-null-assertion": "error", + "no-empty-function": "error", + "@typescript-eslint/no-inferrable-types": "error", + "@typescript-eslint/non-nullable-type-assertion-style": "error", + "@typescript-eslint/prefer-find": "error", + "@typescript-eslint/prefer-for-of": "error", + "@typescript-eslint/prefer-function-type": "error", + "@typescript-eslint/prefer-includes": "error", + "@typescript-eslint/prefer-nullish-coalescing": "error", + "@typescript-eslint/prefer-optional-chain": "error", + "@typescript-eslint/prefer-regexp-exec": "error", + "@typescript-eslint/prefer-string-starts-ends-with": "error", + }, + overrides: [ + { + files: ["**/*.{js,mjs,cjs,ts,mts,cts}"], + rules: { + "depend/ban-dependencies": "error", + }, + jsPlugins: ["eslint-plugin-depend"], + env: { + browser: true, + }, + }, + { + files: ["**/*.ts", "**/*.tsx", "**/*.mts", "**/*.cts"], + rules: { + "constructor-super": "off", + "getter-return": "off", + "no-class-assign": "off", + "no-const-assign": "off", + "no-dupe-class-members": "off", + "no-dupe-keys": "off", + "no-func-assign": "off", + "no-import-assign": "off", + "no-new-native-nonconstructor": "off", + "no-obj-calls": "off", + "no-redeclare": "off", + "no-setter-return": "off", + "no-this-before-super": "off", + "no-undef": "off", + "no-unreachable": "off", + "no-unsafe-negation": "off", + "no-var": "error", + "no-with": "off", + "prefer-const": "error", + "prefer-rest-params": "error", + "prefer-spread": "error", + }, + }, + ], + options: { + typeAware: true, + typeCheck: true, + }, + }, + fmt: { + semi: true, + tabWidth: 2, + trailingComma: "all", + useTabs: true, + printWidth: 80, + sortPackageJson: false, + ignorePatterns: [], + }, +}); diff --git a/workspace.code-workspace b/workspace.code-workspace index fe7e5be..d8e02f1 100644 --- a/workspace.code-workspace +++ b/workspace.code-workspace @@ -2,35 +2,54 @@ "folders": [ { "name": "✨ root", - "path": "." + "path": ".", }, { "name": "📦 objecs", - "path": "packages/objecs" + "path": "packages/objecs", }, { "name": "📦 benchmark", - "path": "packages/benchmark" + "path": "packages/benchmark", }, { "name": "📦 ecs-benchmark", - "path": "packages/ecs-benchmark" + "path": "packages/ecs-benchmark", }, { "name": "📦 game-benchmark", - "path": "packages/game-benchmark" + "path": "packages/game-benchmark", }, { "name": "📦 examples", - "path": "packages/examples" + "path": "packages/examples", }, { "name": "📦 perf-proofs", - "path": "packages/perf-proofs" - } + "path": "packages/perf-proofs", + }, ], "settings": { - "typescript.preferences.importModuleSpecifierEnding": "js", - "explorer.compactFolders": false - } + "js/ts.preferences.importModuleSpecifierEnding": "js", + "explorer.compactFolders": false, + "editor.defaultFormatter": "oxc.oxc-vscode", + "editor.formatOnSave": true, + "editor.formatOnSaveMode": "file", + "editor.codeActionsOnSave": { + "source.fixAll.oxc": "explicit", + }, + "[typescript]": { + "editor.defaultFormatter": "oxc.oxc-vscode", + }, + "[javascript]": { + "editor.defaultFormatter": "oxc.oxc-vscode", + }, + "[typescriptreact]": { + "editor.defaultFormatter": "oxc.oxc-vscode", + }, + "[javascriptreact]": { + "editor.defaultFormatter": "oxc.oxc-vscode", + }, + "oxc.typeAware": true, + }, } From 452591a9190d5d185e0e686f4cf98354584db0a4 Mon Sep 17 00:00:00 2001 From: Jake Klassen Date: Fri, 13 Mar 2026 10:08:32 -0400 Subject: [PATCH 2/3] chore: add Vite+ Claude Code skill Co-Authored-By: Claude Opus 4.6 --- .claude/skills/vite-plus | 1 + 1 file changed, 1 insertion(+) create mode 120000 .claude/skills/vite-plus diff --git a/.claude/skills/vite-plus b/.claude/skills/vite-plus new file mode 120000 index 0000000..d7066c0 --- /dev/null +++ b/.claude/skills/vite-plus @@ -0,0 +1 @@ +../../node_modules/vite-plus/skills/vite-plus \ No newline at end of file From 8684cfb2ba82baa9a625ec69bac1fc34ffd17cb5 Mon Sep 17 00:00:00 2001 From: Jake Klassen Date: Fri, 13 Mar 2026 10:21:23 -0400 Subject: [PATCH 3/3] chore: replace tsup with vp pack (tsdown) for library builds Move build config into vite.config.ts pack section, update package.json exports to match tsdown output extensions (.mjs/.cjs/.d.mts/.d.cts), and remove tsup dependency. Co-Authored-By: Claude Opus 4.6 --- packages/objecs/package.json | 17 +- packages/objecs/tsup.config.ts | 9 - packages/objecs/vite.config.ts | 7 + pnpm-lock.yaml | 384 --------------------------------- 4 files changed, 18 insertions(+), 399 deletions(-) delete mode 100644 packages/objecs/tsup.config.ts diff --git a/packages/objecs/package.json b/packages/objecs/package.json index cc9cc29..5b84cd8 100644 --- a/packages/objecs/package.json +++ b/packages/objecs/package.json @@ -4,12 +4,18 @@ "description": "ECS", "type": "module", "main": "./dist/index.cjs", - "module": "./dist/index.js", - "types": "./dist/index.d.ts", + "module": "./dist/index.mjs", + "types": "./dist/index.d.mts", "exports": { ".": { - "import": "./dist/index.js", - "require": "./dist/index.cjs" + "import": { + "types": "./dist/index.d.mts", + "default": "./dist/index.mjs" + }, + "require": { + "types": "./dist/index.d.cts", + "default": "./dist/index.cjs" + } } }, "files": [ @@ -25,7 +31,7 @@ "lint": "vp lint", "lint:fix": "vp lint --fix", "prebuild": "pnpm run clean", - "build": "pnpm run lint && tsup", + "build": "pnpm run lint && vp pack", "build:watch": "nodemon --exec 'pnpm run build || exit 1'", "prepublishOnly": "nr build", "release": "bumpp --commit --push --tag && pnpm publish", @@ -53,7 +59,6 @@ "globals": "17.4.0", "nodemon": "^3.1.14", "rimraf": "^6.1.3", - "tsup": "^8.5.1", "typescript": "^5.9.3", "vite": "npm:@voidzero-dev/vite-plus-core@latest", "vite-plus": "catalog:", diff --git a/packages/objecs/tsup.config.ts b/packages/objecs/tsup.config.ts deleted file mode 100644 index abb9897..0000000 --- a/packages/objecs/tsup.config.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { defineConfig } from "tsup"; - -export default defineConfig({ - entry: ["src", "!src/**/*.test.ts"], - sourcemap: true, - format: ["cjs", "esm"], - dts: true, - clean: true, -}); diff --git a/packages/objecs/vite.config.ts b/packages/objecs/vite.config.ts index 4606e1b..9ee9780 100644 --- a/packages/objecs/vite.config.ts +++ b/packages/objecs/vite.config.ts @@ -12,6 +12,13 @@ const config = defineConfig({ build: { target: "chrome101", }, + pack: { + entry: ["src/**/*.ts", "!src/**/*.test.ts"], + format: ["esm", "cjs"], + dts: true, + sourcemap: true, + clean: true, + }, }); export default config; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6f0d2bd..2922abe 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -256,9 +256,6 @@ importers: rimraf: specifier: ^6.1.3 version: 6.1.3 - tsup: - specifier: ^8.5.1 - version: 8.5.1(jiti@2.6.1)(postcss@8.5.8)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2) typescript: specifier: ^5.9.3 version: 5.9.3 @@ -991,9 +988,6 @@ packages: '@jridgewell/sourcemap-codec@1.4.15': resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - '@jridgewell/sourcemap-codec@1.5.0': - resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} - '@jridgewell/trace-mapping@0.3.18': resolution: {integrity: sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==} @@ -1315,11 +1309,6 @@ packages: cpu: [arm] os: [android] - '@rollup/rollup-android-arm-eabi@4.41.1': - resolution: {integrity: sha512-NELNvyEWZ6R9QMkiytB4/L4zSEaBC03KIXEghptLGLZWJ6VPrL63ooZQCOnlx36aQPGhzuOMwDerC1Eb2VmrLw==} - cpu: [arm] - os: [android] - '@rollup/rollup-android-arm-eabi@4.5.2': resolution: {integrity: sha512-ee7BudTwwrglFYSc3UnqInDDjCLWHKrFmGNi4aK7jlEyg4CyPa1DCMrZfsN1O13YT76UFEqXz2CoN7BCGpUlJw==} cpu: [arm] @@ -1335,11 +1324,6 @@ packages: cpu: [arm64] os: [android] - '@rollup/rollup-android-arm64@4.41.1': - resolution: {integrity: sha512-DXdQe1BJ6TK47ukAoZLehRHhfKnKg9BjnQYUu9gzhI8Mwa1d2fzxA1aw2JixHVl403bwp1+/o/NhhHtxWJBgEA==} - cpu: [arm64] - os: [android] - '@rollup/rollup-android-arm64@4.5.2': resolution: {integrity: sha512-xOuhj9HHtn8128ir8veoQsBbAUBasDbHIBniYTEx02pAmu9EXL+ZjJqngnNEy6ZgZ4h1JwL33GMNu3yJL5Mzow==} cpu: [arm64] @@ -1355,11 +1339,6 @@ packages: cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-arm64@4.41.1': - resolution: {integrity: sha512-5afxvwszzdulsU2w8JKWwY8/sJOLPzf0e1bFuvcW5h9zsEg+RQAojdW0ux2zyYAz7R8HvvzKCjLNJhVq965U7w==} - cpu: [arm64] - os: [darwin] - '@rollup/rollup-darwin-arm64@4.5.2': resolution: {integrity: sha512-NTGJWoL8bKyqyWFn9/RzSv4hQ4wTbaAv0lHHRwf4OnpiiP4P8W0jiXbm8Nc5BCXKmWAwuvJY82mcIU2TayC20g==} cpu: [arm64] @@ -1375,11 +1354,6 @@ packages: cpu: [x64] os: [darwin] - '@rollup/rollup-darwin-x64@4.41.1': - resolution: {integrity: sha512-egpJACny8QOdHNNMZKf8xY0Is6gIMz+tuqXlusxquWu3F833DcMwmGM7WlvCO9sB3OsPjdC4U0wHw5FabzCGZg==} - cpu: [x64] - os: [darwin] - '@rollup/rollup-darwin-x64@4.5.2': resolution: {integrity: sha512-hlKqj7bpPvU15sZo4za14u185lpMzdwWLMc9raMqPK4wywt0wR23y1CaVQ4oAFXat3b5/gmRntyfpwWTKl+vvA==} cpu: [x64] @@ -1390,21 +1364,11 @@ packages: cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.41.1': - resolution: {integrity: sha512-DBVMZH5vbjgRk3r0OzgjS38z+atlupJ7xfKIDJdZZL6sM6wjfDNo64aowcLPKIx7LMQi8vybB56uh1Ftck/Atg==} - cpu: [arm64] - os: [freebsd] - '@rollup/rollup-freebsd-arm64@4.59.0': resolution: {integrity: sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.41.1': - resolution: {integrity: sha512-3FkydeohozEskBxNWEIbPfOE0aqQgB6ttTkJ159uWOFn42VLyfAiyD9UK5mhu+ItWzft60DycIN1Xdgiy8o/SA==} - cpu: [x64] - os: [freebsd] - '@rollup/rollup-freebsd-x64@4.59.0': resolution: {integrity: sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==} cpu: [x64] @@ -1416,12 +1380,6 @@ packages: os: [linux] libc: [glibc] - '@rollup/rollup-linux-arm-gnueabihf@4.41.1': - resolution: {integrity: sha512-wC53ZNDgt0pqx5xCAgNunkTzFE8GTgdZ9EwYGVcg+jEjJdZGtq9xPjDnFgfFozQI/Xm1mh+D9YlYtl+ueswNEg==} - cpu: [arm] - os: [linux] - libc: [glibc] - '@rollup/rollup-linux-arm-gnueabihf@4.5.2': resolution: {integrity: sha512-7ZIZx8c3u+pfI0ohQsft/GywrXez0uR6dUP0JhBuCK3sFO5TfdLn/YApnVkvPxuTv3+YKPIZend9Mt7Cz6sS3Q==} cpu: [arm] @@ -1439,12 +1397,6 @@ packages: os: [linux] libc: [musl] - '@rollup/rollup-linux-arm-musleabihf@4.41.1': - resolution: {integrity: sha512-jwKCca1gbZkZLhLRtsrka5N8sFAaxrGz/7wRJ8Wwvq3jug7toO21vWlViihG85ei7uJTpzbXZRcORotE+xyrLA==} - cpu: [arm] - os: [linux] - libc: [musl] - '@rollup/rollup-linux-arm-musleabihf@4.59.0': resolution: {integrity: sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==} cpu: [arm] @@ -1457,12 +1409,6 @@ packages: os: [linux] libc: [glibc] - '@rollup/rollup-linux-arm64-gnu@4.41.1': - resolution: {integrity: sha512-g0UBcNknsmmNQ8V2d/zD2P7WWfJKU0F1nu0k5pW4rvdb+BIqMm8ToluW/eeRmxCared5dD76lS04uL4UaNgpNA==} - cpu: [arm64] - os: [linux] - libc: [glibc] - '@rollup/rollup-linux-arm64-gnu@4.5.2': resolution: {integrity: sha512-7Pk/5mO11JW/cH+a8lL/i0ZxmRGrbpYqN0VwO2DHhU+SJWWOH2zE1RAcPaj8KqiwC8DCDIJOSxjV9+9lLb6aeA==} cpu: [arm64] @@ -1481,12 +1427,6 @@ packages: os: [linux] libc: [musl] - '@rollup/rollup-linux-arm64-musl@4.41.1': - resolution: {integrity: sha512-XZpeGB5TKEZWzIrj7sXr+BEaSgo/ma/kCgrZgL0oo5qdB1JlTzIYQKel/RmhT6vMAvOdM2teYlAaOGJpJ9lahg==} - cpu: [arm64] - os: [linux] - libc: [musl] - '@rollup/rollup-linux-arm64-musl@4.5.2': resolution: {integrity: sha512-KrRnuG5phJx756e62wxvWH2e+TK84MP2IVuPwfge+GBvWqIUfVzFRn09TKruuQBXzZp52Vyma7FjMDkwlA9xpg==} cpu: [arm64] @@ -1511,24 +1451,12 @@ packages: os: [linux] libc: [musl] - '@rollup/rollup-linux-loongarch64-gnu@4.41.1': - resolution: {integrity: sha512-bkCfDJ4qzWfFRCNt5RVV4DOw6KEgFTUZi2r2RuYhGWC8WhCA8lCAJhDeAmrM/fdiAH54m0mA0Vk2FGRPyzI+tw==} - cpu: [loong64] - os: [linux] - libc: [glibc] - '@rollup/rollup-linux-powerpc64le-gnu@4.21.3': resolution: {integrity: sha512-+W+p/9QNDr2vE2AXU0qIy0qQE75E8RTwTwgqS2G5CRQ11vzq0tbnfBd6brWhS9bCRjAjepJe2fvvkvS3dno+iw==} cpu: [ppc64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-powerpc64le-gnu@4.41.1': - resolution: {integrity: sha512-3mr3Xm+gvMX+/8EKogIZSIEF0WUu0HL9di+YWlJpO8CQBnoLAEL/roTCxuLncEdgcfJcvA4UMOf+2dnjl4Ut1A==} - cpu: [ppc64] - os: [linux] - libc: [glibc] - '@rollup/rollup-linux-ppc64-gnu@4.59.0': resolution: {integrity: sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA==} cpu: [ppc64] @@ -1547,24 +1475,12 @@ packages: os: [linux] libc: [glibc] - '@rollup/rollup-linux-riscv64-gnu@4.41.1': - resolution: {integrity: sha512-3rwCIh6MQ1LGrvKJitQjZFuQnT2wxfU+ivhNBzmxXTXPllewOF7JR1s2vMX/tWtUYFgphygxjqMl76q4aMotGw==} - cpu: [riscv64] - os: [linux] - libc: [glibc] - '@rollup/rollup-linux-riscv64-gnu@4.59.0': resolution: {integrity: sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==} cpu: [riscv64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-riscv64-musl@4.41.1': - resolution: {integrity: sha512-LdIUOb3gvfmpkgFZuccNa2uYiqtgZAz3PTzjuM5bH3nvuy9ty6RGc/Q0+HDFrHrizJGVpjnTZ1yS5TNNjFlklw==} - cpu: [riscv64] - os: [linux] - libc: [musl] - '@rollup/rollup-linux-riscv64-musl@4.59.0': resolution: {integrity: sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==} cpu: [riscv64] @@ -1577,12 +1493,6 @@ packages: os: [linux] libc: [glibc] - '@rollup/rollup-linux-s390x-gnu@4.41.1': - resolution: {integrity: sha512-oIE6M8WC9ma6xYqjvPhzZYk6NbobIURvP/lEbh7FWplcMO6gn7MM2yHKA1eC/GvYwzNKK/1LYgqzdkZ8YFxR8g==} - cpu: [s390x] - os: [linux] - libc: [glibc] - '@rollup/rollup-linux-s390x-gnu@4.59.0': resolution: {integrity: sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==} cpu: [s390x] @@ -1595,12 +1505,6 @@ packages: os: [linux] libc: [glibc] - '@rollup/rollup-linux-x64-gnu@4.41.1': - resolution: {integrity: sha512-cWBOvayNvA+SyeQMp79BHPK8ws6sHSsYnK5zDcsC3Hsxr1dgTABKjMnMslPq1DvZIp6uO7kIWhiGwaTdR4Og9A==} - cpu: [x64] - os: [linux] - libc: [glibc] - '@rollup/rollup-linux-x64-gnu@4.5.2': resolution: {integrity: sha512-My+53GasPa2D2tU5dXiyHYwrELAUouSfkNlZ3bUKpI7btaztO5vpALEs3mvFjM7aKTvEbc7GQckuXeXIDKQ0fg==} cpu: [x64] @@ -1619,12 +1523,6 @@ packages: os: [linux] libc: [musl] - '@rollup/rollup-linux-x64-musl@4.41.1': - resolution: {integrity: sha512-y5CbN44M+pUCdGDlZFzGGBSKCA4A/J2ZH4edTYSSxFg7ce1Xt3GtydbVKWLlzL+INfFIZAEg1ZV6hh9+QQf9YQ==} - cpu: [x64] - os: [linux] - libc: [musl] - '@rollup/rollup-linux-x64-musl@4.5.2': resolution: {integrity: sha512-/f0Q6Sc+Vw54Ws6N8fxaEe4R7at3b8pFyv+O/F2VaQ4hODUJcRUcCBJh6zuqtgQQt7w845VTkGLFgWZkP3tUoQ==} cpu: [x64] @@ -1652,11 +1550,6 @@ packages: cpu: [arm64] os: [win32] - '@rollup/rollup-win32-arm64-msvc@4.41.1': - resolution: {integrity: sha512-lZkCxIrjlJlMt1dLO/FbpZbzt6J/A8p4DnqzSa4PWqPEUUUnzXLeki/iyPLfV0BmHItlYgHUqJe+3KiyydmiNQ==} - cpu: [arm64] - os: [win32] - '@rollup/rollup-win32-arm64-msvc@4.5.2': resolution: {integrity: sha512-NCKuuZWLht6zj7s6EIFef4BxCRX1GMr83S2W4HPCA0RnJ4iHE4FS1695q6Ewoa6A9nFjJe1//yUu0kgBU07Edw==} cpu: [arm64] @@ -1672,11 +1565,6 @@ packages: cpu: [ia32] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.41.1': - resolution: {integrity: sha512-+psFT9+pIh2iuGsxFYYa/LhS5MFKmuivRsx9iPJWNSGbh2XVEjk90fmpUEjCnILPEPJnikAU6SFDiEUyOv90Pg==} - cpu: [ia32] - os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.5.2': resolution: {integrity: sha512-J5zL3riR4AOyU/J3M/i4k/zZ8eP1yT+nTmAKztCXJtnI36jYH0eepvob22mAQ/kLwfsK2TB6dbyVY1F8c/0H5A==} cpu: [ia32] @@ -1697,11 +1585,6 @@ packages: cpu: [x64] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.41.1': - resolution: {integrity: sha512-Wq2zpapRYLfi4aKxf2Xff0tN+7slj2d4R87WEzqw7ZLsVvO5zwYCIuEGSZYiK41+GlwUo1HiR+GdkLEJnCKTCw==} - cpu: [x64] - os: [win32] - '@rollup/rollup-win32-x64-msvc@4.5.2': resolution: {integrity: sha512-pL0RXRHuuGLhvs7ayX/SAHph1hrDPXOM5anyYUQXWJEENxw3nfHkzv8FfVlEVcLyKPAEgDRkd6RKZq2SMqS/yg==} cpu: [x64] @@ -1755,9 +1638,6 @@ packages: '@types/estree@1.0.5': resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} - '@types/estree@1.0.7': - resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==} - '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} @@ -1919,11 +1799,6 @@ packages: peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - acorn@8.14.1: - resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==} - engines: {node: '>=0.4.0'} - hasBin: true - acorn@8.15.0: resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} engines: {node: '>=0.4.0'} @@ -2045,12 +1920,6 @@ packages: peerDependencies: esbuild: '>=0.18' - bundle-require@5.1.0: - resolution: {integrity: sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - peerDependencies: - esbuild: '>=0.18' - c12@3.3.3: resolution: {integrity: sha512-750hTRvgBy5kcMNPdh95Qo+XUBeGo8C7nsKSmedDmaQI+E0r82DwHeM6vBewDe4rGFbnxoa4V9pw+sPh5+Iz8Q==} peerDependencies: @@ -2095,10 +1964,6 @@ packages: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} - chokidar@4.0.3: - resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} - engines: {node: '>= 14.16.0'} - chokidar@5.0.0: resolution: {integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==} engines: {node: '>= 20.19.0'} @@ -2165,9 +2030,6 @@ packages: concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - confbox@0.1.8: - resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} - confbox@0.2.4: resolution: {integrity: sha512-ysOGlgTFbN2/Y6Cg3Iye8YKulHw+R2fNXHrgSmXISQdMnomY6eNDprVdW9R5xBguEqI954+S6709UyiO7B+6OQ==} @@ -2213,15 +2075,6 @@ packages: supports-color: optional: true - debug@4.4.1: - resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - debug@4.4.3: resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} engines: {node: '>=6.0'} @@ -2407,14 +2260,6 @@ packages: picomatch: optional: true - fdir@6.4.4: - resolution: {integrity: sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==} - peerDependencies: - picomatch: ^3 || ^4 - peerDependenciesMeta: - picomatch: - optional: true - fdir@6.5.0: resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} engines: {node: '>=12.0.0'} @@ -2446,9 +2291,6 @@ packages: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} - fix-dts-default-cjs-exports@1.0.1: - resolution: {integrity: sha512-pVIECanWFC61Hzl2+oOCtoJ3F17kglZC/6N94eRWycFgBH35hHx0Li604ZIzhseh97mf2p0cv7vVrOZGoqhlEg==} - flat-cache@4.0.1: resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} engines: {node: '>=16'} @@ -2785,9 +2627,6 @@ packages: resolution: {integrity: sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ==} engines: {node: 20 || >=22} - magic-string@0.30.17: - resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} - marked-terminal@7.3.0: resolution: {integrity: sha512-t4rBvPsHc57uE/2nJOLmMbZCQ4tgAccAED3ngXQqW6g+TxA488JzJ+FK3lQkzBQOI1mRV/r/Kq+1ZlJ4D0owQw==} engines: {node: '>=16.0.0'} @@ -2856,9 +2695,6 @@ packages: mkdirp-classic@0.5.3: resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} - mlly@1.7.4: - resolution: {integrity: sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==} - module-replacements@2.11.0: resolution: {integrity: sha512-j5sNQm3VCpQQ7nTqGeOZtoJtV3uKERgCBm9QRhmGRiXiqkf7iRFOkfxdJRZWLkqYY8PNf4cDQF/WfXUYLENrRA==} @@ -3057,9 +2893,6 @@ packages: resolution: {integrity: sha512-1wrVzJ2STrpmONHKBy228LM1b84msXDUoAzVEl0R8Mz4Ce6EPr+IVtxm8+yvrqLYMHswREkjYFaMxnyGnaY3Ng==} hasBin: true - pkg-types@1.3.1: - resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} - pkg-types@2.3.0: resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==} @@ -3155,10 +2988,6 @@ packages: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} - readdirp@4.1.2: - resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} - engines: {node: '>= 14.18.0'} - readdirp@5.0.0: resolution: {integrity: sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==} engines: {node: '>= 20.19.0'} @@ -3192,11 +3021,6 @@ packages: engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true - rollup@4.41.1: - resolution: {integrity: sha512-cPmwD3FnFv8rKMBc1MxWCwVQFxwf1JEmSX3iQXrRVVG15zerAIXRjMFVWnd5Q5QvgKF7Aj+5ykXFhUl+QGnyOw==} - engines: {node: '>=18.0.0', npm: '>=8.0.0'} - hasBin: true - rollup@4.5.2: resolution: {integrity: sha512-CRK1uoROBfkcqrZKyaFcqCcZWNsvJ6yVYZkqTlRocZhO2s5yER6Z3f/QaYtO8RGyloPnmhwgzuPQpNGeK210xQ==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} @@ -3281,10 +3105,6 @@ packages: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} - source-map@0.7.6: - resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==} - engines: {node: '>= 12'} - source-map@0.8.0-beta.0: resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} engines: {node: '>= 8'} @@ -3377,17 +3197,10 @@ packages: tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} - tinyexec@0.3.2: - resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} - tinyexec@1.0.2: resolution: {integrity: sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==} engines: {node: '>=18'} - tinyglobby@0.2.14: - resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==} - engines: {node: '>=12.0.0'} - tinyglobby@0.2.15: resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} engines: {node: '>=12.0.0'} @@ -3463,25 +3276,6 @@ packages: typescript: optional: true - tsup@8.5.1: - resolution: {integrity: sha512-xtgkqwdhpKWr3tKPmCkvYmS9xnQK3m3XgxZHwSUjvfTjp7YfXe5tT3GgWi0F2N+ZSMsOeWeZFh7ZZFg5iPhing==} - engines: {node: '>=18'} - hasBin: true - peerDependencies: - '@microsoft/api-extractor': ^7.36.0 - '@swc/core': ^1 - postcss: ^8.4.12 - typescript: '>=4.5.0' - peerDependenciesMeta: - '@microsoft/api-extractor': - optional: true - '@swc/core': - optional: true - postcss: - optional: true - typescript: - optional: true - tsx@4.21.0: resolution: {integrity: sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==} engines: {node: '>=18.0.0'} @@ -3531,9 +3325,6 @@ packages: uecs@0.4.2: resolution: {integrity: sha512-oPwSibOqllZeBu6U2v/wkqIq/XSiwaf0bff1aJhuPEBOqRWuo8iH/RP+bzPPUDdwQ6vRljIkksy0plmEIfbc3w==} - ufo@1.6.1: - resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==} - undefsafe@2.0.5: resolution: {integrity: sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==} @@ -4128,8 +3919,6 @@ snapshots: '@jridgewell/sourcemap-codec@1.4.15': {} - '@jridgewell/sourcemap-codec@1.5.0': {} - '@jridgewell/trace-mapping@0.3.18': dependencies: '@jridgewell/resolve-uri': 3.1.0 @@ -4305,9 +4094,6 @@ snapshots: '@rollup/rollup-android-arm-eabi@4.21.3': optional: true - '@rollup/rollup-android-arm-eabi@4.41.1': - optional: true - '@rollup/rollup-android-arm-eabi@4.5.2': optional: true @@ -4317,9 +4103,6 @@ snapshots: '@rollup/rollup-android-arm64@4.21.3': optional: true - '@rollup/rollup-android-arm64@4.41.1': - optional: true - '@rollup/rollup-android-arm64@4.5.2': optional: true @@ -4329,9 +4112,6 @@ snapshots: '@rollup/rollup-darwin-arm64@4.21.3': optional: true - '@rollup/rollup-darwin-arm64@4.41.1': - optional: true - '@rollup/rollup-darwin-arm64@4.5.2': optional: true @@ -4341,33 +4121,21 @@ snapshots: '@rollup/rollup-darwin-x64@4.21.3': optional: true - '@rollup/rollup-darwin-x64@4.41.1': - optional: true - '@rollup/rollup-darwin-x64@4.5.2': optional: true '@rollup/rollup-darwin-x64@4.59.0': optional: true - '@rollup/rollup-freebsd-arm64@4.41.1': - optional: true - '@rollup/rollup-freebsd-arm64@4.59.0': optional: true - '@rollup/rollup-freebsd-x64@4.41.1': - optional: true - '@rollup/rollup-freebsd-x64@4.59.0': optional: true '@rollup/rollup-linux-arm-gnueabihf@4.21.3': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.41.1': - optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.5.2': optional: true @@ -4377,18 +4145,12 @@ snapshots: '@rollup/rollup-linux-arm-musleabihf@4.21.3': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.41.1': - optional: true - '@rollup/rollup-linux-arm-musleabihf@4.59.0': optional: true '@rollup/rollup-linux-arm64-gnu@4.21.3': optional: true - '@rollup/rollup-linux-arm64-gnu@4.41.1': - optional: true - '@rollup/rollup-linux-arm64-gnu@4.5.2': optional: true @@ -4398,9 +4160,6 @@ snapshots: '@rollup/rollup-linux-arm64-musl@4.21.3': optional: true - '@rollup/rollup-linux-arm64-musl@4.41.1': - optional: true - '@rollup/rollup-linux-arm64-musl@4.5.2': optional: true @@ -4413,15 +4172,9 @@ snapshots: '@rollup/rollup-linux-loong64-musl@4.59.0': optional: true - '@rollup/rollup-linux-loongarch64-gnu@4.41.1': - optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.21.3': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.41.1': - optional: true - '@rollup/rollup-linux-ppc64-gnu@4.59.0': optional: true @@ -4431,33 +4184,21 @@ snapshots: '@rollup/rollup-linux-riscv64-gnu@4.21.3': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.41.1': - optional: true - '@rollup/rollup-linux-riscv64-gnu@4.59.0': optional: true - '@rollup/rollup-linux-riscv64-musl@4.41.1': - optional: true - '@rollup/rollup-linux-riscv64-musl@4.59.0': optional: true '@rollup/rollup-linux-s390x-gnu@4.21.3': optional: true - '@rollup/rollup-linux-s390x-gnu@4.41.1': - optional: true - '@rollup/rollup-linux-s390x-gnu@4.59.0': optional: true '@rollup/rollup-linux-x64-gnu@4.21.3': optional: true - '@rollup/rollup-linux-x64-gnu@4.41.1': - optional: true - '@rollup/rollup-linux-x64-gnu@4.5.2': optional: true @@ -4467,9 +4208,6 @@ snapshots: '@rollup/rollup-linux-x64-musl@4.21.3': optional: true - '@rollup/rollup-linux-x64-musl@4.41.1': - optional: true - '@rollup/rollup-linux-x64-musl@4.5.2': optional: true @@ -4485,9 +4223,6 @@ snapshots: '@rollup/rollup-win32-arm64-msvc@4.21.3': optional: true - '@rollup/rollup-win32-arm64-msvc@4.41.1': - optional: true - '@rollup/rollup-win32-arm64-msvc@4.5.2': optional: true @@ -4497,9 +4232,6 @@ snapshots: '@rollup/rollup-win32-ia32-msvc@4.21.3': optional: true - '@rollup/rollup-win32-ia32-msvc@4.41.1': - optional: true - '@rollup/rollup-win32-ia32-msvc@4.5.2': optional: true @@ -4512,9 +4244,6 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.21.3': optional: true - '@rollup/rollup-win32-x64-msvc@4.41.1': - optional: true - '@rollup/rollup-win32-x64-msvc@4.5.2': optional: true @@ -4557,8 +4286,6 @@ snapshots: '@types/estree@1.0.5': {} - '@types/estree@1.0.7': {} - '@types/estree@1.0.8': {} '@types/file-saver@2.0.7': {} @@ -4657,8 +4384,6 @@ snapshots: dependencies: acorn: 8.15.0 - acorn@8.14.1: {} - acorn@8.15.0: {} ajv@6.14.0: @@ -4779,11 +4504,6 @@ snapshots: esbuild: 0.23.1 load-tsconfig: 0.2.5 - bundle-require@5.1.0(esbuild@0.27.4): - dependencies: - esbuild: 0.27.4 - load-tsconfig: 0.2.5 - c12@3.3.3: dependencies: chokidar: 5.0.0 @@ -4843,10 +4563,6 @@ snapshots: optionalDependencies: fsevents: 2.3.3 - chokidar@4.0.3: - dependencies: - readdirp: 4.1.2 - chokidar@5.0.0: dependencies: readdirp: 5.0.0 @@ -4911,8 +4627,6 @@ snapshots: concat-map@0.0.1: {} - confbox@0.1.8: {} - confbox@0.2.4: {} consola@3.2.3: {} @@ -4941,10 +4655,6 @@ snapshots: optionalDependencies: supports-color: 5.5.0 - debug@4.4.1: - dependencies: - ms: 2.1.3 - debug@4.4.3: dependencies: ms: 2.1.3 @@ -5201,10 +4911,6 @@ snapshots: optionalDependencies: picomatch: 4.0.2 - fdir@6.4.4(picomatch@4.0.2): - optionalDependencies: - picomatch: 4.0.2 - fdir@6.5.0(picomatch@4.0.3): optionalDependencies: picomatch: 4.0.3 @@ -5230,12 +4936,6 @@ snapshots: locate-path: 6.0.0 path-exists: 4.0.0 - fix-dts-default-cjs-exports@1.0.1: - dependencies: - magic-string: 0.30.17 - mlly: 1.7.4 - rollup: 4.41.1 - flat-cache@4.0.1: dependencies: flatted: 3.4.1 @@ -5520,10 +5220,6 @@ snapshots: lru-cache@11.2.6: {} - magic-string@0.30.17: - dependencies: - '@jridgewell/sourcemap-codec': 1.5.0 - marked-terminal@7.3.0(marked@9.1.6): dependencies: ansi-escapes: 7.0.0 @@ -5586,13 +5282,6 @@ snapshots: mkdirp-classic@0.5.3: {} - mlly@1.7.4: - dependencies: - acorn: 8.14.1 - pathe: 2.0.3 - pkg-types: 1.3.1 - ufo: 1.6.1 - module-replacements@2.11.0: {} mrmime@2.0.1: {} @@ -5804,12 +5493,6 @@ snapshots: dependencies: pngjs: 7.0.0 - pkg-types@1.3.1: - dependencies: - confbox: 0.1.8 - mlly: 1.7.4 - pathe: 2.0.3 - pkg-types@2.3.0: dependencies: confbox: 0.2.4 @@ -5912,8 +5595,6 @@ snapshots: dependencies: picomatch: 2.3.1 - readdirp@4.1.2: {} - readdirp@5.0.0: {} require-directory@2.1.1: {} @@ -5953,32 +5634,6 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.21.3 fsevents: 2.3.3 - rollup@4.41.1: - dependencies: - '@types/estree': 1.0.7 - optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.41.1 - '@rollup/rollup-android-arm64': 4.41.1 - '@rollup/rollup-darwin-arm64': 4.41.1 - '@rollup/rollup-darwin-x64': 4.41.1 - '@rollup/rollup-freebsd-arm64': 4.41.1 - '@rollup/rollup-freebsd-x64': 4.41.1 - '@rollup/rollup-linux-arm-gnueabihf': 4.41.1 - '@rollup/rollup-linux-arm-musleabihf': 4.41.1 - '@rollup/rollup-linux-arm64-gnu': 4.41.1 - '@rollup/rollup-linux-arm64-musl': 4.41.1 - '@rollup/rollup-linux-loongarch64-gnu': 4.41.1 - '@rollup/rollup-linux-powerpc64le-gnu': 4.41.1 - '@rollup/rollup-linux-riscv64-gnu': 4.41.1 - '@rollup/rollup-linux-riscv64-musl': 4.41.1 - '@rollup/rollup-linux-s390x-gnu': 4.41.1 - '@rollup/rollup-linux-x64-gnu': 4.41.1 - '@rollup/rollup-linux-x64-musl': 4.41.1 - '@rollup/rollup-win32-arm64-msvc': 4.41.1 - '@rollup/rollup-win32-ia32-msvc': 4.41.1 - '@rollup/rollup-win32-x64-msvc': 4.41.1 - fsevents: 2.3.3 - rollup@4.5.2: optionalDependencies: '@rollup/rollup-android-arm-eabi': 4.5.2 @@ -6109,8 +5764,6 @@ snapshots: source-map-js@1.2.1: {} - source-map@0.7.6: {} - source-map@0.8.0-beta.0: dependencies: whatwg-url: 7.1.0 @@ -6221,15 +5874,8 @@ snapshots: tinybench@2.9.0: {} - tinyexec@0.3.2: {} - tinyexec@1.0.2: {} - tinyglobby@0.2.14: - dependencies: - fdir: 6.4.4(picomatch@4.0.2) - picomatch: 4.0.2 - tinyglobby@0.2.15: dependencies: fdir: 6.5.0(picomatch@4.0.3) @@ -6311,34 +5957,6 @@ snapshots: - tsx - yaml - tsup@8.5.1(jiti@2.6.1)(postcss@8.5.8)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2): - dependencies: - bundle-require: 5.1.0(esbuild@0.27.4) - cac: 6.7.14 - chokidar: 4.0.3 - consola: 3.4.2 - debug: 4.4.1 - esbuild: 0.27.4 - fix-dts-default-cjs-exports: 1.0.1 - joycon: 3.1.1 - picocolors: 1.1.1 - postcss-load-config: 6.0.1(jiti@2.6.1)(postcss@8.5.8)(tsx@4.21.0)(yaml@2.8.2) - resolve-from: 5.0.0 - rollup: 4.41.1 - source-map: 0.7.6 - sucrase: 3.35.0 - tinyexec: 0.3.2 - tinyglobby: 0.2.14 - tree-kill: 1.2.2 - optionalDependencies: - postcss: 8.5.8 - typescript: 5.9.3 - transitivePeerDependencies: - - jiti - - supports-color - - tsx - - yaml - tsx@4.21.0: dependencies: esbuild: 0.27.4 @@ -6378,8 +5996,6 @@ snapshots: uecs@0.4.2: {} - ufo@1.6.1: {} - undefsafe@2.0.5: {} undici-types@7.16.0: {}