BillyOutlast 35833a7af3 ci: add a shared ESLint flat-config lint gate
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).
2026-09-14 19:59:21 -04:00

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:

  1. Looks up the game's binding (no-op when unset).
  2. Validates the ROM exists through the scoped game:fs API.
  3. Probes configured emulators through the allowlisted system:command runner and drops anything missing or failing (--version probe).
  4. Rewrites the launch command, expanding {core} and {rom_path} in the template, and publishes metadata.launchCommand plus metadata.emulation on the launch context.

A game-detail:panels slot (EmulatorPanel) shows the configured binding.

Build

npm ci
npm run build
npm test
npm run typecheck
S
Description
Emulator and ROM linking plugin for Drop
Readme
168 KiB
0 Stars 1 Watchers 0 Forks
2026-11-06 17:29:17 -10:00
Languages
TypeScript 76.9%
JavaScript 23.1%