@bubblelab/bubble-runtime 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/LICENSE.txt +202 -0
  2. package/dist/extraction/BubbleParser.d.ts +80 -0
  3. package/dist/extraction/BubbleParser.d.ts.map +1 -0
  4. package/dist/extraction/BubbleParser.js +926 -0
  5. package/dist/extraction/BubbleParser.js.map +1 -0
  6. package/dist/extraction/index.d.ts +2 -0
  7. package/dist/extraction/index.d.ts.map +1 -0
  8. package/dist/extraction/index.js +4 -0
  9. package/dist/extraction/index.js.map +1 -0
  10. package/dist/index.d.ts +7 -0
  11. package/dist/index.d.ts.map +1 -0
  12. package/dist/index.js +8 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/injection/BubbleInjector.d.ts +71 -0
  15. package/dist/injection/BubbleInjector.d.ts.map +1 -0
  16. package/dist/injection/BubbleInjector.js +326 -0
  17. package/dist/injection/BubbleInjector.js.map +1 -0
  18. package/dist/injection/LoggerInjector.d.ts +33 -0
  19. package/dist/injection/LoggerInjector.d.ts.map +1 -0
  20. package/dist/injection/LoggerInjector.js +154 -0
  21. package/dist/injection/LoggerInjector.js.map +1 -0
  22. package/dist/injection/index.d.ts +3 -0
  23. package/dist/injection/index.d.ts.map +1 -0
  24. package/dist/injection/index.js +3 -0
  25. package/dist/injection/index.js.map +1 -0
  26. package/dist/parse/BubbleScript.d.ts +141 -0
  27. package/dist/parse/BubbleScript.d.ts.map +1 -0
  28. package/dist/parse/BubbleScript.js +513 -0
  29. package/dist/parse/BubbleScript.js.map +1 -0
  30. package/dist/parse/index.d.ts +3 -0
  31. package/dist/parse/index.d.ts.map +1 -0
  32. package/dist/parse/index.js +3 -0
  33. package/dist/parse/index.js.map +1 -0
  34. package/dist/parse/traceDependencies.d.ts +18 -0
  35. package/dist/parse/traceDependencies.d.ts.map +1 -0
  36. package/dist/parse/traceDependencies.js +181 -0
  37. package/dist/parse/traceDependencies.js.map +1 -0
  38. package/dist/runtime/BubbleRunner.d.ts +91 -0
  39. package/dist/runtime/BubbleRunner.d.ts.map +1 -0
  40. package/dist/runtime/BubbleRunner.js +586 -0
  41. package/dist/runtime/BubbleRunner.js.map +1 -0
  42. package/dist/runtime/index.d.ts +2 -0
  43. package/dist/runtime/index.d.ts.map +1 -0
  44. package/dist/runtime/index.js +2 -0
  45. package/dist/runtime/index.js.map +1 -0
  46. package/dist/runtime/types.d.ts +29 -0
  47. package/dist/runtime/types.d.ts.map +1 -0
  48. package/dist/runtime/types.js +2 -0
  49. package/dist/runtime/types.js.map +1 -0
  50. package/dist/types/index.d.ts +8 -0
  51. package/dist/types/index.d.ts.map +1 -0
  52. package/dist/types/index.js +2 -0
  53. package/dist/types/index.js.map +1 -0
  54. package/dist/utils/bubble-helper.d.ts +11 -0
  55. package/dist/utils/bubble-helper.d.ts.map +1 -0
  56. package/dist/utils/bubble-helper.js +15 -0
  57. package/dist/utils/bubble-helper.js.map +1 -0
  58. package/dist/utils/parameter-formatter.d.ts +22 -0
  59. package/dist/utils/parameter-formatter.d.ts.map +1 -0
  60. package/dist/utils/parameter-formatter.js +219 -0
  61. package/dist/utils/parameter-formatter.js.map +1 -0
  62. package/dist/validation/BubbleValidator.d.ts +43 -0
  63. package/dist/validation/BubbleValidator.d.ts.map +1 -0
  64. package/dist/validation/BubbleValidator.js +172 -0
  65. package/dist/validation/BubbleValidator.js.map +1 -0
  66. package/dist/validation/index.d.ts +27 -0
  67. package/dist/validation/index.d.ts.map +1 -0
  68. package/dist/validation/index.js +126 -0
  69. package/dist/validation/index.js.map +1 -0
  70. package/package.json +47 -0
