n8n-workflow-validator 1.2.0 → 1.3.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.
@@ -1 +1 @@
1
- {"version":3,"file":"fixer.d.ts","sourceRoot":"","sources":["../../src/core/fixer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,QAAQ,EAAE,QAAQ,GAAG,SAAS,CAAC;CACtC;AAsDD,QAAA,MAAM,wBAAwB,EAAE,eAAe,EAAwC,CAAC;AAExF,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,QAAQ,EAClB,KAAK,GAAE,eAAe,EAA6B,GAClD,SAAS,CAQX;AAED,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,QAAQ,GAAG,SAAS,CAErE;AAED,OAAO,EAAE,wBAAwB,EAAE,CAAC"}
1
+ {"version":3,"file":"fixer.d.ts","sourceRoot":"","sources":["../../src/core/fixer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,QAAQ,EAAE,QAAQ,GAAG,SAAS,CAAC;CACtC;AAwLD,QAAA,MAAM,wBAAwB,EAAE,eAAe,EAI9C,CAAC;AAEF,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,QAAQ,EAClB,KAAK,GAAE,eAAe,EAA6B,GAClD,SAAS,CAQX;AAED,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,QAAQ,GAAG,SAAS,CAErE;AAED,OAAO,EAAE,wBAAwB,EAAE,CAAC"}
@@ -38,7 +38,126 @@ const fixEmptyOptionsOnConditionalNodes = {
38
38
  return { fixed, warnings };
39
39
  },
40
40
  };
41
- const defaultExperimentalFixes = [fixEmptyOptionsOnConditionalNodes];
41
+ /**
42
+ * Fix Switch v3+ rule conditions missing 'options' object.
43
+ * Each rule's conditions must have options: { caseSensitive, leftValue, typeValidation, version }
44
+ */
45
+ const fixSwitchV3RuleConditionsOptions = {
46
+ id: 'switch-v3-rule-conditions-options',
47
+ description: "Add missing 'options' object to Switch v3+ rule conditions (required by n8n schema).",
48
+ apply(workflow) {
49
+ const warnings = [];
50
+ let fixed = 0;
51
+ if (!Array.isArray(workflow.nodes)) {
52
+ return { fixed, warnings };
53
+ }
54
+ for (const node of workflow.nodes) {
55
+ if (!node || typeof node !== 'object')
56
+ continue;
57
+ // Only apply to Switch v3+
58
+ if (node.type !== 'n8n-nodes-base.switch')
59
+ continue;
60
+ if (typeof node.typeVersion !== 'number' || node.typeVersion < 3)
61
+ continue;
62
+ const parameters = node.parameters;
63
+ if (!parameters)
64
+ continue;
65
+ const rules = parameters.rules;
66
+ if (!rules || typeof rules !== 'object')
67
+ continue;
68
+ const values = rules.values;
69
+ if (!Array.isArray(values))
70
+ continue;
71
+ for (const rule of values) {
72
+ if (!rule || typeof rule !== 'object')
73
+ continue;
74
+ const conditions = rule.conditions;
75
+ if (!conditions || typeof conditions !== 'object')
76
+ continue;
77
+ // Check if options is missing or incomplete
78
+ let needsFix = false;
79
+ let opts = conditions.options;
80
+ if (!opts || typeof opts !== 'object') {
81
+ opts = {};
82
+ needsFix = true;
83
+ }
84
+ // Ensure required fields exist
85
+ if (!('caseSensitive' in opts)) {
86
+ opts.caseSensitive = true;
87
+ needsFix = true;
88
+ }
89
+ if (!('leftValue' in opts)) {
90
+ opts.leftValue = '';
91
+ needsFix = true;
92
+ }
93
+ if (!('typeValidation' in opts)) {
94
+ opts.typeValidation = 'strict';
95
+ needsFix = true;
96
+ }
97
+ // Add version: 2 for Switch v3.2+
98
+ if (node.typeVersion >= 3.2 && !('version' in opts)) {
99
+ opts.version = 2;
100
+ needsFix = true;
101
+ }
102
+ if (needsFix) {
103
+ conditions.options = opts;
104
+ fixed++;
105
+ warnings.push(`Fixed node "${node.name}": Added missing 'options' to rule conditions`);
106
+ }
107
+ }
108
+ }
109
+ return { fixed, warnings };
110
+ },
111
+ };
112
+ /**
113
+ * Fix Switch v3+ fallbackOutput in wrong location.
114
+ * Should be at parameters.options.fallbackOutput, not parameters.rules.fallbackOutput
115
+ */
116
+ const fixSwitchV3FallbackOutputLocation = {
117
+ id: 'switch-v3-fallback-output-location',
118
+ description: "Move 'fallbackOutput' from rules to options for Switch v3+ nodes.",
119
+ apply(workflow) {
120
+ const warnings = [];
121
+ let fixed = 0;
122
+ if (!Array.isArray(workflow.nodes)) {
123
+ return { fixed, warnings };
124
+ }
125
+ for (const node of workflow.nodes) {
126
+ if (!node || typeof node !== 'object')
127
+ continue;
128
+ // Only apply to Switch v3+
129
+ if (node.type !== 'n8n-nodes-base.switch')
130
+ continue;
131
+ if (typeof node.typeVersion !== 'number' || node.typeVersion < 3)
132
+ continue;
133
+ const parameters = node.parameters;
134
+ if (!parameters)
135
+ continue;
136
+ const rules = parameters.rules;
137
+ if (!rules || typeof rules !== 'object')
138
+ continue;
139
+ // Check if fallbackOutput is incorrectly in rules
140
+ if ('fallbackOutput' in rules) {
141
+ const fallbackValue = rules.fallbackOutput;
142
+ delete rules.fallbackOutput;
143
+ // Ensure options object exists
144
+ if (!parameters.options || typeof parameters.options !== 'object') {
145
+ parameters.options = {};
146
+ }
147
+ // Move to options
148
+ parameters.options.fallbackOutput = fallbackValue;
149
+ fixed++;
150
+ warnings.push(`Fixed node "${node.name}": Moved 'fallbackOutput' from rules to options`);
151
+ }
152
+ }
153
+ return { fixed, warnings };
154
+ },
155
+ };
156
+ const defaultExperimentalFixes = [
157
+ fixEmptyOptionsOnConditionalNodes,
158
+ fixSwitchV3RuleConditionsOptions,
159
+ fixSwitchV3FallbackOutputLocation,
160
+ ];
42
161
  export function applyExperimentalFixes(workflow, fixes = defaultExperimentalFixes) {
43
162
  const results = [];
44
163
  for (const fix of fixes) {
@@ -1 +1 @@
1
- {"version":3,"file":"fixer.js","sourceRoot":"","sources":["../../src/core/fixer.ts"],"names":[],"mappings":"AAaA,SAAS,eAAe,CAAC,OAAoB;IAC3C,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC;QACtB,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;YAC3B,QAAQ,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;AAC7B,CAAC;AAED,MAAM,iCAAiC,GAAoB;IACzD,EAAE,EAAE,yBAAyB;IAC7B,WAAW,EAAE,mFAAmF;IAChG,KAAK,CAAC,QAAkB;QACtB,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,IAAI,KAAK,GAAG,CAAC,CAAC;QAEd,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACnC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;QAC7B,CAAC;QAED,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;YAClC,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;gBAAE,SAAS;YAEhD,IAAI,IAAI,CAAC,IAAI,KAAK,mBAAmB,IAAI,IAAI,CAAC,IAAI,KAAK,uBAAuB,EAAE,CAAC;gBAC/E,MAAM,UAAU,GAAI,IAAY,CAAC,UAAU,CAAC;gBAE5C,IACE,UAAU;oBACV,OAAO,UAAU,KAAK,QAAQ;oBAC9B,SAAS,IAAI,UAAU;oBACvB,OAAQ,UAAkB,CAAC,OAAO,KAAK,QAAQ;oBAC9C,UAAkB,CAAC,OAAO,KAAK,IAAI;oBACpC,MAAM,CAAC,IAAI,CAAE,UAAkB,CAAC,OAAiB,CAAC,CAAC,MAAM,KAAK,CAAC,EAC/D,CAAC;oBACD,OAAQ,UAAkB,CAAC,OAAO,CAAC;oBACnC,KAAK,EAAE,CAAC;oBACR,QAAQ,CAAC,IAAI,CACX,eAAgB,IAAY,CAAC,IAAI,+DAA+D,CACjG,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;IAC7B,CAAC;CACF,CAAC;AAEF,MAAM,wBAAwB,GAAsB,CAAC,iCAAiC,CAAC,CAAC;AAExF,MAAM,UAAU,sBAAsB,CACpC,QAAkB,EAClB,QAA2B,wBAAwB;IAEnD,MAAM,OAAO,GAAgB,EAAE,CAAC;IAEhC,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QACxB,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;IACpC,CAAC;IAED,OAAO,eAAe,CAAC,OAAO,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,QAAkB;IACxD,OAAO,iCAAiC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AAC3D,CAAC;AAED,OAAO,EAAE,wBAAwB,EAAE,CAAC"}
1
+ {"version":3,"file":"fixer.js","sourceRoot":"","sources":["../../src/core/fixer.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "n8n-workflow-validator",
3
- "version": "1.2.0",
3
+ "version": "1.3.0",
4
4
  "description": "n8n workflow validator using official n8n validation engine - identical to n8n editor behavior",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",