n8n-workflow 2.22.0 → 2.23.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 (81) hide show
  1. package/dist/cjs/credential-domain-restrictions.d.ts +35 -0
  2. package/dist/cjs/credential-domain-restrictions.d.ts.map +1 -0
  3. package/dist/cjs/credential-domain-restrictions.js +182 -0
  4. package/dist/cjs/credential-domain-restrictions.js.map +1 -0
  5. package/dist/cjs/execution-context.d.ts +2 -2
  6. package/dist/cjs/execution-context.js +6 -6
  7. package/dist/cjs/execution-context.js.map +1 -1
  8. package/dist/cjs/expression.d.ts.map +1 -1
  9. package/dist/cjs/expression.js +18 -7
  10. package/dist/cjs/expression.js.map +1 -1
  11. package/dist/cjs/index.d.ts +4 -1
  12. package/dist/cjs/index.d.ts.map +1 -1
  13. package/dist/cjs/index.js +5 -4
  14. package/dist/cjs/index.js.map +1 -1
  15. package/dist/cjs/interfaces.d.ts +29 -0
  16. package/dist/cjs/interfaces.d.ts.map +1 -1
  17. package/dist/cjs/interfaces.js.map +1 -1
  18. package/dist/cjs/node-grouping-validation.d.ts +50 -0
  19. package/dist/cjs/node-grouping-validation.d.ts.map +1 -0
  20. package/dist/cjs/node-grouping-validation.js +158 -0
  21. package/dist/cjs/node-grouping-validation.js.map +1 -0
  22. package/dist/cjs/sub-workflow-output.d.ts +6 -0
  23. package/dist/cjs/sub-workflow-output.d.ts.map +1 -0
  24. package/dist/cjs/sub-workflow-output.js +21 -0
  25. package/dist/cjs/sub-workflow-output.js.map +1 -0
  26. package/dist/cjs/typecheck.tsbuildinfo +1 -1
  27. package/dist/cjs/utils.d.ts +1 -13
  28. package/dist/cjs/utils.d.ts.map +1 -1
  29. package/dist/cjs/utils.js +12 -62
  30. package/dist/cjs/utils.js.map +1 -1
  31. package/dist/cjs/workflow-checksum.d.ts +3 -2
  32. package/dist/cjs/workflow-checksum.d.ts.map +1 -1
  33. package/dist/cjs/workflow-checksum.js +1 -0
  34. package/dist/cjs/workflow-checksum.js.map +1 -1
  35. package/dist/cjs/workflow-data-proxy.d.ts.map +1 -1
  36. package/dist/cjs/workflow-data-proxy.js +9 -0
  37. package/dist/cjs/workflow-data-proxy.js.map +1 -1
  38. package/dist/cjs/workflow.d.ts.map +1 -1
  39. package/dist/cjs/workflow.js +4 -0
  40. package/dist/cjs/workflow.js.map +1 -1
  41. package/dist/esm/credential-domain-restrictions.d.ts +35 -0
  42. package/dist/esm/credential-domain-restrictions.d.ts.map +1 -0
  43. package/dist/esm/credential-domain-restrictions.js +164 -0
  44. package/dist/esm/credential-domain-restrictions.js.map +1 -0
  45. package/dist/esm/execution-context.d.ts +2 -2
  46. package/dist/esm/execution-context.js +6 -6
  47. package/dist/esm/execution-context.js.map +1 -1
  48. package/dist/esm/expression.d.ts.map +1 -1
  49. package/dist/esm/expression.js +18 -7
  50. package/dist/esm/expression.js.map +1 -1
  51. package/dist/esm/index.d.ts +4 -1
  52. package/dist/esm/index.d.ts.map +1 -1
  53. package/dist/esm/index.js +4 -1
  54. package/dist/esm/index.js.map +1 -1
  55. package/dist/esm/interfaces.d.ts +29 -0
  56. package/dist/esm/interfaces.d.ts.map +1 -1
  57. package/dist/esm/interfaces.js.map +1 -1
  58. package/dist/esm/node-grouping-validation.d.ts +50 -0
  59. package/dist/esm/node-grouping-validation.d.ts.map +1 -0
  60. package/dist/esm/node-grouping-validation.js +144 -0
  61. package/dist/esm/node-grouping-validation.js.map +1 -0
  62. package/dist/esm/sub-workflow-output.d.ts +6 -0
  63. package/dist/esm/sub-workflow-output.d.ts.map +1 -0
  64. package/dist/esm/sub-workflow-output.js +8 -0
  65. package/dist/esm/sub-workflow-output.js.map +1 -0
  66. package/dist/esm/typecheck.tsbuildinfo +1 -1
  67. package/dist/esm/utils.d.ts +1 -13
  68. package/dist/esm/utils.d.ts.map +1 -1
  69. package/dist/esm/utils.js +11 -60
  70. package/dist/esm/utils.js.map +1 -1
  71. package/dist/esm/workflow-checksum.d.ts +3 -2
  72. package/dist/esm/workflow-checksum.d.ts.map +1 -1
  73. package/dist/esm/workflow-checksum.js +1 -0
  74. package/dist/esm/workflow-checksum.js.map +1 -1
  75. package/dist/esm/workflow-data-proxy.d.ts.map +1 -1
  76. package/dist/esm/workflow-data-proxy.js +10 -1
  77. package/dist/esm/workflow-data-proxy.js.map +1 -1
  78. package/dist/esm/workflow.d.ts.map +1 -1
  79. package/dist/esm/workflow.js +4 -0
  80. package/dist/esm/workflow.js.map +1 -1
  81. package/package.json +6 -6
