UNPKG

@flatfile/safe-api

Version:

Flatfile Safe API client with streaming capabilities

115 lines (114 loc) 4.57 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getRecordsExtension = getRecordsExtension; const records_1 = require("../streaming/records"); const records_2 = require("@flatfile/records"); function getRecordsExtension(client) { // Get the prototype that contains the base record methods const basePrototype = Object.getPrototypeOf(client).constructor.prototype.records; // Create a new object with the base records prototype const originalRecords = Object.create(basePrototype); async function getAllRecords(sheetId, options) { var _a; const PAGE_SIZE = 1000; const MAX_PAGES = 100; const allRecords = []; let pageNumber = 1; while (true) { const request = new records_1.GetRecordsRequest(sheetId, { pageNumber, pageSize: PAGE_SIZE, ...options, }); const response = await request.execute(); const records = ((_a = response === null || response === void 0 ? void 0 : response.data) === null || _a === void 0 ? void 0 : _a.records) || []; if (!records.length) { break; } allRecords.push(...records); if (records.length < PAGE_SIZE) { break; } pageNumber++; if (pageNumber > MAX_PAGES) { break; } } return allRecords; } async function getAllRecordsAsSimpleRecords(sheetId, options) { const records = await getAllRecords(sheetId, options); return records.map((record) => { const mr = Object.keys(record.values).reduce((acc, key) => { acc[key] = record.values[key].value; return acc; }, {}); return { __id: record.id, ...mr }; }); } // Add our streaming capabilities and override methods return Object.assign(originalRecords, { // Override the original insert method insert: async (sheetId, records) => { const request = new records_1.CreateRecordsRequest(sheetId, records); return request.execute(); }, // Add new counts method counts: async (sheetId, opts) => { const request = new records_1.GetRecordCountsRequest(sheetId, opts); return request.execute(); }, // Add all records methods all: { simple: (sheetId, options) => { return getAllRecordsAsSimpleRecords(sheetId, options); }, object: (sheetId, options) => { return getAllRecords(sheetId, options); } }, stream: { get: function (opts = {}) { if (opts.stream) { return (async function* () { const request = new records_1.StreamRecordsRequest(opts); const records = await request.execute(); yield new records_2.Collection(records); })(); } else { return (async () => { const request = new records_1.StreamRecordsRequest(opts); const records = await request.execute(); return new records_2.Collection(records); })(); } }, simple: function (opts = {}) { if (opts.stream) { return (async function* () { const request = new records_1.SimpleStreamRecordsRequest(opts); const records = await request.execute(); for (const record of records) { yield record; } })(); } else { return (async () => { const request = new records_1.SimpleStreamRecordsRequest(opts); return request.execute(); })(); } }, update: async function (opts, records) { const request = new records_1.StreamRecordsUpdate(opts, records); return request.execute(); }, raw: async function (opts, records) { const request = new records_1.RawRecordsUpsert(opts, records); return request.execute(); } } }); }