From 5ea4be474e0ed14eea8bce585a59824c08ac66f5 Mon Sep 17 00:00:00 2001 From: Elias Meire Date: Fri, 29 Aug 2025 17:56:18 +0200 Subject: [PATCH] fix(editor): Support line breaks in resource mapper field names (#18982) --- .../editor-ui/src/utils/nodeTypeUtils.test.ts | 30 ++++++++++++++++++- .../editor-ui/src/utils/nodeTypesUtils.ts | 2 +- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/packages/frontend/editor-ui/src/utils/nodeTypeUtils.test.ts b/packages/frontend/editor-ui/src/utils/nodeTypeUtils.test.ts index fd190ff82f..517ee410f5 100644 --- a/packages/frontend/editor-ui/src/utils/nodeTypeUtils.test.ts +++ b/packages/frontend/editor-ui/src/utils/nodeTypeUtils.test.ts @@ -1,5 +1,9 @@ import type { ResourceMapperField } from 'n8n-workflow'; -import { isCommunityPackageName, isResourceMapperFieldListStale } from './nodeTypesUtils'; +import { + isCommunityPackageName, + isResourceMapperFieldListStale, + parseResourceMapperFieldName, +} from './nodeTypesUtils'; describe('isResourceMapperFieldListStale', () => { const baseField: ResourceMapperField = { @@ -127,3 +131,27 @@ describe('isCommunityPackageName', () => { expect(isCommunityPackageName('@test-scope/n8n-nodes-test')).toBe(true); }); }); + +describe('parseResourceMapperFieldName', () => { + test.each([ + { input: 'value["fieldName"]', expected: 'fieldName', desc: 'basic field name' }, + { + input: 'value["field with spaces"]', + expected: 'field with spaces', + desc: 'field with spaces', + }, + { + input: 'value["field\nwith\nactual\nnewlines"]', + expected: 'field\nwith\nactual\nnewlines', + desc: 'field with newlines', + }, + { + input: 'value["field\\"with\\"quotes"]', + expected: 'field\\"with\\"quotes', + desc: 'field with escaped quotes', + }, + { input: 'fieldName', expected: 'fieldName', desc: 'no value wrapper' }, + ])('should parse $desc', ({ input, expected }) => { + expect(parseResourceMapperFieldName(input)).toBe(expected); + }); +}); diff --git a/packages/frontend/editor-ui/src/utils/nodeTypesUtils.ts b/packages/frontend/editor-ui/src/utils/nodeTypesUtils.ts index ccdafae783..d7dd8231ff 100644 --- a/packages/frontend/editor-ui/src/utils/nodeTypesUtils.ts +++ b/packages/frontend/editor-ui/src/utils/nodeTypesUtils.ts @@ -32,7 +32,7 @@ import { const CRED_KEYWORDS_TO_FILTER = ['API', 'OAuth1', 'OAuth2']; const NODE_KEYWORDS_TO_FILTER = ['Trigger']; const COMMUNITY_PACKAGE_NAME_REGEX = /^(?!@n8n\/)(@[\w.-]+\/)?n8n-nodes-(?!base\b)\b\w+/g; -const RESOURCE_MAPPER_FIELD_NAME_REGEX = /value\[\"(.+)\"\]/; +const RESOURCE_MAPPER_FIELD_NAME_REGEX = /value\["(.+?)"\]/s; export function getAppNameFromCredType(name: string) { return name