@@ -0,0 +1,144 @@
1
+ import { buildAdjacencyList, parseExtractableSubgraphSelection, } from './graph/graph-utils';
2
+ import { NodeConnectionTypes, } from './interfaces';
3
+ import { isTriggerNode } from './node-helpers';
4
+ export function validateNodeSelectionForExtraction({ nodes, connectionsBySourceNode, getNodeType, getNodeInputs, getNodeOutputs, }) {
5
+ const triggers = nodes.filter((node) => {
6
+ const nodeType = getNodeType(node);
7
+ return nodeType ? isTriggerNode(nodeType) : false;
8
+ });
9
+ if (triggers.length > 0) {
10
+ return {
11
+ valid: false,
12
+ reason: 'trigger-selected',
13
+ triggers: triggers.map((node) => node.name),
14
+ };
15
+ }
16
+ const adjacencyList = buildAdjacencyList(connectionsBySourceNode);
17
+ const selectedNodeNames = new Set(nodes.map((node) => node.name));
18
+ const selection = parseExtractableSubgraphSelection(selectedNodeNames, adjacencyList);
19
+ if (Array.isArray(selection)) {
20
+ return { valid: false, reason: 'invalid-subgraph', errors: selection };
21
+ }
22
+ const disconnectedSelectionError = findDisconnectedSelectionError(selectedNodeNames, adjacencyList);
23
+ if (disconnectedSelectionError) {
24
+ return { valid: false, reason: 'invalid-subgraph', errors: [disconnectedSelectionError] };
25
+ }
26
+ const nodesByName = new Map(nodes.map((node) => [node.name, node]));
27
+ const { start, end } = selection;
28
+ if (start &&
29
+ !hasSingleMainIO(start, 'inputs', nodesByName, getNodeType, getNodeInputs, getNodeOutputs)) {
30
+ return { valid: false, reason: 'multiple-input-branches', node: start };
31
+ }
32
+ if (end &&
33
+ !hasSingleMainIO(end, 'outputs', nodesByName, getNodeType, getNodeInputs, getNodeOutputs)) {
34
+ return { valid: false, reason: 'multiple-output-branches', node: end };
35
+ }
36
+ return { valid: true, subGraph: nodes, subGraphData: selection };
37
+ }
38
+ export function validateNodeSelectionForGrouping(input) {
39
+ if (input.nodes.length < 2) {
40
+ return { valid: false, reason: 'too-few-nodes' };
41
+ }
42
+ const alreadyGroupedNodeIds = findAlreadyGroupedNodeIds(input.nodes.map((node) => node.id), input.existingNodeGroups ?? []);
43
+ if (alreadyGroupedNodeIds.length > 0) {
44
+ return { valid: false, reason: 'node-already-grouped', nodeIds: alreadyGroupedNodeIds };
45
+ }
46
+ const extractableResult = validateNodeSelectionForExtraction(input);
47
+ if (!extractableResult.valid)
48
+ return extractableResult;
49
+ const nodeNames = new Set(extractableResult.subGraph.map((node) => node.name));
50
+ const boundaryConnection = findNonMainBoundaryConnection(nodeNames, input.connectionsBySourceNode);
51
+ if (boundaryConnection) {
52
+ return { valid: false, reason: 'non-main-boundary', connection: boundaryConnection };
53
+ }
54
+ return extractableResult;
55
+ }
56
+ function findAlreadyGroupedNodeIds(selectionNodeIds, existingNodeGroups) {
57
+ const groupedNodeIds = new Set(existingNodeGroups.flatMap((group) => group.nodeIds));
58
+ return selectionNodeIds.filter((nodeId) => groupedNodeIds.has(nodeId));
59
+ }
60
+ function hasSingleMainIO(nodeName, direction, nodesByName, getNodeType, getNodeInputs, getNodeOutputs) {
61
+ const node = nodesByName.get(nodeName);
62
+ if (!node)
63
+ return true;
64
+ const nodeType = getNodeType(node);
65
+ if (!nodeType)
66
+ return true;
67
+ const ios = direction === 'inputs'
68
+ ? (getNodeInputs?.(node, nodeType) ?? nodeType.inputs)
69
+ : (getNodeOutputs?.(node, nodeType) ?? nodeType.outputs);
70
+ if (!Array.isArray(ios))
71
+ return true;
72
+ return ios.filter(isMainIo).length <= 1;
73
+ }
74
+ function isMainIo(io) {
75
+ return typeof io === 'string'
76
+ ? io === NodeConnectionTypes.Main
77
+ : io.type === NodeConnectionTypes.Main;
78
+ }
79
+ function findDisconnectedSelectionError(nodeNames, currentAdjacencyList) {
80
+ if (nodeNames.size <= 1)
81
+ return null;
82
+ const neighborsByNodeName = new Map();
83
+ for (const nodeName of nodeNames) {
84
+ neighborsByNodeName.set(nodeName, new Set());
85
+ }
86
+ for (const [sourceNodeName, connections] of currentAdjacencyList.entries()) {
87
+ if (!nodeNames.has(sourceNodeName))
88
+ continue;
89
+ const sourceNeighbors = neighborsByNodeName.get(sourceNodeName);
90
+ if (!sourceNeighbors)
91
+ continue;
92
+ for (const connection of connections) {
93
+ const targetNodeName = connection.node;
94
+ if (!nodeNames.has(targetNodeName) || targetNodeName === sourceNodeName)
95
+ continue;
96
+ sourceNeighbors.add(targetNodeName);
97
+ neighborsByNodeName.get(targetNodeName)?.add(sourceNodeName);
98
+ }
99
+ }
100
+ const firstNodeName = nodeNames.values().next().value;
101
+ if (!firstNodeName)
102
+ return null;
103
+ const visited = new Set([firstNodeName]);
104
+ const queue = [firstNodeName];
105
+ while (queue.length > 0) {
106
+ const currentNodeName = queue.shift();
107
+ if (!currentNodeName)
108
+ continue;
109
+ for (const neighborNodeName of neighborsByNodeName.get(currentNodeName) ?? []) {
110
+ if (visited.has(neighborNodeName))
111
+ continue;
112
+ visited.add(neighborNodeName);
113
+ queue.push(neighborNodeName);
114
+ }
115
+ }
116
+ if (visited.size === nodeNames.size)
117
+ return null;
118
+ const disconnectedNodeName = Array.from(nodeNames).find((nodeName) => !visited.has(nodeName));
119
+ if (!disconnectedNodeName)
120
+ return null;
121
+ return {
122
+ errorCode: 'No Continuous Path From Root To Leaf In Selection',
123
+ start: firstNodeName,
124
+ end: disconnectedNodeName,
125
+ };
126
+ }
127
+ function findNonMainBoundaryConnection(nodeNames, connectionsBySourceNode) {
128
+ for (const [sourceNodeName, sourceConnections] of Object.entries(connectionsBySourceNode)) {
129
+ const sourceInside = nodeNames.has(sourceNodeName);
130
+ for (const [type, connectionsByOutputIndex] of Object.entries(sourceConnections)) {
131
+ if (type === NodeConnectionTypes.Main)
132
+ continue;
133
+ for (const connections of connectionsByOutputIndex) {
134
+ for (const connection of connections ?? []) {
135
+ if (sourceInside === nodeNames.has(connection.node))
136
+ continue;
137
+ return { source: sourceNodeName, target: connection.node, type };
138
+ }
139
+ }
140
+ }
141
+ }
142
+ return null;
143
+ }
144
+ //# sourceMappingURL=node-grouping-validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-grouping-validation.js","sourceRoot":"","sources":["../../src/node-grouping-validation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { INodeExecutionData, ITaskData } from './interfaces';
2
+ /**
3
+ * For each output branch, concatenate items from every run in the order they were produced.
4
+ */
5
+ export declare function mergeRunsPerBranch(runs: ITaskData[]): Array<INodeExecutionData[] | null>;
6
+ //# sourceMappingURL=sub-workflow-output.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sub-workflow-output.d.ts","sourceRoot":"","sources":["../../src/sub-workflow-output.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAElE;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC,kBAAkB,EAAE,GAAG,IAAI,CAAC,CAKxF"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * For each output branch, concatenate items from every run in the order they were produced.
3
+ */
4
+ export function mergeRunsPerBranch(runs) {
5
+ const branchCount = runs.reduce((max, run) => Math.max(max, run.data?.main?.length ?? 0), 0);
6
+ return Array.from({ length: branchCount }, (_, branch) => runs.flatMap((run) => run.data?.main?.[branch] ?? []));
7
+ }
8
+ //# sourceMappingURL=sub-workflow-output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sub-workflow-output.js","sourceRoot":"","sources":["../../src/sub-workflow-output.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAiB;IACnD,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7F,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CACxD,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CACrD,CAAC;AACH,CAAC"}