{ "name": "healer-man", "private": true, "version": "0.1.3", "type": "module", "scripts": { "dev": "vite --host 0.0.0.0", "start": "node server/server.mjs", "db:init": "node scripts/init-game-database.mjs", "db:backup": "node scripts/backup-game-database.mjs", "server:test": "node --test server/*.test.mjs", "content:publish": "node scripts/content/publish-content.mjs", "android:prepare": "node scripts/content/prepare-android-bootstrap.mjs", "content:test": "node --test scripts/content/*.test.mjs", "wow335:abilities": "node scripts/generate-wow335-abilities.mjs", "coa:sync": "node scripts/sync-ascension-coa.mjs", "coa:sync:live": "node scripts/sync-ascension-coa.mjs --tooltips", "coa:icons": "node scripts/export-spell-icons.mjs", "ascension:talents": "node scripts/generate-wow335-talents.mjs ../wow335a/Interface/AddOns/PlayerBotManager/PBM/PBM_TalentData.lua ../LadiksMPQEditor/client-current/area-52/patch-D/DBFilesClient/Spell.dbc src/game/wow335Talents.generated.ts ../LadiksMPQEditor/client-current/area-52/patch-D/DBFilesClient/Talent.dbc", "ascension:sync": "npm run coa:sync && npm run wow335:abilities && npm run ascension:talents && npm run coa:icons", "manastorm:import": "node scripts/manastorm-import/cli.mjs", "manastorm:forensics": "node scripts/manastorm-import/forensics-cli.mjs", "manastorm:sync": "npm run manastorm:import && npm run manastorm:forensics && npm run coa:icons", "manastorm:maps:discover": "node scripts/manastorm-pipeline/cli.mjs discover", "manastorm:maps:scaffold": "node scripts/manastorm-pipeline/cli.mjs scaffold", "manastorm:maps:import": "node scripts/manastorm-assets/import-existing-stage.mjs", "manastorm:maps:validate": "node scripts/manastorm-pipeline/cli.mjs validate", "manastorm:maps:khronos": "node scripts/manastorm-assets/validate-package-glbs.cjs public/assets/game/manastorm", "loot:generate": "node scripts/generate-loot-catalog.mjs", "dungeon:discover": "node scripts/dungeon-pipeline/cli.mjs discover", "dungeon:discover:all": "node scripts/dungeon-pipeline/discover-all.mjs", "dungeon:epoch:catalog": "node scripts/dungeon-pipeline/import-epoch-client.mjs", "dungeon:epoch:build": "node scripts/dungeon-pipeline/build-epoch-dungeons.mjs", "dungeon:epoch:creatures:package": "node scripts/dungeon-pipeline/package-epoch-creatures.mjs", "dungeon:epoch:creatures": "node scripts/dungeon-pipeline/build-epoch-creatures.mjs", "dungeon:epoch:scripts": "node scripts/dungeon-pipeline/import-azerothcore-scripts.mjs", "dungeon:epoch:sync": "node scripts/dungeon-pipeline/sync-epoch-dungeons.mjs", "dungeon:source:azerothcore": "node scripts/dungeon-pipeline/import-azerothcore-world.mjs", "dungeon:catalog": "node scripts/dungeon-pipeline/compile-campaign-catalog.mjs", "dungeon:canonicalize-environments": "node scripts/dungeon-pipeline/relink-canonical-environments.mjs", "dungeon:dedupe-creatures": "node scripts/dungeon-pipeline/dedupe-shared-creatures.mjs", "dungeon:test-creature-animation-policy": "node --test scripts/dungeon-pipeline/runtime-creature-animations.test.mjs", "dungeon:test-creature-mesh-policy": "node --test scripts/dungeon-pipeline/creature-mesh-consolidation.test.mjs", "dungeon:optimize-creature-animations": "node scripts/dungeon-pipeline/optimize-shipped-creature-animations.mjs && node scripts/dungeon-pipeline/optimize-shared-creatures.mjs && npm run dungeon:catalog", "dungeon:optimize-shared-creatures": "node scripts/dungeon-pipeline/optimize-shared-creatures.mjs", "dungeon:five-player:import": "node scripts/dungeon-pipeline/import-five-player-dungeon.mjs", "dungeon:five-player:import:remaining": "node scripts/dungeon-pipeline/import-remaining-five-player-dungeons.mjs", "dungeon:five-player:verify": "node scripts/dungeon-pipeline/verify-five-player-dungeon-imports.mjs", "dungeon:wow:audit": "node scripts/dungeon-pipeline/audit-wow-dungeon-content.mjs", "dungeon:wow:test": "vitest run src/game/wowDungeonContent.test.ts", "dungeon:wow:all": "node scripts/dungeon-pipeline/run-all-wow-dungeons.mjs", "dungeon:extract": "node scripts/dungeon-pipeline/cli.mjs extract", "dungeon:creatures": "node scripts/dungeon-pipeline/cli.mjs creatures", "dungeon:convert": "node scripts/dungeon-pipeline/cli.mjs convert", "dungeon:optimize": "node scripts/dungeon-pipeline/cli.mjs optimize", "dungeon:build": "node scripts/dungeon-pipeline/cli.mjs build", "dungeon:navmesh": "node scripts/dungeon-pipeline/cli.mjs navmesh", "dungeon:navmesh:conversion": "node scripts/dungeon-pipeline/cli.mjs navmesh-conversion", "dungeon:validate": "node scripts/dungeon-pipeline/cli.mjs validate", "dungeon:enable": "node scripts/dungeon-pipeline/cli.mjs enable", "runewaker:forsaken": "node \"%INIT_CWD%\\scripts\\runewaker-pipeline\\build-forsaken-abbey.mjs\"", "runewaker:forsaken:actors": "node scripts/runewaker-pipeline/build-forsaken-population.mjs --actors-only", "runewaker:forsaken:population": "node scripts/runewaker-pipeline/build-forsaken-population.mjs", "runewaker:forsaken:population:refresh": "node scripts/runewaker-pipeline/refresh-forsaken-population.mjs", "runewaker:discover": "node scripts/runewaker-pipeline/cli.mjs discover", "runewaker:prepare:all": "node scripts/runewaker-pipeline/cli.mjs prepare-all", "runewaker:build:all": "node scripts/runewaker-pipeline/cli.mjs build-all --resume", "runewaker:register:all": "node scripts/runewaker-pipeline/cli.mjs register-all", "runewaker:refresh:all": "node scripts/runewaker-pipeline/cli.mjs refresh-all", "runewaker:spells:refresh": "node scripts/runewaker-pipeline/export-spell-catalog.mjs", "runewaker:players:refresh": "node scripts/runewaker-pipeline/export-player-catalog.mjs && npm run runewaker:players:avatars", "runewaker:players:avatars": "node scripts/runewaker-pipeline/build-population.mjs --recipe scripts/runewaker-pipeline/recipes/runewaker-player-avatars.json --actors-only && node scripts/runewaker-pipeline/finalize-player-avatar-manifest.mjs", "runewaker:paperdolls:refresh": "node scripts/runewaker-pipeline/refresh-paperdoll-appearances.mjs", "runewaker:audit:animation-readiness": "node scripts/runewaker-pipeline/audit-animation-readiness.mjs", "runewaker:audit:animation-inventory": "node scripts/runewaker-pipeline/inventory-animation-assets.mjs", "runewaker:audit:runtime-clips": "node scripts/runewaker-pipeline/audit-runtime-clip-coverage.mjs", "runewaker:audit:pose-batch": "node scripts/runewaker-pipeline/audit-animated-poses.mjs", "runewaker:audit:pose-master": "node scripts/runewaker-pipeline/generate-master-actor-pose-audit.mjs", "runewaker:audit:animations": "npm run runewaker:audit:animation-readiness && vitest run src/game/runewakerDungeonAnimation.test.ts src/game/mobAnimation.test.ts src/game/runewakerDungeonRegistry.test.ts", "runewaker:audit:gameplay": "node scripts/runewaker-pipeline/audit-gameplay-content.mjs", "runewaker:audit:navigation": "node scripts/runewaker-pipeline/analyze-navigation-gaps.mjs && vitest run src/game/runewakerObjectiveRouteAudit.test.ts", "assets:wailing:instance": "gltf-transform instance ../wow335a/dungeon-export-work/WailingCaverns/converted/wailing-caverns.visual.glb src/assets/game/dungeons/wailing-caverns/wailing-caverns-visual.glb --min 3", "assets:wailing:creatures:animated": "node scripts/prepareAnimatedCreatures.mjs", "assets:wailing:creatures:combat": "node scripts/add-combat-creature-clips.mjs", "assets:wailing:creatures:audit": "node scripts/audit-combat-creature-clips.mjs", "assets:ktx2": "node scripts/asset-pipeline/compress-ktx2.mjs", "assets:ktx2:visuals": "node scripts/asset-pipeline/compress-ktx2.mjs --visual-only && npm run assets:ktx2:refresh-metadata", "assets:ktx2:creatures": "node scripts/asset-pipeline/compress-creature-ktx2.mjs", "assets:ktx2:audit": "node scripts/asset-pipeline/audit-ktx2.mjs --visual-only --require-all", "assets:ktx2:refresh-metadata": "node scripts/asset-pipeline/refresh-ktx2-metadata.mjs", "prebuild": "npm run loot:generate && npm run assets:ktx2:audit", "build": "tsc -b && vite build", "build:android:web": "npm run prebuild && npm run android:prepare && tsc -b && node --max-old-space-size=8192 node_modules/vite/bin/vite.js build --mode android", "android:sync": "npm run build:android:web && cap sync android", "android:apk": "npm run android:sync && powershell.exe -NoProfile -ExecutionPolicy Bypass -File scripts/runAndroidGradle.ps1 assembleDebug", "android:apk:release": "npm run android:sync && powershell.exe -NoProfile -ExecutionPolicy Bypass -File scripts/runAndroidGradle.ps1 assembleRelease", "android:install": "npm run android:sync && powershell.exe -NoProfile -ExecutionPolicy Bypass -File scripts/runAndroidGradle.ps1 installDebug", "release:gui": "python scripts/release_manager.py", "preview": "vite preview --host 0.0.0.0", "pretest": "npm run loot:generate", "test": "vitest run", "test:watch": "vitest" }, "dependencies": { "@capacitor/android": "8.4.1", "@capacitor/core": "8.4.1", "@react-three/drei": "^10.7.7", "@react-three/fiber": "^9.6.0", "@react-three/rapier": "^2.2.0", "fflate": "^0.8.3", "react": "^19.2.0", "react-dom": "^19.2.0", "three": "^0.179.1", "zustand": "^5.0.8" }, "devDependencies": { "@capacitor/cli": "8.4.1", "@gltf-transform/cli": "^4.4.1", "@gltf-transform/core": "^4.4.2", "@recast-navigation/core": "0.43.1", "@recast-navigation/generators": "0.43.1", "@recast-navigation/three": "0.43.1", "@types/react": "^19.2.0", "@types/react-dom": "^19.2.0", "@types/three": "^0.179.0", "@vitejs/plugin-react": "^5.0.2", "sharp": "^0.34.5", "stormlib-js": "^0.1.1", "typescript": "~5.8.3", "vite": "^7.3.0", "vitest": "^3.2.4" } }