@flatfile/safe-api
Version:
Flatfile Safe API client with streaming capabilities
115 lines (114 loc) • 4.57 kB
JavaScript
;
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();
}
}
});
}