/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 2 0 ĠJetBrains Ġs . r . o . Ġand ĠKotlin ĠProgramming ĠLanguage Ġcontributors . Ċ Ġ* ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense Ġthat Ġcan Ġbe Ġfound Ġin Ġthe Ġlicense / LICENSE . txt Ġfile . Ċ Ġ*/ Ċ Ċ package Ġorg . jetbrains . kotlin . gradle . targets . js . ir Ċ Ċ import Ġorg . gradle . api . Domain Object Set Ċ import Ġorg . gradle . api . Project Ċ import Ġorg . gradle . api . plugins . Extension Aware Ċ import Ġorg . jetbrains . kotlin . gradle . plugin . Kotlin Compilation Ċ import Ġorg . jetbrains . kotlin . gradle . plugin . mpp . Kotlin Js Compilation Ċ import Ġorg . jetbrains . kotlin . gradle . plugin . mpp . Kotlin Target With Bin aries Ċ import Ġorg . jetbrains . kotlin . gradle . plugin . mpp . is Main Ċ import Ġorg . jetbrains . kotlin . gradle . targets . js . Kotlin Js Target Ċ import Ġorg . jetbrains . kotlin . gradle . targets . js . dsl . Kotlin Js Binary Mode Ċ import Ġorg . jetbrains . kotlin . gradle . targets . js . dsl . Kotlin Js Binary Mode . DE VELO P MENT Ċ import Ġorg . jetbrains . kotlin . gradle . targets . js . dsl . Kotlin Js Binary Mode . PRO DU CTION Ċ import Ġorg . jetbrains . kotlin . gradle . targets . js . sub targets . Kotlin Js Sub Target Ċ import Ġorg . jetbrains . kotlin . gradle . utils . lower Camel Case Name Ċ import Ġjavax . inject . Inject ĊĊ Ċ open Ġclass ĠKotlin Js Binary Container Ċ @ Inject Ċ constructor ( ĊĠĠĠ Ġval Ġtarget : ĠKotlin Target With Bin aries < Kotlin Js Compilation , ĠKotlin Js Binary Container >, ĊĠĠĠ Ġbacking Container : ĠDomain Object Set < Js Binary > Ċ ) Ġ: ĠDomain Object Set < Js Binary > Ġby Ġbacking Container Ġ{ ĊĠĠĠ Ġval Ġproject : ĠProject ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġtarget . project ĊĊĠĠĠ Ġprivate Ġval Ġbinary Names Ġ= Ġmutable Set Of < String >() ĊĊĠĠĠ Ġprivate Ġval Ġdefault Compilation : ĠKotlin Js Compilation ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġtarget . comp il ations . get ByName ( Kotlin Compilation . MAIN _ COMPI L ATION _ NAME ) ĊĊĠĠĠ Ġ// ĠFor ĠGro ovy ĠDSL ĊĠĠĠ Ġ@ Jvm Over loads ĊĠĠĠ Ġfun Ġexecutable ( ĊĠĠĠĠĠĠĠ Ġcompilation : ĠKotlin Js Compilation Ġ= Ġdefault Compilation ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( target Ġis ĠKotlin Js Ir Target ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget . when Browser Configured Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( this Ġas ĠKotlin Js Ir Sub Target ). produce Executable () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget . when Node js Configured Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( this Ġas ĠKotlin Js Ir Sub Target ). produce Executable () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompilation . binaries . executable Ir Internal ( compilation ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( target Ġis ĠKotlin Js Target ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget . ir Target ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . let Ġ{ Ġthrow ĠIllegalStateException (" Can 't Ġuse Ġ` executable ()` Ġwith Ġ' both ' Ġcompiler Ġtype ") Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget . when Browser Configured Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( this Ġas ĠKotlin Js Sub Target ). produce Executable () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget . when Node js Configured Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( this Ġas ĠKotlin Js Sub Target ). produce Executable () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompilation . binaries . executable Legacy Internal ( compilation ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġexecutable Ir Internal ( compilation : ĠKotlin Js Compilation ) Ġ= Ġcreate Bin aries ( ĊĠĠĠĠĠĠĠ Ġcompilation Ġ= Ġcompilation , ĊĠĠĠĠĠĠĠ Ġjs Binary Type Ġ= ĠKotlin Js Binary Type . EXECUT ABLE , ĊĠĠĠĠĠĠĠ Ġcreate Ġ= Ġ:: Executable ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġfun Ġexecutable Legacy Internal ( compilation : ĠKotlin Js Compilation ) Ġ= Ġcreate Bin aries ( ĊĠĠĠĠĠĠĠ Ġcompilation Ġ= Ġcompilation , ĊĠĠĠĠĠĠĠ Ġjs Binary Type Ġ= ĠKotlin Js Binary Type . EXECUT ABLE , ĊĠĠĠĠĠĠĠ Ġcreate Ġ= Ġ{ Ġcompilation , Ġname , Ġtype Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠJs Binary Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġcompilation : ĠKotlin Js Compilation Ġ= Ġcompilation ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġname : ĠString Ġ= Ġname ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġmode : ĠKotlin Js Binary Mode Ġ= Ġtype ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġinternal Ġfun Ġget Ir Bin aries ( ĊĠĠĠĠĠĠĠ Ġmode : ĠKotlin Js Binary Mode ĊĠĠĠ Ġ): ĠDomain Object Set < Js Ir Binary > Ġ= ĊĠĠĠĠĠĠĠ Ġwith Type ( Js Ir Binary :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. matching Ġ{ Ġit . mode Ġ== Ġmode Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġ< T Ġ: ĠJs Binary > Ġcreate Bin aries ( ĊĠĠĠĠĠĠĠ Ġcompilation : ĠKotlin Js Compilation , ĊĠĠĠĠĠĠĠ Ġmodes : ĠCollection < Kotlin Js Binary Mode > Ġ= ĠlistOf ( PRO DU CTION , ĠDE VELO P MENT ), ĊĠĠĠĠĠĠĠ Ġjs Binary Type : ĠKotlin Js Binary Type , ĊĠĠĠĠĠĠĠ Ġcreate : Ġ( compilation : ĠKotlin Js Compilation , Ġname : ĠString , Ġmode : ĠKotlin Js Binary Mode ) Ġ-> ĠT ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmodes . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Binary ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompilation , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjs Binary Type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġ< T Ġ: ĠJs Binary > Ġcreate Binary ( ĊĠĠĠĠĠĠĠ Ġcompilation : ĠKotlin Js Compilation , ĊĠĠĠĠĠĠĠ Ġmode : ĠKotlin Js Binary Mode , ĊĠĠĠĠĠĠĠ Ġjs Binary Type : ĠKotlin Js Binary Type , ĊĠĠĠĠĠĠĠ Ġcreate : Ġ( compilation : ĠKotlin Js Compilation , Ġname : ĠString , Ġmode : ĠKotlin Js Binary Mode ) Ġ-> ĠT ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġgenerate Binary Name ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompilation , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmode , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjs Binary Type ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( name Ġin Ġbinary Names ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinary Names . add ( name ) ĊĊĠĠĠĠĠĠĠ Ġval Ġbinary Ġ= Ġcreate ( compilation , Ġname , Ġmode ) ĊĠĠĠĠĠĠĠ Ġadd ( binary ) ĊĠĠĠĠĠĠĠ Ġ// ĠAllow Ġaccessing Ġbinaries Ġas Ġproperties Ġof Ġthe Ġcontainer Ġin ĠGro ovy ĠDSL . ĊĠĠĠĠĠĠĠ Ġif Ġ( this Ġis ĠExtension Aware ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġextensions . add ( binary . name , Ġbinary ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġgenerate Binary Name ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompilation : ĠKotlin Js Compilation , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmode : ĠKotlin Js Binary Mode , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjs Binary Type : ĠKotlin Js Binary Type ? ĊĠĠĠĠĠĠĠ Ġ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlower Camel Case Name ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( compilation . is Main ()) Ġnull Ġelse Ġcompilation . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmode . name . toLowerCase (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjs Binary Type ?. name ?. toLowerCase () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