package Ġcom . github . bh lang on ij r . fl ub ber . util Ċ Ċ import Ġcom . fasterxml . jackson . core . type . Type Reference Ċ import Ġcom . fasterxml . jackson . databind . JsonNode Ċ import Ġcom . fasterxml . jackson . databind . ObjectMapper Ċ import Ġcom . fasterxml . jackson . databind . node . Object Node Ċ import Ġcom . fasterxml . jackson . module . kotlin . register Kotlin Module Ċ import Ġcom . github . bh lang on ij r . fl ub ber . context . Context . Companion . EXCEPTION _ FIELD Ċ import Ġkotlin . random . Random Ċ Ċ class ĠUtil Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġmapper Ġ= ĠObjectMapper (). register Kotlin Module () ĊĊĠĠĠĠĠĠĠ Ġfun Ġload Resource ( name : ĠString ): ĠString Ġ= Ġthis :: class . java . getResource ( name ). read Text ( Charsets . UTF _ 8 ) ĊĊĠĠĠĠĠĠĠ Ġfun Ġnode ToMap ( node : ĠJsonNode ): ĠMutable Map < String , ĠAny ?> Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmapper . convert Value ( node , Ġobject Ġ: ĠType Reference < Mutable Map < String , ĠAny ? >>() Ġ{}) ĊĊĠĠĠĠĠĠĠ Ġfun Ġobject To Node ( obj : ĠAny ): ĠJsonNode Ġ= Ġmapper . value To Tree ( obj ) ĊĊĠĠĠĠĠĠĠ Ġfun Ġbind Vars ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfull Path : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġargs : ĠMutable Map < String , ĠAny ? >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġglobal Args : ĠJsonNode , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace Blank : ĠBoolean Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( entry Ġin Ġargs . entries ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( entry . value Ġis ĠMap < *, Ġ* >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbind Vars ( fullPath , Ġentry . value Ġas ĠMutable Map < String , ĠAny ? >, Ġglobal Args ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( entry . value Ġis ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġentry . value Ġas ĠString ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( text . indexOf (" }} ") Ġ> Ġtext . indexOf (" {{ ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvars Ġ= Ġtext . split (" }} ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . contains (" {{ ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . split (" {{ ")[ 1 ] Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( variable Ġin Ġvars ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpath Ġ= Ġ"$ fullPath $ variable ". replace (".", Ġ"/") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresolved Ġ= Ġglobal Args . at ("/ $ path "). as Text () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Text Ġ= Ġargs [ entry . key ] Ġas ĠString ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( resolved . isNotEmpty () Ġ|| Ġreplace Blank ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġargs [ entry . key ] Ġ= Ġnew Text . replace (" {{$ variable }} ", Ġresolved ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġjson Exception ( e : ĠThrowable ): ĠJsonNode Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdetails Ġ= Ġmapper . createObject Node () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdetails . put (" message ", Ġe . message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . cause ?. message ?. let Ġ{ Ġdetails . put (" cause ", Ġit ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdetails . put (" stack trace ", Ġe . stack Trace ToString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnode Ġ= Ġmapper . createObject Node () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnode . set < Object Node >( EXCEPTION _ FIELD , Ġdetails ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnode ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġmake Json (): ĠObject Node Ġ= Ġmapper . createObject Node () ĊĊĠĠĠĠĠĠĠ Ġfun ĠgetId ( prefix : ĠString ): ĠString Ġ= Ġ"$ prefix -${ Random . nextInt ( 1 0 0 0 0 0 0 , Ġ 9 9 9 9 9 9 9 )}" ĊĠĠĠ Ġ} Ċ }