UNPKG

n8n-nodes-larkbase-v3

Version:

n8n node to connect with Larkbase API with UTF-8 support, date filtering, array filter values, text field processing, improved field type handling, pagination fixes, advanced data type conversion, proper date filtering with ExactDate format, updated node

66 lines 2.55 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.upsertByField = void 0; const batchSearch_1 = require("./batchSearch"); const batchCreate_1 = require("./batchCreate"); const batchUpdate_1 = require("./batchUpdate"); async function upsertByField(accessToken, appToken, tableId, keyField, records) { const keyValues = records .map((record) => record.fields[keyField]) .filter((value) => value !== undefined && value !== null); const filter = { conditions: [ { field_name: keyField, operator: 'isOneOf', value: keyValues, }, ], conjunction: 'and', }; const existingRecords = await batchSearch_1.batchSearchAll.call(this, accessToken, appToken, tableId, { filter }); const existingRecordsMap = new Map(); existingRecords.forEach((record) => { const keyValue = record.fields[keyField]; if (keyValue !== undefined && keyValue !== null) { existingRecordsMap.set(typeof keyValue === 'object' ? JSON.stringify(keyValue) : String(keyValue), record.record_id); } }); const recordsToUpdate = []; const recordsToCreate = []; records.forEach((record) => { const keyValue = record.fields[keyField]; if (keyValue === undefined || keyValue === null) { recordsToCreate.push(record); return; } const normalizedKeyValue = typeof keyValue === 'object' ? JSON.stringify(keyValue) : String(keyValue); const existingRecordId = existingRecordsMap.get(normalizedKeyValue); if (existingRecordId) { recordsToUpdate.push({ record_id: existingRecordId, fields: record.fields, }); } else { recordsToCreate.push(record); } }); const createdRecords = recordsToCreate.length > 0 ? await batchCreate_1.batchCreateChunked.call(this, accessToken, appToken, tableId, recordsToCreate) : []; const updatedRecords = recordsToUpdate.length > 0 ? await batchUpdate_1.batchUpdateChunked.call(this, accessToken, appToken, tableId, recordsToUpdate) : []; return { created: createdRecords, updated: updatedRecords, stats: { total: records.length, created: createdRecords.length, updated: updatedRecords.length, }, }; } exports.upsertByField = upsertByField; //# sourceMappingURL=upsert.js.map