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.
Files changed (110) hide show
  1. package/biome.jsonc +2 -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
  3. package/dist/assets/{AuthView-Ckt8JqkO.js → AuthView-DhLPVf9-.js} +2 -2
  4. package/dist/assets/{CanvasChat-oFfeuF_m.css → CanvasChat-CSLR5tKe.css} +67 -67
  5. package/dist/assets/{CanvasChat-Cy1m21Qr.js → CanvasChat-DjKTx2jN.js} +7 -7
  6. package/dist/assets/{ChangePasswordView-AoOsRhn6.js → ChangePasswordView-CcEYn8N_.js} +3 -3
  7. package/dist/assets/CollectionParameter-BzV9DuAR.js +4 -0
  8. package/dist/assets/{ConcurrentExecutionsHeader-Ov5gmvZv.js → ConcurrentExecutionsHeader-DEuxxBOa.js} +2 -2
  9. package/dist/assets/{CredentialsView-CtrYJkBd.js → CredentialsView-CyBNC9MS.js} +6 -6
  10. package/dist/assets/{ErrorView-DQ6IxeMW.js → ErrorView-k2iqIjfF.js} +1 -1
  11. package/dist/assets/{ExecutionsView-CjAi5MPS.js → ExecutionsView-B3G-SDHi.js} +6 -6
  12. package/dist/assets/{FileSaver.min-BCizZpyV.js → FileSaver.min-C3y-t-w8.js} +1 -1
  13. package/dist/assets/{FixedCollectionParameter-BReT5syB.css → FixedCollectionParameter-BATXrzXI.css} +18 -18
  14. package/dist/assets/{FixedCollectionParameter-hSKWl3Cr.js → FixedCollectionParameter-_Y9rxAqw.js} +2 -2
  15. package/dist/assets/{ForgotMyPasswordView-bgCElxPF.js → ForgotMyPasswordView-DphAOWHQ.js} +3 -3
  16. package/dist/assets/{Logo-SggscMOj.js → Logo-DUrZye2i.js} +1 -1
  17. package/dist/assets/{MainHeader-ByRLGpW_.css → MainHeader-CX-ZfeKE.css} +34 -40
  18. package/dist/assets/{MainHeader-C9IgyjLi.js → MainHeader-PG8BBJpt.js} +112 -97
  19. package/dist/assets/{MainSidebar-BAfxFkJz.js → MainSidebar-9NvHWe8s.js} +3 -3
  20. package/dist/assets/{MainSidebar-BQVC8zBU.css → MainSidebar-DULRx8tG.css} +2 -2
  21. package/dist/assets/{NodeCreation-CGPBWOsp.js → NodeCreation-B5IA4OSp.js} +4 -4
  22. package/dist/assets/{NodeCreator-CfRdwsEP.js → NodeCreator-Do-c2_pi.js} +4 -4
  23. package/dist/assets/{NodeDetailsView-BaeRsNfe.js → NodeDetailsView-B4RWpeXL.js} +43 -26
  24. package/dist/assets/{NodeDetailsView-C2CtoATD.css → NodeDetailsView-mr-1IzdH.css} +22 -22
  25. package/dist/assets/{NodeView-BIkAV11y.js → NodeView-DLAZbogk.js} +28 -18
  26. package/dist/assets/{ProjectCardBadge-DbDv6sZf.js → ProjectCardBadge-Cd22Jp5H.js} +1 -1
  27. package/dist/assets/{ProjectCreateResource-B7vjvB0g.js → ProjectCreateResource-CNZoR3aH.js} +1 -1
  28. package/dist/assets/{ProjectHeader--DY7lR41.js → ProjectHeader-jjyjO9Sn.js} +31 -12
  29. package/dist/assets/{ProjectSettings-DBkXXbnf.js → ProjectSettings-CNPBR8Py.js} +3 -3
  30. 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
  31. package/dist/assets/{ResourcesListLayout-BvDRT_NT.js → ResourcesListLayout-7x3qhzgO.js} +31 -27
  32. package/dist/assets/{ResourcesListLayout-GXGxZsS7.css → ResourcesListLayout-CrglsyJJ.css} +28 -25
  33. package/dist/assets/{RunDataAi-CTqCC4qP.js → RunDataAi-NsV225aR.js} +95 -81
  34. package/dist/assets/{RunDataJson-Da828ryU.js → RunDataJson-Cz0pyx-c.js} +12 -12
  35. package/dist/assets/{RunDataJsonActions-BJTF9rnw.js → RunDataJsonActions-pi0-gz1O.js} +2 -2
  36. package/dist/assets/{RunDataSearch-BnOB6pq1.js → RunDataSearch-CdoVJUy2.js} +1 -1
  37. package/dist/assets/{RunDataTable-O4pMxSL3.js → RunDataTable-BlfFPz_o.js} +2 -2
  38. package/dist/assets/{SamlOnboarding-_ryt8W2b.js → SamlOnboarding-DrHEUeao.js} +3 -3
  39. package/dist/assets/{SettingsApiView-BB3Lm3bi.css → SettingsApiView-BF29ifnH.css} +17 -7
  40. package/dist/assets/{SettingsApiView-DscvMUm4.js → SettingsApiView-xOx9zvK8.js} +96 -12
  41. package/dist/assets/{SettingsCommunityNodesView-BwQqFFul.js → SettingsCommunityNodesView-DJdg3rwD.js} +5 -5
  42. package/dist/assets/{SettingsExternalSecrets-Bns3YFMo.js → SettingsExternalSecrets-BawxcYEz.js} +1 -1
  43. package/dist/assets/{SettingsLdapView-C4z8TThS.js → SettingsLdapView-UP-yLJR0.js} +1 -1
  44. package/dist/assets/{SettingsLogStreamingView-CeddPL5W.js → SettingsLogStreamingView-BI6cv-3k.js} +1 -1
  45. package/dist/assets/{SettingsPersonalView-T66EcUl1.js → SettingsPersonalView-T_Gv_CP4.js} +1 -1
  46. package/dist/assets/{SettingsSourceControl-B2g48mBg.js → SettingsSourceControl-b35BPriM.js} +1 -1
  47. package/dist/assets/{SettingsSso-DtJRjXuJ.js → SettingsSso-Cv560JhN.js} +1 -1
  48. package/dist/assets/{SettingsUsageAndPlan-B5DEUrT3.css → SettingsUsageAndPlan-Cul4YcIk.css} +3 -3
  49. package/dist/assets/{SettingsUsageAndPlan-DcEfsK15.js → SettingsUsageAndPlan-vdhHrfLx.js} +2 -2
  50. package/dist/assets/{SettingsUsersView-CiRUNOx8.js → SettingsUsersView-fOw0vUke.js} +1 -1
  51. package/dist/assets/{SettingsView-CMGmeLhf.js → SettingsView-DP7tEJ5g.js} +1 -1
  52. package/dist/assets/{SetupView-pCvp7JLT.js → SetupView-A_5QHzjg.js} +3 -3
  53. package/dist/assets/{SetupWorkflowCredentialsButton-B_Xu8nk4.js → SetupWorkflowCredentialsButton-BxKYo82D.js} +1 -1
  54. package/dist/assets/{SetupWorkflowFromTemplateView-wSwqXRvb.js → SetupWorkflowFromTemplateView-lItls2qU.js} +3 -3
  55. package/dist/assets/{SigninView-CcdkQAYx.js → SigninView-DCSGKzQW.js} +3 -3
  56. package/dist/assets/{SignoutView-BRcA6k7Y.js → SignoutView-DjLzc_dB.js} +1 -1
  57. package/dist/assets/{SignupView-B7mxGyr_.js → SignupView-Bmc7voE4.js} +3 -3
  58. package/dist/assets/{TemplateDetails-CrV-sqws.js → TemplateDetails-CNDlIU68.js} +1 -1
  59. package/dist/assets/{TemplateList-DeoFPe1T.js → TemplateList-Bd2BANIh.js} +1 -1
  60. package/dist/assets/{TemplatesCollectionView-Ds6Reoqk.js → TemplatesCollectionView-BtCb9-G2.js} +5 -5
  61. package/dist/assets/{TemplatesSearchView-DKRqKDsz.js → TemplatesSearchView-uzkWuDz-.js} +3 -3
  62. package/dist/assets/{TemplatesView-CvANPrac.js → TemplatesView-zaUOfZH6.js} +1 -1
  63. package/dist/assets/{TemplatesWorkflowView-DqLpZX3Y.js → TemplatesWorkflowView-C-9rF9ZV.js} +5 -5
  64. package/dist/assets/{TestDefinitionEditView-n-k2EViv.js → TestDefinitionEditView-Dwc43mWu.js} +316 -446
  65. package/dist/assets/{TestDefinitionEditView-B-ShDvcb.css → TestDefinitionEditView-P_NZr18p.css} +54 -237
  66. package/dist/assets/{TestDefinitionListView-2dTaUcPb.js → TestDefinitionListView-CerTQbEg.js} +29 -35
  67. package/dist/assets/{TestDefinitionListView-DQQJ8Oqf.css → TestDefinitionListView-Di-Edppe.css} +5 -5
  68. package/dist/assets/{TestDefinitionNewView-D9TlngIG.js → TestDefinitionNewView-B6G7zC8e.js} +2 -2
  69. package/dist/assets/{TestDefinitionRootView-DyYcRvES.js → TestDefinitionRootView-BtnW_v0S.js} +1 -1
  70. package/dist/assets/{VariablesView-u3Zaa4Dx.js → VariablesView-BwOp_rAK.js} +6 -6
  71. package/dist/assets/{VariablesView-0Eu4NnUq.css → VariablesView-CbTLdNwU.css} +10 -10
  72. package/dist/assets/{WorkerView-CjhMC5C9.js → WorkerView-zJQ3m1UQ.js} +7 -7
  73. package/dist/assets/{WorkflowActivator-CDtN9xyL.js → WorkflowActivator-ByyZSmam.js} +2 -2
  74. package/dist/assets/{WorkflowExecutionsInfoAccordion-dNND3XQ1.js → WorkflowExecutionsInfoAccordion-By2qBGv3.js} +1 -1
  75. package/dist/assets/{WorkflowExecutionsLandingPage-C5QEDyTb.js → WorkflowExecutionsLandingPage-Dv9pB-gw.js} +2 -2
  76. package/dist/assets/{WorkflowExecutionsPreview-CXwWU4Da.js → WorkflowExecutionsPreview-B95KC_nD.js} +6 -6
  77. package/dist/assets/{WorkflowExecutionsView-YzQhE6BJ.js → WorkflowExecutionsView-BlrNNbyH.js} +7 -7
  78. package/dist/assets/{WorkflowHistory-DwNBPKKC.js → WorkflowHistory-BAWH5OhJ.js} +3 -3
  79. package/dist/assets/{WorkflowOnboardingView-B-ZvDAJm.js → WorkflowOnboardingView-C7H4P9fv.js} +1 -1
  80. package/dist/assets/{WorkflowPreview-q-thWWZZ.js → WorkflowPreview-B4gIeMU5.js} +1 -1
  81. package/dist/assets/{WorkflowsView-Dc4DNgGT.css → WorkflowsView-JN0Hvhvt.css} +323 -26
  82. package/dist/assets/{WorkflowsView-PSsz5TRG.js → WorkflowsView-WiMvvjrZ.js} +633 -272
  83. package/dist/assets/{easyAiWorkflowUtils-KW1Ht6j8.js → easyAiWorkflowUtils-K9DVRQP8.js} +1 -1
  84. package/dist/assets/{global-link-actions-DRfLF4y6.js → global-link-actions-B95GMIG5.js} +1 -1
  85. package/dist/assets/{import-curl-pNf9q0qQ.js → import-curl-DUxX-cV3.js} +1 -1
  86. package/dist/assets/{index-C06tkpld.js → index-BGYw7Tle.js} +3390 -3351
  87. package/dist/assets/{index-CV2sFqhR.js → index-CZL3Jl0P.js} +1 -1
  88. package/dist/assets/{index-CKK_xS1q.css → index-DvUG3hgI.css} +355 -148
  89. package/dist/assets/{pickBy-CMtHkGeG.js → pickBy-e-2Qz7NU.js} +1 -1
  90. package/dist/assets/{pushConnection.store-BqZhZ7-T.js → pushConnection.store-BGGIKcjm.js} +1 -1
  91. package/dist/assets/{templateActions-D6RFtMCF.js → templateActions-DV-GKWdP.js} +1 -1
  92. package/dist/assets/{useBeforeUnload-BuZ-l9nI.js → useBeforeUnload-C-AtZLTg.js} +1 -1
  93. package/dist/assets/{useCanvasMapping-Bb0rYy8s.css → useCanvasMapping-CkNBF2SE.css} +184 -45
  94. package/dist/assets/{useCanvasMapping-B2Rx4tNy.js → useCanvasMapping-Hz5gCELZ.js} +4252 -279
  95. package/dist/assets/{useCanvasOperations-C-zV2Jxd.js → useCanvasOperations-DvuQ2UqW.js} +219 -21
  96. package/dist/assets/{useExecutionDebugging-CLBfRoGl.js → useExecutionDebugging-rI6MFxnv.js} +1 -1
  97. package/dist/assets/{useExecutionHelpers-7L4-5LnP.js → useExecutionHelpers-DQskduD9.js} +1 -1
  98. package/dist/assets/{useImportCurlCommand-Cbk6CGT_.js → useImportCurlCommand-CBugVIsK.js} +2 -2
  99. package/dist/assets/{usePinnedData-Hq06xPoo.js → usePinnedData-DEotvVuQ.js} +1 -1
  100. package/dist/assets/{usePushConnection-QnDVQ8As.js → usePushConnection-XtMvldec.js} +4 -4
  101. package/dist/assets/{useRunWorkflow-BJon34Vp.js → useRunWorkflow-CPV3na7d.js} +193 -18
  102. package/dist/assets/{useTestDefinitionForm-C0uFCVbQ.js → useTestDefinitionForm-ClopiqsS.js} +1 -1
  103. package/dist/assets/{useWorkflowActivate-1kRXyIJ4.js → useWorkflowActivate-Dlae1S8s.js} +1 -1
  104. package/dist/index.html +2 -2
  105. package/package.json +1 -1
  106. package/tsconfig.json +8 -12
  107. package/vite.config.mts +17 -16
  108. package/dist/assets/CollectionParameter-CgyeAR1l.js +0 -4
  109. /package/dist/{public/tree-sitter-bash.wasm → tree-sitter-bash.wasm} +0 -0
  110. /package/dist/{public/tree-sitter.wasm → tree-sitter.wasm} +0 -0
