@datamoc/mw_games 0.6.0 → 0.7.1

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 (56) hide show
  1. package/README.md +66 -1
  2. package/dist/index.d.ts +1 -0
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +1 -0
  5. package/dist/index.js.map +1 -1
  6. package/dist/mw_games.global.js +22 -19
  7. package/dist/mwl/actors.d.ts +16 -0
  8. package/dist/mwl/actors.d.ts.map +1 -0
  9. package/dist/mwl/actors.js +33 -0
  10. package/dist/mwl/actors.js.map +1 -0
  11. package/dist/mwl/catalog.d.ts +13 -0
  12. package/dist/mwl/catalog.d.ts.map +1 -0
  13. package/dist/mwl/catalog.js +67 -0
  14. package/dist/mwl/catalog.js.map +1 -0
  15. package/dist/mwl/compiler.d.ts +51 -0
  16. package/dist/mwl/compiler.d.ts.map +1 -0
  17. package/dist/mwl/compiler.js +119 -0
  18. package/dist/mwl/compiler.js.map +1 -0
  19. package/dist/mwl/content.d.ts +90 -0
  20. package/dist/mwl/content.d.ts.map +1 -0
  21. package/dist/mwl/content.js +146 -0
  22. package/dist/mwl/content.js.map +1 -0
  23. package/dist/mwl/expression.d.ts +21 -0
  24. package/dist/mwl/expression.d.ts.map +1 -0
  25. package/dist/mwl/expression.js +110 -0
  26. package/dist/mwl/expression.js.map +1 -0
  27. package/dist/mwl/grammar.d.ts +39 -0
  28. package/dist/mwl/grammar.d.ts.map +1 -0
  29. package/dist/mwl/grammar.js +204 -0
  30. package/dist/mwl/grammar.js.map +1 -0
  31. package/dist/mwl/hooks.d.ts +81 -0
  32. package/dist/mwl/hooks.d.ts.map +1 -0
  33. package/dist/mwl/hooks.js +78 -0
  34. package/dist/mwl/hooks.js.map +1 -0
  35. package/dist/mwl/index.d.ts +21 -0
  36. package/dist/mwl/index.d.ts.map +1 -0
  37. package/dist/mwl/index.js +11 -0
  38. package/dist/mwl/index.js.map +1 -0
  39. package/dist/mwl/persistence.d.ts +15 -0
  40. package/dist/mwl/persistence.d.ts.map +1 -0
  41. package/dist/mwl/persistence.js +41 -0
  42. package/dist/mwl/persistence.js.map +1 -0
  43. package/dist/mwl/runtime.d.ts +196 -0
  44. package/dist/mwl/runtime.d.ts.map +1 -0
  45. package/dist/mwl/runtime.js +587 -0
  46. package/dist/mwl/runtime.js.map +1 -0
  47. package/dist/mwl/schema.d.ts +20 -0
  48. package/dist/mwl/schema.d.ts.map +1 -0
  49. package/dist/mwl/schema.js +379 -0
  50. package/dist/mwl/schema.js.map +1 -0
  51. package/dist/version.d.ts +1 -1
  52. package/dist/version.js +1 -1
  53. package/package.json +15 -4
  54. package/tools/extract-html.d.mts +18 -0
  55. package/tools/extract-html.mjs +235 -0
  56. package/tools/mwl.mjs +197 -0
