@bubblelab/bubble-runtime 0.1.14 → 0.1.16

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 (69) hide show
  1. package/dist/extraction/BubbleParser.d.ts +187 -8
  2. package/dist/extraction/BubbleParser.d.ts.map +1 -1
  3. package/dist/extraction/BubbleParser.js +2271 -117
  4. package/dist/extraction/BubbleParser.js.map +1 -1
  5. package/dist/extraction/index.js +1 -0
  6. package/dist/index.d.ts +1 -0
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +2 -0
  9. package/dist/index.js.map +1 -1
  10. package/dist/injection/BubbleInjector.d.ts +27 -2
  11. package/dist/injection/BubbleInjector.d.ts.map +1 -1
  12. package/dist/injection/BubbleInjector.js +343 -35
  13. package/dist/injection/BubbleInjector.js.map +1 -1
  14. package/dist/injection/LoggerInjector.d.ts +12 -1
  15. package/dist/injection/LoggerInjector.d.ts.map +1 -1
  16. package/dist/injection/LoggerInjector.js +301 -13
  17. package/dist/injection/LoggerInjector.js.map +1 -1
  18. package/dist/injection/index.js +1 -0
  19. package/dist/parse/BubbleScript.d.ts +60 -3
  20. package/dist/parse/BubbleScript.d.ts.map +1 -1
  21. package/dist/parse/BubbleScript.js +133 -15
  22. package/dist/parse/BubbleScript.js.map +1 -1
  23. package/dist/parse/index.d.ts +0 -1
  24. package/dist/parse/index.d.ts.map +1 -1
  25. package/dist/parse/index.js +1 -1
  26. package/dist/parse/index.js.map +1 -1
  27. package/dist/runtime/BubbleRunner.d.ts +8 -2
  28. package/dist/runtime/BubbleRunner.d.ts.map +1 -1
  29. package/dist/runtime/BubbleRunner.js +41 -30
  30. package/dist/runtime/BubbleRunner.js.map +1 -1
  31. package/dist/runtime/index.d.ts +1 -1
  32. package/dist/runtime/index.d.ts.map +1 -1
  33. package/dist/runtime/index.js +1 -0
  34. package/dist/runtime/index.js.map +1 -1
  35. package/dist/runtime/types.js +1 -0
  36. package/dist/types/index.js +1 -0
  37. package/dist/utils/bubble-helper.d.ts +2 -2
  38. package/dist/utils/bubble-helper.d.ts.map +1 -1
  39. package/dist/utils/bubble-helper.js +6 -1
  40. package/dist/utils/bubble-helper.js.map +1 -1
  41. package/dist/utils/normalize-control-flow.d.ts +14 -0
  42. package/dist/utils/normalize-control-flow.d.ts.map +1 -0
  43. package/dist/utils/normalize-control-flow.js +179 -0
  44. package/dist/utils/normalize-control-flow.js.map +1 -0
  45. package/dist/utils/parameter-formatter.d.ts +14 -5
  46. package/dist/utils/parameter-formatter.d.ts.map +1 -1
  47. package/dist/utils/parameter-formatter.js +164 -45
  48. package/dist/utils/parameter-formatter.js.map +1 -1
  49. package/dist/utils/sanitize-script.d.ts +11 -0
  50. package/dist/utils/sanitize-script.d.ts.map +1 -0
  51. package/dist/utils/sanitize-script.js +43 -0
  52. package/dist/utils/sanitize-script.js.map +1 -0
  53. package/dist/validation/BubbleValidator.d.ts +15 -0
  54. package/dist/validation/BubbleValidator.d.ts.map +1 -1
  55. package/dist/validation/BubbleValidator.js +168 -1
  56. package/dist/validation/BubbleValidator.js.map +1 -1
  57. package/dist/validation/index.d.ts +6 -3
  58. package/dist/validation/index.d.ts.map +1 -1
  59. package/dist/validation/index.js +33 -9
  60. package/dist/validation/index.js.map +1 -1
  61. package/dist/validation/lint-rules.d.ts +91 -0
  62. package/dist/validation/lint-rules.d.ts.map +1 -0
  63. package/dist/validation/lint-rules.js +755 -0
  64. package/dist/validation/lint-rules.js.map +1 -0
  65. package/package.json +4 -4
  66. package/dist/parse/traceDependencies.d.ts +0 -18
  67. package/dist/parse/traceDependencies.d.ts.map +0 -1
  68. package/dist/parse/traceDependencies.js +0 -195
  69. 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
