@datamoc/mw_games 0.5.4 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (303) hide show
  1. package/README.md +58 -3
  2. package/dist/actors/Appearances.d.ts.map +1 -1
  3. package/dist/actors/Appearances.js.map +1 -1
  4. package/dist/actors/Aura.d.ts.map +1 -1
  5. package/dist/actors/Aura.js.map +1 -1
  6. package/dist/actors/EntityTemplate.d.ts.map +1 -1
  7. package/dist/actors/EntityTemplate.js.map +1 -1
  8. package/dist/actors/Inventory.d.ts.map +1 -1
  9. package/dist/actors/Inventory.js +6 -1
  10. package/dist/actors/Inventory.js.map +1 -1
  11. package/dist/actors/Support.d.ts.map +1 -1
  12. package/dist/actors/Support.js.map +1 -1
  13. package/dist/actors/index.d.ts +1 -1
  14. package/dist/actors/index.d.ts.map +1 -1
  15. package/dist/actors/index.js.map +1 -1
  16. package/dist/actors/skillCheck.d.ts.map +1 -1
  17. package/dist/actors/skillCheck.js.map +1 -1
  18. package/dist/assets/Streaming.d.ts.map +1 -1
  19. package/dist/assets/Streaming.js.map +1 -1
  20. package/dist/assets/binary.d.ts.map +1 -1
  21. package/dist/assets/binary.js.map +1 -1
  22. package/dist/assets/loader.d.ts +15 -4
  23. package/dist/assets/loader.d.ts.map +1 -1
  24. package/dist/assets/loader.js +8 -23
  25. package/dist/assets/loader.js.map +1 -1
  26. package/dist/audio/Midi.d.ts.map +1 -1
  27. package/dist/audio/Midi.js +17 -3
  28. package/dist/audio/Midi.js.map +1 -1
  29. package/dist/audio/Music.d.ts.map +1 -1
  30. package/dist/audio/Music.js +8 -1
  31. package/dist/audio/Music.js.map +1 -1
  32. package/dist/audio/Synth.d.ts.map +1 -1
  33. package/dist/audio/Synth.js +1 -1
  34. package/dist/audio/Synth.js.map +1 -1
  35. package/dist/battle/BattleAI.js.map +1 -1
  36. package/dist/board/Army.d.ts.map +1 -1
  37. package/dist/board/Army.js.map +1 -1
  38. package/dist/board/Classics.d.ts.map +1 -1
  39. package/dist/board/Classics.js +310 -133
  40. package/dist/board/Classics.js.map +1 -1
  41. package/dist/board/FogOfWar.d.ts.map +1 -1
  42. package/dist/board/FogOfWar.js +12 -4
  43. package/dist/board/FogOfWar.js.map +1 -1
  44. package/dist/board/HexSkirmish.d.ts.map +1 -1
  45. package/dist/board/HexSkirmish.js +12 -4
  46. package/dist/board/HexSkirmish.js.map +1 -1
  47. package/dist/board/Tactics.d.ts.map +1 -1
  48. package/dist/board/Tactics.js +71 -26
  49. package/dist/board/Tactics.js.map +1 -1
  50. package/dist/board/chess.d.ts.map +1 -1
  51. package/dist/board/chess.js +8 -4
  52. package/dist/board/chess.js.map +1 -1
  53. package/dist/board/index.d.ts +2 -2
  54. package/dist/board/index.d.ts.map +1 -1
  55. package/dist/board/index.js +1 -1
  56. package/dist/board/index.js.map +1 -1
  57. package/dist/{roguelike → core}/Blob.d.ts +22 -11
  58. package/dist/core/Blob.d.ts.map +1 -0
  59. package/dist/{roguelike → core}/Blob.js +51 -28
  60. package/dist/core/Blob.js.map +1 -0
  61. package/dist/core/Csv.d.ts.map +1 -1
  62. package/dist/core/Csv.js +8 -2
  63. package/dist/core/Csv.js.map +1 -1
  64. package/dist/core/Input.d.ts.map +1 -1
  65. package/dist/core/Input.js +17 -4
  66. package/dist/core/Input.js.map +1 -1
  67. package/dist/core/Loading.d.ts.map +1 -1
  68. package/dist/core/Loading.js.map +1 -1
  69. package/dist/core/Motion.d.ts +27 -0
  70. package/dist/core/Motion.d.ts.map +1 -0
  71. package/dist/core/Motion.js +102 -0
  72. package/dist/core/Motion.js.map +1 -0
  73. package/dist/core/Multiplayer.d.ts.map +1 -1
  74. package/dist/core/Multiplayer.js.map +1 -1
  75. package/dist/core/PlayerInput.d.ts.map +1 -1
  76. package/dist/core/PlayerInput.js.map +1 -1
  77. package/dist/core/Replay.d.ts.map +1 -1
  78. package/dist/core/Replay.js.map +1 -1
  79. package/dist/core/Sanitize.d.ts.map +1 -1
  80. package/dist/core/Sanitize.js.map +1 -1
  81. package/dist/core/Save.d.ts.map +1 -1
  82. package/dist/core/Save.js.map +1 -1
  83. package/dist/core/Tween.d.ts +22 -2
  84. package/dist/core/Tween.d.ts.map +1 -1
  85. package/dist/core/Tween.js +30 -7
  86. package/dist/core/Tween.js.map +1 -1
  87. package/dist/core/index.d.ts +4 -0
  88. package/dist/core/index.d.ts.map +1 -1
  89. package/dist/core/index.js +2 -0
  90. package/dist/core/index.js.map +1 -1
  91. package/dist/i18n/Content.js +1 -2
  92. package/dist/i18n/Content.js.map +1 -1
  93. package/dist/i18n/EditSession.d.ts.map +1 -1
  94. package/dist/i18n/EditSession.js.map +1 -1
  95. package/dist/i18n/Fluent.d.ts.map +1 -1
  96. package/dist/i18n/Fluent.js +5 -1
  97. package/dist/i18n/Fluent.js.map +1 -1
  98. package/dist/i18n/FormatSpec.d.ts.map +1 -1
  99. package/dist/i18n/FormatSpec.js +3 -1
  100. package/dist/i18n/FormatSpec.js.map +1 -1
  101. package/dist/i18n/Validate.d.ts.map +1 -1
  102. package/dist/i18n/Validate.js +10 -2
  103. package/dist/i18n/Validate.js.map +1 -1
  104. package/dist/i18n/index.d.ts +1 -1
  105. package/dist/i18n/index.d.ts.map +1 -1
  106. package/dist/i18n/index.js +27 -4
  107. package/dist/i18n/index.js.map +1 -1
  108. package/dist/index.d.ts +1 -0
  109. package/dist/index.d.ts.map +1 -1
  110. package/dist/index.js +1 -0
  111. package/dist/index.js.map +1 -1
  112. package/dist/mw_games.global.js +97 -94
  113. package/dist/mwl/actors.d.ts +16 -0
  114. package/dist/mwl/actors.d.ts.map +1 -0
  115. package/dist/mwl/actors.js +25 -0
  116. package/dist/mwl/actors.js.map +1 -0
  117. package/dist/mwl/catalog.d.ts +13 -0
  118. package/dist/mwl/catalog.d.ts.map +1 -0
  119. package/dist/mwl/catalog.js +52 -0
  120. package/dist/mwl/catalog.js.map +1 -0
  121. package/dist/mwl/compiler.d.ts +45 -0
  122. package/dist/mwl/compiler.d.ts.map +1 -0
  123. package/dist/mwl/compiler.js +69 -0
  124. package/dist/mwl/compiler.js.map +1 -0
  125. package/dist/mwl/content.d.ts +54 -0
  126. package/dist/mwl/content.d.ts.map +1 -0
  127. package/dist/mwl/content.js +97 -0
  128. package/dist/mwl/content.js.map +1 -0
  129. package/dist/mwl/expression.d.ts +21 -0
  130. package/dist/mwl/expression.d.ts.map +1 -0
  131. package/dist/mwl/expression.js +100 -0
  132. package/dist/mwl/expression.js.map +1 -0
  133. package/dist/mwl/grammar.d.ts +39 -0
  134. package/dist/mwl/grammar.d.ts.map +1 -0
  135. package/dist/mwl/grammar.js +204 -0
  136. package/dist/mwl/grammar.js.map +1 -0
  137. package/dist/mwl/hooks.d.ts +81 -0
  138. package/dist/mwl/hooks.d.ts.map +1 -0
  139. package/dist/mwl/hooks.js +78 -0
  140. package/dist/mwl/hooks.js.map +1 -0
  141. package/dist/mwl/index.d.ts +21 -0
  142. package/dist/mwl/index.d.ts.map +1 -0
  143. package/dist/mwl/index.js +11 -0
  144. package/dist/mwl/index.js.map +1 -0
  145. package/dist/mwl/persistence.d.ts +15 -0
  146. package/dist/mwl/persistence.d.ts.map +1 -0
  147. package/dist/mwl/persistence.js +33 -0
  148. package/dist/mwl/persistence.js.map +1 -0
  149. package/dist/mwl/runtime.d.ts +169 -0
  150. package/dist/mwl/runtime.d.ts.map +1 -0
  151. package/dist/mwl/runtime.js +519 -0
  152. package/dist/mwl/runtime.js.map +1 -0
  153. package/dist/mwl/schema.d.ts +20 -0
  154. package/dist/mwl/schema.d.ts.map +1 -0
  155. package/dist/mwl/schema.js +351 -0
  156. package/dist/mwl/schema.js.map +1 -0
  157. package/dist/roguelike/ContentRoll.d.ts.map +1 -1
  158. package/dist/roguelike/ContentRoll.js.map +1 -1
  159. package/dist/roguelike/Doors.d.ts.map +1 -1
  160. package/dist/roguelike/Doors.js.map +1 -1
  161. package/dist/roguelike/DungeonParity.d.ts.map +1 -1
  162. package/dist/roguelike/DungeonParity.js +13 -4
  163. package/dist/roguelike/DungeonParity.js.map +1 -1
  164. package/dist/roguelike/Features.d.ts.map +1 -1
  165. package/dist/roguelike/Features.js.map +1 -1
  166. package/dist/roguelike/FieldOfView.d.ts.map +1 -1
  167. package/dist/roguelike/FieldOfView.js.map +1 -1
  168. package/dist/roguelike/Level.d.ts.map +1 -1
  169. package/dist/roguelike/Level.js.map +1 -1
  170. package/dist/roguelike/Scheduler.d.ts.map +1 -1
  171. package/dist/roguelike/Scheduler.js +10 -2
  172. package/dist/roguelike/Scheduler.js.map +1 -1
  173. package/dist/roguelike/Targeting.d.ts.map +1 -1
  174. package/dist/roguelike/Targeting.js.map +1 -1
  175. package/dist/roguelike/index.d.ts +0 -1
  176. package/dist/roguelike/index.d.ts.map +1 -1
  177. package/dist/roguelike/index.js +0 -1
  178. package/dist/roguelike/index.js.map +1 -1
  179. package/dist/rpg/Collision.d.ts.map +1 -1
  180. package/dist/rpg/Collision.js.map +1 -1
  181. package/dist/rpg/EventRunner.d.ts.map +1 -1
  182. package/dist/rpg/EventRunner.js.map +1 -1
  183. package/dist/rpg/Marshal.d.ts.map +1 -1
  184. package/dist/rpg/Marshal.js +2 -2
  185. package/dist/rpg/Marshal.js.map +1 -1
  186. package/dist/rpg/Quest.js.map +1 -1
  187. package/dist/rpg/index.d.ts +1 -1
  188. package/dist/rpg/index.d.ts.map +1 -1
  189. package/dist/rpg/index.js.map +1 -1
  190. package/dist/simulation/Scenario.d.ts.map +1 -1
  191. package/dist/simulation/Scenario.js.map +1 -1
  192. package/dist/simulation/Turns.d.ts.map +1 -1
  193. package/dist/simulation/Turns.js.map +1 -1
  194. package/dist/simulation/index.d.ts +1 -1
  195. package/dist/simulation/index.d.ts.map +1 -1
  196. package/dist/simulation/index.js.map +1 -1
  197. package/dist/three-d/Character3D.d.ts.map +1 -1
  198. package/dist/three-d/Character3D.js +3 -1
  199. package/dist/three-d/Character3D.js.map +1 -1
  200. package/dist/three-d/Collision3D.d.ts.map +1 -1
  201. package/dist/three-d/Collision3D.js.map +1 -1
  202. package/dist/three-d/Heightmap.d.ts.map +1 -1
  203. package/dist/three-d/Heightmap.js.map +1 -1
  204. package/dist/three-d/Models.d.ts.map +1 -1
  205. package/dist/three-d/Models.js.map +1 -1
  206. package/dist/three-d/TileGrid3D.d.ts.map +1 -1
  207. package/dist/three-d/TileGrid3D.js +5 -4
  208. package/dist/three-d/TileGrid3D.js.map +1 -1
  209. package/dist/three-d/Vox.d.ts.map +1 -1
  210. package/dist/three-d/Vox.js +6 -3
  211. package/dist/three-d/Vox.js.map +1 -1
  212. package/dist/two-d/render/AnimatedSprite.d.ts +6 -0
  213. package/dist/two-d/render/AnimatedSprite.d.ts.map +1 -1
  214. package/dist/two-d/render/AnimatedSprite.js +6 -0
  215. package/dist/two-d/render/AnimatedSprite.js.map +1 -1
  216. package/dist/two-d/render/Camera.d.ts.map +1 -1
  217. package/dist/two-d/render/Camera.js +13 -5
  218. package/dist/two-d/render/Camera.js.map +1 -1
  219. package/dist/two-d/render/Capabilities.d.ts.map +1 -1
  220. package/dist/two-d/render/Capabilities.js +48 -8
  221. package/dist/two-d/render/Capabilities.js.map +1 -1
  222. package/dist/two-d/render/ColorBlindness.d.ts.map +1 -1
  223. package/dist/two-d/render/ColorBlindness.js +3 -18
  224. package/dist/two-d/render/ColorBlindness.js.map +1 -1
  225. package/dist/two-d/render/ColorTransformBatcher.d.ts.map +1 -1
  226. package/dist/two-d/render/ColorTransformBatcher.js +1 -1
  227. package/dist/two-d/render/ColorTransformBatcher.js.map +1 -1
  228. package/dist/two-d/render/Particles.d.ts.map +1 -1
  229. package/dist/two-d/render/Particles.js +32 -6
  230. package/dist/two-d/render/Particles.js.map +1 -1
  231. package/dist/two-d/render/ScreenEffects.d.ts.map +1 -1
  232. package/dist/two-d/render/ScreenEffects.js +11 -0
  233. package/dist/two-d/render/ScreenEffects.js.map +1 -1
  234. package/dist/two-d/render/StatusVisuals.d.ts.map +1 -1
  235. package/dist/two-d/render/StatusVisuals.js +3 -1
  236. package/dist/two-d/render/StatusVisuals.js.map +1 -1
  237. package/dist/two-d/render/TileMap.d.ts.map +1 -1
  238. package/dist/two-d/render/TileMap.js +20 -16
  239. package/dist/two-d/render/TileMap.js.map +1 -1
  240. package/dist/two-d/render/TiledMap.d.ts.map +1 -1
  241. package/dist/two-d/render/TiledMap.js.map +1 -1
  242. package/dist/two-d/render/index.d.ts +3 -3
  243. package/dist/two-d/render/index.d.ts.map +1 -1
  244. package/dist/two-d/render/index.js +1 -1
  245. package/dist/two-d/render/index.js.map +1 -1
  246. package/dist/two-d/stage/DialogueStage.d.ts.map +1 -1
  247. package/dist/two-d/stage/DialogueStage.js +8 -4
  248. package/dist/two-d/stage/DialogueStage.js.map +1 -1
  249. package/dist/two-d/stage/script.d.ts.map +1 -1
  250. package/dist/two-d/stage/script.js.map +1 -1
  251. package/dist/two-d/stage/twee.d.ts.map +1 -1
  252. package/dist/two-d/stage/twee.js.map +1 -1
  253. package/dist/two-d/ui/Button.d.ts.map +1 -1
  254. package/dist/two-d/ui/Button.js +5 -2
  255. package/dist/two-d/ui/Button.js.map +1 -1
  256. package/dist/two-d/ui/FloatingText.d.ts.map +1 -1
  257. package/dist/two-d/ui/FloatingText.js +4 -1
  258. package/dist/two-d/ui/FloatingText.js.map +1 -1
  259. package/dist/two-d/ui/IconGrid.d.ts.map +1 -1
  260. package/dist/two-d/ui/IconGrid.js.map +1 -1
  261. package/dist/two-d/ui/ListView.d.ts.map +1 -1
  262. package/dist/two-d/ui/ListView.js.map +1 -1
  263. package/dist/two-d/ui/LoadingScreen.d.ts.map +1 -1
  264. package/dist/two-d/ui/LoadingScreen.js +6 -2
  265. package/dist/two-d/ui/LoadingScreen.js.map +1 -1
  266. package/dist/two-d/ui/MessageBox.d.ts +6 -0
  267. package/dist/two-d/ui/MessageBox.d.ts.map +1 -1
  268. package/dist/two-d/ui/MessageBox.js +11 -1
  269. package/dist/two-d/ui/MessageBox.js.map +1 -1
  270. package/dist/two-d/ui/NinePatch.d.ts.map +1 -1
  271. package/dist/two-d/ui/NinePatch.js.map +1 -1
  272. package/dist/two-d/ui/RebindScreen.d.ts.map +1 -1
  273. package/dist/two-d/ui/RebindScreen.js.map +1 -1
  274. package/dist/two-d/ui/Window.d.ts.map +1 -1
  275. package/dist/two-d/ui/Window.js +3 -0
  276. package/dist/two-d/ui/Window.js.map +1 -1
  277. package/dist/two-d/ui/a11y.d.ts +43 -0
  278. package/dist/two-d/ui/a11y.d.ts.map +1 -0
  279. package/dist/two-d/ui/a11y.js +79 -0
  280. package/dist/two-d/ui/a11y.js.map +1 -0
  281. package/dist/two-d/ui/contrast.d.ts +30 -0
  282. package/dist/two-d/ui/contrast.d.ts.map +1 -0
  283. package/dist/two-d/ui/contrast.js +42 -0
  284. package/dist/two-d/ui/contrast.js.map +1 -0
  285. package/dist/two-d/ui/index.d.ts +3 -0
  286. package/dist/two-d/ui/index.d.ts.map +1 -1
  287. package/dist/two-d/ui/index.js +2 -0
  288. package/dist/two-d/ui/index.js.map +1 -1
  289. package/dist/two-d/ui/markdown.d.ts.map +1 -1
  290. package/dist/two-d/ui/markdown.js +3 -1
  291. package/dist/two-d/ui/markdown.js.map +1 -1
  292. package/dist/two-d/ui/themedText.js +1 -1
  293. package/dist/two-d/ui/themedText.js.map +1 -1
  294. package/dist/version.d.ts +1 -1
  295. package/dist/version.js +1 -1
  296. package/dist/world/Environment.d.ts.map +1 -1
  297. package/dist/world/Environment.js +17 -6
  298. package/dist/world/Environment.js.map +1 -1
  299. package/package.json +264 -239
  300. package/tools/compress-dist.mjs +15 -1
  301. package/tools/mwl.mjs +153 -0
  302. package/dist/roguelike/Blob.d.ts.map +0 -1
  303. package/dist/roguelike/Blob.js.map +0 -1
