mirror of
https://github.com/Abdulazizzn/n8n-enterprise-unlocked.git
synced 2025-12-17 18:12:04 +00:00
🐛 Fix issue with IF&Switch node for undefined expressions #1099
This commit is contained in:
@@ -265,7 +265,7 @@ export default mixins(
|
|||||||
|
|
||||||
} else if (value.charAt(0) === '^') {
|
} else if (value.charAt(0) === '^') {
|
||||||
// Is variable
|
// Is variable
|
||||||
let displayValue = `{{${value.slice(1)}}}` as string | number | boolean | null;
|
let displayValue = `{{${value.slice(1)}}}` as string | number | boolean | null | undefined;
|
||||||
if (this.resolvedValue) {
|
if (this.resolvedValue) {
|
||||||
displayValue = [null, undefined].includes(displayValue as null | undefined) ? '' : displayValue;
|
displayValue = [null, undefined].includes(displayValue as null | undefined) ? '' : displayValue;
|
||||||
displayValue = this.resolveParameterString((displayValue as string).toString()) as NodeParameterValue;
|
displayValue = this.resolveParameterString((displayValue as string).toString()) as NodeParameterValue;
|
||||||
|
|||||||
@@ -841,7 +841,7 @@ export class ActiveCampaign implements INodeType {
|
|||||||
source: this.getNodeParameter('source', i) as string,
|
source: this.getNodeParameter('source', i) as string,
|
||||||
email: this.getNodeParameter('email', i) as string,
|
email: this.getNodeParameter('email', i) as string,
|
||||||
totalPrice: this.getNodeParameter('totalPrice', i) as number,
|
totalPrice: this.getNodeParameter('totalPrice', i) as number,
|
||||||
currency: this.getNodeParameter('currency', i).toString().toUpperCase() as string,
|
currency: this.getNodeParameter('currency', i)!.toString().toUpperCase() as string,
|
||||||
externalCreatedDate: this.getNodeParameter('externalCreatedDate', i) as string,
|
externalCreatedDate: this.getNodeParameter('externalCreatedDate', i) as string,
|
||||||
connectionid: this.getNodeParameter('connectionid', i) as number,
|
connectionid: this.getNodeParameter('connectionid', i) as number,
|
||||||
customerid: this.getNodeParameter('customerid', i) as number,
|
customerid: this.getNodeParameter('customerid', i) as number,
|
||||||
|
|||||||
@@ -234,27 +234,27 @@ export class If implements INodeType {
|
|||||||
const compareOperationFunctions: {
|
const compareOperationFunctions: {
|
||||||
[key: string]: (value1: NodeParameterValue, value2: NodeParameterValue) => boolean;
|
[key: string]: (value1: NodeParameterValue, value2: NodeParameterValue) => boolean;
|
||||||
} = {
|
} = {
|
||||||
contains: (value1: NodeParameterValue, value2: NodeParameterValue) => value1.toString().includes(value2.toString()),
|
contains: (value1: NodeParameterValue, value2: NodeParameterValue) => (value1 || '').toString().includes((value2 || '').toString()),
|
||||||
notContains: (value1: NodeParameterValue, value2: NodeParameterValue) => !value1.toString().includes(value2.toString()),
|
notContains: (value1: NodeParameterValue, value2: NodeParameterValue) => !(value1 || '').toString().includes((value2 || '').toString()),
|
||||||
equal: (value1: NodeParameterValue, value2: NodeParameterValue) => value1 === value2,
|
equal: (value1: NodeParameterValue, value2: NodeParameterValue) => value1 === value2,
|
||||||
notEqual: (value1: NodeParameterValue, value2: NodeParameterValue) => value1 !== value2,
|
notEqual: (value1: NodeParameterValue, value2: NodeParameterValue) => value1 !== value2,
|
||||||
larger: (value1: NodeParameterValue, value2: NodeParameterValue) => value1 > value2,
|
larger: (value1: NodeParameterValue, value2: NodeParameterValue) => (value1 || 0) > (value2 || 0),
|
||||||
largerEqual: (value1: NodeParameterValue, value2: NodeParameterValue) => value1 >= value2,
|
largerEqual: (value1: NodeParameterValue, value2: NodeParameterValue) => (value1 || 0) >= (value2 || 0),
|
||||||
smaller: (value1: NodeParameterValue, value2: NodeParameterValue) => value1 < value2,
|
smaller: (value1: NodeParameterValue, value2: NodeParameterValue) => (value1 || 0) < (value2 || 0),
|
||||||
smallerEqual: (value1: NodeParameterValue, value2: NodeParameterValue) => value1 <= value2,
|
smallerEqual: (value1: NodeParameterValue, value2: NodeParameterValue) => (value1 || 0) <= (value2 || 0),
|
||||||
regex: (value1: NodeParameterValue, value2: NodeParameterValue) => {
|
regex: (value1: NodeParameterValue, value2: NodeParameterValue) => {
|
||||||
const regexMatch = value2.toString().match(new RegExp('^/(.*?)/([gimy]*)$'));
|
const regexMatch = (value2 || '').toString().match(new RegExp('^/(.*?)/([gimy]*)$'));
|
||||||
|
|
||||||
let regex: RegExp;
|
let regex: RegExp;
|
||||||
if (!regexMatch) {
|
if (!regexMatch) {
|
||||||
regex = new RegExp(value2.toString());
|
regex = new RegExp((value2 || '').toString());
|
||||||
} else if (regexMatch.length === 1) {
|
} else if (regexMatch.length === 1) {
|
||||||
regex = new RegExp(regexMatch[1]);
|
regex = new RegExp(regexMatch[1]);
|
||||||
} else {
|
} else {
|
||||||
regex = new RegExp(regexMatch[1], regexMatch[2]);
|
regex = new RegExp(regexMatch[1], regexMatch[2]);
|
||||||
}
|
}
|
||||||
|
|
||||||
return !!value1.toString().match(regex);
|
return !!(value1 || '').toString().match(regex);
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -2214,7 +2214,7 @@ export class Salesforce implements INodeType {
|
|||||||
const jsonParameters = this.getNodeParameter('jsonParameters', i) as boolean;
|
const jsonParameters = this.getNodeParameter('jsonParameters', i) as boolean;
|
||||||
let variables = {};
|
let variables = {};
|
||||||
if (jsonParameters) {
|
if (jsonParameters) {
|
||||||
variables = this.getNodeParameter('variablesJson', i);
|
variables = this.getNodeParameter('variablesJson', i) as object;
|
||||||
} else {
|
} else {
|
||||||
// Input variables are defined in UI
|
// Input variables are defined in UI
|
||||||
const setInputVariable = this.getNodeParameter('variablesUi', i, {}) as IDataObject;
|
const setInputVariable = this.getNodeParameter('variablesUi', i, {}) as IDataObject;
|
||||||
|
|||||||
@@ -468,27 +468,27 @@ export class Switch implements INodeType {
|
|||||||
const compareOperationFunctions: {
|
const compareOperationFunctions: {
|
||||||
[key: string]: (value1: NodeParameterValue, value2: NodeParameterValue) => boolean;
|
[key: string]: (value1: NodeParameterValue, value2: NodeParameterValue) => boolean;
|
||||||
} = {
|
} = {
|
||||||
contains: (value1: NodeParameterValue, value2: NodeParameterValue) => value1.toString().includes(value2.toString()),
|
contains: (value1: NodeParameterValue, value2: NodeParameterValue) => (value1 || '').toString().includes((value2 || '').toString()),
|
||||||
notContains: (value1: NodeParameterValue, value2: NodeParameterValue) => !value1.toString().includes(value2.toString()),
|
notContains: (value1: NodeParameterValue, value2: NodeParameterValue) => !(value1 || '').toString().includes((value2 || '').toString()),
|
||||||
equal: (value1: NodeParameterValue, value2: NodeParameterValue) => value1 === value2,
|
equal: (value1: NodeParameterValue, value2: NodeParameterValue) => value1 === value2,
|
||||||
notEqual: (value1: NodeParameterValue, value2: NodeParameterValue) => value1 !== value2,
|
notEqual: (value1: NodeParameterValue, value2: NodeParameterValue) => value1 !== value2,
|
||||||
larger: (value1: NodeParameterValue, value2: NodeParameterValue) => value1 > value2,
|
larger: (value1: NodeParameterValue, value2: NodeParameterValue) => (value1 || 0) > (value2 || 0),
|
||||||
largerEqual: (value1: NodeParameterValue, value2: NodeParameterValue) => value1 >= value2,
|
largerEqual: (value1: NodeParameterValue, value2: NodeParameterValue) => (value1 || 0) >= (value2 || 0),
|
||||||
smaller: (value1: NodeParameterValue, value2: NodeParameterValue) => value1 < value2,
|
smaller: (value1: NodeParameterValue, value2: NodeParameterValue) => (value1 || 0) < (value2 || 0),
|
||||||
smallerEqual: (value1: NodeParameterValue, value2: NodeParameterValue) => value1 <= value2,
|
smallerEqual: (value1: NodeParameterValue, value2: NodeParameterValue) => (value1 || 0) <= (value2 || 0),
|
||||||
regex: (value1: NodeParameterValue, value2: NodeParameterValue) => {
|
regex: (value1: NodeParameterValue, value2: NodeParameterValue) => {
|
||||||
const regexMatch = value2.toString().match(new RegExp('^/(.*?)/([gimy]*)$'));
|
const regexMatch = (value2 || '').toString().match(new RegExp('^/(.*?)/([gimy]*)$'));
|
||||||
|
|
||||||
let regex: RegExp;
|
let regex: RegExp;
|
||||||
if (!regexMatch) {
|
if (!regexMatch) {
|
||||||
regex = new RegExp(value2.toString());
|
regex = new RegExp((value2 || '').toString());
|
||||||
} else if (regexMatch.length === 1) {
|
} else if (regexMatch.length === 1) {
|
||||||
regex = new RegExp(regexMatch[1]);
|
regex = new RegExp(regexMatch[1]);
|
||||||
} else {
|
} else {
|
||||||
regex = new RegExp(regexMatch[1], regexMatch[2]);
|
regex = new RegExp(regexMatch[1], regexMatch[2]);
|
||||||
}
|
}
|
||||||
|
|
||||||
return !!value1.toString().match(regex);
|
return !!(value1 || '').toString().match(regex);
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -205,7 +205,7 @@ export class Expression {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return returnData as NodeParameterValue[] | INodeParameters[];
|
return returnData as NodeParameterValue[] | INodeParameters[];
|
||||||
} else if (parameterValue === null) {
|
} else if (parameterValue === null || parameterValue === undefined) {
|
||||||
return parameterValue;
|
return parameterValue;
|
||||||
} else {
|
} else {
|
||||||
// Data is an object
|
// Data is an object
|
||||||
|
|||||||
@@ -383,7 +383,7 @@ export interface INodeExecuteFunctions {
|
|||||||
|
|
||||||
|
|
||||||
// The values a node property can have
|
// The values a node property can have
|
||||||
export type NodeParameterValue = string | number | boolean;
|
export type NodeParameterValue = string | number | boolean | undefined | null;
|
||||||
|
|
||||||
export interface INodeParameters {
|
export interface INodeParameters {
|
||||||
// TODO: Later also has to be possible to add multiple ones with the name name. So array has to be possible
|
// TODO: Later also has to be possible to add multiple ones with the name name. So array has to be possible
|
||||||
|
|||||||
@@ -642,7 +642,7 @@ export function getNodeParameters(nodePropertiesArray: INodeProperties[], nodeVa
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Itterate over all collections
|
// Itterate over all collections
|
||||||
for (const itemName of Object.keys(propertyValues)) {
|
for (const itemName of Object.keys(propertyValues || {})) {
|
||||||
if (nodeProperties.typeOptions !== undefined && nodeProperties.typeOptions.multipleValues === true) {
|
if (nodeProperties.typeOptions !== undefined && nodeProperties.typeOptions.multipleValues === true) {
|
||||||
// Multiple can be set so will be an array
|
// Multiple can be set so will be an array
|
||||||
|
|
||||||
|
|||||||
@@ -380,8 +380,8 @@ export class Workflow {
|
|||||||
|
|
||||||
const returnData: any = {}; // tslint:disable-line:no-any
|
const returnData: any = {}; // tslint:disable-line:no-any
|
||||||
|
|
||||||
for (const parameterName of Object.keys(parameterValue)) {
|
for (const parameterName of Object.keys(parameterValue || {})) {
|
||||||
returnData[parameterName] = this.renameNodeInExpressions(parameterValue[parameterName], currentName, newName);
|
returnData[parameterName] = this.renameNodeInExpressions(parameterValue![parameterName], currentName, newName);
|
||||||
}
|
}
|
||||||
|
|
||||||
return returnData;
|
return returnData;
|
||||||
|
|||||||
Reference in New Issue
Block a user