/* Ċ Ġ* ĠTencent Ġis Ġplease d Ġto Ġsupport Ġthe Ġopen Ġsource Ġcommunity Ġby Ġmaking ĠB K - CI Ġ èĵĿ é² ¸ æĮģ ç»Ń éĽĨ æĪĲ å¹³åı° Ġavailable . Ċ Ġ* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 2 0 ĠTH L ĠA 2 9 ĠLimited , Ġa ĠTencent Ġcompany . Ġ ĠAll Ġrights Ġreserved . Ċ Ġ* Ċ Ġ* ĠB K - CI Ġ èĵĿ é² ¸ æĮģ ç»Ń éĽĨ æĪĲ å¹³åı° Ġis Ġlicensed Ġunder Ġthe ĠMIT Ġlicense . Ċ Ġ* Ċ Ġ* ĠA Ġcopy Ġof Ġthe ĠMIT ĠLicense Ġis Ġincluded Ġin Ġthis Ġfile . Ċ Ġ* Ċ Ġ* Ċ Ġ* ĠTerms Ġof Ġthe ĠMIT ĠLicense : Ċ Ġ* Ġ------------------------------------------------ --- Ċ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ċ Ġ* Ġof Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ċ Ġ* Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ċ Ġ* Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ċ Ġ* Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ċ Ġ* Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ġall Ċ Ġ* Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR Ċ Ġ* ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , Ċ Ġ* ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE Ċ Ġ* ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER Ċ Ġ* ĠLIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , Ċ Ġ* ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN ĠTHE Ċ Ġ* ĠSOFTWARE . Ċ Ġ*/ Ċ Ċ package Ġcom . tencent . bk repo . npm . utils Ċ Ċ import Ġcom . tencent . bk repo . common . api . constant . Char Pool . SL ASH Ċ import Ġcom . tencent . bk repo . common . api . constant . String Pool Ċ import Ġcom . tencent . bk repo . common . artifact . api . Artifact Info Ċ import Ġcom . tencent . bk repo . common . artifact . util . http . Url Formatter Ċ import Ġcom . tencent . bk repo . common . service . util . Header Utils Ċ import Ġcom . tencent . bk repo . npm . constants . LATE ST Ċ import Ġcom . tencent . bk repo . npm . constants . NPM _ PKG _ METADATA _ FULL _ PATH Ċ import Ġcom . tencent . bk repo . npm . constants . NPM _ PKG _ T GZ _ FULL _ PATH Ċ import Ġcom . tencent . bk repo . npm . constants . NPM _ PKG _ T GZ _ WITH _ DOWNLOAD _ FULL _ PATH Ċ import Ġcom . tencent . bk repo . npm . constants . NPM _ PKG _ VERSION _ METADATA _ FULL _ PATH Ċ import Ġcom . tencent . bk repo . npm . constants . NPM _ T GZ _ T ARB ALL _ PREFIX Ċ import Ġcom . tencent . bk repo . npm . model . metadata . N pm Package MetaData Ċ Ċ object ĠN pm Utils Ġ{ ĊĊĠĠĠ Ġfun Ġget Package Metadata Path ( packageName : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠNPM _ PKG _ METADATA _ FULL _ PATH . format ( packageName ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Version Package Metadata Path ( name : ĠString , Ġversion : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠNPM _ PKG _ VERSION _ METADATA _ FULL _ PATH . format ( name , Ġname , Ġversion ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget T gz Path ( name : ĠString , Ġversion : ĠString , Ġpath With Dash : ĠBoolean Ġ= Ġtrue ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( path With Dash ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNPM _ PKG _ T GZ _ FULL _ PATH . format ( name , Ġname , Ġversion ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNPM _ PKG _ T GZ _ WITH _ DOWNLOAD _ FULL _ PATH . format ( name , Ġname , Ġversion ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġanaly se Version From PackageName ( filename : ĠString , Ġname : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfilename . substring Before Last (". tgz "). substring After ("$ name - ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠæŁ¥ çľĭ [ tar ball ] éĩĮéĿ¢ æĺ¯åĲ¦ ä½¿çĶ¨ Ġ- ĠåĪĨ éļĶ ç¬¦ æĿ¥ è¿Ľè¡Į åĪĨ éļĶ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġis Dash Separ ate In T arb all ( name : ĠString , Ġversion : ĠString , Ġtarb all : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġt gz Path Ġ= Ġ"/ % s -% s . tgz ". format ( name , Ġversion ) ĊĠĠĠĠĠĠĠ Ġval Ġseparate Ġ= Ġtarb all . substring Before Last ( tgz Path ). substring After Last ('/') ĊĠĠĠĠĠĠĠ Ġreturn Ġseparate Ġ== ĠString Pool . DASH ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ æł¼å¼ı åĮĸ [ tar ball ] ä½¿çĶ¨ Ġ- ĠæĿ¥ è¿Ľè¡Į åĪĨ éļĶ ĊĠĠĠĠ Ġ* Ġhttp :// xxx / helloworld / download / hell world - 1 . 0 . 0 . tgz Ġ Ġ-> Ġhttp :// xxx / helloworld /-/ hell world - 1 . 0 . 0 . tgz ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġformat T arb all With Dash ( name : ĠString , Ġversion : ĠString , Ġtarb all : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġt gz Path Ġ= Ġ"/ % s -% s . tgz ". format ( name , Ġversion ) ĊĠĠĠĠĠĠĠ Ġval Ġseparate Ġ= Ġtarb all . substring Before Last ( tgz Path ). substring After Last ('/') ĊĠĠĠĠĠĠĠ Ġreturn Ġtarb all . replace ("$ name /$ separate /$ name ", Ġ"$ name /- /$ name ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Latest Version Form Dist Tags ( dist Tags : ĠN pm Package MetaData . Dist Tags ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġiterator Ġ= Ġdist Tags . getMap (). iterator () ĊĠĠĠĠĠĠĠ Ġif Ġ( iterator . hasNext ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġiterator . next (). value ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġdist Tags . getMap ()[ LATE ST ] !! ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġparse Name And Version From FullPath ( artifact FullPath : ĠString ): ĠPair < String , ĠString > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsplit List Ġ= Ġartifact FullPath . split ('/ '). filter Ġ{ Ġit . isNotBlank () Ġ}. map Ġ{ Ġit . trim () Ġ}. toList () ĊĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġif Ġ( split List . size Ġ== Ġ 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsplit List . first () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ split List . first () }/${ split List [ 1 ]}" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġversion Ġ= Ġanaly se Version From PackageName ( artifact FullPath , Ġname ) ĊĠĠĠĠĠĠĠ Ġreturn ĠPair ( name , Ġversion ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġå¦Ĥæŀľ [ tar ball Prefix ] ä¸į ä¸ºç©º åĪĻ éĩĩçĶ¨ tar ball Prefix , åĲ¦åĪĻ éĩĩçĶ¨ èĩªå®ļä¹ī ä¸Ĭä¼ł ä¸Ĭ æĿ¥çļĦ tar ball ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġbuild Package T gz T arb all ( ĊĠĠĠĠĠĠĠ Ġold T arb all : ĠString , ĊĠĠĠĠĠĠĠ Ġdomain : ĠString , ĊĠĠĠĠĠĠĠ Ġtarb all Prefix : ĠString , ĊĠĠĠĠĠĠĠ Ġname : ĠString , ĊĠĠĠĠĠĠĠ Ġartifact Info : ĠArtifact Info ĊĠĠĠ Ġ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġold T arb all . split ( name ). map Ġ{ Ġit . trim () Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġt gz Suffix Ġ= Ġname Ġ+ Ġlist [ list . last Index Ġ- Ġ 1 ] Ġ+ Ġname Ġ+ Ġlist . last () ĊĠĠĠĠĠĠĠ Ġval Ġnpm Prefix Header Ġ= ĠHeader Utils . getHeader ( NPM _ T GZ _ T ARB ALL _ PREFIX ) ĊĠĠĠĠĠĠĠ Ġval Ġnew T arb all Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ Ġnpm Prefix Header ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew T arb all . append ( it . trim End ( SL ASH )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ. append ( SL ASH ). append ( artifact Info . get Repo Ident ify ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append ( SL ASH ). append ( tgz Suffix . trim Start ( SL ASH )) ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġif Ġ( tar ball Prefix . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ è¿ľç¨ĭ ä»ĵåºĵ è¿ĶåĽŀ çļĦæĺ¯ ä»£çĲĨ åľ°åĿĢ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew T arb all . append ( Url Formatter . format Url ( domain ). trim End ( SL ASH )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append ( artifact Info . get Repo Ident ify ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append ( SL ASH ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append ( tgz Suffix ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġformat Url Ġ= ĠUrl Formatter . format Url ( tar ball Prefix ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew T arb all . append ( format Url . trim End ( SL ASH )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ. append ( SL ASH ). append ( artifact Info . get Repo Ident ify ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append ( SL ASH ). append ( tgz Suffix . trim Start ( SL ASH )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnew T arb all . toString () ĊĠĠĠ Ġ} Ċ } Ċ