blob: db4752b4cc939176b39dcca62c157aacec959ed6 [file] [log] [blame]
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);
});
}