{ "name": "healer-man", "private": true, "version": "0.1.59", "type": "module", "scripts": { "dev": "vite --host 0.0.0.0", "bitesized:generate": "vite-node scripts/generate-bite-sized-layouts.ts && vite-node scripts/generate-bite-sized-navigation.ts", "dev:shelved": "vite --host 0.0.0.0 --mode shelved", "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", "web:prepare": "node scripts/content/prepare-web-bootstrap.mjs", "android:prepare": "node scripts/content/prepare-android-bootstrap.mjs", "content:test": "node --test scripts/content/*.test.mjs", "effects:generate": "node scripts/combat-effects/generate-manifest.mjs --package-audio && node scripts/combat-effects/package-wow-original.mjs && node scripts/combat-effects/package-ascension-meteor.mjs", "effects:rom": "node scripts/combat-effects/generate-manifest.mjs --runewaker-only --package-audio", "effects:rom:particles": "node scripts/combat-effects/package-rom-particles.mjs", "effects:rom:audit": "node scripts/combat-effects/audit-rom-media.mjs --write", "effects:rom:plan": "node scripts/combat-effects/plan-rom-media.mjs --write", "effects:rom:batch": "npm run effects:rom && npm run effects:rom:particles && npm run effects:rom && npm run effects:rom:audit && npm run effects:rom:plan", "effects:audit": "node scripts/combat-effects/package-wow-original.mjs --audit", "effects:wow": "node scripts/combat-effects/package-wow-original.mjs", "effects:meteor": "node scripts/combat-effects/package-ascension-meteor.mjs", "effects:priest": "npm run effects:wow", "effects:test": "node --test scripts/combat-effects/*.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", "coa:reference:inventory": "node scripts/coa-reference/cli.mjs inventory", "coa:reference:fetch": "node scripts/coa-reference/cli.mjs fetch", "coa:reference:fetch:spells": "node scripts/coa-reference/cli.mjs fetch-spells", "coa:reference:build": "node scripts/coa-reference/cli.mjs build", "coa:reference:audit": "node scripts/coa-reference/cli.mjs audit", "coa:reference:lookup": "node scripts/coa-reference/cli.mjs lookup", "coa:reference:test": "node --test scripts/coa-reference/*.test.mjs", "coa:reference:promote": "node scripts/coa-reference/cli.mjs promote", "coa:catalogs:refresh": "vite-node scripts/generate-combat-runtime-catalogs.ts --coa-only && node scripts/export-coa-triggered-spells.mjs && vite-node scripts/generate-combat-runtime-catalogs.ts --coa-only && vite-node scripts/generate-catalog-shards.ts --coa-only && node scripts/export-spell-icons.mjs --missing-only", "coa:party:prepare": "vite-node --mode balance-lab scripts/coa-first-party/prepare.ts", "coa:party:test": "vitest run src/game/benchmark/coaFirstParty.test.ts", "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", "catalogs:shard": "vite-node scripts/generate-catalog-shards.ts", "talents:generate": "vite-node scripts/generate-party-runtime-talents.ts", "ascension:sync": "npm run coa:sync && npm run wow335:abilities && npm run ascension:talents && npm run coa:icons && npm run catalogs:shard", "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:maps:import": "node scripts/dungeon-pipeline/import-wow-maps.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": "vite-node scripts/dungeon-pipeline/audit-wow-dungeon-content.mjs", "dungeon:boss-effects:audit": "node scripts/dungeon-pipeline/audit-boss-spell-effects.mjs", "dungeon:boss-pressure:audit": "vite-node scripts/dungeon-pipeline/audit-boss-party-pressure.ts", "dungeon:routes:generate": "node scripts/dungeon-pipeline/generate-dungeon-route-candidates.mjs", "dungeon:wow:functionality:audit": "vite-node scripts/dungeon-pipeline/audit-wow-dungeon-functionality.ts", "dungeon:wow:stairs:audit": "node --max-old-space-size=8192 scripts/dungeon-pipeline/audit-wow-stairs.ts", "dungeon:wow:stairs:refresh": "node --max-old-space-size=8192 scripts/dungeon-pipeline/audit-wow-stairs.ts --write", "dungeon:wow:test": "vitest run src/game/wowDungeonContent.test.ts", "dungeon:wow:export-tool:test": "node --test scripts/dungeon-pipeline/wow-export-tool.test.mjs", "dungeon:ascension:recovery:validate": "node scripts/dungeon-pipeline/validate-ascension-custom-dungeon-recovery.mjs --skip-dbc", "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", "arena:assets:build": "node scripts/arena-pipeline/build-wmo-arenas.mjs && node scripts/arena-pipeline/build-custom-arenas.mjs && node scripts/arena-pipeline/prepare-warnorken.mjs", "arena:assets:validate": "node scripts/arena-pipeline/validate-arenas.mjs", "arena:abilities:build": "node scripts/arena-pipeline/build-combat-runtime.mjs && node scripts/arena-pipeline/build-runtime-geometry.mjs", "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:loot:refresh": "node scripts/runewaker-pipeline/export-loot-catalog.mjs", "runewaker:audit:formula-loot": "node --test scripts/runewaker-pipeline/runewaker-formula-export.test.mjs scripts/runewaker-pipeline/runewaker-loot-import.test.mjs && vitest run src/game/runewakerCombatFormula.test.ts src/game/runewakerLootCatalog.test.ts", "runewaker:bosses:refresh": "npm run runewaker:spells:refresh && node scripts/runewaker-pipeline/import-boss-mechanics.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 && node --test scripts/runewaker-pipeline/encounter-implementation-report.test.mjs", "runewaker:audit:encounters": "node scripts/runewaker-pipeline/audit-encounter-implementation.mjs && node --test scripts/runewaker-pipeline/encounter-implementation-report.test.mjs", "runewaker:audit:environment-assembly": "node scripts/runewaker-pipeline/audit-environment-assembly.mjs && node --test scripts/runewaker-pipeline/environment-assembly.test.mjs", "runewaker:audit:navigation": "node scripts/runewaker-pipeline/analyze-navigation-gaps.mjs && vitest run src/game/runewakerObjectiveRouteAudit.test.ts", "runewaker:audit:material-alpha": "node scripts/runewaker-pipeline/audit-material-alpha.mjs", "runewaker:audit:environment-quality": "node scripts/runewaker-pipeline/audit-environment-quality.mjs", "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", "assets:performance:audit": "node scripts/asset-pipeline/audit-environment-performance.mjs", "balance:benchmark": "vite-node scripts/combat-benchmark/run.ts", "balance:lab": "python scripts/balance_lab.py", "balance:lab:brackets": "python scripts/balance_lab_brackets.py --ready-only", "balance:lab:npc-audit": "python scripts/balance_lab_brackets.py --ready-only --seat-sweep", "balance:gui": "vite --mode balance-lab-gui --host 127.0.0.1 --open", "balance:lab:regression": "python scripts/balance_lab_brackets.py --ready-only --check", "balance:lab:playtest": "node scripts/playtest-balance-lab.cjs", "readiness:playtest": "node scripts/playtest-companion-readiness.cjs", "test:ready-five": "vitest run src/game/companionSpecReadiness.test.ts src/game/readyFiveCertification.test.ts && python -m unittest scripts.test_balance_lab scripts.test_balance_lab_brackets", "test:rom-five": "vitest run src/game/romFiveValidation.test.ts src/game/romPriestKnightPairValidation.test.ts src/game/romScoutRoguePairValidation.test.ts src/game/romMageWarlockPairValidation.test.ts src/game/romCombatRuntime.test.ts src/game/romCombatMechanics.test.ts src/game/romAbilityCatalogSemantics.test.ts src/game/romPlayerCatalog.test.ts src/game/specializationCatalog.test.ts src/game/romHeirloomReference.test.ts src/game/romCreatureFamilies.test.ts", "balance:smoke": "vite-node scripts/combat-benchmark/run.ts --class mage --role damage --scenario damage-single-burst --seeds 1 --duration-scale 0.2", "prebuild": "npm run loot:generate && npm run web:prepare && npm run assets:ktx2:audit && npm run assets:performance:audit", "build": "node --max-old-space-size=8192 node_modules/typescript/bin/tsc -b && node --max-old-space-size=8192 node_modules/vite/bin/vite.js build", "postbuild": "node scripts/content/precompress-static.mjs dist && node scripts/content/verify-release-bundle.mjs dist", "prebuild:shelved": "npm run loot:generate && npm run arena:abilities:build && npm run web:prepare && npm run arena:assets:validate && npm run assets:ktx2:audit && npm run assets:performance:audit", "build:shelved": "node --max-old-space-size=8192 node_modules/typescript/bin/tsc -b && node --max-old-space-size=8192 node_modules/vite/bin/vite.js build --mode shelved", "build:android:web": "npm run prebuild && npm run android:prepare && node --max-old-space-size=8192 node_modules/typescript/bin/tsc -b && node --max-old-space-size=8192 node_modules/vite/bin/vite.js build --mode android && node scripts/content/verify-release-bundle.mjs dist-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:check": "python scripts/release_manager.py --check-release", "release:gui": "python scripts/release_manager.py", "preview": "vite preview --host 0.0.0.0", "pretest": "npm run loot:generate", "test": "vitest run", "pretest:shelved": "npm run loot:generate", "test:shelved": "vitest run --mode shelved", "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", "@dimforge/rapier3d-compat": "0.19.2", "@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" } }