@relay-graphql-js/validation-rules
Version:
shared relay validation rules for graphql-js parser
43 lines (42 loc) • 1.92 kB
JavaScript
;
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 + "\".";
}