/* Ċ Ġ* ĠCopyright Ġ 2 0 2 2 , ĠTeam Dev . ĠAll Ġrights Ġreserved . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠRedistribution Ġand Ġuse Ġin Ġsource Ġand / or Ġbinary Ġforms , Ġwith Ġor Ġwithout Ċ Ġ* Ġmodification , Ġmust Ġretain Ġthe Ġabove Ġcopyright Ġnotice Ġand Ġthe Ġfollowing Ċ Ġ* Ġdisclaimer . Ċ Ġ* Ċ Ġ* ĠTHIS ĠSOFTWARE ĠIS ĠPROVIDED ĠBY ĠTHE ĠCOPYRIGHT ĠHOLDERS ĠAND ĠCONTRIBUTORS Ċ Ġ* Ġ" AS ĠIS " ĠAND ĠANY ĠEXPRESS ĠOR ĠIMPLIED ĠWARRANTIES , ĠINCLUDING , ĠBUT ĠNOT Ċ Ġ* ĠLIMITED ĠTO , ĠTHE ĠIMPLIED ĠWARRANTIES ĠOF ĠMERCHANTABILITY ĠAND ĠFITNESS ĠFOR Ċ Ġ* ĠA ĠPARTICULAR ĠPURPOSE ĠARE ĠDISCLAIMED . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE ĠCOPYRIGHT Ċ Ġ* ĠOWNER ĠOR ĠCONTRIBUTORS ĠBE ĠLIABLE ĠFOR ĠANY ĠDIRECT , ĠINDIRECT , ĠINCIDENTAL , Ċ Ġ* ĠSPECIAL , ĠEXEMPLARY , ĠOR ĠCONSEQUENTIAL ĠDAMAGES Ġ( INCLUDING , ĠBUT ĠNOT Ċ Ġ* ĠLIMITED ĠTO , ĠPROCUREMENT ĠOF ĠSUBSTITUTE ĠGOODS ĠOR ĠSERVICES ; ĠLOSS ĠOF ĠUSE , Ċ Ġ* ĠDATA , ĠOR ĠPROFITS ; ĠOR ĠBUSINESS ĠINTERRUPTION ) ĠHOWEVER ĠCAUSED ĠAND ĠON ĠANY Ċ Ġ* ĠTHEORY ĠOF ĠLIABILITY , ĠWHETHER ĠIN ĠCONTRACT , ĠSTRICT ĠLIABILITY , ĠOR ĠTORT Ċ Ġ* Ġ( INCLUDING ĠNEGLIGENCE ĠOR ĠOTHERWISE ) ĠARISING ĠIN ĠANY ĠWAY ĠOUT ĠOF ĠTHE ĠUSE Ċ Ġ* ĠOF ĠTHIS ĠSOFTWARE , ĠEVEN ĠIF ĠADVISED ĠOF ĠTHE ĠPOSSIBILITY ĠOF ĠSUCH ĠDAMAGE . Ċ Ġ*/ Ċ Ċ package Ġio . sp ine . internal . gradle . javascript Ċ Ċ import Ġio . sp ine . internal . gradle . javascript . task . Js Tasks Ċ import Ġio . sp ine . internal . gradle . javascript . plugin . Js Plugins Ċ import Ġorg . gradle . api . Project Ċ import Ġorg . gradle . kotlin . dsl . create Ċ import Ġorg . gradle . kotlin . dsl . extra Ċ import Ġorg . gradle . kotlin . dsl . findBy Type Ċ Ċ /** Ċ Ġ* ĠConfig ures Ġ[ Js Extension ] Ġthat Ġfacilit ates Ġconfiguration Ġof ĠGradle Ġtasks Ġand Ġplugins Ċ Ġ* Ġto Ġbuild ĠJavaScript s Ġprojects . Ċ Ġ* Ċ Ġ* ĠThe Ġwhole Ġstructure Ġof Ġthe Ġextension Ġlooks Ġas Ġfollows : Ċ Ġ* Ċ Ġ* Ġ``` Ċ Ġ* Ġjavascript Ġ{ Ċ Ġ* ĠĠĠĠ Ġenvironment Ġ{ Ċ Ġ* ĠĠĠĠĠĠĠĠ Ġ// Ġ... Ċ Ġ* ĠĠĠĠ Ġ} Ċ Ġ* ĠĠĠĠ Ġtasks Ġ{ Ċ Ġ* ĠĠĠĠĠĠĠĠ Ġ// Ġ... Ċ Ġ* ĠĠĠĠ Ġ} Ċ Ġ* ĠĠĠĠ Ġplugins Ġ{ Ċ Ġ* ĠĠĠĠĠĠĠĠ Ġ// Ġ... Ċ Ġ* ĠĠĠĠ Ġ} Ċ Ġ* Ġ} Ċ Ġ* Ġ``` Ċ Ġ* Ċ Ġ* Ġ### ĠEnvironment Ċ Ġ* Ċ Ġ* ĠOne Ġof Ġthe Ġmain Ġfeatures Ġof Ġthis Ġextension Ġis Ġ[ Js Environment ]. ĠEnvironment Ġdescribes Ġa Ġmodule Ċ Ġ* Ġitself , Ġused Ġtools Ġwith Ġtheir Ġinput / output Ġfiles , Ġcode Ġgeneration . Ċ Ġ* Ċ Ġ* ĠThe Ġextension Ġis Ġsh ipped Ġwith Ġa Ġpre - configured Ġenvironment . ĠSo , Ġno Ġpre - configuration Ġis Ġrequired . Ċ Ġ* ĠMost Ġproperties Ġin Ġ[ Js Environment ] Ġhave Ġcalculated Ġdefaults Ġright Ġin Ġthe Ġinterface . Ċ Ġ* ĠOnly Ġtwo Ġproperties Ġneed Ġexplicit Ġoverride . Ċ Ġ* Ċ Ġ* ĠThe Ġextension Ġdefines Ġthem Ġas Ġfollows : Ċ Ġ* Ċ Ġ* ĠĠ 1 . Ġ[ Js Environment . project Dir ] ĠâĢĵ > Ġ` project . project Dir `. Ċ Ġ* ĠĠ 2 . Ġ[ Js Environment . module Version ] ĠâĢĶ > Ġ` project . extra [" version To Publish Js "] `. Ċ Ġ* Ċ Ġ* ĠThere Ġare Ġtwo Ġways Ġto Ġmodify Ġthe Ġenvironment : Ċ Ġ* Ċ Ġ* ĠĠ 1 . ĠUpdate Ġ[ Js Environment ] Ġdirectly . ĠGo Ġwith Ġthis Ġoption Ġwhen Ġit Ġis Ġa Ġglobal Ġchange Ċ Ġ* ĠĠĠĠ Ġthat Ġshould Ġaffect Ġall Ġprojects Ġwhich Ġuse Ġthis Ġextension . Ċ Ġ* ĠĠ 2 . ĠUse Ġ[ Js Extension . environment ] Ġscope ĠâĢĶ Ġfor Ġtemporary Ġand Ġcustom Ġover rid ings . Ċ Ġ* Ċ Ġ* ĠAn Ġexample Ġof Ġa Ġproperty Ġoverriding : Ċ Ġ* Ċ Ġ* Ġ``` Ċ Ġ* Ġjavascript Ġ{ Ċ Ġ* ĠĠĠĠ Ġenvironment Ġ{ Ċ Ġ* ĠĠĠĠĠĠĠĠ Ġmodule Version Ġ= Ġ"$ module Version - SPECIAL _ ED ITION " Ċ Ġ* ĠĠĠĠ Ġ} Ċ Ġ* Ġ} Ċ Ġ* Ġ``` Ċ Ġ* Ċ Ġ* ĠPlease Ġnote , Ġenvironment Ġshould Ġbe Ġset Ġup Ġfirst ly Ġto Ġhave Ġthe Ġeffect Ġon Ġthe Ġparts Ċ Ġ* Ġof Ġthe Ġextension Ġthat Ġuse Ġit . Ċ Ġ* Ċ Ġ* Ġ### ĠTasks Ġand ĠPlugins Ċ Ġ* Ċ Ġ* ĠThe Ġspirit Ġof Ġtasks Ġconfiguration Ġin Ġthis Ġextension Ġis Ġextracting Ġthe Ġcode Ġthat Ġdefines Ġand Ċ Ġ* Ġregisters Ġtasks Ġinto Ġextension Ġfunctions Ġupon Ġ` Js Tasks ` Ġin Ġ` build Src `. ĠThose Ġextensions Ġshould Ġbe Ċ Ġ* Ġnamed Ġafter Ġa Ġtask Ġit Ġregisters Ġor Ġa Ġtask Ġgroup Ġif Ġseveral Ġtasks Ġare Ġregistered Ġat Ġonce . Ċ Ġ* ĠThen Ġthis Ġextension Ġis Ġcalled Ġin Ġa Ġproject 's Ġ` build . gradle . k ts `. Ċ Ġ* Ċ Ġ* Ġ` Js Tasks ` Ġand Ġ` Js Plugins ` Ġscopes Ġextend Ġ[ Js Context ] Ġwhich Ġprovides Ġaccess Ċ Ġ* Ġto Ġthe Ġcurrent Ġ[ Js Environment ] Ġand Ġshortcuts Ġfor Ġrunning Ġ` npm ` Ġtool . Ċ Ġ* Ċ Ġ* ĠBelow Ġis Ġthe Ġsimplest Ġexample Ġof Ġhow Ġto Ġcreate Ġa Ġprimitive Ġ` print N pm Version ` Ġtask . Ċ Ġ* Ċ Ġ* ĠFirst ly , Ġa Ġcorresponding Ġextension Ġfunction Ġshould Ġbe Ġdefined Ġin Ġ` build Src `: Ċ Ġ* Ċ Ġ* Ġ``` Ċ Ġ* Ġfun ĠJs Tasks . print N pm Version () Ġ= Ċ Ġ* ĠĠĠĠ Ġregister (" print N pm Version ") Ġ{ Ċ Ġ* ĠĠĠĠĠĠĠĠ Ġdo Last Ġ{ Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠ Ġnpm ("-- version ") Ċ Ġ* ĠĠĠĠĠĠĠĠ Ġ} Ċ Ġ* ĠĠĠĠ Ġ} Ċ Ġ* Ġ``` Ċ Ġ* Ċ Ġ* ĠSecond ly , Ġin Ġa Ġproject 's Ġ` build . gradle . k ts ` Ġthis Ġextension Ġis Ġcalled : Ċ Ġ* Ċ Ġ* Ġ``` Ċ Ġ* Ġjavascript Ġ{ Ċ Ġ* ĠĠĠĠ Ġtasks Ġ{ Ċ Ġ* ĠĠĠĠĠĠĠĠ Ġprint N pm Version () Ċ Ġ* ĠĠĠĠ Ġ} Ċ Ġ* Ġ} Ċ Ġ* Ġ``` Ċ Ġ* Ċ Ġ* ĠAn Ġextension Ġfunction Ġis Ġnot Ġrestricted Ġto Ġregister Ġexactly Ġone Ġtask . ĠIf Ġseveral Ġtasks Ġcan Ċ Ġ* Ġbe Ġgrouped Ġinto Ġa Ġlogical Ġbunch , Ġthey Ġshould Ġbe Ġregistered Ġtogether : Ċ Ġ* Ċ Ġ* Ġ``` Ċ Ġ* Ġfun ĠJs Tasks . build () Ġ{ Ċ Ġ* ĠĠĠĠ Ġassemble Js () Ċ Ġ* ĠĠĠĠ Ġtest Js () Ċ Ġ* ĠĠĠĠ Ġgenerate Coverage Report () Ċ Ġ* Ġ} Ċ Ġ* Ċ Ġ* Ġprivate Ġfun ĠJs Tasks . assemble Js () Ġ= Ġ... Ċ Ġ* Ċ Ġ* Ġprivate Ġfun ĠJs Tasks . test Js () Ġ= Ġ... Ċ Ġ* Ċ Ġ* Ġprivate Ġfun ĠJs Tasks . generate Coverage Report () Ġ= Ġ... Ċ Ġ* Ġ``` Ċ Ġ* Ċ Ġ* ĠThis Ġsection Ġis Ġmostly Ġdedicated Ġto Ġtasks . ĠBut Ġtasks Ġand Ġplugins Ġare Ġconfigured Ċ Ġ* Ġin Ġa Ġvery Ġsimilar Ġway . ĠSo , Ġeverything Ġabove Ġis Ġalso Ġapplicable Ġto Ġplugins . ĠMore Ġdetailed Ċ Ġ* Ġguides Ġcan Ġbe Ġfound Ġin Ġdocs Ġto Ġ` Js Tasks ` Ġand Ġ` Js Plugins `. Ċ Ġ* Ċ Ġ* Ġ@ see Ġ[ Configurable Js Environment ] Ċ Ġ* Ġ@ see Ġ[ Js Tasks ] Ċ Ġ* Ġ@ see Ġ[ Js Plugins ] Ċ Ġ*/ Ċ fun ĠProject . javascript ( configuration : ĠJs Extension . () Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġextensions . run Ġ{ ĊĠĠĠĠĠĠĠ Ġconfiguration . invoke ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfind ByType () Ġ?: Ġcreate (" js Extension ", Ġproject ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠScope Ġfor Ġperforming ĠJavaScript - related Ġconfiguration . Ċ Ġ* Ċ Ġ* Ġ@ see Ġ[ javascript ] Ċ Ġ*/ Ċ open Ġclass ĠJs Extension ( internal Ġval Ġproject : ĠProject ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġconfigurable Environment Ġ= ĠConfigur able Js Environment ( ĊĠĠĠĠĠĠĠ Ġobject Ġ: ĠJs Environment Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġproject Dir Ġ= Ġproject . project Dir ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġmodule Version Ġ= Ġproject . extra [" version To Publish Js "]. toString () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġval Ġenvironment : ĠJs Environment Ġ= Ġconfigurable Environment ĊĠĠĠ Ġval Ġtasks : ĠJs Tasks Ġ= ĠJs Tasks ( environment , Ġproject ) ĊĠĠĠ Ġval Ġplugins : ĠJs Plugins Ġ= ĠJs Plugins ( environment , Ġproject ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠOverrides Ġdefault Ġvalues Ġof Ġ[ Js Environment ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠPlease Ġnote , Ġenvironment Ġshould Ġbe Ġset Ġup Ġfirst ly Ġto Ġhave Ġthe Ġeffect Ġon Ġthe Ġparts ĊĠĠĠĠ Ġ* Ġof Ġthe Ġextension Ġthat Ġuse Ġit . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġenvironment ( over rid ings : ĠConfigur able Js Environment . () Ġ-> ĠUnit ) Ġ= ĊĠĠĠĠĠĠĠ Ġconfigurable Environment . run ( over rid ings ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConfig ures Ġ[ JavaScript - related Ġtasks ][ Js Tasks ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġtasks ( configurations : ĠJs Tasks . () Ġ-> ĠUnit ) Ġ= ĊĠĠĠĠĠĠĠ Ġtasks . run ( configurations ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConfig ures Ġ[ JavaScript - related Ġplugins ][ Js Plugins ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġplugins ( configurations : ĠJs Plugins . () Ġ-> ĠUnit ) Ġ= ĊĠĠĠĠĠĠĠ Ġplugins . run ( configurations ) Ċ Ċ } Ċ