import type { ASTVisitor, DocumentNode, ExecutionArgs, ExecutionResult, GraphQLSchema, GraphQLFieldResolver, GraphQLTypeResolver, GraphQLFormattedError, ValidationContext } from 'graphql'; import type { GraphQLParams, RequestInfo } from 'express-graphql'; import { Source, GraphQLError } from 'graphql'; import type { Context, Request, Response } from 'koa'; import type { GraphiQLOptions } from './renderGraphiQL'; declare type MaybePromise = Promise | T; /** * Used to configure the graphqlHTTP middleware by providing a schema * and other configuration options. * * Options can be provided as an Object, a Promise for an Object, or a Function * that returns an Object or a Promise for an Object. */ export declare type Options = ((request: Request, response: Response, ctx: Context, params?: GraphQLParams) => OptionsResult) | OptionsResult; export declare type OptionsResult = MaybePromise; export interface OptionsData { /** * A GraphQL schema from graphql-js. */ schema: GraphQLSchema; /** * A value to pass as the context to this middleware. */ context?: unknown; /** * An object to pass as the rootValue to the graphql() function. */ rootValue?: unknown; /** * A boolean to configure whether the output should be pretty-printed. */ pretty?: boolean; /** * An optional array of validation rules that will be applied on the document * in additional to those defined by the GraphQL spec. */ validationRules?: ReadonlyArray<(ctx: ValidationContext) => ASTVisitor>; /** * An optional function which will be used to validate instead of default `validate` * from `graphql-js`. */ customValidateFn?: (schema: GraphQLSchema, documentAST: DocumentNode, rules: ReadonlyArray) => ReadonlyArray; /** * An optional function which will be used to execute instead of default `execute` * from `graphql-js`. */ customExecuteFn?: (args: ExecutionArgs) => MaybePromise; /** * An optional function which will be used to format any errors produced by * fulfilling a GraphQL operation. If no function is provided, GraphQL's * default spec-compliant `formatError` function will be used. */ customFormatErrorFn?: (error: GraphQLError) => GraphQLFormattedError; /** * An optional function which will be used to create a document instead of * the default `parse` from `graphql-js`. */ customParseFn?: (source: Source) => DocumentNode; /** * `formatError` is deprecated and replaced by `customFormatErrorFn`. It will * be removed in version 1.0.0. */ formatError?: (error: GraphQLError, context?: any) => GraphQLFormattedError; /** * An optional function for adding additional metadata to the GraphQL response * as a key-value object. The result will be added to "extensions" field in * the resulting JSON. This is often a useful place to add development time * info such as the runtime of a query or the amount of resources consumed. * * Information about the request is provided to be used. * * This function may be async. */ extensions?: (info: RequestInfo) => MaybePromise; /** * A boolean to optionally enable GraphiQL mode. * Alternatively, instead of `true` you can pass in an options object. */ graphiql?: boolean | GraphiQLOptions; /** * A resolver function to use when one is not provided by the schema. * If not provided, the default field resolver is used (which looks for a * value or method on the source value with the field's name). */ fieldResolver?: GraphQLFieldResolver; /** * A type resolver function to use when none is provided by the schema. * If not provided, the default type resolver is used (which looks for a * `__typename` field or alternatively calls the `isTypeOf` method). */ typeResolver?: GraphQLTypeResolver; } declare type Middleware = (ctx: Context) => Promise; /** * Middleware for express; takes an options object or function as input to * configure behavior, and returns an express middleware. */ export declare function graphqlHTTP(options: Options): Middleware; export {};