Flowfile 0.3.3.1__py3-none-any.whl → 0.3.4__py3-none-any.whl
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.
Potentially problematic release.
This version of Flowfile might be problematic. Click here for more details.
- flowfile/__init__.py +2 -2
- flowfile/__main__.py +0 -2
- flowfile/api.py +94 -46
- flowfile/web/__init__.py +4 -1
- flowfile/web/static/assets/{AirbyteReader-2b1cf2d8.js → AirbyteReader-e08044e5.js} +8 -8
- flowfile/web/static/assets/{CrossJoin-cc3ab73c.js → CrossJoin-dfcf7351.js} +8 -8
- flowfile/web/static/assets/{DatabaseConnectionSettings-307c4652.js → DatabaseConnectionSettings-b2afb1d7.js} +2 -2
- flowfile/web/static/assets/{DatabaseManager-69faa6e1.js → DatabaseManager-824a49b2.js} +2 -2
- flowfile/web/static/assets/{DatabaseReader-e4134cd0.js → DatabaseReader-a48124d8.js} +9 -9
- flowfile/web/static/assets/{DatabaseWriter-d32d75b1.js → DatabaseWriter-b47cbae2.js} +9 -9
- flowfile/web/static/assets/{ExploreData-5eb48389.js → ExploreData-fdfc45a4.js} +5 -5
- flowfile/web/static/assets/{ExternalSource-29489051.js → ExternalSource-861b0e71.js} +6 -6
- flowfile/web/static/assets/{Filter-031332bb.js → Filter-f87bb897.js} +8 -9
- flowfile/web/static/assets/{Formula-3b900540.js → Formula-1e2ed720.js} +9 -10
- flowfile/web/static/assets/{FuzzyMatch-dee31153.js → FuzzyMatch-b6cc4fdd.js} +9 -9
- flowfile/web/static/assets/{GraphSolver-ca74eb47.js → GraphSolver-6a371f4c.js} +5 -5
- flowfile/web/static/assets/{GroupBy-081b6591.js → GroupBy-f7b7f472.js} +6 -6
- flowfile/web/static/assets/{Join-b467376f.js → Join-eec38203.js} +9 -9
- flowfile/web/static/assets/{ManualInput-ffffb80a.js → ManualInput-9aaa46fb.js} +5 -5
- flowfile/web/static/assets/{Output-9a87d4ba.js → Output-3b2ca045.js} +4 -4
- flowfile/web/static/assets/{Pivot-ee3e6093.js → Pivot-a4f5d88f.js} +6 -6
- flowfile/web/static/assets/PolarsCode-49ce444f.js +306 -0
- flowfile/web/static/assets/{Read-67fee3a0.js → Read-07acdc9a.js} +6 -6
- flowfile/web/static/assets/{RecordCount-a2acd02d.js → RecordCount-6a21da56.js} +5 -5
- flowfile/web/static/assets/{RecordId-0c8bcd77.js → RecordId-949bdc17.js} +6 -6
- flowfile/web/static/assets/{Sample-60594a3a.js → Sample-7afca6e1.js} +5 -5
- flowfile/web/static/assets/{SecretManager-bbcec2ac.js → SecretManager-b41c029d.js} +2 -2
- flowfile/web/static/assets/{Select-9540e6ca.js → Select-32b28406.js} +8 -8
- flowfile/web/static/assets/{SettingsSection-48f28104.js → SettingsSection-a0f15a05.js} +1 -1
- flowfile/web/static/assets/{Sort-6dbe3633.js → Sort-fc6ba0e2.js} +6 -6
- flowfile/web/static/assets/{TextToRows-27aab4a8.js → TextToRows-23127596.js} +8 -8
- flowfile/web/static/assets/{UnavailableFields-8143044b.js → UnavailableFields-c42880a3.js} +2 -2
- flowfile/web/static/assets/{Union-52460248.js → Union-39eecc6c.js} +5 -5
- flowfile/web/static/assets/{Unique-f6962644.js → Unique-a0e8fe61.js} +8 -8
- flowfile/web/static/assets/{Unpivot-1ff1e938.js → Unpivot-1e2d43f0.js} +5 -5
- flowfile/web/static/assets/{api-3b345d92.js → api-44ca9e9c.js} +1 -1
- flowfile/web/static/assets/{designer-2394122a.css → designer-186f2e71.css} +64 -9
- flowfile/web/static/assets/{designer-4736134f.js → designer-267d44f1.js} +2835 -105
- flowfile/web/static/assets/{documentation-b9545eba.js → documentation-6c0810a2.js} +1 -1
- flowfile/web/static/assets/{dropDown-d5a4014c.js → dropDown-52790b15.js} +1 -1
- flowfile/web/static/assets/{dropDownGeneric-1f4e32ec.js → dropDownGeneric-60f56a8a.js} +2 -2
- flowfile/web/static/assets/{fullEditor-f4791c23.js → fullEditor-e272b506.js} +2 -3
- flowfile/web/static/assets/{genericNodeSettings-1d456350.js → genericNodeSettings-4bdcf98e.js} +3 -3
- flowfile/web/static/assets/{index-f25c9283.js → index-e235a8bc.js} +12 -12
- flowfile/web/static/assets/{nodeTitle-cad6fd9d.js → nodeTitle-fc3fc4b7.js} +3 -3
- flowfile/web/static/assets/{secretApi-01f07e2c.js → secretApi-cdc2a3fd.js} +1 -1
- flowfile/web/static/assets/{selectDynamic-f46a4e3f.js → selectDynamic-96aa82cd.js} +3 -3
- flowfile/web/static/assets/{vue-codemirror.esm-eb98fc8b.js → vue-codemirror.esm-25e75a08.js} +610 -29
- flowfile/web/static/assets/{vue-content-loader.es-860c0380.js → vue-content-loader.es-6c4b1c24.js} +1 -1
- flowfile/web/static/index.html +1 -1
- {flowfile-0.3.3.1.dist-info → flowfile-0.3.4.dist-info}/METADATA +16 -3
- {flowfile-0.3.3.1.dist-info → flowfile-0.3.4.dist-info}/RECORD +74 -74
- flowfile_core/flowfile/code_generator/__init__.py +0 -0
- flowfile_core/flowfile/code_generator/code_generator.py +723 -0
- flowfile_core/flowfile/flow_data_engine/flow_data_engine.py +1 -1
- flowfile_core/flowfile/flow_data_engine/flow_file_column/main.py +1 -1
- flowfile_core/flowfile/{FlowfileFlow.py → flow_graph.py} +3 -3
- flowfile_core/flowfile/flow_graph_utils.py +1 -1
- flowfile_core/flowfile/handler.py +1 -1
- flowfile_core/flowfile/manage/open_flowfile.py +1 -1
- flowfile_core/flowfile/util/calculate_layout.py +1 -1
- flowfile_core/routes/routes.py +11 -1
- flowfile_core/schemas/input_schema.py +2 -1
- flowfile_frame/adapters.py +1 -1
- flowfile_frame/expr.py +19 -0
- flowfile_frame/flow_frame.py +1 -4
- flowfile_frame/flow_frame.pyi +1 -1
- flowfile_frame/flow_frame_methods.py +1 -1
- flowfile_frame/lazy.py +1 -1
- flowfile_frame/utils.py +1 -1
- flowfile/readme.md +0 -127
- flowfile/web/static/assets/PolarsCode-03921254.js +0 -2865
- flowfile/web/static/assets/PopOver-3bdf8951.js +0 -577
- /flowfile/web/static/assets/{PopOver-bccfde04.css → vue-codemirror-bccfde04.css} +0 -0
- {flowfile-0.3.3.1.dist-info → flowfile-0.3.4.dist-info}/LICENSE +0 -0
- {flowfile-0.3.3.1.dist-info → flowfile-0.3.4.dist-info}/WHEEL +0 -0
- {flowfile-0.3.3.1.dist-info → flowfile-0.3.4.dist-info}/entry_points.txt +0 -0
flowfile/web/static/assets/{vue-codemirror.esm-eb98fc8b.js → vue-codemirror.esm-25e75a08.js}
RENAMED
|
@@ -1,4 +1,583 @@
|
|
|
1
|
-
import { d as defineComponent, X as shallowRef, B as inject, l as computed,
|
|
1
|
+
import { r as ref, j as defineStore, a as axios, d as defineComponent, ae as useCssVars, n as onMounted, c as openBlock, e as createElementBlock, p as createBaseVNode, L as renderSlot, h as createBlock, t as toDisplayString, i as createCommentVNode, T as normalizeStyle, s as normalizeClass, a7 as Teleport, R as nextTick, _ as _export_sfc, X as shallowRef, B as inject, l as computed, m as watch, U as onBeforeUnmount, Y as h$1, af as toRaw } from "./index-e235a8bc.js";
|
|
2
|
+
const FLOW_ID_STORAGE_KEY = "last_flow_id";
|
|
3
|
+
ref(null);
|
|
4
|
+
const getDownstreamNodeIds = async (flow_id, node_id) => {
|
|
5
|
+
const response = await axios.get("/node/downstream_node_ids", {
|
|
6
|
+
params: { flow_id, node_id },
|
|
7
|
+
headers: { accept: "application/json" }
|
|
8
|
+
});
|
|
9
|
+
return response.data;
|
|
10
|
+
};
|
|
11
|
+
const loadDownstreamNodeIds = async (flowId, nodeId) => {
|
|
12
|
+
const downstreamNodeIds = await getDownstreamNodeIds(flowId, nodeId);
|
|
13
|
+
return downstreamNodeIds;
|
|
14
|
+
};
|
|
15
|
+
const useNodeStore = defineStore("node", {
|
|
16
|
+
state: () => {
|
|
17
|
+
const savedFlowId = sessionStorage.getItem(FLOW_ID_STORAGE_KEY);
|
|
18
|
+
const initialFlowId = savedFlowId ? parseInt(savedFlowId) : -1;
|
|
19
|
+
return {
|
|
20
|
+
inputCode: "",
|
|
21
|
+
flow_id: initialFlowId,
|
|
22
|
+
node_id: -1,
|
|
23
|
+
previous_node_id: -1,
|
|
24
|
+
nodeValidateFuncs: /* @__PURE__ */ new Map(),
|
|
25
|
+
nodeData: null,
|
|
26
|
+
node_exists: false,
|
|
27
|
+
is_loaded: false,
|
|
28
|
+
size_data_preview: 300,
|
|
29
|
+
dataTypes: ["String", "Datetime", "Int64", "Int32", "Int16", "Float64", "Float32", "Boolean"],
|
|
30
|
+
isDrawerOpen: false,
|
|
31
|
+
isAnalysisOpen: false,
|
|
32
|
+
drawCloseFunction: null,
|
|
33
|
+
initialEditorData: "",
|
|
34
|
+
runResults: {},
|
|
35
|
+
nodeDescriptions: {},
|
|
36
|
+
runNodeResults: {},
|
|
37
|
+
runNodeValidations: {},
|
|
38
|
+
currentRunResult: null,
|
|
39
|
+
isRunning: false,
|
|
40
|
+
showFlowResult: false,
|
|
41
|
+
tableVisible: false,
|
|
42
|
+
resultVersion: 0,
|
|
43
|
+
vueFlowInstance: null,
|
|
44
|
+
allExpressions: null,
|
|
45
|
+
isShowingLogViewer: false,
|
|
46
|
+
isStreamingLogs: false,
|
|
47
|
+
displayLogViewer: true,
|
|
48
|
+
showCodeGenerator: false
|
|
49
|
+
};
|
|
50
|
+
},
|
|
51
|
+
actions: {
|
|
52
|
+
toggleCodeGenerator() {
|
|
53
|
+
this.showCodeGenerator = !this.showCodeGenerator;
|
|
54
|
+
},
|
|
55
|
+
setCodeGeneratorVisibility(visible) {
|
|
56
|
+
this.showCodeGenerator = visible;
|
|
57
|
+
},
|
|
58
|
+
initializeResultCache(flowId) {
|
|
59
|
+
if (!this.runNodeResults[flowId]) {
|
|
60
|
+
this.runNodeResults[flowId] = {};
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
initializeValidationCache(flowId) {
|
|
64
|
+
if (!this.runNodeValidations[flowId]) {
|
|
65
|
+
this.runNodeValidations[flowId] = {};
|
|
66
|
+
}
|
|
67
|
+
},
|
|
68
|
+
setNodeResult(nodeId, result) {
|
|
69
|
+
this.initializeResultCache(this.flow_id);
|
|
70
|
+
this.runNodeResults[this.flow_id][nodeId] = result;
|
|
71
|
+
},
|
|
72
|
+
getNodeResult(nodeId) {
|
|
73
|
+
var _a2;
|
|
74
|
+
return (_a2 = this.runNodeResults[this.flow_id]) == null ? void 0 : _a2[nodeId];
|
|
75
|
+
},
|
|
76
|
+
resetNodeResult() {
|
|
77
|
+
console.log("Clearing node results");
|
|
78
|
+
this.runNodeResults = {};
|
|
79
|
+
},
|
|
80
|
+
clearFlowResults(flowId) {
|
|
81
|
+
if (this.runNodeResults[flowId]) {
|
|
82
|
+
delete this.runNodeResults[flowId];
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
setNodeValidation(nodeId, nodeValidationInput) {
|
|
86
|
+
if (typeof nodeId === "string") {
|
|
87
|
+
nodeId = parseInt(nodeId);
|
|
88
|
+
}
|
|
89
|
+
this.initializeValidationCache(this.flow_id);
|
|
90
|
+
const nodeValidation = {
|
|
91
|
+
...nodeValidationInput,
|
|
92
|
+
validationTime: Date.now() / 1e3
|
|
93
|
+
};
|
|
94
|
+
this.runNodeValidations[this.flow_id][nodeId] = nodeValidation;
|
|
95
|
+
},
|
|
96
|
+
resetNodeValidation() {
|
|
97
|
+
this.runNodeValidations = {};
|
|
98
|
+
},
|
|
99
|
+
getNodeValidation(nodeId) {
|
|
100
|
+
var _a2;
|
|
101
|
+
return ((_a2 = this.runNodeValidations[this.flow_id]) == null ? void 0 : _a2[nodeId]) || {
|
|
102
|
+
isValid: true,
|
|
103
|
+
error: "",
|
|
104
|
+
validationTime: 0
|
|
105
|
+
};
|
|
106
|
+
},
|
|
107
|
+
insertRunResult(runResult, showResult = true) {
|
|
108
|
+
this.currentRunResult = runResult;
|
|
109
|
+
this.runResults[runResult.flow_id] = runResult;
|
|
110
|
+
this.showFlowResult = showResult;
|
|
111
|
+
this.isShowingLogViewer = this.displayLogViewer && showResult;
|
|
112
|
+
this.initializeResultCache(runResult.flow_id);
|
|
113
|
+
runResult.node_step_result.forEach((nodeResult) => {
|
|
114
|
+
this.runNodeResults[runResult.flow_id][nodeResult.node_id] = nodeResult;
|
|
115
|
+
});
|
|
116
|
+
this.resultVersion++;
|
|
117
|
+
},
|
|
118
|
+
resetRunResults() {
|
|
119
|
+
this.runNodeResults = {};
|
|
120
|
+
this.runResults = {};
|
|
121
|
+
this.currentRunResult = null;
|
|
122
|
+
},
|
|
123
|
+
initializeDescriptionCache(flowId) {
|
|
124
|
+
if (!this.nodeDescriptions[flowId]) {
|
|
125
|
+
this.nodeDescriptions[flowId] = {};
|
|
126
|
+
}
|
|
127
|
+
},
|
|
128
|
+
setNodeValidateFunc(nodeId, func) {
|
|
129
|
+
if (typeof nodeId === "string") {
|
|
130
|
+
nodeId = parseInt(nodeId);
|
|
131
|
+
}
|
|
132
|
+
this.nodeValidateFuncs.set(nodeId, func);
|
|
133
|
+
},
|
|
134
|
+
async validateNode(nodeId) {
|
|
135
|
+
if (typeof nodeId === "string") {
|
|
136
|
+
nodeId = parseInt(nodeId);
|
|
137
|
+
}
|
|
138
|
+
const func = this.nodeValidateFuncs.get(nodeId);
|
|
139
|
+
if (func) {
|
|
140
|
+
func();
|
|
141
|
+
} else {
|
|
142
|
+
console.warn("No validation function found for node", nodeId);
|
|
143
|
+
}
|
|
144
|
+
},
|
|
145
|
+
setFlowId(flowId) {
|
|
146
|
+
this.flow_id = flowId;
|
|
147
|
+
try {
|
|
148
|
+
sessionStorage.setItem(FLOW_ID_STORAGE_KEY, flowId.toString());
|
|
149
|
+
} catch (error) {
|
|
150
|
+
console.warn("Failed to store flow ID in session storage:", error);
|
|
151
|
+
}
|
|
152
|
+
},
|
|
153
|
+
setVueFlowInstance(vueFlowInstance) {
|
|
154
|
+
this.vueFlowInstance = vueFlowInstance;
|
|
155
|
+
},
|
|
156
|
+
setInitialEditorData(editorDataString) {
|
|
157
|
+
this.initialEditorData = editorDataString;
|
|
158
|
+
},
|
|
159
|
+
getInitialEditorData() {
|
|
160
|
+
return this.initialEditorData;
|
|
161
|
+
},
|
|
162
|
+
cacheNodeDescriptionDict(flowId, nodeId, description) {
|
|
163
|
+
this.initializeDescriptionCache(flowId);
|
|
164
|
+
this.nodeDescriptions[flowId][nodeId] = description;
|
|
165
|
+
},
|
|
166
|
+
clearNodeDescriptionCache(flowId, nodeId) {
|
|
167
|
+
if (this.nodeDescriptions[flowId] && this.nodeDescriptions[flowId][nodeId]) {
|
|
168
|
+
delete this.nodeDescriptions[flowId][nodeId];
|
|
169
|
+
}
|
|
170
|
+
},
|
|
171
|
+
clearFlowDescriptionCache(flowId) {
|
|
172
|
+
if (this.nodeDescriptions[flowId]) {
|
|
173
|
+
delete this.nodeDescriptions[flowId];
|
|
174
|
+
}
|
|
175
|
+
},
|
|
176
|
+
clearAllDescriptionCaches() {
|
|
177
|
+
this.nodeDescriptions = {};
|
|
178
|
+
},
|
|
179
|
+
async getNodeDescription(nodeId, forceRefresh = false) {
|
|
180
|
+
var _a2, _b;
|
|
181
|
+
this.initializeDescriptionCache(this.flow_id);
|
|
182
|
+
if (!forceRefresh && ((_a2 = this.nodeDescriptions[this.flow_id]) == null ? void 0 : _a2[nodeId])) {
|
|
183
|
+
return this.nodeDescriptions[this.flow_id][nodeId];
|
|
184
|
+
}
|
|
185
|
+
try {
|
|
186
|
+
const response = await axios.get("/node/description", {
|
|
187
|
+
params: {
|
|
188
|
+
node_id: nodeId,
|
|
189
|
+
flow_id: this.flow_id
|
|
190
|
+
}
|
|
191
|
+
});
|
|
192
|
+
this.cacheNodeDescriptionDict(this.flow_id, nodeId, response.data);
|
|
193
|
+
return response.data;
|
|
194
|
+
} catch (error) {
|
|
195
|
+
console.info("Error fetching node description:", error);
|
|
196
|
+
if ((_b = this.nodeDescriptions[this.flow_id]) == null ? void 0 : _b[nodeId]) {
|
|
197
|
+
console.warn("Using cached description due to API error");
|
|
198
|
+
return this.nodeDescriptions[this.flow_id][nodeId];
|
|
199
|
+
}
|
|
200
|
+
return "";
|
|
201
|
+
}
|
|
202
|
+
},
|
|
203
|
+
async setNodeDescription(nodeId, description) {
|
|
204
|
+
try {
|
|
205
|
+
this.cacheNodeDescriptionDict(this.flow_id, nodeId, description);
|
|
206
|
+
const response = await axios.post("/node/description/", JSON.stringify(description), {
|
|
207
|
+
params: {
|
|
208
|
+
flow_id: this.flow_id,
|
|
209
|
+
node_id: nodeId
|
|
210
|
+
},
|
|
211
|
+
headers: {
|
|
212
|
+
"Content-Type": "application/json"
|
|
213
|
+
}
|
|
214
|
+
});
|
|
215
|
+
if (response.data.status === "success") {
|
|
216
|
+
console.log(response.data.message);
|
|
217
|
+
} else {
|
|
218
|
+
console.warn("Unexpected success response structure:", response.data);
|
|
219
|
+
}
|
|
220
|
+
} catch (error) {
|
|
221
|
+
if (error.response) {
|
|
222
|
+
console.error("API error:", error.response.data.message);
|
|
223
|
+
} else if (error.request) {
|
|
224
|
+
console.error("The request was made but no response was received");
|
|
225
|
+
} else {
|
|
226
|
+
console.error("Error", error.message);
|
|
227
|
+
}
|
|
228
|
+
throw error;
|
|
229
|
+
}
|
|
230
|
+
},
|
|
231
|
+
setCloseFunction(f) {
|
|
232
|
+
this.drawCloseFunction = f;
|
|
233
|
+
},
|
|
234
|
+
getSizeDataPreview() {
|
|
235
|
+
return this.size_data_preview;
|
|
236
|
+
},
|
|
237
|
+
setSizeDataPreview(newHeight) {
|
|
238
|
+
this.size_data_preview = newHeight;
|
|
239
|
+
},
|
|
240
|
+
toggleDrawer() {
|
|
241
|
+
console.log("toggleDrawer in column-store.ts");
|
|
242
|
+
if (this.isDrawerOpen && this.drawCloseFunction) {
|
|
243
|
+
this.pushNodeData();
|
|
244
|
+
}
|
|
245
|
+
this.isDrawerOpen = !this.isDrawerOpen;
|
|
246
|
+
},
|
|
247
|
+
pushNodeData() {
|
|
248
|
+
if (this.drawCloseFunction && !this.isRunning) {
|
|
249
|
+
this.drawCloseFunction();
|
|
250
|
+
this.drawCloseFunction = null;
|
|
251
|
+
}
|
|
252
|
+
},
|
|
253
|
+
openDrawer(close_function) {
|
|
254
|
+
console.log("openDrawer in column-store.ts");
|
|
255
|
+
if (this.isDrawerOpen) {
|
|
256
|
+
console.log("pushing data");
|
|
257
|
+
this.pushNodeData();
|
|
258
|
+
}
|
|
259
|
+
if (close_function) {
|
|
260
|
+
this.drawCloseFunction = close_function;
|
|
261
|
+
}
|
|
262
|
+
this.isDrawerOpen = true;
|
|
263
|
+
},
|
|
264
|
+
closeDrawer() {
|
|
265
|
+
this.isDrawerOpen = false;
|
|
266
|
+
if (this.drawCloseFunction) {
|
|
267
|
+
this.pushNodeData();
|
|
268
|
+
}
|
|
269
|
+
this.node_id = -1;
|
|
270
|
+
},
|
|
271
|
+
openAnalysisDrawer(close_function) {
|
|
272
|
+
console.log("openAnalysisDrawer in column-store.ts");
|
|
273
|
+
if (this.isAnalysisOpen) {
|
|
274
|
+
this.pushNodeData();
|
|
275
|
+
}
|
|
276
|
+
if (close_function) {
|
|
277
|
+
this.drawCloseFunction = close_function;
|
|
278
|
+
}
|
|
279
|
+
this.isAnalysisOpen = true;
|
|
280
|
+
},
|
|
281
|
+
closeAnalysisDrawer() {
|
|
282
|
+
this.isAnalysisOpen = false;
|
|
283
|
+
if (this.drawCloseFunction) {
|
|
284
|
+
console.log("closeDrawer in column-store.ts");
|
|
285
|
+
this.pushNodeData();
|
|
286
|
+
}
|
|
287
|
+
},
|
|
288
|
+
getDataTypes() {
|
|
289
|
+
return this.dataTypes;
|
|
290
|
+
},
|
|
291
|
+
setInputCode(newCode) {
|
|
292
|
+
this.inputCode = newCode;
|
|
293
|
+
},
|
|
294
|
+
showLogViewer() {
|
|
295
|
+
console.log("triggered show log viewer");
|
|
296
|
+
this.isShowingLogViewer = this.displayLogViewer;
|
|
297
|
+
},
|
|
298
|
+
hideLogViewer() {
|
|
299
|
+
this.isShowingLogViewer = false;
|
|
300
|
+
},
|
|
301
|
+
toggleLogViewer() {
|
|
302
|
+
console.log("triggered toggle log viewer");
|
|
303
|
+
this.isShowingLogViewer = !this.isShowingLogViewer;
|
|
304
|
+
},
|
|
305
|
+
getRunResult(flow_id) {
|
|
306
|
+
return this.runResults[flow_id] || null;
|
|
307
|
+
},
|
|
308
|
+
async getTableExample(flow_id, node_id) {
|
|
309
|
+
try {
|
|
310
|
+
const response = await axios.get("/node/data", {
|
|
311
|
+
params: { flow_id, node_id },
|
|
312
|
+
headers: { accept: "application/json" }
|
|
313
|
+
});
|
|
314
|
+
return response.data;
|
|
315
|
+
} catch (error) {
|
|
316
|
+
console.error("Error fetching table example:", error);
|
|
317
|
+
return null;
|
|
318
|
+
}
|
|
319
|
+
},
|
|
320
|
+
async getNodeData(node_id, useCache = true) {
|
|
321
|
+
if (this.node_id === node_id && useCache) {
|
|
322
|
+
if (this.nodeData) {
|
|
323
|
+
this.is_loaded = true;
|
|
324
|
+
return this.nodeData;
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
try {
|
|
328
|
+
this.setFlowIdAndNodeId(this.flow_id, node_id);
|
|
329
|
+
const response = await axios.get("/node", {
|
|
330
|
+
params: { flow_id: this.flow_id, node_id: this.node_id },
|
|
331
|
+
headers: { accept: "application/json" }
|
|
332
|
+
});
|
|
333
|
+
this.nodeData = response.data;
|
|
334
|
+
this.is_loaded = true;
|
|
335
|
+
this.node_exists = true;
|
|
336
|
+
return this.nodeData;
|
|
337
|
+
} catch (error) {
|
|
338
|
+
console.error("Error fetching node data:", error);
|
|
339
|
+
this.nodeData = null;
|
|
340
|
+
this.is_loaded = false;
|
|
341
|
+
this.node_exists = false;
|
|
342
|
+
return null;
|
|
343
|
+
}
|
|
344
|
+
},
|
|
345
|
+
async reloadCurrentNodeData() {
|
|
346
|
+
return this.getNodeData(this.node_id, false);
|
|
347
|
+
},
|
|
348
|
+
setFlowIdAndNodeId(flow_id, node_id) {
|
|
349
|
+
if (this.node_id === node_id && this.flow_id === flow_id) {
|
|
350
|
+
return;
|
|
351
|
+
}
|
|
352
|
+
console.log("Automatically pushing the node data ");
|
|
353
|
+
this.pushNodeData();
|
|
354
|
+
this.previous_node_id = this.node_id;
|
|
355
|
+
if (this.flow_id !== flow_id) {
|
|
356
|
+
this.setFlowId(flow_id);
|
|
357
|
+
}
|
|
358
|
+
this.node_id = node_id;
|
|
359
|
+
},
|
|
360
|
+
getCurrentNodeData() {
|
|
361
|
+
return this.nodeData;
|
|
362
|
+
},
|
|
363
|
+
doReset() {
|
|
364
|
+
this.is_loaded = false;
|
|
365
|
+
},
|
|
366
|
+
getVueFlowInstance() {
|
|
367
|
+
return this.vueFlowInstance;
|
|
368
|
+
},
|
|
369
|
+
getEditorNodeData() {
|
|
370
|
+
var _a2;
|
|
371
|
+
if (this.node_id) {
|
|
372
|
+
return (_a2 = this.vueFlowInstance) == null ? void 0 : _a2.findNode(String(this.node_id));
|
|
373
|
+
}
|
|
374
|
+
return null;
|
|
375
|
+
},
|
|
376
|
+
async fetchExpressionsOverview() {
|
|
377
|
+
try {
|
|
378
|
+
const response = await axios.get("/editor/expression_doc");
|
|
379
|
+
this.allExpressions = response.data;
|
|
380
|
+
return this.allExpressions;
|
|
381
|
+
} catch (error) {
|
|
382
|
+
console.error("Error fetching expressions overview:", error);
|
|
383
|
+
return [];
|
|
384
|
+
}
|
|
385
|
+
},
|
|
386
|
+
async getExpressionsOverview() {
|
|
387
|
+
if (this.allExpressions) {
|
|
388
|
+
return this.allExpressions;
|
|
389
|
+
} else {
|
|
390
|
+
return await this.fetchExpressionsOverview();
|
|
391
|
+
}
|
|
392
|
+
},
|
|
393
|
+
async updateSettingsDirectly(inputData) {
|
|
394
|
+
var _a2, _b;
|
|
395
|
+
try {
|
|
396
|
+
const node = (_a2 = this.vueFlowInstance) == null ? void 0 : _a2.findNode(String(this.node_id));
|
|
397
|
+
inputData.pos_x = node.position.x;
|
|
398
|
+
inputData.pos_y = node.position.y;
|
|
399
|
+
console.log("updating settings");
|
|
400
|
+
console.log("node", node);
|
|
401
|
+
const response = await axios.post("/update_settings/", inputData, {
|
|
402
|
+
params: {
|
|
403
|
+
node_type: node.data.component.__name
|
|
404
|
+
}
|
|
405
|
+
});
|
|
406
|
+
const downstreamNodeIds = await loadDownstreamNodeIds(this.flow_id, inputData.node_id);
|
|
407
|
+
downstreamNodeIds.map((nodeId) => {
|
|
408
|
+
this.validateNode(nodeId);
|
|
409
|
+
});
|
|
410
|
+
return response.data;
|
|
411
|
+
} catch (error) {
|
|
412
|
+
console.error("Error updating settings:", (_b = error.response) == null ? void 0 : _b.data);
|
|
413
|
+
throw error;
|
|
414
|
+
}
|
|
415
|
+
},
|
|
416
|
+
async updateSettings(inputData) {
|
|
417
|
+
var _a2, _b;
|
|
418
|
+
try {
|
|
419
|
+
const node = (_a2 = this.vueFlowInstance) == null ? void 0 : _a2.findNode(String(this.node_id));
|
|
420
|
+
inputData.value.pos_x = node.position.x;
|
|
421
|
+
inputData.value.pos_y = node.position.y;
|
|
422
|
+
console.log("updating settings");
|
|
423
|
+
console.log("node", node);
|
|
424
|
+
const response = await axios.post("/update_settings/", inputData.value, {
|
|
425
|
+
params: {
|
|
426
|
+
node_type: node.data.component.__name
|
|
427
|
+
}
|
|
428
|
+
});
|
|
429
|
+
const downstreamNodeIds = await loadDownstreamNodeIds(
|
|
430
|
+
this.flow_id,
|
|
431
|
+
inputData.value.node_id
|
|
432
|
+
);
|
|
433
|
+
downstreamNodeIds.map((nodeId) => {
|
|
434
|
+
this.validateNode(nodeId);
|
|
435
|
+
});
|
|
436
|
+
return response.data;
|
|
437
|
+
} catch (error) {
|
|
438
|
+
console.error("Error updating settings:", (_b = error.response) == null ? void 0 : _b.data);
|
|
439
|
+
throw error;
|
|
440
|
+
}
|
|
441
|
+
},
|
|
442
|
+
updateNodeDescription(nodeId, description) {
|
|
443
|
+
this.cacheNodeDescriptionDict(this.flow_id, nodeId, description);
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
});
|
|
447
|
+
const _hoisted_1 = { class: "popover-container" };
|
|
448
|
+
const _hoisted_2 = { key: 0 };
|
|
449
|
+
const _hoisted_3 = ["innerHTML"];
|
|
450
|
+
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
451
|
+
__name: "PopOver",
|
|
452
|
+
props: {
|
|
453
|
+
content: {
|
|
454
|
+
type: String,
|
|
455
|
+
required: true
|
|
456
|
+
},
|
|
457
|
+
title: {
|
|
458
|
+
type: String,
|
|
459
|
+
default: ""
|
|
460
|
+
},
|
|
461
|
+
placement: {
|
|
462
|
+
type: String,
|
|
463
|
+
default: "top"
|
|
464
|
+
},
|
|
465
|
+
minWidth: {
|
|
466
|
+
type: Number,
|
|
467
|
+
default: 100
|
|
468
|
+
},
|
|
469
|
+
zIndex: {
|
|
470
|
+
type: Number,
|
|
471
|
+
default: 9999
|
|
472
|
+
}
|
|
473
|
+
},
|
|
474
|
+
setup(__props) {
|
|
475
|
+
useCssVars((_ctx) => ({
|
|
476
|
+
"64450ce2": props.minWidth + "px"
|
|
477
|
+
}));
|
|
478
|
+
const visible = ref(false);
|
|
479
|
+
const referenceEl = ref(null);
|
|
480
|
+
const popoverEl = ref(null);
|
|
481
|
+
const props = __props;
|
|
482
|
+
const popoverStyle = ref({
|
|
483
|
+
top: "0px",
|
|
484
|
+
left: "0px",
|
|
485
|
+
zIndex: props.zIndex.toString()
|
|
486
|
+
});
|
|
487
|
+
const showPopover = () => {
|
|
488
|
+
visible.value = true;
|
|
489
|
+
nextTick(() => {
|
|
490
|
+
updatePosition();
|
|
491
|
+
});
|
|
492
|
+
};
|
|
493
|
+
const hidePopover = () => {
|
|
494
|
+
visible.value = false;
|
|
495
|
+
};
|
|
496
|
+
const updatePosition = () => {
|
|
497
|
+
if (!referenceEl.value || !popoverEl.value)
|
|
498
|
+
return;
|
|
499
|
+
const referenceRect = referenceEl.value.getBoundingClientRect();
|
|
500
|
+
const popoverRect = popoverEl.value.getBoundingClientRect();
|
|
501
|
+
const offset = 20;
|
|
502
|
+
let top2 = 0;
|
|
503
|
+
let left = 0;
|
|
504
|
+
switch (props.placement) {
|
|
505
|
+
case "top":
|
|
506
|
+
top2 = referenceRect.top - popoverRect.height - offset;
|
|
507
|
+
left = referenceRect.left + referenceRect.width / 2 - popoverRect.width / 2;
|
|
508
|
+
break;
|
|
509
|
+
case "bottom":
|
|
510
|
+
top2 = referenceRect.bottom + offset;
|
|
511
|
+
left = referenceRect.left + referenceRect.width / 2 - popoverRect.width / 2;
|
|
512
|
+
break;
|
|
513
|
+
case "left":
|
|
514
|
+
top2 = referenceRect.top + referenceRect.height / 2 - popoverRect.height / 2;
|
|
515
|
+
left = referenceRect.left - popoverRect.width - offset;
|
|
516
|
+
break;
|
|
517
|
+
case "right":
|
|
518
|
+
top2 = referenceRect.top + referenceRect.height / 2 - popoverRect.height / 2;
|
|
519
|
+
left = referenceRect.right + offset;
|
|
520
|
+
break;
|
|
521
|
+
}
|
|
522
|
+
const viewportWidth = window.innerWidth;
|
|
523
|
+
const viewportHeight = window.innerHeight;
|
|
524
|
+
if (left < 10)
|
|
525
|
+
left = 10;
|
|
526
|
+
if (left + popoverRect.width > viewportWidth - 10) {
|
|
527
|
+
left = viewportWidth - popoverRect.width - 10;
|
|
528
|
+
}
|
|
529
|
+
if (top2 < 10)
|
|
530
|
+
top2 = 10;
|
|
531
|
+
if (top2 + popoverRect.height > viewportHeight - 10) {
|
|
532
|
+
top2 = viewportHeight - popoverRect.height - 10;
|
|
533
|
+
}
|
|
534
|
+
popoverStyle.value = {
|
|
535
|
+
top: `${top2}px`,
|
|
536
|
+
left: `${left}px`,
|
|
537
|
+
zIndex: props.zIndex.toString()
|
|
538
|
+
};
|
|
539
|
+
};
|
|
540
|
+
onMounted(() => {
|
|
541
|
+
window.addEventListener("resize", () => {
|
|
542
|
+
if (visible.value) {
|
|
543
|
+
updatePosition();
|
|
544
|
+
}
|
|
545
|
+
});
|
|
546
|
+
});
|
|
547
|
+
return (_ctx, _cache) => {
|
|
548
|
+
return openBlock(), createElementBlock("div", _hoisted_1, [
|
|
549
|
+
createBaseVNode("div", {
|
|
550
|
+
ref_key: "referenceEl",
|
|
551
|
+
ref: referenceEl,
|
|
552
|
+
class: "popover-reference",
|
|
553
|
+
onMouseenter: showPopover,
|
|
554
|
+
onMouseleave: hidePopover
|
|
555
|
+
}, [
|
|
556
|
+
renderSlot(_ctx.$slots, "default", {}, void 0, true)
|
|
557
|
+
], 544),
|
|
558
|
+
visible.value ? (openBlock(), createBlock(Teleport, {
|
|
559
|
+
key: 0,
|
|
560
|
+
to: "body"
|
|
561
|
+
}, [
|
|
562
|
+
createBaseVNode("div", {
|
|
563
|
+
ref_key: "popoverEl",
|
|
564
|
+
ref: popoverEl,
|
|
565
|
+
style: normalizeStyle(popoverStyle.value),
|
|
566
|
+
class: normalizeClass(["popover", { "popover--left": props.placement === "left" }])
|
|
567
|
+
}, [
|
|
568
|
+
props.title !== "" ? (openBlock(), createElementBlock("h3", _hoisted_2, toDisplayString(props.title), 1)) : createCommentVNode("", true),
|
|
569
|
+
createBaseVNode("p", {
|
|
570
|
+
class: "content",
|
|
571
|
+
innerHTML: props.content
|
|
572
|
+
}, null, 8, _hoisted_3)
|
|
573
|
+
], 6)
|
|
574
|
+
])) : createCommentVNode("", true)
|
|
575
|
+
]);
|
|
576
|
+
};
|
|
577
|
+
}
|
|
578
|
+
});
|
|
579
|
+
const PopOver_vue_vue_type_style_index_0_scoped_e6f071d2_lang = "";
|
|
580
|
+
const PopOver = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-e6f071d2"]]);
|
|
2
581
|
let rangeFrom = [], rangeTo = [];
|
|
3
582
|
(() => {
|
|
4
583
|
let numbers = "lc,34,7n,7,7b,19,,,,2,,2,,,20,b,1c,l,g,,2t,7,2,6,2,2,,4,z,,u,r,2j,b,1m,9,9,,o,4,,9,,3,,5,17,3,3b,f,,w,1j,,,,4,8,4,,3,7,a,2,t,,1m,,,,2,4,8,,9,,a,2,q,,2,2,1l,,4,2,4,2,2,3,3,,u,2,3,,b,2,1l,,4,5,,2,4,,k,2,m,6,,,1m,,,2,,4,8,,7,3,a,2,u,,1n,,,,c,,9,,14,,3,,1l,3,5,3,,4,7,2,b,2,t,,1m,,2,,2,,3,,5,2,7,2,b,2,s,2,1l,2,,,2,4,8,,9,,a,2,t,,20,,4,,2,3,,,8,,29,,2,7,c,8,2q,,2,9,b,6,22,2,r,,,,,,1j,e,,5,,2,5,b,,10,9,,2u,4,,6,,2,2,2,p,2,4,3,g,4,d,,2,2,6,,f,,jj,3,qa,3,t,3,t,2,u,2,1s,2,,7,8,,2,b,9,,19,3,3b,2,y,,3a,3,4,2,9,,6,3,63,2,2,,1m,,,7,,,,,2,8,6,a,2,,1c,h,1r,4,1c,7,,,5,,14,9,c,2,w,4,2,2,,3,1k,,,2,3,,,3,1m,8,2,2,48,3,,d,,7,4,,6,,3,2,5i,1m,,5,ek,,5f,x,2da,3,3x,,2o,w,fe,6,2x,2,n9w,4,,a,w,2,28,2,7k,,3,,4,,p,2,5,,47,2,q,i,d,,12,8,p,b,1a,3,1c,,2,4,2,2,13,,1v,6,2,2,2,2,c,,8,,1b,,1f,,,3,2,2,5,2,,,16,2,8,,6m,,2,,4,,fn4,,kh,g,g,g,a6,2,gt,,6a,,45,5,1ae,3,,2,5,4,14,3,4,,4l,2,fx,4,ar,2,49,b,4w,,1i,f,1k,3,1d,4,2,2,1x,3,10,5,,8,1q,,c,2,1g,9,a,4,2,,2n,3,2,,,2,6,,4g,,3,8,l,2,1l,2,,,,,m,,e,7,3,5,5f,8,2,3,,,n,,29,,2,6,,,2,,,2,,2,6j,,2,4,6,2,,2,r,2,2d,8,2,,,2,2y,,,,2,6,,,2t,3,2,4,,5,77,9,,2,6t,,a,2,,,4,,40,4,2,2,4,,w,a,14,6,2,4,8,,9,6,2,3,1a,d,,2,ba,7,,6,,,2a,m,2,7,,2,,2,3e,6,3,,,2,,7,,,20,2,3,,,,9n,2,f0b,5,1n,7,t4,,1r,4,29,,f5k,2,43q,,,3,4,5,8,8,2,7,u,4,44,3,1iz,1j,4,1e,8,,e,,m,5,,f,11s,7,,h,2,7,,2,,5,79,7,c5,4,15s,7,31,7,240,5,gx7k,2o,3k,6o".split(",").map((s) => s ? parseInt(s, 36) : 1);
|
|
@@ -6649,8 +7228,8 @@ class DocView extends ContentView {
|
|
|
6649
7228
|
}
|
|
6650
7229
|
scrollIntoView(target) {
|
|
6651
7230
|
if (target.isSnapshot) {
|
|
6652
|
-
let
|
|
6653
|
-
this.view.scrollDOM.scrollTop =
|
|
7231
|
+
let ref2 = this.view.viewState.lineBlockAt(target.range.head);
|
|
7232
|
+
this.view.scrollDOM.scrollTop = ref2.top - target.yMargin;
|
|
6654
7233
|
this.view.scrollDOM.scrollLeft = target.xMargin;
|
|
6655
7234
|
return;
|
|
6656
7235
|
}
|
|
@@ -11258,8 +11837,8 @@ class EditorView {
|
|
|
11258
11837
|
*/
|
|
11259
11838
|
scrollSnapshot() {
|
|
11260
11839
|
let { scrollTop, scrollLeft } = this.scrollDOM;
|
|
11261
|
-
let
|
|
11262
|
-
return scrollIntoView$1.of(new ScrollTarget(EditorSelection.cursor(
|
|
11840
|
+
let ref2 = this.viewState.scrollAnchorAt(scrollTop);
|
|
11841
|
+
return scrollIntoView$1.of(new ScrollTarget(EditorSelection.cursor(ref2.from), "start", "start", ref2.top - scrollTop, scrollLeft, true));
|
|
11263
11842
|
}
|
|
11264
11843
|
/**
|
|
11265
11844
|
Enable or disable tab-focus mode, which disables key bindings
|
|
@@ -12352,8 +12931,8 @@ function rectangleFor(state, a, b) {
|
|
|
12352
12931
|
return ranges;
|
|
12353
12932
|
}
|
|
12354
12933
|
function absoluteColumn(view, x2) {
|
|
12355
|
-
let
|
|
12356
|
-
return
|
|
12934
|
+
let ref2 = view.coordsAtPos(view.viewport.from);
|
|
12935
|
+
return ref2 ? Math.round(Math.abs((ref2.left - x2) / view.defaultCharacterWidth)) : -1;
|
|
12357
12936
|
}
|
|
12358
12937
|
function getPos(view, event) {
|
|
12359
12938
|
let offset = view.posAtCoords({ x: event.clientX, y: event.clientY }, false);
|
|
@@ -22247,36 +22826,38 @@ var F = Object.assign(Object.assign({}, z), B), P = defineComponent({ name: "Vue
|
|
|
22247
22826
|
};
|
|
22248
22827
|
} }), T = P;
|
|
22249
22828
|
export {
|
|
22250
|
-
|
|
22251
|
-
|
|
22829
|
+
DefaultBufferLength as D,
|
|
22830
|
+
EditorView as E,
|
|
22252
22831
|
HighlightStyle as H,
|
|
22253
22832
|
IterMode as I,
|
|
22254
22833
|
LanguageSupport as L,
|
|
22255
22834
|
NodeSet as N,
|
|
22256
|
-
|
|
22835
|
+
PopOver as P,
|
|
22257
22836
|
RangeSetBuilder as R,
|
|
22258
|
-
T,
|
|
22837
|
+
Tree as T,
|
|
22259
22838
|
ViewPlugin as V,
|
|
22260
|
-
|
|
22839
|
+
Parser as a,
|
|
22261
22840
|
NodeType as b,
|
|
22262
|
-
|
|
22263
|
-
|
|
22264
|
-
|
|
22265
|
-
|
|
22266
|
-
|
|
22267
|
-
|
|
22841
|
+
NodeProp as c,
|
|
22842
|
+
syntaxTree as d,
|
|
22843
|
+
LRLanguage as e,
|
|
22844
|
+
indentNodeProp as f,
|
|
22845
|
+
delimitedIndent as g,
|
|
22846
|
+
foldNodeProp as h,
|
|
22268
22847
|
ifNotIn as i,
|
|
22269
|
-
|
|
22270
|
-
|
|
22271
|
-
|
|
22272
|
-
|
|
22273
|
-
|
|
22274
|
-
|
|
22275
|
-
|
|
22276
|
-
|
|
22277
|
-
|
|
22848
|
+
foldInside as j,
|
|
22849
|
+
completeFromList as k,
|
|
22850
|
+
NodeWeakMap as l,
|
|
22851
|
+
snippetCompletion as m,
|
|
22852
|
+
syntaxHighlighting as n,
|
|
22853
|
+
T as o,
|
|
22854
|
+
Decoration as p,
|
|
22855
|
+
EditorState as q,
|
|
22856
|
+
autocompletion as r,
|
|
22278
22857
|
styleTags as s,
|
|
22279
22858
|
tags as t,
|
|
22280
|
-
|
|
22281
|
-
|
|
22859
|
+
useNodeStore as u,
|
|
22860
|
+
keymap as v,
|
|
22861
|
+
acceptCompletion as w,
|
|
22862
|
+
indentMore as x
|
|
22282
22863
|
};
|
flowfile/web/static/index.html
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
|
|
13
13
|
<!-- Material Icons -->
|
|
14
14
|
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
|
|
15
|
-
<script type="module" crossorigin src="/assets/index-
|
|
15
|
+
<script type="module" crossorigin src="/assets/index-e235a8bc.js"></script>
|
|
16
16
|
<link rel="stylesheet" href="/assets/index-681a3ed0.css">
|
|
17
17
|
</head>
|
|
18
18
|
<body>
|