@holoscript/core 2.0.1 → 2.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 (137) hide show
  1. package/dist/chunk-2XXE34KS.js +344 -0
  2. package/dist/chunk-2XXE34KS.js.map +1 -0
  3. package/dist/chunk-3X2EGU7Z.cjs +52 -0
  4. package/dist/chunk-3X2EGU7Z.cjs.map +1 -0
  5. package/dist/chunk-AFFVFO4D.js +1689 -0
  6. package/dist/chunk-AFFVFO4D.js.map +1 -0
  7. package/dist/chunk-DGUM43GV.js +10 -0
  8. package/dist/chunk-DGUM43GV.js.map +1 -0
  9. package/{src/HoloScriptDebugger.ts → dist/chunk-DOY73HDH.js} +118 -257
  10. package/dist/chunk-DOY73HDH.js.map +1 -0
  11. package/dist/chunk-JEQ2X3Z6.cjs +12 -0
  12. package/dist/chunk-JEQ2X3Z6.cjs.map +1 -0
  13. package/dist/chunk-L6VLNVKP.cjs +1691 -0
  14. package/dist/chunk-L6VLNVKP.cjs.map +1 -0
  15. package/dist/chunk-MFNO57XL.cjs +347 -0
  16. package/dist/chunk-MFNO57XL.cjs.map +1 -0
  17. package/dist/chunk-R75MREOS.cjs +424 -0
  18. package/dist/chunk-R75MREOS.cjs.map +1 -0
  19. package/dist/chunk-SATNCODL.js +45 -0
  20. package/dist/chunk-SATNCODL.js.map +1 -0
  21. package/dist/chunk-T57ZL7KR.cjs +1281 -0
  22. package/dist/chunk-T57ZL7KR.cjs.map +1 -0
  23. package/dist/chunk-U72GEJZT.js +1279 -0
  24. package/dist/chunk-U72GEJZT.js.map +1 -0
  25. package/dist/debugger.cjs +20 -0
  26. package/dist/debugger.cjs.map +1 -0
  27. package/dist/debugger.d.cts +171 -0
  28. package/dist/debugger.d.ts +171 -0
  29. package/dist/debugger.js +7 -0
  30. package/dist/debugger.js.map +1 -0
  31. package/dist/index.cjs +6803 -0
  32. package/dist/index.cjs.map +1 -0
  33. package/dist/index.d.cts +4093 -0
  34. package/dist/index.d.ts +4093 -0
  35. package/dist/index.js +6715 -0
  36. package/dist/index.js.map +1 -0
  37. package/dist/parser.cjs +14 -0
  38. package/dist/parser.cjs.map +1 -0
  39. package/dist/parser.d.cts +172 -0
  40. package/dist/parser.d.ts +172 -0
  41. package/dist/parser.js +5 -0
  42. package/dist/parser.js.map +1 -0
  43. package/dist/runtime.cjs +14 -0
  44. package/dist/runtime.cjs.map +1 -0
  45. package/dist/runtime.d.cts +200 -0
  46. package/dist/runtime.d.ts +200 -0
  47. package/dist/runtime.js +5 -0
  48. package/dist/runtime.js.map +1 -0
  49. package/dist/type-checker.cjs +17 -0
  50. package/dist/type-checker.cjs.map +1 -0
  51. package/dist/type-checker.d.cts +105 -0
  52. package/dist/type-checker.d.ts +105 -0
  53. package/dist/type-checker.js +4 -0
  54. package/dist/type-checker.js.map +1 -0
  55. package/dist/types-4h8cbtF_.d.cts +329 -0
  56. package/dist/types-4h8cbtF_.d.ts +329 -0
  57. package/package.json +17 -13
  58. package/src/HoloScript2DParser.js +0 -227
  59. package/src/HoloScript2DParser.ts +0 -261
  60. package/src/HoloScriptCodeParser.js +0 -1102
  61. package/src/HoloScriptCodeParser.ts +0 -1188
  62. package/src/HoloScriptDebugger.js +0 -458
  63. package/src/HoloScriptParser.js +0 -338
  64. package/src/HoloScriptParser.ts +0 -397
  65. package/src/HoloScriptPlusParser.js +0 -371
  66. package/src/HoloScriptPlusParser.ts +0 -543
  67. package/src/HoloScriptRuntime.js +0 -1399
  68. package/src/HoloScriptRuntime.test.js +0 -351
  69. package/src/HoloScriptRuntime.test.ts +0 -436
  70. package/src/HoloScriptRuntime.ts +0 -1653
  71. package/src/HoloScriptTypeChecker.js +0 -356
  72. package/src/HoloScriptTypeChecker.ts +0 -475
  73. package/src/__tests__/GraphicsServices.test.js +0 -357
  74. package/src/__tests__/GraphicsServices.test.ts +0 -427
  75. package/src/__tests__/HoloScriptPlusParser.test.js +0 -317
  76. package/src/__tests__/HoloScriptPlusParser.test.ts +0 -392
  77. package/src/__tests__/integration.test.js +0 -336
  78. package/src/__tests__/integration.test.ts +0 -416
  79. package/src/__tests__/performance.bench.js +0 -218
  80. package/src/__tests__/performance.bench.ts +0 -262
  81. package/src/__tests__/type-checker.test.js +0 -60
  82. package/src/__tests__/type-checker.test.ts +0 -73
  83. package/src/index.js +0 -217
  84. package/src/index.ts +0 -426
  85. package/src/interop/Interoperability.js +0 -413
  86. package/src/interop/Interoperability.ts +0 -494
  87. package/src/logger.js +0 -42
  88. package/src/logger.ts +0 -57
  89. package/src/parser/EnhancedParser.js +0 -205
  90. package/src/parser/EnhancedParser.ts +0 -251
  91. package/src/parser/HoloScriptPlusParser.js +0 -928
  92. package/src/parser/HoloScriptPlusParser.ts +0 -1089
  93. package/src/runtime/HoloScriptPlusRuntime.js +0 -674
  94. package/src/runtime/HoloScriptPlusRuntime.ts +0 -861
  95. package/src/runtime/PerformanceTelemetry.js +0 -323
  96. package/src/runtime/PerformanceTelemetry.ts +0 -467
  97. package/src/runtime/RuntimeOptimization.js +0 -361
  98. package/src/runtime/RuntimeOptimization.ts +0 -416
  99. package/src/services/HololandGraphicsPipelineService.js +0 -506
  100. package/src/services/HololandGraphicsPipelineService.ts +0 -662
  101. package/src/services/PlatformPerformanceOptimizer.js +0 -356
  102. package/src/services/PlatformPerformanceOptimizer.ts +0 -503
  103. package/src/state/ReactiveState.js +0 -427
  104. package/src/state/ReactiveState.ts +0 -572
  105. package/src/tools/DeveloperExperience.js +0 -376
  106. package/src/tools/DeveloperExperience.ts +0 -438
  107. package/src/traits/AIDriverTrait.js +0 -322
  108. package/src/traits/AIDriverTrait.test.js +0 -329
  109. package/src/traits/AIDriverTrait.test.ts +0 -357
  110. package/src/traits/AIDriverTrait.ts +0 -474
  111. package/src/traits/LightingTrait.js +0 -313
  112. package/src/traits/LightingTrait.test.js +0 -410
  113. package/src/traits/LightingTrait.test.ts +0 -462
  114. package/src/traits/LightingTrait.ts +0 -505
  115. package/src/traits/MaterialTrait.js +0 -194
  116. package/src/traits/MaterialTrait.test.js +0 -286
  117. package/src/traits/MaterialTrait.test.ts +0 -329
  118. package/src/traits/MaterialTrait.ts +0 -324
  119. package/src/traits/RenderingTrait.js +0 -356
  120. package/src/traits/RenderingTrait.test.js +0 -363
  121. package/src/traits/RenderingTrait.test.ts +0 -427
  122. package/src/traits/RenderingTrait.ts +0 -555
  123. package/src/traits/VRTraitSystem.js +0 -740
  124. package/src/traits/VRTraitSystem.ts +0 -1040
  125. package/src/traits/VoiceInputTrait.js +0 -284
  126. package/src/traits/VoiceInputTrait.test.js +0 -226
  127. package/src/traits/VoiceInputTrait.test.ts +0 -252
  128. package/src/traits/VoiceInputTrait.ts +0 -401
  129. package/src/types/AdvancedTypeSystem.js +0 -226
  130. package/src/types/AdvancedTypeSystem.ts +0 -494
  131. package/src/types/HoloScriptPlus.d.ts +0 -853
  132. package/src/types.js +0 -6
  133. package/src/types.ts +0 -369
  134. package/tsconfig.json +0 -23
  135. package/tsup.config.d.ts +0 -2
  136. package/tsup.config.js +0 -18
  137. package/tsup.config.ts +0 -19
