Sporalize-api / src /read-pages.ts
Shoraky's picture
Reduce workspace query waterfalls and bound related reads
57b63b8
Raw History Blame Contribute Delete
583 Bytes
/** Read ordered rows in bounded pages, including children of batched IDs.
* Callers must supply a stable order and preserve their authorization filters.
*/
export async function readPages<T>(
load: (from: number, to: number) => PromiseLike<readonly T[]>,
pageSize = 500,
): Promise<T[]> {
if (!Number.isInteger(pageSize) || pageSize < 1) throw new Error("Invalid page size");
const rows: T[] = [];
for (let from = 0; ; from += pageSize) {
const page = await load(from, from + pageSize - 1);
rows.push(...page);
if (page.length < pageSize) return rows;
}
}