/**
 * Parse, print, and visit GraphQL language source files and AST nodes.
 *
 * These exports are also available from the root `graphql` package.
 * @packageDocumentation
 */

export { Source } from './source.ts';

export { getLocation } from './location.ts';
export type { SourceLocation } from './location.ts';

export { printLocation, printSourceLocation } from './printLocation.ts';

// @see https://github.com/typescript-eslint/typescript-eslint/issues/10313
// Deno  misclassifies this merged value+type re-export and requires `export type`.
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore TS1205

export { Kind } from './kinds.ts';

export { TokenKind } from './tokenKind.ts';

export { Lexer } from './lexer.ts';

export {
  parse,
  parseValue,
  parseConstValue,
  parseType,
  parseSchemaCoordinate,
} from './parser.ts';
export type { ParseOptions } from './parser.ts';

export { print } from './printer.ts';

export {
  visit,
  visitInParallel,
  getEnterLeaveForKind,
  BREAK,
} from './visitor.ts';
export type { ASTVisitor, ASTVisitFn, ASTVisitorKeyMap } from './visitor.ts';

export { Location, Token, OperationTypeNode } from './ast.ts';
export type {
  ASTNode,
  ASTKindToNode,
  // Each kind of AST node
  NameNode,
  DocumentNode,
  DefinitionNode,
  ExecutableDefinitionNode,
  OperationDefinitionNode,
  SubscriptionOperationDefinitionNode,
  VariableDefinitionNode,
  VariableNode,
  SelectionSetNode,
  SelectionNode,
  FieldNode,
  ArgumentNode,
  FragmentArgumentNode /* for experimental fragment arguments */,
  ConstArgumentNode,
  FragmentSpreadNode,
  InlineFragmentNode,
  FragmentDefinitionNode,
  ValueNode,
  ConstValueNode,
  IntValueNode,
  FloatValueNode,
  StringValueNode,
  BooleanValueNode,
  NullValueNode,
  EnumValueNode,
  ListValueNode,
  ConstListValueNode,
  ObjectValueNode,
  ConstObjectValueNode,
  ObjectFieldNode,
  ConstObjectFieldNode,
  DirectiveNode,
  ConstDirectiveNode,
  TypeNode,
  NamedTypeNode,
  ListTypeNode,
  NonNullTypeNode,
  TypeSystemDefinitionNode,
  SchemaDefinitionNode,
  OperationTypeDefinitionNode,
  TypeDefinitionNode,
  ScalarTypeDefinitionNode,
  ObjectTypeDefinitionNode,
  FieldDefinitionNode,
  InputValueDefinitionNode,
  InterfaceTypeDefinitionNode,
  UnionTypeDefinitionNode,
  EnumTypeDefinitionNode,
  EnumValueDefinitionNode,
  InputObjectTypeDefinitionNode,
  DirectiveDefinitionNode,
  TypeSystemExtensionNode,
  SchemaExtensionNode,
  TypeExtensionNode,
  ScalarTypeExtensionNode,
  ObjectTypeExtensionNode,
  InterfaceTypeExtensionNode,
  UnionTypeExtensionNode,
  EnumTypeExtensionNode,
  InputObjectTypeExtensionNode,
  DirectiveExtensionNode,
  SchemaCoordinateNode,
  TypeCoordinateNode,
  MemberCoordinateNode,
  ArgumentCoordinateNode,
  DirectiveCoordinateNode,
  DirectiveArgumentCoordinateNode,
} from './ast.ts';

export {
  isDefinitionNode,
  isExecutableDefinitionNode,
  isSelectionNode,
  isValueNode,
  isConstValueNode,
  isTypeNode,
  isTypeSystemDefinitionNode,
  isTypeDefinitionNode,
  isTypeSystemExtensionNode,
  isTypeExtensionNode,
  isSchemaCoordinateNode,
  isSubscriptionOperationDefinitionNode,
} from './predicates.ts';

export { DirectiveLocation } from './directiveLocation.ts';