package Ġcom . so y wiz . kor io . lang Ċ Ċ import Ġcom . so y wiz . k ds .* Ċ import Ġkotlin . native . concurrent .* Ċ Ċ internal Ġexpect Ġobject ĠEnvironment Internal Ġ{ Ċ ĉ // ĠUses Ġquery string Ġon ĠJS / Browser , Ġand Ġproper Ġenv Ġvars Ġin Ġthe Ġrest Ċ ĉ operator Ġfun Ġget ( key : ĠString ): ĠString ? ĊĊ ĉ fun ĠgetAll (): ĠMap < String , ĠString > Ċ } Ċ Ċ @ Thread Local Ċ private Ġvar Ġcustom Environments : ĠLinkedHashMap < String , ĠString >? Ġ= Ġnull Ċ Ċ interface ĠEnvironment Ġ{ ĊĠĠĠ Ġoperator Ġfun Ġget ( key : ĠString ): ĠString ? ĊĠĠĠ Ġoperator Ġfun Ġset ( key : ĠString , Ġvalue : ĠString ) ĊĠĠĠ Ġfun ĠgetAll (): ĠMap < String , ĠString > ĊĠĠĠ Ġcompanion Ġobject Ġ: ĠEnvironment Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠUses Ġquery string Ġon ĠJS / Browser , Ġand Ġproper Ġenv Ġvars Ġin Ġthe Ġrest ĊĠĠĠĠĠĠĠ Ġoverride Ġoperator Ġfun Ġget ( key : ĠString ): ĠString ? Ġ= Ġcustom Environments ?. get ( key ) Ġ?: ĠEnvironment Internal [ key ] ĊĠĠĠĠĠĠĠ Ġoperator Ġoverride Ġfun Ġset ( key : ĠString , Ġvalue : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( custom Environments Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcustom Environments Ġ= ĠLinkedHashMap () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcustom Environments ?. set ( key , Ġvalue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetAll (): ĠMap < String , ĠString > Ġ= Ġ( custom Environments Ġ?: Ġmap Of ()) Ġ+ ĠEnvironment Internal . getAll () ĊĠĠĠ Ġ} Ċ } Ċ Ċ open Ġclass ĠEnvironment Custom ( custom Environments : ĠMap < String , ĠString > Ġ= ĠLinkedHashMap ()) Ġ: ĠEnvironment Ġ{ ĊĠĠĠ Ġvar Ġcustom Environments Ġ= Ġwhen Ġ( custom Environments ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠMutable Map < *, Ġ*> Ġ-> Ġcustom Environments Ġas ĠMutable Map < String , ĠString > ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġcustom Environments . to Mutable Map () ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġval Ġcustom Environments Normalized Ġ= Ġcustom Environments . map Ġ{ Ġit . key . uppercase () Ġto Ġit . value Ġ}. to Linked Map () ĊĠĠĠ Ġfun ĠString . normalized () Ġ= Ġthis . uppercase (). trim () ĊĠĠĠ Ġoverride Ġoperator Ġfun Ġget ( key : ĠString ): ĠString ? Ġ= Ġcustom Environments Normalized [ key . normalized ()] ĊĠĠĠ Ġoperator Ġoverride Ġfun Ġset ( key : ĠString , Ġvalue : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcustom Environments [ key ] Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġcustom Environments Normalized [ key . normalized ()] Ġ= Ġvalue ĊĠĠĠ Ġ} ĊĠĠĠ Ġoverride Ġfun ĠgetAll (): ĠMap < String , ĠString > Ġ= Ġcustom Environments Ċ } Ċ Ċ fun ĠEnvironment ( envs : ĠMap < String , ĠString > Ġ= Ġmap Of ()) Ġ= ĠEnvironment Custom ( envs ) Ċ fun ĠEnvironment ( var arg Ġenv s : ĠPair < String , ĠString >) Ġ= ĠEnvironment Custom ( envs . toMap ()) Ċ Ċ fun ĠEnvironment . expand ( str : ĠString ): ĠString Ġ{ ĊĠĠĠ Ġreturn Ġstr . replace ( Regex ("( ~ |% (\\ w + )% ) ")) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġit . value . trim ('% ') ĊĠĠĠĠĠĠĠ Ġwhen Ġ( key ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"~ " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this [" HOME DRIVE "] Ġ!= Ġnull Ġ&& Ġthis [" HOME PATH "] Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ this [" HOME DRIVE "] }${ this [" HOME PATH "] }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis [" HOME PATH "] Ġ?: Ġthis [" HOME "] Ġ?: Ġthis [" TEMP "] Ġ?: Ġthis [" TMP "] Ġ?: Ġ"/ tmp " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthis [ key ] ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġ"" ĊĠĠĠ Ġ} Ċ } Ċ