@@ -0,0 +1,379 @@
1
+ export const schema01 = {
2
+ game: {
3
+ attributes: {
4
+ schema: 'string',
5
+ title: 'string',
6
+ data_root: 'string',
7
+ start_scene: 'id',
8
+ default_schedule: 'id',
9
+ save_slot: 'string',
10
+ },
11
+ children: [
12
+ 'terrain_type',
13
+ 'movetype',
14
+ 'unit_type',
15
+ 'unit',
16
+ 'side',
17
+ 'map',
18
+ 'schedule',
19
+ 'event',
20
+ 'objectives',
21
+ 'trait',
22
+ 'weapon_special',
23
+ 'dialogue',
24
+ 'save',
25
+ 'item',
26
+ 'inventory',
27
+ 'monster',
28
+ 'status',
29
+ 'loot',
30
+ 'turn_clock',
31
+ 'battle_move',
32
+ 'type_matchup',
33
+ 'evolution',
34
+ ],
35
+ },
36
+ terrain_type: {
37
+ attributes: {
38
+ id: 'id',
39
+ string: 'string',
40
+ aliasof: 'string',
41
+ mvt_alias: 'string',
42
+ default_base: 'string',
43
+ heals: 'integer',
44
+ gives_income: 'boolean',
45
+ map_code: 'string',
46
+ base_tile: 'string',
47
+ overlay_tile: 'string',
48
+ defense: 'number',
49
+ healing: 'number',
50
+ },
51
+ },
52
+ movetype: { attributes: { id: 'id', name: 'string' }, children: ['movement_costs', 'defense', 'resistance'] },
53
+ // Open maps: every attribute is a terrain or damage-type id, every value a number.
54
+ movement_costs: { openAttributes: 'number' },
55
+ defense: { openAttributes: 'number' },
56
+ resistance: { openAttributes: 'number' },
57
+ unit_type: {
58
+ attributes: {
59
+ // Wesnoth unit type ids may contain spaces ("Drake Arbiter"), so this is a
60
+ // string rather than the stricter id type.
61
+ id: 'string',
62
+ name: 'string',
63
+ description: 'string',
64
+ image: 'string',
65
+ image_icon: 'string',
66
+ profile: 'string',
67
+ sound: 'string',
68
+ hitpoints: 'integer',
69
+ movement: 'integer',
70
+ movement_type: 'id',
71
+ movetype: 'id',
72
+ experience: 'integer',
73
+ level: 'integer',
74
+ alignment: 'id',
75
+ cost: 'integer',
76
+ advances_to: 'string',
77
+ race: 'id',
78
+ usage: 'id',
79
+ },
80
+ children: ['attack', 'trait', 'ability'],
81
+ },
82
+ unit: { attributes: { id: 'id', type: 'string', side: 'integer', hp: 'integer', x: 'integer', y: 'integer' } },
83
+ attack: {
84
+ attributes: {
85
+ id: 'id',
86
+ // Unit references are strings: converted unit ids may contain spaces.
87
+ attacker: 'string',
88
+ defender: 'string',
89
+ target: 'string',
90
+ amount: 'integer',
91
+ weapon: 'id',
92
+ name: 'string',
93
+ sound: 'string',
94
+ description: 'string',
95
+ type: 'id',
96
+ range: 'id',
97
+ damage: 'integer',
98
+ number: 'integer',
99
+ strikes: 'integer',
100
+ icon: 'string',
101
+ specials: 'string',
102
+ },
103
+ },
104
+ side: {
105
+ attributes: {
106
+ // Side ids are numbers in MWL content and in converted Wesnoth data.
107
+ id: 'integer',
108
+ controller: 'id',
109
+ gold: 'integer',
110
+ income: 'integer',
111
+ income_base: 'integer',
112
+ income_per_village: 'integer',
113
+ leader: 'id',
114
+ team: 'integer',
115
+ recruit: 'string',
116
+ color: 'string',
117
+ },
118
+ },
119
+ map: { attributes: { id: 'id', name: 'string', file: 'string', terrain: 'string' }, children: ['start'] },
120
+ start: { attributes: { side: 'integer', x: 'integer', y: 'integer' } },
121
+ schedule: { attributes: { id: 'id' }, children: ['time'] },
122
+ time: { attributes: { id: 'id', name: 'string', lawful_bonus: 'number' } },
123
+ event: {
124
+ attributes: {
125
+ id: 'id',
126
+ on: 'id',
127
+ trigger: 'id',
128
+ // `on=moveto` filters. All optional: `[event] on=moveto unit=scout` fires
129
+ // for any hex that unit reaches, `x`/`y` narrow it to one hex.
130
+ x: 'integer',
131
+ y: 'integer',
132
+ side: 'integer',
133
+ unit: 'string',
134
+ // Defaults to true for moveto (a story beat fires once) and false for
135
+ // start/turn (a per-turn event has to repeat).
136
+ once: 'boolean',
137
+ },
138
+ children: [
139
+ 'condition',
140
+ 'filter',
141
+ 'command',
142
+ 'say',
143
+ 'dialogue',
144
+ 'move',
145
+ 'attack',
146
+ 'spawn',
147
+ 'kill',
148
+ 'gold',
149
+ 'set_variable',
150
+ 'if',
151
+ 'else',
152
+ 'message',
153
+ 'teleport',
154
+ 'end_turn',
155
+ 'win',
156
+ 'lose',
157
+ 'hook',
158
+ ],
159
+ },
160
+ objectives: {
161
+ attributes: { side: 'integer', victory: 'string', defeat: 'string' },
162
+ children: ['victory', 'defeat'],
163
+ },
164
+ victory: {
165
+ attributes: {
166
+ side: 'integer',
167
+ condition: 'id',
168
+ type: 'string',
169
+ x: 'integer',
170
+ y: 'integer',
171
+ side_filter: 'integer',
172
+ turns: 'integer',
173
+ gold: 'integer',
174
+ hook: 'string',
175
+ // generic predicate parameter, for `condition=hook` objectives
176
+ value: 'integer',
177
+ },
178
+ },
179
+ defeat: {
180
+ attributes: {
181
+ side: 'integer',
182
+ condition: 'id',
183
+ type: 'string',
184
+ x: 'integer',
185
+ y: 'integer',
186
+ side_filter: 'integer',
187
+ turns: 'integer',
188
+ gold: 'integer',
189
+ hook: 'string',
190
+ value: 'integer',
191
+ },
192
+ },
193
+ condition: { attributes: { variable: 'id', equals: 'string' } },
194
+ filter: {
195
+ attributes: {
196
+ side: 'integer',
197
+ type: 'string',
198
+ x: 'integer',
199
+ y: 'integer',
200
+ level: 'integer',
201
+ alignment: 'id',
202
+ can_recruit: 'boolean',
203
+ },
204
+ },
205
+ command: {
206
+ attributes: {
207
+ name: 'id',
208
+ target: 'string',
209
+ value: 'string',
210
+ amount: 'integer',
211
+ x: 'integer',
212
+ y: 'integer',
213
+ hp: 'integer',
214
+ },
215
+ },
216
+ move: { attributes: { unit: 'string', target: 'string', x: 'integer', y: 'integer' } },
217
+ spawn: { attributes: { id: 'string', type: 'string', side: 'integer', x: 'integer', y: 'integer', hp: 'integer' } },
218
+ kill: { attributes: { unit: 'string', target: 'string' } },
219
+ gold: { attributes: { side: 'string', delta: 'integer', amount: 'integer' } },
220
+ set_variable: { attributes: { name: 'id', target: 'id', value: 'string' } },
221
+ if: {
222
+ attributes: { test: 'string' },
223
+ children: [
224
+ 'condition',
225
+ 'command',
226
+ 'message',
227
+ 'move',
228
+ 'attack',
229
+ 'spawn',
230
+ 'kill',
231
+ 'gold',
232
+ 'set_variable',
233
+ 'win',
234
+ 'lose',
235
+ 'hook',
236
+ ],
237
+ },
238
+ else: {
239
+ children: [
240
+ 'condition',
241
+ 'command',
242
+ 'message',
243
+ 'move',
244
+ 'attack',
245
+ 'spawn',
246
+ 'kill',
247
+ 'gold',
248
+ 'set_variable',
249
+ 'win',
250
+ 'lose',
251
+ 'hook',
252
+ ],
253
+ },
254
+ message: {
255
+ // `speaker` is a display name, so it may contain spaces ("Orcish Grunt").
256
+ attributes: { speaker: 'string', text: 'string', value: 'string', portrait: 'string', side: 'integer' },
257
+ },
258
+ teleport: { attributes: { unit: 'string', target: 'string', x: 'integer', y: 'integer' } },
259
+ end_turn: { attributes: {} },
260
+ win: { attributes: { side: 'integer' } },
261
+ lose: { attributes: { side: 'integer' } },
262
+ say: { attributes: { speaker: 'id', text: 'string' } },
263
+ dialogue: { attributes: { id: 'id', ref: 'id' }, children: ['say', 'choice', 'branch', 'message'] },
264
+ choice: { attributes: { text: 'string', event: 'id' }, children: ['branch'] },
265
+ branch: { attributes: { text: 'string' }, children: ['message', 'say', 'command'] },
266
+ trait: { attributes: { id: 'id', name: 'string' }, children: ['effect'] },
267
+ ability: { attributes: { id: 'id', name: 'string' }, children: ['effect'] },
268
+ weapon_special: { attributes: { id: 'id', name: 'string' } },
269
+ // A hook call: `name` is `type:hookName` and any further attributes are
270
+ // passed to the hook as context.
271
+ hook: { attributes: { name: 'string' }, openAttributes: 'string' },
272
+ item: {
273
+ attributes: { id: 'id', name: 'string', slot: 'id', stackable: 'boolean', weight: 'number' },
274
+ children: ['effect'],
275
+ },
276
+ inventory: { attributes: { unit: 'string', side: 'integer', items: 'string' } },
277
+ monster: {
278
+ attributes: {
279
+ id: 'string',
280
+ name: 'string',
281
+ hp: 'integer',
282
+ types: 'string',
283
+ attack: 'number',
284
+ defense: 'number',
285
+ speed: 'number',
286
+ accuracy: 'number',
287
+ evasion: 'number',
288
+ damage_min: 'integer',
289
+ damage_max: 'integer',
290
+ armor_min: 'integer',
291
+ armor_max: 'integer',
292
+ experience: 'integer',
293
+ max_level: 'integer',
294
+ image: 'string',
295
+ },
296
+ children: ['ability', 'loot'],
297
+ },
298
+ status: { attributes: { id: 'id', name: 'string', duration: 'integer', tick: 'string', modifiers: 'string' } },
299
+ loot: { attributes: { item: 'id', chance: 'number', quantity: 'integer', weight: 'number' } },
300
+ turn_clock: { attributes: { id: 'id', tick: 'number', hunger: 'number' } },
301
+ ai: { attributes: { id: 'id', strategy: 'id', target: 'id', difficulty: 'number' }, children: ['behavior'] },
302
+ behavior: { attributes: { id: 'id', when: 'string', action: 'string', hook: 'string' } },
303
+ battle_move: { attributes: { id: 'id', type: 'id', target: 'id', power: 'number', cost: 'number' } },
304
+ type_matchup: { attributes: { attacker: 'id', defender: 'id', multiplier: 'number' } },
305
+ evolution: { attributes: { from: 'id', into: 'id', level: 'integer' } },
306
+ effect: {
307
+ attributes: {
308
+ apply_to: 'id',
309
+ range: 'id',
310
+ increase: 'string',
311
+ increase_total: 'string',
312
+ increase_damage: 'string',
313
+ add: 'string',
314
+ sub: 'string',
315
+ multiply: 'string',
316
+ divide: 'string',
317
+ set: 'string',
318
+ },
319
+ },
320
+ save: { attributes: { version: 'integer', fields: 'string', migration: 'string' } },
321
+ };
322
+ export function validate(nodes, schemas = schema01) {
323
+ const diagnostics = [];
324
+ const visit = (node) => {
325
+ const definition = schemas[node.tag];
326
+ if (!definition) {
327
+ diagnostics.push({ code: 'MWL_UNKNOWN_TAG', message: `unknown tag ${node.tag}`, location: node.location });
328
+ return;
329
+ }
330
+ for (const name of Object.keys(node.attributes)) {
331
+ if (definition.openAttributes)
332
+ continue;
333
+ if (!definition.attributes || !(name in definition.attributes))
334
+ diagnostics.push({
335
+ code: 'MWL_UNKNOWN_ATTRIBUTE',
336
+ message: `unknown attribute ${name} on ${node.tag}`,
337
+ location: node.location,
338
+ });
339
+ }
340
+ for (const [name, type] of Object.entries(definition.attributes ?? {})) {
341
+ const value = node.attributes[name];
342
+ if (value !== undefined && !validType(value, type))
343
+ diagnostics.push({ code: 'MWL_VALUE', message: `${name} must be ${type}`, location: node.location });
344
+ }
345
+ if (definition.openAttributes) {
346
+ for (const [name, value] of Object.entries(node.attributes)) {
347
+ if (!validType(value, definition.openAttributes))
348
+ diagnostics.push({
349
+ code: 'MWL_VALUE',
350
+ message: `${name} must be ${definition.openAttributes}`,
351
+ location: node.location,
352
+ });
353
+ }
354
+ }
355
+ for (const child of node.children) {
356
+ if (!definition.openChildren && definition.children && !definition.children.includes(child.tag))
357
+ diagnostics.push({
358
+ code: 'MWL_CHILD',
359
+ message: `${child.tag} is not allowed inside ${node.tag}`,
360
+ location: child.location,
361
+ });
362
+ visit(child);
363
+ }
364
+ };
365
+ nodes.forEach(visit);
366
+ return diagnostics.sort((a, b) => a.location.line - b.location.line || a.location.column - b.location.column);
367
+ }
368
+ function validType(value, type) {
369
+ if (type === 'number')
370
+ return Number.isFinite(Number(value));
371
+ if (type === 'integer')
372
+ return /^-?\d+$/.test(value);
373
+ if (type === 'boolean')
374
+ return value === 'true' || value === 'false' || value === 'yes' || value === 'no';
375
+ if (type === 'id')
376
+ return /^[A-Za-z_][\w.-]*$/.test(value);
377
+ return true;
378
+ }
379
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/mwl/schema.ts"],"names":[],"mappings":"AAoBA,MAAM,CAAC,MAAM,QAAQ,GAA2C;IAC/D,IAAI,EAAE;QACL,UAAU,EAAE;YACX,MAAM,EAAE,QAAQ;YAChB,KAAK,EAAE,QAAQ;YACf,SAAS,EAAE,QAAQ;YACnB,WAAW,EAAE,IAAI;YACjB,gBAAgB,EAAE,IAAI;YACtB,SAAS,EAAE,QAAQ;SACnB;QACD,QAAQ,EAAE;YACT,cAAc;YACd,UAAU;YACV,WAAW;YACX,MAAM;YACN,MAAM;YACN,KAAK;YACL,UAAU;YACV,OAAO;YACP,YAAY;YACZ,OAAO;YACP,gBAAgB;YAChB,UAAU;YACV,MAAM;YACN,MAAM;YACN,WAAW;YACX,SAAS;YACT,QAAQ;YACR,MAAM;YACN,YAAY;YACZ,aAAa;YACb,cAAc;YACd,WAAW;SACX;KACD;IACD,YAAY,EAAE;QACb,UAAU,EAAE;YACX,EAAE,EAAE,IAAI;YACR,MAAM,EAAE,QAAQ;YAChB,OAAO,EAAE,QAAQ;YACjB,SAAS,EAAE,QAAQ;YACnB,YAAY,EAAE,QAAQ;YACtB,KAAK,EAAE,SAAS;YAChB,YAAY,EAAE,SAAS;YACvB,QAAQ,EAAE,QAAQ;YAClB,SAAS,EAAE,QAAQ;YACnB,YAAY,EAAE,QAAQ;YACtB,OAAO,EAAE,QAAQ;YACjB,OAAO,EAAE,QAAQ;SACjB;KACD;IACD,QAAQ,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,QAAQ,EAAE,CAAC,gBAAgB,EAAE,SAAS,EAAE,YAAY,CAAC,EAAE;IAC7G,mFAAmF;IACnF,cAAc,EAAE,EAAE,cAAc,EAAE,QAAQ,EAAE;IAC5C,OAAO,EAAE,EAAE,cAAc,EAAE,QAAQ,EAAE;IACrC,UAAU,EAAE,EAAE,cAAc,EAAE,QAAQ,EAAE;IACxC,SAAS,EAAE;QACV,UAAU,EAAE;YACX,2EAA2E;YAC3E,2CAA2C;YAC3C,EAAE,EAAE,QAAQ;YACZ,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,QAAQ;YACrB,KAAK,EAAE,QAAQ;YACf,UAAU,EAAE,QAAQ;YACpB,OAAO,EAAE,QAAQ;YACjB,KAAK,EAAE,QAAQ;YACf,SAAS,EAAE,SAAS;YACpB,QAAQ,EAAE,SAAS;YACnB,aAAa,EAAE,IAAI;YACnB,QAAQ,EAAE,IAAI;YACd,UAAU,EAAE,SAAS;YACrB,KAAK,EAAE,SAAS;YAChB,SAAS,EAAE,IAAI;YACf,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,QAAQ;YACrB,IAAI,EAAE,IAAI;YACV,KAAK,EAAE,IAAI;SACX;QACD,QAAQ,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,SAAS,CAAC;KACxC;IACD,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE;IAC9G,MAAM,EAAE;QACP,UAAU,EAAE;YACX,EAAE,EAAE,IAAI;YACR,sEAAsE;YACtE,QAAQ,EAAE,QAAQ;YAClB,QAAQ,EAAE,QAAQ;YAClB,MAAM,EAAE,QAAQ;YAChB,MAAM,EAAE,SAAS;YACjB,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,QAAQ;YACf,WAAW,EAAE,QAAQ;YACrB,IAAI,EAAE,IAAI;YACV,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,SAAS;YACjB,MAAM,EAAE,SAAS;YACjB,OAAO,EAAE,SAAS;YAClB,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,QAAQ;SAClB;KACD;IACD,IAAI,EAAE;QACL,UAAU,EAAE;YACX,qEAAqE;YACrE,EAAE,EAAE,SAAS;YACb,UAAU,EAAE,IAAI;YAChB,IAAI,EAAE,SAAS;YACf,MAAM,EAAE,SAAS;YACjB,WAAW,EAAE,SAAS;YACtB,kBAAkB,EAAE,SAAS;YAC7B,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,QAAQ;YACjB,KAAK,EAAE,QAAQ;SACf;KACD;IACD,GAAG,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE;IACzG,KAAK,EAAE,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE;IACtE,QAAQ,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE;IAC1D,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,EAAE;IAC1E,KAAK,EAAE;QACN,UAAU,EAAE;YACX,EAAE,EAAE,IAAI;YACR,EAAE,EAAE,IAAI;YACR,OAAO,EAAE,IAAI;YACb,0EAA0E;YAC1E,+DAA+D;YAC/D,CAAC,EAAE,SAAS;YACZ,CAAC,EAAE,SAAS;YACZ,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,QAAQ;YACd,sEAAsE;YACtE,+CAA+C;YAC/C,IAAI,EAAE,SAAS;SACf;QACD,QAAQ,EAAE;YACT,WAAW;YACX,QAAQ;YACR,SAAS;YACT,KAAK;YACL,UAAU;YACV,MAAM;YACN,QAAQ;YACR,OAAO;YACP,MAAM;YACN,MAAM;YACN,cAAc;YACd,IAAI;YACJ,MAAM;YACN,SAAS;YACT,UAAU;YACV,UAAU;YACV,KAAK;YACL,MAAM;YACN,MAAM;SACN;KACD;IACD,UAAU,EAAE;QACX,UAAU,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE;QACpE,QAAQ,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC;KAC/B;IACD,OAAO,EAAE;QACR,UAAU,EAAE;YACX,IAAI,EAAE,SAAS;YACf,SAAS,EAAE,IAAI;YACf,IAAI,EAAE,QAAQ;YACd,CAAC,EAAE,SAAS;YACZ,CAAC,EAAE,SAAS;YACZ,WAAW,EAAE,SAAS;YACtB,KAAK,EAAE,SAAS;YAChB,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,QAAQ;YACd,+DAA+D;YAC/D,KAAK,EAAE,SAAS;SAChB;KACD;IACD,MAAM,EAAE;QACP,UAAU,EAAE;YACX,IAAI,EAAE,SAAS;YACf,SAAS,EAAE,IAAI;YACf,IAAI,EAAE,QAAQ;YACd,CAAC,EAAE,SAAS;YACZ,CAAC,EAAE,SAAS;YACZ,WAAW,EAAE,SAAS;YACtB,KAAK,EAAE,SAAS;YAChB,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,SAAS;SAChB;KACD;IACD,SAAS,EAAE,EAAE,UAAU,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE;IAC/D,MAAM,EAAE;QACP,UAAU,EAAE;YACX,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,QAAQ;YACd,CAAC,EAAE,SAAS;YACZ,CAAC,EAAE,SAAS;YACZ,KAAK,EAAE,SAAS;YAChB,SAAS,EAAE,IAAI;YACf,WAAW,EAAE,SAAS;SACtB;KACD;IACD,OAAO,EAAE;QACR,UAAU,EAAE;YACX,IAAI,EAAE,IAAI;YACV,MAAM,EAAE,QAAQ;YAChB,KAAK,EAAE,QAAQ;YACf,MAAM,EAAE,SAAS;YACjB,CAAC,EAAE,SAAS;YACZ,CAAC,EAAE,SAAS;YACZ,EAAE,EAAE,SAAS;SACb;KACD;IACD,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE;IACtF,KAAK,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE;IACnH,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE;IAC1D,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE;IAC7E,YAAY,EAAE,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;IAC3E,EAAE,EAAE;QACH,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QAC9B,QAAQ,EAAE;YACT,WAAW;YACX,SAAS;YACT,SAAS;YACT,MAAM;YACN,QAAQ;YACR,OAAO;YACP,MAAM;YACN,MAAM;YACN,cAAc;YACd,KAAK;YACL,MAAM;YACN,MAAM;SACN;KACD;IACD,IAAI,EAAE;QACL,QAAQ,EAAE;YACT,WAAW;YACX,SAAS;YACT,SAAS;YACT,MAAM;YACN,QAAQ;YACR,OAAO;YACP,MAAM;YACN,MAAM;YACN,cAAc;YACd,KAAK;YACL,MAAM;YACN,MAAM;SACN;KACD;IACD,OAAO,EAAE;QACR,0EAA0E;QAC1E,UAAU,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE;KACvG;IACD,QAAQ,EAAE,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE;IAC1F,QAAQ,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;IAC5B,GAAG,EAAE,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE;IACxC,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE;IACzC,GAAG,EAAE,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;IACtD,QAAQ,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,EAAE;IACnG,MAAM,EAAE,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE;IAC7E,MAAM,EAAE,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,QAAQ,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE;IACnF,KAAK,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE;IACzE,OAAO,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE;IAC3E,cAAc,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;IAC5D,wEAAwE;IACxE,iCAAiC;IACjC,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,cAAc,EAAE,QAAQ,EAAE;IAClE,IAAI,EAAE;QACL,UAAU,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE;QAC5F,QAAQ,EAAE,CAAC,QAAQ,CAAC;KACpB;IACD,SAAS,EAAE,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;IAC/E,OAAO,EAAE;QACR,UAAU,EAAE;YACX,EAAE,EAAE,QAAQ;YACZ,IAAI,EAAE,QAAQ;YACd,EAAE,EAAE,SAAS;YACb,KAAK,EAAE,QAAQ;YACf,MAAM,EAAE,QAAQ;YAChB,OAAO,EAAE,QAAQ;YACjB,KAAK,EAAE,QAAQ;YACf,QAAQ,EAAE,QAAQ;YAClB,OAAO,EAAE,QAAQ;YACjB,UAAU,EAAE,SAAS;YACrB,UAAU,EAAE,SAAS;YACrB,SAAS,EAAE,SAAS;YACpB,SAAS,EAAE,SAAS;YACpB,UAAU,EAAE,SAAS;YACrB,SAAS,EAAE,SAAS;YACpB,KAAK,EAAE,QAAQ;SACf;QACD,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC;KAC7B;IACD,MAAM,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE;IAC9G,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE;IAC7F,UAAU,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE;IAC1E,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,QAAQ,EAAE,CAAC,UAAU,CAAC,EAAE;IAC5G,QAAQ,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;IACxF,WAAW,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;IACpG,YAAY,EAAE,EAAE,UAAU,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE;IACtF,SAAS,EAAE,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;IACvE,MAAM,EAAE;QACP,UAAU,EAAE;YACX,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,IAAI;YACX,QAAQ,EAAE,QAAQ;YAClB,cAAc,EAAE,QAAQ;YACxB,eAAe,EAAE,QAAQ;YACzB,GAAG,EAAE,QAAQ;YACb,GAAG,EAAE,QAAQ;YACb,QAAQ,EAAE,QAAQ;YAClB,MAAM,EAAE,QAAQ;YAChB,GAAG,EAAE,QAAQ;SACb;KACD;IACD,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE;CACnF,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,KAAyB,EAAE,OAAO,GAAG,QAAQ;IACrE,MAAM,WAAW,GAAoB,EAAE,CAAC;IACxC,MAAM,KAAK,GAAG,CAAC,IAAa,EAAQ,EAAE;QACrC,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,CAAC,UAAU,EAAE,CAAC;YACjB,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,eAAe,IAAI,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC3G,OAAO;QACR,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YACjD,IAAI,UAAU,CAAC,cAAc;gBAAE,SAAS;YACxC,IAAI,CAAC,UAAU,CAAC,UAAU,IAAI,CAAC,CAAC,IAAI,IAAI,UAAU,CAAC,UAAU,CAAC;gBAC7D,WAAW,CAAC,IAAI,CAAC;oBAChB,IAAI,EAAE,uBAAuB;oBAC7B,OAAO,EAAE,qBAAqB,IAAI,OAAO,IAAI,CAAC,GAAG,EAAE;oBACnD,QAAQ,EAAE,IAAI,CAAC,QAAQ;iBACvB,CAAC,CAAC;QACL,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE,CAAC;YACxE,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YACpC,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC;gBACjD,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,IAAI,YAAY,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QACvG,CAAC;QACD,IAAI,UAAU,CAAC,cAAc,EAAE,CAAC;YAC/B,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC7D,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC,cAAc,CAAC;oBAC/C,WAAW,CAAC,IAAI,CAAC;wBAChB,IAAI,EAAE,WAAW;wBACjB,OAAO,EAAE,GAAG,IAAI,YAAY,UAAU,CAAC,cAAc,EAAE;wBACvD,QAAQ,EAAE,IAAI,CAAC,QAAQ;qBACvB,CAAC,CAAC;YACL,CAAC;QACF,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnC,IAAI,CAAC,UAAU,CAAC,YAAY,IAAI,UAAU,CAAC,QAAQ,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC;gBAC9F,WAAW,CAAC,IAAI,CAAC;oBAChB,IAAI,EAAE,WAAW;oBACjB,OAAO,EAAE,GAAG,KAAK,CAAC,GAAG,0BAA0B,IAAI,CAAC,GAAG,EAAE;oBACzD,QAAQ,EAAE,KAAK,CAAC,QAAQ;iBACxB,CAAC,CAAC;YACJ,KAAK,CAAC,KAAK,CAAC,CAAC;QACd,CAAC;IACF,CAAC,CAAC;IACF,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACrB,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC/G,CAAC;AAED,SAAS,SAAS,CAAC,KAAa,EAAE,IAAkB;IACnD,IAAI,IAAI,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAC7D,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrD,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,IAAI,CAAC;IAC1G,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3D,OAAO,IAAI,CAAC;AACb,CAAC"}
package/dist/version.d.ts CHANGED
@@ -9,5 +9,5 @@
9
9
  * this from `package.json` automatically, chosen because this project's own build already
