/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 ĠExp edia , ĠInc Ċ Ġ* Ċ Ġ* Ġ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 Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttps :// 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 . Ċ Ġ*/ Ċ Ċ package Ġcom . exp edi ag roup . graphql . server . execution Ċ Ċ import Ġcom . exp edi ag roup . graphql . generator . execution . GraphQL Context Ċ import Ġcom . exp edi ag roup . graphql . server . extensions . to Execution Input Ċ import Ġcom . exp edi ag roup . graphql . server . extensions . to Graph Q LError Ċ import Ġcom . exp edi ag roup . graphql . server . extensions . to GraphQL Kotlin Type Ċ import Ġcom . exp edi ag roup . graphql . server . extensions . to GraphQL Response Ċ import Ġcom . exp edi ag roup . graphql . server . types . GraphQL Request Ċ import Ġcom . exp edi ag roup . graphql . server . types . GraphQL Response Ċ import Ġgraphql . GraphQL Ċ import Ġkotlinx . coroutines . future . await Ċ Ċ open Ġclass ĠGraphQL RequestHandler ( ĊĠĠĠ Ġprivate Ġval Ġgraph QL : ĠGraphQL , ĊĠĠĠ Ġprivate Ġval Ġdata Loader Registry Factory : ĠDataLoader Registry Factory ? Ġ= Ġnull Ċ ) Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠExecute Ġa ĠGraphQL Ġrequest Ġin Ġa Ġnon - blocking Ġfashion . ĊĠĠĠĠ Ġ* ĠThis Ġshould Ġonly Ġbe Ġused Ġfor Ġqueries Ġand Ġmutations . ĊĠĠĠĠ Ġ* ĠSub scriptions Ġrequire Ġmore Ġspecific Ġserver Ġlogic Ġand Ġwill Ġneed Ġto Ġbe Ġhandled Ġseparately . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġsuspend Ġfun Ġexecute Request ( request : ĠGraphQL Request , Ġcontext : ĠGraphQL Context ? Ġ= Ġnull ): ĠGraphQL Response < *> Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠWe Ġshould Ġgenerate Ġa Ġnew Ġregistry Ġfor Ġevery Ġrequest ĊĠĠĠĠĠĠĠ Ġval Ġdata Loader Registry Ġ= Ġdata Loader Registry Factory ?. generate () ĊĠĠĠĠĠĠĠ Ġval Ġexecution Input Ġ= Ġrequest . to Execution Input ( context , Ġdata Loader Registry ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgraph QL . execute Async ( execution Input ). await (). to GraphQL Response () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġerror Ġ= Ġexception . to Graph Q LError () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGraphQL Response < Any ? >( errors Ġ= ĠlistOf ( error . to GraphQL Kotlin Type ())) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