@@ -1,5 +1,5 @@
1
- import { dK as createCompounder, dL as SetCache, dM as arrayIncludes, dN as cacheHas, dO as baseRest, dP as isArrayLikeObject, dQ as baseFlatten, bh as NodeConnectionType, bK as CanvasConnectionMode, dR as isValidCanvasConnectionMode, bL as isValidNodeConnectionType, bk as v4, dS as CORE_NODES_CATEGORY, dT as DEFAULT_SUBCATEGORY, p as useSettingsStore, dU as AI_TRANSFORM_NODE_TYPE, dV as sublimeSearch, ba as AI_SUBCATEGORY, bb as AI_CATEGORY_AGENTS, dW as sortBy, cY as i18n, dX as AI_CATEGORY_OTHER_TOOLS, dY as SEND_AND_WAIT_OPERATION, dZ as HUMAN_IN_THE_LOOP_CATEGORY, bo as useNodeTypesStore, aM as useTemplatesStore, d_ as AI_NODE_CREATOR_VIEW, d$ as AI_OTHERS_NODE_CREATOR_VIEW, e0 as AI_CATEGORY_DOCUMENT_LOADERS, e1 as AI_CATEGORY_LANGUAGE_MODELS, e2 as AI_CATEGORY_MEMORY, e3 as AI_CATEGORY_OUTPUTPARSER, e4 as AI_CATEGORY_RETRIEVERS, e5 as AI_CATEGORY_TEXT_SPLITTERS, e6 as AI_CATEGORY_TOOLS, e7 as AI_WORKFLOW_TOOL_LANGCHAIN_NODE_TYPE, e8 as AI_CODE_TOOL_LANGCHAIN_NODE_TYPE, e9 as AI_CATEGORY_EMBEDDING, ea as AI_CATEGORY_VECTOR_STORES, eb as AI_UNCATEGORIZED_CATEGORY, ec as TRIGGER_NODE_CREATOR_VIEW, ed as MANUAL_TRIGGER_NODE_TYPE, ee as WEBHOOK_NODE_TYPE, ef as EMAIL_IMAP_NODE_TYPE, eg as SCHEDULE_TRIGGER_NODE_TYPE, eh as FORM_TRIGGER_NODE_TYPE, di as EXECUTE_WORKFLOW_TRIGGER_NODE_TYPE, b7 as CHAT_TRIGGER_NODE_TYPE, ei as OTHER_TRIGGER_NODES_SUBCATEGORY, ej as REGULAR_NODE_CREATOR_VIEW, ek as RSS_READ_NODE_TYPE, el as EMAIL_SEND_NODE_TYPE, em as TRANSFORM_DATA_SUBCATEGORY, en as FILTER_NODE_TYPE, eo as REMOVE_DUPLICATES_NODE_TYPE, ep as SPLIT_OUT_NODE_TYPE, eq as LIMIT_NODE_TYPE, er as SUMMARIZE_NODE_TYPE, es as AGGREGATE_NODE_TYPE, et as MERGE_NODE_TYPE, eu as HTML_NODE_TYPE, ev as MARKDOWN_NODE_TYPE, ew as XML_NODE_TYPE, ex as CRYPTO_NODE_TYPE, ey as EXTRACT_FROM_FILE_NODE_TYPE, ez as CONVERT_TO_FILE_NODE_TYPE, eA as COMPRESSION_NODE_TYPE, eB as EDIT_IMAGE_NODE_TYPE, eC as FLOWS_CONTROL_SUBCATEGORY, eD as IF_NODE_TYPE, eE as SPLIT_IN_BATCHES_NODE_TYPE, eF as HELPERS_SUBCATEGORY, eG as HTTP_REQUEST_NODE_TYPE, eH as CODE_NODE_TYPE, eI as HITL_SUBCATEGORY, g as useI18n, bc as AI_CATEGORY_CHAINS, eJ as SET_NODE_TYPE, eK as DATETIME_NODE_TYPE, S as defineStore, r as ref, q as computed, a0 as useCanvasStore, eL as AI_CATEGORY_ROOT_NODES, z as nextTick, bd as AI_CODE_NODE_TYPE, eM as AI_TRANSFORM_NODE_TYPE$1, T as STORES, U as useWorkflowsStore, as as useNDVStore, L as useUIStore, bJ as NODE_CREATOR_OPEN_SOURCES, eN as isVueFlowConnection, be as getNodeInputs, eO as CUSTOM_API_CALL_KEY, aT as useExternalHooks, ak as useTelemetry, $ as useRootStore, bu as useCredentialsStore, bx as useHistoryStore, E as useTagsStore, at as useExecutionsStore, a2 as useProjectsStore, a as useToast, a5 as useWorkflowHelpers, bp as useNodeHelpers, b6 as useClipboard, eP as MoveNodeCommand, eQ as RenameNodeCommand, eR as AddConnectionCommand, eS as RemoveNodeCommand, aB as STICKY_NODE_TYPE, dy as useDataSchema, eT as NODE_SIZE, eU as GRID_SIZE, eV as AddNodeCommand, eW as getNodeParameters, eX as getNewNodePosition, eY as DEFAULT_NODE_SIZE, eZ as CONFIGURATION_NODE_SIZE, bf as getConnectionTypes, bg as getNodeOutputs, e_ as generateOffsets, e$ as CONFIGURABLE_NODE_SIZE, f0 as PUSH_NODES_OFFSET, f1 as RemoveConnectionCommand, f2 as UPDATE_WEBHOOK_ID_NODE_TYPES, dc as generateNodesGraph, a9 as EnterpriseEditionFeature, bU as deepCopy, f3 as isPresent } from "./index-C06tkpld.js";
2
- import { c as capitalize, u as usePinnedData } from "./usePinnedData-Hq06xPoo.js";
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(new MoveNodeCommand(node.name, oldPosition, newPosition));
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
- node: incomingConnection.node,
1700
- type,
1701
- index: incomingConnection.index
1702
- },
1703
- {
1704
- node: outgoingConnection.node,
1705
- type,
1706
- index: outgoingConnection.index
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, bY as sanitizeHtml, af as MODAL_CONFIRM, V as VIEWS, $ as useRootStore, bZ as isFullExecutionResponse, b_ as DEBUG_PAYWALL_MODAL_KEY, ak as useTelemetry, g as useI18n, al as useMessage } from "./index-C06tkpld.js";
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 { dJ as dateFormat, b as useRouter, V as VIEWS, g as useI18n, ak as useTelemetry } from "./index-C06tkpld.js";
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 { gq as require$$0, c0 as getDefaultExportFromCjs, a as useToast, l as unref, cq as assert, gr as CURL_IMPORT_NOT_SUPPORTED_PROTOCOLS, gs as CURL_IMPORT_NODES_PROTOCOLS, g as useI18n, gt as get } from "./index-C06tkpld.js";
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-pNf9q0qQ.js";
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 { dr as baseSlice, ds as toString, bo as useNodeTypesStore, q as computed, l as unref, dt as isSubNodeType, $ as useRootStore, U as useWorkflowsStore, a as useToast, du as PIN_DATA_NODE_TYPES_DENYLIST, bg as getNodeOutputs, bh as NodeConnectionType, dv as jsonStringify, dw as toMegaBytes, dx as stringSizeInBytes, bz as jsonParse, g as useI18n, ak as useTelemetry, aT as useExternalHooks, dy as useDataSchema, dz as MAX_PINNED_DATA_SIZE, dA as MAX_WORKFLOW_SIZE, dB as MAX_EXPECTED_REQUEST_SIZE } from "./index-C06tkpld.js";
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 { d7 as makeRestApiRequest, S as defineStore, $ as useRootStore, d as defineComponent, bV 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, bp as useNodeHelpers, a as useToast, bu as useCredentialsStore, bo as useNodeTypesStore, p as useSettingsStore, L as useUIStore, U as useWorkflowsStore, d8 as useAssistantStore, au as usePostHog, r as ref, bH as AI_CREDITS_EXPERIMENT, d9 as parse, da as hasTrimmedItem, db as codeNodeEditorEventBus, ag as WORKFLOW_SETTINGS_MODAL_KEY, dc as generateNodesGraph, ap as h, dd as getTriggerNodeServiceName, de as hasTrimmedData, aT as useExternalHooks, ak as useTelemetry, df as clearPopupWindowState } from "./index-C06tkpld.js";
2
- import { g as globalLinkActionsEventBus } from "./global-link-actions-DRfLF4y6.js";
3
- import { u as usePushConnectionStore } from "./pushConnection.store-BqZhZ7-T.js";
4
- import { g as getEasyAiWorkflowJson } from "./easyAiWorkflowUtils-KW1Ht6j8.js";
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 { bp as useNodeHelpers, a5 as useWorkflowHelpers, a as useToast, p as useSettingsStore, $ as useRootStore, L as useUIStore, U as useWorkflowsStore, at as useExecutionsStore, bh as NodeConnectionType, b7 as CHAT_TRIGGER_NODE_TYPE, bj as get, dn as SINGLE_WEBHOOK_TRIGGERS, dp as displayForm, dq as isEmpty, dc as generateNodesGraph, g as useI18n, ak as useTelemetry, aT as useExternalHooks } from "./index-C06tkpld.js";
2
- import { u as usePushConnectionStore } from "./pushConnection.store-BqZhZ7-T.js";
3
- const getDirtyNodeNames = (runData, getParametersLastUpdate) => {
4
- const dirtyNodeNames = Object.entries(runData).reduce((acc, [nodeName, tasks]) => {
5
- if (!tasks.length) return acc;
6
- const updatedAt = getParametersLastUpdate(nodeName) ?? 0;
7
- if (updatedAt > tasks[0].startTime) {
8
- acc.push(nodeName);
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 acc;
11
- }, []);
12
- return dirtyNodeNames.length ? dirtyNodeNames : void 0;
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
- startRunData.dirtyNodeNames = getDirtyNodeNames(
181
- startRunData.runData,
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 { bW as useTestDefinitionStore, r as ref, q as computed } from "./index-C06tkpld.js";
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, aT as useExternalHooks, aI as useStorage, dl as LOCAL_STORAGE_ACTIVATION_FLAG, dm as WORKFLOW_ACTIVE_MODAL_KEY, ak as useTelemetry, g as useI18n } from "./index-C06tkpld.js";
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-C06tkpld.js"></script>
20
- <link rel="stylesheet" crossorigin href="/{{BASE_PATH}}/assets/index-CKK_xS1q.css">
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>