@bubblelab/bubble-runtime 0.1.224 → 0.1.226
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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bubblelab/bubble-runtime",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.226",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -26,9 +26,9 @@
|
|
|
26
26
|
"patch-package": "^8.0.0",
|
|
27
27
|
"typescript": "^5.8.3",
|
|
28
28
|
"zod": "=3.25.76",
|
|
29
|
-
"@bubblelab/
|
|
30
|
-
"@bubblelab/
|
|
31
|
-
"@bubblelab/
|
|
29
|
+
"@bubblelab/bubble-core": "0.1.226",
|
|
30
|
+
"@bubblelab/shared-schemas": "0.1.226",
|
|
31
|
+
"@bubblelab/ts-scope-manager": "0.1.226"
|
|
32
32
|
},
|
|
33
33
|
"devDependencies": {
|
|
34
34
|
"@types/bun": "^1.2.21",
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { ParsedBubbleWithInfo } from '@bubblelab/shared-schemas';
|
|
2
|
-
import { BubbleFactory } from '@bubblelab/bubble-core';
|
|
3
|
-
export interface DependencyTraceResult {
|
|
4
|
-
success: boolean;
|
|
5
|
-
nodes: Record<string, ParsedBubbleWithInfo>;
|
|
6
|
-
errors?: string[];
|
|
7
|
-
}
|
|
8
|
-
/**
|
|
9
|
-
* Trace bubble dependencies from a validated BubbleFlow script.
|
|
10
|
-
* - Parses AST, extracts bubble instantiations and their parameters
|
|
11
|
-
* - Builds a className -> metadata mapping from BubbleFactory defaults
|
|
12
|
-
* - Classifies each bubble node as service/tool/workflow using metadata
|
|
13
|
-
*
|
|
14
|
-
* Note: Only dependencies explicitly constructed in the script are captured.
|
|
15
|
-
* Internal dependencies of workflow bubbles require explicit metadata.
|
|
16
|
-
*/
|
|
17
|
-
export declare function traceBubbleDependencies(code: string, bubbleFactory: BubbleFactory): DependencyTraceResult;
|
|
18
|
-
//# sourceMappingURL=traceDependencies.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"traceDependencies.d.ts","sourceRoot":"","sources":["../../src/parse/traceDependencies.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,oBAAoB,EAGrB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEvD,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;IAC5C,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,aAAa,GAC3B,qBAAqB,CAsEvB"}
|
|
@@ -1,181 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"traceDependencies.js","sourceRoot":"","sources":["../../src/parse/traceDependencies.ts"],"names":[],"mappings":"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"}
|