UNPKG

@relay-graphql-js/validation-rules

Version:
43 lines (42 loc) 1.92 kB
"use strict"; exports.__esModule = true; exports.RelayArgumentsOfCorrectType = void 0; var graphql_1 = require("graphql"); var argumentDefinitions_1 = require("./argumentDefinitions"); var utils_1 = require("./utils"); // tslint:disable-next-line: no-shadowed-variable exports.RelayArgumentsOfCorrectType = function RelayArgumentsOfCorrectType(context) { return { Directive: function (directive, _key, _parent, _path, ancestors) { if (directive.name.value !== "arguments" || !directive.arguments) { return false; } var fragmentSpread = utils_1.findFragmentSpreadParent(ancestors); if (!fragmentSpread) { return false; } var fragmentDefinition = context.getFragment(fragmentSpread.name.value); if (!fragmentDefinition) { return false; } var typedArguments = argumentDefinitions_1.getFragmentArgumentDefinitions(context, fragmentDefinition); directive.arguments.forEach(function (arg) { var argDef = typedArguments[arg.name.value]; if (!argDef || !argDef.schemaType) { return; } var schemaType = argDef.schemaType; if (utils_1.containsVariableNodes(arg.value)) { return; } var value = graphql_1.valueFromAST(arg.value, schemaType); if (value === undefined) { context.reportError(new graphql_1.GraphQLError(badValueMessage(fragmentDefinition.name.value, arg.name.value, schemaType.toString()), arg.value)); } }); } }; }; function badValueMessage(fragmentName, argName, argType) { return "Argument \"" + argName + "\" for fragment \"" + fragmentName + "\" is expected to be of type \"" + argType + "\"."; }