@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,154 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
+
4
+ // src/core/debug-logger.ts
5
+ var DebugLogger = class {
6
+ static {
7
+ __name(this, "DebugLogger");
8
+ }
9
+ lastInputDebug;
10
+ lastScreenDebug;
11
+ /**
12
+ * Log input state changes (deduplication via shallow compare)
13
+ */
14
+ debugInputs(input, debug) {
15
+ if (!debug?.input) return;
16
+ const snapshot = this.createInputSnapshot(input, debug.input);
17
+ if (!snapshot) return;
18
+ if (this.lastInputDebug && shallowEqual(snapshot, this.lastInputDebug)) return;
19
+ this.lastInputDebug = snapshot;
20
+ console.debug("[@al8b/runtime][input]", snapshot);
21
+ }
22
+ /**
23
+ * Log screen dimension changes
24
+ */
25
+ debugScreen(screen, debug) {
26
+ if (!debug?.screen) return;
27
+ const canvas = screen.getCanvas();
28
+ const current = {
29
+ width: screen.width,
30
+ height: screen.height,
31
+ canvasWidth: canvas.width,
32
+ canvasHeight: canvas.height
33
+ };
34
+ if (this.lastScreenDebug && current.width === this.lastScreenDebug.width && current.height === this.lastScreenDebug.height && current.canvasWidth === this.lastScreenDebug.canvasWidth && current.canvasHeight === this.lastScreenDebug.canvasHeight) {
35
+ return;
36
+ }
37
+ this.lastScreenDebug = current;
38
+ console.debug("[@al8b/runtime][screen]", {
39
+ screen: {
40
+ width: screen.width,
41
+ height: screen.height
42
+ },
43
+ canvas: {
44
+ width: canvas.width,
45
+ height: canvas.height,
46
+ clientWidth: canvas.clientWidth,
47
+ clientHeight: canvas.clientHeight,
48
+ style: {
49
+ width: canvas.style.width,
50
+ height: canvas.style.height
51
+ }
52
+ }
53
+ });
54
+ }
55
+ /**
56
+ * Create a snapshot of current input state based on enabled channels
57
+ */
58
+ createInputSnapshot(input, setting) {
59
+ const channels = getEnabledInputChannels(setting);
60
+ if (channels.length === 0) return null;
61
+ const states = input.getStates();
62
+ const snapshot = {};
63
+ if (channels.includes("touch")) {
64
+ snapshot.touch = {
65
+ touching: states.touch.touching,
66
+ press: states.touch.press,
67
+ release: states.touch.release,
68
+ x: Number(states.touch.x?.toFixed?.(2) ?? states.touch.x),
69
+ y: Number(states.touch.y?.toFixed?.(2) ?? states.touch.y),
70
+ count: states.touch.touches?.length ?? 0
71
+ };
72
+ }
73
+ if (channels.includes("mouse")) {
74
+ snapshot.mouse = {
75
+ pressed: states.mouse.pressed,
76
+ left: states.mouse.left,
77
+ x: Number(states.mouse.x?.toFixed?.(2) ?? states.mouse.x),
78
+ y: Number(states.mouse.y?.toFixed?.(2) ?? states.mouse.y),
79
+ wheel: states.mouse.wheel
80
+ };
81
+ }
82
+ if (channels.includes("keyboard")) {
83
+ snapshot.keyboard = {
84
+ UP: states.keyboard.UP,
85
+ DOWN: states.keyboard.DOWN,
86
+ LEFT: states.keyboard.LEFT,
87
+ RIGHT: states.keyboard.RIGHT,
88
+ press: states.keyboard.press,
89
+ release: states.keyboard.release
90
+ };
91
+ }
92
+ if (channels.includes("gamepad")) {
93
+ snapshot.gamepad = {
94
+ count: input.gamepad.count,
95
+ A: states.gamepad.A,
96
+ B: states.gamepad.B,
97
+ UP: states.gamepad.UP,
98
+ DOWN: states.gamepad.DOWN,
99
+ LEFT: states.gamepad.LEFT,
100
+ RIGHT: states.gamepad.RIGHT
101
+ };
102
+ }
103
+ return Object.keys(snapshot).length === 0 ? null : snapshot;
104
+ }
105
+ };
106
+ function getEnabledInputChannels(setting) {
107
+ if (typeof setting === "boolean") {
108
+ return setting ? [
109
+ "keyboard",
110
+ "mouse",
111
+ "touch",
112
+ "gamepad"
113
+ ] : [];
114
+ }
115
+ const channels = [];
116
+ if (setting.keyboard) channels.push("keyboard");
117
+ if (setting.mouse) channels.push("mouse");
118
+ if (setting.touch) channels.push("touch");
119
+ if (setting.gamepad) channels.push("gamepad");
120
+ return channels;
121
+ }
122
+ __name(getEnabledInputChannels, "getEnabledInputChannels");
123
+ function shallowEqual(obj1, obj2) {
124
+ if (obj1 === obj2) return true;
125
+ if (!obj1 || !obj2 || typeof obj1 !== "object" || typeof obj2 !== "object") return false;
126
+ const keys1 = Object.keys(obj1);
127
+ const keys2 = Object.keys(obj2);
128
+ if (keys1.length !== keys2.length) return false;
129
+ for (const key of keys1) {
130
+ const val1 = obj1[key];
131
+ const val2 = obj2[key];
132
+ if (val1 === val2) continue;
133
+ if (val1 == null || val2 == null) {
134
+ if (val1 !== val2) return false;
135
+ continue;
136
+ }
137
+ if (typeof val1 === "object" && typeof val2 === "object") {
138
+ const keys1Nested = Object.keys(val1);
139
+ const keys2Nested = Object.keys(val2);
140
+ if (keys1Nested.length !== keys2Nested.length) return false;
141
+ for (const nestedKey of keys1Nested) {
142
+ if (val1[nestedKey] !== val2[nestedKey]) return false;
143
+ }
144
+ } else {
145
+ return false;
146
+ }
147
+ }
148
+ return true;
149
+ }
150
+ __name(shallowEqual, "shallowEqual");
151
+ export {
152
+ DebugLogger
153
+ };
154
+ //# sourceMappingURL=debug-logger.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/core/debug-logger.ts"],"sourcesContent":["/**\n * Debug Logger - Diagnostic logging for runtime subsystems\n *\n * Provides batched, shallow-compared debug output for input and screen state.\n * Only active when debug options are enabled.\n */\n\nimport type { InputManager } from \"../input\";\nimport type { Screen } from \"@al8b/screen\";\nimport type { RuntimeDebugOptions } from \"../types\";\n\nexport class DebugLogger {\n\tprivate lastInputDebug?: any;\n\tprivate lastScreenDebug?: {\n\t\twidth: number;\n\t\theight: number;\n\t\tcanvasWidth: number;\n\t\tcanvasHeight: number;\n\t};\n\n\t/**\n\t * Log input state changes (deduplication via shallow compare)\n\t */\n\tdebugInputs(input: InputManager, debug: RuntimeDebugOptions | undefined): void {\n\t\tif (!debug?.input) return;\n\n\t\tconst snapshot = this.createInputSnapshot(input, debug.input);\n\t\tif (!snapshot) return;\n\n\t\tif (this.lastInputDebug && shallowEqual(snapshot, this.lastInputDebug)) return;\n\n\t\tthis.lastInputDebug = snapshot;\n\t\tconsole.debug(\"[@al8b/runtime][input]\", snapshot);\n\t}\n\n\t/**\n\t * Log screen dimension changes\n\t */\n\tdebugScreen(screen: Screen, debug: RuntimeDebugOptions | undefined): void {\n\t\tif (!debug?.screen) return;\n\n\t\tconst canvas = screen.getCanvas();\n\t\tconst current = {\n\t\t\twidth: screen.width,\n\t\t\theight: screen.height,\n\t\t\tcanvasWidth: canvas.width,\n\t\t\tcanvasHeight: canvas.height,\n\t\t};\n\n\t\tif (\n\t\t\tthis.lastScreenDebug &&\n\t\t\tcurrent.width === this.lastScreenDebug.width &&\n\t\t\tcurrent.height === this.lastScreenDebug.height &&\n\t\t\tcurrent.canvasWidth === this.lastScreenDebug.canvasWidth &&\n\t\t\tcurrent.canvasHeight === this.lastScreenDebug.canvasHeight\n\t\t) {\n\t\t\treturn;\n\t\t}\n\t\tthis.lastScreenDebug = current;\n\t\tconsole.debug(\"[@al8b/runtime][screen]\", {\n\t\t\tscreen: { width: screen.width, height: screen.height },\n\t\t\tcanvas: {\n\t\t\t\twidth: canvas.width,\n\t\t\t\theight: canvas.height,\n\t\t\t\tclientWidth: canvas.clientWidth,\n\t\t\t\tclientHeight: canvas.clientHeight,\n\t\t\t\tstyle: { width: canvas.style.width, height: canvas.style.height },\n\t\t\t},\n\t\t});\n\t}\n\n\t/**\n\t * Create a snapshot of current input state based on enabled channels\n\t */\n\tprivate createInputSnapshot(\n\t\tinput: InputManager,\n\t\tsetting: NonNullable<RuntimeDebugOptions[\"input\"]>,\n\t): Record<string, any> | null {\n\t\tconst channels = getEnabledInputChannels(setting);\n\t\tif (channels.length === 0) return null;\n\n\t\tconst states = input.getStates();\n\t\tconst snapshot: Record<string, any> = {};\n\n\t\tif (channels.includes(\"touch\")) {\n\t\t\tsnapshot.touch = {\n\t\t\t\ttouching: states.touch.touching,\n\t\t\t\tpress: states.touch.press,\n\t\t\t\trelease: states.touch.release,\n\t\t\t\tx: Number(states.touch.x?.toFixed?.(2) ?? states.touch.x),\n\t\t\t\ty: Number(states.touch.y?.toFixed?.(2) ?? states.touch.y),\n\t\t\t\tcount: states.touch.touches?.length ?? 0,\n\t\t\t};\n\t\t}\n\n\t\tif (channels.includes(\"mouse\")) {\n\t\t\tsnapshot.mouse = {\n\t\t\t\tpressed: states.mouse.pressed,\n\t\t\t\tleft: states.mouse.left,\n\t\t\t\tx: Number(states.mouse.x?.toFixed?.(2) ?? states.mouse.x),\n\t\t\t\ty: Number(states.mouse.y?.toFixed?.(2) ?? states.mouse.y),\n\t\t\t\twheel: states.mouse.wheel,\n\t\t\t};\n\t\t}\n\n\t\tif (channels.includes(\"keyboard\")) {\n\t\t\tsnapshot.keyboard = {\n\t\t\t\tUP: states.keyboard.UP,\n\t\t\t\tDOWN: states.keyboard.DOWN,\n\t\t\t\tLEFT: states.keyboard.LEFT,\n\t\t\t\tRIGHT: states.keyboard.RIGHT,\n\t\t\t\tpress: states.keyboard.press,\n\t\t\t\trelease: states.keyboard.release,\n\t\t\t};\n\t\t}\n\n\t\tif (channels.includes(\"gamepad\")) {\n\t\t\tsnapshot.gamepad = {\n\t\t\t\tcount: input.gamepad.count,\n\t\t\t\tA: states.gamepad.A,\n\t\t\t\tB: states.gamepad.B,\n\t\t\t\tUP: states.gamepad.UP,\n\t\t\t\tDOWN: states.gamepad.DOWN,\n\t\t\t\tLEFT: states.gamepad.LEFT,\n\t\t\t\tRIGHT: states.gamepad.RIGHT,\n\t\t\t};\n\t\t}\n\n\t\treturn Object.keys(snapshot).length === 0 ? null : snapshot;\n\t}\n}\n\n/**\n * Get enabled input debug channels from setting\n */\nfunction getEnabledInputChannels(\n\tsetting: NonNullable<RuntimeDebugOptions[\"input\"]>,\n): Array<\"keyboard\" | \"mouse\" | \"touch\" | \"gamepad\"> {\n\tif (typeof setting === \"boolean\") {\n\t\treturn setting ? [\"keyboard\", \"mouse\", \"touch\", \"gamepad\"] : [];\n\t}\n\tconst channels: Array<\"keyboard\" | \"mouse\" | \"touch\" | \"gamepad\"> = [];\n\tif (setting.keyboard) channels.push(\"keyboard\");\n\tif (setting.mouse) channels.push(\"mouse\");\n\tif (setting.touch) channels.push(\"touch\");\n\tif (setting.gamepad) channels.push(\"gamepad\");\n\treturn channels;\n}\n\n/**\n * Shallow comparison of two objects (one level deep)\n */\nfunction shallowEqual(obj1: any, obj2: any): boolean {\n\tif (obj1 === obj2) return true;\n\tif (!obj1 || !obj2 || typeof obj1 !== \"object\" || typeof obj2 !== \"object\") return false;\n\n\tconst keys1 = Object.keys(obj1);\n\tconst keys2 = Object.keys(obj2);\n\tif (keys1.length !== keys2.length) return false;\n\n\tfor (const key of keys1) {\n\t\tconst val1 = obj1[key];\n\t\tconst val2 = obj2[key];\n\n\t\tif (val1 === val2) continue;\n\n\t\tif (val1 == null || val2 == null) {\n\t\t\tif (val1 !== val2) return false;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (typeof val1 === \"object\" && typeof val2 === \"object\") {\n\t\t\tconst keys1Nested = Object.keys(val1);\n\t\t\tconst keys2Nested = Object.keys(val2);\n\t\t\tif (keys1Nested.length !== keys2Nested.length) return false;\n\t\t\tfor (const nestedKey of keys1Nested) {\n\t\t\t\tif (val1[nestedKey] !== val2[nestedKey]) return false;\n\t\t\t}\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n}\n"],"mappings":"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","names":["DebugLogger","lastInputDebug","lastScreenDebug","debugInputs","input","debug","snapshot","createInputSnapshot","shallowEqual","console","debugScreen","screen","canvas","getCanvas","current","width","height","canvasWidth","canvasHeight","clientWidth","clientHeight","style","setting","channels","getEnabledInputChannels","length","states","getStates","includes","touch","touching","press","release","x","Number","toFixed","y","count","touches","mouse","pressed","left","wheel","keyboard","UP","DOWN","LEFT","RIGHT","gamepad","A","B","Object","keys","push","obj1","obj2","keys1","keys2","key","val1","val2","keys1Nested","keys2Nested","nestedKey"]}
@@ -0,0 +1,25 @@
1
+ import { RuntimeListener } from '../types/runtime.mjs';
2
+ import { L8BVM } from '@al8b/vm';
3
+ import '../types/assets.mjs';
4
+ import '@al8b/framework-shared';
5
+ import '../types/bridge.mjs';
6
+ import '@al8b/time';
7
+
8
+ /**
9
+ * Error Handler - Error formatting and reporting for the runtime
10
+ */
11
+
12
+ /**
13
+ * Format error message with diagnostic information
14
+ */
15
+ declare function formatRuntimeError(error: any): any;
16
+ /**
17
+ * Report error to listener with enhanced formatting
18
+ */
19
+ declare function reportError(listener: RuntimeListener, error: any): void;
20
+ /**
21
+ * Report warnings from VM context (invoking_non_function, using_undefined_variable)
22
+ */
23
+ declare function reportWarnings(vm: L8BVM | null, listener: RuntimeListener): void;
24
+
25
+ export { formatRuntimeError, reportError, reportWarnings };
@@ -0,0 +1,25 @@
1
+ import { RuntimeListener } from '../types/runtime.js';
2
+ import { L8BVM } from '@al8b/vm';
3
+ import '../types/assets.js';
4
+ import '@al8b/framework-shared';
5
+ import '../types/bridge.js';
6
+ import '@al8b/time';
7
+
8
+ /**
9
+ * Error Handler - Error formatting and reporting for the runtime
10
+ */
11
+
12
+ /**
13
+ * Format error message with diagnostic information
14
+ */
15
+ declare function formatRuntimeError(error: any): any;
16
+ /**
17
+ * Report error to listener with enhanced formatting
18
+ */
19
+ declare function reportError(listener: RuntimeListener, error: any): void;
20
+ /**
21
+ * Report warnings from VM context (invoking_non_function, using_undefined_variable)
22
+ */
23
+ declare function reportWarnings(vm: L8BVM | null, listener: RuntimeListener): void;
24
+
25
+ export { formatRuntimeError, reportError, reportWarnings };
@@ -0,0 +1,106 @@
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/core/error-handler.ts
22
+ var error_handler_exports = {};
23
+ __export(error_handler_exports, {
24
+ formatRuntimeError: () => formatRuntimeError,
25
+ reportError: () => reportError,
26
+ reportWarnings: () => reportWarnings
27
+ });
28
+ module.exports = __toCommonJS(error_handler_exports);
29
+ var import_diagnostics = require("@al8b/diagnostics");
30
+ function formatRuntimeError(error) {
31
+ if (error.code || error.context || error.suggestions) {
32
+ return error;
33
+ }
34
+ const code = error.code || "E2005";
35
+ const diagnostic = (0, import_diagnostics.createDiagnostic)(code, {
36
+ file: error.file,
37
+ line: error.line,
38
+ column: error.column,
39
+ context: error.context,
40
+ suggestions: error.suggestions,
41
+ related: error.related,
42
+ stackTrace: error.stackTrace,
43
+ data: {
44
+ error: error.error || error.message
45
+ }
46
+ });
47
+ const formattedMessage = (0, import_diagnostics.formatForBrowser)(diagnostic);
48
+ return {
49
+ ...error,
50
+ ...diagnostic,
51
+ formatted: formattedMessage
52
+ };
53
+ }
54
+ __name(formatRuntimeError, "formatRuntimeError");
55
+ function reportError(listener, error) {
56
+ if (listener.reportError) {
57
+ const formatted = formatRuntimeError(error);
58
+ listener.reportError(formatted);
59
+ }
60
+ }
61
+ __name(reportError, "reportError");
62
+ function reportWarnings(vm, listener) {
63
+ if (!vm) return;
64
+ const warnings = vm.context?.warnings;
65
+ if (!warnings) return;
66
+ if (warnings.invoking_non_function) {
67
+ for (const value of Object.values(warnings.invoking_non_function)) {
68
+ const warning = value;
69
+ if (!warning.reported) {
70
+ warning.reported = true;
71
+ reportError(listener, {
72
+ error: "",
73
+ type: "non_function",
74
+ expression: warning.expression,
75
+ line: warning.line,
76
+ column: warning.column,
77
+ file: warning.file
78
+ });
79
+ }
80
+ }
81
+ }
82
+ if (warnings.using_undefined_variable) {
83
+ for (const value of Object.values(warnings.using_undefined_variable)) {
84
+ const warning = value;
85
+ if (!warning.reported) {
86
+ warning.reported = true;
87
+ reportError(listener, {
88
+ error: "",
89
+ type: "undefined_variable",
90
+ expression: warning.expression,
91
+ line: warning.line,
92
+ column: warning.column,
93
+ file: warning.file
94
+ });
95
+ }
96
+ }
97
+ }
98
+ }
99
+ __name(reportWarnings, "reportWarnings");
100
+ // Annotate the CommonJS export names for ESM import in node:
101
+ 0 && (module.exports = {
102
+ formatRuntimeError,
103
+ reportError,
104
+ reportWarnings
105
+ });
106
+ //# sourceMappingURL=error-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/core/error-handler.ts"],"sourcesContent":["/**\n * Error Handler - Error formatting and reporting for the runtime\n */\n\nimport { createDiagnostic, formatForBrowser } from \"@al8b/diagnostics\";\nimport type { RuntimeListener } from \"../types\";\nimport type { L8BVM } from \"@al8b/vm\";\n\n/**\n * Format error message with diagnostic information\n */\nexport function formatRuntimeError(error: any): any {\n\tif (error.code || error.context || error.suggestions) {\n\t\treturn error;\n\t}\n\n\tconst code = error.code || \"E2005\";\n\tconst diagnostic = createDiagnostic(code, {\n\t\tfile: error.file,\n\t\tline: error.line,\n\t\tcolumn: error.column,\n\t\tcontext: error.context,\n\t\tsuggestions: error.suggestions,\n\t\trelated: error.related,\n\t\tstackTrace: error.stackTrace,\n\t\tdata: {\n\t\t\terror: error.error || error.message,\n\t\t},\n\t});\n\n\tconst formattedMessage = formatForBrowser(diagnostic);\n\n\treturn {\n\t\t...error,\n\t\t...diagnostic,\n\t\tformatted: formattedMessage,\n\t};\n}\n\n/**\n * Report error to listener with enhanced formatting\n */\nexport function reportError(listener: RuntimeListener, error: any): void {\n\tif (listener.reportError) {\n\t\tconst formatted = formatRuntimeError(error);\n\t\tlistener.reportError(formatted);\n\t}\n}\n\n/**\n * Report warnings from VM context (invoking_non_function, using_undefined_variable)\n */\nexport function reportWarnings(vm: L8BVM | null, listener: RuntimeListener): void {\n\tif (!vm) return;\n\n\tconst warnings = vm.context?.warnings;\n\tif (!warnings) return;\n\n\tif (warnings.invoking_non_function) {\n\t\tfor (const value of Object.values(warnings.invoking_non_function)) {\n\t\t\tconst warning = value as any;\n\t\t\tif (!warning.reported) {\n\t\t\t\twarning.reported = true;\n\t\t\t\treportError(listener, {\n\t\t\t\t\terror: \"\",\n\t\t\t\t\ttype: \"non_function\",\n\t\t\t\t\texpression: warning.expression,\n\t\t\t\t\tline: warning.line,\n\t\t\t\t\tcolumn: warning.column,\n\t\t\t\t\tfile: warning.file,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\tif (warnings.using_undefined_variable) {\n\t\tfor (const value of Object.values(warnings.using_undefined_variable)) {\n\t\t\tconst warning = value as any;\n\t\t\tif (!warning.reported) {\n\t\t\t\twarning.reported = true;\n\t\t\t\treportError(listener, {\n\t\t\t\t\terror: \"\",\n\t\t\t\t\ttype: \"undefined_variable\",\n\t\t\t\t\texpression: warning.expression,\n\t\t\t\t\tline: warning.line,\n\t\t\t\t\tcolumn: warning.column,\n\t\t\t\t\tfile: warning.file,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;AAIA,yBAAmD;AAO5C,SAASA,mBAAmBC,OAAU;AAC5C,MAAIA,MAAMC,QAAQD,MAAME,WAAWF,MAAMG,aAAa;AACrD,WAAOH;EACR;AAEA,QAAMC,OAAOD,MAAMC,QAAQ;AAC3B,QAAMG,iBAAaC,qCAAiBJ,MAAM;IACzCK,MAAMN,MAAMM;IACZC,MAAMP,MAAMO;IACZC,QAAQR,MAAMQ;IACdN,SAASF,MAAME;IACfC,aAAaH,MAAMG;IACnBM,SAAST,MAAMS;IACfC,YAAYV,MAAMU;IAClBC,MAAM;MACLX,OAAOA,MAAMA,SAASA,MAAMY;IAC7B;EACD,CAAA;AAEA,QAAMC,uBAAmBC,qCAAiBV,UAAAA;AAE1C,SAAO;IACN,GAAGJ;IACH,GAAGI;IACHW,WAAWF;EACZ;AACD;AA1BgBd;AA+BT,SAASiB,YAAYC,UAA2BjB,OAAU;AAChE,MAAIiB,SAASD,aAAa;AACzB,UAAMD,YAAYhB,mBAAmBC,KAAAA;AACrCiB,aAASD,YAAYD,SAAAA;EACtB;AACD;AALgBC;AAUT,SAASE,eAAeC,IAAkBF,UAAyB;AACzE,MAAI,CAACE,GAAI;AAET,QAAMC,WAAWD,GAAGjB,SAASkB;AAC7B,MAAI,CAACA,SAAU;AAEf,MAAIA,SAASC,uBAAuB;AACnC,eAAWC,SAASC,OAAOC,OAAOJ,SAASC,qBAAqB,GAAG;AAClE,YAAMI,UAAUH;AAChB,UAAI,CAACG,QAAQC,UAAU;AACtBD,gBAAQC,WAAW;AACnBV,oBAAYC,UAAU;UACrBjB,OAAO;UACP2B,MAAM;UACNC,YAAYH,QAAQG;UACpBrB,MAAMkB,QAAQlB;UACdC,QAAQiB,QAAQjB;UAChBF,MAAMmB,QAAQnB;QACf,CAAA;MACD;IACD;EACD;AAEA,MAAIc,SAASS,0BAA0B;AACtC,eAAWP,SAASC,OAAOC,OAAOJ,SAASS,wBAAwB,GAAG;AACrE,YAAMJ,UAAUH;AAChB,UAAI,CAACG,QAAQC,UAAU;AACtBD,gBAAQC,WAAW;AACnBV,oBAAYC,UAAU;UACrBjB,OAAO;UACP2B,MAAM;UACNC,YAAYH,QAAQG;UACpBrB,MAAMkB,QAAQlB;UACdC,QAAQiB,QAAQjB;UAChBF,MAAMmB,QAAQnB;QACf,CAAA;MACD;IACD;EACD;AACD;AAvCgBY;","names":["formatRuntimeError","error","code","context","suggestions","diagnostic","createDiagnostic","file","line","column","related","stackTrace","data","message","formattedMessage","formatForBrowser","formatted","reportError","listener","reportWarnings","vm","warnings","invoking_non_function","value","Object","values","warning","reported","type","expression","using_undefined_variable"]}
@@ -0,0 +1,81 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
+
4
+ // src/core/error-handler.ts
5
+ import { createDiagnostic, formatForBrowser } from "@al8b/diagnostics";
6
+ function formatRuntimeError(error) {
7
+ if (error.code || error.context || error.suggestions) {
8
+ return error;
9
+ }
10
+ const code = error.code || "E2005";
11
+ const diagnostic = createDiagnostic(code, {
12
+ file: error.file,
13
+ line: error.line,
14
+ column: error.column,
15
+ context: error.context,
16
+ suggestions: error.suggestions,
17
+ related: error.related,
18
+ stackTrace: error.stackTrace,
19
+ data: {
20
+ error: error.error || error.message
21
+ }
22
+ });
23
+ const formattedMessage = formatForBrowser(diagnostic);
24
+ return {
25
+ ...error,
26
+ ...diagnostic,
27
+ formatted: formattedMessage
28
+ };
29
+ }
30
+ __name(formatRuntimeError, "formatRuntimeError");
31
+ function reportError(listener, error) {
32
+ if (listener.reportError) {
33
+ const formatted = formatRuntimeError(error);
34
+ listener.reportError(formatted);
35
+ }
36
+ }
37
+ __name(reportError, "reportError");
38
+ function reportWarnings(vm, listener) {
39
+ if (!vm) return;
40
+ const warnings = vm.context?.warnings;
41
+ if (!warnings) return;
42
+ if (warnings.invoking_non_function) {
43
+ for (const value of Object.values(warnings.invoking_non_function)) {
44
+ const warning = value;
45
+ if (!warning.reported) {
46
+ warning.reported = true;
47
+ reportError(listener, {
48
+ error: "",
49
+ type: "non_function",
50
+ expression: warning.expression,
51
+ line: warning.line,
52
+ column: warning.column,
53
+ file: warning.file
54
+ });
55
+ }
56
+ }
57
+ }
58
+ if (warnings.using_undefined_variable) {
59
+ for (const value of Object.values(warnings.using_undefined_variable)) {
60
+ const warning = value;
61
+ if (!warning.reported) {
62
+ warning.reported = true;
63
+ reportError(listener, {
64
+ error: "",
65
+ type: "undefined_variable",
66
+ expression: warning.expression,
67
+ line: warning.line,
68
+ column: warning.column,
69
+ file: warning.file
70
+ });
71
+ }
72
+ }
73
+ }
74
+ }
75
+ __name(reportWarnings, "reportWarnings");
76
+ export {
77
+ formatRuntimeError,
78
+ reportError,
79
+ reportWarnings
80
+ };
81
+ //# sourceMappingURL=error-handler.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/core/error-handler.ts"],"sourcesContent":["/**\n * Error Handler - Error formatting and reporting for the runtime\n */\n\nimport { createDiagnostic, formatForBrowser } from \"@al8b/diagnostics\";\nimport type { RuntimeListener } from \"../types\";\nimport type { L8BVM } from \"@al8b/vm\";\n\n/**\n * Format error message with diagnostic information\n */\nexport function formatRuntimeError(error: any): any {\n\tif (error.code || error.context || error.suggestions) {\n\t\treturn error;\n\t}\n\n\tconst code = error.code || \"E2005\";\n\tconst diagnostic = createDiagnostic(code, {\n\t\tfile: error.file,\n\t\tline: error.line,\n\t\tcolumn: error.column,\n\t\tcontext: error.context,\n\t\tsuggestions: error.suggestions,\n\t\trelated: error.related,\n\t\tstackTrace: error.stackTrace,\n\t\tdata: {\n\t\t\terror: error.error || error.message,\n\t\t},\n\t});\n\n\tconst formattedMessage = formatForBrowser(diagnostic);\n\n\treturn {\n\t\t...error,\n\t\t...diagnostic,\n\t\tformatted: formattedMessage,\n\t};\n}\n\n/**\n * Report error to listener with enhanced formatting\n */\nexport function reportError(listener: RuntimeListener, error: any): void {\n\tif (listener.reportError) {\n\t\tconst formatted = formatRuntimeError(error);\n\t\tlistener.reportError(formatted);\n\t}\n}\n\n/**\n * Report warnings from VM context (invoking_non_function, using_undefined_variable)\n */\nexport function reportWarnings(vm: L8BVM | null, listener: RuntimeListener): void {\n\tif (!vm) return;\n\n\tconst warnings = vm.context?.warnings;\n\tif (!warnings) return;\n\n\tif (warnings.invoking_non_function) {\n\t\tfor (const value of Object.values(warnings.invoking_non_function)) {\n\t\t\tconst warning = value as any;\n\t\t\tif (!warning.reported) {\n\t\t\t\twarning.reported = true;\n\t\t\t\treportError(listener, {\n\t\t\t\t\terror: \"\",\n\t\t\t\t\ttype: \"non_function\",\n\t\t\t\t\texpression: warning.expression,\n\t\t\t\t\tline: warning.line,\n\t\t\t\t\tcolumn: warning.column,\n\t\t\t\t\tfile: warning.file,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\tif (warnings.using_undefined_variable) {\n\t\tfor (const value of Object.values(warnings.using_undefined_variable)) {\n\t\t\tconst warning = value as any;\n\t\t\tif (!warning.reported) {\n\t\t\t\twarning.reported = true;\n\t\t\t\treportError(listener, {\n\t\t\t\t\terror: \"\",\n\t\t\t\t\ttype: \"undefined_variable\",\n\t\t\t\t\texpression: warning.expression,\n\t\t\t\t\tline: warning.line,\n\t\t\t\t\tcolumn: warning.column,\n\t\t\t\t\tfile: warning.file,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n}\n"],"mappings":";;;;AAIA,SAASA,kBAAkBC,wBAAwB;AAO5C,SAASC,mBAAmBC,OAAU;AAC5C,MAAIA,MAAMC,QAAQD,MAAME,WAAWF,MAAMG,aAAa;AACrD,WAAOH;EACR;AAEA,QAAMC,OAAOD,MAAMC,QAAQ;AAC3B,QAAMG,aAAaC,iBAAiBJ,MAAM;IACzCK,MAAMN,MAAMM;IACZC,MAAMP,MAAMO;IACZC,QAAQR,MAAMQ;IACdN,SAASF,MAAME;IACfC,aAAaH,MAAMG;IACnBM,SAAST,MAAMS;IACfC,YAAYV,MAAMU;IAClBC,MAAM;MACLX,OAAOA,MAAMA,SAASA,MAAMY;IAC7B;EACD,CAAA;AAEA,QAAMC,mBAAmBC,iBAAiBV,UAAAA;AAE1C,SAAO;IACN,GAAGJ;IACH,GAAGI;IACHW,WAAWF;EACZ;AACD;AA1BgBd;AA+BT,SAASiB,YAAYC,UAA2BjB,OAAU;AAChE,MAAIiB,SAASD,aAAa;AACzB,UAAMD,YAAYhB,mBAAmBC,KAAAA;AACrCiB,aAASD,YAAYD,SAAAA;EACtB;AACD;AALgBC;AAUT,SAASE,eAAeC,IAAkBF,UAAyB;AACzE,MAAI,CAACE,GAAI;AAET,QAAMC,WAAWD,GAAGjB,SAASkB;AAC7B,MAAI,CAACA,SAAU;AAEf,MAAIA,SAASC,uBAAuB;AACnC,eAAWC,SAASC,OAAOC,OAAOJ,SAASC,qBAAqB,GAAG;AAClE,YAAMI,UAAUH;AAChB,UAAI,CAACG,QAAQC,UAAU;AACtBD,gBAAQC,WAAW;AACnBV,oBAAYC,UAAU;UACrBjB,OAAO;UACP2B,MAAM;UACNC,YAAYH,QAAQG;UACpBrB,MAAMkB,QAAQlB;UACdC,QAAQiB,QAAQjB;UAChBF,MAAMmB,QAAQnB;QACf,CAAA;MACD;IACD;EACD;AAEA,MAAIc,SAASS,0BAA0B;AACtC,eAAWP,SAASC,OAAOC,OAAOJ,SAASS,wBAAwB,GAAG;AACrE,YAAMJ,UAAUH;AAChB,UAAI,CAACG,QAAQC,UAAU;AACtBD,gBAAQC,WAAW;AACnBV,oBAAYC,UAAU;UACrBjB,OAAO;UACP2B,MAAM;UACNC,YAAYH,QAAQG;UACpBrB,MAAMkB,QAAQlB;UACdC,QAAQiB,QAAQjB;UAChBF,MAAMmB,QAAQnB;QACf,CAAA;MACD;IACD;EACD;AACD;AAvCgBY;","names":["createDiagnostic","formatForBrowser","formatRuntimeError","error","code","context","suggestions","diagnostic","createDiagnostic","file","line","column","related","stackTrace","data","message","formattedMessage","formatForBrowser","formatted","reportError","listener","reportWarnings","vm","warnings","invoking_non_function","value","Object","values","warning","reported","type","expression","using_undefined_variable"]}
@@ -0,0 +1,14 @@
1
+ export { RuntimeController, createRuntime } from './controller.mjs';
2
+ import '@al8b/audio';
3
+ import '@al8b/player';
4
+ import '@al8b/scene';
5
+ import '@al8b/screen';
6
+ import '@al8b/time';
7
+ import '@al8b/vm';
8
+ import '../input/manager.mjs';
9
+ import '@al8b/input';
10
+ import '../system/api.mjs';
11
+ import '../types/runtime.mjs';
12
+ import '../types/assets.mjs';
13
+ import '@al8b/framework-shared';
14
+ import '../types/bridge.mjs';
@@ -0,0 +1,14 @@
1
+ export { RuntimeController, createRuntime } from './controller.js';
2
+ import '@al8b/audio';
3
+ import '@al8b/player';
4
+ import '@al8b/scene';
5
+ import '@al8b/screen';
6
+ import '@al8b/time';
7
+ import '@al8b/vm';
8
+ import '../input/manager.js';
9
+ import '@al8b/input';
10
+ import '../system/api.js';
11
+ import '../types/runtime.js';
12
+ import '../types/assets.js';
13
+ import '@al8b/framework-shared';
14
+ import '../types/bridge.js';