76 lines
3.4 KiB
JavaScript
76 lines
3.4 KiB
JavaScript
/**
|
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*
|
|
*
|
|
* @format
|
|
*/
|
|
'use strict';
|
|
|
|
var Profiler = require("./GraphQLCompilerProfiler");
|
|
|
|
var util = require("util");
|
|
|
|
var _require = require("graphql"),
|
|
formatError = _require.formatError,
|
|
FragmentsOnCompositeTypesRule = _require.FragmentsOnCompositeTypesRule,
|
|
KnownArgumentNamesRule = _require.KnownArgumentNamesRule,
|
|
KnownTypeNamesRule = _require.KnownTypeNamesRule,
|
|
LoneAnonymousOperationRule = _require.LoneAnonymousOperationRule,
|
|
NoUnusedVariablesRule = _require.NoUnusedVariablesRule,
|
|
PossibleFragmentSpreadsRule = _require.PossibleFragmentSpreadsRule,
|
|
UniqueArgumentNamesRule = _require.UniqueArgumentNamesRule,
|
|
UniqueFragmentNamesRule = _require.UniqueFragmentNamesRule,
|
|
UniqueInputFieldNamesRule = _require.UniqueInputFieldNamesRule,
|
|
UniqueOperationNamesRule = _require.UniqueOperationNamesRule,
|
|
UniqueVariableNamesRule = _require.UniqueVariableNamesRule,
|
|
validate = _require.validate,
|
|
ValuesOfCorrectTypeRule = _require.ValuesOfCorrectTypeRule,
|
|
VariablesAreInputTypesRule = _require.VariablesAreInputTypesRule,
|
|
VariablesInAllowedPositionRule = _require.VariablesInAllowedPositionRule;
|
|
|
|
function validateOrThrow(document, schema, rules) {
|
|
var validationErrors = validate(schema, document, rules);
|
|
|
|
if (validationErrors && validationErrors.length > 0) {
|
|
var formattedErrors = validationErrors.map(formatError);
|
|
var errorMessages = validationErrors.map(function (e) {
|
|
return e.toString();
|
|
});
|
|
var error = new Error(util.format('You supplied a GraphQL document with validation errors:\n%s', errorMessages.join('\n')));
|
|
error.validationErrors = formattedErrors;
|
|
throw error;
|
|
}
|
|
}
|
|
|
|
module.exports = {
|
|
GLOBAL_RULES: [KnownArgumentNamesRule,
|
|
/* Some rules are not enabled (potentially non-exhaustive)
|
|
*
|
|
* - KnownFragmentNamesRule: RelayClassic generates fragments at runtime,
|
|
* so RelayCompat queries might reference fragments unknown in build time.
|
|
* - NoFragmentCyclesRule: Because of @argumentDefinitions, this validation
|
|
* incorrectly flags a subset of fragments using @include/@skip as
|
|
* recursive.
|
|
* - NoUndefinedVariablesRule: Because of @argumentDefinitions, this
|
|
* validation incorrectly marks some fragment variables as undefined.
|
|
* - NoUnusedFragmentsRule: Queries generated dynamically with RelayCompat
|
|
* might use unused fragments.
|
|
* - OverlappingFieldsCanBeMergedRule: RelayClassic auto-resolves
|
|
* overlapping fields by generating aliases.
|
|
*/
|
|
NoUnusedVariablesRule, UniqueArgumentNamesRule, UniqueFragmentNamesRule, UniqueInputFieldNamesRule, UniqueOperationNamesRule, UniqueVariableNamesRule],
|
|
LOCAL_RULES: [
|
|
/* Some rules are not enabled (potentially non-exhaustive)
|
|
*
|
|
* - FieldsOnCorrectTypeRule: is not aware of @fixme_fat_interface.
|
|
* - KnownDirectivesRule: doesn't pass with @arguments and other Relay
|
|
* directives.
|
|
* - ScalarLeafsRule: is violated by the @match directive since these rules
|
|
* run before any transform steps.
|
|
*/
|
|
FragmentsOnCompositeTypesRule, KnownTypeNamesRule, LoneAnonymousOperationRule, PossibleFragmentSpreadsRule, ValuesOfCorrectTypeRule, VariablesAreInputTypesRule, VariablesInAllowedPositionRule],
|
|
validate: Profiler.instrument(validateOrThrow, 'GraphQLValidator.validate')
|
|
}; |