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) }) }