package Ġcom . ap ure base . k graphql . schema . execution Ċ Ċ import Ġcom . fasterxml . jackson . databind . JsonNode Ċ import Ġcom . fasterxml . jackson . databind . node . JsonNode Factory Ċ import Ġcom . fasterxml . jackson . databind . node . Null Node Ċ import Ġcom . fasterxml . jackson . databind . node . Object Node Ċ import Ġcom . ap ure base . k graphql . Context Ċ import Ġcom . ap ure base . k graphql . ExecutionException Ċ import Ġcom . ap ure base . k graphql . request . Arguments Ċ import Ġcom . ap ure base . k graphql . request . Variables Ċ import Ġcom . ap ure base . k graphql . request . Variables Json Ċ import Ġcom . ap ure base . k graphql . schema . Default Schema Ċ import Ġcom . ap ure base . k graphql . schema . directive . Directive Ċ import Ġcom . ap ure base . k graphql . schema . int rospection . Type Kind Ċ import Ġcom . ap ure base . k graphql . schema . model . Function Wrapper Ċ import Ġcom . ap ure base . k graphql . schema . model . TypeDef Ċ import Ġcom . ap ure base . k graphql . schema . scalar . serialize Scalar Ċ import Ġcom . ap ure base . k graphql . schema . structure 2 . Field Ċ import Ġcom . ap ure base . k graphql . schema . structure 2 . Input Value Ċ import Ġcom . ap ure base . k graphql . schema . structure 2 . Type Ċ import Ġkotlinx . coroutines .* Ċ import Ġkotlinx . coroutines . channels . Channel Ċ import Ġkotlin . coroutines . Coroutine Context Ċ import Ġkotlin . reflect . K Property 1 ĊĊ Ċ @ Suppress (" UN CHECK ED _ CAST ") Ġ// ĠFor Ġvalid Ġstructure Ġthere Ġis Ġno Ġrisk Ġof ĠClass CastException Ċ class ĠParallel Request Executor ( val Ġschema : ĠDefault Schema ) Ġ: ĠRequest Executor , ĠCor outine Scope Ġ{ ĊĊĠĠĠ Ġdata Ġclass ĠExecutionContext ( val Ġvariables : ĠVariables , Ġval Ġrequest Context : ĠContext ) ĊĊĠĠĠ Ġoverride Ġval Ġcoroutine Context : ĠCor outine Context Ġ= ĠJob () ĊĊĠĠĠ Ġprivate Ġval Ġarguments Handler Ġ= ĠArguments Handler ( schema ) ĊĊĠĠĠ Ġprivate Ġval Ġjson Node Factory Ġ= ĠJsonNode Factory . instance ĊĊĠĠĠ Ġprivate Ġval Ġdispatcher Ġ= Ġschema . configuration . coroutine Dispatcher ĊĊĠĠĠ Ġprivate Ġval Ġobject Writer Ġ= Ġschema . configuration . object Mapper . writer (). let Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( schema . configuration . use Default PrettyPrinter ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . with Default PrettyPrinter () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġsuspend Execute ( plan : ĠExecution Plan , Ġvariables : ĠVariables Json , Ġcontext : ĠContext ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġroot Ġ= Ġjson Node Factory . object Node () ĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġroot . put Object (" data ") ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Map Ġ= Ġplan . toMap Async Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrite Operation ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctx Ġ= ĠExecutionContext ( Variables ( schema , Ġvariables , Ġit . variables ), Ġcontext ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode Ġ= Ġit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoperation Ġ= Ġit . field Ġas ĠField . Function < *, Ġ*> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( operation Ġin Ġplan ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata . set ( operation . alias Or Key , Ġresult Map [ operation ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġobject Writer . writeValue AsString ( root ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġexecute ( plan : ĠExecution Plan , Ġvariables : ĠVariables Json , Ġcontext : ĠContext ): ĠString Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġsuspend Execute ( plan , Ġvariables , Ġcontext ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġ< T , ĠR > ĠCollection < T >. toMap Async ( block : Ġsuspend Ġ( T ) Ġ-> ĠR ): ĠMap < T , ĠR > Ġ= Ġcoroutine Scope Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġchannel Ġ= ĠChannel < Pair < T , ĠR >>() ĊĠĠĠĠĠĠĠ Ġval Ġjobs Ġ= Ġmap Ġ{ Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlaunch ( dispatcher ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġres Ġ= Ġblock ( item ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchannel . send ( item Ġto Ġres ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchannel . close ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġresult Map Ġ= Ġmutable Map Of < T , ĠR >() ĊĠĠĠĠĠĠĠ Ġrepeat ( size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( item , Ġresult ) Ġ= Ġchannel . receive () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Map [ item ] Ġ= Ġresult ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjobs . forEach ( Job :: cancel ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġchannel . close () ĊĠĠĠĠĠĠĠ Ġresult Map ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġ< T > Ġwrite Operation ( ctx : ĠExecutionContext , Ġnode : ĠExecution . Node , Ġoperation : ĠFunction Wrapper < T >): ĠJsonNode Ġ{ ĊĠĠĠĠĠĠĠ Ġnode . field . check Access ( null , Ġctx . request Context ) ĊĠĠĠĠĠĠĠ Ġval Ġoperation Result : ĠT ? Ġ= Ġoperation . invoke ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun Name Ġ= Ġnode . field . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreceiver Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput Values Ġ= Ġnode . field . arguments , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġargs Ġ= Ġnode . arguments , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctx Ġ= Ġctx ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġcreate Node ( ctx , Ġoperation Result , Ġnode , Ġnode . field . returnType ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġ< T > Ġcreate Union Operation Node ( ctx : ĠExecutionContext , Ġparent : ĠT , Ġnode : ĠExecution . Union , Ġunion Property : ĠField . Union < T >): ĠJsonNode Ġ{ ĊĠĠĠĠĠĠĠ Ġnode . field . check Access ( parent , Ġctx . request Context ) ĊĊĠĠĠĠĠĠĠ Ġval Ġoperation Result : ĠAny ? Ġ= Ġunion Property . invoke ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun Name Ġ= Ġunion Property . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreceiver Ġ= Ġparent , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput Values Ġ= Ġnode . field . arguments , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġargs Ġ= Ġnode . arguments , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctx Ġ= Ġctx ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval ĠreturnType Ġ= Ġunion Property . returnType . possible Types . find Ġ{ Ġit . is Instance ( operation Result ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( returnType Ġ== Ġnull ) Ġthrow ĠExecution Exception ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Unexpected Ġtype Ġof Ġunion Ġproperty Ġvalue , Ġexpected Ġone Ġof Ġ: Ġ${ union Property . type . possible Types } ." Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġvalue Ġwas Ġ$ operation Result " ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġcreate Node ( ctx , Ġoperation Result , Ġnode , ĠreturnType ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġ< T > Ġcreate Node ( ctx : ĠExecutionContext , Ġvalue : ĠT ?, Ġnode : ĠExecution . Node , ĠreturnType : ĠType ): ĠJsonNode Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ== Ġnull Ġ-> Ġcreate Null Node ( node , ĠreturnType ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// check Ġvalue , Ġnot ĠreturnType , Ġbecause Ġthis Ġmethod Ġcan Ġbe Ġinvoked Ġwith Ġelement Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġis ĠCollection < *> Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( returnType . is List ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalues Map Ġ= Ġvalue . toMap Async Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Node ( ctx , Ġit , Ġnode , ĠreturnType . unwrap List ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue . fold ( json Node Factory . array Node ( value . size )) Ġ{ Ġarray , Ġv Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarray . add ( values Map [ v ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠExecution Exception (" Invalid Ġcollection Ġvalue Ġfor Ġnon Ġcollection Ġproperty ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġis ĠString Ġ-> Ġjson Node Factory . text Node ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġis ĠInt Ġ-> Ġjson Node Factory . number Node ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġis ĠFloat Ġ-> Ġjson Node Factory . number Node ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġis ĠDouble Ġ-> Ġjson Node Factory . number Node ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġis ĠBoolean Ġ-> Ġjson Node Factory . boolean Node ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġis ĠLong Ġ-> Ġjson Node Factory . number Node ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// big Ġdecimal Ġetc ? ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġnode . children . isNotEmpty () Ġ-> Ġcreate Object Node ( ctx , Ġvalue , Ġnode , ĠreturnType ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnode Ġis ĠExecution . Union Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Object Node ( ctx , Ġvalue , Ġnode . member Execution ( returnType ), ĠreturnType ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġcreate Simple Value Node ( returnType , Ġvalue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġ< T > Ġcreate Simple Value Node ( returnType : ĠType , Ġvalue : ĠT ): ĠJsonNode Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġun wrapped Ġ= ĠreturnType . un wrapped () ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( un wrapped ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠType . Scalar < *> Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġserialize Scalar ( json Node Factory , Ġun wrapped , Ġvalue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠType . Enum < *> Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjson Node Factory . text Node ( value . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠType Def . Object < *> Ġ-> Ġthrow ĠExecution Exception (" Cannot Ġhandle Ġobject Ġreturn Ġtype , Ġschema Ġstructure Ġexception ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠExecution Exception (" Invalid ĠType : Ġ Ġ${ returnType . name }") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Null Node ( node : ĠExecution . Node , ĠreturnType : ĠType ): ĠNull Node Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( returnType Ġ! is ĠType . NonNull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġjson Node Factory . null Node () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠExecution Exception (" null Ġresult Ġfor Ġnon - nullable Ġoperation Ġ${ node . field }") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġ< T > Ġcreate Object Node ( ctx : ĠExecutionContext , Ġvalue : ĠT , Ġnode : ĠExecution . Node , Ġtype : ĠType ): ĠObject Node Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġobject Node Ġ= Ġjson Node Factory . object Node () ĊĠĠĠĠĠĠĠ Ġfor Ġ( child Ġin Ġnode . children ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( child Ġis ĠExecution . Fragment ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobject Node . set All ( handle Fragment ( ctx , Ġvalue , Ġchild )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( key , Ġjson Node ) Ġ= Ġhandle Property ( ctx , Ġvalue , Ġchild , Ġtype ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobject Node . set ( key , Ġjson Node ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġobject Node ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġ< T > Ġhandle Property ( ctx : ĠExecutionContext , Ġvalue : ĠT , Ġchild : ĠExecution , Ġtype : ĠType ): ĠPair < String , ĠJsonNode ?> Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( child ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Union Ġis Ġsubclass Ġof ĠNode Ġso Ġcheck Ġit Ġfirst ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠExecution . Union Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfield Ġ= Ġtype . un wrapped ()[ child . key ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIllegalStateException (" Execution Ġunit Ġ${ child . key } Ġis Ġnot Ġcontained Ġby Ġoperation Ġreturn Ġtype ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( field Ġis ĠField . Union <* >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġchild . alias Or Key Ġto Ġcreate Union Operation Node ( ctx , Ġvalue , Ġchild , Ġfield Ġas ĠField . Union < T >) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠExecution Exception (" Unexpected Ġnon - union Ġfield Ġfor Ġunion Ġexecution Ġnode ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠExecution . Node Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfield Ġ= Ġtype . un wrapped ()[ child . key ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIllegalStateException (" Execution Ġunit Ġ${ child . key } Ġis Ġnot Ġcontained Ġby Ġoperation Ġreturn Ġtype ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġchild . alias Or Key Ġto Ġcreate Property Node ( ctx , Ġvalue , Ġchild , Ġfield ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠUnsupportedOperationException (" Handling Ġcontainers Ġis Ġnot Ġimplemented Ġyet ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġ< T > Ġhandle Fragment ( ctx : ĠExecutionContext , Ġvalue : ĠT , Ġcontainer : ĠExecution . Fragment ): ĠMap < String , ĠJsonNode ?> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġexpected Type Ġ= Ġcontainer . condition . type ĊĠĠĠĠĠĠĠ Ġval Ġinclude Ġ= Ġdetermine Include ( ctx , Ġcontainer . directives ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( include ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( expected Type . kind Ġ== ĠType Kind . OBJECT Ġ|| Ġexpected Type . kind Ġ== ĠType Kind . INTERFACE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( expected Type . is Instance ( value )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcontainer . elements . flatMap Ġ{ Ġchild Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( child ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠExecution . Fragment Ġ-> Ġhandle Fragment ( ctx , Ġvalue , Ġchild ). toList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠlistOf ( handle Property ( ctx , Ġvalue , Ġchild , Ġexpected Type )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. fold ( mutable Map Of ()) Ġ{ Ġmap , Ġentry Ġ-> Ġmap . merge ( entry . first , Ġentry . second ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" fragments Ġcan Ġbe Ġspecified Ġon Ġobject Ġtypes , Ġinterfaces , Ġand Ġun ions ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// not Ġincluded , Ġor Ġtype Ġcondition Ġis Ġnot Ġmatched ĊĠĠĠĠĠĠĠ Ġreturn Ġempty Map () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġ< T > Ġcreate Property Node ( ctx : ĠExecutionContext , Ġparent Value : ĠT , Ġnode : ĠExecution . Node , Ġfield : ĠField ): ĠJsonNode ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinclude Ġ= Ġdetermine Include ( ctx , Ġnode . directives ) ĊĠĠĠĠĠĠĠ Ġnode . field . check Access ( parent Value , Ġctx . request Context ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( include ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( field ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠField . Kotlin < *, Ġ*> Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield . k Property Ġas ĠK Property 1 < T , Ġ*> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġraw Value Ġ= Ġfield . k Property . get ( parent Value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue : ĠAny ? ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġif Ġ( field . transformation Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield . transformation . invoke ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun Name Ġ= Ġfield . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreceiver Ġ= Ġraw Value , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput Values Ġ= Ġfield . arguments , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġargs Ġ= Ġnode . arguments , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctx Ġ= Ġctx ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġraw Value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcreate Node ( ctx , Ġvalue , Ġnode , Ġfield . returnType ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠField . Function < *, Ġ*> Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġhandle Function Property ( ctx , Ġparent Value , Ġnode , Ġfield ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠException (" Unexpected Ġfield Ġtype : Ġ$ field , Ġshould Ġbe ĠField . Kotlin Ġor ĠField . Function ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġ< T > Ġhandle Function Property ( ctx : ĠExecutionContext , Ġparent Value : ĠT , Ġnode : ĠExecution . Node , Ġfield : ĠField . Function < *, Ġ* >): ĠJsonNode Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġfield . invoke ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun Name Ġ= Ġfield . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreceiver Ġ= Ġparent Value , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput Values Ġ= Ġfield . arguments , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġargs Ġ= Ġnode . arguments , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctx Ġ= Ġctx ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġreturn Ġcreate Node ( ctx , Ġresult , Ġnode , Ġfield . returnType ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġdetermine Include ( ctx : ĠExecutionContext , Ġdirectives : ĠMap < Directive , ĠArguments ?> ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdirectives ?. map Ġ{ Ġ( directive , Ġarguments ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdirective . execution . invoke ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun Name Ġ= Ġdirective . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput Values Ġ= Ġdirective . arguments , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreceiver Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġargs Ġ= Ġarguments , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctx Ġ= Ġctx ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ?. include ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠExecution Exception (" Illegal Ġdirective Ġimplementation Ġreturning Ġnull Ġresult ") ĊĠĠĠĠĠĠĠ Ġ} ?. reduce Ġ{ Ġacc , Ġb Ġ-> Ġacc Ġ&& Ġb Ġ} Ġ?: Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġ< T > ĠFunction Wrapper < T >. invoke ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Name : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreceiver : ĠAny ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput Values : ĠList < Input Value <* >>, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġargs : ĠArguments ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġctx : ĠExecutionContext ĊĠĠĠ Ġ): ĠT ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtransformed Args Ġ= Ġarguments Handler . transform Arguments ( fun Name , Ġinput Values , Ġargs , Ġctx . variables , Ġctx . request Context ) ĊĊĠĠĠĠĠĠĠ Ġ// exceptions Ġare Ġnot Ġcaught Ġon Ġpurpose Ġto Ġpass Ġup Ġbusiness Ġlogic Ġerrors ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( has Receiver ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvoke ( receiver , Ġ* transformed Args . to Typed Array ()) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvoke (* transformed Args . to Typed Array ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }