buildASTSchema.d.ts 3.3 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114
import Maybe from '../tsutils/Maybe';
import {
  DocumentNode,
  Location,
  StringValueNode,
  TypeDefinitionNode,
  NamedTypeNode,
  DirectiveDefinitionNode,
  FieldDefinitionNode,
  InputValueDefinitionNode,
  EnumValueDefinitionNode,
  TypeNode,
} from '../language/ast';
import {
  GraphQLNamedType,
  GraphQLFieldConfig,
  GraphQLInputField,
  GraphQLEnumValueConfig,
  GraphQLType,
  GraphQLArgumentConfig,
  GraphQLInputFieldConfig,
} from '../type/definition';
import { GraphQLDirective } from '../type/directives';
import { Source } from '../language/source';
import { GraphQLSchema, GraphQLSchemaValidationOptions } from '../type/schema';
import { ParseOptions } from '../language/parser';
import { dedentBlockStringValue } from '../language/blockString';

interface BuildSchemaOptions extends GraphQLSchemaValidationOptions {
  /**
   * Descriptions are defined as preceding string literals, however an older
   * experimental version of the SDL supported preceding comments as
   * descriptions. Set to true to enable this deprecated behavior.
   * This option is provided to ease adoption and will be removed in v16.
   *
   * Default: false
   */
  commentDescriptions?: boolean;

  /**
   * Set to true to assume the SDL is valid.
   *
   * Default: false
   */
  assumeValidSDL?: boolean;
}

/**
 * This takes the ast of a schema document produced by the parse function in
 * src/language/parser.js.
 *
 * If no schema definition is provided, then it will look for types named Query
 * and Mutation.
 *
 * Given that AST it constructs a GraphQLSchema. The resulting schema
 * has no resolve methods, so execution will use default resolvers.
 *
 * Accepts options as a second argument:
 *
 *    - commentDescriptions:
 *        Provide true to use preceding comments as the description.
 *
 */
export function buildASTSchema(
  documentAST: DocumentNode,
  options?: BuildSchemaOptions,
): GraphQLSchema;

type TypeDefinitionsMap = { [key: string]: TypeDefinitionNode };
type TypeResolver = (typeRef: NamedTypeNode) => GraphQLNamedType;

export class ASTDefinitionBuilder {
  constructor(options: Maybe<BuildSchemaOptions>, resolveType: TypeResolver);

  getNamedType(node: NamedTypeNode): GraphQLNamedType;

  getWrappedType(node: TypeNode): GraphQLType;

  buildDirective(directive: DirectiveDefinitionNode): GraphQLDirective;

  buildField(field: FieldDefinitionNode): GraphQLFieldConfig<any, any>;

  buildArg(value: InputValueDefinitionNode): GraphQLArgumentConfig;

  buildInputField(value: InputValueDefinitionNode): GraphQLInputFieldConfig;

  buildEnumValue(value: EnumValueDefinitionNode): GraphQLEnumValueConfig;

  buildType(node: NamedTypeNode | TypeDefinitionNode): GraphQLNamedType;
}

/**
 * Given an ast node, returns its string description.
 * @deprecated: provided to ease adoption and will be removed in v16.
 *
 * Accepts options as a second argument:
 *
 *    - commentDescriptions:
 *        Provide true to use preceding comments as the description.
 *
 */
export function getDescription(
  node: { readonly description?: StringValueNode; readonly loc?: Location },
  options: Maybe<BuildSchemaOptions>,
): string | undefined;

/**
 * A helper function to build a GraphQLSchema directly from a source
 * document.
 */
export function buildSchema(
  source: string | Source,
  options?: BuildSchemaOptions & ParseOptions,
): GraphQLSchema;