package Ġorg . t ameter . partial order . source Ċ Ċ import Ġorg . t ameter . kotlin . js . promise . Promise Ċ import Ġorg . t ameter . kp ouch db . P ouch DB Ċ import Ġorg . t ameter . partial order . dag . kp ouch db . Node Doc Ċ import Ġorg . t ameter . partial order . lib . jquery . J Query XHR Ċ import Ġorg . t ameter . partial order . lib . jquery . jQuery Ċ import Ġorg . t ameter . partial order . lib . jquery . to P ouch DB Ċ import Ġorg . t ameter . partial order . source . kp ouch db . GitHub Source Spec Doc Ċ Ċ /** Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 7 ĠH ugh ĠG re ene Ġ( g ith ugh @ t ameter . org ). Ċ Ġ*/ Ċ Ċ external Ġinterface ĠGitHub Issue Ġ{ Ċ // ĠĠĠ Ġval Ġurl : ĠString ĊĠĠĠ Ġval Ġnumber : ĠLong ĊĠĠĠ Ġval Ġtitle : ĠString Ċ } Ċ Ċ external Ġinterface ĠGitHub Source Spec Ġ{ ĊĠĠĠ Ġval Ġuser : ĠString ĊĠĠĠ Ġval Ġrepo : ĠString Ċ } Ċ Ċ // ĠFrom Ġhttps :// developer . github . com / v 3 /# pagination , Ġthe Ġmaximum Ġpage Ġsize Ġis Ġ 1 0 0 Ċ // ĠRe cursively Ġrequest Ġpages Ġuntil Ġwe Ġhave Ġfound Ġall Ġissues Ċ private Ġconst Ġval ĠPAGE _ SIZE _ LIMIT Ġ= Ġ 1 0 0 Ċ Ċ class ĠGitHub Source ( val Ġspec : ĠGitHub Source Spec Doc ) Ġ: ĠSource Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġpopulate ( db : ĠP ouch DB ): ĠPromise < P ouch DB > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdo Populate ( db Ġ= Ġdb , Ġpage Ġ= Ġ 0 ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠTODO Ġ 2 0 1 6 - 0 4 - 0 1 ĠH ugh G : ĠShould Ġsanity - check Ġfor Ġcycles Ġin Ġthe Ġgraph . ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġsource Id Ġ= Ġ" github :${ spec . repo }/${ spec . user }" ĊĊĠĠĠ Ġprivate Ġfun Ġdo Populate ( db : ĠP ouch DB , Ġpage : ĠInt ): ĠPromise < P ouch DB > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠjQuery . get JSON ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery URL ( page ) ĊĠĠĠĠĠĠĠ Ġ). then ({ Ġdata : ĠAny , Ġ_: ĠString , Ġ_: ĠJ Query XHR Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġissues Ġ= Ġdata . unsafe Cast < Array < GitHub Issue >>() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġissue Docs : ĠArray < Node Doc > Ġ= Ġissues . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNode Doc ( source Id , Ġspec ._ id , Ġspec . description , Ġit . number , Ġit . title ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. to Typed Array () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconsole . log (" GitHub Ġbulk Ġstore Ġinputs , Ġpage Ġ${ page }: ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( it Ġin Ġissue Docs ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconsole . log ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġissue Docs ĊĠĠĠĠĠĠĠ Ġ}). to P ouch DB (). then P Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdb . bulk Docs ( it ) ĊĠĠĠĠĠĠĠ Ġ}. then P Ġ{ Ġresults Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconsole . log (" GitHub Ġbulk Ġstore Ġresults , Ġpage Ġ${ page }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( it Ġin Ġresults ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconsole . log ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( results . size Ġ< ĠPAGE _ SIZE _ LIMIT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkotlin . js . Promise . resolve ( db ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo Populate ( db , Ġpage Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġquery URL ( page : ĠInt ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" https :// api . github . com / repos /${ spec . user }/${ spec . repo }/ issues ? page =${ page }& per _ page =${ PAGE _ SIZE _ LIMIT }" Ċ }