package Ġcom . react n atives pac ex . impl . store Ċ Ċ import Ġcom . react n atives pac ex . impl . Input Value Ċ import Ġorg . json . JSONArray Ċ import Ġorg . json . JSONObject Ċ Ċ /** Ċ Ġ* ĠCalculate ĠSelector ĠKey Ġfrom ĠJSON Ġobject Ċ Ġ* Ġ@ param Ġsrc ĠSource ĠObject Ċ Ġ* Ġ@ return Ġselector Ġkey Ċ Ġ*/ Ċ private Ġfun Ġselector Value Key ( src : ĠAny ): ĠString Ġ{ ĊĠĠĠ Ġif Ġ( src Ġ== ĠJSONObject . NULL ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ" null " ĊĠĠĠ Ġ} Ġelse Ġif Ġ( src Ġis ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ"\"" Ġ+ Ġsrc Ġ+ Ġ"\"" ĊĠĠĠ Ġ} Ġelse Ġif Ġ( src Ġis ĠJSONObject ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsorted Keys Ġ= Ġsrc . keys (). as Sequence (). toList (). sorted () ĊĠĠĠĠĠĠĠ Ġval Ġvalues Ġ= Ġmutable ListOf < String >() ĊĠĠĠĠĠĠĠ Ġfor Ġ( k Ġin Ġsorted Keys ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalues . add ( k Ġ+ Ġ":" Ġ+ Ġselector Value Key ( src [ k ])) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġ" {" Ġ+ Ġvalues . join ToString (",") Ġ+ Ġ" }" ĊĠĠĠ Ġ} Ġelse Ġif Ġ( src Ġis ĠJSONArray ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġres Ġ= Ġmutable ListOf < String >() ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġsrc . length ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġres . add ( selector Value Key ( src [ i ])) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġ"[" Ġ+ Ġres . join ToString (",") Ġ+ Ġ" ]" ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġsrc . toString () ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠSelector Ġkey Ġfrom ĠInput Value Ċ Ġ* Ġ@ param Ġvalue ĠInput ĠValue Ċ Ġ* Ġ@ param Ġarguments ĠOperation Ġarguments Ċ Ġ* Ġ@ return Ġselector Ġkey Ċ Ġ*/ Ċ private Ġfun Ġselector Key ( value : ĠInput Value , Ġarguments : ĠJSONObject ): ĠString ? Ġ{ ĊĠĠĠ Ġif Ġ( value Ġis ĠInput Value . Int ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġvalue . value . toString () ĊĠĠĠ Ġ} Ġelse Ġif Ġ( value Ġis ĠInput Value . Float ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġvalue . value . toString () ĊĠĠĠ Ġ} Ġelse Ġif Ġ( value Ġis ĠInput Value . Boolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġvalue . value . toString () ĊĠĠĠ Ġ} Ġelse Ġif Ġ( value Ġis ĠInput Value . String ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ"\"" Ġ+ Ġvalue . value Ġ+ Ġ"\"" ĊĠĠĠ Ġ} Ġelse Ġif Ġ( value Ġis ĠInput Value . Null ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ" null " ĊĠĠĠ Ġ} Ġelse Ġif Ġ( value Ġis ĠInput Value . List ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ"[" Ġ+ Ġvalue . items . map Ġ{ Ġselector Key ( it , Ġarguments ) Ġ}. join ToString (",") Ġ+ Ġ" ]" ĊĠĠĠ Ġ} Ġelse Ġif Ġ( value Ġis ĠInput Value . Object ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinner Ġ= Ġvalue . fields ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Values Ġ{ Ġselector Key ( it . value , Ġarguments ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Sorted Map () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Values Ġ{ Ġit Ġ!= Ġnull Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . key Ġ+ Ġ":" Ġ+ Ġit . value Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. join ToString (",") ĊĠĠĠĠĠĠĠ Ġreturn Ġ" {$ inner }" ĊĠĠĠ Ġ} Ġelse Ġif Ġ( value Ġis ĠInput Value . Reference ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( arguments . has ( value . name )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselector Value Key ( arguments . get ( value . name )) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġerror (" Un reachable Ġcode ") Ċ } Ċ Ċ /** Ċ Ġ* ĠCalculate Ġfield Ġselector Ġkey Ċ Ġ* Ġ@ param Ġname ĠField ĠName Ċ Ġ* Ġ@ param Ġfield Arguments ĠField Ġarguments Ċ Ġ* Ġ@ param Ġarguments ĠOperation Ġarguments Ċ Ġ* Ġ@ return Ġselector Ġkey Ċ Ġ*/ Ċ fun Ġselector Key ( name : ĠString , Ġfield Arguments : ĠMap < String , ĠInput Value >, Ġarguments : ĠJSONObject ): ĠString Ġ{ ĊĠĠĠ Ġif Ġ( field Arguments . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġname ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġmapped Ġ= Ġfield Arguments . map Values Ġ{ Ġselector Key ( it . value , Ġarguments ) Ġ} ĊĠĠĠ Ġval Ġsorted Keys Ġ= Ġmapped . keys . sorted By Ġ{ Ġit Ġ} ĊĠĠĠ Ġval Ġconverted Ġ= Ġmutable ListOf < String >() ĊĠĠĠ Ġfor Ġ( k Ġin Ġsorted Keys ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( mapped [ k ] Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconverted . add ( k Ġ+ Ġ":" Ġ+ Ġmapped [ k ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ( converted . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġname ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġname Ġ+ Ġ"(" Ġ+ Ġconverted . join ToString (",") Ġ+ Ġ")" Ċ } Ċ