@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.
Files changed (68) hide show
  1. package/dist/extraction/BubbleParser.d.ts +188 -8
  2. package/dist/extraction/BubbleParser.d.ts.map +1 -1
  3. package/dist/extraction/BubbleParser.js +2265 -99
  4. package/dist/extraction/BubbleParser.js.map +1 -1
  5. package/dist/index.d.ts +1 -0
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +1 -0
  8. package/dist/index.js.map +1 -1
  9. package/dist/injection/BubbleInjector.d.ts +31 -5
  10. package/dist/injection/BubbleInjector.d.ts.map +1 -1
  11. package/dist/injection/BubbleInjector.js +349 -28
  12. package/dist/injection/BubbleInjector.js.map +1 -1
  13. package/dist/injection/LoggerInjector.d.ts +17 -0
  14. package/dist/injection/LoggerInjector.d.ts.map +1 -1
  15. package/dist/injection/LoggerInjector.js +319 -9
  16. package/dist/injection/LoggerInjector.js.map +1 -1
  17. package/dist/parse/BubbleScript.d.ts +54 -5
  18. package/dist/parse/BubbleScript.d.ts.map +1 -1
  19. package/dist/parse/BubbleScript.js +112 -24
  20. package/dist/parse/BubbleScript.js.map +1 -1
  21. package/dist/parse/index.d.ts +0 -1
  22. package/dist/parse/index.d.ts.map +1 -1
  23. package/dist/parse/index.js +0 -1
  24. package/dist/parse/index.js.map +1 -1
  25. package/dist/runtime/BubbleRunner.d.ts +9 -2
  26. package/dist/runtime/BubbleRunner.d.ts.map +1 -1
  27. package/dist/runtime/BubbleRunner.js +76 -49
  28. package/dist/runtime/BubbleRunner.js.map +1 -1
  29. package/dist/runtime/index.d.ts +1 -1
  30. package/dist/runtime/index.d.ts.map +1 -1
  31. package/dist/runtime/index.js.map +1 -1
  32. package/dist/utils/bubble-helper.d.ts +2 -2
  33. package/dist/utils/bubble-helper.d.ts.map +1 -1
  34. package/dist/utils/bubble-helper.js +5 -1
  35. package/dist/utils/bubble-helper.js.map +1 -1
  36. package/dist/utils/error-sanitizer.d.ts +16 -0
  37. package/dist/utils/error-sanitizer.d.ts.map +1 -0
  38. package/dist/utils/error-sanitizer.js +111 -0
  39. package/dist/utils/error-sanitizer.js.map +1 -0
  40. package/dist/utils/normalize-control-flow.d.ts +14 -0
  41. package/dist/utils/normalize-control-flow.d.ts.map +1 -0
  42. package/dist/utils/normalize-control-flow.js +179 -0
  43. package/dist/utils/normalize-control-flow.js.map +1 -0
  44. package/dist/utils/parameter-formatter.d.ts +14 -5
  45. package/dist/utils/parameter-formatter.d.ts.map +1 -1
  46. package/dist/utils/parameter-formatter.js +166 -51
  47. package/dist/utils/parameter-formatter.js.map +1 -1
  48. package/dist/utils/sanitize-script.d.ts +11 -0
  49. package/dist/utils/sanitize-script.d.ts.map +1 -0
  50. package/dist/utils/sanitize-script.js +43 -0
  51. package/dist/utils/sanitize-script.js.map +1 -0
  52. package/dist/validation/BubbleValidator.d.ts +15 -0
  53. package/dist/validation/BubbleValidator.d.ts.map +1 -1
  54. package/dist/validation/BubbleValidator.js +171 -1
  55. package/dist/validation/BubbleValidator.js.map +1 -1
  56. package/dist/validation/index.d.ts +7 -3
  57. package/dist/validation/index.d.ts.map +1 -1
  58. package/dist/validation/index.js +63 -12
  59. package/dist/validation/index.js.map +1 -1
  60. package/dist/validation/lint-rules.d.ts +91 -0
  61. package/dist/validation/lint-rules.d.ts.map +1 -0
  62. package/dist/validation/lint-rules.js +755 -0
  63. package/dist/validation/lint-rules.js.map +1 -0
  64. package/package.json +5 -5
  65. package/dist/parse/traceDependencies.d.ts +0 -18
  66. package/dist/parse/traceDependencies.d.ts.map +0 -1
  67. package/dist/parse/traceDependencies.js +0 -196
  68. 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 statement-level logging in handle method
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.injectLineLogging(lines);
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 = lines.join('\n');
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(/^\\s*/)?.[0] || ' ';
59
- const statementLog = `${indentation}this.logger?.logLine(${statement.line}, 'Statement: ${statement.type}');`;
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(/^\\s*/)?.[0] || ' ';
83
- // Use original line number for traceability
84
- const statementLog = `${indentation}this.logger?.logLine(${statement.line}, 'Statement: ${statement.type}');`;
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, BubbleTriggerEventRegistry } from '@bubblelab/bubble-core';
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
- private handleMethodLocation;
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
- triggerEventType: keyof BubbleTriggerEventRegistry;
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(): string | null;
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":"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"}
1
+ {"version":3,"file":"BubbleScript.d.ts","sourceRoot":"","sources":["../../src/parse/BubbleScript.ts"],"names":[],"mappings":"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"}