10
10
  * has no step before `tsc`/`vite` that this would need to run ahead of.
11
11
  */
12
- export declare const version = "0.6.0";
12
+ export declare const version = "0.7.1";
13
13
  //# sourceMappingURL=version.d.ts.map
package/dist/version.js CHANGED
@@ -9,5 +9,5 @@
9
9
  * this from `package.json` automatically, chosen because this project's own build already
10
10
  * has no step before `tsc`/`vite` that this would need to run ahead of.
11
11
  */
12
- export const version = '0.6.0';
12
+ export const version = '0.7.1';
13
13
  //# sourceMappingURL=version.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@datamoc/mw_games",
3
- "version": "0.6.0",
3
+ "version": "0.7.1",
4
4
  "description": "A local-file game framework: renderer-free game logic, drawn through PixiJS in 2D or Babylon.js in 3D, with mobile and desktop packaging.",
5
5
  "license": "MPL-2.0",
6
6
  "repository": {
@@ -39,8 +39,11 @@
39
39
  "files": [
40
40
  "dist",
41
41
  "tools/compile-resources.mjs",
42
+ "tools/extract-html.mjs",
43
+ "tools/extract-html.d.mts",
42
44
  "tools/compress-dist.mjs",
43
45
  "tools/compress-dist.d.mts",
46
+ "tools/mwl.mjs",
44
47
  "LICENSE",
45
48
  "README.md"
46
49
  ],
@@ -105,6 +108,10 @@
105
108
  "types": "./dist/simulation/index.d.ts",
106
109
  "import": "./dist/simulation/index.js"
107
110
  },
