@datamoc/mw_games 0.42.0 → 0.44.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.
Files changed (333) hide show
  1. package/CHANGELOG.md +126 -0
  2. package/README.md +84 -1
  3. package/REFERENCE.md +134 -6
  4. package/api-surface.json +1814 -116
  5. package/data/microgm-essential.PROVENANCE.md +13 -0
  6. package/data/microgm-essential.sf2 +0 -0
  7. package/data/soundfont-catalog.json +8 -0
  8. package/dist/actors/Resource.d.ts.map +1 -1
  9. package/dist/actors/Resource.js +2 -3
  10. package/dist/actors/Resource.js.map +1 -1
  11. package/dist/audio/AdaptiveMusic.d.ts +85 -0
  12. package/dist/audio/AdaptiveMusic.d.ts.map +1 -0
  13. package/dist/audio/AdaptiveMusic.js +230 -0
  14. package/dist/audio/AdaptiveMusic.js.map +1 -0
  15. package/dist/audio/AudioLoader.d.ts +33 -0
  16. package/dist/audio/AudioLoader.d.ts.map +1 -0
  17. package/dist/audio/AudioLoader.js +58 -0
  18. package/dist/audio/AudioLoader.js.map +1 -0
  19. package/dist/audio/AudioViews.d.ts +70 -0
  20. package/dist/audio/AudioViews.d.ts.map +1 -0
  21. package/dist/audio/AudioViews.js +119 -0
  22. package/dist/audio/AudioViews.js.map +1 -0
  23. package/dist/audio/BusBudget.d.ts +89 -0
  24. package/dist/audio/BusBudget.d.ts.map +1 -0
  25. package/dist/audio/BusBudget.js +120 -0
  26. package/dist/audio/BusBudget.js.map +1 -0
  27. package/dist/audio/Channels.d.ts +66 -1
  28. package/dist/audio/Channels.d.ts.map +1 -1
  29. package/dist/audio/Channels.js +119 -31
  30. package/dist/audio/Channels.js.map +1 -1
  31. package/dist/audio/CoreHost.d.ts +114 -0
  32. package/dist/audio/CoreHost.d.ts.map +1 -0
  33. package/dist/audio/CoreHost.js +335 -0
  34. package/dist/audio/CoreHost.js.map +1 -0
  35. package/dist/audio/DecoderGuard.d.ts +139 -0
  36. package/dist/audio/DecoderGuard.d.ts.map +1 -0
  37. package/dist/audio/DecoderGuard.js +208 -0
  38. package/dist/audio/DecoderGuard.js.map +1 -0
  39. package/dist/audio/Fft.d.ts +3 -0
  40. package/dist/audio/Fft.d.ts.map +1 -0
  41. package/dist/audio/Fft.js +45 -0
  42. package/dist/audio/Fft.js.map +1 -0
  43. package/dist/audio/LoopTags.d.ts +18 -0
  44. package/dist/audio/LoopTags.d.ts.map +1 -1
  45. package/dist/audio/LoopTags.js +20 -0
  46. package/dist/audio/LoopTags.js.map +1 -1
  47. package/dist/audio/Midi.d.ts +35 -0
  48. package/dist/audio/Midi.d.ts.map +1 -1
  49. package/dist/audio/Midi.js +71 -1
  50. package/dist/audio/Midi.js.map +1 -1
  51. package/dist/audio/MidiRender.d.ts +47 -0
  52. package/dist/audio/MidiRender.d.ts.map +1 -1
  53. package/dist/audio/MidiRender.js +100 -2
  54. package/dist/audio/MidiRender.js.map +1 -1
  55. package/dist/audio/MidiSynth.d.ts +147 -0
  56. package/dist/audio/MidiSynth.d.ts.map +1 -0
  57. package/dist/audio/MidiSynth.js +205 -0
  58. package/dist/audio/MidiSynth.js.map +1 -0
  59. package/dist/audio/MusicPlayer.d.ts +80 -0
  60. package/dist/audio/MusicPlayer.d.ts.map +1 -0
  61. package/dist/audio/MusicPlayer.js +147 -0
  62. package/dist/audio/MusicPlayer.js.map +1 -0
  63. package/dist/audio/Playable.d.ts +7 -0
  64. package/dist/audio/Playable.d.ts.map +1 -1
  65. package/dist/audio/Playable.js.map +1 -1
  66. package/dist/audio/Positional.d.ts +12 -4
  67. package/dist/audio/Positional.d.ts.map +1 -1
  68. package/dist/audio/Positional.js +5 -2
  69. package/dist/audio/Positional.js.map +1 -1
  70. package/dist/audio/Resample.d.ts +61 -0
  71. package/dist/audio/Resample.d.ts.map +1 -0
  72. package/dist/audio/Resample.js +97 -0
  73. package/dist/audio/Resample.js.map +1 -0
  74. package/dist/audio/SampleDecoder.d.ts +16 -2
  75. package/dist/audio/SampleDecoder.d.ts.map +1 -1
  76. package/dist/audio/SampleDecoder.js +10 -6
  77. package/dist/audio/SampleDecoder.js.map +1 -1
  78. package/dist/audio/Settings.d.ts +99 -0
  79. package/dist/audio/Settings.d.ts.map +1 -0
  80. package/dist/audio/Settings.js +134 -0
  81. package/dist/audio/Settings.js.map +1 -0
  82. package/dist/audio/Sfx.d.ts +148 -0
  83. package/dist/audio/Sfx.d.ts.map +1 -0
  84. package/dist/audio/Sfx.js +213 -0
  85. package/dist/audio/Sfx.js.map +1 -0
  86. package/dist/audio/Sound.d.ts +2 -0
  87. package/dist/audio/Sound.d.ts.map +1 -1
  88. package/dist/audio/Sound.js +3 -0
  89. package/dist/audio/Sound.js.map +1 -1
  90. package/dist/audio/SoundFont.d.ts +5 -3
  91. package/dist/audio/SoundFont.d.ts.map +1 -1
  92. package/dist/audio/SoundFont.js +10 -8
  93. package/dist/audio/SoundFont.js.map +1 -1
  94. package/dist/audio/SpectralDistance.d.ts +34 -0
  95. package/dist/audio/SpectralDistance.d.ts.map +1 -0
  96. package/dist/audio/SpectralDistance.js +64 -0
  97. package/dist/audio/SpectralDistance.js.map +1 -0
  98. package/dist/audio/StreamChannel.d.ts +150 -0
  99. package/dist/audio/StreamChannel.d.ts.map +1 -0
  100. package/dist/audio/StreamChannel.js +390 -0
  101. package/dist/audio/StreamChannel.js.map +1 -0
  102. package/dist/audio/StreamPlayable.d.ts +73 -0
  103. package/dist/audio/StreamPlayable.d.ts.map +1 -0
  104. package/dist/audio/StreamPlayable.js +130 -0
  105. package/dist/audio/StreamPlayable.js.map +1 -0
  106. package/dist/audio/Synth.d.ts +1 -1
  107. package/dist/audio/Synth.d.ts.map +1 -1
  108. package/dist/audio/Synth.js +4 -0
  109. package/dist/audio/Synth.js.map +1 -1
  110. package/dist/audio/SyxBank.d.ts +73 -0
  111. package/dist/audio/SyxBank.d.ts.map +1 -0
  112. package/dist/audio/SyxBank.js +130 -0
  113. package/dist/audio/SyxBank.js.map +1 -0
  114. package/dist/audio/Underrun.d.ts +25 -0
  115. package/dist/audio/Underrun.d.ts.map +1 -0
  116. package/dist/audio/Underrun.js +18 -0
  117. package/dist/audio/Underrun.js.map +1 -0
  118. package/dist/audio/Wav.d.ts +56 -0
  119. package/dist/audio/Wav.d.ts.map +1 -0
  120. package/dist/audio/Wav.js +164 -0
  121. package/dist/audio/Wav.js.map +1 -0
  122. package/dist/audio/WebMidi.d.ts +58 -0
  123. package/dist/audio/WebMidi.d.ts.map +1 -0
  124. package/dist/audio/WebMidi.js +79 -0
  125. package/dist/audio/WebMidi.js.map +1 -0
  126. package/dist/audio/humanize/Onsets.d.ts.map +1 -1
  127. package/dist/audio/humanize/Onsets.js +1 -44
  128. package/dist/audio/humanize/Onsets.js.map +1 -1
  129. package/dist/audio/index.d.ts +43 -7
  130. package/dist/audio/index.d.ts.map +1 -1
  131. package/dist/audio/index.js +21 -3
  132. package/dist/audio/index.js.map +1 -1
  133. package/dist/battle/AttackPreview.d.ts.map +1 -1
  134. package/dist/battle/AttackPreview.js +8 -8
  135. package/dist/battle/AttackPreview.js.map +1 -1
  136. package/dist/battle/StatStages.d.ts.map +1 -1
  137. package/dist/battle/StatStages.js +2 -1
  138. package/dist/battle/StatStages.js.map +1 -1
  139. package/dist/board/Engine.d.ts +2 -0
  140. package/dist/board/Engine.d.ts.map +1 -1
  141. package/dist/board/Engine.js +1 -1
  142. package/dist/board/Engine.js.map +1 -1
  143. package/dist/board/HexSkirmish.d.ts.map +1 -1
  144. package/dist/board/HexSkirmish.js +11 -72
  145. package/dist/board/HexSkirmish.js.map +1 -1
  146. package/dist/board/Tactics.d.ts.map +1 -1
  147. package/dist/board/Tactics.js +3 -5
  148. package/dist/board/Tactics.js.map +1 -1
  149. package/dist/board/tourney.d.ts.map +1 -1
  150. package/dist/board/tourney.js +2 -19
  151. package/dist/board/tourney.js.map +1 -1
  152. package/dist/core/Handles.js +7 -7
  153. package/dist/core/Handles.js.map +1 -1
  154. package/dist/mw_games.global.js +25 -22
  155. package/dist/mwl/conditions.d.ts +12 -0
  156. package/dist/mwl/conditions.d.ts.map +1 -1
  157. package/dist/mwl/conditions.js +49 -8
  158. package/dist/mwl/conditions.js.map +1 -1
  159. package/dist/mwl/index.d.ts +13 -0
  160. package/dist/mwl/index.d.ts.map +1 -1
  161. package/dist/mwl/index.js +7 -0
  162. package/dist/mwl/index.js.map +1 -1
  163. package/dist/mwl/objects.d.ts +31 -0
  164. package/dist/mwl/objects.d.ts.map +1 -0
  165. package/dist/mwl/objects.js +83 -0
  166. package/dist/mwl/objects.js.map +1 -0
  167. package/dist/mwl/package-container.d.ts +185 -0
  168. package/dist/mwl/package-container.d.ts.map +1 -0
  169. package/dist/mwl/package-container.js +446 -0
  170. package/dist/mwl/package-container.js.map +1 -0
  171. package/dist/mwl/package-document.d.ts +217 -0
  172. package/dist/mwl/package-document.d.ts.map +1 -0
  173. package/dist/mwl/package-document.js +639 -0
  174. package/dist/mwl/package-document.js.map +1 -0
  175. package/dist/mwl/package-rom.d.ts +37 -0
  176. package/dist/mwl/package-rom.d.ts.map +1 -0
  177. package/dist/mwl/package-rom.js +96 -0
  178. package/dist/mwl/package-rom.js.map +1 -0
  179. package/dist/mwl/package-verify.d.ts +34 -0
  180. package/dist/mwl/package-verify.d.ts.map +1 -0
  181. package/dist/mwl/package-verify.js +111 -0
  182. package/dist/mwl/package-verify.js.map +1 -0
  183. package/dist/mwl/package.d.ts +184 -0
  184. package/dist/mwl/package.d.ts.map +1 -0
  185. package/dist/mwl/package.js +382 -0
  186. package/dist/mwl/package.js.map +1 -0
  187. package/dist/mwl/schema.d.ts +1 -1
  188. package/dist/mwl/schema.d.ts.map +1 -1
  189. package/dist/mwl/tables.d.ts +2 -0
  190. package/dist/mwl/tables.d.ts.map +1 -1
  191. package/dist/mwl/tables.js +13 -0
  192. package/dist/mwl/tables.js.map +1 -1
  193. package/dist/physics/PhysicsWorld.d.ts.map +1 -1
  194. package/dist/physics/PhysicsWorld.js +4 -3
  195. package/dist/physics/PhysicsWorld.js.map +1 -1
  196. package/dist/physics/XpbdWorld.d.ts +23 -5
  197. package/dist/physics/XpbdWorld.d.ts.map +1 -1
  198. package/dist/physics/XpbdWorld.js +91 -6
  199. package/dist/physics/XpbdWorld.js.map +1 -1
  200. package/dist/testing/FakeAudio.d.ts +149 -0
  201. package/dist/testing/FakeAudio.d.ts.map +1 -0
  202. package/dist/testing/FakeAudio.js +219 -0
  203. package/dist/testing/FakeAudio.js.map +1 -0
  204. package/dist/testing/index.d.ts +18 -0
  205. package/dist/testing/index.d.ts.map +1 -1
  206. package/dist/testing/index.js +22 -0
  207. package/dist/testing/index.js.map +1 -1
  208. package/dist/threads/index.d.ts +2 -2
  209. package/dist/threads/index.d.ts.map +1 -1
  210. package/dist/threads/index.js +1 -1
  211. package/dist/threads/index.js.map +1 -1
  212. package/dist/threads/spawn.d.ts +32 -0
  213. package/dist/threads/spawn.d.ts.map +1 -1
  214. package/dist/threads/spawn.js +35 -11
  215. package/dist/threads/spawn.js.map +1 -1
  216. package/dist/three-d/Collision3D.d.ts +46 -2
  217. package/dist/three-d/Collision3D.d.ts.map +1 -1
  218. package/dist/three-d/Collision3D.js +46 -2
  219. package/dist/three-d/Collision3D.js.map +1 -1
  220. package/dist/three-d/Grid.d.ts +12 -1
  221. package/dist/three-d/Grid.d.ts.map +1 -1
  222. package/dist/three-d/Grid.js +12 -1
  223. package/dist/three-d/Grid.js.map +1 -1
  224. package/dist/three-d/Vox.d.ts +13 -1
  225. package/dist/three-d/Vox.d.ts.map +1 -1
  226. package/dist/three-d/Vox.js +13 -1
  227. package/dist/three-d/Vox.js.map +1 -1
  228. package/dist/two-d/Game.d.ts +32 -1
  229. package/dist/two-d/Game.d.ts.map +1 -1
  230. package/dist/two-d/Game.js +105 -14
  231. package/dist/two-d/Game.js.map +1 -1
  232. package/dist/two-d/Scene2D.d.ts +24 -0
  233. package/dist/two-d/Scene2D.d.ts.map +1 -1
  234. package/dist/two-d/Scene2D.js +30 -0
  235. package/dist/two-d/Scene2D.js.map +1 -1
  236. package/dist/two-d/render/HazeLayer.d.ts.map +1 -1
  237. package/dist/two-d/render/HazeLayer.js +2 -1
  238. package/dist/two-d/render/HazeLayer.js.map +1 -1
  239. package/dist/two-d/render/ImageModifiers.d.ts +4 -2
  240. package/dist/two-d/render/ImageModifiers.d.ts.map +1 -1
  241. package/dist/two-d/render/ImageModifiers.js +13 -8
  242. package/dist/two-d/render/ImageModifiers.js.map +1 -1
  243. package/dist/two-d/render/NeonGlow.d.ts.map +1 -1
  244. package/dist/two-d/render/NeonGlow.js +2 -1
  245. package/dist/two-d/render/NeonGlow.js.map +1 -1
  246. package/dist/two-d/render/Particles.d.ts.map +1 -1
  247. package/dist/two-d/render/Particles.js +2 -1
  248. package/dist/two-d/render/Particles.js.map +1 -1
  249. package/dist/two-d/render/SceneTransition.d.ts +301 -0
  250. package/dist/two-d/render/SceneTransition.d.ts.map +1 -0
  251. package/dist/two-d/render/SceneTransition.js +458 -0
  252. package/dist/two-d/render/SceneTransition.js.map +1 -0
  253. package/dist/two-d/render/ScreenEffects.d.ts.map +1 -1
  254. package/dist/two-d/render/ScreenEffects.js +2 -1
  255. package/dist/two-d/render/ScreenEffects.js.map +1 -1
  256. package/dist/two-d/render/SkeletalSprite.d.ts.map +1 -1
  257. package/dist/two-d/render/SkeletalSprite.js +2 -1
  258. package/dist/two-d/render/SkeletalSprite.js.map +1 -1
  259. package/dist/two-d/render/Types2D.d.ts +2 -2
  260. package/dist/two-d/render/Types2D.d.ts.map +1 -1
  261. package/dist/two-d/render/Types2D.js +2 -2
  262. package/dist/two-d/render/Types2D.js.map +1 -1
  263. package/dist/two-d/render/index.d.ts +2 -0
  264. package/dist/two-d/render/index.d.ts.map +1 -1
  265. package/dist/two-d/render/index.js +1 -0
  266. package/dist/two-d/render/index.js.map +1 -1
  267. package/dist/two-d/ui/Bar.d.ts.map +1 -1
  268. package/dist/two-d/ui/Bar.js +3 -5
  269. package/dist/two-d/ui/Bar.js.map +1 -1
  270. package/dist/two-d/ui/Button.d.ts +23 -0
  271. package/dist/two-d/ui/Button.d.ts.map +1 -1
  272. package/dist/two-d/ui/Button.js +37 -0
  273. package/dist/two-d/ui/Button.js.map +1 -1
  274. package/dist/two-d/ui/Dropdown.d.ts +5 -1
  275. package/dist/two-d/ui/Dropdown.d.ts.map +1 -1
  276. package/dist/two-d/ui/Dropdown.js +8 -1
  277. package/dist/two-d/ui/Dropdown.js.map +1 -1
  278. package/dist/two-d/ui/DropdownView.d.ts +63 -3
  279. package/dist/two-d/ui/DropdownView.d.ts.map +1 -1
  280. package/dist/two-d/ui/DropdownView.js +168 -9
  281. package/dist/two-d/ui/DropdownView.js.map +1 -1
  282. package/dist/two-d/ui/FloatingText.d.ts.map +1 -1
  283. package/dist/two-d/ui/FloatingText.js +2 -1
  284. package/dist/two-d/ui/FloatingText.js.map +1 -1
  285. package/dist/two-d/ui/IconGrid.d.ts.map +1 -1
  286. package/dist/two-d/ui/IconGrid.js +2 -1
  287. package/dist/two-d/ui/IconGrid.js.map +1 -1
  288. package/dist/two-d/ui/ListView.d.ts.map +1 -1
  289. package/dist/two-d/ui/ListView.js +2 -1
  290. package/dist/two-d/ui/ListView.js.map +1 -1
  291. package/dist/two-d/ui/ScrollBox.d.ts +96 -0
  292. package/dist/two-d/ui/ScrollBox.d.ts.map +1 -1
  293. package/dist/two-d/ui/ScrollBox.js +218 -5
  294. package/dist/two-d/ui/ScrollBox.js.map +1 -1
  295. package/dist/two-d/ui/ScrollText.d.ts +131 -0
  296. package/dist/two-d/ui/ScrollText.d.ts.map +1 -0
  297. package/dist/two-d/ui/ScrollText.js +218 -0
  298. package/dist/two-d/ui/ScrollText.js.map +1 -0
  299. package/dist/two-d/ui/Slider.d.ts.map +1 -1
  300. package/dist/two-d/ui/Slider.js +4 -4
  301. package/dist/two-d/ui/Slider.js.map +1 -1
  302. package/dist/two-d/ui/Tooltip.d.ts +70 -1
  303. package/dist/two-d/ui/Tooltip.d.ts.map +1 -1
  304. package/dist/two-d/ui/Tooltip.js +115 -3
  305. package/dist/two-d/ui/Tooltip.js.map +1 -1
  306. package/dist/two-d/ui/Window.d.ts +35 -2
  307. package/dist/two-d/ui/Window.d.ts.map +1 -1
  308. package/dist/two-d/ui/Window.js +58 -3
  309. package/dist/two-d/ui/Window.js.map +1 -1
  310. package/dist/two-d/ui/index.d.ts +7 -5
  311. package/dist/two-d/ui/index.d.ts.map +1 -1
  312. package/dist/two-d/ui/index.js +3 -2
  313. package/dist/two-d/ui/index.js.map +1 -1
  314. package/dist/version.d.ts +1 -1
  315. package/dist/version.js +1 -1
  316. package/package.json +14 -3
  317. package/sbom.cdx.json +19 -260
  318. package/tools/audio.d.mts +75 -0
  319. package/tools/audio.mjs +437 -0
  320. package/tools/browser-driver.mjs +3 -3
  321. package/tools/browser-smoke.mjs +19 -2
  322. package/tools/build-tablebases.mjs +7 -3
  323. package/tools/compile-openings.mjs +7 -3
  324. package/tools/compile-resources.d.mts +2 -0
  325. package/tools/compile-resources.mjs +13 -1
  326. package/tools/emit-page.d.mts +6 -0
  327. package/tools/emit-page.mjs +43 -3
  328. package/tools/find-chrome.mjs +4 -2
  329. package/tools/init.mjs +11 -3
  330. package/tools/mwl.mjs +144 -2
  331. package/tools/play-uci.mjs +9 -5
  332. package/tools/vite.mjs +9 -1
  333. package/tools.md +2 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-document.js","sourceRoot":"","sources":["../../src/mwl/package-document.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ export interface RomDetection {
2
+ /** why the bytes were taken for an instrument ROM image */
3
+ readonly reason: 'digest' | 'extension' | 'size';
4
+ /** the label of a registered digest, when that was the reason */
5
+ readonly label?: string;
6
+ /** ready to show: names the file and says what to supply instead */
7
+ readonly message: string;
8
+ }
9
+ /**
10
+ * Adds the SHA-256 of a known instrument ROM image to the refusal list. Digests are kept as
11
+ * lower-case hex and never ship with mwg, so the list is whatever a game or a studio registers.
12
+ *
13
+ * @example
14
+ * ```ts
15
+ * import { detectRomImage, registerRomDigest, sha256Hex } from '@datamoc/mw_games/mwl';
16
+ *
17
+ * const bytes = new Uint8Array([1, 2, 3]);
18
+ * registerRomDigest(await sha256Hex(bytes), 'example ROM');
19
+ * console.log((await detectRomImage(bytes))?.reason); // 'digest'
20
+ * ```
21
+ */
22
+ export declare function registerRomDigest(sha256: string, label: string): void;
23
+ /**
24
+ * Decides whether bytes are an instrument ROM image, which a package must never carry. The
25
+ * answer is a registered digest, a `.rom` extension, or an exact ROM size with no recognised
26
+ * format signature and no text in it. `null` means nothing suggests a ROM.
27
+ *
28
+ * @example
29
+ * ```ts
30
+ * import { detectRomImage } from '@datamoc/mw_games/mwl';
31
+ *
32
+ * const refusal = await detectRomImage(new Uint8Array(65536).fill(0xa5), 'pcm.bin');
33
+ * console.log(refusal?.reason); // 'size'
34
+ * ```
35
+ */
36
+ export declare function detectRomImage(bytes: Uint8Array, name?: string): Promise<RomDetection | null>;
37
+ //# sourceMappingURL=package-rom.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-rom.d.ts","sourceRoot":"","sources":["../../src/mwl/package-rom.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,YAAY;IAC5B,2DAA2D;IAC3D,QAAQ,CAAC,MAAM,EAAE,QAAQ,GAAG,WAAW,GAAG,MAAM,CAAC;IACjD,iEAAiE;IACjE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,oEAAoE;IACpE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CACzB;AAqCD;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAIrE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,cAAc,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,SAAS,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAYnG"}
@@ -0,0 +1,96 @@
1
+ import { sha256Hex } from './package-container.js';
2
+ const digests = new Map();
3
+ /**
4
+ * Sizes an instrument ROM dump typically has: the powers of two from 8 KiB to 2 MiB, which is
5
+ * what a mask ROM or EPROM holds. Size alone proves nothing, so it only counts for bytes that
6
+ * also carry no recognised signature and are not text.
7
+ */
8
+ const ROM_SIZES = new Set(Array.from({ length: 9 }, (_, index) => 8192 << index));
9
+ const SIGNATURES = [
10
+ [0x89, 0x50, 0x4e, 0x47], // PNG
11
+ [0xff, 0xd8, 0xff], // JPEG
12
+ [0x47, 0x49, 0x46, 0x38], // GIF
13
+ [0x52, 0x49, 0x46, 0x46], // RIFF: WAV, SF2, AVI, WebP
14
+ [0x4f, 0x67, 0x67, 0x53], // Ogg
15
+ [0x49, 0x44, 0x33], // MP3 with an ID3 tag
16
+ [0x66, 0x4c, 0x61, 0x43], // FLAC
17
+ [0x4d, 0x54, 0x68, 0x64], // Standard MIDI File
18
+ [0x4d, 0x57, 0x50, 0x31], // MWP1
19
+ [0x50, 0x4b, 0x03, 0x04], // ZIP
20
+ [0x1f, 0x8b], // gzip
21
+ [0x46, 0x4f, 0x52, 0x4d], // IFF/AIFF
22
+ [0x59, 0x4d, 0x35, 0x21], // YM5!
23
+ [0x59, 0x4d, 0x36, 0x21], // YM6!
24
+ [0x56, 0x67, 0x6d, 0x20], // Vgm
25
+ [0x50, 0x53, 0x49, 0x44], // PSID
26
+ [0x52, 0x53, 0x49, 0x44], // RSID
27
+ [0x4e, 0x45, 0x53, 0x4d], // NSF
28
+ [0x49, 0x4d, 0x50, 0x4d], // Impulse Tracker
29
+ [0x45, 0x78, 0x74, 0x65, 0x6e], // Extended Module
30
+ [0x77, 0x4f, 0x46], // WOFF / WOFF2
31
+ [0x00, 0x01, 0x00, 0x00], // TrueType
32
+ [0x4f, 0x54, 0x54, 0x4f], // OpenType
33
+ ];
34
+ /**
35
+ * Adds the SHA-256 of a known instrument ROM image to the refusal list. Digests are kept as
36
+ * lower-case hex and never ship with mwg, so the list is whatever a game or a studio registers.
37
+ *
38
+ * @example
39
+ * ```ts
40
+ * import { detectRomImage, registerRomDigest, sha256Hex } from '@datamoc/mw_games/mwl';
41
+ *
42
+ * const bytes = new Uint8Array([1, 2, 3]);
43
+ * registerRomDigest(await sha256Hex(bytes), 'example ROM');
44
+ * console.log((await detectRomImage(bytes))?.reason); // 'digest'
45
+ * ```
46
+ */
47
+ export function registerRomDigest(sha256, label) {
48
+ const key = sha256.toLowerCase();
49
+ if (!/^[0-9a-f]{64}$/.test(key))
50
+ throw new Error('a ROM digest is 64 hexadecimal characters');
51
+ digests.set(key, label);
52
+ }
53
+ /**
54
+ * Decides whether bytes are an instrument ROM image, which a package must never carry. The
55
+ * answer is a registered digest, a `.rom` extension, or an exact ROM size with no recognised
56
+ * format signature and no text in it. `null` means nothing suggests a ROM.
57
+ *
58
+ * @example
59
+ * ```ts
60
+ * import { detectRomImage } from '@datamoc/mw_games/mwl';
61
+ *
62
+ * const refusal = await detectRomImage(new Uint8Array(65536).fill(0xa5), 'pcm.bin');
63
+ * console.log(refusal?.reason); // 'size'
64
+ * ```
65
+ */
66
+ export async function detectRomImage(bytes, name = 'data') {
67
+ const refuse = (reason, why, label) => ({
68
+ reason,
69
+ ...(label ? { label } : {}),
70
+ message: `"${name}" looks like an instrument ROM image (${why}). Packages carry no ROM: supply the patches as a .syx file instead.`,
71
+ });
72
+ const label = digests.size ? digests.get(await sha256Hex(bytes)) : undefined;
73
+ if (label !== undefined)
74
+ return refuse('digest', `it matches the registered ROM "${label}"`, label);
75
+ if (name.toLowerCase().endsWith('.rom'))
76
+ return refuse('extension', 'it has a .rom extension');
77
+ if (ROM_SIZES.has(bytes.length) && !hasSignature(bytes) && !looksLikeText(bytes))
78
+ return refuse('size', `${bytes.length} bytes with no recognised format`);
79
+ return null;
80
+ }
81
+ function hasSignature(bytes) {
82
+ // a SysEx dump (.syx) is patches, which is what a package should carry; F0 ... F7 frames it
83
+ if (bytes[0] === 0xf0 && bytes[bytes.length - 1] === 0xf7)
84
+ return true;
85
+ return SIGNATURES.some((signature) => signature.every((byte, index) => bytes[index] === byte));
86
+ }
87
+ /** JSON, MWL, SVG and the like: mostly printable ASCII in the first block */
88
+ function looksLikeText(bytes) {
89
+ const sample = bytes.subarray(0, 512);
90
+ let printable = 0;
91
+ for (const byte of sample)
92
+ if ((byte >= 32 && byte < 127) || byte === 9 || byte === 10 || byte === 13)
93
+ printable++;
94
+ return printable >= sample.length * 0.95;
95
+ }
96
+ //# sourceMappingURL=package-rom.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-rom.js","sourceRoot":"","sources":["../../src/mwl/package-rom.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import { type PackageLimits } from './package-container.ts';
2
+ import { type PackagePolicy } from './package.ts';
3
+ export interface PackageReport {
4
+ /** true when there is no error; warnings do not count */
5
+ readonly ok: boolean;
6
+ readonly errors: readonly string[];
7
+ readonly warnings: readonly string[];
8
+ /** `id@version#sha256`, when the package could be read at all */
9
+ readonly ref?: string;
10
+ /** what the package asks for, including `script` when a script carries code */
11
+ readonly capabilities: readonly string[];
12
+ }
13
+ export interface VerifyPackageOptions {
14
+ readonly limits?: Partial<PackageLimits>;
15
+ /** also refuse what this game would refuse */
16
+ readonly policy?: PackagePolicy;
17
+ }
18
+ /**
19
+ * Checks a `.mwp` end to end and reports instead of throwing: container (digests, limits,
20
+ * paths), schema, declared `asset.sha256`, every reference, the licence and source of each
21
+ * medium, the capabilities requested, `requires.mwg`, instrument ROM images, and the game's
22
+ * policy when one is given.
23
+ *
24
+ * @example
25
+ * ```ts
26
+ * import { encodePackage, verifyPackage } from '@datamoc/mw_games/mwl';
27
+ *
28
+ * const source = "[{ tag: 'package', id: 'marta', version: '1.0.0' }]";
29
+ * const bytes = await encodePackage([{ path: 'content.mwl', data: new TextEncoder().encode(source) }]);
30
+ * console.log((await verifyPackage(bytes)).ok); // true
31
+ * ```
32
+ */
33
+ export declare function verifyPackage(bytes: Uint8Array, options?: VerifyPackageOptions): Promise<PackageReport>;
34
+ //# sourceMappingURL=package-verify.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-verify.d.ts","sourceRoot":"","sources":["../../src/mwl/package-verify.ts"],"names":[],"mappings":"AACA,OAAO,EAA2B,KAAK,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAErF,OAAO,EAMN,KAAK,aAAa,EAClB,MAAM,cAAc,CAAC;AAGtB,MAAM,WAAW,aAAa;IAC7B,yDAAyD;IACzD,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,iEAAiE;IACjE,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,+EAA+E;IAC/E,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;CACzC;AAED,MAAM,WAAW,oBAAoB;IACpC,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IACzC,8CAA8C;IAC9C,QAAQ,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC;CAChC;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,aAAa,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,GAAE,oBAAyB,GAAG,OAAO,CAAC,aAAa,CAAC,CAmCjH"}
@@ -0,0 +1,111 @@
1
+ import { version as mwgVersion } from '../version.js';
2
+ import { PackageError, sha256Hex } from './package-container.js';
3
+ import { PACKAGE_MEDIA_KINDS } from './package-document.js';
4
+ import { checkPackagePolicy, loadPackage, packageRef, rangeHolds, requestedCapabilities, } from './package.js';
5
+ import { detectRomImage } from './package-rom.js';
6
+ /**
7
+ * Checks a `.mwp` end to end and reports instead of throwing: container (digests, limits,
8
+ * paths), schema, declared `asset.sha256`, every reference, the licence and source of each
9
+ * medium, the capabilities requested, `requires.mwg`, instrument ROM images, and the game's
10
+ * policy when one is given.
11
+ *
12
+ * @example
13
+ * ```ts
14
+ * import { encodePackage, verifyPackage } from '@datamoc/mw_games/mwl';
15
+ *
16
+ * const source = "[{ tag: 'package', id: 'marta', version: '1.0.0' }]";
17
+ * const bytes = await encodePackage([{ path: 'content.mwl', data: new TextEncoder().encode(source) }]);
18
+ * console.log((await verifyPackage(bytes)).ok); // true
19
+ * ```
20
+ */
21
+ export async function verifyPackage(bytes, options = {}) {
22
+ let pkg;
23
+ try {
24
+ pkg = await loadPackage(bytes, options.limits);
25
+ }
26
+ catch (error) {
27
+ if (!(error instanceof PackageError))
28
+ throw error;
29
+ return { ok: false, errors: [error.message], warnings: [], capabilities: [] };
30
+ }
31
+ const { document } = pkg;
32
+ const errors = [];
33
+ const warnings = [];
34
+ const digests = new Map();
35
+ for (const file of pkg.files) {
36
+ digests.set(file.path, await sha256Hex(file.data));
37
+ const rom = await detectRomImage(file.data, file.path);
38
+ if (rom)
39
+ errors.push(rom.message);
40
+ }
41
+ checkAssets(document, digests, errors);
42
+ checkReferences(document, errors);
43
+ for (const file of pkg.files)
44
+ if (file.path !== pkg.main &&
45
+ !file.path.endsWith('.mwl') &&
46
+ !document.assets.some((asset) => asset.path === file.path))
47
+ warnings.push(`"${file.path}" is in the package but no asset declares it`);
48
+ const capabilities = requestedCapabilities(document);
49
+ if (capabilities.includes('script') && !document.meta.requires.capabilities.includes('script'))
50
+ errors.push('a script carries code but the package does not declare requires.capabilities: ["script"]');
51
+ const { mwg } = document.meta.requires;
52
+ if (mwg !== undefined && !rangeHolds(mwgVersion, mwg, 'requires.mwg', errors))
53
+ errors.push(`requires mwg ${mwg}, this is mwg ${mwgVersion}`);
54
+ if (options.policy)
55
+ errors.push(...checkPackagePolicy(document, options.policy).map((refusal) => `refused by policy: ${refusal}`));
56
+ return { ok: errors.length === 0, errors, warnings, ref: packageRef(pkg), capabilities };
57
+ }
58
+ function checkAssets(document, digests, errors) {
59
+ for (const asset of document.assets) {
60
+ const actual = digests.get(asset.path);
61
+ if (actual === undefined)
62
+ errors.push(`asset "${asset.id}": "${asset.path}" is not in the package`);
63
+ else if (asset.sha256 !== undefined && asset.sha256 !== actual)
64
+ errors.push(`asset "${asset.id}": sha256 does not match "${asset.path}"`);
65
+ if (PACKAGE_MEDIA_KINDS.includes(asset.kind)) {
66
+ if (!asset.license)
67
+ errors.push(`asset "${asset.id}": a ${asset.kind} needs a license`);
68
+ if (!asset.source)
69
+ errors.push(`asset "${asset.id}": a ${asset.kind} needs a source`);
70
+ }
71
+ }
72
+ }
73
+ /** a reference resolves inside the package, or names another package (`pkg:id`) which is not checked here */
74
+ function checkReferences(document, errors) {
75
+ const ids = (list) => new Set(list.map((item) => item.id));
76
+ const assets = ids(document.assets);
77
+ const sounds = ids(document.soundEffects);
78
+ const animations = ids(document.animations);
79
+ const music = ids(document.music);
80
+ const scripts = ids(document.scripts);
81
+ const check = (where, name, ...pools) => {
82
+ if (name === undefined || name.includes(':'))
83
+ return;
84
+ if (!pools.some((pool) => pool.has(name)))
85
+ errors.push(`${where}: "${name}" is not defined in the package`);
86
+ };
87
+ for (const character of document.characters) {
88
+ const where = `character "${character.id}"`;
89
+ check(`${where} portrait`, character.portrait, assets);
90
+ check(`${where} sprite`, character.sprite?.image, assets);
91
+ check(`${where} theme`, character.theme, music, assets);
92
+ for (const [name, id] of Object.entries(character.animations))
93
+ check(`${where} animation ${name}`, id, animations);
94
+ for (const [name, id] of Object.entries(character.sounds))
95
+ check(`${where} sound ${name}`, id, sounds);
96
+ for (const id of character.scripts)
97
+ check(`${where} script`, id, scripts);
98
+ }
99
+ for (const animation of document.animations)
100
+ for (const [frame, event] of Object.entries(animation.events))
101
+ check(`animation "${animation.id}" frame ${frame}`, event.sound, sounds);
102
+ for (const track of document.music) {
103
+ check(`music "${track.id}" src`, track.src, assets);
104
+ check(`music "${track.id}" fallback`, track.fallback, assets);
105
+ }
106
+ for (const script of document.scripts)
107
+ for (const action of script.do)
108
+ if (action.tag === 'play' && typeof action.attributes.sound === 'string')
109
+ check(`script "${script.id}" play`, action.attributes.sound, sounds, assets);
110
+ }
111
+ //# sourceMappingURL=package-verify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-verify.js","sourceRoot":"","sources":["../../src/mwl/package-verify.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,184 @@
1
+ import { type MwlCompiledGame } from './compiler.ts';
2
+ import { PackageError, type PackageFile, type PackageLimits } from './package-container.ts';
3
+ import { type PackageAnimation, type PackageAsset, type PackageCharacter, type PackageDocument, type PackageMusic, type PackageScript, type PackageSoundEffect } from './package-document.ts';
4
+ /**
5
+ * A second package with the same id and version, or one whose dependency is not merged.
6
+ *
7
+ * @example
8
+ * ```ts
9
+ * import { PackageConflictError } from '@datamoc/mw_games/mwl';
10
+ *
11
+ * console.log(new PackageConflictError('already merged').name); // 'PackageConflictError'
12
+ * ```
13
+ */
14
+ export declare class PackageConflictError extends PackageError {
15
+ constructor(message: string);
16
+ }
17
+ export interface LoadedPackage {
18
+ readonly document: PackageDocument;
19
+ /** the path of the main document */
20
+ readonly main: string;
21
+ readonly files: readonly PackageFile[];
22
+ /** SHA-256 over every path and digest in the directory: the identity of these exact bytes */
23
+ readonly hash: string;
24
+ }
25
+ /**
26
+ * Decodes a `.mwp` (digests, limits, paths) and reads its main document. Nothing in the package
27
+ * is executed, fetched or compiled: this is the whole install step.
28
+ *
29
+ * @example
30
+ * ```ts
31
+ * import { encodePackage, loadPackage } from '@datamoc/mw_games/mwl';
32
+ *
33
+ * const source = "[{ tag: 'package', id: 'marta', version: '1.0.0' }]";
34
+ * const bytes = await encodePackage([{ path: 'content.mwl', data: new TextEncoder().encode(source) }]);
35
+ * console.log((await loadPackage(bytes)).document.meta.id); // 'marta'
36
+ * ```
37
+ */
38
+ export declare function loadPackage(bytes: Uint8Array, limits?: Partial<PackageLimits>): Promise<LoadedPackage>;
39
+ /**
40
+ * The exact identity a save game records: `id@version#sha256`.
41
+ *
42
+ * @example
43
+ * ```ts
44
+ * import { encodePackage, loadPackage, packageRef } from '@datamoc/mw_games/mwl';
45
+ *
46
+ * const source = "[{ tag: 'package', id: 'marta', version: '1.0.0' }]";
47
+ * const bytes = await encodePackage([{ path: 'content.mwl', data: new TextEncoder().encode(source) }]);
48
+ * console.log(packageRef(await loadPackage(bytes)).startsWith('marta@1.0.0#')); // true
49
+ * ```
50
+ */
51
+ export declare function packageRef(pkg: LoadedPackage): string;
52
+ /**
53
+ * Splits a reference written by `packageRef` back into its three parts.
54
+ *
55
+ * @example
56
+ * ```ts
57
+ * import { parsePackageRef } from '@datamoc/mw_games/mwl';
58
+ *
59
+ * console.log(parsePackageRef('marta@1.0.0#abc').version); // '1.0.0'
60
+ * ```
61
+ */
62
+ export declare function parsePackageRef(ref: string): {
63
+ id: string;
64
+ version: string;
65
+ hash: string;
66
+ };
67
+ export interface PackagePolicy {
68
+ /** capabilities this game grants; a package asking for any other is refused */
69
+ readonly allow: readonly string[];
70
+ /** a capability mwg does not know is refused (default) or, with `false`, ignored */
71
+ readonly refuseUnknown?: boolean;
72
+ /** versions this game provides; `mwg` defaults to the running mwg, `retroAudio` to none */
73
+ readonly provides?: {
74
+ readonly mwg?: string;
75
+ readonly retroAudio?: string;
76
+ };
77
+ }
78
+ /**
79
+ * What a package asks for: its declared capabilities plus `script` when any script carries code.
80
+ *
81
+ * @example
82
+ * ```ts
83
+ * import { parsePackageDocument, requestedCapabilities } from '@datamoc/mw_games/mwl';
84
+ *
85
+ * const document = parsePackageDocument("[{ tag: 'package', id: 'p', version: '1.0.0' }, { tag: 'script', id: 's', on: 'start', code: '1' }]");
86
+ * console.log(requestedCapabilities(document)); // ['script']
87
+ * ```
88
+ */
89
+ export declare function requestedCapabilities(document: PackageDocument): string[];
90
+ /**
91
+ * Evaluates a package against what a game accepts and returns readable refusals; an empty list
92
+ * means accepted. Nothing is executed or fetched: the decision rests on the declared requests.
93
+ *
94
+ * @example
95
+ * ```ts
96
+ * import { checkPackagePolicy, parsePackageDocument } from '@datamoc/mw_games/mwl';
97
+ *
98
+ * const document = parsePackageDocument(
99
+ * "[{ tag: 'package', id: 'marta', version: '1.0.0', requires: { capabilities: ['script'] } }]",
100
+ * );
101
+ * console.log(checkPackagePolicy(document, { allow: ['audio'] })); // ['asks for the "script" capability, which this game does not allow']
102
+ * ```
103
+ */
104
+ export declare function checkPackagePolicy(document: PackageDocument, policy: PackagePolicy): string[];
105
+ /** true when the range holds; a malformed range is reported once and counts as holding, to avoid a second message */
106
+ export declare function rangeHolds(version: string, range: string, label: string, problems: string[]): boolean;
107
+ export interface PackageSet {
108
+ readonly packages: readonly LoadedPackage[];
109
+ }
110
+ /**
111
+ * Adds a package to a content set (a new set; the old one is untouched). Dependencies named by
112
+ * `import` must already be in the set. Two versions of one package may coexist: the newest owns
113
+ * the plain `packageId:id` names, every version answers to `packageId@version:id`.
114
+ *
115
+ * @example
116
+ * ```ts
117
+ * import { encodePackage, loadPackage, mergePackage, packageContent } from '@datamoc/mw_games/mwl';
118
+ *
119
+ * const source = "[{ tag: 'package', id: 'marta', version: '1.0.0' }, { tag: 'sound_effect', id: 'ouch', chip: 'sn76489' }]";
120
+ * const bytes = await encodePackage([{ path: 'content.mwl', data: new TextEncoder().encode(source) }]);
121
+ * const set = mergePackage(await loadPackage(bytes));
122
+ * console.log(Object.keys(packageContent(set).soundEffects)); // ['marta:ouch']
123
+ * ```
124
+ */
125
+ export declare function mergePackage(pkg: LoadedPackage, into?: PackageSet): PackageSet;
126
+ type Owned<T> = Omit<T, 'id'> & {
127
+ readonly id: string;
128
+ readonly package: string;
129
+ };
130
+ export interface PackageContent {
131
+ readonly assets: Readonly<Record<string, Owned<PackageAsset>>>;
132
+ readonly characters: Readonly<Record<string, Owned<PackageCharacter>>>;
133
+ readonly animations: Readonly<Record<string, Owned<PackageAnimation>>>;
134
+ readonly soundEffects: Readonly<Record<string, Owned<PackageSoundEffect>>>;
135
+ readonly music: Readonly<Record<string, Owned<PackageMusic>>>;
136
+ readonly scripts: Readonly<Record<string, Owned<PackageScript>>>;
137
+ }
138
+ /**
139
+ * The namespaced view of a set: every id becomes `packageId:id`, and every reference written
140
+ * without a prefix is resolved to the same package first. A reference that already has a prefix
141
+ * points at another package and is left alone. Each item records the package it came from.
142
+ *
143
+ * @example
144
+ * ```ts
145
+ * import { encodePackage, loadPackage, mergePackage, packageContent } from '@datamoc/mw_games/mwl';
146
+ *
147
+ * const source = "[{ tag: 'package', id: 'marta', version: '1.0.0' }, { tag: 'music', id: 'theme', src: 'song' }]";
148
+ * const bytes = await encodePackage([{ path: 'content.mwl', data: new TextEncoder().encode(source) }]);
149
+ * console.log(packageContent(mergePackage(await loadPackage(bytes))).music['marta:theme']?.src); // 'marta:song'
150
+ * ```
151
+ */
152
+ export declare function packageContent(set: PackageSet): PackageContent;
153
+ /**
154
+ * Compiles a content set: each character expands into a `unit_type` named `packageId:id`, and
155
+ * the result is an ordinary compiled game, with the packages' `_()` strings in `messages` and
156
+ * the packages' media paths in `assets`. A set with no package compiles to an empty game.
157
+ *
158
+ * @example
159
+ * ```ts
160
+ * import { compilePackages, encodePackage, loadPackage, mergePackage } from '@datamoc/mw_games/mwl';
161
+ *
162
+ * const source = "[{ tag: 'package', id: 'marta', version: '1.0.0' }, { tag: 'character', id: 'marta', hitpoints: 28 }]";
163
+ * const bytes = await encodePackage([{ path: 'content.mwl', data: new TextEncoder().encode(source) }]);
164
+ * console.log(compilePackages(mergePackage(await loadPackage(bytes))).roots[0]?.attributes.id); // 'marta:marta'
165
+ * ```
166
+ */
167
+ export declare function compilePackages(set: PackageSet): MwlCompiledGame;
168
+ /**
169
+ * The credits text for the packages present, in the format of the `CREDITS.txt` the asset step
170
+ * writes: one block per package and per asset, each with its licence and, when known, its source.
171
+ *
172
+ * @example
173
+ * ```ts
174
+ * import { generateCredits, parsePackageDocument } from '@datamoc/mw_games/mwl';
175
+ *
176
+ * const document = parsePackageDocument(
177
+ * "[{ tag: 'package', id: 'marta', version: '1.0.0', author: 'Ada', license: 'CC-BY-4.0' }]",
178
+ * );
179
+ * console.log(generateCredits([document])); // 'marta 1.0.0 by Ada\nLicense: CC-BY-4.0\n'
180
+ * ```
181
+ */
182
+ export declare function generateCredits(documents: readonly PackageDocument[]): string;
183
+ export {};
184
+ //# sourceMappingURL=package.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package.d.ts","sourceRoot":"","sources":["../../src/mwl/package.ts"],"names":[],"mappings":"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"}