@@ -93,21 +100,48 @@ export class LoggerInjector {
93
100
  }
94
101
  }
95
102
  /**
96
- * Inject `const __bubbleFlowSelf = this;` at the beginning of the handle method body
103
+ * Inject `const __bubbleFlowSelf = this;` at the beginning of all instance method bodies
97
104
  * This captures `this` in a lexical variable that works at any nesting level
98
105
  * This should be called BEFORE reapplyBubbleInstantiations so bubble instantiations can use __bubbleFlowSelf.logger
99
106
  */
100
107
  injectSelfCapture() {
101
- const handleMethodLocation = this.bubbleScript.getHandleMethodLocation();
102
- if (!handleMethodLocation) {
103
- console.warn('Handle method location not found, skipping __bubbleFlowSelf injection');
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');
104
114
  return;
105
115
  }
106
- // Inject self capture at body start line (after opening brace)
107
- // bodyStartLine is the line with the opening brace, so inject on the next line
108
- const selfCapture = ` const __bubbleFlowSelf = this;`;
109
- this.bubbleScript.injectLines([selfCapture], handleMethodLocation.bodyStartLine + 1);
110
- this.bubbleScript.showScript('[LoggerInjector] After injectSelfCapture in opening brace match');
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');
111
145
  }
112
146
  /**
113
147
  * Find all statements within the handle method using AST
@@ -172,5 +206,259 @@ export class LoggerInjector {
172
206
  visitValue(value);
173
207
  }
174
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
+ }
175
463
  }
176
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,2 +1,3 @@
1
1
  export * from './BubbleInjector';
2
2
  export * from './LoggerInjector';
3
+ //# sourceMappingURL=index.js.map
@@ -1,15 +1,48 @@
1
1
  import type { TSESTree } from '@typescript-eslint/typescript-estree';
2
2
  import type { ScopeManager, Variable } from '@bubblelab/ts-scope-manager';
3
3
  import { BubbleFactory } from '@bubblelab/bubble-core';
4
- import type { ParsedBubbleWithInfo, BubbleTrigger } from '@bubblelab/shared-schemas';
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;
@@ -19,6 +52,11 @@ export declare class BubbleScript {
19
52
  * This is necessary when the script text changes but we need updated bubble locations
20
53
  */
21
54
  reparseAST(): void;
55
+ /**
56
+ * Find the matching original bubble for a given bubble.
57
+ * Used to restore original locations for user-facing data.
58
+ */
59
+ private findOriginalBubble;
22
60
  constructor(bubbleScript: string, bubbleFactory: BubbleFactory);
23
61
  get bubblescript(): string;
24
62
  /** Print script with line numbers in pretty readable format */
@@ -92,9 +130,21 @@ export declare class BubbleScript {
92
130
  */
93
131
  getScopeManager(): ScopeManager;
94
132
  /**
95
- * Get the parsed bubbles found in the script
133
+ * Get the parsed bubbles with NORMALIZED locations (for internal use like injection).
134
+ * These locations match the normalized script, not the original user script.
135
+ */
136
+ getParsedBubblesRaw(): Record<number, ParsedBubbleWithInfo>;
137
+ /**
138
+ * Get the parsed bubbles with original line numbers restored.
139
+ * This returns a COPY of current bubbles (with clones, workflow updates, etc.)
140
+ * with locations matching the original script that users see in their IDE.
141
+ * Use this for frontend/user-facing data.
96
142
  */
97
143
  getParsedBubbles(): Record<number, ParsedBubbleWithInfo>;
144
+ /**
145
+ * Get the hierarchical workflow structure
146
+ */
147
+ getWorkflow(): ParsedWorkflow;
98
148
  /**
99
149
  * Get the handle method location (start and end lines)
100
150
  */
@@ -104,6 +154,13 @@ export declare class BubbleScript {
104
154
  definitionStartLine: number;
105
155
  bodyStartLine: number;
106
156
  } | null;
157
+ getInstanceMethodLocation(methodName: string): {
158
+ startLine: number;
159
+ endLine: number;
160
+ definitionStartLine: number;
161
+ bodyStartLine: number;
162
+ invocationLines: MethodInvocationInfo[];
163
+ } | null;
107
164
  /**
108
165
  * Get location information for a variable by its $id
109
166
  */
@@ -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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"}