Skip to content

Commit a55b446

Browse files
authored
feat: Airtable Pagination (#21050)
noticed as I was testing the js sdk with a large table
1 parent d925833 commit a55b446

File tree

1 file changed

+19
-6
lines changed

1 file changed

+19
-6
lines changed

plugins/source/airtable/src/tables.ts

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -242,12 +242,25 @@ const airtableToSchemaTable = (
242242

243243
const resolver: TableResolver = async (clientMeta, parent, stream) => {
244244
const airtableClient = new Airtable({ apiKey, endpointUrl }).base(baseId);
245-
const records = await airtableClient(table.name).select().all();
246-
for (const record of records) {
247-
const recordAsObject = Object.fromEntries(table.fields.map((field) => [field.name, record.get(field.name)]));
248-
stream.write(recordAsObject);
249-
}
250-
return;
245+
246+
return new Promise((resolve, reject) => {
247+
airtableClient(table.name).select().eachPage(
248+
(records, fetchNextPage) => {
249+
for (const record of records) {
250+
const recordAsObject = Object.fromEntries(table.fields.map((field) => [field.name, record.get(field.name)]));
251+
stream.write(recordAsObject);
252+
}
253+
fetchNextPage();
254+
},
255+
(error) => {
256+
if (error) {
257+
reject(error);
258+
} else {
259+
resolve();
260+
}
261+
}
262+
);
263+
});
251264
};
252265

253266
return createTable({ name, columns, description: table.description, resolver });

0 commit comments

Comments
 (0)