package/tools/mwl.mjs ADDED
@@ -0,0 +1,153 @@
1
+ import fs from 'node:fs';
2
+ import { createRequire } from 'node:module';
3
+ import path from 'node:path';
4
+ import process from 'node:process';
5
+ import { pathToFileURL } from 'node:url';
6
+ import {
7
+ collectHookReferences,
8
+ compile,
9
+ emitHooksDeclaration,
10
+ emitModule,
11
+ extractCatalog,
12
+ parse,
13
+ preprocess,
14
+ validate,
15
+ validateHookReferences,
16
+ } from '../dist/mwl/index.js';
17
+
18
+ /**
19
+ * Command line for MWL: validate, compile, extract-i18n, assets, hooks, build.
20
+ *
21
+ * Reading files happens here, not in the published module, so the library
22
+ * itself stays free of node builtins. `hooks` needs esbuild and says so
23
+ * clearly when it is not installed; the framework does not depend on it, so a
24
+ * project without hooks pays nothing for the feature.
25
+ */
26
+
27
+ const args = process.argv.slice(2);
28
+ const commands = ['validate', 'compile', 'extract-i18n', 'assets', 'hooks', 'build'];
29
+ const [command, input] = args;
30
+ const outputFlag = args.indexOf('-o');
31
+ const output = outputFlag === -1 ? undefined : args[outputFlag + 1];
32
+ const manifestFlag = args.indexOf('--manifest');
33
+ const manifestPath = manifestFlag === -1 ? undefined : args[manifestFlag + 1];
34
+
35
+ if (!command || !input || !commands.includes(command)) {
36
+ console.error('Usage: mwl <validate|compile|extract-i18n|assets|hooks|build> input.mwl [-o output] [--manifest hooks.json]');
37
+ process.exitCode = 2;
38
+ } else {
39
+ const source = fs.readFileSync(input, 'utf8');
40
+ if (command === 'validate') {
41
+ const diagnostics = validate(parse(preprocess(source, { file: input }), input));
42
+ if (diagnostics.length) {
43
+ for (const diagnostic of diagnostics)
44
+ console.error(
45
+ `${diagnostic.location.file}:${diagnostic.location.line}:${diagnostic.location.column}: ${diagnostic.message}`,
46
+ );
47
+ process.exitCode = 1;
48
+ } else console.log(`${input}: valid MWL`);
49
+ } else if (command === 'hooks') {
50
+ await hooks(source);
51
+ } else if (command === 'build') {
52
+ build(source);
53
+ } else {
54
+ const result = compile(source, { file: input });
55
+ const values =
56
+ command === 'extract-i18n' ? extractCatalog(result) : command === 'assets' ? result.assets : result;
57
+ const text = command === 'compile' ? emitModule(result) : `${JSON.stringify(values, null, '\t')}\n`;
58
+ if (output) {
59
+ fs.mkdirSync(path.dirname(path.resolve(output)), { recursive: true });
60
+ fs.writeFileSync(output, text);
61
+ } else process.stdout.write(text);
62
+ }
63
+ }
64
+
65
+ /** One deterministic build step for the three files every MWL game consumes. */
66
+ function build(source) {
67
+ const game = compile(source, { file: input });
68
+ const directory = path.resolve(output ?? 'generated');
69
+ fs.mkdirSync(directory, { recursive: true });
70
+ fs.writeFileSync(path.join(directory, 'game-data.ts'), emitModule(game));
71
+ fs.writeFileSync(path.join(directory, 'i18n.json'), `${JSON.stringify(extractCatalog(game), null, '\t')}\n`);
72
+ fs.writeFileSync(path.join(directory, 'assets.json'), `${JSON.stringify({ assets: game.assets }, null, '\t')}\n`);
73
+ console.log(`built MWL into ${directory}`);
74
+ }
75
+
76
+ /**
77
+ * `mwl hooks game.mwl` prints the hook references content needs.
78
+ * `mwl hooks game.mwl --manifest hooks.json -o generated/hooks.mjs` resolves
79
+ * each reference against the manifest, bundles the hook sources with esbuild,
80
+ * and writes the matching declaration next to the bundle.
81
+ */
82
+ async function hooks(source) {
83
+ const game = compile(source, { file: input });
84
+ const references = collectHookReferences(game);
85
+ if (!output) {
86
+ process.stdout.write(
87
+ `${JSON.stringify(
88
+ references.map((reference) => `${reference.type}:${reference.name}`),
89
+ null,
90
+ '\t',
91
+ )}\n`,
92
+ );
93
+ return;
94
+ }
95
+ const manifest = manifestPath ? JSON.parse(fs.readFileSync(manifestPath, 'utf8')) : {};
96
+ const diagnostics = validateHookReferences(references, Object.keys(manifest));
97
+ if (diagnostics.length) {
98
+ for (const diagnostic of diagnostics)
99
+ console.error(`${diagnostic.location.file}:${diagnostic.location.line}: ${diagnostic.message}`);
100
+ console.error(`${diagnostics.length} hook reference(s) have no manifest entry; nothing was bundled`);
101
+ process.exitCode = 1;
102
+ return;
103
+ }
104
+
105
+ // Resolve esbuild from the game project (the working directory), not from
106
+ // the framework package: the framework does not depend on esbuild, and the
107
+ // project that writes hooks is the one that installs the bundler.
108
+ const requireFromProject = createRequire(pathToFileURL(path.join(process.cwd(), 'package.json')));
109
+ let esbuild = null;
110
+ try {
111
+ esbuild = requireFromProject('esbuild');
112
+ } catch {
113
+ esbuild = null;
114
+ }
115
+ if (!esbuild) {
116
+ console.error('mwl hooks needs esbuild. Install it in the game project: npm install --save-dev esbuild');
117
+ process.exitCode = 2;
118
+ return;
119
+ }
120
+
121
+ const manifestDir = manifestPath ? path.dirname(path.resolve(manifestPath)) : process.cwd();
122
+ // The entry file lives beside the hooks so its imports stay relative;
123
+ // esbuild does not resolve `file://` import specifiers.
124
+ const entryFile = path.join(manifestDir, `.mwl-hooks-${process.pid}-${Date.now()}.ts`);
125
+ const imports = [];
126
+ const exports = [];
127
+ references.forEach((reference, index) => {
128
+ const id = `${reference.type}:${reference.name}`;
129
+ const [file, exportName = reference.name] = String(manifest[id]).split('#');
130
+ const relative = path.relative(manifestDir, path.resolve(manifestDir, file)).split(path.sep).join('/');
131
+ const specifier = relative.startsWith('.') ? relative : `./${relative}`;
132
+ imports.push(`import { ${exportName} as hook${index} } from ${JSON.stringify(specifier)};`);
133
+ exports.push(`\t${JSON.stringify(id)}: hook${index},`);
134
+ });
135
+ const entry = `${imports.join('\n')}\n\nexport const hooks = {\n${exports.join('\n')}\n};\n`;
136
+ fs.writeFileSync(entryFile, entry);
137
+ try {
138
+ fs.mkdirSync(path.dirname(path.resolve(output)), { recursive: true });
139
+ await esbuild.build({
140
+ entryPoints: [entryFile],
141
+ bundle: true,
142
+ format: 'esm',
143
+ platform: 'neutral',
144
+ target: 'es2022',
145
+ outfile: output,
146
+ logLevel: 'silent',
147
+ });
148
+ fs.writeFileSync(`${output}.d.ts`, emitHooksDeclaration(references));
149
+ console.log(`bundled ${references.length} hook(s) into ${output}`);
150
+ } finally {
151
+ fs.rmSync(entryFile, { force: true });
152
+ }
153
+ }
@@ -1 +0,0 @@
1
- {"version":3,"file":"Blob.d.ts","sourceRoot":"","sources":["../../src/roguelike/Blob.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,qBAAa,IAAI;IAChB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAExB,OAAO,CAAC,MAAM,CAAe;IAE7B,YAAY,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAIxC;IAED,4DAA4D;IAC5D,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAGrC;IAED,iFAAiF;IACjF,KAAK,IAAI,MAAM,CAId;IAED,2EAA2E;IAC3E,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAG/C;IAED;;;;;OAKG;IACH,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,OAAO,EAAE,MAAM,SAAO,EAAE,KAAK,SAAM,GAAG,IAAI,CAgCpF;IAED,qFAAqF;IACrF,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,CAAC;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAS3E;IAED,MAAM,IAAI;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,CAE5D;IAED,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,IAAI,CAI/E;CACD"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Blob.js","sourceRoot":"","sources":["../../src/roguelike/Blob.ts"],"names":[],"mappings":"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"}