n8n-workflow 2.20.1 → 2.21.1

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 (79) hide show
  1. package/dist/cjs/execution-context.d.ts +3 -1
  2. package/dist/cjs/execution-context.d.ts.map +1 -1
  3. package/dist/cjs/execution-context.js +1 -0
  4. package/dist/cjs/execution-context.js.map +1 -1
  5. package/dist/cjs/execution-status.d.ts +3 -0
  6. package/dist/cjs/execution-status.d.ts.map +1 -1
  7. package/dist/cjs/execution-status.js +6 -1
  8. package/dist/cjs/execution-status.js.map +1 -1
  9. package/dist/cjs/expression.d.ts.map +1 -1
  10. package/dist/cjs/expression.js +14 -3
  11. package/dist/cjs/expression.js.map +1 -1
  12. package/dist/cjs/extensions/expression-parser.d.ts.map +1 -1
  13. package/dist/cjs/extensions/expression-parser.js +5 -0
  14. package/dist/cjs/extensions/expression-parser.js.map +1 -1
  15. package/dist/cjs/index.d.ts +2 -0
  16. package/dist/cjs/index.d.ts.map +1 -1
  17. package/dist/cjs/index.js +3 -1
  18. package/dist/cjs/index.js.map +1 -1
  19. package/dist/cjs/interfaces.d.ts +85 -2
  20. package/dist/cjs/interfaces.d.ts.map +1 -1
  21. package/dist/cjs/interfaces.js.map +1 -1
  22. package/dist/cjs/node-helpers.d.ts +4 -0
  23. package/dist/cjs/node-helpers.d.ts.map +1 -1
  24. package/dist/cjs/node-helpers.js +25 -6
  25. package/dist/cjs/node-helpers.js.map +1 -1
  26. package/dist/cjs/observable-object.d.ts.map +1 -1
  27. package/dist/cjs/observable-object.js +2 -0
  28. package/dist/cjs/observable-object.js.map +1 -1
  29. package/dist/cjs/trimmed-task-data.d.ts +10 -0
  30. package/dist/cjs/trimmed-task-data.d.ts.map +1 -0
  31. package/dist/cjs/trimmed-task-data.js +32 -0
  32. package/dist/cjs/trimmed-task-data.js.map +1 -0
  33. package/dist/cjs/typecheck.tsbuildinfo +1 -1
  34. package/dist/cjs/utils.d.ts +1 -0
  35. package/dist/cjs/utils.d.ts.map +1 -1
  36. package/dist/cjs/workflow-structure-validation.d.ts +99 -0
  37. package/dist/cjs/workflow-structure-validation.d.ts.map +1 -0
  38. package/dist/cjs/workflow-structure-validation.js +162 -0
  39. package/dist/cjs/workflow-structure-validation.js.map +1 -0
  40. package/dist/esm/execution-context.d.ts +3 -1
  41. package/dist/esm/execution-context.d.ts.map +1 -1
  42. package/dist/esm/execution-context.js +1 -0
  43. package/dist/esm/execution-context.js.map +1 -1
  44. package/dist/esm/execution-status.d.ts +3 -0
  45. package/dist/esm/execution-status.d.ts.map +1 -1
  46. package/dist/esm/execution-status.js +4 -0
  47. package/dist/esm/execution-status.js.map +1 -1
  48. package/dist/esm/expression.d.ts.map +1 -1
  49. package/dist/esm/expression.js +14 -3
  50. package/dist/esm/expression.js.map +1 -1
  51. package/dist/esm/extensions/expression-parser.d.ts.map +1 -1
  52. package/dist/esm/extensions/expression-parser.js +5 -0
  53. package/dist/esm/extensions/expression-parser.js.map +1 -1
  54. package/dist/esm/index.d.ts +2 -0
  55. package/dist/esm/index.d.ts.map +1 -1
  56. package/dist/esm/index.js +2 -0
  57. package/dist/esm/index.js.map +1 -1
  58. package/dist/esm/interfaces.d.ts +85 -2
  59. package/dist/esm/interfaces.d.ts.map +1 -1
  60. package/dist/esm/interfaces.js.map +1 -1
  61. package/dist/esm/node-helpers.d.ts +4 -0
  62. package/dist/esm/node-helpers.d.ts.map +1 -1
  63. package/dist/esm/node-helpers.js +24 -6
  64. package/dist/esm/node-helpers.js.map +1 -1
  65. package/dist/esm/observable-object.d.ts.map +1 -1
  66. package/dist/esm/observable-object.js +2 -0
  67. package/dist/esm/observable-object.js.map +1 -1
  68. package/dist/esm/trimmed-task-data.d.ts +10 -0
  69. package/dist/esm/trimmed-task-data.d.ts.map +1 -0
  70. package/dist/esm/trimmed-task-data.js +18 -0
  71. package/dist/esm/trimmed-task-data.js.map +1 -0
  72. package/dist/esm/typecheck.tsbuildinfo +1 -1
  73. package/dist/esm/utils.d.ts +1 -0
  74. package/dist/esm/utils.d.ts.map +1 -1
  75. package/dist/esm/workflow-structure-validation.d.ts +99 -0
  76. package/dist/esm/workflow-structure-validation.d.ts.map +1 -0
  77. package/dist/esm/workflow-structure-validation.js +145 -0
  78. package/dist/esm/workflow-structure-validation.js.map +1 -0
  79. package/package.json +5 -5
