import { Octokit } from "@octokit/core" ; import { iterator } from "./iterator" ; import { MapFunction , PaginationResults , RequestParameters , Route , RequestInterface , } from "./types" ; export function paginate ( octokit , route , parameters ? , mapFn ? ) { if ( typeof parameters === "function" ) { mapFn = parameters ; parameters = undefined ; } return gather ( octokit , [ ] , iterator ( octokit , route , parameters ) [ Symbol . asyncIterator ] ( ) as AsyncIterableIterator < any > , 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 ) ; } ) ; }