From 182dfd9f1fe209954b2a5e14831a9f6edd4dad4c Mon Sep 17 00:00:00 2001 From: Christian Semmler Date: Thu, 2 Apr 2026 17:23:37 -0700 Subject: [PATCH] Add multiplayer, cloud sync, crash reporting, scene player, and memories features --- .gitignore | 4 + README.md | 15 +- index.html | 17 +- package-lock.json | 4129 ++++++++++------- package.json | 23 +- public/images/infoface.webp | Bin 0 -> 2034 bytes public/images/infosign.webp | Bin 0 -> 1080 bytes public/images/multi.webp | Bin 0 -> 94478 bytes public/images/nick_closeup.webp | Bin 0 -> 6954 bytes scripts/deploy.sh | 143 + server/Dockerfile | 20 + server/migrations/0001_initial.sql | 60 + server/migrations/0002_drop_char_columns.sql | 20 + .../0003_object_id_to_anim_index.sql | 6 + server/migrations/0004_add_language.sql | 2 + server/migrations/0005_crash_reports.sql | 9 + server/migrations/0006_cloud_storage.sql | 15 + server/package-lock.json | 1885 ++++++++ server/package.json | 18 + server/src/account.ts | 29 + server/src/auth.ts | 51 + server/src/cloud.ts | 207 + server/src/crashes.ts | 44 + server/src/index.ts | 99 + server/src/memories.ts | 158 + server/tsconfig.json | 11 + server/wrangler.toml | 27 + site.config.js | 4 + src/App.svelte | 90 +- src/app.css | 969 +--- src/core/animation/keyframeEval.js | 208 + src/core/animation/stringUtils.js | 24 + src/core/auth.js | 61 + src/core/base64.js | 14 + src/core/cloud-sync.js | 295 ++ src/core/config.js | 1 + .../core/downloader.worker.js | 31 +- src/core/emscripten.js | 114 +- src/core/formats/BinaryReader.js | 10 + src/core/formats/FlcDecoder.js | 317 ++ src/core/formats/SICompositeParser.js | 253 + src/core/formats/SIParser.js | 577 +++ src/core/formats/WdbParser.js | 21 + src/core/keep-visible.js | 16 + src/core/memories.js | 228 + src/core/navigation.js | 69 +- src/core/opfs.js | 107 +- src/core/rendering/ActorRenderer.js | 424 +- src/core/rendering/AnimatedRenderer.js | 198 +- src/core/rendering/AnimationMixer.js | 298 ++ src/core/rendering/BaseRenderer.js | 602 ++- src/core/rendering/BuildingRenderer.js | 29 +- src/core/rendering/LambertShader.js | 59 + src/core/rendering/PhonemePlayer.js | 141 + src/core/rendering/PlantRenderer.js | 35 +- src/core/rendering/ScenePlayerRenderer.js | 597 +++ src/core/rendering/ScoreCubeRenderer.js | 28 +- src/core/rendering/VehiclePartRenderer.js | 128 +- src/core/rendering/WdbModelRenderer.js | 92 +- src/core/room-names.js | 47 + src/core/savegame/actorConstants.js | 82 +- src/core/savegame/index.js | 11 +- src/core/sceneAudio.js | 193 + src/core/service-worker.js | 17 +- src/core/thumbnails.js | 93 + src/core/thumbnails.worker.js | 123 + src/core/toast.js | 17 + src/core/wdbCache.js | 25 + src/data/actor-display-names.json | 68 + src/data/animation-titles.json | 401 ++ src/lib/Accordion.svelte | 81 + src/lib/AccountIndicator.svelte | 495 ++ src/lib/ActorPicker.svelte | 221 + src/lib/BackButton.svelte | 11 +- src/lib/CanvasWrapper.svelte | 83 + src/lib/ConfigToast.svelte | 36 +- src/lib/ConfigurePage.svelte | 57 +- src/lib/Controls.svelte | 19 +- src/lib/CrashOverlay.svelte | 151 + src/lib/DebugPanel.svelte | 216 +- src/lib/EditorTooltip.svelte | 1 - src/lib/FreeStuffPage.svelte | 97 + src/lib/GoodbyePopup.svelte | 20 + src/lib/MemoriesPage.svelte | 1063 +++++ src/lib/MultiplayerPage.svelte | 728 +++ src/lib/OpfsDisabledBanner.svelte | 27 + src/lib/PanningImage.svelte | 47 + src/lib/ReadMePage.svelte | 385 +- src/lib/SaveEditorPage.svelte | 21 +- src/lib/ScenePlayerPage.svelte | 702 +++ src/lib/ShareLinkButton.svelte | 114 + src/lib/SignInModal.svelte | 261 ++ src/lib/TopContent.svelte | 22 + src/lib/WhatsNewBanner.svelte | 138 + src/lib/config/ExtrasTab.svelte | 77 +- src/lib/icons/DiscordIcon.svelte | 8 + src/lib/multiplayer/AnimationLegend.svelte | 208 + src/lib/multiplayer/AnimationPanel.svelte | 354 ++ src/lib/multiplayer/AnimationTabs.svelte | 184 + src/lib/multiplayer/CountdownOverlay.svelte | 105 + src/lib/multiplayer/EmoteButton.svelte | 70 + src/lib/multiplayer/EmoteFan.svelte | 318 ++ src/lib/multiplayer/HotbarPopover.svelte | 101 + src/lib/multiplayer/MultiplayerFab.svelte | 184 + src/lib/multiplayer/MultiplayerHotbar.svelte | 356 ++ src/lib/multiplayer/MultiplayerOverlay.svelte | 323 ++ src/lib/multiplayer/PeopleIcon.svelte | 10 + src/lib/multiplayer/SettingsPanel.svelte | 104 + src/lib/multiplayer/ShareButton.svelte | 57 + src/lib/multiplayer/StyleGrid.svelte | 74 + src/lib/multiplayer/animationCatalog.js | 830 ++++ src/lib/multiplayer/constants.js | 62 + src/lib/save-editor/ActorEditor.svelte | 87 +- src/lib/save-editor/BuildingEditor.svelte | 84 +- src/lib/save-editor/EditorPreview.svelte | 71 + .../save-editor/LightPositionEditor.svelte | 1 - src/lib/save-editor/PlantEditor.svelte | 71 +- src/lib/save-editor/ScoreCube.svelte | 18 +- src/lib/save-editor/TexturePickerModal.svelte | 3 +- src/lib/save-editor/VehicleEditor.svelte | 82 +- src/lib/save-editor/editor-common.css | 8 +- src/main.js | 37 +- src/stores.js | 113 +- vite.config.js | 25 +- worker/package-lock.json | 1434 ++++++ worker/package.json | 13 + worker/src/index.ts | 182 + worker/tsconfig.json | 16 + worker/wrangler.toml | 38 + 129 files changed, 20853 insertions(+), 3960 deletions(-) create mode 100644 public/images/infoface.webp create mode 100644 public/images/infosign.webp create mode 100644 public/images/multi.webp create mode 100644 public/images/nick_closeup.webp create mode 100755 scripts/deploy.sh create mode 100644 server/Dockerfile create mode 100644 server/migrations/0001_initial.sql create mode 100644 server/migrations/0002_drop_char_columns.sql create mode 100644 server/migrations/0003_object_id_to_anim_index.sql create mode 100644 server/migrations/0004_add_language.sql create mode 100644 server/migrations/0005_crash_reports.sql create mode 100644 server/migrations/0006_cloud_storage.sql create mode 100644 server/package-lock.json create mode 100644 server/package.json create mode 100644 server/src/account.ts create mode 100644 server/src/auth.ts create mode 100644 server/src/cloud.ts create mode 100644 server/src/crashes.ts create mode 100644 server/src/index.ts create mode 100644 server/src/memories.ts create mode 100644 server/tsconfig.json create mode 100644 server/wrangler.toml create mode 100644 site.config.js create mode 100644 src/core/animation/keyframeEval.js create mode 100644 src/core/animation/stringUtils.js create mode 100644 src/core/auth.js create mode 100644 src/core/base64.js create mode 100644 src/core/cloud-sync.js create mode 100644 src/core/config.js rename public/downloader.js => src/core/downloader.worker.js (54%) create mode 100644 src/core/formats/FlcDecoder.js create mode 100644 src/core/formats/SICompositeParser.js create mode 100644 src/core/formats/SIParser.js create mode 100644 src/core/keep-visible.js create mode 100644 src/core/memories.js create mode 100644 src/core/rendering/AnimationMixer.js create mode 100644 src/core/rendering/LambertShader.js create mode 100644 src/core/rendering/PhonemePlayer.js create mode 100644 src/core/rendering/ScenePlayerRenderer.js create mode 100644 src/core/room-names.js create mode 100644 src/core/sceneAudio.js create mode 100644 src/core/thumbnails.js create mode 100644 src/core/thumbnails.worker.js create mode 100644 src/core/toast.js create mode 100644 src/core/wdbCache.js create mode 100644 src/data/actor-display-names.json create mode 100644 src/data/animation-titles.json create mode 100644 src/lib/AccountIndicator.svelte create mode 100644 src/lib/ActorPicker.svelte create mode 100644 src/lib/CrashOverlay.svelte create mode 100644 src/lib/MemoriesPage.svelte create mode 100644 src/lib/MultiplayerPage.svelte create mode 100644 src/lib/OpfsDisabledBanner.svelte create mode 100644 src/lib/PanningImage.svelte create mode 100644 src/lib/ScenePlayerPage.svelte create mode 100644 src/lib/ShareLinkButton.svelte create mode 100644 src/lib/SignInModal.svelte create mode 100644 src/lib/WhatsNewBanner.svelte create mode 100644 src/lib/icons/DiscordIcon.svelte create mode 100644 src/lib/multiplayer/AnimationLegend.svelte create mode 100644 src/lib/multiplayer/AnimationPanel.svelte create mode 100644 src/lib/multiplayer/AnimationTabs.svelte create mode 100644 src/lib/multiplayer/CountdownOverlay.svelte create mode 100644 src/lib/multiplayer/EmoteButton.svelte create mode 100644 src/lib/multiplayer/EmoteFan.svelte create mode 100644 src/lib/multiplayer/HotbarPopover.svelte create mode 100644 src/lib/multiplayer/MultiplayerFab.svelte create mode 100644 src/lib/multiplayer/MultiplayerHotbar.svelte create mode 100644 src/lib/multiplayer/MultiplayerOverlay.svelte create mode 100644 src/lib/multiplayer/PeopleIcon.svelte create mode 100644 src/lib/multiplayer/SettingsPanel.svelte create mode 100644 src/lib/multiplayer/ShareButton.svelte create mode 100644 src/lib/multiplayer/StyleGrid.svelte create mode 100644 src/lib/multiplayer/animationCatalog.js create mode 100644 src/lib/multiplayer/constants.js create mode 100644 src/lib/save-editor/EditorPreview.svelte create mode 100644 worker/package-lock.json create mode 100644 worker/package.json create mode 100644 worker/src/index.ts create mode 100644 worker/tsconfig.json create mode 100644 worker/wrangler.toml diff --git a/.gitignore b/.gitignore index d867904..98e44ed 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,7 @@ isle.wasm.map isle.js LEGO save-editor.bin +.dev.vars +.env +.env.* +.env.local diff --git a/README.md b/README.md index d1c56a9..af46f05 100644 --- a/README.md +++ b/README.md @@ -54,6 +54,8 @@ A custom web frontend for the Emscripten port of [isle-portable](https://github. | `npm run dev` | Start development server with hot reload | | `npm run build` | Build for production (outputs to `dist/`) | | `npm run preview` | Preview the production build locally | +| `npm run deploy` | Deploy to dev environment (R2) | +| `npm run deploy -- production` | Deploy to production environment (R2) | ## Project Structure @@ -65,13 +67,14 @@ isle.pizza/ │ ├── stores.js # Svelte stores for state management │ ├── core/ │ │ ├── formats/ # Binary file parsers/serializers (WDB, save games, animations, textures) -│ │ ├── rendering/ # Three.js renderers (BaseRenderer, VehiclePartRenderer, ActorRenderer, etc.) +│ │ ├── rendering/ # OGL renderers (BaseRenderer, VehiclePartRenderer, ActorRenderer, etc.) │ │ ├── savegame/ # Save game constants, actor data, color tables -│ │ └── ... # Audio, OPFS, service worker, asset loading -│ └── lib/ # UI components and pages (save editor, configure, etc.) +│ │ └── ... # Audio, OPFS, cloud sync, auth, service worker, asset loading +│ └── lib/ # UI components and pages (save editor, multiplayer, scene player, etc.) +├── server/ # Cloudflare Workers backend (auth, cloud sync, crash reports, memories) ├── public/ │ └── images/ # UI images (menu buttons, tab icons) -├── scripts/ # Build and asset generation scripts +├── scripts/ # Build, asset generation, and deploy scripts ├── src-sw/ # Service worker source ├── index.html # HTML entry point ├── isle.js # Emscripten JS (not in repo, build from isle-portable) @@ -92,9 +95,11 @@ Alternatively, a [Docker image that bundles the runtime with this frontend](http ## Tech Stack - [Svelte 5](https://svelte.dev/) - UI framework -- [Three.js](https://threejs.org/) - 3D rendering for save editor previews +- [OGL](https://ogl.dev/) - 3D rendering for save editor previews - [Vite](https://vitejs.dev/) - Build tool and dev server - [Workbox](https://developer.chrome.com/docs/workbox/) - Service worker and offline support +- [Hono](https://hono.dev/) - Backend API framework (Cloudflare Workers) +- [better-auth](https://www.better-auth.com/) - Authentication (Discord) ## License diff --git a/index.html b/index.html index fa28b86..cb5d456 100644 --- a/index.html +++ b/index.html @@ -3,26 +3,27 @@ + LEGO® Island + content="Play LEGO® Island (1997) in your browser — no download required. A faithful open-source recreation built from the original decompiled source code, running on desktop, mobile, and more."> - + content="LEGO Island, LEGO, 1997, browser game, play online, no download, WebAssembly, open source, retro gaming, Pepper Roni, Infomaniac, Brickster, isledecomp"> + - - + + - - + + - + diff --git a/package-lock.json b/package-lock.json index 694c145..857283e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,15 +9,16 @@ "version": "1.0.0", "dependencies": { "@floating-ui/dom": "^1.7.5", - "three": "^0.182.0" + "better-auth": "^1.5.5", + "ogl": "^1.0.11" }, "devDependencies": { - "@sveltejs/vite-plugin-svelte": "^4.0.0", - "svelte": "^5.0.0", + "@sveltejs/vite-plugin-svelte": "^7.0.0", + "svelte": "^5.46.4", "svelte-check": "^4.0.0", - "typescript": "^5.0.0", - "vite": "^5.4.0", - "workbox-cli": "^7.3.0" + "typescript": "^6.0.0", + "vite": "^8.0.0", + "workbox-cli": "^7.4.0" } }, "node_modules/@apideck/better-ajv-errors": { @@ -25,6 +26,7 @@ "resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.6.tgz", "integrity": "sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==", "dev": true, + "license": "MIT", "dependencies": { "json-schema": "^0.4.0", "jsonpointer": "^5.0.0", @@ -38,12 +40,13 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", - "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" }, @@ -52,29 +55,31 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.5.tgz", - "integrity": "sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz", + "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz", - "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", + "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.5", - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-module-transforms": "^7.28.3", - "@babel/helpers": "^7.28.4", - "@babel/parser": "^7.28.5", - "@babel/template": "^7.27.2", - "@babel/traverse": "^7.28.5", - "@babel/types": "^7.28.5", + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helpers": "^7.28.6", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.29.0", + "@babel/types": "^7.29.0", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", @@ -95,18 +100,20 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/generator": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.5.tgz", - "integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==", + "version": "7.29.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", + "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/parser": "^7.28.5", - "@babel/types": "^7.28.5", + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" @@ -120,6 +127,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.27.3" }, @@ -128,12 +136,13 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", - "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", + "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.27.2", + "@babel/compat-data": "^7.28.6", "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", @@ -148,6 +157,7 @@ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^3.0.2" } @@ -157,22 +167,24 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.5.tgz", - "integrity": "sha512-q3WC4JfdODypvxArsJQROfupPBq9+lMwjKq7C33GhbFYJsufD0yd/ziwD+hJucLeWsnFPWZjsU2DNFqBPE7jwQ==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.6.tgz", + "integrity": "sha512-dTOdvsjnG3xNT9Y0AUg1wAl38y+4Rl4sf9caSQZOXdNqVn+H+HbbJ4IyyHaIqNR6SW9oJpA/RuRjsjCw2IdIow==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.3", "@babel/helper-member-expression-to-functions": "^7.28.5", "@babel/helper-optimise-call-expression": "^7.27.1", - "@babel/helper-replace-supers": "^7.27.1", + "@babel/helper-replace-supers": "^7.28.6", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", - "@babel/traverse": "^7.28.5", + "@babel/traverse": "^7.28.6", "semver": "^6.3.1" }, "engines": { @@ -187,6 +199,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -196,6 +209,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.28.5.tgz", "integrity": "sha512-N1EhvLtHzOvj7QQOUCCS3NrPJP8c5W6ZXCHDn7Yialuy1iu4r5EmIYkXlKNqT99Ciw+W0mDqWoR6HWMZlFP3hw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.3", "regexpu-core": "^6.3.1", @@ -213,21 +227,23 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.5.tgz", - "integrity": "sha512-uJnGFcPsWQK8fvjgGP5LZUZZsYGIoPeRjSF5PGwrelYgq7Q15/Ft9NGFp1zglwgIv//W0uG4BevRuSJRyylZPg==", + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.8.tgz", + "integrity": "sha512-47UwBLPpQi1NoWzLuHNjRoHlYXMwIJoBf7MFou6viC/sIHWYygpvr0B6IAyh5sBdA2nr2LPIRww8lfaUVQINBA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-plugin-utils": "^7.27.1", - "debug": "^4.4.1", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "debug": "^4.4.3", "lodash.debounce": "^4.0.8", - "resolve": "^1.22.10" + "resolve": "^1.22.11" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" @@ -238,6 +254,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -247,6 +264,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.28.5.tgz", "integrity": "sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/traverse": "^7.28.5", "@babel/types": "^7.28.5" @@ -256,27 +274,29 @@ } }, "node_modules/@babel/helper-module-imports": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", - "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", + "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/traverse": "^7.27.1", - "@babel/types": "^7.27.1" + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz", - "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", + "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1", - "@babel/traverse": "^7.28.3" + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -290,6 +310,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz", "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.27.1" }, @@ -298,10 +319,11 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", - "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz", + "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -311,6 +333,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz", "integrity": "sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.1", "@babel/helper-wrap-function": "^7.27.1", @@ -324,14 +347,15 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz", - "integrity": "sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.28.6.tgz", + "integrity": "sha512-mq8e+laIk94/yFec3DxSjCRD2Z0TAjhVbEJY3UQrlwVo15Lmt7C2wAUbK4bjnTs4APkwsYLTahXRraQXhb1WCg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.27.1", + "@babel/helper-member-expression-to-functions": "^7.28.5", "@babel/helper-optimise-call-expression": "^7.27.1", - "@babel/traverse": "^7.27.1" + "@babel/traverse": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -345,6 +369,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz", "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/traverse": "^7.27.1", "@babel/types": "^7.27.1" @@ -358,6 +383,7 @@ "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" } @@ -367,6 +393,7 @@ "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" } @@ -376,44 +403,48 @@ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.28.3.tgz", - "integrity": "sha512-zdf983tNfLZFletc0RRXYrHrucBEg95NIFMkn6K9dbeMYnsgHaSBGcQqdsCSStG2PYwRre0Qc2NNSCXbG+xc6g==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.28.6.tgz", + "integrity": "sha512-z+PwLziMNBeSQJonizz2AGnndLsP2DeGHIxDAn+wdHOGuo4Fo1x1HBPPXeE9TAOPHNNWQKCSlA2VZyYyyibDnQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/template": "^7.27.2", - "@babel/traverse": "^7.28.3", - "@babel/types": "^7.28.2" + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz", - "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==", + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.2.tgz", + "integrity": "sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/template": "^7.27.2", - "@babel/types": "^7.28.4" + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0" }, "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==", + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", + "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.28.5" + "@babel/types": "^7.29.0" }, "bin": { "parser": "bin/babel-parser.js" @@ -427,6 +458,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.28.5.tgz", "integrity": "sha512-87GDMS3tsmMSi/3bWOte1UblL+YUTFMV8SZPZ2eSEL17s74Cw/l63rR6NmGVKMYW2GYi85nE+/d6Hw5N0bEk2Q==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/traverse": "^7.28.5" @@ -443,6 +475,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.27.1.tgz", "integrity": "sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -458,6 +491,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.27.1.tgz", "integrity": "sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -473,6 +507,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.27.1.tgz", "integrity": "sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", @@ -486,13 +521,14 @@ } }, "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.28.3.tgz", - "integrity": "sha512-b6YTX108evsvE4YgWyQ921ZAFFQm3Bn+CA3+ZXlNVnPhx+UfsVURoPjfGAPCjBgrqo30yX/C2nZGX96DxvR9Iw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.28.6.tgz", + "integrity": "sha512-a0aBScVTlNaiUe35UtfxAN7A/tehvvG4/ByO6+46VPKTRSlfnAFsgKy0FUh+qAkQrDTmhDkT+IBOKlOoMUxQ0g==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/traverse": "^7.28.3" + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/traverse": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -506,6 +542,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" }, @@ -514,12 +551,13 @@ } }, "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.27.1.tgz", - "integrity": "sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.28.6.tgz", + "integrity": "sha512-pSJUpFHdx9z5nqTSirOCMtYVP2wFgoWhP0p3g8ONK/4IHhLIBd0B9NYqAvIUAhq+OkhO4VM1tENCt0cjlsNShw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -529,12 +567,13 @@ } }, "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz", - "integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.28.6.tgz", + "integrity": "sha512-jiLC0ma9XkQT3TKJ9uYvlakm66Pamywo+qwL+oL8HJOvc6TWdZXVfhqJr8CCzbSGUAbDOzlGHJC1U+vRfLQDvw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -548,6 +587,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -564,6 +604,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz", "integrity": "sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -575,14 +616,15 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.28.0.tgz", - "integrity": "sha512-BEOdvX4+M765icNPZeidyADIvQ1m1gmunXufXxvRESy/jNNyfovIqUyE7MVgGBjWktCoJlzvFA1To2O4ymIO3Q==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.29.0.tgz", + "integrity": "sha512-va0VdWro4zlBr2JsXC+ofCPB2iG12wPtVGTWFx2WLDOM3nYQZZIGP82qku2eW/JR83sD+k2k+CsNtyEbUqhU6w==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-remap-async-to-generator": "^7.27.1", - "@babel/traverse": "^7.28.0" + "@babel/traverse": "^7.29.0" }, "engines": { "node": ">=6.9.0" @@ -592,13 +634,14 @@ } }, "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.27.1.tgz", - "integrity": "sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.28.6.tgz", + "integrity": "sha512-ilTRcmbuXjsMmcZ3HASTe4caH5Tpo93PkTxF9oG2VZsSWsahydmcEHhix9Ik122RcTnZnUzPbmux4wh1swfv7g==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-remap-async-to-generator": "^7.27.1" }, "engines": { @@ -613,6 +656,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.27.1.tgz", "integrity": "sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -624,12 +668,13 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.5.tgz", - "integrity": "sha512-45DmULpySVvmq9Pj3X9B+62Xe+DJGov27QravQJU1LLcapR6/10i+gYVAucGGJpHBp5mYxIMK4nDAT/QDLr47g==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.6.tgz", + "integrity": "sha512-tt/7wOtBmwHPNMPu7ax4pdPz6shjFrmHDghvNC+FG9Qvj7D6mJcoRQIF5dy4njmxR941l6rgtvfSB2zX3VlUIw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -639,13 +684,14 @@ } }, "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.27.1.tgz", - "integrity": "sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.28.6.tgz", + "integrity": "sha512-dY2wS3I2G7D697VHndN91TJr8/AAfXQNt5ynCTI/MpxMsSzHp+52uNivYT5wCPax3whc47DR8Ba7cmlQMg24bw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-create-class-features-plugin": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -655,13 +701,14 @@ } }, "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.28.3.tgz", - "integrity": "sha512-LtPXlBbRoc4Njl/oh1CeD/3jC+atytbnf/UqLoqTDcEYGUPj022+rvfkbDYieUrSj3CaV4yHDByPE+T2HwfsJg==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.28.6.tgz", + "integrity": "sha512-rfQ++ghVwTWTqQ7w8qyDxL1XGihjBss4CmTgGRCTAC9RIbhVpyp4fOeZtta0Lbf+dTNIVJer6ych2ibHwkZqsQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.28.3", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-create-class-features-plugin": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -671,17 +718,18 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.4.tgz", - "integrity": "sha512-cFOlhIYPBv/iBoc+KS3M6et2XPtbT2HiCRfBXWtfpc9OAyostldxIf9YAYB6ypURBBbx+Qv6nyrLzASfJe+hBA==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.6.tgz", + "integrity": "sha512-EF5KONAqC5zAqT783iMGuM2ZtmEBy+mJMOKl2BCvPZ2lVrwvXnB6o+OBWCS+CoeCCpVRF2sA2RBKUxvT8tQT5Q==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.3", - "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-compilation-targets": "^7.28.6", "@babel/helper-globals": "^7.28.0", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-replace-supers": "^7.27.1", - "@babel/traverse": "^7.28.4" + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-replace-supers": "^7.28.6", + "@babel/traverse": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -691,13 +739,14 @@ } }, "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.27.1.tgz", - "integrity": "sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.28.6.tgz", + "integrity": "sha512-bcc3k0ijhHbc2lEfpFHgx7eYw9KNXqOerKWfzbxEHUGKnS3sz9C4CNL9OiFN1297bDNfUiSO7DaLzbvHQQQ1BQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/template": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/template": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -711,6 +760,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.5.tgz", "integrity": "sha512-Kl9Bc6D0zTUcFUvkNuQh4eGXPKKNDOJQXVyyM4ZAQPMveniJdxi8XMJwLo+xSoW3MIq81bD33lcUe9kZpl0MCw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/traverse": "^7.28.5" @@ -723,13 +773,14 @@ } }, "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.27.1.tgz", - "integrity": "sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.28.6.tgz", + "integrity": "sha512-SljjowuNKB7q5Oayv4FoPzeB74g3QgLt8IVJw9ADvWy3QnUb/01aw8I4AVv8wYnPvQz2GDDZ/g3GhcNyDBI4Bg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -743,6 +794,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.27.1.tgz", "integrity": "sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -754,13 +806,14 @@ } }, "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.27.1.tgz", - "integrity": "sha512-hkGcueTEzuhB30B3eJCbCYeCaaEQOmQR0AdvzpD4LoN0GXMWzzGSuRrxR2xTnCrvNbVwK9N6/jQ92GSLfiZWoQ==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.29.0.tgz", + "integrity": "sha512-zBPcW2lFGxdiD8PUnPwJjag2J9otbcLQzvbiOzDxpYXyCuYX9agOwMPGn1prVH0a4qzhCKu24rlH4c1f7yA8rw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -774,6 +827,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.27.1.tgz", "integrity": "sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -785,13 +839,14 @@ } }, "node_modules/@babel/plugin-transform-explicit-resource-management": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-explicit-resource-management/-/plugin-transform-explicit-resource-management-7.28.0.tgz", - "integrity": "sha512-K8nhUcn3f6iB+P3gwCv/no7OdzOZQcKchW6N389V6PD8NUWKZHzndOd9sPDVbMoBsbmjMqlB4L9fm+fEFNVlwQ==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-explicit-resource-management/-/plugin-transform-explicit-resource-management-7.28.6.tgz", + "integrity": "sha512-Iao5Konzx2b6g7EPqTy40UZbcdXE126tTxVFr/nAIj+WItNxjKSYTEw3RC+A2/ZetmdJsgueL1KhaMCQHkLPIg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/plugin-transform-destructuring": "^7.28.0" + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/plugin-transform-destructuring": "^7.28.5" }, "engines": { "node": ">=6.9.0" @@ -801,12 +856,13 @@ } }, "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.28.5.tgz", - "integrity": "sha512-D4WIMaFtwa2NizOp+dnoFjRez/ClKiC2BqqImwKd1X28nqBtZEyCYJ2ozQrrzlxAFrcrjxo39S6khe9RNDlGzw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.28.6.tgz", + "integrity": "sha512-WitabqiGjV/vJ0aPOLSFfNY1u9U3R7W36B03r5I2KoNix+a3sOhJ3pKFB3R5It9/UiK78NiO0KE9P21cMhlPkw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -820,6 +876,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.27.1.tgz", "integrity": "sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -835,6 +892,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.27.1.tgz", "integrity": "sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" @@ -851,6 +909,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz", "integrity": "sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-compilation-targets": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1", @@ -864,12 +923,13 @@ } }, "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.27.1.tgz", - "integrity": "sha512-6WVLVJiTjqcQauBhn1LkICsR2H+zm62I3h9faTDKt1qP4jn2o72tSvqMwtGFKGTpojce0gJs+76eZ2uCHRZh0Q==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.28.6.tgz", + "integrity": "sha512-Nr+hEN+0geQkzhbdgQVPoqr47lZbm+5fCUmO70722xJZd0Mvb59+33QLImGj6F+DkK3xgDi1YVysP8whD6FQAw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -883,6 +943,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.27.1.tgz", "integrity": "sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -894,12 +955,13 @@ } }, "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.28.5.tgz", - "integrity": "sha512-axUuqnUTBuXyHGcJEVVh9pORaN6wC5bYfE7FGzPiaWa3syib9m7g+/IT/4VgCOe2Upef43PHzeAvcrVek6QuuA==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.28.6.tgz", + "integrity": "sha512-+anKKair6gpi8VsM/95kmomGNMD0eLz1NQ8+Pfw5sAwWH9fGYXT50E55ZpV0pHUHWf6IUTWPM+f/7AAff+wr9A==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -913,6 +975,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.27.1.tgz", "integrity": "sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -928,6 +991,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.27.1.tgz", "integrity": "sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-module-transforms": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1" @@ -940,13 +1004,14 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.27.1.tgz", - "integrity": "sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.28.6.tgz", + "integrity": "sha512-jppVbf8IV9iWWwWTQIxJMAJCWBuuKx71475wHwYytrRGQ2CWiDvYlADQno3tcYpS/T2UUWFQp3nVtYfK/YBQrA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -956,15 +1021,16 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.28.5.tgz", - "integrity": "sha512-vn5Jma98LCOeBy/KpeQhXcV2WZgaRUtjwQmjoBuLNlOmkg0fB5pdvYVeWRYI69wWKwK2cD1QbMiUQnoujWvrew==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.29.0.tgz", + "integrity": "sha512-PrujnVFbOdUpw4UHiVwKvKRLMMic8+eC0CuNlxjsyZUiBjhFdPsewdXCkveh2KqBA9/waD0W1b4hXSOBQJezpQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.28.3", - "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-validator-identifier": "^7.28.5", - "@babel/traverse": "^7.28.5" + "@babel/traverse": "^7.29.0" }, "engines": { "node": ">=6.9.0" @@ -978,6 +1044,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.27.1.tgz", "integrity": "sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-module-transforms": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1" @@ -990,13 +1057,14 @@ } }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.27.1.tgz", - "integrity": "sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.29.0.tgz", + "integrity": "sha512-1CZQA5KNAD6ZYQLPw7oi5ewtDNxH/2vuCh+6SmvgDfhumForvs8a1o9n0UrEoBD8HU4djO2yWngTQlXl1NDVEQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1010,6 +1078,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.27.1.tgz", "integrity": "sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -1021,12 +1090,13 @@ } }, "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.27.1.tgz", - "integrity": "sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.28.6.tgz", + "integrity": "sha512-3wKbRgmzYbw24mDJXT7N+ADXw8BC/imU9yo9c9X9NKaLF1fW+e5H1U5QjMUBe4Qo4Ox/o++IyUkl1sVCLgevKg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1036,12 +1106,13 @@ } }, "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.27.1.tgz", - "integrity": "sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.28.6.tgz", + "integrity": "sha512-SJR8hPynj8outz+SlStQSwvziMN4+Bq99it4tMIf5/Caq+3iOc0JtKyse8puvyXkk3eFRIA5ID/XfunGgO5i6w==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1051,16 +1122,17 @@ } }, "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.4.tgz", - "integrity": "sha512-373KA2HQzKhQCYiRVIRr+3MjpCObqzDlyrM6u4I201wL8Mp2wHf7uB8GhDwis03k2ti8Zr65Zyyqs1xOxUF/Ew==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.6.tgz", + "integrity": "sha512-5rh+JR4JBC4pGkXLAcYdLHZjXudVxWMXbB6u6+E9lRL5TrGVbHt1TjxGbZ8CkmYw9zjkB7jutzOROArsqtncEA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/plugin-transform-destructuring": "^7.28.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/plugin-transform-destructuring": "^7.28.5", "@babel/plugin-transform-parameters": "^7.27.7", - "@babel/traverse": "^7.28.4" + "@babel/traverse": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1074,6 +1146,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.27.1.tgz", "integrity": "sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-replace-supers": "^7.27.1" @@ -1086,12 +1159,13 @@ } }, "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.27.1.tgz", - "integrity": "sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.28.6.tgz", + "integrity": "sha512-R8ja/Pyrv0OGAvAXQhSTmWyPJPml+0TMqXlO5w+AsMEiwb2fg3WkOvob7UxFSL3OIttFSGSRFKQsOhJ/X6HQdQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1101,12 +1175,13 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.28.5.tgz", - "integrity": "sha512-N6fut9IZlPnjPwgiQkXNhb+cT8wQKFlJNqcZkWlcTqkcqx6/kU4ynGmLFoa4LViBSirn05YAwk+sQBbPfxtYzQ==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.28.6.tgz", + "integrity": "sha512-A4zobikRGJTsX9uqVFdafzGkqD30t26ck2LmOzAuLL8b2x6k3TIqRiT2xVvA9fNmFeTX484VpsdgmKNA0bS23w==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" }, "engines": { @@ -1121,6 +1196,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.7.tgz", "integrity": "sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -1132,13 +1208,14 @@ } }, "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.27.1.tgz", - "integrity": "sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.28.6.tgz", + "integrity": "sha512-piiuapX9CRv7+0st8lmuUlRSmX6mBcVeNQ1b4AYzJxfCMuBfB0vBXDiGSmm03pKJw1v6cZ8KSeM+oUnM6yAExg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-create-class-features-plugin": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1148,14 +1225,15 @@ } }, "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.27.1.tgz", - "integrity": "sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.28.6.tgz", + "integrity": "sha512-b97jvNSOb5+ehyQmBpmhOCiUC5oVK4PMnpRvO7+ymFBoqYjeDHIU9jnrNUuwHOiL9RpGDoKBpSViarV+BU+eVA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.1", - "@babel/helper-create-class-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-create-class-features-plugin": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1169,6 +1247,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.27.1.tgz", "integrity": "sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -1180,12 +1259,13 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.28.4.tgz", - "integrity": "sha512-+ZEdQlBoRg9m2NnzvEeLgtvBMO4tkFBw5SQIUgLICgTrumLoU7lr+Oghi6km2PFj+dbUt2u1oby2w3BDO9YQnA==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.29.0.tgz", + "integrity": "sha512-FijqlqMA7DmRdg/aINBSs04y8XNTYw/lr1gJ2WsmBnnaNw1iS43EPkJW+zK7z65auG3AWRFXWj+NcTQwYptUog==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1195,13 +1275,14 @@ } }, "node_modules/@babel/plugin-transform-regexp-modifiers": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.27.1.tgz", - "integrity": "sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.28.6.tgz", + "integrity": "sha512-QGWAepm9qxpaIs7UM9FvUSnCGlb8Ua1RhyM4/veAxLwt3gMat/LSGrZixyuj4I6+Kn9iwvqCyPTtbdxanYoWYg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1215,6 +1296,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.27.1.tgz", "integrity": "sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -1230,6 +1312,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz", "integrity": "sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -1241,12 +1324,13 @@ } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.27.1.tgz", - "integrity": "sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.28.6.tgz", + "integrity": "sha512-9U4QObUC0FtJl05AsUcodau/RWDytrU6uKgkxu09mLR9HLDAtUMoPuuskm5huQsoktmsYpI+bGmq+iapDcriKA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" }, "engines": { @@ -1261,6 +1345,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.27.1.tgz", "integrity": "sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -1276,6 +1361,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz", "integrity": "sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -1291,6 +1377,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.1.tgz", "integrity": "sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -1306,6 +1393,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.27.1.tgz", "integrity": "sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -1317,13 +1405,14 @@ } }, "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.27.1.tgz", - "integrity": "sha512-uW20S39PnaTImxp39O5qFlHLS9LJEmANjMG7SxIhap8rCHqu0Ik+tLEPX5DKmHn6CsWQ7j3lix2tFOa5YtL12Q==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.28.6.tgz", + "integrity": "sha512-4Wlbdl/sIZjzi/8St0evF0gEZrgOswVO6aOzqxh1kDZOl9WmLrHq2HtGhnOJZmHZYKP8WZ1MDLCt5DAWwRo57A==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1337,6 +1426,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.27.1.tgz", "integrity": "sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1" @@ -1349,13 +1439,14 @@ } }, "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.27.1.tgz", - "integrity": "sha512-EtkOujbc4cgvb0mlpQefi4NTPBzhSIevblFevACNLUspmrALgmEBdL/XfnyyITfd8fKBZrZys92zOWcik7j9Tw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.28.6.tgz", + "integrity": "sha512-/wHc/paTUmsDYN7SZkpWxogTOBNnlx7nBQYfy6JJlCT7G3mVhltk3e++N7zV0XfgGsrqBxd4rJQt9H16I21Y1Q==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1365,80 +1456,81 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.28.5.tgz", - "integrity": "sha512-S36mOoi1Sb6Fz98fBfE+UZSpYw5mJm0NUHtIKrOuNcqeFauy1J6dIvXm2KRVKobOSaGq4t/hBXdN4HGU3wL9Wg==", + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.29.2.tgz", + "integrity": "sha512-DYD23veRYGvBFhcTY1iUvJnDNpuqNd/BzBwCvzOTKUnJjKg5kpUBh3/u9585Agdkgj+QuygG7jLfOPWMa2KVNw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.28.5", - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-plugin-utils": "^7.27.1", + "@babel/compat-data": "^7.29.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-validator-option": "^7.27.1", "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.28.5", "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.27.1", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.27.1", "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.27.1", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.28.3", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.28.6", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-import-assertions": "^7.27.1", - "@babel/plugin-syntax-import-attributes": "^7.27.1", + "@babel/plugin-syntax-import-assertions": "^7.28.6", + "@babel/plugin-syntax-import-attributes": "^7.28.6", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", "@babel/plugin-transform-arrow-functions": "^7.27.1", - "@babel/plugin-transform-async-generator-functions": "^7.28.0", - "@babel/plugin-transform-async-to-generator": "^7.27.1", + "@babel/plugin-transform-async-generator-functions": "^7.29.0", + "@babel/plugin-transform-async-to-generator": "^7.28.6", "@babel/plugin-transform-block-scoped-functions": "^7.27.1", - "@babel/plugin-transform-block-scoping": "^7.28.5", - "@babel/plugin-transform-class-properties": "^7.27.1", - "@babel/plugin-transform-class-static-block": "^7.28.3", - "@babel/plugin-transform-classes": "^7.28.4", - "@babel/plugin-transform-computed-properties": "^7.27.1", + "@babel/plugin-transform-block-scoping": "^7.28.6", + "@babel/plugin-transform-class-properties": "^7.28.6", + "@babel/plugin-transform-class-static-block": "^7.28.6", + "@babel/plugin-transform-classes": "^7.28.6", + "@babel/plugin-transform-computed-properties": "^7.28.6", "@babel/plugin-transform-destructuring": "^7.28.5", - "@babel/plugin-transform-dotall-regex": "^7.27.1", + "@babel/plugin-transform-dotall-regex": "^7.28.6", "@babel/plugin-transform-duplicate-keys": "^7.27.1", - "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.27.1", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.29.0", "@babel/plugin-transform-dynamic-import": "^7.27.1", - "@babel/plugin-transform-explicit-resource-management": "^7.28.0", - "@babel/plugin-transform-exponentiation-operator": "^7.28.5", + "@babel/plugin-transform-explicit-resource-management": "^7.28.6", + "@babel/plugin-transform-exponentiation-operator": "^7.28.6", "@babel/plugin-transform-export-namespace-from": "^7.27.1", "@babel/plugin-transform-for-of": "^7.27.1", "@babel/plugin-transform-function-name": "^7.27.1", - "@babel/plugin-transform-json-strings": "^7.27.1", + "@babel/plugin-transform-json-strings": "^7.28.6", "@babel/plugin-transform-literals": "^7.27.1", - "@babel/plugin-transform-logical-assignment-operators": "^7.28.5", + "@babel/plugin-transform-logical-assignment-operators": "^7.28.6", "@babel/plugin-transform-member-expression-literals": "^7.27.1", "@babel/plugin-transform-modules-amd": "^7.27.1", - "@babel/plugin-transform-modules-commonjs": "^7.27.1", - "@babel/plugin-transform-modules-systemjs": "^7.28.5", + "@babel/plugin-transform-modules-commonjs": "^7.28.6", + "@babel/plugin-transform-modules-systemjs": "^7.29.0", "@babel/plugin-transform-modules-umd": "^7.27.1", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.27.1", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.29.0", "@babel/plugin-transform-new-target": "^7.27.1", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.27.1", - "@babel/plugin-transform-numeric-separator": "^7.27.1", - "@babel/plugin-transform-object-rest-spread": "^7.28.4", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.28.6", + "@babel/plugin-transform-numeric-separator": "^7.28.6", + "@babel/plugin-transform-object-rest-spread": "^7.28.6", "@babel/plugin-transform-object-super": "^7.27.1", - "@babel/plugin-transform-optional-catch-binding": "^7.27.1", - "@babel/plugin-transform-optional-chaining": "^7.28.5", + "@babel/plugin-transform-optional-catch-binding": "^7.28.6", + "@babel/plugin-transform-optional-chaining": "^7.28.6", "@babel/plugin-transform-parameters": "^7.27.7", - "@babel/plugin-transform-private-methods": "^7.27.1", - "@babel/plugin-transform-private-property-in-object": "^7.27.1", + "@babel/plugin-transform-private-methods": "^7.28.6", + "@babel/plugin-transform-private-property-in-object": "^7.28.6", "@babel/plugin-transform-property-literals": "^7.27.1", - "@babel/plugin-transform-regenerator": "^7.28.4", - "@babel/plugin-transform-regexp-modifiers": "^7.27.1", + "@babel/plugin-transform-regenerator": "^7.29.0", + "@babel/plugin-transform-regexp-modifiers": "^7.28.6", "@babel/plugin-transform-reserved-words": "^7.27.1", "@babel/plugin-transform-shorthand-properties": "^7.27.1", - "@babel/plugin-transform-spread": "^7.27.1", + "@babel/plugin-transform-spread": "^7.28.6", "@babel/plugin-transform-sticky-regex": "^7.27.1", "@babel/plugin-transform-template-literals": "^7.27.1", "@babel/plugin-transform-typeof-symbol": "^7.27.1", "@babel/plugin-transform-unicode-escapes": "^7.27.1", - "@babel/plugin-transform-unicode-property-regex": "^7.27.1", + "@babel/plugin-transform-unicode-property-regex": "^7.28.6", "@babel/plugin-transform-unicode-regex": "^7.27.1", - "@babel/plugin-transform-unicode-sets-regex": "^7.27.1", + "@babel/plugin-transform-unicode-sets-regex": "^7.28.6", "@babel/preset-modules": "0.1.6-no-external-plugins", - "babel-plugin-polyfill-corejs2": "^0.4.14", - "babel-plugin-polyfill-corejs3": "^0.13.0", - "babel-plugin-polyfill-regenerator": "^0.6.5", - "core-js-compat": "^3.43.0", + "babel-plugin-polyfill-corejs2": "^0.4.15", + "babel-plugin-polyfill-corejs3": "^0.14.0", + "babel-plugin-polyfill-regenerator": "^0.6.6", + "core-js-compat": "^3.48.0", "semver": "^6.3.1" }, "engines": { @@ -1453,6 +1545,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -1462,6 +1555,7 @@ "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/types": "^7.4.4", @@ -1472,40 +1566,43 @@ } }, "node_modules/@babel/runtime": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz", - "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==", + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.2.tgz", + "integrity": "sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/template": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", - "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/parser": "^7.27.2", - "@babel/types": "^7.27.1" + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.5.tgz", - "integrity": "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", + "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.5", + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.28.5", - "@babel/template": "^7.27.2", - "@babel/types": "^7.28.5", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0", "debug": "^4.3.1" }, "engines": { @@ -1513,10 +1610,11 @@ } }, "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==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.28.5" @@ -1525,489 +1623,209 @@ "node": ">=6.9.0" } }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", - "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=12" + "node_modules/@better-auth/core": { + "version": "1.5.6", + "resolved": "https://registry.npmjs.org/@better-auth/core/-/core-1.5.6.tgz", + "integrity": "sha512-Ez9DZdIMFyxHremmoLz1emFPGNQomDC1jqqBPnZ6Ci+6TiGN3R9w/Y03cJn6I8r1ycKgOzeVMZtJ/erOZ27Gsw==", + "license": "MIT", + "dependencies": { + "@opentelemetry/semantic-conventions": "^1.39.0", + "@standard-schema/spec": "^1.1.0", + "zod": "^4.3.6" + }, + "peerDependencies": { + "@better-auth/utils": "0.3.1", + "@better-fetch/fetch": "1.1.21", + "@cloudflare/workers-types": ">=4", + "@opentelemetry/api": "^1.9.0", + "better-call": "1.3.2", + "jose": "^6.1.0", + "kysely": "^0.28.5", + "nanostores": "^1.0.1" + }, + "peerDependenciesMeta": { + "@cloudflare/workers-types": { + "optional": true + } } }, - "node_modules/@esbuild/android-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", - "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" + "node_modules/@better-auth/drizzle-adapter": { + "version": "1.5.6", + "resolved": "https://registry.npmjs.org/@better-auth/drizzle-adapter/-/drizzle-adapter-1.5.6.tgz", + "integrity": "sha512-VfFFmaoFw3ug12SiSuIwzrMoHyIVmkMGWm9gZ4sXdYYVX4HboCL4m3fjzOhppcmK5OGatRuU+N1UX6wxCITcXw==", + "license": "MIT", + "peerDependencies": { + "@better-auth/core": "1.5.6", + "@better-auth/utils": "^0.3.0", + "drizzle-orm": ">=0.41.0" + }, + "peerDependenciesMeta": { + "drizzle-orm": { + "optional": true + } } }, - "node_modules/@esbuild/android-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", - "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" + "node_modules/@better-auth/kysely-adapter": { + "version": "1.5.6", + "resolved": "https://registry.npmjs.org/@better-auth/kysely-adapter/-/kysely-adapter-1.5.6.tgz", + "integrity": "sha512-Fnf+h8WVKtw6lEOmVmiVVzDf3shJtM60AYf9XTnbdCeUd6MxN/KnaJZpkgtYnRs7a+nwtkVB+fg4lGETebGFXQ==", + "license": "MIT", + "peerDependencies": { + "@better-auth/core": "1.5.6", + "@better-auth/utils": "^0.3.0", + "kysely": "^0.27.0 || ^0.28.0" + }, + "peerDependenciesMeta": { + "kysely": { + "optional": true + } } }, - "node_modules/@esbuild/android-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", - "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" + "node_modules/@better-auth/memory-adapter": { + "version": "1.5.6", + "resolved": "https://registry.npmjs.org/@better-auth/memory-adapter/-/memory-adapter-1.5.6.tgz", + "integrity": "sha512-rS7ZsrIl5uvloUgNN0u9LOZJMMXnsZXVdUZ3MrTBKWM2KpoJjzPr9yN3Szyma5+0V7SltnzSGHPkYj2bEzzmlA==", + "license": "MIT", + "peerDependencies": { + "@better-auth/core": "1.5.6", + "@better-auth/utils": "^0.3.0" } }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", - "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" + "node_modules/@better-auth/mongo-adapter": { + "version": "1.5.6", + "resolved": "https://registry.npmjs.org/@better-auth/mongo-adapter/-/mongo-adapter-1.5.6.tgz", + "integrity": "sha512-6+M3MS2mor8fTUV3EI1FBLP0cs6QfbN+Ovx9+XxR/GdfKIBoNFzmPEPRbdGt+ft6PvrITsUm+T70+kkHgVSP6w==", + "license": "MIT", + "peerDependencies": { + "@better-auth/core": "1.5.6", + "@better-auth/utils": "^0.3.0", + "mongodb": "^6.0.0 || ^7.0.0" + }, + "peerDependenciesMeta": { + "mongodb": { + "optional": true + } } }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", - "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" + "node_modules/@better-auth/prisma-adapter": { + "version": "1.5.6", + "resolved": "https://registry.npmjs.org/@better-auth/prisma-adapter/-/prisma-adapter-1.5.6.tgz", + "integrity": "sha512-UxY9vQJs1Tt+O+T2YQnseDMlWmUSQvFZSBb5YiFRg7zcm+TEzujh4iX2/csA0YiZptLheovIuVWTP9nriewEBA==", + "license": "MIT", + "peerDependencies": { + "@better-auth/core": "1.5.6", + "@better-auth/utils": "^0.3.0", + "@prisma/client": "^5.0.0 || ^6.0.0 || ^7.0.0", + "prisma": "^5.0.0 || ^6.0.0 || ^7.0.0" + }, + "peerDependenciesMeta": { + "@prisma/client": { + "optional": true + }, + "prisma": { + "optional": true + } } }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", - "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" + "node_modules/@better-auth/telemetry": { + "version": "1.5.6", + "resolved": "https://registry.npmjs.org/@better-auth/telemetry/-/telemetry-1.5.6.tgz", + "integrity": "sha512-yXC7NSxnIFlxDkGdpD7KA+J9nqIQAPCJKe77GoaC5bWoe/DALo1MYorZfTgOafS7wrslNtsPT4feV/LJi1ubqQ==", + "license": "MIT", + "dependencies": { + "@better-auth/utils": "0.3.1", + "@better-fetch/fetch": "1.1.21" + }, + "peerDependencies": { + "@better-auth/core": "1.5.6" } }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", - "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", - "cpu": [ - "x64" - ], + "node_modules/@better-auth/utils": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@better-auth/utils/-/utils-0.3.1.tgz", + "integrity": "sha512-+CGp4UmZSUrHHnpHhLPYu6cV+wSUSvVbZbNykxhUDocpVNTo9uFFxw/NqJlh1iC4wQ9HKKWGCKuZ5wUgS0v6Kg==", + "license": "MIT" + }, + "node_modules/@better-fetch/fetch": { + "version": "1.1.21", + "resolved": "https://registry.npmjs.org/@better-fetch/fetch/-/fetch-1.1.21.tgz", + "integrity": "sha512-/ImESw0sskqlVR94jB+5+Pxjf+xBwDZF/N5+y2/q4EqD7IARUTSpPfIo8uf39SYpCxyOCtbyYpUrZ3F/k0zT4A==" + }, + "node_modules/@emnapi/core": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.9.1.tgz", + "integrity": "sha512-mukuNALVsoix/w1BJwFzwXBN/dHeejQtuVzcDsfOEsdpCumXb/E9j8w11h5S54tT1xhifGfbbSm/ICrObRb3KA==", "dev": true, + "license": "MIT", "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" + "dependencies": { + "@emnapi/wasi-threads": "1.2.0", + "tslib": "^2.4.0" } }, - "node_modules/@esbuild/linux-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", - "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", - "cpu": [ - "arm" - ], + "node_modules/@emnapi/runtime": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.9.1.tgz", + "integrity": "sha512-VYi5+ZVLhpgK4hQ0TAjiQiZ6ol0oe4mBx7mVv7IflsiEp0OWoVsp/+f9Vc1hOhE0TtkORVrI1GvzyreqpgWtkA==", "dev": true, + "license": "MIT", "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" + "dependencies": { + "tslib": "^2.4.0" } }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", - "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", - "cpu": [ - "arm64" - ], + "node_modules/@emnapi/wasi-threads": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.0.tgz", + "integrity": "sha512-N10dEJNSsUx41Z6pZsXU8FjPjpBEplgH24sfkmITrBED1/U2Esum9F3lfLrMjKHHjmi557zQn7kR9R+XWXu5Rg==", "dev": true, + "license": "MIT", "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", - "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", - "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", - "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", - "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", - "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", - "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", - "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", - "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", - "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", - "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", - "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", - "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", - "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" + "dependencies": { + "tslib": "^2.4.0" } }, "node_modules/@floating-ui/core": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.4.tgz", - "integrity": "sha512-C3HlIdsBxszvm5McXlB8PeOEWfBhcGBTZGkGlWc2U0KFY5IwG5OQEuQ8rq52DZmcHDlPLd+YFBK+cZcytwIFWg==", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.5.tgz", + "integrity": "sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==", + "license": "MIT", "dependencies": { - "@floating-ui/utils": "^0.2.10" + "@floating-ui/utils": "^0.2.11" } }, "node_modules/@floating-ui/dom": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.5.tgz", - "integrity": "sha512-N0bD2kIPInNHUHehXhMke1rBGs1dwqvC9O9KYMyyjK7iXt7GAhnro7UlcuYcGdS/yYOlq0MAVgrow8IbWJwyqg==", + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.6.tgz", + "integrity": "sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==", + "license": "MIT", "dependencies": { - "@floating-ui/core": "^1.7.4", - "@floating-ui/utils": "^0.2.10" + "@floating-ui/core": "^1.7.5", + "@floating-ui/utils": "^0.2.11" } }, "node_modules/@floating-ui/utils": { - "version": "0.2.10", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.10.tgz", - "integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==" - }, - "node_modules/@isaacs/balanced-match": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", - "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", - "dev": true, - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/@isaacs/brace-expansion": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", - "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", - "dev": true, - "dependencies": { - "@isaacs/balanced-match": "^4.0.1" - }, - "engines": { - "node": "20 || >=22" - } + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.11.tgz", + "integrity": "sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==", + "license": "MIT" }, "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-9.0.0.tgz", + "integrity": "sha512-AokJm4tuBHillT+FpMtxQ60n8ObyXBatq7jD2/JA9dxbDDokKQm8KMht5ibGzLVU9IJDIKK4TPKgMHEYMn3lMg==", "dev": true, - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, + "license": "BlueOak-1.0.0", "engines": { - "node": ">=12" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", - "dev": true, - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "node": ">=18" } }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.13", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", - "dev": true, + "devOptional": true, + "license": "MIT", "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" @@ -2017,7 +1835,8 @@ "version": "2.3.5", "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", - "dev": true, + "devOptional": true, + "license": "MIT", "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" @@ -2027,7 +1846,8 @@ "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, + "devOptional": true, + "license": "MIT", "engines": { "node": ">=6.0.0" } @@ -2037,6 +1857,7 @@ "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25" @@ -2046,23 +1867,96 @@ "version": "1.5.5", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", - "dev": true + "devOptional": true, + "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.31", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", - "dev": true, + "devOptional": 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.1", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.1.tgz", + "integrity": "sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.7.1", + "@emnapi/runtime": "^1.7.1", + "@tybys/wasm-util": "^0.10.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@noble/ciphers": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-2.1.1.tgz", + "integrity": "sha512-bysYuiVfhxNJuldNXlFEitTVdNnYUc+XNJZd7Qm2a5j1vZHgY+fazadNFWFaMK/2vye0JVlxV3gHmC0WDfAOQw==", + "license": "MIT", + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/hashes": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-2.0.1.tgz", + "integrity": "sha512-XlOlEbQcE9fmuXxrVTXCTlG2nlRXa9Rj3rr5Ue/+tX+nmkgbX720YHh0VR3hBF9xDvwnb8D2shVGOwNx+ulArw==", + "license": "MIT", + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@opentelemetry/api": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.1.tgz", + "integrity": "sha512-gLyJlPHPZYdAk1JENA9LeHejZe1Ti77/pTeFm/nMXmQH/HFZlcS/O2XJB+L8fkbrNSqhdtlvjBVjxwUYanNH5Q==", + "license": "Apache-2.0", + "peer": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@opentelemetry/semantic-conventions": { + "version": "1.40.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.40.0.tgz", + "integrity": "sha512-cifvXDhcqMwwTlTK04GBNeIe7yyo28Mfby85QXFe1Yk8nmi36Ab/5UQwptOx84SsoGNRg+EVSjwzfSZMy6pmlw==", + "license": "Apache-2.0", + "engines": { + "node": ">=14" + } + }, + "node_modules/@oxc-project/types": { + "version": "0.122.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.122.0.tgz", + "integrity": "sha512-oLAl5kBpV4w69UtFZ9xqcmTi+GENWOcPF7FCrczTiBbmC0ibXxCwyvZGbO39rCVEuLGAZM84DH0pUIyyv/YJzA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Boshen" + } + }, "node_modules/@pnpm/config.env-replace": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==", "dev": true, + "license": "MIT", "engines": { "node": ">=12.22.0" } @@ -2072,6 +1966,7 @@ "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "4.2.10" }, @@ -2083,13 +1978,15 @@ "version": "4.2.10", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/@pnpm/npm-conf": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.3.1.tgz", - "integrity": "sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-3.0.2.tgz", + "integrity": "sha512-h104Kh26rR8tm+a3Qkc5S4VLYint3FE48as7+/5oCEcKR2idC/pF1G6AhIXKI+eHPJa/3J9i5z0Al47IeGHPkA==", "dev": true, + "license": "MIT", "dependencies": { "@pnpm/config.env-replace": "^1.1.0", "@pnpm/network.ca-file": "^1.0.1", @@ -2099,11 +1996,298 @@ "node": ">=12" } }, + "node_modules/@rolldown/binding-android-arm64": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0-rc.12.tgz", + "integrity": "sha512-pv1y2Fv0JybcykuiiD3qBOBdz6RteYojRFY1d+b95WVuzx211CRh+ytI/+9iVyWQ6koTh5dawe4S/yRfOFjgaA==", + "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-rc.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.0-rc.12.tgz", + "integrity": "sha512-cFYr6zTG/3PXXF3pUO+umXxt1wkRK/0AYT8lDwuqvRC+LuKYWSAQAQZjCWDQpAH172ZV6ieYrNnFzVVcnSflAg==", + "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-rc.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.0-rc.12.tgz", + "integrity": "sha512-ZCsYknnHzeXYps0lGBz8JrF37GpE9bFVefrlmDrAQhOEi4IOIlcoU1+FwHEtyXGx2VkYAvhu7dyBf75EJQffBw==", + "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-rc.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.0-rc.12.tgz", + "integrity": "sha512-dMLeprcVsyJsKolRXyoTH3NL6qtsT0Y2xeuEA8WQJquWFXkEC4bcu1rLZZSnZRMtAqwtrF/Ib9Ddtpa/Gkge9Q==", + "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-rc.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.0-rc.12.tgz", + "integrity": "sha512-YqWjAgGC/9M1lz3GR1r1rP79nMgo3mQiiA+Hfo+pvKFK1fAJ1bCi0ZQVh8noOqNacuY1qIcfyVfP6HoyBRZ85Q==", + "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-rc.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.0-rc.12.tgz", + "integrity": "sha512-/I5AS4cIroLpslsmzXfwbe5OmWvSsrFuEw3mwvbQ1kDxJ822hFHIx+vsN/TAzNVyepI/j/GSzrtCIwQPeKCLIg==", + "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-rc.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.0-rc.12.tgz", + "integrity": "sha512-V6/wZztnBqlx5hJQqNWwFdxIKN0m38p8Jas+VoSfgH54HSj9tKTt1dZvG6JRHcjh6D7TvrJPWFGaY9UBVOaWPw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-ppc64-gnu": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.0-rc.12.tgz", + "integrity": "sha512-AP3E9BpcUYliZCxa3w5Kwj9OtEVDYK6sVoUzy4vTOJsjPOgdaJZKFmN4oOlX0Wp0RPV2ETfmIra9x1xuayFB7g==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-s390x-gnu": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.0-rc.12.tgz", + "integrity": "sha512-nWwpvUSPkoFmZo0kQazZYOrT7J5DGOJ/+QHHzjvNlooDZED8oH82Yg67HvehPPLAg5fUff7TfWFHQS8IV1n3og==", + "cpu": [ + "s390x" + ], + "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-rc.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.0-rc.12.tgz", + "integrity": "sha512-RNrafz5bcwRy+O9e6P8Z/OCAJW/A+qtBczIqVYwTs14pf4iV1/+eKEjdOUta93q2TsT/FI0XYDP3TCky38LMAg==", + "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-rc.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.0-rc.12.tgz", + "integrity": "sha512-Jpw/0iwoKWx3LJ2rc1yjFrj+T7iHZn2JDg1Yny1ma0luviFS4mhAIcd1LFNxK3EYu3DHWCps0ydXQ5i/rrJ2ig==", + "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-rc.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.0-rc.12.tgz", + "integrity": "sha512-vRugONE4yMfVn0+7lUKdKvN4D5YusEiPilaoO2sgUWpCvrncvWgPMzK00ZFFJuiPgLwgFNP5eSiUlv2tfc+lpA==", + "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-rc.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.0-rc.12.tgz", + "integrity": "sha512-ykGiLr/6kkiHc0XnBfmFJuCjr5ZYKKofkx+chJWDjitX+KsJuAmrzWhwyOMSHzPhzOHOy7u9HlFoa5MoAOJ/Zg==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@napi-rs/wasm-runtime": "^1.1.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.0-rc.12.tgz", + "integrity": "sha512-5eOND4duWkwx1AzCxadcOrNeighiLwMInEADT0YM7xeEOOFcovWZCq8dadXgcRHSf3Ulh1kFo/qvzoFiCLOL1Q==", + "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-rc.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0-rc.12.tgz", + "integrity": "sha512-PyqoipaswDLAZtot351MLhrlrh6lcZPo2LSYE+VDxbVk24LVKAGOuE4hb8xZQmrPAuEtTZW8E6D2zc5EUZX4Lw==", + "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-rc.12", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.12.tgz", + "integrity": "sha512-HHMwmarRKvoFsJorqYlFeFRzXZqCt2ETQlEDOb9aqssrnVBB1/+xgTGtuTrIk5vzLNX1MjMtTf7W9z3tsSbrxw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/plugin-babel": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", + "integrity": "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.10.4", + "@rollup/pluginutils": "^3.1.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "@types/babel__core": "^7.1.9", + "rollup": "^1.20.0||^2.0.0" + }, + "peerDependenciesMeta": { + "@types/babel__core": { + "optional": true + } + } + }, "node_modules/@rollup/plugin-node-resolve": { "version": "15.3.1", "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.3.1.tgz", "integrity": "sha512-tgg6b91pAybXHJQMAAwW9VuWBO6Thi+q7BCNARLwSqlmsHz0XYURtGvh/AuwSADXSI4h/2uHbs7s4FzlZDGSGA==", "dev": true, + "license": "MIT", "dependencies": { "@rollup/pluginutils": "^5.0.1", "@types/resolve": "1.20.2", @@ -2123,11 +2307,66 @@ } } }, + "node_modules/@rollup/plugin-node-resolve/node_modules/@rollup/pluginutils": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.3.0.tgz", + "integrity": "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-node-resolve/node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/plugin-replace": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", + "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "magic-string": "^0.25.7" + }, + "peerDependencies": { + "rollup": "^1.20.0 || ^2.0.0" + } + }, + "node_modules/@rollup/plugin-replace/node_modules/magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "sourcemap-codec": "^1.4.8" + } + }, "node_modules/@rollup/plugin-terser": { "version": "0.4.4", "resolved": "https://registry.npmjs.org/@rollup/plugin-terser/-/plugin-terser-0.4.4.tgz", "integrity": "sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A==", "dev": true, + "license": "MIT", "dependencies": { "serialize-javascript": "^6.0.1", "smob": "^1.0.0", @@ -2146,369 +2385,55 @@ } }, "node_modules/@rollup/pluginutils": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.3.0.tgz", - "integrity": "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", "dev": true, + "license": "MIT", "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^4.0.2" + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" }, "engines": { - "node": ">=14.0.0" + "node": ">= 8.0.0" }, "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } + "rollup": "^1.20.0||^2.0.0" } }, - "node_modules/@rollup/pluginutils/node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "node_modules/@rollup/pluginutils/node_modules/@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/pluginutils/node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=12" + "node": ">=8.6" }, "funding": { "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.55.1.tgz", - "integrity": "sha512-9R0DM/ykwfGIlNu6+2U09ga0WXeZ9MRC2Ter8jnz8415VbuIykVuc6bhdrbORFZANDmTDvq26mJrEVTl8TdnDg==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.55.1.tgz", - "integrity": "sha512-eFZCb1YUqhTysgW3sj/55du5cG57S7UTNtdMjCW7LwVcj3dTTcowCsC8p7uBdzKsZYa8J7IDE8lhMI+HX1vQvg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.55.1.tgz", - "integrity": "sha512-p3grE2PHcQm2e8PSGZdzIhCKbMCw/xi9XvMPErPhwO17vxtvCN5FEA2mSLgmKlCjHGMQTP6phuQTYWUnKewwGg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.55.1.tgz", - "integrity": "sha512-rDUjG25C9qoTm+e02Esi+aqTKSBYwVTaoS1wxcN47/Luqef57Vgp96xNANwt5npq9GDxsH7kXxNkJVEsWEOEaQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.55.1.tgz", - "integrity": "sha512-+JiU7Jbp5cdxekIgdte0jfcu5oqw4GCKr6i3PJTlXTCU5H5Fvtkpbs4XJHRmWNXF+hKmn4v7ogI5OQPaupJgOg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.55.1.tgz", - "integrity": "sha512-V5xC1tOVWtLLmr3YUk2f6EJK4qksksOYiz/TCsFHu/R+woubcLWdC9nZQmwjOAbmExBIVKsm1/wKmEy4z4u4Bw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.55.1.tgz", - "integrity": "sha512-Rn3n+FUk2J5VWx+ywrG/HGPTD9jXNbicRtTM11e/uorplArnXZYsVifnPPqNNP5BsO3roI4n8332ukpY/zN7rQ==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.55.1.tgz", - "integrity": "sha512-grPNWydeKtc1aEdrJDWk4opD7nFtQbMmV7769hiAaYyUKCT1faPRm2av8CX1YJsZ4TLAZcg9gTR1KvEzoLjXkg==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.55.1.tgz", - "integrity": "sha512-a59mwd1k6x8tXKcUxSyISiquLwB5pX+fJW9TkWU46lCqD/GRDe9uDN31jrMmVP3feI3mhAdvcCClhV8V5MhJFQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.55.1.tgz", - "integrity": "sha512-puS1MEgWX5GsHSoiAsF0TYrpomdvkaXm0CofIMG5uVkP6IBV+ZO9xhC5YEN49nsgYo1DuuMquF9+7EDBVYu4uA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.55.1.tgz", - "integrity": "sha512-r3Wv40in+lTsULSb6nnoudVbARdOwb2u5fpeoOAZjFLznp6tDU8kd+GTHmJoqZ9lt6/Sys33KdIHUaQihFcu7g==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-loong64-musl": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.55.1.tgz", - "integrity": "sha512-MR8c0+UxAlB22Fq4R+aQSPBayvYa3+9DrwG/i1TKQXFYEaoW3B5b/rkSRIypcZDdWjWnpcvxbNaAJDcSbJU3Lw==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.55.1.tgz", - "integrity": "sha512-3KhoECe1BRlSYpMTeVrD4sh2Pw2xgt4jzNSZIIPLFEsnQn9gAnZagW9+VqDqAHgm1Xc77LzJOo2LdigS5qZ+gw==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-ppc64-musl": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.55.1.tgz", - "integrity": "sha512-ziR1OuZx0vdYZZ30vueNZTg73alF59DicYrPViG0NEgDVN8/Jl87zkAPu4u6VjZST2llgEUjaiNl9JM6HH1Vdw==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.55.1.tgz", - "integrity": "sha512-uW0Y12ih2XJRERZ4jAfKamTyIHVMPQnTZcQjme2HMVDAHY4amf5u414OqNYC+x+LzRdRcnIG1YodLrrtA8xsxw==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.55.1.tgz", - "integrity": "sha512-u9yZ0jUkOED1BFrqu3BwMQoixvGHGZ+JhJNkNKY/hyoEgOwlqKb62qu+7UjbPSHYjiVy8kKJHvXKv5coH4wDeg==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.55.1.tgz", - "integrity": "sha512-/0PenBCmqM4ZUd0190j7J0UsQ/1nsi735iPRakO8iPciE7BQ495Y6msPzaOmvx0/pn+eJVVlZrNrSh4WSYLxNg==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.55.1.tgz", - "integrity": "sha512-a8G4wiQxQG2BAvo+gU6XrReRRqj+pLS2NGXKm8io19goR+K8lw269eTrPkSdDTALwMmJp4th2Uh0D8J9bEV1vg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.55.1.tgz", - "integrity": "sha512-bD+zjpFrMpP/hqkfEcnjXWHMw5BIghGisOKPj+2NaNDuVT+8Ds4mPf3XcPHuat1tz89WRL+1wbcxKY3WSbiT7w==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-openbsd-x64": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.55.1.tgz", - "integrity": "sha512-eLXw0dOiqE4QmvikfQ6yjgkg/xDM+MdU9YJuP4ySTibXU0oAvnEWXt7UDJmD4UkYialMfOGFPJnIHSe/kdzPxg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ] - }, - "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.55.1.tgz", - "integrity": "sha512-xzm44KgEP11te3S2HCSyYf5zIzWmx3n8HDCc7EE59+lTcswEWNpvMLfd9uJvVX8LCg9QWG67Xt75AuHn4vgsXw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "openharmony" - ] - }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.55.1.tgz", - "integrity": "sha512-yR6Bl3tMC/gBok5cz/Qi0xYnVbIxGx5Fcf/ca0eB6/6JwOY+SRUcJfI0OpeTpPls7f194as62thCt/2BjxYN8g==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.55.1.tgz", - "integrity": "sha512-3fZBidchE0eY0oFZBnekYCfg+5wAB0mbpCBuofh5mZuzIU/4jIVkbESmd2dOsFNS78b53CYv3OAtwqkZZmU5nA==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-gnu": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.55.1.tgz", - "integrity": "sha512-xGGY5pXj69IxKb4yv/POoocPy/qmEGhimy/FoTpTSVju3FYXUQQMFCaZZXJVidsmGxRioZAwpThl/4zX41gRKg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.55.1.tgz", - "integrity": "sha512-SPEpaL6DX4rmcXtnhdrQYgzQ5W2uW3SCJch88lB2zImhJRhIIK44fkUrgIV/Q8yUNfw5oyZ5vkeQsZLhCb06lw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] + "node_modules/@standard-schema/spec": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", + "license": "MIT" }, "node_modules/@surma/rollup-plugin-off-main-thread": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz", "integrity": "sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "ejs": "^3.1.6", "json5": "^2.2.0", @@ -2521,92 +2446,107 @@ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", "dev": true, + "license": "MIT", "dependencies": { "sourcemap-codec": "^1.4.8" } }, "node_modules/@sveltejs/acorn-typescript": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@sveltejs/acorn-typescript/-/acorn-typescript-1.0.8.tgz", - "integrity": "sha512-esgN+54+q0NjB0Y/4BomT9samII7jGwNy/2a3wNZbT2A2RpmXsXwUt24LvLhx6jUq2gVk4cWEvcRO6MFQbOfNA==", - "dev": true, + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@sveltejs/acorn-typescript/-/acorn-typescript-1.0.9.tgz", + "integrity": "sha512-lVJX6qEgs/4DOcRTpo56tmKzVPtoWAaVbL4hfO7t7NVwl9AAXzQR6cihesW1BmNMPl+bK6dreu2sOKBP2Q9CIA==", + "devOptional": true, + "license": "MIT", "peerDependencies": { "acorn": "^8.9.0" } }, "node_modules/@sveltejs/vite-plugin-svelte": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-4.0.4.tgz", - "integrity": "sha512-0ba1RQ/PHen5FGpdSrW7Y3fAMQjrXantECALeOiOdBdzR5+5vPP6HVZRLmZaQL+W8m++o+haIAKq5qT+MiZ7VA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-7.0.0.tgz", + "integrity": "sha512-ILXmxC7HAsnkK2eslgPetrqqW1BKSL7LktsFgqzNj83MaivMGZzluWq32m25j2mDOjmSKX7GGWahePhuEs7P/g==", "dev": true, + "license": "MIT", "dependencies": { - "@sveltejs/vite-plugin-svelte-inspector": "^3.0.0-next.0||^3.0.0", - "debug": "^4.3.7", "deepmerge": "^4.3.1", - "kleur": "^4.1.5", - "magic-string": "^0.30.12", - "vitefu": "^1.0.3" + "magic-string": "^0.30.21", + "obug": "^2.1.0", + "vitefu": "^1.1.2" }, "engines": { - "node": "^18.0.0 || ^20.0.0 || >=22" + "node": "^20.19 || ^22.12 || >=24" }, "peerDependencies": { - "svelte": "^5.0.0-next.96 || ^5.0.0", - "vite": "^5.0.0" + "svelte": "^5.46.4", + "vite": "^8.0.0-beta.7 || ^8.0.0" } }, - "node_modules/@sveltejs/vite-plugin-svelte-inspector": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-3.0.1.tgz", - "integrity": "sha512-2CKypmj1sM4GE7HjllT7UKmo4Q6L5xFRd7VMGEWhYnZ+wc6AUVU01IBd7yUi6WnFndEwWoMNOd6e8UjoN0nbvQ==", + "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": { - "debug": "^4.3.7" - }, - "engines": { - "node": "^18.0.0 || ^20.0.0 || >=22" - }, - "peerDependencies": { - "@sveltejs/vite-plugin-svelte": "^4.0.0-next.0||^4.0.0", - "svelte": "^5.0.0-next.96 || ^5.0.0", - "vite": "^5.0.0" + "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 + "devOptional": true, + "license": "MIT" }, "node_modules/@types/minimist": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/normalize-package-data": { "version": "2.4.4", "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/resolve": { "version": "1.20.2", "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/trusted-types": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", - "dev": true + "devOptional": true, + "license": "MIT" + }, + "node_modules/@typescript-eslint/types": { + "version": "8.57.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.57.2.tgz", + "integrity": "sha512-/iZM6FnM4tnx9csuTxspMW4BOSegshwX5oBDznJ7S4WggL7Vczz5d2W11ecc4vRrQMQHXRSxzrCsyG5EsPPTbA==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } }, "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, + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", + "devOptional": true, + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -2615,10 +2555,11 @@ } }, "node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", + "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -2635,6 +2576,7 @@ "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^4.1.0" } @@ -2644,6 +2586,7 @@ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, + "license": "MIT", "dependencies": { "type-fest": "^0.21.3" }, @@ -2659,6 +2602,7 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -2668,6 +2612,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -2683,6 +2628,7 @@ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, + "license": "ISC", "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -2691,11 +2637,25 @@ "node": ">= 8" } }, - "node_modules/aria-query": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", - "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/aria-query": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.1.tgz", + "integrity": "sha512-Z/ZeOgVl7bcSYZ/u/rh0fOpvEpq//LZmdbkXyc7syVzjPAhfOa9ebsdTSjEBDU4vs5nC98Kfduj1uFo0qyET3g==", + "devOptional": true, + "license": "Apache-2.0", "engines": { "node": ">= 0.4" } @@ -2705,6 +2665,7 @@ "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", "dev": true, + "license": "MIT", "dependencies": { "call-bound": "^1.0.3", "is-array-buffer": "^3.0.5" @@ -2721,6 +2682,7 @@ "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", "dev": true, + "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.1", "call-bind": "^1.0.8", @@ -2742,6 +2704,7 @@ "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -2750,13 +2713,15 @@ "version": "3.2.6", "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/async-function": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" } @@ -2766,15 +2731,17 @@ "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", "dev": true, + "license": "ISC", "engines": { "node": ">= 4.0.0" } }, "node_modules/atomically": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/atomically/-/atomically-2.1.0.tgz", - "integrity": "sha512-+gDffFXRW6sl/HCwbta7zK4uNqbPjv4YJEAdz7Vu+FLQHe77eZ4bvbJGi4hE0QPeJlMYMA3piXEr1UL3dAwx7Q==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/atomically/-/atomically-2.1.1.tgz", + "integrity": "sha512-P4w9o2dqARji6P7MHprklbfiArZAWvo07yW7qs3pdljb3BWr12FIB7W+p0zJiuiVsUpRO0iZn1kFFcpPegg0tQ==", "dev": true, + "license": "MIT", "dependencies": { "stubborn-fs": "^2.0.0", "when-exit": "^2.1.4" @@ -2785,6 +2752,7 @@ "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", "dev": true, + "license": "MIT", "dependencies": { "possible-typed-array-names": "^1.0.0" }, @@ -2799,19 +2767,21 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", - "dev": true, + "devOptional": true, + "license": "Apache-2.0", "engines": { "node": ">= 0.4" } }, "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.14.tgz", - "integrity": "sha512-Co2Y9wX854ts6U8gAAPXfn0GmAyctHuK8n0Yhfjd6t30g7yvKjspvvOo9yG+z52PZRgFErt7Ka2pYnXCjLKEpg==", + "version": "0.4.17", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.17.tgz", + "integrity": "sha512-aTyf30K/rqAsNwN76zYrdtx8obu0E4KoUME29B1xj+B3WxgvWkp943vYQ+z8Mv3lw9xHXMHpvSPOBxzAkIa94w==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.27.7", - "@babel/helper-define-polyfill-provider": "^0.6.5", + "@babel/compat-data": "^7.28.6", + "@babel/helper-define-polyfill-provider": "^0.6.8", "semver": "^6.3.1" }, "peerDependencies": { @@ -2823,40 +2793,47 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.13.0.tgz", - "integrity": "sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A==", + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.14.2.tgz", + "integrity": "sha512-coWpDLJ410R781Npmn/SIBZEsAetR4xVi0SxLMXPaMO4lSf1MwnkGYMtkFxew0Dn8B3/CpbpYxN0JCgg8mn67g==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.5", - "core-js-compat": "^3.43.0" + "@babel/helper-define-polyfill-provider": "^0.6.8", + "core-js-compat": "^3.48.0" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.5.tgz", - "integrity": "sha512-ISqQ2frbiNU9vIJkzg7dlPpznPZ4jOiUQ1uSmB0fEHeowtN3COYRsXr/xexn64NpU13P06jc/L5TgiJXOgrbEg==", + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.8.tgz", + "integrity": "sha512-M762rNHfSF1EV3SLtnCJXFoQbbIIz0OyRwnCmV0KPC7qosSfCO0QLTSuJX3ayAebubhE6oYBAYPrBA5ljowaZg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.5" + "@babel/helper-define-polyfill-provider": "^0.6.8" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } }, "node_modules/base64-js": { "version": "1.5.1", @@ -2876,15 +2853,145 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/baseline-browser-mapping": { - "version": "2.9.14", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.14.tgz", - "integrity": "sha512-B0xUquLkiGLgHhpPBqvl7GWegWBUNuujQ6kXd/r1U38ElPT6Ok8KZ8e+FpUGEc2ZoRQUzq/aUnaKFc/svWUGSg==", + "version": "2.10.11", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.11.tgz", + "integrity": "sha512-DAKrHphkJyiGuau/cFieRYhcTFeK/lBuD++C7cZ6KZHbMhBrisoi+EvhQ5RZrIfV5qwsW8kgQ07JIC+MDJRAhg==", "dev": true, + "license": "Apache-2.0", "bin": { - "baseline-browser-mapping": "dist/cli.js" + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/better-auth": { + "version": "1.5.6", + "resolved": "https://registry.npmjs.org/better-auth/-/better-auth-1.5.6.tgz", + "integrity": "sha512-QSpJTqaT1XVfWRQe/fm3PgeuwOIlz1nWX/Dx7nsHStJ382bLzmDbQk2u7IT0IJ6wS5SRxfqEE1Ev9TXontgyAQ==", + "license": "MIT", + "dependencies": { + "@better-auth/core": "1.5.6", + "@better-auth/drizzle-adapter": "1.5.6", + "@better-auth/kysely-adapter": "1.5.6", + "@better-auth/memory-adapter": "1.5.6", + "@better-auth/mongo-adapter": "1.5.6", + "@better-auth/prisma-adapter": "1.5.6", + "@better-auth/telemetry": "1.5.6", + "@better-auth/utils": "0.3.1", + "@better-fetch/fetch": "1.1.21", + "@noble/ciphers": "^2.1.1", + "@noble/hashes": "^2.0.1", + "better-call": "1.3.2", + "defu": "^6.1.4", + "jose": "^6.1.3", + "kysely": "^0.28.12", + "nanostores": "^1.1.1", + "zod": "^4.3.6" + }, + "peerDependencies": { + "@lynx-js/react": "*", + "@prisma/client": "^5.0.0 || ^6.0.0 || ^7.0.0", + "@sveltejs/kit": "^2.0.0", + "@tanstack/react-start": "^1.0.0", + "@tanstack/solid-start": "^1.0.0", + "better-sqlite3": "^12.0.0", + "drizzle-kit": ">=0.31.4", + "drizzle-orm": ">=0.41.0", + "mongodb": "^6.0.0 || ^7.0.0", + "mysql2": "^3.0.0", + "next": "^14.0.0 || ^15.0.0 || ^16.0.0", + "pg": "^8.0.0", + "prisma": "^5.0.0 || ^6.0.0 || ^7.0.0", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0", + "solid-js": "^1.0.0", + "svelte": "^4.0.0 || ^5.0.0", + "vitest": "^2.0.0 || ^3.0.0 || ^4.0.0", + "vue": "^3.0.0" + }, + "peerDependenciesMeta": { + "@lynx-js/react": { + "optional": true + }, + "@prisma/client": { + "optional": true + }, + "@sveltejs/kit": { + "optional": true + }, + "@tanstack/react-start": { + "optional": true + }, + "@tanstack/solid-start": { + "optional": true + }, + "better-sqlite3": { + "optional": true + }, + "drizzle-kit": { + "optional": true + }, + "drizzle-orm": { + "optional": true + }, + "mongodb": { + "optional": true + }, + "mysql2": { + "optional": true + }, + "next": { + "optional": true + }, + "pg": { + "optional": true + }, + "prisma": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + }, + "solid-js": { + "optional": true + }, + "svelte": { + "optional": true + }, + "vitest": { + "optional": true + }, + "vue": { + "optional": true + } + } + }, + "node_modules/better-call": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/better-call/-/better-call-1.3.2.tgz", + "integrity": "sha512-4cZIfrerDsNTn3cm+MhLbUePN0gdwkhSXEuG7r/zuQ8c/H7iU0/jSK5TD3FW7U0MgKHce/8jGpPYNO4Ve+4NBw==", + "license": "MIT", + "dependencies": { + "@better-auth/utils": "^0.3.1", + "@better-fetch/fetch": "^1.1.21", + "rou3": "^0.7.12", + "set-cookie-parser": "^3.0.1" + }, + "peerDependencies": { + "zod": "^4.0.0" + }, + "peerDependenciesMeta": { + "zod": { + "optional": true + } } }, "node_modules/binary-extensions": { @@ -2892,6 +2999,7 @@ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -2904,6 +3012,7 @@ "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "dev": true, + "license": "MIT", "dependencies": { "buffer": "^5.5.0", "inherits": "^2.0.4", @@ -2915,6 +3024,7 @@ "resolved": "https://registry.npmjs.org/boxen/-/boxen-8.0.1.tgz", "integrity": "sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==", "dev": true, + "license": "MIT", "dependencies": { "ansi-align": "^3.0.1", "camelcase": "^8.0.0", @@ -2937,6 +3047,7 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -2944,23 +3055,12 @@ "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/boxen/node_modules/ansi-styles": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/boxen/node_modules/camelcase": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-8.0.0.tgz", "integrity": "sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==", "dev": true, + "license": "MIT", "engines": { "node": ">=16" }, @@ -2973,6 +3073,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", "dev": true, + "license": "MIT", "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" }, @@ -2984,13 +3085,15 @@ "version": "10.6.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/boxen/node_modules/string-width": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", @@ -3004,12 +3107,13 @@ } }, "node_modules/boxen/node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", "dev": true, + "license": "MIT", "dependencies": { - "ansi-regex": "^6.0.1" + "ansi-regex": "^6.2.2" }, "engines": { "node": ">=12" @@ -3023,6 +3127,7 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=16" }, @@ -3030,30 +3135,17 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/boxen/node_modules/wrap-ansi": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", - "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "node_modules/brace-expansion": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", + "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^6.2.1", - "string-width": "^7.0.0", - "strip-ansi": "^7.1.0" + "balanced-match": "^4.0.2" }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" + "node": "18 || 20 || >=22" } }, "node_modules/braces": { @@ -3061,6 +3153,7 @@ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, + "license": "MIT", "dependencies": { "fill-range": "^7.1.1" }, @@ -3087,6 +3180,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", @@ -3120,6 +3214,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -3129,13 +3224,15 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/call-bind": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", "dev": true, + "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", @@ -3154,6 +3251,7 @@ "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", "dev": true, + "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" @@ -3167,6 +3265,7 @@ "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.2", "get-intrinsic": "^1.3.0" @@ -3183,6 +3282,7 @@ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -3192,6 +3292,7 @@ "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", "dev": true, + "license": "MIT", "dependencies": { "camelcase": "^5.3.1", "map-obj": "^4.0.0", @@ -3205,9 +3306,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001764", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001764.tgz", - "integrity": "sha512-9JGuzl2M+vPL+pz70gtMF9sHdMFbY9FJaQBi186cHKH3pSzDvzoUJUPV6fqiKIMyXbud9ZLg4F3Yza1vJ1+93g==", + "version": "1.0.30001781", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001781.tgz", + "integrity": "sha512-RdwNCyMsNBftLjW6w01z8bKEvT6e/5tpPVEgtn22TiLGlstHOVecsX2KHFkD5e/vRnIE4EGzpuIODb3mtswtkw==", "dev": true, "funding": [ { @@ -3222,13 +3323,15 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ] + ], + "license": "CC-BY-4.0" }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -3244,30 +3347,23 @@ "version": "0.7.0", "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", "dev": true, + "license": "MIT", "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" + "readdirp": "^4.0.1" }, "engines": { - "node": ">= 8.10.0" + "node": ">= 14.16.0" }, "funding": { "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" } }, "node_modules/cli-boxes": { @@ -3275,6 +3371,7 @@ "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -3287,6 +3384,7 @@ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dev": true, + "license": "MIT", "dependencies": { "restore-cursor": "^3.1.0" }, @@ -3299,6 +3397,7 @@ "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" }, @@ -3311,6 +3410,7 @@ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", "dev": true, + "license": "ISC", "engines": { "node": ">= 10" } @@ -3320,6 +3420,7 @@ "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8" } @@ -3328,7 +3429,8 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", - "dev": true, + "devOptional": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -3338,6 +3440,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -3349,19 +3452,22 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/common-tags": { "version": "1.8.2", "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4.0.0" } @@ -3371,6 +3477,7 @@ "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", "dev": true, + "license": "MIT", "dependencies": { "ini": "^1.3.4", "proto-list": "~1.2.1" @@ -3380,13 +3487,15 @@ "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/configstore": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/configstore/-/configstore-7.1.0.tgz", "integrity": "sha512-N4oog6YJWbR9kGyXvS7jEykLDXIE2C0ILYqNBZBp9iwiJpoCBWYsuAdW6PPFn6w06jjnC+3JstVvWHO4cZqvRg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "atomically": "^2.0.3", "dot-prop": "^9.0.0", @@ -3404,15 +3513,17 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/core-js-compat": { - "version": "3.47.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.47.0.tgz", - "integrity": "sha512-IGfuznZ/n7Kp9+nypamBhvwdwLsW6KC8IOaURw2doAK5e98AG3acVLdh0woOnEqCfUtS+Vu882JE4k/DAm3ItQ==", + "version": "3.49.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.49.0.tgz", + "integrity": "sha512-VQXt1jr9cBz03b331DFDCCP90b3fanciLkgiOoy8SBHy06gNf+vQ1A3WFLqG7I8TipYIKeYK9wxd0tUrvHcOZA==", "dev": true, + "license": "MIT", "dependencies": { - "browserslist": "^4.28.0" + "browserslist": "^4.28.1" }, "funding": { "type": "opencollective", @@ -3424,6 +3535,7 @@ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -3438,6 +3550,7 @@ "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -3447,6 +3560,7 @@ "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", @@ -3464,6 +3578,7 @@ "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", @@ -3481,6 +3596,7 @@ "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", @@ -3498,6 +3614,7 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "dev": true, + "license": "MIT", "dependencies": { "ms": "^2.1.3" }, @@ -3515,6 +3632,7 @@ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -3524,6 +3642,7 @@ "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", "dev": true, + "license": "MIT", "dependencies": { "decamelize": "^1.1.0", "map-obj": "^1.0.0" @@ -3540,6 +3659,7 @@ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -3549,6 +3669,7 @@ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4.0.0" } @@ -3558,6 +3679,7 @@ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -3567,6 +3689,7 @@ "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", "dev": true, + "license": "MIT", "dependencies": { "clone": "^1.0.2" }, @@ -3579,6 +3702,7 @@ "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dev": true, + "license": "MIT", "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", @@ -3596,6 +3720,7 @@ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, + "license": "MIT", "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", @@ -3608,11 +3733,27 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/devalue": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.6.2.tgz", - "integrity": "sha512-nPRkjWzzDQlsejL1WVifk5rvcFi/y1onBRxjaFMjZeR9mFpqu2gmAZ9xUB9/IEanEP/vBtGeGganC/GO1fmufg==", + "node_modules/defu": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", + "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", + "license": "MIT" + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/devalue": { + "version": "5.6.4", + "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.6.4.tgz", + "integrity": "sha512-Gp6rDldRsFh/7XuouDbxMH3Mx8GMCcgzIb1pDTvNyn8pZGQ22u+Wa+lGV9dQCltFQ7uVw0MhRyb8XDskNFOReA==", + "devOptional": true, "license": "MIT" }, "node_modules/dot-prop": { @@ -3620,6 +3761,7 @@ "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-9.0.0.tgz", "integrity": "sha512-1gxPBJpI/pcjQhKgIU91II6Wkay+dLcN3M6rf2uwP8hRur3HtQXjVrdAK3sjC0piaEuxzMwjXChcETiJl47lAQ==", "dev": true, + "license": "MIT", "dependencies": { "type-fest": "^4.18.2" }, @@ -3635,6 +3777,7 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=16" }, @@ -3647,6 +3790,7 @@ "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", "dev": true, + "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", @@ -3656,17 +3800,12 @@ "node": ">= 0.4" } }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true - }, "node_modules/ejs": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "jake": "^10.8.5" }, @@ -3678,22 +3817,25 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.267", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.267.tgz", - "integrity": "sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==", - "dev": true + "version": "1.5.328", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.328.tgz", + "integrity": "sha512-QNQ5l45DzYytThO21403XN3FvK0hOkWDG8viNf6jqS42msJ8I4tGDSpBCgvDRRPnkffafiwAym2X2eHeGD2V0w==", + "dev": true, + "license": "ISC" }, "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/error-ex": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", "dev": true, + "license": "MIT", "dependencies": { "is-arrayish": "^0.2.1" } @@ -3703,6 +3845,7 @@ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.1.tgz", "integrity": "sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw==", "dev": true, + "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.2", "arraybuffer.prototype.slice": "^1.0.4", @@ -3771,6 +3914,7 @@ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" } @@ -3780,6 +3924,7 @@ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" } @@ -3789,6 +3934,7 @@ "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", "dev": true, + "license": "MIT", "dependencies": { "es-errors": "^1.3.0" }, @@ -3801,6 +3947,7 @@ "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", "dev": true, + "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", @@ -3816,6 +3963,7 @@ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", "dev": true, + "license": "MIT", "dependencies": { "is-callable": "^1.2.7", "is-date-object": "^1.0.5", @@ -3828,49 +3976,12 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/esbuild": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", - "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.21.5", - "@esbuild/android-arm": "0.21.5", - "@esbuild/android-arm64": "0.21.5", - "@esbuild/android-x64": "0.21.5", - "@esbuild/darwin-arm64": "0.21.5", - "@esbuild/darwin-x64": "0.21.5", - "@esbuild/freebsd-arm64": "0.21.5", - "@esbuild/freebsd-x64": "0.21.5", - "@esbuild/linux-arm": "0.21.5", - "@esbuild/linux-arm64": "0.21.5", - "@esbuild/linux-ia32": "0.21.5", - "@esbuild/linux-loong64": "0.21.5", - "@esbuild/linux-mips64el": "0.21.5", - "@esbuild/linux-ppc64": "0.21.5", - "@esbuild/linux-riscv64": "0.21.5", - "@esbuild/linux-s390x": "0.21.5", - "@esbuild/linux-x64": "0.21.5", - "@esbuild/netbsd-x64": "0.21.5", - "@esbuild/openbsd-x64": "0.21.5", - "@esbuild/sunos-x64": "0.21.5", - "@esbuild/win32-arm64": "0.21.5", - "@esbuild/win32-ia32": "0.21.5", - "@esbuild/win32-x64": "0.21.5" - } - }, "node_modules/escalade": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -3880,6 +3991,7 @@ "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-4.0.0.tgz", "integrity": "sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -3892,6 +4004,7 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.0" } @@ -3900,29 +4013,33 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/esm-env/-/esm-env-1.2.2.tgz", "integrity": "sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==", - "dev": true + "devOptional": true, + "license": "MIT" }, "node_modules/esrap": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/esrap/-/esrap-2.2.2.tgz", - "integrity": "sha512-zA6497ha+qKvoWIK+WM9NAh5ni17sKZKhbS5B3PoYbBvaYHZWoS33zmFybmyqpn07RLUxSmn+RCls2/XF+d0oQ==", - "dev": true, + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/esrap/-/esrap-2.2.4.tgz", + "integrity": "sha512-suICpxAmZ9A8bzJjEl/+rLJiDKC0X4gYWUxT6URAWBLvlXmtbZd5ySMu/N2ZGEtMCAmflUDPSehrP9BQcsGcSg==", + "devOptional": true, "license": "MIT", "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15" + "@jridgewell/sourcemap-codec": "^1.4.15", + "@typescript-eslint/types": "^8.2.0" } }, "node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "dev": true, + "license": "MIT" }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" } @@ -3932,6 +4049,7 @@ "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", "dev": true, + "license": "MIT", "dependencies": { "chardet": "^0.7.0", "iconv-lite": "^0.4.24", @@ -3945,13 +4063,15 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-uri": { "version": "3.1.0", @@ -3967,13 +4087,33 @@ "type": "opencollective", "url": "https://opencollective.com/fastify" } - ] + ], + "license": "BSD-3-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/figures": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "dev": true, + "license": "MIT", "dependencies": { "escape-string-regexp": "^1.0.5" }, @@ -3985,19 +4125,38 @@ } }, "node_modules/filelist": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", - "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.6.tgz", + "integrity": "sha512-5giy2PkLYY1cP39p17Ech+2xlpTRL9HLspOfEgm0L6CwBXBTgsK5ou0JtzYuepxkaQ/tvhCFIJ5uXo0OrM2DxA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "minimatch": "^5.0.1" } }, - "node_modules/filelist/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "node_modules/filelist/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true, + "license": "MIT" + }, + "node_modules/filelist/node_modules/brace-expansion": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.3.tgz", + "integrity": "sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz", + "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==", + "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -4010,6 +4169,7 @@ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, + "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -4022,6 +4182,7 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -4035,6 +4196,7 @@ "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", "dev": true, + "license": "MIT", "dependencies": { "is-callable": "^1.2.7" }, @@ -4050,6 +4212,7 @@ "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", "dev": true, + "license": "ISC", "dependencies": { "cross-spawn": "^7.0.6", "signal-exit": "^4.0.1" @@ -4066,6 +4229,7 @@ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, + "license": "MIT", "dependencies": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", @@ -4082,6 +4246,7 @@ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, "hasInstallScript": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -4095,6 +4260,7 @@ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -4104,6 +4270,7 @@ "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", @@ -4124,6 +4291,7 @@ "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -4133,6 +4301,7 @@ "resolved": "https://registry.npmjs.org/generator-function/-/generator-function-2.0.1.tgz", "integrity": "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" } @@ -4142,15 +4311,17 @@ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/get-east-asian-width": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.4.0.tgz", - "integrity": "sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.5.0.tgz", + "integrity": "sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" }, @@ -4163,6 +4334,7 @@ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", @@ -4186,13 +4358,15 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/get-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", "dev": true, + "license": "MIT", "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" @@ -4206,6 +4380,7 @@ "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", "dev": true, + "license": "MIT", "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", @@ -4222,7 +4397,9 @@ "version": "11.1.0", "resolved": "https://registry.npmjs.org/glob/-/glob-11.1.0.tgz", "integrity": "sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { "foreground-child": "^3.3.1", "jackspeak": "^4.1.1", @@ -4246,6 +4423,7 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -4258,6 +4436,7 @@ "resolved": "https://registry.npmjs.org/global-directory/-/global-directory-4.0.1.tgz", "integrity": "sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==", "dev": true, + "license": "MIT", "dependencies": { "ini": "4.1.1" }, @@ -4273,6 +4452,7 @@ "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dev": true, + "license": "MIT", "dependencies": { "define-properties": "^1.2.1", "gopd": "^1.0.1" @@ -4289,6 +4469,7 @@ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -4300,13 +4481,15 @@ "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/hard-rejection": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -4316,6 +4499,7 @@ "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -4328,6 +4512,7 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -4337,6 +4522,7 @@ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, + "license": "MIT", "dependencies": { "es-define-property": "^1.0.0" }, @@ -4349,6 +4535,7 @@ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", "dev": true, + "license": "MIT", "dependencies": { "dunder-proto": "^1.0.0" }, @@ -4364,6 +4551,7 @@ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -4376,6 +4564,7 @@ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, + "license": "MIT", "dependencies": { "has-symbols": "^1.0.3" }, @@ -4391,6 +4580,7 @@ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dev": true, + "license": "MIT", "dependencies": { "function-bind": "^1.1.2" }, @@ -4402,13 +4592,15 @@ "version": "2.8.9", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, + "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3" }, @@ -4420,7 +4612,8 @@ "version": "7.1.1", "resolved": "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz", "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/ieee754": { "version": "1.2.1", @@ -4440,13 +4633,15 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "BSD-3-Clause" }, "node_modules/indent-string": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -4455,13 +4650,15 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/ini": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", "dev": true, + "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } @@ -4471,6 +4668,7 @@ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-escapes": "^4.2.1", "chalk": "^4.1.0", @@ -4495,6 +4693,7 @@ "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", "dev": true, + "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "hasown": "^2.0.2", @@ -4509,6 +4708,7 @@ "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", @@ -4525,13 +4725,15 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/is-async-function": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", "dev": true, + "license": "MIT", "dependencies": { "async-function": "^1.0.0", "call-bound": "^1.0.3", @@ -4551,6 +4753,7 @@ "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", "dev": true, + "license": "MIT", "dependencies": { "has-bigints": "^1.0.2" }, @@ -4566,6 +4769,7 @@ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, + "license": "MIT", "dependencies": { "binary-extensions": "^2.0.0" }, @@ -4578,6 +4782,7 @@ "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", "dev": true, + "license": "MIT", "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" @@ -4594,6 +4799,7 @@ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -4606,6 +4812,7 @@ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", "dev": true, + "license": "MIT", "dependencies": { "hasown": "^2.0.2" }, @@ -4621,6 +4828,7 @@ "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", "dev": true, + "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "get-intrinsic": "^1.2.6", @@ -4638,6 +4846,7 @@ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", "dev": true, + "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "has-tostringtag": "^1.0.2" @@ -4654,6 +4863,7 @@ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -4663,6 +4873,7 @@ "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", "dev": true, + "license": "MIT", "dependencies": { "call-bound": "^1.0.3" }, @@ -4678,6 +4889,7 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -4687,6 +4899,7 @@ "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz", "integrity": "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==", "dev": true, + "license": "MIT", "dependencies": { "call-bound": "^1.0.4", "generator-function": "^2.0.0", @@ -4706,6 +4919,7 @@ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, + "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" }, @@ -4718,6 +4932,7 @@ "resolved": "https://registry.npmjs.org/is-in-ci/-/is-in-ci-1.0.0.tgz", "integrity": "sha512-eUuAjybVTHMYWm/U+vBO1sY/JOCgoPCXRxzdju0K+K0BiGW0SChEL1MLC0PoCIR1OlPo5YAp8HuQoUlsWEICwg==", "dev": true, + "license": "MIT", "bin": { "is-in-ci": "cli.js" }, @@ -4733,6 +4948,7 @@ "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-1.0.0.tgz", "integrity": "sha512-K55T22lfpQ63N4KEN57jZUAaAYqYHEe8veb/TycJRk9DdSCLLcovXz/mL6mOnhQaZsQGwPhuFopdQIlqGSEjiQ==", "dev": true, + "license": "MIT", "dependencies": { "global-directory": "^4.0.1", "is-path-inside": "^4.0.0" @@ -4749,6 +4965,7 @@ "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -4758,6 +4975,7 @@ "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -4769,13 +4987,15 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/is-negative-zero": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -4788,6 +5008,7 @@ "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-6.1.0.tgz", "integrity": "sha512-O2z4/kNgyjhQwVR1Wpkbfc19JIhggF97NZNCpWTnjH7kVcZMUrnut9XSN7txI7VdyIYk5ZatOq3zvSuWpU8hoA==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -4800,6 +5021,7 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.12.0" } @@ -4809,6 +5031,7 @@ "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", "dev": true, + "license": "MIT", "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" @@ -4825,6 +5048,7 @@ "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -4834,6 +5058,7 @@ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-4.0.0.tgz", "integrity": "sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -4846,6 +5071,7 @@ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -4854,7 +5080,8 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.3.tgz", "integrity": "sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==", - "dev": true, + "devOptional": true, + "license": "MIT", "dependencies": { "@types/estree": "^1.0.6" } @@ -4864,6 +5091,7 @@ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", "dev": true, + "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "gopd": "^1.2.0", @@ -4882,6 +5110,7 @@ "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -4891,6 +5120,7 @@ "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -4903,6 +5133,7 @@ "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", "dev": true, + "license": "MIT", "dependencies": { "call-bound": "^1.0.3" }, @@ -4918,6 +5149,7 @@ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -4930,6 +5162,7 @@ "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", "dev": true, + "license": "MIT", "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" @@ -4946,6 +5179,7 @@ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", "dev": true, + "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "has-symbols": "^1.1.0", @@ -4963,6 +5197,7 @@ "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", "dev": true, + "license": "MIT", "dependencies": { "which-typed-array": "^1.1.16" }, @@ -4978,6 +5213,7 @@ "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -4990,6 +5226,7 @@ "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -5002,6 +5239,7 @@ "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", "dev": true, + "license": "MIT", "dependencies": { "call-bound": "^1.0.3" }, @@ -5017,6 +5255,7 @@ "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bound": "^1.0.3", "get-intrinsic": "^1.2.6" @@ -5032,21 +5271,24 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/jackspeak": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.1.tgz", - "integrity": "sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.2.3.tgz", + "integrity": "sha512-ykkVRwrYvFm1nb2AJfKKYPr0emF6IiXDYUaFx4Zn9ZuIH7MrzEZ3sD5RlqGXNRpHtvUHJyOnCEFxOlNDtGo7wg==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { - "@isaacs/cliui": "^8.0.2" + "@isaacs/cliui": "^9.0.0" }, "engines": { "node": "20 || >=22" @@ -5060,6 +5302,7 @@ "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.4.tgz", "integrity": "sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "async": "^3.2.6", "filelist": "^1.0.4", @@ -5072,17 +5315,28 @@ "node": ">=10" } }, + "node_modules/jose": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/jose/-/jose-6.2.2.tgz", + "integrity": "sha512-d7kPDd34KO/YnzaDOlikGpOurfF0ByC2sEV4cANCtdqLlTfBlw2p14O/5d/zv40gJPbIQxfES3nSx1/oYNyuZQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true + "dev": true, + "license": "MIT" }, "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" }, @@ -5094,25 +5348,29 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-schema": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", - "dev": true + "dev": true, + "license": "(AFL-2.1 OR BSD-3-Clause)" }, "node_modules/json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, + "license": "MIT", "bin": { "json5": "lib/cli.js" }, @@ -5125,6 +5383,7 @@ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", "dev": true, + "license": "MIT", "dependencies": { "universalify": "^2.0.0" }, @@ -5137,6 +5396,7 @@ "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -5146,24 +5406,17 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/kleur": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", - "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/ky": { - "version": "1.14.2", - "resolved": "https://registry.npmjs.org/ky/-/ky-1.14.2.tgz", - "integrity": "sha512-q3RBbsO5A5zrPhB6CaCS8ZUv+NWCXv6JJT4Em0i264G9W0fdPB8YRfnnEi7Dm7X7omAkBIPojzYJ2D1oHTHqug==", + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/ky/-/ky-1.14.3.tgz", + "integrity": "sha512-9zy9lkjac+TR1c2tG+mkNSVlyOpInnWdSMiue4F+kq8TwJSgv6o8jhLRg8Ho6SnZ9wOYUq/yozts9qQCfk7bIw==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" }, @@ -5171,11 +5424,21 @@ "url": "https://github.com/sindresorhus/ky?sponsor=1" } }, + "node_modules/kysely": { + "version": "0.28.14", + "resolved": "https://registry.npmjs.org/kysely/-/kysely-0.28.14.tgz", + "integrity": "sha512-SU3lgh0rPvq7upc6vvdVrCsSMUG1h3ChvHVOY7wJ2fw4C9QEB7X3d5eyYEyULUX7UQtxZJtZXGuT6U2US72UYA==", + "license": "MIT", + "engines": { + "node": ">=20.0.0" + } + }, "node_modules/latest-version": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-9.0.0.tgz", "integrity": "sha512-7W0vV3rqv5tokqkBAFV1LbR7HPOWzXQDpDgEuib/aJ1jsZZx6x3c2mBI+TJhJzOhkGeaLbCKEHXEXLfirtG2JA==", "dev": true, + "license": "MIT", "dependencies": { "package-json": "^10.0.0" }, @@ -5191,27 +5454,292 @@ "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, + "node_modules/lightningcss": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz", + "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "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" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz", + "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz", + "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz", + "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz", + "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz", + "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz", + "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz", + "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz", + "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz", + "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz", + "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz", + "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, "node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/locate-character": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz", "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==", - "dev": true + "devOptional": true, + "license": "MIT" }, "node_modules/locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^4.1.0" }, @@ -5230,19 +5758,22 @@ "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.sortby": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" @@ -5255,10 +5786,11 @@ } }, "node_modules/lru-cache": { - "version": "11.2.4", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.4.tgz", - "integrity": "sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==", + "version": "11.2.7", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.7.tgz", + "integrity": "sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==", "dev": true, + "license": "BlueOak-1.0.0", "engines": { "node": "20 || >=22" } @@ -5267,7 +5799,8 @@ "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, + "devOptional": true, + "license": "MIT", "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } @@ -5277,6 +5810,7 @@ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -5289,6 +5823,7 @@ "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" } @@ -5298,6 +5833,7 @@ "resolved": "https://registry.npmjs.org/meow/-/meow-7.1.1.tgz", "integrity": "sha512-GWHvA5QOcS412WCo8vwKDlTelGLsCGBVevQB5Kva961rmNfun0PCbv5+xta2kUMFJyR8/oWnn7ddeKdosbAPbA==", "dev": true, + "license": "MIT", "dependencies": { "@types/minimist": "^1.2.0", "camelcase-keys": "^6.2.2", @@ -5323,6 +5859,7 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -5335,6 +5872,7 @@ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -5344,20 +5882,22 @@ "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/minimatch": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", - "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", + "version": "10.2.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz", + "integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { - "@isaacs/brace-expansion": "^5.0.0" + "brace-expansion": "^5.0.2" }, "engines": { - "node": "20 || >=22" + "node": "18 || 20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -5368,6 +5908,7 @@ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -5377,6 +5918,7 @@ "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", "dev": true, + "license": "MIT", "dependencies": { "arrify": "^1.0.1", "is-plain-obj": "^1.1.0", @@ -5387,10 +5929,11 @@ } }, "node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", "dev": true, + "license": "BlueOak-1.0.0", "engines": { "node": ">=16 || 14 >=14.17" } @@ -5400,6 +5943,7 @@ "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -5408,13 +5952,15 @@ "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/mute-stream": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/nanoid": { "version": "3.3.11", @@ -5427,6 +5973,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -5434,17 +5981,34 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, + "node_modules/nanostores": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/nanostores/-/nanostores-1.2.0.tgz", + "integrity": "sha512-F0wCzbsH80G7XXo0Jd9/AVQC7ouWY6idUCTnMwW5t/Rv9W8qmO6endavDwg7TNp5GbugwSukFMVZqzPSrSMndg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "engines": { + "node": "^20.0.0 || >=22.0.0" + } + }, "node_modules/node-releases": { - "version": "2.0.27", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", - "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", - "dev": true + "version": "2.0.36", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.36.tgz", + "integrity": "sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA==", + "dev": true, + "license": "MIT" }, "node_modules/normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", @@ -5457,6 +6021,7 @@ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -5466,6 +6031,7 @@ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -5478,6 +6044,7 @@ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" } @@ -5487,6 +6054,7 @@ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", @@ -5502,11 +6070,29 @@ "url": "https://github.com/sponsors/ljharb" } }, + "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/ogl": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ogl/-/ogl-1.0.11.tgz", + "integrity": "sha512-kUpC154AFfxi16pmZUK4jk3J+8zxwTWGPo03EoYA8QPbzikHoaC82n6pNTbd+oEaJonaE8aPWBlX7ad9zrqLsA==", + "license": "Unlicense" + }, "node_modules/onetime": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, + "license": "MIT", "dependencies": { "mimic-fn": "^2.1.0" }, @@ -5522,6 +6108,7 @@ "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", "dev": true, + "license": "MIT", "dependencies": { "bl": "^4.1.0", "chalk": "^4.1.0", @@ -5540,20 +6127,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/own-keys": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", "dev": true, + "license": "MIT", "dependencies": { "get-intrinsic": "^1.2.6", "object-keys": "^1.1.1", @@ -5571,6 +6150,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, + "license": "MIT", "dependencies": { "p-try": "^2.0.0" }, @@ -5586,6 +6166,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^2.2.0" }, @@ -5598,6 +6179,7 @@ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -5607,6 +6189,7 @@ "resolved": "https://registry.npmjs.org/package-json/-/package-json-10.0.1.tgz", "integrity": "sha512-ua1L4OgXSBdsu1FPb7F3tYH0F48a6kxvod4pLUlGY9COeJAJQNX/sNH2IiEmsxw7lqYiAwrdHMjz1FctOsyDQg==", "dev": true, + "license": "MIT", "dependencies": { "ky": "^1.2.0", "registry-auth-token": "^5.0.2", @@ -5624,13 +6207,15 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", - "dev": true + "dev": true, + "license": "BlueOak-1.0.0" }, "node_modules/package-json/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -5643,6 +6228,7 @@ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -5661,6 +6247,7 @@ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -5670,6 +6257,7 @@ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -5678,19 +6266,21 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/path-scurry": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.1.tgz", - "integrity": "sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", + "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { "lru-cache": "^11.0.0", "minipass": "^7.1.2" }, "engines": { - "node": "20 || >=22" + "node": "18 || 20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -5700,15 +6290,17 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", "dev": true, + "license": "MIT", "engines": { - "node": ">=8.6" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/jonschlinkert" @@ -5719,14 +6311,15 @@ "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" } }, "node_modules/postcss": { - "version": "8.5.6", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", - "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "version": "8.5.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.8.tgz", + "integrity": "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==", "dev": true, "funding": [ { @@ -5742,6 +6335,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -5756,6 +6350,7 @@ "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" }, @@ -5767,13 +6362,15 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -5783,6 +6380,7 @@ "resolved": "https://registry.npmjs.org/pupa/-/pupa-3.3.0.tgz", "integrity": "sha512-LjgDO2zPtoXP2wJpDjZrGdojii1uqO0cnwKoIoUzkfS98HDmbeiGmYiXo3lXeFlq2xvne1QFQhwYXSUCLKtEuA==", "dev": true, + "license": "MIT", "dependencies": { "escape-goat": "^4.0.0" }, @@ -5798,24 +6396,17 @@ "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, "node_modules/rc": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "dev": true, + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", "dependencies": { "deep-extend": "^0.6.0", "ini": "~1.3.0", @@ -5830,13 +6421,15 @@ "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/read-pkg": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", "dev": true, + "license": "MIT", "dependencies": { "@types/normalize-package-data": "^2.4.0", "normalize-package-data": "^2.5.0", @@ -5852,6 +6445,7 @@ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", "dev": true, + "license": "MIT", "dependencies": { "find-up": "^4.1.0", "read-pkg": "^5.2.0", @@ -5869,6 +6463,7 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=8" } @@ -5878,6 +6473,7 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=8" } @@ -5887,6 +6483,7 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -5897,15 +6494,17 @@ } }, "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, + "license": "MIT", "engines": { - "node": ">=8.10.0" + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" } }, "node_modules/redent": { @@ -5913,6 +6512,7 @@ "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", "dev": true, + "license": "MIT", "dependencies": { "indent-string": "^4.0.0", "strip-indent": "^3.0.0" @@ -5926,6 +6526,7 @@ "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", @@ -5947,13 +6548,15 @@ "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/regenerate-unicode-properties": { "version": "10.2.2", "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.2.tgz", "integrity": "sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g==", "dev": true, + "license": "MIT", "dependencies": { "regenerate": "^1.4.2" }, @@ -5966,6 +6569,7 @@ "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", @@ -5986,6 +6590,7 @@ "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.4.0.tgz", "integrity": "sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==", "dev": true, + "license": "MIT", "dependencies": { "regenerate": "^1.4.2", "regenerate-unicode-properties": "^10.2.2", @@ -5999,12 +6604,13 @@ } }, "node_modules/registry-auth-token": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.1.0.tgz", - "integrity": "sha512-GdekYuwLXLxMuFTwAPg5UKGLW/UXzQrZvH/Zj791BQif5T05T0RsaLfHc9q3ZOKi7n+BoprPD9mJ0O0k4xzUlw==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.1.1.tgz", + "integrity": "sha512-P7B4+jq8DeD2nMsAcdfaqHbssgHtZ7Z5+++a5ask90fvmJ8p5je4mOa+wzu+DB4vQ5tdJV/xywY+UnVFeQLV5Q==", "dev": true, + "license": "MIT", "dependencies": { - "@pnpm/npm-conf": "^2.1.0" + "@pnpm/npm-conf": "^3.0.2" }, "engines": { "node": ">=14" @@ -6015,6 +6621,7 @@ "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-6.0.1.tgz", "integrity": "sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==", "dev": true, + "license": "MIT", "dependencies": { "rc": "1.2.8" }, @@ -6029,13 +6636,15 @@ "version": "0.8.0", "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/regjsparser": { "version": "0.13.0", "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.0.tgz", "integrity": "sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "jsesc": "~3.1.0" }, @@ -6048,6 +6657,7 @@ "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -6057,6 +6667,7 @@ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", "dev": true, + "license": "MIT", "dependencies": { "is-core-module": "^2.16.1", "path-parse": "^1.0.7", @@ -6077,6 +6688,7 @@ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dev": true, + "license": "MIT", "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" @@ -6089,57 +6701,71 @@ "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true + "dev": true, + "license": "ISC" + }, + "node_modules/rolldown": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.0-rc.12.tgz", + "integrity": "sha512-yP4USLIMYrwpPHEFB5JGH1uxhcslv6/hL0OyvTuY+3qlOSJvZ7ntYnoWpehBxufkgN0cvXxppuTu5hHa/zPh+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@oxc-project/types": "=0.122.0", + "@rolldown/pluginutils": "1.0.0-rc.12" + }, + "bin": { + "rolldown": "bin/cli.mjs" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "optionalDependencies": { + "@rolldown/binding-android-arm64": "1.0.0-rc.12", + "@rolldown/binding-darwin-arm64": "1.0.0-rc.12", + "@rolldown/binding-darwin-x64": "1.0.0-rc.12", + "@rolldown/binding-freebsd-x64": "1.0.0-rc.12", + "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-rc.12", + "@rolldown/binding-linux-arm64-gnu": "1.0.0-rc.12", + "@rolldown/binding-linux-arm64-musl": "1.0.0-rc.12", + "@rolldown/binding-linux-ppc64-gnu": "1.0.0-rc.12", + "@rolldown/binding-linux-s390x-gnu": "1.0.0-rc.12", + "@rolldown/binding-linux-x64-gnu": "1.0.0-rc.12", + "@rolldown/binding-linux-x64-musl": "1.0.0-rc.12", + "@rolldown/binding-openharmony-arm64": "1.0.0-rc.12", + "@rolldown/binding-wasm32-wasi": "1.0.0-rc.12", + "@rolldown/binding-win32-arm64-msvc": "1.0.0-rc.12", + "@rolldown/binding-win32-x64-msvc": "1.0.0-rc.12" + } }, "node_modules/rollup": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.55.1.tgz", - "integrity": "sha512-wDv/Ht1BNHB4upNbK74s9usvl7hObDnvVzknxqY/E/O3X6rW1U1rV1aENEfJ54eFZDTNo7zv1f5N4edCluH7+A==", + "version": "2.80.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.80.0.tgz", + "integrity": "sha512-cIFJOD1DESzpjOBl763Kp1AH7UE/0fcdHe6rZXUdQ9c50uvgigvW97u3IcSeBwOkgqL/PXPBktBCh0KEu5L8XQ==", "dev": true, - "dependencies": { - "@types/estree": "1.0.8" - }, + "license": "MIT", "bin": { "rollup": "dist/bin/rollup" }, "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" + "node": ">=10.0.0" }, "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", "fsevents": "~2.3.2" } }, + "node_modules/rou3": { + "version": "0.7.12", + "resolved": "https://registry.npmjs.org/rou3/-/rou3-0.7.12.tgz", + "integrity": "sha512-iFE4hLDuloSWcD7mjdCDhx2bKcIsYbtOTpfH5MHHLSKMOUyjqQXTeZVa289uuwEGEKFoE/BAPbhaU4B774nceg==", + "license": "MIT" + }, "node_modules/run-async": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.12.0" } @@ -6149,6 +6775,7 @@ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "tslib": "^1.9.0" }, @@ -6156,11 +6783,19 @@ "npm": ">=2.0.0" } }, + "node_modules/rxjs/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true, + "license": "0BSD" + }, "node_modules/sade": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", "dev": true, + "license": "MIT", "dependencies": { "mri": "^1.1.0" }, @@ -6173,6 +6808,7 @@ "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.2", @@ -6205,13 +6841,15 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/safe-push-apply": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", "dev": true, + "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "isarray": "^2.0.5" @@ -6228,6 +6866,7 @@ "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", "dev": true, + "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", @@ -6244,31 +6883,41 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/semver": { "version": "5.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver" } }, "node_modules/serialize-javascript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-7.0.5.tgz", + "integrity": "sha512-F4LcB0UqUl1zErq+1nYEEzSHJnIwb3AF2XWB94b+afhrekOUijwooAYqFyRbjYkm2PAKBabx6oYv/xDxNi8IBw==", "dev": true, - "dependencies": { - "randombytes": "^2.1.0" + "license": "BSD-3-Clause", + "engines": { + "node": ">=20.0.0" } }, + "node_modules/set-cookie-parser": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-3.1.0.tgz", + "integrity": "sha512-kjnC1DXBHcxaOaOXBHBeRtltsDG2nUiUni+jP92M9gYdW12rsmx92UsfpH7o5tDRs7I1ZZPSQJQGv3UaRfCiuw==", + "license": "MIT" + }, "node_modules/set-function-length": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dev": true, + "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", @@ -6286,6 +6935,7 @@ "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", "dev": true, + "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", @@ -6301,6 +6951,7 @@ "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", "dev": true, + "license": "MIT", "dependencies": { "dunder-proto": "^1.0.1", "es-errors": "^1.3.0", @@ -6315,6 +6966,7 @@ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, + "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" }, @@ -6327,6 +6979,7 @@ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -6336,6 +6989,7 @@ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", "dev": true, + "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3", @@ -6355,6 +7009,7 @@ "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", "dev": true, + "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3" @@ -6371,6 +7026,7 @@ "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", "dev": true, + "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", @@ -6389,6 +7045,7 @@ "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", "dev": true, + "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", @@ -6408,6 +7065,7 @@ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, + "license": "ISC", "engines": { "node": ">=14" }, @@ -6416,10 +7074,14 @@ } }, "node_modules/smob": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/smob/-/smob-1.5.0.tgz", - "integrity": "sha512-g6T+p7QO8npa+/hNx9ohv1E5pVCmWrVCUzUXJyLdMmftX6ER0oiWY/w9knEonLpnOp6b6FenKnMfR8gqwWdwig==", - "dev": true + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/smob/-/smob-1.6.1.tgz", + "integrity": "sha512-KAkBqZl3c2GvNgNhcoyJae1aKldDW0LO279wF9bk1PnluRTETKBq0WyzRXxEhoQLk56yHaOY4JCBEKDuJIET5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20.0.0" + } }, "node_modules/source-map": { "version": "0.8.0-beta.0", @@ -6427,6 +7089,7 @@ "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", "deprecated": "The work that was done in this beta branch won't be included in future versions", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "whatwg-url": "^7.0.0" }, @@ -6439,6 +7102,7 @@ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -6448,6 +7112,7 @@ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, + "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -6458,6 +7123,7 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -6467,13 +7133,15 @@ "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", "deprecated": "Please use @jridgewell/sourcemap-codec instead", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/spdx-correct": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" @@ -6483,29 +7151,33 @@ "version": "2.5.0", "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", - "dev": true + "dev": true, + "license": "CC-BY-3.0" }, "node_modules/spdx-expression-parse": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, + "license": "MIT", "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" } }, "node_modules/spdx-license-ids": { - "version": "3.0.22", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.22.tgz", - "integrity": "sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==", - "dev": true + "version": "3.0.23", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.23.tgz", + "integrity": "sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw==", + "dev": true, + "license": "CC0-1.0" }, "node_modules/stop-iteration-iterator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", "dev": true, + "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "internal-slot": "^1.1.0" @@ -6519,6 +7191,7 @@ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "~5.2.0" } @@ -6528,21 +7201,7 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -6557,6 +7216,7 @@ "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz", "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", @@ -6584,6 +7244,7 @@ "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.2", @@ -6605,6 +7266,7 @@ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.2", @@ -6623,6 +7285,7 @@ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -6640,6 +7303,7 @@ "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "get-own-enumerable-property-symbols": "^3.0.0", "is-obj": "^1.0.1", @@ -6654,19 +7318,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -6679,6 +7331,7 @@ "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz", "integrity": "sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" } @@ -6688,6 +7341,7 @@ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", "dev": true, + "license": "MIT", "dependencies": { "min-indent": "^1.0.0" }, @@ -6700,6 +7354,7 @@ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -6709,6 +7364,7 @@ "resolved": "https://registry.npmjs.org/stubborn-fs/-/stubborn-fs-2.0.0.tgz", "integrity": "sha512-Y0AvSwDw8y+nlSNFXMm2g6L51rBGdAQT20J3YSOqxC53Lo3bjWRtr2BKcfYoAf352WYpsZSTURrA0tqhfgudPA==", "dev": true, + "license": "MIT", "dependencies": { "stubborn-utils": "^1.0.1" } @@ -6717,13 +7373,15 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/stubborn-utils/-/stubborn-utils-1.0.2.tgz", "integrity": "sha512-zOh9jPYI+xrNOyisSelgym4tolKTJCQd5GBhK0+0xJvcYDcwlOoxF/rnFKQ2KRZknXSG9jWAp66fwP6AxN9STg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -6736,6 +7394,7 @@ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -6744,21 +7403,22 @@ } }, "node_modules/svelte": { - "version": "5.49.1", - "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.49.1.tgz", - "integrity": "sha512-jj95WnbKbXsXXngYj28a4zx8jeZx50CN/J4r0CEeax2pbfdsETv/J1K8V9Hbu3DCXnpHz5qAikICuxEooi7eNQ==", - "dev": true, + "version": "5.55.0", + "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.55.0.tgz", + "integrity": "sha512-SThllKq6TRMBwPtat7ASnm/9CDXnIhBR0NPGw0ujn2DVYx9rVwsPZxDaDQcYGdUz/3BYVsCzdq7pZarRQoGvtw==", + "devOptional": true, "license": "MIT", "dependencies": { "@jridgewell/remapping": "^2.3.4", "@jridgewell/sourcemap-codec": "^1.5.0", "@sveltejs/acorn-typescript": "^1.0.5", "@types/estree": "^1.0.5", + "@types/trusted-types": "^2.0.7", "acorn": "^8.12.1", - "aria-query": "^5.3.1", + "aria-query": "5.3.1", "axobject-query": "^4.1.0", "clsx": "^2.1.1", - "devalue": "^5.6.2", + "devalue": "^5.6.4", "esm-env": "^1.2.1", "esrap": "^2.2.2", "is-reference": "^3.0.3", @@ -6771,10 +7431,11 @@ } }, "node_modules/svelte-check": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-4.3.5.tgz", - "integrity": "sha512-e4VWZETyXaKGhpkxOXP+B/d0Fp/zKViZoJmneZWe/05Y2aqSKj3YN2nLfYPJBQ87WEiY4BQCQ9hWGu9mPT1a1Q==", + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-4.4.5.tgz", + "integrity": "sha512-1bSwIRCvvmSHrlK52fOlZmVtUZgil43jNL/2H18pRpa+eQjzGt6e3zayxhp1S7GajPFKNM/2PMCG+DZFHlG9fw==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "^0.3.25", "chokidar": "^4.0.1", @@ -6793,70 +7454,12 @@ "typescript": ">=5.0.0" } }, - "node_modules/svelte-check/node_modules/chokidar": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", - "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", - "dev": true, - "dependencies": { - "readdirp": "^4.0.1" - }, - "engines": { - "node": ">= 14.16.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/svelte-check/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, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, - "node_modules/svelte-check/node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/svelte-check/node_modules/readdirp": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", - "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", - "dev": true, - "engines": { - "node": ">= 14.18.0" - }, - "funding": { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - }, "node_modules/temp-dir": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -6866,6 +7469,7 @@ "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.6.0.tgz", "integrity": "sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==", "dev": true, + "license": "MIT", "dependencies": { "is-stream": "^2.0.0", "temp-dir": "^2.0.0", @@ -6884,6 +7488,7 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -6892,10 +7497,11 @@ } }, "node_modules/terser": { - "version": "5.44.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.44.1.tgz", - "integrity": "sha512-t/R3R/n0MSwnnazuPpPNVO60LX0SKL45pyl9YlvxIdkH0Of7D5qM2EVe+yASRIlY5pZ73nclYJfNANGWPwFDZw==", + "version": "5.46.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.46.1.tgz", + "integrity": "sha512-vzCjQO/rgUuK9sf8VJZvjqiqiHFaZLnOiimmUuOKODxWL8mm/xua7viT7aqX7dgPY60otQjUotzFMmCB4VdmqQ==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.15.0", @@ -6909,27 +7515,38 @@ "node": ">=10" } }, - "node_modules/three": { - "version": "0.182.0", - "resolved": "https://registry.npmjs.org/three/-/three-0.182.0.tgz", - "integrity": "sha512-GbHabT+Irv+ihI1/f5kIIsZ+Ef9Sl5A1Y7imvS5RQjWgtTPfPnZ43JmlYI7NtCRDK9zir20lQpfg8/9Yd02OvQ==" - }, "node_modules/through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true - }, - "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dev": true, + "license": "MIT" + }, + "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": { - "os-tmpdir": "~1.0.2" + "fdir": "^6.5.0", + "picomatch": "^4.0.3" }, "engines": { - "node": ">=0.6.0" + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tmp": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", + "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.14" } }, "node_modules/to-regex-range": { @@ -6937,6 +7554,7 @@ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, + "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -6949,6 +7567,7 @@ "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", "dev": true, + "license": "MIT", "dependencies": { "punycode": "^2.1.0" } @@ -6958,21 +7577,25 @@ "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "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/type-fest": { "version": "0.21.3", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -6985,6 +7608,7 @@ "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", "dev": true, + "license": "MIT", "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", @@ -6999,6 +7623,7 @@ "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.8", "for-each": "^0.3.3", @@ -7018,6 +7643,7 @@ "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", "dev": true, + "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", @@ -7039,6 +7665,7 @@ "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", @@ -7055,10 +7682,11 @@ } }, "node_modules/typescript": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.2.tgz", + "integrity": "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==", "dev": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -7072,6 +7700,7 @@ "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", "dev": true, + "license": "MIT", "dependencies": { "call-bound": "^1.0.3", "has-bigints": "^1.0.2", @@ -7090,6 +7719,7 @@ "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -7099,6 +7729,7 @@ "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", "dev": true, + "license": "MIT", "dependencies": { "unicode-canonical-property-names-ecmascript": "^2.0.0", "unicode-property-aliases-ecmascript": "^2.0.0" @@ -7112,6 +7743,7 @@ "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.1.tgz", "integrity": "sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -7121,6 +7753,7 @@ "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.2.0.tgz", "integrity": "sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -7130,6 +7763,7 @@ "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", "dev": true, + "license": "MIT", "dependencies": { "crypto-random-string": "^2.0.0" }, @@ -7142,6 +7776,7 @@ "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 10.0.0" } @@ -7151,6 +7786,7 @@ "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", "dev": true, + "license": "MIT", "engines": { "node": ">=4", "yarn": "*" @@ -7175,6 +7811,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" @@ -7191,6 +7828,7 @@ "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-7.3.1.tgz", "integrity": "sha512-+dwUY4L35XFYEzE+OAL3sarJdUioVovq+8f7lcIJ7wnmnYQV5UD1Y/lcwaMSyaQ6Bj3JMj1XSTjZbNLHn/19yA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "boxen": "^8.0.1", "chalk": "^5.3.0", @@ -7215,6 +7853,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", "dev": true, + "license": "MIT", "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" }, @@ -7223,10 +7862,11 @@ } }, "node_modules/update-notifier/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -7238,33 +7878,38 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, + "license": "Apache-2.0", "dependencies": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" } }, "node_modules/vite": { - "version": "5.4.21", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.21.tgz", - "integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==", + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.0.3.tgz", + "integrity": "sha512-B9ifbFudT1TFhfltfaIPgjo9Z3mDynBTJSUYxTjOQruf/zHH+ezCQKcoqO+h7a9Pw9Nm/OtlXAiGT1axBgwqrQ==", "dev": true, + "license": "MIT", "dependencies": { - "esbuild": "^0.21.3", - "postcss": "^8.4.43", - "rollup": "^4.20.0" + "lightningcss": "^1.32.0", + "picomatch": "^4.0.4", + "postcss": "^8.5.8", + "rolldown": "1.0.0-rc.12", + "tinyglobby": "^0.2.15" }, "bin": { "vite": "bin/vite.js" }, "engines": { - "node": "^18.0.0 || >=20.0.0" + "node": "^20.19.0 || >=22.12.0" }, "funding": { "url": "https://github.com/vitejs/vite?sponsor=1" @@ -7273,23 +7918,33 @@ "fsevents": "~2.3.3" }, "peerDependencies": { - "@types/node": "^18.0.0 || >=20.0.0", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "sass-embedded": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" + "@types/node": "^20.19.0 || >=22.12.0", + "@vitejs/devtools": "^0.1.0", + "esbuild": "^0.27.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "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 }, - "less": { + "@vitejs/devtools": { "optional": true }, - "lightningcss": { + "esbuild": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { "optional": true }, "sass": { @@ -7306,16 +7961,28 @@ }, "terser": { "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true } } }, "node_modules/vitefu": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-1.1.1.tgz", - "integrity": "sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-1.1.2.tgz", + "integrity": "sha512-zpKATdUbzbsycPFBN71nS2uzBUQiVnFoOrr2rvqv34S1lcAgMKKkjWleLGeiJlZ8lwCXvtWaRn7R3ZC16SYRuw==", "dev": true, + "license": "MIT", + "workspaces": [ + "tests/deps/*", + "tests/projects/*", + "tests/projects/workspace/packages/*" + ], "peerDependencies": { - "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0" + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-beta.0" }, "peerDependenciesMeta": { "vite": { @@ -7328,6 +7995,7 @@ "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", "dev": true, + "license": "MIT", "dependencies": { "defaults": "^1.0.3" } @@ -7336,13 +8004,15 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", - "dev": true + "dev": true, + "license": "BSD-2-Clause" }, "node_modules/whatwg-url": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", "dev": true, + "license": "MIT", "dependencies": { "lodash.sortby": "^4.7.0", "tr46": "^1.0.1", @@ -7353,13 +8023,15 @@ "version": "2.1.5", "resolved": "https://registry.npmjs.org/when-exit/-/when-exit-2.1.5.tgz", "integrity": "sha512-VGkKJ564kzt6Ms1dbgPP/yuIoQCrsFAnRbptpC5wOEsDaNsbCB2bnfnaA8i/vRs5tjUSEOtIuvl9/MyVsvQZCg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -7375,6 +8047,7 @@ "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", "dev": true, + "license": "MIT", "dependencies": { "is-bigint": "^1.1.0", "is-boolean-object": "^1.2.1", @@ -7394,6 +8067,7 @@ "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", "dev": true, + "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "function.prototype.name": "^1.1.6", @@ -7421,6 +8095,7 @@ "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", "dev": true, + "license": "MIT", "dependencies": { "is-map": "^2.0.3", "is-set": "^2.0.3", @@ -7435,10 +8110,11 @@ } }, "node_modules/which-typed-array": { - "version": "1.1.19", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", - "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", + "version": "1.1.20", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.20.tgz", + "integrity": "sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==", "dev": true, + "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", @@ -7460,6 +8136,7 @@ "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-5.0.0.tgz", "integrity": "sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==", "dev": true, + "license": "MIT", "dependencies": { "string-width": "^7.0.0" }, @@ -7475,6 +8152,7 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -7486,13 +8164,15 @@ "version": "10.6.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/widest-line/node_modules/string-width": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", @@ -7506,12 +8186,13 @@ } }, "node_modules/widest-line/node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", "dev": true, + "license": "MIT", "dependencies": { - "ansi-regex": "^6.0.1" + "ansi-regex": "^6.2.2" }, "engines": { "node": ">=12" @@ -7525,6 +8206,7 @@ "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-7.4.0.tgz", "integrity": "sha512-8CB9OxKAgKZKyNMwfGZ1XESx89GryWTfI+V5yEj8sHjFH8MFelUwYXEyldEK6M6oKMmn807GoJFUEA1sC4XS9w==", "dev": true, + "license": "MIT", "dependencies": { "idb": "^7.0.1", "workbox-core": "7.4.0" @@ -7535,6 +8217,7 @@ "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-7.4.0.tgz", "integrity": "sha512-+eZQwoktlvo62cI0b+QBr40v5XjighxPq3Fzo9AWMiAosmpG5gxRHgTbGGhaJv/q/MFVxwFNGh/UwHZ/8K88lA==", "dev": true, + "license": "MIT", "dependencies": { "workbox-core": "7.4.0" } @@ -7544,6 +8227,7 @@ "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-7.4.0.tgz", "integrity": "sha512-Ntk1pWb0caOFIvwz/hfgrov/OJ45wPEhI5PbTywQcYjyZiVhT3UrwwUPl6TRYbTm4moaFYithYnl1lvZ8UjxcA==", "dev": true, + "license": "MIT", "dependencies": { "@apideck/better-ajv-errors": "^0.3.1", "@babel/core": "^7.24.4", @@ -7587,100 +8271,12 @@ "node": ">=20.0.0" } }, - "node_modules/workbox-build/node_modules/@rollup/plugin-babel": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", - "integrity": "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.10.4", - "@rollup/pluginutils": "^3.1.0" - }, - "engines": { - "node": ">= 10.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0", - "@types/babel__core": "^7.1.9", - "rollup": "^1.20.0||^2.0.0" - }, - "peerDependenciesMeta": { - "@types/babel__core": { - "optional": true - } - } - }, - "node_modules/workbox-build/node_modules/@rollup/plugin-replace": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", - "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", - "dev": true, - "dependencies": { - "@rollup/pluginutils": "^3.1.0", - "magic-string": "^0.25.7" - }, - "peerDependencies": { - "rollup": "^1.20.0 || ^2.0.0" - } - }, - "node_modules/workbox-build/node_modules/@rollup/pluginutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", - "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", - "dev": true, - "dependencies": { - "@types/estree": "0.0.39", - "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" - }, - "engines": { - "node": ">= 8.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0" - } - }, - "node_modules/workbox-build/node_modules/@types/estree": { - "version": "0.0.39", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", - "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", - "dev": true - }, - "node_modules/workbox-build/node_modules/estree-walker": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", - "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", - "dev": true - }, - "node_modules/workbox-build/node_modules/magic-string": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", - "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", - "dev": true, - "dependencies": { - "sourcemap-codec": "^1.4.8" - } - }, - "node_modules/workbox-build/node_modules/rollup": { - "version": "2.79.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.2.tgz", - "integrity": "sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ==", - "dev": true, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=10.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, "node_modules/workbox-cacheable-response": { "version": "7.4.0", "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-7.4.0.tgz", "integrity": "sha512-0Fb8795zg/x23ISFkAc7lbWes6vbw34DGFIMw31cwuHPgDEC/5EYm6m/ZkylLX0EnEbbOyOCLjKgFS/Z5g0HeQ==", "dev": true, + "license": "MIT", "dependencies": { "workbox-core": "7.4.0" } @@ -7690,6 +8286,7 @@ "resolved": "https://registry.npmjs.org/workbox-cli/-/workbox-cli-7.4.0.tgz", "integrity": "sha512-BTc9CbW+aXMyIxBdW2mX+dLYHwTeCdKARX0zpjLvR/mZ2ho/7d9XWckwgFGLQRsJfcxml5WngNqp1PG7+qa9Ug==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.1.0", "chokidar": "^3.6.0", @@ -7712,17 +8309,70 @@ "node": ">=20.0.0" } }, + "node_modules/workbox-cli/node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/workbox-cli/node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/workbox-cli/node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, "node_modules/workbox-core": { "version": "7.4.0", "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-7.4.0.tgz", "integrity": "sha512-6BMfd8tYEnN4baG4emG9U0hdXM4gGuDU3ectXuVHnj71vwxTFI7WOpQJC4siTOlVtGqCUtj0ZQNsrvi6kZZTAQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/workbox-expiration": { "version": "7.4.0", "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-7.4.0.tgz", "integrity": "sha512-V50p4BxYhtA80eOvulu8xVfPBgZbkxJ1Jr8UUn0rvqjGhLDqKNtfrDfjJKnLz2U8fO2xGQJTx/SKXNTzHOjnHw==", "dev": true, + "license": "MIT", "dependencies": { "idb": "^7.0.1", "workbox-core": "7.4.0" @@ -7733,6 +8383,7 @@ "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-7.4.0.tgz", "integrity": "sha512-MVPXQslRF6YHkzGoFw1A4GIB8GrKym/A5+jYDUSL+AeJw4ytQGrozYdiZqUW1TPQHW8isBCBtyFJergUXyNoWQ==", "dev": true, + "license": "MIT", "dependencies": { "workbox-background-sync": "7.4.0", "workbox-core": "7.4.0", @@ -7745,6 +8396,7 @@ "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-7.4.0.tgz", "integrity": "sha512-etzftSgdQfjMcfPgbfaZCfM2QuR1P+4o8uCA2s4rf3chtKTq/Om7g/qvEOcZkG6v7JZOSOxVYQiOu6PbAZgU6w==", "dev": true, + "license": "MIT", "dependencies": { "workbox-core": "7.4.0" } @@ -7754,6 +8406,7 @@ "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-7.4.0.tgz", "integrity": "sha512-VQs37T6jDqf1rTxUJZXRl3yjZMf5JX/vDPhmx2CPgDDKXATzEoqyRqhYnRoxl6Kr0rqaQlp32i9rtG5zTzIlNg==", "dev": true, + "license": "MIT", "dependencies": { "workbox-core": "7.4.0", "workbox-routing": "7.4.0", @@ -7765,6 +8418,7 @@ "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-7.4.0.tgz", "integrity": "sha512-3Vq854ZNuP6Y0KZOQWLaLC9FfM7ZaE+iuQl4VhADXybwzr4z/sMmnLgTeUZLq5PaDlcJBxYXQ3U91V7dwAIfvw==", "dev": true, + "license": "MIT", "dependencies": { "workbox-core": "7.4.0" } @@ -7774,6 +8428,7 @@ "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-7.4.0.tgz", "integrity": "sha512-kOkWvsAn4H8GvAkwfJTbwINdv4voFoiE9hbezgB1sb/0NLyTG4rE7l6LvS8lLk5QIRIto+DjXLuAuG3Vmt3cxQ==", "dev": true, + "license": "MIT", "dependencies": { "workbox-cacheable-response": "7.4.0", "workbox-core": "7.4.0", @@ -7788,6 +8443,7 @@ "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-7.4.0.tgz", "integrity": "sha512-C/ooj5uBWYAhAqwmU8HYQJdOjjDKBp9MzTQ+otpMmd+q0eF59K+NuXUek34wbL0RFrIXe/KKT+tUWcZcBqxbHQ==", "dev": true, + "license": "MIT", "dependencies": { "workbox-core": "7.4.0" } @@ -7797,6 +8453,7 @@ "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-7.4.0.tgz", "integrity": "sha512-T4hVqIi5A4mHi92+5EppMX3cLaVywDp8nsyUgJhOZxcfSV/eQofcOA6/EMo5rnTNmNTpw0rUgjAI6LaVullPpg==", "dev": true, + "license": "MIT", "dependencies": { "workbox-core": "7.4.0" } @@ -7806,6 +8463,7 @@ "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-7.4.0.tgz", "integrity": "sha512-QHPBQrey7hQbnTs5GrEVoWz7RhHJXnPT+12qqWM378orDMo5VMJLCkCM1cnCk+8Eq92lccx/VgRZ7WAzZWbSLg==", "dev": true, + "license": "MIT", "dependencies": { "workbox-core": "7.4.0", "workbox-routing": "7.4.0" @@ -7815,48 +8473,33 @@ "version": "7.4.0", "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-7.4.0.tgz", "integrity": "sha512-ltU+Kr3qWR6BtbdlMnCjobZKzeV1hN+S6UvDywBrwM19TTyqA03X66dzw1tEIdJvQ4lYKkBFox6IAEhoSEZ8Xw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/workbox-window": { "version": "7.4.0", "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-7.4.0.tgz", "integrity": "sha512-/bIYdBLAVsNR3v7gYGaV4pQW3M3kEPx5E8vDxGvxo6khTrGtSSCS7QiFKv9ogzBgZiy0OXLP9zO28U/1nF1mfw==", "dev": true, + "license": "MIT", "dependencies": { "@types/trusted-types": "^2.0.2", "workbox-core": "7.4.0" } }, "node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/chalk/wrap-ansi?sponsor=1" @@ -7867,6 +8510,7 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -7879,6 +8523,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -7887,35 +8532,38 @@ } }, "node_modules/wrap-ansi/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "dev": true, + "license": "MIT" }, "node_modules/wrap-ansi/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", "dev": true, + "license": "MIT", "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" }, "engines": { - "node": ">=12" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", "dev": true, + "license": "MIT", "dependencies": { - "ansi-regex": "^6.0.1" + "ansi-regex": "^6.2.2" }, "engines": { "node": ">=12" @@ -7929,6 +8577,7 @@ "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-5.1.0.tgz", "integrity": "sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -7940,13 +8589,15 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/yargs-parser": { "version": "18.1.3", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", "dev": true, + "license": "ISC", "dependencies": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" @@ -7959,7 +8610,17 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/zimmerframe/-/zimmerframe-1.1.4.tgz", "integrity": "sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ==", - "dev": true + "devOptional": true, + "license": "MIT" + }, + "node_modules/zod": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.6.tgz", + "integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } } } } diff --git a/package.json b/package.json index ab6e622..08afa16 100644 --- a/package.json +++ b/package.json @@ -9,18 +9,27 @@ "check": "svelte-check --fail-on-warnings", "preview": "vite preview", "prepare:assets": "node scripts/prepare.js", - "generate:save-editor-assets": "node scripts/generate-save-editor-assets.js" + "generate:save-editor-assets": "node scripts/generate-save-editor-assets.js", + "deploy": "bash scripts/deploy.sh", + "deploy:assets": "bash scripts/deploy.sh --include-assets", + "deploy:prod": "bash scripts/deploy.sh production", + "deploy:prod:assets": "bash scripts/deploy.sh production --include-assets" }, "dependencies": { "@floating-ui/dom": "^1.7.5", - "three": "^0.182.0" + "better-auth": "^1.5.5", + "ogl": "^1.0.11" }, "devDependencies": { - "@sveltejs/vite-plugin-svelte": "^4.0.0", - "svelte": "^5.0.0", + "@sveltejs/vite-plugin-svelte": "^7.0.0", + "svelte": "^5.46.4", "svelte-check": "^4.0.0", - "typescript": "^5.0.0", - "vite": "^5.4.0", - "workbox-cli": "^7.3.0" + "typescript": "^6.0.0", + "vite": "^8.0.0", + "workbox-cli": "^7.4.0" + }, + "overrides": { + "serialize-javascript": "^7.0.3", + "tmp": "^0.2.4" } } diff --git a/public/images/infoface.webp b/public/images/infoface.webp new file mode 100644 index 0000000000000000000000000000000000000000..0051e7344b58fbb90443ccd4cbf5e73375ef525c GIT binary patch literal 2034 zcmVOYcSmmJ{wT=W(GOZ_MESMv9d#;X5j{DAlZ^zY~2+J7&8(GJB**Sxh?OEgRP@pKc53P1I`fA^=kqC|78x~5}Nb#JLQZoQf zDh~ThAO%y@A2;RTa!=2~AP67CY6a^&3hqfOKf{9Xwe0bIGN9MmpaB*Tz3*a?0092} z2t52fxA>5IDeB^Rm!oo_>vOyWaQCH1GjythWWAKEY8IaLgiqeXc5hOXg*{(=`$rLq zxeY`4BT;Nmq24eeBk4<@|KPA_j~R^sG*myhhe-cQoa@=#z4QO||KHC?a-((x&#-Mq zDl|F38Dpl$Iu`Z+q^pyWse^|KDnV3sj}+$loaC4v?S&NKr+;cB#-7+>pL7S)Jhsa{ z;x-Gt9r#U|6MW;9oZjkzW+w1(;h=nLhv(l=G#B_;GJ9tdV#XU$K}-3Mlrpt?qm<%) za-%$cgbfVdr_giyVa!P~3fNS6t$u3;^x)wTtKgJg(Bt_$hi2{&9yO?_7@S8wH=|F( z-mtoKRhBvBnuu7jtMks^VMo@o2J02x3hvZLPgfr#{s0g2kH1+6o+YxUl&7*C4w`rb z{-f86E-l_f-v8v+yZ+a0fW(aan?z68h+IEGbyyKZnr_eARL4E_bilY#dg4DLP^zsS zU5^>m$POI}mnKM3K!U}?aeQ|`j0EWH6bygc6nh|&sV-%pKmXF6dXD#@)Ro0)y>M}n zm*3vE`d&ZJFJS{5t=}Dut8mC$rSX zm9?6$Qv@~4TeeI(1N3_ebQxPy*y?>Q0@&JJO7dF8_y0~6(fm*g3wioi5c^U1Aoy;5 z_juT8CqOV}!POsfg8BelisVrH9gl>m^ICCw{|G${tp=*UC=2Xo01eb>q#TDvtEFh`W0qwHvvve6htD zFJI%qZB{`URcbjv130SK)qno~+HS-`M{S@FW_SO0(_7~Uod-vSh>U`s`0MIm1#6`a z)ctB@>c4TmQS9I=kw<6znQwo3o6kS{;+%7*4JFXlT<;Z!4NfJx6RJU>sClO6uTiJy z|3^P8YfOB=pRTY{gUxsx;O5cX-!up3PZG#6%dsXt3{@{-eSHUtkZ8oc

7cZU_u# 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 z

0Wm>s63okzFBU^s$d|J;M>Bu)^}?SXpRd!M=WaO+4xM(ax1Lt33uI>MJJA^G3+ z;BqGkfMWGZP+w;yQPqbwH;f3XE#msHfiBUt)K|#K40h0~^C& zIPKEA)n98u4--Wy9xMm%7>H^UwsFQeqLI5SbzcJodTbk7|V4!=oK-*hs>`7pXj9vHjo%m4@ozs|1^ykQnebN#njC zlWMZ<2URn3_5bafKLt7t%(pq=s!sK~;q(&A$T5Ko>xQzC1_nu2$Wxw00>ILHYYQ&_ z?VU3ftKB`e#^R;jnE_MD#_P6SsJYpJM`idMh3sh#KJfI%x4Z=T9LsxMIg>H|K5yyg zcfEdP{iK95m1`pg2IS;h`|OYb*!DKIh@V+$mR>6;K&XKofD#96H(j>6*`^Wpz8o-+ zM`o-x;Fb>c#QS^wNE+WE63;js+kmBfgZ*Va(NLe{7226MZIr~t5r@)P!~?~wz-a6i zYgRbL-rhWli&<=fNIncjZ)Z4#Tuh415I~i@Wd*iU+E#X4>e&(}i0R%%n}6?29th2? zJ5ZV{(Dsdg6a|&>f)N6$PN&is3gdJG42?7(N?^};2@t^e_8WyHi>nrvctu=m=VrY$;L>d{t$}@XWe4*~g-I>Tl2Ne3xU1Y#l};Mu=2N2~&Rw+xzq9-N}2N^a_v)$Cf{* zTs+z*T`z8H%#JYkj%dfY^v(2+!{yfh6>A=?r{oE#ZvKST7Y3!;f1!m|CWOA7hUH5Idaac&`)zE zB&_$5wiL}%F6_mQWo&AMDheT}&9g6V1J2j~T!@;Vc0&McO$+mz+t60qDuVyYf0U~r zo?>Q+9@#s5f`XoxI$JQ@;`WF@8=w`hR*_W10CO5g0072Rr^c452`uWe3Z2>aBc%u+ ztV(q@-Q)F~T4c}FWw<1B3V#9<9pdHR``H%o0fnP|xhg4oOXqv}=_%X@h9nKxiBWSA zY~RdR7sXu{7VH(+oLt&>jpIAlBTLOy@3TtjaK0l|OP=@8dGknskLk}pN_t#40V9kK zfN$}|*iWbh;_~Gv5IgoKc7d(UalZCOZQC=M_iQYZhV>ri{xMP9D-~3)u@X zaz~T)6{7)WD$JwdjJWvSS6!^9oGPi?4J9Wf4oCCgulm*FXC2qatzZaADuCCIQ8+xive_svsQk#+*p4O<@O&=Im? zYj){HQS$WuG8RtuI3SNc7+WyA(X{BOe80EuB2MVf2@oE>*UQ4mShzLfJJy)C!OoWQ z%0s4g^>K;3qNL8*i|Lqdt(cZ9$!wpOhrQ7L0n2R%t;P7jWAI}@+2vh!)3smjk|ziA02z_MSC+-J$~+Whp+4PHKqB6X5JW9dy4_*$<=}ra*%y6$_%NL|w(SQrGUPLv zN^ApRGDSOL#a(*N)&7c}ANUSq9U*d1rdP?e#y*RCoQm$KzhTch`w+aG@$&wTI=!^u&}j!@y|+eLU1T)8%=C zUT2;1!>R41hS2vlSaJN6@FfuBzuy4`zf4k%NBX)*>xT0l9AkST!q{t<+H6DH7-EwVmX%iEC)BU z$D|LEgs$MlVEwM4a1=9zTWC`mMQxdGPLfT!^7`AEOO?I1I{Dq|!tB z>3-XS`cDKhkt9xIJxk!;^BI>Cvws_91h# zXl`Ns8RT&DlI4}#L=QIUMQn3d7f`6ArofU#NpeBo$&eQ&{%s{ygawZ=<v1xP%XCo zxFEiw7K>iRQEph(Uu7j&6xU`R)_6o6+s7git&E48yS^#i$4s3viS{Y~j1|3i&56Bq zq7`W#mGz(d#e+cz1G!AQoJ7kqNCX_bz^1O(bEb^uDh|R+W_lZTm`n~oJV98mXw$vM z*mzGvY>VN@{Fuyrxpf>_;j7?VLs4goTEUs@K%$H}KFRnUxUB^a_jf^WlULCnZ8aDl zFb09adLAZ_xaIMk*z!QE1b}K_L&8j+-LSvptPQ@IEz>YHGVn%E)0hxrdbw&1UbNJ9 z6HDo?w~(S2-j!ZlNFg^nX1Z2h*xOQ`^A741T{0QZGBw8M~HYU5 z*G&{1_9WhyjoU3SE@Ya~SaE!1usg{F*Z|1Y?fy2-x66L2N_?4k1PFZ?Z66w@!}?<+ zVX=8ai)d0V6JEOtb?c|>j(A79EJcMP5RHihX%tzHgMl9`KLEA>Znz@$aKgjs7n81e z3exF9;3mLFk=0^?`0qu^iNVsiDNrJ3d*fz?&SR(2eNb4-cSOOzAm$7j7d|=J7eg!e z1S!Tq7f#bd0G-xsf~G9M4aWUd7_kRxD}&Z^L=qjQ+$yh249$c(B-f++pMeO}da2}x zpv(Ws%yf(hc&e=-Mwr9D<)WqV8^Pd>O@VCV9UT-?P(aaZt3p(mRqh{Fx+G~#`W#n0 zxkCn_N|Cs3*;XTjkv?ubvZP5To}oL8e1?!I{&g8{JG{ z1BkjSCHBBp7ctF)^e5I5#~Xt;q4tdJPb~RGcYqEqQ=j0|%6r8HOt^HM?cJ0~xWMfg z_-2V=d|v#|*L0~@Y@z56xpd<6Q=jy^1RcdZ3isPdT!&KciT$^8;EDXWd&Ms-&OJq; zC95zZR)`(mMp>zqa}-x580AKlcC*_0jjED(DdAdk>#m4YVpWDf&g1{z76Wdk2Ze{4 zx{wtEC`2aWF5x~~Dfc@|HyFKMO(M%?Y8! zBokr`BU!ab#Gx%U#H!NKs+X1g4JZFHb~-ewe7svLy2ng!;xUlt4gG+hs;IMxOIm&i z_bcBS2Y@EuPm^xGcXXLI%-9(?XpA)&y7vdiSXN8mnP3*2X-u-s;fyXd=4{ItwLDBr z&Pu03EAAV!S8+V`+`!3{fC(a>FtLAF+4q4*O&XAFIDJWTfI&|YG~4WF+v;ax#c`$%X1$V*3{?G_kn}aWMzEqiL*cL%~SOnryL{wXGpa zp6we# zpR^f|If9%6_XzSU&`eNQe3M|wm<`aONBE$boJ!OC) zePY-ujOD#xM<0Em;`~If%}V?xD6~Ob8H|3H_rNH-)U`4m!LlGF*#B4N1%T|t?yROY zX_rSiWPSlqB1{pXBHqKH$*dvI+?_VB-0anziLyU*r$-`pezV&rFPf&@~DId(a-A#6N0t2Sb zdVpZ`c?(BtqcfO4gYs&-4qFq)_$ytFH~artAQxjYP2LM1j|?9sw3BF(qQDOr)y<7o zC#*aeP52+OjZL;aYfKupyoLD;Gev-;ZnWfX8y#vN5CzZr3mDOq*x{O@d8;c0XTHw0 zc`QS3$j026;0(G875-0V*bBh}BCRJKO7yO{>7NCAyGWF7-_-I`RE8XRNR%IpnZa%e z9aG8nWFxT75{8mXIy&ToKrmDo309SxW8G)vL&kp4s441Dz^Oj^{A_z*6jXSIB*BJS zeH4w4UtgWxb3iKiR2);R^rcpG`nT%G77H#Q^n+|ZOmvu_3}jmGd2VgFbl0)QXySnt z+Z}V$sB}}+&n3iBwsT2Y!!?~eYYgyo_j>0CR4S`zWkz&Yv0y?T@uLIVOFi?d!d~#= zVYu#_B`@u}oRRoJb0V+8@EvXcU0>;Q77;y5@vpEHO@}|r1qiOB_{Xaw#qED{p~%g< zH65%7xPJe=oQBg*=*vRIu^O%k@hbyPTDD}P$j?lqWl{>8=*j-5Yx$L>0=8Fp!yZTY zKYc3gw96%=0zjud5ZwylkIJREhU{9ArRv=cZVLPjLvm%NP2Y0^GusUpIy$1v|FO(l$ym)Z_(l4!Yv;@NqD{9CC?q zB@IOj#!G8Qo@&m4=u?al){73MM?-J4dE?Q8RHyb|;+BGK4YdweB{HsTrBHzK(UaRo zMbOw5Zgu?H)x=fTpc=D)d=i*k8)o@olVdIu^`YfdIlzd5I*8gut7{AGms==!0)=Uc zWMN&7c^NI7$tE3Ik)e*p@ER%<+QX0JnP-=^^L%haA=~bF!pR^gb1_`mXP3j>vVMaI zCat8LyqfHBf@HE%qdL zio$u}ADaEZ@0fw$PusB*7&4DB=JU1Y(+FrxO|P#N(ajn@Y=PDJL2cOM-!+1EM?)x> z@J0qWqe9Eat(z6|WZ|>C`eCIUqfUTkC*m0_C6<=}9qGGk<0PkRvI@jas!KMFSY zvZjoY24UsSFrL${*-PDh=nv?MCG4m+^z}9;IbA!aTJ#UHPi^{hNn9aH%FT+dy=^t% z_~v;Y1jGy$e-k8S+qK&V1@^Je%ce>H_uHU00XJahTI*_JmfNd*`QQFMj@*!xt}E$@ zFuUo+2AXTXG!q6hSS(F^cylz(N{!^|1~(LD80_T*Ft8Q#9-g$x2Wr_hg{M-FRH*Y} zs{!sVMFrJKBH{NvkPhKM~{nx0(b`dY*Fa z3_`}s(^x7(zM6h3eJ&ATD6xvnFc5^#BA%1F{_sC*07vZS6 z!^dFkx)V0i6r@$abja;zV%~Fm1y9V@)9hOx^4z>NE^qia39A`_x51+C@^jZ+4KjvlU^*1lBZNc1mL3Y?XyY%RA9BKfXePD8xBBPi z#NbFP0iL{qV=Sb_{0~yymTkSGZAO-3?L%oRo{O{GyZeYx7@Fa1D=V3gYNwX;f*Bhg zA2~iDPre{t=$TN2ZuQG=4XUw4D^(Mf-eLzkVs9I4w^jmb*(HpMmiVXA#~k)>`+sVA z!r5$ye_Hv1dJLD+9<7y=ecH`pA%rtCKB0ylquXyZ`ZbP1)g)!p5Uo5tGdoM zr_hHHs&hO3hYxubZTl%V%H@v;mQ5pv59-;Sg?Vyt<+E$8S=CgIV?;A(=rVXMEZvf`x19M)?y14f)19hM*?T_=mmOes@6-U{ z^!NV(dzf5_!pz%6CB`c2wLD-ll>pT=a+}}WES?(#u$z$EvAb zud?Z-`7$G-zw&4+6q8$>_tv}5)YIQ^K0w6XG43WaWNTg%;6L4oB-G55*t|8FAfDX)>`aW2m8 zkrY$Y_doD?6y2gI#2q25w3ieu?f6^@k+YfxCCb#+dERs9#^_++25=bN|kw%zDd@(y|($TG)d~h{a@4wmLk%k)fSDQn@{jn%L33R+om!4{8v;Sl4 zGf5=J|BXh$q2EO8k}gSKvJgscvW;kM#@t2NN<+~Y&EjilkI&U$02W^wPHr6e>2!0S z>U&uJ32D8rF&fn&qpNwtOJjK8l^=DiCQiS&5=o;X8<3lk>xPKzW8gFC7_Hx6P-@1H zovJ0`hkS^aCX|~Twbo@N9EHM$Fm$&M*l9NjIUZSM^Brd}=!E6mX5aVFn<7p>;&wIG z7BKQDrA}N~!L8!Uun-gp);FZNG;<8shLF`aCZWkep%6GVjV=n8J`xPIl^H>GO0z@4 zugd7ybG>Zq9o+ia*n}H;WyX$66jO!JT%a-FrWbZ0T6Bv*wdSivvkXC1IJDK)6ZjD=#0HR(8`_9!8ifYD{_(M|BgA$2F}%h}x_b3#47T3uiYLMPUP znasHWsO-ZR8+AQUgky@RwCW?3Z-Z)Fr*`(uW)O^G0YPDr_N-CoD~1gi8dM znGglW4*oXhS1}D2dL@c5yXLh;;&BKs`c>IbYdok0iH!?X^K0q~ed)e^ zPJEh7(iRsoS51a}75ZA9>`86+eACVV{!XX(QOW?A7UL4bVQt42>_GyOYx!;r3yezb zz!KO}kNEL@7Lb)<`-!9?LOe_IxnIvkBxtA?bX8r42;4ljTs!E3o9w<_KRmUnZ|>sr z6(i1L%nkJnEuxp>8z&qMe#eja0=9b3Mv^vF8dF@bzxD(QQv5fSSp zhx#_B6}UE8cXX`^og^>=?Omhvy&ktf6%U(wne`&E52eU8eJyyK9-^@fETMyAf90#B6&Yfuwx+ZiIJ9gWg##LpaFOdQcGuDrPp zs5{~27_dF(gN}Rt5={7Kd}9PTWd_fsp}-NW&F z1fbQI2|c?RE8d@xOjQG>s{M)-+AsWk;ju_irVwm(B1-NH`|tV3o(7b~63Gr9Y!J?v zX2tsCyZHsVGhps8Jj<84bGK@2Kp8D(r=_kgj%YS(c9 z4*f%81zp{iy>qa=9n_Oj#3K2qlc1)nC8d*c>Bk>W;iT}5XsO4B$_ zs^g&L8aPBbC}|XgbuHE&y>1^d0mByH$eEyLn?ZU#=Wl^7F`mMxfCd8(yp}~|u(75w zgbn7gKJ?n+hbRG#1mq{aU<*3%l6n9k9E&SSea80M!&0o&Rf}E>z0VItZRicTPD0#w zuuVrF^8A9e)$ZTnYhPf_b8Z1w#_$T-7L`0Nqdn(Sxr^-i;F#hnBw`-IM-RyEW43T& zPp7Pk{Cd0M0)cbkNT(4xfkKyHdtT#WI($z>dq*dB*!E>g|GrC}EML_DFqdmj=tXaw zRx^(goDE?XmZkdHA(0UhsR%Z9sB`|LNIqAf%bS!`7m3`MF|#Y8d0YhyUJ2T3vQkWM zkdyb;9zj_m(9j(%N2ctq@M^8R8KAFN;*k<+Vl>l$$_WL`JB1Bnp7-ol_P;PxdFtaw~G>r(!e zb#VyB<)iKP>&aUy5V5p=!MXqmxih6VBzeB6s~7to@kclj`44LftcP*Irnhd%B8u5T z-+t~je`BJ5GXlC%Q;!9$hxhuWR16@AA%yL7A-2KnYK5DuNc2u|RM~Asjlm!IO^zJ) z^HLqF#-i<4Vt{D4W42ht5^{LF_b|I|Sbij8$%qL!kJ*Jnx(3kWX_W^=A(LPPulmSpwu)Pj*xkwxQmg73#QqdWyj`kdX30PZ{3U-=Y8-oCkGim@K&lf zkfo@07{x99?yvbDJytUA(A_V(s-f7V;}YH&Z$6T@3bX9?o1Gfyy<%pF>p*^x#gNt?n1I-}Kd@=po#6VD7GiIYJ`vnz8Ty3cea@sBgpJhZ8G!Oauj;WumK zc0tZU^m|=ym<{pl!J+`JZSWu<^An4^B}F@q9hlHV;`z&L#n++jKjz5yNLT)%!~jSFn=YvLCIUSo;PqjOQE4^J&g$3(vW&oI%=t2Ij~lr zI)R20X}o-i#y|AS(FW6mtR?e6i4V&hdB_nBU4I|7!T0l%&-Ye1KN}>++nFbsV z)6dd8Ce)Na(PS-UqGv~7hE3E+`>NauSt&F?t)`q|;b8cLOQeP9M@3(2?@R0{tDL1B z-+Q!|1PZuv7XwES;lKN)jtwBQsFS0L7$|5epa&otl4#gHvf@D!ZMijaDshu@qXXed zm9&DJNtux#I@#^aAwKUZFy$yk*EWhXGQ{7#?!R}&&N=o9*LxHSK@@A;J(zz$FCs%! zjS2YxL46$VZWm1iQi@P4{#LJ8vgpIT$*#;!`;Tg2UOoJ0iHUL@5^C45w!i%|YUEGo z6lq3bIlM%+%+%QqKya#11^auCvG|%7IVJDLcu8LPac;E>wQmnIz{nP`yJN3-(LOac zyW$`eUP`F8Bz^VeH?cN9r=wTYCx;a?s3rrJvsL&@fh{mr;u=)bhV^RBoWZ9NS|?Q! zQA&|@1i^YDkb%?6GjR(^PYYY)?84A3Dt%$+CdOgwLY-Zt8^KTc6MR1gG^&{#YIys- z6e_}vV?l(}CAPc)j^w}JrN4U9DoypnEv@Gps{nkNHe`i%kL9A??$?a|tKiTX>?hGVt>=krnq4 z=D_Zh00Cna-RVOiVEcsI#}ea#Zd=x)e8XX$qs58>Z8IlZs$w;N@~>TaHvo`EH~7gw zvGV5zI|MqnZe|W`&(pQR>g}`W+vOsOjgq5~a(XD;!cbnsp$RDO;TD7-ceV$JPt{)9 z=8>Q!GKCe;V6li->0}RP4N$Agol}TRhv4GV0{mw{Yx)U>3MUs4mg4n1J$9ku9Z~84 zeLQr#!@WoGXvnROOcT0LJiqDh(!z&Mdbg24;uoYbb(lBki^U%)KlHo)xgiEY@60V( z{qIbafq>k@7YPEDZD%&Csy(`=qzncn;$kJpPXDH`cO4+jxqaAiEq zSfn7d#e};$Ris$09Ayk}1MTw}ot<9%YQqt={^-^mS#)qkcf+KA>jCWF*qnK3Q-)>L z^>iDaBjc#@3oho~9?NE8ATwGTeKW@X^YVwD>jPiS2rdLvO%2w8A_o|V zQOf==UHw8LA*(O`XSV%xx?nm=C3hm8owsRGX$zDL=Xe}-35C=$NizXdl7qj?0uT?w z_9YKzU{dYc6D;g2y1LeZMhEoPZJ9xEW9PbYb^KNq z%9NJicPY&q?tSwqWn&34Vm~x%b+=tcf=Oo?uAK63e2T&-tUAy;{vU&@k1bp+_4cE& zg7Xzp!HKNcv|rg_wg6Ny>%KYl3LfD1jZ$BSW89TrrM@4)$f!(vpji|uPVH+i*som+ zX^2nsBU{!gzFjIF(hUi4=={>AO1)7PEG{78RA1aiaXWw!G}K4)zoQcmGYVSt!K0TJ zXP^G8EC={nRvSqN-VB23kF`&p<{hr$iK*K?0N=5%T}Sc(T<9q1%Qn#)--ZPWgQV9I zCilgXyd{N%CD0S{PQKAz*v(=cOimt2cA%1+mIfdx?kh-_x$L;NM-wo8aj$C8q1KD` zCq&dv;kOy5;#^G{qPuj5%*8Y|>sSr9qCLi)njXZqCA4P;f;lH0%M-r5j+xX2>Z6><)p|5i;}FMjK_K1F{A$<4evR9-i$agMjkGdv`+y4NjR@?#5EqO#;sL< zJM9h9{^PbwWe(OxYV$D9qq>5wL7abiGbnN`#n^*1o*b9vM{Y@lJUPYAM1ebm`AOkC ze=@jm#H&JMX{D$kUa;hY-WtJVxuP4PbYqMB?e8FWoe!y1$ptsI>UJ!;JsJn9=$uS= z$+kAk?hOKG`OLR~lvLEBcbZQn-tPG9E0%6yzFBUuJ^FgA@E6K4(!LIa-SF+{d~=Rq zMkHW5v9-IxARP#N^Uz%|N}odGO-(_nhn8!1l9f*rIWw$sBo@w4_%4|@pQer}=<9H< z3#ku^7+^ZR*jF=Qflow!&jejveZ>6?e%|$3?wB@X|Kt1(3%G^ZX%u3|V~VXH<;^dG zg5gc50bZ$|WzX58syPyP3^BE+iqpwgN{2`GY=1x`!K&X558a|;dp86uop^Q_R-_UC z`rzX+;M4mAB(GF%rt9e>0hV7Scb+Xyw=E z@pj>3V-AXVWQd6U^|Q`MZbfs04#Y7$C$5%l#Toe1Nuhn>s<+}g4J@Msznn|3!2chuj4TSPhAQG?h~9u+Gt z%yi_zPmd@R$HMCX#8$QgRN;Hu?#YI(H^(!xOT$;xLN(T=z$I@6H z;$RM?Jw`^mTm$jniKlkl-H ze#W#}$s-%zM={o^8bq+AhyK8(-bro1=ml=6_w%y28@jwQWUF_&LO^=-!^tH-iPFr4 zT*8cGe_gCjtJxmWrI>>B`M9q&&<|IIL!bkbMCuv8;V6$Ic#TFzF^ne#Z1&mdIoDew zABZ9l1{inQg;=@n7dN4bI%eMS;}s_9W=`Eyo>PH}w5+~Wt)UG5Kxhek@hxeFYx*L% z`qLy=#@RsIkOk`jehrq5azO*z!x<31!;L5|b2T}UbZ6|y2#AdYt+L@Ev6~)Wb^dOb z<_XQw@iEX>BLS&c6L%?UDeTfXmX~OP+t`9} zHNJ*mzWsE6$`68? z#PPgkW|wFOO!I^0X+)sgiJIG?#u8upf$MG&7ndj3uy~jeKspUE4F1`XQ=OYK*&}^GdC+{}sqvb|wTJi# z?vnX3`)nfQF>*jIzD*jo+;#%5Z@kfYFp9!p-an|5L4NC{(B3Zz~V{Lp{*(`(5U=yUp2=1 zI#y3hZrs2MhkqRqE>C@83utF=((ZZyg?%%E3xCQHb9g`isFyI){-r=7l3MO)J2v6l z-QbemvdZp$F_17Ic5xPHXil%oY?M<8dexqPi;|{~&bhewH3M*>>%LUCYA!#N87;7R z0JS!^${tFttOMT+HugVie0fpqp9ZV^BTzICpOJ;_O;_-ee;pz&;WSiL>nnKW%98&b z>NLgP0@kKl%xs0GAykbRd{=ZUn?R zmE;8#_@9++JuRwi_s`F`{sw$O9ErQ;t!4@ukHT$8vd*GLjKm9UE{&2C&7P~+b|#H} zNjUv=XeEchpg8jO@gk-|%W-bi+AMqG+`Os8Qni2X_`nFuq0HtMn(5l4C9bw`B#X&{ z33LJOLC85t&0AM1MjhT{a0p^vUWMNcKg@i0L=nq=r78WWzmEWH_n5*TCH&IZ+#4#} z_`v`rVw2XVyatp}weyjxJhf8E?1VOZ1ivs8LT)~pYWZ7O7w^7^J|eX|xWJtSzs&q+ z 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 literal 0 HcmV?d00001 diff --git a/scripts/deploy.sh b/scripts/deploy.sh new file mode 100755 index 0000000..b79836b --- /dev/null +++ b/scripts/deploy.sh @@ -0,0 +1,143 @@ +#!/usr/bin/env bash +set -euo pipefail + +# ── Configuration ────────────────────────────────────────────── +SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" +PROJECT_DIR="$(dirname "$SCRIPT_DIR")" +WRANGLER="$PROJECT_DIR/server/node_modules/.bin/wrangler" +R2_BUCKET="${R2_BUCKET:-isle}" + +# ── Parse arguments ──────────────────────────────────────────── +ENV="" +SKIP_BUILD=false +INCLUDE_ASSETS=false + +for arg in "$@"; do + case "$arg" in + --skip-build) SKIP_BUILD=true ;; + --include-assets) INCLUDE_ASSETS=true ;; + dev|production) ENV="$arg" ;; + *) echo "Unknown argument: $arg"; echo "Usage: $0 [dev|production] [--skip-build] [--include-assets]"; exit 1 ;; + esac +done + +ENV="${ENV:-dev}" + +# ── Environment configuration ────────────────────────────────── +case "$ENV" in + dev) + R2_PREFIX="dev/" + DOMAIN="dev.isle.pizza" + ;; + production) + R2_PREFIX="" + DOMAIN="isle.pizza" + ;; +esac + +# ── Check prerequisites ─────────────────────────────────────── +if [ ! -f "$WRANGLER" ]; then + echo "Error: wrangler not found at $WRANGLER" + echo "Run 'npm install' in $PROJECT_DIR/server/ first." + exit 1 +fi + +# ── Compute versions ────────────────────────────────────────── +cd "$PROJECT_DIR" +FRONTEND_VERSION=$(git rev-parse --short HEAD 2>/dev/null || echo "unknown") + +WASM_VERSION="" +if [ -f "$PROJECT_DIR/isle.js" ]; then + WASM_VERSION=$(grep -oP 'wasmVersion"\]\s*=\s*"\K[^"]+' "$PROJECT_DIR/isle.js" 2>/dev/null || echo "") +fi + +echo "Environment: $ENV" +echo "R2 prefix: ${R2_PREFIX:-(root)}" +echo "Domain: $DOMAIN" +echo "Frontend version: $FRONTEND_VERSION" +echo "WASM version: ${WASM_VERSION:-not found}" +echo "" + +# ── Production safety gate ───────────────────────────────────── +if [ "$ENV" = "production" ]; then + echo "WARNING: You are about to deploy to PRODUCTION ($DOMAIN)" + read -r -p "Continue? [y/N] " confirm + if [[ ! "$confirm" =~ ^[Yy]$ ]]; then + echo "Aborted." + exit 0 + fi + echo "" +fi + +# ── Build ────────────────────────────────────────────────────── +if [ "$SKIP_BUILD" = false ]; then + echo "Building frontend..." + cd "$PROJECT_DIR" + RELAY_URL="wss://relay.isle.pizza" API_URL="https://api.isle.pizza" BUILD_VERSION="$FRONTEND_VERSION" npm run build + echo "" +fi + +# ── Verify dist ──────────────────────────────────────────────── +if [ ! -d "$PROJECT_DIR/dist" ] || [ ! -f "$PROJECT_DIR/dist/index.html" ]; then + echo "Error: dist/ directory not found or empty. Run without --skip-build first." + exit 1 +fi + +# ── Content-type mapping ────────────────────────────────────── +get_content_type() { + case "${1##*.}" in + html) echo "text/html; charset=utf-8" ;; + js) echo "application/javascript; charset=utf-8" ;; + css) echo "text/css; charset=utf-8" ;; + json) echo "application/json; charset=utf-8" ;; + wasm) echo "application/wasm" ;; + webp) echo "image/webp" ;; + png) echo "image/png" ;; + svg) echo "image/svg+xml" ;; + gif) echo "image/gif" ;; + mp3) echo "audio/mpeg" ;; + pdf) echo "application/pdf" ;; + bin) echo "application/octet-stream" ;; + map) echo "application/json" ;; + *) echo "application/octet-stream" ;; + esac +} + +# ── Upload dist/ to R2 ──────────────────────────────────────── +echo "Uploading to R2 (bucket: $R2_BUCKET, prefix: ${R2_PREFIX:-(root)})..." + +cd "$PROJECT_DIR/dist" +find . -type f | sort | while read -r file; do + file="${file#./}" + + # Skip asset directories unless --include-assets + if [ "$INCLUDE_ASSETS" = false ]; then + case "$file" in + images/*|audio/*|pdf/*|workbox/*) continue ;; + esac + fi + + key="${R2_PREFIX}${file}" + ct=$(get_content_type "$file") + echo " $key ($ct)" + "$WRANGLER" r2 object put "$R2_BUCKET/$key" --file "$PROJECT_DIR/dist/$file" --content-type "$ct" --remote 2>/dev/null +done + +echo "" + +# ── Upload source map to symbols/ ───────────────────────────── +if [ -n "$WASM_VERSION" ] && [ -f "$PROJECT_DIR/isle.wasm.map" ]; then + SYMBOLS_KEY="symbols/${WASM_VERSION}/isle.wasm.map" + echo "Uploading source map: $SYMBOLS_KEY" + "$WRANGLER" r2 object put "$R2_BUCKET/$SYMBOLS_KEY" --file "$PROJECT_DIR/isle.wasm.map" --content-type "application/json" --remote 2>/dev/null +else + echo "Warning: Skipping source map upload (wasm version: '${WASM_VERSION:-}', map file exists: $([ -f "$PROJECT_DIR/isle.wasm.map" ] && echo yes || echo no))" +fi + +echo "" +echo "Deploy complete!" +echo " Environment: $ENV ($DOMAIN)" +echo " Frontend version: $FRONTEND_VERSION" +echo " WASM version: ${WASM_VERSION:-unknown}" +echo "" +echo "Remember to purge the Cloudflare cache for $DOMAIN." diff --git a/server/Dockerfile b/server/Dockerfile new file mode 100644 index 0000000..26568dd --- /dev/null +++ b/server/Dockerfile @@ -0,0 +1,20 @@ +FROM node:22-slim + +RUN apt-get update && apt-get install -y ca-certificates && rm -rf /var/lib/apt/lists/* + +WORKDIR /app + +COPY server/package.json server/package-lock.json ./ +RUN npm install + +COPY server/src/ ./src/ +COPY server/migrations/ ./migrations/ +COPY server/wrangler.toml server/tsconfig.json ./ +COPY server/.dev.vars* ./ + +EXPOSE 8788 + +# Apply D1 migrations then start wrangler dev. +# wrangler runs as PID 1 via exec so it receives SIGINT (Ctrl+C). +CMD node_modules/.bin/wrangler d1 migrations apply isle-pizza --local && \ + exec node_modules/.bin/wrangler dev --ip 0.0.0.0 --port 8788 diff --git a/server/migrations/0001_initial.sql b/server/migrations/0001_initial.sql new file mode 100644 index 0000000..3b3ec7a --- /dev/null +++ b/server/migrations/0001_initial.sql @@ -0,0 +1,60 @@ +-- better-auth core tables (generated via getSchema with anonymous plugin) +CREATE TABLE IF NOT EXISTS "user" ( + id TEXT PRIMARY KEY NOT NULL, + "name" TEXT NOT NULL, + "email" TEXT NOT NULL UNIQUE, + "emailVerified" INTEGER NOT NULL, + "image" TEXT, + "createdAt" TEXT NOT NULL, + "updatedAt" TEXT NOT NULL, + "isAnonymous" INTEGER +); + +CREATE TABLE IF NOT EXISTS "session" ( + id TEXT PRIMARY KEY NOT NULL, + "expiresAt" TEXT NOT NULL, + "token" TEXT NOT NULL UNIQUE, + "createdAt" TEXT NOT NULL, + "updatedAt" TEXT NOT NULL, + "ipAddress" TEXT, + "userAgent" TEXT, + "userId" TEXT NOT NULL REFERENCES "user"(id) +); + +CREATE TABLE IF NOT EXISTS "account" ( + id TEXT PRIMARY KEY NOT NULL, + "accountId" TEXT NOT NULL, + "providerId" TEXT NOT NULL, + "userId" TEXT NOT NULL REFERENCES "user"(id), + "accessToken" TEXT, + "refreshToken" TEXT, + "idToken" TEXT, + "accessTokenExpiresAt" TEXT, + "refreshTokenExpiresAt" TEXT, + "scope" TEXT, + "password" TEXT, + "createdAt" TEXT NOT NULL, + "updatedAt" TEXT NOT NULL +); + +CREATE TABLE IF NOT EXISTS "verification" ( + id TEXT PRIMARY KEY NOT NULL, + "identifier" TEXT NOT NULL, + "value" TEXT NOT NULL, + "expiresAt" TEXT NOT NULL, + "createdAt" TEXT NOT NULL, + "updatedAt" TEXT NOT NULL +); + +-- Memory completions: every animation completion event is recorded +CREATE TABLE IF NOT EXISTS memory_completions ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + user_id TEXT NOT NULL, + object_id INTEGER NOT NULL, + event_id TEXT NOT NULL, + completed_at INTEGER NOT NULL, + char_index INTEGER NOT NULL, + display_name TEXT NOT NULL, + participants TEXT NOT NULL DEFAULT '[]', + UNIQUE(user_id, event_id) +); diff --git a/server/migrations/0002_drop_char_columns.sql b/server/migrations/0002_drop_char_columns.sql new file mode 100644 index 0000000..862439f --- /dev/null +++ b/server/migrations/0002_drop_char_columns.sql @@ -0,0 +1,20 @@ +-- Drop redundant char_index/display_name columns (always equal to participants[0]) +-- and enforce non-empty participants via CHECK constraint. +CREATE TABLE IF NOT EXISTS memory_completions_new ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + user_id TEXT NOT NULL, + object_id INTEGER NOT NULL, + event_id TEXT NOT NULL, + completed_at INTEGER NOT NULL, + participants TEXT NOT NULL CHECK(json_array_length(participants) > 0), + UNIQUE(user_id, event_id) +); + +INSERT OR IGNORE INTO memory_completions_new (id, user_id, object_id, event_id, completed_at, participants) + SELECT id, user_id, object_id, event_id, completed_at, participants + FROM memory_completions + WHERE json_array_length(participants) > 0; + +DROP TABLE IF EXISTS memory_completions; + +ALTER TABLE memory_completions_new RENAME TO memory_completions; diff --git a/server/migrations/0003_object_id_to_anim_index.sql b/server/migrations/0003_object_id_to_anim_index.sql new file mode 100644 index 0000000..97bcc8a --- /dev/null +++ b/server/migrations/0003_object_id_to_anim_index.sql @@ -0,0 +1,6 @@ +-- Rename object_id to anim_index and convert values. +-- ACT1 animations: anim_index = object_id - 500 (world slot 0). +-- All existing records are ACT1, so the conversion is straightforward. +ALTER TABLE memory_completions RENAME COLUMN object_id TO anim_index; + +UPDATE memory_completions SET anim_index = anim_index - 500; diff --git a/server/migrations/0004_add_language.sql b/server/migrations/0004_add_language.sql new file mode 100644 index 0000000..43a80a7 --- /dev/null +++ b/server/migrations/0004_add_language.sql @@ -0,0 +1,2 @@ +-- Add language column to track which language version was used when the memory was recorded. +ALTER TABLE memory_completions ADD COLUMN language TEXT NOT NULL DEFAULT 'en'; diff --git a/server/migrations/0005_crash_reports.sql b/server/migrations/0005_crash_reports.sql new file mode 100644 index 0000000..5e4ca24 --- /dev/null +++ b/server/migrations/0005_crash_reports.sql @@ -0,0 +1,9 @@ +CREATE TABLE IF NOT EXISTS crash_reports ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + stack TEXT NOT NULL, + build_version TEXT, + wasm_version TEXT, + user_agent TEXT, + user_id TEXT, + created_at TEXT NOT NULL DEFAULT (datetime('now')) +); diff --git a/server/migrations/0006_cloud_storage.sql b/server/migrations/0006_cloud_storage.sql new file mode 100644 index 0000000..f52d6fa --- /dev/null +++ b/server/migrations/0006_cloud_storage.sql @@ -0,0 +1,15 @@ +-- Cloud save files (BLOBs) +CREATE TABLE IF NOT EXISTS user_saves ( + user_id TEXT NOT NULL, + filename TEXT NOT NULL, + data BLOB NOT NULL, + updated_at TEXT NOT NULL DEFAULT (datetime('now')), + PRIMARY KEY (user_id, filename) +); + +-- Cloud config (isle.ini text) +CREATE TABLE IF NOT EXISTS user_config ( + user_id TEXT PRIMARY KEY, + ini_text TEXT NOT NULL, + updated_at TEXT NOT NULL DEFAULT (datetime('now')) +); diff --git a/server/package-lock.json b/server/package-lock.json new file mode 100644 index 0000000..4f15980 --- /dev/null +++ b/server/package-lock.json @@ -0,0 +1,1885 @@ +{ + "name": "isle-pizza-api", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "isle-pizza-api", + "dependencies": { + "better-auth": "^1.5.0", + "hono": "^4.0.0" + }, + "devDependencies": { + "@cloudflare/workers-types": "^4.0.0", + "wrangler": "^4.0.0" + } + }, + "node_modules/@better-auth/core": { + "version": "1.5.6", + "resolved": "https://registry.npmjs.org/@better-auth/core/-/core-1.5.6.tgz", + "integrity": "sha512-Ez9DZdIMFyxHremmoLz1emFPGNQomDC1jqqBPnZ6Ci+6TiGN3R9w/Y03cJn6I8r1ycKgOzeVMZtJ/erOZ27Gsw==", + "license": "MIT", + "dependencies": { + "@opentelemetry/semantic-conventions": "^1.39.0", + "@standard-schema/spec": "^1.1.0", + "zod": "^4.3.6" + }, + "peerDependencies": { + "@better-auth/utils": "0.3.1", + "@better-fetch/fetch": "1.1.21", + "@cloudflare/workers-types": ">=4", + "@opentelemetry/api": "^1.9.0", + "better-call": "1.3.2", + "jose": "^6.1.0", + "kysely": "^0.28.5", + "nanostores": "^1.0.1" + }, + "peerDependenciesMeta": { + "@cloudflare/workers-types": { + "optional": true + } + } + }, + "node_modules/@better-auth/drizzle-adapter": { + "version": "1.5.6", + "resolved": "https://registry.npmjs.org/@better-auth/drizzle-adapter/-/drizzle-adapter-1.5.6.tgz", + "integrity": "sha512-VfFFmaoFw3ug12SiSuIwzrMoHyIVmkMGWm9gZ4sXdYYVX4HboCL4m3fjzOhppcmK5OGatRuU+N1UX6wxCITcXw==", + "license": "MIT", + "peerDependencies": { + "@better-auth/core": "1.5.6", + "@better-auth/utils": "^0.3.0", + "drizzle-orm": ">=0.41.0" + }, + "peerDependenciesMeta": { + "drizzle-orm": { + "optional": true + } + } + }, + "node_modules/@better-auth/kysely-adapter": { + "version": "1.5.6", + "resolved": "https://registry.npmjs.org/@better-auth/kysely-adapter/-/kysely-adapter-1.5.6.tgz", + "integrity": "sha512-Fnf+h8WVKtw6lEOmVmiVVzDf3shJtM60AYf9XTnbdCeUd6MxN/KnaJZpkgtYnRs7a+nwtkVB+fg4lGETebGFXQ==", + "license": "MIT", + "peerDependencies": { + "@better-auth/core": "1.5.6", + "@better-auth/utils": "^0.3.0", + "kysely": "^0.27.0 || ^0.28.0" + }, + "peerDependenciesMeta": { + "kysely": { + "optional": true + } + } + }, + "node_modules/@better-auth/memory-adapter": { + "version": "1.5.6", + "resolved": "https://registry.npmjs.org/@better-auth/memory-adapter/-/memory-adapter-1.5.6.tgz", + "integrity": "sha512-rS7ZsrIl5uvloUgNN0u9LOZJMMXnsZXVdUZ3MrTBKWM2KpoJjzPr9yN3Szyma5+0V7SltnzSGHPkYj2bEzzmlA==", + "license": "MIT", + "peerDependencies": { + "@better-auth/core": "1.5.6", + "@better-auth/utils": "^0.3.0" + } + }, + "node_modules/@better-auth/mongo-adapter": { + "version": "1.5.6", + "resolved": "https://registry.npmjs.org/@better-auth/mongo-adapter/-/mongo-adapter-1.5.6.tgz", + "integrity": "sha512-6+M3MS2mor8fTUV3EI1FBLP0cs6QfbN+Ovx9+XxR/GdfKIBoNFzmPEPRbdGt+ft6PvrITsUm+T70+kkHgVSP6w==", + "license": "MIT", + "peerDependencies": { + "@better-auth/core": "1.5.6", + "@better-auth/utils": "^0.3.0", + "mongodb": "^6.0.0 || ^7.0.0" + }, + "peerDependenciesMeta": { + "mongodb": { + "optional": true + } + } + }, + "node_modules/@better-auth/prisma-adapter": { + "version": "1.5.6", + "resolved": "https://registry.npmjs.org/@better-auth/prisma-adapter/-/prisma-adapter-1.5.6.tgz", + "integrity": "sha512-UxY9vQJs1Tt+O+T2YQnseDMlWmUSQvFZSBb5YiFRg7zcm+TEzujh4iX2/csA0YiZptLheovIuVWTP9nriewEBA==", + "license": "MIT", + "peerDependencies": { + "@better-auth/core": "1.5.6", + "@better-auth/utils": "^0.3.0", + "@prisma/client": "^5.0.0 || ^6.0.0 || ^7.0.0", + "prisma": "^5.0.0 || ^6.0.0 || ^7.0.0" + }, + "peerDependenciesMeta": { + "@prisma/client": { + "optional": true + }, + "prisma": { + "optional": true + } + } + }, + "node_modules/@better-auth/telemetry": { + "version": "1.5.6", + "resolved": "https://registry.npmjs.org/@better-auth/telemetry/-/telemetry-1.5.6.tgz", + "integrity": "sha512-yXC7NSxnIFlxDkGdpD7KA+J9nqIQAPCJKe77GoaC5bWoe/DALo1MYorZfTgOafS7wrslNtsPT4feV/LJi1ubqQ==", + "license": "MIT", + "dependencies": { + "@better-auth/utils": "0.3.1", + "@better-fetch/fetch": "1.1.21" + }, + "peerDependencies": { + "@better-auth/core": "1.5.6" + } + }, + "node_modules/@better-auth/utils": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@better-auth/utils/-/utils-0.3.1.tgz", + "integrity": "sha512-+CGp4UmZSUrHHnpHhLPYu6cV+wSUSvVbZbNykxhUDocpVNTo9uFFxw/NqJlh1iC4wQ9HKKWGCKuZ5wUgS0v6Kg==", + "license": "MIT" + }, + "node_modules/@better-fetch/fetch": { + "version": "1.1.21", + "resolved": "https://registry.npmjs.org/@better-fetch/fetch/-/fetch-1.1.21.tgz", + "integrity": "sha512-/ImESw0sskqlVR94jB+5+Pxjf+xBwDZF/N5+y2/q4EqD7IARUTSpPfIo8uf39SYpCxyOCtbyYpUrZ3F/k0zT4A==" + }, + "node_modules/@cloudflare/kv-asset-handler": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@cloudflare/kv-asset-handler/-/kv-asset-handler-0.4.2.tgz", + "integrity": "sha512-SIOD2DxrRRwQ+jgzlXCqoEFiKOFqaPjhnNTGKXSRLvp1HiOvapLaFG2kEr9dYQTYe8rKrd9uvDUzmAITeNyaHQ==", + "dev": true, + "license": "MIT OR Apache-2.0", + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@cloudflare/unenv-preset": { + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/@cloudflare/unenv-preset/-/unenv-preset-2.16.0.tgz", + "integrity": "sha512-8ovsRpwzPoEqPUzoErAYVv8l3FMZNeBVQfJTvtzP4AgLSRGZISRfuChFxHWUQd3n6cnrwkuTGxT+2cGo8EsyYg==", + "dev": true, + "license": "MIT OR Apache-2.0", + "peerDependencies": { + "unenv": "2.0.0-rc.24", + "workerd": "1.20260301.1 || ~1.20260302.1 || ~1.20260303.1 || ~1.20260304.1 || >1.20260305.0 <2.0.0-0" + }, + "peerDependenciesMeta": { + "workerd": { + "optional": true + } + } + }, + "node_modules/@cloudflare/workerd-darwin-64": { + "version": "1.20260317.1", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-64/-/workerd-darwin-64-1.20260317.1.tgz", + "integrity": "sha512-8hjh3sPMwY8M/zedq3/sXoA2Q4BedlGufn3KOOleIG+5a4ReQKLlUah140D7J6zlKmYZAFMJ4tWC7hCuI/s79g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=16" + } + }, + "node_modules/@cloudflare/workerd-darwin-arm64": { + "version": "1.20260317.1", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-arm64/-/workerd-darwin-arm64-1.20260317.1.tgz", + "integrity": "sha512-M/MnNyvO5HMgoIdr3QHjdCj2T1ki9gt0vIUnxYxBu9ISXS/jgtMl6chUVPJ7zHYBn9MyYr8ByeN6frjYxj0MGg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=16" + } + }, + "node_modules/@cloudflare/workerd-linux-64": { + "version": "1.20260317.1", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-64/-/workerd-linux-64-1.20260317.1.tgz", + "integrity": "sha512-1ltuEjkRcS3fsVF7CxsKlWiRmzq2ZqMfqDN0qUOgbUwkpXsLVJsXmoblaLf5OP00ELlcgF0QsN0p2xPEua4Uug==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16" + } + }, + "node_modules/@cloudflare/workerd-linux-arm64": { + "version": "1.20260317.1", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-arm64/-/workerd-linux-arm64-1.20260317.1.tgz", + "integrity": "sha512-3QrNnPF1xlaNwkHpasvRvAMidOvQs2NhXQmALJrEfpIJ/IDL2la8g499yXp3eqhG3hVMCB07XVY149GTs42Xtw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16" + } + }, + "node_modules/@cloudflare/workerd-windows-64": { + "version": "1.20260317.1", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-windows-64/-/workerd-windows-64-1.20260317.1.tgz", + "integrity": "sha512-MfZTz+7LfuIpMGTa3RLXHX8Z/pnycZLItn94WRdHr8LPVet+C5/1Nzei399w/jr3+kzT4pDKk26JF/tlI5elpQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=16" + } + }, + "node_modules/@cloudflare/workers-types": { + "version": "4.20260317.1", + "resolved": "https://registry.npmjs.org/@cloudflare/workers-types/-/workers-types-4.20260317.1.tgz", + "integrity": "sha512-+G4eVwyCpm8Au1ex8vQBCuA9wnwqetz4tPNRoB/53qvktERWBRMQnrtvC1k584yRE3emMThtuY0gWshvSJ++PQ==", + "devOptional": true, + "license": "MIT OR Apache-2.0" + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.9.1.tgz", + "integrity": "sha512-VYi5+ZVLhpgK4hQ0TAjiQiZ6ol0oe4mBx7mVv7IflsiEp0OWoVsp/+f9Vc1hOhE0TtkORVrI1GvzyreqpgWtkA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.3.tgz", + "integrity": "sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.3.tgz", + "integrity": "sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.3.tgz", + "integrity": "sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.3.tgz", + "integrity": "sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.3.tgz", + "integrity": "sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.3.tgz", + "integrity": "sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.3.tgz", + "integrity": "sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.3.tgz", + "integrity": "sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.3.tgz", + "integrity": "sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.3.tgz", + "integrity": "sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.3.tgz", + "integrity": "sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.3.tgz", + "integrity": "sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.3.tgz", + "integrity": "sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.3.tgz", + "integrity": "sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.3.tgz", + "integrity": "sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.3.tgz", + "integrity": "sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.3.tgz", + "integrity": "sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.3.tgz", + "integrity": "sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.3.tgz", + "integrity": "sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.3.tgz", + "integrity": "sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.3.tgz", + "integrity": "sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.3.tgz", + "integrity": "sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.3.tgz", + "integrity": "sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.3.tgz", + "integrity": "sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.3.tgz", + "integrity": "sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.3.tgz", + "integrity": "sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@img/colour": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.1.0.tgz", + "integrity": "sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.5.tgz", + "integrity": "sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.2.4" + } + }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.5.tgz", + "integrity": "sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.2.4" + } + }, + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.4.tgz", + "integrity": "sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.4.tgz", + "integrity": "sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.4.tgz", + "integrity": "sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.4.tgz", + "integrity": "sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-ppc64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.4.tgz", + "integrity": "sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-riscv64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.2.4.tgz", + "integrity": "sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.4.tgz", + "integrity": "sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.4.tgz", + "integrity": "sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.4.tgz", + "integrity": "sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.4.tgz", + "integrity": "sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-linux-arm": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.5.tgz", + "integrity": "sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.5.tgz", + "integrity": "sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-ppc64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.5.tgz", + "integrity": "sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-ppc64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-riscv64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.34.5.tgz", + "integrity": "sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-riscv64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-s390x": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.5.tgz", + "integrity": "sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.5.tgz", + "integrity": "sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.2.4" + } + }, + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.5.tgz", + "integrity": "sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.2.4" + } + }, + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.5.tgz", + "integrity": "sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.2.4" + } + }, + "node_modules/@img/sharp-wasm32": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.5.tgz", + "integrity": "sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.7.0" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.5.tgz", + "integrity": "sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-ia32": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.5.tgz", + "integrity": "sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.5.tgz", + "integrity": "sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "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.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@noble/ciphers": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-2.1.1.tgz", + "integrity": "sha512-bysYuiVfhxNJuldNXlFEitTVdNnYUc+XNJZd7Qm2a5j1vZHgY+fazadNFWFaMK/2vye0JVlxV3gHmC0WDfAOQw==", + "license": "MIT", + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/hashes": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-2.0.1.tgz", + "integrity": "sha512-XlOlEbQcE9fmuXxrVTXCTlG2nlRXa9Rj3rr5Ue/+tX+nmkgbX720YHh0VR3hBF9xDvwnb8D2shVGOwNx+ulArw==", + "license": "MIT", + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@opentelemetry/api": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.1.tgz", + "integrity": "sha512-gLyJlPHPZYdAk1JENA9LeHejZe1Ti77/pTeFm/nMXmQH/HFZlcS/O2XJB+L8fkbrNSqhdtlvjBVjxwUYanNH5Q==", + "license": "Apache-2.0", + "peer": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@opentelemetry/semantic-conventions": { + "version": "1.40.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.40.0.tgz", + "integrity": "sha512-cifvXDhcqMwwTlTK04GBNeIe7yyo28Mfby85QXFe1Yk8nmi36Ab/5UQwptOx84SsoGNRg+EVSjwzfSZMy6pmlw==", + "license": "Apache-2.0", + "engines": { + "node": ">=14" + } + }, + "node_modules/@poppinss/colors": { + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/@poppinss/colors/-/colors-4.1.6.tgz", + "integrity": "sha512-H9xkIdFswbS8n1d6vmRd8+c10t2Qe+rZITbbDHHkQixH5+2x1FDGmi/0K+WgWiqQFKPSlIYB7jlH6Kpfn6Fleg==", + "dev": true, + "license": "MIT", + "dependencies": { + "kleur": "^4.1.5" + } + }, + "node_modules/@poppinss/dumper": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/@poppinss/dumper/-/dumper-0.6.5.tgz", + "integrity": "sha512-NBdYIb90J7LfOI32dOewKI1r7wnkiH6m920puQ3qHUeZkxNkQiFnXVWoE6YtFSv6QOiPPf7ys6i+HWWecDz7sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@poppinss/colors": "^4.1.5", + "@sindresorhus/is": "^7.0.2", + "supports-color": "^10.0.0" + } + }, + "node_modules/@poppinss/exception": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@poppinss/exception/-/exception-1.2.3.tgz", + "integrity": "sha512-dCED+QRChTVatE9ibtoaxc+WkdzOSjYTKi/+uacHWIsfodVfpsueo3+DKpgU5Px8qXjgmXkSvhXvSCz3fnP9lw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@sindresorhus/is": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-7.2.0.tgz", + "integrity": "sha512-P1Cz1dWaFfR4IR+U13mqqiGsLFf1KbayybWwdd2vfctdV6hDpUkgCY0nKOLLTMSoRd/jJNjtbqzf13K8DCCXQw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/@speed-highlight/core": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@speed-highlight/core/-/core-1.2.15.tgz", + "integrity": "sha512-BMq1K3DsElxDWawkX6eLg9+CKJrTVGCBAWVuHXVUV2u0s2711qiChLSId6ikYPfxhdYocLNt3wWwSvDiTvFabw==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/@standard-schema/spec": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", + "license": "MIT" + }, + "node_modules/better-auth": { + "version": "1.5.6", + "resolved": "https://registry.npmjs.org/better-auth/-/better-auth-1.5.6.tgz", + "integrity": "sha512-QSpJTqaT1XVfWRQe/fm3PgeuwOIlz1nWX/Dx7nsHStJ382bLzmDbQk2u7IT0IJ6wS5SRxfqEE1Ev9TXontgyAQ==", + "license": "MIT", + "dependencies": { + "@better-auth/core": "1.5.6", + "@better-auth/drizzle-adapter": "1.5.6", + "@better-auth/kysely-adapter": "1.5.6", + "@better-auth/memory-adapter": "1.5.6", + "@better-auth/mongo-adapter": "1.5.6", + "@better-auth/prisma-adapter": "1.5.6", + "@better-auth/telemetry": "1.5.6", + "@better-auth/utils": "0.3.1", + "@better-fetch/fetch": "1.1.21", + "@noble/ciphers": "^2.1.1", + "@noble/hashes": "^2.0.1", + "better-call": "1.3.2", + "defu": "^6.1.4", + "jose": "^6.1.3", + "kysely": "^0.28.12", + "nanostores": "^1.1.1", + "zod": "^4.3.6" + }, + "peerDependencies": { + "@lynx-js/react": "*", + "@prisma/client": "^5.0.0 || ^6.0.0 || ^7.0.0", + "@sveltejs/kit": "^2.0.0", + "@tanstack/react-start": "^1.0.0", + "@tanstack/solid-start": "^1.0.0", + "better-sqlite3": "^12.0.0", + "drizzle-kit": ">=0.31.4", + "drizzle-orm": ">=0.41.0", + "mongodb": "^6.0.0 || ^7.0.0", + "mysql2": "^3.0.0", + "next": "^14.0.0 || ^15.0.0 || ^16.0.0", + "pg": "^8.0.0", + "prisma": "^5.0.0 || ^6.0.0 || ^7.0.0", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0", + "solid-js": "^1.0.0", + "svelte": "^4.0.0 || ^5.0.0", + "vitest": "^2.0.0 || ^3.0.0 || ^4.0.0", + "vue": "^3.0.0" + }, + "peerDependenciesMeta": { + "@lynx-js/react": { + "optional": true + }, + "@prisma/client": { + "optional": true + }, + "@sveltejs/kit": { + "optional": true + }, + "@tanstack/react-start": { + "optional": true + }, + "@tanstack/solid-start": { + "optional": true + }, + "better-sqlite3": { + "optional": true + }, + "drizzle-kit": { + "optional": true + }, + "drizzle-orm": { + "optional": true + }, + "mongodb": { + "optional": true + }, + "mysql2": { + "optional": true + }, + "next": { + "optional": true + }, + "pg": { + "optional": true + }, + "prisma": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + }, + "solid-js": { + "optional": true + }, + "svelte": { + "optional": true + }, + "vitest": { + "optional": true + }, + "vue": { + "optional": true + } + } + }, + "node_modules/better-call": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/better-call/-/better-call-1.3.2.tgz", + "integrity": "sha512-4cZIfrerDsNTn3cm+MhLbUePN0gdwkhSXEuG7r/zuQ8c/H7iU0/jSK5TD3FW7U0MgKHce/8jGpPYNO4Ve+4NBw==", + "license": "MIT", + "dependencies": { + "@better-auth/utils": "^0.3.1", + "@better-fetch/fetch": "^1.1.21", + "rou3": "^0.7.12", + "set-cookie-parser": "^3.0.1" + }, + "peerDependencies": { + "zod": "^4.0.0" + }, + "peerDependenciesMeta": { + "zod": { + "optional": true + } + } + }, + "node_modules/blake3-wasm": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/blake3-wasm/-/blake3-wasm-2.1.5.tgz", + "integrity": "sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==", + "dev": true, + "license": "MIT" + }, + "node_modules/cookie": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz", + "integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/defu": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", + "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", + "license": "MIT" + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/error-stack-parser-es": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/error-stack-parser-es/-/error-stack-parser-es-1.0.5.tgz", + "integrity": "sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/esbuild": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.3.tgz", + "integrity": "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.27.3", + "@esbuild/android-arm": "0.27.3", + "@esbuild/android-arm64": "0.27.3", + "@esbuild/android-x64": "0.27.3", + "@esbuild/darwin-arm64": "0.27.3", + "@esbuild/darwin-x64": "0.27.3", + "@esbuild/freebsd-arm64": "0.27.3", + "@esbuild/freebsd-x64": "0.27.3", + "@esbuild/linux-arm": "0.27.3", + "@esbuild/linux-arm64": "0.27.3", + "@esbuild/linux-ia32": "0.27.3", + "@esbuild/linux-loong64": "0.27.3", + "@esbuild/linux-mips64el": "0.27.3", + "@esbuild/linux-ppc64": "0.27.3", + "@esbuild/linux-riscv64": "0.27.3", + "@esbuild/linux-s390x": "0.27.3", + "@esbuild/linux-x64": "0.27.3", + "@esbuild/netbsd-arm64": "0.27.3", + "@esbuild/netbsd-x64": "0.27.3", + "@esbuild/openbsd-arm64": "0.27.3", + "@esbuild/openbsd-x64": "0.27.3", + "@esbuild/openharmony-arm64": "0.27.3", + "@esbuild/sunos-x64": "0.27.3", + "@esbuild/win32-arm64": "0.27.3", + "@esbuild/win32-ia32": "0.27.3", + "@esbuild/win32-x64": "0.27.3" + } + }, + "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, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/hono": { + "version": "4.12.9", + "resolved": "https://registry.npmjs.org/hono/-/hono-4.12.9.tgz", + "integrity": "sha512-wy3T8Zm2bsEvxKZM5w21VdHDDcwVS1yUFFY6i8UobSsKfFceT7TOwhbhfKsDyx7tYQlmRM5FLpIuYvNFyjctiA==", + "license": "MIT", + "engines": { + "node": ">=16.9.0" + } + }, + "node_modules/jose": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/jose/-/jose-6.2.2.tgz", + "integrity": "sha512-d7kPDd34KO/YnzaDOlikGpOurfF0ByC2sEV4cANCtdqLlTfBlw2p14O/5d/zv40gJPbIQxfES3nSx1/oYNyuZQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, + "node_modules/kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/kysely": { + "version": "0.28.14", + "resolved": "https://registry.npmjs.org/kysely/-/kysely-0.28.14.tgz", + "integrity": "sha512-SU3lgh0rPvq7upc6vvdVrCsSMUG1h3ChvHVOY7wJ2fw4C9QEB7X3d5eyYEyULUX7UQtxZJtZXGuT6U2US72UYA==", + "license": "MIT", + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/miniflare": { + "version": "4.20260317.2", + "resolved": "https://registry.npmjs.org/miniflare/-/miniflare-4.20260317.2.tgz", + "integrity": "sha512-qNL+yWAFMX6fr0pWU6Lx1vNpPobpnDSF1V8eunIckWvoIQl8y1oBjL2RJFEGY3un+l3f9gwW9dirDPP26usYJQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cspotcode/source-map-support": "0.8.1", + "sharp": "^0.34.5", + "undici": "7.24.4", + "workerd": "1.20260317.1", + "ws": "8.18.0", + "youch": "4.1.0-beta.10" + }, + "bin": { + "miniflare": "bootstrap.js" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/nanostores": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/nanostores/-/nanostores-1.2.0.tgz", + "integrity": "sha512-F0wCzbsH80G7XXo0Jd9/AVQC7ouWY6idUCTnMwW5t/Rv9W8qmO6endavDwg7TNp5GbugwSukFMVZqzPSrSMndg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "engines": { + "node": "^20.0.0 || >=22.0.0" + } + }, + "node_modules/path-to-regexp": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", + "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", + "dev": true, + "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/rou3": { + "version": "0.7.12", + "resolved": "https://registry.npmjs.org/rou3/-/rou3-0.7.12.tgz", + "integrity": "sha512-iFE4hLDuloSWcD7mjdCDhx2bKcIsYbtOTpfH5MHHLSKMOUyjqQXTeZVa289uuwEGEKFoE/BAPbhaU4B774nceg==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/set-cookie-parser": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-3.1.0.tgz", + "integrity": "sha512-kjnC1DXBHcxaOaOXBHBeRtltsDG2nUiUni+jP92M9gYdW12rsmx92UsfpH7o5tDRs7I1ZZPSQJQGv3UaRfCiuw==", + "license": "MIT" + }, + "node_modules/sharp": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.5.tgz", + "integrity": "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==", + "dev": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@img/colour": "^1.0.0", + "detect-libc": "^2.1.2", + "semver": "^7.7.3" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.34.5", + "@img/sharp-darwin-x64": "0.34.5", + "@img/sharp-libvips-darwin-arm64": "1.2.4", + "@img/sharp-libvips-darwin-x64": "1.2.4", + "@img/sharp-libvips-linux-arm": "1.2.4", + "@img/sharp-libvips-linux-arm64": "1.2.4", + "@img/sharp-libvips-linux-ppc64": "1.2.4", + "@img/sharp-libvips-linux-riscv64": "1.2.4", + "@img/sharp-libvips-linux-s390x": "1.2.4", + "@img/sharp-libvips-linux-x64": "1.2.4", + "@img/sharp-libvips-linuxmusl-arm64": "1.2.4", + "@img/sharp-libvips-linuxmusl-x64": "1.2.4", + "@img/sharp-linux-arm": "0.34.5", + "@img/sharp-linux-arm64": "0.34.5", + "@img/sharp-linux-ppc64": "0.34.5", + "@img/sharp-linux-riscv64": "0.34.5", + "@img/sharp-linux-s390x": "0.34.5", + "@img/sharp-linux-x64": "0.34.5", + "@img/sharp-linuxmusl-arm64": "0.34.5", + "@img/sharp-linuxmusl-x64": "0.34.5", + "@img/sharp-wasm32": "0.34.5", + "@img/sharp-win32-arm64": "0.34.5", + "@img/sharp-win32-ia32": "0.34.5", + "@img/sharp-win32-x64": "0.34.5" + } + }, + "node_modules/supports-color": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-10.2.2.tgz", + "integrity": "sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "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/undici": { + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.24.4.tgz", + "integrity": "sha512-BM/JzwwaRXxrLdElV2Uo6cTLEjhSb3WXboncJamZ15NgUURmvlXvxa6xkwIOILIjPNo9i8ku136ZvWV0Uly8+w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20.18.1" + } + }, + "node_modules/unenv": { + "version": "2.0.0-rc.24", + "resolved": "https://registry.npmjs.org/unenv/-/unenv-2.0.0-rc.24.tgz", + "integrity": "sha512-i7qRCmY42zmCwnYlh9H2SvLEypEFGye5iRmEMKjcGi7zk9UquigRjFtTLz0TYqr0ZGLZhaMHl/foy1bZR+Cwlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "pathe": "^2.0.3" + } + }, + "node_modules/workerd": { + "version": "1.20260317.1", + "resolved": "https://registry.npmjs.org/workerd/-/workerd-1.20260317.1.tgz", + "integrity": "sha512-ZuEq1OdrJBS+NV+L5HMYPCzVn49a2O60slQiiLpG44jqtlOo+S167fWC76kEXteXLLLydeuRrluRel7WdOUa4g==", + "dev": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "bin": { + "workerd": "bin/workerd" + }, + "engines": { + "node": ">=16" + }, + "optionalDependencies": { + "@cloudflare/workerd-darwin-64": "1.20260317.1", + "@cloudflare/workerd-darwin-arm64": "1.20260317.1", + "@cloudflare/workerd-linux-64": "1.20260317.1", + "@cloudflare/workerd-linux-arm64": "1.20260317.1", + "@cloudflare/workerd-windows-64": "1.20260317.1" + } + }, + "node_modules/wrangler": { + "version": "4.77.0", + "resolved": "https://registry.npmjs.org/wrangler/-/wrangler-4.77.0.tgz", + "integrity": "sha512-E2Gm69+K++BFd3QvoWjC290RPQj1vDOUotA++sNHmtKPb7EP6C8Qv+1D5Ii73tfZtyNgakpqHlh8lBBbVWTKAQ==", + "dev": true, + "license": "MIT OR Apache-2.0", + "dependencies": { + "@cloudflare/kv-asset-handler": "0.4.2", + "@cloudflare/unenv-preset": "2.16.0", + "blake3-wasm": "2.1.5", + "esbuild": "0.27.3", + "miniflare": "4.20260317.2", + "path-to-regexp": "6.3.0", + "unenv": "2.0.0-rc.24", + "workerd": "1.20260317.1" + }, + "bin": { + "wrangler": "bin/wrangler.js", + "wrangler2": "bin/wrangler.js" + }, + "engines": { + "node": ">=20.3.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@cloudflare/workers-types": "^4.20260317.1" + }, + "peerDependenciesMeta": { + "@cloudflare/workers-types": { + "optional": true + } + } + }, + "node_modules/ws": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "dev": true, + "license": "MIT", + "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 + } + } + }, + "node_modules/youch": { + "version": "4.1.0-beta.10", + "resolved": "https://registry.npmjs.org/youch/-/youch-4.1.0-beta.10.tgz", + "integrity": "sha512-rLfVLB4FgQneDr0dv1oddCVZmKjcJ6yX6mS4pU82Mq/Dt9a3cLZQ62pDBL4AUO+uVrCvtWz3ZFUL2HFAFJ/BXQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@poppinss/colors": "^4.1.5", + "@poppinss/dumper": "^0.6.4", + "@speed-highlight/core": "^1.2.7", + "cookie": "^1.0.2", + "youch-core": "^0.3.3" + } + }, + "node_modules/youch-core": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/youch-core/-/youch-core-0.3.3.tgz", + "integrity": "sha512-ho7XuGjLaJ2hWHoK8yFnsUGy2Y5uDpqSTq1FkHLK4/oqKtyUU1AFbOOxY4IpC9f0fTLjwYbslUz0Po5BpD1wrA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@poppinss/exception": "^1.2.2", + "error-stack-parser-es": "^1.0.5" + } + }, + "node_modules/zod": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.6.tgz", + "integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + } + } +} diff --git a/server/package.json b/server/package.json new file mode 100644 index 0000000..ae3e196 --- /dev/null +++ b/server/package.json @@ -0,0 +1,18 @@ +{ + "name": "isle-pizza-api", + "private": true, + "scripts": { + "dev": "wrangler dev --port 8788", + "deploy": "wrangler deploy", + "db:migrate:local": "wrangler d1 migrations apply isle-pizza --local", + "db:migrate:remote": "wrangler d1 migrations apply isle-pizza --remote" + }, + "dependencies": { + "better-auth": "^1.5.0", + "hono": "^4.0.0" + }, + "devDependencies": { + "@cloudflare/workers-types": "^4.0.0", + "wrangler": "^4.0.0" + } +} diff --git a/server/src/account.ts b/server/src/account.ts new file mode 100644 index 0000000..2175ebf --- /dev/null +++ b/server/src/account.ts @@ -0,0 +1,29 @@ +import { Hono } from "hono"; +import type { Env, Variables } from "./auth"; + +const account = new Hono<{ Bindings: Env; Variables: Variables }>(); + +// Delete account and all associated data +account.delete("/", async (c) => { + const session = c.get("session"); + const userId = session.user.id; + + try { + await c.env.DB.batch([ + c.env.DB.prepare("DELETE FROM user_saves WHERE user_id = ?").bind(userId), + c.env.DB.prepare("DELETE FROM user_config WHERE user_id = ?").bind(userId), + c.env.DB.prepare("DELETE FROM memory_completions WHERE user_id = ?").bind(userId), + c.env.DB.prepare("UPDATE crash_reports SET user_id = NULL WHERE user_id = ?").bind(userId), + c.env.DB.prepare('DELETE FROM "session" WHERE "userId" = ?').bind(userId), + c.env.DB.prepare('DELETE FROM "account" WHERE "userId" = ?').bind(userId), + c.env.DB.prepare('DELETE FROM "user" WHERE id = ?').bind(userId), + ]); + } catch (e) { + console.error("Account deletion failed for user", userId, e); + return c.json({ error: "Account deletion failed" }, 500); + } + + return c.json({ ok: true }); +}); + +export { account }; diff --git a/server/src/auth.ts b/server/src/auth.ts new file mode 100644 index 0000000..69edc01 --- /dev/null +++ b/server/src/auth.ts @@ -0,0 +1,51 @@ +import { betterAuth } from "better-auth"; +import { anonymous } from "better-auth/plugins"; + +export type Variables = { + session: { user: { id: string } }; +}; + +export type Env = { + DB: D1Database; + API_URL: string; + BETTER_AUTH_SECRET: string; + DISCORD_CLIENT_ID?: string; + DISCORD_CLIENT_SECRET?: string; +}; + +export function createAuth(env: Env) { + return betterAuth({ + database: env.DB, + baseURL: env.API_URL, + secret: env.BETTER_AUTH_SECRET, + plugins: [ + anonymous({ + onLinkAccount: async ({ anonymousUser, newUser }) => { + // Transfer all data from anonymous to linked account + await env.DB.batch([ + env.DB.prepare( + "UPDATE memory_completions SET user_id = ? WHERE user_id = ?" + ).bind(newUser.user.id, anonymousUser.user.id), + env.DB.prepare( + "UPDATE user_saves SET user_id = ? WHERE user_id = ?" + ).bind(newUser.user.id, anonymousUser.user.id), + env.DB.prepare( + "UPDATE user_config SET user_id = ? WHERE user_id = ?" + ).bind(newUser.user.id, anonymousUser.user.id), + ]); + }, + }), + ], + socialProviders: { + ...(env.DISCORD_CLIENT_ID && env.DISCORD_CLIENT_SECRET + ? { + discord: { + clientId: env.DISCORD_CLIENT_ID, + clientSecret: env.DISCORD_CLIENT_SECRET, + }, + } + : {}), + }, + trustedOrigins: ["http://localhost:5173", "http://localhost:3000", "https://isle.pizza", "https://dev.isle.pizza"], + }); +} diff --git a/server/src/cloud.ts b/server/src/cloud.ts new file mode 100644 index 0000000..4fba2a6 --- /dev/null +++ b/server/src/cloud.ts @@ -0,0 +1,207 @@ +import { Hono } from "hono"; +import type { Env, Variables } from "./auth"; + +interface SaveRow { + filename: string; + data: ArrayBuffer; +} + +interface ConfigRow { + ini_text: string; +} + +const VALID_SAVE_FILES = new Set([ + "G0.GS", "G1.GS", "G2.GS", "G3.GS", "G4.GS", + "G5.GS", "G6.GS", "G7.GS", "G8.GS", + "Players.gsi", "History.gsi", +]); + +const MAX_SAVE_SIZE = 100 * 1024; // 100 KB per file + +function base64ToArrayBuffer(base64: string): ArrayBuffer { + const binary = atob(base64); + const bytes = new Uint8Array(binary.length); + for (let i = 0; i < binary.length; i++) { + bytes[i] = binary.charCodeAt(i); + } + return bytes.buffer; +} + +function arrayBufferToBase64(buffer: ArrayBuffer): string { + const bytes = new Uint8Array(buffer); + let binary = ""; + for (let i = 0; i < bytes.length; i++) { + binary += String.fromCharCode(bytes[i]); + } + return btoa(binary); +} + +async function computeHash(buffer: ArrayBuffer): Promise { + const hash = await crypto.subtle.digest("SHA-256", new Uint8Array(buffer)); + return Array.from(new Uint8Array(hash), (b) => b.toString(16).padStart(2, "0")).join(""); +} + +function decodeSave(data: string): ArrayBuffer | null { + try { + const buffer = base64ToArrayBuffer(data); + return buffer.byteLength <= MAX_SAVE_SIZE ? buffer : null; + } catch { + return null; + } +} + +async function upsertConfig(db: D1Database, userId: string, config: string) { + await db + .prepare("INSERT OR REPLACE INTO user_config (user_id, ini_text) VALUES (?, ?)") + .bind(userId, config.slice(0, 65536)) + .run(); +} + +const cloud = new Hono<{ Bindings: Env; Variables: Variables }>(); + +// Helper: build a response entry that sends server data to the client +async function serverDataEntry(filename: string, data: ArrayBuffer) { + const hash = await computeHash(data); + return { filename, data: arrayBufferToBase64(data), hash }; +} + +// Helper: build a response entry that confirms a hash (no data transfer) +function confirmEntry(filename: string, hash: string) { + return { filename, data: null, hash }; +} + +// Bidirectional save sync — per-file dirty-state merge +cloud.post("/saves/sync", async (c) => { + const session = c.get("session"); + + const body = await c.req.json<{ + files: Array<{ + filename: string; + data: string | null; + hash: string | null; + }>; + }>(); + + if (!Array.isArray(body.files)) { + return c.json({ error: "Invalid files array" }, 400); + } + + const existing = await c.env.DB.prepare( + "SELECT filename, data FROM user_saves WHERE user_id = ?" + ).bind(session.user.id).all(); + + const serverFiles = new Map(existing.results.map((r) => [r.filename, r.data])); + const upserts: D1PreparedStatement[] = []; + const stmt = c.env.DB.prepare( + "INSERT OR REPLACE INTO user_saves (user_id, filename, data) VALUES (?, ?, ?)" + ); + + const responseFiles = []; + const clientFilenames = new Set(); + + for (const { filename, data, hash } of body.files) { + if (!VALID_SAVE_FILES.has(filename)) continue; + clientFilenames.add(filename); + const serverData = serverFiles.get(filename); + + if (data) { + // Client has dirty data — accept it + const buffer = decodeSave(data); + if (buffer) { + upserts.push(stmt.bind(session.user.id, filename, buffer)); + responseFiles.push(confirmEntry(filename, await computeHash(buffer))); + } + } else if (serverData) { + // Client is clean — send server data only if hashes differ + const serverHash = await computeHash(serverData); + responseFiles.push(hash === serverHash + ? confirmEntry(filename, serverHash) + : await serverDataEntry(filename, serverData)); + } + } + + // Server-only files the client didn't mention + for (const [filename, data] of serverFiles) { + if (!clientFilenames.has(filename) && VALID_SAVE_FILES.has(filename)) { + responseFiles.push(await serverDataEntry(filename, data)); + } + } + + if (upserts.length > 0) await c.env.DB.batch(upserts); + return c.json({ files: responseFiles }); +}); + +// Incremental save upload (debounced during gameplay) +cloud.post("/saves", async (c) => { + const session = c.get("session"); + + const body = await c.req.json<{ + saves: Array<{ filename: string; data: string }>; + }>(); + + if (!Array.isArray(body.saves) || body.saves.length === 0) { + return c.json({ error: "No files provided" }, 400); + } + const files = body.saves; + + const batch: D1PreparedStatement[] = []; + const hashes: Array<{ filename: string; hash: string }> = []; + const stmt = c.env.DB.prepare( + "INSERT OR REPLACE INTO user_saves (user_id, filename, data) VALUES (?, ?, ?)" + ); + + for (const save of files) { + if (!VALID_SAVE_FILES.has(save.filename)) continue; + if (typeof save.data !== "string") continue; + const buffer = decodeSave(save.data); + if (!buffer) continue; + batch.push(stmt.bind(session.user.id, save.filename, buffer)); + hashes.push({ filename: save.filename, hash: await computeHash(buffer) }); + } + + if (batch.length > 0) { + await c.env.DB.batch(batch); + } + + return c.json({ ok: true, hashes }); +}); + +// Sync config on login +cloud.post("/config/sync", async (c) => { + const session = c.get("session"); + + // Check if server has existing config + const existing = await c.env.DB.prepare( + "SELECT ini_text FROM user_config WHERE user_id = ?" + ) + .bind(session.user.id) + .first(); + + if (existing) { + // Server has data — return it + return c.json({ config: existing.ini_text }); + } + + // Server has no data — store what client sends + const body = await c.req.json<{ config: string }>(); + if (typeof body.config !== "string") { + return c.json({ error: "Invalid config" }, 400); + } + + await upsertConfig(c.env.DB, session.user.id, body.config); + return c.json({ config: null }); +}); + +// Upload config (incremental) +cloud.post("/config", async (c) => { + const session = c.get("session"); + const body = await c.req.json<{ config: string }>(); + if (typeof body.config !== "string") { + return c.json({ error: "Invalid config" }, 400); + } + + await upsertConfig(c.env.DB, session.user.id, body.config); + return c.json({ ok: true }); +}); + +export { cloud }; diff --git a/server/src/crashes.ts b/server/src/crashes.ts new file mode 100644 index 0000000..ad775b4 --- /dev/null +++ b/server/src/crashes.ts @@ -0,0 +1,44 @@ +import { Hono } from "hono"; +import { createAuth, type Env } from "./auth"; + +type Variables = { + session: { user: { id: string } }; +}; + +export const crashes = new Hono<{ Bindings: Env; Variables: Variables }>(); + +crashes.post("/", async (c) => { + let body; + try { + body = await c.req.json(); + } catch { + return c.json({ error: "invalid JSON" }, 400); + } + + const { stack, buildVersion, wasmVersion } = body; + + if (!stack || typeof stack !== "string") { + return c.json({ error: "stack is required" }, 400); + } + + const stk = stack.slice(0, 8192); + const bv = typeof buildVersion === "string" ? buildVersion.slice(0, 40) : null; + const wv = typeof wasmVersion === "string" ? wasmVersion.slice(0, 40) : null; + const ua = (c.req.header("user-agent") || "").slice(0, 512); + + // Try to get user_id from session (no auth required — crash reports are anonymous by default) + let userId: string | null = null; + try { + const auth = createAuth(c.env); + const session = await auth.api.getSession({ headers: c.req.raw.headers }); + userId = session?.user?.id || null; + } catch {} + + await c.env.DB.prepare( + "INSERT INTO crash_reports (stack, build_version, wasm_version, user_agent, user_id) VALUES (?, ?, ?, ?, ?)" + ) + .bind(stk, bv, wv, ua, userId) + .run(); + + return c.body(null, 204); +}); diff --git a/server/src/index.ts b/server/src/index.ts new file mode 100644 index 0000000..0babff4 --- /dev/null +++ b/server/src/index.ts @@ -0,0 +1,99 @@ +import { Hono, type Context, type Next } from "hono"; +import { cors } from "hono/cors"; +import { createAuth, type Env, type Variables } from "./auth"; +import { memories } from "./memories"; +import { crashes } from "./crashes"; +import { account } from "./account"; +import { cloud } from "./cloud"; + +const app = new Hono<{ Bindings: Env; Variables: Variables }>(); + +// CORS for frontend +app.use( + "*", + cors({ + origin: ["http://localhost:5173", "http://localhost:3000", "https://isle.pizza", "https://dev.isle.pizza"], + credentials: true, + }) +); + +// Health check +app.get("/health", (c) => c.json({ status: "ok" })); + +// better-auth handles all /api/auth/* routes +app.all("/api/auth/*", async (c) => { + const auth = createAuth(c.env); + return auth.handler(c.req.raw); +}); + +// Public endpoint: look up a memory completion by eventId (no auth needed) +app.get("/api/memory/:eventId", async (c) => { + const eventId = c.req.param("eventId"); + if (!eventId || eventId.length > 16) { + return c.json({ error: "Invalid eventId" }, 400); + } + + const result = await c.env.DB.prepare( + "SELECT anim_index, event_id, completed_at, participants, language FROM memory_completions WHERE event_id = ? LIMIT 1" + ) + .bind(eventId) + .first<{ + anim_index: number; + event_id: string; + completed_at: number; + participants: string; + language: string; + }>(); + + if (!result) { + return c.json({ error: "Not found" }, 404); + } + + let participants: unknown[]; + try { + participants = JSON.parse(result.participants || "[]"); + } catch { + participants = []; + } + + return c.json({ + animIndex: result.anim_index, + eventId: result.event_id, + completedAt: result.completed_at, + participants, + language: result.language, + }); +}); + +// Auth middleware for protected routes +const authMiddleware = async (c: Context<{ Bindings: Env; Variables: Variables }>, next: Next) => { + const auth = createAuth(c.env); + const session = await auth.api.getSession({ + headers: c.req.raw.headers, + }); + + if (!session) { + return c.json({ error: "Unauthorized" }, 401); + } + + c.set("session", session); + await next(); +}; + +// Auth-protected memory routes +app.use("/api/memories", authMiddleware); +app.use("/api/memories/*", authMiddleware); +app.route("/api/memories", memories); + +// Account management (delete account) +app.use("/api/account", authMiddleware); +app.route("/api/account", account); + +// Cloud sync routes (all auth-protected) +app.use("/api/cloud/*", authMiddleware); +app.route("/api/cloud", cloud); + +// Crash reporting (no auth required) +app.route("/api/crash", crashes); + +export default app; diff --git a/server/src/memories.ts b/server/src/memories.ts new file mode 100644 index 0000000..38e4f9f --- /dev/null +++ b/server/src/memories.ts @@ -0,0 +1,158 @@ +import { Hono } from "hono"; +import type { Env } from "./auth"; + +type AuthSession = { + user: { id: string }; +}; + +type Variables = { + session: AuthSession; +}; + +/** Row shape returned by queries on memory_completions */ +interface CompletionRow { + user_id: string; + anim_index: number; + event_id: string; + completed_at: number; + participants: string; + language: string; +} + +const VALID_LANGUAGES = new Set([ + "da", "el", "en", "fr", "de", "it", "jp", "ko", "pt", "ru", "es", +]); + +function isValidLanguage(lang: unknown): lang is string { + return typeof lang === "string" && VALID_LANGUAGES.has(lang); +} + +function getUserCompletions(db: D1Database, userId: string) { + return db + .prepare( + "SELECT anim_index, event_id, completed_at, participants, language FROM memory_completions WHERE user_id = ? ORDER BY completed_at DESC" + ) + .bind(userId) + .all(); +} + +function isValidCompletion(c: { + animIndex: unknown; + eventId: unknown; + language: unknown; +}): boolean { + if ( + typeof c.animIndex !== "number" || + !Number.isInteger(c.animIndex) || + c.animIndex < 0 + ) + return false; + if (typeof c.eventId !== "string" || c.eventId.length > 16) return false; + if (!isValidLanguage(c.language)) return false; + return true; +} + +/** Auth-protected memory routes (mounted behind auth middleware) */ +const memories = new Hono<{ Bindings: Env; Variables: Variables }>(); + +// Record a single completion +memories.post("/", async (c) => { + const session = c.get("session"); + const body = await c.req.json<{ + animIndex: number; + eventId: string; + participants: Array<{ charIndex: number; displayName: string }>; + language: string; + }>(); + + if ( + !isValidCompletion(body) || + !Array.isArray(body.participants) || + body.participants.length === 0 + ) { + return c.json({ error: "Invalid completion data" }, 400); + } + + const participantsJson = JSON.stringify(body.participants); + + await c.env.DB.prepare( + "INSERT OR IGNORE INTO memory_completions (user_id, anim_index, event_id, completed_at, participants, language) VALUES (?, ?, ?, ?, ?, ?)" + ) + .bind( + session.user.id, + body.animIndex, + body.eventId, + Math.floor(Date.now() / 1000), + participantsJson, + body.language + ) + .run(); + + return c.json({ ok: true }); +}); + +// Bulk import from IndexedDB (sync on login) +memories.post("/sync", async (c) => { + const session = c.get("session"); + const body = await c.req.json<{ + completions: Array<{ + animIndex: number; + eventId: string; + t: number; + participants?: Array<{ charIndex: number; displayName: string }>; + language: string; + }>; + }>(); + + if (!Array.isArray(body.completions)) { + return c.json({ error: "Invalid completions array" }, 400); + } + + const stmt = c.env.DB.prepare( + "INSERT OR IGNORE INTO memory_completions (user_id, anim_index, event_id, completed_at, participants, language) VALUES (?, ?, ?, ?, ?, ?)" + ); + + // Find existing event_ids for this user to avoid duplicates + const existingEvents = await c.env.DB.prepare( + "SELECT event_id FROM memory_completions WHERE user_id = ?" + ) + .bind(session.user.id) + .all>(); + const existingSet = new Set( + existingEvents.results.map((r) => r.event_id) + ); + + // Insert new completions (deduplicate by event_id) + const batch: D1PreparedStatement[] = []; + for (const completion of body.completions) { + if (!isValidCompletion(completion)) continue; + if (existingSet.has(completion.eventId)) continue; + if ( + !Array.isArray(completion.participants) || + completion.participants.length === 0 + ) + continue; + + batch.push( + stmt.bind( + session.user.id, + completion.animIndex, + completion.eventId, + completion.t || Math.floor(Date.now() / 1000), + JSON.stringify(completion.participants), + completion.language + ) + ); + existingSet.add(completion.eventId); + } + + if (batch.length > 0) { + await c.env.DB.batch(batch); + } + + // Return full merged set + const merged = await getUserCompletions(c.env.DB, session.user.id); + return c.json({ completions: merged.results }); +}); + +export { memories }; diff --git a/server/tsconfig.json b/server/tsconfig.json new file mode 100644 index 0000000..2ee2e39 --- /dev/null +++ b/server/tsconfig.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "target": "ESNext", + "module": "ESNext", + "moduleResolution": "bundler", + "strict": true, + "skipLibCheck": true, + "types": ["@cloudflare/workers-types"] + }, + "include": ["src/**/*.ts"] +} diff --git a/server/wrangler.toml b/server/wrangler.toml new file mode 100644 index 0000000..e8c3b10 --- /dev/null +++ b/server/wrangler.toml @@ -0,0 +1,27 @@ +name = "isle-pizza-api" +main = "src/index.ts" +compatibility_date = "2026-03-01" +compatibility_flags = ["nodejs_compat"] + +[[d1_databases]] +binding = "DB" +database_name = "isle-pizza" +database_id = "local" +migrations_dir = "migrations" + +[vars] +API_URL = "http://localhost:8788" + +[env.production] +name = "isle-api" +workers_dev = false +preview_urls = false + +[[env.production.d1_databases]] +binding = "DB" +database_name = "isle-pizza" +database_id = "23b0f585-fa7a-4c35-8684-428aac9b5f89" +migrations_dir = "migrations" + +[env.production.vars] +API_URL = "https://api.isle.pizza" diff --git a/site.config.js b/site.config.js new file mode 100644 index 0000000..931b1fa --- /dev/null +++ b/site.config.js @@ -0,0 +1,4 @@ +export default { + relayUrl: process.env.RELAY_URL || 'ws://localhost:8787', + apiUrl: process.env.API_URL || 'http://localhost:8788', +}; diff --git a/src/App.svelte b/src/App.svelte index 5d4aea9..d59d2b8 100644 --- a/src/App.svelte +++ b/src/App.svelte @@ -1,20 +1,32 @@ + + + +

+ + showSignInModal = false} /> + +{#if showDeleteDialog} + + +{/if} + + diff --git a/src/lib/ActorPicker.svelte b/src/lib/ActorPicker.svelte new file mode 100644 index 0000000..15ada80 --- /dev/null +++ b/src/lib/ActorPicker.svelte @@ -0,0 +1,221 @@ + + +
+
+ Choose your character + ? + This is the visual model you'll use in multiplayer, regardless of which actor is selected in the Infocenter. + +
+
+
+ + {#if loading} +
+
+
+ {:else if error} +
{error}
+ {/if} +
+ {ActorDisplayNames[selectedIndex] || ActorInfoInit[selectedIndex].name} +
+ + +
+ + diff --git a/src/lib/BackButton.svelte b/src/lib/BackButton.svelte index 6a14c16..27f95c9 100644 --- a/src/lib/BackButton.svelte +++ b/src/lib/BackButton.svelte @@ -1,6 +1,15 @@ diff --git a/src/lib/CanvasWrapper.svelte b/src/lib/CanvasWrapper.svelte index 59887f2..16d0962 100644 --- a/src/lib/CanvasWrapper.svelte +++ b/src/lib/CanvasWrapper.svelte @@ -21,3 +21,86 @@ e.preventDefault()} tabindex="-1"> + + diff --git a/src/lib/ConfigToast.svelte b/src/lib/ConfigToast.svelte index 29d267b..e0b0d01 100644 --- a/src/lib/ConfigToast.svelte +++ b/src/lib/ConfigToast.svelte @@ -1,7 +1,41 @@ -
+
{$configToastMessage}
+ + diff --git a/src/lib/ConfigurePage.svelte b/src/lib/ConfigurePage.svelte index a22a21e..dd0ba36 100644 --- a/src/lib/ConfigurePage.svelte +++ b/src/lib/ConfigurePage.svelte @@ -2,11 +2,12 @@ import { onMount, tick } from 'svelte'; import BackButton from './BackButton.svelte'; + import OpfsDisabledBanner from './OpfsDisabledBanner.svelte'; import DisplayTab from './config/DisplayTab.svelte'; import ControlsTab from './config/ControlsTab.svelte'; import AudioTab from './config/AudioTab.svelte'; import ExtrasTab from './config/ExtrasTab.svelte'; - import { installState, currentPage } from '../stores.js'; + import { installState, currentPage, opfsDisabled, configVersion } from '../stores.js'; import { loadConfig, saveConfig, getFileHandle } from '../core/opfs.js'; import { checkCacheStatus, startInstall, startUninstall, getSiFilesForCache } from '../core/service-worker.js'; import { getMsaaSamples, getMaxAnisotropy, populateMsaaSelect, populateAfSelect } from '../core/webgl.js'; @@ -20,8 +21,18 @@ openSection = 'game'; } + // Reload config from OPFS when navigating to this page + $: if ($currentPage === 'configure' && configForm && !$opfsDisabled) { + loadConfig(configForm); + } + + // Reload config from OPFS after cloud sync (even if not on config page), + // so that saveConfigFromDOM() before game launch won't overwrite it with stale form values + $: if ($configVersion && configForm && !$opfsDisabled) { + loadConfig(configForm); + } + let configForm; - let opfsDisabled = false; let msaaSupported = false; let afSupported = false; let isTouchDevice = false; @@ -61,12 +72,17 @@ // Load config from OPFS const handle = await getFileHandle(); if (!handle) { - opfsDisabled = true; + opfsDisabled.set(true); } else { - const config = await loadConfig(configForm); - if (!config) { - // Save defaults silently (no toast on initial creation) - await saveConfig(configForm, getSiFiles, true); + try { + const config = await loadConfig(configForm); + if (!config) { + // Save defaults silently (no toast on initial creation) + await saveConfig(configForm, getSiFiles, true); + } + } catch (e) { + // Read error — do NOT overwrite config with defaults + console.error('Config read failed, keeping existing data:', e); } showOrHideGraphicsOptions(); } @@ -111,7 +127,7 @@ } function handleFormChange() { - if (!opfsDisabled) { + if (!$opfsDisabled) { saveConfig(configForm, getSiFiles); } showOrHideGraphicsOptions(); @@ -142,11 +158,7 @@ document.getElementById('tex-high').checked = true; document.getElementById('max-lod').value = '3.6'; document.getElementById('max-allowed-extras').value = '20'; - document.getElementById('check-hd-textures').checked = false; - document.getElementById('check-hd-music').checked = false; - document.getElementById('check-widescreen-bgs').checked = false; - document.getElementById('check-outro').checked = false; - document.getElementById('check-ending').checked = false; + document.querySelectorAll('#config-tab-extras .toggle-group input[type="checkbox"]').forEach(cb => cb.checked = false); } else if (preset === 'modern') { document.getElementById('aspect-wide').checked = true; document.getElementById('resolution-wide').checked = true; @@ -188,20 +200,15 @@
- {#if opfsDisabled} -
-

OPFS is disabled in this browser. Default configuration will apply. If you are using a Private/Incognito - window, please change to a regular window instead to change configuration.

-
- {/if} +
LEGO Island Shark and Brickster
- - + +
@@ -214,7 +221,7 @@
import { showGoodbyePopup } from '../stores.js'; - import { startGame } from '../core/emscripten.js'; - import { pauseInstallAudio } from '../core/audio.js'; + import { launchGame } from '../core/emscripten.js'; import { navigateTo } from '../core/navigation.js'; + import { saveConfigFromDOM } from '../core/opfs.js'; import ImageButton from './ImageButton.svelte'; - let rendererValue = "0 0x682656f3 0x0 0x0 0x4000000"; // WebGL default - const buttons = [ { id: 'run-game-btn', off: 'images/run_game_off.webp', on: 'images/run_game_on.webp', alt: 'Run Game', width: 135, height: 164, action: handleRunGame }, { id: 'configure-btn', off: 'images/configure_off.webp', on: 'images/configure_on.webp', alt: 'Configure', width: 130, height: 147, action: () => navigateTo('configure') }, @@ -15,16 +13,9 @@ { id: 'cancel-btn', off: 'images/cancel_off.webp', on: 'images/cancel_on.webp', alt: 'Cancel', width: 93, height: 145, action: () => showGoodbyePopup.set(true) } ]; - function handleRunGame() { - pauseInstallAudio(); - - // Get current renderer value from select - const rendererSelect = document.getElementById('renderer-select'); - if (rendererSelect) { - rendererValue = rendererSelect.value; - } - - startGame(rendererValue); + async function handleRunGame() { + await saveConfigFromDOM(); + launchGame(); } diff --git a/src/lib/CrashOverlay.svelte b/src/lib/CrashOverlay.svelte new file mode 100644 index 0000000..a9b9860 --- /dev/null +++ b/src/lib/CrashOverlay.svelte @@ -0,0 +1,151 @@ + + +{#if $gameCrashed} +
+
+ Crash +
+

Uh oh! The game crashed.

+

Sorry about that! Something went wrong and LEGO Island had to stop. You can try reloading the page to get back to the action.

+ +

If this keeps happening, please report the issue so we can fix it.

+
+
+
+{/if} + + diff --git a/src/lib/DebugPanel.svelte b/src/lib/DebugPanel.svelte index 9afe655..53b0ab2 100644 --- a/src/lib/DebugPanel.svelte +++ b/src/lib/DebugPanel.svelte @@ -1,28 +1,8 @@ {#if $debugUIVisible} -
+
{#if debugPanelOpen} @@ -384,5 +364,195 @@ {/if} diff --git a/src/lib/EditorTooltip.svelte b/src/lib/EditorTooltip.svelte index 4918415..9e6940d 100644 --- a/src/lib/EditorTooltip.svelte +++ b/src/lib/EditorTooltip.svelte @@ -55,7 +55,6 @@ border: none; padding: 0; cursor: pointer; - -webkit-tap-highlight-color: transparent; } /* Expand touch target on mobile */ diff --git a/src/lib/FreeStuffPage.svelte b/src/lib/FreeStuffPage.svelte index fe62e48..6e822ed 100644 --- a/src/lib/FreeStuffPage.svelte +++ b/src/lib/FreeStuffPage.svelte @@ -44,3 +44,100 @@
+ + diff --git a/src/lib/GoodbyePopup.svelte b/src/lib/GoodbyePopup.svelte index e4caac5..e1d10fa 100644 --- a/src/lib/GoodbyePopup.svelte +++ b/src/lib/GoodbyePopup.svelte @@ -57,3 +57,23 @@ Goodbye
{/if} + + diff --git a/src/lib/MemoriesPage.svelte b/src/lib/MemoriesPage.svelte new file mode 100644 index 0000000..bc841d6 --- /dev/null +++ b/src/lib/MemoriesPage.svelte @@ -0,0 +1,1063 @@ + + +{#snippet avatarStack(participants)} +
+ {#each participants as p, idx} +
+ {#if $actorThumbnails[p.charIndex]} + {ActorDisplayNames[p.charIndex]} + {:else} + {(ActorDisplayNames[p.charIndex] || '?')[0]} + {/if} +
+ {/each} +
+{/snippet} + +
+ +
+ + +
+ Nick Brick +
+

Nick Brick's Memories

+
+ Help Nick remember what happened on the island. + + {unlockCount} + / + {TOTAL_ANIMATIONS} + +
+
+
+
+
+
+ + + + {#if introOpen} +
+

+ Join a multiplayer island and explore LEGO Island together to reenact the original + in-game animations. Each animation needs specific characters to perform it and a + spectator to trigger it — so you always need at least two players. When an animation + plays successfully, it's saved as a memory for everyone involved. +

+
+
+ 1 + Create or join an island from the Multiplayer page +
+
+ 2 + Explore the island and browse available animations from the hotbar +
+
+ 3 + Mark interest in an animation and wait for other players to fill the required roles +
+
+ 4 + Collect all {TOTAL_ANIMATIONS} memories across the island +
+
+
+ {/if} + + +
+ {#each locationGroups as group} + + {/each} +
+ + + {#if selectedGroup} +
+
+

{selectedGroup.label}

+ {selectedGroup.unlocked}/{selectedGroup.total} +
+ + + + + + +
+
+ + {#if displayAnims.length === 0} +
+ {#if filter === 'unlocked'} + No memories unlocked here yet. + {:else if filter === 'locked'} + All memories here are unlocked! + {:else} + No animations found. + {/if} +
+ {:else} +
+ {#each displayAnims as anim} + {@const now = Date.now()} +
+ + + + + {#if anim.completions} + + {/if} +
+ {/each} +
+ {/if} +
+ {/if} +
+
+ + diff --git a/src/lib/MultiplayerPage.svelte b/src/lib/MultiplayerPage.svelte new file mode 100644 index 0000000..88293b5 --- /dev/null +++ b/src/lib/MultiplayerPage.svelte @@ -0,0 +1,728 @@ + + +
+ + +
+
+ +
+
+

Multiplayer + + + + + Experimental + +

+ +

Explore LEGO Island together with other players. Create an island and share the link to get started.

+ + {#if !hasRoom} +
+
+ + +
+ +
+
+ + {#if !browserInitialized} + + {:else} + + + + + {/if} + Public Islands + + {#if publicRooms.length > 0} + {publicRooms.length >= BROWSER_ROWS ? `${BROWSER_ROWS}+` : publicRooms.length} available + {/if} +
+
+ {#each browserRows as row (row.id)} + +
!row.placeholder && navigateToRoom(row.roomId)}> + {#if row.placeholder} + {row.message} + {:else} + {row.roomId} + + + + + {row.players}/{row.maxPlayers} + + {/if} +
+ {/each} +
+
+
+ +
+
+
+ + + +
+
+ Third-person camera + Toggle a camera behind your character to see yourself walking and performing emotes. +
+
+
+
+ + + +
+
+ Nick Brick's Memories + Trigger 300+ original animations together. Fill actor roles and watch scenes play out. +
+
+
+
+ + + +
+
+ Emotes and interactions + Wave, tip your hat, cycle colors and moods, and pick different walk and idle styles. +
+
+
+
+ + + + +
+
+ Shared world* + See other players on the island. Plants, buildings, and their states are synchronized. +
+
+
+ + {:else} +
+
+ + {roomName} + · + + {#if previewLoading} + ... + {:else if previewError} + {previewError} + {:else} + + + + {playerCount}/{roomMaxPlayers} + {/if} + + + +
+ + {#if !$gameRunning} + { selectedActorIndex = idx; sessionStorage.setItem('mp-actor', idx); }} + /> + {/if} + + {#if roomFull} +

Island is full. Wait for a player to leave or create a new island.

+ {:else} + + {/if} +
+ {/if} +
+
+
+ + diff --git a/src/lib/OpfsDisabledBanner.svelte b/src/lib/OpfsDisabledBanner.svelte new file mode 100644 index 0000000..abb7ae7 --- /dev/null +++ b/src/lib/OpfsDisabledBanner.svelte @@ -0,0 +1,27 @@ + + +{#if $opfsDisabled} +
+

OPFS is disabled in this browser. This feature is unavailable. If you are using a + Private/Incognito window, please change to a regular window instead.

+
+{/if} + + diff --git a/src/lib/PanningImage.svelte b/src/lib/PanningImage.svelte new file mode 100644 index 0000000..a1be20e --- /dev/null +++ b/src/lib/PanningImage.svelte @@ -0,0 +1,47 @@ + + + + + diff --git a/src/lib/ReadMePage.svelte b/src/lib/ReadMePage.svelte index b398c8e..735ec53 100644 --- a/src/lib/ReadMePage.svelte +++ b/src/lib/ReadMePage.svelte @@ -21,23 +21,30 @@ ]; const faqItems = [ - { id: 'faq1', question: 'Is this the full, original game?', answer: `

This is a complete port of the original 1997 PC game. You can select from multiple languages, including both the 1.0 and 1.1 versions of English, from the "Configure" menu before starting.

` }, - { id: 'faq2', question: 'How does this differ from the original 1997 CD-ROM game?', answer: `

The core gameplay is identical, but this version has some great advantages! It runs in your browser with no installation needed and works on modern devices. It also includes enhancements like widescreen support, improved controls, many bug fixes from the decompilation project, and the ability to run at your display's maximum resolution (even 4K!).

Check out the "Configure" page to see what's possible.

` }, - { id: 'faq3', question: 'Can I save my progress?', answer: `

Yes! The game automatically saves your progress. To ensure your game is saved, return to the Infocenter and use the exit door. This will bring you back to the main menu and lock in your save state. A "best effort" save is also attempted if you close the tab directly, but this method isn't always guaranteed.

` }, - { id: 'faq4', question: 'Does this run on mobile?', answer: `

Yes! The game is designed to work on a wide range of devices, including desktops, laptops, tablets, and phones. It has even been seen running on Tesla in-car browsers!

` }, - { id: 'faq5', question: 'Which browsers are supported?', answer: `

This port runs best on recent versions of modern browsers, including Chrome, Firefox, and Safari. For an optimal experience on iOS devices, please ensure you are running iOS 18 or newer.

` }, - { id: 'faq6', question: 'What are the controls?', answer: `

You can play using a keyboard and mouse, a gamepad, or a touch screen. Gamepad support can vary depending on your browser. On mobile, you can select your preferred touch control scheme in the "Configure" menu.

` }, - { id: 'faq7', question: 'Can I play offline?', answer: `

You bet! In the "Configure" menu, scroll to the "Offline Play" section. You'll find an option there to install all necessary game files (about 550MB) for offline access.

` }, - { id: 'faq8', question: "I don't hear any sound or music. How do I fix it?", answer: `

Most modern browsers block audio until you interact with the page. Click the mute icon on the animated intro to enable sound.

` }, - { id: 'faq9', question: 'I think I found a bug! Where do I report it?', answer: `

As an active development project, some bugs are expected. If you find one, we'd be grateful if you'd report it on the isle-portable GitHub Issues page. Please include details about your browser, device, and what you were doing when the bug occurred.

` }, - { id: 'faq10', question: 'Is this project open-source?', answer: `

Yes, absolutely! This web port is built upon the incredible open-source LEGO Island (portable) project, and the code for this website is also available here.

` } + { id: 'faq1', question: 'Is this the same game as the original?', answer: `

This is a complete port of the original 1997 PC game — the core gameplay is identical. You can select from multiple languages, including both the 1.0 and 1.1 versions of English, from the Configure page before starting.

On top of that, this version includes enhancements like widescreen support, improved controls, many bug fixes from the decompilation project, and the ability to run at your display's maximum resolution (even 4K!). Check out the Configure page to see what's possible.

` }, + { id: 'faq2', question: 'Can I save my progress?', answer: `

Yes! The game automatically saves your progress. To ensure your game is saved, return to the Infocenter and use the exit door. This will bring you back to the main menu and lock in your save state. A "best effort" save is also attempted if you close the tab directly, but this method isn't always guaranteed.

` }, + { id: 'faq3', question: 'Does this run on mobile?', answer: `

Yes! The game is designed to work on a wide range of devices, including desktops, laptops, tablets, and phones. It has even been seen running on Tesla in-car browsers!

` }, + { id: 'faq4', question: 'Which browsers are supported?', answer: `

See the System tab for a full list of supported browsers and minimum versions. For the best experience on iOS, make sure you're running iOS 18 or newer.

` }, + { id: 'faq5', question: 'What are the controls?', answer: `

You can play using a keyboard and mouse, a gamepad, or a touch screen. Gamepad support can vary depending on your browser. On mobile, you can select your preferred touch control scheme in the Configure menu.

` }, + { id: 'faq6', question: 'Can I play offline?', answer: `

You bet! On the Configure page, open the "Extras" tab and expand the "Offline Play" section. From there you can install all necessary game files (about 550MB) for offline access.

` }, + { id: 'faq7', question: "I don't hear any sound or music. How do I fix it?", answer: `

Most modern browsers block audio until you interact with the page. Click the mute icon on the animated intro to enable sound.

` }, + { id: 'faq8', question: 'I think I found a bug! Where do I report it?', answer: `

As an active development project, some bugs are expected. If you find one, we'd be grateful if you'd report it on the isle-portable GitHub Issues page. Please include details about your browser, device, and what you were doing when the bug occurred.

` }, + { id: 'faq9', question: 'Is this project open-source?', answer: `

Yes, absolutely! This web port is built upon the incredible open-source LEGO Island (portable) project, and the code for this website is also available here.

` } ]; const changelogItems = [ - { id: 'cl0', title: 'March 2026', items: [ + { id: 'cl0', title: 'April 2026', items: [ + { type: 'New', text: 'Multiplayer mode — create public or private islands and explore LEGO Island together with up to 16 players in real time' }, + { type: 'New', text: 'Scene Player lets you watch over 300 original LEGO Island animations with playback controls and shareable links' }, + { type: 'New', text: 'Memories page — reenact original in-game animations with other players in multiplayer and collect them as memories' }, + { type: 'New', text: 'Cloud Sync automatically backs up your save files and config across devices when signed in' }, + { type: 'New', text: 'Sign in with Discord to enable cloud sync, memories, and multiplayer features' }, + { type: 'New', text: 'Crash reporting overlay captures diagnostics and lets you submit reports when something goes wrong' } + ]}, + { id: 'cl1', title: 'March 2026', items: [ { type: 'New', text: 'Voices tab on the Read Me page showcases reactions from the original LEGO Island development team' } ]}, - { id: 'cl1', title: 'February 2026', items: [ + { id: 'cl2', title: 'February 2026', items: [ { type: 'New', text: 'Save Editor lets you view and modify save files — change your player name, character, and high scores directly from the browser' }, { type: 'New', text: 'Sky Color Editor allows customizing the island sky gradient colors in your save file' }, { type: 'New', text: 'Vehicle Part Editor enables modifying vehicle parts and colors with a 3D preview' }, @@ -52,14 +59,14 @@ { type: 'Improved', text: 'Save Editor tabs now use a carousel with arrow navigation for easier browsing on small screens' }, { type: 'Fixed', text: 'Sticky hover highlights on touch devices for editor buttons' } ]}, - { id: 'cl2', title: 'January 2026', items: [ + { id: 'cl3', title: 'January 2026', items: [ { type: 'New', text: 'Debug menu for developers and power users. Tap the LEGO Island logo 5 times to unlock OGEL mode and access debug features like teleporting to locations, switching acts, and playing animations' }, { type: 'Improved', text: 'Configure page redesigned with tabbed navigation, collapsible sections, quick presets (Classic/Modern Mode), and modern toggle switches' }, { type: 'Improved', text: 'Read Me page reorganized into tabs (About, System, FAQ, Changelog, Manual) with the original instruction manual now viewable in-browser' }, { type: 'Fixed', text: 'Safari audio not playing on first toggle' }, { type: 'Fixed', text: 'Tooltips not working correctly on mobile devices' } ]}, - { id: 'cl3', title: 'December 2025', items: [ + { id: 'cl4', title: 'December 2025', items: [ { type: 'New', text: '"Active in Background" option keeps the game running when the tab loses focus' }, { type: 'New', text: 'WASD navigation controls as an alternative to arrow keys' }, { type: 'Fixed', text: 'Act 3 helicopter ammo now correctly sticks to targets and finishes animations' }, @@ -68,17 +75,17 @@ { type: 'Fixed', text: 'Touch controls now properly support widescreen aspect ratios' }, { type: 'Improved', text: 'Default anisotropic filtering increased to 16x for sharper textures' } ]}, - { id: 'cl4', title: 'November 2025', items: [ + { id: 'cl5', title: 'November 2025', items: [ { type: 'Fixed', text: 'Dictionary loading failure no longer causes crashes' }, { type: 'Fixed', text: 'INI configuration now properly applies defaults when values are missing' } ]}, - { id: 'cl5', title: 'September 2025', items: [ + { id: 'cl6', title: 'September 2025', items: [ { type: 'New', text: 'Additional widescreen background images' }, { type: 'Fixed', text: 'Jukebox state now correctly restored when using HD Music extension' }, { type: 'Fixed', text: 'Background audio no longer gets stuck when starting audio fails' }, { type: 'Improved', text: 'SI Loader actions now start at the correct time during world loading' } ]}, - { id: 'cl6', title: 'August 2025', items: [ + { id: 'cl7', title: 'August 2025', items: [ { type: 'New', text: 'Extended Bad Ending FMV extension shows the uncut beta animation' }, { type: 'New', text: 'HD Music extension with high-quality audio' }, { type: 'New', text: 'Widescreen backgrounds extension eliminates 3D edges on wide displays' }, @@ -87,7 +94,7 @@ { type: 'Fixed', text: 'Purple edges no longer appear on scaled transparent 2D elements' }, { type: 'Fixed', text: 'Transparent pixels now render correctly with alpha channel support' } ]}, - { id: 'cl7', title: 'July 2025', items: [ + { id: 'cl8', title: 'July 2025', items: [ { type: 'New', text: 'HD Textures extension with enhanced visuals' }, { type: 'New', text: 'MSAA anti-aliasing support for smoother edges' }, { type: 'New', text: 'Anisotropic filtering for sharper textures at angles' }, @@ -109,7 +116,7 @@ { type: 'Improved', text: 'Mosaic transition animation is faster and cleaner' }, { type: 'Improved', text: 'Loading UX for HD Textures with progress indicators' } ]}, - { id: 'cl8', title: 'June 2025 — Initial Release', items: [ + { id: 'cl9', title: 'June 2025 — Initial Release', items: [ { type: 'New', text: 'Emscripten web port — play LEGO Island directly in your browser!' }, { type: 'New', text: 'WebGL rendering for hardware-accelerated 3D graphics' }, { type: 'New', text: 'Software renderer fallback for devices without WebGL' }, @@ -161,26 +168,21 @@
-

Welcome to the LEGO Island web port project! This is a recreation of the classic 1997 PC game, - rebuilt to run in modern web browsers using Emscripten and WebAssembly.

-

This incredible project stands on the shoulders of giants. It was made possible by the original decompilation project, which achieved 100% decompilation of the - original game. This was then adapted into a portable version that eliminated all Windows dependencies and - replaced them with modern, cross-platform alternatives.

-

The technical work involved replacing Windows-specific systems with SDL for window management and input, - migrating audio from DirectSound to the miniaudio library, converting Windows Registry configuration - to INI files, and creating a modular graphics layer supporting multiple rendering backends including - WebGL. This represents years of effort from many awesome contributors dedicated to preserving this - piece of gaming history.

-

Thanks to this work, LEGO Island now runs on over 10 platforms including Windows, Linux, macOS, iOS, - Android, Nintendo Switch, PlayStation Vita, and of course, web browsers. The web version uses the - original, unmodified Interleaf streaming code, enabling progressive content loading just like the - original CD-ROM.

-

Our goal is to make this classic accessible to everyone. The project is still in development, so you - may encounter bugs. Your patience and feedback are greatly appreciated!

+

Play the classic 1997 LEGO Island — right in your browser. This is a faithful recreation of the + original PC game, rebuilt with Emscripten and WebAssembly to run on modern devices without any + installation.

+

This project was made possible by the LEGO Island decompilation, which achieved a complete, + byte-accurate reconstruction of the original source code. That work was then transformed into a + portable version that replaced every Windows dependency with + modern, cross-platform alternatives — from graphics and audio to input and configuration.

+

Thanks to years of effort from many dedicated contributors, LEGO Island now runs on over 10 platforms + including Windows, Linux, macOS, iOS, Android, Nintendo Switch, PlayStation Vita, and the web. The + browser version even uses the original Interleaf streaming code, progressively loading content just + like the 1997 CD-ROM.

+

Our goal is to make this classic accessible to everyone. The project is still in active development, + so you may encounter the occasional bug — your patience and feedback are greatly appreciated!

@@ -198,7 +200,7 @@

Input Methods

-

The game supports multiple ways to play. Visit the Configure page to adjust your control preferences.

+

The game supports multiple ways to play. Visit the Configure page to adjust your control preferences.

  • Keyboard & Mouse — Traditional desktop controls using arrow keys or WASD
  • Gamepad — Controller support with analog sticks and D-pad
  • @@ -208,14 +210,14 @@

    Audio

    -

    Audio hardware is recommended for the full experience. If the game is silent, click the mute icon - on the animated intro to enable sound. Modern browsers require user interaction before playing audio.

    +

    If the game is silent, click the mute icon on the animated intro to enable sound — + browsers require a user interaction before playing audio.

    Storage & Network

    The game streams approximately 25MB of data on first load (more with extensions enabled). - For offline play, you can install the full game (about 550MB) via the Configure menu. + For offline play, you can install the full game (about 550MB) via the Configure menu. A stable internet connection is recommended for initial loading.

    @@ -225,7 +227,7 @@
  • Close other browser tabs to free up memory
  • Use hardware acceleration (enabled by default in most browsers)
  • On mobile, ensure your device isn't in low-power mode
  • -
  • If experiencing lag, try reducing the resolution in Configure
  • +
  • If experiencing lag, try reducing the resolution in Configure
@@ -252,7 +254,7 @@
-

The original 15-page instruction manual from the 1997 CD-ROM release.

+

The original comic-style instruction manual from the 1997 CD-ROM release.

Open Manual in New Tab
@@ -326,3 +328,296 @@
+ + diff --git a/src/lib/SaveEditorPage.svelte b/src/lib/SaveEditorPage.svelte index da40ec5..04170e1 100644 --- a/src/lib/SaveEditorPage.svelte +++ b/src/lib/SaveEditorPage.svelte @@ -1,6 +1,7 @@ + +
+ +
+ {#if !error} +
+

{title || '\u00A0'}

+
+ {#if participants.length > 0} + {#each participants as p, idx} + {#if idx > 0}·{/if} + {p.displayName} + as {ActorDisplayNames[p.charIndex] || `#${p.charIndex}`} + + {/each} + {#if sceneTimestamp} + · + {formatDateTime(sceneTimestamp)} + {/if} + {:else} +   + {/if} +
+
+ {/if} + +
+ {#if error} +
+ +

{error}

+

This memory may have been deleted or the link could be invalid. Try browsing existing memories or create new ones by playing with others!

+ { e.preventDefault(); navigateTo('memories'); }}>Back to Memories +
+ {:else if $currentPage === 'scene-player'} + + {#if loading || audioBlocked} + +
+ {#if audioBlocked} +
+ +
+ {:else} +
+ {/if} +
+ {/if} + {/if} +
+ + {#if !error} +
+ + + +
+
+
+ + {formatTime(elapsed)} / {formatTime(duration)} + + + + {#if shareUrl} + + + {/if} +
+ {/if} +
+
+ + diff --git a/src/lib/ShareLinkButton.svelte b/src/lib/ShareLinkButton.svelte new file mode 100644 index 0000000..fc4462c --- /dev/null +++ b/src/lib/ShareLinkButton.svelte @@ -0,0 +1,114 @@ + + + + + diff --git a/src/lib/SignInModal.svelte b/src/lib/SignInModal.svelte new file mode 100644 index 0000000..67af183 --- /dev/null +++ b/src/lib/SignInModal.svelte @@ -0,0 +1,261 @@ + + + + +{#if open} + + +{/if} + + diff --git a/src/lib/TopContent.svelte b/src/lib/TopContent.svelte index c12e910..b043285 100644 --- a/src/lib/TopContent.svelte +++ b/src/lib/TopContent.svelte @@ -90,3 +90,25 @@ >
+ + diff --git a/src/lib/WhatsNewBanner.svelte b/src/lib/WhatsNewBanner.svelte new file mode 100644 index 0000000..d42c561 --- /dev/null +++ b/src/lib/WhatsNewBanner.svelte @@ -0,0 +1,138 @@ + + +{#if visible && $currentPage === 'main' && !$gameRunning} + +{/if} + + diff --git a/src/lib/config/ExtrasTab.svelte b/src/lib/config/ExtrasTab.svelte index e797204..3c1474a 100644 --- a/src/lib/config/ExtrasTab.svelte +++ b/src/lib/config/ExtrasTab.svelte @@ -1,6 +1,6 @@
@@ -43,6 +37,10 @@ ?Plays the extended / "uncut" Bad Ending animation as found in beta versions of the game upon failing to catch the Brickster.
+
+ + ?Switches to a third-person camera that follows your character around LEGO Island. +
@@ -82,7 +80,66 @@ - + + diff --git a/src/lib/icons/DiscordIcon.svelte b/src/lib/icons/DiscordIcon.svelte new file mode 100644 index 0000000..a5f020f --- /dev/null +++ b/src/lib/icons/DiscordIcon.svelte @@ -0,0 +1,8 @@ + + + + + diff --git a/src/lib/multiplayer/AnimationLegend.svelte b/src/lib/multiplayer/AnimationLegend.svelte new file mode 100644 index 0000000..a784aba --- /dev/null +++ b/src/lib/multiplayer/AnimationLegend.svelte @@ -0,0 +1,208 @@ + + +
+
+
+ Infomaniac + Animations are scenes you perform with other players. Completed ones are saved to Nick Brick's Memories — the progress bar tracks your area completion. +
+ +
+
+ Tabs: area = location scenes, act = character interactions. +
+
+ +
+
+ + Green — You can start this +
+
+ + Blue pulse — Someone started it, join in +
+
+ + Yellow — You joined, waiting for others +
+
+
+ + + + + Dots = roles. Green = a player can fill it +
+
+ + You've completed this before +
+
+
+ + +
+ + diff --git a/src/lib/multiplayer/AnimationPanel.svelte b/src/lib/multiplayer/AnimationPanel.svelte new file mode 100644 index 0000000..d49f2c0 --- /dev/null +++ b/src/lib/multiplayer/AnimationPanel.svelte @@ -0,0 +1,354 @@ + + +
document.getElementById('canvas')?.focus()}> + +
+ {#each sorted as anim (anim.animIndex)} + + {:else} +
Explore the island to discover scenes
+ {/each} +
+
+ + diff --git a/src/lib/multiplayer/AnimationTabs.svelte b/src/lib/multiplayer/AnimationTabs.svelte new file mode 100644 index 0000000..ee20e48 --- /dev/null +++ b/src/lib/multiplayer/AnimationTabs.svelte @@ -0,0 +1,184 @@ + + +
+
+ + + +
+ +
+ +
+
+ {#if activeProgress} +
+
+
+
+ {activeProgress.unlocked}/{activeProgress.total} +
+ {/if} + +
+
+ + diff --git a/src/lib/multiplayer/CountdownOverlay.svelte b/src/lib/multiplayer/CountdownOverlay.svelte new file mode 100644 index 0000000..fb0b76f --- /dev/null +++ b/src/lib/multiplayer/CountdownOverlay.svelte @@ -0,0 +1,105 @@ + + +{#if countdownAnim && displayNumber > 0} +
+ {#key animKey} + {displayNumber} + {/key} + {#if animName} + {animName} + {/if} +
+{/if} + + diff --git a/src/lib/multiplayer/EmoteButton.svelte b/src/lib/multiplayer/EmoteButton.svelte new file mode 100644 index 0000000..b4aa2d4 --- /dev/null +++ b/src/lib/multiplayer/EmoteButton.svelte @@ -0,0 +1,70 @@ + + + + + diff --git a/src/lib/multiplayer/EmoteFan.svelte b/src/lib/multiplayer/EmoteFan.svelte new file mode 100644 index 0000000..68bfe94 --- /dev/null +++ b/src/lib/multiplayer/EmoteFan.svelte @@ -0,0 +1,318 @@ + + +
+ {#each stylePopovers as pop, i} +
+ + +
+ +
+
+
+ {/each} + + +
+ + +
+ +
+
+
+ + +
+ + +
+ filteredAnims = a} + {showLegend} onToggleLegend={toggleLegend} {clusterProgress}> +
+ {#key animTab} + + {/key} +
+
+
+
+
+
+ + diff --git a/src/lib/multiplayer/HotbarPopover.svelte b/src/lib/multiplayer/HotbarPopover.svelte new file mode 100644 index 0000000..4267d7e --- /dev/null +++ b/src/lib/multiplayer/HotbarPopover.svelte @@ -0,0 +1,101 @@ + + +{#if open} +
+ +
+{/if} + + diff --git a/src/lib/multiplayer/MultiplayerFab.svelte b/src/lib/multiplayer/MultiplayerFab.svelte new file mode 100644 index 0000000..e01e37a --- /dev/null +++ b/src/lib/multiplayer/MultiplayerFab.svelte @@ -0,0 +1,184 @@ + + + + + diff --git a/src/lib/multiplayer/MultiplayerHotbar.svelte b/src/lib/multiplayer/MultiplayerHotbar.svelte new file mode 100644 index 0000000..7de5593 --- /dev/null +++ b/src/lib/multiplayer/MultiplayerHotbar.svelte @@ -0,0 +1,356 @@ + + + +
+ {#if shown} +
+ {#each styleDropdowns as dd (dd.key)} +
+ + +
+
+
+ {/each} + +
+ +
+ + {#if canFastJoin} + + {/if} + +
+ filteredAnims = a} + {showLegend} onToggleLegend={toggleLegend} {clusterProgress}> + {#key animTab} + + {/key} + +
+
+
+ +
+ +
+ + +
+
+
+ + + + {#if playerCount != null} + {playerCount} + {/if} +
+ {:else if visible} + +
+ {/if} +
+ + diff --git a/src/lib/multiplayer/MultiplayerOverlay.svelte b/src/lib/multiplayer/MultiplayerOverlay.svelte new file mode 100644 index 0000000..1de54c5 --- /dev/null +++ b/src/lib/multiplayer/MultiplayerOverlay.svelte @@ -0,0 +1,323 @@ + + +{#if $gameRunning && $multiplayerRoom} + +
+ {#if isDesktop} + + + + + {#if disabled} +
+ {#if reconnecting} + + Reconnecting + {:else if connectionFailed} + + Disconnected + {:else} + + {#if $multiplayerPlayerCount != null} + {$multiplayerPlayerCount} + {/if} + {/if} +
+ {/if} + {:else} + + + + {#if !disabled} + + {/if} + {/if} + +
+{/if} + + diff --git a/src/lib/multiplayer/PeopleIcon.svelte b/src/lib/multiplayer/PeopleIcon.svelte new file mode 100644 index 0000000..a104afa --- /dev/null +++ b/src/lib/multiplayer/PeopleIcon.svelte @@ -0,0 +1,10 @@ + + + + + + + + diff --git a/src/lib/multiplayer/SettingsPanel.svelte b/src/lib/multiplayer/SettingsPanel.svelte new file mode 100644 index 0000000..f02f7c4 --- /dev/null +++ b/src/lib/multiplayer/SettingsPanel.svelte @@ -0,0 +1,104 @@ + + +
+ {#each settingsItems as item} + + {/each} +
+ +
+ + diff --git a/src/lib/multiplayer/ShareButton.svelte b/src/lib/multiplayer/ShareButton.svelte new file mode 100644 index 0000000..72b79f3 --- /dev/null +++ b/src/lib/multiplayer/ShareButton.svelte @@ -0,0 +1,57 @@ + + + + + diff --git a/src/lib/multiplayer/StyleGrid.svelte b/src/lib/multiplayer/StyleGrid.svelte new file mode 100644 index 0000000..23ca5c0 --- /dev/null +++ b/src/lib/multiplayer/StyleGrid.svelte @@ -0,0 +1,74 @@ + + +
+ {#each options as opt, i} + + {/each} +
+ + diff --git a/src/lib/multiplayer/animationCatalog.js b/src/lib/multiplayer/animationCatalog.js new file mode 100644 index 0000000..01fdfd7 --- /dev/null +++ b/src/lib/multiplayer/animationCatalog.js @@ -0,0 +1,830 @@ +import titlesData from '../../data/animation-titles.json'; + +/** + * Human-readable animation titles keyed by animIndex (world-encoded). + * ACT1: animIndex 0-368, ACT2: 16384+, ACT3: 32768+ + */ +export const AnimationTitles = Object.freeze(titlesData); + +/** + * Maps animIndex to the SI file object ID. + * Needed for SI file references and future use. + */ +export const AnimationObjectIds = Object.freeze({ + // ── ACT1 ── + 0: 500, + 1: 501, + 2: 502, + 3: 503, + 4: 504, + 5: 505, + 6: 506, + 7: 507, + 8: 508, + 9: 509, + 10: 510, + 11: 511, + 12: 512, + 13: 513, + 14: 514, + 15: 515, + 16: 516, + 17: 517, + 18: 518, + 19: 519, + 20: 520, + 21: 521, + 22: 522, + 23: 523, + 24: 524, + 25: 525, + 26: 526, + 27: 527, + 28: 528, + 29: 529, + 30: 530, + 31: 531, + 32: 532, + 33: 533, + 34: 534, + 35: 535, + 36: 536, + 37: 537, + 38: 538, + 39: 539, + 40: 540, + 41: 541, + 42: 542, + 43: 543, + 44: 544, + 45: 545, + 46: 546, + 47: 547, + 48: 548, + 49: 549, + 50: 550, + 51: 551, + 52: 552, + 53: 553, + 54: 554, + 55: 555, + 56: 556, + 57: 557, + 58: 558, + 59: 559, + 60: 560, + 61: 561, + 62: 562, + 63: 563, + 64: 564, + 65: 565, + 66: 566, + 67: 567, + 68: 568, + 69: 569, + 70: 570, + 71: 571, + 72: 572, + 73: 573, + 74: 574, + 75: 575, + 76: 576, + 77: 577, + 78: 578, + 79: 579, + 80: 580, + 81: 581, + 82: 582, + 83: 583, + 84: 584, + 85: 585, + 86: 586, + 87: 587, + 88: 588, + 89: 589, + 90: 590, + 91: 591, + 92: 592, + 93: 593, + 94: 594, + 95: 595, + 96: 596, + 97: 597, + 98: 598, + 99: 599, + 100: 600, + 101: 601, + 102: 602, + 103: 603, + 104: 604, + 105: 605, + 106: 606, + 107: 607, + 108: 608, + 109: 609, + 110: 610, + 111: 611, + 112: 612, + 113: 613, + 114: 614, + 115: 615, + 116: 616, + 117: 617, + 118: 618, + 119: 619, + 120: 620, + 121: 621, + 122: 622, + 123: 623, + 124: 624, + 125: 625, + 126: 626, + 127: 627, + 128: 628, + 129: 629, + 130: 630, + 131: 631, + 132: 632, + 133: 633, + 134: 634, + 135: 635, + 136: 636, + 137: 637, + 138: 638, + 139: 639, + 140: 640, + 141: 641, + 142: 642, + 143: 643, + 144: 644, + 145: 645, + 146: 646, + 147: 647, + 148: 648, + 149: 649, + 150: 650, + 151: 651, + 152: 652, + 153: 653, + 154: 654, + 155: 655, + 156: 656, + 157: 657, + 158: 658, + 159: 659, + 160: 660, + 161: 661, + 162: 662, + 163: 663, + 164: 664, + 165: 665, + 166: 666, + 167: 667, + 168: 668, + 169: 669, + 170: 670, + 171: 671, + 172: 672, + 173: 673, + 174: 674, + 175: 675, + 176: 676, + 177: 677, + 178: 678, + 179: 679, + 180: 680, + 181: 681, + 182: 682, + 183: 683, + 184: 684, + 185: 685, + 186: 686, + 187: 687, + 188: 688, + 189: 689, + 190: 690, + 191: 691, + 192: 692, + 193: 693, + 194: 694, + 195: 695, + 196: 696, + 197: 697, + 198: 698, + 199: 699, + 200: 700, + 201: 701, + 202: 702, + 203: 703, + 204: 704, + 205: 705, + 206: 706, + 207: 707, + 208: 708, + 209: 709, + 210: 710, + 211: 711, + 212: 712, + 213: 713, + 214: 714, + 215: 715, + 216: 716, + 217: 717, + 218: 718, + 219: 719, + 220: 720, + 221: 721, + 222: 722, + 223: 723, + 224: 724, + 225: 725, + 226: 726, + 227: 727, + 228: 728, + 229: 729, + 230: 730, + 231: 731, + 232: 732, + 233: 733, + 234: 734, + 235: 735, + 236: 736, + 237: 737, + 238: 738, + 239: 739, + 240: 740, + 241: 741, + 242: 742, + 243: 743, + 244: 744, + 245: 745, + 246: 746, + 247: 747, + 248: 748, + 249: 749, + 250: 750, + 251: 751, + 252: 752, + 253: 753, + 254: 754, + 255: 755, + 256: 756, + 257: 757, + 258: 758, + 259: 759, + 260: 760, + 261: 761, + 262: 762, + 263: 763, + 264: 764, + 265: 765, + 266: 766, + 267: 767, + 268: 768, + 269: 769, + 270: 770, + 271: 771, + 272: 772, + 273: 773, + 274: 774, + 275: 775, + 276: 776, + 277: 777, + 278: 778, + 279: 779, + 280: 780, + 281: 781, + 282: 782, + 283: 783, + 284: 784, + 285: 785, + 286: 786, + 287: 787, + 288: 788, + 289: 789, + 290: 790, + 291: 791, + 292: 792, + 293: 793, + 294: 794, + 295: 795, + 296: 796, + 297: 797, + 298: 798, + 299: 799, + 356: 856, + 357: 857, + 358: 858, + 359: 859, + 360: 860, + 361: 861, + 362: 862, + 363: 863, + 364: 864, + 365: 865, + 366: 866, + 367: 867, + 368: 868, + // ── ACT2 ── + 16384: 500, + 16385: 501, + 16386: 502, + 16387: 503, + 16388: 504, + 16389: 505, + 16390: 506, + 16391: 507, + 16392: 508, + 16393: 509, + 16394: 510, + 16395: 511, + 16396: 512, + 16397: 513, + 16398: 514, + 16399: 515, + 16400: 516, + 16401: 517, + 16402: 518, + 16403: 519, + 16404: 520, + 16405: 521, + 16406: 522, + 16407: 523, + 16408: 524, + 16409: 525, + 16410: 526, + 16411: 527, + 16412: 528, + 16413: 529, + 16414: 530, + 16415: 531, + 16416: 532, + 16417: 533, + 16418: 534, + 16419: 535, + 16420: 536, + 16421: 537, + 16422: 538, + 16423: 539, + 16424: 540, + 16425: 541, + 16426: 542, + 16427: 543, + 16428: 544, + 16429: 545, + 16430: 546, + 16431: 547, + 16432: 548, + 16433: 549, + 16434: 550, + 16435: 551, + 16436: 552, + 16437: 553, + 16438: 554, + 16439: 555, + 16440: 556, + 16441: 557, + 16442: 558, + 16443: 559, + 16444: 560, + 16445: 561, + 16446: 562, + 16447: 563, + 16448: 564, + 16449: 565, + 16450: 566, + 16451: 567, + 16452: 568, + 16453: 569, + 16454: 570, + 16455: 571, + 16456: 572, + 16457: 573, + 16458: 574, + 16459: 575, + 16460: 576, + 16461: 577, + 16462: 578, + 16463: 579, + 16464: 580, + 16465: 581, + 16466: 582, + // ── ACT3 ── + 32768: 500, + 32769: 501, + 32770: 502, +}); + +/** + * Maps animIndex to in-game location ID. + * Animations not listed here have no fixed location (NPC animations). + */ +const AnimationLocations = Object.freeze({ + // ── ACT1 ── + 0: 1, + 1: 1, + 2: 1, + 3: 2, + 4: 3, + 5: 4, + 6: 4, + 7: 4, + 8: 8, + 9: 8, + 10: 8, + 11: 8, + 12: 8, + 13: 8, + 14: 8, + 15: 11, + 16: 11, + 17: 11, + 18: 11, + 19: 11, + 20: 11, + 21: 11, + 22: 14, + 23: 14, + 24: 17, + 25: 18, + 26: 18, + 27: 18, + 28: 18, + 29: 18, + 30: 18, + 31: 18, + 32: 18, + 33: 18, + 34: 18, + 35: 18, + 36: 18, + 37: 18, + 38: 18, + 39: 18, + 40: 18, + 41: 18, + 42: 18, + 43: 23, + 44: 23, + 45: 23, + 46: 23, + 47: 23, + 48: 23, + 49: 23, + 50: 25, + 51: 68, + 52: 68, + 53: 68, + 54: 68, + 55: 68, + 56: 68, + 57: 68, + 58: 27, + 59: 29, + 60: 29, + 61: 31, + 62: 32, + 63: 34, + 64: 35, + 65: 36, + 66: 36, + 67: 38, + 68: 38, + 69: 38, + 70: 38, + 71: 38, + 72: 38, + 73: 38, + 74: 38, + 75: 38, + 76: 38, + 77: 38, + 78: 38, + 79: 38, + 80: 38, + 81: 38, + 82: 38, + 83: 38, + 84: 38, + 85: 38, + 86: 38, + 87: 38, + 88: 38, + 89: 38, + 90: 38, + 91: 38, + 92: 38, + 93: 38, + 94: 38, + 95: 38, + 96: 38, + 97: 38, + 98: 39, + 99: 39, + 100: 40, + 101: 40, + 102: 40, + 103: 42, + 104: 42, + 105: 42, + 106: 42, + 107: 42, + 108: 42, + 109: 46, + 110: 48, + 111: 49, + 112: 51, + 113: 51, + 114: 51, + 115: 51, + 116: 51, + 117: 56, + 118: 56, + 119: 56, + 120: 56, + 121: 57, + 180: 24, + 181: 10, + 182: 52, + 183: 35, + 184: 11, + 185: 11, + 186: 11, + 187: 12, + 188: 34, + 189: 34, + 190: 34, + 191: 34, + 192: 34, + 193: 38, + 194: 38, + 195: 38, + 196: 38, + 197: 38, + 198: 38, + 199: 38, + 200: 38, + 201: 38, + 202: 38, + 203: 38, + 204: 38, + 205: 38, + 206: 38, + 207: 38, + 208: 38, + 209: 65, + 210: 65, + 211: 65, + 212: 34, + 213: 34, + 214: 34, + 215: 39, + 216: 39, + 217: 39, + 218: 39, + 219: 39, + 220: 39, + 221: 40, + 222: 40, + 223: 40, + 224: 8, + 225: 8, + 226: 8, + 227: 38, + 228: 38, + 229: 38, + 230: 38, + 231: 38, + 232: 38, + 233: 38, + 234: 38, + 235: 38, + 236: 38, + 237: 38, + 238: 38, + 239: 51, + 240: 51, + 241: 51, + 242: 11, + 243: 11, + 244: 11, + 245: 38, + 246: 38, + 247: 38, + 248: 38, + 249: 38, + 250: 38, + 251: 38, + 252: 38, + 253: 38, + 254: 11, + 255: 18, + 256: 18, + 257: 18, + 258: 18, + 259: 18, + 260: 18, + 261: 38, + 262: 38, + 263: 38, + 264: 38, + 265: 38, + 266: 38, + 267: 9, + 268: 9, + 269: 9, + 270: 9, + 271: 9, + 272: 9, + 273: 9, + 274: 9, + 275: 9, + 276: 9, + 277: 9, + 278: 9, + 279: 9, + 280: 9, + 281: 9, + 282: 9, + 283: 9, + 284: 9, + 285: 9, + 286: 9, + 287: 55, + 288: 55, + 289: 55, + 290: 55, + 291: 55, + 292: 55, + 293: 43, + 294: 43, + 295: 43, + 296: 43, + 297: 43, + 298: 43, + 299: 43, + 360: 25, + 361: 25, + 362: 25, + 363: 25, + 364: 54, + 365: 54, + 366: 54, + 367: 54, + 368: 56, + // ── ACT2 ── + 16384: 2, + 16385: 2, + 16386: 8, + 16387: 8, + 16388: 9, + 16389: 9, + 16390: 18, + 16391: 18, + 16392: 18, + 16393: 18, + 16394: 19, + 16395: 19, + 16396: 19, + 16397: 19, + 16398: 23, + 16399: 23, + 16400: 23, + 16401: 24, + 16402: 26, + 16403: 26, + 16404: 26, + 16405: 31, + 16406: 34, + 16407: 36, + 16408: 38, + 16409: 38, + 16410: 39, + 16411: 50, + 16412: 50, + 16413: 51, + 16414: 51, + 16415: 51, + // ── ACT3 ── + 32768: 22, + 32769: 22, + 32770: 22, +}); + +/** + * Maps in-game location IDs to human-readable area labels. + * Multiple location IDs can map to the same area (different camera angles). + */ +const LocationLabels = Object.freeze({ + 1: "Bank", + 2: "Bank", + 3: "Bank", + 4: "Bank", + 8: "Gas Station", + 9: "Gas Station", + 10: "Gas Station", + 11: "Hospital", + 12: "Hospital", + 14: "Hospital", + 17: "Island", + 18: "Jail", + 19: "Jail", + 23: "Beach", + 24: "Beach", + 25: "Beach", + 27: "Island", + 29: "Island", + 31: "Island", + 32: "Island", + 34: "Police Station", + 35: "Police Station", + 36: "Police Station", + 38: "Pizzeria", + 39: "Pizzeria", + 40: "Pizzeria", + 42: "Pizzeria", + 43: "Pizzeria", + 46: "Island", + 48: "Island", + 49: "Island", + 51: "Racetrack", + 52: "Racetrack", + 54: "Racetrack", + 55: "Racetrack", + 56: "Racetrack", + 57: "Island", + 65: "Island", + 68: "Beach", + 22: "Jail", + 26: "Beach", + 50: "Island", +}); + +/** All animation indices exposed by the feature (cam_anims + npc_anims). */ +export const CATALOG_ANIM_INDICES = Object.freeze([ + // ACT1 + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, + 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, + 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, + 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, + 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, + 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, + 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, + 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, + 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, + 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, + 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, + 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, + 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + // ACT2 + 16384, 16385, 16386, 16387, 16388, 16389, 16390, 16391, 16392, 16393, 16394, 16395, 16396, 16397, 16398, + 16399, 16400, 16401, 16402, 16403, 16404, 16405, 16406, 16407, 16408, 16409, 16410, 16411, 16412, 16413, + 16414, 16415, 16416, 16417, 16418, 16419, 16420, 16421, 16422, 16423, 16424, 16425, 16426, 16427, 16428, + 16429, 16430, 16431, 16432, 16433, 16434, 16435, 16436, 16437, 16438, 16439, 16440, 16441, 16442, 16443, + 16444, 16445, 16446, 16447, 16448, 16449, 16450, 16451, 16452, 16453, 16454, 16455, 16456, 16457, 16458, + 16459, 16460, 16461, 16462, 16463, 16464, 16465, 16466, + // ACT3 + 32768, 32769, 32770, +]); + +export const TOTAL_ANIMATIONS = CATALOG_ANIM_INDICES.length; + +/** Pre-computed map: cluster label → array of animIndices belonging to that cluster. */ +export const ClusterAnimIndices = (() => { + const map = new Map(); + for (const animIndex of CATALOG_ANIM_INDICES) { + const locId = AnimationLocations[animIndex]; + const label = locId != null ? (LocationLabels[locId] || `Location ${locId}`) : 'Island'; + if (!map.has(label)) map.set(label, []); + map.get(label).push(animIndex); + } + return map; +})(); + +/** + * Resolve an array of location IDs (from the backend) to a single cluster label. + * Returns the label string, or null if no valid locations / multiple clusters. + */ +export function resolveCluster(locations) { + if (!locations || locations.length === 0) return null; + const labels = new Set(); + for (const locId of locations) { + const label = LocationLabels[locId]; + if (label) labels.add(label); + } + if (labels.size === 0) return null; + if (labels.size > 1) { + console.error('[Cluster] Multiple cluster labels resolved:', [...labels]); + return null; + } + return labels.values().next().value; +} + diff --git a/src/lib/multiplayer/constants.js b/src/lib/multiplayer/constants.js new file mode 100644 index 0000000..52cffd8 --- /dev/null +++ b/src/lib/multiplayer/constants.js @@ -0,0 +1,62 @@ +export const walkOptions = [ + { emoji: '\u{1F6B6}', label: 'Normal', id: 0 }, + { emoji: '\u{1F3C3}', label: 'Charging', id: 3 }, + { emoji: '\u{1F57A}', label: 'Joyful', id: 1 }, + { emoji: '\u{1F327}\u{FE0F}', label: 'Gloomy', id: 2 }, + { emoji: '\u{1F648}', label: 'Scared', id: 4 }, + { emoji: '\u{26A1}', label: 'Hyper', id: 5 } +]; + +export const idleOptions = [ + { emoji: '\u{1F343}', label: 'Sway', id: 0 }, + { emoji: '\u{1FAA9}', label: 'Groove', id: 1 }, + { emoji: '\u{1F64C}', label: 'Excited', id: 2 }, + { emoji: '\u{1F974}', label: 'Wobbly', id: 3 }, + { emoji: '\u{1F929}', label: 'Peppy', id: 4 }, + { emoji: '\u{1F9B9}', label: 'Brickster', id: 5 } +]; + +export const emoteOptions = [ + { emoji: '\u{1F44B}', label: 'Wave' }, + { emoji: '\u{1F3A9}', label: 'Hat' }, + { emoji: '\u{1F9E9}', label: 'Morph' }, + { emoji: '\u{1F440}', label: 'Look' }, + { emoji: '\u{1F939}', label: 'Headless' }, + { emoji: '\u{1F355}', label: 'Toss' } +]; + +// Pick the Scene/Act tab with the most relevant activity. +// Priority: playing > countdown > gathering > joinable > eligible. +export function bestAnimTab(sceneAnims, npcAnims, currentTab) { + function score(list) { + const active = list.find(x => x.localInSession && x.sessionState >= 1); + if (active) return active.sessionState + 2; + if (list.find(x => x.sessionState >= 1 && x.canJoin)) return 2; + if (list.find(x => x.eligible && x.sessionState === 0)) return 1; + return 0; + } + const s = score(sceneAnims), a = score(npcAnims); + if (s === a) return currentTab; + return s > a ? 'scene' : 'act'; +} + +export const settingsItems = [ + { + icon: '', + label: 'Third-person camera', + key: 'thirdPersonCam', + toggle: () => { window.Module?._mp_toggle_third_person(); }, + }, + { + icon: '', + label: 'Name bubbles', + key: 'showNameBubbles', + toggle: () => { window.Module?._mp_toggle_name_bubbles(); }, + }, + { + icon: '', + label: 'Allow customization', + key: 'allowCustomize', + toggle: () => { window.Module?._mp_toggle_allow_customize(); }, + }, +]; diff --git a/src/lib/save-editor/ActorEditor.svelte b/src/lib/save-editor/ActorEditor.svelte index b98f1d9..c3b73cf 100644 --- a/src/lib/save-editor/ActorEditor.svelte +++ b/src/lib/save-editor/ActorEditor.svelte @@ -1,14 +1,12 @@ - renderer?.resetView()}> -
- - - {#if loading} -
-
-
- {:else if error} -
{error}
- {/if} -
- -
-
- -
- {actorIndex + 1} / {ActorInfoInit.length} - {actorName} -
- -
+ renderer?.resetView()} + onCanvasReady={(el) => canvas = el} + {loading} + {error} + onCanvasClick={handleCanvasClick} + canvasLabel="Customize actor" + onPrev={prevActor} + onNext={nextActor} + indexDisplay="{actorIndex + 1} / {ActorInfoInit.length}" + nameDisplay={actorName} + showReset={!isDefault && !loading && !error} + onReset={resetActor} +> + {#if vehicleInfo} {/if} -
- -
- {#if !isDefault && !loading && !error} - - {/if} -
-
+ + diff --git a/src/lib/save-editor/BuildingEditor.svelte b/src/lib/save-editor/BuildingEditor.svelte index 10e87ac..578da97 100644 --- a/src/lib/save-editor/BuildingEditor.svelte +++ b/src/lib/save-editor/BuildingEditor.svelte @@ -1,7 +1,8 @@ - renderer?.resetView()}> -
- - - {#if loading} -
-
-
- {:else if error} -
{error}
- {/if} -
- -
-
- -
- {buildingIndex + 1} / {BUILDING_COUNT} - {displayName}{variantLabel ? ` (${variantLabel})` : ''} -
- -
-
- -
- {#if !isDefault && !loading && !error} - - {/if} -
-
+ renderer?.resetView()} + onCanvasReady={(el) => canvas = el} + {loading} + {error} + onCanvasClick={handleCanvasClick} + canvasLabel="Customize building" + onPrev={prevBuilding} + onNext={nextBuilding} + indexDisplay="{buildingIndex + 1} / {BUILDING_COUNT}" + nameDisplay="{displayName}{variantLabel ? ` (${variantLabel})` : ''}" + showReset={!isDefault && !loading && !error} + onReset={resetBuilding} +/> diff --git a/src/lib/save-editor/EditorPreview.svelte b/src/lib/save-editor/EditorPreview.svelte new file mode 100644 index 0000000..238a87c --- /dev/null +++ b/src/lib/save-editor/EditorPreview.svelte @@ -0,0 +1,71 @@ + + + +
+ + + {#if loading} +
+
+
+ {:else if error} +
{error}
+ {:else if secondaryError} +
{secondaryError}
+ {/if} +
+ +
+
+ +
+ {indexDisplay} + {nameDisplay} +
+ +
+ +
+ +
+ {#if showReset} + + {/if} +
+
diff --git a/src/lib/save-editor/LightPositionEditor.svelte b/src/lib/save-editor/LightPositionEditor.svelte index 9957cab..a254e04 100644 --- a/src/lib/save-editor/LightPositionEditor.svelte +++ b/src/lib/save-editor/LightPositionEditor.svelte @@ -106,7 +106,6 @@ width: 48px; height: 48px; display: block; - image-rendering: pixelated; } @media (max-width: 400px) { diff --git a/src/lib/save-editor/PlantEditor.svelte b/src/lib/save-editor/PlantEditor.svelte index 099f151..2d9599e 100644 --- a/src/lib/save-editor/PlantEditor.svelte +++ b/src/lib/save-editor/PlantEditor.svelte @@ -1,7 +1,8 @@ - renderer?.resetView()}> -
- - - {#if loading} -
-
-
- {:else if error} -
{error}
- {/if} -
- -
-
- -
- {plantIndex + 1} / {PLANT_COUNT} - {colorName} {variantName} -
- -
-
- -
- {#if !isDefault && !loading && !error} - - {/if} -
-
+ renderer?.resetView()} + onCanvasReady={(el) => canvas = el} + {loading} + {error} + onCanvasClick={handleCanvasClick} + canvasLabel="Customize plant" + onPrev={prevPlant} + onNext={nextPlant} + indexDisplay="{plantIndex + 1} / {PLANT_COUNT}" + nameDisplay="{colorName} {variantName}" + showReset={!isDefault && !loading && !error} + onReset={resetPlant} +/> diff --git a/src/lib/save-editor/ScoreCube.svelte b/src/lib/save-editor/ScoreCube.svelte index 8d620e7..2fc885f 100644 --- a/src/lib/save-editor/ScoreCube.svelte +++ b/src/lib/save-editor/ScoreCube.svelte @@ -1,7 +1,8 @@ - +