@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.
- package/dist/extraction/BubbleParser.d.ts +187 -8
- package/dist/extraction/BubbleParser.d.ts.map +1 -1
- package/dist/extraction/BubbleParser.js +2271 -117
- package/dist/extraction/BubbleParser.js.map +1 -1
- package/dist/extraction/index.js +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/injection/BubbleInjector.d.ts +27 -2
- package/dist/injection/BubbleInjector.d.ts.map +1 -1
- package/dist/injection/BubbleInjector.js +343 -35
- package/dist/injection/BubbleInjector.js.map +1 -1
- package/dist/injection/LoggerInjector.d.ts +12 -1
- package/dist/injection/LoggerInjector.d.ts.map +1 -1
- package/dist/injection/LoggerInjector.js +301 -13
- package/dist/injection/LoggerInjector.js.map +1 -1
- package/dist/injection/index.js +1 -0
- package/dist/parse/BubbleScript.d.ts +60 -3
- package/dist/parse/BubbleScript.d.ts.map +1 -1
- package/dist/parse/BubbleScript.js +133 -15
- package/dist/parse/BubbleScript.js.map +1 -1
- package/dist/parse/index.d.ts +0 -1
- package/dist/parse/index.d.ts.map +1 -1
- package/dist/parse/index.js +1 -1
- package/dist/parse/index.js.map +1 -1
- package/dist/runtime/BubbleRunner.d.ts +8 -2
- package/dist/runtime/BubbleRunner.d.ts.map +1 -1
- package/dist/runtime/BubbleRunner.js +41 -30
- package/dist/runtime/BubbleRunner.js.map +1 -1
- package/dist/runtime/index.d.ts +1 -1
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/index.js +1 -0
- package/dist/runtime/index.js.map +1 -1
- package/dist/runtime/types.js +1 -0
- package/dist/types/index.js +1 -0
- package/dist/utils/bubble-helper.d.ts +2 -2
- package/dist/utils/bubble-helper.d.ts.map +1 -1
- package/dist/utils/bubble-helper.js +6 -1
- package/dist/utils/bubble-helper.js.map +1 -1
- package/dist/utils/normalize-control-flow.d.ts +14 -0
- package/dist/utils/normalize-control-flow.d.ts.map +1 -0
- package/dist/utils/normalize-control-flow.js +179 -0
- package/dist/utils/normalize-control-flow.js.map +1 -0
- package/dist/utils/parameter-formatter.d.ts +14 -5
- package/dist/utils/parameter-formatter.d.ts.map +1 -1
- package/dist/utils/parameter-formatter.js +164 -45
- package/dist/utils/parameter-formatter.js.map +1 -1
- package/dist/utils/sanitize-script.d.ts +11 -0
- package/dist/utils/sanitize-script.d.ts.map +1 -0
- package/dist/utils/sanitize-script.js +43 -0
- package/dist/utils/sanitize-script.js.map +1 -0
- package/dist/validation/BubbleValidator.d.ts +15 -0
- package/dist/validation/BubbleValidator.d.ts.map +1 -1
- package/dist/validation/BubbleValidator.js +168 -1
- package/dist/validation/BubbleValidator.js.map +1 -1
- package/dist/validation/index.d.ts +6 -3
- package/dist/validation/index.d.ts.map +1 -1
- package/dist/validation/index.js +33 -9
- package/dist/validation/index.js.map +1 -1
- package/dist/validation/lint-rules.d.ts +91 -0
- package/dist/validation/lint-rules.d.ts.map +1 -0
- package/dist/validation/lint-rules.js +755 -0
- package/dist/validation/lint-rules.js.map +1 -0
- package/package.json +4 -4
- package/dist/parse/traceDependencies.d.ts +0 -18
- package/dist/parse/traceDependencies.d.ts.map +0 -1
- package/dist/parse/traceDependencies.js +0 -195
- package/dist/parse/traceDependencies.js.map +0 -1
|
@@ -1,25 +1,40 @@
|
|
|
1
1
|
import type { TSESTree } from '@typescript-eslint/typescript-estree';
|
|
2
2
|
import type { ScopeManager } from '@bubblelab/ts-scope-manager';
|
|
3
3
|
import { BubbleFactory } from '@bubblelab/bubble-core';
|
|
4
|
-
import type {
|
|
4
|
+
import type { MethodInvocationInfo } from '../parse/BubbleScript';
|
|
5
|
+
import type { ParsedBubbleWithInfo, ParsedWorkflow } from '@bubblelab/shared-schemas';
|
|
5
6
|
export declare class BubbleParser {
|
|
6
7
|
private bubbleScript;
|
|
8
|
+
private cachedAST;
|
|
9
|
+
private methodInvocationOrdinalMap;
|
|
10
|
+
private invocationBubbleCloneCache;
|
|
11
|
+
/**
|
|
12
|
+
* Track which call expressions have been assigned an invocation index.
|
|
13
|
+
* Key: `methodName:startOffset` (using AST range start position)
|
|
14
|
+
* Value: the assigned invocation index
|
|
15
|
+
* This prevents double-counting when the same call site is processed multiple times
|
|
16
|
+
* (e.g., once in .map() callback processing, again in Promise.all resolution)
|
|
17
|
+
*/
|
|
18
|
+
private processedCallSiteIndexes;
|
|
19
|
+
/** Custom tool func ranges for marking bubbles inside custom tools */
|
|
20
|
+
private customToolFuncs;
|
|
7
21
|
constructor(bubbleScript: string);
|
|
8
22
|
/**
|
|
9
23
|
* Parse bubble dependencies from an AST using the provided factory and scope manager
|
|
10
24
|
*/
|
|
11
25
|
parseBubblesFromAST(bubbleFactory: BubbleFactory, ast: TSESTree.Program, scopeManager: ScopeManager): {
|
|
12
26
|
bubbles: Record<number, ParsedBubbleWithInfo>;
|
|
13
|
-
|
|
27
|
+
workflow: ParsedWorkflow;
|
|
28
|
+
instanceMethodsLocation: Record<string, {
|
|
14
29
|
startLine: number;
|
|
15
30
|
endLine: number;
|
|
16
31
|
definitionStartLine: number;
|
|
17
32
|
bodyStartLine: number;
|
|
18
|
-
|
|
33
|
+
invocationLines: MethodInvocationInfo[];
|
|
34
|
+
}>;
|
|
19
35
|
};
|
|
20
36
|
private findDependenciesForBubble;
|
|
21
37
|
private buildDependencyGraph;
|
|
22
|
-
private hashUniqueIdToVarId;
|
|
23
38
|
/**
|
|
24
39
|
* Build a JSON Schema object for the payload parameter of the top-level `handle` entrypoint.
|
|
25
40
|
* Supports primitives, arrays, unions (anyOf), intersections (allOf), type literals, and
|
|
@@ -44,13 +59,26 @@ export declare class BubbleParser {
|
|
|
44
59
|
/** Resolve in-file interface/type alias by name to JSON Schema */
|
|
45
60
|
private resolveTypeNameToJson;
|
|
46
61
|
/**
|
|
47
|
-
* Find the
|
|
62
|
+
* Find the main class that extends BubbleFlow
|
|
48
63
|
*/
|
|
49
|
-
private
|
|
64
|
+
private findMainBubbleFlowClass;
|
|
50
65
|
/**
|
|
51
|
-
*
|
|
66
|
+
* Extract all instance methods from a class
|
|
52
67
|
*/
|
|
53
|
-
private
|
|
68
|
+
private findAllInstanceMethods;
|
|
69
|
+
/**
|
|
70
|
+
* Find all method invocations in the AST with full details
|
|
71
|
+
*/
|
|
72
|
+
private findMethodInvocations;
|
|
73
|
+
/**
|
|
74
|
+
* Check if a child node is in the condition/test part of a control flow statement
|
|
75
|
+
* Returns true if the child is the test/discriminant expression, false if it's in the body
|
|
76
|
+
*/
|
|
77
|
+
private isNodeInConditionPart;
|
|
78
|
+
/**
|
|
79
|
+
* Helper to recursively visit child nodes for finding invocations
|
|
80
|
+
*/
|
|
81
|
+
private visitChildNodesForInvocations;
|
|
54
82
|
/**
|
|
55
83
|
* Recursively visit AST nodes to find bubble instantiations
|
|
56
84
|
*/
|
|
@@ -83,5 +111,156 @@ export declare class BubbleParser {
|
|
|
83
111
|
* Extract parameter value and type from an expression
|
|
84
112
|
*/
|
|
85
113
|
private extractParameterValue;
|
|
114
|
+
/**
|
|
115
|
+
* Find custom tools in ai-agent bubbles and populate customToolFuncs.
|
|
116
|
+
* This scans the AST for ai-agent instantiations and extracts custom tool func locations.
|
|
117
|
+
*/
|
|
118
|
+
private findCustomToolsInAIAgentBubbles;
|
|
119
|
+
/**
|
|
120
|
+
* Mark bubbles that are inside custom tool funcs with isInsideCustomTool flag.
|
|
121
|
+
*/
|
|
122
|
+
private markBubblesInsideCustomTools;
|
|
123
|
+
/**
|
|
124
|
+
* Extract comment/description for a node by looking at preceding comments
|
|
125
|
+
**/
|
|
126
|
+
private extractCommentForNode;
|
|
127
|
+
/**
|
|
128
|
+
* Extract JSDoc info including description, @canBeFile, and @canBeGoogleFile tags from a node's preceding comments.
|
|
129
|
+
* The @canBeFile tag controls whether file upload is enabled for string fields in the UI.
|
|
130
|
+
* The @canBeGoogleFile tag enables Google Picker UI for Google Drive file/folder ID fields.
|
|
131
|
+
*/
|
|
132
|
+
private extractJSDocForNode;
|
|
133
|
+
/**
|
|
134
|
+
* Check if a list of workflow nodes contains a terminating statement (return/throw)
|
|
135
|
+
* A branch terminates if its last statement is a return or throw
|
|
136
|
+
*/
|
|
137
|
+
private branchTerminates;
|
|
138
|
+
/**
|
|
139
|
+
* Build hierarchical workflow structure from AST
|
|
140
|
+
*/
|
|
141
|
+
private buildWorkflowTree;
|
|
142
|
+
/**
|
|
143
|
+
* Group consecutive nodes of the same type
|
|
144
|
+
* - Consecutive variable_declaration nodes → merge into one
|
|
145
|
+
* - Consecutive code_block nodes → merge into one
|
|
146
|
+
* - return nodes are NOT grouped (each is a distinct exit point)
|
|
147
|
+
*/
|
|
148
|
+
private groupConsecutiveNodes;
|
|
149
|
+
/**
|
|
150
|
+
* Merge a group of nodes of the same type into a single node
|
|
151
|
+
*/
|
|
152
|
+
private mergeGroup;
|
|
153
|
+
/**
|
|
154
|
+
* Build a workflow node from an AST statement
|
|
155
|
+
*/
|
|
156
|
+
private buildWorkflowNodeFromStatement;
|
|
157
|
+
/**
|
|
158
|
+
* Build an if node from IfStatement
|
|
159
|
+
*/
|
|
160
|
+
private buildIfNode;
|
|
161
|
+
/**
|
|
162
|
+
* Build a for node from ForStatement/ForInStatement/ForOfStatement
|
|
163
|
+
*/
|
|
164
|
+
private buildForNode;
|
|
165
|
+
/**
|
|
166
|
+
* Build a while node from WhileStatement
|
|
167
|
+
*/
|
|
168
|
+
private buildWhileNode;
|
|
169
|
+
/**
|
|
170
|
+
* Build a try-catch node from TryStatement
|
|
171
|
+
*/
|
|
172
|
+
private buildTryCatchNode;
|
|
173
|
+
/**
|
|
174
|
+
* Build a code block node from a statement
|
|
175
|
+
*/
|
|
176
|
+
private buildCodeBlockNode;
|
|
177
|
+
/**
|
|
178
|
+
* Find a bubble in an expression by checking if it matches any parsed bubble
|
|
179
|
+
*/
|
|
180
|
+
private findBubbleInExpression;
|
|
181
|
+
/**
|
|
182
|
+
* Extract the NewExpression from an expression, handling await, .action(), etc.
|
|
183
|
+
*/
|
|
184
|
+
private extractNewExpression;
|
|
185
|
+
/**
|
|
186
|
+
* Build a variable declaration node from a VariableDeclaration statement
|
|
187
|
+
*/
|
|
188
|
+
private buildVariableDeclarationNode;
|
|
189
|
+
/**
|
|
190
|
+
* Build a return node from a ReturnStatement
|
|
191
|
+
*/
|
|
192
|
+
private buildReturnNode;
|
|
193
|
+
/**
|
|
194
|
+
* Detect if an expression is Promise.all([...]) or Promise.all(variable)
|
|
195
|
+
*/
|
|
196
|
+
private detectPromiseAll;
|
|
197
|
+
/**
|
|
198
|
+
* Detect if an expression is a function call
|
|
199
|
+
*/
|
|
200
|
+
private detectFunctionCall;
|
|
201
|
+
/**
|
|
202
|
+
* Find a method definition in the class by name
|
|
203
|
+
*/
|
|
204
|
+
private findMethodDefinition;
|
|
205
|
+
/**
|
|
206
|
+
* Check if a workflow node tree contains any bubbles (recursively)
|
|
207
|
+
*/
|
|
208
|
+
private containsBubbles;
|
|
209
|
+
/**
|
|
210
|
+
* Build a function call node from a function call expression
|
|
211
|
+
*/
|
|
212
|
+
private buildFunctionCallNode;
|
|
213
|
+
/**
|
|
214
|
+
* Extract the body of a callback function (arrow or regular function expression)
|
|
215
|
+
* Handles both block statements and concise arrow functions
|
|
216
|
+
*/
|
|
217
|
+
private extractCallbackBody;
|
|
218
|
+
/**
|
|
219
|
+
* Find array elements from .push() calls or .map() callbacks
|
|
220
|
+
* Handles both patterns:
|
|
221
|
+
* - .push(): array.push(item1, item2, ...)
|
|
222
|
+
* - .map(): const promises = items.map(item => this.processItem(item))
|
|
223
|
+
*/
|
|
224
|
+
private findArrayElements;
|
|
225
|
+
/**
|
|
226
|
+
* Extract expression from callback function
|
|
227
|
+
*/
|
|
228
|
+
private extractCallbackExpression;
|
|
229
|
+
/**
|
|
230
|
+
* Get elements from source array (literal or variable)
|
|
231
|
+
*/
|
|
232
|
+
private getSourceArrayElements;
|
|
233
|
+
/**
|
|
234
|
+
* Find all return statements in a block statement
|
|
235
|
+
*/
|
|
236
|
+
private findReturnStatements;
|
|
237
|
+
/**
|
|
238
|
+
* Build a parallel execution node from Promise.all()
|
|
239
|
+
*/
|
|
240
|
+
private buildParallelExecutionNode;
|
|
241
|
+
/**
|
|
242
|
+
* Get the invocation index for a method call.
|
|
243
|
+
* If the same call expression (identified by its AST range) has been processed before,
|
|
244
|
+
* return the same index to avoid double-counting.
|
|
245
|
+
*
|
|
246
|
+
* @param methodName - The name of the method being called
|
|
247
|
+
* @param callExprStartOffset - Optional start offset of the CallExpression in the source.
|
|
248
|
+
* Used to deduplicate when the same call is processed multiple times
|
|
249
|
+
* (e.g., .map() callback processing vs Promise.all resolution)
|
|
250
|
+
*/
|
|
251
|
+
private getNextInvocationIndex;
|
|
252
|
+
private cloneWorkflowNodesForInvocation;
|
|
253
|
+
private cloneWorkflowNodeForInvocation;
|
|
254
|
+
private ensureClonedBubbleForInvocation;
|
|
255
|
+
private cloneBubbleForInvocation;
|
|
256
|
+
private cloneDependencyGraphNodeForInvocation;
|
|
257
|
+
/**
|
|
258
|
+
* Extract condition string from a test expression
|
|
259
|
+
*/
|
|
260
|
+
private extractConditionString;
|
|
261
|
+
/**
|
|
262
|
+
* Extract location from a node
|
|
263
|
+
*/
|
|
264
|
+
private extractLocation;
|
|
86
265
|
}
|
|
87
266
|
//# sourceMappingURL=BubbleParser.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BubbleParser.d.ts","sourceRoot":"","sources":["../../src/extraction/BubbleParser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sCAAsC,CAAC;
|
|
1
|
+
{"version":3,"file":"BubbleParser.d.ts","sourceRoot":"","sources":["../../src/extraction/BubbleParser.ts"],"names":[],"mappings":"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"}
|