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) === '^') {
|
||||
// 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) {
|
||||
displayValue = [null, undefined].includes(displayValue as null | undefined) ? '' : displayValue;
|
||||
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,
|
||||
email: this.getNodeParameter('email', i) as string,
|
||||
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,
|
||||
connectionid: this.getNodeParameter('connectionid', i) as number,
|
||||
customerid: this.getNodeParameter('customerid', i) as number,
|
||||
|
||||
@@ -234,27 +234,27 @@ export class If implements INodeType {
|
||||
const compareOperationFunctions: {
|
||||
[key: string]: (value1: NodeParameterValue, value2: NodeParameterValue) => boolean;
|
||||
} = {
|
||||
contains: (value1: NodeParameterValue, value2: NodeParameterValue) => value1.toString().includes(value2.toString()),
|
||||
notContains: (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()),
|
||||
equal: (value1: NodeParameterValue, value2: NodeParameterValue) => value1 === value2,
|
||||
notEqual: (value1: NodeParameterValue, value2: NodeParameterValue) => value1 !== value2,
|
||||
larger: (value1: NodeParameterValue, value2: NodeParameterValue) => value1 > value2,
|
||||
largerEqual: (value1: NodeParameterValue, value2: NodeParameterValue) => value1 >= value2,
|
||||
smaller: (value1: NodeParameterValue, value2: NodeParameterValue) => value1 < value2,
|
||||
smallerEqual: (value1: NodeParameterValue, value2: NodeParameterValue) => value1 <= value2,
|
||||
larger: (value1: NodeParameterValue, value2: NodeParameterValue) => (value1 || 0) > (value2 || 0),
|
||||
largerEqual: (value1: NodeParameterValue, value2: NodeParameterValue) => (value1 || 0) >= (value2 || 0),
|
||||
smaller: (value1: NodeParameterValue, value2: NodeParameterValue) => (value1 || 0) < (value2 || 0),
|
||||
smallerEqual: (value1: NodeParameterValue, value2: NodeParameterValue) => (value1 || 0) <= (value2 || 0),
|
||||
regex: (value1: NodeParameterValue, value2: NodeParameterValue) => {
|
||||
const regexMatch = value2.toString().match(new RegExp('^/(.*?)/([gimy]*)$'));
|
||||
const regexMatch = (value2 || '').toString().match(new RegExp('^/(.*?)/([gimy]*)$'));
|
||||
|
||||
let regex: RegExp;
|
||||
if (!regexMatch) {
|
||||
regex = new RegExp(value2.toString());
|
||||
regex = new RegExp((value2 || '').toString());
|
||||
} else if (regexMatch.length === 1) {
|
||||
regex = new RegExp(regexMatch[1]);
|
||||
} else {
|
||||
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;
|
||||
let variables = {};
|
||||
if (jsonParameters) {
|
||||
variables = this.getNodeParameter('variablesJson', i);
|
||||
variables = this.getNodeParameter('variablesJson', i) as object;
|
||||
} else {
|
||||
// Input variables are defined in UI
|
||||
const setInputVariable = this.getNodeParameter('variablesUi', i, {}) as IDataObject;
|
||||
|
||||
@@ -468,27 +468,27 @@ export class Switch implements INodeType {
|
||||
const compareOperationFunctions: {
|
||||
[key: string]: (value1: NodeParameterValue, value2: NodeParameterValue) => boolean;
|
||||
} = {
|
||||
contains: (value1: NodeParameterValue, value2: NodeParameterValue) => value1.toString().includes(value2.toString()),
|
||||
notContains: (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()),
|
||||
equal: (value1: NodeParameterValue, value2: NodeParameterValue) => value1 === value2,
|
||||
notEqual: (value1: NodeParameterValue, value2: NodeParameterValue) => value1 !== value2,
|
||||
larger: (value1: NodeParameterValue, value2: NodeParameterValue) => value1 > value2,
|
||||
largerEqual: (value1: NodeParameterValue, value2: NodeParameterValue) => value1 >= value2,
|
||||
smaller: (value1: NodeParameterValue, value2: NodeParameterValue) => value1 < value2,
|
||||
smallerEqual: (value1: NodeParameterValue, value2: NodeParameterValue) => value1 <= value2,
|
||||
larger: (value1: NodeParameterValue, value2: NodeParameterValue) => (value1 || 0) > (value2 || 0),
|
||||
largerEqual: (value1: NodeParameterValue, value2: NodeParameterValue) => (value1 || 0) >= (value2 || 0),
|
||||
smaller: (value1: NodeParameterValue, value2: NodeParameterValue) => (value1 || 0) < (value2 || 0),
|
||||
smallerEqual: (value1: NodeParameterValue, value2: NodeParameterValue) => (value1 || 0) <= (value2 || 0),
|
||||
regex: (value1: NodeParameterValue, value2: NodeParameterValue) => {
|
||||
const regexMatch = value2.toString().match(new RegExp('^/(.*?)/([gimy]*)$'));
|
||||
const regexMatch = (value2 || '').toString().match(new RegExp('^/(.*?)/([gimy]*)$'));
|
||||
|
||||
let regex: RegExp;
|
||||
if (!regexMatch) {
|
||||
regex = new RegExp(value2.toString());
|
||||
regex = new RegExp((value2 || '').toString());
|
||||
} else if (regexMatch.length === 1) {
|
||||
regex = new RegExp(regexMatch[1]);
|
||||
} else {
|
||||
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[];
|
||||
} else if (parameterValue === null) {
|
||||
} else if (parameterValue === null || parameterValue === undefined) {
|
||||
return parameterValue;
|
||||
} else {
|
||||
// Data is an object
|
||||
|
||||
@@ -383,7 +383,7 @@ export interface INodeExecuteFunctions {
|
||||
|
||||
|
||||
// The values a node property can have
|
||||
export type NodeParameterValue = string | number | boolean;
|
||||
export type NodeParameterValue = string | number | boolean | undefined | null;
|
||||
|
||||
export interface INodeParameters {
|
||||
// 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
|
||||
for (const itemName of Object.keys(propertyValues)) {
|
||||
for (const itemName of Object.keys(propertyValues || {})) {
|
||||
if (nodeProperties.typeOptions !== undefined && nodeProperties.typeOptions.multipleValues === true) {
|
||||
// Multiple can be set so will be an array
|
||||
|
||||
|
||||
@@ -380,8 +380,8 @@ export class Workflow {
|
||||
|
||||
const returnData: any = {}; // tslint:disable-line:no-any
|
||||
|
||||
for (const parameterName of Object.keys(parameterValue)) {
|
||||
returnData[parameterName] = this.renameNodeInExpressions(parameterValue[parameterName], currentName, newName);
|
||||
for (const parameterName of Object.keys(parameterValue || {})) {
|
||||
returnData[parameterName] = this.renameNodeInExpressions(parameterValue![parameterName], currentName, newName);
|
||||
}
|
||||
|
||||
return returnData;
|
||||
|
||||
Reference in New Issue
Block a user