@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.
- package/dist/chunk-2XXE34KS.js +344 -0
- package/dist/chunk-2XXE34KS.js.map +1 -0
- package/dist/chunk-3X2EGU7Z.cjs +52 -0
- package/dist/chunk-3X2EGU7Z.cjs.map +1 -0
- package/dist/chunk-AFFVFO4D.js +1689 -0
- package/dist/chunk-AFFVFO4D.js.map +1 -0
- package/dist/chunk-DGUM43GV.js +10 -0
- package/dist/chunk-DGUM43GV.js.map +1 -0
- package/{src/HoloScriptDebugger.ts → dist/chunk-DOY73HDH.js} +118 -257
- package/dist/chunk-DOY73HDH.js.map +1 -0
- package/dist/chunk-JEQ2X3Z6.cjs +12 -0
- package/dist/chunk-JEQ2X3Z6.cjs.map +1 -0
- package/dist/chunk-L6VLNVKP.cjs +1691 -0
- package/dist/chunk-L6VLNVKP.cjs.map +1 -0
- package/dist/chunk-MFNO57XL.cjs +347 -0
- package/dist/chunk-MFNO57XL.cjs.map +1 -0
- package/dist/chunk-R75MREOS.cjs +424 -0
- package/dist/chunk-R75MREOS.cjs.map +1 -0
- package/dist/chunk-SATNCODL.js +45 -0
- package/dist/chunk-SATNCODL.js.map +1 -0
- package/dist/chunk-T57ZL7KR.cjs +1281 -0
- package/dist/chunk-T57ZL7KR.cjs.map +1 -0
- package/dist/chunk-U72GEJZT.js +1279 -0
- package/dist/chunk-U72GEJZT.js.map +1 -0
- package/dist/debugger.cjs +20 -0
- package/dist/debugger.cjs.map +1 -0
- package/dist/debugger.d.cts +171 -0
- package/dist/debugger.d.ts +171 -0
- package/dist/debugger.js +7 -0
- package/dist/debugger.js.map +1 -0
- package/dist/index.cjs +6803 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +4093 -0
- package/dist/index.d.ts +4093 -0
- package/dist/index.js +6715 -0
- package/dist/index.js.map +1 -0
- package/dist/parser.cjs +14 -0
- package/dist/parser.cjs.map +1 -0
- package/dist/parser.d.cts +172 -0
- package/dist/parser.d.ts +172 -0
- package/dist/parser.js +5 -0
- package/dist/parser.js.map +1 -0
- package/dist/runtime.cjs +14 -0
- package/dist/runtime.cjs.map +1 -0
- package/dist/runtime.d.cts +200 -0
- package/dist/runtime.d.ts +200 -0
- package/dist/runtime.js +5 -0
- package/dist/runtime.js.map +1 -0
- package/dist/type-checker.cjs +17 -0
- package/dist/type-checker.cjs.map +1 -0
- package/dist/type-checker.d.cts +105 -0
- package/dist/type-checker.d.ts +105 -0
- package/dist/type-checker.js +4 -0
- package/dist/type-checker.js.map +1 -0
- package/dist/types-4h8cbtF_.d.cts +329 -0
- package/dist/types-4h8cbtF_.d.ts +329 -0
- package/package.json +17 -13
- package/src/HoloScript2DParser.js +0 -227
- package/src/HoloScript2DParser.ts +0 -261
- package/src/HoloScriptCodeParser.js +0 -1102
- package/src/HoloScriptCodeParser.ts +0 -1188
- package/src/HoloScriptDebugger.js +0 -458
- package/src/HoloScriptParser.js +0 -338
- package/src/HoloScriptParser.ts +0 -397
- package/src/HoloScriptPlusParser.js +0 -371
- package/src/HoloScriptPlusParser.ts +0 -543
- package/src/HoloScriptRuntime.js +0 -1399
- package/src/HoloScriptRuntime.test.js +0 -351
- package/src/HoloScriptRuntime.test.ts +0 -436
- package/src/HoloScriptRuntime.ts +0 -1653
- package/src/HoloScriptTypeChecker.js +0 -356
- package/src/HoloScriptTypeChecker.ts +0 -475
- package/src/__tests__/GraphicsServices.test.js +0 -357
- package/src/__tests__/GraphicsServices.test.ts +0 -427
- package/src/__tests__/HoloScriptPlusParser.test.js +0 -317
- package/src/__tests__/HoloScriptPlusParser.test.ts +0 -392
- package/src/__tests__/integration.test.js +0 -336
- package/src/__tests__/integration.test.ts +0 -416
- package/src/__tests__/performance.bench.js +0 -218
- package/src/__tests__/performance.bench.ts +0 -262
- package/src/__tests__/type-checker.test.js +0 -60
- package/src/__tests__/type-checker.test.ts +0 -73
- package/src/index.js +0 -217
- package/src/index.ts +0 -426
- package/src/interop/Interoperability.js +0 -413
- package/src/interop/Interoperability.ts +0 -494
- package/src/logger.js +0 -42
- package/src/logger.ts +0 -57
- package/src/parser/EnhancedParser.js +0 -205
- package/src/parser/EnhancedParser.ts +0 -251
- package/src/parser/HoloScriptPlusParser.js +0 -928
- package/src/parser/HoloScriptPlusParser.ts +0 -1089
- package/src/runtime/HoloScriptPlusRuntime.js +0 -674
- package/src/runtime/HoloScriptPlusRuntime.ts +0 -861
- package/src/runtime/PerformanceTelemetry.js +0 -323
- package/src/runtime/PerformanceTelemetry.ts +0 -467
- package/src/runtime/RuntimeOptimization.js +0 -361
- package/src/runtime/RuntimeOptimization.ts +0 -416
- package/src/services/HololandGraphicsPipelineService.js +0 -506
- package/src/services/HololandGraphicsPipelineService.ts +0 -662
- package/src/services/PlatformPerformanceOptimizer.js +0 -356
- package/src/services/PlatformPerformanceOptimizer.ts +0 -503
- package/src/state/ReactiveState.js +0 -427
- package/src/state/ReactiveState.ts +0 -572
- package/src/tools/DeveloperExperience.js +0 -376
- package/src/tools/DeveloperExperience.ts +0 -438
- package/src/traits/AIDriverTrait.js +0 -322
- package/src/traits/AIDriverTrait.test.js +0 -329
- package/src/traits/AIDriverTrait.test.ts +0 -357
- package/src/traits/AIDriverTrait.ts +0 -474
- package/src/traits/LightingTrait.js +0 -313
- package/src/traits/LightingTrait.test.js +0 -410
- package/src/traits/LightingTrait.test.ts +0 -462
- package/src/traits/LightingTrait.ts +0 -505
- package/src/traits/MaterialTrait.js +0 -194
- package/src/traits/MaterialTrait.test.js +0 -286
- package/src/traits/MaterialTrait.test.ts +0 -329
- package/src/traits/MaterialTrait.ts +0 -324
- package/src/traits/RenderingTrait.js +0 -356
- package/src/traits/RenderingTrait.test.js +0 -363
- package/src/traits/RenderingTrait.test.ts +0 -427
- package/src/traits/RenderingTrait.ts +0 -555
- package/src/traits/VRTraitSystem.js +0 -740
- package/src/traits/VRTraitSystem.ts +0 -1040
- package/src/traits/VoiceInputTrait.js +0 -284
- package/src/traits/VoiceInputTrait.test.js +0 -226
- package/src/traits/VoiceInputTrait.test.ts +0 -252
- package/src/traits/VoiceInputTrait.ts +0 -401
- package/src/types/AdvancedTypeSystem.js +0 -226
- package/src/types/AdvancedTypeSystem.ts +0 -494
- package/src/types/HoloScriptPlus.d.ts +0 -853
- package/src/types.js +0 -6
- package/src/types.ts +0 -369
- package/tsconfig.json +0 -23
- package/tsup.config.d.ts +0 -2
- package/tsup.config.js +0 -18
- 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"]}
|