UNPKG

n8n-nodes-base

Version:

Base nodes of n8n

108 lines 4.57 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.description = void 0; exports.execute = execute; const utilities_1 = require("../../../../../utils/utilities"); const utils_1 = require("../../helpers/utils"); const transport_1 = require("../../transport"); const common_descriptions_1 = require("../common.descriptions"); const properties = [ { displayName: 'Columns', name: 'columns', type: 'resourceMapper', noDataExpression: true, default: { mappingMode: 'defineBelow', value: null, }, required: true, typeOptions: { loadOptionsDependsOn: ['table.value', 'base.value'], resourceMapper: { resourceMapperMethod: 'getColumnsWithRecordId', mode: 'update', fieldWords: { singular: 'column', plural: 'columns', }, addAllFields: true, multiKeyMatch: true, }, }, }, ...common_descriptions_1.insertUpdateOptions, ]; const displayOptions = { show: { resource: ['record'], operation: ['update'], }, }; exports.description = (0, utilities_1.updateDisplayOptions)(displayOptions, properties); async function execute(items, base, table) { const returnData = []; const endpoint = `${base}/${table}`; const dataMode = this.getNodeParameter('columns.mappingMode', 0); const columnsToMatchOn = this.getNodeParameter('columns.matchingColumns', 0); let tableData = []; if (!columnsToMatchOn.includes('id')) { const response = await transport_1.apiRequestAllItems.call(this, 'GET', endpoint, {}, { fields: columnsToMatchOn }); tableData = response.records; } for (let i = 0; i < items.length; i++) { let recordId = ''; try { const records = []; const options = this.getNodeParameter('options', i, {}); const typecast = options.typecast ? true : false; if (dataMode === 'autoMapInputData') { if (columnsToMatchOn.includes('id')) { const { id, ...fields } = items[i].json; recordId = id; records.push({ id: recordId, fields: (0, utils_1.removeIgnored)(fields, options.ignoreFields), }); } else { const matches = (0, utils_1.findMatches)(tableData, columnsToMatchOn, items[i].json, options.updateAllMatches); for (const match of matches) { const id = match.id; const fields = items[i].json; records.push({ id, fields: (0, utils_1.removeIgnored)(fields, options.ignoreFields) }); } } } if (dataMode === 'defineBelow') { const getNodeParameterOptions = typecast ? { skipValidation: true } : undefined; if (columnsToMatchOn.includes('id')) { const { id, ...fields } = this.getNodeParameter('columns.value', i, [], getNodeParameterOptions); records.push({ id: id, fields }); } else { const fields = this.getNodeParameter('columns.value', i, [], getNodeParameterOptions); const matches = (0, utils_1.findMatches)(tableData, columnsToMatchOn, fields, options.updateAllMatches); for (const match of matches) { const id = match.id; records.push({ id, fields: (0, utils_1.removeIgnored)(fields, columnsToMatchOn) }); } } } const body = { typecast }; const responseData = await transport_1.batchUpdate.call(this, endpoint, body, records); const executionData = this.helpers.constructExecutionMetaData((0, utilities_1.wrapData)(responseData.records), { itemData: { item: i } }); returnData.push(...executionData); } catch (error) { error = (0, utils_1.processAirtableError)(error, recordId, i); if (this.continueOnFail()) { returnData.push({ json: { message: error.message, error } }); continue; } throw error; } } return returnData; } //# sourceMappingURL=update.operation.js.map