@@ -0,0 +1,424 @@
1
+ 'use strict';
2
+
3
+ var chunkT57ZL7KR_cjs = require('./chunk-T57ZL7KR.cjs');
4
+ var chunkL6VLNVKP_cjs = require('./chunk-L6VLNVKP.cjs');
5
+
6
+ // src/HoloScriptDebugger.ts
7
+ var HoloScriptDebugger = class {
8
+ constructor(runtime) {
9
+ this.breakpoints = /* @__PURE__ */ new Map();
10
+ this.callStack = [];
11
+ this.currentAST = [];
12
+ this.currentNodeIndex = 0;
13
+ this.frameIdCounter = 0;
14
+ this.breakpointIdCounter = 0;
15
+ this.eventHandlers = /* @__PURE__ */ new Map();
16
+ this.state = {
17
+ status: "stopped",
18
+ currentLine: 0,
19
+ currentColumn: 0,
20
+ currentNode: null,
21
+ callStack: [],
22
+ breakpoints: []
23
+ };
24
+ this.runtime = runtime || new chunkL6VLNVKP_cjs.HoloScriptRuntime();
25
+ this.parser = new chunkT57ZL7KR_cjs.HoloScriptCodeParser();
26
+ }
27
+ /**
28
+ * Load source code for debugging
29
+ */
30
+ loadSource(code, file) {
31
+ const parseResult = this.parser.parse(code);
32
+ if (!parseResult.success) {
33
+ return {
34
+ success: false,
35
+ errors: parseResult.errors.map((e) => `Line ${e.line}: ${e.message}`)
36
+ };
37
+ }
38
+ this.currentAST = parseResult.ast;
39
+ this.currentNodeIndex = 0;
40
+ this.state.status = "stopped";
41
+ this.callStack = [];
42
+ if (file) {
43
+ for (const node of this.currentAST) {
44
+ node.file = file;
45
+ }
46
+ }
47
+ return { success: true };
48
+ }
49
+ /**
50
+ * Set a breakpoint at a line
51
+ */
52
+ setBreakpoint(line, options = {}) {
53
+ const id = `bp_${++this.breakpointIdCounter}`;
54
+ const breakpoint = {
55
+ id,
56
+ line,
57
+ column: options.column,
58
+ condition: options.condition,
59
+ hitCount: 0,
60
+ enabled: options.enabled !== false,
61
+ file: options.file
62
+ };
63
+ this.breakpoints.set(id, breakpoint);
64
+ this.updateBreakpointList();
65
+ return breakpoint;
66
+ }
67
+ /**
68
+ * Remove a breakpoint by ID
69
+ */
70
+ removeBreakpoint(id) {
71
+ const removed = this.breakpoints.delete(id);
72
+ if (removed) {
73
+ this.updateBreakpointList();
74
+ }
75
+ return removed;
76
+ }
77
+ /**
78
+ * Remove all breakpoints at a line
79
+ */
80
+ removeBreakpointsAtLine(line) {
81
+ let removed = 0;
82
+ for (const [id, bp] of this.breakpoints) {
83
+ if (bp.line === line) {
84
+ this.breakpoints.delete(id);
85
+ removed++;
86
+ }
87
+ }
88
+ if (removed > 0) {
89
+ this.updateBreakpointList();
90
+ }
91
+ return removed;
92
+ }
93
+ /**
94
+ * Toggle breakpoint enabled state
95
+ */
96
+ toggleBreakpoint(id) {
97
+ const bp = this.breakpoints.get(id);
98
+ if (bp) {
99
+ bp.enabled = !bp.enabled;
100
+ this.updateBreakpointList();
101
+ return bp.enabled;
102
+ }
103
+ return false;
104
+ }
105
+ /**
106
+ * Get all breakpoints
107
+ */
108
+ getBreakpoints() {
109
+ return Array.from(this.breakpoints.values());
110
+ }
111
+ /**
112
+ * Clear all breakpoints
113
+ */
114
+ clearBreakpoints() {
115
+ this.breakpoints.clear();
116
+ this.updateBreakpointList();
117
+ }
118
+ /**
119
+ * Start debugging from the beginning
120
+ */
121
+ async start() {
122
+ this.currentNodeIndex = 0;
123
+ this.callStack = [];
124
+ this.frameIdCounter = 0;
125
+ this.runtime.reset();
126
+ this.state.status = "running";
127
+ await this.runUntilBreakpoint();
128
+ }
129
+ /**
130
+ * Continue execution until next breakpoint or end
131
+ */
132
+ async continue() {
133
+ if (this.state.status !== "paused") return;
134
+ this.state.status = "running";
135
+ this.currentNodeIndex++;
136
+ await this.runUntilBreakpoint();
137
+ }
138
+ /**
139
+ * Step into the next node
140
+ */
141
+ async stepInto() {
142
+ if (this.state.status !== "paused") return;
143
+ this.state.status = "stepping";
144
+ await this.executeStep("into");
145
+ }
146
+ /**
147
+ * Step over the current node
148
+ */
149
+ async stepOver() {
150
+ if (this.state.status !== "paused") return;
151
+ this.state.status = "stepping";
152
+ await this.executeStep("over");
153
+ }
154
+ /**
155
+ * Step out of the current function
156
+ */
157
+ async stepOut() {
158
+ if (this.state.status !== "paused") return;
159
+ this.state.status = "stepping";
160
+ await this.executeStep("out");
161
+ }
162
+ /**
163
+ * Stop debugging
164
+ */
165
+ stop() {
166
+ this.state.status = "stopped";
167
+ this.callStack = [];
168
+ this.currentNodeIndex = 0;
169
+ this.emitEvent({ type: "state-change", data: { status: "stopped" } });
170
+ }
171
+ /**
172
+ * Pause execution
173
+ */
174
+ pause() {
175
+ if (this.state.status === "running") {
176
+ this.state.status = "paused";
177
+ this.emitEvent({ type: "state-change", data: { status: "paused" } });
178
+ }
179
+ }
180
+ /**
181
+ * Get current debug state
182
+ */
183
+ getState() {
184
+ return { ...this.state };
185
+ }
186
+ /**
187
+ * Get call stack
188
+ */
189
+ getCallStack() {
190
+ return [...this.callStack];
191
+ }
192
+ /**
193
+ * Get variables at a specific stack frame
194
+ */
195
+ getVariables(frameId) {
196
+ if (frameId !== void 0) {
197
+ const frame = this.callStack.find((f) => f.id === frameId);
198
+ return frame?.variables || /* @__PURE__ */ new Map();
199
+ }
200
+ return new Map(this.runtime.getContext().variables);
201
+ }
202
+ /**
203
+ * Evaluate an expression in the current context
204
+ */
205
+ async evaluate(expression) {
206
+ try {
207
+ const varValue = this.runtime.getVariable(expression);
208
+ if (varValue !== void 0) {
209
+ return { value: varValue };
210
+ }
211
+ const parseResult = this.parser.parse(expression);
212
+ if (!parseResult.success) {
213
+ return { value: void 0, error: parseResult.errors[0]?.message };
214
+ }
215
+ const results = await this.runtime.executeProgram(parseResult.ast);
216
+ const lastResult = results[results.length - 1];
217
+ return { value: lastResult?.output };
218
+ } catch (error) {
219
+ return { value: void 0, error: String(error) };
220
+ }
221
+ }
222
+ /**
223
+ * Set a watch expression
224
+ */
225
+ watch(expression) {
226
+ const id = `watch_${Date.now()}`;
227
+ return { id, expression };
228
+ }
229
+ /**
230
+ * Register an event handler
231
+ */
232
+ on(event, handler) {
233
+ if (!this.eventHandlers.has(event)) {
234
+ this.eventHandlers.set(event, []);
235
+ }
236
+ this.eventHandlers.get(event).push(handler);
237
+ }
238
+ /**
239
+ * Remove an event handler
240
+ */
241
+ off(event, handler) {
242
+ const handlers = this.eventHandlers.get(event);
243
+ if (handlers) {
244
+ const index = handlers.indexOf(handler);
245
+ if (index !== -1) {
246
+ handlers.splice(index, 1);
247
+ }
248
+ }
249
+ }
250
+ /**
251
+ * Get the underlying runtime
252
+ */
253
+ getRuntime() {
254
+ return this.runtime;
255
+ }
256
+ // Private methods
257
+ async runUntilBreakpoint() {
258
+ while (this.currentNodeIndex < this.currentAST.length) {
259
+ if (this.state.status === "stopped") break;
260
+ const node = this.currentAST[this.currentNodeIndex];
261
+ if (this.shouldBreakAt(node)) {
262
+ this.state.status = "paused";
263
+ this.updateCurrentState(node);
264
+ const bp = this.findBreakpointAtLine(node.line ?? 0);
265
+ if (bp) {
266
+ bp.hitCount++;
267
+ this.emitEvent({
268
+ type: "breakpoint-hit",
269
+ data: { breakpoint: bp, node, line: node.line ?? 0 }
270
+ });
271
+ }
272
+ return;
273
+ }
274
+ await this.executeNode(node);
275
+ this.currentNodeIndex++;
276
+ }
277
+ this.state.status = "stopped";
278
+ this.emitEvent({ type: "state-change", data: { status: "stopped", reason: "complete" } });
279
+ }
280
+ async executeStep(mode) {
281
+ const startStackDepth = this.callStack.length;
282
+ if (this.currentNodeIndex >= this.currentAST.length) {
283
+ this.state.status = "stopped";
284
+ return;
285
+ }
286
+ const node = this.currentAST[this.currentNodeIndex];
287
+ switch (mode) {
288
+ case "into":
289
+ await this.executeNode(node);
290
+ this.currentNodeIndex++;
291
+ break;
292
+ case "over":
293
+ await this.executeNode(node);
294
+ this.currentNodeIndex++;
295
+ break;
296
+ case "out":
297
+ while (this.currentNodeIndex < this.currentAST.length) {
298
+ await this.executeNode(this.currentAST[this.currentNodeIndex]);
299
+ this.currentNodeIndex++;
300
+ if (this.callStack.length < startStackDepth) {
301
+ break;
302
+ }
303
+ }
304
+ break;
305
+ }
306
+ if (this.currentNodeIndex < this.currentAST.length) {
307
+ this.state.status = "paused";
308
+ this.updateCurrentState(this.currentAST[this.currentNodeIndex]);
309
+ this.emitEvent({
310
+ type: "step-complete",
311
+ data: { mode, node: this.currentAST[this.currentNodeIndex] }
312
+ });
313
+ } else {
314
+ this.state.status = "stopped";
315
+ this.emitEvent({ type: "state-change", data: { status: "stopped", reason: "complete" } });
316
+ }
317
+ }
318
+ async executeNode(node) {
319
+ if (node.type === "function") {
320
+ const funcNode = node;
321
+ this.pushStackFrame(funcNode.name, node);
322
+ }
323
+ try {
324
+ const result = await this.runtime.executeNode(node);
325
+ if (!result.success && result.error) {
326
+ this.emitEvent({
327
+ type: "exception",
328
+ data: { error: result.error, node, line: node.line }
329
+ });
330
+ }
331
+ if (result.output !== void 0) {
332
+ this.emitEvent({
333
+ type: "output",
334
+ data: { output: result.output, node }
335
+ });
336
+ }
337
+ } catch (error) {
338
+ this.emitEvent({
339
+ type: "exception",
340
+ data: { error: String(error), node, line: node.line }
341
+ });
342
+ }
343
+ if (node.type === "function") {
344
+ this.popStackFrame();
345
+ }
346
+ }
347
+ shouldBreakAt(node) {
348
+ const line = node.line;
349
+ for (const bp of this.breakpoints.values()) {
350
+ if (!bp.enabled) continue;
351
+ if (bp.line !== line) continue;
352
+ if (bp.condition) {
353
+ try {
354
+ const value = this.runtime.getVariable(bp.condition);
355
+ if (!value) continue;
356
+ } catch {
357
+ continue;
358
+ }
359
+ }
360
+ return true;
361
+ }
362
+ return false;
363
+ }
364
+ findBreakpointAtLine(line) {
365
+ for (const bp of this.breakpoints.values()) {
366
+ if (bp.line === line && bp.enabled) {
367
+ return bp;
368
+ }
369
+ }
370
+ return null;
371
+ }
372
+ pushStackFrame(name, node) {
373
+ const frame = {
374
+ id: ++this.frameIdCounter,
375
+ name,
376
+ file: node.file,
377
+ line: node.line ?? 0,
378
+ column: node.column ?? 0,
379
+ variables: new Map(this.runtime.getContext().variables),
380
+ node
381
+ };
382
+ this.callStack.push(frame);
383
+ this.state.callStack = [...this.callStack];
384
+ }
385
+ popStackFrame() {
386
+ const frame = this.callStack.pop();
387
+ this.state.callStack = [...this.callStack];
388
+ return frame;
389
+ }
390
+ updateCurrentState(node) {
391
+ this.state.currentLine = node.line ?? 0;
392
+ this.state.currentColumn = node.column ?? 0;
393
+ this.state.currentNode = node;
394
+ }
395
+ updateBreakpointList() {
396
+ this.state.breakpoints = Array.from(this.breakpoints.values());
397
+ }
398
+ emitEvent(event) {
399
+ const handlers = this.eventHandlers.get(event.type) || [];
400
+ for (const handler of handlers) {
401
+ try {
402
+ handler(event);
403
+ } catch (error) {
404
+ console.error("Debug event handler error:", error);
405
+ }
406
+ }
407
+ const allHandlers = this.eventHandlers.get("all") || [];
408
+ for (const handler of allHandlers) {
409
+ try {
410
+ handler(event);
411
+ } catch (error) {
412
+ console.error("Debug event handler error:", error);
413
+ }
414
+ }
415
+ }
416
+ };
417
+ function createDebugger(runtime) {
418
+ return new HoloScriptDebugger(runtime);
419
+ }
420
+
421
+ exports.HoloScriptDebugger = HoloScriptDebugger;
422
+ exports.createDebugger = createDebugger;
423
+ //# sourceMappingURL=chunk-R75MREOS.cjs.map
424
+ //# sourceMappingURL=chunk-R75MREOS.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/HoloScriptDebugger.ts"],"names":["HoloScriptRuntime","HoloScriptCodeParser"],"mappings":"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","file":"chunk-R75MREOS.cjs","sourcesContent":["/**\n * HoloScript Debugger\n *\n * Step-through debugging with breakpoints, call stack inspection,\n * and variable watch capabilities.\n */\n\nimport { HoloScriptRuntime } from './HoloScriptRuntime';\nimport { HoloScriptCodeParser } from './HoloScriptCodeParser';\nimport type { ASTNode } from './types';\n\nexport interface Breakpoint {\n id: string;\n line: number;\n column?: number;\n condition?: string;\n hitCount: number;\n enabled: boolean;\n file?: string;\n}\n\nexport interface StackFrame {\n id: number;\n name: string;\n file?: string;\n line: number;\n column: number;\n variables: Map<string, unknown>;\n node: ASTNode;\n}\n\nexport interface DebugState {\n status: 'running' | 'paused' | 'stopped' | 'stepping';\n currentLine: number;\n currentColumn: number;\n currentNode: ASTNode | null;\n callStack: StackFrame[];\n breakpoints: Breakpoint[];\n}\n\nexport type StepMode = 'into' | 'over' | 'out';\n\nexport interface DebugEvent {\n type: 'breakpoint-hit' | 'step-complete' | 'exception' | 'output' | 'state-change';\n data: unknown;\n}\n\ntype DebugEventHandler = (event: DebugEvent) => void;\n\n/**\n * HoloScript Debugger with breakpoints and step-through execution\n */\nexport class HoloScriptDebugger {\n private runtime: HoloScriptRuntime;\n private parser: HoloScriptCodeParser;\n private breakpoints: Map<string, Breakpoint> = new Map();\n private callStack: StackFrame[] = [];\n private currentAST: ASTNode[] = [];\n private currentNodeIndex: number = 0;\n private frameIdCounter: number = 0;\n private breakpointIdCounter: number = 0;\n private eventHandlers: Map<string, DebugEventHandler[]> = new Map();\n\n private state: DebugState = {\n status: 'stopped',\n currentLine: 0,\n currentColumn: 0,\n currentNode: null,\n callStack: [],\n breakpoints: [],\n };\n\n constructor(runtime?: HoloScriptRuntime) {\n this.runtime = runtime || new HoloScriptRuntime();\n this.parser = new HoloScriptCodeParser();\n }\n\n /**\n * Load source code for debugging\n */\n loadSource(code: string, file?: string): { success: boolean; errors?: string[] } {\n const parseResult = this.parser.parse(code);\n\n if (!parseResult.success) {\n return {\n success: false,\n errors: parseResult.errors.map(e => `Line ${e.line}: ${e.message}`),\n };\n }\n\n this.currentAST = parseResult.ast;\n this.currentNodeIndex = 0;\n this.state.status = 'stopped';\n this.callStack = [];\n\n // Store file reference in nodes\n if (file) {\n for (const node of this.currentAST) {\n (node as ASTNode & { file?: string }).file = file;\n }\n }\n\n return { success: true };\n }\n\n /**\n * Set a breakpoint at a line\n */\n setBreakpoint(line: number, options: Partial<Breakpoint> = {}): Breakpoint {\n const id = `bp_${++this.breakpointIdCounter}`;\n const breakpoint: Breakpoint = {\n id,\n line,\n column: options.column,\n condition: options.condition,\n hitCount: 0,\n enabled: options.enabled !== false,\n file: options.file,\n };\n\n this.breakpoints.set(id, breakpoint);\n this.updateBreakpointList();\n\n return breakpoint;\n }\n\n /**\n * Remove a breakpoint by ID\n */\n removeBreakpoint(id: string): boolean {\n const removed = this.breakpoints.delete(id);\n if (removed) {\n this.updateBreakpointList();\n }\n return removed;\n }\n\n /**\n * Remove all breakpoints at a line\n */\n removeBreakpointsAtLine(line: number): number {\n let removed = 0;\n for (const [id, bp] of this.breakpoints) {\n if (bp.line === line) {\n this.breakpoints.delete(id);\n removed++;\n }\n }\n if (removed > 0) {\n this.updateBreakpointList();\n }\n return removed;\n }\n\n /**\n * Toggle breakpoint enabled state\n */\n toggleBreakpoint(id: string): boolean {\n const bp = this.breakpoints.get(id);\n if (bp) {\n bp.enabled = !bp.enabled;\n this.updateBreakpointList();\n return bp.enabled;\n }\n return false;\n }\n\n /**\n * Get all breakpoints\n */\n getBreakpoints(): Breakpoint[] {\n return Array.from(this.breakpoints.values());\n }\n\n /**\n * Clear all breakpoints\n */\n clearBreakpoints(): void {\n this.breakpoints.clear();\n this.updateBreakpointList();\n }\n\n /**\n * Start debugging from the beginning\n */\n async start(): Promise<void> {\n this.currentNodeIndex = 0;\n this.callStack = [];\n this.frameIdCounter = 0;\n this.runtime.reset();\n this.state.status = 'running';\n\n await this.runUntilBreakpoint();\n }\n\n /**\n * Continue execution until next breakpoint or end\n */\n async continue(): Promise<void> {\n if (this.state.status !== 'paused') return;\n\n this.state.status = 'running';\n this.currentNodeIndex++;\n await this.runUntilBreakpoint();\n }\n\n /**\n * Step into the next node\n */\n async stepInto(): Promise<void> {\n if (this.state.status !== 'paused') return;\n\n this.state.status = 'stepping';\n await this.executeStep('into');\n }\n\n /**\n * Step over the current node\n */\n async stepOver(): Promise<void> {\n if (this.state.status !== 'paused') return;\n\n this.state.status = 'stepping';\n await this.executeStep('over');\n }\n\n /**\n * Step out of the current function\n */\n async stepOut(): Promise<void> {\n if (this.state.status !== 'paused') return;\n\n this.state.status = 'stepping';\n await this.executeStep('out');\n }\n\n /**\n * Stop debugging\n */\n stop(): void {\n this.state.status = 'stopped';\n this.callStack = [];\n this.currentNodeIndex = 0;\n this.emitEvent({ type: 'state-change', data: { status: 'stopped' } });\n }\n\n /**\n * Pause execution\n */\n pause(): void {\n if (this.state.status === 'running') {\n this.state.status = 'paused';\n this.emitEvent({ type: 'state-change', data: { status: 'paused' } });\n }\n }\n\n /**\n * Get current debug state\n */\n getState(): DebugState {\n return { ...this.state };\n }\n\n /**\n * Get call stack\n */\n getCallStack(): StackFrame[] {\n return [...this.callStack];\n }\n\n /**\n * Get variables at a specific stack frame\n */\n getVariables(frameId?: number): Map<string, unknown> {\n if (frameId !== undefined) {\n const frame = this.callStack.find(f => f.id === frameId);\n return frame?.variables || new Map();\n }\n\n // Return all variables from runtime context\n return new Map(this.runtime.getContext().variables);\n }\n\n /**\n * Evaluate an expression in the current context\n */\n async evaluate(expression: string): Promise<{ value: unknown; error?: string }> {\n try {\n // Try to evaluate as a variable lookup first\n const varValue = this.runtime.getVariable(expression);\n if (varValue !== undefined) {\n return { value: varValue };\n }\n\n // Try to parse and execute as an expression\n const parseResult = this.parser.parse(expression);\n if (!parseResult.success) {\n return { value: undefined, error: parseResult.errors[0]?.message };\n }\n\n // Execute the expression\n const results = await this.runtime.executeProgram(parseResult.ast);\n const lastResult = results[results.length - 1];\n\n return { value: lastResult?.output };\n } catch (error) {\n return { value: undefined, error: String(error) };\n }\n }\n\n /**\n * Set a watch expression\n */\n watch(expression: string): { id: string; expression: string } {\n const id = `watch_${Date.now()}`;\n return { id, expression };\n }\n\n /**\n * Register an event handler\n */\n on(event: string, handler: DebugEventHandler): void {\n if (!this.eventHandlers.has(event)) {\n this.eventHandlers.set(event, []);\n }\n this.eventHandlers.get(event)!.push(handler);\n }\n\n /**\n * Remove an event handler\n */\n off(event: string, handler: DebugEventHandler): void {\n const handlers = this.eventHandlers.get(event);\n if (handlers) {\n const index = handlers.indexOf(handler);\n if (index !== -1) {\n handlers.splice(index, 1);\n }\n }\n }\n\n /**\n * Get the underlying runtime\n */\n getRuntime(): HoloScriptRuntime {\n return this.runtime;\n }\n\n // Private methods\n\n private async runUntilBreakpoint(): Promise<void> {\n while (this.currentNodeIndex < this.currentAST.length) {\n if (this.state.status === 'stopped') break;\n\n const node = this.currentAST[this.currentNodeIndex];\n\n // Check for breakpoint\n if (this.shouldBreakAt(node)) {\n this.state.status = 'paused';\n this.updateCurrentState(node);\n\n const bp = this.findBreakpointAtLine(node.line ?? 0);\n if (bp) {\n bp.hitCount++;\n this.emitEvent({\n type: 'breakpoint-hit',\n data: { breakpoint: bp, node, line: node.line ?? 0 },\n });\n }\n return;\n }\n\n // Execute the node\n await this.executeNode(node);\n this.currentNodeIndex++;\n }\n\n // Execution complete\n this.state.status = 'stopped';\n this.emitEvent({ type: 'state-change', data: { status: 'stopped', reason: 'complete' } });\n }\n\n private async executeStep(mode: StepMode): Promise<void> {\n const startStackDepth = this.callStack.length;\n\n if (this.currentNodeIndex >= this.currentAST.length) {\n this.state.status = 'stopped';\n return;\n }\n\n const node = this.currentAST[this.currentNodeIndex];\n\n switch (mode) {\n case 'into':\n // Execute one node, stepping into function calls\n await this.executeNode(node);\n this.currentNodeIndex++;\n break;\n\n case 'over':\n // Execute one node, treating function calls as single steps\n await this.executeNode(node);\n this.currentNodeIndex++;\n break;\n\n case 'out':\n // Execute until we leave the current stack frame\n while (this.currentNodeIndex < this.currentAST.length) {\n await this.executeNode(this.currentAST[this.currentNodeIndex]);\n this.currentNodeIndex++;\n\n if (this.callStack.length < startStackDepth) {\n break;\n }\n }\n break;\n }\n\n // Update state after step\n if (this.currentNodeIndex < this.currentAST.length) {\n this.state.status = 'paused';\n this.updateCurrentState(this.currentAST[this.currentNodeIndex]);\n this.emitEvent({\n type: 'step-complete',\n data: { mode, node: this.currentAST[this.currentNodeIndex] },\n });\n } else {\n this.state.status = 'stopped';\n this.emitEvent({ type: 'state-change', data: { status: 'stopped', reason: 'complete' } });\n }\n }\n\n private async executeNode(node: ASTNode): Promise<void> {\n // Push stack frame for functions\n if (node.type === 'function') {\n const funcNode = node as ASTNode & { name: string };\n this.pushStackFrame(funcNode.name, node);\n }\n\n try {\n // Execute via runtime\n const result = await this.runtime.executeNode(node);\n\n if (!result.success && result.error) {\n this.emitEvent({\n type: 'exception',\n data: { error: result.error, node, line: node.line },\n });\n }\n\n if (result.output !== undefined) {\n this.emitEvent({\n type: 'output',\n data: { output: result.output, node },\n });\n }\n } catch (error) {\n this.emitEvent({\n type: 'exception',\n data: { error: String(error), node, line: node.line },\n });\n }\n\n // Pop stack frame when function completes\n if (node.type === 'function') {\n this.popStackFrame();\n }\n }\n\n private shouldBreakAt(node: ASTNode): boolean {\n const line = node.line;\n\n for (const bp of this.breakpoints.values()) {\n if (!bp.enabled) continue;\n if (bp.line !== line) continue;\n\n // Check condition if present\n if (bp.condition) {\n try {\n const value = this.runtime.getVariable(bp.condition);\n if (!value) continue;\n } catch {\n continue;\n }\n }\n\n return true;\n }\n\n return false;\n }\n\n private findBreakpointAtLine(line: number): Breakpoint | null {\n for (const bp of this.breakpoints.values()) {\n if (bp.line === line && bp.enabled) {\n return bp;\n }\n }\n return null;\n }\n\n private pushStackFrame(name: string, node: ASTNode): void {\n const frame: StackFrame = {\n id: ++this.frameIdCounter,\n name,\n file: (node as ASTNode & { file?: string }).file,\n line: node.line ?? 0,\n column: node.column ?? 0,\n variables: new Map(this.runtime.getContext().variables),\n node,\n };\n\n this.callStack.push(frame);\n this.state.callStack = [...this.callStack];\n }\n\n private popStackFrame(): StackFrame | undefined {\n const frame = this.callStack.pop();\n this.state.callStack = [...this.callStack];\n return frame;\n }\n\n private updateCurrentState(node: ASTNode): void {\n this.state.currentLine = node.line ?? 0;\n this.state.currentColumn = node.column ?? 0;\n this.state.currentNode = node;\n }\n\n private updateBreakpointList(): void {\n this.state.breakpoints = Array.from(this.breakpoints.values());\n }\n\n private emitEvent(event: DebugEvent): void {\n const handlers = this.eventHandlers.get(event.type) || [];\n for (const handler of handlers) {\n try {\n handler(event);\n } catch (error) {\n console.error('Debug event handler error:', error);\n }\n }\n\n // Also emit to 'all' handlers\n const allHandlers = this.eventHandlers.get('all') || [];\n for (const handler of allHandlers) {\n try {\n handler(event);\n } catch (error) {\n console.error('Debug event handler error:', error);\n }\n }\n }\n}\n\n/**\n * Create a debugger instance\n */\nexport function createDebugger(runtime?: HoloScriptRuntime): HoloScriptDebugger {\n return new HoloScriptDebugger(runtime);\n}\n"]}
@@ -0,0 +1,45 @@
1
+ // src/logger.ts
2
+ var NoOpLogger = class {
3
+ debug() {
4
+ }
5
+ info() {
6
+ }
7
+ warn() {
8
+ }
9
+ error() {
10
+ }
11
+ };
12
+ var ConsoleLogger = class {
13
+ debug(message, meta) {
14
+ console.debug(`[HoloScript:DEBUG] ${message}`, meta ?? "");
15
+ }
16
+ info(message, meta) {
17
+ console.info(`[HoloScript:INFO] ${message}`, meta ?? "");
18
+ }
19
+ warn(message, meta) {
20
+ console.warn(`[HoloScript:WARN] ${message}`, meta ?? "");
21
+ }
22
+ error(message, meta) {
23
+ console.error(`[HoloScript:ERROR] ${message}`, meta ?? "");
24
+ }
25
+ };
26
+ var currentLogger = new NoOpLogger();
27
+ function setHoloScriptLogger(logger2) {
28
+ currentLogger = logger2;
29
+ }
30
+ function enableConsoleLogging() {
31
+ currentLogger = new ConsoleLogger();
32
+ }
33
+ function resetLogger() {
34
+ currentLogger = new NoOpLogger();
35
+ }
36
+ var logger = {
37
+ debug: (msg, meta) => currentLogger.debug(msg, meta),
38
+ info: (msg, meta) => currentLogger.info(msg, meta),
39
+ warn: (msg, meta) => currentLogger.warn(msg, meta),
40
+ error: (msg, meta) => currentLogger.error(msg, meta)
41
+ };
42
+
43
+ export { ConsoleLogger, NoOpLogger, enableConsoleLogging, logger, resetLogger, setHoloScriptLogger };
44
+ //# sourceMappingURL=chunk-SATNCODL.js.map
45
+ //# sourceMappingURL=chunk-SATNCODL.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/logger.ts"],"names":["logger"],"mappings":";AAaA,IAAM,aAAN,MAA6C;AAAA,EAC3C,KAAA,GAAc;AAAA,EAAC;AAAA,EACf,IAAA,GAAa;AAAA,EAAC;AAAA,EACd,IAAA,GAAa;AAAA,EAAC;AAAA,EACd,KAAA,GAAc;AAAA,EAAC;AACjB;AAEA,IAAM,gBAAN,MAAgD;AAAA,EAC9C,KAAA,CAAM,SAAiB,IAAA,EAAsC;AAC3D,IAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,mBAAA,EAAsB,OAAO,CAAA,CAAA,EAAI,QAAQ,EAAE,CAAA;AAAA,EAC3D;AAAA,EACA,IAAA,CAAK,SAAiB,IAAA,EAAsC;AAC1D,IAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,kBAAA,EAAqB,OAAO,CAAA,CAAA,EAAI,QAAQ,EAAE,CAAA;AAAA,EACzD;AAAA,EACA,IAAA,CAAK,SAAiB,IAAA,EAAsC;AAC1D,IAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,kBAAA,EAAqB,OAAO,CAAA,CAAA,EAAI,QAAQ,EAAE,CAAA;AAAA,EACzD;AAAA,EACA,KAAA,CAAM,SAAiB,IAAA,EAAsC;AAC3D,IAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,mBAAA,EAAsB,OAAO,CAAA,CAAA,EAAI,QAAQ,EAAE,CAAA;AAAA,EAC3D;AACF;AAEA,IAAI,aAAA,GAAkC,IAAI,UAAA,EAAW;AAE9C,SAAS,oBAAoBA,OAAAA,EAAgC;AAClE,EAAA,aAAA,GAAgBA,OAAAA;AAClB;AAEO,SAAS,oBAAA,GAA6B;AAC3C,EAAA,aAAA,GAAgB,IAAI,aAAA,EAAc;AACpC;AAEO,SAAS,WAAA,GAAoB;AAClC,EAAA,aAAA,GAAgB,IAAI,UAAA,EAAW;AACjC;AAEO,IAAM,MAAA,GAA2B;AAAA,EACtC,OAAO,CAAC,GAAA,EAAK,SAAS,aAAA,CAAc,KAAA,CAAM,KAAK,IAAI,CAAA;AAAA,EACnD,MAAM,CAAC,GAAA,EAAK,SAAS,aAAA,CAAc,IAAA,CAAK,KAAK,IAAI,CAAA;AAAA,EACjD,MAAM,CAAC,GAAA,EAAK,SAAS,aAAA,CAAc,IAAA,CAAK,KAAK,IAAI,CAAA;AAAA,EACjD,OAAO,CAAC,GAAA,EAAK,SAAS,aAAA,CAAc,KAAA,CAAM,KAAK,IAAI;AACrD","file":"chunk-SATNCODL.js","sourcesContent":["/**\n * @holoscript/core Logger\n *\n * Simple pluggable logger for HoloScript\n */\n\nexport interface HoloScriptLogger {\n debug(message: string, meta?: Record<string, unknown>): void;\n info(message: string, meta?: Record<string, unknown>): void;\n warn(message: string, meta?: Record<string, unknown>): void;\n error(message: string, meta?: Record<string, unknown>): void;\n}\n\nclass NoOpLogger implements HoloScriptLogger {\n debug(): void {}\n info(): void {}\n warn(): void {}\n error(): void {}\n}\n\nclass ConsoleLogger implements HoloScriptLogger {\n debug(message: string, meta?: Record<string, unknown>): void {\n console.debug(`[HoloScript:DEBUG] ${message}`, meta ?? '');\n }\n info(message: string, meta?: Record<string, unknown>): void {\n console.info(`[HoloScript:INFO] ${message}`, meta ?? '');\n }\n warn(message: string, meta?: Record<string, unknown>): void {\n console.warn(`[HoloScript:WARN] ${message}`, meta ?? '');\n }\n error(message: string, meta?: Record<string, unknown>): void {\n console.error(`[HoloScript:ERROR] ${message}`, meta ?? '');\n }\n}\n\nlet currentLogger: HoloScriptLogger = new NoOpLogger();\n\nexport function setHoloScriptLogger(logger: HoloScriptLogger): void {\n currentLogger = logger;\n}\n\nexport function enableConsoleLogging(): void {\n currentLogger = new ConsoleLogger();\n}\n\nexport function resetLogger(): void {\n currentLogger = new NoOpLogger();\n}\n\nexport const logger: HoloScriptLogger = {\n debug: (msg, meta) => currentLogger.debug(msg, meta),\n info: (msg, meta) => currentLogger.info(msg, meta),\n warn: (msg, meta) => currentLogger.warn(msg, meta),\n error: (msg, meta) => currentLogger.error(msg, meta),\n};\n\nexport { NoOpLogger, ConsoleLogger };\n"]}