import Ġorg . gradle . api . Named Ċ import Ġorg . gradle . api . Project Ċ import Ġorg . gradle . api . tasks . Copy Ċ import Ġorg . jetbrains . kotlin . gradle . plugin . Kotlin Dependency Handler Ċ import Ġorg . jetbrains . kotlin . gradle . tasks . Kotlin Compile Ċ import Ġjava . io . File Ċ Ċ object ĠBuild Ġ{ ĊĊĠ Ġprivate Ġconst Ġval ĠOUTPUT _ DIR _ ENV Ġ= Ġ" OUTPUT _ DIR " ĊĊĠ Ġprivate Ġconst Ġval ĠINPUT _ FILE _ ENV Ġ= Ġ" INPUT _ FILE " ĊĊĠ Ġfun ĠProject . add Sub projects Tasks ( source Set : ĠNamed , Ġdistribution Task Name : ĠString ): ĠDependency Modifier Ġ{ ĊĠĠĠ Ġval Ġfull Dist Build Inner Task Ġ= Ġtasks . register (" full Dist Build Inner ") ĊĠĠĠ Ġval Ġinput Script Ġ= Ġget Input File ()?. let (:: File )?. read Text () Ġ?: Ġreturn Ġ{} ĊĠĠĠ Ġif Ġ(! is Re levant Project ( input Script )) Ġreturn Ġ{} ĊĊĠĠĠ Ġval Ġmanage Input File Task Ġ= Ġtasks . register (" manage Input File ") Ġ{ ĊĠĠĠĠĠ Ġdo First Ġ{ ĊĠĠĠĠĠĠĠ Ġmanage Input File ( input Script , Ġsource Set . name ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġtasks . with Type ( Kotlin Compile :: class . java ) Ġ{ ĊĠĠĠĠĠ Ġdepends On ( manage Input File Task ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġclean Task Ġ= Ġtasks . get ByName (" clean ") Ġ{ ĊĠĠĠĠĠ Ġdepends On ( manage Input File Task ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġdistribution Task Ġ= Ġtasks . get ByName ( distribution Task Name ) Ġ{ ĊĠĠĠĠĠ Ġdepends On ( clean Task ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġcopy Result Task Ġ= Ġtasks . register (" copy Result ", ĠCopy :: class . java ) Ġ{ ĊĠĠĠĠĠ Ġdepends On ( distribution Task ) ĊĊĠĠĠĠĠ Ġfrom ( File ( build Dir , Ġ" distributions "). resolve ("${ project . name }. js ")) ĊĠĠĠĠĠ Ġfrom ( File ( build Dir , Ġ" distributions "). resolve ("${ project . name }. js . map ")) ĊĠĠĠĠĠ Ġinto ( getOutput Dir ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfull Dist Build Inner Task . configure Ġ{ ĊĠĠĠĠĠ Ġdepends On ( copy Result Task ) ĊĠĠĠĠĠ Ġdepends On ( distribution Task ) ĊĠĠĠĠĠ Ġdepends On ( clean Task ) ĊĠĠĠĠĠ Ġdepends On ( manage Input File Task ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġ{ ĊĠĠĠĠĠ Ġextract All Dependencies ( input Script ). forEach Ġ{ ĊĠĠĠĠĠĠĠ Ġimplementation ( npm ( it . name , Ġit . version )) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun ĠProject . is Re levant Project ( input Script : ĠString ): ĠBoolean Ġ{ ĊĠĠĠ Ġval ĠprojectName Ġ= Ġdetermine Placeholder Project ( input Script ) ĊĠĠĠ Ġreturn ĠprojectName Ġ== Ġname ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġget Input File () Ġ= Ġget Env ( INPUT _ FILE _ ENV )?. let (:: File ) ĊĠĠĠ Ġ? . take If Ġ{ Ġ! it . isDirectory Ġ&& Ġit . exists () Ġ} ?. absolute Path ĊĊĠ Ġprivate Ġfun ĠProject . manage Input File ( input Script : ĠString , Ġsource Set : ĠString ) Ġ{ ĊĠĠĠ Ġval Ġplaceholder File Ġ= Ġlayout . project Directory . file (" src /$ source Set / kotlin / Script . kt "). as File ĊĠĠĠ Ġval Ġresult Script Ġ= Ġmodify Input File ( input Script ) ĊĠĠĠ Ġplaceholder File . write Text ( result Script ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġget Output Dir (): ĠString Ġ{ ĊĠĠĠ Ġval Ġlet Ġ= Ġget Env ( OUTPUT _ DIR _ ENV , ĠdefaultValue Ġ= Ġ"./ ") ?. let (:: File )?. absolute File ĊĠĠĠĠĠ Ġ?: Ġthrow ĠIllegalStateException ("$ OUTPUT _ DIR _ ENV Ġnot Ġdefined ") ĊĠĠĠ Ġlet . mkdir s () ĊĠĠĠ Ġreturn Ġlet . absolute Path ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġget Env ( env Name : ĠString , ĠdefaultValue : ĠString ? Ġ= Ġnull ): ĠString ? Ġ= ĠSystem . getenv ( env Name ) Ġ?: ĠdefaultValue Ċ } Ċ Ċ type alias ĠDependency Modifier Ġ= ĠKotlin Dependency Handler . () Ġ-> ĠUnit Ċ