@@ -0,0 +1,181 @@
1
+ import ts from 'typescript';
2
+ import { BubbleParameterType, } from '@bubblelab/shared-schemas';
3
+ import { buildClassNameLookup } from '../utils/bubble-helper';
4
+ /**
5
+ * Trace bubble dependencies from a validated BubbleFlow script.
6
+ * - Parses AST, extracts bubble instantiations and their parameters
7
+ * - Builds a className -> metadata mapping from BubbleFactory defaults
8
+ * - Classifies each bubble node as service/tool/workflow using metadata
9
+ *
10
+ * Note: Only dependencies explicitly constructed in the script are captured.
11
+ * Internal dependencies of workflow bubbles require explicit metadata.
12
+ */
13
+ export function traceBubbleDependencies(code, bubbleFactory) {
14
+ try {
15
+ const sourceFile = ts.createSourceFile('bubbleflow.ts', code, ts.ScriptTarget.ES2022, true);
16
+ // Build registry lookup from bubble-core
17
+ const classNameToInfo = buildClassNameLookup(bubbleFactory);
18
+ if (classNameToInfo.size === 0) {
19
+ return {
20
+ success: false,
21
+ nodes: {},
22
+ errors: ['No bubbles found in BubbleFactory'],
23
+ };
24
+ }
25
+ const nodes = {};
26
+ const errors = [];
27
+ function visit(node) {
28
+ // Capture variable declarations
29
+ if (ts.isVariableDeclaration(node)) {
30
+ const nameText = node.name.getText(sourceFile);
31
+ // Bubble instantiation assigned to variable
32
+ if (node.initializer) {
33
+ const bubbleNode = extractBubbleFromExpression(node.initializer, sourceFile, classNameToInfo);
34
+ if (bubbleNode) {
35
+ nodes[nameText] = bubbleNode;
36
+ }
37
+ }
38
+ }
39
+ // Anonymous instantiations in expression statements
40
+ if (ts.isExpressionStatement(node)) {
41
+ const bubbleNode = extractBubbleFromExpression(node.expression, sourceFile, classNameToInfo);
42
+ if (bubbleNode) {
43
+ const synthetic = `_anonymous_${bubbleNode.className}_${Object.keys(nodes).length}`;
44
+ nodes[synthetic] = { ...bubbleNode, variableName: synthetic };
45
+ }
46
+ }
47
+ ts.forEachChild(node, visit);
48
+ }
49
+ visit(sourceFile);
50
+ return {
51
+ success: errors.length === 0,
52
+ nodes,
53
+ errors: errors.length ? errors : undefined,
54
+ };
55
+ }
56
+ catch (error) {
57
+ return {
58
+ success: false,
59
+ nodes: {},
60
+ errors: [error instanceof Error ? error.message : String(error)],
61
+ };
62
+ }
63
+ }
64
+ function extractBubbleFromExpression(expr, sourceFile, classNameLookup) {
65
+ // await new X(...)
66
+ if (ts.isAwaitExpression(expr)) {
67
+ const inner = extractBubbleFromExpression(expr.expression, sourceFile, classNameLookup);
68
+ if (inner)
69
+ inner.hasAwait = true;
70
+ return inner;
71
+ }
72
+ // new X({...}) or new X({...}).action()
73
+ if (ts.isNewExpression(expr)) {
74
+ const newNode = extractFromNewExpression(expr, sourceFile, classNameLookup);
75
+ if (newNode)
76
+ return newNode;
77
+ }
78
+ // new X({...}).action() pattern
79
+ if (ts.isCallExpression(expr) &&
80
+ ts.isPropertyAccessExpression(expr.expression)) {
81
+ const prop = expr.expression;
82
+ if (prop.name.text === 'action' && ts.isNewExpression(prop.expression)) {
83
+ const node = extractFromNewExpression(prop.expression, sourceFile, classNameLookup);
84
+ if (node)
85
+ node.hasActionCall = true;
86
+ return node;
87
+ }
88
+ }
89
+ return null;
90
+ }
91
+ function extractFromNewExpression(newExpr, sourceFile, classNameLookup) {
92
+ if (!newExpr.expression || !ts.isIdentifier(newExpr.expression))
93
+ return null;
94
+ const className = newExpr.expression.text;
95
+ const info = classNameLookup.get(className);
96
+ if (!info)
97
+ return null;
98
+ const parameters = [];
99
+ if (newExpr.arguments && newExpr.arguments.length > 0) {
100
+ const firstArg = newExpr.arguments[0];
101
+ if (ts.isObjectLiteralExpression(firstArg)) {
102
+ for (const prop of firstArg.properties) {
103
+ if (ts.isPropertyAssignment(prop) && ts.isIdentifier(prop.name)) {
104
+ const name = prop.name.text;
105
+ const value = extractParameterValue(prop.initializer, sourceFile);
106
+ parameters.push({ name, ...value });
107
+ }
108
+ else if (ts.isShorthandPropertyAssignment(prop) &&
109
+ ts.isIdentifier(prop.name)) {
110
+ const name = prop.name.text;
111
+ const value = extractParameterValue(prop.name, sourceFile);
112
+ parameters.push({ name, ...value });
113
+ }
114
+ }
115
+ }
116
+ }
117
+ const start = newExpr.getStart(sourceFile);
118
+ const end = newExpr.getEnd();
119
+ const lineStart = sourceFile.getLineAndCharacterOfPosition(start).line + 1;
120
+ const lineEnd = sourceFile.getLineAndCharacterOfPosition(end).line + 1;
121
+ return {
122
+ variableId: -1,
123
+ variableName: '',
124
+ bubbleName: info.bubbleName,
125
+ className: info.className,
126
+ parameters,
127
+ hasAwait: false,
128
+ hasActionCall: false,
129
+ nodeType: info.nodeType,
130
+ location: {
131
+ startLine: lineStart,
132
+ startCol: 0,
133
+ endLine: lineEnd,
134
+ endCol: 0,
135
+ },
136
+ };
137
+ }
138
+ function extractParameterValue(expression, sourceFile) {
139
+ const valueText = expression.getText(sourceFile);
140
+ // process.env detection (with or without non-null)
141
+ const isProcessEnv = (text) => text.startsWith('process.env.');
142
+ if (ts.isNonNullExpression(expression)) {
143
+ const inner = expression.expression;
144
+ if (ts.isPropertyAccessExpression(inner)) {
145
+ const full = inner.getText(sourceFile);
146
+ if (isProcessEnv(full))
147
+ return { value: valueText, type: BubbleParameterType.ENV };
148
+ }
149
+ }
150
+ if (ts.isPropertyAccessExpression(expression) ||
151
+ ts.isElementAccessExpression(expression)) {
152
+ const full = expression.getText(sourceFile);
153
+ if (isProcessEnv(full))
154
+ return { value: full, type: BubbleParameterType.ENV };
155
+ return { value: full, type: BubbleParameterType.VARIABLE };
156
+ }
157
+ // Identifiers treated as variable references
158
+ if (ts.isIdentifier(expression)) {
159
+ return { value: valueText, type: BubbleParameterType.VARIABLE };
160
+ }
161
+ // Literals and structured
162
+ if (ts.isStringLiteral(expression) || ts.isTemplateExpression(expression)) {
163
+ return { value: valueText, type: BubbleParameterType.STRING };
164
+ }
165
+ if (ts.isNumericLiteral(expression)) {
166
+ return { value: valueText, type: BubbleParameterType.NUMBER };
167
+ }
168
+ if (expression.kind === ts.SyntaxKind.TrueKeyword ||
169
+ expression.kind === ts.SyntaxKind.FalseKeyword) {
170
+ return { value: valueText, type: BubbleParameterType.BOOLEAN };
171
+ }
172
+ if (ts.isArrayLiteralExpression(expression)) {
173
+ return { value: valueText, type: BubbleParameterType.ARRAY };
174
+ }
175
+ if (ts.isObjectLiteralExpression(expression)) {
176
+ return { value: valueText, type: BubbleParameterType.OBJECT };
177
+ }
178
+ // Fallback
179
+ return { value: valueText, type: BubbleParameterType.UNKNOWN };
180
+ }
181
+ //# sourceMappingURL=traceDependencies.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"traceDependencies.js","sourceRoot":"","sources":["../../src/parse/traceDependencies.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EACL,mBAAmB,GAIpB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAO9D;;;;;;;;GAQG;AACH,MAAM,UAAU,uBAAuB,CACrC,IAAY,EACZ,aAA4B;IAE5B,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,EAAE,CAAC,gBAAgB,CACpC,eAAe,EACf,IAAI,EACJ,EAAE,CAAC,YAAY,CAAC,MAAM,EACtB,IAAI,CACL,CAAC;QAEF,yCAAyC;QACzC,MAAM,eAAe,GAAG,oBAAoB,CAAC,aAAa,CAAC,CAAC;QAC5D,IAAI,eAAe,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YAC/B,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,EAAE;gBACT,MAAM,EAAE,CAAC,mCAAmC,CAAC;aAC9C,CAAC;QACJ,CAAC;QAED,MAAM,KAAK,GAAyC,EAAE,CAAC;QACvD,MAAM,MAAM,GAAa,EAAE,CAAC;QAE5B,SAAS,KAAK,CAAC,IAAa;YAC1B,gCAAgC;YAChC,IAAI,EAAE,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;gBAE/C,4CAA4C;gBAC5C,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;oBACrB,MAAM,UAAU,GAAG,2BAA2B,CAC5C,IAAI,CAAC,WAAW,EAChB,UAAU,EACV,eAAe,CAChB,CAAC;oBACF,IAAI,UAAU,EAAE,CAAC;wBACf,KAAK,CAAC,QAAQ,CAAC,GAAG,UAAU,CAAC;oBAC/B,CAAC;gBACH,CAAC;YACH,CAAC;YAED,oDAAoD;YACpD,IAAI,EAAE,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnC,MAAM,UAAU,GAAG,2BAA2B,CAC5C,IAAI,CAAC,UAAU,EACf,UAAU,EACV,eAAe,CAChB,CAAC;gBACF,IAAI,UAAU,EAAE,CAAC;oBACf,MAAM,SAAS,GAAG,cAAc,UAAU,CAAC,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;oBACpF,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC;gBAChE,CAAC;YACH,CAAC;YAED,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC/B,CAAC;QAED,KAAK,CAAC,UAAU,CAAC,CAAC;QAElB,OAAO;YACL,OAAO,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;YAC5B,KAAK;YACL,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;SAC3C,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,EAAE;YACT,MAAM,EAAE,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;SACjE,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,2BAA2B,CAClC,IAAmB,EACnB,UAAyB,EACzB,eAGC;IAED,mBAAmB;IACnB,IAAI,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,2BAA2B,CACvC,IAAI,CAAC,UAAU,EACf,UAAU,EACV,eAAe,CAChB,CAAC;QACF,IAAI,KAAK;YAAE,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;QACjC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,wCAAwC;IACxC,IAAI,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,wBAAwB,CAAC,IAAI,EAAE,UAAU,EAAE,eAAe,CAAC,CAAC;QAC5E,IAAI,OAAO;YAAE,OAAO,OAAO,CAAC;IAC9B,CAAC;IAED,gCAAgC;IAChC,IACE,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC;QACzB,EAAE,CAAC,0BAA0B,CAAC,IAAI,CAAC,UAAU,CAAC,EAC9C,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC;QAC7B,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YACvE,MAAM,IAAI,GAAG,wBAAwB,CACnC,IAAI,CAAC,UAAU,EACf,UAAU,EACV,eAAe,CAChB,CAAC;YACF,IAAI,IAAI;gBAAE,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;YACpC,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,wBAAwB,CAC/B,OAAyB,EACzB,UAAyB,EACzB,eAGC;IAED,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7E,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC;IAC1C,MAAM,IAAI,GAAG,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC5C,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IAEvB,MAAM,UAAU,GAA+B,EAAE,CAAC;IAClD,IAAI,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtD,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QACtC,IAAI,EAAE,CAAC,yBAAyB,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC3C,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;gBACvC,IAAI,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;oBAChE,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;oBAC5B,MAAM,KAAK,GAAG,qBAAqB,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;oBAClE,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;gBACtC,CAAC;qBAAM,IACL,EAAE,CAAC,6BAA6B,CAAC,IAAI,CAAC;oBACtC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAC1B,CAAC;oBACD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;oBAC5B,MAAM,KAAK,GAAG,qBAAqB,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;oBAC3D,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;gBACtC,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAC3C,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAC7B,MAAM,SAAS,GAAG,UAAU,CAAC,6BAA6B,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;IAC3E,MAAM,OAAO,GAAG,UAAU,CAAC,6BAA6B,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;IAEvE,OAAO;QACL,UAAU,EAAE,CAAC,CAAC;QACd,YAAY,EAAE,EAAE;QAChB,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,UAAU;QACV,QAAQ,EAAE,KAAK;QACf,aAAa,EAAE,KAAK;QACpB,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,QAAQ,EAAE;YACR,SAAS,EAAE,SAAS;YACpB,QAAQ,EAAE,CAAC;YACX,OAAO,EAAE,OAAO;YAChB,MAAM,EAAE,CAAC;SACV;KACF,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAC5B,UAAyB,EACzB,UAAyB;IAEzB,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAEjD,mDAAmD;IACnD,MAAM,YAAY,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;IACvE,IAAI,EAAE,CAAC,mBAAmB,CAAC,UAAU,CAAC,EAAE,CAAC;QACvC,MAAM,KAAK,GAAG,UAAU,CAAC,UAAU,CAAC;QACpC,IAAI,EAAE,CAAC,0BAA0B,CAAC,KAAK,CAAC,EAAE,CAAC;YACzC,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YACvC,IAAI,YAAY,CAAC,IAAI,CAAC;gBACpB,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,mBAAmB,CAAC,GAAG,EAAE,CAAC;QAC/D,CAAC;IACH,CAAC;IACD,IACE,EAAE,CAAC,0BAA0B,CAAC,UAAU,CAAC;QACzC,EAAE,CAAC,yBAAyB,CAAC,UAAU,CAAC,EACxC,CAAC;QACD,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAC5C,IAAI,YAAY,CAAC,IAAI,CAAC;YACpB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,mBAAmB,CAAC,GAAG,EAAE,CAAC;QACxD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,mBAAmB,CAAC,QAAQ,EAAE,CAAC;IAC7D,CAAC;IAED,6CAA6C;IAC7C,IAAI,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,CAAC;QAChC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,mBAAmB,CAAC,QAAQ,EAAE,CAAC;IAClE,CAAC;IAED,0BAA0B;IAC1B,IAAI,EAAE,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,oBAAoB,CAAC,UAAU,CAAC,EAAE,CAAC;QAC1E,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,mBAAmB,CAAC,MAAM,EAAE,CAAC;IAChE,CAAC;IACD,IAAI,EAAE,CAAC,gBAAgB,CAAC,UAAU,CAAC,EAAE,CAAC;QACpC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,mBAAmB,CAAC,MAAM,EAAE,CAAC;IAChE,CAAC;IACD,IACE,UAAU,CAAC,IAAI,KAAK,EAAE,CAAC,UAAU,CAAC,WAAW;QAC7C,UAAU,CAAC,IAAI,KAAK,EAAE,CAAC,UAAU,CAAC,YAAY,EAC9C,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,mBAAmB,CAAC,OAAO,EAAE,CAAC;IACjE,CAAC;IACD,IAAI,EAAE,CAAC,wBAAwB,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5C,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,mBAAmB,CAAC,KAAK,EAAE,CAAC;IAC/D,CAAC;IACD,IAAI,EAAE,CAAC,yBAAyB,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7C,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,mBAAmB,CAAC,MAAM,EAAE,CAAC;IAChE,CAAC;IAED,WAAW;IACX,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,mBAAmB,CAAC,OAAO,EAAE,CAAC;AACjE,CAAC"}
@@ -0,0 +1,91 @@
1
+ import { ExecutionResult, ParsedBubbleWithInfo } from '@bubblelab/shared-schemas';
2
+ import { BubbleFactory, WebhookEvent, BubbleLogger, LogLevel } from '@bubblelab/bubble-core';
3
+ import type { StreamCallback } from '@bubblelab/shared-schemas';
4
+ import type { ExecutionPlan } from './types';
5
+ import { BubbleScript } from 'src/parse/BubbleScript';
6
+ import { BubbleInjector } from 'src/injection/BubbleInjector';
7
+ export interface VariableState {
8
+ value: unknown;
9
+ error?: string;
10
+ }
11
+ export interface BubbleRunnerOptions {
12
+ enableLogging?: boolean;
13
+ logLevel?: LogLevel;
14
+ enableLineByLineLogging?: boolean;
15
+ enableBubbleLogging?: boolean;
16
+ streamCallback?: StreamCallback;
17
+ }
18
+ export declare class BubbleRunner {
19
+ private bubbleFactory;
20
+ bubbleScript: BubbleScript;
21
+ private currentStep;
22
+ private savedStates;
23
+ private plan;
24
+ private logger;
25
+ injector: BubbleInjector;
26
+ private options;
27
+ constructor(bubbleScript: string | BubbleScript, bubbleFactory: BubbleFactory, options?: BubbleRunnerOptions);
28
+ /**
29
+ * Creates a list of steps where length = number of parsed bubbles
30
+ * Contains the bubble and parameters to run
31
+ * Each step represents a continuous line range (e.g., line 1-20, 21-xxx)
32
+ */
33
+ private buildExecutionPlan;
34
+ /**
35
+ * Find the line where .action() is called for a bubble
36
+ * Uses AST to locate the method call
37
+ */
38
+ private findActionCallLine;
39
+ /**
40
+ * Recursively search AST for .action() calls on a specific variable
41
+ */
42
+ private findActionCallInAST;
43
+ getParsedBubbles(): Record<string, ParsedBubbleWithInfo>;
44
+ getVariables(): string[];
45
+ /**
46
+ * Finds step ID, calls memorizes results on previous bubbles, and runs the script from 1 to line end
47
+ */
48
+ runStep(stepId: number): void;
49
+ /**
50
+ * Run from step 1 to end
51
+ */
52
+ runAll(payload?: Partial<WebhookEvent>): Promise<ExecutionResult>;
53
+ /**
54
+ * Find the BubbleFlow class in module exports
55
+ */
56
+ private findBubbleFlowClass;
57
+ /**
58
+ * Check if a function is a BubbleFlow class
59
+ */
60
+ private isBubbleFlowClass;
61
+ /**
62
+ * Instantiate the flow class with appropriate constructor parameters
63
+ */
64
+ private instantiateFlowClass;
65
+ /**
66
+ * Resume execution from a specific step
67
+ */
68
+ resumeFromStep(stepId: number): void;
69
+ getPlan(): ExecutionPlan;
70
+ /**
71
+ * Get the logger instance
72
+ */
73
+ getLogger(): BubbleLogger | undefined;
74
+ /**
75
+ * Get execution summary with detailed analytics
76
+ */
77
+ getExecutionSummary(): ReturnType<BubbleLogger['getExecutionSummary']> | null;
78
+ /**
79
+ * Export execution logs in various formats
80
+ */
81
+ exportLogs(format?: 'json' | 'csv' | 'table'): string | null;
82
+ /**
83
+ * Find the project root directory by looking for package.json
84
+ */
85
+ private findProjectRoot;
86
+ /**
87
+ * Dispose of resources (logger, etc.)
88
+ */
89
+ dispose(): void;
90
+ }
91
+ //# sourceMappingURL=BubbleRunner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BubbleRunner.d.ts","sourceRoot":"","sources":["../../src/runtime/BubbleRunner.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,oBAAoB,EACrB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,aAAa,EAEb,YAAY,EACZ,YAAY,EACZ,QAAQ,EACT,MAAM,wBAAwB,CAAC;AAEhC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAMhE,OAAO,KAAK,EAAE,aAAa,EAA2B,MAAM,SAAS,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAK9D,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,mBAAmB;IAClC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC;AAED,qBAAa,YAAY;IAKvB,OAAO,CAAC,aAAa,CAAgB;IAE9B,YAAY,EAAE,YAAY,CAAC;IAGlC,OAAO,CAAC,WAAW,CAAS;IAG5B,OAAO,CAAC,WAAW,CAAM;IACzB,OAAO,CAAC,IAAI,CAA8B;IAC1C,OAAO,CAAC,MAAM,CAAe;IACtB,QAAQ,EAAE,cAAc,CAAC;IAChC,OAAO,CAAC,OAAO,CAAsB;gBAGnC,YAAY,EAAE,MAAM,GAAG,YAAY,EACnC,aAAa,EAAE,aAAa,EAC5B,OAAO,GAAE,mBAAwB;IAwCnC;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;IA8J1B;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAa1B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA8D3B,gBAAgB,IAAI,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC;IAIxD,YAAY;IAIZ;;OAEG;IAEH,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI7B;;OAEG;IACG,MAAM,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC,eAAe,CAAC;IAqQvE;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAe3B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAYzB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAU5B;;OAEG;IAEH,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAIpC,OAAO,IAAI,aAAa;IAOxB;;OAEG;IACH,SAAS,IAAI,YAAY,GAAG,SAAS;IAIrC;;OAEG;IACH,mBAAmB,IAAI,UAAU,CAC/B,YAAY,CAAC,qBAAqB,CAAC,CACpC,GAAG,IAAI;IAIR;;OAEG;IACH,UAAU,CAAC,MAAM,GAAE,MAAM,GAAG,KAAK,GAAG,OAAgB,GAAG,MAAM,GAAG,IAAI;IAIpE;;OAEG;IACH,OAAO,CAAC,eAAe;IAoBvB;;OAEG;IACH,OAAO,IAAI,IAAI;CAGhB"}