package Ġio . hex labs . kotlin . api Ċ Ċ import Ġio . hex labs . kotlin . playground . Java Executor Ċ import Ġio . hex labs . kotlin . playground . Kotlin Compiler Ċ import Ġio . hex labs . kotlin . playground . Kotlin Environment Ċ import Ġio . hex labs . kotlin . playground . Kotlin File Ċ import Ġio . hex labs . kotlin . playground . model . Configuration Ċ import Ġio . hex labs . kotlin . playground . model . Java Execution Result Ċ import Ġio . hex labs . kotlin . playground . model . Project Ċ import Ġio . hex labs . kotlin . playground . model . Severity Ċ import Ġio . hex labs . kotlin . playground . model . VersionInfo Ċ import Ġorg . http 4 k . core . Body Ċ import Ġorg . http 4 k . core . Method Ċ import Ġorg . http 4 k . core . Request Ċ import Ġorg . http 4 k . core . Response Ċ import Ġorg . http 4 k . core . Status . Companion . NOT _ FOUND Ċ import Ġorg . http 4 k . core . Status . Companion . OK Ċ import Ġorg . http 4 k . core . with Ċ import Ġorg . http 4 k . format . Jack son Ċ import Ġorg . http 4 k . lens . FormField Ċ import Ġorg . http 4 k . lens . Query Ċ import Ġorg . http 4 k . lens . Validator Ċ import Ġorg . http 4 k . lens . int Ċ import Ġorg . http 4 k . lens . string Ċ import Ġorg . http 4 k . lens . web Form Ċ import Ġorg . http 4 k . routing . routes Ċ import Ġorg . jetbrains . kotlin . resolve . calls . inference . model . Constraint Storage . Empty . errors Ċ import Ġjava . io . File Ċ import Ġjava . nio . file . Files Ċ import Ġjava . nio . file . Path Ċ import Ġjava . nio . file . Paths Ċ import Ġjava . util . UUID Ċ Ċ class ĠPlay ground Handler ( private Ġval Ġenvironment : ĠKotlin Environment , Ġprivate Ġval Ġconfiguration : ĠConfiguration ) Ġ{ ĊĊĠĠĠ Ġdata Ġclass ĠOutput Dir ( val Ġpath : ĠPath , Ġval Ġsub Paths : ĠList < Path >) ĊĊĠĠĠ Ġval Ġtype From Ġ= ĠQuery . required (" type ") ĊĊĠĠĠ Ġval Ġplay ground Routes Ġ= Ġroutes ( ĊĠĠĠĠĠĠĠ ĠMethod . GET Ġto Ġ:: get Route , ĊĠĠĠĠĠĠĠ ĠMethod . POST Ġto Ġ:: post Route ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġfun Ġget Route ( request : ĠRequest ): ĠResponse Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( Operations . from ( type From ( request ), Ġrequires Body Ġ= Ġfalse )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOperations . K OT LIN _ VERSION S Ġ-> ĠResponse ( OK ). with ( body As ( listOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVersion Info ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġversion Ġ= Ġconfiguration . kotlin Version , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Ġ= Ġconfiguration . kotlin Version , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstdlib Version Ġ= Ġconfiguration . kotlin Version ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠResponse ( NOT _ FOUND ). body ( text For NotFound Operations ( post Ġ= Ġfalse )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpost Route ( request : ĠRequest ): ĠResponse Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproject Ġ= Ġproject From ( request ) ĊĠĠĠĠĠĠĠ Ġval Ġfiles Ġ= Ġproject . files . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠKotlin File . from ( environment . kotlin Environment . project , Ġit . name , Ġit . text ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( Operations . from ( type From ( request ), Ġrequires Body Ġ= Ġtrue )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOperations . COMPLETE Ġ-> ĠResponse ( OK ). with ( body As ( environment . complete ( files . first (), Ġline From ( request ), Ġcharacter From ( request )))) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOperations . HIG HL IGHT Ġ-> ĠResponse ( OK ). with ( body As ( environment . errors From ( files . map Ġ{ Ġit . kotlin File Ġ} ))) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOperations . RUN Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġerrors Ġ= Ġenvironment . errors From ( files . map Ġ{ Ġit . kotlin File Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠResponse ( OK ). with ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody As ( if Ġ( errors . any Ġ{ Ġit . value . any Ġ{ Ġerror Ġ-> Ġerror . severity Ġ== ĠSeverity . ERROR Ġ} Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJava Execution Result ("", Ġerrors Ġ= Ġerrors ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcompilation Ġ= ĠKotlin Compiler ( environment ). compile ( files . map Ġ{ Ġit . kotlin File Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( compilation . files . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoutput Ġ= Ġwrite ( compilation ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJava Executor . execute ( args From ( compilation . main Class !! , Ġoutput )). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput . path . to AbsolutePath (). to File (). delete Re cursively () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse ĠJava Execution Result ("", ĠJava Executor . Exception Descriptor (" Something Ġwent Ġwrong ", Ġ" Exception ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠResponse ( NOT _ FOUND ). body ( text For NotFound Operations ( post Ġ= Ġtrue )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġwrite ( compiled : ĠKotlin Compiler . Compiled ): ĠPlay ground Handler . Output Dir Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠsessionId Ġ= ĠUUID . randomUUID (). toString (). replace ("- ", Ġ"") ĊĠĠĠĠĠĠĠ Ġval Ġoutput Dir Ġ= ĠPaths . get ( configuration . working Directory , Ġ" generated ", ĠsessionId ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! configuration . disable Security ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpolicy Ġ= ĠFile (" executor . policy "). read Text () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace (" %% GENERATED %% ", Ġoutput Dir . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace (" %% LIB _ DIR %% ", Ġconfiguration . working Directory ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoutput Dir . resolve (" executor . policy "). apply Ġ{ Ġparent . to File (). mkdir s () Ġ}. to File (). write Text ( policy ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠPlay ground Handler . Output Dir ( output Dir , Ġcompiled . files . map Ġ{ Ġ( name , Ġbytes ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoutput Dir . resolve ( name ). let Ġ{ Ġpath Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath . parent . to File (). mkdir s () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFiles . write ( path , Ġbytes ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġargs From ( main Class : ĠString , Ġoutput Directory : ĠPlay ground Handler . Output Dir ) Ġ= ĠlistOf NotNull ( ĊĠĠĠĠĠĠĠ Ġ" java ", ĊĠĠĠĠĠĠĠ Ġif Ġ(! configuration . disable Security ) Ġ"- D java . security . manager " Ġelse Ġnull , ĊĠĠĠĠĠĠĠ Ġif Ġ(! configuration . disable Security ) Ġ"- D java . security . policy =${ output Directory . path . resolve (" executor . policy "). to AbsolutePath () }" Ġelse Ġnull , ĊĠĠĠĠĠĠĠ Ġ"- classpath " ĊĠĠĠ Ġ) Ġ+ Ġ( environment . classpath . map Ġ{ Ġit . absolute Path Ġ} Ġ+ Ġoutput Directory . path . to AbsolutePath (). toString ()). join ToString (": ") Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmain Class ĊĊĠĠĠ Ġprivate Ġfun Ġline From ( request : ĠRequest ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġline Field Ġ= ĠForm Field . int (). required (" line ") ĊĠĠĠĠĠĠĠ Ġreturn ĠBody . web Form ( Validator . Feedback , Ġline Field ). to Lens ()( request ). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġline Field . extract ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġfun Ġcharacter From ( request : ĠRequest ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcharacter Field Ġ= ĠForm Field . int (). required (" ch ") ĊĠĠĠĠĠĠĠ Ġreturn ĠBody . web Form ( Validator . Feedback , Ġcharacter Field ). to Lens ()( request ). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcharacter Field . extract ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġfun Ġproject From ( request : ĠRequest ): ĠProject Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproject Field Ġ= ĠForm Field . string (). required (" project ") ĊĠĠĠĠĠĠĠ Ġreturn ĠBody . web Form ( Validator . Feedback , Ġproject Field ). to Lens ()( request ). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠJack son . as A ( project Field . extract ( it ), ĠProject :: class ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtext For NotFound Operations ( post : ĠBoolean ) Ġ= Ġ" Expected Ġthe Ġtype Ġquery Ġparameter Ġto Ġbe Ġ${ Operations . values (). filter Ġ{ Ġit . requires Body Ġ== Ġpost Ġ}. join ToString (" Ġor Ġ" ){ Ġit . endpoint Ġ}}" Ċ }