mirror of
https://github.com/Heretek-Games/drop-emulation.git
synced 2026-11-07 10:05:59 -10:00
35833a7af3c64c9e15faaf1423d0cc5932838e5c
Add eslint.config.mjs (eslint:recommended + typescript-eslint recommended, type-unaware) with a `lint` script and a CI step. Rules that need a baseline cleanup pass (no-explicit-any, ban-ts-comment, no-useless-assignment, preserve-caught-error) are warnings; core rules and unused vars are errors. Refs Heretek-Games/drop#69 (audit finding F-23).
Drop Emulation
Emulator and ROM linking plugin for Drop (#10, #189).
How it works
Per-game bindings are stored under the client storage key
binding:<gameId> as { emulatorId, coreId, romPath, command? }. Emulator
definitions live under the emulators key (falling back to the built-in list
in src/emulator.ts).
During the pre-launch:prepare stage the plugin:
- Looks up the game's binding (no-op when unset).
- Validates the ROM exists through the scoped
game:fsAPI. - Probes configured emulators through the allowlisted
system:commandrunner and drops anything missing or failing (--versionprobe). - Rewrites the launch command, expanding
{core}and{rom_path}in the template, and publishesmetadata.launchCommandplusmetadata.emulationon the launch context.
A game-detail:panels slot (EmulatorPanel) shows the configured binding.
Build
npm ci
npm run build
npm test
npm run typecheck