n8n-editor-ui 1.83.2 → 1.85.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/dist/assets/{AnnotationTagsDropdown.ee.vue_vue_type_script_setup_true_lang-COOCXFFe.js → AnnotationTagsDropdown.ee.vue_vue_type_script_setup_true_lang-BefsLZo6.js} +1 -1
- package/dist/assets/{AuthView-C7UxnH6d.js → AuthView-Bwnmj61F.js} +2 -2
- package/dist/assets/{CanvasChat-CSLR5tKe.css → CanvasChatSwitch-BcSDHC-c.css} +546 -33
- package/dist/assets/{CanvasChat-CmjR9yPV.js → CanvasChatSwitch-Dgc1t6ax.js} +1047 -550
- package/dist/assets/{ChangePasswordView-ah8H7l7b.js → ChangePasswordView-Ojbow8CX.js} +3 -3
- package/dist/assets/CollectionParameter-2r_LuiyO.js +4 -0
- package/dist/assets/CommitMonoVariable-ytizKI8U.woff2 +0 -0
- package/dist/assets/{CredentialsView-DqcTSsjv.js → CredentialsView-DhEvPiu_.js} +19 -9
- package/dist/assets/{ErrorView-DG7aEbhz.js → ErrorView-RGryGbpa.js} +1 -1
- package/dist/assets/{ConcurrentExecutionsHeader-CEBmSYNK.css → ExecutionsTime-BOPJEomw.css} +63 -63
- package/dist/assets/{ConcurrentExecutionsHeader-tdwilNra.js → ExecutionsTime.vue_vue_type_script_setup_true_lang-Iwq0aeRX.js} +114 -114
- package/dist/assets/ExecutionsView-CL7Ei3Em.js +943 -0
- package/dist/assets/{ExecutionsView-CB1tvZfo.css → ExecutionsView-JCKikuIS.css} +60 -188
- package/dist/assets/{FileSaver.min-D9u6MONp.js → FileSaver.min-C4OYrSWg.js} +1 -1
- package/dist/assets/{FixedCollectionParameter-CLjLHGyL.js → FixedCollectionParameter-CJ4s-1jy.js} +1 -1
- package/dist/assets/{ForgotMyPasswordView-DDtUSUcw.js → ForgotMyPasswordView-7tFMaf89.js} +3 -3
- package/dist/assets/InterVariable-DiVDrmQJ.woff2 +0 -0
- package/dist/assets/InterVariable-Italic-FCBEiFp6.woff2 +0 -0
- package/dist/assets/{Logo-CBvZEey7.js → Logo-BW8jOa0h.js} +8 -19
- package/dist/assets/{ProjectHeader-BZ6b6lat.css → Logo-DLBj1gMw.css} +23 -17
- package/dist/assets/{MainHeader-PgJurmwZ.js → MainHeader-BUWCKbvC.js} +47 -22
- package/dist/assets/{MainHeader-CX-ZfeKE.css → MainHeader-CWA2JfVJ.css} +22 -22
- package/dist/assets/{MainSidebar-DsyUXL2c.js → MainSidebar-BeZfQeco.js} +75 -42
- package/dist/assets/{MainSidebar-BRAjTL7J.css → MainSidebar-CKMiDGvH.css} +13 -12
- package/dist/assets/{NodeCreation-CiSTfSrv.js → NodeCreation-DIg39Pbx.js} +5 -5
- package/dist/assets/{NodeCreator-16svYK-i.js → NodeCreator-BwYjrEUk.js} +10 -11
- package/dist/assets/{NodeCreator-DDiuO5S0.css → NodeCreator-D9fmPdS2.css} +12 -12
- package/dist/assets/{NodeDetailsView-CVVfk-zW.css → NodeDetailsView-C1z3N5z_.css} +46 -46
- package/dist/assets/{NodeDetailsView-D5ZKTnOO.js → NodeDetailsView-WuroVzlr.js} +93 -85
- package/dist/assets/{NodeView-CVxHVGxF.js → NodeView-CmjajouX.js} +63 -28
- package/dist/assets/{ProjectCardBadge-DKJ8uRN7.js → ProjectCardBadge-cIqYJxKe.js} +1 -1
- package/dist/assets/ProjectHeader-B-a6_GH6.css +285 -0
- package/dist/assets/{ProjectHeader-BY3TAX3C.js → ProjectHeader-BGrFY-5v.js} +66 -27
- package/dist/assets/{ProjectSettings-B3FxW1ze.js → ProjectSettings-D10vay6-.js} +2 -3
- package/dist/assets/{PushConnectionTracker.vue_vue_type_script_setup_true_lang-CzwYeMCe.js → PushConnectionTracker.vue_vue_type_script_setup_true_lang-DJAYslHT.js} +2 -2
- package/dist/assets/{ResourcesListLayout-DbPhtDij.js → ResourcesListLayout-C6v8Zm5q.js} +25 -21
- package/dist/assets/{ResourcesListLayout-Brs7VKUf.css → ResourcesListLayout-CWgWhtKq.css} +43 -33
- package/dist/assets/{RunDataAi-DJ-PSs_k.css → RunDataAi-CN9FrT9c.css} +2 -2
- package/dist/assets/{RunDataAi-Cq_XIdUj.js → RunDataAi-dhPBStdr.js} +25 -20
- package/dist/assets/{RunDataJson-BYaB0x1O.js → RunDataJson-kGRhUGn3.js} +12 -12
- package/dist/assets/{RunDataJsonActions-CU0K3JKo.js → RunDataJsonActions-BTljOq8V.js} +2 -2
- package/dist/assets/{RunDataSearch-Cx3Q6SS-.js → RunDataSearch-mVQhE8PH.js} +1 -1
- package/dist/assets/{RunDataTable-thC_K8V5.js → RunDataTable-CFoDiExh.js} +2 -2
- package/dist/assets/{SamlOnboarding-kqju2Vdw.js → SamlOnboarding-dDZHHNp4.js} +3 -3
- package/dist/assets/{SettingsApiView-DZWY9nyk.js → SettingsApiView-C9hbuZ42.js} +2 -3
- package/dist/assets/{SettingsCommunityNodesView-BLPF2nGe.js → SettingsCommunityNodesView-0wzih2lc.js} +5 -5
- package/dist/assets/{SettingsExternalSecrets-giVhhOpK.js → SettingsExternalSecrets-BCDoBPTc.js} +1 -1
- package/dist/assets/{SettingsLdapView-CcLGbweG.js → SettingsLdapView-CBCprymb.js} +1 -1
- package/dist/assets/{SettingsLogStreamingView-T4v-UDVv.js → SettingsLogStreamingView-CMQQQdcB.js} +2 -2
- package/dist/assets/{SettingsPersonalView-C1vojEEm.js → SettingsPersonalView-DtAM5Qmb.js} +1 -1
- package/dist/assets/{SettingsSourceControl-mTHmVIMw.js → SettingsSourceControl-CysMFVZs.js} +1 -1
- package/dist/assets/{SettingsSso-BBoPSBvR.js → SettingsSso-B0PZUvVx.js} +7 -7
- package/dist/assets/{SettingsSso-BjoJZ2DU.css → SettingsSso-DyrGnPdA.css} +10 -10
- package/dist/assets/{SettingsUsageAndPlan-CT1Jb0GH.js → SettingsUsageAndPlan-2QUTEbXv.js} +8 -3
- package/dist/assets/{SettingsUsageAndPlan-Cul4YcIk.css → SettingsUsageAndPlan-b3WY2Ea_.css} +3 -3
- package/dist/assets/{SettingsUsersView-Cak1x7Pc.js → SettingsUsersView-C16e4GB4.js} +1 -1
- package/dist/assets/{SettingsView-DCkltMay.js → SettingsView-B-BQ6FGS.js} +1 -1
- package/dist/assets/{SetupView-DJmIQyS0.js → SetupView-Kx3RATQz.js} +3 -3
- package/dist/assets/{SetupWorkflowCredentialsButton-DCfwCYAd.js → SetupWorkflowCredentialsButton-BQ2_-L-1.js} +1 -1
- package/dist/assets/{SetupWorkflowFromTemplateView-k_iBV2jh.js → SetupWorkflowFromTemplateView-D_E17TKc.js} +3 -3
- package/dist/assets/{SigninView-BnsteSQ9.js → SigninView-d0aJ1Mkg.js} +3 -3
- package/dist/assets/{SignoutView-CyCh9bOx.js → SignoutView-CvyFrh7y.js} +1 -1
- package/dist/assets/{SignupView-BsFwHPbF.js → SignupView-CnlD_UrJ.js} +3 -3
- package/dist/assets/{TemplateDetails-D_qS2oXP.js → TemplateDetails-DRuh9UqO.js} +3 -3
- package/dist/assets/{TemplateList-Bsr77oun.js → TemplateList-gpWBWX3r.js} +1 -1
- package/dist/assets/{TemplatesCollectionView-DOx2xwGE.js → TemplatesCollectionView-Y6-pxrOD.js} +5 -5
- package/dist/assets/{TemplatesSearchView-C6YmB2wy.js → TemplatesSearchView-DP8XRZ62.js} +3 -3
- package/dist/assets/{TemplatesView-DQBwrteM.js → TemplatesView-B3vanV3h.js} +1 -1
- package/dist/assets/{TemplatesWorkflowView-C2iuRHel.js → TemplatesWorkflowView-CIB9qsVC.js} +5 -5
- package/dist/assets/{TestDefinitionEditView-JONL00pA.css → TestDefinitionEditView-BXhOuJrU.css} +128 -116
- package/dist/assets/{TestDefinitionEditView-BhFe0nl4.js → TestDefinitionEditView-BkhmS3l4.js} +243 -252
- package/dist/assets/{TestDefinitionListView-xb_7O8DU.js → TestDefinitionListView-tvjwd9Ts.js} +1 -1
- package/dist/assets/{TestDefinitionNewView-DfTA2Tx8.js → TestDefinitionNewView-DOGHwct6.js} +13 -4
- package/dist/assets/{TestDefinitionRootView-CaoWSLan.js → TestDefinitionRootView-B-QvwldV.js} +1 -1
- package/dist/assets/{VariablesView-CbTLdNwU.css → VariablesView-ATWfdJsE.css} +7 -11
- package/dist/assets/{VariablesView-B2ttHbBo.js → VariablesView-CoBnz2nF.js} +6 -6
- package/dist/assets/{WorkerView-CzDTwlX2.js → WorkerView-CsTZzlRj.js} +7 -7
- package/dist/assets/{WorkflowActivator-mNogYc60.js → WorkflowActivator-DeLhupjy.js} +2 -2
- package/dist/assets/{WorkflowExecutionsInfoAccordion-CNoXKDkU.js → WorkflowExecutionsInfoAccordion-WRdvo2wq.js} +1 -1
- package/dist/assets/{WorkflowExecutionsLandingPage-XS-H1Pwn.js → WorkflowExecutionsLandingPage-DP8mgG6I.js} +2 -2
- package/dist/assets/{WorkflowExecutionsPreview-BMqpqyNP.js → WorkflowExecutionsPreview-BmG1Fptg.js} +270 -136
- package/dist/assets/{WorkflowExecutionsPreview-BDVLuC1z.css → WorkflowExecutionsPreview-CHu6M3Dh.css} +70 -38
- package/dist/assets/{WorkflowExecutionsView-BLj64NZs.js → WorkflowExecutionsView-DmN-exp3.js} +6 -7
- package/dist/assets/{WorkflowHistory-CFqqM71F.js → WorkflowHistory-CdEr7dbB.js} +3 -3
- package/dist/assets/{WorkflowOnboardingView-8o-XsXJA.js → WorkflowOnboardingView-D45YjFmk.js} +1 -1
- package/dist/assets/{WorkflowPreview-B05e6atY.js → WorkflowPreview-x0_AdULu.js} +1 -1
- package/dist/assets/{WorkflowsView-D6AZEJR8.js → WorkflowsView-BhcJ-MjE.js} +726 -341
- package/dist/assets/{WorkflowsView-JN0Hvhvt.css → WorkflowsView-r9qJOUEb.css} +64 -43
- package/dist/assets/{easyAiWorkflowUtils-DCq6uUmq.js → easyAiWorkflowUtils-NXaV8dgZ.js} +5 -5
- package/dist/assets/{global-link-actions-DhVbzPXz.js → global-link-actions-DgZH3fz2.js} +1 -1
- package/dist/assets/{import-curl-CpQ9LTub.js → import-curl-DUv4B2nO.js} +1 -1
- package/dist/assets/{index-ntAcmC2q.js → index-CDluwnbb.js} +4962 -3420
- package/dist/assets/{index-D534l065.css → index-CgXKy7t-.css} +2783 -2112
- package/dist/assets/{index-wbgX3Vnk.js → index-DAyhXitv.js} +1 -1
- package/dist/assets/{pickBy-DAl85H93.js → pickBy-D-hOoXP_.js} +1 -1
- package/dist/assets/{polyfills-C7eMRNFe.js → polyfills-CLZ4X0Ad.js} +2342 -1944
- package/dist/assets/{pushConnection.store-Cs7MLBaJ.js → pushConnection.store-Dl_VgTY2.js} +1 -1
- package/dist/assets/{templateActions-C6kwBsE2.js → templateActions-B4AFVixD.js} +1 -1
- package/dist/assets/{typescript.worker-DP34mIHW.js → typescript.worker-Bt3bByTc.js} +1158 -695
- package/dist/assets/{useBeforeUnload-Cr9E4FVX.js → useBeforeUnload-DS-CCd-3.js} +1 -1
- package/dist/assets/{useCanvasMapping-CkNBF2SE.css → useCanvasMapping-CJcAsQmx.css} +585 -585
- package/dist/assets/{useCanvasMapping-DwbUSpab.js → useCanvasMapping-DnPGwCm3.js} +10390 -10379
- package/dist/assets/{useCanvasOperations-Ch4-PXXM.js → useCanvasOperations-CY1OrN2X.js} +472 -185
- package/dist/assets/useClearExecutionButtonVisible-CjX9PqMR.js +23 -0
- package/dist/assets/{useExecutionDebugging-WtMBcJA-.js → useExecutionDebugging-BN-lQ24h.js} +1 -1
- package/dist/assets/{useExecutionHelpers-DYVB2XNC.js → useExecutionHelpers-wN0DRQB-.js} +1 -1
- package/dist/assets/{useImportCurlCommand-B6a2t4kf.js → useImportCurlCommand-DgTeVIgh.js} +13 -20
- package/dist/assets/useOverview-BBgWJdVL.js +161 -0
- package/dist/assets/{Logo-DJLTXpXC.css → useOverview-DcRuPjLJ.css} +97 -30
- package/dist/assets/{usePushConnection-BvuDmDSY.js → usePushConnection-F1s4Muc0.js} +5 -4
- package/dist/assets/{useRunWorkflow-BjW-TsKk.js → useRunWorkflow-RBDuKZVj.js} +13 -13
- package/dist/assets/{useTestDefinitionForm-uexL_DkW.js → useTestDefinitionForm-DX1gvhBC.js} +1 -1
- package/dist/assets/{useWorkflowActivate-BAjo-kUC.js → useWorkflowActivate-DsRC3mvG.js} +1 -1
- package/dist/index.html +3 -3
- package/package.json +1 -1
- package/dist/assets/CollectionParameter-Dk76idMw.js +0 -4
- package/dist/assets/ExecutionsView-zqdNLgx1.js +0 -983
- package/dist/assets/ProjectCreateResource-5lC9x1Ht.js +0 -56
- package/dist/assets/ProjectCreateResource-eYdTamXR.css +0 -139
- package/dist/assets/open-sans-latin-400-normal-kLvSbl7y.woff +0 -0
- package/dist/assets/open-sans-latin-400-normal-sjvN8RAh.woff2 +0 -0
- package/dist/assets/open-sans-latin-600-normal-BYc6TgXR.woff2 +0 -0
- package/dist/assets/open-sans-latin-600-normal-CJ2UE_uF.woff +0 -0
- package/dist/assets/open-sans-latin-700-normal-DMXgkrz3.woff +0 -0
- package/dist/assets/open-sans-latin-700-normal-DXyImmHa.woff2 +0 -0
- package/dist/assets/usePinnedData-CvnROquX.js +0 -274
|
@@ -1,5 +1,41 @@
|
|
|
1
|
-
import { dT as
|
|
2
|
-
|
|
1
|
+
import { dS as baseSlice, dT as toString, dU as createCompounder, dV as SetCache, dW as arrayIncludes, dX as cacheHas, dY as baseRest, dZ as isArrayLikeObject, d_ as baseFlatten, bu as useNodeTypesStore, q as computed, m as unref, d$ as isSubNodeType, a0 as useRootStore, T as useWorkflowsStore, a as useToast, e0 as PIN_DATA_NODE_TYPES_DENYLIST, e1 as jsonStringify, c as useI18n, e2 as toMegaBytes, e3 as stringSizeInBytes, ah as useTelemetry, aQ as useExternalHooks, bL as jsonParse, e4 as useDataSchema, bs as getNodeOutputs, be as NodeConnectionTypes, e5 as MAX_PINNED_DATA_SIZE, e6 as MAX_WORKFLOW_SIZE, e7 as MAX_EXPECTED_REQUEST_SIZE, e8 as CORE_NODES_CATEGORY, e9 as DEFAULT_SUBCATEGORY, bi as v4, p as useSettingsStore, ea as AI_TRANSFORM_NODE_TYPE, bm as AI_SUBCATEGORY, eb as HUMAN_IN_THE_LOOP_CATEGORY, bn as AI_CATEGORY_AGENTS, ec as sortBy, d8 as i18n, ed as AI_CATEGORY_OTHER_TOOLS, ee as SEND_AND_WAIT_OPERATION, ef as AI_CATEGORY_DOCUMENT_LOADERS, eg as AI_CATEGORY_LANGUAGE_MODELS, eh as AI_CATEGORY_MEMORY, ei as AI_CATEGORY_OUTPUTPARSER, ej as AI_CATEGORY_RETRIEVERS, ek as AI_CATEGORY_TEXT_SPLITTERS, el as AI_WORKFLOW_TOOL_LANGCHAIN_NODE_TYPE, em as AI_CODE_TOOL_LANGCHAIN_NODE_TYPE, en as AI_CATEGORY_TOOLS, eo as AI_CATEGORY_EMBEDDING, ep as AI_CATEGORY_VECTOR_STORES, eq as AI_UNCATEGORIZED_CATEGORY, er as AI_OTHERS_NODE_CREATOR_VIEW, aO as useTemplatesStore, es as AI_NODE_CREATOR_VIEW, et as RSS_READ_NODE_TYPE, eu as EMAIL_SEND_NODE_TYPE, ev as SET_NODE_TYPE, ew as CODE_NODE_TYPE, ex as DATETIME_NODE_TYPE, ey as FILTER_NODE_TYPE, ez as REMOVE_DUPLICATES_NODE_TYPE, eA as SPLIT_OUT_NODE_TYPE, eB as LIMIT_NODE_TYPE, eC as SUMMARIZE_NODE_TYPE, eD as AGGREGATE_NODE_TYPE, eE as MERGE_NODE_TYPE, eF as HTML_NODE_TYPE, eG as MARKDOWN_NODE_TYPE, eH as XML_NODE_TYPE, eI as CRYPTO_NODE_TYPE, eJ as EXTRACT_FROM_FILE_NODE_TYPE, eK as CONVERT_TO_FILE_NODE_TYPE, eL as COMPRESSION_NODE_TYPE, eM as EDIT_IMAGE_NODE_TYPE, eN as TRANSFORM_DATA_SUBCATEGORY, eO as IF_NODE_TYPE, eP as SPLIT_IN_BATCHES_NODE_TYPE, eQ as FLOWS_CONTROL_SUBCATEGORY, eR as HTTP_REQUEST_NODE_TYPE, eS as WEBHOOK_NODE_TYPE, eT as HELPERS_SUBCATEGORY, eU as HITL_SUBCATEGORY, eV as TRIGGER_NODE_CREATOR_VIEW, eW as REGULAR_NODE_CREATOR_VIEW, eX as MANUAL_TRIGGER_NODE_TYPE, eY as EMAIL_IMAP_NODE_TYPE, eZ as SCHEDULE_TRIGGER_NODE_TYPE, e_ as FORM_TRIGGER_NODE_TYPE, dw as EXECUTE_WORKFLOW_TRIGGER_NODE_TYPE, bt as CHAT_TRIGGER_NODE_TYPE, e$ as OTHER_TRIGGER_NODES_SUBCATEGORY, bo as AI_CATEGORY_CHAINS, S as defineStore, r as ref, a1 as useCanvasStore, f0 as AI_CATEGORY_ROOT_NODES, z as nextTick, bp as AI_CODE_NODE_TYPE, f1 as AI_TRANSFORM_NODE_TYPE$1, f2 as isValidCanvasConnectionMode, bV as CanvasConnectionMode, bU as isValidNodeConnectionType, at as useNDVStore, L as useUIStore, f3 as isVueFlowConnection, bq as getNodeInputs, f4 as CUSTOM_API_CALL_KEY, X as STORES, bY as NODE_CREATOR_OPEN_SOURCES, bD as useCredentialsStore, bG as useHistoryStore, E as useTagsStore, au as useExecutionsStore, a3 as useProjectsStore, a6 as useWorkflowHelpers, bv as useNodeHelpers, b8 as useClipboard, f5 as UPDATE_WEBHOOK_ID_NODE_TYPES, dq as generateNodesGraph, f6 as getNewNodePosition, dD as AddConnectionCommand, az as STICKY_NODE_TYPE, dE as RemoveConnectionCommand, ab as EnterpriseEditionFeature, c1 as deepCopy, f7 as isPresent, dF as RemoveNodeCommand, f8 as RenameNodeCommand, f9 as MoveNodeCommand, fa as DEFAULT_NODE_SIZE, fb as CONFIGURATION_NODE_SIZE, br as getConnectionTypes, fc as generateOffsets, fd as CONFIGURABLE_NODE_SIZE, fe as PUSH_NODES_OFFSET, dG as AddNodeCommand, ff as NODE_SIZE, fg as GRID_SIZE, fh as getNodeParameters } from "./index-CDluwnbb.js";
|
|
2
|
+
function castSlice(array, start, end) {
|
|
3
|
+
var length = array.length;
|
|
4
|
+
end = end === void 0 ? length : end;
|
|
5
|
+
return false ? array : baseSlice(array, start, end);
|
|
6
|
+
}
|
|
7
|
+
var rsAstralRange$1 = "\\ud800-\\udfff", rsComboMarksRange$1 = "\\u0300-\\u036f", reComboHalfMarksRange$1 = "\\ufe20-\\ufe2f", rsComboSymbolsRange$1 = "\\u20d0-\\u20ff", rsComboRange$1 = rsComboMarksRange$1 + reComboHalfMarksRange$1 + rsComboSymbolsRange$1, rsVarRange$1 = "\\ufe0e\\ufe0f";
|
|
8
|
+
var rsZWJ$1 = "\\u200d";
|
|
9
|
+
var reHasUnicode = RegExp("[" + rsZWJ$1 + rsAstralRange$1 + rsComboRange$1 + rsVarRange$1 + "]");
|
|
10
|
+
function hasUnicode(string) {
|
|
11
|
+
return reHasUnicode.test(string);
|
|
12
|
+
}
|
|
13
|
+
function asciiToArray(string) {
|
|
14
|
+
return string.split("");
|
|
15
|
+
}
|
|
16
|
+
var rsAstralRange = "\\ud800-\\udfff", rsComboMarksRange = "\\u0300-\\u036f", reComboHalfMarksRange = "\\ufe20-\\ufe2f", rsComboSymbolsRange = "\\u20d0-\\u20ff", rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, rsVarRange = "\\ufe0e\\ufe0f";
|
|
17
|
+
var rsAstral = "[" + rsAstralRange + "]", rsCombo = "[" + rsComboRange + "]", rsFitz = "\\ud83c[\\udffb-\\udfff]", rsModifier = "(?:" + rsCombo + "|" + rsFitz + ")", rsNonAstral = "[^" + rsAstralRange + "]", rsRegional = "(?:\\ud83c[\\udde6-\\uddff]){2}", rsSurrPair = "[\\ud800-\\udbff][\\udc00-\\udfff]", rsZWJ = "\\u200d";
|
|
18
|
+
var reOptMod = rsModifier + "?", rsOptVar = "[" + rsVarRange + "]?", rsOptJoin = "(?:" + rsZWJ + "(?:" + [rsNonAstral, rsRegional, rsSurrPair].join("|") + ")" + rsOptVar + reOptMod + ")*", rsSeq = rsOptVar + reOptMod + rsOptJoin, rsSymbol = "(?:" + [rsNonAstral + rsCombo + "?", rsCombo, rsRegional, rsSurrPair, rsAstral].join("|") + ")";
|
|
19
|
+
var reUnicode = RegExp(rsFitz + "(?=" + rsFitz + ")|" + rsSymbol + rsSeq, "g");
|
|
20
|
+
function unicodeToArray(string) {
|
|
21
|
+
return string.match(reUnicode) || [];
|
|
22
|
+
}
|
|
23
|
+
function stringToArray(string) {
|
|
24
|
+
return hasUnicode(string) ? unicodeToArray(string) : asciiToArray(string);
|
|
25
|
+
}
|
|
26
|
+
function createCaseFirst(methodName) {
|
|
27
|
+
return function(string) {
|
|
28
|
+
string = toString(string);
|
|
29
|
+
var strSymbols = hasUnicode(string) ? stringToArray(string) : void 0;
|
|
30
|
+
var chr = strSymbols ? strSymbols[0] : string.charAt(0);
|
|
31
|
+
var trailing = strSymbols ? castSlice(strSymbols, 1).join("") : string.slice(1);
|
|
32
|
+
return chr[methodName]() + trailing;
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
var upperFirst = createCaseFirst("toUpperCase");
|
|
36
|
+
function capitalize(string) {
|
|
37
|
+
return upperFirst(toString(string).toLowerCase());
|
|
38
|
+
}
|
|
3
39
|
var camelCase = createCompounder(function(result, word, index) {
|
|
4
40
|
word = word.toLowerCase();
|
|
5
41
|
return result + (index ? capitalize(word) : word);
|
|
@@ -36,168 +72,235 @@ function baseDifference(array, values, iteratee, comparator) {
|
|
|
36
72
|
var difference = baseRest(function(array, values) {
|
|
37
73
|
return isArrayLikeObject(array) ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true)) : [];
|
|
38
74
|
});
|
|
39
|
-
function
|
|
40
|
-
const
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
);
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
const toNodeName = toPort.node;
|
|
51
|
-
const toId = nodes.find((node) => node.name === toNodeName)?.id ?? "";
|
|
52
|
-
const toConnectionType = toPort.type;
|
|
53
|
-
const toIndex = toPort.index;
|
|
54
|
-
const sourceHandle = createCanvasConnectionHandleString({
|
|
55
|
-
mode: CanvasConnectionMode.Output,
|
|
56
|
-
type: fromConnectionType,
|
|
57
|
-
index: fromIndex
|
|
58
|
-
});
|
|
59
|
-
const targetHandle = createCanvasConnectionHandleString({
|
|
60
|
-
mode: CanvasConnectionMode.Input,
|
|
61
|
-
type: toConnectionType,
|
|
62
|
-
index: toIndex
|
|
63
|
-
});
|
|
64
|
-
const connectionId = createCanvasConnectionId({
|
|
65
|
-
source: fromId,
|
|
66
|
-
sourceHandle,
|
|
67
|
-
target: toId,
|
|
68
|
-
targetHandle
|
|
69
|
-
});
|
|
70
|
-
if (fromId && toId) {
|
|
71
|
-
mappedConnections.push({
|
|
72
|
-
id: connectionId,
|
|
73
|
-
source: fromId,
|
|
74
|
-
target: toId,
|
|
75
|
-
sourceHandle,
|
|
76
|
-
targetHandle,
|
|
77
|
-
data: {
|
|
78
|
-
source: {
|
|
79
|
-
node: fromNodeName,
|
|
80
|
-
index: fromIndex,
|
|
81
|
-
type: fromConnectionType
|
|
82
|
-
},
|
|
83
|
-
target: {
|
|
84
|
-
node: toNodeName,
|
|
85
|
-
index: toIndex,
|
|
86
|
-
type: toConnectionType
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
});
|
|
90
|
-
}
|
|
91
|
-
});
|
|
92
|
-
});
|
|
93
|
-
});
|
|
94
|
-
});
|
|
95
|
-
return mappedConnections;
|
|
96
|
-
}
|
|
97
|
-
function mapLegacyConnectionToCanvasConnection(sourceNode, targetNode, legacyConnection) {
|
|
98
|
-
const source = sourceNode.id;
|
|
99
|
-
const sourceHandle = createCanvasConnectionHandleString({
|
|
100
|
-
mode: CanvasConnectionMode.Output,
|
|
101
|
-
type: legacyConnection[0].type,
|
|
102
|
-
index: legacyConnection[0].index
|
|
75
|
+
function useNodeType(options = {}) {
|
|
76
|
+
const nodeTypesStore = useNodeTypesStore();
|
|
77
|
+
const nodeType = computed(() => {
|
|
78
|
+
if (options.nodeType) {
|
|
79
|
+
return unref(options.nodeType);
|
|
80
|
+
}
|
|
81
|
+
const activeNode = unref(options.node);
|
|
82
|
+
if (activeNode) {
|
|
83
|
+
return nodeTypesStore.getNodeType(activeNode.type, activeNode.typeVersion);
|
|
84
|
+
}
|
|
85
|
+
return null;
|
|
103
86
|
});
|
|
104
|
-
const
|
|
105
|
-
const
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
87
|
+
const isSubNodeType$1 = computed(() => isSubNodeType(nodeType.value));
|
|
88
|
+
const isMultipleOutputsNodeType = computed(() => {
|
|
89
|
+
const outputs = nodeType.value?.outputs;
|
|
90
|
+
if (typeof outputs === "string") return false;
|
|
91
|
+
return (outputs ?? []).length > 1;
|
|
109
92
|
});
|
|
110
93
|
return {
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
targetHandle
|
|
94
|
+
nodeType,
|
|
95
|
+
isSubNodeType: isSubNodeType$1,
|
|
96
|
+
isMultipleOutputsNodeType
|
|
115
97
|
};
|
|
116
98
|
}
|
|
117
|
-
function
|
|
118
|
-
const
|
|
119
|
-
const
|
|
120
|
-
const
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
99
|
+
function usePinnedData(node, options = {}) {
|
|
100
|
+
const rootStore = useRootStore();
|
|
101
|
+
const workflowsStore = useWorkflowsStore();
|
|
102
|
+
const toast = useToast();
|
|
103
|
+
const i18n2 = useI18n();
|
|
104
|
+
const telemetry = useTelemetry();
|
|
105
|
+
const externalHooks = useExternalHooks();
|
|
106
|
+
const { getInputDataWithPinned } = useDataSchema();
|
|
107
|
+
const { isSubNodeType: isSubNodeType2, isMultipleOutputsNodeType } = useNodeType({
|
|
108
|
+
node
|
|
109
|
+
});
|
|
110
|
+
const data = computed(() => {
|
|
111
|
+
const targetNode = unref(node);
|
|
112
|
+
return targetNode ? workflowsStore.pinDataByNodeName(targetNode.name) : void 0;
|
|
113
|
+
});
|
|
114
|
+
const hasData = computed(() => {
|
|
115
|
+
const targetNode = unref(node);
|
|
116
|
+
return !!targetNode && typeof data.value !== "undefined";
|
|
117
|
+
});
|
|
118
|
+
const isValidNodeType = computed(() => {
|
|
119
|
+
const targetNode = unref(node);
|
|
120
|
+
return !!targetNode && !isSubNodeType2.value && !isMultipleOutputsNodeType.value && !PIN_DATA_NODE_TYPES_DENYLIST.includes(targetNode.type);
|
|
121
|
+
});
|
|
122
|
+
function canPinNode(checkDataEmpty = false, outputIndex) {
|
|
123
|
+
const targetNode = unref(node);
|
|
124
|
+
if (targetNode === null || PIN_DATA_NODE_TYPES_DENYLIST.includes(targetNode.type)) return false;
|
|
125
|
+
const nodeType = useNodeTypesStore().getNodeType(targetNode.type, targetNode.typeVersion);
|
|
126
|
+
const dataToPin = getInputDataWithPinned(targetNode);
|
|
127
|
+
if (!nodeType || checkDataEmpty && dataToPin.length === 0) return false;
|
|
128
|
+
const workflow = workflowsStore.getCurrentWorkflow();
|
|
129
|
+
const outputs = getNodeOutputs(workflow, targetNode, nodeType).map(
|
|
130
|
+
(output) => typeof output === "string" ? { type: output } : output
|
|
131
|
+
);
|
|
132
|
+
const mainOutputs = outputs.filter(
|
|
133
|
+
(output) => output.type === NodeConnectionTypes.Main && output.category !== "error"
|
|
134
|
+
);
|
|
135
|
+
let indexAcceptable = true;
|
|
136
|
+
if (outputIndex !== void 0) {
|
|
137
|
+
const output = outputs[outputIndex];
|
|
138
|
+
if (outputs[outputIndex] === void 0) return false;
|
|
139
|
+
indexAcceptable = output.type === NodeConnectionTypes.Main && output.category !== "error";
|
|
140
|
+
}
|
|
141
|
+
return mainOutputs.length === 1 && indexAcceptable;
|
|
124
142
|
}
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
index: targetIndex
|
|
143
|
+
function isValidJSON(data2) {
|
|
144
|
+
try {
|
|
145
|
+
JSON.parse(data2);
|
|
146
|
+
return true;
|
|
147
|
+
} catch (error) {
|
|
148
|
+
const title = i18n2.baseText("runData.editOutputInvalid");
|
|
149
|
+
const toRemove = new RegExp(/JSON\.parse:|of the JSON data/, "g");
|
|
150
|
+
const message = error.message.replace(toRemove, "").trim();
|
|
151
|
+
const positionMatchRegEx = /at position (\d+)/;
|
|
152
|
+
const positionMatch = error.message.match(positionMatchRegEx);
|
|
153
|
+
error.message = message.charAt(0).toUpperCase() + message.slice(1);
|
|
154
|
+
error.message = error.message.replace(
|
|
155
|
+
"Unexpected token ' in JSON",
|
|
156
|
+
i18n2.baseText("runData.editOutputInvalid.singleQuote")
|
|
157
|
+
);
|
|
158
|
+
if (positionMatch) {
|
|
159
|
+
const position = parseInt(positionMatch[1], 10);
|
|
160
|
+
const lineBreaksUpToPosition = (data2.slice(0, position).match(/\n/g) || []).length;
|
|
161
|
+
error.message = error.message.replace(
|
|
162
|
+
positionMatchRegEx,
|
|
163
|
+
i18n2.baseText("runData.editOutputInvalid.atPosition", {
|
|
164
|
+
interpolate: {
|
|
165
|
+
position: `${position}`
|
|
166
|
+
}
|
|
167
|
+
})
|
|
168
|
+
);
|
|
169
|
+
error.message = `${i18n2.baseText("runData.editOutputInvalid.onLine", {
|
|
170
|
+
interpolate: {
|
|
171
|
+
line: `${lineBreaksUpToPosition + 1}`
|
|
172
|
+
}
|
|
173
|
+
})} ${error.message}`;
|
|
174
|
+
}
|
|
175
|
+
toast.showError(error, title);
|
|
176
|
+
return false;
|
|
160
177
|
}
|
|
161
|
-
];
|
|
162
|
-
}
|
|
163
|
-
function mapLegacyEndpointsToCanvasConnectionPort(endpoints, endpointNames = []) {
|
|
164
|
-
if (typeof endpoints === "string") {
|
|
165
|
-
console.warn("Node endpoints have not been evaluated", endpoints);
|
|
166
|
-
return [];
|
|
167
178
|
}
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
const
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
179
|
+
function getMaxPinnedDataSize() {
|
|
180
|
+
return window.maxPinnedDataSize ?? MAX_PINNED_DATA_SIZE;
|
|
181
|
+
}
|
|
182
|
+
function isValidSize(data2) {
|
|
183
|
+
const targetNode = unref(node);
|
|
184
|
+
if (!targetNode) {
|
|
185
|
+
return false;
|
|
186
|
+
}
|
|
187
|
+
if (typeof data2 === "object") data2 = JSON.stringify(data2);
|
|
188
|
+
const { pinData: currentPinData, ...workflow } = workflowsStore.getCurrentWorkflow();
|
|
189
|
+
const workflowJson = jsonStringify(workflow, { replaceCircularRefs: true });
|
|
190
|
+
const newPinData = { ...currentPinData, [targetNode.name]: data2 };
|
|
191
|
+
const newPinDataSize = workflowsStore.getPinDataSize(newPinData);
|
|
192
|
+
if (newPinDataSize > getMaxPinnedDataSize()) {
|
|
193
|
+
toast.showError(
|
|
194
|
+
new Error(
|
|
195
|
+
i18n2.baseText("ndv.pinData.error.tooLarge.description", {
|
|
196
|
+
interpolate: {
|
|
197
|
+
size: toMegaBytes(newPinDataSize),
|
|
198
|
+
limit: toMegaBytes(getMaxPinnedDataSize())
|
|
199
|
+
}
|
|
200
|
+
})
|
|
201
|
+
),
|
|
202
|
+
i18n2.baseText("ndv.pinData.error.tooLarge.title")
|
|
203
|
+
);
|
|
204
|
+
return false;
|
|
205
|
+
}
|
|
206
|
+
const workflowSize = stringSizeInBytes(workflowJson) + newPinDataSize;
|
|
207
|
+
const limit = MAX_WORKFLOW_SIZE - MAX_EXPECTED_REQUEST_SIZE;
|
|
208
|
+
if (workflowSize > limit) {
|
|
209
|
+
toast.showError(
|
|
210
|
+
new Error(
|
|
211
|
+
i18n2.baseText("ndv.pinData.error.tooLargeWorkflow.description", {
|
|
212
|
+
interpolate: { size: toMegaBytes(workflowSize), limit: toMegaBytes(limit) }
|
|
213
|
+
})
|
|
214
|
+
),
|
|
215
|
+
i18n2.baseText("ndv.pinData.error.tooLargeWorkflow.title")
|
|
216
|
+
);
|
|
217
|
+
return false;
|
|
218
|
+
}
|
|
219
|
+
return true;
|
|
220
|
+
}
|
|
221
|
+
function onSetDataSuccess({ source }) {
|
|
222
|
+
const targetNode = unref(node);
|
|
223
|
+
const displayMode = unref(options.displayMode);
|
|
224
|
+
const runIndex = unref(options.runIndex);
|
|
225
|
+
const telemetryPayload = {
|
|
226
|
+
pinning_source: source,
|
|
227
|
+
node_type: targetNode?.type,
|
|
228
|
+
push_ref: rootStore.pushRef,
|
|
229
|
+
data_size: stringSizeInBytes(data.value),
|
|
230
|
+
view: displayMode,
|
|
231
|
+
run_index: runIndex
|
|
181
232
|
};
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
233
|
+
void externalHooks.run("runData.onDataPinningSuccess", telemetryPayload);
|
|
234
|
+
telemetry.track("Ndv data pinning success", telemetryPayload);
|
|
235
|
+
}
|
|
236
|
+
function onSetDataError({
|
|
237
|
+
errorType,
|
|
238
|
+
source
|
|
239
|
+
}) {
|
|
240
|
+
const targetNode = unref(node);
|
|
241
|
+
const displayMode = unref(options.displayMode);
|
|
242
|
+
const runIndex = unref(options.runIndex);
|
|
243
|
+
telemetry.track("Ndv data pinning failure", {
|
|
244
|
+
pinning_source: source,
|
|
245
|
+
node_type: targetNode?.type,
|
|
246
|
+
push_ref: rootStore.pushRef,
|
|
247
|
+
data_size: stringSizeInBytes(data.value),
|
|
248
|
+
view: displayMode,
|
|
249
|
+
run_index: runIndex,
|
|
250
|
+
error_type: errorType
|
|
251
|
+
});
|
|
252
|
+
}
|
|
253
|
+
function setData(data2, source) {
|
|
254
|
+
const targetNode = unref(node);
|
|
255
|
+
if (!targetNode) {
|
|
256
|
+
return;
|
|
257
|
+
}
|
|
258
|
+
if (typeof data2 === "string") {
|
|
259
|
+
if (!isValidJSON(data2)) {
|
|
260
|
+
onSetDataError({ errorType: "invalid-json", source });
|
|
261
|
+
throw new Error("Invalid JSON");
|
|
262
|
+
}
|
|
263
|
+
data2 = jsonParse(data2);
|
|
264
|
+
}
|
|
265
|
+
if (!isValidSize(data2)) {
|
|
266
|
+
onSetDataError({ errorType: "data-too-large", source });
|
|
267
|
+
throw new Error("Data too large");
|
|
198
268
|
}
|
|
269
|
+
workflowsStore.pinData({ node: targetNode, data: data2 });
|
|
270
|
+
onSetDataSuccess({ source });
|
|
199
271
|
}
|
|
200
|
-
|
|
272
|
+
function onUnsetData({ source }) {
|
|
273
|
+
const targetNode = unref(node);
|
|
274
|
+
const runIndex = unref(options.runIndex);
|
|
275
|
+
telemetry.track("User unpinned ndv data", {
|
|
276
|
+
node_type: targetNode?.type,
|
|
277
|
+
push_ref: rootStore.pushRef,
|
|
278
|
+
run_index: runIndex,
|
|
279
|
+
source,
|
|
280
|
+
data_size: stringSizeInBytes(data.value)
|
|
281
|
+
});
|
|
282
|
+
}
|
|
283
|
+
function unsetData(source) {
|
|
284
|
+
const targetNode = unref(node);
|
|
285
|
+
if (!targetNode) {
|
|
286
|
+
return;
|
|
287
|
+
}
|
|
288
|
+
onUnsetData({ source });
|
|
289
|
+
workflowsStore.unpinData({ node: targetNode });
|
|
290
|
+
}
|
|
291
|
+
return {
|
|
292
|
+
data,
|
|
293
|
+
hasData,
|
|
294
|
+
isValidNodeType,
|
|
295
|
+
canPinNode,
|
|
296
|
+
setData,
|
|
297
|
+
onSetDataSuccess,
|
|
298
|
+
onSetDataError,
|
|
299
|
+
unsetData,
|
|
300
|
+
onUnsetData,
|
|
301
|
+
isValidJSON,
|
|
302
|
+
isValidSize
|
|
303
|
+
};
|
|
201
304
|
}
|
|
202
305
|
const SEQUENTIAL_BONUS = 60;
|
|
203
306
|
const SEPARATOR_BONUS = 30;
|
|
@@ -663,7 +766,7 @@ function AINodesView(_nodes) {
|
|
|
663
766
|
title: AI_CATEGORY_DOCUMENT_LOADERS,
|
|
664
767
|
info: getSubcategoryInfo(AI_CATEGORY_DOCUMENT_LOADERS),
|
|
665
768
|
icon: "file-import",
|
|
666
|
-
...getAISubcategoryProperties(
|
|
769
|
+
...getAISubcategoryProperties(NodeConnectionTypes.AiDocument)
|
|
667
770
|
}
|
|
668
771
|
},
|
|
669
772
|
{
|
|
@@ -673,7 +776,7 @@ function AINodesView(_nodes) {
|
|
|
673
776
|
title: AI_CATEGORY_LANGUAGE_MODELS,
|
|
674
777
|
info: getSubcategoryInfo(AI_CATEGORY_LANGUAGE_MODELS),
|
|
675
778
|
icon: "language",
|
|
676
|
-
...getAISubcategoryProperties(
|
|
779
|
+
...getAISubcategoryProperties(NodeConnectionTypes.AiLanguageModel)
|
|
677
780
|
}
|
|
678
781
|
},
|
|
679
782
|
{
|
|
@@ -683,7 +786,7 @@ function AINodesView(_nodes) {
|
|
|
683
786
|
title: AI_CATEGORY_MEMORY,
|
|
684
787
|
info: getSubcategoryInfo(AI_CATEGORY_MEMORY),
|
|
685
788
|
icon: "brain",
|
|
686
|
-
...getAISubcategoryProperties(
|
|
789
|
+
...getAISubcategoryProperties(NodeConnectionTypes.AiMemory)
|
|
687
790
|
}
|
|
688
791
|
},
|
|
689
792
|
{
|
|
@@ -693,7 +796,7 @@ function AINodesView(_nodes) {
|
|
|
693
796
|
title: AI_CATEGORY_OUTPUTPARSER,
|
|
694
797
|
info: getSubcategoryInfo(AI_CATEGORY_OUTPUTPARSER),
|
|
695
798
|
icon: "list",
|
|
696
|
-
...getAISubcategoryProperties(
|
|
799
|
+
...getAISubcategoryProperties(NodeConnectionTypes.AiOutputParser)
|
|
697
800
|
}
|
|
698
801
|
},
|
|
699
802
|
{
|
|
@@ -703,7 +806,7 @@ function AINodesView(_nodes) {
|
|
|
703
806
|
title: AI_CATEGORY_RETRIEVERS,
|
|
704
807
|
info: getSubcategoryInfo(AI_CATEGORY_RETRIEVERS),
|
|
705
808
|
icon: "search",
|
|
706
|
-
...getAISubcategoryProperties(
|
|
809
|
+
...getAISubcategoryProperties(NodeConnectionTypes.AiRetriever)
|
|
707
810
|
}
|
|
708
811
|
},
|
|
709
812
|
{
|
|
@@ -713,7 +816,7 @@ function AINodesView(_nodes) {
|
|
|
713
816
|
title: AI_CATEGORY_TEXT_SPLITTERS,
|
|
714
817
|
info: getSubcategoryInfo(AI_CATEGORY_TEXT_SPLITTERS),
|
|
715
818
|
icon: "grip-lines-vertical",
|
|
716
|
-
...getAISubcategoryProperties(
|
|
819
|
+
...getAISubcategoryProperties(NodeConnectionTypes.AiTextSplitter)
|
|
717
820
|
}
|
|
718
821
|
},
|
|
719
822
|
{
|
|
@@ -724,7 +827,7 @@ function AINodesView(_nodes) {
|
|
|
724
827
|
title: AI_CATEGORY_TOOLS,
|
|
725
828
|
info: getSubcategoryInfo(AI_CATEGORY_TOOLS),
|
|
726
829
|
icon: "tools",
|
|
727
|
-
...getAISubcategoryProperties(
|
|
830
|
+
...getAISubcategoryProperties(NodeConnectionTypes.AiTool),
|
|
728
831
|
sections: [
|
|
729
832
|
{
|
|
730
833
|
key: "popular",
|
|
@@ -741,7 +844,7 @@ function AINodesView(_nodes) {
|
|
|
741
844
|
title: AI_CATEGORY_EMBEDDING,
|
|
742
845
|
info: getSubcategoryInfo(AI_CATEGORY_EMBEDDING),
|
|
743
846
|
icon: "vector-square",
|
|
744
|
-
...getAISubcategoryProperties(
|
|
847
|
+
...getAISubcategoryProperties(NodeConnectionTypes.AiEmbedding)
|
|
745
848
|
}
|
|
746
849
|
},
|
|
747
850
|
{
|
|
@@ -751,7 +854,7 @@ function AINodesView(_nodes) {
|
|
|
751
854
|
title: AI_CATEGORY_VECTOR_STORES,
|
|
752
855
|
info: getSubcategoryInfo(AI_CATEGORY_VECTOR_STORES),
|
|
753
856
|
icon: "project-diagram",
|
|
754
|
-
...getAISubcategoryProperties(
|
|
857
|
+
...getAISubcategoryProperties(NodeConnectionTypes.AiVectorStore)
|
|
755
858
|
}
|
|
756
859
|
},
|
|
757
860
|
{
|
|
@@ -1442,6 +1545,169 @@ const useViewStacks = defineStore("nodeCreatorViewStacks", () => {
|
|
|
1442
1545
|
popViewStack
|
|
1443
1546
|
};
|
|
1444
1547
|
});
|
|
1548
|
+
function mapLegacyConnectionsToCanvasConnections(legacyConnections, nodes) {
|
|
1549
|
+
const mappedConnections = [];
|
|
1550
|
+
Object.keys(legacyConnections).forEach((fromNodeName) => {
|
|
1551
|
+
const fromId = nodes.find((node) => node.name === fromNodeName)?.id ?? "";
|
|
1552
|
+
const fromConnectionTypes = Object.keys(
|
|
1553
|
+
legacyConnections[fromNodeName]
|
|
1554
|
+
);
|
|
1555
|
+
fromConnectionTypes.forEach((fromConnectionType) => {
|
|
1556
|
+
const fromPorts = legacyConnections[fromNodeName][fromConnectionType];
|
|
1557
|
+
fromPorts?.forEach((toPorts, fromIndex) => {
|
|
1558
|
+
toPorts?.forEach((toPort) => {
|
|
1559
|
+
const toNodeName = toPort.node;
|
|
1560
|
+
const toId = nodes.find((node) => node.name === toNodeName)?.id ?? "";
|
|
1561
|
+
const toConnectionType = toPort.type;
|
|
1562
|
+
const toIndex = toPort.index;
|
|
1563
|
+
const sourceHandle = createCanvasConnectionHandleString({
|
|
1564
|
+
mode: CanvasConnectionMode.Output,
|
|
1565
|
+
type: fromConnectionType,
|
|
1566
|
+
index: fromIndex
|
|
1567
|
+
});
|
|
1568
|
+
const targetHandle = createCanvasConnectionHandleString({
|
|
1569
|
+
mode: CanvasConnectionMode.Input,
|
|
1570
|
+
type: toConnectionType,
|
|
1571
|
+
index: toIndex
|
|
1572
|
+
});
|
|
1573
|
+
const connectionId = createCanvasConnectionId({
|
|
1574
|
+
source: fromId,
|
|
1575
|
+
sourceHandle,
|
|
1576
|
+
target: toId,
|
|
1577
|
+
targetHandle
|
|
1578
|
+
});
|
|
1579
|
+
if (fromId && toId) {
|
|
1580
|
+
mappedConnections.push({
|
|
1581
|
+
id: connectionId,
|
|
1582
|
+
source: fromId,
|
|
1583
|
+
target: toId,
|
|
1584
|
+
sourceHandle,
|
|
1585
|
+
targetHandle,
|
|
1586
|
+
data: {
|
|
1587
|
+
source: {
|
|
1588
|
+
node: fromNodeName,
|
|
1589
|
+
index: fromIndex,
|
|
1590
|
+
type: fromConnectionType
|
|
1591
|
+
},
|
|
1592
|
+
target: {
|
|
1593
|
+
node: toNodeName,
|
|
1594
|
+
index: toIndex,
|
|
1595
|
+
type: toConnectionType
|
|
1596
|
+
}
|
|
1597
|
+
}
|
|
1598
|
+
});
|
|
1599
|
+
}
|
|
1600
|
+
});
|
|
1601
|
+
});
|
|
1602
|
+
});
|
|
1603
|
+
});
|
|
1604
|
+
return mappedConnections;
|
|
1605
|
+
}
|
|
1606
|
+
function mapLegacyConnectionToCanvasConnection(sourceNode, targetNode, legacyConnection) {
|
|
1607
|
+
const source = sourceNode.id;
|
|
1608
|
+
const sourceHandle = createCanvasConnectionHandleString({
|
|
1609
|
+
mode: CanvasConnectionMode.Output,
|
|
1610
|
+
type: legacyConnection[0].type,
|
|
1611
|
+
index: legacyConnection[0].index
|
|
1612
|
+
});
|
|
1613
|
+
const target = targetNode.id;
|
|
1614
|
+
const targetHandle = createCanvasConnectionHandleString({
|
|
1615
|
+
mode: CanvasConnectionMode.Input,
|
|
1616
|
+
type: legacyConnection[1].type,
|
|
1617
|
+
index: legacyConnection[1].index
|
|
1618
|
+
});
|
|
1619
|
+
return {
|
|
1620
|
+
source,
|
|
1621
|
+
sourceHandle,
|
|
1622
|
+
target,
|
|
1623
|
+
targetHandle
|
|
1624
|
+
};
|
|
1625
|
+
}
|
|
1626
|
+
function parseCanvasConnectionHandleString(handle) {
|
|
1627
|
+
const [mode, type, index] = (handle ?? "").split("/");
|
|
1628
|
+
const resolvedMode = isValidCanvasConnectionMode(mode) ? mode : CanvasConnectionMode.Output;
|
|
1629
|
+
const resolvedType = isValidNodeConnectionType(type) ? type : NodeConnectionTypes.Main;
|
|
1630
|
+
let resolvedIndex = parseInt(index, 10);
|
|
1631
|
+
if (isNaN(resolvedIndex)) {
|
|
1632
|
+
resolvedIndex = 0;
|
|
1633
|
+
}
|
|
1634
|
+
return {
|
|
1635
|
+
mode: resolvedMode,
|
|
1636
|
+
type: resolvedType,
|
|
1637
|
+
index: resolvedIndex
|
|
1638
|
+
};
|
|
1639
|
+
}
|
|
1640
|
+
function createCanvasConnectionHandleString({
|
|
1641
|
+
mode,
|
|
1642
|
+
type = NodeConnectionTypes.Main,
|
|
1643
|
+
index = 0
|
|
1644
|
+
}) {
|
|
1645
|
+
return `${mode}/${type}/${index}`;
|
|
1646
|
+
}
|
|
1647
|
+
function createCanvasConnectionId(connection) {
|
|
1648
|
+
return `[${connection.source}/${connection.sourceHandle}][${connection.target}/${connection.targetHandle}]`;
|
|
1649
|
+
}
|
|
1650
|
+
function mapCanvasConnectionToLegacyConnection(sourceNode, targetNode, connection) {
|
|
1651
|
+
const sourceNodeName = sourceNode?.name ?? "";
|
|
1652
|
+
const { type: sourceType, index: sourceIndex } = parseCanvasConnectionHandleString(
|
|
1653
|
+
connection.sourceHandle
|
|
1654
|
+
);
|
|
1655
|
+
const targetNodeName = targetNode?.name ?? "";
|
|
1656
|
+
const { type: targetType, index: targetIndex } = parseCanvasConnectionHandleString(
|
|
1657
|
+
connection.targetHandle
|
|
1658
|
+
);
|
|
1659
|
+
return [
|
|
1660
|
+
{
|
|
1661
|
+
node: sourceNodeName,
|
|
1662
|
+
type: sourceType,
|
|
1663
|
+
index: sourceIndex
|
|
1664
|
+
},
|
|
1665
|
+
{
|
|
1666
|
+
node: targetNodeName,
|
|
1667
|
+
type: targetType,
|
|
1668
|
+
index: targetIndex
|
|
1669
|
+
}
|
|
1670
|
+
];
|
|
1671
|
+
}
|
|
1672
|
+
function mapLegacyEndpointsToCanvasConnectionPort(endpoints, endpointNames = []) {
|
|
1673
|
+
if (typeof endpoints === "string") {
|
|
1674
|
+
console.warn("Node endpoints have not been evaluated", endpoints);
|
|
1675
|
+
return [];
|
|
1676
|
+
}
|
|
1677
|
+
return endpoints.map((endpoint, endpointIndex) => {
|
|
1678
|
+
const typeValue = typeof endpoint === "string" ? endpoint : endpoint.type;
|
|
1679
|
+
const type = isValidNodeConnectionType(typeValue) ? typeValue : NodeConnectionTypes.Main;
|
|
1680
|
+
const label = typeof endpoint === "string" ? endpointNames[endpointIndex] : endpoint.displayName;
|
|
1681
|
+
const index = endpoints.slice(0, endpointIndex + 1).filter((e) => (typeof e === "string" ? e : e.type) === type).length - 1;
|
|
1682
|
+
const required = typeof endpoint === "string" ? false : endpoint.required;
|
|
1683
|
+
const maxConnections = typeof endpoint === "string" ? void 0 : endpoint.maxConnections;
|
|
1684
|
+
return {
|
|
1685
|
+
type,
|
|
1686
|
+
index,
|
|
1687
|
+
label,
|
|
1688
|
+
...maxConnections ? { maxConnections } : {},
|
|
1689
|
+
...required ? { required } : {}
|
|
1690
|
+
};
|
|
1691
|
+
});
|
|
1692
|
+
}
|
|
1693
|
+
function checkOverlap(node1, node2) {
|
|
1694
|
+
return !// node1 is completely to the left of node2
|
|
1695
|
+
(node1.x + node1.width <= node2.x || // node2 is completely to the left of node1
|
|
1696
|
+
node2.x + node2.width <= node1.x || // node1 is completely above node2
|
|
1697
|
+
node1.y + node1.height <= node2.y || // node2 is completely above node1
|
|
1698
|
+
node2.y + node2.height <= node1.y);
|
|
1699
|
+
}
|
|
1700
|
+
function insertSpacersBetweenEndpoints(endpoints, requiredEndpointsCount = 0, minEndpointsCount = 4) {
|
|
1701
|
+
const endpointsWithSpacers = [...endpoints];
|
|
1702
|
+
const optionalNonMainInputsCount = endpointsWithSpacers.length - requiredEndpointsCount;
|
|
1703
|
+
const spacerCount = minEndpointsCount - requiredEndpointsCount - optionalNonMainInputsCount;
|
|
1704
|
+
if (endpointsWithSpacers.length < minEndpointsCount) {
|
|
1705
|
+
for (let i = 0; i < spacerCount; i++) {
|
|
1706
|
+
endpointsWithSpacers.splice(requiredEndpointsCount + i, 0, null);
|
|
1707
|
+
}
|
|
1708
|
+
}
|
|
1709
|
+
return endpointsWithSpacers;
|
|
1710
|
+
}
|
|
1445
1711
|
const useNodeCreatorStore = defineStore(STORES.NODE_CREATOR, () => {
|
|
1446
1712
|
const workflowsStore = useWorkflowsStore();
|
|
1447
1713
|
const ndvStore = useNDVStore();
|
|
@@ -1548,7 +1814,7 @@ const useNodeCreatorStore = defineStore(STORES.NODE_CREATOR, () => {
|
|
|
1548
1814
|
uiStore.lastInteractedWithNodeHandle = connection.sourceHandle ?? null;
|
|
1549
1815
|
uiStore.lastInteractedWithNodeId = sourceNode.id;
|
|
1550
1816
|
const isOutput = mode === CanvasConnectionMode.Output;
|
|
1551
|
-
const isScopedConnection = type !==
|
|
1817
|
+
const isScopedConnection = type !== NodeConnectionTypes.Main;
|
|
1552
1818
|
setNodeCreatorState({
|
|
1553
1819
|
source: eventSource,
|
|
1554
1820
|
createNodeActive: true,
|
|
@@ -1807,6 +2073,20 @@ function useCanvasOperations({ router }) {
|
|
|
1807
2073
|
const triggerNodes = computed(() => {
|
|
1808
2074
|
return workflowsStore.workflowTriggerNodes;
|
|
1809
2075
|
});
|
|
2076
|
+
function tidyUp({ result, source, target }) {
|
|
2077
|
+
updateNodesPosition(
|
|
2078
|
+
result.nodes.map(({ id, x, y }) => ({ id, position: { x, y } })),
|
|
2079
|
+
{ trackBulk: true, trackHistory: true }
|
|
2080
|
+
);
|
|
2081
|
+
trackTidyUp({ result, source, target });
|
|
2082
|
+
}
|
|
2083
|
+
function trackTidyUp({ result, source, target }) {
|
|
2084
|
+
telemetry.track("User tidied up canvas", {
|
|
2085
|
+
source,
|
|
2086
|
+
target,
|
|
2087
|
+
nodes_count: result.nodes.length
|
|
2088
|
+
});
|
|
2089
|
+
}
|
|
1810
2090
|
function updateNodesPosition(events, { trackHistory = false, trackBulk = true } = {}) {
|
|
1811
2091
|
if (trackHistory && trackBulk) {
|
|
1812
2092
|
historyStore.startRecordingUndo();
|
|
@@ -2218,13 +2498,13 @@ function useCanvasOperations({ router }) {
|
|
|
2218
2498
|
source: lastInteractedWithNodeId,
|
|
2219
2499
|
sourceHandle: createCanvasConnectionHandleString({
|
|
2220
2500
|
mode: CanvasConnectionMode.Output,
|
|
2221
|
-
type:
|
|
2501
|
+
type: NodeConnectionTypes.Main,
|
|
2222
2502
|
index: 0
|
|
2223
2503
|
}),
|
|
2224
2504
|
target: node.id,
|
|
2225
2505
|
targetHandle: createCanvasConnectionHandleString({
|
|
2226
2506
|
mode: CanvasConnectionMode.Input,
|
|
2227
|
-
type:
|
|
2507
|
+
type: NodeConnectionTypes.Main,
|
|
2228
2508
|
index: 0
|
|
2229
2509
|
})
|
|
2230
2510
|
});
|
|
@@ -2237,7 +2517,7 @@ function useCanvasOperations({ router }) {
|
|
|
2237
2517
|
source: node.id,
|
|
2238
2518
|
sourceHandle: createCanvasConnectionHandleString({
|
|
2239
2519
|
mode: CanvasConnectionMode.Input,
|
|
2240
|
-
type:
|
|
2520
|
+
type: NodeConnectionTypes.Main,
|
|
2241
2521
|
index: 0
|
|
2242
2522
|
}),
|
|
2243
2523
|
target: lastInteractedWithNodeConnection.target,
|
|
@@ -2341,7 +2621,7 @@ function useCanvasOperations({ router }) {
|
|
|
2341
2621
|
const { type: connectionType, index: connectionIndex } = parseCanvasConnectionHandleString(
|
|
2342
2622
|
lastInteractedWithNodeHandle ?? lastInteractedWithNodeConnection?.sourceHandle ?? ""
|
|
2343
2623
|
);
|
|
2344
|
-
const nodeSize = connectionType ===
|
|
2624
|
+
const nodeSize = connectionType === NodeConnectionTypes.Main ? DEFAULT_NODE_SIZE : CONFIGURATION_NODE_SIZE;
|
|
2345
2625
|
if (lastInteractedWithNode) {
|
|
2346
2626
|
const lastInteractedWithNodeTypeDescription = nodeTypesStore.getNodeType(
|
|
2347
2627
|
lastInteractedWithNode.type,
|
|
@@ -2352,8 +2632,8 @@ function useCanvasOperations({ router }) {
|
|
|
2352
2632
|
);
|
|
2353
2633
|
const newNodeInsertPosition = uiStore.lastCancelledConnectionPosition;
|
|
2354
2634
|
if (newNodeInsertPosition) {
|
|
2355
|
-
const xOffset = connectionType ===
|
|
2356
|
-
const yOffset = connectionType ===
|
|
2635
|
+
const xOffset = connectionType === NodeConnectionTypes.Main ? 0 : -nodeSize[0] / 2;
|
|
2636
|
+
const yOffset = connectionType === NodeConnectionTypes.Main ? -nodeSize[1] / 2 : 0;
|
|
2357
2637
|
position = [newNodeInsertPosition[0] + xOffset, newNodeInsertPosition[1] + yOffset];
|
|
2358
2638
|
uiStore.lastCancelledConnectionPosition = void 0;
|
|
2359
2639
|
} else if (lastInteractedWithNodeTypeDescription && lastInteractedWithNodeObject) {
|
|
@@ -2365,7 +2645,7 @@ function useCanvasOperations({ router }) {
|
|
|
2365
2645
|
const lastInteractedWithNodeInputTypes = getConnectionTypes(
|
|
2366
2646
|
lastInteractedWithNodeInputs
|
|
2367
2647
|
);
|
|
2368
|
-
const lastInteractedWithNodeScopedInputTypes = (lastInteractedWithNodeInputTypes || []).filter((input) => input !==
|
|
2648
|
+
const lastInteractedWithNodeScopedInputTypes = (lastInteractedWithNodeInputTypes || []).filter((input) => input !== NodeConnectionTypes.Main);
|
|
2369
2649
|
const lastInteractedWithNodeOutputs = getNodeOutputs(
|
|
2370
2650
|
editableWorkflowObject.value,
|
|
2371
2651
|
lastInteractedWithNodeObject,
|
|
@@ -2375,7 +2655,7 @@ function useCanvasOperations({ router }) {
|
|
|
2375
2655
|
lastInteractedWithNodeOutputs
|
|
2376
2656
|
);
|
|
2377
2657
|
const lastInteractedWithNodeMainOutputs = lastInteractedWithNodeOutputTypes.filter(
|
|
2378
|
-
(output) => output ===
|
|
2658
|
+
(output) => output === NodeConnectionTypes.Main
|
|
2379
2659
|
);
|
|
2380
2660
|
let yOffset = 0;
|
|
2381
2661
|
if (lastInteractedWithNodeConnection) {
|
|
@@ -2402,7 +2682,7 @@ function useCanvasOperations({ router }) {
|
|
|
2402
2682
|
}
|
|
2403
2683
|
const outputTypes = getConnectionTypes(outputs);
|
|
2404
2684
|
pushOffsets = [100, 0];
|
|
2405
|
-
if (outputTypes.length > 0 && outputTypes.every((outputName) => outputName !==
|
|
2685
|
+
if (outputTypes.length > 0 && outputTypes.every((outputName) => outputName !== NodeConnectionTypes.Main)) {
|
|
2406
2686
|
const scopedConnectionIndex = lastInteractedWithNodeScopedInputTypes.findIndex(
|
|
2407
2687
|
(inputType) => outputs[0] === inputType
|
|
2408
2688
|
);
|
|
@@ -2416,7 +2696,7 @@ function useCanvasOperations({ router }) {
|
|
|
2416
2696
|
];
|
|
2417
2697
|
} else {
|
|
2418
2698
|
let pushOffset = PUSH_NODES_OFFSET;
|
|
2419
|
-
if (!!lastInteractedWithNodeInputTypes.find((input) => input !==
|
|
2699
|
+
if (!!lastInteractedWithNodeInputTypes.find((input) => input !== NodeConnectionTypes.Main)) {
|
|
2420
2700
|
pushOffset += 140;
|
|
2421
2701
|
}
|
|
2422
2702
|
position = [
|
|
@@ -3075,7 +3355,9 @@ function useCanvasOperations({ router }) {
|
|
|
3075
3355
|
}
|
|
3076
3356
|
async function toggleChatOpen(source) {
|
|
3077
3357
|
const workflow = workflowsStore.getCurrentWorkflow();
|
|
3078
|
-
workflowsStore.
|
|
3358
|
+
workflowsStore.setPanelState(
|
|
3359
|
+
workflowsStore.chatPanelState === "closed" ? "attached" : "closed"
|
|
3360
|
+
);
|
|
3079
3361
|
const payload = {
|
|
3080
3362
|
workflow_id: workflow.id,
|
|
3081
3363
|
button_type: source
|
|
@@ -3108,6 +3390,7 @@ function useCanvasOperations({ router }) {
|
|
|
3108
3390
|
revertAddNode,
|
|
3109
3391
|
updateNodesPosition,
|
|
3110
3392
|
updateNodePosition,
|
|
3393
|
+
tidyUp,
|
|
3111
3394
|
revertUpdateNodePosition,
|
|
3112
3395
|
setNodeActive,
|
|
3113
3396
|
setNodeActiveByName,
|
|
@@ -3148,23 +3431,27 @@ function useCanvasOperations({ router }) {
|
|
|
3148
3431
|
};
|
|
3149
3432
|
}
|
|
3150
3433
|
export {
|
|
3151
|
-
|
|
3434
|
+
AINodesView as A,
|
|
3152
3435
|
RegularView as R,
|
|
3153
3436
|
TriggerView as T,
|
|
3154
|
-
|
|
3155
|
-
|
|
3437
|
+
useNodeCreatorStore as a,
|
|
3438
|
+
useCanvasOperations as b,
|
|
3156
3439
|
createCanvasConnectionHandleString as c,
|
|
3157
|
-
|
|
3158
|
-
|
|
3159
|
-
|
|
3160
|
-
|
|
3161
|
-
|
|
3440
|
+
capitalize as d,
|
|
3441
|
+
checkOverlap as e,
|
|
3442
|
+
mapLegacyConnectionsToCanvasConnections as f,
|
|
3443
|
+
useNodeType as g,
|
|
3444
|
+
upperFirst as h,
|
|
3162
3445
|
insertSpacersBetweenEndpoints as i,
|
|
3163
|
-
|
|
3164
|
-
|
|
3446
|
+
formatTriggerActionName as j,
|
|
3447
|
+
useViewStacks as k,
|
|
3448
|
+
camelCase as l,
|
|
3165
3449
|
mapLegacyEndpointsToCanvasConnectionPort as m,
|
|
3450
|
+
useKeyboardNavigation as n,
|
|
3451
|
+
AIView as o,
|
|
3166
3452
|
parseCanvasConnectionHandleString as p,
|
|
3453
|
+
flattenCreateElements as q,
|
|
3167
3454
|
sortNodeCreateElements as s,
|
|
3168
3455
|
transformNodeType as t,
|
|
3169
|
-
|
|
3456
|
+
usePinnedData as u
|
|
3170
3457
|
};
|