@al8b/runtime 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (185) hide show
  1. package/README.md +87 -0
  2. package/dist/assets/constructors.d.mts +6 -0
  3. package/dist/assets/constructors.d.ts +6 -0
  4. package/dist/assets/constructors.js +40 -0
  5. package/dist/assets/constructors.js.map +1 -0
  6. package/dist/assets/constructors.mjs +12 -0
  7. package/dist/assets/constructors.mjs.map +1 -0
  8. package/dist/assets/index.d.mts +11 -0
  9. package/dist/assets/index.d.ts +11 -0
  10. package/dist/assets/index.js +276 -0
  11. package/dist/assets/index.js.map +1 -0
  12. package/dist/assets/index.mjs +247 -0
  13. package/dist/assets/index.mjs.map +1 -0
  14. package/dist/assets/loader.d.mts +83 -0
  15. package/dist/assets/loader.d.ts +83 -0
  16. package/dist/assets/loader.js +260 -0
  17. package/dist/assets/loader.js.map +1 -0
  18. package/dist/assets/loader.mjs +237 -0
  19. package/dist/assets/loader.mjs.map +1 -0
  20. package/dist/browser/index.js +16599 -0
  21. package/dist/browser/index.js.map +1 -0
  22. package/dist/browser/index.min.js +171 -0
  23. package/dist/constants.d.mts +16 -0
  24. package/dist/constants.d.ts +16 -0
  25. package/dist/constants.js +49 -0
  26. package/dist/constants.js.map +1 -0
  27. package/dist/constants.mjs +18 -0
  28. package/dist/constants.mjs.map +1 -0
  29. package/dist/core/api-factory.d.mts +63 -0
  30. package/dist/core/api-factory.d.ts +63 -0
  31. package/dist/core/api-factory.js +239 -0
  32. package/dist/core/api-factory.js.map +1 -0
  33. package/dist/core/api-factory.mjs +214 -0
  34. package/dist/core/api-factory.mjs.map +1 -0
  35. package/dist/core/assets-registry.d.mts +14 -0
  36. package/dist/core/assets-registry.d.ts +14 -0
  37. package/dist/core/assets-registry.js +64 -0
  38. package/dist/core/assets-registry.js.map +1 -0
  39. package/dist/core/assets-registry.mjs +41 -0
  40. package/dist/core/assets-registry.mjs.map +1 -0
  41. package/dist/core/controller.d.mts +109 -0
  42. package/dist/core/controller.d.ts +109 -0
  43. package/dist/core/controller.js +1782 -0
  44. package/dist/core/controller.js.map +1 -0
  45. package/dist/core/controller.mjs +1758 -0
  46. package/dist/core/controller.mjs.map +1 -0
  47. package/dist/core/debug-logger.d.mts +35 -0
  48. package/dist/core/debug-logger.d.ts +35 -0
  49. package/dist/core/debug-logger.js +177 -0
  50. package/dist/core/debug-logger.js.map +1 -0
  51. package/dist/core/debug-logger.mjs +154 -0
  52. package/dist/core/debug-logger.mjs.map +1 -0
  53. package/dist/core/error-handler.d.mts +25 -0
  54. package/dist/core/error-handler.d.ts +25 -0
  55. package/dist/core/error-handler.js +106 -0
  56. package/dist/core/error-handler.js.map +1 -0
  57. package/dist/core/error-handler.mjs +81 -0
  58. package/dist/core/error-handler.mjs.map +1 -0
  59. package/dist/core/index.d.mts +14 -0
  60. package/dist/core/index.d.ts +14 -0
  61. package/dist/core/index.js +1782 -0
  62. package/dist/core/index.js.map +1 -0
  63. package/dist/core/index.mjs +1757 -0
  64. package/dist/core/index.mjs.map +1 -0
  65. package/dist/hot-reload/index.d.mts +7 -0
  66. package/dist/hot-reload/index.d.ts +7 -0
  67. package/dist/hot-reload/index.js +103 -0
  68. package/dist/hot-reload/index.js.map +1 -0
  69. package/dist/hot-reload/index.mjs +78 -0
  70. package/dist/hot-reload/index.mjs.map +1 -0
  71. package/dist/hot-reload/updater.d.mts +33 -0
  72. package/dist/hot-reload/updater.d.ts +33 -0
  73. package/dist/hot-reload/updater.js +101 -0
  74. package/dist/hot-reload/updater.js.map +1 -0
  75. package/dist/hot-reload/updater.mjs +78 -0
  76. package/dist/hot-reload/updater.mjs.map +1 -0
  77. package/dist/index.d.mts +24 -0
  78. package/dist/index.d.ts +24 -0
  79. package/dist/index.js +1859 -0
  80. package/dist/index.js.map +1 -0
  81. package/dist/index.mjs +1817 -0
  82. package/dist/index.mjs.map +1 -0
  83. package/dist/input/index.d.mts +2 -0
  84. package/dist/input/index.d.ts +2 -0
  85. package/dist/input/index.js +79 -0
  86. package/dist/input/index.js.map +1 -0
  87. package/dist/input/index.mjs +54 -0
  88. package/dist/input/index.mjs.map +1 -0
  89. package/dist/input/manager.d.mts +37 -0
  90. package/dist/input/manager.d.ts +37 -0
  91. package/dist/input/manager.js +77 -0
  92. package/dist/input/manager.js.map +1 -0
  93. package/dist/input/manager.mjs +54 -0
  94. package/dist/input/manager.mjs.map +1 -0
  95. package/dist/loop/game-loop.d.mts +63 -0
  96. package/dist/loop/game-loop.d.ts +63 -0
  97. package/dist/loop/game-loop.js +156 -0
  98. package/dist/loop/game-loop.js.map +1 -0
  99. package/dist/loop/game-loop.mjs +131 -0
  100. package/dist/loop/game-loop.mjs.map +1 -0
  101. package/dist/loop/index.d.mts +1 -0
  102. package/dist/loop/index.d.ts +1 -0
  103. package/dist/loop/index.js +156 -0
  104. package/dist/loop/index.js.map +1 -0
  105. package/dist/loop/index.mjs +131 -0
  106. package/dist/loop/index.mjs.map +1 -0
  107. package/dist/storage/index.d.mts +1 -0
  108. package/dist/storage/index.d.ts +1 -0
  109. package/dist/storage/index.js +31 -0
  110. package/dist/storage/index.js.map +1 -0
  111. package/dist/storage/index.mjs +6 -0
  112. package/dist/storage/index.mjs.map +1 -0
  113. package/dist/system/api.d.mts +28 -0
  114. package/dist/system/api.d.ts +28 -0
  115. package/dist/system/api.js +126 -0
  116. package/dist/system/api.js.map +1 -0
  117. package/dist/system/api.mjs +101 -0
  118. package/dist/system/api.mjs.map +1 -0
  119. package/dist/system/index.d.mts +2 -0
  120. package/dist/system/index.d.ts +2 -0
  121. package/dist/system/index.js +126 -0
  122. package/dist/system/index.js.map +1 -0
  123. package/dist/system/index.mjs +101 -0
  124. package/dist/system/index.mjs.map +1 -0
  125. package/dist/types/assets.d.mts +43 -0
  126. package/dist/types/assets.d.ts +43 -0
  127. package/dist/types/assets.js +19 -0
  128. package/dist/types/assets.js.map +1 -0
  129. package/dist/types/assets.mjs +1 -0
  130. package/dist/types/assets.mjs.map +1 -0
  131. package/dist/types/bridge.d.mts +66 -0
  132. package/dist/types/bridge.d.ts +66 -0
  133. package/dist/types/bridge.js +19 -0
  134. package/dist/types/bridge.js.map +1 -0
  135. package/dist/types/bridge.mjs +1 -0
  136. package/dist/types/bridge.mjs.map +1 -0
  137. package/dist/types/index.d.mts +6 -0
  138. package/dist/types/index.d.ts +6 -0
  139. package/dist/types/index.js +19 -0
  140. package/dist/types/index.js.map +1 -0
  141. package/dist/types/index.mjs +1 -0
  142. package/dist/types/index.mjs.map +1 -0
  143. package/dist/types/runtime.d.mts +71 -0
  144. package/dist/types/runtime.d.ts +71 -0
  145. package/dist/types/runtime.js +19 -0
  146. package/dist/types/runtime.js.map +1 -0
  147. package/dist/types/runtime.mjs +1 -0
  148. package/dist/types/runtime.mjs.map +1 -0
  149. package/dist/types/vm.d.mts +1 -0
  150. package/dist/types/vm.d.ts +1 -0
  151. package/dist/types/vm.js +19 -0
  152. package/dist/types/vm.js.map +1 -0
  153. package/dist/types/vm.mjs +1 -0
  154. package/dist/types/vm.mjs.map +1 -0
  155. package/dist/utils/deep-clone.d.mts +14 -0
  156. package/dist/utils/deep-clone.d.ts +14 -0
  157. package/dist/utils/deep-clone.js +42 -0
  158. package/dist/utils/deep-clone.js.map +1 -0
  159. package/dist/utils/deep-clone.mjs +19 -0
  160. package/dist/utils/deep-clone.mjs.map +1 -0
  161. package/dist/utils/index.d.mts +3 -0
  162. package/dist/utils/index.d.ts +3 -0
  163. package/dist/utils/index.js +156 -0
  164. package/dist/utils/index.js.map +1 -0
  165. package/dist/utils/index.mjs +129 -0
  166. package/dist/utils/index.mjs.map +1 -0
  167. package/dist/utils/object-pool.d.mts +66 -0
  168. package/dist/utils/object-pool.d.ts +66 -0
  169. package/dist/utils/object-pool.js +113 -0
  170. package/dist/utils/object-pool.js.map +1 -0
  171. package/dist/utils/object-pool.mjs +90 -0
  172. package/dist/utils/object-pool.mjs.map +1 -0
  173. package/dist/utils/shallow-equal.d.mts +15 -0
  174. package/dist/utils/shallow-equal.d.ts +15 -0
  175. package/dist/utils/shallow-equal.js +53 -0
  176. package/dist/utils/shallow-equal.js.map +1 -0
  177. package/dist/utils/shallow-equal.mjs +30 -0
  178. package/dist/utils/shallow-equal.mjs.map +1 -0
  179. package/dist/vm/index.d.mts +1 -0
  180. package/dist/vm/index.d.ts +1 -0
  181. package/dist/vm/index.js +37 -0
  182. package/dist/vm/index.js.map +1 -0
  183. package/dist/vm/index.mjs +9 -0
  184. package/dist/vm/index.mjs.map +1 -0
  185. package/package.json +52 -0
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
20
+
21
+ // src/hot-reload/updater.ts
22
+ var updater_exports = {};
23
+ __export(updater_exports, {
24
+ SourceUpdater: () => SourceUpdater
25
+ });
26
+ module.exports = __toCommonJS(updater_exports);
27
+ var SourceUpdater = class {
28
+ static {
29
+ __name(this, "SourceUpdater");
30
+ }
31
+ vm;
32
+ listener;
33
+ audio;
34
+ screen;
35
+ reportWarnings;
36
+ emitBridgeEvent;
37
+ updateMemory = {};
38
+ previousInit = null;
39
+ constructor(vm, listener, audio, screen, reportWarnings, emitBridgeEvent) {
40
+ this.vm = vm;
41
+ this.listener = listener;
42
+ this.audio = audio;
43
+ this.screen = screen;
44
+ this.reportWarnings = reportWarnings;
45
+ this.emitBridgeEvent = emitBridgeEvent;
46
+ }
47
+ /**
48
+ * Update source code (hot reload)
49
+ */
50
+ updateSource(file, src, reinit = false) {
51
+ if (!this.vm) return false;
52
+ if (src === this.updateMemory[file]) return false;
53
+ this.updateMemory[file] = src;
54
+ if (this.audio) {
55
+ this.audio.cancelBeeps();
56
+ }
57
+ if (this.screen) {
58
+ this.screen.clear();
59
+ }
60
+ try {
61
+ this.vm.run(src, 3e3, file);
62
+ if (this.emitBridgeEvent) {
63
+ this.emitBridgeEvent("compile_success", {
64
+ file
65
+ });
66
+ }
67
+ if (this.reportWarnings) {
68
+ this.reportWarnings();
69
+ }
70
+ if (this.vm.error_info) {
71
+ const err = Object.assign({}, this.vm.error_info);
72
+ err.type = "init";
73
+ err.file = file;
74
+ this.listener.reportError?.(err);
75
+ return false;
76
+ }
77
+ if (this.vm.runner?.getFunctionSource) {
78
+ const init = this.vm.runner.getFunctionSource("init");
79
+ if (init && init !== this.previousInit && reinit) {
80
+ this.previousInit = init;
81
+ this.vm.call("init");
82
+ if (this.vm.error_info) {
83
+ const err = Object.assign({}, this.vm.error_info);
84
+ err.type = "init";
85
+ this.listener.reportError?.(err);
86
+ }
87
+ }
88
+ }
89
+ return true;
90
+ } catch (err) {
91
+ err.file = file;
92
+ this.listener.reportError?.(err);
93
+ return false;
94
+ }
95
+ }
96
+ };
97
+ // Annotate the CommonJS export names for ESM import in node:
98
+ 0 && (module.exports = {
99
+ SourceUpdater
100
+ });
101
+ //# sourceMappingURL=updater.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/hot-reload/updater.ts"],"sourcesContent":["/**\n * Source code updater for hot reload\n * Matches runtime behavior for source updates\n */\n\nimport type { L8BVM } from \"@al8b/vm\";\nimport type { RuntimeListener } from \"../types\";\n\nexport class SourceUpdater {\n\tprivate updateMemory: Record<string, string> = {};\n\tprivate previousInit: string | null = null;\n\n\tconstructor(\n\t\tprivate vm: L8BVM,\n\t\tprivate listener: RuntimeListener,\n\t\tprivate audio?: { cancelBeeps(): void },\n\t\tprivate screen?: { clear(): void },\n\t\tprivate reportWarnings?: () => void,\n\t\tprivate emitBridgeEvent?: (name: string, payload?: unknown) => void,\n\t) {}\n\n\t/**\n\t * Update source code (hot reload)\n\t */\n\tupdateSource(file: string, src: string, reinit = false): boolean {\n\t\t// Return false if VM is not available\n\t\tif (!this.vm) return false;\n\n\t\t// Return false if source code hasn't changed\n\t\tif (src === this.updateMemory[file]) return false;\n\n\t\tthis.updateMemory[file] = src;\n\n\t\t// Cancel beeps and clear screen before hot reload\n\t\tif (this.audio) {\n\t\t\tthis.audio.cancelBeeps();\n\t\t}\n\t\tif (this.screen) {\n\t\t\tthis.screen.clear();\n\t\t}\n\n\t\ttry {\n\t\t\t// Compile and execute updated source code\n\t\t\t// Timeout of 3000ms prevents infinite loops during hot reload\n\t\t\tthis.vm.run(src, 3000, file);\n\n\t\t\t// Notify parent process of successful compilation\n\t\t\tif (this.emitBridgeEvent) {\n\t\t\t\tthis.emitBridgeEvent(\"compile_success\", { file });\n\t\t\t}\n\n\t\t\t// Report warnings after compilation\n\t\t\tif (this.reportWarnings) {\n\t\t\t\tthis.reportWarnings();\n\t\t\t}\n\n\t\t\t// Check for compilation or runtime errors from VM\n\t\t\tif (this.vm.error_info) {\n\t\t\t\tconst err: any = Object.assign({}, this.vm.error_info);\n\t\t\t\terr.type = \"init\";\n\t\t\t\terr.file = file;\n\t\t\t\tthis.listener.reportError?.(err);\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Re-run init() function if it was modified during hot reload\n\t\t\t// This allows reinitialization without full page refresh\n\t\t\tif ((this.vm.runner as any)?.getFunctionSource) {\n\t\t\t\tconst init = (this.vm.runner as any).getFunctionSource(\"init\");\n\t\t\t\tif (init && init !== this.previousInit && reinit) {\n\t\t\t\t\tthis.previousInit = init;\n\t\t\t\t\tthis.vm.call(\"init\");\n\t\t\t\t\tif (this.vm.error_info) {\n\t\t\t\t\t\tconst err: any = Object.assign({}, this.vm.error_info);\n\t\t\t\t\t\terr.type = \"init\";\n\t\t\t\t\t\tthis.listener.reportError?.(err);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn true;\n\t\t} catch (err: any) {\n\t\t\t// Handle exceptions during compilation or execution\n\t\t\terr.file = file;\n\t\t\tthis.listener.reportError?.(err);\n\t\t\treturn false;\n\t\t}\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;;;;;AAQO,IAAMA,gBAAN,MAAMA;EARb,OAQaA;;;;;;;;;EACJC,eAAuC,CAAC;EACxCC,eAA8B;EAEtC,YACSC,IACAC,UACAC,OACAC,QACAC,gBACAC,iBACP;SANOL,KAAAA;SACAC,WAAAA;SACAC,QAAAA;SACAC,SAAAA;SACAC,iBAAAA;SACAC,kBAAAA;EACN;;;;EAKHC,aAAaC,MAAcC,KAAaC,SAAS,OAAgB;AAEhE,QAAI,CAAC,KAAKT,GAAI,QAAO;AAGrB,QAAIQ,QAAQ,KAAKV,aAAaS,IAAAA,EAAO,QAAO;AAE5C,SAAKT,aAAaS,IAAAA,IAAQC;AAG1B,QAAI,KAAKN,OAAO;AACf,WAAKA,MAAMQ,YAAW;IACvB;AACA,QAAI,KAAKP,QAAQ;AAChB,WAAKA,OAAOQ,MAAK;IAClB;AAEA,QAAI;AAGH,WAAKX,GAAGY,IAAIJ,KAAK,KAAMD,IAAAA;AAGvB,UAAI,KAAKF,iBAAiB;AACzB,aAAKA,gBAAgB,mBAAmB;UAAEE;QAAK,CAAA;MAChD;AAGA,UAAI,KAAKH,gBAAgB;AACxB,aAAKA,eAAc;MACpB;AAGA,UAAI,KAAKJ,GAAGa,YAAY;AACvB,cAAMC,MAAWC,OAAOC,OAAO,CAAC,GAAG,KAAKhB,GAAGa,UAAU;AACrDC,YAAIG,OAAO;AACXH,YAAIP,OAAOA;AACX,aAAKN,SAASiB,cAAcJ,GAAAA;AAC5B,eAAO;MACR;AAIA,UAAK,KAAKd,GAAGmB,QAAgBC,mBAAmB;AAC/C,cAAMC,OAAQ,KAAKrB,GAAGmB,OAAeC,kBAAkB,MAAA;AACvD,YAAIC,QAAQA,SAAS,KAAKtB,gBAAgBU,QAAQ;AACjD,eAAKV,eAAesB;AACpB,eAAKrB,GAAGsB,KAAK,MAAA;AACb,cAAI,KAAKtB,GAAGa,YAAY;AACvB,kBAAMC,MAAWC,OAAOC,OAAO,CAAC,GAAG,KAAKhB,GAAGa,UAAU;AACrDC,gBAAIG,OAAO;AACX,iBAAKhB,SAASiB,cAAcJ,GAAAA;UAC7B;QACD;MACD;AAEA,aAAO;IACR,SAASA,KAAU;AAElBA,UAAIP,OAAOA;AACX,WAAKN,SAASiB,cAAcJ,GAAAA;AAC5B,aAAO;IACR;EACD;AACD;","names":["SourceUpdater","updateMemory","previousInit","vm","listener","audio","screen","reportWarnings","emitBridgeEvent","updateSource","file","src","reinit","cancelBeeps","clear","run","error_info","err","Object","assign","type","reportError","runner","getFunctionSource","init","call"]}
@@ -0,0 +1,78 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
+
4
+ // src/hot-reload/updater.ts
5
+ var SourceUpdater = class {
6
+ static {
7
+ __name(this, "SourceUpdater");
8
+ }
9
+ vm;
10
+ listener;
11
+ audio;
12
+ screen;
13
+ reportWarnings;
14
+ emitBridgeEvent;
15
+ updateMemory = {};
16
+ previousInit = null;
17
+ constructor(vm, listener, audio, screen, reportWarnings, emitBridgeEvent) {
18
+ this.vm = vm;
19
+ this.listener = listener;
20
+ this.audio = audio;
21
+ this.screen = screen;
22
+ this.reportWarnings = reportWarnings;
23
+ this.emitBridgeEvent = emitBridgeEvent;
24
+ }
25
+ /**
26
+ * Update source code (hot reload)
27
+ */
28
+ updateSource(file, src, reinit = false) {
29
+ if (!this.vm) return false;
30
+ if (src === this.updateMemory[file]) return false;
31
+ this.updateMemory[file] = src;
32
+ if (this.audio) {
33
+ this.audio.cancelBeeps();
34
+ }
35
+ if (this.screen) {
36
+ this.screen.clear();
37
+ }
38
+ try {
39
+ this.vm.run(src, 3e3, file);
40
+ if (this.emitBridgeEvent) {
41
+ this.emitBridgeEvent("compile_success", {
42
+ file
43
+ });
44
+ }
45
+ if (this.reportWarnings) {
46
+ this.reportWarnings();
47
+ }
48
+ if (this.vm.error_info) {
49
+ const err = Object.assign({}, this.vm.error_info);
50
+ err.type = "init";
51
+ err.file = file;
52
+ this.listener.reportError?.(err);
53
+ return false;
54
+ }
55
+ if (this.vm.runner?.getFunctionSource) {
56
+ const init = this.vm.runner.getFunctionSource("init");
57
+ if (init && init !== this.previousInit && reinit) {
58
+ this.previousInit = init;
59
+ this.vm.call("init");
60
+ if (this.vm.error_info) {
61
+ const err = Object.assign({}, this.vm.error_info);
62
+ err.type = "init";
63
+ this.listener.reportError?.(err);
64
+ }
65
+ }
66
+ }
67
+ return true;
68
+ } catch (err) {
69
+ err.file = file;
70
+ this.listener.reportError?.(err);
71
+ return false;
72
+ }
73
+ }
74
+ };
75
+ export {
76
+ SourceUpdater
77
+ };
78
+ //# sourceMappingURL=updater.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/hot-reload/updater.ts"],"sourcesContent":["/**\n * Source code updater for hot reload\n * Matches runtime behavior for source updates\n */\n\nimport type { L8BVM } from \"@al8b/vm\";\nimport type { RuntimeListener } from \"../types\";\n\nexport class SourceUpdater {\n\tprivate updateMemory: Record<string, string> = {};\n\tprivate previousInit: string | null = null;\n\n\tconstructor(\n\t\tprivate vm: L8BVM,\n\t\tprivate listener: RuntimeListener,\n\t\tprivate audio?: { cancelBeeps(): void },\n\t\tprivate screen?: { clear(): void },\n\t\tprivate reportWarnings?: () => void,\n\t\tprivate emitBridgeEvent?: (name: string, payload?: unknown) => void,\n\t) {}\n\n\t/**\n\t * Update source code (hot reload)\n\t */\n\tupdateSource(file: string, src: string, reinit = false): boolean {\n\t\t// Return false if VM is not available\n\t\tif (!this.vm) return false;\n\n\t\t// Return false if source code hasn't changed\n\t\tif (src === this.updateMemory[file]) return false;\n\n\t\tthis.updateMemory[file] = src;\n\n\t\t// Cancel beeps and clear screen before hot reload\n\t\tif (this.audio) {\n\t\t\tthis.audio.cancelBeeps();\n\t\t}\n\t\tif (this.screen) {\n\t\t\tthis.screen.clear();\n\t\t}\n\n\t\ttry {\n\t\t\t// Compile and execute updated source code\n\t\t\t// Timeout of 3000ms prevents infinite loops during hot reload\n\t\t\tthis.vm.run(src, 3000, file);\n\n\t\t\t// Notify parent process of successful compilation\n\t\t\tif (this.emitBridgeEvent) {\n\t\t\t\tthis.emitBridgeEvent(\"compile_success\", { file });\n\t\t\t}\n\n\t\t\t// Report warnings after compilation\n\t\t\tif (this.reportWarnings) {\n\t\t\t\tthis.reportWarnings();\n\t\t\t}\n\n\t\t\t// Check for compilation or runtime errors from VM\n\t\t\tif (this.vm.error_info) {\n\t\t\t\tconst err: any = Object.assign({}, this.vm.error_info);\n\t\t\t\terr.type = \"init\";\n\t\t\t\terr.file = file;\n\t\t\t\tthis.listener.reportError?.(err);\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Re-run init() function if it was modified during hot reload\n\t\t\t// This allows reinitialization without full page refresh\n\t\t\tif ((this.vm.runner as any)?.getFunctionSource) {\n\t\t\t\tconst init = (this.vm.runner as any).getFunctionSource(\"init\");\n\t\t\t\tif (init && init !== this.previousInit && reinit) {\n\t\t\t\t\tthis.previousInit = init;\n\t\t\t\t\tthis.vm.call(\"init\");\n\t\t\t\t\tif (this.vm.error_info) {\n\t\t\t\t\t\tconst err: any = Object.assign({}, this.vm.error_info);\n\t\t\t\t\t\terr.type = \"init\";\n\t\t\t\t\t\tthis.listener.reportError?.(err);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn true;\n\t\t} catch (err: any) {\n\t\t\t// Handle exceptions during compilation or execution\n\t\t\terr.file = file;\n\t\t\tthis.listener.reportError?.(err);\n\t\t\treturn false;\n\t\t}\n\t}\n}\n"],"mappings":";;;;AAQO,IAAMA,gBAAN,MAAMA;EARb,OAQaA;;;;;;;;;EACJC,eAAuC,CAAC;EACxCC,eAA8B;EAEtC,YACSC,IACAC,UACAC,OACAC,QACAC,gBACAC,iBACP;SANOL,KAAAA;SACAC,WAAAA;SACAC,QAAAA;SACAC,SAAAA;SACAC,iBAAAA;SACAC,kBAAAA;EACN;;;;EAKHC,aAAaC,MAAcC,KAAaC,SAAS,OAAgB;AAEhE,QAAI,CAAC,KAAKT,GAAI,QAAO;AAGrB,QAAIQ,QAAQ,KAAKV,aAAaS,IAAAA,EAAO,QAAO;AAE5C,SAAKT,aAAaS,IAAAA,IAAQC;AAG1B,QAAI,KAAKN,OAAO;AACf,WAAKA,MAAMQ,YAAW;IACvB;AACA,QAAI,KAAKP,QAAQ;AAChB,WAAKA,OAAOQ,MAAK;IAClB;AAEA,QAAI;AAGH,WAAKX,GAAGY,IAAIJ,KAAK,KAAMD,IAAAA;AAGvB,UAAI,KAAKF,iBAAiB;AACzB,aAAKA,gBAAgB,mBAAmB;UAAEE;QAAK,CAAA;MAChD;AAGA,UAAI,KAAKH,gBAAgB;AACxB,aAAKA,eAAc;MACpB;AAGA,UAAI,KAAKJ,GAAGa,YAAY;AACvB,cAAMC,MAAWC,OAAOC,OAAO,CAAC,GAAG,KAAKhB,GAAGa,UAAU;AACrDC,YAAIG,OAAO;AACXH,YAAIP,OAAOA;AACX,aAAKN,SAASiB,cAAcJ,GAAAA;AAC5B,eAAO;MACR;AAIA,UAAK,KAAKd,GAAGmB,QAAgBC,mBAAmB;AAC/C,cAAMC,OAAQ,KAAKrB,GAAGmB,OAAeC,kBAAkB,MAAA;AACvD,YAAIC,QAAQA,SAAS,KAAKtB,gBAAgBU,QAAQ;AACjD,eAAKV,eAAesB;AACpB,eAAKrB,GAAGsB,KAAK,MAAA;AACb,cAAI,KAAKtB,GAAGa,YAAY;AACvB,kBAAMC,MAAWC,OAAOC,OAAO,CAAC,GAAG,KAAKhB,GAAGa,UAAU;AACrDC,gBAAIG,OAAO;AACX,iBAAKhB,SAASiB,cAAcJ,GAAAA;UAC7B;QACD;MACD;AAEA,aAAO;IACR,SAASA,KAAU;AAElBA,UAAIP,OAAOA;AACX,WAAKN,SAASiB,cAAcJ,GAAAA;AAC5B,aAAO;IACR;EACD;AACD;","names":["SourceUpdater","updateMemory","previousInit","vm","listener","audio","screen","reportWarnings","emitBridgeEvent","updateSource","file","src","reinit","cancelBeeps","clear","run","error_info","err","Object","assign","type","reportError","runner","getFunctionSource","init","call"]}
@@ -0,0 +1,24 @@
1
+ export { Sound } from '@al8b/audio';
2
+ export { TileMap } from '@al8b/map';
3
+ export { Image } from '@al8b/image';
4
+ export { Sprite } from '@al8b/sprites';
5
+ export { AssetLoader } from './assets/loader.mjs';
6
+ export { RuntimeController, createRuntime } from './core/controller.mjs';
7
+ export { SourceUpdater } from './hot-reload/updater.mjs';
8
+ export { InputManager } from './input/manager.mjs';
9
+ export { GameLoop, GameLoopCallbacks, GameLoopState } from './loop/game-loop.mjs';
10
+ export { StorageService } from '@al8b/io';
11
+ export { System } from './system/api.mjs';
12
+ export { AssetCollections, ResourceFile, Resources } from './types/assets.mjs';
13
+ export { InputDebugSetting, RuntimeDebugOptions, RuntimeListener, RuntimeOptions } from './types/runtime.mjs';
14
+ export { HostEvent, HostEventSource, RuntimeBridge, RuntimeResetOptions, RuntimeSessionSnapshot, RuntimeSnapshot, RuntimeSnapshotMeta } from './types/bridge.mjs';
15
+ export { ErrorInfo, GlobalAPI, L8BVM, MetaFunctions, SystemAPI, VMContext, VMWarnings, WarningInfo, createMetaFunctions, createVMContext, setupArrayExtensions } from '@al8b/vm';
16
+ export { deepClone } from './utils/deep-clone.mjs';
17
+ export { ObjectPool } from './utils/object-pool.mjs';
18
+ export { shallowEqual } from './utils/shallow-equal.mjs';
19
+ import '@al8b/player';
20
+ import '@al8b/scene';
21
+ import '@al8b/screen';
22
+ import '@al8b/time';
23
+ import '@al8b/input';
24
+ import '@al8b/framework-shared';
@@ -0,0 +1,24 @@
1
+ export { Sound } from '@al8b/audio';
2
+ export { TileMap } from '@al8b/map';
3
+ export { Image } from '@al8b/image';
4
+ export { Sprite } from '@al8b/sprites';
5
+ export { AssetLoader } from './assets/loader.js';
6
+ export { RuntimeController, createRuntime } from './core/controller.js';
7
+ export { SourceUpdater } from './hot-reload/updater.js';
8
+ export { InputManager } from './input/manager.js';
9
+ export { GameLoop, GameLoopCallbacks, GameLoopState } from './loop/game-loop.js';
10
+ export { StorageService } from '@al8b/io';
11
+ export { System } from './system/api.js';
12
+ export { AssetCollections, ResourceFile, Resources } from './types/assets.js';
13
+ export { InputDebugSetting, RuntimeDebugOptions, RuntimeListener, RuntimeOptions } from './types/runtime.js';
14
+ export { HostEvent, HostEventSource, RuntimeBridge, RuntimeResetOptions, RuntimeSessionSnapshot, RuntimeSnapshot, RuntimeSnapshotMeta } from './types/bridge.js';
15
+ export { ErrorInfo, GlobalAPI, L8BVM, MetaFunctions, SystemAPI, VMContext, VMWarnings, WarningInfo, createMetaFunctions, createVMContext, setupArrayExtensions } from '@al8b/vm';
16
+ export { deepClone } from './utils/deep-clone.js';
17
+ export { ObjectPool } from './utils/object-pool.js';
18
+ export { shallowEqual } from './utils/shallow-equal.js';
19
+ import '@al8b/player';
20
+ import '@al8b/scene';
21
+ import '@al8b/screen';
22
+ import '@al8b/time';
23
+ import '@al8b/input';
24
+ import '@al8b/framework-shared';