module.exports = paginate; const iterator = require("./iterator"); function paginate(octokit, route, options, mapFn) { if (typeof options === "function") { mapFn = options; options = undefined; } options = octokit.request.endpoint.merge(route, options); return gather( octokit, [], iterator(octokit, options)[Symbol.asyncIterator](), mapFn ); } function gather(octokit, results, iterator, mapFn) { return iterator.next().then(result => { if (result.done) { return results; } let earlyExit = false; function done() { earlyExit = true; } results = results.concat( mapFn ? mapFn(result.value, done) : result.value.data ); if (earlyExit) { return results; } return gather(octokit, results, iterator, mapFn); }); }