@datamoc/mw_games 0.43.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.
- package/CHANGELOG.md +67 -0
- package/README.md +22 -0
- package/REFERENCE.md +82 -6
- package/api-surface.json +1028 -2
- package/dist/actors/Resource.d.ts.map +1 -1
- package/dist/actors/Resource.js +2 -3
- package/dist/actors/Resource.js.map +1 -1
- package/dist/audio/AdaptiveMusic.d.ts +85 -0
- package/dist/audio/AdaptiveMusic.d.ts.map +1 -0
- package/dist/audio/AdaptiveMusic.js +230 -0
- package/dist/audio/AdaptiveMusic.js.map +1 -0
- package/dist/audio/AudioLoader.d.ts +7 -2
- package/dist/audio/AudioLoader.d.ts.map +1 -1
- package/dist/audio/AudioLoader.js +23 -18
- package/dist/audio/AudioLoader.js.map +1 -1
- package/dist/audio/AudioViews.d.ts +70 -0
- package/dist/audio/AudioViews.d.ts.map +1 -0
- package/dist/audio/AudioViews.js +119 -0
- package/dist/audio/AudioViews.js.map +1 -0
- package/dist/audio/BusBudget.d.ts +89 -0
- package/dist/audio/BusBudget.d.ts.map +1 -0
- package/dist/audio/BusBudget.js +120 -0
- package/dist/audio/BusBudget.js.map +1 -0
- package/dist/audio/Channels.d.ts +65 -1
- package/dist/audio/Channels.d.ts.map +1 -1
- package/dist/audio/Channels.js +117 -30
- package/dist/audio/Channels.js.map +1 -1
- package/dist/audio/CoreHost.d.ts +114 -0
- package/dist/audio/CoreHost.d.ts.map +1 -0
- package/dist/audio/CoreHost.js +335 -0
- package/dist/audio/CoreHost.js.map +1 -0
- package/dist/audio/DecoderGuard.d.ts +139 -0
- package/dist/audio/DecoderGuard.d.ts.map +1 -0
- package/dist/audio/DecoderGuard.js +208 -0
- package/dist/audio/DecoderGuard.js.map +1 -0
- package/dist/audio/Fft.d.ts +3 -0
- package/dist/audio/Fft.d.ts.map +1 -0
- package/dist/audio/Fft.js +45 -0
- package/dist/audio/Fft.js.map +1 -0
- package/dist/audio/LoopTags.d.ts +18 -0
- package/dist/audio/LoopTags.d.ts.map +1 -1
- package/dist/audio/LoopTags.js +20 -0
- package/dist/audio/LoopTags.js.map +1 -1
- package/dist/audio/Midi.d.ts +35 -0
- package/dist/audio/Midi.d.ts.map +1 -1
- package/dist/audio/Midi.js +71 -1
- package/dist/audio/Midi.js.map +1 -1
- package/dist/audio/MidiRender.d.ts +31 -0
- package/dist/audio/MidiRender.d.ts.map +1 -1
- package/dist/audio/MidiRender.js +79 -2
- package/dist/audio/MidiRender.js.map +1 -1
- package/dist/audio/MidiSynth.d.ts +147 -0
- package/dist/audio/MidiSynth.d.ts.map +1 -0
- package/dist/audio/MidiSynth.js +205 -0
- package/dist/audio/MidiSynth.js.map +1 -0
- package/dist/audio/Playable.d.ts +7 -0
- package/dist/audio/Playable.d.ts.map +1 -1
- package/dist/audio/Playable.js.map +1 -1
- package/dist/audio/Positional.d.ts +12 -4
- package/dist/audio/Positional.d.ts.map +1 -1
- package/dist/audio/Positional.js +5 -2
- package/dist/audio/Positional.js.map +1 -1
- package/dist/audio/Resample.d.ts +61 -0
- package/dist/audio/Resample.d.ts.map +1 -0
- package/dist/audio/Resample.js +97 -0
- package/dist/audio/Resample.js.map +1 -0
- package/dist/audio/Settings.d.ts +99 -0
- package/dist/audio/Settings.d.ts.map +1 -0
- package/dist/audio/Settings.js +134 -0
- package/dist/audio/Settings.js.map +1 -0
- package/dist/audio/Sfx.d.ts +148 -0
- package/dist/audio/Sfx.d.ts.map +1 -0
- package/dist/audio/Sfx.js +213 -0
- package/dist/audio/Sfx.js.map +1 -0
- package/dist/audio/SpectralDistance.d.ts +34 -0
- package/dist/audio/SpectralDistance.d.ts.map +1 -0
- package/dist/audio/SpectralDistance.js +64 -0
- package/dist/audio/SpectralDistance.js.map +1 -0
- package/dist/audio/StreamChannel.d.ts +150 -0
- package/dist/audio/StreamChannel.d.ts.map +1 -0
- package/dist/audio/StreamChannel.js +390 -0
- package/dist/audio/StreamChannel.js.map +1 -0
- package/dist/audio/StreamPlayable.d.ts +73 -0
- package/dist/audio/StreamPlayable.d.ts.map +1 -0
- package/dist/audio/StreamPlayable.js +130 -0
- package/dist/audio/StreamPlayable.js.map +1 -0
- package/dist/audio/SyxBank.d.ts +73 -0
- package/dist/audio/SyxBank.d.ts.map +1 -0
- package/dist/audio/SyxBank.js +130 -0
- package/dist/audio/SyxBank.js.map +1 -0
- package/dist/audio/Underrun.d.ts +25 -0
- package/dist/audio/Underrun.d.ts.map +1 -0
- package/dist/audio/Underrun.js +18 -0
- package/dist/audio/Underrun.js.map +1 -0
- package/dist/audio/Wav.d.ts +56 -0
- package/dist/audio/Wav.d.ts.map +1 -0
- package/dist/audio/Wav.js +164 -0
- package/dist/audio/Wav.js.map +1 -0
- package/dist/audio/WebMidi.d.ts +58 -0
- package/dist/audio/WebMidi.d.ts.map +1 -0
- package/dist/audio/WebMidi.js +79 -0
- package/dist/audio/WebMidi.js.map +1 -0
- package/dist/audio/humanize/Onsets.d.ts.map +1 -1
- package/dist/audio/humanize/Onsets.js +1 -44
- package/dist/audio/humanize/Onsets.js.map +1 -1
- package/dist/audio/index.d.ts +38 -6
- package/dist/audio/index.d.ts.map +1 -1
- package/dist/audio/index.js +19 -3
- package/dist/audio/index.js.map +1 -1
- package/dist/battle/AttackPreview.d.ts.map +1 -1
- package/dist/battle/AttackPreview.js +8 -8
- package/dist/battle/AttackPreview.js.map +1 -1
- package/dist/battle/StatStages.d.ts.map +1 -1
- package/dist/battle/StatStages.js +2 -1
- package/dist/battle/StatStages.js.map +1 -1
- package/dist/board/Engine.d.ts +2 -0
- package/dist/board/Engine.d.ts.map +1 -1
- package/dist/board/Engine.js +1 -1
- package/dist/board/Engine.js.map +1 -1
- package/dist/board/HexSkirmish.d.ts.map +1 -1
- package/dist/board/HexSkirmish.js +11 -72
- package/dist/board/HexSkirmish.js.map +1 -1
- package/dist/board/Tactics.d.ts.map +1 -1
- package/dist/board/Tactics.js +3 -5
- package/dist/board/Tactics.js.map +1 -1
- package/dist/board/tourney.d.ts.map +1 -1
- package/dist/board/tourney.js +2 -19
- package/dist/board/tourney.js.map +1 -1
- package/dist/core/Handles.js +7 -7
- package/dist/core/Handles.js.map +1 -1
- package/dist/mw_games.global.js +25 -22
- package/dist/mwl/conditions.d.ts +12 -0
- package/dist/mwl/conditions.d.ts.map +1 -1
- package/dist/mwl/conditions.js +49 -8
- package/dist/mwl/conditions.js.map +1 -1
- package/dist/mwl/index.d.ts +11 -0
- package/dist/mwl/index.d.ts.map +1 -1
- package/dist/mwl/index.js +6 -0
- package/dist/mwl/index.js.map +1 -1
- package/dist/mwl/package-container.d.ts +185 -0
- package/dist/mwl/package-container.d.ts.map +1 -0
- package/dist/mwl/package-container.js +446 -0
- package/dist/mwl/package-container.js.map +1 -0
- package/dist/mwl/package-document.d.ts +217 -0
- package/dist/mwl/package-document.d.ts.map +1 -0
- package/dist/mwl/package-document.js +639 -0
- package/dist/mwl/package-document.js.map +1 -0
- package/dist/mwl/package-rom.d.ts +37 -0
- package/dist/mwl/package-rom.d.ts.map +1 -0
- package/dist/mwl/package-rom.js +96 -0
- package/dist/mwl/package-rom.js.map +1 -0
- package/dist/mwl/package-verify.d.ts +34 -0
- package/dist/mwl/package-verify.d.ts.map +1 -0
- package/dist/mwl/package-verify.js +111 -0
- package/dist/mwl/package-verify.js.map +1 -0
- package/dist/mwl/package.d.ts +184 -0
- package/dist/mwl/package.d.ts.map +1 -0
- package/dist/mwl/package.js +382 -0
- package/dist/mwl/package.js.map +1 -0
- package/dist/physics/PhysicsWorld.d.ts.map +1 -1
- package/dist/physics/PhysicsWorld.js +4 -3
- package/dist/physics/PhysicsWorld.js.map +1 -1
- package/dist/physics/XpbdWorld.d.ts.map +1 -1
- package/dist/physics/XpbdWorld.js +2 -1
- package/dist/physics/XpbdWorld.js.map +1 -1
- package/dist/testing/FakeAudio.d.ts +149 -0
- package/dist/testing/FakeAudio.d.ts.map +1 -0
- package/dist/testing/FakeAudio.js +219 -0
- package/dist/testing/FakeAudio.js.map +1 -0
- package/dist/testing/index.d.ts +2 -0
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +1 -0
- package/dist/testing/index.js.map +1 -1
- package/dist/threads/index.d.ts +2 -2
- package/dist/threads/index.d.ts.map +1 -1
- package/dist/threads/index.js +1 -1
- package/dist/threads/index.js.map +1 -1
- package/dist/threads/spawn.d.ts +32 -0
- package/dist/threads/spawn.d.ts.map +1 -1
- package/dist/threads/spawn.js +35 -11
- package/dist/threads/spawn.js.map +1 -1
- package/dist/two-d/Game.d.ts +13 -2
- package/dist/two-d/Game.d.ts.map +1 -1
- package/dist/two-d/Game.js +42 -18
- package/dist/two-d/Game.js.map +1 -1
- package/dist/two-d/render/HazeLayer.d.ts.map +1 -1
- package/dist/two-d/render/HazeLayer.js +2 -1
- package/dist/two-d/render/HazeLayer.js.map +1 -1
- package/dist/two-d/render/ImageModifiers.d.ts +4 -2
- package/dist/two-d/render/ImageModifiers.d.ts.map +1 -1
- package/dist/two-d/render/ImageModifiers.js +13 -8
- package/dist/two-d/render/ImageModifiers.js.map +1 -1
- package/dist/two-d/render/NeonGlow.d.ts.map +1 -1
- package/dist/two-d/render/NeonGlow.js +2 -1
- package/dist/two-d/render/NeonGlow.js.map +1 -1
- package/dist/two-d/render/Particles.d.ts.map +1 -1
- package/dist/two-d/render/Particles.js +2 -1
- package/dist/two-d/render/Particles.js.map +1 -1
- package/dist/two-d/render/SceneTransition.d.ts +29 -0
- package/dist/two-d/render/SceneTransition.d.ts.map +1 -1
- package/dist/two-d/render/SceneTransition.js +27 -0
- package/dist/two-d/render/SceneTransition.js.map +1 -1
- package/dist/two-d/render/ScreenEffects.d.ts.map +1 -1
- package/dist/two-d/render/ScreenEffects.js +2 -1
- package/dist/two-d/render/ScreenEffects.js.map +1 -1
- package/dist/two-d/render/SkeletalSprite.d.ts.map +1 -1
- package/dist/two-d/render/SkeletalSprite.js +2 -1
- package/dist/two-d/render/SkeletalSprite.js.map +1 -1
- package/dist/two-d/render/Types2D.d.ts +2 -2
- package/dist/two-d/render/Types2D.d.ts.map +1 -1
- package/dist/two-d/render/Types2D.js +2 -2
- package/dist/two-d/render/Types2D.js.map +1 -1
- package/dist/two-d/render/index.d.ts +2 -2
- package/dist/two-d/render/index.d.ts.map +1 -1
- package/dist/two-d/render/index.js +1 -1
- package/dist/two-d/render/index.js.map +1 -1
- package/dist/two-d/ui/Bar.d.ts.map +1 -1
- package/dist/two-d/ui/Bar.js +3 -5
- package/dist/two-d/ui/Bar.js.map +1 -1
- package/dist/two-d/ui/Dropdown.d.ts +5 -1
- package/dist/two-d/ui/Dropdown.d.ts.map +1 -1
- package/dist/two-d/ui/Dropdown.js +8 -1
- package/dist/two-d/ui/Dropdown.js.map +1 -1
- package/dist/two-d/ui/DropdownView.d.ts +15 -1
- package/dist/two-d/ui/DropdownView.d.ts.map +1 -1
- package/dist/two-d/ui/DropdownView.js +21 -3
- package/dist/two-d/ui/DropdownView.js.map +1 -1
- package/dist/two-d/ui/FloatingText.d.ts.map +1 -1
- package/dist/two-d/ui/FloatingText.js +2 -1
- package/dist/two-d/ui/FloatingText.js.map +1 -1
- package/dist/two-d/ui/IconGrid.d.ts.map +1 -1
- package/dist/two-d/ui/IconGrid.js +2 -1
- package/dist/two-d/ui/IconGrid.js.map +1 -1
- package/dist/two-d/ui/ListView.d.ts.map +1 -1
- package/dist/two-d/ui/ListView.js +2 -1
- package/dist/two-d/ui/ListView.js.map +1 -1
- package/dist/two-d/ui/ScrollBox.d.ts +6 -0
- package/dist/two-d/ui/ScrollBox.d.ts.map +1 -1
- package/dist/two-d/ui/ScrollBox.js +12 -1
- package/dist/two-d/ui/ScrollBox.js.map +1 -1
- package/dist/two-d/ui/ScrollText.d.ts +11 -2
- package/dist/two-d/ui/ScrollText.d.ts.map +1 -1
- package/dist/two-d/ui/ScrollText.js +18 -2
- package/dist/two-d/ui/ScrollText.js.map +1 -1
- package/dist/two-d/ui/Slider.d.ts.map +1 -1
- package/dist/two-d/ui/Slider.js +4 -4
- package/dist/two-d/ui/Slider.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +8 -1
- package/sbom.cdx.json +6 -6
- package/tools/audio.d.mts +75 -0
- package/tools/audio.mjs +437 -0
- package/tools/mwl.mjs +144 -2
- package/tools.md +1 -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":"AACA,OAAO,EAAgB,KAAK,eAAe,EAAE,MAAM,eAAe,CAAC;AAEnE,OAAO,EAEN,YAAY,EAGZ,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAMN,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,MAAM,uBAAuB,CAAC;AAE/B;;;;;;;;;GASG;AACH,qBAAa,oBAAqB,SAAQ,YAAY;IACrD,YAAY,OAAO,EAAE,MAAM,EAG1B;CACD;AAED,MAAM,WAAW,aAAa;IAC7B,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC;IACnC,oCAAoC;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,CAAC;IACvC,6FAA6F;IAC7F,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,WAAW,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,GAAE,OAAO,CAAC,aAAa,CAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAsBhH;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,aAAa,GAAG,MAAM,CAErD;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAI1F;AAID,MAAM,WAAW,aAAa;IAC7B,+EAA+E;IAC/E,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,oFAAoF;IACpF,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;IACjC,2FAA2F;IAC3F,QAAQ,CAAC,QAAQ,CAAC,EAAE;QAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC5E;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,eAAe,GAAG,MAAM,EAAE,CAIzE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,eAAe,EAAE,MAAM,EAAE,aAAa,GAAG,MAAM,EAAE,CAmB7F;AAED,qHAAqH;AACrH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAOrG;AAID,MAAM,WAAW,UAAU;IAC1B,QAAQ,CAAC,QAAQ,EAAE,SAAS,aAAa,EAAE,CAAC;CAC5C;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,aAAa,EAAE,IAAI,GAAE,UAA6B,GAAG,UAAU,CAmBhG;AAWD,KAAK,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG;IAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAElF,MAAM,WAAW,cAAc;IAC9B,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAC/D,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;IACvE,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;IACvE,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;IAC3E,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAC9D,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;CACjE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,UAAU,GAAG,cAAc,CAyD9D;AAgCD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,UAAU,GAAG,eAAe,CA8ChE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,SAAS,eAAe,EAAE,GAAG,MAAM,CAe7E"}
|