From 830d2c5df53c5436f89868dfe23cf55c41585a46 Mon Sep 17 00:00:00 2001 From: Florian Kinder Date: Fri, 21 Mar 2025 23:44:51 +0900 Subject: [PATCH] feat(Extract from File Node): Add relax_quote option (#13607) Co-authored-by: Shireen Missi <94372015+ShireenMissi@users.noreply.github.com> --- .../actions/spreadsheet.operation.ts | 4 +++- .../nodes-base/nodes/SpreadsheetFile/description.ts | 13 +++++++++++++ .../nodes/SpreadsheetFile/v2/fromFile.operation.ts | 1 + 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/packages/nodes-base/nodes/Files/ExtractFromFile/actions/spreadsheet.operation.ts b/packages/nodes-base/nodes/Files/ExtractFromFile/actions/spreadsheet.operation.ts index bebda26d169..9c3d98b3478 100644 --- a/packages/nodes-base/nodes/Files/ExtractFromFile/actions/spreadsheet.operation.ts +++ b/packages/nodes-base/nodes/Files/ExtractFromFile/actions/spreadsheet.operation.ts @@ -18,7 +18,9 @@ export const description: INodeProperties[] = fromFile.description newProperty.options = (newProperty.options as INodeProperties[]).map((option) => { let newOption = option; if ( - ['delimiter', 'encoding', 'fromLine', 'maxRowCount', 'enableBOM'].includes(option.name) + ['delimiter', 'encoding', 'fromLine', 'maxRowCount', 'enableBOM', 'relaxQuotes'].includes( + option.name, + ) ) { newOption = { ...option, displayOptions: { show: { '/operation': ['csv'] } } }; } diff --git a/packages/nodes-base/nodes/SpreadsheetFile/description.ts b/packages/nodes-base/nodes/SpreadsheetFile/description.ts index 41c7ed21e8b..2def6d5c91c 100644 --- a/packages/nodes-base/nodes/SpreadsheetFile/description.ts +++ b/packages/nodes-base/nodes/SpreadsheetFile/description.ts @@ -210,6 +210,19 @@ export const fromFileOptions: INodeProperties = { description: 'Whether to detect and exclude the byte-order-mark from the CSV Input if present', }, + { + displayName: 'Preserve Quotes', + name: 'relaxQuotes', + type: 'boolean', + displayOptions: { + show: { + '/fileFormat': ['csv'], + }, + }, + default: false, + description: + "Whether to handle unclosed quotes in CSV fields as part of the field's content instead of throwing a parsing error", + }, { displayName: 'Header Row', name: 'headerRow', diff --git a/packages/nodes-base/nodes/SpreadsheetFile/v2/fromFile.operation.ts b/packages/nodes-base/nodes/SpreadsheetFile/v2/fromFile.operation.ts index 7ec6ae2b680..b38aadcfa8c 100644 --- a/packages/nodes-base/nodes/SpreadsheetFile/v2/fromFile.operation.ts +++ b/packages/nodes-base/nodes/SpreadsheetFile/v2/fromFile.operation.ts @@ -95,6 +95,7 @@ export async function execute( bom: options.enableBOM as boolean, to: maxRowCount > -1 ? maxRowCount : undefined, columns: options.headerRow !== false, + relax_quotes: options.relaxQuotes as boolean, onRecord: (record) => { if (!options.includeEmptyCells) { record = Object.fromEntries(