@@ -66,6 +66,7 @@ export declare function updateDisplayOptions(displayOptions: IDisplayOptions, pr
66
66
  hint?: string;
67
67
  builderHint?: import("./interfaces").IParameterBuilderHint;
68
68
  disabledOptions?: IDisplayOptions;
69
+ envFeatureFlag?: Uppercase<string>;
69
70
  options?: Array<import("./interfaces").INodePropertyOptions | INodeProperties | import("./interfaces").INodePropertyCollection>;
70
71
  placeholder?: string;
71
72
  isNodeSetting?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,99 @@
1
+ import { z } from 'zod';
2
+ declare const workflowStructureSchema: z.ZodObject<{
3
+ nodes: z.ZodArray<z.ZodObject<{
4
+ name: z.ZodString;
5
+ type: z.ZodString;
6
+ position: z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>;
7
+ parameters: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
8
+ id: z.ZodOptional<z.ZodString>;
9
+ typeVersion: z.ZodOptional<z.ZodNumber>;
10
+ disabled: z.ZodOptional<z.ZodBoolean>;
11
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
12
+ name: z.ZodString;
13
+ type: z.ZodString;
14
+ position: z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>;
15
+ parameters: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
16
+ id: z.ZodOptional<z.ZodString>;
17
+ typeVersion: z.ZodOptional<z.ZodNumber>;
18
+ disabled: z.ZodOptional<z.ZodBoolean>;
19
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
20
+ name: z.ZodString;
21
+ type: z.ZodString;
22
+ position: z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>;
23
+ parameters: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
24
+ id: z.ZodOptional<z.ZodString>;
25
+ typeVersion: z.ZodOptional<z.ZodNumber>;
26
+ disabled: z.ZodOptional<z.ZodBoolean>;
27
+ }, z.ZodTypeAny, "passthrough">>, "many">;
28
+ connections: z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodArray<z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodObject<{
29
+ node: z.ZodString;
30
+ type: z.ZodString;
31
+ index: z.ZodNumber;
32
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
33
+ node: z.ZodString;
34
+ type: z.ZodString;
35
+ index: z.ZodNumber;
36
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
37
+ node: z.ZodString;
38
+ type: z.ZodString;
39
+ index: z.ZodNumber;
40
+ }, z.ZodTypeAny, "passthrough">>, "many">>>, "many">>>;
41
+ }, "strip", z.ZodTypeAny, {
42
+ nodes: z.objectOutputType<{
43
+ name: z.ZodString;
44
+ type: z.ZodString;
45
+ position: z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>;
46
+ parameters: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
47
+ id: z.ZodOptional<z.ZodString>;
48
+ typeVersion: z.ZodOptional<z.ZodNumber>;
49
+ disabled: z.ZodOptional<z.ZodBoolean>;
50
+ }, z.ZodTypeAny, "passthrough">[];
51
+ connections: Record<string, Record<string, (z.objectOutputType<{
52
+ node: z.ZodString;
53
+ type: z.ZodString;
54
+ index: z.ZodNumber;
55
+ }, z.ZodTypeAny, "passthrough">[] | null | undefined)[]>>;
56
+ }, {
57
+ nodes: z.objectInputType<{
58
+ name: z.ZodString;
59
+ type: z.ZodString;
60
+ position: z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>;
61
+ parameters: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
62
+ id: z.ZodOptional<z.ZodString>;
63
+ typeVersion: z.ZodOptional<z.ZodNumber>;
64
+ disabled: z.ZodOptional<z.ZodBoolean>;
65
+ }, z.ZodTypeAny, "passthrough">[];
66
+ connections: Record<string, Record<string, (z.objectInputType<{
67
+ node: z.ZodString;
68
+ type: z.ZodString;
69
+ index: z.ZodNumber;
70
+ }, z.ZodTypeAny, "passthrough">[] | null | undefined)[]>>;
71
+ }>;
72
+ type WorkflowStructureData = z.infer<typeof workflowStructureSchema>;
73
+ type WorkflowStructureGraphIssueCode = 'duplicate_node_name' | 'unknown_connection_source' | 'unknown_connection_target';
74
+ type WorkflowStructureGraphIssue = {
75
+ code: WorkflowStructureGraphIssueCode;
76
+ path: Array<string | number>;
77
+ message: string;
78
+ };
79
+ export type WorkflowStructureIssue = z.ZodIssue | WorkflowStructureGraphIssue;
80
+ type WorkflowStructureValidationSuccess = {
81
+ success: true;
82
+ data: WorkflowStructureData;
83
+ };
84
+ type WorkflowStructureValidationFailure = {
85
+ success: false;
86
+ issues: WorkflowStructureIssue[];
87
+ };
88
+ export type WorkflowStructureValidationResult = WorkflowStructureValidationSuccess | WorkflowStructureValidationFailure;
89
+ export declare const formatWorkflowStructureIssuePath: (path: Array<string | number>) => string;
90
+ export declare class WorkflowStructureValidationError extends Error {
91
+ readonly issues: WorkflowStructureIssue[];
92
+ name: string;
93
+ readonly description: string;
94
+ constructor(issues: WorkflowStructureIssue[]);
95
+ }
96
+ export declare function safeParseWorkflowStructure(input: unknown): WorkflowStructureValidationResult;
97
+ export declare function parseWorkflowStructure(input: unknown): WorkflowStructureData;
98
+ export {};
99
+ //# sourceMappingURL=workflow-structure-validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-structure-validation.d.ts","sourceRoot":"","sources":["../../src/workflow-structure-validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AA2DxB,QAAA,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAG3B,CAAC;AAEH,KAAK,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAErE,KAAK,+BAA+B,GACjC,qBAAqB,GACrB,2BAA2B,GAC3B,2BAA2B,CAAC;AAE/B,KAAK,2BAA2B,GAAG;IAClC,IAAI,EAAE,+BAA+B,CAAC;IACtC,IAAI,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,QAAQ,GAAG,2BAA2B,CAAC;AAE9E,KAAK,kCAAkC,GAAG;IACzC,OAAO,EAAE,IAAI,CAAC;IACd,IAAI,EAAE,qBAAqB,CAAC;CAC5B,CAAC;AAEF,KAAK,kCAAkC,GAAG;IACzC,OAAO,EAAE,KAAK,CAAC;IACf,MAAM,EAAE,sBAAsB,EAAE,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,iCAAiC,GAC1C,kCAAkC,GAClC,kCAAkC,CAAC;AAEtC,eAAO,MAAM,gCAAgC,GAAI,MAAM,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,KAAG,MAO/E,CAAC;AAOF,qBAAa,gCAAiC,SAAQ,KAAK;IAK9C,QAAQ,CAAC,MAAM,EAAE,sBAAsB,EAAE;IAJ5C,IAAI,SAAsC;IAEnD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;gBAER,MAAM,EAAE,sBAAsB,EAAE;CAIrD;AAED,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,OAAO,GAAG,iCAAiC,CAqE5F;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,qBAAqB,CAQ5E"}
@@ -0,0 +1,145 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * Workflow Structure Validation
4
+ *
5
+ * Single source of truth for validating workflow **structure** — the minimum
6
+ * shape that the editor and runtime assume is always present and correctly
7
+ * formed. Intentionally separate from activation/publish validation
8
+ * (WorkflowValidationService) which checks semantic correctness (trigger
9
+ * presence, known node types, credential issues, etc.).
10
+ *
11
+ * Lives in n8n-workflow so it can be shared by:
12
+ * - Backend: create/update/import reject malformed payloads (400)
13
+ * - Frontend: open path warns but still renders; import path blocks
14
+ *
15
+ * Validates:
16
+ * - Required node fields (name, type, position)
17
+ * - Position is a 2-number tuple
18
+ * - Connection entries have valid node/type/index
19
+ * - No duplicate node names
20
+ * - Connection source/target keys reference existing nodes
21
+ *
22
+ * Does NOT validate:
23
+ * - Whether a node type is installed
24
+ * - Node parameter correctness
25
+ * - Credential validity
26
+ * - Activation readiness
27
+ *
28
+ */
29
+ const workflowNodeStructureSchema = z
30
+ .object({
31
+ name: z.string().min(1),
32
+ type: z.string().min(1),
33
+ position: z.tuple([z.number(), z.number()]),
34
+ parameters: z.record(z.string(), z.unknown()).optional(),
35
+ id: z.string().optional(),
36
+ typeVersion: z.number().optional(),
37
+ disabled: z.boolean().optional(),
38
+ })
39
+ .passthrough();
40
+ const connectionEntrySchema = z
41
+ .object({
42
+ node: z.string().min(1),
43
+ type: z.string().min(1),
44
+ index: z.number().int().min(0),
45
+ })
46
+ .passthrough();
47
+ // Buckets can be null when a multi-output node has unused output slots.
48
+ // Matches NodeInputConnections type.
49
+ const connectionBucketSchema = z.array(connectionEntrySchema).nullable().optional();
50
+ const workflowConnectionsStructureSchema = z.record(z.string(), z.record(z.string(), z.array(connectionBucketSchema)));
51
+ const workflowStructureSchema = z.object({
52
+ nodes: z.array(workflowNodeStructureSchema),
53
+ connections: workflowConnectionsStructureSchema,
54
+ });
55
+ export const formatWorkflowStructureIssuePath = (path) => {
56
+ if (path.length === 0)
57
+ return 'workflow';
58
+ return path.reduce((acc, segment) => {
59
+ if (typeof segment === 'number')
60
+ return `${acc}[${segment}]`;
61
+ return acc ? `${acc}.${segment}` : segment;
62
+ }, '');
63
+ };
64
+ const formatIssuesDescription = (issues) => issues
65
+ .map(({ path, message }) => `${formatWorkflowStructureIssuePath(path)}: ${message}`)
66
+ .join('\n');
67
+ export class WorkflowStructureValidationError extends Error {
68
+ issues;
69
+ name = 'WorkflowStructureValidationError';
70
+ description;
71
+ constructor(issues) {
72
+ super('Invalid workflow structure');
73
+ this.issues = issues;
74
+ this.description = formatIssuesDescription(issues);
75
+ }
76
+ }
77
+ export function safeParseWorkflowStructure(input) {
78
+ const parsed = workflowStructureSchema.safeParse(input);
79
+ if (!parsed.success) {
80
+ return {
81
+ success: false,
82
+ issues: parsed.error.issues,
83
+ };
84
+ }
85
+ const { nodes, connections } = parsed.data;
86
+ const issues = [];
87
+ const nodeNames = new Set();
88
+ for (const [index, node] of nodes.entries()) {
89
+ if (nodeNames.has(node.name)) {
90
+ issues.push({
91
+ path: ['nodes', index, 'name'],
92
+ message: `Duplicate node name "${node.name}"`,
93
+ code: 'duplicate_node_name',
94
+ });
95
+ continue;
96
+ }
97
+ nodeNames.add(node.name);
98
+ }
99
+ for (const sourceNodeName of Object.keys(connections)) {
100
+ if (!nodeNames.has(sourceNodeName)) {
101
+ issues.push({
102
+ path: ['connections', sourceNodeName],
103
+ message: `Connection source "${sourceNodeName}" does not reference an existing node`,
104
+ code: 'unknown_connection_source',
105
+ });
106
+ }
107
+ const connectionTypes = connections[sourceNodeName];
108
+ for (const connectionType of Object.keys(connectionTypes)) {
109
+ const buckets = connectionTypes[connectionType];
110
+ for (const [sourceIndex, bucket] of buckets.entries()) {
111
+ for (const [targetIndex, connection] of (bucket ?? []).entries()) {
112
+ if (!nodeNames.has(connection.node)) {
113
+ issues.push({
114
+ path: [
115
+ 'connections',
116
+ sourceNodeName,
117
+ connectionType,
118
+ sourceIndex,
119
+ targetIndex,
120
+ 'node',
121
+ ],
122
+ message: `Connection target "${connection.node}" does not reference an existing node`,
123
+ code: 'unknown_connection_target',
124
+ });
125
+ }
126
+ }
127
+ }
128
+ }
129
+ }
130
+ if (issues.length > 0) {
131
+ return { success: false, issues };
132
+ }
133
+ return {
134
+ success: true,
135
+ data: parsed.data,
136
+ };
137
+ }
138
+ export function parseWorkflowStructure(input) {
139
+ const result = safeParseWorkflowStructure(input);
140
+ if (!result.success) {
141
+ throw new WorkflowStructureValidationError(result.issues);
142
+ }
143
+ return result.data;
144
+ }
145
+ //# sourceMappingURL=workflow-structure-validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-structure-validation.js","sourceRoot":"","sources":["../../src/workflow-structure-validation.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "n8n-workflow",
3
- "version": "2.20.1",
3
+ "version": "2.21.1",
4
4
  "description": "Workflow base code of n8n",
5
5
  "types": "dist/esm/index.d.ts",
6
6
  "module": "dist/esm/index.js",
@@ -34,9 +34,9 @@
34
34
  "vitest": "^4.1.1",
35
35
  "vitest-mock-extended": "^3.1.0",
36
36
  "zod": "3.25.67",
37
- "@n8n/config": "2.19.1",
38
37
  "@n8n/typescript-config": "1.4.0",
39
- "@n8n/vitest-config": "1.10.0"
38
+ "@n8n/vitest-config": "1.10.0",
39
+ "@n8n/config": "2.20.0"
40
40
  },
41
41
  "dependencies": {
42
42
  "ast-types": "0.16.1",
@@ -56,8 +56,8 @@
56
56
  "xml2js": "0.6.2",
57
57
  "jsonrepair": "3.13.2",
58
58
  "@n8n/errors": "0.8.0",
59
- "@n8n/tournament": "1.1.0",
60
- "@n8n/expression-runtime": "0.12.1"
59
+ "@n8n/expression-runtime": "0.13.1",
60
+ "@n8n/tournament": "1.1.1"
61
61
  },
62
62
  "peerDependencies": {
63
63
  "zod": ">=3.25.0 <4"