111
+ "./mwl": {
112
+ "types": "./dist/mwl/index.d.ts",
113
+ "import": "./dist/mwl/index.js"
114
+ },
108
115
  "./tools/compile-resources": "./tools/compile-resources.mjs",
109
116
  "./tools/compress-dist": "./tools/compress-dist.mjs",
110
117
  "./two-d": {
@@ -141,17 +148,19 @@
141
148
  "format:check": "prettier --check .",
142
149
  "api:report": "npm run build:pkg && node tools/api-report.mjs",
143
150
  "api:check": "node tools/api-report.mjs --check",
151
+ "mwl": "npm run build:pkg && node tools/mwl.mjs",
144
152
  "size:check": "node tools/bundle-size.mjs",
145
153
  "size:update": "node tools/bundle-size.mjs --update",
146
154
  "audit": "npm audit --audit-level=high",
147
155
  "example": "vite --config examples/colour-transform/vite.config.ts",
148
156
  "example:build": "vite build --config examples/colour-transform/vite.config.ts && node tools/emit-page.mjs examples/colour-transform",
149
157
  "test": "node --test \"tests/**/*.test.ts\"",
150
- "coverage": "node --test --experimental-test-coverage \"tests/**/*.test.ts\"",
151
- "coverage:check": "node --test --experimental-test-coverage --test-coverage-lines=88 --test-coverage-branches=89 --test-coverage-functions=82 \"tests/**/*.test.ts\"",
158
+ "coverage": "node --test --experimental-test-coverage --test-coverage-exclude=src/two-d/Game.ts --test-coverage-exclude=src/two-d/render/ColorTransformBatcher.ts --test-coverage-exclude=src/two-d/render/Minimap.ts --test-coverage-exclude=src/three-d/Vox.ts --test-coverage-exclude=src/two-d/stage/DialogueStage.ts --test-coverage-exclude=src/two-d/stage/EventDialogue.ts --test-coverage-exclude=src/two-d/ui/** --test-coverage-exclude=tools/** \"tests/**/*.test.ts\"",
159
+ "coverage:check": "node --test --experimental-test-coverage --test-coverage-lines=88 --test-coverage-branches=89 --test-coverage-functions=82 --test-coverage-exclude=src/two-d/Game.ts --test-coverage-exclude=src/two-d/render/ColorTransformBatcher.ts --test-coverage-exclude=src/two-d/render/Minimap.ts --test-coverage-exclude=src/three-d/Vox.ts --test-coverage-exclude=src/two-d/stage/DialogueStage.ts --test-coverage-exclude=src/two-d/stage/EventDialogue.ts --test-coverage-exclude=src/two-d/ui/** --test-coverage-exclude=tools/** \"tests/**/*.test.ts\"",
152
160
  "assets": "node tools/make-example-assets.mjs",
153
161
  "examples:build": "npm run assets && node tools/build-all-examples.mjs",
154
162
  "extract:rgssad": "node tools/extract-rgssad.mjs",
163
+ "extract:html": "node tools/extract-html.mjs",
155
164
  "i18n:edit": "node tools/i18n-edit.mjs",
156
165
  "i18n:check": "node tools/i18n-edit.mjs --check",
157
166
  "example:ui": "vite --config examples/interface/vite.config.ts",
@@ -163,7 +172,7 @@
163
172
  "example:village": "vite --config examples/village/vite.config.ts",
164
173
  "example:village:build": "vite build --config examples/village/vite.config.ts && node tools/emit-page.mjs examples/village",
165
174
  "example:battle": "vite --config examples/battle/vite.config.ts",
166
- "example:battle:build": "vite build --config examples/battle/vite.config.ts && node tools/emit-page.mjs examples/battle",
175
+ "example:battle:build": "npm run mwl -- build examples/battle/content -o examples/battle/generated && vite build --config examples/battle/vite.config.ts && node tools/emit-page.mjs examples/battle",
167
176
  "example:minigame": "vite --config examples/minigame/vite.config.ts",
168
177
  "example:minigame:build": "vite build --config examples/minigame/vite.config.ts && node tools/emit-page.mjs examples/minigame",
169
178
  "example:chess": "vite --config examples/chess/vite.config.ts",
@@ -192,6 +201,8 @@
192
201
  "example:event-system:build": "vite build --config examples/event-system/vite.config.ts && node tools/emit-page.mjs examples/event-system",
193
202
  "example:headless": "vite --config examples/headless/vite.config.ts",
194
203
  "example:headless:build": "vite build --config examples/headless/vite.config.ts && node tools/emit-page.mjs examples/headless",
204
+ "example:mwl-content": "vite --config examples/mwl-content/vite.config.ts",
205
+ "example:mwl-content:build": "npm run mwl -- build examples/mwl-content/content -o examples/mwl-content/generated && vite build --config examples/mwl-content/vite.config.ts && node tools/emit-page.mjs examples/mwl-content",
195
206
  "benchmark:browser": "npm run example:dungeon:build && node tools/benchmark-browser.mjs",
196
207
  "benchmark:3d": "npm run example:3d:build && node tools/benchmark-browser.mjs examples/three-d/dist/index.html",
197
208
  "benchmark:tower-defense": "npm run example:tower-defense:build && node tools/benchmark-browser.mjs examples/tower-defense/dist/index.html",
@@ -0,0 +1,18 @@
1
+ export interface ExtractedHtmlResource {
2
+ kind: 'script' | 'style' | 'json' | 'data-uri' | 'css-data-uri';
3
+ path: string;
4
+ mime: string;
5
+ bytes: number;
6
+ sourceOffset: number;
7
+ sourceValue: string;
8
+ }
9
+
10
+ export interface ExtractHtmlResult {
11
+ output: string;
12
+ html: string;
13
+ resources: ExtractedHtmlResource[];
14
+ warnings: string[];
15
+ manifest: Record<string, unknown>;
16
+ }
17
+
18
+ export function extractHtml(inputFile: string, outputDirectory?: string): Promise<ExtractHtmlResult>;