package Ġcom . github . sal om on br ys . gradle . kotlin . js . assemble web Ċ Ċ import Ġcom . github . sal om on br ys . gradle . kotlin . js . Kt Plugin Ċ import Ġorg . gradle . api . Default Task Ċ import Ġorg . gradle . api . Project Ċ import Ġorg . gradle . api . tasks . Sync Ċ import Ġorg . gradle . kotlin . dsl . get Ċ import Ġorg . gradle . kotlin . dsl . task Ċ import Ġkotlin . reflect . K Class Ċ Ċ abstract Ġclass ĠKotlin Js As semble Web Plugin < E Ġ: ĠKotlin Js As semble Web Extension > Ġ: ĠK t Plugin < Project > Ġ{ ĊĊĠĠĠ Ġprotected Ġabstract Ġval Ġextension Class : ĠK Class < E > ĊĊĠĠĠ Ġprotected Ġabstract Ġfun Ġlist Targets ( ext : ĠE ): ĠIterable < Kotlin Js Web Target > ĊĊĠĠĠ Ġfinal Ġoverride Ġfun ĠProject . apply Plugin () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġext Ġ= Ġproject . extensions . create (" assemble Web ", Ġextension Class . java , Ġthis ) ĊĊĠĠĠĠĠĠĠ Ġafter Evaluate Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist Targets ( ext ). forEach Ġ{ Ġtarget Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd As semble Web Tasks ( this , Ġtarget ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġforbidden Extensions Ġ= ĠlistOf (". k js m ", Ġ". class ", Ġ". metadata ", Ġ". kotlin _ metadata ") ĊĊĠĠĠ Ġprivate Ġfun Ġadd As semble Web Tasks ( project : ĠProject , Ġtarget : ĠKotlin Js Web Target ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġassemble Web Ġ= Ġproject . task < Sync >(" ${ target . name } As semble Web ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgroup Ġ= Ġ" build " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdepends On ( target . compile Task ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfrom ( target . compile Task . destination Dir ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinto ( target . output Dir ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġprepare As semble Web Ġ= Ġproject . task < Default Task >(" ${ target . name } Prepare As semble Web ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdo Last Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassemble Web . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget . configuration Names ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġproject . configurations [ it ] Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġfile Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfrom ( project . zip Tree ( file . absolute Path )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinclude Empty Dirs Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinclude Ġ{ Ġfile Tree Element Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpath Ġ= Ġfile Tree Element . path ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġforbidden Extensions . none Ġ{ Ġpath . endsWith ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġ Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath . startsWith (" META - INF / resources /") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġ Ġ! path . startsWith (" META - INF /") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeach File Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( path . startsWith (" META - INF / resources / ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath Ġ= Ġpath . substring ( 1 9 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġassemble Web . depends On ( prepare As semble Web ) ĊĊĠĠĠĠĠĠĠ Ġproject . tasks [" assemble "]. depends On ( assemble Web ) ĊĊĠĠĠ Ġ} Ċ Ċ } Ċ