export function rollup>( cb: (offset: number) => Promise, limit: number, ) { const results: T[] = []; return new Promise((resolve, reject) => { function next(offset = 0) { cb(offset) .then((res) => { results.push(...res); if (res.length < limit) { resolve(results); } else { next(offset + res.length); } }) .catch(reject); } next(0); }); }