package Ġcom . ap ure base . k graphql . schema . dsl Ċ Ċ import Ġcom . ap ure base . k graphql . Context Ċ import Ġcom . ap ure base . k graphql . Execution Scope Ċ import Ġcom . ap ure base . k graphql . schema . model . Function Wrapper Ċ import Ġcom . ap ure base . k graphql . schema . model . Input Value Def Ċ import Ġcom . ap ure base . k graphql . schema . model . Property Def Ċ import Ġnid om iro . k dataloader . Batch Loader Ċ import Ġnid om iro . k dataloader . Timed Auto Dispatcher DataLoader Options Ċ import Ġnid om iro . k dataloader . factories . Timed Auto Dispatcher DataLoader Factory Ċ import Ġkotlin . reflect . K Type Ċ Ċ class ĠDataLoader Property DSL < T , ĠK , ĠR >( ĊĠĠĠ Ġval Ġname : ĠString , ĊĠĠĠ Ġval ĠreturnType : ĠK Type , ĊĠĠĠ Ġprivate Ġval Ġblock Ġ: ĠDataLoader Property DSL < T , ĠK , ĠR >. () Ġ-> ĠUnit Ċ ): ĠLimited Access Item DSL < T >(), ĠResolver DSL . Target Ġ{ ĊĊĠĠĠ Ġinternal Ġvar Ġnew DataLoader : ĠBatch Loader < T , ĠR >? Ġ= Ġnull ĊĠĠĠ Ġinternal Ġvar Ġdata Loader : ĠBatch Loader < K , ĠR >? Ġ= Ġnull ĊĠĠĠ Ġinternal Ġvar Ġprepare Wrapper : ĠFunction Wrapper < K >? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġval Ġinput Values Ġ= Ġmutable ListOf < Input Value Def <* >>() ĊĊĠĠĠ Ġfun Ġloader ( block : ĠBatch Loader < K , ĠR >) Ġ{ ĊĠĠĠĠĠĠĠ Ġdata Loader Ġ= Ġblock ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġprepare ( block : Ġsuspend ĠExecution Scope .( T ) Ġ-> ĠK ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprepare Wrapper Ġ= ĠFunction Wrapper . on ( block , Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< E > Ġprepare ( block : Ġsuspend ĠExecution Scope .( T , ĠE ) Ġ-> ĠK ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprepare Wrapper Ġ= ĠFunction Wrapper . on ( block , Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< E , ĠW > Ġprepare ( block : Ġsuspend ĠExecution Scope .( T , ĠE , ĠW ) Ġ-> ĠK ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprepare Wrapper Ġ= ĠFunction Wrapper . on ( block , Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< E , ĠW , ĠQ > Ġprepare ( block : Ġsuspend ĠExecution Scope .( T , ĠE , ĠW , ĠQ ) Ġ-> ĠK ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprepare Wrapper Ġ= ĠFunction Wrapper . on ( block , Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< E , ĠW , ĠQ , ĠA > Ġprepare ( block : Ġsuspend ĠExecution Scope .( T , ĠE , ĠW , ĠQ , ĠA ) Ġ-> ĠK ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprepare Wrapper Ġ= ĠFunction Wrapper . on ( block , Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< E , ĠW , ĠQ , ĠA , ĠS > Ġprepare ( block : Ġsuspend ĠExecution Scope .( T , ĠE , ĠW , ĠQ , ĠA , ĠS ) Ġ-> ĠK ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprepare Wrapper Ġ= ĠFunction Wrapper . on ( block , Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< E , ĠW , ĠQ , ĠA , ĠS , ĠB > Ġprepare ( block : Ġsuspend ĠExecution Scope .( T , ĠE , ĠW , ĠQ , ĠA , ĠS , ĠB ) Ġ-> ĠK ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprepare Wrapper Ġ= ĠFunction Wrapper . on ( block , Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< E , ĠW , ĠQ , ĠA , ĠS , ĠB , ĠU > Ġprepare ( block : Ġsuspend ĠExecution Scope .( T , ĠE , ĠW , ĠQ , ĠA , ĠS , ĠB , ĠU ) Ġ-> ĠK ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprepare Wrapper Ġ= ĠFunction Wrapper . on ( block , Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< E , ĠW , ĠQ , ĠA , ĠS , ĠB , ĠU , ĠC > Ġprepare ( block : Ġsuspend ĠExecution Scope .( T , ĠE , ĠW , ĠQ , ĠA , ĠS , ĠB , ĠU , ĠC ) Ġ-> ĠK ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprepare Wrapper Ġ= ĠFunction Wrapper . on ( block , Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġaccess Rule ( rule : Ġ( T , ĠContext ) Ġ-> ĠException ? ){ ĊĠĠĠĠĠĠĠ Ġval Ġaccess Rule Adapter : Ġ( T ?, ĠContext ) Ġ-> ĠException ? Ġ= Ġ{ Ġparent , Ġctx Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( parent Ġ!= Ġnull ) Ġrule ( parent , Ġctx ) Ġelse ĠIllegalArgumentException (" Unexpected Ġnull Ġparent Ġof Ġkotlin Ġproperty ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġthis . access Rule Block Ġ= Ġaccess Rule Adapter ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġto K QL Property (): ĠProperty Def . Data Loaded Function < T , ĠK , ĠR > Ġ{ ĊĠĠĠĠĠĠĠ Ġblock () ĊĠĠĠĠĠĠĠ Ġrequire NotNull ( prepare Wrapper ) ĊĠĠĠĠĠĠĠ Ġrequire NotNull ( data Loader ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠProperty Def . Data Loaded Function ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġname , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġdescription , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaccess Rule Ġ= Ġaccess Rule Block , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdeprecation Reason Ġ= Ġdeprecation Reason , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Deprecated Ġ= Ġis Deprecated , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput Values Ġ= Ġinput Values , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠreturnType Ġ= ĠreturnType , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprepare Ġ= Ġprepare Wrapper !! , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġloader Ġ= ĠTime d Auto Dispatcher DataLoader Factory ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĠTime d Auto Dispatcher DataLoader Options () Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Loader !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġadd Input Values ( input Values : ĠCollection < Input Value Def <* >>) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . input Values . addAll ( input Values ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset ReturnType ( type : ĠK Type ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠNO OP ĊĠĠĠ Ġ} Ċ Ċ } Ċ