({
typeDefs,
resolvers = {},
resolverValidationOptions = {},
inheritResolversFromInterfaces = false,
updateResolversInPlace = false,
schemaExtensions,
defaultFieldResolver,
...otherOptions
}: IExecutableSchemaDefinition<TContext>)
| 49 | * ``` |
| 50 | */ |
| 51 | export function makeExecutableSchema<TContext = any>({ |
| 52 | typeDefs, |
| 53 | resolvers = {}, |
| 54 | resolverValidationOptions = {}, |
| 55 | inheritResolversFromInterfaces = false, |
| 56 | updateResolversInPlace = false, |
| 57 | schemaExtensions, |
| 58 | defaultFieldResolver, |
| 59 | ...otherOptions |
| 60 | }: IExecutableSchemaDefinition<TContext>) { |
| 61 | // Validate and clean up arguments |
| 62 | if (typeof resolverValidationOptions !== 'object') { |
| 63 | throw new Error('Expected `resolverValidationOptions` to be an object'); |
| 64 | } |
| 65 | |
| 66 | if (!typeDefs) { |
| 67 | throw new Error('Must provide typeDefs'); |
| 68 | } |
| 69 | |
| 70 | let schema: GraphQLSchema; |
| 71 | |
| 72 | if (isSchema(typeDefs)) { |
| 73 | schema = typeDefs; |
| 74 | } else if (otherOptions?.commentDescriptions) { |
| 75 | const mergedTypeDefs = mergeTypeDefs(typeDefs, { |
| 76 | ...otherOptions, |
| 77 | commentDescriptions: true, |
| 78 | }); |
| 79 | schema = buildSchema(mergedTypeDefs, otherOptions); |
| 80 | } else { |
| 81 | const mergedTypeDefs = mergeTypeDefs(typeDefs, otherOptions); |
| 82 | schema = buildASTSchema(mergedTypeDefs, otherOptions); |
| 83 | } |
| 84 | |
| 85 | // We allow passing in an array of resolver maps, in which case we merge them |
| 86 | |
| 87 | schema = addResolversToSchema({ |
| 88 | schema, |
| 89 | resolvers: mergeResolvers(resolvers), |
| 90 | resolverValidationOptions, |
| 91 | inheritResolversFromInterfaces, |
| 92 | updateResolversInPlace, |
| 93 | defaultFieldResolver, |
| 94 | }); |
| 95 | |
| 96 | if (Object.keys(resolverValidationOptions).length > 0) { |
| 97 | assertResolversPresent(schema, resolverValidationOptions); |
| 98 | } |
| 99 | |
| 100 | if (schemaExtensions) { |
| 101 | for (const schemaExtension of asArray(schemaExtensions)) { |
| 102 | applyExtensions(schema, schemaExtension); |
| 103 | } |
| 104 | } |
| 105 | |
| 106 | return schema; |
| 107 | } |
searching dependent graphs…