Files
30-seconds-of-code/node_modules/@gatsbyjs/relay-compiler/lib/GraphQLValidator.js
2019-08-20 15:52:05 +02:00

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')
};