package Ġorg . jetbrains . kotlin . jupyter . libraries Ċ Ċ import Ġcom . be ust . kl ax on . JsonObject Ċ import Ġcom . be ust . kl ax on . Parser Ċ import Ġorg . jetbrains . kotlin . jupyter . GitHub Api Prefix Ċ import Ġorg . jetbrains . kotlin . jupyter . Libraries Dir Ċ import Ġorg . jetbrains . kotlin . jupyter . Library Descriptor Ċ import Ġorg . jetbrains . kotlin . jupyter . Repl Compiler Exception Ċ import Ġorg . jetbrains . kotlin . jupyter . Type Handler Ċ import Ġorg . jetbrains . kotlin . jupyter . Variable Ċ import Ġorg . jetbrains . kotlin . jupyter . catch All Ċ import Ġorg . jetbrains . kotlin . jupyter . get Http Ċ import Ġorg . jetbrains . kotlin . jupyter . log Ċ import Ġorg . json . JSONObject Ċ import Ġjava . io . File Ċ import Ġkotlin . script . experimental . api . Result With Diagnostics Ċ import Ġkotlin . script . experimental . api . Script Diagnostic Ċ Ċ sealed Ġclass ĠParameter ( val Ġname : ĠString , Ġopen Ġval Ġdefault : ĠString ?) Ġ{ ĊĠĠĠ Ġclass ĠRequired ( name : ĠString ): ĠParameter ( name , Ġnull ) ĊĠĠĠ Ġclass ĠOptional ( name : ĠString , Ġoverride Ġval Ġdefault : ĠString ): ĠParameter ( name , Ġdefault ) Ċ } Ċ Ċ class ĠBr ackets ( val Ġopen : ĠChar , Ġval Ġclose : ĠChar ) Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠRO UND Ġ= ĠBr ackets (' (', Ġ') ') ĊĠĠĠĠĠĠĠ Ġval ĠS QUARE Ġ= ĠBr ackets ('[ ', Ġ' ]') ĊĠĠĠ Ġ} Ċ } Ċ Ċ enum Ġclass ĠDefault Info Switch Ġ{ ĊĠĠĠ ĠGIT _ REFERENCE , ĠDIRECTORY Ċ } Ċ Ċ class ĠLibrary Factory Default Info Switch er < T >( private Ġval Ġinfo Provider : ĠResolution Info Provider , Ġinitial Switch Val : ĠT , Ġprivate Ġval Ġswitch er : Ġ( T ) Ġ-> ĠLibrary Resolution Info ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġdefault Info Cache Ġ= Ġhash Map Of < T , ĠLibrary Resolution Info >() ĊĊĠĠĠ Ġvar Ġswitch : ĠT Ġ= Ġinitial Switch Val ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinfo Provider . fallback Ġ= Ġdefault Info Cache . get Or Put ( value ) Ġ{ Ġswitch er ( value ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġdefault ( provider : ĠResolution Info Provider , Ġdefault Dir : ĠFile , Ġdefault Ref : ĠString ): ĠLibrary Factory Default Info Switch er < Default Info Switch > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinitial Info Ġ= Ġprovider . fallback ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdir Info Ġ= Ġif Ġ( initial Info Ġis ĠLibrary Resolution Info . By Dir ) Ġinitial Info Ġelse ĠLibrary Resolution Info . By Dir ( default Dir ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġref Info Ġ= Ġif Ġ( initial Info Ġis ĠLibrary Resolution Info . By Git Ref ) Ġinitial Info Ġelse ĠLibrary Resolution Info . getInfo By Ref ( default Ref ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠLibrary Factory Default Info Switch er ( provider , ĠDefault Info Switch . DIRECTORY ) Ġ{ Ġswitch Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ( switch ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDefault Info Switch . DIRECTORY Ġ-> Ġdir Info ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDefault Info Switch . GIT _ REFERENCE Ġ-> Ġref Info ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġdiag Failure ( message : ĠString ): ĠResult With Diagnostics . Failure Ġ{ ĊĠĠĠ Ġreturn ĠResult With Diagnostics . Failure ( Script Diagnostic ( Script Diagnostic . un specified Error , Ġmessage )) Ċ } Ċ Ċ fun Ġparse Library Argument ( str : ĠString ): ĠVariable Ġ{ ĊĠĠĠ Ġval Ġeq Ġ= Ġstr . indexOf (' =') ĊĠĠĠ Ġreturn Ġif Ġ( eq Ġ== Ġ- 1 ) ĠVariable ("", Ġstr . trim ()) ĊĠĠĠ Ġelse ĠVariable ( str . substring ( 0 , Ġeq ). trim (), Ġstr . substring ( eq Ġ+ Ġ 1 ). trim ()) Ċ } Ċ Ċ fun Ġparse Call ( str : ĠString , Ġbrackets : ĠBr ackets ): ĠPair < String , ĠList < Variable >> Ġ{ ĊĠĠĠ Ġval Ġopen Bracket Index Ġ= Ġstr . indexOf ( br ackets . open ) ĊĠĠĠ Ġif Ġ( open Bracket Index Ġ== Ġ- 1 ) Ġreturn Ġstr . trim () Ġto Ġempty List () ĊĠĠĠ Ġval Ġname Ġ= Ġstr . substring ( 0 , Ġopen Bracket Index ). trim () ĊĠĠĠ Ġval Ġargs Ġ= Ġstr . substring ( open Bracket Index Ġ+ Ġ 1 , Ġstr . indexOf ( br ackets . close , Ġopen Bracket Index )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. split (',') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map (:: parse Library Argument ) ĊĠĠĠ Ġreturn Ġname Ġto Ġargs Ċ } Ċ Ċ fun Ġparse Library Name ( str : ĠString ): ĠPair < String , ĠList < Variable >> Ġ{ ĊĠĠĠ Ġreturn Ġparse Call ( str , ĠBr ackets . ROUND ) Ċ } Ċ Ċ fun Ġget Latest Commit To Libraries ( ref : ĠString , Ġsince Timestamp : ĠString ?): ĠPair < String , ĠString >? Ġ= ĊĠĠĠĠĠĠĠ Ġlog . catch All Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġurl Ġ= Ġ"$ GitHub Api Prefix / commits ? path =$ Libraries Dir & sha =$ ref " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( since Timestamp Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġurl Ġ+= Ġ"& since =$ since Timestamp " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . info (" Checking Ġfor Ġnew Ġcommits Ġto Ġlibrary Ġdescriptors Ġat Ġ$ url ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġarr Ġ= Ġget Http ( url ). json Array ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( arr . length () Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( since Timestamp Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Latest Commit To Libraries ( ref , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . info (" Did n 't Ġfind Ġany Ġcommits Ġto Ġ'$ Libraries Dir ' Ġat Ġ$ url ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcommit Ġ= Ġarr [ 0 ] Ġas ĠJSONObject ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsha Ġ= Ġcommit [" sha "] Ġas ĠString ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtimestamp Ġ= Ġ(( commit [" commit "] Ġas ĠJSONObject )[" commit ter "] Ġas ĠJSONObject )[" date "] Ġas ĠString ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsha Ġto Ġtimestamp ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ċ Ċ fun Ġparse Library Descriptor ( json : ĠString ): ĠLibrary Descriptor Ġ{ ĊĠĠĠ Ġval Ġjson Parser Ġ= ĠParser . default () ĊĠĠĠ Ġval Ġres Ġ= Ġjson Parser . parse ( json . byte InputStream ()) ĊĠĠĠ Ġif Ġ( res Ġis ĠJsonObject ) Ġreturn Ġparse Library Descriptor ( res ) ĊĊĠĠĠ Ġthrow ĠRe pl Compiler Exception (" Result Ġof Ġlibrary Ġdescriptor Ġparsing Ġis Ġof Ġtype Ġ${ res . java Class . canonical Name } Ġwhich Ġis Ġunexpected ") Ċ } Ċ Ċ fun Ġparse Library Descriptor ( json : ĠJsonObject ): ĠLibrary Descriptor Ġ{ ĊĠĠĠ Ġreturn ĠLibrary Descriptor ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoriginal Json Ġ= Ġjson , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdependencies Ġ= Ġjson . array < String >(" dependencies ") ?. toList (). or Empty (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvariables Ġ= Ġjson . obj (" properties ") ?. map Ġ{ ĠVariable ( it . key , Ġit . value . toString ()) Ġ}. or Empty (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimports Ġ= Ġjson . array < String >(" imports ") ?. toList (). or Empty (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepositories Ġ= Ġjson . array < String >(" repositories ") ?. toList (). or Empty (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinit Ġ= Ġjson . array < String >(" init ") ?. toList (). or Empty (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshutdown Ġ= Ġjson . array < String >(" shutdown ") ?. toList (). or Empty (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinit Cell Ġ= Ġjson . array < String >(" init Cell ") ?. toList (). or Empty (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrender ers Ġ= Ġjson . obj (" render ers ") ?. map Ġ{ ĠType Handler ( it . key , Ġit . value . toString ()) Ġ} ?. toList (). or Empty (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlink Ġ= Ġjson . string (" link "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġjson . string (" description "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmin Kernel Version Ġ= Ġjson . string (" min Kernel Version "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconverter s Ġ= Ġjson . obj (" type Converters ") ?. map Ġ{ ĠType Handler ( it . key , Ġit . value . toString ()) Ġ}. or Empty (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġannotations Ġ= Ġjson . obj (" annotation Handlers ") ?. map Ġ{ ĠType Handler ( it . key , Ġit . value . toString ()) Ġ}. or Empty () ĊĠĠĠ Ġ) Ċ } Ċ Ċ fun Ġparse Library Descriptors ( lib Json s : ĠMap < String , ĠJsonObject >): ĠMap < String , ĠLibrary Descriptor > Ġ{ ĊĠĠĠ Ġreturn Ġlib Json s . map Values Ġ{ ĊĠĠĠĠĠĠĠ Ġlog . info (" Parsing Ġ'${ it . key }' Ġdescriptor ") ĊĠĠĠĠĠĠĠ Ġparse Library Descriptor ( it . value ) ĊĠĠĠ Ġ} Ċ } Ċ