From 9ed7cabcd68b6baf4a928cc80d4e5f88eff065ae Mon Sep 17 00:00:00 2001
From: Chris K <55621012+chrisk-7777@users.noreply.github.com>
Date: Tue, 9 Dec 2025 02:49:08 +1100
Subject: [PATCH] chore: Migrate playground to core repo (#3598)
Moves the Excalibur Playground sub-site into the core Excalibur repo
---
.prettierignore | 1 +
.vscode/settings.json | 2 +-
eslint.config.mjs | 1 +
playground/.gitignore | 7 +
playground/README.md | 71 +
playground/index.html | 72 +
playground/package-lock.json | 1954 +++++++++++++++++
playground/package.json | 27 +
playground/public/favicon.ico | Bin 0 -> 4418 bytes
playground/public/icon.png | Bin 0 -> 370 bytes
playground/public/logo-white@2x.png | Bin 0 -> 3563 bytes
playground/public/logo@2x.png | Bin 0 -> 8818 bytes
playground/public/player-run.png | Bin 0 -> 147657 bytes
playground/public/rpg-audio/License.txt | 21 +
.../public/rpg-audio/audio/handleCoins.ogg | Bin 0 -> 25394 bytes
playground/public/social.jpg | Bin 0 -> 133008 bytes
playground/public/social.png | Bin 0 -> 46830 bytes
playground/public/tiny-town/License.txt | 22 +
.../public/tiny-town/tilemap/tilemap.png | Bin 0 -> 5042 bytes
playground/src/main.ts | 210 ++
playground/src/styles.css | 213 ++
playground/src/templates/audio.ts | 24 +
playground/src/templates/default.ts | 21 +
playground/src/templates/spritesheet.ts | 42 +
playground/src/templates/tileset.ts | 58 +
playground/tsconfig.json | 26 +
playground/tsdown.config.ts | 13 +
playground/vite.config.ts | 5 +
site/.env.example | 1 +
site/.gitignore | 1 +
site/README.md | 27 +
site/docusaurus.config.ts | 12 +
site/package-lock.json | 98 +-
site/src/components/docs/IFrameEmbed.tsx | 8 +-
site/src/components/docs/PlaygroundEmbed.tsx | 9 +-
35 files changed, 2893 insertions(+), 53 deletions(-)
create mode 100644 playground/.gitignore
create mode 100644 playground/README.md
create mode 100644 playground/index.html
create mode 100644 playground/package-lock.json
create mode 100644 playground/package.json
create mode 100644 playground/public/favicon.ico
create mode 100644 playground/public/icon.png
create mode 100644 playground/public/logo-white@2x.png
create mode 100644 playground/public/logo@2x.png
create mode 100644 playground/public/player-run.png
create mode 100644 playground/public/rpg-audio/License.txt
create mode 100644 playground/public/rpg-audio/audio/handleCoins.ogg
create mode 100644 playground/public/social.jpg
create mode 100644 playground/public/social.png
create mode 100644 playground/public/tiny-town/License.txt
create mode 100644 playground/public/tiny-town/tilemap/tilemap.png
create mode 100644 playground/src/main.ts
create mode 100644 playground/src/styles.css
create mode 100644 playground/src/templates/audio.ts
create mode 100644 playground/src/templates/default.ts
create mode 100644 playground/src/templates/spritesheet.ts
create mode 100644 playground/src/templates/tileset.ts
create mode 100644 playground/tsconfig.json
create mode 100644 playground/tsdown.config.ts
create mode 100644 playground/vite.config.ts
create mode 100644 site/.env.example
diff --git a/.prettierignore b/.prettierignore
index 020f9187..4e93e614 100644
--- a/.prettierignore
+++ b/.prettierignore
@@ -6,5 +6,6 @@ build
coverage
node_cache
/site
+/playground
*.md
*.mdx
\ No newline at end of file
diff --git a/.vscode/settings.json b/.vscode/settings.json
index bc16a375..e831cdba 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -4,7 +4,7 @@
"editor.insertSpaces": true,
"editor.detectIndentation": false,
"eslint.enable": true,
- "eslint.options": { "overrideConfigFile": "./.eslintrc.json" },
+ "eslint.options": { "overrideConfigFile": "./eslint.config.mjs" },
"eslint.alwaysShowStatus": true,
"eslint.validate": ["typescript"],
"files.exclude": {
diff --git a/eslint.config.mjs b/eslint.config.mjs
index 0dc48fe6..9e97d849 100644
--- a/eslint.config.mjs
+++ b/eslint.config.mjs
@@ -9,6 +9,7 @@ export default tseslint.config(
'site',
'sandbox',
'scripts',
+ 'playground',
'docs/api/**',
'**/karma.conf.*',
'**/webpack.config.js',
diff --git a/playground/.gitignore b/playground/.gitignore
new file mode 100644
index 00000000..7d654db4
--- /dev/null
+++ b/playground/.gitignore
@@ -0,0 +1,7 @@
+
+node_modules
+dist
+types
+!types/index.d.ts
+.DS_Store
+.tsbuildinfo
\ No newline at end of file
diff --git a/playground/README.md b/playground/README.md
new file mode 100644
index 00000000..9128b90e
--- /dev/null
+++ b/playground/README.md
@@ -0,0 +1,71 @@
+# Excalibur Studio and Playground
+
+This is the current implementation of the Excalibur Playground for sharing small game examples via links!
+
+## Project Goals
+
+* Eventually we want this to become the Excalibur Studio (a full fledged editor like Godot!) as well as the Playground
+* Drag and drop Actors/Entities
+* More Terse Built-in Examples
+
+
+## Developing Locally
+
+### Initial setup
+
+* From the root of the project, run `npm install`
+* Navigate to the `playground` directory, run `npm install`
+* Still within the `playground` directory, generate the Excalibur engine types:
+
+```sh
+npm run build:types
+```
+
+### Day to day development
+
+* Navigate to the `playground` directory
+* Run `npm start`
+
+### Building locally
+
+The Playground lives as a standalone app at https://excaliburjs.com/playground/ , while the main site, running at https://excaliburjs.com is built with Docusaurus.
+The routing to the Playground is handled with Cloudflare rules.
+
+Because of this, care needs to be taken with pathing to static assets within the Playground, such as images and javascript.
+A [relative base](https://vite.dev/guide/build#relative-base) is configured in `vite.config.ts` to handle most typical scenarios.
+
+You can test that the built Playground operates correctly in a subdirectory:
+
+```sh
+# build to `dist/playground`, instead of the default `playground`
+npm run build:dev
+
+# serve the locally built version on http://localhost:8080/playground
+npx http-server dist
+```
+
+Open [http://localhost:8080/playground](http://localhost:8080/playground) and ensure styles, scripts, and assets load correctly.
+
+### Production
+
+In production, the `BASE_URL` is overridden to route requests properly to `https://excaliburjs.com/playground`.
+
+You can also test this locally:
+
+```sh
+BASE_URL=/playground npm start
+```
+
+
+## Contribution Wishlist
+
+* Support multiple versions of Excalibur (maybe even in progress branches?)
+* Auto save to the URL on keyup
+* Multiple file tree
+* Implement Asset Allow List (think similar to ShaderToy)
+* Save to local storage (and maybe to disk in the future)
+* Migrate html/js to [Lit HTML](https://lit.dev/) components, Shoelace is https://shoelace.style/
+ - Example: [Excalibur Dev Tools Browser Extension Repo](https://github.com/excaliburjs/excalibur-extension.git)
+* Add more debug tools to interface
+ - Bonus points: Refactor the dev tools browser extension to be embeddable into HTML
+
diff --git a/playground/index.html b/playground/index.html
new file mode 100644
index 00000000..6d30ec62
--- /dev/null
+++ b/playground/index.html
@@ -0,0 +1,72 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Excalibur Playground
+
+
+
+
+
+
+
+
+
+
+ Excalibur Playground
+
+
+
+
+
+
+
+
Building...
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/playground/package-lock.json b/playground/package-lock.json
new file mode 100644
index 00000000..0647628a
--- /dev/null
+++ b/playground/package-lock.json
@@ -0,0 +1,1954 @@
+{
+ "name": "excalibur-playground",
+ "version": "1.0.0",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "excalibur-playground",
+ "version": "1.0.0",
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "excalibur": "0.30.3",
+ "lz-string": "1.5.0",
+ "monaco-editor": "0.52.2"
+ },
+ "devDependencies": {
+ "@types/node": "24.0.10",
+ "tsdown": "0.17.0",
+ "typescript": "5.9.3",
+ "unplugin-raw": "0.6.3",
+ "vite": "7.2.4"
+ }
+ },
+ "node_modules/@babel/generator": {
+ "version": "7.28.5",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.5.tgz",
+ "integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/parser": "^7.28.5",
+ "@babel/types": "^7.28.5",
+ "@jridgewell/gen-mapping": "^0.3.12",
+ "@jridgewell/trace-mapping": "^0.3.28",
+ "jsesc": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-string-parser": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
+ "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-validator-identifier": {
+ "version": "7.28.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz",
+ "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/parser": {
+ "version": "7.28.5",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz",
+ "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/types": "^7.28.5"
+ },
+ "bin": {
+ "parser": "bin/babel-parser.js"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@babel/types": {
+ "version": "7.28.5",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz",
+ "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-string-parser": "^7.27.1",
+ "@babel/helper-validator-identifier": "^7.28.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@emnapi/core": {
+ "version": "1.7.1",
+ "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.7.1.tgz",
+ "integrity": "sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "@emnapi/wasi-threads": "1.1.0",
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@emnapi/runtime": {
+ "version": "1.7.1",
+ "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.7.1.tgz",
+ "integrity": "sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@emnapi/wasi-threads": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.1.0.tgz",
+ "integrity": "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@esbuild/aix-ppc64": {
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.5.tgz",
+ "integrity": "sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "aix"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-arm": {
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.5.tgz",
+ "integrity": "sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-arm64": {
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.5.tgz",
+ "integrity": "sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-x64": {
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.5.tgz",
+ "integrity": "sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/darwin-arm64": {
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.5.tgz",
+ "integrity": "sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/darwin-x64": {
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.5.tgz",
+ "integrity": "sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/freebsd-arm64": {
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.5.tgz",
+ "integrity": "sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/freebsd-x64": {
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.5.tgz",
+ "integrity": "sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-arm": {
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.5.tgz",
+ "integrity": "sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-arm64": {
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.5.tgz",
+ "integrity": "sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-ia32": {
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.5.tgz",
+ "integrity": "sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-loong64": {
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.5.tgz",
+ "integrity": "sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-mips64el": {
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.5.tgz",
+ "integrity": "sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==",
+ "cpu": [
+ "mips64el"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-ppc64": {
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.5.tgz",
+ "integrity": "sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-riscv64": {
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.5.tgz",
+ "integrity": "sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-s390x": {
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.5.tgz",
+ "integrity": "sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-x64": {
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.5.tgz",
+ "integrity": "sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/netbsd-arm64": {
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.5.tgz",
+ "integrity": "sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/netbsd-x64": {
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.5.tgz",
+ "integrity": "sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openbsd-arm64": {
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.5.tgz",
+ "integrity": "sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openbsd-x64": {
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.5.tgz",
+ "integrity": "sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/sunos-x64": {
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.5.tgz",
+ "integrity": "sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-arm64": {
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.5.tgz",
+ "integrity": "sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-ia32": {
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.5.tgz",
+ "integrity": "sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-x64": {
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.5.tgz",
+ "integrity": "sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@jridgewell/gen-mapping": {
+ "version": "0.3.12",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.12.tgz",
+ "integrity": "sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.5.0",
+ "@jridgewell/trace-mapping": "^0.3.24"
+ }
+ },
+ "node_modules/@jridgewell/remapping": {
+ "version": "2.3.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz",
+ "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/trace-mapping": "^0.3.24"
+ }
+ },
+ "node_modules/@jridgewell/resolve-uri": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+ "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.5.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
+ "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.29",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.29.tgz",
+ "integrity": "sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/resolve-uri": "^3.1.0",
+ "@jridgewell/sourcemap-codec": "^1.4.14"
+ }
+ },
+ "node_modules/@napi-rs/wasm-runtime": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.0.tgz",
+ "integrity": "sha512-Fq6DJW+Bb5jaWE69/qOE0D1TUN9+6uWhCeZpdnSBk14pjLcCWR7Q8n49PTSPHazM37JqrsdpEthXy2xn6jWWiA==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "@emnapi/core": "^1.7.1",
+ "@emnapi/runtime": "^1.7.1",
+ "@tybys/wasm-util": "^0.10.1"
+ }
+ },
+ "node_modules/@oxc-project/runtime": {
+ "version": "0.101.0",
+ "resolved": "https://registry.npmjs.org/@oxc-project/runtime/-/runtime-0.101.0.tgz",
+ "integrity": "sha512-t3qpfVZIqSiLQ5Kqt/MC4Ge/WCOGrrcagAdzTcDaggupjiGxUx4nJF2v6wUCXWSzWHn5Ns7XLv13fCJEwCOERQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@oxc-project/types": {
+ "version": "0.101.0",
+ "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.101.0.tgz",
+ "integrity": "sha512-nuFhqlUzJX+gVIPPfuE6xurd4lST3mdcWOhyK/rZO0B9XWMKm79SuszIQEnSMmmDhq1DC8WWVYGVd+6F93o1gQ==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/Boshen"
+ }
+ },
+ "node_modules/@quansync/fs": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/@quansync/fs/-/fs-0.1.6.tgz",
+ "integrity": "sha512-zoA8SqQO11qH9H8FCBR7NIbowYARIPmBz3nKjgAaOUDi/xPAAu1uAgebtV7KXHTc6CDZJVRZ1u4wIGvY5CWYaw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "quansync": "^0.3.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sxzz"
+ }
+ },
+ "node_modules/@quansync/fs/node_modules/quansync": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/quansync/-/quansync-0.3.0.tgz",
+ "integrity": "sha512-dr5GyvHkdDbrAeXyl0MGi/jWKM6+/lZbNFVe+Ff7ivJi4RVry7O091VfXT/wuAVcF3FwNr86nwZVdxx8nELb2w==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://github.com/sponsors/antfu"
+ },
+ {
+ "type": "individual",
+ "url": "https://github.com/sponsors/sxzz"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@rolldown/binding-android-arm64": {
+ "version": "1.0.0-beta.53",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0-beta.53.tgz",
+ "integrity": "sha512-Ok9V8o7o6YfSdTTYA/uHH30r3YtOxLD6G3wih/U9DO0ucBBFq8WPt/DslU53OgfteLRHITZny9N/qCUxMf9kjQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@rolldown/binding-darwin-arm64": {
+ "version": "1.0.0-beta.53",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.0-beta.53.tgz",
+ "integrity": "sha512-yIsKqMz0CtRnVa6x3Pa+mzTihr4Ty+Z6HfPbZ7RVbk1Uxnco4+CUn7Qbm/5SBol1JD/7nvY8rphAgyAi7Lj6Vg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@rolldown/binding-darwin-x64": {
+ "version": "1.0.0-beta.53",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.0-beta.53.tgz",
+ "integrity": "sha512-GTXe+mxsCGUnJOFMhfGWmefP7Q9TpYUseHvhAhr21nCTgdS8jPsvirb0tJwM3lN0/u/cg7bpFNa16fQrjKrCjQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@rolldown/binding-freebsd-x64": {
+ "version": "1.0.0-beta.53",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.0-beta.53.tgz",
+ "integrity": "sha512-9Tmp7bBvKqyDkMcL4e089pH3RsjD3SUungjmqWtyhNOxoQMh0fSmINTyYV8KXtE+JkxYMPWvnEt+/mfpVCkk8w==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@rolldown/binding-linux-arm-gnueabihf": {
+ "version": "1.0.0-beta.53",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.0-beta.53.tgz",
+ "integrity": "sha512-a1y5fiB0iovuzdbjUxa7+Zcvgv+mTmlGGC4XydVIsyl48eoxgaYkA3l9079hyTyhECsPq+mbr0gVQsFU11OJAQ==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@rolldown/binding-linux-arm64-gnu": {
+ "version": "1.0.0-beta.53",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.0-beta.53.tgz",
+ "integrity": "sha512-bpIGX+ov9PhJYV+wHNXl9rzq4F0QvILiURn0y0oepbQx+7stmQsKA0DhPGwmhfvF856wq+gbM8L92SAa/CBcLg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@rolldown/binding-linux-arm64-musl": {
+ "version": "1.0.0-beta.53",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.0-beta.53.tgz",
+ "integrity": "sha512-bGe5EBB8FVjHBR1mOLOPEFg1Lp3//7geqWkU5NIhxe+yH0W8FVrQ6WRYOap4SUTKdklD/dC4qPLREkMMQ855FA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@rolldown/binding-linux-x64-gnu": {
+ "version": "1.0.0-beta.53",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.0-beta.53.tgz",
+ "integrity": "sha512-qL+63WKVQs1CMvFedlPt0U9PiEKJOAL/bsHMKUDS6Vp2Q+YAv/QLPu8rcvkfIMvQ0FPU2WL0aX4eWwF6e/GAnA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@rolldown/binding-linux-x64-musl": {
+ "version": "1.0.0-beta.53",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.0-beta.53.tgz",
+ "integrity": "sha512-VGl9JIGjoJh3H8Mb+7xnVqODajBmrdOOb9lxWXdcmxyI+zjB2sux69br0hZJDTyLJfvBoYm439zPACYbCjGRmw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@rolldown/binding-openharmony-arm64": {
+ "version": "1.0.0-beta.53",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.0-beta.53.tgz",
+ "integrity": "sha512-B4iIserJXuSnNzA5xBLFUIjTfhNy7d9sq4FUMQY3GhQWGVhS2RWWzzDnkSU6MUt7/aHUrep0CdQfXUJI9D3W7A==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openharmony"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@rolldown/binding-wasm32-wasi": {
+ "version": "1.0.0-beta.53",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.0-beta.53.tgz",
+ "integrity": "sha512-BUjAEgpABEJXilGq/BPh7jeU3WAJ5o15c1ZEgHaDWSz3LB881LQZnbNJHmUiM4d1JQWMYYyR1Y490IBHi2FPJg==",
+ "cpu": [
+ "wasm32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "@napi-rs/wasm-runtime": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@rolldown/binding-win32-arm64-msvc": {
+ "version": "1.0.0-beta.53",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.0-beta.53.tgz",
+ "integrity": "sha512-s27uU7tpCWSjHBnxyVXHt3rMrQdJq5MHNv3BzsewCIroIw3DJFjMH1dzCPPMUFxnh1r52Nf9IJ/eWp6LDoyGcw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@rolldown/binding-win32-x64-msvc": {
+ "version": "1.0.0-beta.53",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0-beta.53.tgz",
+ "integrity": "sha512-cjWL/USPJ1g0en2htb4ssMjIycc36RvdQAx1WlXnS6DpULswiUTVXPDesTifSKYSyvx24E0YqQkEm0K/M2Z/AA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@rolldown/pluginutils": {
+ "version": "1.0.0-beta.53",
+ "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.53.tgz",
+ "integrity": "sha512-vENRlFU4YbrwVqNDZ7fLvy+JR1CRkyr01jhSiDpE1u6py3OMzQfztQU2jxykW3ALNxO4kSlqIDeYyD0Y9RcQeQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@rollup/rollup-android-arm-eabi": {
+ "version": "4.44.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.44.1.tgz",
+ "integrity": "sha512-JAcBr1+fgqx20m7Fwe1DxPUl/hPkee6jA6Pl7n1v2EFiktAHenTaXl5aIFjUIEsfn9w3HE4gK1lEgNGMzBDs1w==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-android-arm64": {
+ "version": "4.44.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.44.1.tgz",
+ "integrity": "sha512-RurZetXqTu4p+G0ChbnkwBuAtwAbIwJkycw1n6GvlGlBuS4u5qlr5opix8cBAYFJgaY05TWtM+LaoFggUmbZEQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-arm64": {
+ "version": "4.44.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.44.1.tgz",
+ "integrity": "sha512-fM/xPesi7g2M7chk37LOnmnSTHLG/v2ggWqKj3CCA1rMA4mm5KVBT1fNoswbo1JhPuNNZrVwpTvlCVggv8A2zg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-x64": {
+ "version": "4.44.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.44.1.tgz",
+ "integrity": "sha512-gDnWk57urJrkrHQ2WVx9TSVTH7lSlU7E3AFqiko+bgjlh78aJ88/3nycMax52VIVjIm3ObXnDL2H00e/xzoipw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-freebsd-arm64": {
+ "version": "4.44.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.44.1.tgz",
+ "integrity": "sha512-wnFQmJ/zPThM5zEGcnDcCJeYJgtSLjh1d//WuHzhf6zT3Md1BvvhJnWoy+HECKu2bMxaIcfWiu3bJgx6z4g2XA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "freebsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-freebsd-x64": {
+ "version": "4.44.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.44.1.tgz",
+ "integrity": "sha512-uBmIxoJ4493YATvU2c0upGz87f99e3wop7TJgOA/bXMFd2SvKCI7xkxY/5k50bv7J6dw1SXT4MQBQSLn8Bb/Uw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "freebsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
+ "version": "4.44.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.44.1.tgz",
+ "integrity": "sha512-n0edDmSHlXFhrlmTK7XBuwKlG5MbS7yleS1cQ9nn4kIeW+dJH+ExqNgQ0RrFRew8Y+0V/x6C5IjsHrJmiHtkxQ==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-musleabihf": {
+ "version": "4.44.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.44.1.tgz",
+ "integrity": "sha512-8WVUPy3FtAsKSpyk21kV52HCxB+me6YkbkFHATzC2Yd3yuqHwy2lbFL4alJOLXKljoRw08Zk8/xEj89cLQ/4Nw==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-gnu": {
+ "version": "4.44.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.44.1.tgz",
+ "integrity": "sha512-yuktAOaeOgorWDeFJggjuCkMGeITfqvPgkIXhDqsfKX8J3jGyxdDZgBV/2kj/2DyPaLiX6bPdjJDTu9RB8lUPQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-musl": {
+ "version": "4.44.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.44.1.tgz",
+ "integrity": "sha512-W+GBM4ifET1Plw8pdVaecwUgxmiH23CfAUj32u8knq0JPFyK4weRy6H7ooxYFD19YxBulL0Ktsflg5XS7+7u9g==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-loongarch64-gnu": {
+ "version": "4.44.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.44.1.tgz",
+ "integrity": "sha512-1zqnUEMWp9WrGVuVak6jWTl4fEtrVKfZY7CvcBmUUpxAJ7WcSowPSAWIKa/0o5mBL/Ij50SIf9tuirGx63Ovew==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
+ "version": "4.44.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.44.1.tgz",
+ "integrity": "sha512-Rl3JKaRu0LHIx7ExBAAnf0JcOQetQffaw34T8vLlg9b1IhzcBgaIdnvEbbsZq9uZp3uAH+JkHd20Nwn0h9zPjA==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-riscv64-gnu": {
+ "version": "4.44.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.44.1.tgz",
+ "integrity": "sha512-j5akelU3snyL6K3N/iX7otLBIl347fGwmd95U5gS/7z6T4ftK288jKq3A5lcFKcx7wwzb5rgNvAg3ZbV4BqUSw==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-riscv64-musl": {
+ "version": "4.44.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.44.1.tgz",
+ "integrity": "sha512-ppn5llVGgrZw7yxbIm8TTvtj1EoPgYUAbfw0uDjIOzzoqlZlZrLJ/KuiE7uf5EpTpCTrNt1EdtzF0naMm0wGYg==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-s390x-gnu": {
+ "version": "4.44.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.44.1.tgz",
+ "integrity": "sha512-Hu6hEdix0oxtUma99jSP7xbvjkUM/ycke/AQQ4EC5g7jNRLLIwjcNwaUy95ZKBJJwg1ZowsclNnjYqzN4zwkAw==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-gnu": {
+ "version": "4.44.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.44.1.tgz",
+ "integrity": "sha512-EtnsrmZGomz9WxK1bR5079zee3+7a+AdFlghyd6VbAjgRJDbTANJ9dcPIPAi76uG05micpEL+gPGmAKYTschQw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-musl": {
+ "version": "4.44.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.44.1.tgz",
+ "integrity": "sha512-iAS4p+J1az6Usn0f8xhgL4PaU878KEtutP4hqw52I4IO6AGoyOkHCxcc4bqufv1tQLdDWFx8lR9YlwxKuv3/3g==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-arm64-msvc": {
+ "version": "4.44.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.44.1.tgz",
+ "integrity": "sha512-NtSJVKcXwcqozOl+FwI41OH3OApDyLk3kqTJgx8+gp6On9ZEt5mYhIsKNPGuaZr3p9T6NWPKGU/03Vw4CNU9qg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-ia32-msvc": {
+ "version": "4.44.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.44.1.tgz",
+ "integrity": "sha512-JYA3qvCOLXSsnTR3oiyGws1Dm0YTuxAAeaYGVlGpUsHqloPcFjPg+X0Fj2qODGLNwQOAcCiQmHub/V007kiH5A==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-x64-msvc": {
+ "version": "4.44.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.44.1.tgz",
+ "integrity": "sha512-J8o22LuF0kTe7m+8PvW9wk3/bRq5+mRo5Dqo6+vXb7otCm3TPhYOJqOaQtGU9YMWQSL3krMnoOxMr0+9E6F3Ug==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@tybys/wasm-util": {
+ "version": "0.10.1",
+ "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz",
+ "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@types/estree": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
+ "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
+ "dev": true
+ },
+ "node_modules/@types/node": {
+ "version": "24.0.10",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-24.0.10.tgz",
+ "integrity": "sha512-ENHwaH+JIRTDIEEbDK6QSQntAYGtbvdDXnMXnZaZ6k13Du1dPMmprkEHIL7ok2Wl2aZevetwTAb5S+7yIF+enA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "undici-types": "~7.8.0"
+ }
+ },
+ "node_modules/acorn": {
+ "version": "8.15.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
+ "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/ansis": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/ansis/-/ansis-4.2.0.tgz",
+ "integrity": "sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/ast-kit": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/ast-kit/-/ast-kit-2.2.0.tgz",
+ "integrity": "sha512-m1Q/RaVOnTp9JxPX+F+Zn7IcLYMzM8kZofDImfsKZd8MbR+ikdOzTeztStWqfrqIxZnYWryyI9ePm3NGjnZgGw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/parser": "^7.28.5",
+ "pathe": "^2.0.3"
+ },
+ "engines": {
+ "node": ">=20.19.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sxzz"
+ }
+ },
+ "node_modules/birpc": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/birpc/-/birpc-3.0.0.tgz",
+ "integrity": "sha512-by+04pHuxpCEQcucAXqzopqfhyI8TLK5Qg5MST0cB6MP+JhHna9ollrtK9moVh27aq6Q6MEJgebD0cVm//yBkg==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ }
+ },
+ "node_modules/cac": {
+ "version": "6.7.14",
+ "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz",
+ "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/dts-resolver": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/dts-resolver/-/dts-resolver-2.1.3.tgz",
+ "integrity": "sha512-bihc7jPC90VrosXNzK0LTE2cuLP6jr0Ro8jk+kMugHReJVLIpHz/xadeq3MhuwyO4TD4OA3L1Q8pBBFRc08Tsw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=20.19.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sxzz"
+ },
+ "peerDependencies": {
+ "oxc-resolver": ">=11.0.0"
+ },
+ "peerDependenciesMeta": {
+ "oxc-resolver": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/empathic": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/empathic/-/empathic-2.0.0.tgz",
+ "integrity": "sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/esbuild": {
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.5.tgz",
+ "integrity": "sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==",
+ "dev": true,
+ "hasInstallScript": true,
+ "peer": true,
+ "bin": {
+ "esbuild": "bin/esbuild"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "optionalDependencies": {
+ "@esbuild/aix-ppc64": "0.25.5",
+ "@esbuild/android-arm": "0.25.5",
+ "@esbuild/android-arm64": "0.25.5",
+ "@esbuild/android-x64": "0.25.5",
+ "@esbuild/darwin-arm64": "0.25.5",
+ "@esbuild/darwin-x64": "0.25.5",
+ "@esbuild/freebsd-arm64": "0.25.5",
+ "@esbuild/freebsd-x64": "0.25.5",
+ "@esbuild/linux-arm": "0.25.5",
+ "@esbuild/linux-arm64": "0.25.5",
+ "@esbuild/linux-ia32": "0.25.5",
+ "@esbuild/linux-loong64": "0.25.5",
+ "@esbuild/linux-mips64el": "0.25.5",
+ "@esbuild/linux-ppc64": "0.25.5",
+ "@esbuild/linux-riscv64": "0.25.5",
+ "@esbuild/linux-s390x": "0.25.5",
+ "@esbuild/linux-x64": "0.25.5",
+ "@esbuild/netbsd-arm64": "0.25.5",
+ "@esbuild/netbsd-x64": "0.25.5",
+ "@esbuild/openbsd-arm64": "0.25.5",
+ "@esbuild/openbsd-x64": "0.25.5",
+ "@esbuild/sunos-x64": "0.25.5",
+ "@esbuild/win32-arm64": "0.25.5",
+ "@esbuild/win32-ia32": "0.25.5",
+ "@esbuild/win32-x64": "0.25.5"
+ }
+ },
+ "node_modules/excalibur": {
+ "version": "0.30.3",
+ "resolved": "https://registry.npmjs.org/excalibur/-/excalibur-0.30.3.tgz",
+ "integrity": "sha512-RUP3qQ6tFe9BJxvqh6p/I0B9rKMu+KGlHZruJyVOohiYUtCP0LsRgkVHxezvWtWsvCElVBL4PeCooE4KPlIldA==",
+ "license": "BSD-2-Clause"
+ },
+ "node_modules/fdir": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
+ "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "peerDependencies": {
+ "picomatch": "^3 || ^4"
+ },
+ "peerDependenciesMeta": {
+ "picomatch": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/fsevents": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "node_modules/get-tsconfig": {
+ "version": "4.13.0",
+ "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.0.tgz",
+ "integrity": "sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "resolve-pkg-maps": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
+ }
+ },
+ "node_modules/hookable": {
+ "version": "5.5.3",
+ "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz",
+ "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/import-without-cache": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/import-without-cache/-/import-without-cache-0.2.2.tgz",
+ "integrity": "sha512-4TTuRrZ0jBULXzac3EoX9ZviOs8Wn9iAbNhJEyLhTpAGF9eNmYSruaMMN/Tec/yqaO7H6yS2kALfQDJ5FxfatA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=20.19.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sxzz"
+ }
+ },
+ "node_modules/jsesc": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz",
+ "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "jsesc": "bin/jsesc"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/lz-string": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz",
+ "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==",
+ "license": "MIT",
+ "bin": {
+ "lz-string": "bin/bin.js"
+ }
+ },
+ "node_modules/magic-string": {
+ "version": "0.30.21",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz",
+ "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.5.5"
+ }
+ },
+ "node_modules/monaco-editor": {
+ "version": "0.52.2",
+ "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.52.2.tgz",
+ "integrity": "sha512-GEQWEZmfkOGLdd3XK8ryrfWz3AIP8YymVXiPHEdewrUq7mh0qrKrfHLNCXcbB6sTnMLnOZ3ztSiKcciFUkIJwQ==",
+ "license": "MIT"
+ },
+ "node_modules/nanoid": {
+ "version": "3.3.11",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
+ "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
+ "node_modules/obug": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.1.tgz",
+ "integrity": "sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==",
+ "dev": true,
+ "funding": [
+ "https://github.com/sponsors/sxzz",
+ "https://opencollective.com/debug"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/pathe": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz",
+ "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/picocolors": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+ "dev": true
+ },
+ "node_modules/picomatch": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
+ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/postcss": {
+ "version": "8.5.6",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz",
+ "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "nanoid": "^3.3.11",
+ "picocolors": "^1.1.1",
+ "source-map-js": "^1.2.1"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
+ "node_modules/quansync": {
+ "version": "0.2.11",
+ "resolved": "https://registry.npmjs.org/quansync/-/quansync-0.2.11.tgz",
+ "integrity": "sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://github.com/sponsors/antfu"
+ },
+ {
+ "type": "individual",
+ "url": "https://github.com/sponsors/sxzz"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/resolve-pkg-maps": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz",
+ "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1"
+ }
+ },
+ "node_modules/rolldown": {
+ "version": "1.0.0-beta.53",
+ "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.0-beta.53.tgz",
+ "integrity": "sha512-Qd9c2p0XKZdgT5AYd+KgAMggJ8ZmCs3JnS9PTMWkyUfteKlfmKtxJbWTHkVakxwXs1Ub7jrRYVeFeF7N0sQxyw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@oxc-project/types": "=0.101.0",
+ "@rolldown/pluginutils": "1.0.0-beta.53"
+ },
+ "bin": {
+ "rolldown": "bin/cli.mjs"
+ },
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ },
+ "optionalDependencies": {
+ "@rolldown/binding-android-arm64": "1.0.0-beta.53",
+ "@rolldown/binding-darwin-arm64": "1.0.0-beta.53",
+ "@rolldown/binding-darwin-x64": "1.0.0-beta.53",
+ "@rolldown/binding-freebsd-x64": "1.0.0-beta.53",
+ "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-beta.53",
+ "@rolldown/binding-linux-arm64-gnu": "1.0.0-beta.53",
+ "@rolldown/binding-linux-arm64-musl": "1.0.0-beta.53",
+ "@rolldown/binding-linux-x64-gnu": "1.0.0-beta.53",
+ "@rolldown/binding-linux-x64-musl": "1.0.0-beta.53",
+ "@rolldown/binding-openharmony-arm64": "1.0.0-beta.53",
+ "@rolldown/binding-wasm32-wasi": "1.0.0-beta.53",
+ "@rolldown/binding-win32-arm64-msvc": "1.0.0-beta.53",
+ "@rolldown/binding-win32-x64-msvc": "1.0.0-beta.53"
+ }
+ },
+ "node_modules/rolldown-plugin-dts": {
+ "version": "0.18.2",
+ "resolved": "https://registry.npmjs.org/rolldown-plugin-dts/-/rolldown-plugin-dts-0.18.2.tgz",
+ "integrity": "sha512-jRz3SHwr69F/IGEDMHtWjwVjgZwo3PZEadmMt4uA/e3rbIytoLJhvktSKlIAy/4QeWhVL9XeuCJBC66wvBQRwg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/generator": "^7.28.5",
+ "@babel/parser": "^7.28.5",
+ "@babel/types": "^7.28.5",
+ "ast-kit": "^2.2.0",
+ "birpc": "^3.0.0",
+ "dts-resolver": "^2.1.3",
+ "get-tsconfig": "^4.13.0",
+ "magic-string": "^0.30.21",
+ "obug": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=20.19.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sxzz"
+ },
+ "peerDependencies": {
+ "@ts-macro/tsc": "^0.3.6",
+ "@typescript/native-preview": ">=7.0.0-dev.20250601.1",
+ "rolldown": "^1.0.0-beta.51",
+ "typescript": "^5.0.0",
+ "vue-tsc": "~3.1.0"
+ },
+ "peerDependenciesMeta": {
+ "@ts-macro/tsc": {
+ "optional": true
+ },
+ "@typescript/native-preview": {
+ "optional": true
+ },
+ "typescript": {
+ "optional": true
+ },
+ "vue-tsc": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/rollup": {
+ "version": "4.44.1",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.44.1.tgz",
+ "integrity": "sha512-x8H8aPvD+xbl0Do8oez5f5o8eMS3trfCghc4HhLAnCkj7Vl0d1JWGs0UF/D886zLW2rOj2QymV/JcSSsw+XDNg==",
+ "dev": true,
+ "dependencies": {
+ "@types/estree": "1.0.8"
+ },
+ "bin": {
+ "rollup": "dist/bin/rollup"
+ },
+ "engines": {
+ "node": ">=18.0.0",
+ "npm": ">=8.0.0"
+ },
+ "optionalDependencies": {
+ "@rollup/rollup-android-arm-eabi": "4.44.1",
+ "@rollup/rollup-android-arm64": "4.44.1",
+ "@rollup/rollup-darwin-arm64": "4.44.1",
+ "@rollup/rollup-darwin-x64": "4.44.1",
+ "@rollup/rollup-freebsd-arm64": "4.44.1",
+ "@rollup/rollup-freebsd-x64": "4.44.1",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.44.1",
+ "@rollup/rollup-linux-arm-musleabihf": "4.44.1",
+ "@rollup/rollup-linux-arm64-gnu": "4.44.1",
+ "@rollup/rollup-linux-arm64-musl": "4.44.1",
+ "@rollup/rollup-linux-loongarch64-gnu": "4.44.1",
+ "@rollup/rollup-linux-powerpc64le-gnu": "4.44.1",
+ "@rollup/rollup-linux-riscv64-gnu": "4.44.1",
+ "@rollup/rollup-linux-riscv64-musl": "4.44.1",
+ "@rollup/rollup-linux-s390x-gnu": "4.44.1",
+ "@rollup/rollup-linux-x64-gnu": "4.44.1",
+ "@rollup/rollup-linux-x64-musl": "4.44.1",
+ "@rollup/rollup-win32-arm64-msvc": "4.44.1",
+ "@rollup/rollup-win32-ia32-msvc": "4.44.1",
+ "@rollup/rollup-win32-x64-msvc": "4.44.1",
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/semver": {
+ "version": "7.7.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
+ "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/source-map-js": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
+ "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/tinyglobby": {
+ "version": "0.2.15",
+ "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz",
+ "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fdir": "^6.5.0",
+ "picomatch": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/SuperchupuDev"
+ }
+ },
+ "node_modules/tree-kill": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz",
+ "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "tree-kill": "cli.js"
+ }
+ },
+ "node_modules/tsdown": {
+ "version": "0.17.0",
+ "resolved": "https://registry.npmjs.org/tsdown/-/tsdown-0.17.0.tgz",
+ "integrity": "sha512-NPZRrlC51X9Bb55ZTDwrWges8Dm1niCvNA5AYw7aix6pfnDnB4WR0neG5RPq75xIodg3hqlQUzzyrX7n4dmnJg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansis": "^4.2.0",
+ "cac": "^6.7.14",
+ "empathic": "^2.0.0",
+ "hookable": "^5.5.3",
+ "import-without-cache": "^0.2.2",
+ "obug": "^2.1.1",
+ "rolldown": "1.0.0-beta.53",
+ "rolldown-plugin-dts": "^0.18.2",
+ "semver": "^7.7.3",
+ "tinyexec": "^1.0.2",
+ "tinyglobby": "^0.2.15",
+ "tree-kill": "^1.2.2",
+ "unconfig-core": "^7.4.1",
+ "unrun": "^0.2.16"
+ },
+ "bin": {
+ "tsdown": "dist/run.mjs"
+ },
+ "engines": {
+ "node": ">=20.19.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sxzz"
+ },
+ "peerDependencies": {
+ "@arethetypeswrong/core": "^0.18.1",
+ "@vitejs/devtools": "^0.0.0-alpha.18",
+ "publint": "^0.3.0",
+ "typescript": "^5.0.0",
+ "unplugin-lightningcss": "^0.4.0",
+ "unplugin-unused": "^0.5.0"
+ },
+ "peerDependenciesMeta": {
+ "@arethetypeswrong/core": {
+ "optional": true
+ },
+ "@vitejs/devtools": {
+ "optional": true
+ },
+ "publint": {
+ "optional": true
+ },
+ "typescript": {
+ "optional": true
+ },
+ "unplugin-lightningcss": {
+ "optional": true
+ },
+ "unplugin-unused": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/tsdown/node_modules/tinyexec": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.2.tgz",
+ "integrity": "sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/tslib": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
+ "dev": true,
+ "license": "0BSD",
+ "optional": true
+ },
+ "node_modules/typescript": {
+ "version": "5.9.3",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
+ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "peer": true,
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=14.17"
+ }
+ },
+ "node_modules/unconfig-core": {
+ "version": "7.4.1",
+ "resolved": "https://registry.npmjs.org/unconfig-core/-/unconfig-core-7.4.1.tgz",
+ "integrity": "sha512-Bp/bPZjV2Vl/fofoA2OYLSnw1Z0MOhCX7zHnVCYrazpfZvseBbGhwcNQMxsg185Mqh7VZQqK3C8hFG/Dyng+yA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@quansync/fs": "^0.1.5",
+ "quansync": "^0.2.11"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ }
+ },
+ "node_modules/undici-types": {
+ "version": "7.8.0",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.8.0.tgz",
+ "integrity": "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/unplugin": {
+ "version": "2.3.11",
+ "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-2.3.11.tgz",
+ "integrity": "sha512-5uKD0nqiYVzlmCRs01Fhs2BdkEgBS3SAVP6ndrBsuK42iC2+JHyxM05Rm9G8+5mkmRtzMZGY8Ct5+mliZxU/Ww==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/remapping": "^2.3.5",
+ "acorn": "^8.15.0",
+ "picomatch": "^4.0.3",
+ "webpack-virtual-modules": "^0.6.2"
+ },
+ "engines": {
+ "node": ">=18.12.0"
+ }
+ },
+ "node_modules/unplugin-raw": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/unplugin-raw/-/unplugin-raw-0.6.3.tgz",
+ "integrity": "sha512-R/AJrN3pcXOkKHF5nCVxk3Afx64jfeqQVAs/M+5npN7IWzVb0sVUlz3USW7AT5FhCs9pBuFZwdz3zgDsxQPzPQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "unplugin": "^2.3.10",
+ "unplugin-utils": "^0.3.0"
+ },
+ "engines": {
+ "node": ">=20.18.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sxzz"
+ },
+ "peerDependencies": {
+ "esbuild": ">=0.25.0"
+ },
+ "peerDependenciesMeta": {
+ "esbuild": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/unplugin-utils": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/unplugin-utils/-/unplugin-utils-0.3.1.tgz",
+ "integrity": "sha512-5lWVjgi6vuHhJ526bI4nlCOmkCIF3nnfXkCMDeMJrtdvxTs6ZFCM8oNufGTsDbKv/tJ/xj8RpvXjRuPBZJuJog==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "pathe": "^2.0.3",
+ "picomatch": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=20.19.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sxzz"
+ }
+ },
+ "node_modules/unrun": {
+ "version": "0.2.16",
+ "resolved": "https://registry.npmjs.org/unrun/-/unrun-0.2.16.tgz",
+ "integrity": "sha512-DBkjUpQv9AQs1464XWnWQ97RuxPCu+CImvQMPmqFeHoL2Bi6C1BGPacMuXVw4VMIfQewNJZWUxPt5envG90oUA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@oxc-project/runtime": "^0.101.0",
+ "rolldown": "1.0.0-beta.53"
+ },
+ "bin": {
+ "unrun": "dist/cli.mjs"
+ },
+ "engines": {
+ "node": ">=20.19.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/Gugustinette"
+ },
+ "peerDependencies": {
+ "synckit": "^0.11.11"
+ },
+ "peerDependenciesMeta": {
+ "synckit": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/vite": {
+ "version": "7.2.4",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-7.2.4.tgz",
+ "integrity": "sha512-NL8jTlbo0Tn4dUEXEsUg8KeyG/Lkmc4Fnzb8JXN/Ykm9G4HNImjtABMJgkQoVjOBN/j2WAwDTRytdqJbZsah7w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "esbuild": "^0.25.0",
+ "fdir": "^6.5.0",
+ "picomatch": "^4.0.3",
+ "postcss": "^8.5.6",
+ "rollup": "^4.43.0",
+ "tinyglobby": "^0.2.15"
+ },
+ "bin": {
+ "vite": "bin/vite.js"
+ },
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ },
+ "funding": {
+ "url": "https://github.com/vitejs/vite?sponsor=1"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.3"
+ },
+ "peerDependencies": {
+ "@types/node": "^20.19.0 || >=22.12.0",
+ "jiti": ">=1.21.0",
+ "less": "^4.0.0",
+ "lightningcss": "^1.21.0",
+ "sass": "^1.70.0",
+ "sass-embedded": "^1.70.0",
+ "stylus": ">=0.54.8",
+ "sugarss": "^5.0.0",
+ "terser": "^5.16.0",
+ "tsx": "^4.8.1",
+ "yaml": "^2.4.2"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ },
+ "jiti": {
+ "optional": true
+ },
+ "less": {
+ "optional": true
+ },
+ "lightningcss": {
+ "optional": true
+ },
+ "sass": {
+ "optional": true
+ },
+ "sass-embedded": {
+ "optional": true
+ },
+ "stylus": {
+ "optional": true
+ },
+ "sugarss": {
+ "optional": true
+ },
+ "terser": {
+ "optional": true
+ },
+ "tsx": {
+ "optional": true
+ },
+ "yaml": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/webpack-virtual-modules": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz",
+ "integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==",
+ "dev": true,
+ "license": "MIT"
+ }
+ }
+}
diff --git a/playground/package.json b/playground/package.json
new file mode 100644
index 00000000..c26fdf78
--- /dev/null
+++ b/playground/package.json
@@ -0,0 +1,27 @@
+{
+ "name": "excalibur-playground",
+ "version": "1.0.0",
+ "description": "Excalibur Playground and Editor",
+ "type": "module",
+ "scripts": {
+ "start": "vite",
+ "build": "vite build",
+ "build:dev": "vite build --outDir dist/playground",
+ "build:types": "npx tsdown",
+ "preview": "vite preview"
+ },
+ "author": "Erik Onarheim",
+ "license": "BSD-2-Clause",
+ "devDependencies": {
+ "@types/node": "24.0.10",
+ "tsdown": "0.17.0",
+ "typescript": "5.9.3",
+ "unplugin-raw": "0.6.3",
+ "vite": "7.2.4"
+ },
+ "dependencies": {
+ "excalibur": "0.30.3",
+ "lz-string": "1.5.0",
+ "monaco-editor": "0.52.2"
+ }
+}
diff --git a/playground/public/favicon.ico b/playground/public/favicon.ico
new file mode 100644
index 0000000000000000000000000000000000000000..8e1e5e8db8bd7462b9b909eace61803a17c3ae9a
GIT binary patch
literal 4418
zcmZQzU}RuqP*4QX3Jf}e3=Con3=A3!3=9ek3=B>T5OIc4fHwqq^?Lt-Ty(jzrX)K2vgG?Ab)`{y4@f?$Zik@*$u)VyFr-N_JiC5!XUem
zF~|)d3~~bqQ^Oq~dq5cEUl<1QK^WO?5F2DS2!refVQSb9GXrEF48z2NgM7-TmHQ`=s2^FVF@VUXR(7~}>J2Dt%*(e+V_53(DCk?jVtL3V>M$Zim(
zmVLO)0l5K$L3Sf!kQ+c4_)~Q
zH-K6vzvKxev?FO+yc7rgj?T5J?(7|AX;A82@9a{}00d
h8|43k@dNh%|3UZ%^Z)-K{Ezwne-QrP47C)i#uNuZeuq
zB+-`HuORW}+RXQda?cbzzxzG=c;CU}@9qAX&seca>x1Fk1D6^2EFR=7f6e4FNu}2<
zc;54-W3d?)eaUbCEz&5EDUc~Y@lvC!V9sK`9Y_2Azbc8GcFF3rk>lfr$2+Y3mS<{Z
z$P^qnYngW_Q;J>Y_}#Ku#~6=)e0Fm!`=rgcA4lJKXVT03F4JXleL~1`@yipx{3)vU
zdi}5_f9_=yK8xZ#wIR>t#jJcEHy9tkegA6c@vAF}qQ+YD?b9!utu#GTcz|*H>5o>+Gi3@6-2ElDyzl_y
d|JgN+-z>|bmN_~8XJBAp@O1TaS?83{1OQ2st=a$p
literal 0
HcmV?d00001
diff --git a/playground/public/logo-white@2x.png b/playground/public/logo-white@2x.png
new file mode 100644
index 0000000000000000000000000000000000000000..6e0367b520f556d855e0f01bd495871a87d1cdb7
GIT binary patch
literal 3563
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
c*ExTt3rK|LvFc3eZ59r>mdKI;Vst0JPNXo&W#<
literal 0
HcmV?d00001
diff --git a/playground/public/player-run.png b/playground/public/player-run.png
new file mode 100644
index 0000000000000000000000000000000000000000..ba1394c1defffb5c7f4393bff9c0d3bb24875ccf
GIT binary patch
literal 147657
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