/**
 * Copyright (c) 2015-present, Facebook, Inc.
 *
 * This source code is licensed under the MIT license found in the
 * LICENSE file in the root directory of this source tree.
 *
 *  strict
 */

export { validate } from './validate';

// https://github.com/tc39/proposal-export-default-from
import ValidationContext from './ValidationContext';
export { ValidationContext };

export { specifiedRules } from './specifiedRules';

// Spec Section: "Field Selections on Objects, Interfaces, and Unions Types"
export { FieldsOnCorrectType as FieldsOnCorrectTypeRule } from './rules/FieldsOnCorrectType';

// Spec Section: "Fragments on Composite Types"
export { FragmentsOnCompositeTypes as FragmentsOnCompositeTypesRule } from './rules/FragmentsOnCompositeTypes';

// Spec Section: "Argument Names"
export { KnownArgumentNames as KnownArgumentNamesRule } from './rules/KnownArgumentNames';

// Spec Section: "Directives Are Defined"
export { KnownDirectives as KnownDirectivesRule } from './rules/KnownDirectives';

// Spec Section: "Fragment spread target defined"
export { KnownFragmentNames as KnownFragmentNamesRule } from './rules/KnownFragmentNames';

// Spec Section: "Fragment Spread Type Existence"
export { KnownTypeNames as KnownTypeNamesRule } from './rules/KnownTypeNames';

// Spec Section: "Lone Anonymous Operation"
export { LoneAnonymousOperation as LoneAnonymousOperationRule } from './rules/LoneAnonymousOperation';

// Spec Section: "Fragments must not form cycles"
export { NoFragmentCycles as NoFragmentCyclesRule } from './rules/NoFragmentCycles';

// Spec Section: "All Variable Used Defined"
export { NoUndefinedVariables as NoUndefinedVariablesRule } from './rules/NoUndefinedVariables';

// Spec Section: "Fragments must be used"
export { NoUnusedFragments as NoUnusedFragmentsRule } from './rules/NoUnusedFragments';

// Spec Section: "All Variables Used"
export { NoUnusedVariables as NoUnusedVariablesRule } from './rules/NoUnusedVariables';

// Spec Section: "Field Selection Merging"
export { OverlappingFieldsCanBeMerged as OverlappingFieldsCanBeMergedRule } from './rules/OverlappingFieldsCanBeMerged';

// Spec Section: "Fragment spread is possible"
export { PossibleFragmentSpreads as PossibleFragmentSpreadsRule } from './rules/PossibleFragmentSpreads';

// Spec Section: "Argument Optionality"
export { ProvidedNonNullArguments as ProvidedNonNullArgumentsRule } from './rules/ProvidedNonNullArguments';

// Spec Section: "Leaf Field Selections"
export { ScalarLeafs as ScalarLeafsRule } from './rules/ScalarLeafs';

// Spec Section: "Subscriptions with Single Root Field"
export { SingleFieldSubscriptions as SingleFieldSubscriptionsRule } from './rules/SingleFieldSubscriptions';

// Spec Section: "Argument Uniqueness"
export { UniqueArgumentNames as UniqueArgumentNamesRule } from './rules/UniqueArgumentNames';

// Spec Section: "Directives Are Unique Per Location"
export { UniqueDirectivesPerLocation as UniqueDirectivesPerLocationRule } from './rules/UniqueDirectivesPerLocation';

// Spec Section: "Fragment Name Uniqueness"
export { UniqueFragmentNames as UniqueFragmentNamesRule } from './rules/UniqueFragmentNames';

// Spec Section: "Input Object Field Uniqueness"
export { UniqueInputFieldNames as UniqueInputFieldNamesRule } from './rules/UniqueInputFieldNames';

// Spec Section: "Operation Name Uniqueness"
export { UniqueOperationNames as UniqueOperationNamesRule } from './rules/UniqueOperationNames';

// Spec Section: "Variable Uniqueness"
export { UniqueVariableNames as UniqueVariableNamesRule } from './rules/UniqueVariableNames';

// Spec Section: "Values Type Correctness"
export { ValuesOfCorrectType as ValuesOfCorrectTypeRule } from './rules/ValuesOfCorrectType';

// Spec Section: "Variables are Input Types"
export { VariablesAreInputTypes as VariablesAreInputTypesRule } from './rules/VariablesAreInputTypes';

// Spec Section: "Variables Default Value Is Allowed"
export { VariablesDefaultValueAllowed as VariablesDefaultValueAllowedRule } from './rules/VariablesDefaultValueAllowed';

// Spec Section: "All Variable Usages Are Allowed"
export { VariablesInAllowedPosition as VariablesInAllowedPositionRule } from './rules/VariablesInAllowedPosition';