emoemu 0.1.0

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.
Files changed (213) hide show
  1. package/.claude/settings.local.json +77 -0
  2. package/.node-version +1 -0
  3. package/CLAUDE.md +435 -0
  4. package/README.md +404 -0
  5. package/TODO.md +655 -0
  6. package/dist/index.cjs +25108 -0
  7. package/dist/index.d.ts +1 -0
  8. package/dist/index.js +25085 -0
  9. package/docs/building-libretro-cores-arm-mac.md +237 -0
  10. package/docs/config-file-format.md +488 -0
  11. package/docs/cores-trd.md +425 -0
  12. package/docs/headless-hardware-rendering-trd.md +676 -0
  13. package/docs/libretro-cores-trd.md +997 -0
  14. package/docs/mupen64-software-rendering-trd.md +751 -0
  15. package/docs/n64-support-trd.md +306 -0
  16. package/docs/native-rendering-trd.md +540 -0
  17. package/docs/native-ui-rendering-trd.md +1195 -0
  18. package/docs/netplay-trd.md +665 -0
  19. package/docs/retroarch-netplay-docs.md +277 -0
  20. package/docs/save-state-format.md +666 -0
  21. package/eslint.config.js +111 -0
  22. package/icon/icon.png +0 -0
  23. package/icon/icon.pxd +0 -0
  24. package/package.json +63 -0
  25. package/pnpm-workspace.yaml +10 -0
  26. package/src/Emulator/consts.ts +14 -0
  27. package/src/Emulator/index.ts +2496 -0
  28. package/src/Emulator/saveState/index.ts +155 -0
  29. package/src/Emulator/screenshot/index.ts +160 -0
  30. package/src/Emulator/terminalDimensions/index.ts +79 -0
  31. package/src/Emulator/types.ts +83 -0
  32. package/src/cli/commands/consts.ts +10 -0
  33. package/src/cli/commands/index.ts +462 -0
  34. package/src/cli/parseArgs/consts.ts +17 -0
  35. package/src/cli/parseArgs/index.ts +457 -0
  36. package/src/cli/parseArgs/types.ts +61 -0
  37. package/src/cli/runEmulator/index.ts +406 -0
  38. package/src/cli/runEmulator/types.ts +7 -0
  39. package/src/consts.ts +19 -0
  40. package/src/core/button/consts.ts +35 -0
  41. package/src/core/button/index.ts +123 -0
  42. package/src/core/core.ts +300 -0
  43. package/src/core/index.ts +19 -0
  44. package/src/cores/libretro/api/index.ts +334 -0
  45. package/src/cores/libretro/api/types.ts +148 -0
  46. package/src/cores/libretro/callbacks/consts.ts +41 -0
  47. package/src/cores/libretro/callbacks/index.ts +456 -0
  48. package/src/cores/libretro/consts.ts +45 -0
  49. package/src/cores/libretro/coreOptions/consts.ts +36 -0
  50. package/src/cores/libretro/coreOptions/index.ts +222 -0
  51. package/src/cores/libretro/environment/consts.ts +118 -0
  52. package/src/cores/libretro/environment/index.ts +1095 -0
  53. package/src/cores/libretro/index.ts +937 -0
  54. package/src/cores/libretro/loader/index.ts +496 -0
  55. package/src/cores/libretro/pixelFormat/consts.ts +43 -0
  56. package/src/cores/libretro/pixelFormat/index.ts +397 -0
  57. package/src/cores/libretro/types.ts +339 -0
  58. package/src/frontend/AudioManager/index.ts +420 -0
  59. package/src/frontend/SettingsManager/index.ts +250 -0
  60. package/src/frontend/config/index.ts +608 -0
  61. package/src/frontend/config/tests.ts +354 -0
  62. package/src/frontend/config/types.ts +36 -0
  63. package/src/frontend/consts.ts +114 -0
  64. package/src/frontend/coreBuilder/index.ts +644 -0
  65. package/src/frontend/coreBuilder/types.ts +15 -0
  66. package/src/frontend/coreDownloader/index.ts +620 -0
  67. package/src/frontend/coreDownloader/types.ts +17 -0
  68. package/src/frontend/corePreferences/index.ts +69 -0
  69. package/src/frontend/coreRegistry/index.ts +276 -0
  70. package/src/frontend/directoryCache/index.ts +75 -0
  71. package/src/frontend/index.ts +79 -0
  72. package/src/frontend/notifications/consts.ts +14 -0
  73. package/src/frontend/notifications/index.ts +250 -0
  74. package/src/frontend/playlist/consts.ts +168 -0
  75. package/src/frontend/playlist/index.ts +899 -0
  76. package/src/frontend/playlist/labelFormatter/consts.ts +15 -0
  77. package/src/frontend/playlist/labelFormatter/index.ts +155 -0
  78. package/src/frontend/playlist/labelFormatter/tests.ts +153 -0
  79. package/src/frontend/playlist/reader/index.ts +559 -0
  80. package/src/frontend/playlist/sync/index.ts +511 -0
  81. package/src/frontend/playlist/systemLookup/index.ts +233 -0
  82. package/src/frontend/playlist/utils/index.ts +50 -0
  83. package/src/frontend/romScanner/consts.ts +348 -0
  84. package/src/frontend/romScanner/index.ts +1957 -0
  85. package/src/frontend/saveServices/consts.ts +2 -0
  86. package/src/frontend/saveServices/index.ts +313 -0
  87. package/src/frontend/serviceProvider/index.ts +108 -0
  88. package/src/frontend/serviceProvider/types.ts +13 -0
  89. package/src/index.ts +428 -0
  90. package/src/input/Controller/consts.ts +50 -0
  91. package/src/input/Controller/index.ts +81 -0
  92. package/src/input/GamepadManager/consts.ts +22 -0
  93. package/src/input/GamepadManager/index.ts +418 -0
  94. package/src/input/InputManager/consts.ts +86 -0
  95. package/src/input/InputManager/index.ts +593 -0
  96. package/src/input/InputMapper/consts.ts +33 -0
  97. package/src/input/InputMapper/index.ts +436 -0
  98. package/src/input/consts.ts +410 -0
  99. package/src/input/gamepadProfiles/index.ts +1100 -0
  100. package/src/input/index.ts +38 -0
  101. package/src/input/inputUtils/index.ts +31 -0
  102. package/src/netplay/FrameBuffer/consts.ts +2 -0
  103. package/src/netplay/FrameBuffer/index.ts +364 -0
  104. package/src/netplay/FrameBuffer/tests.ts +286 -0
  105. package/src/netplay/InputBuffer/consts.ts +7 -0
  106. package/src/netplay/InputBuffer/index.ts +347 -0
  107. package/src/netplay/InputBuffer/tests.ts +166 -0
  108. package/src/netplay/NetplayClient/index.ts +976 -0
  109. package/src/netplay/NetplayConnection/index.ts +536 -0
  110. package/src/netplay/NetplayDiscovery/consts.ts +41 -0
  111. package/src/netplay/NetplayDiscovery/index.ts +525 -0
  112. package/src/netplay/NetplayServer/index.ts +1407 -0
  113. package/src/netplay/SyncManager/index.ts +984 -0
  114. package/src/netplay/SyncManager/tests.ts +419 -0
  115. package/src/netplay/consts.ts +371 -0
  116. package/src/netplay/crc32/consts.ts +14 -0
  117. package/src/netplay/crc32/index.ts +97 -0
  118. package/src/netplay/crc32/tests.ts +40 -0
  119. package/src/netplay/index.ts +41 -0
  120. package/src/netplay/netplayLogger/consts.ts +30 -0
  121. package/src/netplay/netplayLogger/index.ts +345 -0
  122. package/src/netplay/protocol/consts.ts +86 -0
  123. package/src/netplay/protocol/index.ts +1280 -0
  124. package/src/netplay/protocol/tests.ts +606 -0
  125. package/src/netplay/protocol/types.ts +20 -0
  126. package/src/netplay/types.ts +395 -0
  127. package/src/rendering/KittyRenderer/index.ts +616 -0
  128. package/src/rendering/NativeRenderer/index.ts +279 -0
  129. package/src/rendering/NativeRenderer/tests.ts +133 -0
  130. package/src/rendering/TerminalRenderer/index.ts +770 -0
  131. package/src/rendering/consts.ts +401 -0
  132. package/src/rendering/fonts/CozetteVector.ttf +0 -0
  133. package/src/rendering/index.ts +26 -0
  134. package/src/rendering/nativeUi/NativeWindowManager/index.ts +158 -0
  135. package/src/rendering/nativeUi/NativeWindowManager/tests.ts +81 -0
  136. package/src/rendering/nativeUi/consts.ts +6 -0
  137. package/src/rendering/nativeUi/index.ts +20 -0
  138. package/src/rendering/postProcessing/consts.ts +38 -0
  139. package/src/rendering/postProcessing/index.ts +923 -0
  140. package/src/rendering/shared/ansi/consts.ts +12 -0
  141. package/src/rendering/shared/ansi/index.ts +104 -0
  142. package/src/rendering/shared/consts.ts +2 -0
  143. package/src/rendering/shared/fitToTerminal/index.ts +67 -0
  144. package/src/ui/AddRomsPrompt/consts.ts +13 -0
  145. package/src/ui/AddRomsPrompt/index.tsx +781 -0
  146. package/src/ui/App/consts.ts +2 -0
  147. package/src/ui/App/index.tsx +456 -0
  148. package/src/ui/AppCapabilities/index.tsx +67 -0
  149. package/src/ui/ConfigContext/index.tsx +56 -0
  150. package/src/ui/CoreManager/consts.ts +11 -0
  151. package/src/ui/CoreManager/index.tsx +779 -0
  152. package/src/ui/CoreSelector/consts.ts +2 -0
  153. package/src/ui/CoreSelector/index.tsx +251 -0
  154. package/src/ui/DialogContainer/index.tsx +42 -0
  155. package/src/ui/DialogOptionsList/index.tsx +61 -0
  156. package/src/ui/DuplicateCrcPrompt/consts.ts +5 -0
  157. package/src/ui/DuplicateCrcPrompt/index.tsx +146 -0
  158. package/src/ui/GamepadContext/consts.ts +15 -0
  159. package/src/ui/GamepadContext/index.tsx +295 -0
  160. package/src/ui/NativeDialog/index.tsx +120 -0
  161. package/src/ui/NetplayDisconnectedDialog/index.tsx +93 -0
  162. package/src/ui/NetplayPauseMenu/consts.ts +2 -0
  163. package/src/ui/NetplayPauseMenu/index.tsx +97 -0
  164. package/src/ui/RomBrowser/NetplayPanel/consts.ts +24 -0
  165. package/src/ui/RomBrowser/NetplayPanel/index.tsx +520 -0
  166. package/src/ui/RomBrowser/SettingsPanel/index.tsx +478 -0
  167. package/src/ui/RomBrowser/consts.ts +61 -0
  168. package/src/ui/RomBrowser/index.tsx +1164 -0
  169. package/src/ui/RomBrowser/settingsConfig/index.ts +320 -0
  170. package/src/ui/RomBrowser/types.ts +67 -0
  171. package/src/ui/SaveStateDialog/consts.ts +2 -0
  172. package/src/ui/SaveStateDialog/index.tsx +225 -0
  173. package/src/ui/WarningDialog/index.tsx +113 -0
  174. package/src/ui/consts.ts +27 -0
  175. package/src/ui/hooks/useClearTerminal/consts.ts +2 -0
  176. package/src/ui/hooks/useClearTerminal/index.ts +37 -0
  177. package/src/ui/hooks/useDialogNavigation/index.ts +99 -0
  178. package/src/ui/hooks/useGamepad/consts.ts +21 -0
  179. package/src/ui/hooks/useGamepad/index.ts +194 -0
  180. package/src/ui/index.ts +27 -0
  181. package/src/utils/buffer/consts.ts +17 -0
  182. package/src/utils/buffer/index.ts +129 -0
  183. package/src/utils/color/consts.ts +58 -0
  184. package/src/utils/color/index.ts +183 -0
  185. package/src/utils/compression/consts.ts +50 -0
  186. package/src/utils/compression/index.ts +101 -0
  187. package/src/utils/consts.ts +2 -0
  188. package/src/utils/crc32/consts.ts +22 -0
  189. package/src/utils/crc32/index.ts +83 -0
  190. package/src/utils/ensureDirectory/index.ts +10 -0
  191. package/src/utils/format/consts.ts +8 -0
  192. package/src/utils/format/index.ts +53 -0
  193. package/src/utils/getErrorMessage/index.ts +10 -0
  194. package/src/utils/index.ts +113 -0
  195. package/src/utils/ini/index.ts +200 -0
  196. package/src/utils/kitty/consts.ts +13 -0
  197. package/src/utils/kitty/index.ts +181 -0
  198. package/src/utils/logger/consts.ts +35 -0
  199. package/src/utils/logger/index.ts +217 -0
  200. package/src/utils/paths/consts.ts +18 -0
  201. package/src/utils/paths/index.ts +151 -0
  202. package/src/utils/png/consts.ts +34 -0
  203. package/src/utils/png/index.ts +131 -0
  204. package/src/utils/readJsonFile/index.ts +16 -0
  205. package/src/utils/rotateLogFile/index.ts +44 -0
  206. package/src/utils/safeClose/index.ts +10 -0
  207. package/src/utils/terminal/consts.ts +8 -0
  208. package/src/utils/terminal/index.ts +102 -0
  209. package/src/utils/thumbnailRenderer/consts.ts +2 -0
  210. package/src/utils/thumbnailRenderer/index.ts +147 -0
  211. package/src/utils/typedError/index.ts +26 -0
  212. package/tsconfig.json +31 -0
  213. package/vitest.config.ts +13 -0
