@@ -125,6 +125,10 @@ export interface ExecutionInfo extends DocumentInfo {
125
125
fieldResolver : GraphQLFieldResolver < any , any > ;
126
126
typeResolver : GraphQLTypeResolver < any , any > ;
127
127
subscribeFieldResolver : GraphQLFieldResolver < any , any > ;
128
+ subscriptionEventExecutor : (
129
+ exeInfo : ExecutionInfo ,
130
+ payload : unknown ,
131
+ ) => PromiseOrValue < ExecutionResult > ;
128
132
}
129
133
130
134
/**
@@ -169,6 +173,12 @@ export interface ExecutionArgs {
169
173
fieldResolver ?: Maybe < GraphQLFieldResolver < any , any > > ;
170
174
typeResolver ?: Maybe < GraphQLTypeResolver < any , any > > ;
171
175
subscribeFieldResolver ?: Maybe < GraphQLFieldResolver < any , any > > ;
176
+ subscriptionEventExecutor ?: Maybe <
177
+ (
178
+ exeInfo : ExecutionInfo ,
179
+ payload : unknown ,
180
+ ) => PromiseOrValue < ExecutionResult >
181
+ > ;
172
182
}
173
183
174
184
type FieldsExecutor = (
@@ -329,6 +339,7 @@ export function buildExecutionInfo(
329
339
fieldResolver,
330
340
typeResolver,
331
341
subscribeFieldResolver,
342
+ subscriptionEventExecutor,
332
343
} = args ;
333
344
334
345
// If the schema used for execution is invalid, throw an error.
@@ -362,6 +373,8 @@ export function buildExecutionInfo(
362
373
fieldResolver : fieldResolver ?? defaultFieldResolver ,
363
374
typeResolver : typeResolver ?? defaultTypeResolver ,
364
375
subscribeFieldResolver : subscribeFieldResolver ?? defaultFieldResolver ,
376
+ subscriptionEventExecutor :
377
+ subscriptionEventExecutor ?? defaultSubscriptionEventExecutor ,
365
378
} ;
366
379
}
367
380
@@ -1244,13 +1257,19 @@ function mapSourceToResponse(
1244
1257
// "ExecuteSubscriptionEvent" algorithm, as it is nearly identical to the
1245
1258
// "ExecuteQuery" algorithm, for which `execute` is also used.
1246
1259
return mapAsyncIterator ( resultOrStream , ( payload : unknown ) =>
1247
- executeQuery ( {
1248
- ...exeInfo ,
1249
- rootValue : payload ,
1250
- } ) ,
1260
+ exeInfo . subscriptionEventExecutor ( exeInfo , payload ) ,
1251
1261
) ;
1252
1262
}
1253
1263
1264
+ export const defaultSubscriptionEventExecutor = (
1265
+ exeInfo : ExecutionInfo ,
1266
+ payload : unknown ,
1267
+ ) : PromiseOrValue < ExecutionResult > =>
1268
+ executeQuery ( {
1269
+ ...exeInfo ,
1270
+ rootValue : payload ,
1271
+ } ) ;
1272
+
1254
1273
/**
1255
1274
* Implements the "CreateSourceEventStream" algorithm described in the
1256
1275
* GraphQL specification, resolving the subscription source event stream.
0 commit comments