@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.
- package/LICENSE.txt +202 -0
- package/dist/extraction/BubbleParser.d.ts +80 -0
- package/dist/extraction/BubbleParser.d.ts.map +1 -0
- package/dist/extraction/BubbleParser.js +926 -0
- package/dist/extraction/BubbleParser.js.map +1 -0
- package/dist/extraction/index.d.ts +2 -0
- package/dist/extraction/index.d.ts.map +1 -0
- package/dist/extraction/index.js +4 -0
- package/dist/extraction/index.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/injection/BubbleInjector.d.ts +71 -0
- package/dist/injection/BubbleInjector.d.ts.map +1 -0
- package/dist/injection/BubbleInjector.js +326 -0
- package/dist/injection/BubbleInjector.js.map +1 -0
- package/dist/injection/LoggerInjector.d.ts +33 -0
- package/dist/injection/LoggerInjector.d.ts.map +1 -0
- package/dist/injection/LoggerInjector.js +154 -0
- package/dist/injection/LoggerInjector.js.map +1 -0
- package/dist/injection/index.d.ts +3 -0
- package/dist/injection/index.d.ts.map +1 -0
- package/dist/injection/index.js +3 -0
- package/dist/injection/index.js.map +1 -0
- package/dist/parse/BubbleScript.d.ts +141 -0
- package/dist/parse/BubbleScript.d.ts.map +1 -0
- package/dist/parse/BubbleScript.js +513 -0
- package/dist/parse/BubbleScript.js.map +1 -0
- package/dist/parse/index.d.ts +3 -0
- package/dist/parse/index.d.ts.map +1 -0
- package/dist/parse/index.js +3 -0
- package/dist/parse/index.js.map +1 -0
- package/dist/parse/traceDependencies.d.ts +18 -0
- package/dist/parse/traceDependencies.d.ts.map +1 -0
- package/dist/parse/traceDependencies.js +181 -0
- package/dist/parse/traceDependencies.js.map +1 -0
- package/dist/runtime/BubbleRunner.d.ts +91 -0
- package/dist/runtime/BubbleRunner.d.ts.map +1 -0
- package/dist/runtime/BubbleRunner.js +586 -0
- package/dist/runtime/BubbleRunner.js.map +1 -0
- package/dist/runtime/index.d.ts +2 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +2 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/runtime/types.d.ts +29 -0
- package/dist/runtime/types.d.ts.map +1 -0
- package/dist/runtime/types.js +2 -0
- package/dist/runtime/types.js.map +1 -0
- package/dist/types/index.d.ts +8 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/bubble-helper.d.ts +11 -0
- package/dist/utils/bubble-helper.d.ts.map +1 -0
- package/dist/utils/bubble-helper.js +15 -0
- package/dist/utils/bubble-helper.js.map +1 -0
- package/dist/utils/parameter-formatter.d.ts +22 -0
- package/dist/utils/parameter-formatter.d.ts.map +1 -0
- package/dist/utils/parameter-formatter.js +219 -0
- package/dist/utils/parameter-formatter.js.map +1 -0
- package/dist/validation/BubbleValidator.d.ts +43 -0
- package/dist/validation/BubbleValidator.d.ts.map +1 -0
- package/dist/validation/BubbleValidator.js +172 -0
- package/dist/validation/BubbleValidator.js.map +1 -0
- package/dist/validation/index.d.ts +27 -0
- package/dist/validation/index.d.ts.map +1 -0
- package/dist/validation/index.js +126 -0
- package/dist/validation/index.js.map +1 -0
- 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"}
|