@@ -0,0 +1,168 @@
1
+ // =============================================================================
2
+ // Playlist Format Constants
3
+ // =============================================================================
4
+
5
+ /** Current playlist format version (RetroArch 1.7.5+ JSON format) */
6
+ export const PLAYLIST_VERSION = '1.5';
7
+
8
+ /** Label display mode: default (0) shows filename without extension */
9
+ export const LABEL_DISPLAY_MODE_DEFAULT = 0;
10
+
11
+ /** Thumbnail mode: default (0) uses boxart */
12
+ export const THUMBNAIL_MODE_DEFAULT = 0;
13
+
14
+ /** Sort mode: alphabetical (0) */
15
+ export const SORT_MODE_ALPHABETICAL = 0;
16
+
17
+ // =============================================================================
18
+ // RetroArch Database Names
19
+ // =============================================================================
20
+
21
+ /**
22
+ * Maps system IDs and file extensions to RetroArch database names.
23
+ * These match the .lpl filenames used by RetroArch for organizing playlists.
24
+ *
25
+ * Database names follow the format:
26
+ * "Manufacturer - System Name.lpl"
27
+ *
28
+ * Reference: https://github.com/libretro/libretro-database
29
+ */
30
+ export const RETROARCH_DATABASE_NAMES: Record<string, string> = {
31
+ // NES / Famicom
32
+ '.nes': 'Nintendo - Nintendo Entertainment System.lpl',
33
+ 'nes': 'Nintendo - Nintendo Entertainment System.lpl',
34
+
35
+ // Game Boy
36
+ '.gb': 'Nintendo - Game Boy.lpl',
37
+ 'gb': 'Nintendo - Game Boy.lpl',
38
+
39
+ // Game Boy Color
40
+ '.gbc': 'Nintendo - Game Boy Color.lpl',
41
+ 'gbc': 'Nintendo - Game Boy Color.lpl',
42
+
43
+ // Super Nintendo / Super Famicom
44
+ '.sfc': 'Nintendo - Super Nintendo Entertainment System.lpl',
45
+ '.smc': 'Nintendo - Super Nintendo Entertainment System.lpl',
46
+ 'snes': 'Nintendo - Super Nintendo Entertainment System.lpl',
47
+ 'bsnes': 'Nintendo - Super Nintendo Entertainment System.lpl',
48
+ 'snes9x': 'Nintendo - Super Nintendo Entertainment System.lpl',
49
+
50
+ // Game Boy Advance
51
+ '.gba': 'Nintendo - Game Boy Advance.lpl',
52
+ 'gba': 'Nintendo - Game Boy Advance.lpl',
53
+ 'mgba': 'Nintendo - Game Boy Advance.lpl',
54
+
55
+ // Nintendo 64
56
+ '.n64': 'Nintendo - Nintendo 64.lpl',
57
+ '.z64': 'Nintendo - Nintendo 64.lpl',
58
+ '.v64': 'Nintendo - Nintendo 64.lpl',
59
+ 'n64': 'Nintendo - Nintendo 64.lpl',
60
+
61
+ // Nintendo DS
62
+ '.nds': 'Nintendo - Nintendo DS.lpl',
63
+ 'nds': 'Nintendo - Nintendo DS.lpl',
64
+
65
+ // Sega Master System
66
+ '.sms': 'Sega - Master System - Mark III.lpl',
67
+ 'sms': 'Sega - Master System - Mark III.lpl',
68
+
69
+ // Sega Game Gear
70
+ '.gg': 'Sega - Game Gear.lpl',
71
+ 'gg': 'Sega - Game Gear.lpl',
72
+
73
+ // Sega Genesis / Mega Drive
74
+ '.md': 'Sega - Mega Drive - Genesis.lpl',
75
+ '.smd': 'Sega - Mega Drive - Genesis.lpl',
76
+ '.gen': 'Sega - Mega Drive - Genesis.lpl',
77
+ '.bin': 'Sega - Mega Drive - Genesis.lpl', // Note: .bin is ambiguous
78
+ 'genesis': 'Sega - Mega Drive - Genesis.lpl',
79
+ 'picodrive': 'Sega - Mega Drive - Genesis.lpl',
80
+
81
+ // Sega 32X
82
+ '.32x': 'Sega - 32X.lpl',
83
+ '32x': 'Sega - 32X.lpl',
84
+
85
+ // Sega CD
86
+ '.iso': 'Sega - Mega-CD - Sega CD.lpl', // Note: .iso is ambiguous
87
+ '.cue': 'Sega - Mega-CD - Sega CD.lpl', // Note: .cue is ambiguous
88
+ 'segacd': 'Sega - Mega-CD - Sega CD.lpl',
89
+
90
+ // PC Engine / TurboGrafx-16
91
+ '.pce': 'NEC - PC Engine - TurboGrafx 16.lpl',
92
+ 'pce': 'NEC - PC Engine - TurboGrafx 16.lpl',
93
+ 'mednafen_pce': 'NEC - PC Engine - TurboGrafx 16.lpl',
94
+
95
+ // Atari 2600
96
+ '.a26': 'Atari - 2600.lpl',
97
+ 'atari2600': 'Atari - 2600.lpl',
98
+
99
+ // Atari 7800
100
+ '.a78': 'Atari - 7800.lpl',
101
+ 'atari7800': 'Atari - 7800.lpl',
102
+
103
+ // Atari Lynx
104
+ '.lnx': 'Atari - Lynx.lpl',
105
+ 'lynx': 'Atari - Lynx.lpl',
106
+
107
+ // Neo Geo Pocket
108
+ '.ngp': 'SNK - Neo Geo Pocket.lpl',
109
+ 'ngp': 'SNK - Neo Geo Pocket.lpl',
110
+
111
+ // Neo Geo Pocket Color
112
+ '.ngc': 'SNK - Neo Geo Pocket Color.lpl',
113
+ 'ngpc': 'SNK - Neo Geo Pocket Color.lpl',
114
+
115
+ // WonderSwan
116
+ '.ws': 'Bandai - WonderSwan.lpl',
117
+ 'wonderswan': 'Bandai - WonderSwan.lpl',
118
+
119
+ // WonderSwan Color
120
+ '.wsc': 'Bandai - WonderSwan Color.lpl',
121
+ 'wonderswancolor': 'Bandai - WonderSwan Color.lpl',
122
+
123
+ // Virtual Boy
124
+ '.vb': 'Nintendo - Virtual Boy.lpl',
125
+ 'virtualboy': 'Nintendo - Virtual Boy.lpl',
126
+
127
+ // Vectrex
128
+ '.vec': 'GCE - Vectrex.lpl',
129
+ 'vectrex': 'GCE - Vectrex.lpl',
130
+
131
+ // ColecoVision
132
+ '.col': 'Coleco - ColecoVision.lpl',
133
+ 'colecovision': 'Coleco - ColecoVision.lpl',
134
+
135
+ // Intellivision
136
+ '.int': 'Mattel - Intellivision.lpl',
137
+ 'intellivision': 'Mattel - Intellivision.lpl',
138
+
139
+ // PlayStation
140
+ 'psx': 'Sony - PlayStation.lpl',
141
+ 'playstation': 'Sony - PlayStation.lpl',
142
+
143
+ // PlayStation Portable
144
+ 'psp': 'Sony - PlayStation Portable.lpl',
145
+ };
146
+
147
+ /**
148
+ * Default database name for unknown systems.
149
+ * Used when no specific mapping exists.
150
+ */
151
+ export const DEFAULT_DATABASE_NAME = 'Unknown System.lpl';
152
+
153
+ // =============================================================================
154
+ // Path Constants
155
+ // =============================================================================
156
+
157
+ /** Windows path separator */
158
+ export const WINDOWS_PATH_SEP = '\\';
159
+
160
+ /** Unix path separator */
161
+ export const UNIX_PATH_SEP = '/';
162
+
163
+ // =============================================================================
164
+ // File Extension Constants
165
+ // =============================================================================
166
+
167
+ /** RetroArch playlist file extension */
168
+ export const PLAYLIST_EXTENSION = '.lpl';