///
import type { IncomingMessage, ServerResponse } from 'http';
import type { ASTVisitor, DocumentNode, ValidationRule, ValidationContext, ExecutionArgs, ExecutionResult, FormattedExecutionResult, GraphQLSchema, GraphQLFieldResolver, GraphQLTypeResolver, GraphQLFormattedError } from 'graphql';
import { Source, GraphQLError } from 'graphql';
import type { GraphiQLOptions } from './renderGraphiQL';
declare type Request = IncomingMessage & {
url: string;
};
declare type Response = ServerResponse & {
json?: (data: unknown) => void;
};
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, params?: GraphQLParams) => MaybePromise) | 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) => 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;
}
/**
* All information about a GraphQL request.
*/
export interface RequestInfo {
/**
* The parsed GraphQL document.
*/
document: DocumentNode;
/**
* The variable values used at runtime.
*/
variables: {
readonly [name: string]: unknown;
} | null;
/**
* The (optional) operation name requested.
*/
operationName: string | null;
/**
* The result of executing the operation.
*/
result: FormattedExecutionResult;
/**
* A value to pass as the context to the graphql() function.
*/
context?: unknown;
}
declare type Middleware = (request: Request, response: Response) => 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 interface GraphQLParams {
query: string | null;
variables: {
readonly [name: string]: unknown;
} | null;
operationName: string | null;
raw: boolean;
}
/**
* Provided a "Request" provided by express or connect (typically a node style
* HTTPClientRequest), Promise the GraphQL request parameters.
*/
export declare function getGraphQLParams(request: Request): Promise;
export {};