/** 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( load: (from: number, to: number) => PromiseLike, pageSize = 500, ): Promise { 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; } }