From a61f3a9c333941449b22b3dd2702fad46848c2b1 Mon Sep 17 00:00:00 2001 From: droideparanoico Date: Thu, 11 Jun 2026 17:28:46 +0200 Subject: [PATCH] Initial commit --- .dockerignore | 15 + .env.example | 10 + .github/workflows/docker-publish.yml | 45 + .gitignore | 42 + Dockerfile | 29 + LICENSE | 21 + README.md | 134 + docker-compose.yml | 14 + frontend/index.html | 16 + frontend/package-lock.json | 3087 +++++++++++++++++ frontend/package.json | 21 + frontend/src/App.svelte | 71 + frontend/src/app.css | 250 ++ frontend/src/lib/GameCard.svelte | 118 + frontend/src/lib/Header.svelte | 72 + frontend/src/lib/__tests__/GameCard.test.js | 71 + frontend/src/lib/__tests__/api.test.js | 68 + frontend/src/lib/__tests__/router.test.js | 33 + frontend/src/lib/api.js | 118 + frontend/src/lib/router.js | 9 + frontend/src/main.js | 8 + frontend/src/pages/GameDetail.svelte | 714 ++++ frontend/src/pages/Library.svelte | 850 +++++ frontend/src/pages/Play.svelte | 300 ++ .../src/pages/__tests__/GameDetail.test.js | 185 + frontend/src/pages/__tests__/Library.test.js | 143 + frontend/src/pages/__tests__/Play.test.js | 77 + frontend/svelte.config.js | 5 + frontend/vite.config.js | 27 + images/game.jpeg | Bin 0 -> 268547 bytes images/library.jpeg | Bin 0 -> 321347 bytes pom.xml | 155 + .../java/org/dostalgia/CdImageService.java | 106 + .../java/org/dostalgia/ConfigBuilder.java | 223 ++ .../java/org/dostalgia/ConfigPatcher.java | 152 + .../org/dostalgia/ExecutableDetector.java | 137 + src/main/java/org/dostalgia/FileUtils.java | 60 + src/main/java/org/dostalgia/Game.java | 126 + .../java/org/dostalgia/GameController.java | 183 + src/main/java/org/dostalgia/GameService.java | 265 ++ src/main/java/org/dostalgia/GameStore.java | 18 + .../java/org/dostalgia/IgdbController.java | 84 + src/main/java/org/dostalgia/IgdbService.java | 352 ++ .../java/org/dostalgia/PlatformDetector.java | 65 + .../java/org/dostalgia/StaticResource.java | 78 + .../java/org/dostalgia/UploadResource.java | 222 ++ src/main/java/org/dostalgia/ZipService.java | 161 + src/main/resources/application.properties | 16 + .../org/dostalgia/CdImageServiceTest.java | 106 + .../java/org/dostalgia/ConfigBuilderTest.java | 80 + .../java/org/dostalgia/ConfigPatcherTest.java | 114 + .../org/dostalgia/ExecutableDetectorTest.java | 209 ++ .../java/org/dostalgia/FileUtilsTest.java | 94 + .../java/org/dostalgia/GameServiceTest.java | 291 ++ src/test/java/org/dostalgia/GameTest.java | 154 + .../java/org/dostalgia/IgdbServiceTest.java | 265 ++ .../org/dostalgia/PlatformDetectorTest.java | 92 + .../org/dostalgia/StaticResourceTest.java | 198 ++ .../java/org/dostalgia/ZipServiceTest.java | 230 ++ 59 files changed, 10789 insertions(+) create mode 100644 .dockerignore create mode 100644 .env.example create mode 100644 .github/workflows/docker-publish.yml create mode 100644 .gitignore create mode 100644 Dockerfile create mode 100644 LICENSE create mode 100644 README.md create mode 100644 docker-compose.yml create mode 100644 frontend/index.html create mode 100644 frontend/package-lock.json create mode 100644 frontend/package.json create mode 100644 frontend/src/App.svelte create mode 100644 frontend/src/app.css create mode 100644 frontend/src/lib/GameCard.svelte create mode 100644 frontend/src/lib/Header.svelte create mode 100644 frontend/src/lib/__tests__/GameCard.test.js create mode 100644 frontend/src/lib/__tests__/api.test.js create mode 100644 frontend/src/lib/__tests__/router.test.js create mode 100644 frontend/src/lib/api.js create mode 100644 frontend/src/lib/router.js create mode 100644 frontend/src/main.js create mode 100644 frontend/src/pages/GameDetail.svelte create mode 100644 frontend/src/pages/Library.svelte create mode 100644 frontend/src/pages/Play.svelte create mode 100644 frontend/src/pages/__tests__/GameDetail.test.js create mode 100644 frontend/src/pages/__tests__/Library.test.js create mode 100644 frontend/src/pages/__tests__/Play.test.js create mode 100644 frontend/svelte.config.js create mode 100644 frontend/vite.config.js create mode 100644 images/game.jpeg create mode 100644 images/library.jpeg create mode 100644 pom.xml create mode 100644 src/main/java/org/dostalgia/CdImageService.java create mode 100644 src/main/java/org/dostalgia/ConfigBuilder.java create mode 100644 src/main/java/org/dostalgia/ConfigPatcher.java create mode 100644 src/main/java/org/dostalgia/ExecutableDetector.java create mode 100644 src/main/java/org/dostalgia/FileUtils.java create mode 100644 src/main/java/org/dostalgia/Game.java create mode 100644 src/main/java/org/dostalgia/GameController.java create mode 100644 src/main/java/org/dostalgia/GameService.java create mode 100644 src/main/java/org/dostalgia/GameStore.java create mode 100644 src/main/java/org/dostalgia/IgdbController.java create mode 100644 src/main/java/org/dostalgia/IgdbService.java create mode 100644 src/main/java/org/dostalgia/PlatformDetector.java create mode 100644 src/main/java/org/dostalgia/StaticResource.java create mode 100644 src/main/java/org/dostalgia/UploadResource.java create mode 100644 src/main/java/org/dostalgia/ZipService.java create mode 100644 src/main/resources/application.properties create mode 100644 src/test/java/org/dostalgia/CdImageServiceTest.java create mode 100644 src/test/java/org/dostalgia/ConfigBuilderTest.java create mode 100644 src/test/java/org/dostalgia/ConfigPatcherTest.java create mode 100644 src/test/java/org/dostalgia/ExecutableDetectorTest.java create mode 100644 src/test/java/org/dostalgia/FileUtilsTest.java create mode 100644 src/test/java/org/dostalgia/GameServiceTest.java create mode 100644 src/test/java/org/dostalgia/GameTest.java create mode 100644 src/test/java/org/dostalgia/IgdbServiceTest.java create mode 100644 src/test/java/org/dostalgia/PlatformDetectorTest.java create mode 100644 src/test/java/org/dostalgia/StaticResourceTest.java create mode 100644 src/test/java/org/dostalgia/ZipServiceTest.java diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..651a34e --- /dev/null +++ b/.dockerignore @@ -0,0 +1,15 @@ +# Prevent local build artifacts from leaking into Docker +node_modules/ +frontend/node_modules/ +dist/ +frontend/dist/ + +# Runtime data +data/ + +# IDE +.vscode/ +.idea/ + +# Binary +dostalgia diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..914d2b5 --- /dev/null +++ b/.env.example @@ -0,0 +1,10 @@ +# DOStalgia — Environment Configuration +# Copy this file to .env and fill in your values: +# cp .env.example .env + +# Twitch Client ID for IGDB metadata auto-scrape. +# Get yours at https://dev.twitch.tv/console/apps → Create Application +# (Set OAuth Redirect URL to http://localhost, Category to "Other") +# Optional — IGDB features gracefully skip if not set. +# TWITCH_CLIENT_ID=your_client_id_here +# TWITCH_CLIENT_SECRET=your_client_secret_here diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml new file mode 100644 index 0000000..2d375f0 --- /dev/null +++ b/.github/workflows/docker-publish.yml @@ -0,0 +1,45 @@ +name: Publish Docker image + +on: + release: + types: [published] + +jobs: + push: + runs-on: ubuntu-latest + permissions: + contents: read + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Log in to Docker Hub + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKER_HUB_USERNAME }} + password: ${{ secrets.DOCKER_HUB_TOKEN }} + + - name: Extract tags + id: meta + uses: docker/metadata-action@v5 + with: + images: droideparanoico/dostalgia + tags: | + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} + type=raw,value=latest,enable={{is_default_branch}} + + - name: Build and push + uses: docker/build-push-action@v6 + with: + context: . + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..22cb277 --- /dev/null +++ b/.gitignore @@ -0,0 +1,42 @@ +# Dependencies +node_modules/ +frontend/node_modules/ + +# Environment — secrets +.env +.env.local + +# Built output +frontend/dist/ +dist/ + +# Maven / Java +target/ +*.class +*.jar +*.war + +# Runtime data +data/games/* +data/artwork/* +data/saves/* +!data/games/.gitkeep +!data/artwork/.gitkeep +!data/saves/.gitkeep + +# IDE +.vscode/ +.idea/ +*.iml +*.ipr +*.iws + +# Test/upload artifacts +*.zip +*.ZIP +*.jsdos +*.JSDOS + +# OS +.DS_Store +Thumbs.db diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..347d6cd --- /dev/null +++ b/Dockerfile @@ -0,0 +1,29 @@ +# DOStalgia — Quarkus multi-stage build + +# ─── 1. Build frontend ─────────────────────────── +FROM node:20-alpine AS frontend +WORKDIR /build +COPY frontend/package.json frontend/package-lock.json ./ +RUN npm ci 2>/dev/null || npm install --legacy-peer-deps +COPY frontend/ ./ +RUN npm run build +RUN npm test + +# ─── 2. Build Quarkus app ──────────────────────── +FROM maven:3-eclipse-temurin-21-alpine AS build +WORKDIR /build +COPY pom.xml ./ +COPY src ./src +# Copy the built frontend into the source tree so maven-resources-plugin picks it up +COPY --from=frontend /build/dist ./frontend/dist/ +RUN mvn package -q -DskipFrontend=true -DskipFrontendTests=true + +# ─── 3. Runtime ────────────────────────────────── +FROM eclipse-temurin:21-jre-alpine +WORKDIR /app +# Quarkus uber-jar layout +COPY --from=build /build/target/quarkus-app/ /app/ +EXPOSE 8765 +VOLUME /data +ENV DOSTALGIA_DATA_DIR=/data +ENTRYPOINT ["java", "-XX:MinHeapFreeRatio=10", "-XX:MaxHeapFreeRatio=20", "-jar", "quarkus-run.jar"] diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..b835321 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 droideparanoico + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..6d4c38f --- /dev/null +++ b/README.md @@ -0,0 +1,134 @@ +# DOStalgia 🕹️ + +A nostalgic DOS game hub. Upload your old DOS games, auto-scrape artwork and metadata from IGDB, and play them directly in your browser via js-dos (DOSBox compiled to WebAssembly). + +### Library view +![library](images/library.jpeg "Library") + +### Game detail view +![game](images/game.jpeg "Game") + +## Features + +### 🎮 Play in the browser +Every uploaded game is packaged into a `.jsdos` bundle — a standard ZIP with embedded DOSBox configuration. When you hit **Play**, js-dos v8 is loaded from CDN and starts the emulator instantly in your browser. No plugins, no native installs. + +**Save states are automatic** — js-dos persists your game progress to the browser's storage. Come back anytime and pick up where you left off. + +### 📦 Handles any file structure +DOS games come in all shapes. DOStalgia handles them transparently: + +- **Flattening** — If your ZIP has a single root directory (e.g. `doom/` with all files inside), the extractor flattens it so the game files sit at the bundle root. No extra nesting. +- **Subdirectory games** — If files are deeper, the autoexec automatically `cd`s to the right directory before launching the executable. +- **CD images** — Games shipped on CD-ROM often need the disc mounted. DOStalgia detects `.iso`, `.cue`, `.img`, `.ccd`, and `.bin` files, fixes broken CloneCD `.cue` references (where the referenced `.bin` is actually `.img`), and mounts them in both `dosbox.conf` and `jsdos.json`. +- **CD-only games** — If the archive contains only CD images with no executable, a CD-only bundle is created that mounts the disc and drops you at the DOS prompt. +- **Hardcoded paths** — `ConfigPatcher` scans game config files for hardcoded absolute paths (e.g. `C:\FALLOUT1\MASTER.DAT`) that broke after flattening, and rewrites them to relative paths. + +Other solutions such as [RomM](https://www.romm.app/) generate raw ZIP bundles and require you to write your own `dosbox.conf` with manual `mount` and `imgmount` commands. DOStalgia automates all of this for you. + +### 🔍 Smart executable detection +On upload, DOStalgia scans every `.exe`, `.com`, and `.bat` file and picks the best candidate as the main executable using a scoring system: + +1. **Not an installer** — INSTALL/SETUP/CONFIG executables are deprioritised +2. **DOS executables** — Pure DOS apps are preferred over Windows ones +3. **Larger files** — Bigger executables are more likely to be the game +4. **Shallow depth** — Files closer to the root are preferred +5. **Self-extractor filtering** — PKZIP/PKSFX stubs are filtered out + +All discovered executables are stored and available in the **Edit** page, where you can pick a different one via radio buttons. + +Again, RomM requires you to manually specify the executable in a custom `dosbox.conf`, while DOStalgia detects and configures it for you. + +> **⚠️ Cache note:** If you change the executable, the `.jsdos` bundle is patched in-place. Your browser may serve a cached version of the old bundle — if the game doesn't launch with the new executable, **hard-refresh** the play page (Ctrl+Shift+R / Cmd+Shift+R). + +### 🛠 One-click Setup launcher +Many DOS games include a `SETUP.EXE`, `INSTALL.EXE`, or `CONFIG.EXE` used to configure sound, controls, and graphics. When DOStalgia detects one: + +- A **🛠 Setup** button appears on the game detail page +- Clicking it launches the setup executable *without modifying the main game bundle* +- The setup bundle is generated **on-the-fly** by the server — a modified `.jsdos` is streamed with the setup executable in the autoexec, then discarded. Nothing is written to disk. + +This is not supported in RomM, where you would have to run the setup manually from the DOS prompt every time. + +### 🪟 Windows game detection +DOSBox can't run Windows executables. DOStalgia's `PlatformDetector` reads MZ/PE/NE headers to detect Windows executables: + +- The game detail page shows a **🪟 Requires Windows 3.1** badge +- The **Play** button is disabled with "Unplayable" text +- If you click Play anyway, a warning overlay explains the limitation with a **Try anyway** fallback +- Setup executables that are Windows-native are also filtered out from the Setup button + +### 📡 IGDB metadata & media +DOStalgia integrates with [IGDB](https://www.igdb.com/) (via Twitch OAuth2) to auto-populate game info: + +- **Auto Scrape** — On upload, DOStalgia searches IGDB by title and fills in year, genre, developer, publisher, description, and cover art. If IGDB finds a DOS result, it prioritises it. +- **Manual Search** — From the game detail page you can search IGDB by any query, browse results with cover thumbnails and DOS badges, and apply the one you want. +- **Media** — Videos (YouTube embeds) and screenshots (1080p) are fetched and displayed in a scrollable media gallery with a preview player. + +**Setup:** + +1. Go to https://dev.twitch.tv/console/apps → **Register Your Application** +2. Name: `dostalgia` (or anything), OAuth Redirect URL: `http://localhost`, Category: **Other** +3. Copy the **Client ID** and generate a **Client Secret** +4. Provide them via environment variables: + +Method | How +--- | --- +Docker run | `-e TWITCH_CLIENT_ID=xxx -e TWITCH_CLIENT_SECRET=yyy` +Docker Compose | Copy `.env.example` to `.env` and fill in the values +Local dev | `export TWITCH_CLIENT_ID=xxx TWITCH_CLIENT_SECRET=yyy` + +IGDB features degrade gracefully — if credentials aren't set, uploads and metadata editing still work, just without auto-scrape. + +## Quick Start + +### With Docker Compose (easiest) + +```bash +# 1. (Optional) Enable IGDB metadata auto-scrape +cp .env.example .env +# Edit .env with your Twitch credentials (see IGDB section below) + +# 2. Pull & run +docker compose up -d +``` + +Open http://localhost:8765 + +### With Docker + +```bash +docker run -p 8765:8765 -v $(pwd)/data:/data \ + -e TWITCH_CLIENT_ID=your_id \ + -e TWITCH_CLIENT_SECRET=your_secret \ + droideparanoico/dostalgia +``` + +## Development (without Docker) + +Terminal 1 — Frontend dev server: +```bash +cd frontend && npm install && npm run dev +``` + +Terminal 2 — Quarkus dev server: +```bash +mvn quarkus:dev +``` + +Open http://localhost:5173 (Vite proxies API calls to Quarkus on port 8765) + +### Production build (local) +```bash +cd frontend && npm install && npm run build +mvn package -DskipTests +java -jar target/quarkus-app/quarkus-run.jar +``` + +## Architecture + +- **Backend**: Quarkus (Java 21, JAX-RS) — REST endpoints, zero external database +- **Frontend**: Svelte 5 SPA with hash-based routing +- **Emulation**: js-dos v8 loaded from CDN, runs DOSBox in WebAssembly +- **Storage**: JSON-per-game under `/data/games/{id}/game.json` +- **Saves**: Browser localStorage / indexedDB (managed by js-dos) \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..fc6c0b5 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,14 @@ +services: + dostalgia: + image: droideparanoico/dostalgia + container_name: dostalgia + restart: unless-stopped + ports: + - "8765:8765" + volumes: + # Configure here your data directory if you want persistence. + - ./data:/data + env_file: + - .env + environment: + - DOSTALGIA_DATA_DIR=/data \ No newline at end of file diff --git a/frontend/index.html b/frontend/index.html new file mode 100644 index 0000000..1116143 --- /dev/null +++ b/frontend/index.html @@ -0,0 +1,16 @@ + + + + + + + DOStalgia + + + + + +
+ + + diff --git a/frontend/package-lock.json b/frontend/package-lock.json new file mode 100644 index 0000000..66c0173 --- /dev/null +++ b/frontend/package-lock.json @@ -0,0 +1,3087 @@ +{ + "name": "dostalgia-frontend", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "dostalgia-frontend", + "version": "0.1.0", + "devDependencies": { + "@sveltejs/vite-plugin-svelte": "^4.0.0", + "@testing-library/svelte": "^5.3.1", + "jsdom": "^29.1.1", + "svelte": "^5.0.0", + "vite": "^5.0.0", + "vitest": "^4.1.8" + } + }, + "node_modules/@asamuzakjp/css-color": { + "version": "5.1.11", + "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-5.1.11.tgz", + "integrity": "sha512-KVw6qIiCTUQhByfTd78h2yD1/00waTmm9uy/R7Ck/ctUyAPj+AEDLkQIdJW0T8+qGgj3j5bpNKK7Q3G+LedJWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@asamuzakjp/generational-cache": "^1.0.1", + "@csstools/css-calc": "^3.2.0", + "@csstools/css-color-parser": "^4.1.0", + "@csstools/css-parser-algorithms": "^4.0.0", + "@csstools/css-tokenizer": "^4.0.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + } + }, + "node_modules/@asamuzakjp/dom-selector": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@asamuzakjp/dom-selector/-/dom-selector-7.1.1.tgz", + "integrity": "sha512-67RZDnYRc8H/8MLDgQCDE//zoqVFwajkepHZgmXrbwybzXOEwOWGPYGmALYl9J2DOLfFPPs6kKCqmbzV895hTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@asamuzakjp/generational-cache": "^1.0.1", + "@asamuzakjp/nwsapi": "^2.3.9", + "bidi-js": "^1.0.3", + "css-tree": "^3.2.1", + "is-potential-custom-element-name": "^1.0.1" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + } + }, + "node_modules/@asamuzakjp/generational-cache": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@asamuzakjp/generational-cache/-/generational-cache-1.0.1.tgz", + "integrity": "sha512-wajfB8KqzMCN2KGNFdLkReeHncd0AslUSrvHVvvYWuU8ghncRJoA50kT3zP9MVL0+9g4/67H+cdvBskj9THPzg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + } + }, + "node_modules/@asamuzakjp/nwsapi": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/@asamuzakjp/nwsapi/-/nwsapi-2.3.9.tgz", + "integrity": "sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@babel/code-frame": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz", + "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.29.7", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.7.tgz", + "integrity": "sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bramus/specificity": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@bramus/specificity/-/specificity-2.4.2.tgz", + "integrity": "sha512-ctxtJ/eA+t+6q2++vj5j7FYX3nRu311q1wfYH3xjlLOsczhlhxAg2FWNUXhpGvAw3BWo1xBcvOV6/YLc2r5FJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "css-tree": "^3.0.0" + }, + "bin": { + "specificity": "bin/cli.js" + } + }, + "node_modules/@csstools/color-helpers": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-6.0.2.tgz", + "integrity": "sha512-LMGQLS9EuADloEFkcTBR3BwV/CGHV7zyDxVRtVDTwdI2Ca4it0CCVTT9wCkxSgokjE5Ho41hEPgb8OEUwoXr6Q==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=20.19.0" + } + }, + "node_modules/@csstools/css-calc": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-3.2.1.tgz", + "integrity": "sha512-DtdHlgXh5ZkA43cwBcAm+huzgJiwx3ZTWVjBs94kwz2xKqSimDA3lBgCjphYgwgVUMWatSM0pDd8TILB1yrVVg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=20.19.0" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^4.0.0", + "@csstools/css-tokenizer": "^4.0.0" + } + }, + "node_modules/@csstools/css-color-parser": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-4.1.1.tgz", + "integrity": "sha512-eZ5XOtyhK+mggRafYUWzA0tvaYOFgdY8AkgQiCJF9qNAePnUo/zmsqqYubBBb3sQ8uNUaSKTY9s9klfRaAXL0g==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/color-helpers": "^6.0.2", + "@csstools/css-calc": "^3.2.1" + }, + "engines": { + "node": ">=20.19.0" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^4.0.0", + "@csstools/css-tokenizer": "^4.0.0" + } + }, + "node_modules/@csstools/css-parser-algorithms": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-4.0.0.tgz", + "integrity": "sha512-+B87qS7fIG3L5h3qwJ/IFbjoVoOe/bpOdh9hAjXbvx0o8ImEmUsGXN0inFOnk2ChCFgqkkGFQ+TpM5rbhkKe4w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=20.19.0" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^4.0.0" + } + }, + "node_modules/@csstools/css-syntax-patches-for-csstree": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.1.5.tgz", + "integrity": "sha512-oNjBvzLq2GPZtJphCjLqXow/cHySHSgtxvKZb7OqSZ/xHgw6NWNhfad+6AB9cLeVm6eA9d/qMll3JdEHjy6M+A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "peerDependencies": { + "css-tree": "^3.2.1" + }, + "peerDependenciesMeta": { + "css-tree": { + "optional": true + } + } + }, + "node_modules/@csstools/css-tokenizer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-4.0.0.tgz", + "integrity": "sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=20.19.0" + } + }, + "node_modules/@emnapi/core": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.10.0.tgz", + "integrity": "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.2.1", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz", + "integrity": "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz", + "integrity": "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.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/@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/@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/@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/@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/@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/@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/@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" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "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" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "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" + ], + "dev": true, + "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" + } + }, + "node_modules/@exodus/bytes": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/@exodus/bytes/-/bytes-1.15.1.tgz", + "integrity": "sha512-S6mL0yNB/Abt9Ei4tq8gDhcczc4S3+vQ4ra7vxnAf+YHC02srtqxKKZghx2Dq6p0e66THKwR6r8N6P95wEty7Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + }, + "peerDependencies": { + "@noble/hashes": "^1.8.0 || ^2.0.0" + }, + "peerDependenciesMeta": { + "@noble/hashes": { + "optional": true + } + } + }, + "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, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "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 + }, + "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, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.5.tgz", + "integrity": "sha512-AWPoBRJ9tsnVhor4sjO7rkni+7p+2IAEFj6cx06UgP10jkQHqay/36uRV/bFkgrh18D9vb4cr8Q0Pthskgzy+Q==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@tybys/wasm-util": "^0.10.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "peerDependencies": { + "@emnapi/core": "^1.7.1", + "@emnapi/runtime": "^1.7.1" + } + }, + "node_modules/@oxc-project/types": { + "version": "0.133.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.133.0.tgz", + "integrity": "sha512-KzkdCd6Uxqnf6l3HOw1xfatAlUURA0g14cvBYFyJ5SaNOQbOUvBr9PKArcPcrNIeRsBdgcUzOGrhKveVpvOIGA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Boshen" + } + }, + "node_modules/@rolldown/binding-android-arm64": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.3.tgz", + "integrity": "sha512-454rs7jHngixp/NMxd5srYD57OnzSlZ/eFTETjORQHLwJG1lRtmNOJcBerZlfu4GjKqeq8aCCIQrMdHyhI51Hw==", + "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.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.3.tgz", + "integrity": "sha512-PcAhP+ynjURNyy8SKGl5DQP94aGuB/7JrXJb/t7P+hanXvQVMWzUvRRhBAcg/lNRadBhoUPqSoP4xw5tR/KBEA==", + "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.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.3.tgz", + "integrity": "sha512-9YpfeUvSE2RS7wysJ81uOZkXJz7f7Q55H2Gvp3VEw/EsahqDtrphrZ0EwDLK5vvKOzaCrBsjF8JmnMLcUt78Gg==", + "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.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.3.tgz", + "integrity": "sha512-yB1IlAsSNHncV6SCTL27/MVGR5htvQsoGxIv5KMGXALp+Ll1wYsn+x98M9MW7qa+NdSbvrrY7ANI4wLJ0n1e6g==", + "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.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.3.tgz", + "integrity": "sha512-Yi30IVAAfLUCy2MseFjbB1jAMDl1VMCAas5StnYp8da9+CKvMd2H2cbEjWcw5NPaPqzvYkVIaF1nNUG+b7u/sw==", + "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.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.3.tgz", + "integrity": "sha512-jsO7R8To+AdlYgUmN5sHSCZbfhtMBkO0WUx8iORQnPcMMdgr7qM2DQmMwgabs3GhNztdmoKkMKQFHD6DTMCIQw==", + "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.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.3.tgz", + "integrity": "sha512-VWkUHwWriDciit80wleYwKILoR/KMvxh/IdwS/paX+ZgpuRpCrKLUdadJbc0NpBEiyhpYawsJ73j9aCvOH+f7Q==", + "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.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.3.tgz", + "integrity": "sha512-5f1laC0SlIR0yDbFCd8acUhvJIag6N3zC5P7oUPN6wX0aOma+uKJ0wBDH5aq7I1PVI2ttTlhJwzwRIBnLiSGEg==", + "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.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.3.tgz", + "integrity": "sha512-Iq4ko0r4XsgbrF/LunNgHtAGLRRVE2kXonAXQ/MV0mC6jQpMOhW1SvtZja2EhC/kd05++bP78dsqBeIQyYJ6Yg==", + "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.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.3.tgz", + "integrity": "sha512-B8m6tD5+/N5FeNQFbKlLA/2yVq9ycQP1SeedyEYYKWBNR3ZQbkvIUcNnDNM03lO1l5F2roiiFJGgvoLLyZXtSg==", + "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.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.3.tgz", + "integrity": "sha512-pSdpdUJHkuCxun9LE7jvgUB9qsRgaiyNNCX7m/AvHTcq67AiT/Yhoxvw5zPfhrM8k/BfP8ce/hMOpthKDpEUow==", + "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.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.3.tgz", + "integrity": "sha512-OXXS3RKJgX2uLwM+gYyuH5omcH8fL1LJs96pZGgtetVCahON57+d4SJHzTgZiOjxgGkSnpXpOsWuPDGAKAigEg==", + "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.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.3.tgz", + "integrity": "sha512-JTtb8BWFynicNSoPrehsCzBtOKjZ6jhMiPFEmOiuXg1Fl8dn2KHQob+GuPSGR0dryQa1PQJbzjF3dqO/whhjLg==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "1.10.0", + "@emnapi/runtime": "1.10.0", + "@napi-rs/wasm-runtime": "^1.1.4" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.3.tgz", + "integrity": "sha512-gEdFFEN70A/jxb2svrWsN3aDL7OUtmvlOy+6fa2jxG8K0wQ1ZbdeLGnidov6Yu5/733dI5ySfzFlQ/cb0bSz1g==", + "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.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.3.tgz", + "integrity": "sha512-eXB7CHuaQdqmJcc3koCNtNPmT/bj2gc999kUFgBxG8Ac0NdgXc4rkCHhqrgrhN3zddvvvrgzj1e90SuSfmyIXA==", + "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.1", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz", + "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.60.4.tgz", + "integrity": "sha512-F5QXMSiFebS9hKZj02XhWLLnRpJ3B3AROP0tWbFBSj+6kCbg5m9j5JoHKd4mmSVy5mS/IMQloYgYxCuJC0fxEQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.60.4.tgz", + "integrity": "sha512-GxxTKApUpzRhof7poWvCJHRF51C67u1R7D6DiluBE8wKU1u5GWE8t+v81JvJYtbawoBFX1hLv5Ei4eVjkWokaw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.60.4.tgz", + "integrity": "sha512-tua0TaJxMOB1R0V0RS1jFZ/RpURFDJIOR2A6jWwQeawuFyS4gBW+rntLRaQd0EQ4bd6Vp44Z2rXW+YYDBsj6IA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.60.4.tgz", + "integrity": "sha512-CSKq7MsP+5PFIcydhAiR1K0UhEI1A2jWXVKHPCBZ151yOutENwvnPocgVHkivu2kviURtCEB6zUQw0vs8RrhMg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.60.4.tgz", + "integrity": "sha512-+O8OkVdyvXMtJEciu2wS/pzm1IxntEEQx3z5TAVy4l32G0etZn+RsA48ARRrFm6Ri8fvqPQfgrvNxSjKAbnd3g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.60.4.tgz", + "integrity": "sha512-Iw3oMskH3AfNuhU0MSN7vNbdi4me/NiYo2azqPz/Le16zHSa+3RRmliCMWWQmh4lcndccU40xcJuTYJZxNo/lw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.60.4.tgz", + "integrity": "sha512-EIPRXTVQpHyF8WOo219AD2yEltPehLTcTMz2fn6JsatLYSzQf00hj3rulF+yauOlF9/FtM2WpkT/hJh/KJFGhA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.60.4.tgz", + "integrity": "sha512-J3Yh9PzzF1Ovah2At+lHiGQdsYgArxBbXv/zHfSyaiFQEqvNv7DcW98pCrmdjCZBrqBiKrKKe2V+aaSGWuBe/w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.60.4.tgz", + "integrity": "sha512-BFDEZMYfUvLn37ONE1yMBojPxnMlTFsdyNoqncT0qFq1mAfllL+ATMMJd8TeuVMiX84s1KbcxcZbXInmcO2mRg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.60.4.tgz", + "integrity": "sha512-pc9EYOSlOgdQ2uPl1o9PF6/kLSgaUosia7gOuS8mB69IxJvlclko1MECXysjs5ryez1/5zjYqx3+xYU0TU6R1A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.60.4.tgz", + "integrity": "sha512-NxnomyxYerDh5n4iLrNa+sH+Z+U4BMEE46V2PgQ/hoB909i8gV1M5wPojWg9fk1jWpO3IQnOs20K4wyZuFLEFQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.60.4.tgz", + "integrity": "sha512-nbJnQ8a3z1mtmrwImCYhc6BGpThAyYVRQxw9uKSKG4wR6aAYno9sVjJ0zaZcW9BPJX1GbrDPf+SvdWjgTuDmnw==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.60.4.tgz", + "integrity": "sha512-2EU6acNrQLd8tYvo/LXW535wupT3m6fo7HKo6lr7ktQoItxTyOL1ZCR/GfGCuXl2vR+zmfI6eRXkSemafv+iVg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.60.4.tgz", + "integrity": "sha512-WeBtoMuaMxiiIrO2IYP3xs6GMWkJP2C0EoT8beTLkUPmzV1i/UcOSVw1d5r9KBODtHKilG5yFxsGRnBbK3wJ4A==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.60.4.tgz", + "integrity": "sha512-FJHFfqpKUI3A10WrWKiFbBZ7yVbGT4q4B5o1qKFFojqpaYoh9LrQgqWCmmcxQzVSXYtyB5bzkXrYzlHTs21MYA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.60.4.tgz", + "integrity": "sha512-mcEl6CUT5IAUmQf1m9FYSmVqCJlpQ8r8eyftFUHG8i9OhY7BkBXSUdnLH5DOf0wCOjcP9v/QO93zpmF1SptCCw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.60.4.tgz", + "integrity": "sha512-ynt3JxVd2w2buzoKDWIyiV1pJW93xlQic1THVLXilz429oijRpSHivZAgp65KBu+cMcgf1eVVjdnTLvPxgCuoQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.60.4.tgz", + "integrity": "sha512-Boiz5+MsaROEWDf+GGEwF8VMHGhlUoQMtIPjOgA5fv4osupqTVnJteQNKJwUcnUog2G55jYXH7KZFFiJe0TEzQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.60.4.tgz", + "integrity": "sha512-+qfSY27qIrFfI/Hom04KYFw3GKZSGU4lXus51wsb5EuySfFlWRwjkKWoE9emgRw/ukoT4Udsj4W/+xxG8VbPKg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.60.4.tgz", + "integrity": "sha512-VpTfOPHgVXEBeeR8hZ2O0F3aSso+JDWqTWmTmzcQKted54IAdUVbxE+j/MVxUsKa8L20HJhv3vUezVPoquqWjA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.60.4.tgz", + "integrity": "sha512-IPOsh5aRYuLv/nkU51X10Bf75Bsf6+gZdx1X+QP5QM6lIJFHHqbHLG0uJn/hWthzo13UAc2umiUorqZy3axoZg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.60.4.tgz", + "integrity": "sha512-4QzE9E81OohJ/HKzHhsqU+zcYYojVOXlFMs1DdyMT6qXl/niOH7AVElmmEdUNHHS/oRkc++d5k6Vy85zFs0DEw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.60.4.tgz", + "integrity": "sha512-zTPgT1YuHHcd+Tmx7h8aml0FWFVelV5N54oHow9SLj+GfoDy/huQ+UV396N/C7KpMDMiPspRktzM1/0r1usYEA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.60.4.tgz", + "integrity": "sha512-DRS4G7mi9lJxqEDezIkKCaUIKCrLUUDCUaCsTPCi/rtqaC6D/jjwslMQyiDU50Ka0JKpeXeRBFBAXwArY52vBw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.60.4.tgz", + "integrity": "sha512-QVTUovf40zgTqlFVrKA1uXMVvU2QWEFWfAH8Wdc48IxLvrJMQVMBRjuQyUpzZCDkakImib9eVazbWlC6ksWtJw==", + "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==", + "dev": true, + "license": "MIT" + }, + "node_modules/@sveltejs/acorn-typescript": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/@sveltejs/acorn-typescript/-/acorn-typescript-1.0.10.tgz", + "integrity": "sha512-4WfKk68eTih+MiJD4fSbxN7E8kVBmTMPWHUPYjvl2N0rMs53YLTT8/YjKU5Dtnz5LqDjl7LEw4U7lXR2W3J5WA==", + "dev": true, + "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==", + "dev": true, + "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" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22" + }, + "peerDependencies": { + "svelte": "^5.0.0-next.96 || ^5.0.0", + "vite": "^5.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==", + "dev": 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" + } + }, + "node_modules/@testing-library/dom": { + "version": "10.4.1", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.1.tgz", + "integrity": "sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.3.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "picocolors": "1.1.1", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@testing-library/dom/node_modules/aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/@testing-library/svelte": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@testing-library/svelte/-/svelte-5.3.1.tgz", + "integrity": "sha512-8Ez7ZOqW5geRf9PF5rkuopODe5RGy3I9XR+kc7zHh26gBiktLaxTfKmhlGaSHYUOTQE7wFsLMN9xCJVCszw47w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@testing-library/dom": "9.x.x || 10.x.x", + "@testing-library/svelte-core": "1.0.0" + }, + "engines": { + "node": ">= 10" + }, + "peerDependencies": { + "svelte": "^3 || ^4 || ^5 || ^5.0.0-next.0", + "vite": "*", + "vitest": "*" + }, + "peerDependenciesMeta": { + "vite": { + "optional": true + }, + "vitest": { + "optional": true + } + } + }, + "node_modules/@testing-library/svelte-core": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@testing-library/svelte-core/-/svelte-core-1.0.0.tgz", + "integrity": "sha512-VkUePoLV6oOYwSUvX6ShA8KLnJqZiYMIbP2JW2t0GLWLkJxKGvuH5qrrZBV/X7cXFnLGuFQEC7RheYiZOW68KQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "svelte": "^3 || ^4 || ^5 || ^5.0.0-next.0" + } + }, + "node_modules/@tybys/wasm-util": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.2.tgz", + "integrity": "sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/aria-query": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", + "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/chai": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz", + "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/deep-eql": "*", + "assertion-error": "^2.0.1" + } + }, + "node_modules/@types/deep-eql": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", + "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", + "dev": true + }, + "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 + }, + "node_modules/@vitest/expect": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.1.8.tgz", + "integrity": "sha512-h3nDO677RDLEGlBxyQ5CW8RlMThSKSRLUePLOx09gNIWRL40edgA1GCZSZgf1W55MFAG6/Sw14KeaAnqv0NKdQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@standard-schema/spec": "^1.1.0", + "@types/chai": "^5.2.2", + "@vitest/spy": "4.1.8", + "@vitest/utils": "4.1.8", + "chai": "^6.2.2", + "tinyrainbow": "^3.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/pretty-format": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.8.tgz", + "integrity": "sha512-9GasEBxpZ1VYIpqHf/0+YGg121uSNwCKOJqIrTwWP/TB7DmFCiaBpNl3aPZzoLWfWkuqhbH8vJIVobZkvdo2cA==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyrainbow": "^3.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.1.8.tgz", + "integrity": "sha512-EmVxeBAfMJvycdjd6Hm+RbFBbA9fKvo0Kx37hNpBYoYeavH3RNsBXWDooR1mgD52dCrxIIuP7UotpfiwOikvcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/utils": "4.1.8", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.1.8.tgz", + "integrity": "sha512-acfZboRmAIf05DEKcBQy33VXojFJjtUdLyo7oOmV9kebb2xdU01UknNiPuPZoJZQyO7DF0gZdTGTpeAzET9QPQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "4.1.8", + "@vitest/utils": "4.1.8", + "magic-string": "^0.30.21", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/spy": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.1.8.tgz", + "integrity": "sha512-6EevtBp6OZOPF7bmz36HrGMeP3txgVSrgebWxHOafDXGkhIzfXK14f8KF6MuFfgXXUeHxmpD3BQxkV00/3s5mA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.1.8.tgz", + "integrity": "sha512-uOJamYALNhfJ6iolExyQM40yIQwDqYnkKtQ5VCiSe17E33H0aQ/u+1GlRuz4LZBk6Mm3sg90G9hEbmEt37C1Zg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "4.1.8", + "convert-source-map": "^2.0.0", + "tinyrainbow": "^3.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/acorn": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/axobject-query": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/bidi-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/bidi-js/-/bidi-js-1.0.3.tgz", + "integrity": "sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==", + "dev": true, + "license": "MIT", + "dependencies": { + "require-from-string": "^2.0.2" + } + }, + "node_modules/chai": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.2.tgz", + "integrity": "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/convert-source-map": { + "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, + "license": "MIT" + }, + "node_modules/css-tree": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.2.1.tgz", + "integrity": "sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "mdn-data": "2.27.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/data-urls": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-7.0.0.tgz", + "integrity": "sha512-23XHcCF+coGYevirZceTVD7NdJOqVn+49IHyxgszm+JIiHLoB2TkmPtsYkNWT1pvRSGkc35L6NHs0yHkN2SumA==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-mimetype": "^5.0.0", + "whatwg-url": "^16.0.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decimal.js": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", + "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", + "dev": true, + "license": "MIT" + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "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.8.1", + "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.8.1.tgz", + "integrity": "sha512-4CXDYRBGqN+57wVJkuXBYmpAVUSg3L6JAQa/DFqm238G73E1wuyc/JhGQJzN7vUf/CMphYau2zXbfWzDR5aTEw==", + "dev": true + }, + "node_modules/dom-accessibility-api": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", + "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", + "dev": true, + "license": "MIT" + }, + "node_modules/entities": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-8.0.0.tgz", + "integrity": "sha512-zwfzJecQ/Uej6tusMqwAqU/6KL2XaB2VZ2Jg54Je6ahNBGNH6Ek6g3jjNCF0fG9EWQKGZNddNjU5F1ZQn/sBnA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/es-module-lexer": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.1.0.tgz", + "integrity": "sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ==", + "dev": true, + "license": "MIT" + }, + "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/esm-env": { + "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 + }, + "node_modules/esrap": { + "version": "2.2.9", + "resolved": "https://registry.npmjs.org/esrap/-/esrap-2.2.9.tgz", + "integrity": "sha512-4KijP+NxCWthMCUC3qHbE6n4vCjqgJS1uAYKhuT/GWfFTf1Qyive2TgOjep+gzbSzRfnNyaN/UU9YmdOt8Eg0A==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15" + }, + "peerDependencies": { + "@typescript-eslint/types": "^8.2.0" + }, + "peerDependenciesMeta": { + "@typescript-eslint/types": { + "optional": true + } + } + }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/expect-type": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.3.0.tgz", + "integrity": "sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/html-encoding-sniffer": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-6.0.0.tgz", + "integrity": "sha512-CV9TW3Y3f8/wT0BRFc1/KAVQ3TUHiXmaAb6VW9vtiMFf7SLoMd1PdAc4W3KFOFETBJUb90KatHqlsZMWV+R9Gg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@exodus/bytes": "^1.6.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-reference": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.3.tgz", + "integrity": "sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.6" + } + }, + "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, + "license": "MIT" + }, + "node_modules/jsdom": { + "version": "29.1.1", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-29.1.1.tgz", + "integrity": "sha512-ECi4Fi2f7BdJtUKTflYRTiaMxIB0O6zfR1fX0GXpUrf6flp8QIYn1UT20YQqdSOfk2dfkCwS8LAFoJDEppNK5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@asamuzakjp/css-color": "^5.1.11", + "@asamuzakjp/dom-selector": "^7.1.1", + "@bramus/specificity": "^2.4.2", + "@csstools/css-syntax-patches-for-csstree": "^1.1.3", + "@exodus/bytes": "^1.15.0", + "css-tree": "^3.2.1", + "data-urls": "^7.0.0", + "decimal.js": "^10.6.0", + "html-encoding-sniffer": "^6.0.0", + "is-potential-custom-element-name": "^1.0.1", + "lru-cache": "^11.3.5", + "parse5": "^8.0.1", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^6.0.1", + "undici": "^7.25.0", + "w3c-xmlserializer": "^5.0.0", + "webidl-conversions": "^8.0.1", + "whatwg-mimetype": "^5.0.0", + "whatwg-url": "^16.0.1", + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24.0.0" + }, + "peerDependencies": { + "canvas": "^3.0.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "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/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/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 + }, + "node_modules/lru-cache": { + "version": "11.5.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.1.tgz", + "integrity": "sha512-RPimw/7aMdv2oqRrxKwvZXcPfwBrn/JZ2xYcY9Hus/6LaS3VOAKVWKWgNLCFSiOm1ESXinjsDlidVU7JlnCN2A==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/lz-string": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", + "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", + "dev": true, + "license": "MIT", + "bin": { + "lz-string": "bin/bin.js" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/mdn-data": { + "version": "2.27.1", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.27.1.tgz", + "integrity": "sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.3.12", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.12.tgz", + "integrity": "sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/obug": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.2.tgz", + "integrity": "sha512-AWGB9WFcRXOQs48Z/udjI5ZcZMHXwX8XPByNpOydgcGsDLIzjGizhoMWJyKAWze7AVW/2W1i+/gPX4YtKe5cyg==", + "dev": true, + "funding": [ + "https://github.com/sponsors/sxzz", + "https://opencollective.com/debug" + ], + "license": "MIT", + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/parse5": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-8.0.1.tgz", + "integrity": "sha512-z1e/HMG90obSGeidlli3hj7cbocou0/wa5HacvI3ASx34PecNjNQeaHNo5WIZpWofN9kgkqV1q5YvXe3F0FoPw==", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^8.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true + }, + "node_modules/picomatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.15", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.15.tgz", + "integrity": "sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.12", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "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" + } + }, + "node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true, + "license": "MIT" + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "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" + } + }, + "node_modules/rolldown": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.3.tgz", + "integrity": "sha512-i00lAJ2ks1BYr7rjNjKC7BcqAS7nVfiT3QX1SI5aY+AFHblCmaUf9OE9dbdzDvW6dJxbi2ZCZiy9v3CcwOiX3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@oxc-project/types": "=0.133.0", + "@rolldown/pluginutils": "^1.0.0" + }, + "bin": { + "rolldown": "bin/cli.mjs" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "optionalDependencies": { + "@rolldown/binding-android-arm64": "1.0.3", + "@rolldown/binding-darwin-arm64": "1.0.3", + "@rolldown/binding-darwin-x64": "1.0.3", + "@rolldown/binding-freebsd-x64": "1.0.3", + "@rolldown/binding-linux-arm-gnueabihf": "1.0.3", + "@rolldown/binding-linux-arm64-gnu": "1.0.3", + "@rolldown/binding-linux-arm64-musl": "1.0.3", + "@rolldown/binding-linux-ppc64-gnu": "1.0.3", + "@rolldown/binding-linux-s390x-gnu": "1.0.3", + "@rolldown/binding-linux-x64-gnu": "1.0.3", + "@rolldown/binding-linux-x64-musl": "1.0.3", + "@rolldown/binding-openharmony-arm64": "1.0.3", + "@rolldown/binding-wasm32-wasi": "1.0.3", + "@rolldown/binding-win32-arm64-msvc": "1.0.3", + "@rolldown/binding-win32-x64-msvc": "1.0.3" + } + }, + "node_modules/rollup": { + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.60.4.tgz", + "integrity": "sha512-WHeFSbZYsPu3+bLoNRUuAO+wavNlocOPf3wSHTP7hcFKVnJeWsYlCDbr3mTS14FCizf9ccIxXA8sGL8zKeQN3g==", + "dev": true, + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.60.4", + "@rollup/rollup-android-arm64": "4.60.4", + "@rollup/rollup-darwin-arm64": "4.60.4", + "@rollup/rollup-darwin-x64": "4.60.4", + "@rollup/rollup-freebsd-arm64": "4.60.4", + "@rollup/rollup-freebsd-x64": "4.60.4", + "@rollup/rollup-linux-arm-gnueabihf": "4.60.4", + "@rollup/rollup-linux-arm-musleabihf": "4.60.4", + "@rollup/rollup-linux-arm64-gnu": "4.60.4", + "@rollup/rollup-linux-arm64-musl": "4.60.4", + "@rollup/rollup-linux-loong64-gnu": "4.60.4", + "@rollup/rollup-linux-loong64-musl": "4.60.4", + "@rollup/rollup-linux-ppc64-gnu": "4.60.4", + "@rollup/rollup-linux-ppc64-musl": "4.60.4", + "@rollup/rollup-linux-riscv64-gnu": "4.60.4", + "@rollup/rollup-linux-riscv64-musl": "4.60.4", + "@rollup/rollup-linux-s390x-gnu": "4.60.4", + "@rollup/rollup-linux-x64-gnu": "4.60.4", + "@rollup/rollup-linux-x64-musl": "4.60.4", + "@rollup/rollup-openbsd-x64": "4.60.4", + "@rollup/rollup-openharmony-arm64": "4.60.4", + "@rollup/rollup-win32-arm64-msvc": "4.60.4", + "@rollup/rollup-win32-ia32-msvc": "4.60.4", + "@rollup/rollup-win32-x64-gnu": "4.60.4", + "@rollup/rollup-win32-x64-msvc": "4.60.4", + "fsevents": "~2.3.2" + } + }, + "node_modules/rollup/node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true + }, + "node_modules/saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "dev": true, + "license": "ISC", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=v12.22.7" + } + }, + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true, + "license": "ISC" + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true, + "license": "MIT" + }, + "node_modules/std-env": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-4.1.0.tgz", + "integrity": "sha512-Rq7ybcX2RuC55r9oaPVEW7/xu3tj8u4GeBYHBWCychFtzMIr86A7e3PPEBPT37sHStKX3+TiX/Fr/ACmJLVlLQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/svelte": { + "version": "5.55.9", + "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.55.9.tgz", + "integrity": "sha512-fTjjT8cHLDwigcu2j3pv7Jq04LklXevPB8uBgyHNiTXv+RMNvVnrjS4UEYrLMkhuq1vpCodHjiW+z/95SDs/fg==", + "dev": true, + "dependencies": { + "@jridgewell/remapping": "^2.3.4", + "@jridgewell/sourcemap-codec": "^1.5.0", + "@sveltejs/acorn-typescript": "^1.0.10", + "@types/estree": "^1.0.5", + "@types/trusted-types": "^2.0.7", + "acorn": "^8.12.1", + "aria-query": "5.3.1", + "axobject-query": "^4.1.0", + "clsx": "^2.1.1", + "devalue": "^5.8.1", + "esm-env": "^1.2.1", + "esrap": "^2.2.9", + "is-reference": "^3.0.3", + "locate-character": "^3.0.0", + "magic-string": "^0.30.11", + "zimmerframe": "^1.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinybench": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyexec": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.2.4.tgz", + "integrity": "sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyrainbow": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.1.0.tgz", + "integrity": "sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tldts": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-7.4.2.tgz", + "integrity": "sha512-kCwffuaH8ntKtygnWe1b4BJKWiCUH30n5KfoTr6IchcXOwR7chAOFJxFrH3vjANafUYrIA4a7SDL+nn7SiR4Sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tldts-core": "^7.4.2" + }, + "bin": { + "tldts": "bin/cli.js" + } + }, + "node_modules/tldts-core": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.4.2.tgz", + "integrity": "sha512-nwEyF4vl4RSJjwSjBUmOSxc3BFPoIFdlRthJ6e+5v9P3bHNsoD06UjuqMUspqp7vsEZ1beaHi1km+optiE17yA==", + "dev": true, + "license": "MIT" + }, + "node_modules/tough-cookie": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-6.0.1.tgz", + "integrity": "sha512-LktZQb3IeoUWB9lqR5EWTHgW/VTITCXg4D21M+lvybRVdylLrRMnqaIONLVb5mav8vM19m44HIcGq4qASeu2Qw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tldts": "^7.0.5" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/tr46": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-6.0.0.tgz", + "integrity": "sha512-bLVMLPtstlZ4iMQHpFHTR7GAGj2jxi8Dg0s2h2MafAE4uSWF98FC/3MomU51iQAMf8/qDUbKWf5GxuvvVcXEhw==", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "engines": { + "node": ">=20" + } + }, + "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.27.2", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.27.2.tgz", + "integrity": "sha512-uZsKNuzQxDMUY6M3pIMvy5tvlGmtq8XJ2oLAkfRKGNu+1VQAIvLy2xIVG5ATZl5wDXl/tddByAWCizRbOme+TA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20.18.1" + } + }, + "node_modules/vite": { + "version": "5.4.21", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.21.tgz", + "integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==", + "dev": true, + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "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" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vitefu": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-1.1.3.tgz", + "integrity": "sha512-ub4okH7Z5KLjb6hDyjqrGXqWtWvoYdU3IGm/NorpgHncKoLTCfRIbvlhBm7r0YstIaQRYlp4yEbFqDcKSzXSSg==", + "dev": true, + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "vite": { + "optional": true + } + } + }, + "node_modules/vitest": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.1.8.tgz", + "integrity": "sha512-flY6ScbCIt9HThs+C5HS7jvGOB560DJtk/Z15IQROTA6zEy49Nh8T/dofWTQL+n3vswqn87sbJNiuqw1SDp5Ig==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/expect": "4.1.8", + "@vitest/mocker": "4.1.8", + "@vitest/pretty-format": "4.1.8", + "@vitest/runner": "4.1.8", + "@vitest/snapshot": "4.1.8", + "@vitest/spy": "4.1.8", + "@vitest/utils": "4.1.8", + "es-module-lexer": "^2.0.0", + "expect-type": "^1.3.0", + "magic-string": "^0.30.21", + "obug": "^2.1.1", + "pathe": "^2.0.3", + "picomatch": "^4.0.3", + "std-env": "^4.0.0-rc.1", + "tinybench": "^2.9.0", + "tinyexec": "^1.0.2", + "tinyglobby": "^0.2.15", + "tinyrainbow": "^3.1.0", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0", + "why-is-node-running": "^2.3.0" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": "^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@opentelemetry/api": "^1.9.0", + "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", + "@vitest/browser-playwright": "4.1.8", + "@vitest/browser-preview": "4.1.8", + "@vitest/browser-webdriverio": "4.1.8", + "@vitest/coverage-istanbul": "4.1.8", + "@vitest/coverage-v8": "4.1.8", + "@vitest/ui": "4.1.8", + "happy-dom": "*", + "jsdom": "*", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@opentelemetry/api": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser-playwright": { + "optional": true + }, + "@vitest/browser-preview": { + "optional": true + }, + "@vitest/browser-webdriverio": { + "optional": true + }, + "@vitest/coverage-istanbul": { + "optional": true + }, + "@vitest/coverage-v8": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + }, + "vite": { + "optional": false + } + } + }, + "node_modules/vitest/node_modules/@vitest/mocker": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.1.8.tgz", + "integrity": "sha512-LEiN/xe4OSIbKe9HQIp5OC24agGD9J5CnmMgsLohVVoOPWL9a2sBoR6VBx43jQZb7Kr1l4RCuyCJzcAa0+dojw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "4.1.8", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.21" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "msw": "^2.4.9", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, + "node_modules/vitest/node_modules/vite": { + "version": "8.0.16", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.0.16.tgz", + "integrity": "sha512-h9bXPmJichP5fLmVQo3PyaGSDE2n3aPuomeAlVRm0JLmt4rY6zmPKd59HYI4LNW8oTK7tlTsuC7l/m7awx9Jcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "lightningcss": "^1.32.0", + "picomatch": "^4.0.4", + "postcss": "^8.5.15", + "rolldown": "1.0.3", + "tinyglobby": "^0.2.17" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "@vitejs/devtools": "^0.1.18", + "esbuild": "^0.27.0 || ^0.28.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 + }, + "@vitejs/devtools": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/w3c-xmlserializer": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", + "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/webidl-conversions": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-8.0.1.tgz", + "integrity": "sha512-BMhLD/Sw+GbJC21C/UgyaZX41nPt8bUTg+jWyDeg7e7YN4xOM05YPSIXceACnXVtqyEw/LMClUQMtMZ+PGGpqQ==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=20" + } + }, + "node_modules/whatwg-mimetype": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-5.0.0.tgz", + "integrity": "sha512-sXcNcHOC51uPGF0P/D4NVtrkjSU2fNsm9iog4ZvZJsL3rjoDAzXZhkm2MWt1y+PUdggKAYVoMAIYcs78wJ51Cw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20" + } + }, + "node_modules/whatwg-url": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-16.0.1.tgz", + "integrity": "sha512-1to4zXBxmXHV3IiSSEInrreIlu02vUOvrhxJJH5vcxYTBDAx51cqZiKdyTxlecdKNSjj8EcxGBxNf6Vg+945gw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@exodus/bytes": "^1.11.0", + "tr46": "^6.0.0", + "webidl-conversions": "^8.0.1" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + } + }, + "node_modules/why-is-node-running": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/xml-name-validator": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", + "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true, + "license": "MIT" + }, + "node_modules/zimmerframe": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/zimmerframe/-/zimmerframe-1.1.4.tgz", + "integrity": "sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ==", + "dev": true + } + } +} diff --git a/frontend/package.json b/frontend/package.json new file mode 100644 index 0000000..68e545b --- /dev/null +++ b/frontend/package.json @@ -0,0 +1,21 @@ +{ + "name": "dostalgia-frontend", + "private": true, + "version": "0.1.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview", + "test": "vitest run", + "test:watch": "vitest" + }, + "devDependencies": { + "@sveltejs/vite-plugin-svelte": "^4.0.0", + "@testing-library/svelte": "^5.3.1", + "jsdom": "^29.1.1", + "svelte": "^5.0.0", + "vite": "^5.0.0", + "vitest": "^4.1.8" + } +} diff --git a/frontend/src/App.svelte b/frontend/src/App.svelte new file mode 100644 index 0000000..9cef609 --- /dev/null +++ b/frontend/src/App.svelte @@ -0,0 +1,71 @@ + + +
uploadTriggered++} /> + +
+ {#if route === "/"} + + {:else if route === "/game" && gameId} + + {:else if route === "/play" && gameId} + + {:else} +
+

Page not found

+ Back to Library +
+ {/if} +
+ + diff --git a/frontend/src/app.css b/frontend/src/app.css new file mode 100644 index 0000000..0cf7e73 --- /dev/null +++ b/frontend/src/app.css @@ -0,0 +1,250 @@ +/* ═══════════════════════════════════════════════════════════════ + DOSTALGIA — Phosphor Dark Theme + Inspired by classic green-screen CRT monitors (IBM 5151) + ═══════════════════════════════════════════════════════════════ */ + +:root { + /* Phosphor greens — from brightest glow to darkest trace */ + --phosphor: #33ff33; + --phosphor-glow: #66ff66; + --phosphor-dim: #22aa22; + --phosphor-dark: #116611; + --phosphor-burn: #0a330a; + + /* Backgrounds */ + --bg: #0a0a0a; + --bg-elevated: #111111; + --surface: #1a1a1a; + --surface-hover: #222222; + --surface-active: #2a2a2a; + + /* Borders */ + --border: #2a2a2a; + --border-glow: #33ff3340; + + /* Text */ + --text: #cccccc; + --text-bright: #e8e8e8; + --text-dim: #777777; + + /* Sizing */ + --max-width: 1200px; + --header-height: 64px; + --radius: 8px; + --radius-sm: 4px; + + /* Typography */ + --font-mono: "Press Start 2P", monospace; + --font-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif; +} + +/* ═══════════════════════════════════════════════════════════════ + RESET & BASE + ═══════════════════════════════════════════════════════════════ */ +*, +*::before, +*::after { + box-sizing: border-box; + margin: 0; + padding: 0; +} + +html { + font-size: 16px; + -webkit-font-smoothing: antialiased; + -webkit-text-size-adjust: 100%; +} + +body { + font-family: var(--font-sans); + background: var(--bg); + color: var(--text); + min-height: 100vh; + line-height: 1.6; + overflow-x: hidden; + width: 100vw; +} + +html { + overflow-x: hidden; +} + +a { + color: var(--phosphor); + text-decoration: none; +} +a:hover { + color: var(--phosphor-glow); + text-shadow: 0 0 8px var(--phosphor-glow); +} + +img { + max-width: 100%; + display: block; +} + +/* ═══════════════════════════════════════════════════════════════ + TYPOGRAPHY + ═══════════════════════════════════════════════════════════════ */ +h1, h2, h3, h4 { + color: var(--text-bright); + font-weight: 700; + line-height: 1.3; +} +h1 { font-size: 2rem; } +h2 { font-size: 1.5rem; } +h3 { font-size: 1.2rem; } + +/* ═══════════════════════════════════════════════════════════════ + BUTTONS + ═══════════════════════════════════════════════════════════════ */ +.btn { + display: inline-flex; + align-items: center; + gap: 8px; + padding: 10px 20px; + border: 1px solid var(--phosphor-dim); + border-radius: var(--radius-sm); + background: transparent; + color: var(--phosphor); + font-family: var(--font-sans); + font-size: 0.9rem; + font-weight: 600; + cursor: pointer; + transition: all 0.15s ease; +} +.btn:hover { + background: var(--phosphor-burn); + border-color: var(--phosphor); + box-shadow: 0 0 12px var(--phosphor-dark); +} +.btn:active { + transform: scale(0.97); +} + +.btn-primary { + background: var(--phosphor-dark); + border-color: var(--phosphor); + color: var(--phosphor-glow); +} +.btn-primary:hover { + background: var(--phosphor-dim); + color: var(--bg); +} + +.btn-danger { + border-color: #cc3333; + color: #cc3333; +} +.btn-danger:hover { + background: #331111; + border-color: #ff4444; + color: #ff4444; + box-shadow: 0 0 12px #331111; +} + +/* ═══════════════════════════════════════════════════════════════ + INPUTS + ═══════════════════════════════════════════════════════════════ */ +input, +textarea, +select { + background: var(--surface); + border: 1px solid var(--border); + border-radius: var(--radius-sm); + color: var(--text); + padding: 10px 14px; + font-family: var(--font-sans); + font-size: 0.9rem; + transition: border-color 0.15s; +} +input:focus, +textarea:focus, +select:focus { + outline: none; + border-color: var(--phosphor-dim); + box-shadow: 0 0 0 3px var(--border-glow); +} +input::placeholder { + color: var(--text-dim); +} + +/* ═══════════════════════════════════════════════════════════════ + LAYOUT UTILITIES + ═══════════════════════════════════════════════════════════════ */ +.container { + max-width: var(--max-width); + margin: 0 auto; + padding: 0 24px; +} +@media (max-width: 640px) { + .container { padding: 0 12px; } +} + +/* ═══════════════════════════════════════════════════════════════ + RESPONSIVE TOUCH ADJUSTMENTS + ═══════════════════════════════════════════════════════════════ */ +@media (max-width: 640px) { + h1 { font-size: 1.5rem; } + h2 { font-size: 1.25rem; } + .btn { padding: 8px 14px; font-size: 0.85rem; min-height: 40px; } + input, textarea, select { font-size: 16px; } /* prevents iOS zoom */ +} + +/* ═══════════════════════════════════════════════════════════════ + SCROLLBAR + ═══════════════════════════════════════════════════════════════ */ +::-webkit-scrollbar { + width: 8px; +} +::-webkit-scrollbar-track { + background: var(--bg); +} +::-webkit-scrollbar-thumb { + background: var(--surface-hover); + border-radius: 4px; +} +::-webkit-scrollbar-thumb:hover { + background: var(--phosphor-dark); +} + +/* ═══════════════════════════════════════════════════════════════ + ANIMATIONS + ═══════════════════════════════════════════════════════════════ */ +@keyframes scanline { + 0% { transform: translateY(0); } + 100% { transform: translateY(4px); } +} + +@keyframes flicker { + 0%, 100% { opacity: 1; } + 50% { opacity: 0.97; } +} + +@keyframes phosphor-pulse { + 0%, 100% { text-shadow: 0 0 4px var(--phosphor-dim); } + 50% { text-shadow: 0 0 12px var(--phosphor), 0 0 24px var(--phosphor-dark); } +} + +/* Subtle CRT effect on hover cards */ +.crt-hover { + position: relative; +} +.crt-hover::after { + content: ""; + position: absolute; + inset: 0; + background: repeating-linear-gradient( + 0deg, + transparent, + transparent 2px, + rgba(51, 255, 51, 0.015) 2px, + rgba(51, 255, 51, 0.015) 4px + ); + pointer-events: none; + opacity: 0; + transition: opacity 0.3s; +} +.crt-hover:hover::after { + opacity: 1; +} diff --git a/frontend/src/lib/GameCard.svelte b/frontend/src/lib/GameCard.svelte new file mode 100644 index 0000000..a605a2e --- /dev/null +++ b/frontend/src/lib/GameCard.svelte @@ -0,0 +1,118 @@ + + + + + \ No newline at end of file diff --git a/frontend/src/lib/Header.svelte b/frontend/src/lib/Header.svelte new file mode 100644 index 0000000..a6840c3 --- /dev/null +++ b/frontend/src/lib/Header.svelte @@ -0,0 +1,72 @@ + + +
+ +
+ + \ No newline at end of file diff --git a/frontend/src/lib/__tests__/GameCard.test.js b/frontend/src/lib/__tests__/GameCard.test.js new file mode 100644 index 0000000..9232948 --- /dev/null +++ b/frontend/src/lib/__tests__/GameCard.test.js @@ -0,0 +1,71 @@ +import { describe, it, expect } from "vitest"; +import { render, screen } from "@testing-library/svelte"; +import GameCard from "../GameCard.svelte"; + +function makeGame(overrides = {}) { + return { + id: "test-1", + title: "Test Game", + year: 1995, + genre: "Adventure", + platform: "dos", + has_cover: false, + ...overrides, + }; +} + +describe("GameCard", () => { + it("renders the game title", () => { + render(GameCard, { props: { game: makeGame() } }); + expect(screen.getByText("Test Game")).toBeTruthy(); + }); + + it("renders the year when provided", () => { + render(GameCard, { props: { game: makeGame({ year: 1997 }) } }); + expect(screen.getByText("1997")).toBeTruthy(); + }); + + it("does not render year when absent", () => { + render(GameCard, { props: { game: makeGame({ year: null }) } }); + expect(screen.queryByText("1995")).toBeNull(); + }); + + it("renders the genre when provided", () => { + render(GameCard, { props: { game: makeGame({ genre: "RPG" }) } }); + expect(screen.getByText("RPG")).toBeTruthy(); + }); + + it("shows a cover image when has_cover is true", () => { + const game = makeGame({ has_cover: true }); + render(GameCard, { props: { game } }); + const img = screen.getByRole("img"); + expect(img).toBeTruthy(); + expect(img.getAttribute("src")).toBe(`/games/${game.id}/cover.jpg`); + expect(img.getAttribute("alt")).toBe(game.title); + }); + + it("shows a placeholder when has_cover is false", () => { + render(GameCard, { props: { game: makeGame({ has_cover: false }) } }); + expect(screen.getByText("💾")).toBeTruthy(); + }); + + it("shows Windows badge for windows platform", () => { + render(GameCard, { + props: { game: makeGame({ platform: "windows" }) }, + }); + expect(screen.getByText(/🪟/)).toBeTruthy(); + }); + + it("does not show Windows badge for DOS platform", () => { + render(GameCard, { props: { game: makeGame({ platform: "dos" }) } }); + expect(screen.queryByText(/🪟/)).toBeNull(); + }); + + it("navigates on click", async () => { + window.location.hash = ""; + render(GameCard, { props: { game: makeGame() } }); + const btn = screen.getByRole("button"); + btn.click(); + expect(window.location.hash).toBe("#/game/test-1"); + }); +}); diff --git a/frontend/src/lib/__tests__/api.test.js b/frontend/src/lib/__tests__/api.test.js new file mode 100644 index 0000000..aea4cb6 --- /dev/null +++ b/frontend/src/lib/__tests__/api.test.js @@ -0,0 +1,68 @@ +import { describe, it, expect } from "vitest"; +import { artworkUrl, bundleUrl, setupBundleUrl } from "../api.js"; + +describe("artworkUrl", () => { + it("returns null for null input", () => { + expect(artworkUrl(null)).toBeNull(); + }); + + it("returns null for undefined input", () => { + expect(artworkUrl(undefined)).toBeNull(); + }); + + it("passes through absolute HTTP URLs", () => { + expect(artworkUrl("https://example.com/cover.jpg")).toBe( + "https://example.com/cover.jpg" + ); + }); + + it("proxies relative paths through /artwork/", () => { + expect(artworkUrl("images/game.png")).toBe("/artwork/images/game.png"); + }); + + it("preserves nested relative paths", () => { + expect(artworkUrl("some/deep/path/file.webp")).toBe( + "/artwork/some/deep/path/file.webp" + ); + }); +}); + +describe("bundleUrl", () => { + it("returns null for null game", () => { + expect(bundleUrl(null)).toBeNull(); + }); + + it("returns null for undefined game", () => { + expect(bundleUrl(undefined)).toBeNull(); + }); + + it("builds URL from bundle_file", () => { + expect(bundleUrl({ bundle_file: "mygame.zip" })).toBe("/games/mygame.zip"); + }); + + it("preserves subdirectory bundle paths", () => { + expect(bundleUrl({ bundle_file: "subdir/game.zip" })).toBe( + "/games/subdir/game.zip" + ); + }); +}); + +describe("setupBundleUrl", () => { + it("returns null for null game", () => { + expect(setupBundleUrl(null)).toBeNull(); + }); + + it("returns null for undefined game", () => { + expect(setupBundleUrl(undefined)).toBeNull(); + }); + + it("builds API setup URL from game id", () => { + expect(setupBundleUrl({ id: "game-1" })).toBe( + "/api/games/game-1/setup-bundle" + ); + }); + + it("handles games with numeric id", () => { + expect(setupBundleUrl({ id: 42 })).toBe("/api/games/42/setup-bundle"); + }); +}); diff --git a/frontend/src/lib/__tests__/router.test.js b/frontend/src/lib/__tests__/router.test.js new file mode 100644 index 0000000..bc6d190 --- /dev/null +++ b/frontend/src/lib/__tests__/router.test.js @@ -0,0 +1,33 @@ +import { describe, it, expect, vi } from "vitest"; +import { push, replace } from "../router.js"; + +describe("router", () => { + describe("push", () => { + it("sets window.location.hash with # prefix", () => { + window.location.hash = ""; + push("/game/123"); + expect(window.location.hash).toBe("#/game/123"); + }); + + it("handles root path", () => { + window.location.hash = ""; + push("/"); + expect(window.location.hash).toBe("#/"); + }); + + it("replaces hash on subsequent calls", () => { + window.location.hash = ""; + push("/first"); + push("/second"); + expect(window.location.hash).toBe("#/second"); + }); + }); + + describe("replace", () => { + it("sets hash via replace (no back-navigation allowed)", () => { + window.location.hash = "#/old"; + replace("/new"); + expect(window.location.hash).toBe("#/new"); + }); + }); +}); diff --git a/frontend/src/lib/api.js b/frontend/src/lib/api.js new file mode 100644 index 0000000..34a1c41 --- /dev/null +++ b/frontend/src/lib/api.js @@ -0,0 +1,118 @@ +/** API client for DOStalgia backend. */ + +const BASE = import.meta.env.PROD ? "" : ""; // Proxy handles it in dev + +async function request(path, options = {}) { + const res = await fetch(`${BASE}${path}`, { + headers: { "Content-Type": "application/json", ...options.headers }, + ...options, + }); + if (!res.ok) { + const err = await res.json().catch(() => ({ detail: res.statusText })); + throw new Error(err.detail || `HTTP ${res.status}`); + } + return res.json(); +} + +/** Fetch game list */ +export async function listGames(params = {}) { + const qs = new URLSearchParams(); + if (params.search) qs.set("search", params.search); + if (params.genre) qs.set("genre", params.genre); + if (params.limit) qs.set("limit", params.limit); + if (params.offset) qs.set("offset", params.offset); + return request(`/api/games?${qs}`); +} + +/** Fetch single game */ +export async function getGame(id) { + return request(`/api/games/${id}`); +} + +/** Update game metadata */ +export async function updateGame(id, data) { + return request(`/api/games/${id}`, { + method: "PATCH", + body: JSON.stringify(data), + }); +} + +/** Delete a game */ +export async function deleteGame(id) { + return request(`/api/games/${id}`, { method: "DELETE" }); +} + +/** Upload a game ZIP */ +export async function uploadGame(file, title, igdbId) { + const form = new FormData(); + form.append("file", file); + if (title) form.append("title", title); + if (igdbId) form.append("igdb_id", String(igdbId)); + + const res = await fetch(`${BASE}/api/upload`, { + method: "POST", + body: form, + }); + if (!res.ok) { + const err = await res.json().catch(() => ({ detail: res.statusText })); + throw new Error(err.detail || `HTTP ${res.status}`); + } + return res.json(); +} + +/** Search IGDB for a game title (requires TWITCH_CLIENT_ID/SECRET set) */ +export async function searchIGDB(query) { + const res = await fetch(`${BASE}/api/igdb/search?q=${encodeURIComponent(query)}`); + if (!res.ok) { + const err = await res.json().catch(() => ({ error: res.statusText })); + throw new Error(err.error || `HTTP ${res.status}`); + } + return res.json(); +} + +/** Apply IGDB metadata + cover to a game (auto or by igdb_id) */ +export async function scrapeIGDB(gameId, igdbId) { + const body = igdbId ? { igdb_id: igdbId } : {}; + const res = await fetch(`${BASE}/api/igdb/scrape/${gameId}`, { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify(body), + }); + if (!res.ok) { + const err = await res.json().catch(() => ({ error: res.statusText })); + throw new Error(err.error || `HTTP ${res.status}`); + } + return res.json(); +} + +/** Download a game's ZIP bundle */ +export function downloadGame(id) { + window.open(`${BASE}/api/games/${id}/download`, '_blank'); +} + +/** Check IGDB status */ +export async function igdbStatus() { + const res = await fetch(`${BASE}/api/igdb/status`); + return res.json(); +} + +/** Get artwork URL for a path — returns proxy URL or placeholder */ +export function artworkUrl(path) { + if (!path) return null; + if (path.startsWith("http")) return path; + return `/artwork/${path}`; +} + +/** Get game bundle URL for normal play */ +export function bundleUrl(game) { + if (!game) return null; + // Use the bundle_file path from the backend (handles both old flat layout + // and new in-directory layout transparently) + return `/games/${game.bundle_file}`; +} + +/** Get game bundle URL for setup mode (runs SETUP.EXE instead) */ +export function setupBundleUrl(game) { + if (!game) return null; + return `/api/games/${game.id}/setup-bundle`; +} diff --git a/frontend/src/lib/router.js b/frontend/src/lib/router.js new file mode 100644 index 0000000..bc63d91 --- /dev/null +++ b/frontend/src/lib/router.js @@ -0,0 +1,9 @@ +/** Simple hash-based router for SPA. */ + +export function push(path) { + window.location.hash = "#" + path; +} + +export function replace(path) { + window.location.replace("#" + path); +} diff --git a/frontend/src/main.js b/frontend/src/main.js new file mode 100644 index 0000000..88ff31f --- /dev/null +++ b/frontend/src/main.js @@ -0,0 +1,8 @@ +import App from "./App.svelte"; +import { mount } from "svelte"; + +const app = mount(App, { + target: document.getElementById("app"), +}); + +export default app; diff --git a/frontend/src/pages/GameDetail.svelte b/frontend/src/pages/GameDetail.svelte new file mode 100644 index 0000000..e6c6f83 --- /dev/null +++ b/frontend/src/pages/GameDetail.svelte @@ -0,0 +1,714 @@ + + +{#if loading} +
Loading...
+{:else if error && !game} +
{error}
+ ← Back to Library +{:else if game} +
+ ← Back to Library + +
+ +
+ {#if game.has_cover} + {game.title} + {:else} +
💾
+ {/if} + {#if !editing} + {#if game.year || game.genre} +
+ {#if game.year} + {game.year} + {/if} + {#if game.genre} + {game.genre} + {/if} +
+ {/if} + {#if game.developer} +

by {game.developer}{game.publisher ? ` · ${game.publisher}` : ""}

+ {/if} + {/if} +
+ + +
+ {#if editing} + +
+ + +
+
+ + +
+ +
+ +
+ {#if game.executables && game.executables.length > 0} +
+ Main executable: +
+ {#each game.executables as exe} + + {/each} +
+
+ {/if} +
+ + +
+ {:else} +

{game.title}

+ {#if game.platform} +
+ {#if game.platform === 'windows'} + 🪟 Requires Windows 3.1 — may not work in browser + {:else} + 💾 DOS + {#if game.bundle_size} + · {game.bundle_size >= 1073741824 + ? (game.bundle_size / 1073741824).toFixed(1) + ' GB' + : game.bundle_size >= 1048576 + ? Math.round(game.bundle_size / 1048576) + ' MB' + : Math.round(game.bundle_size / 1024) + ' KB'} + {/if} + {/if} +
+ {/if} + {#if game.description} +

{game.description}

+ {/if} + +
+ {#if game.ready && (game.platform !== 'windows')} + + {:else if game.ready && game.platform === 'windows'} + + {/if} + {#if game.has_setup && game.platform !== 'windows'} + + {/if} + + + +
+ + + {#if selectedMedia} +
+ 📺 Media +
+ {#if selectedMedia.type === 'video'} + + {:else if selectedMedia.type === 'screenshot'} + Screenshot + {/if} +
+
+ {#each game.videos ?? [] as video, i} + + {/each} + {#each game.screenshots ?? [] as shot} + + {/each} +
+
+ {/if} + + +
+
+ 📡 IGDB Metadata +
+ + +
+
+ + {#if igdbResults !== null} +
+ e.key === "Enter" && handleSearchIGDB()} + /> +
+ {#if igdbResults.length > 0} +
+ {#each igdbResults as result (result.igdb_id)} + + {/each} +
+ {/if} + {/if} + + {#if scrapeError} +
+ {scrapeError} +
+ {/if} +
+ {/if} +
+
+
+{/if} + + diff --git a/frontend/src/pages/Library.svelte b/frontend/src/pages/Library.svelte new file mode 100644 index 0000000..c43a1fc --- /dev/null +++ b/frontend/src/pages/Library.svelte @@ -0,0 +1,850 @@ + + +
+ + + + +
+ + + {#if hasActiveFilters()} +
+ {#each [...selectedYears] as y} + + {/each} + {#each [...selectedGenres] as g} + + {/each} +
+ {/if} + + {#if pendingFile} + + {/if} + + {#if uploadError} +
{uploadError}
+ {/if} + + {#if loading} +
Scanning library...
+ {:else if filteredGames.length === 0} +
+
💾
+

{hasActiveFilters() ? "No matching games" : "No games yet"}

+

{hasActiveFilters() ? "Try changing your filters" : "Upload a DOS game ZIP to get started"}

+ {#if hasActiveFilters()} + + {:else} + + {/if} +
+ {:else} +
+ {#each filteredGames as game (game.id)} + + {/each} +
+
{filteredGames.length} game{filteredGames.length !== 1 ? "s" : ""}
+ {/if} + + + +
+
+ + diff --git a/frontend/src/pages/Play.svelte b/frontend/src/pages/Play.svelte new file mode 100644 index 0000000..5604b66 --- /dev/null +++ b/frontend/src/pages/Play.svelte @@ -0,0 +1,300 @@ + + +
+ +
+ {#if game} + + {#if running} + + {/if} + {/if} +
+ + + {#if error && !booting} +
{error}
+ {/if} + + + {#if unsupported} +
+
🪟
+

Windows game

+

{game.title} is a Windows application and won't run in the browser DOS emulator without Windows 3.1 installed.

+
+ + +
+
+ {/if} + + + {#if !running} +
+ {#if loading} +
+

Loading game data...

+ {:else if booting} +
⚙️
+

{game?.title || ""}

+ {#if isSetup} +

Starting setup utility...

+

⚙️ Configure controls, then exit SETUP to save

+ {:else} +

Starting emulator...

+

💾 Game saves are stored automatically

+ {/if} + {:else if error} +
⚠️
+

Failed to start

+

{error}

+ {:else if !game?.ready} +
🕹️
+

Not ready

+

This game hasn't been processed yet.

+ {/if} +
+ {/if} + + +
+
+ + diff --git a/frontend/src/pages/__tests__/GameDetail.test.js b/frontend/src/pages/__tests__/GameDetail.test.js new file mode 100644 index 0000000..92547af --- /dev/null +++ b/frontend/src/pages/__tests__/GameDetail.test.js @@ -0,0 +1,185 @@ +import { describe, it, expect, vi, beforeEach } from "vitest"; +import { render, screen } from "@testing-library/svelte"; +import GameDetail from "../GameDetail.svelte"; + +// Mock api.js +vi.mock("../../lib/api.js", () => ({ + getGame: vi.fn(), + deleteGame: vi.fn(), + updateGame: vi.fn(), + searchIGDB: vi.fn(), + scrapeIGDB: vi.fn(), + downloadGame: vi.fn(), + bundleUrl: vi.fn(), + setupBundleUrl: vi.fn(), + artworkUrl: vi.fn(), +})); + +// Mock router +vi.mock("../../lib/router.js", () => ({ + push: vi.fn(), +})); + +import * as api from "../../lib/api.js"; + +function makeGame(overrides = {}) { + return { + id: "game-1", + title: "Commander Keen", + year: 1991, + genre: "Platformer", + developer: "id Software", + publisher: "Apogee", + description: "A classic DOS platformer.", + platform: "dos", + ready: true, + has_cover: false, + has_setup: false, + bundle_file: "commander-keen.zip", + bundle_size: 512000, + executables: ["keen.exe"], + executable: null, + videos: [], + screenshots: [], + ...overrides, + }; +} + +describe("GameDetail", () => { + beforeEach(() => { + vi.clearAllMocks(); + }); + + it("shows loading state initially", () => { + api.getGame.mockReturnValue(new Promise(() => {})); + render(GameDetail, { props: { id: "game-1" } }); + expect(screen.getByText("Loading...")).toBeTruthy(); + }); + + it("shows error when game is not found", async () => { + api.getGame.mockRejectedValue(new Error("Game not found")); + render(GameDetail, { props: { id: "missing" } }); + await vi.waitFor(() => { + expect(screen.getByText("Game not found")).toBeTruthy(); + }); + }); + + it("renders game title", async () => { + api.getGame.mockResolvedValue(makeGame()); + render(GameDetail, { props: { id: "game-1" } }); + await vi.waitFor(() => { + expect(screen.getByText("Commander Keen")).toBeTruthy(); + }); + }); + + it("renders developer and publisher", async () => { + api.getGame.mockResolvedValue( + makeGame({ developer: "id Software", publisher: "Apogee" }) + ); + render(GameDetail, { props: { id: "game-1" } }); + await vi.waitFor(() => { + expect(screen.getByText(/id Software/)).toBeTruthy(); + expect(screen.getByText(/Apogee/)).toBeTruthy(); + }); + }); + + it("renders year and genre as links", async () => { + api.getGame.mockResolvedValue( + makeGame({ year: 1991, genre: "Platformer" }) + ); + render(GameDetail, { props: { id: "game-1" } }); + await vi.waitFor(() => { + expect(screen.getByText("1991").closest("a")).toBeTruthy(); + expect(screen.getByText("Platformer").closest("a")).toBeTruthy(); + }); + }); + + it("shows DOS badge for dos platform", async () => { + api.getGame.mockResolvedValue(makeGame({ platform: "dos" })); + render(GameDetail, { props: { id: "game-1" } }); + await vi.waitFor(() => { + expect(screen.getByText("💾 DOS")).toBeTruthy(); + }); + }); + + it("shows Windows badge for windows platform", async () => { + api.getGame.mockResolvedValue(makeGame({ platform: "windows" })); + render(GameDetail, { props: { id: "game-1" } }); + await vi.waitFor(() => { + expect(screen.getByText(/Windows 3\.1/)).toBeTruthy(); + }); + }); + + it("shows Play button for ready DOS games", async () => { + api.getGame.mockResolvedValue( + makeGame({ ready: true, platform: "dos" }) + ); + render(GameDetail, { props: { id: "game-1" } }); + await vi.waitFor(() => { + expect(screen.getByText("▶ Play")).toBeTruthy(); + }); + }); + + it("shows disabled Play button for Windows games", async () => { + api.getGame.mockResolvedValue( + makeGame({ ready: true, platform: "windows" }) + ); + render(GameDetail, { props: { id: "game-1" } }); + await vi.waitFor(() => { + expect(screen.getByText("▶ Unplayable")).toBeTruthy(); + }); + }); + + it("shows Setup button when has_setup is true", async () => { + api.getGame.mockResolvedValue( + makeGame({ has_setup: true }) + ); + render(GameDetail, { props: { id: "game-1" } }); + await vi.waitFor(() => { + expect(screen.getByText("🛠 Setup")).toBeTruthy(); + }); + }); + + it("shows Edit, Download, Delete buttons", async () => { + api.getGame.mockResolvedValue(makeGame()); + render(GameDetail, { props: { id: "game-1" } }); + await vi.waitFor(() => { + expect(screen.getByText("✏ Edit")).toBeTruthy(); + expect(screen.getByText("⬇ Download")).toBeTruthy(); + expect(screen.getByText("✕ Delete")).toBeTruthy(); + }); + }); + + it("enters edit mode when Edit button is clicked", async () => { + api.getGame.mockResolvedValue(makeGame()); + render(GameDetail, { props: { id: "game-1" } }); + await vi.waitFor(() => { + expect(screen.getByText("✏ Edit")).toBeTruthy(); + }); + screen.getByText("✏ Edit").click(); + await vi.waitFor(() => { + expect(screen.getByText("Save")).toBeTruthy(); + expect(screen.getByText("Cancel")).toBeTruthy(); + }); + }); + + it("shows cover placeholder when no cover", async () => { + api.getGame.mockResolvedValue(makeGame({ has_cover: false })); + render(GameDetail, { props: { id: "game-1" } }); + await vi.waitFor(() => { + expect(screen.getByText("💾")).toBeTruthy(); + }); + }); + + it("shows description when provided", async () => { + api.getGame.mockResolvedValue( + makeGame({ description: "A classic DOS platformer." }) + ); + render(GameDetail, { props: { id: "game-1" } }); + await vi.waitFor(() => { + expect( + screen.getByText("A classic DOS platformer.") + ).toBeTruthy(); + }); + }); +}); diff --git a/frontend/src/pages/__tests__/Library.test.js b/frontend/src/pages/__tests__/Library.test.js new file mode 100644 index 0000000..a8dbf8a --- /dev/null +++ b/frontend/src/pages/__tests__/Library.test.js @@ -0,0 +1,143 @@ +import { describe, it, expect, vi, beforeEach } from "vitest"; +import { render, screen } from "@testing-library/svelte"; +import Library from "../Library.svelte"; + +// Mock the API module that Library imports +vi.mock("../../lib/api.js", () => ({ + listGames: vi.fn(), + uploadGame: vi.fn(), + searchIGDB: vi.fn(), +})); + +import * as api from "../../lib/api.js"; + +function makeGame(overrides = {}) { + return { + id: "g1", + title: "Test Game", + year: 1995, + genre: "Adventure", + platform: "dos", + has_cover: false, + ...overrides, + }; +} + +describe("Library", () => { + beforeEach(() => { + vi.clearAllMocks(); + window.location.hash = "#/"; + }); + + it("shows loading state initially", () => { + api.listGames.mockReturnValue(new Promise(() => {})); // never resolves + render(Library); + expect(screen.getByText("Scanning library...")).toBeTruthy(); + }); + + it("shows empty state when no games", async () => { + api.listGames.mockResolvedValue({ games: [] }); + render(Library); + await vi.waitFor(() => { + expect(screen.getByText("No games yet")).toBeTruthy(); + }); + }); + + it("renders game cards when games load", async () => { + api.listGames.mockResolvedValue({ + games: [ + makeGame({ id: "g1", title: "Game One" }), + makeGame({ id: "g2", title: "Game Two" }), + ], + }); + render(Library); + await vi.waitFor(() => { + expect(screen.getByText("Game One")).toBeTruthy(); + expect(screen.getByText("Game Two")).toBeTruthy(); + }); + }); + + it("shows game count", async () => { + api.listGames.mockResolvedValue({ + games: [ + makeGame({ id: "g1", title: "One" }), + makeGame({ id: "g2", title: "Two" }), + ], + }); + render(Library); + await vi.waitFor(() => { + expect(screen.getByText("2 games")).toBeTruthy(); + }); + }); + + it("shows singular game count for one game", async () => { + api.listGames.mockResolvedValue({ + games: [makeGame({ id: "g1", title: "Only" })], + }); + render(Library); + await vi.waitFor(() => { + expect(screen.getByText("1 game")).toBeTruthy(); + }); + }); + + describe("filters", () => { + it("shows filter options derived from loaded games", async () => { + api.listGames.mockResolvedValue({ + games: [ + makeGame({ id: "g1", genre: "RPG", year: 1997 }), + makeGame({ id: "g2", genre: "RPG", year: 1998 }), + makeGame({ id: "g3", genre: "Adventure", year: 1995 }), + ], + }); + render(Library); + await vi.waitFor(() => { + // Year labels appear both as filter options and in game cards + expect(screen.getAllByText("1995").length).toBeGreaterThanOrEqual(1); + expect(screen.getAllByText("1997").length).toBeGreaterThanOrEqual(1); + expect(screen.getAllByText("1998").length).toBeGreaterThanOrEqual(1); + }); + }); + + it("applies genre filter from props", async () => { + api.listGames.mockResolvedValue({ + games: [ + makeGame({ id: "g1", title: "RPG Game", genre: "RPG" }), + makeGame({ id: "g2", title: "Adventure Game", genre: "Adventure" }), + ], + }); + render(Library, { props: { genreFilter: "RPG" } }); + await vi.waitFor(() => { + expect(screen.getByText("RPG Game")).toBeTruthy(); + expect(screen.queryByText("Adventure Game")).toBeNull(); + }); + }); + + it("applies year filter from props", async () => { + api.listGames.mockResolvedValue({ + games: [ + makeGame({ id: "g1", title: "Old Game", year: 1993 }), + makeGame({ id: "g2", title: "New Game", year: 1997 }), + ], + }); + render(Library, { props: { yearFilter: "1997" } }); + await vi.waitFor(() => { + expect(screen.getByText("New Game")).toBeTruthy(); + expect(screen.queryByText("Old Game")).toBeNull(); + }); + }); + + it("shows filter-empty message when no filter options exist", async () => { + api.listGames.mockResolvedValue({ + games: [ + makeGame({ id: "g1", genre: null, year: null }), + makeGame({ id: "g2", genre: null, year: null }), + ], + }); + render(Library); + await vi.waitFor(() => { + const dashes = screen.getAllByText("—"); + expect(dashes.length).toBeGreaterThanOrEqual(2); + }); + }); + }); +}); diff --git a/frontend/src/pages/__tests__/Play.test.js b/frontend/src/pages/__tests__/Play.test.js new file mode 100644 index 0000000..eafe9d8 --- /dev/null +++ b/frontend/src/pages/__tests__/Play.test.js @@ -0,0 +1,77 @@ +import { describe, it, expect, vi, beforeEach } from "vitest"; +import { render, screen } from "@testing-library/svelte"; +import Play from "../Play.svelte"; + +// Mock the API module that Play imports +vi.mock("../../lib/api.js", () => ({ + getGame: vi.fn(), + bundleUrl: vi.fn(), + setupBundleUrl: vi.fn(), +})); + +// Mock router +vi.mock("../../lib/router.js", () => ({ + push: vi.fn(), +})); + +import * as api from "../../lib/api.js"; + +function makeGame(overrides = {}) { + return { + id: "game-1", + title: "Commander Keen", + platform: "dos", + ready: true, + ...overrides, + }; +} + +describe("Play", () => { + beforeEach(() => { + vi.clearAllMocks(); + }); + + it("shows loading state initially", () => { + api.getGame.mockReturnValue(new Promise(() => {})); + render(Play, { props: { id: "game-1" } }); + expect(screen.getByText("Loading game data...")).toBeTruthy(); + }); + + it("shows not-ready state when game is not processed", async () => { + api.getGame.mockResolvedValue(makeGame({ ready: false })); + render(Play, { props: { id: "game-1" } }); + await vi.waitFor(() => { + expect(screen.getByText("Not ready")).toBeTruthy(); + }); + }); + + it("shows unsupported warning for Windows games", async () => { + api.getGame.mockResolvedValue( + makeGame({ platform: "windows", ready: true }) + ); + render(Play, { props: { id: "game-1" } }); + await vi.waitFor(() => { + expect(screen.getByText("Windows game")).toBeTruthy(); + }); + }); + + it("shows error box when game fetch fails", async () => { + api.getGame.mockRejectedValue(new Error("Game not found")); + render(Play, { props: { id: "missing" } }); + // The error should appear in the overlay as well + await vi.waitFor(() => { + expect(screen.getByText("⚠️")).toBeTruthy(); + }); + }); + + it("shows emulator booting state for ready DOS games", async () => { + api.getGame.mockResolvedValue( + makeGame({ platform: "dos", ready: true }) + ); + api.bundleUrl.mockReturnValue("/games/game-1.jsdos"); + render(Play, { props: { id: "game-1" } }); + await vi.waitFor(() => { + expect(screen.getByText("Starting emulator...")).toBeTruthy(); + }); + }); +}); diff --git a/frontend/svelte.config.js b/frontend/svelte.config.js new file mode 100644 index 0000000..1c8d7f1 --- /dev/null +++ b/frontend/svelte.config.js @@ -0,0 +1,5 @@ +export default { + compilerOptions: { + runes: true, + }, +}; diff --git a/frontend/vite.config.js b/frontend/vite.config.js new file mode 100644 index 0000000..f599bcc --- /dev/null +++ b/frontend/vite.config.js @@ -0,0 +1,27 @@ +/// +import { defineConfig } from "vite"; +import { svelte } from "@sveltejs/vite-plugin-svelte"; + +export default defineConfig({ + plugins: [svelte()], + server: { + port: 5173, + proxy: { + "/api": "http://localhost:8765", + "/games": "http://localhost:8765", + "/artwork": "http://localhost:8765", + }, + }, + build: { + outDir: "dist", + emptyOutDir: true, + }, + resolve: { + conditions: process.env.VITEST ? ["browser", "module", "import"] : [], + }, + test: { + environment: "jsdom", + globals: true, + include: ["src/**/*.test.js"], + }, +}); diff --git a/images/game.jpeg b/images/game.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..a7551de7099453c75f24ca0e690bebbf2a070164 GIT binary patch literal 268547 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
3GOwT-X^&Dxv61~8}i)N)zL+7Vf{?Yr% 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 LC;+00C97 literal 0 HcmV?d00001 diff --git a/images/library.jpeg b/images/library.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..f101c2dc602909ca54ae64fda17d3c4402c3324c GIT binary patch literal 321347 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 Xx-w!AgxQ}qw2$(*ojY~K579y|(Q#1Iy*QCbJS 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

%tZ6H+BIPJ|rnW&w+W#tp{X;fGi3uMfT_ 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

O4m}lYrswMA7?`c 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∋4-i`+76i$hb5`|*mt0|7E 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≪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 N2U4<&obc=n{~g1P5HbJ& literal 0 HcmV?d00001 diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..8b0b48d --- /dev/null +++ b/pom.xml @@ -0,0 +1,155 @@ + + + 4.0.0 + + org.dostalgia + dostalgia + 0.1.0 + + + 21 + 21 + 21 + UTF-8 + 3.19.2 + io.quarkus.platform + + false + + false + + + + + + ${quarkus.platform.group-id} + quarkus-bom + ${quarkus.platform.version} + pom + import + + + + + + + + io.quarkus + quarkus-rest + + + + io.quarkus + quarkus-rest-jackson + + + + + io.quarkus + quarkus-vertx-http + + + + io.quarkus + quarkus-arc + + + + io.quarkus + quarkus-junit5 + test + + + + + + + ${quarkus.platform.group-id} + quarkus-maven-plugin + ${quarkus.platform.version} + true + + + + build + generate-code + + + + + + + org.apache.maven.plugins + maven-resources-plugin + 3.3.1 + + + copy-frontend + generate-resources + copy-resources + + ${project.build.directory}/classes/META-INF/resources + + + frontend/dist + false + + + + + + + + + org.codehaus.mojo + exec-maven-plugin + 3.5.0 + + + npm-install + initialize + exec + + frontend + npm + + ci + --prefer-offline + + ${skipFrontend} + + + + frontend-build + generate-resources + exec + + frontend + npm + + run + build + + ${skipFrontend} + + + + frontend-test + test + exec + + frontend + npm + + test + + ${skipFrontendTests} + + + + + + + diff --git a/src/main/java/org/dostalgia/CdImageService.java b/src/main/java/org/dostalgia/CdImageService.java new file mode 100644 index 0000000..68ebeed --- /dev/null +++ b/src/main/java/org/dostalgia/CdImageService.java @@ -0,0 +1,106 @@ +package org.dostalgia; + +import jakarta.enterprise.context.ApplicationScoped; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.logging.Logger; + +/** + * CD image utilities: CUE sheet repair and CD image discovery in directories and ZIPs. + */ +@ApplicationScoped +public class CdImageService { + + private static final Logger LOG = Logger.getLogger(CdImageService.class.getName()); + private static final java.util.Set CD_EXT = java.util.Set.of( + ".iso", ".cue", ".img", ".ccd", ".bin" + ); + + /** + * Fix .cue files that reference non-existent data files. + * CloneCD rips often generate a .cue referencing a .bin, but the actual file is .img. + */ + public void fixCueReferences(Path extractDir) throws IOException { + try (var walk = Files.walk(extractDir)) { + walk.filter(Files::isRegularFile) + .filter(f -> f.getFileName().toString().toLowerCase().endsWith(".cue")) + .forEach(f -> { + try { fixOneCue(f); } + catch (IOException e) { + LOG.warning("Failed to fix cue file " + f + ": " + e.getMessage()); + } + }); + } + } + + private void fixOneCue(Path cueFile) throws IOException { + String content = Files.readString(cueFile); + Path dir = cueFile.getParent(); + + var m = java.util.regex.Pattern + .compile("FILE\\s+\"([^\"]+)\"", java.util.regex.Pattern.CASE_INSENSITIVE) + .matcher(content); + if (!m.find()) return; + + String referenced = m.group(1); + Path refPath = dir.resolve(referenced); + if (Files.exists(refPath)) return; + + Path replacement = findDataFile(dir); + if (replacement == null) return; + + String actualName = replacement.getFileName().toString(); + content = content.substring(0, m.start(1)) + actualName + content.substring(m.end(1)); + Files.writeString(cueFile, content); + LOG.info("Fixed cue " + cueFile.getFileName() + ": '" + referenced + "' → '" + actualName + "'"); + } + + private Path findDataFile(Path dir) throws IOException { + try (var files = Files.list(dir)) { + return files.filter(Files::isRegularFile) + .filter(f -> { + String n = f.getFileName().toString().toLowerCase(); + return n.endsWith(".img") || n.endsWith(".bin"); + }) + .findFirst() + .orElse(null); + } + } + + /** Find mountable CD image files in a directory. Returns sorted relative paths. */ + public java.util.List findInDirectory(Path dir) throws IOException { + java.util.List cds = new java.util.ArrayList<>(); + try (var walk = Files.walk(dir)) { + walk.filter(Files::isRegularFile).forEach(f -> { + String name = f.getFileName().toString().toLowerCase(); + int dot = name.lastIndexOf('.'); + if (dot >= 0 && CD_EXT.contains(name.substring(dot))) { + cds.add(dir.relativize(f).toString().replace('\\', '/')); + } + }); + } + cds.sort(String::compareTo); + return cds; + } + + /** Find CD image files inside a .jsdos ZIP bundle. */ + public java.util.List findInBundle(Path bundlePath) throws IOException { + java.util.List cds = new java.util.ArrayList<>(); + try (var zis = new java.util.zip.ZipInputStream(Files.newInputStream(bundlePath))) { + java.util.zip.ZipEntry entry; + while ((entry = zis.getNextEntry()) != null) { + if (entry.isDirectory()) continue; + String name = entry.getName().toLowerCase(); + int dot = name.lastIndexOf('.'); + if (dot >= 0 && CD_EXT.contains(name.substring(dot))) { + cds.add(entry.getName()); + } + zis.closeEntry(); + } + } + cds.sort(String::compareTo); + return cds; + } +} diff --git a/src/main/java/org/dostalgia/ConfigBuilder.java b/src/main/java/org/dostalgia/ConfigBuilder.java new file mode 100644 index 0000000..5aa8298 --- /dev/null +++ b/src/main/java/org/dostalgia/ConfigBuilder.java @@ -0,0 +1,223 @@ +package org.dostalgia; + +import jakarta.enterprise.context.ApplicationScoped; + +import java.nio.charset.StandardCharsets; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +/** + * Single source of truth for all DOSBox configuration generation. + */ +@ApplicationScoped +public class ConfigBuilder { + + /** + * Build a dosbox.conf for a game with a known executable. + * @param relExe relative path to the executable inside the ZIP (e.g. "FALLOUT.EXE" or "FALLOUT/FALLOUT.EXE") + * @param cdImages relative paths to CD image files inside the ZIP + */ + public String buildDosboxConf(String relExe, List cdImages) { + var parts = splitExePath(relExe); + String dir = parts.dir(); + String exe = parts.exe(); + + return DOSBOX_CONF_TEMPLATE + .replace("${CD_MOUNTS}", buildCdMounts(cdImages)) + .replace("${EXEC_PATH}", buildExecPath(dir, exe)); + } + + /** Build dosbox.conf as UTF-8 bytes (for ZIP stream operations). */ + public byte[] buildDosboxConfBytes(String relExe, List cdImages) { + return buildDosboxConf(relExe, cdImages).getBytes(StandardCharsets.UTF_8); + } + + /** + * Build jsdos.json for js-dos v8 with the given executable path. + * js-dos v8 uses jsdos.json autoexec.script instead of the dosbox.conf [autoexec] section. + */ + public byte[] buildJsdosJson(String relExe, List cdImages) { + var parts = splitExePath(relExe); + String script = buildAutoexecScript(parts.dir(), parts.exe(), cdImages); + return buildJsdosJsonRaw(script); + } + + /** Build dosbox.conf for a CD-only game (no filesystem executables). */ + public String buildCdOnlyDosboxConf(List cdImages) { + return CD_ONLY_DOSBOX_CONF_TEMPLATE + .replace("${CD_MOUNTS}", buildCdMounts(cdImages)); + } + + /** Build jsdos.json for a CD-only game. */ + public byte[] buildCdOnlyJsdosJson(List cdImages) { + String script = buildCdMountScript(cdImages) + "c:\n"; + return buildJsdosJsonRaw(script); + } + + /** Split "dir/file.exe" into (dir, exe). Returns (null, file) if no directory separator. */ + public static ExeParts splitExePath(String relExe) { + if (relExe == null || relExe.isBlank()) { + return new ExeParts(null, ""); + } + int idx = relExe.replace('\\', '/').lastIndexOf('/'); + if (idx >= 0) { + return new ExeParts(relExe.substring(0, idx), relExe.substring(idx + 1)); + } + return new ExeParts(null, relExe); + } + + /** Escape a string for embedding inside a JSON string value. */ + public static String escapeJson(String s) { + return s.replace("\\", "\\\\").replace("\"", "\\\""); + } + + public record ExeParts(String dir, String exe) {} + + private static final String DOSBOX_CONF_TEMPLATE = """ + [sdl] + autolock=true + usescancodes=true + output=surface + + [cpu] + core=auto + cycles=auto + + [mixer] + nosound=false + rate=44100 + + [sblaster] + sbtype=sb16 + irq=7 + dma=1 + hdma=5 + + [dos] + xms=true + ems=true + umb=true + + [dosbox] + memsize=64 + + [autoexec] + @echo off + mount c . + ${CD_MOUNTS}c: + ${EXEC_PATH} + """; + + private static final String CD_ONLY_DOSBOX_CONF_TEMPLATE = """ + [sdl] + autolock=true + usescancodes=true + output=surface + + [cpu] + core=auto + cycles=auto + + [mixer] + nosound=false + rate=44100 + + [sblaster] + sbtype=sb16 + irq=7 + dma=1 + hdma=5 + + [dos] + xms=true + ems=true + umb=true + + [dosbox] + memsize=64 + + [autoexec] + @echo off + mount c . + ${CD_MOUNTS}c: + echo. + echo This game runs from the CD-ROM. + echo Type D: and press Enter, then look for the game executable (e.g. DOTT.EXE). + """; + + /** + * Build the CD mount lines for the autoexec section. + * Mounts ALL CD images, deduplicating by parent directory. + * Skips descriptor formats (.cue, .ccd) when a data format + * (.img, .iso, .bin) exists in the same directory. + */ + private static String buildCdMounts(List cdImages) { + if (cdImages == null || cdImages.isEmpty()) return ""; + // Deduplicate by parent directory — prefer data formats over descriptors + Set seenDirs = new HashSet<>(); + StringBuilder sb = new StringBuilder(); + char driveLetter = 'D'; + for (String img : cdImages) { + int slashIdx = img.lastIndexOf('/'); + String parentDir = slashIdx >= 0 ? img.substring(0, slashIdx) : ""; + if (seenDirs.contains(parentDir)) continue; + String imgLower = img.toLowerCase(); + // Skip descriptor formats if a data format exists in the same directory + if (imgLower.endsWith(".cue") || imgLower.endsWith(".ccd")) { + boolean hasData = cdImages.stream().anyMatch(i -> { + int is = i.lastIndexOf('/'); + String ip = is >= 0 ? i.substring(0, is) : ""; + String il = i.toLowerCase(); + return ip.equals(parentDir) + && (il.endsWith(".img") || il.endsWith(".iso") || il.endsWith(".bin")); + }); + if (hasData) continue; + } + seenDirs.add(parentDir); + String flags = imgLower.endsWith(".bin") ? " -t cdrom -fs iso" : " -t cdrom"; + sb.append("imgmount ").append(driveLetter).append(" \"") + .append(img).append("\"").append(flags).append("\n"); + driveLetter++; + } + return sb.toString(); + } + + private static String buildExecPath(String dir, String exe) { + if (dir == null) return exe + "\n"; + return "path=c:\\\ncd " + dir + "\n" + exe + "\n"; + } + + private static String buildCdMountScript(List cdImages) { + StringBuilder script = new StringBuilder(); + script.append("mount c .\n"); + char driveLetter = 'D'; + for (String img : cdImages) { + String imgLower = img.toLowerCase(); + String flags = imgLower.endsWith(".bin") && !imgLower.endsWith(".cue") + ? " -t cdrom -fs iso" : " -t cdrom"; + script.append("imgmount ").append(driveLetter).append(" \"") + .append(img).append("\"").append(flags).append("\n"); + driveLetter++; + } + return script.toString(); + } + + private static String buildAutoexecScript(String dir, String exe, List cdImages) { + StringBuilder script = new StringBuilder(buildCdMountScript(cdImages)); + script.append("c:\n"); + if (dir != null) { + script.append("path=c:\\\n"); + script.append("cd ").append(dir).append("\n"); + } + script.append(exe); + return script.toString(); + } + + private static byte[] buildJsdosJsonRaw(String script) { + String json = "{\"autoexec\":{\"options\":{\"script\":{\"value\":\"" + + escapeJson(script) + "\"}}}," + + "\"output\":{\"options\":{\"autolock\":{\"value\":true}}}}"; + return json.getBytes(StandardCharsets.UTF_8); + } +} diff --git a/src/main/java/org/dostalgia/ConfigPatcher.java b/src/main/java/org/dostalgia/ConfigPatcher.java new file mode 100644 index 0000000..739e5dd --- /dev/null +++ b/src/main/java/org/dostalgia/ConfigPatcher.java @@ -0,0 +1,152 @@ +package org.dostalgia; + +import jakarta.enterprise.context.ApplicationScoped; + +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.HashSet; +import java.util.Set; +import java.util.logging.Logger; +import java.util.regex.Pattern; + +/** + * Detects and fixes hardcoded absolute DOS paths in game config files. + * Handles the common case where game archives contain paths like + * C:\\FALLOUT1\\MASTER.DAT that break after directory flattening. + */ +@ApplicationScoped +public class ConfigPatcher { + + private static final Logger LOG = Logger.getLogger(ConfigPatcher.class.getName()); + private static final Pattern DRIVE_PATH = Pattern.compile("[A-Za-z]:([\\\\/])[^\\s\"\\r\\n]+"); + + /** Scan and fix absolute paths in all text files in the given directory. */ + public void fixAbsolutePaths(Path extractDir) throws IOException { + try (var walk = Files.walk(extractDir)) { + walk.filter(Files::isRegularFile) + .filter(f -> { + try { return isSmallTextFile(f); } + catch (IOException e) { return false; } + }) + .forEach(f -> { + try { + String text = Files.readString(f, StandardCharsets.ISO_8859_1); + String patched = patchText(text, extractDir); + if (!patched.equals(text)) { + Files.writeString(f, patched, StandardCharsets.ISO_8859_1); + LOG.info("Patched absolute paths in " + f.getFileName()); + } + } catch (IOException e) { + LOG.warning("Failed to patch " + f.getFileName() + ": " + e.getMessage()); + } + }); + } + } + + private static boolean isSmallTextFile(Path f) throws IOException { + long size = Files.size(f); + if (size > 100 * 1024 || size == 0) return false; + try (var is = Files.newInputStream(f)) { + byte[] head = new byte[(int) Math.min(size, 4096)]; + int read = is.readNBytes(head, 0, head.length); + for (int i = 0; i < read; i++) { + if (head[i] == 0) return false; + } + } + return true; + } + + private static String patchText(String text, Path extractDir) { + var m = DRIVE_PATH.matcher(text); + var sb = new StringBuilder(); + int lastEnd = 0; + Set seenPrefixes = new HashSet<>(); + + while (m.find()) { + int start = m.start(); + sb.append(text, lastEnd, start); + + String fullPath = m.group(); + String drive = fullPath.substring(0, 2); + if (!"C:".equalsIgnoreCase(drive)) { + sb.append(fullPath); + lastEnd = m.end(); + continue; + } + + String replacement = findReplacement(fullPath, extractDir, seenPrefixes); + sb.append(replacement); + lastEnd = m.end(); + } + sb.append(text.substring(lastEnd)); + return sb.toString(); + } + + private static String findReplacement(String fullPath, Path extractDir, Set seenPrefixes) { + String drivePrefix = fullPath.substring(0, 2); + char sep = fullPath.charAt(2); + String splitRegex = sep == '\\' ? "\\\\" : "/"; + String relPath = fullPath.substring(3); + String[] parts = relPath.split(splitRegex, -1); + + for (int skip = 0; skip < parts.length; skip++) { + StringBuilder suffix = new StringBuilder(); + for (int j = skip; j < parts.length; j++) { + if (j > skip) suffix.append(sep); + suffix.append(parts[j]); + } + String suffixStr = suffix.toString(); + if (suffixStr.isEmpty()) continue; + + if (existsIgnoreCase(extractDir, suffixStr)) { + if (skip == 0) return fullPath; + + StringBuilder stale = new StringBuilder(drivePrefix + sep); + for (int k = 0; k < skip; k++) { + if (k > 0) stale.append(sep); + stale.append(parts[k]); + } + stale.append(sep); + + String staleStr = stale.toString(); + if (seenPrefixes.contains(staleStr)) { + return "." + sep + suffixStr; + } + seenPrefixes.add(staleStr); + return "." + sep + suffixStr; + } + } + return fullPath; + } + + private static boolean existsIgnoreCase(Path base, String relativePath) { + char sep = relativePath.contains("\\") ? '\\' : '/'; + String[] parts = relativePath.split(sep == '\\' ? "\\\\" : "/", -1); + Path current = base; + try { + for (int i = 0; i < parts.length; i++) { + String part = parts[i]; + if (part.isEmpty()) { + if (i == parts.length - 1) return Files.isDirectory(current); + continue; + } + Path found = null; + try (var dirStream = Files.list(current)) { + for (Path entry : dirStream.toList()) { + if (entry.getFileName().toString().equalsIgnoreCase(part)) { + found = entry; + break; + } + } + } + if (found == null) return false; + current = found; + } + } catch (IOException e) { + return false; + } + return true; + } +} diff --git a/src/main/java/org/dostalgia/ExecutableDetector.java b/src/main/java/org/dostalgia/ExecutableDetector.java new file mode 100644 index 0000000..b74c36f --- /dev/null +++ b/src/main/java/org/dostalgia/ExecutableDetector.java @@ -0,0 +1,137 @@ +package org.dostalgia; + +import jakarta.annotation.Nonnull; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.inject.Inject; + +import java.io.IOException; +import java.nio.file.FileVisitResult; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.SimpleFileVisitor; +import java.nio.file.attribute.BasicFileAttributes; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; +import java.util.Set; + +/** + * Detects game executables within extracted archives. + */ +@ApplicationScoped +public class ExecutableDetector { + + @Inject + PlatformDetector platform; + + private static final Set SKIP_EXE_NAMES = Set.of( + "dos4gw", "dos32a", "dos4gw2", "pmode", "pmodew", "cwsdpmi", + "emm386", "himem", "himemx", "debug", + "uninst", "uninstall", "uninstaller", + "pksfx", "pkzip", "pkunzip", "sfx", "makesfx", + "unzip", "zip", "zip2exe", "arj", "arj32", + "lha", "lha32", "lzh", "rar", "unrar", + "ace", "unace", "zoo", "arc", "ha", "cab" + ); + + public List findAll(Path dir) throws IOException { + return FileUtils.findFilesByExtensions(dir, Set.of(".exe", ".com", ".bat")); + } + + public String findMain(Path dir) throws IOException { + record Candidate(int depth, boolean isInstaller, long size, String path, String platform) {} + List candidates = new ArrayList<>(); + + Files.walkFileTree(dir, new SimpleFileVisitor<>() { + @Override + public @Nonnull FileVisitResult visitFile(@Nonnull Path f, @Nonnull BasicFileAttributes a) { + String name = f.getFileName().toString().toLowerCase(); + if (!name.endsWith(".exe") && !name.endsWith(".com") && !name.endsWith(".bat")) + return FileVisitResult.CONTINUE; + + int dot = name.lastIndexOf('.'); + String stem = dot >= 0 ? name.substring(0, dot) : name; + if (SKIP_EXE_NAMES.contains(stem)) + return FileVisitResult.CONTINUE; + + if (isLikelySelfExtractor(f)) + return FileVisitResult.CONTINUE; + + boolean installer = name.contains("install") || name.contains("setup") || name.contains("config"); + int depth = f.getNameCount() - dir.getNameCount(); + String detectedPlatform = platform.detect(f); + candidates.add(new Candidate(depth, installer, a.size(), f.toString(), detectedPlatform)); + return FileVisitResult.CONTINUE; + } + }); + + if (candidates.isEmpty()) return null; + + candidates.sort(Comparator + .comparingInt((Candidate c) -> c.isInstaller() ? 1 : 0) + .thenComparingInt(c -> { + if ("dos".equals(c.platform())) return 0; + if (c.platform() == null) return 1; + return 2; + }) + .thenComparingLong(c -> -c.size()) + .thenComparingInt(Candidate::depth)); + + return candidates.getFirst().path(); + } + + public String findSetup(Path dir) throws IOException { + record Candidate(int depth, boolean isWindows, long size, String path) {} + List candidates = new ArrayList<>(); + List patterns = List.of("setup", "setmain", "install", "config", "custom"); + + Files.walkFileTree(dir, new SimpleFileVisitor<>() { + @Override + public @Nonnull FileVisitResult visitFile(@Nonnull Path f, @Nonnull BasicFileAttributes a) { + String name = f.getFileName().toString().toLowerCase(); + String stem = name.contains(".") ? name.substring(0, name.lastIndexOf('.')) : name; + if (!name.endsWith(".exe") && !name.endsWith(".com") && !name.endsWith(".bat")) + return FileVisitResult.CONTINUE; + for (String pat : patterns) { + if (stem.equals(pat) || stem.startsWith(pat + ".") || stem.startsWith(pat + "-")) { + boolean isWin = "windows".equals(platform.detect(f)); + candidates.add(new Candidate( + f.getNameCount() - dir.getNameCount(), isWin, a.size(), f.toString())); + break; + } + } + return FileVisitResult.CONTINUE; + } + }); + + if (candidates.isEmpty()) return null; + candidates.sort(Comparator + .comparingInt((Candidate c) -> c.isWindows() ? 1 : 0) // prefer DOS over Windows + .thenComparingInt(Candidate::depth) + .thenComparingLong(Candidate::size)); + return candidates.getFirst().path(); + } + + public static boolean isLikelySelfExtractor(Path exePath) { + try (var fis = Files.newInputStream(exePath)) { + byte[] buf = new byte[32768]; + int read = fis.readNBytes(buf, 0, buf.length); + if (read < 0x40) return false; + if (buf[0] != 0x4D || buf[1] != 0x5A) return false; + + String content = new String(buf, 0, read, StandardCharsets.ISO_8859_1); + if (content.contains("PKZIP") || content.contains("PKSFX")) return true; + + for (int i = 0x40; i < read - 4; i++) { + if (buf[i] == 0x50 && (buf[i+1] & 0xFF) == 0x4B) { + int sig = (buf[i+2] & 0xFF) | ((buf[i+3] & 0xFF) << 8); + if (sig == 0x0403 || sig == 0x0201 || sig == 0x0605) return true; + } + } + return false; + } catch (IOException e) { + return false; + } + } +} diff --git a/src/main/java/org/dostalgia/FileUtils.java b/src/main/java/org/dostalgia/FileUtils.java new file mode 100644 index 0000000..27808b9 --- /dev/null +++ b/src/main/java/org/dostalgia/FileUtils.java @@ -0,0 +1,60 @@ +package org.dostalgia; + +import jakarta.annotation.Nonnull; + +import java.io.IOException; +import java.nio.file.FileVisitResult; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.SimpleFileVisitor; +import java.nio.file.attribute.BasicFileAttributes; +import java.util.ArrayList; +import java.util.List; +import java.util.Set; + +/** Shared file-system utilities. */ +public final class FileUtils { + private FileUtils() {} + + /** Recursively delete a directory tree (walk in reverse order so dirs are empty when deleted). */ + public static void deleteDirectory(final Path dir) throws IOException { + if (!Files.exists(dir)) return; + Files.walkFileTree(dir, new SimpleFileVisitor<>() { + @Override + public @Nonnull FileVisitResult visitFile(@Nonnull final Path f, @Nonnull final BasicFileAttributes a) throws IOException { + Files.delete(f); + return FileVisitResult.CONTINUE; + } + + @Override + public @Nonnull FileVisitResult postVisitDirectory(@Nonnull final Path d, final IOException e) throws IOException { + Files.delete(d); + return FileVisitResult.CONTINUE; + } + }); + } + + /** + * Walk a directory tree and collect relative paths of files whose extension matches + * one of the given extensions. Extensions should include the dot, e.g. {@code ".exe"}. + * Results are sorted alphabetically. + */ + public static List findFilesByExtensions(Path dir, Set extensions) throws IOException { + List result = new ArrayList<>(); + Files.walkFileTree(dir, new SimpleFileVisitor<>() { + @Override + public @Nonnull FileVisitResult visitFile(@Nonnull Path f, @Nonnull BasicFileAttributes a) { + String name = f.getFileName().toString().toLowerCase(); + for (String ext : extensions) { + if (name.endsWith(ext)) { + result.add(dir.relativize(f).toString().replace('\\', '/')); + break; + } + } + return FileVisitResult.CONTINUE; + } + }); + result.sort(String::compareTo); + return result; + } +} diff --git a/src/main/java/org/dostalgia/Game.java b/src/main/java/org/dostalgia/Game.java new file mode 100644 index 0000000..c81c618 --- /dev/null +++ b/src/main/java/org/dostalgia/Game.java @@ -0,0 +1,126 @@ +package org.dostalgia; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import java.time.Instant; +import java.util.List; + +/** Represents a single DOS game, stored as data/games/{id}/game.json */ +@JsonIgnoreProperties(ignoreUnknown = true) +@JsonInclude(JsonInclude.Include.NON_NULL) +public class Game { + private String id; + private String title; + private Integer year; + private String genre; + private String developer; + private String publisher; + private String description; + private Double rating; + private String bundleFile; + private String setupExe; + /** Game bundle file size in bytes. Populated dynamically at load time (not persisted). */ + private Long bundleSize; + /** Currently selected main executable (relative path inside the bundle). */ + private String executable; + /** All discoverable executables in the bundle (for the UI picker). */ + private List executables; + /** Platform type: "dos" for pure DOS, "windows" for Windows 3.x/9x+ */ + private String platform; + private Integer igdbId; + private String igdbCoverId; + private boolean hasCover; + private boolean hasScreenshots; + private List screenshots; + private List videos; + private boolean ready; + private Instant createdAt; + private Instant updatedAt; + + public Game() {} + + public Game(String id, String title) { + this.id = id; + this.title = title; + this.ready = false; + this.createdAt = Instant.now(); + this.updatedAt = Instant.now(); + } + + public String getId() { return id; } + public void setId(String id) { this.id = id; } + + public String getTitle() { return title; } + public void setTitle(String title) { this.title = title; } + + public Integer getYear() { return year; } + public void setYear(Integer year) { this.year = year; } + + public String getGenre() { return genre; } + public void setGenre(String genre) { this.genre = genre; } + + public String getDeveloper() { return developer; } + public void setDeveloper(String developer) { this.developer = developer; } + + public String getPublisher() { return publisher; } + public void setPublisher(String publisher) { this.publisher = publisher; } + + public String getDescription() { return description; } + public void setDescription(String description) { this.description = description; } + + public Double getRating() { return rating; } + public void setRating(Double rating) { this.rating = rating; } + + public String getBundleFile() { return bundleFile; } + public void setBundleFile(String bundleFile) { this.bundleFile = bundleFile; } + + public String getSetupExe() { return setupExe; } + public void setSetupExe(String setupExe) { this.setupExe = setupExe; } + + public Long getBundleSize() { return bundleSize; } + public void setBundleSize(Long bundleSize) { this.bundleSize = bundleSize; } + + public String getExecutable() { return executable; } + public void setExecutable(String executable) { this.executable = executable; } + + public List getExecutables() { return executables; } + public void setExecutables(List executables) { this.executables = executables; } + + /** Returns true if a SETUP.EXE (or variant) was detected in the game archive. */ + public boolean isHasSetup() { return setupExe != null && !setupExe.isBlank(); } + + public String getPlatform() { return platform; } + public void setPlatform(String platform) { this.platform = platform; } + + /** Returns true if the game is a pure DOS executable that can run natively in DOSBox. */ + public boolean isPlayable() { + return ready && (platform == null || "dos".equals(platform)); + } + + public Integer getIgdbId() { return igdbId; } + public void setIgdbId(Integer igdbId) { this.igdbId = igdbId; } + + public String getIgdbCoverId() { return igdbCoverId; } + public void setIgdbCoverId(String igdbCoverId) { this.igdbCoverId = igdbCoverId; } + + public boolean isHasCover() { return hasCover; } + public void setHasCover(boolean hasCover) { this.hasCover = hasCover; } + + public boolean isHasScreenshots() { return hasScreenshots; } + public void setHasScreenshots(boolean hasScreenshots) { this.hasScreenshots = hasScreenshots; } + + public List getScreenshots() { return screenshots; } + public void setScreenshots(List screenshots) { this.screenshots = screenshots; } + + public List getVideos() { return videos; } + public void setVideos(List videos) { this.videos = videos; } + + public boolean isReady() { return ready; } + public void setReady(boolean ready) { this.ready = ready; } + + public Instant getCreatedAt() { return createdAt; } + public void setCreatedAt(Instant createdAt) { this.createdAt = createdAt; } + + public Instant getUpdatedAt() { return updatedAt; } + public void setUpdatedAt(Instant updatedAt) { this.updatedAt = updatedAt; } +} diff --git a/src/main/java/org/dostalgia/GameController.java b/src/main/java/org/dostalgia/GameController.java new file mode 100644 index 0000000..97fd2ce --- /dev/null +++ b/src/main/java/org/dostalgia/GameController.java @@ -0,0 +1,183 @@ +package org.dostalgia; + +import jakarta.inject.Inject; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.DELETE; +import jakarta.ws.rs.DefaultValue; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.PATCH; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.QueryParam; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.core.StreamingOutput; +import java.nio.file.NoSuchFileException; +import java.nio.file.Files; +import java.util.Map; + +@Path("/api/games") +@Produces(MediaType.APPLICATION_JSON) +public class GameController { + + @Inject + GameService svc; + + @GET + public Response list( + @QueryParam("search") String search, + @QueryParam("genre") String genre, + @QueryParam("year") Integer year, + @QueryParam("limit") @DefaultValue("50") int limit, + @QueryParam("offset") @DefaultValue("0") int offset + ) { + try { + var all = svc.list(); + + if (search != null && !search.isBlank()) { + all = all.stream() + .filter(g -> g.getTitle().toLowerCase().contains(search.toLowerCase())) + .toList(); + } + if (genre != null && !genre.isBlank()) { + all = all.stream() + .filter(g -> genre.equalsIgnoreCase(g.getGenre())) + .toList(); + } + if (year != null) { + all = all.stream() + .filter(g -> year.equals(g.getYear())) + .toList(); + } + + int total = all.size(); + int from = Math.min(offset, total); + int to = Math.min(offset + limit, total); + var page = all.subList(from, to); + + return Response.ok(Map.of("games", page, "total", total)).build(); + } catch (Exception e) { + return Response.serverError().entity(Map.of("error", e.getMessage())).build(); + } + } + + @GET + @Path("/{id}") + public Response get(@PathParam("id") String id) { + try { + var game = svc.load(id); + return Response.ok(game).build(); + } catch (NoSuchFileException e) { + return Response.status(404).entity(Map.of("error", "Game not found")).build(); + } catch (Exception e) { + return Response.serverError().entity(Map.of("error", e.getMessage())).build(); + } + } + + @PATCH + @Path("/{id}") + @Consumes(MediaType.APPLICATION_JSON) + public Response update(@PathParam("id") String id, Map updates) { + try { + var game = svc.load(id); + + if (updates.containsKey("title")) game.setTitle((String) updates.get("title")); + if (updates.containsKey("year")) game.setYear(asInt(updates.get("year"))); + if (updates.containsKey("genre")) game.setGenre((String) updates.get("genre")); + if (updates.containsKey("developer")) game.setDeveloper((String) updates.get("developer")); + if (updates.containsKey("publisher")) game.setPublisher((String) updates.get("publisher")); + if (updates.containsKey("description")) game.setDescription((String) updates.get("description")); + if (updates.containsKey("rating")) game.setRating(asDouble(updates.get("rating"))); + if (updates.containsKey("platform")) game.setPlatform((String) updates.get("platform")); + + // Changing the executable requires patching the .jsdos bundle + if (updates.containsKey("executable")) { + String newExe = (String) updates.get("executable"); + if (newExe != null && !newExe.isBlank()) { + svc.setExecutable(id, newExe); + } + // Reload after bundle patch to get updated metadata + game = svc.load(id); + } else { + svc.save(game); + } + return Response.ok(game).build(); + } catch (NoSuchFileException e) { + return Response.status(404).entity(Map.of("error", "Game not found")).build(); + } catch (Exception e) { + return Response.serverError().entity(Map.of("error", e.getMessage())).build(); + } + } + + /** + * Stream a setup .jsdos bundle on-the-fly. No disk duplication — + * reads the main bundle and patches config files to point at the + * setup executable (SETUP.EXE, INSTALL.EXE, etc.). + */ + @GET + @Path("/{id}/setup-bundle") + @Produces("application/zip") + public Response setupBundle(@PathParam("id") String id) { + try { + var game = svc.load(id); + if (game.getSetupExe() == null || game.getSetupExe().isBlank()) { + return Response.status(404) + .entity(Map.of("error", "No setup executable configured for this game")) + .build(); + } + String filename = (game.getTitle() != null ? game.getTitle() : id) + ".setup.jsdos"; + StreamingOutput stream = output -> svc.streamSetupBundle(id, output); + return Response.ok(stream) + .header("Content-Disposition", "attachment; filename=\"" + filename + "\"") + .build(); + } catch (NoSuchFileException e) { + return Response.status(404).entity(Map.of("error", "Game not found")).build(); + } catch (Exception e) { + return Response.serverError().entity(Map.of("error", e.getMessage())).build(); + } + } + + @GET + @Path("/{id}/download") + @Produces("application/zip") + public Response download(@PathParam("id") String id) { + try { + var game = svc.load(id); + String filename = (game.getTitle() != null ? game.getTitle() : id) + ".zip"; + var bundlePath = svc.getGamesDir().resolve(game.getBundleFile()); + if (!Files.exists(bundlePath)) { + return Response.status(404).entity(Map.of("error", "Bundle file not found")).build(); + } + StreamingOutput stream = output -> Files.copy(bundlePath, output); + return Response.ok(stream) + .header("Content-Disposition", "attachment; filename=\"" + filename + "\"") + .build(); + } catch (NoSuchFileException e) { + return Response.status(404).entity(Map.of("error", "Game not found")).build(); + } catch (Exception e) { + return Response.serverError().entity(Map.of("error", e.getMessage())).build(); + } + } + + @DELETE + @Path("/{id}") + public Response delete(@PathParam("id") String id) { + try { + svc.delete(id); + return Response.ok(Map.of("status", "deleted")).build(); + } catch (Exception e) { + return Response.serverError().entity(Map.of("error", e.getMessage())).build(); + } + } + + private Integer asInt(Object v) { + if (v instanceof Number n) return n.intValue(); + return null; + } + + private Double asDouble(Object v) { + if (v instanceof Number n) return n.doubleValue(); + return null; + } +} diff --git a/src/main/java/org/dostalgia/GameService.java b/src/main/java/org/dostalgia/GameService.java new file mode 100644 index 0000000..fecd4df --- /dev/null +++ b/src/main/java/org/dostalgia/GameService.java @@ -0,0 +1,265 @@ +package org.dostalgia; + +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.PropertyNamingStrategies; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import jakarta.annotation.PostConstruct; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.inject.Inject; +import org.eclipse.microprofile.config.inject.ConfigProperty; + +import java.io.IOException; +import java.io.OutputStream; +import java.nio.file.Files; +import java.nio.file.NoSuchFileException; +import java.nio.file.Path; +import java.nio.file.StandardCopyOption; +import java.time.Instant; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; + +/** Manages game metadata stored as JSON files on disk. */ +@ApplicationScoped +public class GameService implements GameStore { + + private final ObjectMapper mapper = new ObjectMapper() + .registerModule(new JavaTimeModule()) + .setPropertyNamingStrategy(PropertyNamingStrategies.SNAKE_CASE) + .disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES) + .enable(SerializationFeature.INDENT_OUTPUT); + + @Inject + ConfigBuilder config; + + @Inject + CdImageService cdImageService; + + @ConfigProperty(name = "dostalgia.data.dir", defaultValue = "data") + String dataDir; + + Path gamesDir; + + @PostConstruct + void init() { + gamesDir = Path.of(dataDir, "games"); + try { + Files.createDirectories(gamesDir); + Files.createDirectories(Path.of(dataDir, "artwork")); + Files.createDirectories(Path.of(dataDir, "saves")); + } catch (IOException e) { + throw new RuntimeException("Cannot create data directories", e); + } + } + + public Path gameDir(String id) { + return gamesDir.resolve(id); + } + + public Path gameJsonPath(String id) { + return gameDir(id).resolve("game.json"); + } + + /** Load a game by ID. Throws if not found. */ + public Game load(String id) throws IOException { + Path path = gameJsonPath(id); + if (!Files.exists(path)) { + throw new NoSuchFileException("game.json not found for: " + id); + } + Game game = mapper.readValue(path.toFile(), Game.class); + // Detect cover file + game.setHasCover( + Files.exists(gameDir(id).resolve("cover.jpg")) || + Files.exists(gameDir(id).resolve("cover.png")) || + Files.exists(gameDir(id).resolve("cover.webp")) + ); + // Detect bundle size + try { + String bf = game.getBundleFile(); + if (bf != null) { + Path bundlePath = gamesDir.resolve(bf); + if (Files.exists(bundlePath)) { + game.setBundleSize(Files.size(bundlePath)); + } + } + } catch (IOException ignored) {} + return game; + } + + /** Save game metadata to disk. */ + public void save(Game game) throws IOException { + game.setUpdatedAt(Instant.now()); + if (game.getCreatedAt() == null) { + game.setCreatedAt(Instant.now()); + } + Files.createDirectories(gameDir(game.getId())); + mapper.writeValue(gameJsonPath(game.getId()).toFile(), game); + } + + /** List all games, sorted by title. */ + public List list() throws IOException { + List games = new ArrayList<>(); + if (!Files.isDirectory(gamesDir)) return games; + + try (var stream = Files.list(gamesDir)) { + for (Path dir : (Iterable) stream::iterator) { + if (!Files.isDirectory(dir)) continue; + try { + Game g = load(dir.getFileName().toString()); + games.add(g); + } catch (Exception ignored) { + // skip broken entries + } + } + } + + games.sort(Comparator.comparing(Game::getTitle)); + return games; + } + + /** Delete a game and all its files. */ + public void delete(String id) throws IOException { + FileUtils.deleteDirectory(gameDir(id)); + // Clean up old flat .jsdos locations (pre-game-dir layout — backward compat) + Files.deleteIfExists(gamesDir.resolve(id + ".jsdos")); + Files.deleteIfExists(gamesDir.resolve(id + ".setup.jsdos")); + } + + /** Sanitize a string for use as a game directory ID. */ + public static String sanitizeId(String s) { + StringBuilder sb = new StringBuilder(); + for (char c : s.toCharArray()) { + if (c >= 'a' && c <= 'z') sb.append(c); + else if (c >= 'A' && c <= 'Z') sb.append((char)(c + 32)); + else if (c >= '0' && c <= '9') sb.append(c); + else if (c == ' ' || c == '-' || c == '_') sb.append('-'); + } + String result = sb.toString().replaceAll("^-+|-+$", ""); + return result.isEmpty() ? "unknown" : result; + } + + /** + * Patch the .jsdos bundle to use a different main executable. + * Transactional: patches into a temp file, then atomically replaces on success. + */ + public void setExecutable(String id, String executable) throws IOException { + Game game = load(id); + String bundleFile = game.getBundleFile(); + if (bundleFile == null) { + throw new IOException("Game has no bundle file"); + } + + Path bundlePath = gamesDir.resolve(bundleFile); + if (!Files.exists(bundlePath)) { + throw new NoSuchFileException("Bundle not found: " + bundleFile); + } + + // Build new config entries — preserve any CD images in the bundle + List cdImages = cdImageService.findInBundle(bundlePath); + byte[] newDosboxConf = config.buildDosboxConfBytes(executable, cdImages); + byte[] newJsdosJson = config.buildJsdosJson(executable, cdImages); + + // Transactional patch: write to temp, detect platform, then move + Path tmpPath = bundlePath.resolveSibling(bundlePath.getFileName() + ".tmp"); + try { + try (var zis = new java.util.zip.ZipInputStream(Files.newInputStream(bundlePath)); + var zos = new java.util.zip.ZipOutputStream(Files.newOutputStream(tmpPath))) { + + java.util.zip.ZipEntry entry; + while ((entry = zis.getNextEntry()) != null) { + String name = entry.getName(); + if (".jsdos/dosbox.conf".equals(name)) { + zos.putNextEntry(new java.util.zip.ZipEntry(name)); + zos.write(newDosboxConf); + zos.closeEntry(); + } else if (".jsdos/jsdos.json".equals(name)) { + zos.putNextEntry(new java.util.zip.ZipEntry(name)); + zos.write(newJsdosJson); + zos.closeEntry(); + } else { + zos.putNextEntry(new java.util.zip.ZipEntry(name)); + zis.transferTo(zos); + zos.closeEntry(); + } + zis.closeEntry(); + } + } + + // Detect platform from the new bundle before committing + String detectedPlatform = detectPlatformInBundle(executable, tmpPath); + + // Atomic move on success + Files.move(tmpPath, bundlePath, StandardCopyOption.REPLACE_EXISTING, StandardCopyOption.ATOMIC_MOVE); + + // Update metadata + game.setExecutable(executable); + game.setPlatform(detectedPlatform); + save(game); + + } catch (Exception e) { + // Clean up temp file on failure — leave original untouched + try { Files.deleteIfExists(tmpPath); } catch (IOException ignored) {} + throw e instanceof IOException ioe ? ioe : new IOException(e); + } + } + + /** Detect platform for an executable inside a .jsdos ZIP bundle. */ + private String detectPlatformInBundle(String relExe, Path bundlePath) throws IOException { + try (var zis = new java.util.zip.ZipInputStream(Files.newInputStream(bundlePath))) { + java.util.zip.ZipEntry entry; + while ((entry = zis.getNextEntry()) != null) { + if (entry.getName().equals(relExe.replace('\\', '/'))) { + return PlatformDetector.detectFromBytes(PlatformDetector.readHeaderBytes(zis)); + } + zis.closeEntry(); + } + } + return null; + } + + /** + * Stream a setup .jsdos bundle on-the-fly by reading the main bundle + * and replacing config files to point at the setup executable. + * No data is written to disk — the modified ZIP is streamed directly. + */ + public void streamSetupBundle(String id, OutputStream out) throws IOException { + Game game = load(id); + String setupExe = game.getSetupExe(); + if (setupExe == null || setupExe.isBlank()) { + throw new IOException("No setup executable configured for this game"); + } + + Path bundlePath = gamesDir.resolve(game.getBundleFile()); + if (!Files.exists(bundlePath)) { + throw new NoSuchFileException("Bundle not found: " + game.getBundleFile()); + } + + // Build new config entries — preserve any CD images in the bundle + List cdImages = cdImageService.findInBundle(bundlePath); + byte[] newDosboxConf = config.buildDosboxConfBytes(setupExe, cdImages); + byte[] newJsdosJson = config.buildJsdosJson(setupExe, cdImages); + + try (var zis = new java.util.zip.ZipInputStream(Files.newInputStream(bundlePath)); + var zos = new java.util.zip.ZipOutputStream(out)) { + + java.util.zip.ZipEntry entry; + while ((entry = zis.getNextEntry()) != null) { + String name = entry.getName(); + zos.putNextEntry(new java.util.zip.ZipEntry(name)); + if (".jsdos/dosbox.conf".equals(name)) { + zos.write(newDosboxConf); + } else if (".jsdos/jsdos.json".equals(name)) { + zos.write(newJsdosJson); + } else { + zis.transferTo(zos); + } + zos.closeEntry(); + zis.closeEntry(); + } + } + } + + public Path getGamesDir() { return gamesDir; } +} diff --git a/src/main/java/org/dostalgia/GameStore.java b/src/main/java/org/dostalgia/GameStore.java new file mode 100644 index 0000000..3a9626e --- /dev/null +++ b/src/main/java/org/dostalgia/GameStore.java @@ -0,0 +1,18 @@ +package org.dostalgia; + +import java.io.IOException; +import java.nio.file.Path; +import java.util.List; + +/** + * Contract for game metadata persistence. + * Decouples consumers (IgdbService, GameController) from the concrete storage implementation. + */ +public interface GameStore { + Game load(String id) throws IOException; + void save(Game game) throws IOException; + List list() throws IOException; + void delete(String id) throws IOException; + Path gameDir(String id); + Path gameJsonPath(String id); +} diff --git a/src/main/java/org/dostalgia/IgdbController.java b/src/main/java/org/dostalgia/IgdbController.java new file mode 100644 index 0000000..acef056 --- /dev/null +++ b/src/main/java/org/dostalgia/IgdbController.java @@ -0,0 +1,84 @@ +package org.dostalgia; + +import jakarta.inject.Inject; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.DefaultValue; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.POST; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.QueryParam; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; +import java.util.Map; + +/** IGDB metadata & artwork integration. Enabled when TWITCH_CLIENT_ID and TWITCH_CLIENT_SECRET are set. */ +@Path("/api/igdb") +@Produces(MediaType.APPLICATION_JSON) +public class IgdbController { + + @Inject + IgdbService svc; + + @Inject + GameService games; + + @GET + @Path("/search") + public Response search(@QueryParam("q") @DefaultValue("") String query) { + if (query.isBlank()) { + return Response.status(400).entity(Map.of("error", "Query parameter 'q' is required")).build(); + } + try { + var results = svc.search(query); + return Response.ok(Map.of("results", results)).build(); + } catch (Exception e) { + return Response.serverError() + .entity(Map.of("error", "IGDB search failed: " + e.getMessage())) + .build(); + } + } + + /** + * Apply IGDB metadata + cover to a game. + * Body: {"igdb_id": 12345} — applies data from that specific IGDB game entry. + * Body: {} — auto-search using the game's title. + */ + @POST + @Path("/scrape/{gameId}") + @Consumes(MediaType.APPLICATION_JSON) + public Response scrape(@PathParam("gameId") String gameId, Map body) { + try { + var game = games.load(gameId); + + if (body != null && body.containsKey("igdb_id")) { + int igdbId = ((Number) body.get("igdb_id")).intValue(); + svc.applyIgdbId(game, igdbId); + } else { + svc.autoScrape(game); + } + + games.save(game); + return Response.ok(game).build(); + + } catch (java.nio.file.NoSuchFileException e) { + return Response.status(404).entity(Map.of("error", "Game not found")).build(); + } catch (Exception e) { + return Response.serverError() + .entity(Map.of("error", "IGDB scrape failed: " + e.getMessage())) + .build(); + } + } + + /** Check if IGDB credentials are configured. */ + @GET + @Path("/status") + public Response status() { + boolean configured = svc.isConfigured(); + return Response.ok(Map.of( + "configured", configured, + "message", configured ? "IGDB ready" : "Set TWITCH_CLIENT_ID and TWITCH_CLIENT_SECRET env vars" + )).build(); + } +} diff --git a/src/main/java/org/dostalgia/IgdbService.java b/src/main/java/org/dostalgia/IgdbService.java new file mode 100644 index 0000000..6d55e7e --- /dev/null +++ b/src/main/java/org/dostalgia/IgdbService.java @@ -0,0 +1,352 @@ +package org.dostalgia; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.inject.Inject; +import org.eclipse.microprofile.config.inject.ConfigProperty; + +import java.net.URI; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.nio.file.Path; +import java.time.Instant; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.logging.Logger; + +/** Client for the IGDB (Internet Game Database) API via Twitch OAuth2. */ +@ApplicationScoped +public class IgdbService { + + private static final Logger LOG = Logger.getLogger(IgdbService.class.getName()); + private static final String TWITCH_AUTH = "https://id.twitch.tv/oauth2/token"; + private static final String IGDB_API = "https://api.igdb.com/v4"; + private static final String IMG_BASE = "https://images.igdb.com/igdb/image/upload"; + private static final String COVER_SIZE = "t_cover_big"; + + private final HttpClient http = HttpClient.newHttpClient(); + private final ObjectMapper mapper = new ObjectMapper(); + + @ConfigProperty(name = "TWITCH_CLIENT_ID") + Optional clientId; + + @ConfigProperty(name = "TWITCH_CLIENT_SECRET") + Optional clientSecret; + + @Inject + GameStore gameStore; + + private String accessToken; + private Instant tokenExpiry; + + public boolean isConfigured() { + return clientId.isPresent() && clientSecret.isPresent() + && !clientId.get().isBlank() && !clientSecret.get().isBlank(); + } + + private synchronized String getToken() throws Exception { + if (accessToken != null && tokenExpiry != null && Instant.now().isBefore(tokenExpiry)) { + return accessToken; + } + String cid = clientId.orElseThrow(() -> new RuntimeException("TWITCH_CLIENT_ID not configured")); + String secret = clientSecret.orElseThrow(() -> new RuntimeException("TWITCH_CLIENT_SECRET not configured")); + String body = "client_id=" + cid + + "&client_secret=" + secret + + "&grant_type=client_credentials"; + + HttpRequest req = HttpRequest.newBuilder() + .uri(URI.create(TWITCH_AUTH)) + .header("Content-Type", "application/x-www-form-urlencoded") + .POST(HttpRequest.BodyPublishers.ofString(body)) + .build(); + + HttpResponse res = http.send(req, HttpResponse.BodyHandlers.ofString()); + if (res.statusCode() != 200) { + throw new RuntimeException("Twitch OAuth2 failed: HTTP " + res.statusCode() + " " + res.body()); + } + + JsonNode json = mapper.readTree(res.body()); + accessToken = json.get("access_token").asText(); + int expiresIn = json.get("expires_in").asInt(); + tokenExpiry = Instant.now().plusSeconds(expiresIn - 120); + LOG.info("IGDB: acquired new Twitch token (expires in " + expiresIn + "s)"); + return accessToken; + } + + private HttpRequest.Builder igdbRequest(String path) throws Exception { + String cid = clientId.orElseThrow(() -> new RuntimeException("TWITCH_CLIENT_ID not configured")); + return HttpRequest.newBuilder() + .uri(URI.create(IGDB_API + path)) + .header("Client-ID", cid) + .header("Authorization", "Bearer " + getToken()) + .header("Content-Type", "text/plain"); + } + + /** POST an APQL query to an IGDB endpoint and return the JSON array, or null on failure. */ + private JsonNode postAndGet(String endpoint, String apql) throws Exception { + HttpRequest req = igdbRequest(endpoint) + .POST(HttpRequest.BodyPublishers.ofString(apql)) + .build(); + HttpResponse res = http.send(req, HttpResponse.BodyHandlers.ofString()); + if (res.statusCode() != 200) return null; + JsonNode results = mapper.readTree(res.body()); + return results.isArray() ? results : null; + } + + public List> search(String query) throws Exception { + if (!isConfigured()) return List.of(); + + String apql = "search \"" + sanitize(query) + "\";" + + " fields name,first_release_date,genres.name," + + " involved_companies.company.name,involved_companies.developer,involved_companies.publisher," + + " summary,cover.url,platforms;" + + " where platforms = [13];" + + " limit 20;"; + + JsonNode results = postAndGet("/games", apql); + if (results == null || results.isEmpty()) { + LOG.info("IGDB search: no results for '" + query + "'"); + return List.of(); + } + + List> out = new ArrayList<>(); + for (JsonNode game : results) { + Map entry = new LinkedHashMap<>(); + entry.put("igdb_id", game.get("id").asInt()); + entry.put("name", game.has("name") ? game.get("name").asText() : query); + + epochToYear(game).ifPresent(y -> entry.put("year", y)); + + List genres = extractGenres(game); + if (!genres.isEmpty()) { + entry.put("genres", genres); + } + + if (game.has("involved_companies") && game.get("involved_companies").isArray()) { + String developer = null; + String publisher = null; + for (JsonNode ic : game.get("involved_companies")) { + if (ic.has("company") && ic.get("company").has("name")) { + String companyName = ic.get("company").get("name").asText(); + boolean isDev = ic.has("developer") && ic.get("developer").asBoolean(); + boolean isPub = ic.has("publisher") && ic.get("publisher").asBoolean(); + if (isDev) developer = companyName; + if (isPub) publisher = companyName; + } + } + if (developer != null) entry.put("developer", developer); + if (publisher != null) entry.put("publisher", publisher); + } + + if (game.has("summary")) { + entry.put("summary", game.get("summary").asText()); + } + + if (game.has("platforms") && game.get("platforms").isArray()) { + List platformIds = new ArrayList<>(); + for (JsonNode p : game.get("platforms")) { + platformIds.add(p.asInt()); + } + entry.put("platform_ids", platformIds); + entry.put("is_dos", platformIds.contains(13)); + } + + if (game.has("cover") && game.get("cover").has("url")) { + String thumbUrl = game.get("cover").get("url").asText(); + String coverUrl = "https:" + thumbUrl.replace("t_thumb", COVER_SIZE); + entry.put("cover_url", coverUrl); + } else if (game.has("cover") && game.get("cover").isInt()) { + int coverId = game.get("cover").asInt(); + String coverUrl = fetchCoverUrl(coverId); + if (coverUrl != null) entry.put("cover_url", coverUrl); + } + + out.add(entry); + } + return out; + } + + private String fetchCoverUrl(int coverId) throws Exception { + JsonNode results = postAndGet("/covers", "fields url; where id = " + coverId + ";"); + if (results == null || results.isEmpty()) return null; + String thumbUrl = results.get(0).get("url").asText(); + return IMG_BASE + "/" + COVER_SIZE + "/" + thumbUrl.substring(thumbUrl.lastIndexOf('/') + 1); + } + + private List fetchVideos(int igdbId) throws Exception { + JsonNode results = postAndGet("/game_videos", "fields video_id; where game = " + igdbId + ";"); + if (results == null) return List.of(); + List videos = new ArrayList<>(); + for (JsonNode v : results) { + if (v.has("video_id")) videos.add(v.get("video_id").asText()); + } + return videos; + } + + private List fetchScreenshots(int igdbId) throws Exception { + JsonNode results = postAndGet("/screenshots", "fields url; where game = " + igdbId + ";"); + if (results == null) return List.of(); + List screenshots = new ArrayList<>(); + for (JsonNode s : results) { + if (s.has("url")) { + String fullUrl = "https:" + s.get("url").asText().replace("t_thumb", "t_1080p"); + screenshots.add(fullUrl); + } + } + return screenshots; + } + + public void autoScrape(Game game) { + if (!isConfigured()) return; + try { + List> results = search(game.getTitle()); + if (results.isEmpty()) { + LOG.info("IGDB auto-scrape: no results for '" + game.getTitle() + "'"); + return; + } + Map best = null; + for (Map r : results) { + if (Boolean.TRUE.equals(r.get("is_dos"))) { best = r; break; } + } + if (best == null) best = results.getFirst(); + applyMatch(game, best); + LOG.info("IGDB auto-scrape: applied '" + best.get("name") + "' to '" + game.getTitle() + "'"); + Object igdbIdObj = best.get("igdb_id"); + if (igdbIdObj instanceof Number igdbIdNum) { + int igdbId = igdbIdNum.intValue(); + try { List v = fetchVideos(igdbId); if (!v.isEmpty()) game.setVideos(v); } + catch (Exception e) { LOG.warning("IGDB: failed to fetch videos: " + e.getMessage()); } + try { List s = fetchScreenshots(igdbId); if (!s.isEmpty()) { game.setScreenshots(s); game.setHasScreenshots(true); } } + catch (Exception e) { LOG.warning("IGDB: failed to fetch screenshots: " + e.getMessage()); } + } + } catch (Exception e) { + LOG.warning("IGDB auto-scrape failed for '" + game.getTitle() + "': " + e.getMessage()); + } + } + + public void applyIgdbId(Game game, int igdbId) throws Exception { + String apql = "fields name,first_release_date,genres.name," + + " involved_companies.company.name,involved_companies.developer,involved_companies.publisher," + + " summary,cover.url;" + + " where id = " + igdbId + ";"; + JsonNode results = postAndGet("/games", apql); + if (results == null || results.isEmpty()) { + throw new RuntimeException("IGDB: no game found with ID " + igdbId); + } + applyMatch(game, results.get(0)); + try { List v = fetchVideos(igdbId); if (!v.isEmpty()) game.setVideos(v); } + catch (Exception e) { LOG.warning("IGDB: failed to fetch videos for game " + igdbId + ": " + e.getMessage()); } + try { List s = fetchScreenshots(igdbId); if (!s.isEmpty()) { game.setScreenshots(s); game.setHasScreenshots(true); } } + catch (Exception e) { LOG.warning("IGDB: failed to fetch screenshots for game " + igdbId + ": " + e.getMessage()); } + } + + @SuppressWarnings("unchecked") + private void applyMatch(Game game, Object matchData) throws Exception { + Map data; + if (matchData instanceof Map) { + data = (Map) matchData; + } else if (matchData instanceof JsonNode node) { + data = jsonNodeToMap(node); + } else { + return; + } + if (data.containsKey("name") && (game.getTitle() == null || game.getTitle().isBlank())) + game.setTitle((String) data.get("name")); + if (data.containsKey("year")) game.setYear((Integer) data.get("year")); + if (data.containsKey("developer")) game.setDeveloper((String) data.get("developer")); + if (data.containsKey("publisher")) game.setPublisher((String) data.get("publisher")); + if (data.containsKey("summary")) game.setDescription((String) data.get("summary")); + if (data.containsKey("genres")) { + List genres = (List) data.get("genres"); + if (!genres.isEmpty()) game.setGenre(genres.getFirst()); + } + if (data.containsKey("igdb_id")) game.setIgdbId((Integer) data.get("igdb_id")); + String coverUrl = (String) data.get("cover_url"); + if (coverUrl != null && !coverUrl.isBlank()) downloadCover(game, coverUrl); + } + + private void downloadCover(Game game, String coverUrl) throws Exception { + String url = coverUrl.startsWith("http") ? coverUrl : "https:" + coverUrl; + HttpRequest req = HttpRequest.newBuilder().uri(URI.create(url)).GET().build(); + HttpResponse res = http.send(req, HttpResponse.BodyHandlers.ofFile( + gameStore.gameDir(game.getId()).resolve("cover.jpg"))); + if (res.statusCode() == 200) { + game.setHasCover(true); + LOG.info("IGDB: cover downloaded for '" + game.getTitle() + "'"); + } else { + LOG.warning("IGDB: cover download failed with HTTP " + res.statusCode()); + } + } + + /** Convert IGDB epoch (seconds) to year, from 'first_release_date' field. */ + private static Optional epochToYear(JsonNode node) { + if (node.has("first_release_date")) { + long epoch = node.get("first_release_date").asLong(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(epoch * 1000); + return Optional.of(cal.get(Calendar.YEAR)); + } + return Optional.empty(); + } + + /** Extract genre names from a JsonNode that may have a 'genres' array. */ + private static List extractGenres(JsonNode node) { + List genres = new ArrayList<>(); + if (node.has("genres") && node.get("genres").isArray()) { + for (JsonNode g : node.get("genres")) { + if (g.has("name")) genres.add(g.get("name").asText()); + } + } + return genres; + } + + private String sanitize(String s) { + return s.replace("\\", "\\\\").replace("\"", "\\\""); + } + + private Map jsonNodeToMap(JsonNode node) { + Map map = new LinkedHashMap<>(); + map.put("igdb_id", node.has("id") ? node.get("id").asInt() : 0); + map.put("name", node.has("name") ? node.get("name").asText() : ""); + epochToYear(node).ifPresent(y -> map.put("year", y)); + + List genres = extractGenres(node); + if (!genres.isEmpty()) { + map.put("genres", genres); + } + if (node.has("involved_companies") && node.get("involved_companies").isArray()) { + for (JsonNode ic : node.get("involved_companies")) { + if (ic.has("company") && ic.get("company").has("name")) { + String name = ic.get("company").get("name").asText(); + boolean isDev = ic.has("developer") && ic.get("developer").asBoolean(); + boolean isPub = ic.has("publisher") && ic.get("publisher").asBoolean(); + if (isDev && !map.containsKey("developer")) map.put("developer", name); + if (isPub && !map.containsKey("publisher")) map.put("publisher", name); + } + } + } + if (node.has("summary")) map.put("summary", node.get("summary").asText()); + if (node.has("cover")) { + JsonNode cover = node.get("cover"); + try { + if (cover.has("url")) { + String coverUrl = "https:" + cover.get("url").asText().replace("t_thumb", COVER_SIZE); + map.put("cover_url", coverUrl); + } else if (cover.isInt() || cover.isLong()) { + String coverUrl = fetchCoverUrl(cover.asInt()); + if (coverUrl != null) map.put("cover_url", coverUrl); + } else if (cover.has("id")) { + String coverUrl = fetchCoverUrl(cover.get("id").asInt()); + if (coverUrl != null) map.put("cover_url", coverUrl); + } + } catch (Exception ignored) {} + } + return map; + } +} diff --git a/src/main/java/org/dostalgia/PlatformDetector.java b/src/main/java/org/dostalgia/PlatformDetector.java new file mode 100644 index 0000000..4366dc6 --- /dev/null +++ b/src/main/java/org/dostalgia/PlatformDetector.java @@ -0,0 +1,65 @@ +package org.dostalgia; + +import jakarta.enterprise.context.ApplicationScoped; + +import java.io.IOException; +import java.io.InputStream; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.logging.Logger; + +/** + * Detects platform type (DOS vs Windows) by reading executable headers. + */ +@ApplicationScoped +public class PlatformDetector { + + private static final Logger LOG = Logger.getLogger(PlatformDetector.class.getName()); + + public String detect(Path exePath) { + String name = exePath.getFileName().toString().toLowerCase(); + if (name.endsWith(".com") || name.endsWith(".bat")) return "dos"; + + try (var fis = Files.newInputStream(exePath)) { + return detectFromBytes(readHeaderBytes(fis)); + } catch (IOException e) { + LOG.warning("Could not read EXE header for " + exePath + ": " + e.getMessage()); + return null; + } + } + + /** Read enough PE header bytes from any InputStream (shared by Path and ZIP callers). */ + static byte[] readHeaderBytes(InputStream is) throws IOException { + byte[] buf = new byte[0x1000]; + int read = is.readNBytes(buf, 0, buf.length); + return read < buf.length ? java.util.Arrays.copyOf(buf, read) : buf; + } + + /** Detect platform from pre-read MZ/PE header bytes. */ + static String detectFromBytes(byte[] buf) { + return detectFromBytes(buf, buf.length); + } + + /** Detect platform from pre-read MZ/PE header bytes with explicit read length. */ + static String detectFromBytes(byte[] buf, int read) { + if (read < 2) return null; + if (buf[0] != 0x4D || buf[1] != 0x5A) return null; + if (read < 0x40) return "dos"; + + int peOffset = (buf[0x3C] & 0xFF) + | ((buf[0x3D] & 0xFF) << 8) + | ((buf[0x3E] & 0xFF) << 16) + | ((buf[0x3F] & 0xFF) << 24); + + if (peOffset < 0 || peOffset + 2 > read) return "dos"; + + byte sig1 = buf[peOffset]; + byte sig2 = buf[peOffset + 1]; + + if ((sig1 == 0x50 && sig2 == 0x45) // PE + || (sig1 == 0x4E && sig2 == 0x45)) // NE + return "windows"; + + return "dos"; + } +} diff --git a/src/main/java/org/dostalgia/StaticResource.java b/src/main/java/org/dostalgia/StaticResource.java new file mode 100644 index 0000000..93009fa --- /dev/null +++ b/src/main/java/org/dostalgia/StaticResource.java @@ -0,0 +1,78 @@ +package org.dostalgia; + +import jakarta.ws.rs.GET; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.core.StreamingOutput; +import org.eclipse.microprofile.config.inject.ConfigProperty; + +import java.io.IOException; +import java.io.OutputStream; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.Map; + +/** Serves game bundles (.jsdos) and artwork from the external data directory. */ +@jakarta.ws.rs.Path("/") +public class StaticResource { + + @ConfigProperty(name = "dostalgia.data.dir", defaultValue = "data") + String dataDir; + + /** Serve a file from a subdirectory of the data dir with path traversal protection. */ + private Response serveFile(Path base, String path, String cacheHeader) { + Path file = base.resolve(path).normalize(); + if (!file.startsWith(base)) { + return Response.status(403).build(); + } + if (!Files.exists(file) || Files.isDirectory(file)) { + return Response.status(404).build(); + } + String contentType = guessContentType(file.getFileName().toString()); + var builder = Response.ok(new FileStream(file)).type(contentType); + if (cacheHeader != null) { + builder.header(cacheHeader.split(":")[0], cacheHeader.split(":", 2)[1].trim()); + } + return builder.build(); + } + + @GET + @jakarta.ws.rs.Path("/games/{path: .*}") + public Response getGameFile(@PathParam("path") String path) { + return serveFile(Path.of(dataDir, "games"), path, "Accept-Ranges: bytes"); + } + + @GET + @jakarta.ws.rs.Path("/artwork/{path: .*}") + public Response getArtwork(@PathParam("path") String path) { + return serveFile(Path.of(dataDir, "artwork"), path, "Cache-Control: public, max-age=86400"); + } + + /** Health check */ + @GET + @jakarta.ws.rs.Path("/api/health") + public Response health() { + return Response.ok(Map.of("status", "ok", "version", "0.1.0")).build(); + } + + private String guessContentType(String name) { + String n = name.toLowerCase(); + if (n.endsWith(".jsdos")) return "application/zip"; + if (n.endsWith(".zip")) return "application/zip"; + if (n.endsWith(".jpg") || n.endsWith(".jpeg")) return "image/jpeg"; + if (n.endsWith(".png")) return "image/png"; + if (n.endsWith(".webp")) return "image/webp"; + if (n.endsWith(".gif")) return "image/gif"; + if (n.endsWith(".json")) return "application/json"; + return MediaType.APPLICATION_OCTET_STREAM; + } + + /** Streaming file output that avoids loading the whole file into memory. */ + private record FileStream(Path file) implements StreamingOutput { + @Override + public void write(OutputStream output) throws IOException { + Files.copy(file, output); + } + } +} diff --git a/src/main/java/org/dostalgia/UploadResource.java b/src/main/java/org/dostalgia/UploadResource.java new file mode 100644 index 0000000..a41dbac --- /dev/null +++ b/src/main/java/org/dostalgia/UploadResource.java @@ -0,0 +1,222 @@ +package org.dostalgia; + +import jakarta.inject.Inject; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.POST; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; +import org.jboss.resteasy.reactive.RestForm; +import org.jboss.resteasy.reactive.multipart.FileUpload; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.StandardCopyOption; +import java.util.List; +import java.util.Map; +import java.util.logging.Logger; + +@jakarta.ws.rs.Path("/api/upload") +@Produces(MediaType.APPLICATION_JSON) +public class UploadResource { + + @Inject + GameService svc; + + @Inject + IgdbService igdb; + + @Inject + ZipService zip; + + @Inject + ExecutableDetector exeDetector; + + @Inject + PlatformDetector platform; + + @Inject + CdImageService cdImageService; + + @Inject + ConfigPatcher configPatcher; + + private static final Logger LOG = Logger.getLogger(UploadResource.class.getName()); + + @POST + @Consumes(MediaType.MULTIPART_FORM_DATA) + public Response upload( + @RestForm("file") FileUpload upload, + @RestForm("title") String title, + @RestForm("igdb_id") Integer igdbId + ) throws Exception { + if (upload == null) { + return Response.status(400).entity(Map.of("error", "No file provided")).build(); + } + + String filename = upload.fileName(); + if (title == null || title.isBlank()) { + title = filename.endsWith(".zip") ? filename.substring(0, filename.length() - 4) : filename; + } + + String gameId = GameService.sanitizeId(title); + + // Check for duplicate by title (case-insensitive) + for (var g : svc.list()) { + if (g.getTitle() != null && g.getTitle().equalsIgnoreCase(title)) { + return Response.status(409) + .entity(Map.of("error", "\"" + title + "\" is already in your library")) + .build(); + } + } + + // Ensure unique ID + String baseId = gameId; + int counter = 2; + while (Files.exists(svc.gameJsonPath(gameId))) { + gameId = baseId + "-" + counter++; + } + + // Extract ZIP + Path tmpDir = Files.createTempDirectory("dostalgia-"); + try { + Path zipPath = tmpDir.resolve(filename); + Files.copy(upload.uploadedFile(), zipPath, StandardCopyOption.REPLACE_EXISTING); + + Path extractDir = tmpDir.resolve("extracted"); + zip.unzip(zipPath, extractDir); + // If the ZIP has a single root directory, flatten it + try { + zip.flattenSingleDir(extractDir); + } catch (Exception e) { + LOG.warning("Flatten failed for '" + filename + "': " + e.getMessage() + + " — continuing (cd in autoexec handles subdirs)"); + } + + // Fix .cue files that reference non-existent data files (e.g. CloneCD) + try { + cdImageService.fixCueReferences(extractDir); + } catch (Exception e) { + LOG.warning("Failed to fix cue references: " + e.getMessage()); + } + + // Patch game config files with hardcoded absolute paths + try { + configPatcher.fixAbsolutePaths(extractDir); + } catch (Exception e) { + LOG.warning("Failed to patch config paths: " + e.getMessage()); + } + + // Find main executable + String mainExe = exeDetector.findMain(extractDir); + + // Detect CD images + List cdImages = cdImageService.findInDirectory(extractDir); + + if (mainExe == null) { + if (cdImages.isEmpty()) { + return Response.status(400) + .entity(Map.of("error", "No executable (.exe/.com/.bat) found in the archive")) + .build(); + } + // CD-only game — proceed without executable + } + + // Find setup executable + String setupExe = exeDetector.findSetup(extractDir); + + // Create game directory and .jsdos bundle + Path gameDir = svc.gameDir(gameId); + Files.createDirectories(gameDir); + + String bundleFile = gameId + "/" + gameId + ".jsdos"; + Path bundlePath = gameDir.resolve(gameId + ".jsdos"); + zip.createBundle(extractDir, mainExe, cdImages, bundlePath); + + // Detect platform (DOS vs Windows) + Path mainExePath = mainExe != null ? Path.of(mainExe) : null; + String platformType = mainExe != null ? platform.detect(mainExePath) : "dos"; + + // Save metadata + Game game = new Game(gameId, title); + game.setBundleFile(bundleFile); + game.setPlatform(platformType); + + // Store the selected executable and the full list for the UI picker + String relMain = mainExe != null + ? extractDir.relativize(mainExePath).toString().replace('\\', '/') + : ""; + game.setExecutable(relMain); + game.setExecutables(exeDetector.findAll(extractDir)); + if (setupExe != null) { + Path setupExePath = Path.of(setupExe); + String setupPlatform = platform.detect(setupExePath); + if (!"windows".equals(setupPlatform)) { + game.setSetupExe(extractDir.relativize(setupExePath).toString()); + } + } + game.setReady(true); + svc.save(game); + + // Auto-populate from IGDB (use provided igdb_id or auto-search) + if (igdb.isConfigured()) { + if (igdbId != null) { + igdb.applyIgdbId(game, igdbId); + } else { + igdb.autoScrape(game); + } + if (game.isHasCover() || game.getYear() != null || game.getGenre() != null + || (game.getVideos() != null && !game.getVideos().isEmpty()) + || (game.getScreenshots() != null && !game.getScreenshots().isEmpty())) { + svc.save(game); + } + } + + return Response.status(201).entity(game).build(); + + } catch (Exception e) { + LOG.severe("Upload failed for '" + filename + "': " + e.getMessage()); + return Response.serverError() + .entity(Map.of("error", "Upload failed: " + e.getMessage())) + .build(); + } finally { + deleteDir(tmpDir); + } + } + + @POST + @jakarta.ws.rs.Path("/{id}/cover") + @Consumes(MediaType.MULTIPART_FORM_DATA) + public Response uploadCover(@PathParam("id") String id, @RestForm("file") FileUpload upload) throws Exception { + if (upload == null) { + return Response.status(400).entity(Map.of("error", "No file provided")).build(); + } + if (!Files.exists(svc.gameJsonPath(id))) { + return Response.status(404).entity(Map.of("error", "Game not found")).build(); + } + + String fname = upload.fileName().toLowerCase(); + String ext; + if (fname.endsWith(".jpg") || fname.endsWith(".jpeg")) ext = ".jpg"; + else if (fname.endsWith(".png")) ext = ".png"; + else if (fname.endsWith(".webp")) ext = ".webp"; + else { + return Response.status(400).entity(Map.of("error", "Only JPG, PNG, or WebP images accepted")).build(); + } + + Path gameDir = svc.gameDir(id); + // Remove old covers + for (String old : new String[]{".jpg", ".jpeg", ".png", ".webp"}) { + Files.deleteIfExists(gameDir.resolve("cover" + old)); + } + + Files.copy(upload.uploadedFile(), gameDir.resolve("cover" + ext), StandardCopyOption.REPLACE_EXISTING); + return Response.ok(Map.of("status", "ok")).build(); + } + + private void deleteDir(Path dir) throws IOException { + FileUtils.deleteDirectory(dir); + } +} diff --git a/src/main/java/org/dostalgia/ZipService.java b/src/main/java/org/dostalgia/ZipService.java new file mode 100644 index 0000000..5cf6ded --- /dev/null +++ b/src/main/java/org/dostalgia/ZipService.java @@ -0,0 +1,161 @@ +package org.dostalgia; + +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.inject.Inject; + +import java.io.IOException; +import java.io.UncheckedIOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.StandardCopyOption; +import java.util.Comparator; +import java.util.List; +import java.util.Set; +import java.util.TreeSet; +import java.util.logging.Logger; +import java.util.zip.ZipEntry; +import java.util.zip.ZipOutputStream; + +/** + * ZIP extraction, directory flattening, and .jsdos bundle creation. + */ +@ApplicationScoped +public class ZipService { + + private static final Logger LOG = Logger.getLogger(ZipService.class.getName()); + + @Inject + ConfigBuilder config; + + private static final Set SKIP_EXT = Set.of( + ".nrg", ".mdf", ".mds", ".sub", ".dmg" + ); + + /** Unzip an archive to a destination directory (path traversal safe). */ + public void unzip(Path zipPath, Path dest) throws IOException { + try (var zis = new java.util.zip.ZipInputStream(Files.newInputStream(zipPath))) { + java.util.zip.ZipEntry entry; + while ((entry = zis.getNextEntry()) != null) { + Path target = dest.resolve(entry.getName()).normalize(); + if (!target.startsWith(dest)) continue; + if (entry.isDirectory()) { + Files.createDirectories(target); + } else { + Files.createDirectories(target.getParent()); + Files.copy(zis, target, StandardCopyOption.REPLACE_EXISTING); + } + zis.closeEntry(); + } + } + } + + /** + * If the extraction directory contains a single subdirectory, move its contents up. + */ + public void flattenSingleDir(Path dir) throws IOException { + Path singleDir = null; + try (var files = Files.list(dir)) { + for (Path entry : files.toList()) { + if (Files.isDirectory(entry)) { + if (singleDir != null) return; + singleDir = entry; + } + } + } + if (singleDir == null) return; + + LOG.info("Flattening root directory: " + singleDir.getFileName()); + try (var walk = Files.walk(singleDir)) { + var list = walk.sorted(Comparator.reverseOrder()).toList(); + for (Path f : list) { + if (f.equals(singleDir)) continue; + Path target = dir.resolve(singleDir.relativize(f)); + if (Files.isDirectory(f)) { + Files.createDirectories(target); + Files.delete(f); + } else { + Files.createDirectories(target.getParent()); + Files.move(f, target, StandardCopyOption.REPLACE_EXISTING); + } + } + } + Files.delete(singleDir); + LOG.info("Flattened " + singleDir.getFileName()); + } + + /** + * Create a .jsdos bundle ZIP from the extracted game directory. + */ + public void createBundle(Path extractDir, String exePath, List cdImages, Path bundlePath) throws IOException { + Path jsdos = extractDir.resolve(".jsdos"); + Files.createDirectories(jsdos); + if (exePath != null) { + String relExe = extractDir.relativize(Path.of(exePath)).toString(); + Files.writeString(jsdos.resolve("dosbox.conf"), config.buildDosboxConf(relExe, cdImages)); + Files.write(jsdos.resolve("jsdos.json"), config.buildJsdosJson(relExe, cdImages)); + } else { + Files.writeString(jsdos.resolve("dosbox.conf"), config.buildCdOnlyDosboxConf(cdImages)); + Files.write(jsdos.resolve("jsdos.json"), config.buildCdOnlyJsdosJson(cdImages)); + } + + try (var zos = new ZipOutputStream(Files.newOutputStream(bundlePath))) { + + // Phase 1: Collect all directory paths + var allDirs = new TreeSet(); + try (var walk = Files.walk(extractDir)) { + walk.filter(Files::isRegularFile).forEach(f -> { + String entryName = extractDir.relativize(f).toString().replace('\\', '/'); + int idx = entryName.lastIndexOf('/'); + while (idx >= 0) { + allDirs.add(entryName.substring(0, idx + 1)); + idx = entryName.lastIndexOf('/', idx - 1); + } + }); + } + + // Phase 2: Write directory entries first + for (String dir : allDirs) { + zos.putNextEntry(new ZipEntry(dir)); + zos.closeEntry(); + } + + // Phase 3: .jsdos config files (before game files) + try (var walk = Files.walk(jsdos)) { + walk.filter(Files::isRegularFile).sorted() + .forEach(f -> zipEntry(zos, extractDir, f)); + } + + // Phase 4: Game files (excluding skipped extensions) + try (var walk = Files.walk(extractDir)) { + walk.filter(Files::isRegularFile) + .filter(f -> !f.startsWith(jsdos)) + .filter(f -> { + String n = f.getFileName().toString().toLowerCase(); + int dot = n.lastIndexOf('.'); + return dot < 0 || !SKIP_EXT.contains(n.substring(dot)); + }) + .sorted() + .forEach(f -> zipEntry(zos, extractDir, f)); + } + } + + // Clean up .jsdos config files from the extract dir + try (var cleanup = Files.walk(jsdos)) { + cleanup.sorted(Comparator.reverseOrder()).forEach(p -> { + try { Files.deleteIfExists(p); } catch (IOException ignored) {} + }); + } + } + + /** Write a single file into a ZIP output stream, computing entry name relative to extractDir. */ + private static void zipEntry(ZipOutputStream zos, Path extractDir, Path file) { + try { + String entryName = extractDir.relativize(file).toString().replace('\\', '/'); + zos.putNextEntry(new ZipEntry(entryName)); + Files.copy(file, zos); + zos.closeEntry(); + } catch (IOException e) { + throw new UncheckedIOException(e); + } + } +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties new file mode 100644 index 0000000..b17f240 --- /dev/null +++ b/src/main/resources/application.properties @@ -0,0 +1,16 @@ +# ─── Server ────────────────────────────────────── +quarkus.http.port=8765 +quarkus.http.host=0.0.0.0 +quarkus.http.cors=true + +# Allow large game uploads (DOS games can be 500MB+) +quarkus.http.limits.max-body-size=2048M + +# ─── Jackson: snake_case to match frontend expectations ─ +quarkus.jackson.property-naming-strategy=SNAKE_CASE + +# ─── Static resources (frontend SPA from META-INF/resources/) ── +quarkus.http.static-resources.enable=true + +# ─── Data directory (game files, artwork) ──────── +dostalgia.data.dir=/data diff --git a/src/test/java/org/dostalgia/CdImageServiceTest.java b/src/test/java/org/dostalgia/CdImageServiceTest.java new file mode 100644 index 0000000..c872856 --- /dev/null +++ b/src/test/java/org/dostalgia/CdImageServiceTest.java @@ -0,0 +1,106 @@ +package org.dostalgia; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; + +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +class CdImageServiceTest { + + private final CdImageService service = new CdImageService(); + + @Test + void findInDirectory_findsAllCdFormats(@TempDir Path dir) throws Exception { + Files.writeString(dir.resolve("game.cue"), "FILE \"game.bin\" BINARY"); + Files.writeString(dir.resolve("game.bin"), "data"); + Files.writeString(dir.resolve("game.iso"), "iso"); + Files.writeString(dir.resolve("readme.txt"), "text"); + + List result = service.findInDirectory(dir); + assertEquals(3, result.size()); + assertTrue(result.contains("game.bin")); + assertTrue(result.contains("game.cue")); + assertTrue(result.contains("game.iso")); + assertFalse(result.contains("readme.txt")); + } + + @Test + void findInDirectory_emptyDir(@TempDir Path dir) throws Exception { + assertTrue(service.findInDirectory(dir).isEmpty()); + } + + @Test + void findInDirectory_caseInsensitive(@TempDir Path dir) throws Exception { + Files.writeString(dir.resolve("GAME.CUE"), "data"); + Files.writeString(dir.resolve("GAME.ISO"), "data"); + List result = service.findInDirectory(dir); + assertEquals(2, result.size()); + } + + @Test + void fixCueReferences_rewritesNonexistentReference(@TempDir Path dir) throws Exception { + // CUE references game.bin, but only game.img exists + Files.writeString(dir.resolve("game.cue"), "FILE \"game.bin\" BINARY\n TRACK 01 MODE1/2352\n INDEX 01 00:00:00"); + Files.writeString(dir.resolve("game.img"), "data"); + + service.fixCueReferences(dir); + + String fixed = Files.readString(dir.resolve("game.cue")); + assertTrue(fixed.contains("game.img"), "Should reference existing .img file"); + assertFalse(fixed.contains("game.bin"), "Should no longer reference missing .bin"); + } + + @Test + void fixCueReferences_skipsWhenExists(@TempDir Path dir) throws Exception { + // CUE references game.bin — and it exists, so no change + String original = "FILE \"game.bin\" BINARY\n TRACK 01 MODE1/2352\n INDEX 01 00:00:00"; + Files.writeString(dir.resolve("game.cue"), original); + Files.writeString(dir.resolve("game.bin"), "data"); + + service.fixCueReferences(dir); + + assertEquals(original, Files.readString(dir.resolve("game.cue")).trim()); + } + + @Test + void fixCueReferences_noFileLine_noChange(@TempDir Path dir) throws Exception { + String original = "TITLE \"Test Game\"\nTRACK 01 MODE1/2352"; + Files.writeString(dir.resolve("game.cue"), original); + + service.fixCueReferences(dir); + + assertEquals(original, Files.readString(dir.resolve("game.cue")).trim()); + } + + @Test + void findInBundle_findsCdImages(@TempDir Path dir) throws Exception { + // Create a test bundle with CD images and regular files + Path bundle = dir.resolve("test.jsdos"); + try (var zos = new java.util.zip.ZipOutputStream(Files.newOutputStream(bundle))) { + zos.putNextEntry(new java.util.zip.ZipEntry("game.cue")); + zos.write("cue data".getBytes()); + zos.closeEntry(); + zos.putNextEntry(new java.util.zip.ZipEntry("game.iso")); + zos.write("iso data".getBytes()); + zos.closeEntry(); + zos.putNextEntry(new java.util.zip.ZipEntry("readme.txt")); + zos.write("text".getBytes()); + zos.closeEntry(); + zos.putNextEntry(new java.util.zip.ZipEntry("subdir/game.img")); + zos.write("img".getBytes()); + zos.closeEntry(); + } + + List result = service.findInBundle(bundle); + assertEquals(3, result.size()); + assertTrue(result.contains("game.cue")); + assertTrue(result.contains("game.iso")); + assertTrue(result.contains("subdir/game.img")); + } +} diff --git a/src/test/java/org/dostalgia/ConfigBuilderTest.java b/src/test/java/org/dostalgia/ConfigBuilderTest.java new file mode 100644 index 0000000..b8eb51b --- /dev/null +++ b/src/test/java/org/dostalgia/ConfigBuilderTest.java @@ -0,0 +1,80 @@ +package org.dostalgia; + +import org.junit.jupiter.api.Test; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assertions.assertNull; + +class ConfigBuilderTest { + + private final ConfigBuilder builder = new ConfigBuilder(); + + @Test + void buildDosboxConf_noCdImages() { + String conf = builder.buildDosboxConf("FALLOUT.EXE", List.of()); + assertTrue(conf.contains("memsize=64"), "Should include memsize"); + assertTrue(conf.contains("mount c ."), "Should mount C drive"); + assertTrue(conf.contains("FALLOUT.EXE"), "Should reference executable"); + assertFalse(conf.contains("imgmount"), "No CD images should produce no imgmount"); + } + + @Test + void buildDosboxConf_withCdImages() { + String conf = builder.buildDosboxConf("DOTT.EXE", List.of("game.cue", "game.bin")); + assertTrue(conf.contains("imgmount D \"game.bin\" -t cdrom -fs iso"), "Should mount .bin with iso flag"); + assertFalse(conf.contains("game.cue"), "Should skip .cue when .bin exists"); + } + + @Test + void buildDosboxConf_subdirectory() { + String conf = builder.buildDosboxConf("FALLOUT/FALLOUT.EXE", List.of()); + assertTrue(conf.contains("cd FALLOUT"), "Should cd into subdirectory"); + assertTrue(conf.contains("path=c:\\"), "Should set path"); + } + + @Test + void buildCdOnlyDosboxConf() { + String conf = builder.buildCdOnlyDosboxConf(List.of("game.iso")); + assertTrue(conf.contains("runs from the CD-ROM"), "CD-only message"); + assertTrue(conf.contains("imgmount D"), "Should mount CD"); + } + + @Test + void buildJsdosJson() { + byte[] json = builder.buildJsdosJson("GAME.EXE", List.of()); + String s = new String(json); + assertTrue(s.contains("\"script\""), "Should have script key"); + assertTrue(s.contains("\"autolock\""), "Should have autolock"); + assertTrue(s.contains("GAME.EXE"), "Should contain executable name"); + } + + @Test + void splitExePath_rootLevel() { + var parts = ConfigBuilder.splitExePath("GAME.EXE"); + assertNull(parts.dir()); + assertEquals("GAME.EXE", parts.exe()); + } + + @Test + void splitExePath_subdirectory() { + var parts = ConfigBuilder.splitExePath("FALLOUT1/FALLOUT.EXE"); + assertEquals("FALLOUT1", parts.dir()); + assertEquals("FALLOUT.EXE", parts.exe()); + } + + @Test + void splitExePath_nullOrEmpty() { + assertNull(ConfigBuilder.splitExePath(null).dir()); + assertEquals("", ConfigBuilder.splitExePath("").exe()); + } + + @Test + void escapeJson() { + assertEquals("hello", ConfigBuilder.escapeJson("hello")); + assertEquals("\\\\n", ConfigBuilder.escapeJson("\\n")); + assertEquals("he said \\\"hi\\\"", ConfigBuilder.escapeJson("he said \"hi\"")); + } +} diff --git a/src/test/java/org/dostalgia/ConfigPatcherTest.java b/src/test/java/org/dostalgia/ConfigPatcherTest.java new file mode 100644 index 0000000..21ee8b0 --- /dev/null +++ b/src/test/java/org/dostalgia/ConfigPatcherTest.java @@ -0,0 +1,114 @@ +package org.dostalgia; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; + +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; + +import static org.junit.jupiter.api.Assertions.assertArrayEquals; +import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +class ConfigPatcherTest { + + private final ConfigPatcher patcher = new ConfigPatcher(); + + @Test + void fixAbsolutePaths_rewritesStalePrefix(@TempDir Path dir) throws Exception { + // Create a file that references C:\FALLOUT1\MASTER.DAT + // but after flattening, MASTER.DAT is at the root + String content = "master_dat=C:\\FALLOUT1\\MASTER.DAT\ncritter_dat=C:\\FALLOUT1\\CRITTER.DAT\n"; + Files.writeString(dir.resolve("FALLOUT.CFG"), content, StandardCharsets.ISO_8859_1); + + // The referenced files exist at root + Files.writeString(dir.resolve("MASTER.DAT"), "data"); + Files.writeString(dir.resolve("CRITTER.DAT"), "data"); + + patcher.fixAbsolutePaths(dir); + + String fixed = Files.readString(dir.resolve("FALLOUT.CFG"), StandardCharsets.ISO_8859_1); + assertTrue(fixed.contains(".\\MASTER.DAT"), "Should rewrite to relative path"); + assertTrue(fixed.contains(".\\CRITTER.DAT"), "Both files should be rewritten"); + assertFalse(fixed.contains("FALLOUT1"), "Stale prefix should be removed"); + } + + @Test + void fixAbsolutePaths_leavesNonCDrives(@TempDir Path dir) throws Exception { + // D: drive references are CD-ROM — should stay + String content = "cd_path=D:\\GAMEDATA\\SOUND.DAT\n"; + Files.writeString(dir.resolve("config.ini"), content, StandardCharsets.ISO_8859_1); + + patcher.fixAbsolutePaths(dir); + + String fixed = Files.readString(dir.resolve("config.ini"), StandardCharsets.ISO_8859_1); + assertEquals(content.trim(), fixed.trim(), "D: references should be preserved"); + } + + @Test + void fixAbsolutePaths_leavesValidPaths(@TempDir Path dir) throws Exception { + // Path exists with full structure — should stay as-is + Path sub = Files.createDirectory(dir.resolve("VALIDDIR")); + Files.writeString(sub.resolve("file.dat"), "data"); + + String content = "data=C:\\VALIDDIR\\file.dat\n"; + Files.writeString(dir.resolve("config.ini"), content, StandardCharsets.ISO_8859_1); + + patcher.fixAbsolutePaths(dir); + + String fixed = Files.readString(dir.resolve("config.ini"), StandardCharsets.ISO_8859_1); + assertEquals(content.trim(), fixed.trim(), "Valid full paths should be preserved"); + } + + @Test + void fixAbsolutePaths_skipsNonTextFiles(@TempDir Path dir) throws Exception { + // Binary file with null bytes — should not be processed + byte[] binary = new byte[200]; + binary[0] = 'C'; + binary[1] = ':'; + binary[2] = '\\'; + binary[3] = 'D'; + binary[10] = 0; // null byte makes it "not text" + Files.write(dir.resolve("binary.dat"), binary); + + // Should not throw or modify binary files + assertDoesNotThrow(() -> patcher.fixAbsolutePaths(dir)); + + byte[] result = Files.readAllBytes(dir.resolve("binary.dat")); + assertArrayEquals(binary, result, "Binary file should be unchanged"); + } + + @Test + void fixAbsolutePaths_skipsLargeFiles(@TempDir Path dir) throws Exception { + // File > 100KB should be skipped + byte[] large = new byte[101 * 1024]; + large[0] = 'C'; + large[1] = ':'; + large[2] = '\\'; + Files.write(dir.resolve("large.cfg"), large); + + // Should not throw + assertDoesNotThrow(() -> patcher.fixAbsolutePaths(dir)); + } + + @Test + void fixAbsolutePaths_emptyDir_noError(@TempDir Path dir) { + assertDoesNotThrow(() -> patcher.fixAbsolutePaths(dir)); + } + + @Test + void fixAbsolutePaths_unixStylePath(@TempDir Path dir) throws Exception { + // Some games use forward slashes: C:/GAME/DATA + String content = "path=C:/MYGAME/DATA.DAT\n"; + Files.writeString(dir.resolve("config.cfg"), content, StandardCharsets.ISO_8859_1); + Files.writeString(dir.resolve("DATA.DAT"), "data"); + + patcher.fixAbsolutePaths(dir); + + String fixed = Files.readString(dir.resolve("config.cfg"), StandardCharsets.ISO_8859_1); + assertTrue(fixed.contains("./DATA.DAT"), "Forward-slash paths should be fixed"); + } +} diff --git a/src/test/java/org/dostalgia/ExecutableDetectorTest.java b/src/test/java/org/dostalgia/ExecutableDetectorTest.java new file mode 100644 index 0000000..03bd1d5 --- /dev/null +++ b/src/test/java/org/dostalgia/ExecutableDetectorTest.java @@ -0,0 +1,209 @@ +package org.dostalgia; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; + +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertTrue; + +class ExecutableDetectorTest { + + private final PlatformDetector platform = new PlatformDetector(); + private final ExecutableDetector detector = new ExecutableDetector(); + + // Manually wire dependencies since we're not in a CDI container + { + detector.platform = platform; + } + + @Test + void findAll_findsExeComBat(@TempDir Path dir) throws Exception { + Files.writeString(dir.resolve("GAME.EXE"), "MZ"); + Files.writeString(dir.resolve("helper.com"), "MZ"); + Files.writeString(dir.resolve("run.bat"), "@echo off"); + Files.writeString(dir.resolve("readme.txt"), "text"); // should NOT be found + + List result = detector.findAll(dir); + assertEquals(3, result.size()); + assertTrue(result.contains("GAME.EXE")); + assertTrue(result.contains("helper.com")); + assertTrue(result.contains("run.bat")); + assertFalse(result.contains("readme.txt")); + } + + @Test + void findMain_prefersLargestNonInstaller(@TempDir Path dir) throws Exception { + // Small installer + Files.write(dir.resolve("INSTALL.EXE"), createMZ(100)); + // Large real game + Files.write(dir.resolve("GAME.EXE"), createMZ(5000)); + + String main = detector.findMain(dir); + assertEquals(dir.resolve("GAME.EXE").toString(), main); + } + + @Test + void findMain_skipsExtenders(@TempDir Path dir) throws Exception { + Files.write(dir.resolve("DOS4GW.EXE"), createMZ(200)); + Files.write(dir.resolve("GAME.EXE"), createMZ(1000)); + + String main = detector.findMain(dir); + assertEquals(dir.resolve("GAME.EXE").toString(), main); + } + + @Test + void findMain_skipsSelfExtractors(@TempDir Path dir) throws Exception { + byte[] sfx = createMZ(500); + // Embed PKSFX string + String content = new String(sfx); + int pos = content.indexOf("MZ") + 2; + byte[] withSfx = new byte[sfx.length + 20]; + System.arraycopy(sfx, 0, withSfx, 0, sfx.length); + byte[] pksfx = "PKSFX".getBytes(); + System.arraycopy(pksfx, 0, withSfx, pos, pksfx.length); + Files.write(dir.resolve("GAME.EXE"), withSfx); + Files.write(dir.resolve("REAL.EXE"), createMZ(2000)); + + String main = detector.findMain(dir); + assertEquals(dir.resolve("REAL.EXE").toString(), main); + } + + @Test + void findMain_emptyDir_returnsNull(@TempDir Path dir) throws Exception { + assertNull(detector.findMain(dir)); + } + + @Test + void findMain_subdirectoryDeprioritized(@TempDir Path dir) throws Exception { + // Root-level smaller exe + Files.write(dir.resolve("GAME.EXE"), createMZ(1000)); + // Subdirectory larger exe — wins on size before depth is considered + Path sub = Files.createDirectory(dir.resolve("SUBDIR")); + Files.write(sub.resolve("OTHER.EXE"), createMZ(2000)); + + String main = detector.findMain(dir); + // Larger file wins even though it's deeper (size sorts before depth) + assertEquals(sub.resolve("OTHER.EXE").toString(), main); + } + + @Test + void findSetup_findsSetupExe(@TempDir Path dir) throws Exception { + Files.writeString(dir.resolve("SETUP.EXE"), "MZ"); + Files.writeString(dir.resolve("GAME.EXE"), "MZ"); + + String setup = detector.findSetup(dir); + assertEquals(dir.resolve("SETUP.EXE").toString(), setup); + } + + @Test + void findSetup_findsInstallBat(@TempDir Path dir) throws Exception { + Files.writeString(dir.resolve("INSTALL.BAT"), "@echo off"); + + String setup = detector.findSetup(dir); + assertEquals(dir.resolve("INSTALL.BAT").toString(), setup); + } + + @Test + void findSetup_noSetup_returnsNull(@TempDir Path dir) throws Exception { + Files.writeString(dir.resolve("GAME.EXE"), "MZ"); + assertNull(detector.findSetup(dir)); + } + + @Test + void isLikelySelfExtractor_detectsPKSFX(@TempDir Path dir) throws Exception { + byte[] buf = new byte[1000]; + buf[0] = 0x4D; // M + buf[1] = 0x5A; // Z + byte[] pksfx = "PKSFX".getBytes(); + System.arraycopy(pksfx, 0, buf, 10, pksfx.length); + + Path f = dir.resolve("sfx.exe"); + Files.write(f, buf); + assertTrue(ExecutableDetector.isLikelySelfExtractor(f)); + } + + @Test + void isLikelySelfExtractor_plainExe_returnsFalse(@TempDir Path dir) throws Exception { + byte[] buf = createMZ(500); + Path f = dir.resolve("game.exe"); + Files.write(f, buf); + assertFalse(ExecutableDetector.isLikelySelfExtractor(f)); + } + + @Test + void findMain_prefersDosOverWindows(@TempDir Path dir) throws Exception { + // Windows PE executable: MZ header + PE signature at offset 0x80 + byte[] windowsExe = new byte[0x100]; + windowsExe[0] = 0x4D; windowsExe[1] = 0x5A; // MZ + windowsExe[0x3C] = (byte) 0x80; // PE offset at 0x80 + windowsExe[0x80] = 0x50; windowsExe[0x81] = 0x45; // "PE" signature + Files.write(dir.resolve("WIN.EXE"), windowsExe); + + // DOS executable: just MZ header, no PE + byte[] dosExe = new byte[0x40]; + dosExe[0] = 0x4D; dosExe[1] = 0x5A; // MZ + Files.write(dir.resolve("DOS.EXE"), dosExe); + + String main = detector.findMain(dir); + assertNotNull(main); + assertTrue(main.endsWith("DOS.EXE"), + "DOS executable should be preferred over Windows, but got: " + main); + } + + @Test + void findMain_returnsNullForNoExecutables(@TempDir Path dir) throws Exception { + Files.writeString(dir.resolve("readme.txt"), "text"); + Files.writeString(dir.resolve("notes.md"), "markdown"); + assertNull(detector.findMain(dir)); + } + + @Test + void findMain_skipsSelfExtractorsWithPkSignature(@TempDir Path dir) throws Exception { + // Self-extractor with PK\x03\x04 signature bytes (ZIP local header) + byte[] sfx = new byte[0x80]; + sfx[0] = 0x4D; sfx[1] = 0x5A; // MZ header + sfx[0x60] = 0x50; sfx[0x61] = 0x4B; sfx[0x62] = 0x03; sfx[0x63] = 0x04; // PK\x03\x04 + Files.write(dir.resolve("SFX.EXE"), sfx); + + // Real game executable + Files.write(dir.resolve("GAME.EXE"), createMZ(2000)); + + String main = detector.findMain(dir); + assertNotNull(main); + assertTrue(main.endsWith("GAME.EXE"), + "Self-extractor with PK signature bytes should be skipped, but got: " + main); + } + + @Test + void findMain_handlesMixedContent(@TempDir Path dir) throws Exception { + Files.writeString(dir.resolve("readme.txt"), "text"); + Files.write(dir.resolve("DOS4GW.EXE"), createMZ(200)); // extender, skipped + Files.write(dir.resolve("INSTALL.EXE"), createMZ(150)); // installer, deprioritized + Files.write(dir.resolve("GAME.EXE"), createMZ(5000)); // real game, should win + Files.write(dir.resolve("helper.com"), createMZ(100)); // small .com + + String main = detector.findMain(dir); + assertNotNull(main); + assertTrue(main.endsWith("GAME.EXE"), + "Main game executable should be selected, but got: " + main); + } + + @Test + void findAll_returnsEmptyForEmptyDir(@TempDir Path dir) throws Exception { + assertTrue(detector.findAll(dir).isEmpty()); + } + + private static byte[] createMZ(int size) { + byte[] buf = new byte[size]; + buf[0] = 0x4D; // M + buf[1] = 0x5A; // Z + return buf; + } +} diff --git a/src/test/java/org/dostalgia/FileUtilsTest.java b/src/test/java/org/dostalgia/FileUtilsTest.java new file mode 100644 index 0000000..060ddbf --- /dev/null +++ b/src/test/java/org/dostalgia/FileUtilsTest.java @@ -0,0 +1,94 @@ +package org.dostalgia; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; + +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.List; +import java.util.Set; + +import static org.junit.jupiter.api.Assertions.*; + +class FileUtilsTest { + + @Test + void deleteDirectory_nonExistentDir_doesNotThrow(@TempDir Path dir) { + Path nonExistent = dir.resolve("doesnotexist"); + assertDoesNotThrow(() -> FileUtils.deleteDirectory(nonExistent)); + } + + @Test + void deleteDirectory_deletesFilesRecursively(@TempDir Path dir) throws Exception { + Files.writeString(dir.resolve("file1.txt"), "hello"); + Files.writeString(dir.resolve("file2.txt"), "world"); + Path sub = Files.createDirectories(dir.resolve("sub")); + Files.writeString(sub.resolve("nested.txt"), "deep"); + + assertTrue(Files.exists(dir.resolve("file1.txt"))); + FileUtils.deleteDirectory(dir); + assertFalse(Files.exists(dir)); + } + + @Test + void deleteDirectory_deletesSubdirectories(@TempDir Path dir) throws Exception { + Path a = Files.createDirectories(dir.resolve("a/b/c")); + Files.writeString(a.resolve("deep.txt"), "deep"); + Path sub2 = Files.createDirectories(dir.resolve("sub2")); + Files.writeString(sub2.resolve("file.txt"), "data"); + + FileUtils.deleteDirectory(dir); + assertFalse(Files.exists(dir)); + } + + @Test + void findFilesByExtensions_findsExeComBat(@TempDir Path dir) throws Exception { + Files.writeString(dir.resolve("game.exe"), "data"); + Files.writeString(dir.resolve("helper.com"), "data"); + Files.writeString(dir.resolve("run.bat"), "data"); + Files.writeString(dir.resolve("readme.txt"), "data"); + + List result = FileUtils.findFilesByExtensions(dir, Set.of(".exe", ".com", ".bat")); + assertEquals(3, result.size()); + assertTrue(result.contains("game.exe")); + assertTrue(result.contains("helper.com")); + assertTrue(result.contains("run.bat")); + } + + @Test + void findFilesByExtensions_caseInsensitive(@TempDir Path dir) throws Exception { + Files.writeString(dir.resolve("GAME.EXE"), "data"); + Files.writeString(dir.resolve("Helper.Com"), "data"); + Files.writeString(dir.resolve("RUN.BAT"), "data"); + + List result = FileUtils.findFilesByExtensions(dir, Set.of(".exe", ".com", ".bat")); + assertEquals(3, result.size()); + } + + @Test + void findFilesByExtensions_emptyDir_returnsEmpty(@TempDir Path dir) throws Exception { + List result = FileUtils.findFilesByExtensions(dir, Set.of(".exe")); + assertTrue(result.isEmpty()); + } + + @Test + void findFilesByExtensions_noMatches_returnsEmpty(@TempDir Path dir) throws Exception { + Files.writeString(dir.resolve("readme.txt"), "data"); + Files.writeString(dir.resolve("notes.md"), "data"); + + List result = FileUtils.findFilesByExtensions(dir, Set.of(".exe", ".com", ".bat")); + assertTrue(result.isEmpty()); + } + + @Test + void findFilesByExtensions_includesSubdirectories(@TempDir Path dir) throws Exception { + Path sub = Files.createDirectories(dir.resolve("subdir")); + Files.writeString(sub.resolve("game.exe"), "data"); + Files.writeString(dir.resolve("root.exe"), "data"); + + List result = FileUtils.findFilesByExtensions(dir, Set.of(".exe")); + assertEquals(2, result.size()); + assertTrue(result.contains("root.exe")); + assertTrue(result.contains("subdir/game.exe")); + } +} diff --git a/src/test/java/org/dostalgia/GameServiceTest.java b/src/test/java/org/dostalgia/GameServiceTest.java new file mode 100644 index 0000000..35be9f4 --- /dev/null +++ b/src/test/java/org/dostalgia/GameServiceTest.java @@ -0,0 +1,291 @@ +package org.dostalgia; + +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.PropertyNamingStrategies; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; + +import java.nio.file.Files; +import java.nio.file.NoSuchFileException; +import java.nio.file.Path; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.*; + +class GameServiceTest { + + private static final ObjectMapper MAPPER = new ObjectMapper() + .registerModule(new JavaTimeModule()) + .setPropertyNamingStrategy(PropertyNamingStrategies.SNAKE_CASE) + .disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES) + .enable(SerializationFeature.INDENT_OUTPUT); + + // -- sanitizeId tests -- + + @Test + void sanitizeId_normalString_kept() { + assertEquals("hello", GameService.sanitizeId("hello")); + } + + @Test + void sanitizeId_uppercaseToLowercase() { + assertEquals("hello", GameService.sanitizeId("HELLO")); + } + + @Test + void sanitizeId_spacesToHyphens() { + assertEquals("hello-world", GameService.sanitizeId("hello world")); + } + + @Test + void sanitizeId_specialCharsStripped() { + assertEquals("helloworld", GameService.sanitizeId("hello!@#$world")); + } + + @Test + void sanitizeId_tripleHyphenStripped() { + assertEquals("test", GameService.sanitizeId("---test---")); + } + + @Test + void sanitizeId_emptyReturnsUnknown() { + assertEquals("unknown", GameService.sanitizeId("")); + } + + @Test + void sanitizeId_onlySpecialCharsReturnsUnknown() { + assertEquals("unknown", GameService.sanitizeId("!@#$%^&*()")); + } + + @Test + void sanitizeId_mixedCaseAndSpaces() { + assertEquals("doom-ii-hell-on-earth", GameService.sanitizeId("DOOM II: Hell on Earth")); + } + + @Test + void sanitizeId_underscoresToHyphens() { + assertEquals("my-game", GameService.sanitizeId("my_game")); + } + + @Test + void sanitizeId_numbersPreserved() { + assertEquals("game2", GameService.sanitizeId("Game2")); + } + + // -- gameDir / gameJsonPath tests -- + + @Test + void gameDir_returnsCorrectPath(@TempDir Path tempDir) throws Exception { + GameService svc = new GameService(); + svc.dataDir = tempDir.toString(); + svc.init(); + + Path dir = svc.gameDir("test-game"); + assertEquals(tempDir.resolve("games/test-game"), dir); + } + + @Test + void gameJsonPath_returnsCorrectPath(@TempDir Path tempDir) throws Exception { + GameService svc = new GameService(); + svc.dataDir = tempDir.toString(); + svc.init(); + + Path path = svc.gameJsonPath("test-game"); + assertEquals(tempDir.resolve("games/test-game/game.json"), path); + } + + // -- init tests -- + + @Test + void init_createsDirectories(@TempDir Path tempDir) throws Exception { + GameService svc = new GameService(); + svc.dataDir = tempDir.toString(); + svc.init(); + + assertTrue(Files.isDirectory(tempDir.resolve("games"))); + assertTrue(Files.isDirectory(tempDir.resolve("artwork"))); + assertTrue(Files.isDirectory(tempDir.resolve("saves"))); + } + + // -- save / load tests -- + + @Test + void saveAndLoad_roundTrip(@TempDir Path tempDir) throws Exception { + GameService svc = new GameService(); + svc.dataDir = tempDir.toString(); + svc.init(); + + Game game = new Game("test-game", "Test Game"); + game.setYear(1995); + game.setGenre("FPS"); + svc.save(game); + + Game loaded = svc.load("test-game"); + assertEquals("test-game", loaded.getId()); + assertEquals("Test Game", loaded.getTitle()); + assertEquals(1995, loaded.getYear()); + assertEquals("FPS", loaded.getGenre()); + assertNotNull(loaded.getCreatedAt()); + assertNotNull(loaded.getUpdatedAt()); + } + + @Test + void save_updatesUpdatedAt(@TempDir Path tempDir) throws Exception { + GameService svc = new GameService(); + svc.dataDir = tempDir.toString(); + svc.init(); + + Game game = new Game("game1", "Game One"); + svc.save(game); + Thread.sleep(10); // ensure timestamp advances + + game.setGenre("Adventure"); + svc.save(game); + + Game loaded = svc.load("game1"); + assertNotNull(loaded.getUpdatedAt()); + assertTrue(loaded.getUpdatedAt().isAfter(loaded.getCreatedAt()) + || loaded.getUpdatedAt().equals(loaded.getCreatedAt()), + "updatedAt should be >= createdAt"); + } + + @Test + void load_nonExistent_throwsNoSuchFileException(@TempDir Path tempDir) throws Exception { + GameService svc = new GameService(); + svc.dataDir = tempDir.toString(); + svc.init(); + + assertThrows(NoSuchFileException.class, () -> svc.load("nonexistent")); + } + + // -- list tests -- + + @Test + void list_emptyDir_returnsEmpty(@TempDir Path tempDir) throws Exception { + GameService svc = new GameService(); + svc.dataDir = tempDir.toString(); + svc.init(); + + List games = svc.list(); + assertTrue(games.isEmpty()); + } + + @Test + void saveAndList_returnsGame(@TempDir Path tempDir) throws Exception { + GameService svc = new GameService(); + svc.dataDir = tempDir.toString(); + svc.init(); + + svc.save(new Game("game1", "Game One")); + svc.save(new Game("game2", "Game Two")); + + List games = svc.list(); + assertEquals(2, games.size()); + } + + @Test + void list_sortsByTitle(@TempDir Path tempDir) throws Exception { + GameService svc = new GameService(); + svc.dataDir = tempDir.toString(); + svc.init(); + + svc.save(new Game("zzz", "Z Game")); + svc.save(new Game("aaa", "A Game")); + + List games = svc.list(); + assertEquals(2, games.size()); + assertEquals("A Game", games.get(0).getTitle()); + assertEquals("Z Game", games.get(1).getTitle()); + } + + // -- delete tests -- + + @Test + void delete_removesGameDir(@TempDir Path tempDir) throws Exception { + GameService svc = new GameService(); + svc.dataDir = tempDir.toString(); + svc.init(); + + svc.save(new Game("game1", "Game One")); + assertTrue(Files.exists(svc.gameDir("game1"))); + + svc.delete("game1"); + assertFalse(Files.exists(svc.gameDir("game1"))); + } + + @Test + void delete_nonExistent_doesNotThrow(@TempDir Path tempDir) throws Exception { + GameService svc = new GameService(); + svc.dataDir = tempDir.toString(); + svc.init(); + + assertDoesNotThrow(() -> svc.delete("nonexistent")); + } + + @Test + void delete_removesOldJsdosFiles(@TempDir Path tempDir) throws Exception { + GameService svc = new GameService(); + svc.dataDir = tempDir.toString(); + svc.init(); + + // Create backward-compat files that delete should clean up + Files.writeString(tempDir.resolve("games/game1.jsdos"), "old"); + Files.writeString(tempDir.resolve("games/game1.setup.jsdos"), "old-setup"); + + svc.delete("game1"); + + assertFalse(Files.exists(tempDir.resolve("games/game1.jsdos"))); + assertFalse(Files.exists(tempDir.resolve("games/game1.setup.jsdos"))); + } + + // -- JSON serialization tests -- + + @Test + void gameSerialization_snakeCase(@TempDir Path tempDir) throws Exception { + Game g = new Game("my-game", "My Game"); + g.setIgdbCoverId("abc123"); + g.setHasCover(true); + g.setHasScreenshots(false); + g.setIgdbId(42); + g.setBundleSize(1024L); + g.setSetupExe("setup.exe"); + + String json = MAPPER.writeValueAsString(g); + assertTrue(json.contains("\"igdb_cover_id\"")); + assertTrue(json.contains("\"has_cover\"")); + assertTrue(json.contains("\"has_screenshots\"")); + assertTrue(json.contains("\"bundle_size\"")); + assertTrue(json.contains("\"setup_exe\"")); + assertFalse(json.contains("igdbCoverId")); + assertFalse(json.contains("hasCover")); + assertFalse(json.contains("hasScreenshots")); + assertFalse(json.contains("bundleSize")); + assertFalse(json.contains("setupExe")); + + Game deserialized = MAPPER.readValue(json, Game.class); + assertEquals("my-game", deserialized.getId()); + assertEquals("My Game", deserialized.getTitle()); + assertEquals("abc123", deserialized.getIgdbCoverId()); + assertTrue(deserialized.isHasCover()); + assertFalse(deserialized.isHasScreenshots()); + assertEquals(Integer.valueOf(42), deserialized.getIgdbId()); + assertEquals(Long.valueOf(1024L), deserialized.getBundleSize()); + assertEquals("setup.exe", deserialized.getSetupExe()); + } + + @Test + void gameSerialization_timestamps(@TempDir Path tempDir) throws Exception { + Game g = new Game("ts-game", "Timestamp Test"); + String json = MAPPER.writeValueAsString(g); + + assertTrue(json.contains("\"created_at\"")); + assertTrue(json.contains("\"updated_at\"")); + + Game deserialized = MAPPER.readValue(json, Game.class); + assertNotNull(deserialized.getCreatedAt()); + assertNotNull(deserialized.getUpdatedAt()); + } +} diff --git a/src/test/java/org/dostalgia/GameTest.java b/src/test/java/org/dostalgia/GameTest.java new file mode 100644 index 0000000..9f84b9e --- /dev/null +++ b/src/test/java/org/dostalgia/GameTest.java @@ -0,0 +1,154 @@ +package org.dostalgia; + +import org.junit.jupiter.api.Test; + +import java.time.Instant; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.*; + +class GameTest { + + @Test + void noArgConstructor_setsNothing() { + Game g = new Game(); + assertNull(g.getId()); + assertNull(g.getTitle()); + assertNull(g.getYear()); + assertNull(g.getGenre()); + assertNull(g.getDeveloper()); + assertNull(g.getPublisher()); + assertNull(g.getDescription()); + assertNull(g.getRating()); + assertNull(g.getBundleFile()); + assertNull(g.getSetupExe()); + assertNull(g.getBundleSize()); + assertNull(g.getExecutable()); + assertNull(g.getExecutables()); + assertNull(g.getPlatform()); + assertNull(g.getIgdbId()); + assertNull(g.getIgdbCoverId()); + assertFalse(g.isHasCover()); + assertFalse(g.isHasScreenshots()); + assertNull(g.getScreenshots()); + assertNull(g.getVideos()); + assertFalse(g.isReady()); + assertNull(g.getCreatedAt()); + assertNull(g.getUpdatedAt()); + } + + @Test + void twoArgConstructor_setsIdTitleAndTimestamps() { + Game g = new Game("test-id", "Test Game"); + assertEquals("test-id", g.getId()); + assertEquals("Test Game", g.getTitle()); + assertFalse(g.isReady()); + assertNotNull(g.getCreatedAt()); + assertNotNull(g.getUpdatedAt()); + } + + @Test + void settersAndGetters_roundTrip() { + Game g = new Game(); + g.setId("id1"); + g.setTitle("Title"); + g.setYear(1995); + g.setGenre("Action"); + g.setDeveloper("DevCo"); + g.setPublisher("PubCo"); + g.setDescription("A great game"); + g.setRating(4.5); + g.setBundleFile("game.zip"); + g.setSetupExe("setup.exe"); + g.setBundleSize(12345L); + g.setExecutable("game.exe"); + g.setExecutables(List.of("game.exe", "setup.exe")); + g.setPlatform("dos"); + g.setIgdbId(42); + g.setIgdbCoverId("abc123"); + g.setHasCover(true); + g.setHasScreenshots(true); + g.setScreenshots(List.of("shot1.png")); + g.setVideos(List.of("vid1")); + g.setReady(true); + Instant now = Instant.now(); + g.setCreatedAt(now); + g.setUpdatedAt(now); + + assertEquals("id1", g.getId()); + assertEquals("Title", g.getTitle()); + assertEquals(1995, g.getYear()); + assertEquals("Action", g.getGenre()); + assertEquals("DevCo", g.getDeveloper()); + assertEquals("PubCo", g.getPublisher()); + assertEquals("A great game", g.getDescription()); + assertEquals(4.5, g.getRating()); + assertEquals("game.zip", g.getBundleFile()); + assertEquals("setup.exe", g.getSetupExe()); + assertEquals(12345L, g.getBundleSize()); + assertEquals("game.exe", g.getExecutable()); + assertEquals(List.of("game.exe", "setup.exe"), g.getExecutables()); + assertEquals("dos", g.getPlatform()); + assertEquals(42, g.getIgdbId()); + assertEquals("abc123", g.getIgdbCoverId()); + assertTrue(g.isHasCover()); + assertTrue(g.isHasScreenshots()); + assertEquals(List.of("shot1.png"), g.getScreenshots()); + assertEquals(List.of("vid1"), g.getVideos()); + assertTrue(g.isReady()); + assertEquals(now, g.getCreatedAt()); + assertEquals(now, g.getUpdatedAt()); + } + + @Test + void isHasSetup_nullSetupExe_returnsFalse() { + Game g = new Game(); + g.setSetupExe(null); + assertFalse(g.isHasSetup()); + } + + @Test + void isHasSetup_blankSetupExe_returnsFalse() { + Game g = new Game(); + g.setSetupExe(" "); + assertFalse(g.isHasSetup()); + } + + @Test + void isHasSetup_nonBlankSetupExe_returnsTrue() { + Game g = new Game(); + g.setSetupExe("setup.exe"); + assertTrue(g.isHasSetup()); + } + + @Test + void isPlayable_notReady_returnsFalse() { + Game g = new Game(); + g.setReady(false); + assertFalse(g.isPlayable()); + } + + @Test + void isPlayable_readyNullPlatform_returnsTrue() { + Game g = new Game(); + g.setReady(true); + g.setPlatform(null); + assertTrue(g.isPlayable()); + } + + @Test + void isPlayable_readyDosPlatform_returnsTrue() { + Game g = new Game(); + g.setReady(true); + g.setPlatform("dos"); + assertTrue(g.isPlayable()); + } + + @Test + void isPlayable_readyWindowsPlatform_returnsFalse() { + Game g = new Game(); + g.setReady(true); + g.setPlatform("windows"); + assertFalse(g.isPlayable()); + } +} diff --git a/src/test/java/org/dostalgia/IgdbServiceTest.java b/src/test/java/org/dostalgia/IgdbServiceTest.java new file mode 100644 index 0000000..d32d8c4 --- /dev/null +++ b/src/test/java/org/dostalgia/IgdbServiceTest.java @@ -0,0 +1,265 @@ +package org.dostalgia; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.lang.reflect.Method; +import java.util.List; +import java.util.Map; +import java.util.Optional; + +import static org.junit.jupiter.api.Assertions.*; + +class IgdbServiceTest { + + private IgdbService service; + private ObjectMapper mapper; + + private Method epochToYearMethod; + private Method extractGenresMethod; + private Method sanitizeMethod; + private Method jsonNodeToMapMethod; + + @BeforeEach + @SuppressWarnings("unchecked") + void setUp() throws Exception { + service = new IgdbService(); + service.clientId = Optional.of("test-client-id"); + service.clientSecret = Optional.of("test-client-secret"); + mapper = new ObjectMapper(); + + epochToYearMethod = IgdbService.class.getDeclaredMethod("epochToYear", JsonNode.class); + epochToYearMethod.setAccessible(true); + + extractGenresMethod = IgdbService.class.getDeclaredMethod("extractGenres", JsonNode.class); + extractGenresMethod.setAccessible(true); + + sanitizeMethod = IgdbService.class.getDeclaredMethod("sanitize", String.class); + sanitizeMethod.setAccessible(true); + + jsonNodeToMapMethod = IgdbService.class.getDeclaredMethod("jsonNodeToMap", JsonNode.class); + jsonNodeToMapMethod.setAccessible(true); + } + + // -- isConfigured tests -- + + @Test + void isConfigured_returnsTrueWhenBothPresentAndNonBlank() { + assertTrue(service.isConfigured()); + } + + @Test + void isConfigured_returnsFalseWhenClientIdEmpty() { + service.clientId = Optional.empty(); + assertFalse(service.isConfigured()); + } + + @Test + void isConfigured_returnsFalseWhenClientSecretEmpty() { + service.clientSecret = Optional.empty(); + assertFalse(service.isConfigured()); + } + + @Test + void isConfigured_returnsFalseWhenClientIdBlank() { + service.clientId = Optional.of(""); + assertFalse(service.isConfigured()); + } + + @Test + void isConfigured_returnsFalseWhenClientSecretBlank() { + service.clientSecret = Optional.of(""); + assertFalse(service.isConfigured()); + } + + // -- epochToYear tests -- + + @Test + void epochToYear_withReleaseDate_returnsYear() throws Exception { + // 946684800 = 2000-01-01T00:00:00Z + JsonNode node = mapper.readTree("{\"first_release_date\": 946684800}"); + Optional year = (Optional) epochToYearMethod.invoke(null, node); + assertTrue(year.isPresent()); + int y = year.get(); + assertTrue(y >= 1999 && y <= 2001, "Year should be around 2000 but was " + y); + } + + @Test + void epochToYear_withoutReleaseDate_returnsEmpty() throws Exception { + JsonNode node = mapper.readTree("{\"name\": \"Test Game\"}"); + Optional year = (Optional) epochToYearMethod.invoke(null, node); + assertFalse(year.isPresent()); + } + + @Test + void epochToYear_withEpochZero_returnsYear() throws Exception { + // epoch 0 = 1970-01-01T00:00:00Z + JsonNode node = mapper.readTree("{\"first_release_date\": 0}"); + Optional year = (Optional) epochToYearMethod.invoke(null, node); + assertTrue(year.isPresent()); + assertEquals(1970, year.get()); + } + + @Test + void epochToYear_negativeEpoch_returnsYear() throws Exception { + // negative epoch is before 1970 + JsonNode node = mapper.readTree("{\"first_release_date\": -315619200}"); + Optional year = (Optional) epochToYearMethod.invoke(null, node); + assertTrue(year.isPresent()); + // Calendar may handle negative values differently; just verify it returns something + assertNotNull(year.get()); + } + + // -- extractGenres tests -- + + @Test + void extractGenres_withGenresArray_returnsList() throws Exception { + JsonNode node = mapper.readTree("{\"genres\": [{\"name\": \"Action\"}, {\"name\": \"Adventure\"}]}"); + List genres = (List) extractGenresMethod.invoke(null, node); + assertEquals(2, genres.size()); + assertTrue(genres.contains("Action")); + assertTrue(genres.contains("Adventure")); + } + + @Test + void extractGenres_emptyArray_returnsEmptyList() throws Exception { + JsonNode node = mapper.readTree("{\"genres\": []}"); + List genres = (List) extractGenresMethod.invoke(null, node); + assertTrue(genres.isEmpty()); + } + + @Test + void extractGenres_missingField_returnsEmptyList() throws Exception { + JsonNode node = mapper.readTree("{\"name\": \"Test\"}"); + List genres = (List) extractGenresMethod.invoke(null, node); + assertTrue(genres.isEmpty()); + } + + @Test + void extractGenres_genreWithoutName_skipsEntry() throws Exception { + JsonNode node = mapper.readTree("{\"genres\": [{\"name\": \"Action\"}, {\"id\": 5}]}"); + List genres = (List) extractGenresMethod.invoke(null, node); + assertEquals(1, genres.size()); + assertEquals("Action", genres.get(0)); + } + + // -- sanitize tests -- + + @Test + void sanitize_escapesBackslashes() throws Exception { + String result = (String) sanitizeMethod.invoke(service, "path\\to\\file"); + assertEquals("path\\\\to\\\\file", result); + } + + @Test + void sanitize_escapesQuotes() throws Exception { + String result = (String) sanitizeMethod.invoke(service, "say \"hello\""); + assertEquals("say \\\"hello\\\"", result); + } + + @Test + void sanitize_escapesBothBackslashesAndQuotes() throws Exception { + String result = (String) sanitizeMethod.invoke(service, "\\\"mixed\\\""); + assertEquals("\\\\\\\"mixed\\\\\\\"", result); + } + + @Test + void sanitize_normalString_unchanged() throws Exception { + String result = (String) sanitizeMethod.invoke(service, "hello world"); + assertEquals("hello world", result); + } + + @Test + void sanitize_emptyString_unchanged() throws Exception { + String result = (String) sanitizeMethod.invoke(service, ""); + assertEquals("", result); + } + + // -- jsonNodeToMap tests -- + + @Test + void jsonNodeToMap_basicFields() throws Exception { + JsonNode node = mapper.readTree("{\"id\": 123, \"name\": \"Test Game\"}"); + Map map = (Map) jsonNodeToMapMethod.invoke(service, node); + assertEquals(123, map.get("igdb_id")); + assertEquals("Test Game", map.get("name")); + } + + @Test + void jsonNodeToMap_withGenres() throws Exception { + JsonNode node = mapper.readTree("{\"id\": 1, \"name\": \"G\", \"genres\": [{\"name\": \"RPG\"}]}"); + Map map = (Map) jsonNodeToMapMethod.invoke(service, node); + assertTrue(map.containsKey("genres")); + assertEquals(List.of("RPG"), map.get("genres")); + } + + @Test + void jsonNodeToMap_withInvolvedCompanies() throws Exception { + JsonNode node = mapper.readTree(""" + { + "id": 1, + "name": "G", + "involved_companies": [ + { "company": { "name": "DevStudio" }, "developer": true, "publisher": false }, + { "company": { "name": "PubStudio" }, "developer": false, "publisher": true } + ] + } + """); + Map map = (Map) jsonNodeToMapMethod.invoke(service, node); + assertEquals("DevStudio", map.get("developer")); + assertEquals("PubStudio", map.get("publisher")); + } + + @Test + void jsonNodeToMap_withSummary() throws Exception { + JsonNode node = mapper.readTree("{\"id\": 1, \"name\": \"G\", \"summary\": \"A great game\"}"); + Map map = (Map) jsonNodeToMapMethod.invoke(service, node); + assertEquals("A great game", map.get("summary")); + } + + @Test + void jsonNodeToMap_withCoverUrl() throws Exception { + JsonNode node = mapper.readTree("{\"id\": 1, \"name\": \"G\", \"cover\": { \"url\": \"//images.igdb.com/igdb/image/upload/t_thumb/abc.jpg\" }}"); + Map map = (Map) jsonNodeToMapMethod.invoke(service, node); + String coverUrl = (String) map.get("cover_url"); + assertNotNull(coverUrl); + assertTrue(coverUrl.startsWith("https:")); + assertTrue(coverUrl.contains("t_cover_big")); + } + + @Test + void jsonNodeToMap_emptyObject_returnsDefaults() throws Exception { + JsonNode node = mapper.readTree("{}"); + Map map = (Map) jsonNodeToMapMethod.invoke(service, node); + assertEquals(0, map.get("igdb_id")); + assertEquals("", map.get("name")); + } + + @Test + void jsonNodeToMap_noInvolvedCompanies_skipsDevPub() throws Exception { + JsonNode node = mapper.readTree("{\"id\": 1, \"name\": \"G\"}"); + Map map = (Map) jsonNodeToMapMethod.invoke(service, node); + assertFalse(map.containsKey("developer")); + assertFalse(map.containsKey("publisher")); + } + + @Test + void jsonNodeToMap_firstDevAndPubOnly() throws Exception { + // Multiple developers/publishers — only first of each should be recorded + JsonNode node = mapper.readTree(""" + { + "id": 1, "name": "G", + "involved_companies": [ + { "company": { "name": "FirstDev" }, "developer": true, "publisher": false }, + { "company": { "name": "SecondDev" }, "developer": true, "publisher": false }, + { "company": { "name": "FirstPub" }, "developer": false, "publisher": true } + ] + } + """); + Map map = (Map) jsonNodeToMapMethod.invoke(service, node); + assertEquals("FirstDev", map.get("developer")); + assertEquals("FirstPub", map.get("publisher")); + } +} diff --git a/src/test/java/org/dostalgia/PlatformDetectorTest.java b/src/test/java/org/dostalgia/PlatformDetectorTest.java new file mode 100644 index 0000000..108dd2c --- /dev/null +++ b/src/test/java/org/dostalgia/PlatformDetectorTest.java @@ -0,0 +1,92 @@ +package org.dostalgia; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; + +import java.nio.file.Files; +import java.nio.file.Path; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; + +class PlatformDetectorTest { + + private final PlatformDetector detector = new PlatformDetector(); + + @Test + void detect_comFile_returnsDos(@TempDir Path dir) throws Exception { + Path f = dir.resolve("test.com"); + Files.write(f, new byte[]{0x4D, 0x5A}); // MZ header + assertEquals("dos", detector.detect(f)); + } + + @Test + void detect_batFile_returnsDos(@TempDir Path dir) throws Exception { + Path f = dir.resolve("test.bat"); + Files.writeString(f, "@echo off"); + assertEquals("dos", detector.detect(f)); + } + + @Test + void detect_plainMZ_returnsDos(@TempDir Path dir) throws Exception { + byte[] buf = new byte[0x80]; + buf[0] = 0x4D; // M + buf[1] = 0x5A; // Z + // e_lfanew points to garbage — should be treated as plain DOS + buf[0x3C] = 0x00; + buf[0x3D] = 0x00; + buf[0x3E] = 0x00; + buf[0x3F] = 0x00; + + Path f = dir.resolve("test.exe"); + Files.write(f, buf); + assertEquals("dos", detector.detect(f)); + } + + @Test + void detect_peHeader_returnsWindows(@TempDir Path dir) throws Exception { + byte[] buf = new byte[0x100]; + buf[0] = 0x4D; // M + buf[1] = 0x5A; // Z + // e_lfanew = 0x80 + buf[0x3C] = (byte) 0x80; + buf[0x3D] = 0x00; + buf[0x3E] = 0x00; + buf[0x3F] = 0x00; + // PE signature at offset 0x80 + buf[0x80] = 0x50; // P + buf[0x81] = 0x45; // E + + Path f = dir.resolve("test.exe"); + Files.write(f, buf); + assertEquals("windows", detector.detect(f)); + } + + @Test + void detect_neHeader_returnsWindows(@TempDir Path dir) throws Exception { + byte[] buf = new byte[0x100]; + buf[0] = 0x4D; + buf[1] = 0x5A; + buf[0x3C] = (byte) 0x80; + buf[0x80] = 0x4E; // N + buf[0x81] = 0x45; // E + + Path f = dir.resolve("test.exe"); + Files.write(f, buf); + assertEquals("windows", detector.detect(f)); + } + + @Test + void detect_emptyFile_returnsNull(@TempDir Path dir) throws Exception { + Path f = dir.resolve("empty.exe"); + Files.write(f, new byte[0]); + assertNull(detector.detect(f)); + } + + @Test + void detect_noMZ_returnsNull(@TempDir Path dir) throws Exception { + Path f = dir.resolve("bad.exe"); + Files.write(f, new byte[]{0x00, 0x00}); + assertNull(detector.detect(f)); + } +} diff --git a/src/test/java/org/dostalgia/StaticResourceTest.java b/src/test/java/org/dostalgia/StaticResourceTest.java new file mode 100644 index 0000000..c967e3b --- /dev/null +++ b/src/test/java/org/dostalgia/StaticResourceTest.java @@ -0,0 +1,198 @@ +package org.dostalgia; + +import jakarta.ws.rs.core.Response; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; + +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.*; + +class StaticResourceTest { + + @Test + void health_returnsOkStatusAndVersion(@TempDir Path tempDir) { + StaticResource sr = new StaticResource(); + sr.dataDir = tempDir.toString(); + + Response resp = sr.health(); + assertEquals(200, resp.getStatus()); + Object entity = resp.getEntity(); + assertInstanceOf(Map.class, entity); + Map map = (Map) entity; + assertEquals("ok", map.get("status")); + assertEquals("0.1.0", map.get("version")); + } + + @Test + void getGameFile_jsdosContentType(@TempDir Path tempDir) throws Exception { + Path gamesDir = Files.createDirectories(tempDir.resolve("games")); + Files.writeString(gamesDir.resolve("test.jsdos"), "zip content"); + + StaticResource sr = new StaticResource(); + sr.dataDir = tempDir.toString(); + + Response resp = sr.getGameFile("test.jsdos"); + assertEquals(200, resp.getStatus()); + assertNotNull(resp.getMediaType()); + assertEquals("application/zip", resp.getMediaType().toString()); + } + + @Test + void getGameFile_zipContentType(@TempDir Path tempDir) throws Exception { + Path gamesDir = Files.createDirectories(tempDir.resolve("games")); + Files.writeString(gamesDir.resolve("archive.zip"), "zip content"); + + StaticResource sr = new StaticResource(); + sr.dataDir = tempDir.toString(); + + Response resp = sr.getGameFile("archive.zip"); + assertEquals(200, resp.getStatus()); + assertNotNull(resp.getMediaType()); + assertEquals("application/zip", resp.getMediaType().toString()); + } + + @Test + void getGameFile_jpgContentType(@TempDir Path tempDir) throws Exception { + Path gamesDir = Files.createDirectories(tempDir.resolve("games")); + Files.writeString(gamesDir.resolve("cover.jpg"), "image data"); + + StaticResource sr = new StaticResource(); + sr.dataDir = tempDir.toString(); + + Response resp = sr.getGameFile("cover.jpg"); + assertEquals(200, resp.getStatus()); + assertNotNull(resp.getMediaType()); + assertEquals("image/jpeg", resp.getMediaType().toString()); + } + + @Test + void getGameFile_jpegContentType(@TempDir Path tempDir) throws Exception { + Path gamesDir = Files.createDirectories(tempDir.resolve("games")); + Files.writeString(gamesDir.resolve("photo.jpeg"), "image data"); + + StaticResource sr = new StaticResource(); + sr.dataDir = tempDir.toString(); + + Response resp = sr.getGameFile("photo.jpeg"); + assertEquals(200, resp.getStatus()); + assertNotNull(resp.getMediaType()); + assertEquals("image/jpeg", resp.getMediaType().toString()); + } + + @Test + void getGameFile_pngContentType(@TempDir Path tempDir) throws Exception { + Path gamesDir = Files.createDirectories(tempDir.resolve("games")); + Files.writeString(gamesDir.resolve("screenshot.png"), "png data"); + + StaticResource sr = new StaticResource(); + sr.dataDir = tempDir.toString(); + + Response resp = sr.getGameFile("screenshot.png"); + assertEquals(200, resp.getStatus()); + assertNotNull(resp.getMediaType()); + assertEquals("image/png", resp.getMediaType().toString()); + } + + @Test + void getGameFile_webpContentType(@TempDir Path tempDir) throws Exception { + Path gamesDir = Files.createDirectories(tempDir.resolve("games")); + Files.writeString(gamesDir.resolve("image.webp"), "webp data"); + + StaticResource sr = new StaticResource(); + sr.dataDir = tempDir.toString(); + + Response resp = sr.getGameFile("image.webp"); + assertEquals(200, resp.getStatus()); + assertNotNull(resp.getMediaType()); + assertEquals("image/webp", resp.getMediaType().toString()); + } + + @Test + void getGameFile_gifContentType(@TempDir Path tempDir) throws Exception { + Path gamesDir = Files.createDirectories(tempDir.resolve("games")); + Files.writeString(gamesDir.resolve("anim.gif"), "gif data"); + + StaticResource sr = new StaticResource(); + sr.dataDir = tempDir.toString(); + + Response resp = sr.getGameFile("anim.gif"); + assertEquals(200, resp.getStatus()); + assertNotNull(resp.getMediaType()); + assertEquals("image/gif", resp.getMediaType().toString()); + } + + @Test + void getGameFile_jsonContentType(@TempDir Path tempDir) throws Exception { + Path gamesDir = Files.createDirectories(tempDir.resolve("games")); + Files.writeString(gamesDir.resolve("data.json"), "{}"); + + StaticResource sr = new StaticResource(); + sr.dataDir = tempDir.toString(); + + Response resp = sr.getGameFile("data.json"); + assertEquals(200, resp.getStatus()); + assertNotNull(resp.getMediaType()); + assertEquals("application/json", resp.getMediaType().toString()); + } + + @Test + void getGameFile_exeContentType(@TempDir Path tempDir) throws Exception { + Path gamesDir = Files.createDirectories(tempDir.resolve("games")); + Files.writeString(gamesDir.resolve("game.exe"), "MZ"); + + StaticResource sr = new StaticResource(); + sr.dataDir = tempDir.toString(); + + Response resp = sr.getGameFile("game.exe"); + assertEquals(200, resp.getStatus()); + assertNotNull(resp.getMediaType()); + assertEquals("application/octet-stream", resp.getMediaType().toString()); + } + + @Test + void getGameFile_pathTraversal_returns403(@TempDir Path tempDir) { + StaticResource sr = new StaticResource(); + sr.dataDir = tempDir.toString(); + + Response resp = sr.getGameFile("../etc/passwd"); + assertEquals(403, resp.getStatus()); + } + + @Test + void getGameFile_nonExistentFile_returns404(@TempDir Path tempDir) throws Exception { + Files.createDirectories(tempDir.resolve("games")); + + StaticResource sr = new StaticResource(); + sr.dataDir = tempDir.toString(); + + Response resp = sr.getGameFile("nonexistent.exe"); + assertEquals(404, resp.getStatus()); + } + + @Test + void getArtwork_contentTypeAndCacheHeader(@TempDir Path tempDir) throws Exception { + Path artworkDir = Files.createDirectories(tempDir.resolve("artwork")); + Files.writeString(artworkDir.resolve("cover.jpg"), "image data"); + + StaticResource sr = new StaticResource(); + sr.dataDir = tempDir.toString(); + + Response resp = sr.getArtwork("cover.jpg"); + assertEquals(200, resp.getStatus()); + assertNotNull(resp.getMediaType()); + assertEquals("image/jpeg", resp.getMediaType().toString()); + assertTrue(resp.getHeaders().containsKey("Cache-Control")); + } + + @Test + void getArtwork_pathTraversal_returns403(@TempDir Path tempDir) { + StaticResource sr = new StaticResource(); + sr.dataDir = tempDir.toString(); + + Response resp = sr.getArtwork("../../etc/passwd"); + assertEquals(403, resp.getStatus()); + } +} diff --git a/src/test/java/org/dostalgia/ZipServiceTest.java b/src/test/java/org/dostalgia/ZipServiceTest.java new file mode 100644 index 0000000..535167b --- /dev/null +++ b/src/test/java/org/dostalgia/ZipServiceTest.java @@ -0,0 +1,230 @@ +package org.dostalgia; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; + +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.List; +import java.util.zip.ZipEntry; +import java.util.zip.ZipInputStream; +import java.util.zip.ZipOutputStream; + +import static org.junit.jupiter.api.Assertions.*; + +class ZipServiceTest { + + private final ZipService zip = new ZipService(); + + // Wire the config dependency manually (no CDI) + { + zip.config = new ConfigBuilder(); + } + + @Test + void unzip_extractsFiles(@TempDir Path dir) throws Exception { + Path zipFile = dir.resolve("test.zip"); + Path dest = dir.resolve("output"); + + try (ZipOutputStream zos = new ZipOutputStream(Files.newOutputStream(zipFile))) { + zos.putNextEntry(new ZipEntry("game.exe")); + zos.write("MZ".getBytes()); + zos.closeEntry(); + zos.putNextEntry(new ZipEntry("readme.txt")); + zos.write("Hello".getBytes()); + zos.closeEntry(); + } + + zip.unzip(zipFile, dest); + assertTrue(Files.exists(dest.resolve("game.exe"))); + assertTrue(Files.exists(dest.resolve("readme.txt"))); + assertEquals("MZ", Files.readString(dest.resolve("game.exe"))); + assertEquals("Hello", Files.readString(dest.resolve("readme.txt"))); + } + + @Test + void unzip_handlesSubdirectories(@TempDir Path dir) throws Exception { + Path zipFile = dir.resolve("test.zip"); + Path dest = dir.resolve("output"); + + try (ZipOutputStream zos = new ZipOutputStream(Files.newOutputStream(zipFile))) { + zos.putNextEntry(new ZipEntry("subdir/game.exe")); + zos.write("MZ".getBytes()); + zos.closeEntry(); + zos.putNextEntry(new ZipEntry("subdir/nested/deep.txt")); + zos.write("deep".getBytes()); + zos.closeEntry(); + } + + zip.unzip(zipFile, dest); + assertTrue(Files.exists(dest.resolve("subdir/game.exe"))); + assertTrue(Files.exists(dest.resolve("subdir/nested/deep.txt"))); + } + + @Test + void unzip_pathTraversal_skipsMaliciousEntries(@TempDir Path dir) throws Exception { + Path zipFile = dir.resolve("test.zip"); + Path dest = dir.resolve("output"); + Files.createDirectories(dest); + + try (ZipOutputStream zos = new ZipOutputStream(Files.newOutputStream(zipFile))) { + zos.putNextEntry(new ZipEntry("../evil.txt")); + zos.write("malicious".getBytes()); + zos.closeEntry(); + zos.putNextEntry(new ZipEntry("good.txt")); + zos.write("good".getBytes()); + zos.closeEntry(); + } + + zip.unzip(zipFile, dest); + // Malicious entry should be skipped (path traversal) + assertFalse(Files.exists(dir.resolve("evil.txt"))); + // Good entry should be extracted + assertTrue(Files.exists(dest.resolve("good.txt"))); + } + + @Test + void unzip_directoryEntries_createDirs(@TempDir Path dir) throws Exception { + Path zipFile = dir.resolve("test.zip"); + Path dest = dir.resolve("output"); + + try (ZipOutputStream zos = new ZipOutputStream(Files.newOutputStream(zipFile))) { + zos.putNextEntry(new ZipEntry("adir/")); + zos.closeEntry(); + zos.putNextEntry(new ZipEntry("adir/file.txt")); + zos.write("data".getBytes()); + zos.closeEntry(); + } + + zip.unzip(zipFile, dest); + assertTrue(Files.isDirectory(dest.resolve("adir"))); + assertTrue(Files.exists(dest.resolve("adir/file.txt"))); + } + + @Test + void flattenSingleDir_noOpWhenMultipleDirs(@TempDir Path dir) throws Exception { + Files.createDirectories(dir.resolve("sub1")); + Files.createDirectories(dir.resolve("sub2")); + Files.writeString(dir.resolve("sub1/file.txt"), "data"); + + zip.flattenSingleDir(dir); + assertTrue(Files.exists(dir.resolve("sub1/file.txt"))); + assertTrue(Files.isDirectory(dir.resolve("sub1"))); + assertTrue(Files.isDirectory(dir.resolve("sub2"))); + } + + @Test + void flattenSingleDir_noOpWhenNoSingleDir(@TempDir Path dir) throws Exception { + Files.writeString(dir.resolve("file.txt"), "data"); + Files.writeString(dir.resolve("other.txt"), "data"); + + zip.flattenSingleDir(dir); + assertTrue(Files.exists(dir.resolve("file.txt"))); + assertTrue(Files.exists(dir.resolve("other.txt"))); + } + + @Test + void flattenSingleDir_flattensOneDir(@TempDir Path dir) throws Exception { + Path single = Files.createDirectories(dir.resolve("single")); + Files.createDirectories(single.resolve("nested")); + Files.writeString(single.resolve("file.txt"), "data"); + Files.writeString(single.resolve("nested/deep.txt"), "deep"); + + zip.flattenSingleDir(dir); + // Files should now be directly under dir + assertTrue(Files.exists(dir.resolve("file.txt"))); + assertTrue(Files.exists(dir.resolve("nested/deep.txt"))); + // The intermediate single dir should be gone + assertFalse(Files.exists(single)); + } + + @Test + void flattenSingleDir_emptyDir_noOp(@TempDir Path dir) throws Exception { + zip.flattenSingleDir(dir); + assertTrue(Files.exists(dir)); + } + + @Test + void createBundle_createsValidJsdosZip(@TempDir Path dir) throws Exception { + Path extractDir = dir.resolve("extract"); + Files.createDirectories(extractDir.resolve("sub")); + Files.writeString(extractDir.resolve("game.exe"), "MZ"); + Files.writeString(extractDir.resolve("sub/data.bin"), "binary"); + Files.writeString(extractDir.resolve("readme.txt"), "info"); + + Path bundlePath = dir.resolve("output.jsdos"); + + zip.createBundle(extractDir, extractDir.resolve("game.exe").toString(), List.of(), bundlePath); + + assertTrue(Files.exists(bundlePath)); + assertTrue(Files.size(bundlePath) > 0); + + try (ZipInputStream zis = new ZipInputStream(Files.newInputStream(bundlePath))) { + boolean hasGameExe = false; + boolean hasJsdosDir = false; + boolean hasJsdosConf = false; + boolean hasJsdosJson = false; + boolean hasDataBin = false; + ZipEntry entry; + while ((entry = zis.getNextEntry()) != null) { + String name = entry.getName(); + if (name.equals("game.exe")) hasGameExe = true; + if (name.startsWith(".jsdos/")) hasJsdosDir = true; + if (name.equals(".jsdos/dosbox.conf")) hasJsdosConf = true; + if (name.equals(".jsdos/jsdos.json")) hasJsdosJson = true; + if (name.equals("sub/data.bin")) hasDataBin = true; + zis.closeEntry(); + } + assertTrue(hasGameExe, "Should contain game.exe"); + assertTrue(hasJsdosDir, "Should contain .jsdos/ entries"); + assertTrue(hasJsdosConf, "Should contain .jsdos/dosbox.conf"); + assertTrue(hasJsdosJson, "Should contain .jsdos/jsdos.json"); + assertTrue(hasDataBin, "Should contain sub/data.bin"); + } + } + + @Test + void createBundle_respectsSkipExt(@TempDir Path dir) throws Exception { + Path extractDir = dir.resolve("extract"); + Files.createDirectories(extractDir); + Files.writeString(extractDir.resolve("game.exe"), "MZ"); + Files.writeString(extractDir.resolve("cdimage.nrg"), "image"); + Files.writeString(extractDir.resolve("cdimage.mdf"), "image"); + + Path bundlePath = dir.resolve("output.jsdos"); + + zip.createBundle(extractDir, extractDir.resolve("game.exe").toString(), List.of(), bundlePath); + + try (ZipInputStream zis = new ZipInputStream(Files.newInputStream(bundlePath))) { + ZipEntry entry; + while ((entry = zis.getNextEntry()) != null) { + String name = entry.getName(); + assertNotEquals("cdimage.nrg", name, "Should not contain .nrg"); + assertNotEquals("cdimage.mdf", name, "Should not contain .mdf"); + zis.closeEntry(); + } + } + } + + @Test + void createBundle_noExe_createsCdOnlyConfig(@TempDir Path dir) throws Exception { + Path extractDir = dir.resolve("extract"); + Files.createDirectories(extractDir); + Files.writeString(extractDir.resolve("somefile.bin"), "data"); + + Path bundlePath = dir.resolve("output.jsdos"); + + // null exePath triggers CD-only config generation + zip.createBundle(extractDir, null, List.of("cd.iso"), bundlePath); + + try (ZipInputStream zis = new ZipInputStream(Files.newInputStream(bundlePath))) { + boolean hasJsdosConf = false; + ZipEntry entry; + while ((entry = zis.getNextEntry()) != null) { + if (entry.getName().equals(".jsdos/dosbox.conf")) hasJsdosConf = true; + zis.closeEntry(); + } + assertTrue(hasJsdosConf, "CD-only bundle should still have dosbox.conf"); + } + } +}

~LY8 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�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