@bubblelab/bubble-runtime 0.1.13 → 0.1.15
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/extraction/BubbleParser.d.ts +188 -8
- package/dist/extraction/BubbleParser.d.ts.map +1 -1
- package/dist/extraction/BubbleParser.js +2265 -99
- package/dist/extraction/BubbleParser.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/injection/BubbleInjector.d.ts +31 -5
- package/dist/injection/BubbleInjector.d.ts.map +1 -1
- package/dist/injection/BubbleInjector.js +349 -28
- package/dist/injection/BubbleInjector.js.map +1 -1
- package/dist/injection/LoggerInjector.d.ts +17 -0
- package/dist/injection/LoggerInjector.d.ts.map +1 -1
- package/dist/injection/LoggerInjector.js +319 -9
- package/dist/injection/LoggerInjector.js.map +1 -1
- package/dist/parse/BubbleScript.d.ts +54 -5
- package/dist/parse/BubbleScript.d.ts.map +1 -1
- package/dist/parse/BubbleScript.js +112 -24
- package/dist/parse/BubbleScript.js.map +1 -1
- package/dist/parse/index.d.ts +0 -1
- package/dist/parse/index.d.ts.map +1 -1
- package/dist/parse/index.js +0 -1
- package/dist/parse/index.js.map +1 -1
- package/dist/runtime/BubbleRunner.d.ts +9 -2
- package/dist/runtime/BubbleRunner.d.ts.map +1 -1
- package/dist/runtime/BubbleRunner.js +76 -49
- package/dist/runtime/BubbleRunner.js.map +1 -1
- package/dist/runtime/index.d.ts +1 -1
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/index.js.map +1 -1
- package/dist/utils/bubble-helper.d.ts +2 -2
- package/dist/utils/bubble-helper.d.ts.map +1 -1
- package/dist/utils/bubble-helper.js +5 -1
- package/dist/utils/bubble-helper.js.map +1 -1
- package/dist/utils/error-sanitizer.d.ts +16 -0
- package/dist/utils/error-sanitizer.d.ts.map +1 -0
- package/dist/utils/error-sanitizer.js +111 -0
- package/dist/utils/error-sanitizer.js.map +1 -0
- package/dist/utils/normalize-control-flow.d.ts +14 -0
- package/dist/utils/normalize-control-flow.d.ts.map +1 -0
- package/dist/utils/normalize-control-flow.js +179 -0
- package/dist/utils/normalize-control-flow.js.map +1 -0
- package/dist/utils/parameter-formatter.d.ts +14 -5
- package/dist/utils/parameter-formatter.d.ts.map +1 -1
- package/dist/utils/parameter-formatter.js +166 -51
- package/dist/utils/parameter-formatter.js.map +1 -1
- package/dist/utils/sanitize-script.d.ts +11 -0
- package/dist/utils/sanitize-script.d.ts.map +1 -0
- package/dist/utils/sanitize-script.js +43 -0
- package/dist/utils/sanitize-script.js.map +1 -0
- package/dist/validation/BubbleValidator.d.ts +15 -0
- package/dist/validation/BubbleValidator.d.ts.map +1 -1
- package/dist/validation/BubbleValidator.js +171 -1
- package/dist/validation/BubbleValidator.js.map +1 -1
- package/dist/validation/index.d.ts +7 -3
- package/dist/validation/index.d.ts.map +1 -1
- package/dist/validation/index.js +63 -12
- package/dist/validation/index.js.map +1 -1
- package/dist/validation/lint-rules.d.ts +91 -0
- package/dist/validation/lint-rules.d.ts.map +1 -0
- package/dist/validation/lint-rules.js +755 -0
- package/dist/validation/lint-rules.js.map +1 -0
- package/package.json +5 -5
- package/dist/parse/traceDependencies.d.ts +0 -18
- package/dist/parse/traceDependencies.d.ts.map +0 -1
- package/dist/parse/traceDependencies.js +0 -196
- package/dist/parse/traceDependencies.js.map +0 -1
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { hashToVariableId, buildCallSiteKey } from '@bubblelab/shared-schemas';
|
|
1
2
|
export class LoggerInjector {
|
|
2
3
|
bubbleScript;
|
|
3
4
|
options;
|
|
@@ -16,12 +17,18 @@ export class LoggerInjector {
|
|
|
16
17
|
injectLogging() {
|
|
17
18
|
const modifiedScript = this.bubbleScript.currentBubbleScript;
|
|
18
19
|
const lines = modifiedScript.split('\n');
|
|
19
|
-
// Inject
|
|
20
|
+
// Inject function call logging FIRST (before line logging shifts line numbers)
|
|
21
|
+
this.injectFunctionCallLogging(lines);
|
|
22
|
+
// Update the script and reparse AST after function call logging
|
|
23
|
+
this.bubbleScript.currentBubbleScript = lines.join('\n');
|
|
24
|
+
this.bubbleScript.reparseAST();
|
|
25
|
+
// Inject statement-level logging in handle method (now with updated AST)
|
|
20
26
|
if (this.options.enableLineByLineLogging) {
|
|
21
|
-
this.
|
|
27
|
+
const updatedLines = this.bubbleScript.currentBubbleScript.split('\n');
|
|
28
|
+
this.injectLineLogging(updatedLines);
|
|
29
|
+
this.bubbleScript.currentBubbleScript = updatedLines.join('\n');
|
|
22
30
|
}
|
|
23
|
-
this.bubbleScript.currentBubbleScript
|
|
24
|
-
return lines.join('\n');
|
|
31
|
+
return this.bubbleScript.currentBubbleScript;
|
|
25
32
|
}
|
|
26
33
|
/**
|
|
27
34
|
* Inject logging using original line numbers for traceability
|
|
@@ -45,6 +52,8 @@ export class LoggerInjector {
|
|
|
45
52
|
console.warn('Handle method location not found, skipping statement logging');
|
|
46
53
|
return;
|
|
47
54
|
}
|
|
55
|
+
// Note: __bubbleFlowSelf should already be injected via injectSelfCapture()
|
|
56
|
+
// which is called before this method in injectBubbleLoggingAndReinitializeBubbleParameters()
|
|
48
57
|
// Get the existing AST and find statements within the handle method
|
|
49
58
|
const ast = this.bubbleScript.getAST();
|
|
50
59
|
const statements = this.findStatementsInHandleMethod(ast, handleMethodLocation);
|
|
@@ -55,8 +64,9 @@ export class LoggerInjector {
|
|
|
55
64
|
const arrayIndex = statement.line - 1; // Convert to 0-based index
|
|
56
65
|
if (arrayIndex >= 0 && arrayIndex < lines.length) {
|
|
57
66
|
const line = lines[arrayIndex];
|
|
58
|
-
const indentation = line.match(
|
|
59
|
-
|
|
67
|
+
const indentation = line.match(/^\s*/)?.[0] || ' ';
|
|
68
|
+
// Use __bubbleFlowSelf.logger instead of this.logger for nested function support
|
|
69
|
+
const statementLog = `${indentation}__bubbleFlowSelf.logger?.logLine(${statement.line}, 'Statement: ${statement.type}');`;
|
|
60
70
|
// Insert after the statement line
|
|
61
71
|
lines.splice(arrayIndex + 1, 0, statementLog);
|
|
62
72
|
}
|
|
@@ -70,6 +80,8 @@ export class LoggerInjector {
|
|
|
70
80
|
console.warn('Original handle method location not found, skipping statement logging');
|
|
71
81
|
return;
|
|
72
82
|
}
|
|
83
|
+
// Note: __bubbleFlowSelf should already be injected via injectSelfCapture()
|
|
84
|
+
// which is called before this method in injectBubbleLoggingAndReinitializeBubbleParameters()
|
|
73
85
|
// Find statements within the original handle method
|
|
74
86
|
const statements = this.findStatementsInHandleMethod(originalAST, originalHandleMethodLocation);
|
|
75
87
|
// Sort statements by line number (reverse order for safe insertion)
|
|
@@ -79,14 +91,58 @@ export class LoggerInjector {
|
|
|
79
91
|
const arrayIndex = statement.line - 1; // Convert to 0-based index
|
|
80
92
|
if (arrayIndex >= 0 && arrayIndex < lines.length) {
|
|
81
93
|
const line = lines[arrayIndex];
|
|
82
|
-
const indentation = line.match(
|
|
83
|
-
// Use
|
|
84
|
-
const statementLog = `${indentation}
|
|
94
|
+
const indentation = line.match(/^\s*/)?.[0] || ' ';
|
|
95
|
+
// Use __bubbleFlowSelf.logger instead of this.logger for nested function support
|
|
96
|
+
const statementLog = `${indentation}__bubbleFlowSelf.logger?.logLine(${statement.line}, 'Statement: ${statement.type}');`;
|
|
85
97
|
// Insert after the statement line
|
|
86
98
|
lines.splice(arrayIndex + 1, 0, statementLog);
|
|
87
99
|
}
|
|
88
100
|
}
|
|
89
101
|
}
|
|
102
|
+
/**
|
|
103
|
+
* Inject `const __bubbleFlowSelf = this;` at the beginning of all instance method bodies
|
|
104
|
+
* This captures `this` in a lexical variable that works at any nesting level
|
|
105
|
+
* This should be called BEFORE reapplyBubbleInstantiations so bubble instantiations can use __bubbleFlowSelf.logger
|
|
106
|
+
*/
|
|
107
|
+
injectSelfCapture() {
|
|
108
|
+
// Reparse AST first to get updated method locations after script modifications
|
|
109
|
+
this.bubbleScript.reparseAST();
|
|
110
|
+
const instanceMethodsLocation = this.bubbleScript.instanceMethodsLocation;
|
|
111
|
+
if (!instanceMethodsLocation ||
|
|
112
|
+
Object.keys(instanceMethodsLocation).length === 0) {
|
|
113
|
+
console.warn('Instance methods location not found, skipping __bubbleFlowSelf injection');
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
// Process methods in reverse order of bodyStartLine to avoid line number shifts
|
|
117
|
+
const methods = Object.entries(instanceMethodsLocation).sort((a, b) => b[1].bodyStartLine - a[1].bodyStartLine);
|
|
118
|
+
for (const [, location] of methods) {
|
|
119
|
+
// Get the indentation from the method body start line
|
|
120
|
+
const lines = this.bubbleScript.currentBubbleScript.split('\n');
|
|
121
|
+
const bodyStartLineIndex = location.bodyStartLine - 1;
|
|
122
|
+
if (bodyStartLineIndex >= 0 && bodyStartLineIndex < lines.length) {
|
|
123
|
+
const bodyStartLine = lines[bodyStartLineIndex];
|
|
124
|
+
// Check if __bubbleFlowSelf already exists in this method to avoid duplicates
|
|
125
|
+
const methodStartIndex = location.startLine - 1;
|
|
126
|
+
const methodEndIndex = Math.min(location.endLine, lines.length);
|
|
127
|
+
const methodBodyLines = lines.slice(methodStartIndex, methodEndIndex);
|
|
128
|
+
const methodBody = methodBodyLines.join('\n');
|
|
129
|
+
if (methodBody.includes('const __bubbleFlowSelf = this;')) {
|
|
130
|
+
// Already injected, skip
|
|
131
|
+
continue;
|
|
132
|
+
}
|
|
133
|
+
// Extract indentation from the line (usually 2 spaces for method body)
|
|
134
|
+
const match = bodyStartLine.match(/^(\s*)/);
|
|
135
|
+
const indentation = match ? match[1] : ' ';
|
|
136
|
+
// Add one level of indentation for the injected statement
|
|
137
|
+
const selfCapture = `${indentation} const __bubbleFlowSelf = this;`;
|
|
138
|
+
// Inject self capture at body start line (after opening brace)
|
|
139
|
+
// bodyStartLine is the line with the opening brace, so inject on the next line
|
|
140
|
+
this.bubbleScript.injectLines([selfCapture], location.bodyStartLine + 1);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
this.bubbleScript.reparseAST();
|
|
144
|
+
this.bubbleScript.showScript('[LoggerInjector] After injectSelfCapture in all methods');
|
|
145
|
+
}
|
|
90
146
|
/**
|
|
91
147
|
* Find all statements within the handle method using AST
|
|
92
148
|
*/
|
|
@@ -150,5 +206,259 @@ export class LoggerInjector {
|
|
|
150
206
|
visitValue(value);
|
|
151
207
|
}
|
|
152
208
|
}
|
|
209
|
+
/**
|
|
210
|
+
* Inject logging for all method invocations using pre-tracked invocation data
|
|
211
|
+
* Uses rich invocation info captured during AST parsing
|
|
212
|
+
*/
|
|
213
|
+
injectFunctionCallLogging(lines) {
|
|
214
|
+
// Reparse AST to get current invocation lines (after script modifications)
|
|
215
|
+
this.bubbleScript.reparseAST();
|
|
216
|
+
const instanceMethods = this.bubbleScript.instanceMethodsLocation;
|
|
217
|
+
if (!instanceMethods || Object.keys(instanceMethods).length === 0) {
|
|
218
|
+
return;
|
|
219
|
+
}
|
|
220
|
+
// Collect all invocations with their rich metadata
|
|
221
|
+
const invocations = [];
|
|
222
|
+
for (const [methodName, methodInfo] of Object.entries(instanceMethods)) {
|
|
223
|
+
for (const invocationInfo of methodInfo.invocationLines) {
|
|
224
|
+
// Generate a deterministic variableId based on method name + call site location
|
|
225
|
+
// This ensures each invocation gets a unique ID even when the same method is called multiple times
|
|
226
|
+
const variableId = hashToVariableId(buildCallSiteKey(methodName, invocationInfo.invocationIndex));
|
|
227
|
+
invocations.push({ ...invocationInfo, methodName, variableId });
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
// Sort by line number in reverse order for safe insertion
|
|
231
|
+
invocations.sort((a, b) => b.lineNumber - a.lineNumber);
|
|
232
|
+
// Inject logging for each invocation
|
|
233
|
+
for (const invocation of invocations) {
|
|
234
|
+
this.injectLoggingForInvocation(lines, invocation);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Inject logging before and after a method invocation line
|
|
239
|
+
* Uses pre-parsed invocation data from AST analysis - no regex parsing needed
|
|
240
|
+
*/
|
|
241
|
+
injectLoggingForInvocation(lines, invocation) {
|
|
242
|
+
const { lineNumber, endLineNumber, methodName, variableId, invocationIndex, hasAwait, arguments: args, statementType, variableName, variableType, destructuringPattern, context = 'default', containingStatementLine, callText, } = invocation;
|
|
243
|
+
const lineIndex = lineNumber - 1;
|
|
244
|
+
const endLineIndex = endLineNumber - 1;
|
|
245
|
+
if (lineIndex < 0 || lineIndex >= lines.length) {
|
|
246
|
+
return;
|
|
247
|
+
}
|
|
248
|
+
const line = lines[lineIndex];
|
|
249
|
+
const indentation = line.match(/^\s*/)?.[0] || ' ';
|
|
250
|
+
// Use pre-parsed arguments
|
|
251
|
+
const argsArray = args ? `[${args}]` : '[]';
|
|
252
|
+
const callSiteKey = buildCallSiteKey(methodName, invocationIndex);
|
|
253
|
+
const callSiteKeyLiteral = JSON.stringify(callSiteKey);
|
|
254
|
+
const resultVar = `__functionCallResult_${variableId}`;
|
|
255
|
+
const durationVar = `__functionCallDuration_${variableId}`;
|
|
256
|
+
const argsVar = `__functionCallArgs_${variableId}`;
|
|
257
|
+
const prevInvocationVar = `__prevInvocationCallSiteKey_${variableId}`;
|
|
258
|
+
const setInvocationLine = `${indentation}const ${prevInvocationVar} = __bubbleFlowSelf?.__setInvocationCallSiteKey?.(${callSiteKeyLiteral});`;
|
|
259
|
+
const restoreInvocationLine = `${indentation}__bubbleFlowSelf?.__restoreInvocationCallSiteKey?.(${prevInvocationVar});`;
|
|
260
|
+
const startLog = `${indentation}const __functionCallStart_${variableId} = Date.now();`;
|
|
261
|
+
const argsLog = `${indentation}const ${argsVar} = ${argsArray};`;
|
|
262
|
+
const startCallLog = `${indentation}__bubbleFlowSelf.logger?.logFunctionCallStart(${variableId}, '${methodName}', ${argsVar}, ${lineNumber});`;
|
|
263
|
+
// Calculate how many lines to remove (from lineNumber to endLineNumber)
|
|
264
|
+
const linesToRemove = endLineIndex - lineIndex + 1;
|
|
265
|
+
if (context === 'promise_all_element') {
|
|
266
|
+
this.injectPromiseAllElementLogging(lines, lineIndex, linesToRemove, indentation, {
|
|
267
|
+
args,
|
|
268
|
+
argsArray,
|
|
269
|
+
argsVar,
|
|
270
|
+
durationVar,
|
|
271
|
+
lineNumber,
|
|
272
|
+
methodName,
|
|
273
|
+
resultVar,
|
|
274
|
+
variableId,
|
|
275
|
+
callSiteKeyLiteral,
|
|
276
|
+
callText,
|
|
277
|
+
});
|
|
278
|
+
return;
|
|
279
|
+
}
|
|
280
|
+
// Handle function calls inside condition expressions (if/while/for/switch)
|
|
281
|
+
// Strategy: Insert logging + call extraction BEFORE the containing statement,
|
|
282
|
+
// then replace the call text in the original line with the result variable
|
|
283
|
+
if (statementType === 'condition_expression' &&
|
|
284
|
+
containingStatementLine &&
|
|
285
|
+
callText) {
|
|
286
|
+
const containingLineIndex = containingStatementLine - 1;
|
|
287
|
+
if (containingLineIndex < 0 || containingLineIndex >= lines.length) {
|
|
288
|
+
return;
|
|
289
|
+
}
|
|
290
|
+
const containingLine = lines[containingLineIndex];
|
|
291
|
+
const containingIndentation = containingLine.match(/^\s*/)?.[0] || ' ';
|
|
292
|
+
// Build the logging preamble to insert BEFORE the containing statement
|
|
293
|
+
const callLine = `${containingIndentation}const ${resultVar} = ${hasAwait ? 'await ' : ''}this.${methodName}(${args});`;
|
|
294
|
+
const completeLog = `${containingIndentation}const ${durationVar} = Date.now() - __functionCallStart_${variableId}; __bubbleFlowSelf.logger?.logFunctionCallComplete(${variableId}, '${methodName}', ${resultVar}, ${durationVar}, ${lineNumber});`;
|
|
295
|
+
const preambleLines = [
|
|
296
|
+
`${containingIndentation}const __functionCallStart_${variableId} = Date.now();`,
|
|
297
|
+
`${containingIndentation}const ${argsVar} = ${argsArray};`,
|
|
298
|
+
`${containingIndentation}__bubbleFlowSelf.logger?.logFunctionCallStart(${variableId}, '${methodName}', ${argsVar}, ${lineNumber});`,
|
|
299
|
+
`${containingIndentation}const ${prevInvocationVar} = __bubbleFlowSelf?.__setInvocationCallSiteKey?.(${callSiteKeyLiteral});`,
|
|
300
|
+
callLine,
|
|
301
|
+
completeLog,
|
|
302
|
+
`${containingIndentation}__bubbleFlowSelf?.__restoreInvocationCallSiteKey?.(${prevInvocationVar});`,
|
|
303
|
+
];
|
|
304
|
+
// Insert preamble BEFORE the containing statement
|
|
305
|
+
lines.splice(containingLineIndex, 0, ...preambleLines);
|
|
306
|
+
// Now replace the call text with the result variable in the original line
|
|
307
|
+
// The original line has shifted by preambleLines.length
|
|
308
|
+
const shiftedLineIndex = containingLineIndex + preambleLines.length;
|
|
309
|
+
// The call might span multiple lines, so we need to find and replace it
|
|
310
|
+
// For single-line calls, just replace in the shifted line
|
|
311
|
+
// For multi-line, we need to handle the range
|
|
312
|
+
if (lineNumber === endLineNumber) {
|
|
313
|
+
// Single line call - simple replacement
|
|
314
|
+
const originalLine = lines[shiftedLineIndex];
|
|
315
|
+
lines[shiftedLineIndex] = originalLine.replace(callText, resultVar);
|
|
316
|
+
}
|
|
317
|
+
else {
|
|
318
|
+
// Multi-line call - need to handle more carefully
|
|
319
|
+
// Join the lines, replace, then split back
|
|
320
|
+
const startShiftedIndex = shiftedLineIndex + (lineNumber - containingStatementLine);
|
|
321
|
+
const endShiftedIndex = shiftedLineIndex + (endLineNumber - containingStatementLine);
|
|
322
|
+
// Get all lines that contain the call
|
|
323
|
+
const callLines = lines.slice(startShiftedIndex, endShiftedIndex + 1);
|
|
324
|
+
const joinedCall = callLines.join('\n');
|
|
325
|
+
// Replace the call text with result variable
|
|
326
|
+
const replaced = joinedCall.replace(callText, resultVar);
|
|
327
|
+
const replacedLines = replaced.split('\n');
|
|
328
|
+
// Splice out the old lines and insert the new ones
|
|
329
|
+
lines.splice(startShiftedIndex, callLines.length, ...replacedLines);
|
|
330
|
+
}
|
|
331
|
+
return;
|
|
332
|
+
}
|
|
333
|
+
// Handle function calls nested inside other call expressions (e.g., arr.push(this.method()))
|
|
334
|
+
// Strategy: Insert logging + call extraction BEFORE the containing statement,
|
|
335
|
+
// then replace the call text in the original line with the result variable
|
|
336
|
+
if (statementType === 'nested_call_expression' &&
|
|
337
|
+
containingStatementLine &&
|
|
338
|
+
callText) {
|
|
339
|
+
const containingLineIndex = containingStatementLine - 1;
|
|
340
|
+
if (containingLineIndex < 0 || containingLineIndex >= lines.length) {
|
|
341
|
+
return;
|
|
342
|
+
}
|
|
343
|
+
const containingLine = lines[containingLineIndex];
|
|
344
|
+
const containingIndentation = containingLine.match(/^\s*/)?.[0] || ' ';
|
|
345
|
+
// Build the logging preamble to insert BEFORE the containing statement
|
|
346
|
+
const callLine = `${containingIndentation}const ${resultVar} = ${hasAwait ? 'await ' : ''}this.${methodName}(${args});`;
|
|
347
|
+
const completeLog = `${containingIndentation}const ${durationVar} = Date.now() - __functionCallStart_${variableId}; __bubbleFlowSelf.logger?.logFunctionCallComplete(${variableId}, '${methodName}', ${resultVar}, ${durationVar}, ${lineNumber});`;
|
|
348
|
+
const preambleLines = [
|
|
349
|
+
`${containingIndentation}const __functionCallStart_${variableId} = Date.now();`,
|
|
350
|
+
`${containingIndentation}const ${argsVar} = ${argsArray};`,
|
|
351
|
+
`${containingIndentation}__bubbleFlowSelf.logger?.logFunctionCallStart(${variableId}, '${methodName}', ${argsVar}, ${lineNumber});`,
|
|
352
|
+
`${containingIndentation}const ${prevInvocationVar} = __bubbleFlowSelf?.__setInvocationCallSiteKey?.(${callSiteKeyLiteral});`,
|
|
353
|
+
callLine,
|
|
354
|
+
completeLog,
|
|
355
|
+
`${containingIndentation}__bubbleFlowSelf?.__restoreInvocationCallSiteKey?.(${prevInvocationVar});`,
|
|
356
|
+
];
|
|
357
|
+
// Insert preamble BEFORE the containing statement
|
|
358
|
+
lines.splice(containingLineIndex, 0, ...preambleLines);
|
|
359
|
+
// Now replace the call text with the result variable in the original line
|
|
360
|
+
// The original line has shifted by preambleLines.length
|
|
361
|
+
const shiftedLineIndex = containingLineIndex + preambleLines.length;
|
|
362
|
+
// The call might span multiple lines, so we need to find and replace it
|
|
363
|
+
// For single-line calls, just replace in the shifted line
|
|
364
|
+
// For multi-line, we need to handle the range
|
|
365
|
+
if (lineNumber === endLineNumber) {
|
|
366
|
+
// Single line call - simple replacement
|
|
367
|
+
const originalLine = lines[shiftedLineIndex];
|
|
368
|
+
lines[shiftedLineIndex] = originalLine.replace(callText, resultVar);
|
|
369
|
+
}
|
|
370
|
+
else {
|
|
371
|
+
// Multi-line call - need to handle more carefully
|
|
372
|
+
// Join the lines, replace, then split back
|
|
373
|
+
const startShiftedIndex = shiftedLineIndex + (lineNumber - containingStatementLine);
|
|
374
|
+
const endShiftedIndex = shiftedLineIndex + (endLineNumber - containingStatementLine);
|
|
375
|
+
// Get all lines that contain the call
|
|
376
|
+
const callLines = lines.slice(startShiftedIndex, endShiftedIndex + 1);
|
|
377
|
+
const joinedCall = callLines.join('\n');
|
|
378
|
+
// Replace the call text with result variable
|
|
379
|
+
const replaced = joinedCall.replace(callText, resultVar);
|
|
380
|
+
const replacedLines = replaced.split('\n');
|
|
381
|
+
// Splice out the old lines and insert the new ones
|
|
382
|
+
lines.splice(startShiftedIndex, callLines.length, ...replacedLines);
|
|
383
|
+
}
|
|
384
|
+
return;
|
|
385
|
+
}
|
|
386
|
+
// Use pre-determined statement type instead of regex matching
|
|
387
|
+
if (statementType === 'variable_declaration' &&
|
|
388
|
+
(variableName || destructuringPattern) &&
|
|
389
|
+
variableType) {
|
|
390
|
+
const callLine = `${indentation}const ${resultVar} = ${hasAwait ? 'await ' : ''}this.${methodName}(${args});`;
|
|
391
|
+
const completeLog = `${indentation}const ${durationVar} = Date.now() - __functionCallStart_${variableId}; __bubbleFlowSelf.logger?.logFunctionCallComplete(${variableId}, '${methodName}', ${resultVar}, ${durationVar}, ${lineNumber});`;
|
|
392
|
+
// Use destructuring pattern if present, otherwise use simple variable name
|
|
393
|
+
const assignPattern = destructuringPattern || variableName;
|
|
394
|
+
const assignLine = `${indentation}${variableType} ${assignPattern} = ${resultVar};`;
|
|
395
|
+
lines.splice(lineIndex, linesToRemove, startLog, argsLog, startCallLog, setInvocationLine, callLine, completeLog, restoreInvocationLine, assignLine);
|
|
396
|
+
return;
|
|
397
|
+
}
|
|
398
|
+
if (statementType === 'return') {
|
|
399
|
+
const callLine = `${indentation}const ${resultVar} = ${hasAwait ? 'await ' : ''}this.${methodName}(${args});`;
|
|
400
|
+
const completeLog = `${indentation}const ${durationVar} = Date.now() - __functionCallStart_${variableId}; __bubbleFlowSelf.logger?.logFunctionCallComplete(${variableId}, '${methodName}', ${resultVar}, ${durationVar}, ${lineNumber});`;
|
|
401
|
+
const returnLine = `${indentation}return ${resultVar};`;
|
|
402
|
+
lines.splice(lineIndex, linesToRemove, startLog, argsLog, startCallLog, setInvocationLine, callLine, completeLog, restoreInvocationLine, returnLine);
|
|
403
|
+
return;
|
|
404
|
+
}
|
|
405
|
+
if (statementType === 'assignment' && variableName) {
|
|
406
|
+
const callLine = `${indentation}const ${resultVar} = ${hasAwait ? 'await ' : ''}this.${methodName}(${args});`;
|
|
407
|
+
const completeLog = `${indentation}const ${durationVar} = Date.now() - __functionCallStart_${variableId}; __bubbleFlowSelf.logger?.logFunctionCallComplete(${variableId}, '${methodName}', ${resultVar}, ${durationVar}, ${lineNumber});`;
|
|
408
|
+
const assignLine = `${indentation}${variableName} = ${resultVar};`;
|
|
409
|
+
lines.splice(lineIndex, linesToRemove, startLog, argsLog, startCallLog, setInvocationLine, callLine, completeLog, restoreInvocationLine, assignLine);
|
|
410
|
+
return;
|
|
411
|
+
}
|
|
412
|
+
// Simple statement (no assignment, no return)
|
|
413
|
+
const callLine = `${indentation}const ${resultVar} = ${hasAwait ? 'await ' : ''}this.${methodName}(${args});`;
|
|
414
|
+
const completeLog = `${indentation}const ${durationVar} = Date.now() - __functionCallStart_${variableId}; __bubbleFlowSelf.logger?.logFunctionCallComplete(${variableId}, '${methodName}', ${resultVar}, ${durationVar}, ${lineNumber});`;
|
|
415
|
+
lines.splice(lineIndex, linesToRemove, startLog, argsLog, startCallLog, setInvocationLine, callLine, completeLog, restoreInvocationLine);
|
|
416
|
+
}
|
|
417
|
+
injectPromiseAllElementLogging(lines, lineIndex, linesToRemove, indentation, details) {
|
|
418
|
+
const { args, argsArray, argsVar, durationVar, lineNumber, methodName, resultVar, variableId, callSiteKeyLiteral, callText, } = details;
|
|
419
|
+
const innerIndent = `${indentation} `;
|
|
420
|
+
const prevInvocationVar = `__promiseAllPrevInvocationCallSiteKey_${variableId}`;
|
|
421
|
+
// Build the async IIFE that wraps the method call with logging
|
|
422
|
+
const asyncIIFE = [
|
|
423
|
+
`(async () => {`,
|
|
424
|
+
`${innerIndent}const __functionCallStart_${variableId} = Date.now();`,
|
|
425
|
+
`${innerIndent}const ${argsVar} = ${argsArray};`,
|
|
426
|
+
`${innerIndent}__bubbleFlowSelf.logger?.logFunctionCallStart(${variableId}, '${methodName}', ${argsVar}, ${lineNumber});`,
|
|
427
|
+
`${innerIndent}const ${prevInvocationVar} = __bubbleFlowSelf?.__setInvocationCallSiteKey?.(${callSiteKeyLiteral});`,
|
|
428
|
+
`${innerIndent}const ${resultVar} = await this.${methodName}(${args});`,
|
|
429
|
+
`${innerIndent}const ${durationVar} = Date.now() - __functionCallStart_${variableId};`,
|
|
430
|
+
`${innerIndent}__bubbleFlowSelf.logger?.logFunctionCallComplete(${variableId}, '${methodName}', ${resultVar}, ${durationVar}, ${lineNumber});`,
|
|
431
|
+
`${innerIndent}__bubbleFlowSelf?.__restoreInvocationCallSiteKey?.(${prevInvocationVar});`,
|
|
432
|
+
`${innerIndent}return ${resultVar};`,
|
|
433
|
+
`${indentation}})()`,
|
|
434
|
+
].join('\n');
|
|
435
|
+
// If callText is provided, do inline replacement (for arrow function expression bodies)
|
|
436
|
+
if (callText) {
|
|
437
|
+
const originalLines = lines.slice(lineIndex, lineIndex + linesToRemove);
|
|
438
|
+
const joinedOriginal = originalLines.join('\n');
|
|
439
|
+
const replaced = joinedOriginal.replace(callText, asyncIIFE);
|
|
440
|
+
const replacedLines = replaced.split('\n');
|
|
441
|
+
lines.splice(lineIndex, linesToRemove, ...replacedLines);
|
|
442
|
+
return;
|
|
443
|
+
}
|
|
444
|
+
// Original behavior: replace entire lines (for Promise.all array elements)
|
|
445
|
+
const originalLines = lines.slice(lineIndex, lineIndex + linesToRemove);
|
|
446
|
+
const lastOriginalLine = originalLines[originalLines.length - 1] || '';
|
|
447
|
+
const trailingComma = lastOriginalLine.trimEnd().endsWith(',');
|
|
448
|
+
const wrappedLines = [
|
|
449
|
+
`${indentation}(async () => {`,
|
|
450
|
+
`${innerIndent}const __functionCallStart_${variableId} = Date.now();`,
|
|
451
|
+
`${innerIndent}const ${argsVar} = ${argsArray};`,
|
|
452
|
+
`${innerIndent}__bubbleFlowSelf.logger?.logFunctionCallStart(${variableId}, '${methodName}', ${argsVar}, ${lineNumber});`,
|
|
453
|
+
`${innerIndent}const ${prevInvocationVar} = __bubbleFlowSelf?.__setInvocationCallSiteKey?.(${callSiteKeyLiteral});`,
|
|
454
|
+
`${innerIndent}const ${resultVar} = await this.${methodName}(${args});`,
|
|
455
|
+
`${innerIndent}const ${durationVar} = Date.now() - __functionCallStart_${variableId};`,
|
|
456
|
+
`${innerIndent}__bubbleFlowSelf.logger?.logFunctionCallComplete(${variableId}, '${methodName}', ${resultVar}, ${durationVar}, ${lineNumber});`,
|
|
457
|
+
`${innerIndent}__bubbleFlowSelf?.__restoreInvocationCallSiteKey?.(${prevInvocationVar});`,
|
|
458
|
+
`${innerIndent}return ${resultVar};`,
|
|
459
|
+
`${indentation}})()${trailingComma ? ',' : ''}`,
|
|
460
|
+
];
|
|
461
|
+
lines.splice(lineIndex, linesToRemove, ...wrappedLines);
|
|
462
|
+
}
|
|
153
463
|
}
|
|
154
464
|
//# sourceMappingURL=LoggerInjector.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LoggerInjector.js","sourceRoot":"","sources":["../../src/injection/LoggerInjector.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"LoggerInjector.js","sourceRoot":"","sources":["../../src/injection/LoggerInjector.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,19 +1,52 @@
|
|
|
1
1
|
import type { TSESTree } from '@typescript-eslint/typescript-estree';
|
|
2
2
|
import type { ScopeManager, Variable } from '@bubblelab/ts-scope-manager';
|
|
3
|
-
import { BubbleFactory
|
|
4
|
-
import type { ParsedBubbleWithInfo } from '@bubblelab/shared-schemas';
|
|
3
|
+
import { BubbleFactory } from '@bubblelab/bubble-core';
|
|
4
|
+
import type { ParsedBubbleWithInfo, BubbleTrigger, ParsedWorkflow } from '@bubblelab/shared-schemas';
|
|
5
|
+
/**
|
|
6
|
+
* Detailed information about a method invocation captured during AST parsing
|
|
7
|
+
*/
|
|
8
|
+
export interface MethodInvocationInfo {
|
|
9
|
+
lineNumber: number;
|
|
10
|
+
endLineNumber: number;
|
|
11
|
+
columnNumber: number;
|
|
12
|
+
invocationIndex: number;
|
|
13
|
+
hasAwait: boolean;
|
|
14
|
+
arguments: string;
|
|
15
|
+
statementType: 'variable_declaration' | 'assignment' | 'return' | 'simple' | 'condition_expression' | 'nested_call_expression';
|
|
16
|
+
variableName?: string;
|
|
17
|
+
variableType?: 'const' | 'let' | 'var';
|
|
18
|
+
destructuringPattern?: string;
|
|
19
|
+
context?: 'default' | 'promise_all_element';
|
|
20
|
+
/** For condition_expression: the line where the containing statement (if/while/etc) starts */
|
|
21
|
+
containingStatementLine?: number;
|
|
22
|
+
/** For condition_expression: the exact source range of the call expression to replace */
|
|
23
|
+
callRange?: {
|
|
24
|
+
start: number;
|
|
25
|
+
end: number;
|
|
26
|
+
};
|
|
27
|
+
/** For condition_expression: the full text of the call expression (e.g., "this.validateEmail(email)") */
|
|
28
|
+
callText?: string;
|
|
29
|
+
}
|
|
5
30
|
export declare class BubbleScript {
|
|
6
31
|
private ast;
|
|
7
32
|
private scopeManager;
|
|
33
|
+
parsingErrors: string[];
|
|
8
34
|
private parsedBubbles;
|
|
9
35
|
private originalParsedBubbles;
|
|
36
|
+
private workflow;
|
|
10
37
|
private scriptVariables;
|
|
11
38
|
private variableLocations;
|
|
12
|
-
|
|
39
|
+
instanceMethodsLocation: Record<string, {
|
|
40
|
+
startLine: number;
|
|
41
|
+
endLine: number;
|
|
42
|
+
definitionStartLine: number;
|
|
43
|
+
bodyStartLine: number;
|
|
44
|
+
invocationLines: MethodInvocationInfo[];
|
|
45
|
+
}>;
|
|
13
46
|
private bubbleScript;
|
|
14
47
|
private bubbleFactory;
|
|
15
48
|
currentBubbleScript: string;
|
|
16
|
-
|
|
49
|
+
trigger: BubbleTrigger;
|
|
17
50
|
/**
|
|
18
51
|
* Reparse the AST and bubbles after the script has been modified
|
|
19
52
|
* This is necessary when the script text changes but we need updated bubble locations
|
|
@@ -21,6 +54,8 @@ export declare class BubbleScript {
|
|
|
21
54
|
reparseAST(): void;
|
|
22
55
|
constructor(bubbleScript: string, bubbleFactory: BubbleFactory);
|
|
23
56
|
get bubblescript(): string;
|
|
57
|
+
/** Print script with line numbers in pretty readable format */
|
|
58
|
+
showScript(message: string): void;
|
|
24
59
|
/**
|
|
25
60
|
* Get all variable names available at a specific line (excluding globals)
|
|
26
61
|
* This is like setting a debugger breakpoint at that line
|
|
@@ -61,6 +96,7 @@ export declare class BubbleScript {
|
|
|
61
96
|
/**
|
|
62
97
|
* Build a mapping of all user-defined variables with unique IDs
|
|
63
98
|
* Also cross-references with parsed bubbles
|
|
99
|
+
* Fills variableLocations
|
|
64
100
|
*/
|
|
65
101
|
private buildVariableMapping;
|
|
66
102
|
/**
|
|
@@ -92,12 +128,25 @@ export declare class BubbleScript {
|
|
|
92
128
|
* Get the parsed bubbles found in the script
|
|
93
129
|
*/
|
|
94
130
|
getParsedBubbles(): Record<number, ParsedBubbleWithInfo>;
|
|
131
|
+
/**
|
|
132
|
+
* Get the hierarchical workflow structure
|
|
133
|
+
*/
|
|
134
|
+
getWorkflow(): ParsedWorkflow;
|
|
95
135
|
/**
|
|
96
136
|
* Get the handle method location (start and end lines)
|
|
97
137
|
*/
|
|
98
138
|
getHandleMethodLocation(): {
|
|
99
139
|
startLine: number;
|
|
100
140
|
endLine: number;
|
|
141
|
+
definitionStartLine: number;
|
|
142
|
+
bodyStartLine: number;
|
|
143
|
+
} | null;
|
|
144
|
+
getInstanceMethodLocation(methodName: string): {
|
|
145
|
+
startLine: number;
|
|
146
|
+
endLine: number;
|
|
147
|
+
definitionStartLine: number;
|
|
148
|
+
bodyStartLine: number;
|
|
149
|
+
invocationLines: MethodInvocationInfo[];
|
|
101
150
|
} | null;
|
|
102
151
|
/**
|
|
103
152
|
* Get location information for a variable by its $id
|
|
@@ -136,6 +185,6 @@ export declare class BubbleScript {
|
|
|
136
185
|
* Example: class X extends BubbleFlow<'slack/bot_mentioned'> {}
|
|
137
186
|
* Returns the string key (e.g., 'slack/bot_mentioned') or null if not found.
|
|
138
187
|
*/
|
|
139
|
-
getBubbleTriggerEventType():
|
|
188
|
+
getBubbleTriggerEventType(): BubbleTrigger | null;
|
|
140
189
|
}
|
|
141
190
|
//# sourceMappingURL=BubbleScript.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BubbleScript.d.ts","sourceRoot":"","sources":["../../src/parse/BubbleScript.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sCAAsC,CAAC;AACrE,OAAO,KAAK,EACV,YAAY,EAEZ,QAAQ,EACT,MAAM,6BAA6B,CAAC;AACrC,OAAO,
|
|
1
|
+
{"version":3,"file":"BubbleScript.d.ts","sourceRoot":"","sources":["../../src/parse/BubbleScript.ts"],"names":[],"mappings":"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"}
|