35 lines
		
	
	
		
			808 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			35 lines
		
	
	
		
			808 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 
								 | 
							
								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)
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								}
							 |