@@ -224,7 +224,7 @@ let private resolveUnionType possibleTypesFn (uniondef: UnionDef) =
224224 | Some resolveType -> resolveType
225225 | None -> defaultResolveType possibleTypesFn uniondef
226226
227- let private createFieldContext objdef argDefs ctx ( info : ExecutionInfo ) =
227+ let private createFieldContext objdef argDefs ctx ( info : ExecutionInfo ) ( path : obj list ) =
228228 let fdef = info.Definition
229229 let args = getArgumentValues argDefs info.Ast.Arguments ctx.Variables
230230 { ExecutionInfo = info
@@ -233,7 +233,8 @@ let private createFieldContext objdef argDefs ctx (info: ExecutionInfo) =
233233 ParentType = objdef
234234 Schema = ctx.Schema
235235 Args = args
236- Variables = ctx.Variables }
236+ Variables = ctx.Variables
237+ Path = path |> List.rev }
237238
238239let private resolveField ( execute : ExecuteField ) ( ctx : ResolveFieldContext ) ( parentValue : obj ) =
239240 if ctx.ExecutionInfo.IsNullable
@@ -515,8 +516,8 @@ and executeObjectFields (fields : ExecutionInfo list) (objName : string) (objDef
515516 let executeField field =
516517 let argDefs = ctx.Context.FieldExecuteMap.GetArgs( objDef.Name, field.Definition.Name)
517518 let resolver = ctx.Context.FieldExecuteMap.GetExecute( objDef.Name, field.Definition.Name)
518- let fieldCtx = createFieldContext objDef argDefs ctx field
519519 let fieldPath = ( field.Identifier :> obj :: path )
520+ let fieldCtx = createFieldContext objDef argDefs ctx field fieldPath
520521 executeResolvers fieldCtx fieldPath value ( resolveField resolver fieldCtx value)
521522 let! res =
522523 fields
@@ -572,7 +573,8 @@ let private executeQueryOrMutation (resultSet: (string * ExecutionInfo) []) (ctx
572573 ParentType = objdef
573574 Schema = ctx.Schema
574575 Args = args
575- Variables = ctx.Variables }
576+ Variables = ctx.Variables
577+ Path = path |> List.rev }
576578 let execute = ctx.FieldExecuteMap.GetExecute( ctx.ExecutionPlan.RootDef.Name, info.Definition.Name)
577579 asyncVal {
578580 let! result =
@@ -597,16 +599,18 @@ let private executeSubscription (resultSet: (string * ExecutionInfo) []) (ctx: E
597599 let subdef = info.Definition :?> SubscriptionFieldDef
598600 let args = getArgumentValues subdef.Args info.Ast.Arguments ctx.Variables
599601 let returnType = subdef.OutputTypeDef
602+ let fieldPath = [ info.Identifier :> obj ]
600603 let fieldCtx =
601604 { ExecutionInfo = info
602605 Context = ctx
603606 ReturnType = returnType
604607 ParentType = objdef
605608 Schema = ctx.Schema
606609 Args = args
607- Variables = ctx.Variables }
610+ Variables = ctx.Variables
611+ Path = fieldPath |> List.rev }
608612 let onValue v = asyncVal {
609- match ! executeResolvers fieldCtx [ info.Identifier ] value ( toOption v |> AsyncVal.wrap) with
613+ match ! executeResolvers fieldCtx fieldPath value ( toOption v |> AsyncVal.wrap) with
610614 | Ok ( data, None, []) -> return NameValueLookup.ofList[ " data" , box <| NameValueLookup.ofList [ nameOrAlias, data.Value]] :> Output
611615 | Ok ( data, None, errs) -> return NameValueLookup.ofList[ " data" , box <| NameValueLookup.ofList [ nameOrAlias, data.Value]; " errors" , upcast errs] :> Output
612616 | Ok (_, Some _, _) -> return failwithf " Deferred/Streamed/Live are not supported for subscriptions!"
0 commit comments