n8n-editor-ui 1.81.2 → 1.82.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/biome.jsonc +2 -2
- package/dist/assets/{AnnotationTagsDropdown.ee.vue_vue_type_script_setup_true_lang-C9QSjwx2.js → AnnotationTagsDropdown.ee.vue_vue_type_script_setup_true_lang-S6sC2rqC.js} +1 -1
- package/dist/assets/{AuthView-Ckt8JqkO.js → AuthView-DhLPVf9-.js} +2 -2
- package/dist/assets/{CanvasChat-oFfeuF_m.css → CanvasChat-CSLR5tKe.css} +67 -67
- package/dist/assets/{CanvasChat-Cy1m21Qr.js → CanvasChat-DjKTx2jN.js} +7 -7
- package/dist/assets/{ChangePasswordView-AoOsRhn6.js → ChangePasswordView-CcEYn8N_.js} +3 -3
- package/dist/assets/CollectionParameter-BzV9DuAR.js +4 -0
- package/dist/assets/{ConcurrentExecutionsHeader-Ov5gmvZv.js → ConcurrentExecutionsHeader-DEuxxBOa.js} +2 -2
- package/dist/assets/{CredentialsView-CtrYJkBd.js → CredentialsView-CyBNC9MS.js} +6 -6
- package/dist/assets/{ErrorView-DQ6IxeMW.js → ErrorView-k2iqIjfF.js} +1 -1
- package/dist/assets/{ExecutionsView-CjAi5MPS.js → ExecutionsView-B3G-SDHi.js} +6 -6
- package/dist/assets/{FileSaver.min-BCizZpyV.js → FileSaver.min-C3y-t-w8.js} +1 -1
- package/dist/assets/{FixedCollectionParameter-BReT5syB.css → FixedCollectionParameter-BATXrzXI.css} +18 -18
- package/dist/assets/{FixedCollectionParameter-hSKWl3Cr.js → FixedCollectionParameter-_Y9rxAqw.js} +2 -2
- package/dist/assets/{ForgotMyPasswordView-bgCElxPF.js → ForgotMyPasswordView-DphAOWHQ.js} +3 -3
- package/dist/assets/{Logo-SggscMOj.js → Logo-DUrZye2i.js} +1 -1
- package/dist/assets/{MainHeader-ByRLGpW_.css → MainHeader-CX-ZfeKE.css} +34 -40
- package/dist/assets/{MainHeader-C9IgyjLi.js → MainHeader-PG8BBJpt.js} +112 -97
- package/dist/assets/{MainSidebar-BAfxFkJz.js → MainSidebar-9NvHWe8s.js} +3 -3
- package/dist/assets/{MainSidebar-BQVC8zBU.css → MainSidebar-DULRx8tG.css} +2 -2
- package/dist/assets/{NodeCreation-CGPBWOsp.js → NodeCreation-B5IA4OSp.js} +4 -4
- package/dist/assets/{NodeCreator-CfRdwsEP.js → NodeCreator-Do-c2_pi.js} +4 -4
- package/dist/assets/{NodeDetailsView-BaeRsNfe.js → NodeDetailsView-B4RWpeXL.js} +43 -26
- package/dist/assets/{NodeDetailsView-C2CtoATD.css → NodeDetailsView-mr-1IzdH.css} +22 -22
- package/dist/assets/{NodeView-BIkAV11y.js → NodeView-DLAZbogk.js} +28 -18
- package/dist/assets/{ProjectCardBadge-DbDv6sZf.js → ProjectCardBadge-Cd22Jp5H.js} +1 -1
- package/dist/assets/{ProjectCreateResource-B7vjvB0g.js → ProjectCreateResource-CNZoR3aH.js} +1 -1
- package/dist/assets/{ProjectHeader--DY7lR41.js → ProjectHeader-jjyjO9Sn.js} +31 -12
- package/dist/assets/{ProjectSettings-DBkXXbnf.js → ProjectSettings-CNPBR8Py.js} +3 -3
- package/dist/assets/{PushConnectionTracker.vue_vue_type_script_setup_true_lang-BmDVjPzU.js → PushConnectionTracker.vue_vue_type_script_setup_true_lang-DBLwE_Te.js} +2 -2
- package/dist/assets/{ResourcesListLayout-BvDRT_NT.js → ResourcesListLayout-7x3qhzgO.js} +31 -27
- package/dist/assets/{ResourcesListLayout-GXGxZsS7.css → ResourcesListLayout-CrglsyJJ.css} +28 -25
- package/dist/assets/{RunDataAi-CTqCC4qP.js → RunDataAi-NsV225aR.js} +95 -81
- package/dist/assets/{RunDataJson-Da828ryU.js → RunDataJson-Cz0pyx-c.js} +12 -12
- package/dist/assets/{RunDataJsonActions-BJTF9rnw.js → RunDataJsonActions-pi0-gz1O.js} +2 -2
- package/dist/assets/{RunDataSearch-BnOB6pq1.js → RunDataSearch-CdoVJUy2.js} +1 -1
- package/dist/assets/{RunDataTable-O4pMxSL3.js → RunDataTable-BlfFPz_o.js} +2 -2
- package/dist/assets/{SamlOnboarding-_ryt8W2b.js → SamlOnboarding-DrHEUeao.js} +3 -3
- package/dist/assets/{SettingsApiView-BB3Lm3bi.css → SettingsApiView-BF29ifnH.css} +17 -7
- package/dist/assets/{SettingsApiView-DscvMUm4.js → SettingsApiView-xOx9zvK8.js} +96 -12
- package/dist/assets/{SettingsCommunityNodesView-BwQqFFul.js → SettingsCommunityNodesView-DJdg3rwD.js} +5 -5
- package/dist/assets/{SettingsExternalSecrets-Bns3YFMo.js → SettingsExternalSecrets-BawxcYEz.js} +1 -1
- package/dist/assets/{SettingsLdapView-C4z8TThS.js → SettingsLdapView-UP-yLJR0.js} +1 -1
- package/dist/assets/{SettingsLogStreamingView-CeddPL5W.js → SettingsLogStreamingView-BI6cv-3k.js} +1 -1
- package/dist/assets/{SettingsPersonalView-T66EcUl1.js → SettingsPersonalView-T_Gv_CP4.js} +1 -1
- package/dist/assets/{SettingsSourceControl-B2g48mBg.js → SettingsSourceControl-b35BPriM.js} +1 -1
- package/dist/assets/{SettingsSso-DtJRjXuJ.js → SettingsSso-Cv560JhN.js} +1 -1
- package/dist/assets/{SettingsUsageAndPlan-B5DEUrT3.css → SettingsUsageAndPlan-Cul4YcIk.css} +3 -3
- package/dist/assets/{SettingsUsageAndPlan-DcEfsK15.js → SettingsUsageAndPlan-vdhHrfLx.js} +2 -2
- package/dist/assets/{SettingsUsersView-CiRUNOx8.js → SettingsUsersView-fOw0vUke.js} +1 -1
- package/dist/assets/{SettingsView-CMGmeLhf.js → SettingsView-DP7tEJ5g.js} +1 -1
- package/dist/assets/{SetupView-pCvp7JLT.js → SetupView-A_5QHzjg.js} +3 -3
- package/dist/assets/{SetupWorkflowCredentialsButton-B_Xu8nk4.js → SetupWorkflowCredentialsButton-BxKYo82D.js} +1 -1
- package/dist/assets/{SetupWorkflowFromTemplateView-wSwqXRvb.js → SetupWorkflowFromTemplateView-lItls2qU.js} +3 -3
- package/dist/assets/{SigninView-CcdkQAYx.js → SigninView-DCSGKzQW.js} +3 -3
- package/dist/assets/{SignoutView-BRcA6k7Y.js → SignoutView-DjLzc_dB.js} +1 -1
- package/dist/assets/{SignupView-B7mxGyr_.js → SignupView-Bmc7voE4.js} +3 -3
- package/dist/assets/{TemplateDetails-CrV-sqws.js → TemplateDetails-CNDlIU68.js} +1 -1
- package/dist/assets/{TemplateList-DeoFPe1T.js → TemplateList-Bd2BANIh.js} +1 -1
- package/dist/assets/{TemplatesCollectionView-Ds6Reoqk.js → TemplatesCollectionView-BtCb9-G2.js} +5 -5
- package/dist/assets/{TemplatesSearchView-DKRqKDsz.js → TemplatesSearchView-uzkWuDz-.js} +3 -3
- package/dist/assets/{TemplatesView-CvANPrac.js → TemplatesView-zaUOfZH6.js} +1 -1
- package/dist/assets/{TemplatesWorkflowView-DqLpZX3Y.js → TemplatesWorkflowView-C-9rF9ZV.js} +5 -5
- package/dist/assets/{TestDefinitionEditView-n-k2EViv.js → TestDefinitionEditView-Dwc43mWu.js} +316 -446
- package/dist/assets/{TestDefinitionEditView-B-ShDvcb.css → TestDefinitionEditView-P_NZr18p.css} +54 -237
- package/dist/assets/{TestDefinitionListView-2dTaUcPb.js → TestDefinitionListView-CerTQbEg.js} +29 -35
- package/dist/assets/{TestDefinitionListView-DQQJ8Oqf.css → TestDefinitionListView-Di-Edppe.css} +5 -5
- package/dist/assets/{TestDefinitionNewView-D9TlngIG.js → TestDefinitionNewView-B6G7zC8e.js} +2 -2
- package/dist/assets/{TestDefinitionRootView-DyYcRvES.js → TestDefinitionRootView-BtnW_v0S.js} +1 -1
- package/dist/assets/{VariablesView-u3Zaa4Dx.js → VariablesView-BwOp_rAK.js} +6 -6
- package/dist/assets/{VariablesView-0Eu4NnUq.css → VariablesView-CbTLdNwU.css} +10 -10
- package/dist/assets/{WorkerView-CjhMC5C9.js → WorkerView-zJQ3m1UQ.js} +7 -7
- package/dist/assets/{WorkflowActivator-CDtN9xyL.js → WorkflowActivator-ByyZSmam.js} +2 -2
- package/dist/assets/{WorkflowExecutionsInfoAccordion-dNND3XQ1.js → WorkflowExecutionsInfoAccordion-By2qBGv3.js} +1 -1
- package/dist/assets/{WorkflowExecutionsLandingPage-C5QEDyTb.js → WorkflowExecutionsLandingPage-Dv9pB-gw.js} +2 -2
- package/dist/assets/{WorkflowExecutionsPreview-CXwWU4Da.js → WorkflowExecutionsPreview-B95KC_nD.js} +6 -6
- package/dist/assets/{WorkflowExecutionsView-YzQhE6BJ.js → WorkflowExecutionsView-BlrNNbyH.js} +7 -7
- package/dist/assets/{WorkflowHistory-DwNBPKKC.js → WorkflowHistory-BAWH5OhJ.js} +3 -3
- package/dist/assets/{WorkflowOnboardingView-B-ZvDAJm.js → WorkflowOnboardingView-C7H4P9fv.js} +1 -1
- package/dist/assets/{WorkflowPreview-q-thWWZZ.js → WorkflowPreview-B4gIeMU5.js} +1 -1
- package/dist/assets/{WorkflowsView-Dc4DNgGT.css → WorkflowsView-JN0Hvhvt.css} +323 -26
- package/dist/assets/{WorkflowsView-PSsz5TRG.js → WorkflowsView-WiMvvjrZ.js} +633 -272
- package/dist/assets/{easyAiWorkflowUtils-KW1Ht6j8.js → easyAiWorkflowUtils-K9DVRQP8.js} +1 -1
- package/dist/assets/{global-link-actions-DRfLF4y6.js → global-link-actions-B95GMIG5.js} +1 -1
- package/dist/assets/{import-curl-pNf9q0qQ.js → import-curl-DUxX-cV3.js} +1 -1
- package/dist/assets/{index-C06tkpld.js → index-BGYw7Tle.js} +3390 -3351
- package/dist/assets/{index-CV2sFqhR.js → index-CZL3Jl0P.js} +1 -1
- package/dist/assets/{index-CKK_xS1q.css → index-DvUG3hgI.css} +355 -148
- package/dist/assets/{pickBy-CMtHkGeG.js → pickBy-e-2Qz7NU.js} +1 -1
- package/dist/assets/{pushConnection.store-BqZhZ7-T.js → pushConnection.store-BGGIKcjm.js} +1 -1
- package/dist/assets/{templateActions-D6RFtMCF.js → templateActions-DV-GKWdP.js} +1 -1
- package/dist/assets/{useBeforeUnload-BuZ-l9nI.js → useBeforeUnload-C-AtZLTg.js} +1 -1
- package/dist/assets/{useCanvasMapping-Bb0rYy8s.css → useCanvasMapping-CkNBF2SE.css} +184 -45
- package/dist/assets/{useCanvasMapping-B2Rx4tNy.js → useCanvasMapping-Hz5gCELZ.js} +4252 -279
- package/dist/assets/{useCanvasOperations-C-zV2Jxd.js → useCanvasOperations-DvuQ2UqW.js} +219 -21
- package/dist/assets/{useExecutionDebugging-CLBfRoGl.js → useExecutionDebugging-rI6MFxnv.js} +1 -1
- package/dist/assets/{useExecutionHelpers-7L4-5LnP.js → useExecutionHelpers-DQskduD9.js} +1 -1
- package/dist/assets/{useImportCurlCommand-Cbk6CGT_.js → useImportCurlCommand-CBugVIsK.js} +2 -2
- package/dist/assets/{usePinnedData-Hq06xPoo.js → usePinnedData-DEotvVuQ.js} +1 -1
- package/dist/assets/{usePushConnection-QnDVQ8As.js → usePushConnection-XtMvldec.js} +4 -4
- package/dist/assets/{useRunWorkflow-BJon34Vp.js → useRunWorkflow-CPV3na7d.js} +193 -18
- package/dist/assets/{useTestDefinitionForm-C0uFCVbQ.js → useTestDefinitionForm-ClopiqsS.js} +1 -1
- package/dist/assets/{useWorkflowActivate-1kRXyIJ4.js → useWorkflowActivate-Dlae1S8s.js} +1 -1
- package/dist/index.html +2 -2
- package/package.json +1 -1
- package/tsconfig.json +8 -12
- package/vite.config.mts +17 -16
- package/dist/assets/CollectionParameter-CgyeAR1l.js +0 -4
- /package/dist/{public/tree-sitter-bash.wasm → tree-sitter-bash.wasm} +0 -0
- /package/dist/{public/tree-sitter.wasm → tree-sitter.wasm} +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { c as capitalize, u as usePinnedData } from "./usePinnedData-
|
|
1
|
+
import { dT as createCompounder, dU as SetCache, dV as arrayIncludes, dW as cacheHas, dX as baseRest, dY as isArrayLikeObject, dZ as baseFlatten, bi as NodeConnectionType, bL as CanvasConnectionMode, d_ as isValidCanvasConnectionMode, bM as isValidNodeConnectionType, bl as v4, d$ as CORE_NODES_CATEGORY, e0 as DEFAULT_SUBCATEGORY, p as useSettingsStore, e1 as AI_TRANSFORM_NODE_TYPE, bb as AI_SUBCATEGORY, bc as AI_CATEGORY_AGENTS, e2 as sortBy, c_ as i18n, e3 as AI_CATEGORY_OTHER_TOOLS, e4 as SEND_AND_WAIT_OPERATION, e5 as HUMAN_IN_THE_LOOP_CATEGORY, bp as useNodeTypesStore, aN as useTemplatesStore, e6 as AI_NODE_CREATOR_VIEW, e7 as AI_OTHERS_NODE_CREATOR_VIEW, e8 as AI_CATEGORY_DOCUMENT_LOADERS, e9 as AI_CATEGORY_LANGUAGE_MODELS, ea as AI_CATEGORY_MEMORY, eb as AI_CATEGORY_OUTPUTPARSER, ec as AI_CATEGORY_RETRIEVERS, ed as AI_CATEGORY_TEXT_SPLITTERS, ee as AI_CATEGORY_TOOLS, ef as AI_WORKFLOW_TOOL_LANGCHAIN_NODE_TYPE, eg as AI_CODE_TOOL_LANGCHAIN_NODE_TYPE, eh as AI_CATEGORY_EMBEDDING, ei as AI_CATEGORY_VECTOR_STORES, ej as AI_UNCATEGORIZED_CATEGORY, ek as TRIGGER_NODE_CREATOR_VIEW, el as MANUAL_TRIGGER_NODE_TYPE, em as WEBHOOK_NODE_TYPE, en as EMAIL_IMAP_NODE_TYPE, eo as SCHEDULE_TRIGGER_NODE_TYPE, ep as FORM_TRIGGER_NODE_TYPE, dk as EXECUTE_WORKFLOW_TRIGGER_NODE_TYPE, b8 as CHAT_TRIGGER_NODE_TYPE, eq as OTHER_TRIGGER_NODES_SUBCATEGORY, er as REGULAR_NODE_CREATOR_VIEW, es as RSS_READ_NODE_TYPE, et as EMAIL_SEND_NODE_TYPE, eu as TRANSFORM_DATA_SUBCATEGORY, ev as FILTER_NODE_TYPE, ew as REMOVE_DUPLICATES_NODE_TYPE, ex as SPLIT_OUT_NODE_TYPE, ey as LIMIT_NODE_TYPE, ez as SUMMARIZE_NODE_TYPE, eA as AGGREGATE_NODE_TYPE, eB as MERGE_NODE_TYPE, eC as HTML_NODE_TYPE, eD as MARKDOWN_NODE_TYPE, eE as XML_NODE_TYPE, eF as CRYPTO_NODE_TYPE, eG as EXTRACT_FROM_FILE_NODE_TYPE, eH as CONVERT_TO_FILE_NODE_TYPE, eI as COMPRESSION_NODE_TYPE, eJ as EDIT_IMAGE_NODE_TYPE, eK as FLOWS_CONTROL_SUBCATEGORY, eL as IF_NODE_TYPE, eM as SPLIT_IN_BATCHES_NODE_TYPE, eN as HELPERS_SUBCATEGORY, eO as HTTP_REQUEST_NODE_TYPE, eP as CODE_NODE_TYPE, eQ as HITL_SUBCATEGORY, g as useI18n, bd as AI_CATEGORY_CHAINS, eR as SET_NODE_TYPE, eS as DATETIME_NODE_TYPE, S as defineStore, r as ref, q as computed, a0 as useCanvasStore, eT as AI_CATEGORY_ROOT_NODES, z as nextTick, be as AI_CODE_NODE_TYPE, eU as AI_TRANSFORM_NODE_TYPE$1, T as STORES, U as useWorkflowsStore, as as useNDVStore, L as useUIStore, bK as NODE_CREATOR_OPEN_SOURCES, eV as isVueFlowConnection, bf as getNodeInputs, eW as CUSTOM_API_CALL_KEY, aU as useExternalHooks, ak as useTelemetry, $ as useRootStore, bv as useCredentialsStore, by as useHistoryStore, E as useTagsStore, at as useExecutionsStore, a2 as useProjectsStore, a as useToast, a5 as useWorkflowHelpers, bq as useNodeHelpers, b7 as useClipboard, eX as MoveNodeCommand, eY as RenameNodeCommand, ds as AddConnectionCommand, du as RemoveNodeCommand, aC as STICKY_NODE_TYPE, dH as useDataSchema, eZ as NODE_SIZE, e_ as GRID_SIZE, dv as AddNodeCommand, e$ as getNodeParameters, f0 as getNewNodePosition, f1 as DEFAULT_NODE_SIZE, f2 as CONFIGURATION_NODE_SIZE, bg as getConnectionTypes, bh as getNodeOutputs, f3 as generateOffsets, f4 as CONFIGURABLE_NODE_SIZE, f5 as PUSH_NODES_OFFSET, dt as RemoveConnectionCommand, f6 as UPDATE_WEBHOOK_ID_NODE_TYPES, de as generateNodesGraph, a9 as EnterpriseEditionFeature, bV as deepCopy, f7 as isPresent } from "./index-BGYw7Tle.js";
|
|
2
|
+
import { c as capitalize, u as usePinnedData } from "./usePinnedData-DEotvVuQ.js";
|
|
3
3
|
var camelCase = createCompounder(function(result, word, index) {
|
|
4
4
|
word = word.toLowerCase();
|
|
5
5
|
return result + (index ? capitalize(word) : word);
|
|
@@ -199,6 +199,194 @@ function insertSpacersBetweenEndpoints(endpoints, requiredEndpointsCount = 0, mi
|
|
|
199
199
|
}
|
|
200
200
|
return endpointsWithSpacers;
|
|
201
201
|
}
|
|
202
|
+
const SEQUENTIAL_BONUS = 60;
|
|
203
|
+
const SEPARATOR_BONUS = 30;
|
|
204
|
+
const CAMEL_BONUS = 30;
|
|
205
|
+
const FIRST_LETTER_BONUS = 15;
|
|
206
|
+
const LEADING_LETTER_PENALTY = -20;
|
|
207
|
+
const MAX_LEADING_LETTER_PENALTY = -200;
|
|
208
|
+
const UNMATCHED_LETTER_PENALTY = -5;
|
|
209
|
+
function fuzzyMatchSimple(pattern, target) {
|
|
210
|
+
let patternIdx = 0;
|
|
211
|
+
let strIdx = 0;
|
|
212
|
+
while (patternIdx < pattern.length && strIdx < target.length) {
|
|
213
|
+
const patternChar = pattern.charAt(patternIdx).toLowerCase();
|
|
214
|
+
const targetChar = target.charAt(strIdx).toLowerCase();
|
|
215
|
+
if (patternChar === targetChar) {
|
|
216
|
+
patternIdx++;
|
|
217
|
+
}
|
|
218
|
+
++strIdx;
|
|
219
|
+
}
|
|
220
|
+
return pattern.length !== 0 && target.length !== 0 && patternIdx === pattern.length;
|
|
221
|
+
}
|
|
222
|
+
function fuzzyMatchRecursive(pattern, target, patternCurIndex, targetCurrIndex, targetMatches, matches, maxMatches, nextMatch, recursionCount, recursionLimit) {
|
|
223
|
+
let outScore = 0;
|
|
224
|
+
if (++recursionCount >= recursionLimit) {
|
|
225
|
+
return { matched: false, outScore };
|
|
226
|
+
}
|
|
227
|
+
if (patternCurIndex === pattern.length || targetCurrIndex === target.length) {
|
|
228
|
+
return { matched: false, outScore };
|
|
229
|
+
}
|
|
230
|
+
let recursiveMatch = false;
|
|
231
|
+
let bestRecursiveMatches = [];
|
|
232
|
+
let bestRecursiveScore = 0;
|
|
233
|
+
let firstMatch = true;
|
|
234
|
+
while (patternCurIndex < pattern.length && targetCurrIndex < target.length) {
|
|
235
|
+
if (pattern[patternCurIndex].toLowerCase() === target[targetCurrIndex].toLowerCase()) {
|
|
236
|
+
if (nextMatch >= maxMatches) {
|
|
237
|
+
return { matched: false, outScore };
|
|
238
|
+
}
|
|
239
|
+
if (firstMatch && targetMatches) {
|
|
240
|
+
matches = [...targetMatches];
|
|
241
|
+
firstMatch = false;
|
|
242
|
+
}
|
|
243
|
+
const recursiveMatches = [];
|
|
244
|
+
const recursiveResult = fuzzyMatchRecursive(
|
|
245
|
+
pattern,
|
|
246
|
+
target,
|
|
247
|
+
patternCurIndex,
|
|
248
|
+
targetCurrIndex + 1,
|
|
249
|
+
matches,
|
|
250
|
+
recursiveMatches,
|
|
251
|
+
maxMatches,
|
|
252
|
+
nextMatch,
|
|
253
|
+
recursionCount,
|
|
254
|
+
recursionLimit
|
|
255
|
+
);
|
|
256
|
+
const recursiveScore = recursiveResult.outScore;
|
|
257
|
+
if (recursiveResult.matched) {
|
|
258
|
+
if (!recursiveMatch || recursiveScore > bestRecursiveScore) {
|
|
259
|
+
bestRecursiveMatches = [...recursiveMatches];
|
|
260
|
+
bestRecursiveScore = recursiveScore;
|
|
261
|
+
}
|
|
262
|
+
recursiveMatch = true;
|
|
263
|
+
}
|
|
264
|
+
matches[nextMatch++] = targetCurrIndex;
|
|
265
|
+
++patternCurIndex;
|
|
266
|
+
}
|
|
267
|
+
++targetCurrIndex;
|
|
268
|
+
}
|
|
269
|
+
const matched = patternCurIndex === pattern.length;
|
|
270
|
+
if (matched) {
|
|
271
|
+
outScore = 100;
|
|
272
|
+
if (!target.toLowerCase().startsWith("n8n")) {
|
|
273
|
+
let penalty = LEADING_LETTER_PENALTY * matches[0];
|
|
274
|
+
penalty = penalty < MAX_LEADING_LETTER_PENALTY ? MAX_LEADING_LETTER_PENALTY : penalty;
|
|
275
|
+
outScore += penalty;
|
|
276
|
+
}
|
|
277
|
+
const unmatched = target.length - nextMatch;
|
|
278
|
+
outScore += UNMATCHED_LETTER_PENALTY * unmatched;
|
|
279
|
+
for (let i = 0; i < nextMatch; i++) {
|
|
280
|
+
const currIdx = matches[i];
|
|
281
|
+
if (i > 0) {
|
|
282
|
+
const prevIdx = matches[i - 1];
|
|
283
|
+
if (currIdx === prevIdx + 1) {
|
|
284
|
+
outScore += SEQUENTIAL_BONUS;
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
if (currIdx > 0) {
|
|
288
|
+
const neighbor = target[currIdx - 1];
|
|
289
|
+
const curr = target[currIdx];
|
|
290
|
+
if (neighbor !== neighbor.toUpperCase() && curr !== curr.toLowerCase()) {
|
|
291
|
+
outScore += CAMEL_BONUS;
|
|
292
|
+
}
|
|
293
|
+
const isNeighbourSeparator = neighbor === "_" || neighbor === " ";
|
|
294
|
+
if (isNeighbourSeparator) {
|
|
295
|
+
outScore += SEPARATOR_BONUS;
|
|
296
|
+
}
|
|
297
|
+
} else {
|
|
298
|
+
outScore += FIRST_LETTER_BONUS;
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
if (recursiveMatch && (!matched || bestRecursiveScore > outScore)) {
|
|
302
|
+
matches = [...bestRecursiveMatches];
|
|
303
|
+
outScore = bestRecursiveScore;
|
|
304
|
+
return { matched: true, outScore };
|
|
305
|
+
} else if (matched) {
|
|
306
|
+
return { matched: true, outScore };
|
|
307
|
+
} else {
|
|
308
|
+
return { matched: false, outScore };
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
return { matched: false, outScore };
|
|
312
|
+
}
|
|
313
|
+
function fuzzyMatch(pattern, target) {
|
|
314
|
+
const recursionCount = 0;
|
|
315
|
+
const recursionLimit = 5;
|
|
316
|
+
const matches = [];
|
|
317
|
+
const maxMatches = 256;
|
|
318
|
+
return fuzzyMatchRecursive(
|
|
319
|
+
pattern,
|
|
320
|
+
target,
|
|
321
|
+
0,
|
|
322
|
+
0,
|
|
323
|
+
null,
|
|
324
|
+
matches,
|
|
325
|
+
maxMatches,
|
|
326
|
+
0,
|
|
327
|
+
recursionCount,
|
|
328
|
+
recursionLimit
|
|
329
|
+
);
|
|
330
|
+
}
|
|
331
|
+
function getValue(obj, prop) {
|
|
332
|
+
if (obj.hasOwnProperty(prop)) {
|
|
333
|
+
return obj[prop];
|
|
334
|
+
}
|
|
335
|
+
const segments = prop.split(".");
|
|
336
|
+
let result = obj;
|
|
337
|
+
let i = 0;
|
|
338
|
+
while (result && i < segments.length) {
|
|
339
|
+
const key = segments[i];
|
|
340
|
+
result = result[key];
|
|
341
|
+
i++;
|
|
342
|
+
}
|
|
343
|
+
return result;
|
|
344
|
+
}
|
|
345
|
+
function sublimeSearch(filter, data, keys) {
|
|
346
|
+
const results = data.reduce((accu, item) => {
|
|
347
|
+
let values = [];
|
|
348
|
+
keys.forEach(({ key, weight }) => {
|
|
349
|
+
const value = getValue(item, key);
|
|
350
|
+
if (Array.isArray(value)) {
|
|
351
|
+
values = values.concat(value.map((v) => ({ value: v, weight })));
|
|
352
|
+
} else if (typeof value === "string") {
|
|
353
|
+
values.push({
|
|
354
|
+
value,
|
|
355
|
+
weight
|
|
356
|
+
});
|
|
357
|
+
}
|
|
358
|
+
});
|
|
359
|
+
const itemMatch = values.reduce(
|
|
360
|
+
(result, { value, weight }) => {
|
|
361
|
+
if (!fuzzyMatchSimple(filter, value)) {
|
|
362
|
+
return result;
|
|
363
|
+
}
|
|
364
|
+
const match = fuzzyMatch(filter, value);
|
|
365
|
+
match.outScore *= weight;
|
|
366
|
+
const { matched, outScore } = match;
|
|
367
|
+
if (!result && matched) {
|
|
368
|
+
return match;
|
|
369
|
+
}
|
|
370
|
+
if (matched && result && outScore > result.outScore) {
|
|
371
|
+
return match;
|
|
372
|
+
}
|
|
373
|
+
return result;
|
|
374
|
+
},
|
|
375
|
+
null
|
|
376
|
+
);
|
|
377
|
+
if (itemMatch) {
|
|
378
|
+
accu.push({
|
|
379
|
+
score: itemMatch.outScore,
|
|
380
|
+
item
|
|
381
|
+
});
|
|
382
|
+
}
|
|
383
|
+
return accu;
|
|
384
|
+
}, []);
|
|
385
|
+
results.sort((a, b) => {
|
|
386
|
+
return b.score - a.score;
|
|
387
|
+
});
|
|
388
|
+
return results;
|
|
389
|
+
}
|
|
202
390
|
const SPLIT_LOWER_UPPER_RE = new RegExp("([\\p{Ll}\\d])(\\p{Lu})", "gu");
|
|
203
391
|
const SPLIT_UPPER_UPPER_RE = new RegExp("(\\p{Lu})([\\p{Lu}][\\p{Ll}])", "gu");
|
|
204
392
|
const SPLIT_SEPARATE_NUMBER_RE = new RegExp("(\\d)\\p{Ll}|(\\p{L})\\d", "u");
|
|
@@ -791,7 +979,7 @@ function RegularView(nodes) {
|
|
|
791
979
|
// - add "HITL" to the "categories" property of the node's codex
|
|
792
980
|
// - add "HITL": ["Human in the Loop"] to the "subcategories" property of the node's codex
|
|
793
981
|
// node has to have the "sendAndWait" operation, if a new operation needs to be included here:
|
|
794
|
-
// - update getHumanInTheLoopActions in packages/editor-ui/src/components/Node/NodeCreator/Modes/NodesMode.vue
|
|
982
|
+
// - update getHumanInTheLoopActions in packages/frontend/editor-ui/src/components/Node/NodeCreator/Modes/NodesMode.vue
|
|
795
983
|
{
|
|
796
984
|
type: "subcategory",
|
|
797
985
|
key: HITL_SUBCATEGORY,
|
|
@@ -1639,7 +1827,9 @@ function useCanvasOperations({ router }) {
|
|
|
1639
1827
|
const newPosition = [position.x, position.y];
|
|
1640
1828
|
workflowsStore.setNodePositionById(id, newPosition);
|
|
1641
1829
|
if (trackHistory) {
|
|
1642
|
-
historyStore.pushCommandToUndo(
|
|
1830
|
+
historyStore.pushCommandToUndo(
|
|
1831
|
+
new MoveNodeCommand(node.name, oldPosition, newPosition, Date.now())
|
|
1832
|
+
);
|
|
1643
1833
|
}
|
|
1644
1834
|
}
|
|
1645
1835
|
function revertUpdateNodePosition(nodeName, position) {
|
|
@@ -1660,7 +1850,7 @@ function useCanvasOperations({ router }) {
|
|
|
1660
1850
|
const workflow = workflowsStore.getCurrentWorkflow(true);
|
|
1661
1851
|
workflow.renameNode(currentName, newName);
|
|
1662
1852
|
if (trackHistory) {
|
|
1663
|
-
historyStore.pushCommandToUndo(new RenameNodeCommand(currentName, newName));
|
|
1853
|
+
historyStore.pushCommandToUndo(new RenameNodeCommand(currentName, newName, Date.now()));
|
|
1664
1854
|
}
|
|
1665
1855
|
workflowsStore.renameNodeSelectedAndExecution({ old: currentName, new: newName });
|
|
1666
1856
|
workflowsStore.setNodes(Object.values(workflow.nodes));
|
|
@@ -1694,18 +1884,21 @@ function useCanvasOperations({ router }) {
|
|
|
1694
1884
|
if (!outgoingNodeId) continue;
|
|
1695
1885
|
if (trackHistory) {
|
|
1696
1886
|
historyStore.pushCommandToUndo(
|
|
1697
|
-
new AddConnectionCommand(
|
|
1698
|
-
|
|
1699
|
-
|
|
1700
|
-
|
|
1701
|
-
|
|
1702
|
-
|
|
1703
|
-
|
|
1704
|
-
|
|
1705
|
-
|
|
1706
|
-
|
|
1707
|
-
|
|
1708
|
-
|
|
1887
|
+
new AddConnectionCommand(
|
|
1888
|
+
[
|
|
1889
|
+
{
|
|
1890
|
+
node: incomingConnection.node,
|
|
1891
|
+
type,
|
|
1892
|
+
index: incomingConnection.index
|
|
1893
|
+
},
|
|
1894
|
+
{
|
|
1895
|
+
node: outgoingConnection.node,
|
|
1896
|
+
type,
|
|
1897
|
+
index: outgoingConnection.index
|
|
1898
|
+
}
|
|
1899
|
+
],
|
|
1900
|
+
Date.now()
|
|
1901
|
+
)
|
|
1709
1902
|
);
|
|
1710
1903
|
}
|
|
1711
1904
|
createConnection({
|
|
@@ -1742,7 +1935,7 @@ function useCanvasOperations({ router }) {
|
|
|
1742
1935
|
workflowsStore.removeNodeExecutionDataById(id);
|
|
1743
1936
|
workflowsStore.removeNodeById(id);
|
|
1744
1937
|
if (trackHistory) {
|
|
1745
|
-
historyStore.pushCommandToUndo(new RemoveNodeCommand(node));
|
|
1938
|
+
historyStore.pushCommandToUndo(new RemoveNodeCommand(node, Date.now()));
|
|
1746
1939
|
if (trackBulk) {
|
|
1747
1940
|
historyStore.stopRecordingUndo();
|
|
1748
1941
|
}
|
|
@@ -1789,6 +1982,9 @@ function useCanvasOperations({ router }) {
|
|
|
1789
1982
|
function setNodeActiveByName(name) {
|
|
1790
1983
|
ndvStore.activeNodeName = name;
|
|
1791
1984
|
}
|
|
1985
|
+
function clearNodeActive() {
|
|
1986
|
+
ndvStore.activeNodeName = null;
|
|
1987
|
+
}
|
|
1792
1988
|
function setNodeParameters(id, parameters) {
|
|
1793
1989
|
const node = workflowsStore.getNodeById(id);
|
|
1794
1990
|
if (!node) {
|
|
@@ -1951,7 +2147,7 @@ function useCanvasOperations({ router }) {
|
|
|
1951
2147
|
}
|
|
1952
2148
|
workflowsStore.addNode(nodeData);
|
|
1953
2149
|
if (options.trackHistory) {
|
|
1954
|
-
historyStore.pushCommandToUndo(new AddNodeCommand(nodeData));
|
|
2150
|
+
historyStore.pushCommandToUndo(new AddNodeCommand(nodeData, Date.now()));
|
|
1955
2151
|
}
|
|
1956
2152
|
if (!options.isAutoAdd) {
|
|
1957
2153
|
createConnectionToLastInteractedWithNode(nodeData, options);
|
|
@@ -2282,7 +2478,8 @@ function useCanvasOperations({ router }) {
|
|
|
2282
2478
|
if (trackHistory) {
|
|
2283
2479
|
historyStore.pushCommandToUndo(
|
|
2284
2480
|
new AddConnectionCommand(
|
|
2285
|
-
mapCanvasConnectionToLegacyConnection(sourceNode, targetNode, connection)
|
|
2481
|
+
mapCanvasConnectionToLegacyConnection(sourceNode, targetNode, connection),
|
|
2482
|
+
Date.now()
|
|
2286
2483
|
)
|
|
2287
2484
|
);
|
|
2288
2485
|
}
|
|
@@ -2384,7 +2581,7 @@ function useCanvasOperations({ router }) {
|
|
|
2384
2581
|
connection: mappedConnection
|
|
2385
2582
|
});
|
|
2386
2583
|
if (trackHistory) {
|
|
2387
|
-
historyStore.pushCommandToUndo(new RemoveConnectionCommand(mappedConnection));
|
|
2584
|
+
historyStore.pushCommandToUndo(new RemoveConnectionCommand(mappedConnection, Date.now()));
|
|
2388
2585
|
if (trackBulk) {
|
|
2389
2586
|
historyStore.stopRecordingUndo();
|
|
2390
2587
|
}
|
|
@@ -2914,6 +3111,7 @@ function useCanvasOperations({ router }) {
|
|
|
2914
3111
|
revertUpdateNodePosition,
|
|
2915
3112
|
setNodeActive,
|
|
2916
3113
|
setNodeActiveByName,
|
|
3114
|
+
clearNodeActive,
|
|
2917
3115
|
setNodeSelected,
|
|
2918
3116
|
toggleNodesDisabled,
|
|
2919
3117
|
revertToggleNodeDisabled,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { b as useRouter, a as useToast, U as useWorkflowsStore, p as useSettingsStore, L as useUIStore, a6 as usePageRedirectionHelper, q as computed, a9 as EnterpriseEditionFeature, ap as h,
|
|
1
|
+
import { b as useRouter, a as useToast, U as useWorkflowsStore, p as useSettingsStore, L as useUIStore, a6 as usePageRedirectionHelper, q as computed, a9 as EnterpriseEditionFeature, ap as h, bZ as sanitizeHtml, af as MODAL_CONFIRM, V as VIEWS, $ as useRootStore, b_ as isFullExecutionResponse, b$ as DEBUG_PAYWALL_MODAL_KEY, ak as useTelemetry, g as useI18n, al as useMessage } from "./index-BGYw7Tle.js";
|
|
2
2
|
const useExecutionDebugging = () => {
|
|
3
3
|
const telemetry = useTelemetry();
|
|
4
4
|
const router = useRouter();
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { dS as dateFormat, b as useRouter, V as VIEWS, g as useI18n, ak as useTelemetry } from "./index-BGYw7Tle.js";
|
|
2
2
|
const convertToDisplayDateComponents = (fullDate) => {
|
|
3
3
|
const mask = `d mmm${new Date(fullDate).getFullYear() === (/* @__PURE__ */ new Date()).getFullYear() ? "" : ", yyyy"}#HH:MM:ss`;
|
|
4
4
|
const formattedDate = dateFormat(fullDate, mask);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { gy as require$$0, c1 as getDefaultExportFromCjs, a as useToast, l as unref, cs as assert, gz as CURL_IMPORT_NOT_SUPPORTED_PROTOCOLS, gA as CURL_IMPORT_NODES_PROTOCOLS, g as useI18n, gB as get } from "./index-BGYw7Tle.js";
|
|
2
2
|
import { c as commonjsRequire } from "./_commonjs-dynamic-modules-TGKdzP3c.js";
|
|
3
|
-
import { i as importCurlEventBus } from "./import-curl-
|
|
3
|
+
import { i as importCurlEventBus } from "./import-curl-DUxX-cV3.js";
|
|
4
4
|
class CCError extends Error {
|
|
5
5
|
}
|
|
6
6
|
const UTF8encoder = new TextEncoder();
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { dA as baseSlice, dB as toString, bp as useNodeTypesStore, q as computed, l as unref, dC as isSubNodeType, $ as useRootStore, U as useWorkflowsStore, a as useToast, dD as PIN_DATA_NODE_TYPES_DENYLIST, bh as getNodeOutputs, bi as NodeConnectionType, dE as jsonStringify, dF as toMegaBytes, dG as stringSizeInBytes, bA as jsonParse, g as useI18n, ak as useTelemetry, aU as useExternalHooks, dH as useDataSchema, dI as MAX_PINNED_DATA_SIZE, dJ as MAX_WORKFLOW_SIZE, dK as MAX_EXPECTED_REQUEST_SIZE } from "./index-BGYw7Tle.js";
|
|
2
2
|
function castSlice(array, start, end) {
|
|
3
3
|
var length = array.length;
|
|
4
4
|
end = end === void 0 ? length : end;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { g as globalLinkActionsEventBus } from "./global-link-actions-
|
|
3
|
-
import { u as usePushConnectionStore } from "./pushConnection.store-
|
|
4
|
-
import { g as getEasyAiWorkflowJson } from "./easyAiWorkflowUtils-
|
|
1
|
+
import { d9 as makeRestApiRequest, S as defineStore, $ as useRootStore, d as defineComponent, bW as resolveDirective, c as openBlock, h as createElementBlock, ax as withDirectives, j as createBaseVNode, t as toDisplayString, l as unref, g as useI18n, a5 as useWorkflowHelpers, bq as useNodeHelpers, a as useToast, bv as useCredentialsStore, bp as useNodeTypesStore, p as useSettingsStore, L as useUIStore, U as useWorkflowsStore, da as useAssistantStore, au as usePostHog, r as ref, bI as AI_CREDITS_EXPERIMENT, db as parse, dc as hasTrimmedItem, dd as codeNodeEditorEventBus, ag as WORKFLOW_SETTINGS_MODAL_KEY, de as generateNodesGraph, ap as h, df as getTriggerNodeServiceName, dg as hasTrimmedData, aU as useExternalHooks, ak as useTelemetry, dh as clearPopupWindowState } from "./index-BGYw7Tle.js";
|
|
2
|
+
import { g as globalLinkActionsEventBus } from "./global-link-actions-B95GMIG5.js";
|
|
3
|
+
import { u as usePushConnectionStore } from "./pushConnection.store-BGGIKcjm.js";
|
|
4
|
+
import { g as getEasyAiWorkflowJson } from "./easyAiWorkflowUtils-K9DVRQP8.js";
|
|
5
5
|
const GET_STATUS_ENDPOINT = "/orchestration/worker/status";
|
|
6
6
|
const sendGetWorkerStatus = async (context) => {
|
|
7
7
|
await makeRestApiRequest(context, "POST", GET_STATUS_ENDPOINT);
|
|
@@ -1,16 +1,190 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { u as usePushConnectionStore } from "./pushConnection.store-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
1
|
+
import { by as useHistoryStore, U as useWorkflowsStore, p as useSettingsStore, q as computed, dq as CanvasNodeDirtiness, bi as NodeConnectionType, dr as BulkCommand, ds as AddConnectionCommand, dt as RemoveConnectionCommand, du as RemoveNodeCommand, dv as AddNodeCommand, dw as EnableNodeToggleCommand, bq as useNodeHelpers, a5 as useWorkflowHelpers, a as useToast, $ as useRootStore, L as useUIStore, at as useExecutionsStore, b8 as CHAT_TRIGGER_NODE_TYPE, bk as get, dx as SINGLE_WEBHOOK_TRIGGERS, dy as displayForm, dz as isEmpty, de as generateNodesGraph, g as useI18n, ak as useTelemetry, aU as useExternalHooks } from "./index-BGYw7Tle.js";
|
|
2
|
+
import { u as usePushConnectionStore } from "./pushConnection.store-BGGIKcjm.js";
|
|
3
|
+
function shouldCommandMarkDirty(command, nodeName, siblingCommands, getIncomingConnections, getOutgoingConnectors) {
|
|
4
|
+
if (command instanceof BulkCommand) {
|
|
5
|
+
return command.commands.some(
|
|
6
|
+
(cmd) => shouldCommandMarkDirty(
|
|
7
|
+
cmd,
|
|
8
|
+
nodeName,
|
|
9
|
+
command.commands,
|
|
10
|
+
getIncomingConnections,
|
|
11
|
+
getOutgoingConnectors
|
|
12
|
+
)
|
|
13
|
+
);
|
|
14
|
+
}
|
|
15
|
+
if (command instanceof AddConnectionCommand) {
|
|
16
|
+
return command.connectionData[1]?.node === nodeName;
|
|
17
|
+
}
|
|
18
|
+
if (command instanceof RemoveConnectionCommand) {
|
|
19
|
+
const [from, to] = command.connectionData;
|
|
20
|
+
if (to.node !== nodeName) {
|
|
21
|
+
return false;
|
|
9
22
|
}
|
|
10
|
-
return
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
}
|
|
23
|
+
return siblingCommands.some(
|
|
24
|
+
(sibling) => sibling instanceof RemoveNodeCommand && sibling.node.name === from.node
|
|
25
|
+
);
|
|
26
|
+
}
|
|
27
|
+
const incomingNodes = Object.values(getIncomingConnections(nodeName)).flat().flat().filter((connection) => connection !== null).map((connection) => connection.node);
|
|
28
|
+
if (command instanceof AddNodeCommand) {
|
|
29
|
+
return incomingNodes.includes(command.node.name);
|
|
30
|
+
}
|
|
31
|
+
if (command instanceof EnableNodeToggleCommand) {
|
|
32
|
+
return incomingNodes.includes(command.nodeName) && (command.newState || Object.keys(getOutgoingConnectors(command.nodeName)).some(
|
|
33
|
+
(type) => type !== NodeConnectionType.Main
|
|
34
|
+
));
|
|
35
|
+
}
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
function findLoop(nodeName, visited, getIncomingConnections) {
|
|
39
|
+
const index = visited.indexOf(nodeName);
|
|
40
|
+
if (index >= 0) {
|
|
41
|
+
return visited.slice(index);
|
|
42
|
+
}
|
|
43
|
+
const newVisited = [...visited, nodeName];
|
|
44
|
+
for (const [type, typeConnections] of Object.entries(getIncomingConnections(nodeName))) {
|
|
45
|
+
if (type !== NodeConnectionType.Main) {
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
for (const connections of typeConnections) {
|
|
49
|
+
for (const { node } of connections ?? []) {
|
|
50
|
+
const loop = findLoop(node, newVisited, getIncomingConnections);
|
|
51
|
+
if (loop) {
|
|
52
|
+
return loop;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return void 0;
|
|
58
|
+
}
|
|
59
|
+
function useNodeDirtiness() {
|
|
60
|
+
const historyStore = useHistoryStore();
|
|
61
|
+
const workflowsStore = useWorkflowsStore();
|
|
62
|
+
const settingsStore = useSettingsStore();
|
|
63
|
+
function getParentSubNodes(nodeName) {
|
|
64
|
+
return Object.entries(workflowsStore.incomingConnectionsByNodeName(nodeName)).filter(([type]) => type !== NodeConnectionType.Main).flatMap(([, typeConnections]) => typeConnections.flat().filter((conn) => conn !== null));
|
|
65
|
+
}
|
|
66
|
+
function getDirtinessByParametersUpdate(nodeName, after) {
|
|
67
|
+
if ((workflowsStore.getParametersLastUpdate(nodeName) ?? 0) > after) {
|
|
68
|
+
return CanvasNodeDirtiness.PARAMETERS_UPDATED;
|
|
69
|
+
}
|
|
70
|
+
for (const connection of getParentSubNodes(nodeName)) {
|
|
71
|
+
if (getDirtinessByParametersUpdate(connection.node, after) !== void 0) {
|
|
72
|
+
return CanvasNodeDirtiness.UPSTREAM_DIRTY;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return void 0;
|
|
76
|
+
}
|
|
77
|
+
function getDirtinessByConnectionsUpdate(nodeName, after) {
|
|
78
|
+
for (let i = historyStore.undoStack.length - 1; i >= 0; i--) {
|
|
79
|
+
const command = historyStore.undoStack[i];
|
|
80
|
+
if (command.getTimestamp() < after) {
|
|
81
|
+
break;
|
|
82
|
+
}
|
|
83
|
+
if (shouldCommandMarkDirty(
|
|
84
|
+
command,
|
|
85
|
+
nodeName,
|
|
86
|
+
[],
|
|
87
|
+
workflowsStore.incomingConnectionsByNodeName,
|
|
88
|
+
workflowsStore.outgoingConnectionsByNodeName
|
|
89
|
+
)) {
|
|
90
|
+
return CanvasNodeDirtiness.INCOMING_CONNECTIONS_UPDATED;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
for (const connection of getParentSubNodes(nodeName)) {
|
|
94
|
+
if (getDirtinessByConnectionsUpdate(connection.node, after) !== void 0) {
|
|
95
|
+
return CanvasNodeDirtiness.UPSTREAM_DIRTY;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return void 0;
|
|
99
|
+
}
|
|
100
|
+
const depthByName = computed(() => {
|
|
101
|
+
const depth = {};
|
|
102
|
+
function setDepthRecursively(nodeName, current, visited) {
|
|
103
|
+
if (visited.has(nodeName)) {
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
const myVisited = new Set(visited);
|
|
107
|
+
myVisited.add(nodeName);
|
|
108
|
+
for (const [type, typeConnections] of Object.entries(
|
|
109
|
+
workflowsStore.outgoingConnectionsByNodeName(nodeName)
|
|
110
|
+
)) {
|
|
111
|
+
if (type !== NodeConnectionType.Main) {
|
|
112
|
+
continue;
|
|
113
|
+
}
|
|
114
|
+
for (const connections of typeConnections) {
|
|
115
|
+
for (const { node } of connections ?? []) {
|
|
116
|
+
if (!depth[node] || depth[node] > current) {
|
|
117
|
+
depth[node] = current;
|
|
118
|
+
}
|
|
119
|
+
setDepthRecursively(node, current + 1, myVisited);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
for (const startNode of workflowsStore.allNodes) {
|
|
125
|
+
const hasIncomingNode = Object.keys(workflowsStore.incomingConnectionsByNodeName(startNode.name)).length > 0;
|
|
126
|
+
if (hasIncomingNode) {
|
|
127
|
+
continue;
|
|
128
|
+
}
|
|
129
|
+
depth[startNode.name] = 0;
|
|
130
|
+
setDepthRecursively(startNode.name, 1, /* @__PURE__ */ new Set());
|
|
131
|
+
}
|
|
132
|
+
return depth;
|
|
133
|
+
});
|
|
134
|
+
const dirtinessByName = computed(() => {
|
|
135
|
+
if (settingsStore.partialExecutionVersion === 1) {
|
|
136
|
+
return {};
|
|
137
|
+
}
|
|
138
|
+
const dirtiness = {};
|
|
139
|
+
const runDataByNode = workflowsStore.getWorkflowRunData ?? {};
|
|
140
|
+
function setDirtiness(nodeName, value) {
|
|
141
|
+
dirtiness[nodeName] = dirtiness[nodeName] ?? value;
|
|
142
|
+
const loop = findLoop(nodeName, [], workflowsStore.incomingConnectionsByNodeName);
|
|
143
|
+
if (!loop) {
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
const loopEntryNodeName = [...loop].sort(
|
|
147
|
+
(a, b) => (depthByName.value[a] ?? Number.MAX_SAFE_INTEGER) - (depthByName.value[b] ?? Number.MAX_SAFE_INTEGER)
|
|
148
|
+
)?.[0];
|
|
149
|
+
if (loopEntryNodeName && depthByName.value[loopEntryNodeName]) {
|
|
150
|
+
dirtiness[loopEntryNodeName] = dirtiness[loopEntryNodeName] ?? CanvasNodeDirtiness.UPSTREAM_DIRTY;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
for (const [nodeName, runData] of Object.entries(runDataByNode)) {
|
|
154
|
+
const runAt = runData[0]?.startTime ?? 0;
|
|
155
|
+
if (!runAt) {
|
|
156
|
+
continue;
|
|
157
|
+
}
|
|
158
|
+
const parameterUpdate = getDirtinessByParametersUpdate(nodeName, runAt);
|
|
159
|
+
if (parameterUpdate) {
|
|
160
|
+
setDirtiness(nodeName, parameterUpdate);
|
|
161
|
+
continue;
|
|
162
|
+
}
|
|
163
|
+
const connectionUpdate = getDirtinessByConnectionsUpdate(nodeName, runAt);
|
|
164
|
+
if (connectionUpdate) {
|
|
165
|
+
setDirtiness(nodeName, connectionUpdate);
|
|
166
|
+
continue;
|
|
167
|
+
}
|
|
168
|
+
const hasInputPinnedDataChanged = Object.values(
|
|
169
|
+
workflowsStore.incomingConnectionsByNodeName(nodeName)
|
|
170
|
+
).flat().flat().filter((connection) => connection !== null).some((connection) => {
|
|
171
|
+
const pinnedDataLastUpdatedAt = workflowsStore.getPinnedDataLastUpdate(connection.node) ?? 0;
|
|
172
|
+
return pinnedDataLastUpdatedAt > runAt;
|
|
173
|
+
});
|
|
174
|
+
if (hasInputPinnedDataChanged) {
|
|
175
|
+
setDirtiness(nodeName, CanvasNodeDirtiness.PINNED_DATA_UPDATED);
|
|
176
|
+
continue;
|
|
177
|
+
}
|
|
178
|
+
const pinnedDataLastRemovedAt = workflowsStore.getPinnedDataLastRemovedAt(nodeName) ?? 0;
|
|
179
|
+
if (pinnedDataLastRemovedAt > runAt) {
|
|
180
|
+
setDirtiness(nodeName, CanvasNodeDirtiness.PINNED_DATA_UPDATED);
|
|
181
|
+
continue;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
return dirtiness;
|
|
185
|
+
});
|
|
186
|
+
return { dirtinessByName };
|
|
187
|
+
}
|
|
14
188
|
function useRunWorkflow(useRunWorkflowOpts) {
|
|
15
189
|
const nodeHelpers = useNodeHelpers();
|
|
16
190
|
const workflowHelpers = useWorkflowHelpers({ router: useRunWorkflowOpts.router });
|
|
@@ -24,6 +198,7 @@ function useRunWorkflow(useRunWorkflowOpts) {
|
|
|
24
198
|
const uiStore = useUIStore();
|
|
25
199
|
const workflowsStore = useWorkflowsStore();
|
|
26
200
|
const executionsStore = useExecutionsStore();
|
|
201
|
+
const { dirtinessByName } = useNodeDirtiness();
|
|
27
202
|
async function runWorkflowApi(runData) {
|
|
28
203
|
if (!pushConnectionStore.isConnected) {
|
|
29
204
|
throw new Error(i18n.baseText("workflowRun.noActiveConnectionToTheServer"));
|
|
@@ -122,6 +297,8 @@ function useRunWorkflow(useRunWorkflowOpts) {
|
|
|
122
297
|
}
|
|
123
298
|
}
|
|
124
299
|
}
|
|
300
|
+
const isPartialExecution = options.destinationNode !== void 0;
|
|
301
|
+
const version = settingsStore.partialExecutionVersion;
|
|
125
302
|
const startNodes = startNodeNames.map((name) => {
|
|
126
303
|
let sourceData = get(runData, [name, 0, "source", 0], null);
|
|
127
304
|
if (sourceData === null) {
|
|
@@ -152,9 +329,6 @@ function useRunWorkflow(useRunWorkflowOpts) {
|
|
|
152
329
|
});
|
|
153
330
|
return void 0;
|
|
154
331
|
}
|
|
155
|
-
const isPartialExecution = options.destinationNode !== void 0;
|
|
156
|
-
const settingsStore2 = useSettingsStore();
|
|
157
|
-
const version = settingsStore2.partialExecutionVersion;
|
|
158
332
|
const startRunData = {
|
|
159
333
|
workflowData,
|
|
160
334
|
// With the new partial execution version the backend decides what run
|
|
@@ -177,10 +351,10 @@ function useRunWorkflow(useRunWorkflowOpts) {
|
|
|
177
351
|
startRunData.destinationNode = options.destinationNode;
|
|
178
352
|
}
|
|
179
353
|
if (startRunData.runData) {
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
workflowsStore.getParametersLastUpdate
|
|
354
|
+
const nodeNames = Object.entries(dirtinessByName.value).flatMap(
|
|
355
|
+
([nodeName, dirtiness]) => dirtiness ? [nodeName] : []
|
|
183
356
|
);
|
|
357
|
+
startRunData.dirtyNodeNames = nodeNames.length > 0 ? nodeNames : void 0;
|
|
184
358
|
}
|
|
185
359
|
const executionData = {
|
|
186
360
|
id: "__IN_PROGRESS__",
|
|
@@ -342,5 +516,6 @@ function useRunWorkflow(useRunWorkflowOpts) {
|
|
|
342
516
|
};
|
|
343
517
|
}
|
|
344
518
|
export {
|
|
519
|
+
useNodeDirtiness as a,
|
|
345
520
|
useRunWorkflow as u
|
|
346
521
|
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { bX as useTestDefinitionStore, r as ref, q as computed } from "./index-BGYw7Tle.js";
|
|
2
2
|
function useTestDefinitionForm() {
|
|
3
3
|
const evaluationsStore = useTestDefinitionStore();
|
|
4
4
|
const state = ref({
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { r as ref, b as useRouter, a5 as useWorkflowHelpers, U as useWorkflowsStore, L as useUIStore, a as useToast, a3 as useNpsSurveyStore, Y as PLACEHOLDER_EMPTY_WORKFLOW_ID,
|
|
1
|
+
import { r as ref, b as useRouter, a5 as useWorkflowHelpers, U as useWorkflowsStore, L as useUIStore, a as useToast, a3 as useNpsSurveyStore, Y as PLACEHOLDER_EMPTY_WORKFLOW_ID, aU as useExternalHooks, aJ as useStorage, dn as LOCAL_STORAGE_ACTIVATION_FLAG, dp as WORKFLOW_ACTIVE_MODAL_KEY, ak as useTelemetry, g as useI18n } from "./index-BGYw7Tle.js";
|
|
2
2
|
function useWorkflowActivate() {
|
|
3
3
|
const updatingWorkflowActivation = ref(false);
|
|
4
4
|
const router = useRouter();
|
package/dist/index.html
CHANGED
|
@@ -16,8 +16,8 @@
|
|
|
16
16
|
<script>!function(t,e){var o,n,p,r;e.__SV||(window.posthog=e,e._i=[],e.init=function(i,s,a){function g(t,e){var o=e.split(".");2==o.length&&(t=t[o[0]],e=o[1]),t[e]=function(){t.push([e].concat(Array.prototype.slice.call(arguments,0)))}}(p=t.createElement("script")).type="text/javascript",p.async=!0,p.src=s.api_host+"/static/array.js",(r=t.getElementsByTagName("script")[0]).parentNode.insertBefore(p,r);var u=e;for(void 0!==a?u=e[a]=[]:a="posthog",u.people=u.people||[],u.toString=function(t){var e="posthog";return"posthog"!==a&&(e+="."+a),t||(e+=" (stub)"),e},u.people.toString=function(){return u.toString(1)+".people (stub)"},o="capture identify alias people.set people.set_once set_config register register_once unregister opt_out_capturing has_opted_out_capturing opt_in_capturing reset isFeatureEnabled getFeatureFlag onFeatureFlags reloadFeatureFlags".split(" "),n=0;n<o.length;n++)g(u,o[n]);e._i.push([i,s,a])},e.__SV=1)}(document,window.posthog||[])</script>
|
|
17
17
|
|
|
18
18
|
<title>n8n.io - Workflow Automation</title>
|
|
19
|
-
<script type="module" crossorigin src="/{{BASE_PATH}}/assets/index-
|
|
20
|
-
<link rel="stylesheet" crossorigin href="/{{BASE_PATH}}/assets/index-
|
|
19
|
+
<script type="module" crossorigin src="/{{BASE_PATH}}/assets/index-BGYw7Tle.js"></script>
|
|
20
|
+
<link rel="stylesheet" crossorigin href="/{{BASE_PATH}}/assets/index-DvUG3hgI.css">
|
|
21
21
|
</head>
|
|
22
22
|
<body>
|
|
23
23
|
<noscript>
|