fix(core): Skip unknown fixedCollection keys instead of throwing (#29689)

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Alexander Gekov 2026-05-11 11:33:56 +03:00 committed by GitHub
parent 86170674b7
commit a30772c933
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 72 additions and 10 deletions

View File

@ -929,20 +929,19 @@ export function getNodeParameters(
if (typeof propertyValues !== 'object' || Array.isArray(propertyValues)) {
continue;
}
// Iterate over all items as it contains multiple ones
for (const nodeValue of (propertyValues as INodeParameters)[
itemName
] as INodeParameters[]) {
nodePropertyOptions = nodeProperties.options!.find(
(nodePropertyOptions) => nodePropertyOptions.name === itemName,
) as INodePropertyCollection;
if (nodePropertyOptions === undefined) {
throw new ApplicationError('Could not find property option', {
extra: { propertyOption: itemName, property: nodeProperties.name },
});
continue;
}
// Iterate over all items as it contains multiple ones
for (const nodeValue of (propertyValues as INodeParameters)[
itemName
] as INodeParameters[]) {
tempNodePropertiesArray = nodePropertyOptions.values!;
tempValue = getNodeParameters(
tempNodePropertiesArray,

View File

@ -3615,6 +3615,69 @@ describe('NodeHelpers', () => {
},
},
},
{
description:
'complex type "fixedCollection" with "multipleValues: true". Skip unknown item names instead of throwing',
input: {
nodePropertiesArray: [
{
displayName: 'Values',
name: 'values',
type: 'fixedCollection',
typeOptions: {
multipleValues: true,
},
default: {},
options: [
{
name: 'number1',
displayName: 'Number 1',
values: [
{
displayName: 'Number',
name: 'number',
type: 'number',
default: 0,
},
],
},
],
},
],
nodeValues: {
values: {
number1: [{ number: 42 }],
and: [{ property: 'Status', filter: 'active' }],
},
},
},
output: {
noneDisplayedFalse: {
defaultsFalse: {
values: {
number1: [{ number: 42 }],
},
},
defaultsTrue: {
values: {
number1: [{ number: 42 }],
},
},
},
noneDisplayedTrue: {
defaultsFalse: {
values: {
number1: [{ number: 42 }],
},
},
defaultsTrue: {
values: {
number1: [{ number: 42 }],
},
},
},
},
},
];
for (const testData of tests) {