diff --git a/packages/nodes-base/nodes/Airtable/v1/AirtableV1.node.ts b/packages/nodes-base/nodes/Airtable/v1/AirtableV1.node.ts index 526894110a..637e4f5882 100644 --- a/packages/nodes-base/nodes/Airtable/v1/AirtableV1.node.ts +++ b/packages/nodes-base/nodes/Airtable/v1/AirtableV1.node.ts @@ -10,7 +10,6 @@ import type { import { NodeConnectionType, NodeOperationError } from 'n8n-workflow'; import { oldVersionNotice } from '../../../utils/descriptions'; -import { generatePairedItemData } from '../../../utils/utilities'; import type { IRecord } from './GenericFunctions'; import { apiRequest, apiRequestAllItems, downloadRecordAttachments } from './GenericFunctions'; @@ -737,24 +736,16 @@ export class AirtableV1 implements INodeType { const downloadFieldNames = ( this.getNodeParameter('downloadFieldNames', 0) as string ).split(','); - const pairedItem = generatePairedItemData(items.length); + const data = await downloadRecordAttachments.call( this, responseData.records as IRecord[], downloadFieldNames, - pairedItem, ); return [data]; } - // We can return from here - const itemData = generatePairedItemData(items.length); - - return [ - this.helpers.constructExecutionMetaData(this.helpers.returnJsonArray(returnData), { - itemData, - }), - ]; + return [this.helpers.returnJsonArray(returnData)]; } catch (error) { if (this.continueOnFail()) { returnData.push({ json: { error: error.message } }); diff --git a/packages/nodes-base/nodes/Airtable/v2/actions/base/getMany.operation.ts b/packages/nodes-base/nodes/Airtable/v2/actions/base/getMany.operation.ts index da5f2f528e..3b41804fe2 100644 --- a/packages/nodes-base/nodes/Airtable/v2/actions/base/getMany.operation.ts +++ b/packages/nodes-base/nodes/Airtable/v2/actions/base/getMany.operation.ts @@ -4,11 +4,7 @@ import type { INodeProperties, IExecuteFunctions, } from 'n8n-workflow'; -import { - generatePairedItemData, - updateDisplayOptions, - wrapData, -} from '../../../../../utils/utilities'; +import { updateDisplayOptions, wrapData } from '../../../../../utils/utilities'; import { apiRequest } from '../../transport'; const properties: INodeProperties[] = [ @@ -111,11 +107,7 @@ export async function execute(this: IExecuteFunctions): Promise permissionLevel.includes(base.permissionLevel as string)); } - const itemData = generatePairedItemData(this.getInputData().length); - - const returnData = this.helpers.constructExecutionMetaData(wrapData(bases), { - itemData, - }); + const returnData = wrapData(bases); return returnData; } diff --git a/packages/nodes-base/nodes/Airtable/v2/actions/record/search.operation.ts b/packages/nodes-base/nodes/Airtable/v2/actions/record/search.operation.ts index 29f753794f..443b1985b8 100644 --- a/packages/nodes-base/nodes/Airtable/v2/actions/record/search.operation.ts +++ b/packages/nodes-base/nodes/Airtable/v2/actions/record/search.operation.ts @@ -4,7 +4,7 @@ import type { INodeProperties, IExecuteFunctions, } from 'n8n-workflow'; -import { generatePairedItemData, updateDisplayOptions } from '../../../../../utils/utilities'; +import { updateDisplayOptions } from '../../../../../utils/utilities'; import { apiRequest, apiRequestAllItems, downloadRecordAttachments } from '../../transport'; import type { IRecord } from '../../helpers/interfaces'; import { flattenOutput } from '../../helpers/utils'; @@ -155,12 +155,9 @@ export async function execute( const endpoint = `${base}/${table}`; let itemsLength = items.length ? 1 : 0; - let fallbackPairedItems; if (nodeVersion >= 2.1) { itemsLength = items.length; - } else { - fallbackPairedItems = generatePairedItemData(items.length); } for (let i = 0; i < itemsLength; i++) { @@ -207,7 +204,7 @@ export async function execute( this, responseData.records as IRecord[], options.downloadFields as string[], - fallbackPairedItems || [{ item: i }], + nodeVersion >= 2.1 ? [{ item: i }] : undefined, ); returnData.push(...itemWithAttachments); continue; @@ -219,7 +216,7 @@ export async function execute( json: flattenOutput(record), })) as INodeExecutionData[]; - const itemData = fallbackPairedItems || [{ item: i }]; + const itemData = nodeVersion >= 2.1 ? [{ item: i }] : []; const executionData = this.helpers.constructExecutionMetaData(records, { itemData, diff --git a/packages/nodes-base/nodes/ExecuteWorkflow/ExecuteWorkflow.node.ts b/packages/nodes-base/nodes/ExecuteWorkflow/ExecuteWorkflow.node.ts index 26af55f210..439003ef88 100644 --- a/packages/nodes-base/nodes/ExecuteWorkflow/ExecuteWorkflow.node.ts +++ b/packages/nodes-base/nodes/ExecuteWorkflow/ExecuteWorkflow.node.ts @@ -5,7 +5,7 @@ import type { INodeType, INodeTypeDescription, } from 'n8n-workflow'; -import { generatePairedItemData } from '../../utils/utilities'; + import { getWorkflowInfo } from './GenericFunctions'; export class ExecuteWorkflow implements INodeType { @@ -278,8 +278,6 @@ export class ExecuteWorkflow implements INodeType { items, ); - const fallbackPairedItemData = generatePairedItemData(items.length); - for (const output of workflowResult) { const sameLength = output.length === items.length; @@ -288,17 +286,14 @@ export class ExecuteWorkflow implements INodeType { if (sameLength) { item.pairedItem = { item: itemIndex }; - } else { - item.pairedItem = fallbackPairedItemData; } } } return workflowResult; } catch (error) { - const pairedItem = generatePairedItemData(items.length); if (this.continueOnFail()) { - return [[{ json: { error: error.message }, pairedItem }]]; + return [[{ json: { error: error.message } }]]; } throw error; } diff --git a/packages/nodes-base/nodes/Files/ConvertToFile/actions/spreadsheet.operation.ts b/packages/nodes-base/nodes/Files/ConvertToFile/actions/spreadsheet.operation.ts index f0683b6a6f..574c00cc49 100644 --- a/packages/nodes-base/nodes/Files/ConvertToFile/actions/spreadsheet.operation.ts +++ b/packages/nodes-base/nodes/Files/ConvertToFile/actions/spreadsheet.operation.ts @@ -5,7 +5,7 @@ import { type INodeProperties, } from 'n8n-workflow'; -import { generatePairedItemData, updateDisplayOptions } from '@utils/utilities'; +import { updateDisplayOptions } from '@utils/utilities'; import type { JsonToSpreadsheetBinaryOptions, JsonToSpreadsheetBinaryFormat } from '@utils/binary'; import { convertJsonToSpreadsheetBinary } from '@utils/binary'; @@ -99,7 +99,6 @@ export async function execute( ) { let returnData: INodeExecutionData[] = []; - const pairedItem = generatePairedItemData(items.length); try { const options = this.getNodeParameter('options', 0, {}) as JsonToSpreadsheetBinaryOptions; const binaryPropertyName = this.getNodeParameter('binaryPropertyName', 0, 'data'); @@ -117,7 +116,6 @@ export async function execute( binary: { [binaryPropertyName]: binaryData, }, - pairedItem, }; returnData = [newItem]; @@ -127,7 +125,6 @@ export async function execute( json: { error: error.message, }, - pairedItem, }); } else { throw new NodeOperationError(this.getNode(), error); diff --git a/packages/nodes-base/nodes/Files/ConvertToFile/actions/toJson.operation.ts b/packages/nodes-base/nodes/Files/ConvertToFile/actions/toJson.operation.ts index 94415d82ca..99163dcd91 100644 --- a/packages/nodes-base/nodes/Files/ConvertToFile/actions/toJson.operation.ts +++ b/packages/nodes-base/nodes/Files/ConvertToFile/actions/toJson.operation.ts @@ -1,7 +1,7 @@ import type { IExecuteFunctions, INodeExecutionData, INodeProperties } from 'n8n-workflow'; import { NodeOperationError } from 'n8n-workflow'; -import { generatePairedItemData, updateDisplayOptions } from '@utils/utilities'; +import { updateDisplayOptions } from '@utils/utilities'; import { createBinaryFromJson } from '@utils/binary'; import { encodeDecodeOptions } from '@utils/descriptions'; @@ -92,7 +92,6 @@ export async function execute(this: IExecuteFunctions, items: INodeExecutionData const mode = this.getNodeParameter('mode', 0, 'once') as string; if (mode === 'once') { - const pairedItem = generatePairedItemData(items.length); try { const options = this.getNodeParameter('options', 0, {}); const binaryPropertyName = this.getNodeParameter('binaryPropertyName', 0, 'data'); @@ -114,7 +113,6 @@ export async function execute(this: IExecuteFunctions, items: INodeExecutionData binary: { [binaryPropertyName]: binaryData, }, - pairedItem, }; returnData = [newItem]; @@ -124,7 +122,6 @@ export async function execute(this: IExecuteFunctions, items: INodeExecutionData json: { error: error.message, }, - pairedItem, }); } throw new NodeOperationError(this.getNode(), error); diff --git a/packages/nodes-base/nodes/Ftp/Ftp.node.ts b/packages/nodes-base/nodes/Ftp/Ftp.node.ts index 99d9e4b77d..11a64a724a 100644 --- a/packages/nodes-base/nodes/Ftp/Ftp.node.ts +++ b/packages/nodes-base/nodes/Ftp/Ftp.node.ts @@ -18,7 +18,7 @@ import type { INodeTypeDescription, JsonObject, } from 'n8n-workflow'; -import { formatPrivateKey, generatePairedItemData } from '@utils/utilities'; +import { formatPrivateKey } from '@utils/utilities'; interface ReturnFtpItem { type: string; @@ -549,9 +549,7 @@ export class Ftp implements INodeType { } } catch (error) { if (this.continueOnFail()) { - const pairedItem = generatePairedItemData(items.length); - - return [[{ json: { error: error.message }, pairedItem }]]; + return [[{ json: { error: error.message } }]]; } throw error; } diff --git a/packages/nodes-base/nodes/Google/BigQuery/v1/GoogleBigQueryV1.node.ts b/packages/nodes-base/nodes/Google/BigQuery/v1/GoogleBigQueryV1.node.ts index 2d29b89ce7..97f7c20f96 100644 --- a/packages/nodes-base/nodes/Google/BigQuery/v1/GoogleBigQueryV1.node.ts +++ b/packages/nodes-base/nodes/Google/BigQuery/v1/GoogleBigQueryV1.node.ts @@ -12,7 +12,7 @@ import type { import { NodeConnectionType, NodeApiError } from 'n8n-workflow'; import { v4 as uuid } from 'uuid'; -import { generatePairedItemData } from '../../../../utils/utilities'; + import { googleApiRequest, googleApiRequestAllItems, simplify } from './GenericFunctions'; import { recordFields, recordOperations } from './RecordDescription'; @@ -196,8 +196,6 @@ export class GoogleBigQueryV1 implements INodeType { body.rows = rows; - const itemData = generatePairedItemData(items.length); - try { responseData = await googleApiRequest.call( this, @@ -206,17 +204,11 @@ export class GoogleBigQueryV1 implements INodeType { body, ); - const executionData = this.helpers.constructExecutionMetaData( - this.helpers.returnJsonArray(responseData as IDataObject[]), - { itemData }, - ); + const executionData = this.helpers.returnJsonArray(responseData as IDataObject[]); returnData.push(...executionData); } catch (error) { if (this.continueOnFail()) { - const executionErrorData = this.helpers.constructExecutionMetaData( - this.helpers.returnJsonArray({ error: error.message }), - { itemData }, - ); + const executionErrorData = this.helpers.returnJsonArray({ error: error.message }); returnData.push(...executionErrorData); } throw new NodeApiError(this.getNode(), error as JsonObject, { itemIndex: 0 }); diff --git a/packages/nodes-base/nodes/Google/BigQuery/v2/actions/database/insert.operation.ts b/packages/nodes-base/nodes/Google/BigQuery/v2/actions/database/insert.operation.ts index 1eb66904b3..f49bead7bd 100644 --- a/packages/nodes-base/nodes/Google/BigQuery/v2/actions/database/insert.operation.ts +++ b/packages/nodes-base/nodes/Google/BigQuery/v2/actions/database/insert.operation.ts @@ -9,7 +9,7 @@ import { v4 as uuid } from 'uuid'; import type { TableSchema } from '../../helpers/interfaces'; import { checkSchema, wrapData } from '../../helpers/utils'; import { googleBigQueryApiRequest } from '../../transport'; -import { generatePairedItemData, updateDisplayOptions } from '@utils/utilities'; +import { updateDisplayOptions } from '@utils/utilities'; const properties: INodeProperties[] = [ { @@ -225,7 +225,6 @@ export async function execute(this: IExecuteFunctions): Promise { const items = this.getInputData(); - const itemData = generatePairedItemData(items.length); + const returnData: INodeExecutionData[] = []; let responseData; @@ -137,7 +136,7 @@ export class GoogleFirebaseCloudFirestore implements INodeType { if (nodeVersion >= 1.1) { itemsLength = items.length; } else { - fallbackPairedItems = generatePairedItemData(items.length); + fallbackPairedItems = []; } if (resource === 'document') { @@ -173,10 +172,7 @@ export class GoogleFirebaseCloudFirestore implements INodeType { .filter((el: IDataObject) => !!el); } - const executionData = this.helpers.constructExecutionMetaData( - this.helpers.returnJsonArray(responseData as IDataObject[]), - { itemData }, - ); + const executionData = this.helpers.returnJsonArray(responseData as IDataObject[]); returnData.push(...executionData); } else if (operation === 'create') { diff --git a/packages/nodes-base/nodes/Google/Sheet/v1/GoogleSheetsV1.node.ts b/packages/nodes-base/nodes/Google/Sheet/v1/GoogleSheetsV1.node.ts index 6b5f4ee802..5ecb9f87fc 100644 --- a/packages/nodes-base/nodes/Google/Sheet/v1/GoogleSheetsV1.node.ts +++ b/packages/nodes-base/nodes/Google/Sheet/v1/GoogleSheetsV1.node.ts @@ -14,7 +14,7 @@ import type { import { NodeOperationError } from 'n8n-workflow'; import { getGoogleAccessToken } from '../../GenericFunctions'; -import { generatePairedItemData } from '../../../../utils/utilities'; + import type { ILookupValues, ISheetUpdateData, @@ -296,12 +296,9 @@ export class GoogleSheetsV1 implements INodeType { returnData = []; } - const pairedItem = generatePairedItemData(items.length); - const lookupOutput = returnData.map((item) => { return { json: item, - pairedItem, }; }); diff --git a/packages/nodes-base/nodes/Google/Sheet/v2/actions/sheet/delete.operation.ts b/packages/nodes-base/nodes/Google/Sheet/v2/actions/sheet/delete.operation.ts index 8edd179d0e..2d70a8b05d 100644 --- a/packages/nodes-base/nodes/Google/Sheet/v2/actions/sheet/delete.operation.ts +++ b/packages/nodes-base/nodes/Google/Sheet/v2/actions/sheet/delete.operation.ts @@ -2,7 +2,7 @@ import type { IExecuteFunctions, IDataObject, INodeExecutionData } from 'n8n-wor import type { SheetProperties } from '../../helpers/GoogleSheets.types'; import type { GoogleSheet } from '../../helpers/GoogleSheet'; import { getColumnNumber, untilSheetSelected } from '../../helpers/GoogleSheets.utils'; -import { generatePairedItemData, wrapData } from '../../../../../../utils/utilities'; +import { wrapData } from '../../../../../../utils/utilities'; export const description: SheetProperties = [ { @@ -165,10 +165,7 @@ export async function execute( await sheet.spreadsheetBatchUpdate(requests); } - const itemData = generatePairedItemData(this.getInputData().length); - const returnData = this.helpers.constructExecutionMetaData(wrapData({ success: true }), { - itemData, - }); + const returnData = wrapData({ success: true }); return returnData; } diff --git a/packages/nodes-base/nodes/Hubspot/V2/HubspotV2.node.ts b/packages/nodes-base/nodes/Hubspot/V2/HubspotV2.node.ts index f25f7dc0de..2c672def3a 100644 --- a/packages/nodes-base/nodes/Hubspot/V2/HubspotV2.node.ts +++ b/packages/nodes-base/nodes/Hubspot/V2/HubspotV2.node.ts @@ -19,7 +19,7 @@ import { NodeApiError, NodeConnectionType, NodeOperationError } from 'n8n-workfl import { snakeCase } from 'change-case'; import set from 'lodash/set'; -import { generatePairedItemData } from '../../../utils/utilities'; + import { clean, getAssociations, @@ -1192,12 +1192,7 @@ export class HubspotV2 implements INodeType { ); } - const itemData = generatePairedItemData(items.length); - - const executionData = this.helpers.constructExecutionMetaData( - this.helpers.returnJsonArray(responseData as IDataObject[]), - { itemData }, - ); + const executionData = this.helpers.returnJsonArray(responseData as IDataObject[]); returnData.push(...executionData); } catch (error) { if (this.continueOnFail()) { diff --git a/packages/nodes-base/nodes/Kafka/Kafka.node.ts b/packages/nodes-base/nodes/Kafka/Kafka.node.ts index 87e9f95b0d..1cbf6ec853 100644 --- a/packages/nodes-base/nodes/Kafka/Kafka.node.ts +++ b/packages/nodes-base/nodes/Kafka/Kafka.node.ts @@ -15,7 +15,6 @@ import type { INodeTypeDescription, } from 'n8n-workflow'; import { ApplicationError, NodeConnectionType, NodeOperationError } from 'n8n-workflow'; -import { generatePairedItemData } from '../../utils/utilities'; export class Kafka implements INodeType { description: INodeTypeDescription = { @@ -260,7 +259,6 @@ export class Kafka implements INodeType { async execute(this: IExecuteFunctions): Promise { const items = this.getInputData(); - const itemData = generatePairedItemData(items.length); const length = items.length; @@ -400,15 +398,12 @@ export class Kafka implements INodeType { await producer.disconnect(); - const executionData = this.helpers.constructExecutionMetaData( - this.helpers.returnJsonArray(responseData), - { itemData }, - ); + const executionData = this.helpers.returnJsonArray(responseData); return [executionData]; } catch (error) { if (this.continueOnFail()) { - return [[{ json: { error: error.message }, pairedItem: itemData }]]; + return [[{ json: { error: error.message } }]]; } else { throw error; } diff --git a/packages/nodes-base/nodes/Microsoft/Excel/v1/MicrosoftExcelV1.node.ts b/packages/nodes-base/nodes/Microsoft/Excel/v1/MicrosoftExcelV1.node.ts index 9eecb99e2b..079bc2c37c 100644 --- a/packages/nodes-base/nodes/Microsoft/Excel/v1/MicrosoftExcelV1.node.ts +++ b/packages/nodes-base/nodes/Microsoft/Excel/v1/MicrosoftExcelV1.node.ts @@ -11,7 +11,6 @@ import type { } from 'n8n-workflow'; import { NodeApiError, NodeConnectionType } from 'n8n-workflow'; -import { generatePairedItemData } from '../../../../utils/utilities'; import { microsoftApiRequest, microsoftApiRequestAllItems, @@ -176,7 +175,6 @@ export class MicrosoftExcelV1 implements INodeType { async execute(this: IExecuteFunctions): Promise { const items = this.getInputData(); - const itemData = generatePairedItemData(items.length); const returnData: INodeExecutionData[] = []; const length = items.length; let qs: IDataObject = {}; @@ -248,18 +246,12 @@ export class MicrosoftExcelV1 implements INodeType { { 'workbook-session-id': id }, ); - const executionData = this.helpers.constructExecutionMetaData( - this.helpers.returnJsonArray(responseData as IDataObject[]), - { itemData }, - ); + const executionData = this.helpers.returnJsonArray(responseData as IDataObject[]); returnData.push(...executionData); } catch (error) { if (this.continueOnFail()) { - const executionErrorData = this.helpers.constructExecutionMetaData( - this.helpers.returnJsonArray({ error: error.message }), - { itemData }, - ); + const executionErrorData = this.helpers.returnJsonArray({ error: error.message }); returnData.push(...executionErrorData); } else { throw error; diff --git a/packages/nodes-base/nodes/Microsoft/Excel/v2/actions/table/append.operation.ts b/packages/nodes-base/nodes/Microsoft/Excel/v2/actions/table/append.operation.ts index 11095e27cf..5e72d30c00 100644 --- a/packages/nodes-base/nodes/Microsoft/Excel/v2/actions/table/append.operation.ts +++ b/packages/nodes-base/nodes/Microsoft/Excel/v2/actions/table/append.operation.ts @@ -8,7 +8,7 @@ import type { ExcelResponse } from '../../helpers/interfaces'; import { prepareOutput } from '../../helpers/utils'; import { microsoftApiRequest } from '../../transport'; import { tableRLC, workbookRLC, worksheetRLC } from '../common.descriptions'; -import { generatePairedItemData, processJsonInput, updateDisplayOptions } from '@utils/utilities'; +import { processJsonInput, updateDisplayOptions } from '@utils/utilities'; const properties: INodeProperties[] = [ workbookRLC, @@ -272,11 +272,7 @@ export async function execute( ); } catch (error) { if (this.continueOnFail()) { - const itemData = generatePairedItemData(this.getInputData().length); - const executionErrorData = this.helpers.constructExecutionMetaData( - this.helpers.returnJsonArray({ error: error.message }), - { itemData }, - ); + const executionErrorData = this.helpers.returnJsonArray({ error: error.message }); returnData.push(...executionErrorData); } else { throw error; diff --git a/packages/nodes-base/nodes/Microsoft/Excel/v2/actions/worksheet/update.operation.ts b/packages/nodes-base/nodes/Microsoft/Excel/v2/actions/worksheet/update.operation.ts index 40a08a975e..66d4f3e7f7 100644 --- a/packages/nodes-base/nodes/Microsoft/Excel/v2/actions/worksheet/update.operation.ts +++ b/packages/nodes-base/nodes/Microsoft/Excel/v2/actions/worksheet/update.operation.ts @@ -14,7 +14,7 @@ import { } from '../../helpers/utils'; import { microsoftApiRequest } from '../../transport'; import { workbookRLC, worksheetRLC } from '../common.descriptions'; -import { generatePairedItemData, processJsonInput, updateDisplayOptions } from '@utils/utilities'; +import { processJsonInput, updateDisplayOptions } from '@utils/utilities'; const properties: INodeProperties[] = [ workbookRLC, @@ -373,11 +373,7 @@ export async function execute( } } catch (error) { if (this.continueOnFail()) { - const itemData = generatePairedItemData(this.getInputData().length); - const executionErrorData = this.helpers.constructExecutionMetaData( - this.helpers.returnJsonArray({ error: error.message }), - { itemData }, - ); + const executionErrorData = this.helpers.returnJsonArray({ error: error.message }); returnData.push(...executionErrorData); } else { throw error; diff --git a/packages/nodes-base/nodes/Microsoft/Excel/v2/actions/worksheet/upsert.operation.ts b/packages/nodes-base/nodes/Microsoft/Excel/v2/actions/worksheet/upsert.operation.ts index 3745c76cac..1d225a1955 100644 --- a/packages/nodes-base/nodes/Microsoft/Excel/v2/actions/worksheet/upsert.operation.ts +++ b/packages/nodes-base/nodes/Microsoft/Excel/v2/actions/worksheet/upsert.operation.ts @@ -14,7 +14,7 @@ import { } from '../../helpers/utils'; import { microsoftApiRequest } from '../../transport'; import { workbookRLC, worksheetRLC } from '../common.descriptions'; -import { generatePairedItemData, processJsonInput, updateDisplayOptions } from '@utils/utilities'; +import { processJsonInput, updateDisplayOptions } from '@utils/utilities'; const properties: INodeProperties[] = [ workbookRLC, @@ -380,11 +380,7 @@ export async function execute( ); } catch (error) { if (this.continueOnFail()) { - const itemData = generatePairedItemData(this.getInputData().length); - const executionErrorData = this.helpers.constructExecutionMetaData( - this.helpers.returnJsonArray({ error: error.message }), - { itemData }, - ); + const executionErrorData = this.helpers.returnJsonArray({ error: error.message }); returnData.push(...executionErrorData); } else { throw error; diff --git a/packages/nodes-base/nodes/Microsoft/Excel/v2/helpers/utils.ts b/packages/nodes-base/nodes/Microsoft/Excel/v2/helpers/utils.ts index 2303147ab3..15d5a889ae 100644 --- a/packages/nodes-base/nodes/Microsoft/Excel/v2/helpers/utils.ts +++ b/packages/nodes-base/nodes/Microsoft/Excel/v2/helpers/utils.ts @@ -1,7 +1,7 @@ import type { IDataObject, IExecuteFunctions, INode, INodeExecutionData } from 'n8n-workflow'; import { NodeOperationError } from 'n8n-workflow'; import type { ExcelResponse, SheetData, UpdateSummary } from './interfaces'; -import { generatePairedItemData, wrapData } from '@utils/utilities'; +import { wrapData } from '@utils/utilities'; type PrepareOutputConfig = { rawData: boolean; @@ -60,11 +60,7 @@ export function prepareOutput( returnData.push(...executionData); } } else { - const itemData = generatePairedItemData(this.getInputData().length); - const executionData = this.helpers.constructExecutionMetaData( - wrapData({ [config.dataProperty || 'data']: responseData }), - { itemData }, - ); + const executionData = wrapData({ [config.dataProperty || 'data']: responseData }); returnData.push(...executionData); } diff --git a/packages/nodes-base/nodes/Microsoft/Sql/MicrosoftSql.node.ts b/packages/nodes-base/nodes/Microsoft/Sql/MicrosoftSql.node.ts index 0112c0f8bb..8df2314cae 100644 --- a/packages/nodes-base/nodes/Microsoft/Sql/MicrosoftSql.node.ts +++ b/packages/nodes-base/nodes/Microsoft/Sql/MicrosoftSql.node.ts @@ -12,7 +12,7 @@ import { NodeConnectionType, } from 'n8n-workflow'; -import { flatten, generatePairedItemData, getResolvables } from '@utils/utilities'; +import { flatten, getResolvables } from '@utils/utilities'; import { configurePool, @@ -343,12 +343,7 @@ export class MicrosoftSql implements INodeType { responseData = await deleteOperation(tables, pool); } - const itemData = generatePairedItemData(items.length); - - returnData = this.helpers.constructExecutionMetaData( - this.helpers.returnJsonArray(responseData), - { itemData }, - ); + returnData = this.helpers.returnJsonArray(responseData); } catch (error) { if (this.continueOnFail()) { responseData = items; diff --git a/packages/nodes-base/nodes/MongoDb/MongoDb.node.ts b/packages/nodes-base/nodes/MongoDb/MongoDb.node.ts index 14d8718b92..96dfdf41f3 100644 --- a/packages/nodes-base/nodes/MongoDb/MongoDb.node.ts +++ b/packages/nodes-base/nodes/MongoDb/MongoDb.node.ts @@ -18,7 +18,6 @@ import type { Sort, } from 'mongodb'; import { ObjectId } from 'mongodb'; -import { generatePairedItemData } from '../../utils/utilities'; import { nodeProperties } from './MongoDbProperties'; import { @@ -120,7 +119,7 @@ export class MongoDb implements INodeType { if (nodeVersion >= 1.1) { itemsLength = items.length; } else { - fallbackPairedItems = generatePairedItemData(items.length); + fallbackPairedItems = []; } if (operation === 'aggregate') { @@ -233,7 +232,6 @@ export class MongoDb implements INodeType { } if (operation === 'findOneAndReplace') { - fallbackPairedItems = fallbackPairedItems ?? generatePairedItemData(items.length); const fields = prepareFields(this.getNodeParameter('fields', 0) as string); const useDotNotation = this.getNodeParameter('options.useDotNotation', 0, false) as boolean; const dateFields = prepareFields( @@ -268,14 +266,10 @@ export class MongoDb implements INodeType { } } - returnData = this.helpers.constructExecutionMetaData( - this.helpers.returnJsonArray(updateItems), - { itemData: fallbackPairedItems }, - ); + returnData = this.helpers.returnJsonArray(updateItems); } if (operation === 'findOneAndUpdate') { - fallbackPairedItems = fallbackPairedItems ?? generatePairedItemData(items.length); const fields = prepareFields(this.getNodeParameter('fields', 0) as string); const useDotNotation = this.getNodeParameter('options.useDotNotation', 0, false) as boolean; const dateFields = prepareFields( @@ -310,14 +304,10 @@ export class MongoDb implements INodeType { } } - returnData = this.helpers.constructExecutionMetaData( - this.helpers.returnJsonArray(updateItems), - { itemData: fallbackPairedItems }, - ); + returnData = this.helpers.returnJsonArray(updateItems); } if (operation === 'insert') { - fallbackPairedItems = fallbackPairedItems ?? generatePairedItemData(items.length); let responseData: IDataObject[] = []; try { // Prepare the data to insert and copy it to be returned @@ -348,14 +338,10 @@ export class MongoDb implements INodeType { } } - returnData = this.helpers.constructExecutionMetaData( - this.helpers.returnJsonArray(responseData), - { itemData: fallbackPairedItems }, - ); + returnData = this.helpers.returnJsonArray(responseData); } if (operation === 'update') { - fallbackPairedItems = fallbackPairedItems ?? generatePairedItemData(items.length); const fields = prepareFields(this.getNodeParameter('fields', 0) as string); const useDotNotation = this.getNodeParameter('options.useDotNotation', 0, false) as boolean; const dateFields = prepareFields( @@ -390,10 +376,7 @@ export class MongoDb implements INodeType { } } - returnData = this.helpers.constructExecutionMetaData( - this.helpers.returnJsonArray(updateItems), - { itemData: fallbackPairedItems }, - ); + returnData = this.helpers.returnJsonArray(updateItems); } await client.close(); diff --git a/packages/nodes-base/nodes/Postgres/v2/helpers/utils.ts b/packages/nodes-base/nodes/Postgres/v2/helpers/utils.ts index 5f01e6b6a6..813615c13d 100644 --- a/packages/nodes-base/nodes/Postgres/v2/helpers/utils.ts +++ b/packages/nodes-base/nodes/Postgres/v2/helpers/utils.ts @@ -7,7 +7,6 @@ import type { } from 'n8n-workflow'; import { NodeOperationError, jsonParse } from 'n8n-workflow'; -import { generatePairedItemData } from '../../../../utils/utilities'; import type { ColumnInfo, EnumInfo, @@ -234,17 +233,15 @@ export function configureQueryRunner( .flat(); if (!returnData.length) { - const pairedItem = generatePairedItemData(queries.length); - if ((options?.nodeVersion as number) < 2.3) { if (emptyReturnData.length) { - emptyReturnData[0].pairedItem = pairedItem; + emptyReturnData[0].pairedItem = undefined; } returnData = emptyReturnData; } else { returnData = queries.every((query) => isSelectQuery(query.query)) ? [] - : [{ json: { success: true }, pairedItem }]; + : [{ json: { success: true } }]; } } } catch (err) { diff --git a/packages/nodes-base/nodes/QuickBase/QuickBase.node.ts b/packages/nodes-base/nodes/QuickBase/QuickBase.node.ts index fcd71125ce..97b04f01be 100644 --- a/packages/nodes-base/nodes/QuickBase/QuickBase.node.ts +++ b/packages/nodes-base/nodes/QuickBase/QuickBase.node.ts @@ -10,7 +10,6 @@ import type { } from 'n8n-workflow'; import { NodeConnectionType, NodeOperationError } from 'n8n-workflow'; -import { generatePairedItemData } from '../../utils/utilities'; import { getFieldsObject, quickbaseApiRequest, @@ -117,7 +116,6 @@ export class QuickBase implements INodeType { async execute(this: IExecuteFunctions): Promise { const items = this.getInputData(); - const itemData = generatePairedItemData(items.length); const returnData: INodeExecutionData[] = []; const length = items.length; const qs: IDataObject = {}; @@ -295,10 +293,7 @@ export class QuickBase implements INodeType { } } - const executionData = this.helpers.constructExecutionMetaData( - this.helpers.returnJsonArray(responseData as IDataObject[]), - { itemData }, - ); + const executionData = this.helpers.returnJsonArray(responseData as IDataObject[]); returnData.push(...executionData); } @@ -465,10 +460,7 @@ export class QuickBase implements INodeType { } } - const executionData = this.helpers.constructExecutionMetaData( - this.helpers.returnJsonArray(responseData as IDataObject[]), - { itemData }, - ); + const executionData = this.helpers.returnJsonArray(responseData as IDataObject[]); returnData.push(...executionData); } @@ -548,10 +540,7 @@ export class QuickBase implements INodeType { } } - const executionData = this.helpers.constructExecutionMetaData( - this.helpers.returnJsonArray(responseData as IDataObject[]), - { itemData }, - ); + const executionData = this.helpers.returnJsonArray(responseData as IDataObject[]); returnData.push(...executionData); } diff --git a/packages/nodes-base/nodes/ReadBinaryFiles/ReadBinaryFiles.node.ts b/packages/nodes-base/nodes/ReadBinaryFiles/ReadBinaryFiles.node.ts index b81530f62a..a6e131fef5 100644 --- a/packages/nodes-base/nodes/ReadBinaryFiles/ReadBinaryFiles.node.ts +++ b/packages/nodes-base/nodes/ReadBinaryFiles/ReadBinaryFiles.node.ts @@ -7,7 +7,6 @@ import { } from 'n8n-workflow'; import glob from 'fast-glob'; -import { generatePairedItemData } from '../../utils/utilities'; export class ReadBinaryFiles implements INodeType { description: INodeTypeDescription = { @@ -48,7 +47,6 @@ export class ReadBinaryFiles implements INodeType { async execute(this: IExecuteFunctions): Promise { const fileSelector = this.getNodeParameter('fileSelector', 0) as string; const dataPropertyName = this.getNodeParameter('dataPropertyName', 0); - const pairedItem = generatePairedItemData(this.getInputData().length); const files = await glob(fileSelector); @@ -60,7 +58,6 @@ export class ReadBinaryFiles implements INodeType { [dataPropertyName]: await this.helpers.prepareBinaryData(stream, filePath), }, json: {}, - pairedItem, }); } diff --git a/packages/nodes-base/nodes/RespondToWebhook/RespondToWebhook.node.ts b/packages/nodes-base/nodes/RespondToWebhook/RespondToWebhook.node.ts index 0ad0dd85c3..6b54831835 100644 --- a/packages/nodes-base/nodes/RespondToWebhook/RespondToWebhook.node.ts +++ b/packages/nodes-base/nodes/RespondToWebhook/RespondToWebhook.node.ts @@ -20,7 +20,7 @@ import { } from 'n8n-workflow'; import set from 'lodash/set'; import jwt from 'jsonwebtoken'; -import { formatPrivateKey, generatePairedItemData } from '../../utils/utilities'; +import { formatPrivateKey } from '../../utils/utilities'; export class RespondToWebhook implements INodeType { description: INodeTypeDescription = { @@ -444,11 +444,7 @@ export class RespondToWebhook implements INodeType { this.sendResponse(response); } catch (error) { if (this.continueOnFail()) { - const itemData = generatePairedItemData(items.length); - const returnData = this.helpers.constructExecutionMetaData( - [{ json: { error: error.message } }], - { itemData }, - ); + const returnData = [{ json: { error: error.message } }]; return [returnData]; } diff --git a/packages/nodes-base/nodes/RssFeedRead/RssFeedRead.node.ts b/packages/nodes-base/nodes/RssFeedRead/RssFeedRead.node.ts index de9f602b81..8d4ff718c4 100644 --- a/packages/nodes-base/nodes/RssFeedRead/RssFeedRead.node.ts +++ b/packages/nodes-base/nodes/RssFeedRead/RssFeedRead.node.ts @@ -5,11 +5,11 @@ import type { INodeExecutionData, INodeType, INodeTypeDescription, + IPairedItemData, } from 'n8n-workflow'; import { NodeConnectionType, NodeOperationError } from 'n8n-workflow'; import Parser from 'rss-parser'; -import { generatePairedItemData } from '../../utils/utilities'; // Utility function @@ -76,7 +76,7 @@ export class RssFeedRead implements INodeType { if (nodeVersion >= 1.1) { itemsLength = items.length; } else { - fallbackPairedItems = generatePairedItemData(items.length); + fallbackPairedItems = [] as IPairedItemData[]; } for (let i = 0; i < itemsLength; i++) { diff --git a/packages/nodes-base/nodes/SpreadsheetFile/v1/SpreadsheetFileV1.node.ts b/packages/nodes-base/nodes/SpreadsheetFile/v1/SpreadsheetFileV1.node.ts index 99c7cc80bb..d49081399f 100644 --- a/packages/nodes-base/nodes/SpreadsheetFile/v1/SpreadsheetFileV1.node.ts +++ b/packages/nodes-base/nodes/SpreadsheetFile/v1/SpreadsheetFileV1.node.ts @@ -29,7 +29,7 @@ import { fromFileOptions, toFileOptions, } from '../description'; -import { flattenObject, generatePairedItemData } from '@utils/utilities'; +import { flattenObject } from '@utils/utilities'; import { oldVersionNotice } from '@utils/descriptions'; export class SpreadsheetFileV1 implements INodeType { @@ -58,7 +58,6 @@ export class SpreadsheetFileV1 implements INodeType { async execute(this: IExecuteFunctions): Promise { const items = this.getInputData(); - const pairedItem = generatePairedItemData(items.length); const operation = this.getNodeParameter('operation', 0); @@ -230,7 +229,6 @@ export class SpreadsheetFileV1 implements INodeType { const newItem: INodeExecutionData = { json: {}, binary: {}, - pairedItem, }; let fileName = `spreadsheet.${fileFormat}`; @@ -247,7 +245,6 @@ export class SpreadsheetFileV1 implements INodeType { json: { error: error.message, }, - pairedItem, }); } else { throw error; diff --git a/packages/nodes-base/nodes/SpreadsheetFile/v2/toFile.operation.ts b/packages/nodes-base/nodes/SpreadsheetFile/v2/toFile.operation.ts index 61f8f8509e..aa0609b175 100644 --- a/packages/nodes-base/nodes/SpreadsheetFile/v2/toFile.operation.ts +++ b/packages/nodes-base/nodes/SpreadsheetFile/v2/toFile.operation.ts @@ -1,7 +1,6 @@ import type { IExecuteFunctions, INodeExecutionData, INodeProperties } from 'n8n-workflow'; import { toFileOptions, toFileProperties } from '../description'; -import { generatePairedItemData } from '@utils/utilities'; import type { JsonToSpreadsheetBinaryFormat, JsonToSpreadsheetBinaryOptions } from '@utils/binary'; import { convertJsonToSpreadsheetBinary } from '@utils/binary'; @@ -10,8 +9,6 @@ export const description: INodeProperties[] = [...toFileProperties, toFileOption export async function execute(this: IExecuteFunctions, items: INodeExecutionData[]) { const returnData: INodeExecutionData[] = []; - const pairedItem = generatePairedItemData(items.length); - try { const binaryPropertyName = this.getNodeParameter('binaryPropertyName', 0); const fileFormat = this.getNodeParameter('fileFormat', 0) as JsonToSpreadsheetBinaryFormat; @@ -24,7 +21,6 @@ export async function execute(this: IExecuteFunctions, items: INodeExecutionData binary: { [binaryPropertyName]: binaryData, }, - pairedItem, }; returnData.push(newItem); @@ -34,7 +30,6 @@ export async function execute(this: IExecuteFunctions, items: INodeExecutionData json: { error: error.message, }, - pairedItem, }); } else { throw error; diff --git a/packages/nodes-base/nodes/Stackby/Stackby.node.ts b/packages/nodes-base/nodes/Stackby/Stackby.node.ts index 72c9ef4a18..2a0a0542f9 100644 --- a/packages/nodes-base/nodes/Stackby/Stackby.node.ts +++ b/packages/nodes-base/nodes/Stackby/Stackby.node.ts @@ -7,7 +7,6 @@ import type { } from 'n8n-workflow'; import { NodeConnectionType, NodeOperationError } from 'n8n-workflow'; -import { generatePairedItemData } from '../../utils/utilities'; import type { IRecord } from './GenericFunction'; import { apiRequest, apiRequestAllItems } from './GenericFunction'; @@ -283,11 +282,7 @@ export class Stackby implements INodeType { ); } catch (error) { if (this.continueOnFail()) { - const itemData = generatePairedItemData(items.length); - const executionErrorData = this.helpers.constructExecutionMetaData( - this.helpers.returnJsonArray({ error: error.message }), - { itemData }, - ); + const executionErrorData = this.helpers.returnJsonArray({ error: error.message }); returnData.push(...executionErrorData); } else { throw error; diff --git a/packages/nodes-base/nodes/Transform/Summarize/Summarize.node.ts b/packages/nodes-base/nodes/Transform/Summarize/Summarize.node.ts index 12d0e06f22..d9b2851ad6 100644 --- a/packages/nodes-base/nodes/Transform/Summarize/Summarize.node.ts +++ b/packages/nodes-base/nodes/Transform/Summarize/Summarize.node.ts @@ -6,7 +6,7 @@ import { type INodeType, type INodeTypeDescription, } from 'n8n-workflow'; -import { generatePairedItemData } from '../../../utils/utilities'; + import { type Aggregations, NUMERICAL_AGGREGATIONS, @@ -318,9 +318,7 @@ export class Summarize implements INodeType { checkIfFieldExists.call(this, newItems, fieldsToSummarize, getValue); } catch (error) { if (options.continueIfFieldNotFound) { - const itemData = generatePairedItemData(items.length); - - return [[{ json: {}, pairedItem: itemData }]]; + return [[{ json: {} }]]; } else { throw error; }