koin.js 1.2.0 → 1.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +2 -2
- package/dist/index.mjs.map +1 -1
- package/dist/systems.js +2 -2
- package/dist/systems.js.map +1 -1
- package/dist/systems.mjs +2 -2
- package/dist/systems.mjs.map +1 -1
- package/package.json +1 -1
package/dist/systems.js
CHANGED
|
@@ -261,7 +261,7 @@ var SYSTEMS = [
|
|
|
261
261
|
extensions: [".ngc"],
|
|
262
262
|
core: "mednafen_ngp",
|
|
263
263
|
dbNames: ["SNK Neo Geo Pocket Color"],
|
|
264
|
-
iconName: "
|
|
264
|
+
iconName: "NEOGEO_POCKET_COLOR",
|
|
265
265
|
color: "group-hover:text-[#AD1457]",
|
|
266
266
|
accentHex: "#AD1457",
|
|
267
267
|
// NGPC Pink
|
|
@@ -356,7 +356,7 @@ var SYSTEMS = [
|
|
|
356
356
|
extensions: [".wsc"],
|
|
357
357
|
core: "mednafen_wswan",
|
|
358
358
|
dbNames: ["Bandai WonderSwan Color"],
|
|
359
|
-
iconName: "
|
|
359
|
+
iconName: "WONDERSWAN_COLOR",
|
|
360
360
|
color: "group-hover:text-[#009688]",
|
|
361
361
|
accentHex: "#009688",
|
|
362
362
|
// WSC Teal
|
package/dist/systems.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/data/systems-data.ts","../src/lib/systems.ts"],"names":[],"mappings":"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","file":"systems.js","sourcesContent":["export interface SystemConfig {\n // Canonical key - the internal identifier (e.g., 'NES', 'GB', 'GBA')\n key: string;\n\n // Display info\n label: string; // User-friendly name (e.g., 'Nintendo (NES)')\n fullName: string; // Full name (e.g., 'Nintendo Entertainment System')\n slug: string; // URL-friendly (e.g., 'nes')\n\n // File detection\n extensions: string[]; // File extensions (e.g., ['.nes'])\n\n // Emulation\n core: string; // RetroArch core (e.g., 'fceumm')\n coreSource?: 'nostalgist' | 'emulatorjs' | 'linuxserver'; // Core source: nostalgist (default), emulatorjs, or linuxserver\n\n // Database matching (LaunchBox)\n dbNames: string[]; // Possible DB names to search for\n\n // UI\n iconName: string; // ConsoleIcon component name\n color: string; // Tailwind hover color class\n accentHex: string; // Hex color for accents\n\n // Aliases - other names that should map to this system\n aliases: string[];\n\n // Metadata\n biosNeeded?: boolean;\n biosFileNames?: string[]; // Expected filenames for BIOS matching\n biosLocation?: 'system' | 'rom_folder'; // Where to mount the BIOS ('system' dir or alongside 'rom_folder')\n maxFileSizeMB?: number; // Max file size in MB (default: 100, CD-based: 700)\n}\n\n/**\n * The master system configuration\n * Order matters for display in dropdowns\n */\nexport const SYSTEMS: SystemConfig[] = [\n // ============ Nintendo ============\n {\n key: 'NES',\n label: 'Nintendo (NES)',\n fullName: 'Nintendo Entertainment System',\n slug: 'nes',\n extensions: ['.nes'],\n core: 'fceumm',\n dbNames: ['NES', 'Nintendo Entertainment System'],\n iconName: 'NES',\n color: 'group-hover:text-[#E60012]',\n accentHex: '#E60012', // Nintendo Red\n aliases: ['NINTENDO ENTERTAINMENT SYSTEM', 'FAMICOM'],\n },\n {\n key: 'SNES',\n label: 'Super Nintendo (SNES)',\n fullName: 'Super Nintendo Entertainment System',\n slug: 'snes',\n extensions: ['.snes', '.smc', '.sfc'],\n core: 'snes9x',\n dbNames: ['SNES', 'Super Nintendo Entertainment System'],\n iconName: 'SNES',\n color: 'group-hover:text-[#514689]',\n accentHex: '#514689', // SNES Purple\n aliases: ['SUPER NINTENDO', 'SUPER NINTENDO ENTERTAINMENT SYSTEM', 'SUPER FAMICOM'],\n },\n {\n key: 'N64',\n label: 'Nintendo 64',\n fullName: 'Nintendo 64',\n slug: 'n64',\n extensions: ['.n64', '.z64', '.v64'],\n core: 'mupen64plus_next',\n coreSource: 'linuxserver',\n dbNames: ['N64', 'Nintendo 64'],\n iconName: 'N64',\n color: 'group-hover:text-[#FFB300]',\n accentHex: '#FFB300', // N64 Gold\n aliases: ['NINTENDO 64'],\n },\n {\n key: 'GB',\n label: 'Game Boy',\n fullName: 'Game Boy',\n slug: 'gb',\n extensions: ['.gb'],\n core: 'gambatte',\n dbNames: ['Nintendo Game Boy'],\n iconName: 'GB',\n color: 'group-hover:text-[#8BC34A]',\n accentHex: '#8BC34A', // GB Green\n aliases: ['GAME BOY', 'GAMEBOY', 'NINTENDO GAME BOY'],\n },\n {\n key: 'GBC',\n label: 'Game Boy Color',\n fullName: 'Game Boy Color',\n slug: 'gbc',\n extensions: ['.gbc'],\n core: 'gambatte',\n dbNames: ['Nintendo Game Boy Color'],\n iconName: 'GBC',\n color: 'group-hover:text-[#9C27B0]',\n accentHex: '#9C27B0', // GBC Purple\n aliases: ['GAME BOY COLOR', 'GAMEBOY COLOR', 'NINTENDO GAME BOY COLOR'],\n },\n {\n key: 'GBA',\n label: 'Game Boy Advance',\n fullName: 'Game Boy Advance',\n slug: 'gba',\n extensions: ['.gba'],\n core: 'mgba',\n dbNames: ['Nintendo Game Boy Advance'],\n iconName: 'GBA',\n color: 'group-hover:text-[#3F51B5]',\n accentHex: '#3F51B5', // GBA Indigo\n aliases: ['GAME BOY ADVANCE', 'GAMEBOY ADVANCE', 'NINTENDO GAME BOY ADVANCE'],\n },\n {\n key: 'NDS',\n label: 'Nintendo DS',\n fullName: 'Nintendo DS',\n slug: 'nds',\n extensions: ['.nds'],\n core: 'melonds',\n coreSource: 'linuxserver',\n dbNames: ['Nintendo DS'],\n iconName: 'NDS',\n color: 'group-hover:text-[#00BCD4]',\n accentHex: '#00BCD4', // DS Cyan\n aliases: ['NDS', 'NINTENDO DS'],\n maxFileSizeMB: 512, // DS games are 128MB-512MB\n },\n {\n key: 'VIRTUAL_BOY',\n label: 'Virtual Boy',\n fullName: 'Virtual Boy',\n slug: 'virtualboy',\n extensions: ['.vb'],\n core: 'mednafen_vb',\n dbNames: ['Nintendo Virtual Boy'],\n iconName: 'VIRTUAL_BOY',\n color: 'group-hover:text-[#D50000]',\n accentHex: '#D50000', // VB Red\n aliases: ['VIRTUAL BOY', 'NINTENDO VIRTUAL BOY'],\n },\n\n // Note: Dreamcast (flycast) removed - core not available in any web source\n {\n key: 'SATURN',\n label: 'Sega Saturn',\n fullName: 'Sega Saturn',\n slug: 'saturn',\n extensions: ['.cue', '.chd', '.iso', '.7z'],\n core: 'yabause',\n coreSource: 'linuxserver',\n dbNames: ['Sega Saturn'],\n iconName: 'SATURN',\n color: 'group-hover:text-[#FFA000]',\n accentHex: '#FFA000', // Saturn Orange/Gold\n aliases: ['SATURN', 'SEGA SATURN'],\n biosNeeded: true,\n biosFileNames: ['sega_101.bin', 'mpr-17933.bin'],\n maxFileSizeMB: 700, // CD-ROM games can be up to 700MB\n },\n {\n key: 'GENESIS',\n label: 'Sega Genesis',\n fullName: 'Sega Genesis / Mega Drive',\n slug: 'genesis',\n extensions: ['.gen', '.md', '.smd'],\n core: 'genesis_plus_gx',\n dbNames: ['GENESIS', 'Sega Genesis', 'Sega Mega Drive'],\n iconName: 'GENESIS',\n color: 'group-hover:text-[#0060A9]',\n accentHex: '#0060A9', // Genesis Blue\n aliases: ['SEGA GENESIS', 'MEGA DRIVE', 'SEGA MEGA DRIVE', 'MEGADRIVE'],\n biosNeeded: true, // For Sega CD\n biosFileNames: ['bios_CD_U.bin', 'bios_CD_E.bin', 'bios_CD_J.bin'],\n },\n {\n key: 'MASTER_SYSTEM',\n label: 'Sega Master System',\n fullName: 'Sega Master System',\n slug: 'mastersystem',\n extensions: ['.sms'],\n core: 'gearsystem',\n dbNames: ['Sega Master System'],\n iconName: 'MASTER_SYSTEM',\n color: 'group-hover:text-[#00897B]',\n accentHex: '#00897B', // SMS Teal\n aliases: ['MASTER SYSTEM', 'SEGA MASTER SYSTEM', 'SMS'],\n },\n {\n key: 'GAME_GEAR',\n label: 'Sega Game Gear',\n fullName: 'Sega Game Gear',\n slug: 'gamegear',\n extensions: ['.gg'],\n core: 'gearsystem',\n dbNames: ['Sega Game Gear'],\n iconName: 'GAME_GEAR',\n color: 'group-hover:text-[#1976D2]',\n accentHex: '#1976D2', // GG Blue\n aliases: ['GAME GEAR', 'SEGA GAME GEAR', 'GG'],\n },\n\n // ============ Sony ============\n {\n key: 'PS1',\n label: 'PlayStation',\n fullName: 'Sony PlayStation',\n slug: 'ps1',\n extensions: ['.iso', '.cue', '.pbp'],\n core: 'pcsx_rearmed',\n dbNames: ['PLAYSTATION', 'Sony Playstation', 'Sony PlayStation'],\n iconName: 'PS1',\n color: 'group-hover:text-[#283593]',\n accentHex: '#283593', // PS1 Dark Blue\n aliases: ['PLAYSTATION', 'PSX', 'PS', 'SONY PLAYSTATION'],\n biosNeeded: true,\n biosFileNames: ['scph5500.bin', 'scph5501.bin', 'scph5502.bin', 'scph1001.bin'],\n maxFileSizeMB: 700, // CD-ROM games can be up to 700MB\n },\n\n // ============ NEC ============\n {\n key: 'PC_ENGINE',\n label: 'PC Engine / TurboGrafx-16',\n fullName: 'PC Engine / TurboGrafx-16',\n slug: 'pcengine',\n extensions: ['.pce'],\n core: 'mednafen_pce_fast',\n dbNames: ['PC Engine', 'TurboGrafx-16', 'NEC PC Engine', 'NEC TurboGrafx-16'],\n iconName: 'PC_ENGINE',\n color: 'group-hover:text-[#F57C00]',\n accentHex: '#F57C00', // PCE Orange\n aliases: ['PC ENGINE', 'TURBOGRAFX-16', 'TURBOGRAFX', 'PCE', 'TG16'],\n biosNeeded: true, // For CD games\n biosFileNames: ['syscard3.pce'],\n },\n\n // ============ SNK ============\n {\n key: 'NEOGEO',\n label: 'Neo Geo',\n fullName: 'SNK Neo Geo',\n slug: 'neogeo',\n extensions: ['.neo'],\n core: 'fbalpha2012_neogeo',\n dbNames: ['SNK Neo Geo MVS', 'SNK Neo Geo AES', 'SNK Neo Geo CD', 'Neo Geo'],\n iconName: 'NEOGEO',\n color: 'group-hover:text-[#C62828]',\n accentHex: '#C62828', // Neo Geo Red\n aliases: ['NEO GEO', 'NEO-GEO', 'SNK NEO GEO'],\n biosNeeded: true,\n biosFileNames: ['neogeo.zip'],\n biosLocation: 'rom_folder',\n },\n {\n key: 'NEOGEO_POCKET',\n label: 'Neo Geo Pocket',\n fullName: 'SNK Neo Geo Pocket',\n slug: 'neogeopocket',\n extensions: ['.ngp'],\n core: 'mednafen_ngp',\n dbNames: ['SNK Neo Geo Pocket'],\n iconName: 'NEOGEO_POCKET',\n color: 'group-hover:text-[#0277BD]',\n accentHex: '#0277BD', // NGP Blue\n aliases: ['NEO GEO POCKET', 'NGP'],\n },\n {\n key: 'NEOGEO_POCKET_COLOR',\n label: 'Neo Geo Pocket Color',\n fullName: 'SNK Neo Geo Pocket Color',\n slug: 'neogeopocketcolor',\n extensions: ['.ngc'],\n core: 'mednafen_ngp',\n dbNames: ['SNK Neo Geo Pocket Color'],\n iconName: 'NEOGEO_POCKET',\n color: 'group-hover:text-[#AD1457]',\n accentHex: '#AD1457', // NGPC Pink\n aliases: ['NEO GEO POCKET COLOR', 'NGPC'],\n },\n\n // ============ Atari ============\n {\n key: 'LYNX',\n label: 'Atari Lynx',\n fullName: 'Atari Lynx',\n slug: 'lynx',\n extensions: ['.lnx', '.lyx'],\n core: 'handy',\n dbNames: ['Atari Lynx'],\n iconName: 'LYNX',\n color: 'group-hover:text-[#FBC02D]',\n accentHex: '#FBC02D', // Lynx Yellow\n aliases: ['ATARI LYNX'],\n biosNeeded: true,\n biosFileNames: ['lynxboot.img'],\n },\n {\n key: 'ATARI_5200',\n label: 'Atari 5200',\n fullName: 'Atari 5200',\n slug: 'atari5200',\n extensions: ['.a52'],\n core: 'atari800', // Note: a5200 core not available, using atari800 which supports 5200\n coreSource: 'linuxserver',\n dbNames: ['Atari 5200'],\n iconName: 'ATARI_5200', // Assuming we can reuse a generic icon or this exists. If not, will default or fail gracefully.\n color: 'group-hover:text-[#E65100]',\n accentHex: '#E65100', // 5200 Orange\n aliases: ['ATARI 5200', 'ATARI5200'],\n biosNeeded: true,\n biosFileNames: ['5200.rom'],\n },\n {\n key: 'ATARI_2600',\n label: 'Atari 2600',\n fullName: 'Atari 2600',\n slug: 'atari2600',\n extensions: ['.a26'],\n core: 'stella2014',\n coreSource: 'linuxserver',\n dbNames: ['Atari 2600'],\n iconName: 'ATARI_2600',\n color: 'group-hover:text-[#D84315]',\n accentHex: '#D84315', // 2600 Red-Orange\n aliases: ['ATARI 2600', 'ATARI2600'],\n },\n {\n key: 'ATARI_7800',\n label: 'Atari 7800',\n fullName: 'Atari 7800',\n slug: 'atari7800',\n extensions: ['.a78'],\n core: 'prosystem',\n coreSource: 'linuxserver',\n dbNames: ['Atari 7800'],\n iconName: 'ATARI_7800',\n color: 'group-hover:text-[#5D4037]',\n accentHex: '#5D4037', // 7800 Brown\n aliases: ['ATARI 7800', 'ATARI7800'],\n },\n\n // ============ Other ============\n {\n key: 'WONDERSWAN',\n label: 'WonderSwan',\n fullName: 'Bandai WonderSwan',\n slug: 'wonderswan',\n extensions: ['.ws'],\n core: 'mednafen_wswan',\n dbNames: ['Bandai WonderSwan'],\n iconName: 'WONDERSWAN',\n color: 'group-hover:text-[#7CB342]',\n accentHex: '#7CB342', // WS Green\n aliases: ['WONDERSWAN', 'WONDER SWAN', 'BANDAI WONDERSWAN'],\n },\n {\n key: 'WONDERSWAN_COLOR',\n label: 'WonderSwan Color',\n fullName: 'Bandai WonderSwan Color',\n slug: 'wonderswancolor',\n extensions: ['.wsc'],\n core: 'mednafen_wswan',\n dbNames: ['Bandai WonderSwan Color'],\n iconName: 'WONDERSWAN',\n color: 'group-hover:text-[#009688]',\n accentHex: '#009688', // WSC Teal\n aliases: ['WONDERSWAN COLOR', 'WONDER SWAN COLOR', 'BANDAI WONDERSWAN COLOR', 'WSC'],\n },\n {\n key: 'ARCADE',\n label: 'Arcade (FBNeo)',\n fullName: 'Arcade',\n slug: 'arcade',\n extensions: ['.zip'],\n core: 'fbneo',\n dbNames: ['Arcade', 'MAME', 'FBNeo', 'FinalBurn Neo'],\n iconName: 'ARCADE',\n color: 'group-hover:text-[#E91E63]',\n accentHex: '#E91E63', // Arcade Neon Pink\n aliases: ['MAME', 'CPS1', 'CPS2', 'CPS3', 'FBNEO', 'FINALBURN', 'SYSTEM16', 'SEGA SYSTEM 16'],\n biosNeeded: true,\n },\n {\n key: 'C64',\n label: 'Commodore 64',\n fullName: 'Commodore 64',\n slug: 'c64',\n extensions: ['.d64', '.t64', '.tap', '.prg', '.crt'],\n core: 'vice_x64',\n dbNames: ['Commodore 64'],\n iconName: 'C64',\n color: 'group-hover:text-[#546E7A]',\n accentHex: '#546E7A', // C64 Blue-Grey\n aliases: ['C64', 'COMMODORE 64'],\n },\n];\n","/**\n * Unified System Configuration\n * \n * SINGLE SOURCE OF TRUTH for all system-related data:\n * - Canonical system keys (used internally)\n * - File extensions → system detection\n * - System → RetroArch emulator core\n * - System → Database names (for LaunchBox matching)\n * - System → Display metadata (UI labels, colors, icons)\n * \n * All other files should import from here instead of maintaining their own mappings.\n */\n\nimport { SYSTEMS, SystemConfig } from '../data/systems-data';\n\nexport type { SystemConfig };\nexport { SYSTEMS };\n\n// ============ Lookup Maps (built from SYSTEMS) ============\n\n// Key → System config\nconst systemByKey = new Map<string, SystemConfig>();\n\n// Alias (uppercase) → System config\nconst systemByAlias = new Map<string, SystemConfig>();\n\n// Extension (lowercase) → System config\nconst systemByExtension = new Map<string, SystemConfig>();\n\n// DB name (lowercase) → System config\nconst systemByDbName = new Map<string, SystemConfig>();\n\n// Build all lookup maps\nfor (const sys of SYSTEMS) {\n // By key\n systemByKey.set(sys.key, sys);\n\n // By aliases (include key itself)\n systemByAlias.set(sys.key.toUpperCase(), sys);\n for (const alias of sys.aliases) {\n systemByAlias.set(alias.toUpperCase(), sys);\n }\n\n // By extension\n for (const ext of sys.extensions) {\n systemByExtension.set(ext.toLowerCase(), sys);\n }\n\n // By DB name\n for (const dbName of sys.dbNames) {\n systemByDbName.set(dbName.toLowerCase(), sys);\n }\n}\n\n// ============ Public API ============\n\n/**\n * Get system by canonical key (e.g., 'NES', 'GBA')\n */\nexport function getSystemByKey(key: string): SystemConfig | undefined {\n return systemByKey.get(key);\n}\n\n/**\n * Get system by any name/alias (case-insensitive)\n * Tries: exact key match, then alias match\n */\nexport function getSystem(name: string): SystemConfig | undefined {\n const upper = name.toUpperCase().trim();\n return systemByAlias.get(upper);\n}\n\n/**\n * Get system from file extension (e.g., '.nes', '.gba')\n */\nexport function getSystemFromExtension(filename: string): SystemConfig | undefined {\n const match = filename.match(/\\.[^.]+$/);\n if (!match) return undefined;\n return systemByExtension.get(match[0].toLowerCase());\n}\n\n/**\n * Get system by database name (for LaunchBox matching)\n */\nexport function getSystemByDbName(dbName: string): SystemConfig | undefined {\n return systemByDbName.get(dbName.toLowerCase());\n}\n\n/**\n * Get RetroArch core for a system name (case-insensitive)\n * Falls back to 'fceumm' (NES) if not found\n */\nexport function getCore(systemName: string): string {\n const sys = getSystem(systemName);\n return sys?.core ?? 'fceumm';\n}\n\n/**\n * Get the core source for a system (nostalgist or emulatorjs)\n * Returns undefined if using default (nostalgist)\n */\nexport function getCoreSource(systemName: string): 'nostalgist' | 'emulatorjs' | 'linuxserver' | undefined {\n const sys = getSystem(systemName);\n return sys?.coreSource;\n}\n\n/**\n * Get DB names for matching (used in game search)\n */\nexport function getDBSystemNames(systemKey: string): string[] {\n const sys = getSystem(systemKey);\n return sys?.dbNames ?? [systemKey];\n}\n\n/**\n * Check if a system is supported\n */\nexport function isSystemSupported(name: string): boolean {\n return getSystem(name) !== undefined;\n}\n\n/**\n * Get all supported extensions\n */\nexport function getSupportedExtensions(): string[] {\n const exts = new Set<string>();\n for (const sys of SYSTEMS) {\n for (const ext of sys.extensions) {\n exts.add(ext);\n }\n }\n // Add .zip as special case (handled separately)\n exts.add('.zip');\n return Array.from(exts);\n}\n\n/**\n * Get all systems for UI dropdown\n */\nexport function getSystemsList(): Array<{ value: string; label: string; iconName: string; color: string }> {\n return SYSTEMS.map(sys => ({\n value: sys.key,\n label: sys.label,\n iconName: sys.iconName,\n color: sys.color,\n }));\n}\n\n/**\n * Detect system from filename\n * Returns null for ZIP files (user must select)\n */\nexport function detectSystem(filename: string): SystemConfig | undefined {\n const ext = filename.match(/\\.[^.]+$/)?.[0]?.toLowerCase();\n if (ext === '.zip') return undefined;\n return getSystemFromExtension(filename);\n}\n\n/**\n * Check if two system names refer to the same platform\n */\nexport function systemsMatch(name1: string, name2: string): boolean {\n const sys1 = getSystem(name1);\n const sys2 = getSystem(name2);\n if (!sys1 || !sys2) return false;\n return sys1.key === sys2.key;\n}\n\n/**\n * Normalize a system name to its canonical key\n */\nexport function normalizeSystemKey(name: string): string {\n const sys = getSystem(name);\n return sys?.key ?? name;\n}\n\n/**\n * Get max file size in MB for a system (default: 100MB, CD-based: 700MB)\n */\nexport function getMaxFileSizeMB(systemName: string): number {\n const sys = getSystem(systemName);\n return sys?.maxFileSizeMB ?? 100;\n}\n\n// Legacy export names for backward compatibility\nexport const SUPPORTED_EXTENSIONS = getSupportedExtensions();\n\n// Performance Optimization Tiers\n// ===============================\n// Systems are grouped by CPU complexity to apply optimal RetroArch settings.\n// See useEmulatorCore.ts getOptimizedConfig() for the actual settings applied.\n\n/**\n * TIER 1: \"Zero Lag\" - Lightweight Systems\n * ----------------------------------------\n * These 8-bit and 16-bit systems have low CPU requirements in WASM,\n * allowing us to enable Run-Ahead (frame prediction) for near-zero input latency.\n * \n * Run-Ahead works by running the emulator ahead by 1 frame and using that\n * result for display, effectively cutting 1 frame (~16ms) of input lag.\n */\nexport const PERFORMANCE_TIER_1_SYSTEMS = new Set([\n 'NES', 'SNES', 'GENESIS', 'GB', 'GBC',\n 'MASTER_SYSTEM', 'GAME_GEAR', 'PC_ENGINE',\n 'ATARI_2600', 'ATARI_7800', 'LYNX',\n 'NEOGEO_POCKET', 'NEOGEO_POCKET_COLOR',\n 'WONDERSWAN', 'WONDERSWAN_COLOR'\n]);\n\n/**\n * TIER 2: \"Max Smoothness\" - Heavy Systems\n * ----------------------------------------\n * These 32-bit+ systems push WASM hard. Run-Ahead would cause stuttering.\n * Instead, we optimize for smooth, consistent frame delivery:\n * - Threaded video rendering to prevent UI freezes\n * - Larger audio buffers to prevent crackling\n * - Disabled manual rewind capture (saves RAM and CPU cycles)\n */\nexport const PERFORMANCE_TIER_2_SYSTEMS = new Set([\n 'PS1', 'N64', 'GBA', 'SATURN', 'DREAMCAST',\n 'NDS', 'PSP', 'ARCADE', 'DOS', 'NEOGEO'\n]);\n\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/data/systems-data.ts","../src/lib/systems.ts"],"names":[],"mappings":"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","file":"systems.js","sourcesContent":["export interface SystemConfig {\n // Canonical key - the internal identifier (e.g., 'NES', 'GB', 'GBA')\n key: string;\n\n // Display info\n label: string; // User-friendly name (e.g., 'Nintendo (NES)')\n fullName: string; // Full name (e.g., 'Nintendo Entertainment System')\n slug: string; // URL-friendly (e.g., 'nes')\n\n // File detection\n extensions: string[]; // File extensions (e.g., ['.nes'])\n\n // Emulation\n core: string; // RetroArch core (e.g., 'fceumm')\n coreSource?: 'nostalgist' | 'emulatorjs' | 'linuxserver'; // Core source: nostalgist (default), emulatorjs, or linuxserver\n\n // Database matching (LaunchBox)\n dbNames: string[]; // Possible DB names to search for\n\n // UI\n iconName: string; // ConsoleIcon component name\n color: string; // Tailwind hover color class\n accentHex: string; // Hex color for accents\n\n // Aliases - other names that should map to this system\n aliases: string[];\n\n // Metadata\n biosNeeded?: boolean;\n biosFileNames?: string[]; // Expected filenames for BIOS matching\n biosLocation?: 'system' | 'rom_folder'; // Where to mount the BIOS ('system' dir or alongside 'rom_folder')\n maxFileSizeMB?: number; // Max file size in MB (default: 100, CD-based: 700)\n}\n\n/**\n * The master system configuration\n * Order matters for display in dropdowns\n */\nexport const SYSTEMS: SystemConfig[] = [\n // ============ Nintendo ============\n {\n key: 'NES',\n label: 'Nintendo (NES)',\n fullName: 'Nintendo Entertainment System',\n slug: 'nes',\n extensions: ['.nes'],\n core: 'fceumm',\n dbNames: ['NES', 'Nintendo Entertainment System'],\n iconName: 'NES',\n color: 'group-hover:text-[#E60012]',\n accentHex: '#E60012', // Nintendo Red\n aliases: ['NINTENDO ENTERTAINMENT SYSTEM', 'FAMICOM'],\n },\n {\n key: 'SNES',\n label: 'Super Nintendo (SNES)',\n fullName: 'Super Nintendo Entertainment System',\n slug: 'snes',\n extensions: ['.snes', '.smc', '.sfc'],\n core: 'snes9x',\n dbNames: ['SNES', 'Super Nintendo Entertainment System'],\n iconName: 'SNES',\n color: 'group-hover:text-[#514689]',\n accentHex: '#514689', // SNES Purple\n aliases: ['SUPER NINTENDO', 'SUPER NINTENDO ENTERTAINMENT SYSTEM', 'SUPER FAMICOM'],\n },\n {\n key: 'N64',\n label: 'Nintendo 64',\n fullName: 'Nintendo 64',\n slug: 'n64',\n extensions: ['.n64', '.z64', '.v64'],\n core: 'mupen64plus_next',\n coreSource: 'linuxserver',\n dbNames: ['N64', 'Nintendo 64'],\n iconName: 'N64',\n color: 'group-hover:text-[#FFB300]',\n accentHex: '#FFB300', // N64 Gold\n aliases: ['NINTENDO 64'],\n },\n {\n key: 'GB',\n label: 'Game Boy',\n fullName: 'Game Boy',\n slug: 'gb',\n extensions: ['.gb'],\n core: 'gambatte',\n dbNames: ['Nintendo Game Boy'],\n iconName: 'GB',\n color: 'group-hover:text-[#8BC34A]',\n accentHex: '#8BC34A', // GB Green\n aliases: ['GAME BOY', 'GAMEBOY', 'NINTENDO GAME BOY'],\n },\n {\n key: 'GBC',\n label: 'Game Boy Color',\n fullName: 'Game Boy Color',\n slug: 'gbc',\n extensions: ['.gbc'],\n core: 'gambatte',\n dbNames: ['Nintendo Game Boy Color'],\n iconName: 'GBC',\n color: 'group-hover:text-[#9C27B0]',\n accentHex: '#9C27B0', // GBC Purple\n aliases: ['GAME BOY COLOR', 'GAMEBOY COLOR', 'NINTENDO GAME BOY COLOR'],\n },\n {\n key: 'GBA',\n label: 'Game Boy Advance',\n fullName: 'Game Boy Advance',\n slug: 'gba',\n extensions: ['.gba'],\n core: 'mgba',\n dbNames: ['Nintendo Game Boy Advance'],\n iconName: 'GBA',\n color: 'group-hover:text-[#3F51B5]',\n accentHex: '#3F51B5', // GBA Indigo\n aliases: ['GAME BOY ADVANCE', 'GAMEBOY ADVANCE', 'NINTENDO GAME BOY ADVANCE'],\n },\n {\n key: 'NDS',\n label: 'Nintendo DS',\n fullName: 'Nintendo DS',\n slug: 'nds',\n extensions: ['.nds'],\n core: 'melonds',\n coreSource: 'linuxserver',\n dbNames: ['Nintendo DS'],\n iconName: 'NDS',\n color: 'group-hover:text-[#00BCD4]',\n accentHex: '#00BCD4', // DS Cyan\n aliases: ['NDS', 'NINTENDO DS'],\n maxFileSizeMB: 512, // DS games are 128MB-512MB\n },\n {\n key: 'VIRTUAL_BOY',\n label: 'Virtual Boy',\n fullName: 'Virtual Boy',\n slug: 'virtualboy',\n extensions: ['.vb'],\n core: 'mednafen_vb',\n dbNames: ['Nintendo Virtual Boy'],\n iconName: 'VIRTUAL_BOY',\n color: 'group-hover:text-[#D50000]',\n accentHex: '#D50000', // VB Red\n aliases: ['VIRTUAL BOY', 'NINTENDO VIRTUAL BOY'],\n },\n\n // Note: Dreamcast (flycast) removed - core not available in any web source\n {\n key: 'SATURN',\n label: 'Sega Saturn',\n fullName: 'Sega Saturn',\n slug: 'saturn',\n extensions: ['.cue', '.chd', '.iso', '.7z'],\n core: 'yabause',\n coreSource: 'linuxserver',\n dbNames: ['Sega Saturn'],\n iconName: 'SATURN',\n color: 'group-hover:text-[#FFA000]',\n accentHex: '#FFA000', // Saturn Orange/Gold\n aliases: ['SATURN', 'SEGA SATURN'],\n biosNeeded: true,\n biosFileNames: ['sega_101.bin', 'mpr-17933.bin'],\n maxFileSizeMB: 700, // CD-ROM games can be up to 700MB\n },\n {\n key: 'GENESIS',\n label: 'Sega Genesis',\n fullName: 'Sega Genesis / Mega Drive',\n slug: 'genesis',\n extensions: ['.gen', '.md', '.smd'],\n core: 'genesis_plus_gx',\n dbNames: ['GENESIS', 'Sega Genesis', 'Sega Mega Drive'],\n iconName: 'GENESIS',\n color: 'group-hover:text-[#0060A9]',\n accentHex: '#0060A9', // Genesis Blue\n aliases: ['SEGA GENESIS', 'MEGA DRIVE', 'SEGA MEGA DRIVE', 'MEGADRIVE'],\n biosNeeded: true, // For Sega CD\n biosFileNames: ['bios_CD_U.bin', 'bios_CD_E.bin', 'bios_CD_J.bin'],\n },\n {\n key: 'MASTER_SYSTEM',\n label: 'Sega Master System',\n fullName: 'Sega Master System',\n slug: 'mastersystem',\n extensions: ['.sms'],\n core: 'gearsystem',\n dbNames: ['Sega Master System'],\n iconName: 'MASTER_SYSTEM',\n color: 'group-hover:text-[#00897B]',\n accentHex: '#00897B', // SMS Teal\n aliases: ['MASTER SYSTEM', 'SEGA MASTER SYSTEM', 'SMS'],\n },\n {\n key: 'GAME_GEAR',\n label: 'Sega Game Gear',\n fullName: 'Sega Game Gear',\n slug: 'gamegear',\n extensions: ['.gg'],\n core: 'gearsystem',\n dbNames: ['Sega Game Gear'],\n iconName: 'GAME_GEAR',\n color: 'group-hover:text-[#1976D2]',\n accentHex: '#1976D2', // GG Blue\n aliases: ['GAME GEAR', 'SEGA GAME GEAR', 'GG'],\n },\n\n // ============ Sony ============\n {\n key: 'PS1',\n label: 'PlayStation',\n fullName: 'Sony PlayStation',\n slug: 'ps1',\n extensions: ['.iso', '.cue', '.pbp'],\n core: 'pcsx_rearmed',\n dbNames: ['PLAYSTATION', 'Sony Playstation', 'Sony PlayStation'],\n iconName: 'PS1',\n color: 'group-hover:text-[#283593]',\n accentHex: '#283593', // PS1 Dark Blue\n aliases: ['PLAYSTATION', 'PSX', 'PS', 'SONY PLAYSTATION'],\n biosNeeded: true,\n biosFileNames: ['scph5500.bin', 'scph5501.bin', 'scph5502.bin', 'scph1001.bin'],\n maxFileSizeMB: 700, // CD-ROM games can be up to 700MB\n },\n\n // ============ NEC ============\n {\n key: 'PC_ENGINE',\n label: 'PC Engine / TurboGrafx-16',\n fullName: 'PC Engine / TurboGrafx-16',\n slug: 'pcengine',\n extensions: ['.pce'],\n core: 'mednafen_pce_fast',\n dbNames: ['PC Engine', 'TurboGrafx-16', 'NEC PC Engine', 'NEC TurboGrafx-16'],\n iconName: 'PC_ENGINE',\n color: 'group-hover:text-[#F57C00]',\n accentHex: '#F57C00', // PCE Orange\n aliases: ['PC ENGINE', 'TURBOGRAFX-16', 'TURBOGRAFX', 'PCE', 'TG16'],\n biosNeeded: true, // For CD games\n biosFileNames: ['syscard3.pce'],\n },\n\n // ============ SNK ============\n {\n key: 'NEOGEO',\n label: 'Neo Geo',\n fullName: 'SNK Neo Geo',\n slug: 'neogeo',\n extensions: ['.neo'],\n core: 'fbalpha2012_neogeo',\n dbNames: ['SNK Neo Geo MVS', 'SNK Neo Geo AES', 'SNK Neo Geo CD', 'Neo Geo'],\n iconName: 'NEOGEO',\n color: 'group-hover:text-[#C62828]',\n accentHex: '#C62828', // Neo Geo Red\n aliases: ['NEO GEO', 'NEO-GEO', 'SNK NEO GEO'],\n biosNeeded: true,\n biosFileNames: ['neogeo.zip'],\n biosLocation: 'rom_folder',\n },\n {\n key: 'NEOGEO_POCKET',\n label: 'Neo Geo Pocket',\n fullName: 'SNK Neo Geo Pocket',\n slug: 'neogeopocket',\n extensions: ['.ngp'],\n core: 'mednafen_ngp',\n dbNames: ['SNK Neo Geo Pocket'],\n iconName: 'NEOGEO_POCKET',\n color: 'group-hover:text-[#0277BD]',\n accentHex: '#0277BD', // NGP Blue\n aliases: ['NEO GEO POCKET', 'NGP'],\n },\n {\n key: 'NEOGEO_POCKET_COLOR',\n label: 'Neo Geo Pocket Color',\n fullName: 'SNK Neo Geo Pocket Color',\n slug: 'neogeopocketcolor',\n extensions: ['.ngc'],\n core: 'mednafen_ngp',\n dbNames: ['SNK Neo Geo Pocket Color'],\n iconName: 'NEOGEO_POCKET_COLOR',\n color: 'group-hover:text-[#AD1457]',\n accentHex: '#AD1457', // NGPC Pink\n aliases: ['NEO GEO POCKET COLOR', 'NGPC'],\n },\n\n // ============ Atari ============\n {\n key: 'LYNX',\n label: 'Atari Lynx',\n fullName: 'Atari Lynx',\n slug: 'lynx',\n extensions: ['.lnx', '.lyx'],\n core: 'handy',\n dbNames: ['Atari Lynx'],\n iconName: 'LYNX',\n color: 'group-hover:text-[#FBC02D]',\n accentHex: '#FBC02D', // Lynx Yellow\n aliases: ['ATARI LYNX'],\n biosNeeded: true,\n biosFileNames: ['lynxboot.img'],\n },\n {\n key: 'ATARI_5200',\n label: 'Atari 5200',\n fullName: 'Atari 5200',\n slug: 'atari5200',\n extensions: ['.a52'],\n core: 'atari800', // Note: a5200 core not available, using atari800 which supports 5200\n coreSource: 'linuxserver',\n dbNames: ['Atari 5200'],\n iconName: 'ATARI_5200', // Assuming we can reuse a generic icon or this exists. If not, will default or fail gracefully.\n color: 'group-hover:text-[#E65100]',\n accentHex: '#E65100', // 5200 Orange\n aliases: ['ATARI 5200', 'ATARI5200'],\n biosNeeded: true,\n biosFileNames: ['5200.rom'],\n },\n {\n key: 'ATARI_2600',\n label: 'Atari 2600',\n fullName: 'Atari 2600',\n slug: 'atari2600',\n extensions: ['.a26'],\n core: 'stella2014',\n coreSource: 'linuxserver',\n dbNames: ['Atari 2600'],\n iconName: 'ATARI_2600',\n color: 'group-hover:text-[#D84315]',\n accentHex: '#D84315', // 2600 Red-Orange\n aliases: ['ATARI 2600', 'ATARI2600'],\n },\n {\n key: 'ATARI_7800',\n label: 'Atari 7800',\n fullName: 'Atari 7800',\n slug: 'atari7800',\n extensions: ['.a78'],\n core: 'prosystem',\n coreSource: 'linuxserver',\n dbNames: ['Atari 7800'],\n iconName: 'ATARI_7800',\n color: 'group-hover:text-[#5D4037]',\n accentHex: '#5D4037', // 7800 Brown\n aliases: ['ATARI 7800', 'ATARI7800'],\n },\n\n // ============ Other ============\n {\n key: 'WONDERSWAN',\n label: 'WonderSwan',\n fullName: 'Bandai WonderSwan',\n slug: 'wonderswan',\n extensions: ['.ws'],\n core: 'mednafen_wswan',\n dbNames: ['Bandai WonderSwan'],\n iconName: 'WONDERSWAN',\n color: 'group-hover:text-[#7CB342]',\n accentHex: '#7CB342', // WS Green\n aliases: ['WONDERSWAN', 'WONDER SWAN', 'BANDAI WONDERSWAN'],\n },\n {\n key: 'WONDERSWAN_COLOR',\n label: 'WonderSwan Color',\n fullName: 'Bandai WonderSwan Color',\n slug: 'wonderswancolor',\n extensions: ['.wsc'],\n core: 'mednafen_wswan',\n dbNames: ['Bandai WonderSwan Color'],\n iconName: 'WONDERSWAN_COLOR',\n color: 'group-hover:text-[#009688]',\n accentHex: '#009688', // WSC Teal\n aliases: ['WONDERSWAN COLOR', 'WONDER SWAN COLOR', 'BANDAI WONDERSWAN COLOR', 'WSC'],\n },\n {\n key: 'ARCADE',\n label: 'Arcade (FBNeo)',\n fullName: 'Arcade',\n slug: 'arcade',\n extensions: ['.zip'],\n core: 'fbneo',\n dbNames: ['Arcade', 'MAME', 'FBNeo', 'FinalBurn Neo'],\n iconName: 'ARCADE',\n color: 'group-hover:text-[#E91E63]',\n accentHex: '#E91E63', // Arcade Neon Pink\n aliases: ['MAME', 'CPS1', 'CPS2', 'CPS3', 'FBNEO', 'FINALBURN', 'SYSTEM16', 'SEGA SYSTEM 16'],\n biosNeeded: true,\n },\n {\n key: 'C64',\n label: 'Commodore 64',\n fullName: 'Commodore 64',\n slug: 'c64',\n extensions: ['.d64', '.t64', '.tap', '.prg', '.crt'],\n core: 'vice_x64',\n dbNames: ['Commodore 64'],\n iconName: 'C64',\n color: 'group-hover:text-[#546E7A]',\n accentHex: '#546E7A', // C64 Blue-Grey\n aliases: ['C64', 'COMMODORE 64'],\n },\n];\n","/**\n * Unified System Configuration\n * \n * SINGLE SOURCE OF TRUTH for all system-related data:\n * - Canonical system keys (used internally)\n * - File extensions → system detection\n * - System → RetroArch emulator core\n * - System → Database names (for LaunchBox matching)\n * - System → Display metadata (UI labels, colors, icons)\n * \n * All other files should import from here instead of maintaining their own mappings.\n */\n\nimport { SYSTEMS, SystemConfig } from '../data/systems-data';\n\nexport type { SystemConfig };\nexport { SYSTEMS };\n\n// ============ Lookup Maps (built from SYSTEMS) ============\n\n// Key → System config\nconst systemByKey = new Map<string, SystemConfig>();\n\n// Alias (uppercase) → System config\nconst systemByAlias = new Map<string, SystemConfig>();\n\n// Extension (lowercase) → System config\nconst systemByExtension = new Map<string, SystemConfig>();\n\n// DB name (lowercase) → System config\nconst systemByDbName = new Map<string, SystemConfig>();\n\n// Build all lookup maps\nfor (const sys of SYSTEMS) {\n // By key\n systemByKey.set(sys.key, sys);\n\n // By aliases (include key itself)\n systemByAlias.set(sys.key.toUpperCase(), sys);\n for (const alias of sys.aliases) {\n systemByAlias.set(alias.toUpperCase(), sys);\n }\n\n // By extension\n for (const ext of sys.extensions) {\n systemByExtension.set(ext.toLowerCase(), sys);\n }\n\n // By DB name\n for (const dbName of sys.dbNames) {\n systemByDbName.set(dbName.toLowerCase(), sys);\n }\n}\n\n// ============ Public API ============\n\n/**\n * Get system by canonical key (e.g., 'NES', 'GBA')\n */\nexport function getSystemByKey(key: string): SystemConfig | undefined {\n return systemByKey.get(key);\n}\n\n/**\n * Get system by any name/alias (case-insensitive)\n * Tries: exact key match, then alias match\n */\nexport function getSystem(name: string): SystemConfig | undefined {\n const upper = name.toUpperCase().trim();\n return systemByAlias.get(upper);\n}\n\n/**\n * Get system from file extension (e.g., '.nes', '.gba')\n */\nexport function getSystemFromExtension(filename: string): SystemConfig | undefined {\n const match = filename.match(/\\.[^.]+$/);\n if (!match) return undefined;\n return systemByExtension.get(match[0].toLowerCase());\n}\n\n/**\n * Get system by database name (for LaunchBox matching)\n */\nexport function getSystemByDbName(dbName: string): SystemConfig | undefined {\n return systemByDbName.get(dbName.toLowerCase());\n}\n\n/**\n * Get RetroArch core for a system name (case-insensitive)\n * Falls back to 'fceumm' (NES) if not found\n */\nexport function getCore(systemName: string): string {\n const sys = getSystem(systemName);\n return sys?.core ?? 'fceumm';\n}\n\n/**\n * Get the core source for a system (nostalgist or emulatorjs)\n * Returns undefined if using default (nostalgist)\n */\nexport function getCoreSource(systemName: string): 'nostalgist' | 'emulatorjs' | 'linuxserver' | undefined {\n const sys = getSystem(systemName);\n return sys?.coreSource;\n}\n\n/**\n * Get DB names for matching (used in game search)\n */\nexport function getDBSystemNames(systemKey: string): string[] {\n const sys = getSystem(systemKey);\n return sys?.dbNames ?? [systemKey];\n}\n\n/**\n * Check if a system is supported\n */\nexport function isSystemSupported(name: string): boolean {\n return getSystem(name) !== undefined;\n}\n\n/**\n * Get all supported extensions\n */\nexport function getSupportedExtensions(): string[] {\n const exts = new Set<string>();\n for (const sys of SYSTEMS) {\n for (const ext of sys.extensions) {\n exts.add(ext);\n }\n }\n // Add .zip as special case (handled separately)\n exts.add('.zip');\n return Array.from(exts);\n}\n\n/**\n * Get all systems for UI dropdown\n */\nexport function getSystemsList(): Array<{ value: string; label: string; iconName: string; color: string }> {\n return SYSTEMS.map(sys => ({\n value: sys.key,\n label: sys.label,\n iconName: sys.iconName,\n color: sys.color,\n }));\n}\n\n/**\n * Detect system from filename\n * Returns null for ZIP files (user must select)\n */\nexport function detectSystem(filename: string): SystemConfig | undefined {\n const ext = filename.match(/\\.[^.]+$/)?.[0]?.toLowerCase();\n if (ext === '.zip') return undefined;\n return getSystemFromExtension(filename);\n}\n\n/**\n * Check if two system names refer to the same platform\n */\nexport function systemsMatch(name1: string, name2: string): boolean {\n const sys1 = getSystem(name1);\n const sys2 = getSystem(name2);\n if (!sys1 || !sys2) return false;\n return sys1.key === sys2.key;\n}\n\n/**\n * Normalize a system name to its canonical key\n */\nexport function normalizeSystemKey(name: string): string {\n const sys = getSystem(name);\n return sys?.key ?? name;\n}\n\n/**\n * Get max file size in MB for a system (default: 100MB, CD-based: 700MB)\n */\nexport function getMaxFileSizeMB(systemName: string): number {\n const sys = getSystem(systemName);\n return sys?.maxFileSizeMB ?? 100;\n}\n\n// Legacy export names for backward compatibility\nexport const SUPPORTED_EXTENSIONS = getSupportedExtensions();\n\n// Performance Optimization Tiers\n// ===============================\n// Systems are grouped by CPU complexity to apply optimal RetroArch settings.\n// See useEmulatorCore.ts getOptimizedConfig() for the actual settings applied.\n\n/**\n * TIER 1: \"Zero Lag\" - Lightweight Systems\n * ----------------------------------------\n * These 8-bit and 16-bit systems have low CPU requirements in WASM,\n * allowing us to enable Run-Ahead (frame prediction) for near-zero input latency.\n * \n * Run-Ahead works by running the emulator ahead by 1 frame and using that\n * result for display, effectively cutting 1 frame (~16ms) of input lag.\n */\nexport const PERFORMANCE_TIER_1_SYSTEMS = new Set([\n 'NES', 'SNES', 'GENESIS', 'GB', 'GBC',\n 'MASTER_SYSTEM', 'GAME_GEAR', 'PC_ENGINE',\n 'ATARI_2600', 'ATARI_7800', 'LYNX',\n 'NEOGEO_POCKET', 'NEOGEO_POCKET_COLOR',\n 'WONDERSWAN', 'WONDERSWAN_COLOR'\n]);\n\n/**\n * TIER 2: \"Max Smoothness\" - Heavy Systems\n * ----------------------------------------\n * These 32-bit+ systems push WASM hard. Run-Ahead would cause stuttering.\n * Instead, we optimize for smooth, consistent frame delivery:\n * - Threaded video rendering to prevent UI freezes\n * - Larger audio buffers to prevent crackling\n * - Disabled manual rewind capture (saves RAM and CPU cycles)\n */\nexport const PERFORMANCE_TIER_2_SYSTEMS = new Set([\n 'PS1', 'N64', 'GBA', 'SATURN', 'DREAMCAST',\n 'NDS', 'PSP', 'ARCADE', 'DOS', 'NEOGEO'\n]);\n\n"]}
|
package/dist/systems.mjs
CHANGED
|
@@ -259,7 +259,7 @@ var SYSTEMS = [
|
|
|
259
259
|
extensions: [".ngc"],
|
|
260
260
|
core: "mednafen_ngp",
|
|
261
261
|
dbNames: ["SNK Neo Geo Pocket Color"],
|
|
262
|
-
iconName: "
|
|
262
|
+
iconName: "NEOGEO_POCKET_COLOR",
|
|
263
263
|
color: "group-hover:text-[#AD1457]",
|
|
264
264
|
accentHex: "#AD1457",
|
|
265
265
|
// NGPC Pink
|
|
@@ -354,7 +354,7 @@ var SYSTEMS = [
|
|
|
354
354
|
extensions: [".wsc"],
|
|
355
355
|
core: "mednafen_wswan",
|
|
356
356
|
dbNames: ["Bandai WonderSwan Color"],
|
|
357
|
-
iconName: "
|
|
357
|
+
iconName: "WONDERSWAN_COLOR",
|
|
358
358
|
color: "group-hover:text-[#009688]",
|
|
359
359
|
accentHex: "#009688",
|
|
360
360
|
// WSC Teal
|
package/dist/systems.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/data/systems-data.ts","../src/lib/systems.ts"],"names":[],"mappings":"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","file":"systems.mjs","sourcesContent":["export interface SystemConfig {\n // Canonical key - the internal identifier (e.g., 'NES', 'GB', 'GBA')\n key: string;\n\n // Display info\n label: string; // User-friendly name (e.g., 'Nintendo (NES)')\n fullName: string; // Full name (e.g., 'Nintendo Entertainment System')\n slug: string; // URL-friendly (e.g., 'nes')\n\n // File detection\n extensions: string[]; // File extensions (e.g., ['.nes'])\n\n // Emulation\n core: string; // RetroArch core (e.g., 'fceumm')\n coreSource?: 'nostalgist' | 'emulatorjs' | 'linuxserver'; // Core source: nostalgist (default), emulatorjs, or linuxserver\n\n // Database matching (LaunchBox)\n dbNames: string[]; // Possible DB names to search for\n\n // UI\n iconName: string; // ConsoleIcon component name\n color: string; // Tailwind hover color class\n accentHex: string; // Hex color for accents\n\n // Aliases - other names that should map to this system\n aliases: string[];\n\n // Metadata\n biosNeeded?: boolean;\n biosFileNames?: string[]; // Expected filenames for BIOS matching\n biosLocation?: 'system' | 'rom_folder'; // Where to mount the BIOS ('system' dir or alongside 'rom_folder')\n maxFileSizeMB?: number; // Max file size in MB (default: 100, CD-based: 700)\n}\n\n/**\n * The master system configuration\n * Order matters for display in dropdowns\n */\nexport const SYSTEMS: SystemConfig[] = [\n // ============ Nintendo ============\n {\n key: 'NES',\n label: 'Nintendo (NES)',\n fullName: 'Nintendo Entertainment System',\n slug: 'nes',\n extensions: ['.nes'],\n core: 'fceumm',\n dbNames: ['NES', 'Nintendo Entertainment System'],\n iconName: 'NES',\n color: 'group-hover:text-[#E60012]',\n accentHex: '#E60012', // Nintendo Red\n aliases: ['NINTENDO ENTERTAINMENT SYSTEM', 'FAMICOM'],\n },\n {\n key: 'SNES',\n label: 'Super Nintendo (SNES)',\n fullName: 'Super Nintendo Entertainment System',\n slug: 'snes',\n extensions: ['.snes', '.smc', '.sfc'],\n core: 'snes9x',\n dbNames: ['SNES', 'Super Nintendo Entertainment System'],\n iconName: 'SNES',\n color: 'group-hover:text-[#514689]',\n accentHex: '#514689', // SNES Purple\n aliases: ['SUPER NINTENDO', 'SUPER NINTENDO ENTERTAINMENT SYSTEM', 'SUPER FAMICOM'],\n },\n {\n key: 'N64',\n label: 'Nintendo 64',\n fullName: 'Nintendo 64',\n slug: 'n64',\n extensions: ['.n64', '.z64', '.v64'],\n core: 'mupen64plus_next',\n coreSource: 'linuxserver',\n dbNames: ['N64', 'Nintendo 64'],\n iconName: 'N64',\n color: 'group-hover:text-[#FFB300]',\n accentHex: '#FFB300', // N64 Gold\n aliases: ['NINTENDO 64'],\n },\n {\n key: 'GB',\n label: 'Game Boy',\n fullName: 'Game Boy',\n slug: 'gb',\n extensions: ['.gb'],\n core: 'gambatte',\n dbNames: ['Nintendo Game Boy'],\n iconName: 'GB',\n color: 'group-hover:text-[#8BC34A]',\n accentHex: '#8BC34A', // GB Green\n aliases: ['GAME BOY', 'GAMEBOY', 'NINTENDO GAME BOY'],\n },\n {\n key: 'GBC',\n label: 'Game Boy Color',\n fullName: 'Game Boy Color',\n slug: 'gbc',\n extensions: ['.gbc'],\n core: 'gambatte',\n dbNames: ['Nintendo Game Boy Color'],\n iconName: 'GBC',\n color: 'group-hover:text-[#9C27B0]',\n accentHex: '#9C27B0', // GBC Purple\n aliases: ['GAME BOY COLOR', 'GAMEBOY COLOR', 'NINTENDO GAME BOY COLOR'],\n },\n {\n key: 'GBA',\n label: 'Game Boy Advance',\n fullName: 'Game Boy Advance',\n slug: 'gba',\n extensions: ['.gba'],\n core: 'mgba',\n dbNames: ['Nintendo Game Boy Advance'],\n iconName: 'GBA',\n color: 'group-hover:text-[#3F51B5]',\n accentHex: '#3F51B5', // GBA Indigo\n aliases: ['GAME BOY ADVANCE', 'GAMEBOY ADVANCE', 'NINTENDO GAME BOY ADVANCE'],\n },\n {\n key: 'NDS',\n label: 'Nintendo DS',\n fullName: 'Nintendo DS',\n slug: 'nds',\n extensions: ['.nds'],\n core: 'melonds',\n coreSource: 'linuxserver',\n dbNames: ['Nintendo DS'],\n iconName: 'NDS',\n color: 'group-hover:text-[#00BCD4]',\n accentHex: '#00BCD4', // DS Cyan\n aliases: ['NDS', 'NINTENDO DS'],\n maxFileSizeMB: 512, // DS games are 128MB-512MB\n },\n {\n key: 'VIRTUAL_BOY',\n label: 'Virtual Boy',\n fullName: 'Virtual Boy',\n slug: 'virtualboy',\n extensions: ['.vb'],\n core: 'mednafen_vb',\n dbNames: ['Nintendo Virtual Boy'],\n iconName: 'VIRTUAL_BOY',\n color: 'group-hover:text-[#D50000]',\n accentHex: '#D50000', // VB Red\n aliases: ['VIRTUAL BOY', 'NINTENDO VIRTUAL BOY'],\n },\n\n // Note: Dreamcast (flycast) removed - core not available in any web source\n {\n key: 'SATURN',\n label: 'Sega Saturn',\n fullName: 'Sega Saturn',\n slug: 'saturn',\n extensions: ['.cue', '.chd', '.iso', '.7z'],\n core: 'yabause',\n coreSource: 'linuxserver',\n dbNames: ['Sega Saturn'],\n iconName: 'SATURN',\n color: 'group-hover:text-[#FFA000]',\n accentHex: '#FFA000', // Saturn Orange/Gold\n aliases: ['SATURN', 'SEGA SATURN'],\n biosNeeded: true,\n biosFileNames: ['sega_101.bin', 'mpr-17933.bin'],\n maxFileSizeMB: 700, // CD-ROM games can be up to 700MB\n },\n {\n key: 'GENESIS',\n label: 'Sega Genesis',\n fullName: 'Sega Genesis / Mega Drive',\n slug: 'genesis',\n extensions: ['.gen', '.md', '.smd'],\n core: 'genesis_plus_gx',\n dbNames: ['GENESIS', 'Sega Genesis', 'Sega Mega Drive'],\n iconName: 'GENESIS',\n color: 'group-hover:text-[#0060A9]',\n accentHex: '#0060A9', // Genesis Blue\n aliases: ['SEGA GENESIS', 'MEGA DRIVE', 'SEGA MEGA DRIVE', 'MEGADRIVE'],\n biosNeeded: true, // For Sega CD\n biosFileNames: ['bios_CD_U.bin', 'bios_CD_E.bin', 'bios_CD_J.bin'],\n },\n {\n key: 'MASTER_SYSTEM',\n label: 'Sega Master System',\n fullName: 'Sega Master System',\n slug: 'mastersystem',\n extensions: ['.sms'],\n core: 'gearsystem',\n dbNames: ['Sega Master System'],\n iconName: 'MASTER_SYSTEM',\n color: 'group-hover:text-[#00897B]',\n accentHex: '#00897B', // SMS Teal\n aliases: ['MASTER SYSTEM', 'SEGA MASTER SYSTEM', 'SMS'],\n },\n {\n key: 'GAME_GEAR',\n label: 'Sega Game Gear',\n fullName: 'Sega Game Gear',\n slug: 'gamegear',\n extensions: ['.gg'],\n core: 'gearsystem',\n dbNames: ['Sega Game Gear'],\n iconName: 'GAME_GEAR',\n color: 'group-hover:text-[#1976D2]',\n accentHex: '#1976D2', // GG Blue\n aliases: ['GAME GEAR', 'SEGA GAME GEAR', 'GG'],\n },\n\n // ============ Sony ============\n {\n key: 'PS1',\n label: 'PlayStation',\n fullName: 'Sony PlayStation',\n slug: 'ps1',\n extensions: ['.iso', '.cue', '.pbp'],\n core: 'pcsx_rearmed',\n dbNames: ['PLAYSTATION', 'Sony Playstation', 'Sony PlayStation'],\n iconName: 'PS1',\n color: 'group-hover:text-[#283593]',\n accentHex: '#283593', // PS1 Dark Blue\n aliases: ['PLAYSTATION', 'PSX', 'PS', 'SONY PLAYSTATION'],\n biosNeeded: true,\n biosFileNames: ['scph5500.bin', 'scph5501.bin', 'scph5502.bin', 'scph1001.bin'],\n maxFileSizeMB: 700, // CD-ROM games can be up to 700MB\n },\n\n // ============ NEC ============\n {\n key: 'PC_ENGINE',\n label: 'PC Engine / TurboGrafx-16',\n fullName: 'PC Engine / TurboGrafx-16',\n slug: 'pcengine',\n extensions: ['.pce'],\n core: 'mednafen_pce_fast',\n dbNames: ['PC Engine', 'TurboGrafx-16', 'NEC PC Engine', 'NEC TurboGrafx-16'],\n iconName: 'PC_ENGINE',\n color: 'group-hover:text-[#F57C00]',\n accentHex: '#F57C00', // PCE Orange\n aliases: ['PC ENGINE', 'TURBOGRAFX-16', 'TURBOGRAFX', 'PCE', 'TG16'],\n biosNeeded: true, // For CD games\n biosFileNames: ['syscard3.pce'],\n },\n\n // ============ SNK ============\n {\n key: 'NEOGEO',\n label: 'Neo Geo',\n fullName: 'SNK Neo Geo',\n slug: 'neogeo',\n extensions: ['.neo'],\n core: 'fbalpha2012_neogeo',\n dbNames: ['SNK Neo Geo MVS', 'SNK Neo Geo AES', 'SNK Neo Geo CD', 'Neo Geo'],\n iconName: 'NEOGEO',\n color: 'group-hover:text-[#C62828]',\n accentHex: '#C62828', // Neo Geo Red\n aliases: ['NEO GEO', 'NEO-GEO', 'SNK NEO GEO'],\n biosNeeded: true,\n biosFileNames: ['neogeo.zip'],\n biosLocation: 'rom_folder',\n },\n {\n key: 'NEOGEO_POCKET',\n label: 'Neo Geo Pocket',\n fullName: 'SNK Neo Geo Pocket',\n slug: 'neogeopocket',\n extensions: ['.ngp'],\n core: 'mednafen_ngp',\n dbNames: ['SNK Neo Geo Pocket'],\n iconName: 'NEOGEO_POCKET',\n color: 'group-hover:text-[#0277BD]',\n accentHex: '#0277BD', // NGP Blue\n aliases: ['NEO GEO POCKET', 'NGP'],\n },\n {\n key: 'NEOGEO_POCKET_COLOR',\n label: 'Neo Geo Pocket Color',\n fullName: 'SNK Neo Geo Pocket Color',\n slug: 'neogeopocketcolor',\n extensions: ['.ngc'],\n core: 'mednafen_ngp',\n dbNames: ['SNK Neo Geo Pocket Color'],\n iconName: 'NEOGEO_POCKET',\n color: 'group-hover:text-[#AD1457]',\n accentHex: '#AD1457', // NGPC Pink\n aliases: ['NEO GEO POCKET COLOR', 'NGPC'],\n },\n\n // ============ Atari ============\n {\n key: 'LYNX',\n label: 'Atari Lynx',\n fullName: 'Atari Lynx',\n slug: 'lynx',\n extensions: ['.lnx', '.lyx'],\n core: 'handy',\n dbNames: ['Atari Lynx'],\n iconName: 'LYNX',\n color: 'group-hover:text-[#FBC02D]',\n accentHex: '#FBC02D', // Lynx Yellow\n aliases: ['ATARI LYNX'],\n biosNeeded: true,\n biosFileNames: ['lynxboot.img'],\n },\n {\n key: 'ATARI_5200',\n label: 'Atari 5200',\n fullName: 'Atari 5200',\n slug: 'atari5200',\n extensions: ['.a52'],\n core: 'atari800', // Note: a5200 core not available, using atari800 which supports 5200\n coreSource: 'linuxserver',\n dbNames: ['Atari 5200'],\n iconName: 'ATARI_5200', // Assuming we can reuse a generic icon or this exists. If not, will default or fail gracefully.\n color: 'group-hover:text-[#E65100]',\n accentHex: '#E65100', // 5200 Orange\n aliases: ['ATARI 5200', 'ATARI5200'],\n biosNeeded: true,\n biosFileNames: ['5200.rom'],\n },\n {\n key: 'ATARI_2600',\n label: 'Atari 2600',\n fullName: 'Atari 2600',\n slug: 'atari2600',\n extensions: ['.a26'],\n core: 'stella2014',\n coreSource: 'linuxserver',\n dbNames: ['Atari 2600'],\n iconName: 'ATARI_2600',\n color: 'group-hover:text-[#D84315]',\n accentHex: '#D84315', // 2600 Red-Orange\n aliases: ['ATARI 2600', 'ATARI2600'],\n },\n {\n key: 'ATARI_7800',\n label: 'Atari 7800',\n fullName: 'Atari 7800',\n slug: 'atari7800',\n extensions: ['.a78'],\n core: 'prosystem',\n coreSource: 'linuxserver',\n dbNames: ['Atari 7800'],\n iconName: 'ATARI_7800',\n color: 'group-hover:text-[#5D4037]',\n accentHex: '#5D4037', // 7800 Brown\n aliases: ['ATARI 7800', 'ATARI7800'],\n },\n\n // ============ Other ============\n {\n key: 'WONDERSWAN',\n label: 'WonderSwan',\n fullName: 'Bandai WonderSwan',\n slug: 'wonderswan',\n extensions: ['.ws'],\n core: 'mednafen_wswan',\n dbNames: ['Bandai WonderSwan'],\n iconName: 'WONDERSWAN',\n color: 'group-hover:text-[#7CB342]',\n accentHex: '#7CB342', // WS Green\n aliases: ['WONDERSWAN', 'WONDER SWAN', 'BANDAI WONDERSWAN'],\n },\n {\n key: 'WONDERSWAN_COLOR',\n label: 'WonderSwan Color',\n fullName: 'Bandai WonderSwan Color',\n slug: 'wonderswancolor',\n extensions: ['.wsc'],\n core: 'mednafen_wswan',\n dbNames: ['Bandai WonderSwan Color'],\n iconName: 'WONDERSWAN',\n color: 'group-hover:text-[#009688]',\n accentHex: '#009688', // WSC Teal\n aliases: ['WONDERSWAN COLOR', 'WONDER SWAN COLOR', 'BANDAI WONDERSWAN COLOR', 'WSC'],\n },\n {\n key: 'ARCADE',\n label: 'Arcade (FBNeo)',\n fullName: 'Arcade',\n slug: 'arcade',\n extensions: ['.zip'],\n core: 'fbneo',\n dbNames: ['Arcade', 'MAME', 'FBNeo', 'FinalBurn Neo'],\n iconName: 'ARCADE',\n color: 'group-hover:text-[#E91E63]',\n accentHex: '#E91E63', // Arcade Neon Pink\n aliases: ['MAME', 'CPS1', 'CPS2', 'CPS3', 'FBNEO', 'FINALBURN', 'SYSTEM16', 'SEGA SYSTEM 16'],\n biosNeeded: true,\n },\n {\n key: 'C64',\n label: 'Commodore 64',\n fullName: 'Commodore 64',\n slug: 'c64',\n extensions: ['.d64', '.t64', '.tap', '.prg', '.crt'],\n core: 'vice_x64',\n dbNames: ['Commodore 64'],\n iconName: 'C64',\n color: 'group-hover:text-[#546E7A]',\n accentHex: '#546E7A', // C64 Blue-Grey\n aliases: ['C64', 'COMMODORE 64'],\n },\n];\n","/**\n * Unified System Configuration\n * \n * SINGLE SOURCE OF TRUTH for all system-related data:\n * - Canonical system keys (used internally)\n * - File extensions → system detection\n * - System → RetroArch emulator core\n * - System → Database names (for LaunchBox matching)\n * - System → Display metadata (UI labels, colors, icons)\n * \n * All other files should import from here instead of maintaining their own mappings.\n */\n\nimport { SYSTEMS, SystemConfig } from '../data/systems-data';\n\nexport type { SystemConfig };\nexport { SYSTEMS };\n\n// ============ Lookup Maps (built from SYSTEMS) ============\n\n// Key → System config\nconst systemByKey = new Map<string, SystemConfig>();\n\n// Alias (uppercase) → System config\nconst systemByAlias = new Map<string, SystemConfig>();\n\n// Extension (lowercase) → System config\nconst systemByExtension = new Map<string, SystemConfig>();\n\n// DB name (lowercase) → System config\nconst systemByDbName = new Map<string, SystemConfig>();\n\n// Build all lookup maps\nfor (const sys of SYSTEMS) {\n // By key\n systemByKey.set(sys.key, sys);\n\n // By aliases (include key itself)\n systemByAlias.set(sys.key.toUpperCase(), sys);\n for (const alias of sys.aliases) {\n systemByAlias.set(alias.toUpperCase(), sys);\n }\n\n // By extension\n for (const ext of sys.extensions) {\n systemByExtension.set(ext.toLowerCase(), sys);\n }\n\n // By DB name\n for (const dbName of sys.dbNames) {\n systemByDbName.set(dbName.toLowerCase(), sys);\n }\n}\n\n// ============ Public API ============\n\n/**\n * Get system by canonical key (e.g., 'NES', 'GBA')\n */\nexport function getSystemByKey(key: string): SystemConfig | undefined {\n return systemByKey.get(key);\n}\n\n/**\n * Get system by any name/alias (case-insensitive)\n * Tries: exact key match, then alias match\n */\nexport function getSystem(name: string): SystemConfig | undefined {\n const upper = name.toUpperCase().trim();\n return systemByAlias.get(upper);\n}\n\n/**\n * Get system from file extension (e.g., '.nes', '.gba')\n */\nexport function getSystemFromExtension(filename: string): SystemConfig | undefined {\n const match = filename.match(/\\.[^.]+$/);\n if (!match) return undefined;\n return systemByExtension.get(match[0].toLowerCase());\n}\n\n/**\n * Get system by database name (for LaunchBox matching)\n */\nexport function getSystemByDbName(dbName: string): SystemConfig | undefined {\n return systemByDbName.get(dbName.toLowerCase());\n}\n\n/**\n * Get RetroArch core for a system name (case-insensitive)\n * Falls back to 'fceumm' (NES) if not found\n */\nexport function getCore(systemName: string): string {\n const sys = getSystem(systemName);\n return sys?.core ?? 'fceumm';\n}\n\n/**\n * Get the core source for a system (nostalgist or emulatorjs)\n * Returns undefined if using default (nostalgist)\n */\nexport function getCoreSource(systemName: string): 'nostalgist' | 'emulatorjs' | 'linuxserver' | undefined {\n const sys = getSystem(systemName);\n return sys?.coreSource;\n}\n\n/**\n * Get DB names for matching (used in game search)\n */\nexport function getDBSystemNames(systemKey: string): string[] {\n const sys = getSystem(systemKey);\n return sys?.dbNames ?? [systemKey];\n}\n\n/**\n * Check if a system is supported\n */\nexport function isSystemSupported(name: string): boolean {\n return getSystem(name) !== undefined;\n}\n\n/**\n * Get all supported extensions\n */\nexport function getSupportedExtensions(): string[] {\n const exts = new Set<string>();\n for (const sys of SYSTEMS) {\n for (const ext of sys.extensions) {\n exts.add(ext);\n }\n }\n // Add .zip as special case (handled separately)\n exts.add('.zip');\n return Array.from(exts);\n}\n\n/**\n * Get all systems for UI dropdown\n */\nexport function getSystemsList(): Array<{ value: string; label: string; iconName: string; color: string }> {\n return SYSTEMS.map(sys => ({\n value: sys.key,\n label: sys.label,\n iconName: sys.iconName,\n color: sys.color,\n }));\n}\n\n/**\n * Detect system from filename\n * Returns null for ZIP files (user must select)\n */\nexport function detectSystem(filename: string): SystemConfig | undefined {\n const ext = filename.match(/\\.[^.]+$/)?.[0]?.toLowerCase();\n if (ext === '.zip') return undefined;\n return getSystemFromExtension(filename);\n}\n\n/**\n * Check if two system names refer to the same platform\n */\nexport function systemsMatch(name1: string, name2: string): boolean {\n const sys1 = getSystem(name1);\n const sys2 = getSystem(name2);\n if (!sys1 || !sys2) return false;\n return sys1.key === sys2.key;\n}\n\n/**\n * Normalize a system name to its canonical key\n */\nexport function normalizeSystemKey(name: string): string {\n const sys = getSystem(name);\n return sys?.key ?? name;\n}\n\n/**\n * Get max file size in MB for a system (default: 100MB, CD-based: 700MB)\n */\nexport function getMaxFileSizeMB(systemName: string): number {\n const sys = getSystem(systemName);\n return sys?.maxFileSizeMB ?? 100;\n}\n\n// Legacy export names for backward compatibility\nexport const SUPPORTED_EXTENSIONS = getSupportedExtensions();\n\n// Performance Optimization Tiers\n// ===============================\n// Systems are grouped by CPU complexity to apply optimal RetroArch settings.\n// See useEmulatorCore.ts getOptimizedConfig() for the actual settings applied.\n\n/**\n * TIER 1: \"Zero Lag\" - Lightweight Systems\n * ----------------------------------------\n * These 8-bit and 16-bit systems have low CPU requirements in WASM,\n * allowing us to enable Run-Ahead (frame prediction) for near-zero input latency.\n * \n * Run-Ahead works by running the emulator ahead by 1 frame and using that\n * result for display, effectively cutting 1 frame (~16ms) of input lag.\n */\nexport const PERFORMANCE_TIER_1_SYSTEMS = new Set([\n 'NES', 'SNES', 'GENESIS', 'GB', 'GBC',\n 'MASTER_SYSTEM', 'GAME_GEAR', 'PC_ENGINE',\n 'ATARI_2600', 'ATARI_7800', 'LYNX',\n 'NEOGEO_POCKET', 'NEOGEO_POCKET_COLOR',\n 'WONDERSWAN', 'WONDERSWAN_COLOR'\n]);\n\n/**\n * TIER 2: \"Max Smoothness\" - Heavy Systems\n * ----------------------------------------\n * These 32-bit+ systems push WASM hard. Run-Ahead would cause stuttering.\n * Instead, we optimize for smooth, consistent frame delivery:\n * - Threaded video rendering to prevent UI freezes\n * - Larger audio buffers to prevent crackling\n * - Disabled manual rewind capture (saves RAM and CPU cycles)\n */\nexport const PERFORMANCE_TIER_2_SYSTEMS = new Set([\n 'PS1', 'N64', 'GBA', 'SATURN', 'DREAMCAST',\n 'NDS', 'PSP', 'ARCADE', 'DOS', 'NEOGEO'\n]);\n\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/data/systems-data.ts","../src/lib/systems.ts"],"names":[],"mappings":";AAsCO,IAAM,OAAA,GAA0B;AAAA;AAAA,EAEnC;AAAA,IACI,GAAA,EAAK,KAAA;AAAA,IACL,KAAA,EAAO,gBAAA;AAAA,IACP,QAAA,EAAU,+BAAA;AAAA,IACV,IAAA,EAAM,KAAA;AAAA,IACN,UAAA,EAAY,CAAC,MAAM,CAAA;AAAA,IACnB,IAAA,EAAM,QAAA;AAAA,IACN,OAAA,EAAS,CAAC,KAAA,EAAO,+BAA+B,CAAA;AAAA,IAChD,QAAA,EAAU,KAAA;AAAA,IACV,KAAA,EAAO,4BAAA;AAAA,IACP,SAAA,EAAW,SAAA;AAAA;AAAA,IACX,OAAA,EAAS,CAAC,+BAAA,EAAiC,SAAS;AAAA,GACxD;AAAA,EACA;AAAA,IACI,GAAA,EAAK,MAAA;AAAA,IACL,KAAA,EAAO,uBAAA;AAAA,IACP,QAAA,EAAU,qCAAA;AAAA,IACV,IAAA,EAAM,MAAA;AAAA,IACN,UAAA,EAAY,CAAC,OAAA,EAAS,MAAA,EAAQ,MAAM,CAAA;AAAA,IACpC,IAAA,EAAM,QAAA;AAAA,IACN,OAAA,EAAS,CAAC,MAAA,EAAQ,qCAAqC,CAAA;AAAA,IACvD,QAAA,EAAU,MAAA;AAAA,IACV,KAAA,EAAO,4BAAA;AAAA,IACP,SAAA,EAAW,SAAA;AAAA;AAAA,IACX,OAAA,EAAS,CAAC,gBAAA,EAAkB,qCAAA,EAAuC,eAAe;AAAA,GACtF;AAAA,EACA;AAAA,IACI,GAAA,EAAK,KAAA;AAAA,IACL,KAAA,EAAO,aAAA;AAAA,IACP,QAAA,EAAU,aAAA;AAAA,IACV,IAAA,EAAM,KAAA;AAAA,IACN,UAAA,EAAY,CAAC,MAAA,EAAQ,MAAA,EAAQ,MAAM,CAAA;AAAA,IACnC,IAAA,EAAM,kBAAA;AAAA,IACN,UAAA,EAAY,aAAA;AAAA,IACZ,OAAA,EAAS,CAAC,KAAA,EAAO,aAAa,CAAA;AAAA,IAC9B,QAAA,EAAU,KAAA;AAAA,IACV,KAAA,EAAO,4BAAA;AAAA,IACP,SAAA,EAAW,SAAA;AAAA;AAAA,IACX,OAAA,EAAS,CAAC,aAAa;AAAA,GAC3B;AAAA,EACA;AAAA,IACI,GAAA,EAAK,IAAA;AAAA,IACL,KAAA,EAAO,UAAA;AAAA,IACP,QAAA,EAAU,UAAA;AAAA,IACV,IAAA,EAAM,IAAA;AAAA,IACN,UAAA,EAAY,CAAC,KAAK,CAAA;AAAA,IAClB,IAAA,EAAM,UAAA;AAAA,IACN,OAAA,EAAS,CAAC,mBAAmB,CAAA;AAAA,IAC7B,QAAA,EAAU,IAAA;AAAA,IACV,KAAA,EAAO,4BAAA;AAAA,IACP,SAAA,EAAW,SAAA;AAAA;AAAA,IACX,OAAA,EAAS,CAAC,UAAA,EAAY,SAAA,EAAW,mBAAmB;AAAA,GACxD;AAAA,EACA;AAAA,IACI,GAAA,EAAK,KAAA;AAAA,IACL,KAAA,EAAO,gBAAA;AAAA,IACP,QAAA,EAAU,gBAAA;AAAA,IACV,IAAA,EAAM,KAAA;AAAA,IACN,UAAA,EAAY,CAAC,MAAM,CAAA;AAAA,IACnB,IAAA,EAAM,UAAA;AAAA,IACN,OAAA,EAAS,CAAC,yBAAyB,CAAA;AAAA,IACnC,QAAA,EAAU,KAAA;AAAA,IACV,KAAA,EAAO,4BAAA;AAAA,IACP,SAAA,EAAW,SAAA;AAAA;AAAA,IACX,OAAA,EAAS,CAAC,gBAAA,EAAkB,eAAA,EAAiB,yBAAyB;AAAA,GAC1E;AAAA,EACA;AAAA,IACI,GAAA,EAAK,KAAA;AAAA,IACL,KAAA,EAAO,kBAAA;AAAA,IACP,QAAA,EAAU,kBAAA;AAAA,IACV,IAAA,EAAM,KAAA;AAAA,IACN,UAAA,EAAY,CAAC,MAAM,CAAA;AAAA,IACnB,IAAA,EAAM,MAAA;AAAA,IACN,OAAA,EAAS,CAAC,2BAA2B,CAAA;AAAA,IACrC,QAAA,EAAU,KAAA;AAAA,IACV,KAAA,EAAO,4BAAA;AAAA,IACP,SAAA,EAAW,SAAA;AAAA;AAAA,IACX,OAAA,EAAS,CAAC,kBAAA,EAAoB,iBAAA,EAAmB,2BAA2B;AAAA,GAChF;AAAA,EACA;AAAA,IACI,GAAA,EAAK,KAAA;AAAA,IACL,KAAA,EAAO,aAAA;AAAA,IACP,QAAA,EAAU,aAAA;AAAA,IACV,IAAA,EAAM,KAAA;AAAA,IACN,UAAA,EAAY,CAAC,MAAM,CAAA;AAAA,IACnB,IAAA,EAAM,SAAA;AAAA,IACN,UAAA,EAAY,aAAA;AAAA,IACZ,OAAA,EAAS,CAAC,aAAa,CAAA;AAAA,IACvB,QAAA,EAAU,KAAA;AAAA,IACV,KAAA,EAAO,4BAAA;AAAA,IACP,SAAA,EAAW,SAAA;AAAA;AAAA,IACX,OAAA,EAAS,CAAC,KAAA,EAAO,aAAa,CAAA;AAAA,IAC9B,aAAA,EAAe;AAAA;AAAA,GACnB;AAAA,EACA;AAAA,IACI,GAAA,EAAK,aAAA;AAAA,IACL,KAAA,EAAO,aAAA;AAAA,IACP,QAAA,EAAU,aAAA;AAAA,IACV,IAAA,EAAM,YAAA;AAAA,IACN,UAAA,EAAY,CAAC,KAAK,CAAA;AAAA,IAClB,IAAA,EAAM,aAAA;AAAA,IACN,OAAA,EAAS,CAAC,sBAAsB,CAAA;AAAA,IAChC,QAAA,EAAU,aAAA;AAAA,IACV,KAAA,EAAO,4BAAA;AAAA,IACP,SAAA,EAAW,SAAA;AAAA;AAAA,IACX,OAAA,EAAS,CAAC,aAAA,EAAe,sBAAsB;AAAA,GACnD;AAAA;AAAA,EAGA;AAAA,IACI,GAAA,EAAK,QAAA;AAAA,IACL,KAAA,EAAO,aAAA;AAAA,IACP,QAAA,EAAU,aAAA;AAAA,IACV,IAAA,EAAM,QAAA;AAAA,IACN,UAAA,EAAY,CAAC,MAAA,EAAQ,MAAA,EAAQ,QAAQ,KAAK,CAAA;AAAA,IAC1C,IAAA,EAAM,SAAA;AAAA,IACN,UAAA,EAAY,aAAA;AAAA,IACZ,OAAA,EAAS,CAAC,aAAa,CAAA;AAAA,IACvB,QAAA,EAAU,QAAA;AAAA,IACV,KAAA,EAAO,4BAAA;AAAA,IACP,SAAA,EAAW,SAAA;AAAA;AAAA,IACX,OAAA,EAAS,CAAC,QAAA,EAAU,aAAa,CAAA;AAAA,IACjC,UAAA,EAAY,IAAA;AAAA,IACZ,aAAA,EAAe,CAAC,cAAA,EAAgB,eAAe,CAAA;AAAA,IAC/C,aAAA,EAAe;AAAA;AAAA,GACnB;AAAA,EACA;AAAA,IACI,GAAA,EAAK,SAAA;AAAA,IACL,KAAA,EAAO,cAAA;AAAA,IACP,QAAA,EAAU,2BAAA;AAAA,IACV,IAAA,EAAM,SAAA;AAAA,IACN,UAAA,EAAY,CAAC,MAAA,EAAQ,KAAA,EAAO,MAAM,CAAA;AAAA,IAClC,IAAA,EAAM,iBAAA;AAAA,IACN,OAAA,EAAS,CAAC,SAAA,EAAW,cAAA,EAAgB,iBAAiB,CAAA;AAAA,IACtD,QAAA,EAAU,SAAA;AAAA,IACV,KAAA,EAAO,4BAAA;AAAA,IACP,SAAA,EAAW,SAAA;AAAA;AAAA,IACX,OAAA,EAAS,CAAC,cAAA,EAAgB,YAAA,EAAc,mBAAmB,WAAW,CAAA;AAAA,IACtE,UAAA,EAAY,IAAA;AAAA;AAAA,IACZ,aAAA,EAAe,CAAC,eAAA,EAAiB,eAAA,EAAiB,eAAe;AAAA,GACrE;AAAA,EACA;AAAA,IACI,GAAA,EAAK,eAAA;AAAA,IACL,KAAA,EAAO,oBAAA;AAAA,IACP,QAAA,EAAU,oBAAA;AAAA,IACV,IAAA,EAAM,cAAA;AAAA,IACN,UAAA,EAAY,CAAC,MAAM,CAAA;AAAA,IACnB,IAAA,EAAM,YAAA;AAAA,IACN,OAAA,EAAS,CAAC,oBAAoB,CAAA;AAAA,IAC9B,QAAA,EAAU,eAAA;AAAA,IACV,KAAA,EAAO,4BAAA;AAAA,IACP,SAAA,EAAW,SAAA;AAAA;AAAA,IACX,OAAA,EAAS,CAAC,eAAA,EAAiB,oBAAA,EAAsB,KAAK;AAAA,GAC1D;AAAA,EACA;AAAA,IACI,GAAA,EAAK,WAAA;AAAA,IACL,KAAA,EAAO,gBAAA;AAAA,IACP,QAAA,EAAU,gBAAA;AAAA,IACV,IAAA,EAAM,UAAA;AAAA,IACN,UAAA,EAAY,CAAC,KAAK,CAAA;AAAA,IAClB,IAAA,EAAM,YAAA;AAAA,IACN,OAAA,EAAS,CAAC,gBAAgB,CAAA;AAAA,IAC1B,QAAA,EAAU,WAAA;AAAA,IACV,KAAA,EAAO,4BAAA;AAAA,IACP,SAAA,EAAW,SAAA;AAAA;AAAA,IACX,OAAA,EAAS,CAAC,WAAA,EAAa,gBAAA,EAAkB,IAAI;AAAA,GACjD;AAAA;AAAA,EAGA;AAAA,IACI,GAAA,EAAK,KAAA;AAAA,IACL,KAAA,EAAO,aAAA;AAAA,IACP,QAAA,EAAU,kBAAA;AAAA,IACV,IAAA,EAAM,KAAA;AAAA,IACN,UAAA,EAAY,CAAC,MAAA,EAAQ,MAAA,EAAQ,MAAM,CAAA;AAAA,IACnC,IAAA,EAAM,cAAA;AAAA,IACN,OAAA,EAAS,CAAC,aAAA,EAAe,kBAAA,EAAoB,kBAAkB,CAAA;AAAA,IAC/D,QAAA,EAAU,KAAA;AAAA,IACV,KAAA,EAAO,4BAAA;AAAA,IACP,SAAA,EAAW,SAAA;AAAA;AAAA,IACX,OAAA,EAAS,CAAC,aAAA,EAAe,KAAA,EAAO,MAAM,kBAAkB,CAAA;AAAA,IACxD,UAAA,EAAY,IAAA;AAAA,IACZ,aAAA,EAAe,CAAC,cAAA,EAAgB,cAAA,EAAgB,gBAAgB,cAAc,CAAA;AAAA,IAC9E,aAAA,EAAe;AAAA;AAAA,GACnB;AAAA;AAAA,EAGA;AAAA,IACI,GAAA,EAAK,WAAA;AAAA,IACL,KAAA,EAAO,2BAAA;AAAA,IACP,QAAA,EAAU,2BAAA;AAAA,IACV,IAAA,EAAM,UAAA;AAAA,IACN,UAAA,EAAY,CAAC,MAAM,CAAA;AAAA,IACnB,IAAA,EAAM,mBAAA;AAAA,IACN,OAAA,EAAS,CAAC,WAAA,EAAa,eAAA,EAAiB,iBAAiB,mBAAmB,CAAA;AAAA,IAC5E,QAAA,EAAU,WAAA;AAAA,IACV,KAAA,EAAO,4BAAA;AAAA,IACP,SAAA,EAAW,SAAA;AAAA;AAAA,IACX,SAAS,CAAC,WAAA,EAAa,eAAA,EAAiB,YAAA,EAAc,OAAO,MAAM,CAAA;AAAA,IACnE,UAAA,EAAY,IAAA;AAAA;AAAA,IACZ,aAAA,EAAe,CAAC,cAAc;AAAA,GAClC;AAAA;AAAA,EAGA;AAAA,IACI,GAAA,EAAK,QAAA;AAAA,IACL,KAAA,EAAO,SAAA;AAAA,IACP,QAAA,EAAU,aAAA;AAAA,IACV,IAAA,EAAM,QAAA;AAAA,IACN,UAAA,EAAY,CAAC,MAAM,CAAA;AAAA,IACnB,IAAA,EAAM,oBAAA;AAAA,IACN,OAAA,EAAS,CAAC,iBAAA,EAAmB,iBAAA,EAAmB,kBAAkB,SAAS,CAAA;AAAA,IAC3E,QAAA,EAAU,QAAA;AAAA,IACV,KAAA,EAAO,4BAAA;AAAA,IACP,SAAA,EAAW,SAAA;AAAA;AAAA,IACX,OAAA,EAAS,CAAC,SAAA,EAAW,SAAA,EAAW,aAAa,CAAA;AAAA,IAC7C,UAAA,EAAY,IAAA;AAAA,IACZ,aAAA,EAAe,CAAC,YAAY,CAAA;AAAA,IAC5B,YAAA,EAAc;AAAA,GAClB;AAAA,EACA;AAAA,IACI,GAAA,EAAK,eAAA;AAAA,IACL,KAAA,EAAO,gBAAA;AAAA,IACP,QAAA,EAAU,oBAAA;AAAA,IACV,IAAA,EAAM,cAAA;AAAA,IACN,UAAA,EAAY,CAAC,MAAM,CAAA;AAAA,IACnB,IAAA,EAAM,cAAA;AAAA,IACN,OAAA,EAAS,CAAC,oBAAoB,CAAA;AAAA,IAC9B,QAAA,EAAU,eAAA;AAAA,IACV,KAAA,EAAO,4BAAA;AAAA,IACP,SAAA,EAAW,SAAA;AAAA;AAAA,IACX,OAAA,EAAS,CAAC,gBAAA,EAAkB,KAAK;AAAA,GACrC;AAAA,EACA;AAAA,IACI,GAAA,EAAK,qBAAA;AAAA,IACL,KAAA,EAAO,sBAAA;AAAA,IACP,QAAA,EAAU,0BAAA;AAAA,IACV,IAAA,EAAM,mBAAA;AAAA,IACN,UAAA,EAAY,CAAC,MAAM,CAAA;AAAA,IACnB,IAAA,EAAM,cAAA;AAAA,IACN,OAAA,EAAS,CAAC,0BAA0B,CAAA;AAAA,IACpC,QAAA,EAAU,qBAAA;AAAA,IACV,KAAA,EAAO,4BAAA;AAAA,IACP,SAAA,EAAW,SAAA;AAAA;AAAA,IACX,OAAA,EAAS,CAAC,sBAAA,EAAwB,MAAM;AAAA,GAC5C;AAAA;AAAA,EAGA;AAAA,IACI,GAAA,EAAK,MAAA;AAAA,IACL,KAAA,EAAO,YAAA;AAAA,IACP,QAAA,EAAU,YAAA;AAAA,IACV,IAAA,EAAM,MAAA;AAAA,IACN,UAAA,EAAY,CAAC,MAAA,EAAQ,MAAM,CAAA;AAAA,IAC3B,IAAA,EAAM,OAAA;AAAA,IACN,OAAA,EAAS,CAAC,YAAY,CAAA;AAAA,IACtB,QAAA,EAAU,MAAA;AAAA,IACV,KAAA,EAAO,4BAAA;AAAA,IACP,SAAA,EAAW,SAAA;AAAA;AAAA,IACX,OAAA,EAAS,CAAC,YAAY,CAAA;AAAA,IACtB,UAAA,EAAY,IAAA;AAAA,IACZ,aAAA,EAAe,CAAC,cAAc;AAAA,GAClC;AAAA,EACA;AAAA,IACI,GAAA,EAAK,YAAA;AAAA,IACL,KAAA,EAAO,YAAA;AAAA,IACP,QAAA,EAAU,YAAA;AAAA,IACV,IAAA,EAAM,WAAA;AAAA,IACN,UAAA,EAAY,CAAC,MAAM,CAAA;AAAA,IACnB,IAAA,EAAM,UAAA;AAAA;AAAA,IACN,UAAA,EAAY,aAAA;AAAA,IACZ,OAAA,EAAS,CAAC,YAAY,CAAA;AAAA,IACtB,QAAA,EAAU,YAAA;AAAA;AAAA,IACV,KAAA,EAAO,4BAAA;AAAA,IACP,SAAA,EAAW,SAAA;AAAA;AAAA,IACX,OAAA,EAAS,CAAC,YAAA,EAAc,WAAW,CAAA;AAAA,IACnC,UAAA,EAAY,IAAA;AAAA,IACZ,aAAA,EAAe,CAAC,UAAU;AAAA,GAC9B;AAAA,EACA;AAAA,IACI,GAAA,EAAK,YAAA;AAAA,IACL,KAAA,EAAO,YAAA;AAAA,IACP,QAAA,EAAU,YAAA;AAAA,IACV,IAAA,EAAM,WAAA;AAAA,IACN,UAAA,EAAY,CAAC,MAAM,CAAA;AAAA,IACnB,IAAA,EAAM,YAAA;AAAA,IACN,UAAA,EAAY,aAAA;AAAA,IACZ,OAAA,EAAS,CAAC,YAAY,CAAA;AAAA,IACtB,QAAA,EAAU,YAAA;AAAA,IACV,KAAA,EAAO,4BAAA;AAAA,IACP,SAAA,EAAW,SAAA;AAAA;AAAA,IACX,OAAA,EAAS,CAAC,YAAA,EAAc,WAAW;AAAA,GACvC;AAAA,EACA;AAAA,IACI,GAAA,EAAK,YAAA;AAAA,IACL,KAAA,EAAO,YAAA;AAAA,IACP,QAAA,EAAU,YAAA;AAAA,IACV,IAAA,EAAM,WAAA;AAAA,IACN,UAAA,EAAY,CAAC,MAAM,CAAA;AAAA,IACnB,IAAA,EAAM,WAAA;AAAA,IACN,UAAA,EAAY,aAAA;AAAA,IACZ,OAAA,EAAS,CAAC,YAAY,CAAA;AAAA,IACtB,QAAA,EAAU,YAAA;AAAA,IACV,KAAA,EAAO,4BAAA;AAAA,IACP,SAAA,EAAW,SAAA;AAAA;AAAA,IACX,OAAA,EAAS,CAAC,YAAA,EAAc,WAAW;AAAA,GACvC;AAAA;AAAA,EAGA;AAAA,IACI,GAAA,EAAK,YAAA;AAAA,IACL,KAAA,EAAO,YAAA;AAAA,IACP,QAAA,EAAU,mBAAA;AAAA,IACV,IAAA,EAAM,YAAA;AAAA,IACN,UAAA,EAAY,CAAC,KAAK,CAAA;AAAA,IAClB,IAAA,EAAM,gBAAA;AAAA,IACN,OAAA,EAAS,CAAC,mBAAmB,CAAA;AAAA,IAC7B,QAAA,EAAU,YAAA;AAAA,IACV,KAAA,EAAO,4BAAA;AAAA,IACP,SAAA,EAAW,SAAA;AAAA;AAAA,IACX,OAAA,EAAS,CAAC,YAAA,EAAc,aAAA,EAAe,mBAAmB;AAAA,GAC9D;AAAA,EACA;AAAA,IACI,GAAA,EAAK,kBAAA;AAAA,IACL,KAAA,EAAO,kBAAA;AAAA,IACP,QAAA,EAAU,yBAAA;AAAA,IACV,IAAA,EAAM,iBAAA;AAAA,IACN,UAAA,EAAY,CAAC,MAAM,CAAA;AAAA,IACnB,IAAA,EAAM,gBAAA;AAAA,IACN,OAAA,EAAS,CAAC,yBAAyB,CAAA;AAAA,IACnC,QAAA,EAAU,kBAAA;AAAA,IACV,KAAA,EAAO,4BAAA;AAAA,IACP,SAAA,EAAW,SAAA;AAAA;AAAA,IACX,OAAA,EAAS,CAAC,kBAAA,EAAoB,mBAAA,EAAqB,2BAA2B,KAAK;AAAA,GACvF;AAAA,EACA;AAAA,IACI,GAAA,EAAK,QAAA;AAAA,IACL,KAAA,EAAO,gBAAA;AAAA,IACP,QAAA,EAAU,QAAA;AAAA,IACV,IAAA,EAAM,QAAA;AAAA,IACN,UAAA,EAAY,CAAC,MAAM,CAAA;AAAA,IACnB,IAAA,EAAM,OAAA;AAAA,IACN,OAAA,EAAS,CAAC,QAAA,EAAU,MAAA,EAAQ,SAAS,eAAe,CAAA;AAAA,IACpD,QAAA,EAAU,QAAA;AAAA,IACV,KAAA,EAAO,4BAAA;AAAA,IACP,SAAA,EAAW,SAAA;AAAA;AAAA,IACX,OAAA,EAAS,CAAC,MAAA,EAAQ,MAAA,EAAQ,QAAQ,MAAA,EAAQ,OAAA,EAAS,WAAA,EAAa,UAAA,EAAY,gBAAgB,CAAA;AAAA,IAC5F,UAAA,EAAY;AAAA,GAChB;AAAA,EACA;AAAA,IACI,GAAA,EAAK,KAAA;AAAA,IACL,KAAA,EAAO,cAAA;AAAA,IACP,QAAA,EAAU,cAAA;AAAA,IACV,IAAA,EAAM,KAAA;AAAA,IACN,YAAY,CAAC,MAAA,EAAQ,MAAA,EAAQ,MAAA,EAAQ,QAAQ,MAAM,CAAA;AAAA,IACnD,IAAA,EAAM,UAAA;AAAA,IACN,OAAA,EAAS,CAAC,cAAc,CAAA;AAAA,IACxB,QAAA,EAAU,KAAA;AAAA,IACV,KAAA,EAAO,4BAAA;AAAA,IACP,SAAA,EAAW,SAAA;AAAA;AAAA,IACX,OAAA,EAAS,CAAC,KAAA,EAAO,cAAc;AAAA;AAEvC;;;AC7XA,IAAM,WAAA,uBAAkB,GAAA,EAA0B;AAGlD,IAAM,aAAA,uBAAoB,GAAA,EAA0B;AAGpD,IAAM,iBAAA,uBAAwB,GAAA,EAA0B;AAGxD,IAAM,cAAA,uBAAqB,GAAA,EAA0B;AAGrD,KAAA,MAAW,OAAO,OAAA,EAAS;AAEvB,EAAA,WAAA,CAAY,GAAA,CAAI,GAAA,CAAI,GAAA,EAAK,GAAG,CAAA;AAG5B,EAAA,aAAA,CAAc,GAAA,CAAI,GAAA,CAAI,GAAA,CAAI,WAAA,IAAe,GAAG,CAAA;AAC5C,EAAA,KAAA,MAAW,KAAA,IAAS,IAAI,OAAA,EAAS;AAC7B,IAAA,aAAA,CAAc,GAAA,CAAI,KAAA,CAAM,WAAA,EAAY,EAAG,GAAG,CAAA;AAAA,EAC9C;AAGA,EAAA,KAAA,MAAW,GAAA,IAAO,IAAI,UAAA,EAAY;AAC9B,IAAA,iBAAA,CAAkB,GAAA,CAAI,GAAA,CAAI,WAAA,EAAY,EAAG,GAAG,CAAA;AAAA,EAChD;AAGA,EAAA,KAAA,MAAW,MAAA,IAAU,IAAI,OAAA,EAAS;AAC9B,IAAA,cAAA,CAAe,GAAA,CAAI,MAAA,CAAO,WAAA,EAAY,EAAG,GAAG,CAAA;AAAA,EAChD;AACJ;AAOO,SAAS,eAAe,GAAA,EAAuC;AAClE,EAAA,OAAO,WAAA,CAAY,IAAI,GAAG,CAAA;AAC9B;AAMO,SAAS,UAAU,IAAA,EAAwC;AAC9D,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,WAAA,EAAY,CAAE,IAAA,EAAK;AACtC,EAAA,OAAO,aAAA,CAAc,IAAI,KAAK,CAAA;AAClC;AAKO,SAAS,uBAAuB,QAAA,EAA4C;AAC/E,EAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,KAAA,CAAM,UAAU,CAAA;AACvC,EAAA,IAAI,CAAC,OAAO,OAAO,MAAA;AACnB,EAAA,OAAO,kBAAkB,GAAA,CAAI,KAAA,CAAM,CAAC,CAAA,CAAE,aAAa,CAAA;AACvD;AAKO,SAAS,kBAAkB,MAAA,EAA0C;AACxE,EAAA,OAAO,cAAA,CAAe,GAAA,CAAI,MAAA,CAAO,WAAA,EAAa,CAAA;AAClD;AAMO,SAAS,QAAQ,UAAA,EAA4B;AAChD,EAAA,MAAM,GAAA,GAAM,UAAU,UAAU,CAAA;AAChC,EAAA,OAAO,KAAK,IAAA,IAAQ,QAAA;AACxB;AAMO,SAAS,cAAc,UAAA,EAA6E;AACvG,EAAA,MAAM,GAAA,GAAM,UAAU,UAAU,CAAA;AAChC,EAAA,OAAO,GAAA,EAAK,UAAA;AAChB;AAKO,SAAS,iBAAiB,SAAA,EAA6B;AAC1D,EAAA,MAAM,GAAA,GAAM,UAAU,SAAS,CAAA;AAC/B,EAAA,OAAO,GAAA,EAAK,OAAA,IAAW,CAAC,SAAS,CAAA;AACrC;AAKO,SAAS,kBAAkB,IAAA,EAAuB;AACrD,EAAA,OAAO,SAAA,CAAU,IAAI,CAAA,KAAM,MAAA;AAC/B;AAKO,SAAS,sBAAA,GAAmC;AAC/C,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,EAAA,KAAA,MAAW,OAAO,OAAA,EAAS;AACvB,IAAA,KAAA,MAAW,GAAA,IAAO,IAAI,UAAA,EAAY;AAC9B,MAAA,IAAA,CAAK,IAAI,GAAG,CAAA;AAAA,IAChB;AAAA,EACJ;AAEA,EAAA,IAAA,CAAK,IAAI,MAAM,CAAA;AACf,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AAC1B;AAKO,SAAS,cAAA,GAA2F;AACvG,EAAA,OAAO,OAAA,CAAQ,IAAI,CAAA,GAAA,MAAQ;AAAA,IACvB,OAAO,GAAA,CAAI,GAAA;AAAA,IACX,OAAO,GAAA,CAAI,KAAA;AAAA,IACX,UAAU,GAAA,CAAI,QAAA;AAAA,IACd,OAAO,GAAA,CAAI;AAAA,GACf,CAAE,CAAA;AACN;AAMO,SAAS,aAAa,QAAA,EAA4C;AACrE,EAAA,MAAM,MAAM,QAAA,CAAS,KAAA,CAAM,UAAU,CAAA,GAAI,CAAC,GAAG,WAAA,EAAY;AACzD,EAAA,IAAI,GAAA,KAAQ,QAAQ,OAAO,MAAA;AAC3B,EAAA,OAAO,uBAAuB,QAAQ,CAAA;AAC1C;AAKO,SAAS,YAAA,CAAa,OAAe,KAAA,EAAwB;AAChE,EAAA,MAAM,IAAA,GAAO,UAAU,KAAK,CAAA;AAC5B,EAAA,MAAM,IAAA,GAAO,UAAU,KAAK,CAAA;AAC5B,EAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,IAAA,EAAM,OAAO,KAAA;AAC3B,EAAA,OAAO,IAAA,CAAK,QAAQ,IAAA,CAAK,GAAA;AAC7B;AAKO,SAAS,mBAAmB,IAAA,EAAsB;AACrD,EAAA,MAAM,GAAA,GAAM,UAAU,IAAI,CAAA;AAC1B,EAAA,OAAO,KAAK,GAAA,IAAO,IAAA;AACvB;AAKO,SAAS,iBAAiB,UAAA,EAA4B;AACzD,EAAA,MAAM,GAAA,GAAM,UAAU,UAAU,CAAA;AAChC,EAAA,OAAO,KAAK,aAAA,IAAiB,GAAA;AACjC;AAGO,IAAM,uBAAuB,sBAAA;AAgB7B,IAAM,0BAAA,uBAAiC,GAAA,CAAI;AAAA,EAC9C,KAAA;AAAA,EAAO,MAAA;AAAA,EAAQ,SAAA;AAAA,EAAW,IAAA;AAAA,EAAM,KAAA;AAAA,EAChC,eAAA;AAAA,EAAiB,WAAA;AAAA,EAAa,WAAA;AAAA,EAC9B,YAAA;AAAA,EAAc,YAAA;AAAA,EAAc,MAAA;AAAA,EAC5B,eAAA;AAAA,EAAiB,qBAAA;AAAA,EACjB,YAAA;AAAA,EAAc;AAClB,CAAC;AAWM,IAAM,0BAAA,uBAAiC,GAAA,CAAI;AAAA,EAC9C,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,QAAA;AAAA,EAAU,WAAA;AAAA,EAC/B,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,QAAA;AAAA,EAAU,KAAA;AAAA,EAAO;AACnC,CAAC","file":"systems.mjs","sourcesContent":["export interface SystemConfig {\n // Canonical key - the internal identifier (e.g., 'NES', 'GB', 'GBA')\n key: string;\n\n // Display info\n label: string; // User-friendly name (e.g., 'Nintendo (NES)')\n fullName: string; // Full name (e.g., 'Nintendo Entertainment System')\n slug: string; // URL-friendly (e.g., 'nes')\n\n // File detection\n extensions: string[]; // File extensions (e.g., ['.nes'])\n\n // Emulation\n core: string; // RetroArch core (e.g., 'fceumm')\n coreSource?: 'nostalgist' | 'emulatorjs' | 'linuxserver'; // Core source: nostalgist (default), emulatorjs, or linuxserver\n\n // Database matching (LaunchBox)\n dbNames: string[]; // Possible DB names to search for\n\n // UI\n iconName: string; // ConsoleIcon component name\n color: string; // Tailwind hover color class\n accentHex: string; // Hex color for accents\n\n // Aliases - other names that should map to this system\n aliases: string[];\n\n // Metadata\n biosNeeded?: boolean;\n biosFileNames?: string[]; // Expected filenames for BIOS matching\n biosLocation?: 'system' | 'rom_folder'; // Where to mount the BIOS ('system' dir or alongside 'rom_folder')\n maxFileSizeMB?: number; // Max file size in MB (default: 100, CD-based: 700)\n}\n\n/**\n * The master system configuration\n * Order matters for display in dropdowns\n */\nexport const SYSTEMS: SystemConfig[] = [\n // ============ Nintendo ============\n {\n key: 'NES',\n label: 'Nintendo (NES)',\n fullName: 'Nintendo Entertainment System',\n slug: 'nes',\n extensions: ['.nes'],\n core: 'fceumm',\n dbNames: ['NES', 'Nintendo Entertainment System'],\n iconName: 'NES',\n color: 'group-hover:text-[#E60012]',\n accentHex: '#E60012', // Nintendo Red\n aliases: ['NINTENDO ENTERTAINMENT SYSTEM', 'FAMICOM'],\n },\n {\n key: 'SNES',\n label: 'Super Nintendo (SNES)',\n fullName: 'Super Nintendo Entertainment System',\n slug: 'snes',\n extensions: ['.snes', '.smc', '.sfc'],\n core: 'snes9x',\n dbNames: ['SNES', 'Super Nintendo Entertainment System'],\n iconName: 'SNES',\n color: 'group-hover:text-[#514689]',\n accentHex: '#514689', // SNES Purple\n aliases: ['SUPER NINTENDO', 'SUPER NINTENDO ENTERTAINMENT SYSTEM', 'SUPER FAMICOM'],\n },\n {\n key: 'N64',\n label: 'Nintendo 64',\n fullName: 'Nintendo 64',\n slug: 'n64',\n extensions: ['.n64', '.z64', '.v64'],\n core: 'mupen64plus_next',\n coreSource: 'linuxserver',\n dbNames: ['N64', 'Nintendo 64'],\n iconName: 'N64',\n color: 'group-hover:text-[#FFB300]',\n accentHex: '#FFB300', // N64 Gold\n aliases: ['NINTENDO 64'],\n },\n {\n key: 'GB',\n label: 'Game Boy',\n fullName: 'Game Boy',\n slug: 'gb',\n extensions: ['.gb'],\n core: 'gambatte',\n dbNames: ['Nintendo Game Boy'],\n iconName: 'GB',\n color: 'group-hover:text-[#8BC34A]',\n accentHex: '#8BC34A', // GB Green\n aliases: ['GAME BOY', 'GAMEBOY', 'NINTENDO GAME BOY'],\n },\n {\n key: 'GBC',\n label: 'Game Boy Color',\n fullName: 'Game Boy Color',\n slug: 'gbc',\n extensions: ['.gbc'],\n core: 'gambatte',\n dbNames: ['Nintendo Game Boy Color'],\n iconName: 'GBC',\n color: 'group-hover:text-[#9C27B0]',\n accentHex: '#9C27B0', // GBC Purple\n aliases: ['GAME BOY COLOR', 'GAMEBOY COLOR', 'NINTENDO GAME BOY COLOR'],\n },\n {\n key: 'GBA',\n label: 'Game Boy Advance',\n fullName: 'Game Boy Advance',\n slug: 'gba',\n extensions: ['.gba'],\n core: 'mgba',\n dbNames: ['Nintendo Game Boy Advance'],\n iconName: 'GBA',\n color: 'group-hover:text-[#3F51B5]',\n accentHex: '#3F51B5', // GBA Indigo\n aliases: ['GAME BOY ADVANCE', 'GAMEBOY ADVANCE', 'NINTENDO GAME BOY ADVANCE'],\n },\n {\n key: 'NDS',\n label: 'Nintendo DS',\n fullName: 'Nintendo DS',\n slug: 'nds',\n extensions: ['.nds'],\n core: 'melonds',\n coreSource: 'linuxserver',\n dbNames: ['Nintendo DS'],\n iconName: 'NDS',\n color: 'group-hover:text-[#00BCD4]',\n accentHex: '#00BCD4', // DS Cyan\n aliases: ['NDS', 'NINTENDO DS'],\n maxFileSizeMB: 512, // DS games are 128MB-512MB\n },\n {\n key: 'VIRTUAL_BOY',\n label: 'Virtual Boy',\n fullName: 'Virtual Boy',\n slug: 'virtualboy',\n extensions: ['.vb'],\n core: 'mednafen_vb',\n dbNames: ['Nintendo Virtual Boy'],\n iconName: 'VIRTUAL_BOY',\n color: 'group-hover:text-[#D50000]',\n accentHex: '#D50000', // VB Red\n aliases: ['VIRTUAL BOY', 'NINTENDO VIRTUAL BOY'],\n },\n\n // Note: Dreamcast (flycast) removed - core not available in any web source\n {\n key: 'SATURN',\n label: 'Sega Saturn',\n fullName: 'Sega Saturn',\n slug: 'saturn',\n extensions: ['.cue', '.chd', '.iso', '.7z'],\n core: 'yabause',\n coreSource: 'linuxserver',\n dbNames: ['Sega Saturn'],\n iconName: 'SATURN',\n color: 'group-hover:text-[#FFA000]',\n accentHex: '#FFA000', // Saturn Orange/Gold\n aliases: ['SATURN', 'SEGA SATURN'],\n biosNeeded: true,\n biosFileNames: ['sega_101.bin', 'mpr-17933.bin'],\n maxFileSizeMB: 700, // CD-ROM games can be up to 700MB\n },\n {\n key: 'GENESIS',\n label: 'Sega Genesis',\n fullName: 'Sega Genesis / Mega Drive',\n slug: 'genesis',\n extensions: ['.gen', '.md', '.smd'],\n core: 'genesis_plus_gx',\n dbNames: ['GENESIS', 'Sega Genesis', 'Sega Mega Drive'],\n iconName: 'GENESIS',\n color: 'group-hover:text-[#0060A9]',\n accentHex: '#0060A9', // Genesis Blue\n aliases: ['SEGA GENESIS', 'MEGA DRIVE', 'SEGA MEGA DRIVE', 'MEGADRIVE'],\n biosNeeded: true, // For Sega CD\n biosFileNames: ['bios_CD_U.bin', 'bios_CD_E.bin', 'bios_CD_J.bin'],\n },\n {\n key: 'MASTER_SYSTEM',\n label: 'Sega Master System',\n fullName: 'Sega Master System',\n slug: 'mastersystem',\n extensions: ['.sms'],\n core: 'gearsystem',\n dbNames: ['Sega Master System'],\n iconName: 'MASTER_SYSTEM',\n color: 'group-hover:text-[#00897B]',\n accentHex: '#00897B', // SMS Teal\n aliases: ['MASTER SYSTEM', 'SEGA MASTER SYSTEM', 'SMS'],\n },\n {\n key: 'GAME_GEAR',\n label: 'Sega Game Gear',\n fullName: 'Sega Game Gear',\n slug: 'gamegear',\n extensions: ['.gg'],\n core: 'gearsystem',\n dbNames: ['Sega Game Gear'],\n iconName: 'GAME_GEAR',\n color: 'group-hover:text-[#1976D2]',\n accentHex: '#1976D2', // GG Blue\n aliases: ['GAME GEAR', 'SEGA GAME GEAR', 'GG'],\n },\n\n // ============ Sony ============\n {\n key: 'PS1',\n label: 'PlayStation',\n fullName: 'Sony PlayStation',\n slug: 'ps1',\n extensions: ['.iso', '.cue', '.pbp'],\n core: 'pcsx_rearmed',\n dbNames: ['PLAYSTATION', 'Sony Playstation', 'Sony PlayStation'],\n iconName: 'PS1',\n color: 'group-hover:text-[#283593]',\n accentHex: '#283593', // PS1 Dark Blue\n aliases: ['PLAYSTATION', 'PSX', 'PS', 'SONY PLAYSTATION'],\n biosNeeded: true,\n biosFileNames: ['scph5500.bin', 'scph5501.bin', 'scph5502.bin', 'scph1001.bin'],\n maxFileSizeMB: 700, // CD-ROM games can be up to 700MB\n },\n\n // ============ NEC ============\n {\n key: 'PC_ENGINE',\n label: 'PC Engine / TurboGrafx-16',\n fullName: 'PC Engine / TurboGrafx-16',\n slug: 'pcengine',\n extensions: ['.pce'],\n core: 'mednafen_pce_fast',\n dbNames: ['PC Engine', 'TurboGrafx-16', 'NEC PC Engine', 'NEC TurboGrafx-16'],\n iconName: 'PC_ENGINE',\n color: 'group-hover:text-[#F57C00]',\n accentHex: '#F57C00', // PCE Orange\n aliases: ['PC ENGINE', 'TURBOGRAFX-16', 'TURBOGRAFX', 'PCE', 'TG16'],\n biosNeeded: true, // For CD games\n biosFileNames: ['syscard3.pce'],\n },\n\n // ============ SNK ============\n {\n key: 'NEOGEO',\n label: 'Neo Geo',\n fullName: 'SNK Neo Geo',\n slug: 'neogeo',\n extensions: ['.neo'],\n core: 'fbalpha2012_neogeo',\n dbNames: ['SNK Neo Geo MVS', 'SNK Neo Geo AES', 'SNK Neo Geo CD', 'Neo Geo'],\n iconName: 'NEOGEO',\n color: 'group-hover:text-[#C62828]',\n accentHex: '#C62828', // Neo Geo Red\n aliases: ['NEO GEO', 'NEO-GEO', 'SNK NEO GEO'],\n biosNeeded: true,\n biosFileNames: ['neogeo.zip'],\n biosLocation: 'rom_folder',\n },\n {\n key: 'NEOGEO_POCKET',\n label: 'Neo Geo Pocket',\n fullName: 'SNK Neo Geo Pocket',\n slug: 'neogeopocket',\n extensions: ['.ngp'],\n core: 'mednafen_ngp',\n dbNames: ['SNK Neo Geo Pocket'],\n iconName: 'NEOGEO_POCKET',\n color: 'group-hover:text-[#0277BD]',\n accentHex: '#0277BD', // NGP Blue\n aliases: ['NEO GEO POCKET', 'NGP'],\n },\n {\n key: 'NEOGEO_POCKET_COLOR',\n label: 'Neo Geo Pocket Color',\n fullName: 'SNK Neo Geo Pocket Color',\n slug: 'neogeopocketcolor',\n extensions: ['.ngc'],\n core: 'mednafen_ngp',\n dbNames: ['SNK Neo Geo Pocket Color'],\n iconName: 'NEOGEO_POCKET_COLOR',\n color: 'group-hover:text-[#AD1457]',\n accentHex: '#AD1457', // NGPC Pink\n aliases: ['NEO GEO POCKET COLOR', 'NGPC'],\n },\n\n // ============ Atari ============\n {\n key: 'LYNX',\n label: 'Atari Lynx',\n fullName: 'Atari Lynx',\n slug: 'lynx',\n extensions: ['.lnx', '.lyx'],\n core: 'handy',\n dbNames: ['Atari Lynx'],\n iconName: 'LYNX',\n color: 'group-hover:text-[#FBC02D]',\n accentHex: '#FBC02D', // Lynx Yellow\n aliases: ['ATARI LYNX'],\n biosNeeded: true,\n biosFileNames: ['lynxboot.img'],\n },\n {\n key: 'ATARI_5200',\n label: 'Atari 5200',\n fullName: 'Atari 5200',\n slug: 'atari5200',\n extensions: ['.a52'],\n core: 'atari800', // Note: a5200 core not available, using atari800 which supports 5200\n coreSource: 'linuxserver',\n dbNames: ['Atari 5200'],\n iconName: 'ATARI_5200', // Assuming we can reuse a generic icon or this exists. If not, will default or fail gracefully.\n color: 'group-hover:text-[#E65100]',\n accentHex: '#E65100', // 5200 Orange\n aliases: ['ATARI 5200', 'ATARI5200'],\n biosNeeded: true,\n biosFileNames: ['5200.rom'],\n },\n {\n key: 'ATARI_2600',\n label: 'Atari 2600',\n fullName: 'Atari 2600',\n slug: 'atari2600',\n extensions: ['.a26'],\n core: 'stella2014',\n coreSource: 'linuxserver',\n dbNames: ['Atari 2600'],\n iconName: 'ATARI_2600',\n color: 'group-hover:text-[#D84315]',\n accentHex: '#D84315', // 2600 Red-Orange\n aliases: ['ATARI 2600', 'ATARI2600'],\n },\n {\n key: 'ATARI_7800',\n label: 'Atari 7800',\n fullName: 'Atari 7800',\n slug: 'atari7800',\n extensions: ['.a78'],\n core: 'prosystem',\n coreSource: 'linuxserver',\n dbNames: ['Atari 7800'],\n iconName: 'ATARI_7800',\n color: 'group-hover:text-[#5D4037]',\n accentHex: '#5D4037', // 7800 Brown\n aliases: ['ATARI 7800', 'ATARI7800'],\n },\n\n // ============ Other ============\n {\n key: 'WONDERSWAN',\n label: 'WonderSwan',\n fullName: 'Bandai WonderSwan',\n slug: 'wonderswan',\n extensions: ['.ws'],\n core: 'mednafen_wswan',\n dbNames: ['Bandai WonderSwan'],\n iconName: 'WONDERSWAN',\n color: 'group-hover:text-[#7CB342]',\n accentHex: '#7CB342', // WS Green\n aliases: ['WONDERSWAN', 'WONDER SWAN', 'BANDAI WONDERSWAN'],\n },\n {\n key: 'WONDERSWAN_COLOR',\n label: 'WonderSwan Color',\n fullName: 'Bandai WonderSwan Color',\n slug: 'wonderswancolor',\n extensions: ['.wsc'],\n core: 'mednafen_wswan',\n dbNames: ['Bandai WonderSwan Color'],\n iconName: 'WONDERSWAN_COLOR',\n color: 'group-hover:text-[#009688]',\n accentHex: '#009688', // WSC Teal\n aliases: ['WONDERSWAN COLOR', 'WONDER SWAN COLOR', 'BANDAI WONDERSWAN COLOR', 'WSC'],\n },\n {\n key: 'ARCADE',\n label: 'Arcade (FBNeo)',\n fullName: 'Arcade',\n slug: 'arcade',\n extensions: ['.zip'],\n core: 'fbneo',\n dbNames: ['Arcade', 'MAME', 'FBNeo', 'FinalBurn Neo'],\n iconName: 'ARCADE',\n color: 'group-hover:text-[#E91E63]',\n accentHex: '#E91E63', // Arcade Neon Pink\n aliases: ['MAME', 'CPS1', 'CPS2', 'CPS3', 'FBNEO', 'FINALBURN', 'SYSTEM16', 'SEGA SYSTEM 16'],\n biosNeeded: true,\n },\n {\n key: 'C64',\n label: 'Commodore 64',\n fullName: 'Commodore 64',\n slug: 'c64',\n extensions: ['.d64', '.t64', '.tap', '.prg', '.crt'],\n core: 'vice_x64',\n dbNames: ['Commodore 64'],\n iconName: 'C64',\n color: 'group-hover:text-[#546E7A]',\n accentHex: '#546E7A', // C64 Blue-Grey\n aliases: ['C64', 'COMMODORE 64'],\n },\n];\n","/**\n * Unified System Configuration\n * \n * SINGLE SOURCE OF TRUTH for all system-related data:\n * - Canonical system keys (used internally)\n * - File extensions → system detection\n * - System → RetroArch emulator core\n * - System → Database names (for LaunchBox matching)\n * - System → Display metadata (UI labels, colors, icons)\n * \n * All other files should import from here instead of maintaining their own mappings.\n */\n\nimport { SYSTEMS, SystemConfig } from '../data/systems-data';\n\nexport type { SystemConfig };\nexport { SYSTEMS };\n\n// ============ Lookup Maps (built from SYSTEMS) ============\n\n// Key → System config\nconst systemByKey = new Map<string, SystemConfig>();\n\n// Alias (uppercase) → System config\nconst systemByAlias = new Map<string, SystemConfig>();\n\n// Extension (lowercase) → System config\nconst systemByExtension = new Map<string, SystemConfig>();\n\n// DB name (lowercase) → System config\nconst systemByDbName = new Map<string, SystemConfig>();\n\n// Build all lookup maps\nfor (const sys of SYSTEMS) {\n // By key\n systemByKey.set(sys.key, sys);\n\n // By aliases (include key itself)\n systemByAlias.set(sys.key.toUpperCase(), sys);\n for (const alias of sys.aliases) {\n systemByAlias.set(alias.toUpperCase(), sys);\n }\n\n // By extension\n for (const ext of sys.extensions) {\n systemByExtension.set(ext.toLowerCase(), sys);\n }\n\n // By DB name\n for (const dbName of sys.dbNames) {\n systemByDbName.set(dbName.toLowerCase(), sys);\n }\n}\n\n// ============ Public API ============\n\n/**\n * Get system by canonical key (e.g., 'NES', 'GBA')\n */\nexport function getSystemByKey(key: string): SystemConfig | undefined {\n return systemByKey.get(key);\n}\n\n/**\n * Get system by any name/alias (case-insensitive)\n * Tries: exact key match, then alias match\n */\nexport function getSystem(name: string): SystemConfig | undefined {\n const upper = name.toUpperCase().trim();\n return systemByAlias.get(upper);\n}\n\n/**\n * Get system from file extension (e.g., '.nes', '.gba')\n */\nexport function getSystemFromExtension(filename: string): SystemConfig | undefined {\n const match = filename.match(/\\.[^.]+$/);\n if (!match) return undefined;\n return systemByExtension.get(match[0].toLowerCase());\n}\n\n/**\n * Get system by database name (for LaunchBox matching)\n */\nexport function getSystemByDbName(dbName: string): SystemConfig | undefined {\n return systemByDbName.get(dbName.toLowerCase());\n}\n\n/**\n * Get RetroArch core for a system name (case-insensitive)\n * Falls back to 'fceumm' (NES) if not found\n */\nexport function getCore(systemName: string): string {\n const sys = getSystem(systemName);\n return sys?.core ?? 'fceumm';\n}\n\n/**\n * Get the core source for a system (nostalgist or emulatorjs)\n * Returns undefined if using default (nostalgist)\n */\nexport function getCoreSource(systemName: string): 'nostalgist' | 'emulatorjs' | 'linuxserver' | undefined {\n const sys = getSystem(systemName);\n return sys?.coreSource;\n}\n\n/**\n * Get DB names for matching (used in game search)\n */\nexport function getDBSystemNames(systemKey: string): string[] {\n const sys = getSystem(systemKey);\n return sys?.dbNames ?? [systemKey];\n}\n\n/**\n * Check if a system is supported\n */\nexport function isSystemSupported(name: string): boolean {\n return getSystem(name) !== undefined;\n}\n\n/**\n * Get all supported extensions\n */\nexport function getSupportedExtensions(): string[] {\n const exts = new Set<string>();\n for (const sys of SYSTEMS) {\n for (const ext of sys.extensions) {\n exts.add(ext);\n }\n }\n // Add .zip as special case (handled separately)\n exts.add('.zip');\n return Array.from(exts);\n}\n\n/**\n * Get all systems for UI dropdown\n */\nexport function getSystemsList(): Array<{ value: string; label: string; iconName: string; color: string }> {\n return SYSTEMS.map(sys => ({\n value: sys.key,\n label: sys.label,\n iconName: sys.iconName,\n color: sys.color,\n }));\n}\n\n/**\n * Detect system from filename\n * Returns null for ZIP files (user must select)\n */\nexport function detectSystem(filename: string): SystemConfig | undefined {\n const ext = filename.match(/\\.[^.]+$/)?.[0]?.toLowerCase();\n if (ext === '.zip') return undefined;\n return getSystemFromExtension(filename);\n}\n\n/**\n * Check if two system names refer to the same platform\n */\nexport function systemsMatch(name1: string, name2: string): boolean {\n const sys1 = getSystem(name1);\n const sys2 = getSystem(name2);\n if (!sys1 || !sys2) return false;\n return sys1.key === sys2.key;\n}\n\n/**\n * Normalize a system name to its canonical key\n */\nexport function normalizeSystemKey(name: string): string {\n const sys = getSystem(name);\n return sys?.key ?? name;\n}\n\n/**\n * Get max file size in MB for a system (default: 100MB, CD-based: 700MB)\n */\nexport function getMaxFileSizeMB(systemName: string): number {\n const sys = getSystem(systemName);\n return sys?.maxFileSizeMB ?? 100;\n}\n\n// Legacy export names for backward compatibility\nexport const SUPPORTED_EXTENSIONS = getSupportedExtensions();\n\n// Performance Optimization Tiers\n// ===============================\n// Systems are grouped by CPU complexity to apply optimal RetroArch settings.\n// See useEmulatorCore.ts getOptimizedConfig() for the actual settings applied.\n\n/**\n * TIER 1: \"Zero Lag\" - Lightweight Systems\n * ----------------------------------------\n * These 8-bit and 16-bit systems have low CPU requirements in WASM,\n * allowing us to enable Run-Ahead (frame prediction) for near-zero input latency.\n * \n * Run-Ahead works by running the emulator ahead by 1 frame and using that\n * result for display, effectively cutting 1 frame (~16ms) of input lag.\n */\nexport const PERFORMANCE_TIER_1_SYSTEMS = new Set([\n 'NES', 'SNES', 'GENESIS', 'GB', 'GBC',\n 'MASTER_SYSTEM', 'GAME_GEAR', 'PC_ENGINE',\n 'ATARI_2600', 'ATARI_7800', 'LYNX',\n 'NEOGEO_POCKET', 'NEOGEO_POCKET_COLOR',\n 'WONDERSWAN', 'WONDERSWAN_COLOR'\n]);\n\n/**\n * TIER 2: \"Max Smoothness\" - Heavy Systems\n * ----------------------------------------\n * These 32-bit+ systems push WASM hard. Run-Ahead would cause stuttering.\n * Instead, we optimize for smooth, consistent frame delivery:\n * - Threaded video rendering to prevent UI freezes\n * - Larger audio buffers to prevent crackling\n * - Disabled manual rewind capture (saves RAM and CPU cycles)\n */\nexport const PERFORMANCE_TIER_2_SYSTEMS = new Set([\n 'PS1', 'N64', 'GBA', 'SATURN', 'DREAMCAST',\n 'NDS', 'PSP', 'ARCADE', 'DOS', 'NEOGEO'\n]);\n\n"]}
|
package/package.json
CHANGED