🐛 Fix issue with IF&Switch node for undefined expressions #1099

This commit is contained in:
Jan Oberhauser
2020-10-26 09:26:07 +01:00
parent 5eb4a7c187
commit 66bfcca63f
9 changed files with 26 additions and 26 deletions

View File

@@ -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;

View File

@@ -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,

View File

@@ -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);
},
};

View File

@@ -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;

View File

@@ -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);
},
};

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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;