@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.
- package/README.md +87 -0
- package/dist/assets/constructors.d.mts +6 -0
- package/dist/assets/constructors.d.ts +6 -0
- package/dist/assets/constructors.js +40 -0
- package/dist/assets/constructors.js.map +1 -0
- package/dist/assets/constructors.mjs +12 -0
- package/dist/assets/constructors.mjs.map +1 -0
- package/dist/assets/index.d.mts +11 -0
- package/dist/assets/index.d.ts +11 -0
- package/dist/assets/index.js +276 -0
- package/dist/assets/index.js.map +1 -0
- package/dist/assets/index.mjs +247 -0
- package/dist/assets/index.mjs.map +1 -0
- package/dist/assets/loader.d.mts +83 -0
- package/dist/assets/loader.d.ts +83 -0
- package/dist/assets/loader.js +260 -0
- package/dist/assets/loader.js.map +1 -0
- package/dist/assets/loader.mjs +237 -0
- package/dist/assets/loader.mjs.map +1 -0
- package/dist/browser/index.js +16599 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/browser/index.min.js +171 -0
- package/dist/constants.d.mts +16 -0
- package/dist/constants.d.ts +16 -0
- package/dist/constants.js +49 -0
- package/dist/constants.js.map +1 -0
- package/dist/constants.mjs +18 -0
- package/dist/constants.mjs.map +1 -0
- package/dist/core/api-factory.d.mts +63 -0
- package/dist/core/api-factory.d.ts +63 -0
- package/dist/core/api-factory.js +239 -0
- package/dist/core/api-factory.js.map +1 -0
- package/dist/core/api-factory.mjs +214 -0
- package/dist/core/api-factory.mjs.map +1 -0
- package/dist/core/assets-registry.d.mts +14 -0
- package/dist/core/assets-registry.d.ts +14 -0
- package/dist/core/assets-registry.js +64 -0
- package/dist/core/assets-registry.js.map +1 -0
- package/dist/core/assets-registry.mjs +41 -0
- package/dist/core/assets-registry.mjs.map +1 -0
- package/dist/core/controller.d.mts +109 -0
- package/dist/core/controller.d.ts +109 -0
- package/dist/core/controller.js +1782 -0
- package/dist/core/controller.js.map +1 -0
- package/dist/core/controller.mjs +1758 -0
- package/dist/core/controller.mjs.map +1 -0
- package/dist/core/debug-logger.d.mts +35 -0
- package/dist/core/debug-logger.d.ts +35 -0
- package/dist/core/debug-logger.js +177 -0
- package/dist/core/debug-logger.js.map +1 -0
- package/dist/core/debug-logger.mjs +154 -0
- package/dist/core/debug-logger.mjs.map +1 -0
- package/dist/core/error-handler.d.mts +25 -0
- package/dist/core/error-handler.d.ts +25 -0
- package/dist/core/error-handler.js +106 -0
- package/dist/core/error-handler.js.map +1 -0
- package/dist/core/error-handler.mjs +81 -0
- package/dist/core/error-handler.mjs.map +1 -0
- package/dist/core/index.d.mts +14 -0
- package/dist/core/index.d.ts +14 -0
- package/dist/core/index.js +1782 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/index.mjs +1757 -0
- package/dist/core/index.mjs.map +1 -0
- package/dist/hot-reload/index.d.mts +7 -0
- package/dist/hot-reload/index.d.ts +7 -0
- package/dist/hot-reload/index.js +103 -0
- package/dist/hot-reload/index.js.map +1 -0
- package/dist/hot-reload/index.mjs +78 -0
- package/dist/hot-reload/index.mjs.map +1 -0
- package/dist/hot-reload/updater.d.mts +33 -0
- package/dist/hot-reload/updater.d.ts +33 -0
- package/dist/hot-reload/updater.js +101 -0
- package/dist/hot-reload/updater.js.map +1 -0
- package/dist/hot-reload/updater.mjs +78 -0
- package/dist/hot-reload/updater.mjs.map +1 -0
- package/dist/index.d.mts +24 -0
- package/dist/index.d.ts +24 -0
- package/dist/index.js +1859 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +1817 -0
- package/dist/index.mjs.map +1 -0
- package/dist/input/index.d.mts +2 -0
- package/dist/input/index.d.ts +2 -0
- package/dist/input/index.js +79 -0
- package/dist/input/index.js.map +1 -0
- package/dist/input/index.mjs +54 -0
- package/dist/input/index.mjs.map +1 -0
- package/dist/input/manager.d.mts +37 -0
- package/dist/input/manager.d.ts +37 -0
- package/dist/input/manager.js +77 -0
- package/dist/input/manager.js.map +1 -0
- package/dist/input/manager.mjs +54 -0
- package/dist/input/manager.mjs.map +1 -0
- package/dist/loop/game-loop.d.mts +63 -0
- package/dist/loop/game-loop.d.ts +63 -0
- package/dist/loop/game-loop.js +156 -0
- package/dist/loop/game-loop.js.map +1 -0
- package/dist/loop/game-loop.mjs +131 -0
- package/dist/loop/game-loop.mjs.map +1 -0
- package/dist/loop/index.d.mts +1 -0
- package/dist/loop/index.d.ts +1 -0
- package/dist/loop/index.js +156 -0
- package/dist/loop/index.js.map +1 -0
- package/dist/loop/index.mjs +131 -0
- package/dist/loop/index.mjs.map +1 -0
- package/dist/storage/index.d.mts +1 -0
- package/dist/storage/index.d.ts +1 -0
- package/dist/storage/index.js +31 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/index.mjs +6 -0
- package/dist/storage/index.mjs.map +1 -0
- package/dist/system/api.d.mts +28 -0
- package/dist/system/api.d.ts +28 -0
- package/dist/system/api.js +126 -0
- package/dist/system/api.js.map +1 -0
- package/dist/system/api.mjs +101 -0
- package/dist/system/api.mjs.map +1 -0
- package/dist/system/index.d.mts +2 -0
- package/dist/system/index.d.ts +2 -0
- package/dist/system/index.js +126 -0
- package/dist/system/index.js.map +1 -0
- package/dist/system/index.mjs +101 -0
- package/dist/system/index.mjs.map +1 -0
- package/dist/types/assets.d.mts +43 -0
- package/dist/types/assets.d.ts +43 -0
- package/dist/types/assets.js +19 -0
- package/dist/types/assets.js.map +1 -0
- package/dist/types/assets.mjs +1 -0
- package/dist/types/assets.mjs.map +1 -0
- package/dist/types/bridge.d.mts +66 -0
- package/dist/types/bridge.d.ts +66 -0
- package/dist/types/bridge.js +19 -0
- package/dist/types/bridge.js.map +1 -0
- package/dist/types/bridge.mjs +1 -0
- package/dist/types/bridge.mjs.map +1 -0
- package/dist/types/index.d.mts +6 -0
- package/dist/types/index.d.ts +6 -0
- package/dist/types/index.js +19 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/index.mjs +1 -0
- package/dist/types/index.mjs.map +1 -0
- package/dist/types/runtime.d.mts +71 -0
- package/dist/types/runtime.d.ts +71 -0
- package/dist/types/runtime.js +19 -0
- package/dist/types/runtime.js.map +1 -0
- package/dist/types/runtime.mjs +1 -0
- package/dist/types/runtime.mjs.map +1 -0
- package/dist/types/vm.d.mts +1 -0
- package/dist/types/vm.d.ts +1 -0
- package/dist/types/vm.js +19 -0
- package/dist/types/vm.js.map +1 -0
- package/dist/types/vm.mjs +1 -0
- package/dist/types/vm.mjs.map +1 -0
- package/dist/utils/deep-clone.d.mts +14 -0
- package/dist/utils/deep-clone.d.ts +14 -0
- package/dist/utils/deep-clone.js +42 -0
- package/dist/utils/deep-clone.js.map +1 -0
- package/dist/utils/deep-clone.mjs +19 -0
- package/dist/utils/deep-clone.mjs.map +1 -0
- package/dist/utils/index.d.mts +3 -0
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.js +156 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/index.mjs +129 -0
- package/dist/utils/index.mjs.map +1 -0
- package/dist/utils/object-pool.d.mts +66 -0
- package/dist/utils/object-pool.d.ts +66 -0
- package/dist/utils/object-pool.js +113 -0
- package/dist/utils/object-pool.js.map +1 -0
- package/dist/utils/object-pool.mjs +90 -0
- package/dist/utils/object-pool.mjs.map +1 -0
- package/dist/utils/shallow-equal.d.mts +15 -0
- package/dist/utils/shallow-equal.d.ts +15 -0
- package/dist/utils/shallow-equal.js +53 -0
- package/dist/utils/shallow-equal.js.map +1 -0
- package/dist/utils/shallow-equal.mjs +30 -0
- package/dist/utils/shallow-equal.mjs.map +1 -0
- package/dist/vm/index.d.mts +1 -0
- package/dist/vm/index.d.ts +1 -0
- package/dist/vm/index.js +37 -0
- package/dist/vm/index.js.map +1 -0
- package/dist/vm/index.mjs +9 -0
- package/dist/vm/index.mjs.map +1 -0
- 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';
|