/* Ċ Ġ* ĠCopyright Ġ 2 0 1 8 ĠK aid an ĠG ust ave Ċ Ġ* Ċ Ġ* Ġ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 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ @ file : Jvm Name (" JSON ") Ċ @ file : Suppress (" FunctionName ") Ċ package Ġme . kg ust ave . json Ċ Ċ import Ġme . kg ust ave . json . internal .* Ċ import Ġme . kg ust ave . json . options . JS Parsing Options Ċ import Ġorg . intellij . lang . annotations . Language Ċ import Ġjava . lang . StringBuilder Ċ Ċ // ĠAccess Ċ Ċ /** Ċ Ġ* ĠCreates Ġa Ġ[ JS Array ] Ġusing Ġthe Ġprovided Ġ[ items ]. Ċ Ġ* Ċ Ġ* Ġ@ param Ġitems ĠThe Ġitems Ġto Ġcreate Ġa Ġ[ JS Array ] Ġwith . Ċ Ġ* Ċ Ġ* Ġ@ return ĠA Ġnew Ġ[ JS Array ]. Ċ Ġ*/ Ċ @ Jvm Name (" array Of ") Ċ @ Safe Var args Ġactual Ġfun Ġjs ArrayOf ( var arg Ġitems : ĠAny ?): ĠJS Array Ġ{ ĊĠĠĠ Ġreturn ĠJS Array Impl ( items . map To ( ArrayList ( items . size ), Ġ:: convert Value )) Ċ } Ċ Ċ /** Ċ Ġ* ĠCreates Ġa Ġ[ JS Object ] Ġusing Ġthe Ġprovided Ġkey - value Ġ[ pairs ]. Ċ Ġ* Ċ Ġ* Ġ@ param Ġpairs ĠThe Ġkey - value Ġ[ Pairs ][ Pair ] Ġto Ġcreate Ġa Ġ[ JS Object ] Ġwith . Ċ Ġ* Ċ Ġ* Ġ@ return ĠA Ġnew Ġ[ JS Object ]. Ċ Ġ*/ Ċ @ Jvm Name (" object Of ") Ċ @ Safe Var args Ġactual Ġfun Ġjs Object Of ( var arg Ġpairs : ĠPair < String , ĠAny ?> ): ĠJS Object Ġ{ ĊĠĠĠ Ġreturn Ġpairs . associate By To ( JS Object Impl (), Ġ{ Ġit . first Ġ}, Ġ{ Ġconvert Value ( it . second ) Ġ}) Ċ } Ċ Ċ // ĠCollections Ċ Ċ /** Ċ Ġ* ĠCreates Ġa Ġ[ JS Object ] Ġfrom Ġthe Ġreceiver Ġ[ Map ]. Ċ Ġ* Ċ Ġ* Ġ@ receiver ĠThe Ġ[ Map ] Ġto Ġcreate Ġa Ġ[ JS Object ] Ġwith . Ċ Ġ* Ċ Ġ* Ġ@ return ĠA Ġ[ JS Object ] Ġcreated Ġfrom Ġthe Ġ[ Map ]. Ċ Ġ*/ Ċ @ Jvm Name (" object ") Ċ actual Ġfun ĠMap < String , Ġ* >. to JS Object (): ĠJS Object Ġ{ ĊĠĠĠ Ġreturn Ġthis . map Values To ( JS Object Impl ()) Ġ{ Ġcontains Value ( it . value ) Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠCreates Ġa Ġ[ JS Array ] Ġfrom Ġthe Ġreceiver Ġ[ Collection ]. Ċ Ġ* Ċ Ġ* Ġ@ receiver ĠThe Ġ[ Collection ] Ġto Ġcreate Ġa Ġ[ JS Array ] Ġwith . Ċ Ġ* Ċ Ġ* Ġ@ return ĠA Ġ[ JS Array ] Ġcreated Ġfrom Ġthe Ġ[ Collection ]. Ċ Ġ*/ Ċ @ Jvm Name (" array ") Ċ actual Ġfun ĠCollection <* >. to JS Array (): ĠJS Array Ġ{ ĊĠĠĠ Ġreturn Ġthis . map To ( JS Array Impl ()) Ġ{ Ġit Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠCreates Ġa Ġ[ JS Array ] Ġfrom Ġthe Ġreceiver Ġ[ List ]. Ċ Ġ* Ċ Ġ* Ġ@ receiver ĠThe Ġ[ List ] Ġto Ġcreate Ġa Ġ[ JS Array ] Ġwith . Ċ Ġ* Ċ Ġ* Ġ@ return ĠA Ġ[ JS Array ] Ġcreated Ġfrom Ġthe Ġ[ List ]. Ċ Ġ*/ Ċ @ Jvm Name (" array ") Ċ actual Ġfun ĠList <* >. to JS Array (): ĠJS Array Ġ{ ĊĠĠĠ Ġreturn Ġ( this Ġas ĠCollection < *> ). to JS Array () Ċ } Ċ Ċ /** Ċ Ġ* ĠCreates Ġa Ġ[ JS Array ] Ġfrom Ġthe Ġreceiver Ġ[ Array ]. Ċ Ġ* Ċ Ġ* Ġ@ receiver ĠThe Ġ[ Array ] Ġto Ġcreate Ġa Ġ[ JS Array ] Ġwith . Ċ Ġ* Ċ Ġ* Ġ@ return ĠA Ġ[ JS Array ] Ġcreated Ġfrom Ġthe Ġ[ Array ]. Ċ Ġ*/ Ċ @ Jvm Name (" array ") Ċ actual Ġfun ĠArray <* >. to JS Array (): ĠJS Array Ġ{ ĊĠĠĠ Ġreturn ĠJS Array Impl ( this ) Ċ } Ċ Ċ /** Ċ Ġ* ĠPro duces Ġa Ġ[ JS Array ] Ġfrom Ġthe Ġreceiver Ġ[ Sequence ]. Ċ Ġ* Ċ Ġ* Ġ@ receiver ĠThe Ġ[ Sequence ] Ġto Ġcreate Ġa Ġ[ JS Array ] Ġwith . Ċ Ġ* Ċ Ġ* Ġ@ return ĠA Ġ[ JS Array ] Ġcreated Ġfrom Ġthe Ġ[ Sequence ]. Ċ Ġ*/ Ċ @ Jvm Name (" array ") Ċ actual Ġfun ĠSequence <* >. to JS Array (): ĠJS Array Ġ{ ĊĠĠĠ Ġreturn Ġthis . to Collection ( JS Array Impl ()) Ċ } Ċ Ċ // ĠRendering Ċ Ċ /** Ċ Ġ* ĠR enders Ġthe Ġreceiver Ġ[ Map ] Ġto Ġa ĠJSON ĠObject Ġstring Ċ Ġ* Ġwith Ġan Ġoptional Ġ[ indent ] Ġfactor . Ċ Ġ* Ċ Ġ* Ġ@ param Ġindent ĠThe Ġindent Ġfactor , Ġdefault Ġ 0 . Ċ Ġ* Ċ Ġ* Ġ@ return ĠThe Ġrendered ĠJSON ĠObject Ġstring . Ċ Ġ*/ Ċ @ Jvm Name (" stringify ") Ċ @ Jvm Over loads Ġactual Ġfun ĠMap < String , Ġ* >. toJson String ( indent : ĠInt ): ĠString Ġ= Ġbuild JsonObject String ( indent ) Ċ Ċ /** Ċ Ġ* ĠR enders Ġthe Ġreceiver Ġ[ List ] Ġto Ġa ĠJSON ĠArray Ġstring Ċ Ġ* Ġwith Ġan Ġoptional Ġ[ indent ] Ġfactor . Ċ Ġ* Ċ Ġ* Ġ@ param Ġindent ĠThe Ġindent Ġfactor , Ġdefault Ġ 0 . Ċ Ġ* Ċ Ġ* Ġ@ return ĠThe Ġrendered ĠJSON ĠArray Ġstring . Ċ Ġ*/ Ċ @ Jvm Name (" stringify ") Ċ @ Jvm Over loads Ġactual Ġfun ĠList <* >. toJson String ( indent : ĠInt ): ĠString Ġ= Ġbuild JsonArray String ( indent ) Ċ Ċ /** Ċ Ġ* ĠR enders Ġthe Ġreceiver Ġ[ Array ] Ġto Ġa ĠJSON ĠArray Ġstring Ċ Ġ* Ġwith Ġan Ġoptional Ġ[ indent ] Ġfactor . Ċ Ġ* Ċ Ġ* Ġ@ param Ġindent ĠThe Ġindent Ġfactor , Ġdefault Ġ 0 . Ċ Ġ* Ċ Ġ* Ġ@ return ĠThe Ġrendered ĠJSON ĠArray Ġstring . Ċ Ġ*/ Ċ @ Jvm Name (" stringify ") Ċ @ Jvm Over loads Ġactual Ġfun ĠArray <* >. toJson String ( indent : ĠInt ): ĠString Ġ= Ġbuild JsonArray String ( indent ) Ċ Ċ /** Ċ Ġ* ĠR enders Ġthe Ġreceiver Ġ[ Sequence ] Ġto Ġa ĠJSON ĠArray Ġstring Ċ Ġ* Ġwith Ġan Ġoptional Ġ[ indent ] Ġfactor . Ċ Ġ* Ċ Ġ* Ġ@ param Ġindent ĠThe Ġindent Ġfactor , Ġdefault Ġ 0 . Ċ Ġ* Ċ Ġ* Ġ@ return ĠThe Ġrendered ĠJSON ĠArray Ġstring . Ċ Ġ*/ Ċ @ Jvm Name (" stringify ") Ċ @ Jvm Over loads Ġactual Ġfun ĠSequence <* >. toJson String ( indent : ĠInt ): ĠString Ġ= Ġbuild JsonArray String ( indent ) Ċ Ċ // ĠParsing Ċ Ċ /** Ċ Ġ* ĠParses Ġthe Ġprovided ĠJSON Ġ[ String ] Ġinto Ġa Ġ[ JS Object ]. Ċ Ġ* Ċ Ġ* Ġ@ param Ġjson ĠThe ĠJSON Ġ[ String ] Ġto Ġparse . Ċ Ġ* Ċ Ġ* Ġ@ return ĠA Ġ[ JS Object ] Ġparsed Ġfrom Ġthe ĠJSON Ġ[ String ]. Ċ Ġ* Ċ Ġ* Ġ@ throws Ġme . kg ust ave . json . exceptions . J SS yntax Exception ĠIf Ġthe ĠJSON Ġ[ String ] Ġhas Ġinvalid Ġsyntax . Ċ Ġ*/ Ċ @ Jvm Name (" parse Object ") Ċ actual Ġfun Ġparse JsonObject (@ Language (" JSON ") Ġjson : ĠString ): ĠJS Object Ġ{ ĊĠĠĠ Ġreturn Ġparse JsonObject ( JS Parsing Options , Ġjson ) Ċ } Ċ Ċ /** Ċ Ġ* ĠParses Ġthe Ġprovided ĠJSON Ġ[ String ] Ġinto Ġa Ġ[ JS Array ]. Ċ Ġ* Ċ Ġ* Ġ@ param Ġjson ĠThe ĠJSON Ġ[ String ] Ġto Ġparse . Ċ Ġ* Ċ Ġ* Ġ@ return ĠA Ġ[ JS Array ] Ġparsed Ġfrom Ġthe ĠJSON Ġ[ String ]. Ċ Ġ* Ċ Ġ* Ġ@ throws Ġme . kg ust ave . json . exceptions . J SS yntax Exception ĠIf Ġthe ĠJSON Ġ[ String ] Ġhas Ġinvalid Ġsyntax . Ċ Ġ*/ Ċ @ Jvm Name (" parse Array ") Ċ actual Ġfun Ġparse JsonArray (@ Language (" JSON ") Ġjson : ĠString ): ĠJS Array Ġ{ ĊĠĠĠ Ġreturn Ġparse JsonArray ( JS Parsing Options , Ġjson ) Ċ } Ċ Ċ /** Ċ Ġ* ĠParses Ġthe Ġprovided ĠJSON Ġ[ String ] Ġinto Ġa Ġ[ JS Object ] Ġusing Ċ Ġ* Ġthe Ġspecified Ġ[ JS Parsing Options ]. Ċ Ġ* Ċ Ġ* Ġ@ param Ġoptions ĠThe Ġ[ JS Parsing Options ] Ġto Ġparse Ġwith . Ċ Ġ* Ġ@ param Ġjson ĠThe ĠJSON Ġ[ String ] Ġto Ġparse . Ċ Ġ* Ċ Ġ* Ġ@ return ĠA Ġ[ JS Object ] Ġparsed Ġfrom Ġthe ĠJSON Ġ[ String ]. Ċ Ġ* Ċ Ġ* Ġ@ throws Ġme . kg ust ave . json . exceptions . J SS yntax Exception ĠIf Ġthe ĠJSON Ġ[ String ] Ġhas Ġinvalid Ġsyntax . Ċ Ġ*/ Ċ @ Jvm Name (" parse Object ") Ċ fun Ġparse JsonObject ( options : ĠJS Parsing Options , Ġ@ Language (" JSON ") Ġjson : ĠString ): ĠJS Object Ġ{ ĊĠĠĠ Ġval Ġstr Ġ= Ġif ( options . comments ) Ġremove Comments ( json ) Ġelse Ġjson ĊĠĠĠ Ġreturn ĠJ ST ok ener ( str ). use Ġ{ Ġt Ġ-> ĠJS Object Impl ( t ) Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠParses Ġthe Ġprovided ĠJSON Ġ[ String ] Ġinto Ġa Ġ[ JS Array ] Ġusing Ċ Ġ* Ġthe Ġspecified Ġ[ JS Parsing Options ]. Ċ Ġ* Ċ Ġ* Ġ@ param Ġoptions ĠThe Ġ[ JS Parsing Options ] Ġto Ġparse Ġwith . Ċ Ġ* Ġ@ param Ġjson ĠThe ĠJSON Ġ[ String ] Ġto Ġparse . Ċ Ġ* Ċ Ġ* Ġ@ return ĠA Ġ[ JS Array ] Ġparsed Ġfrom Ġthe ĠJSON Ġ[ String ]. Ċ Ġ* Ċ Ġ* Ġ@ throws Ġme . kg ust ave . json . exceptions . J SS yntax Exception ĠIf Ġthe ĠJSON Ġ[ String ] Ġhas Ġinvalid Ġsyntax . Ċ Ġ*/ Ċ @ Jvm Name (" parse Array ") Ċ fun Ġparse JsonArray ( options : ĠJS Parsing Options , Ġ@ Language (" JSON ") Ġjson : ĠString ): ĠJS Array Ġ{ ĊĠĠĠ Ġval Ġstr Ġ= Ġif ( options . comments ) Ġremove Comments ( json ) Ġelse Ġjson ĊĠĠĠ Ġreturn ĠJ ST ok ener ( str ). use Ġ{ Ġt Ġ-> ĠJS Array Impl ( t ) Ġ} Ċ } Ċ Ċ // ĠWriter Ċ Ċ /** Ċ Ġ* ĠCreates Ġa Ġnew Ġ[ JS Writer ] Ġthat Ġwraps Ġthe Ġspecified Ġ[ writer ]. Ċ Ġ* Ċ Ġ* Ġ@ param Ġwriter ĠThe Ġ[ Append able ] Ġto Ġwrap Ġinto Ġa Ġ[ JS Writer ]. Ċ Ġ* Ċ Ġ* Ġ@ return ĠA Ġnew Ġ[ JS Writer ]. Ċ Ġ*/ Ċ @ Jvm Name (" writer ") Ċ @ Jvm Over loads Ġfun ĠJS Writer ( writer : ĠAppend able Ġ= ĠStringBuilder ()): ĠJS Writer Ġ= ĠJS Writer Impl ( writer ) Ċ Ċ /** Ċ Ġ* Ġ[ Starts ][ JS Writer . obj ] Ġand Ġ[ ends ][ JS Writer . end Obj ] Ġa ĠJSON ĠObject Ċ Ġ* Ġwith Ġthe Ġreceiver Ġ[ JS Writer ]. Ċ Ġ* Ċ Ġ* Ġ@ receiver ĠA Ġ[ JS Writer ]. Ċ Ġ* Ċ Ġ* Ġ@ param Ġblock ĠThe Ġblock Ġto Ġapply Ġto Ġthe Ġreceiver Ġinside Ġthe Ġnew Ġobject . Ċ Ġ* Ċ Ġ* Ġ@ return ĠThe Ġreceiver Ġ[ JS Writer ]. Ċ Ġ*/ Ċ @ JSON Dsl Ġinline Ġfun ĠJS Writer . obj ( block : ĠJS Writer . () Ġ-> ĠUnit ): ĠJS Writer Ġ{ ĊĠĠĠ Ġobj () ĊĠĠĠ Ġif ( this Ġis ĠJS Writer Impl ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprev Lock Ġ= Ġlock Manual End ĊĠĠĠĠĠĠĠ Ġlock Manual End Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġthis . block () ĊĠĠĠĠĠĠĠ Ġlock Manual End Ġ= Ġprev Lock ĊĠĠĠ Ġ} Ġelse Ġthis . block () ĊĠĠĠ Ġreturn Ġend Obj () Ċ } Ċ Ċ /** Ċ Ġ* Ġ[ Starts ][ JS Writer . array ] Ġand Ġ[ ends ][ JS Writer . end Array ] Ġa ĠJSON ĠArray Ċ Ġ* Ġwith Ġthe Ġreceiver Ġ[ JS Writer ]. Ċ Ġ* Ċ Ġ* Ġ@ receiver ĠA Ġ[ JS Writer ]. Ċ Ġ* Ċ Ġ* Ġ@ param Ġblock ĠThe Ġblock Ġto Ġapply Ġto Ġthe Ġreceiver Ġinside Ġthe Ġnew Ġarray . Ċ Ġ* Ċ Ġ* Ġ@ return ĠThe Ġreceiver Ġ[ JS Writer ]. Ċ Ġ*/ Ċ @ JSON Dsl Ġinline Ġfun ĠJS Writer . array ( block : ĠJS Writer . () Ġ-> ĠUnit ): ĠJS Writer Ġ{ ĊĠĠĠ Ġarray () ĊĠĠĠ Ġif ( this Ġis ĠJS Writer Impl ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprev Lock Ġ= Ġlock Manual End ĊĠĠĠĠĠĠĠ Ġlock Manual End Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġthis . block () ĊĠĠĠĠĠĠĠ Ġlock Manual End Ġ= Ġprev Lock ĊĠĠĠ Ġ} Ġelse Ġthis . block () ĊĠĠĠ Ġreturn Ġend Array () Ċ }