@relay-graphql-js/validation-rules
Version:
shared relay validation rules for graphql-js parser
51 lines (50 loc) • 2.65 kB
JavaScript
;
exports.__esModule = true;
exports.RelayDefaultValueOfCorrectType = 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.RelayDefaultValueOfCorrectType = function RelayDefaultValueOfCorrectType(context) {
return {
Directive: function (directive, _key, _parent, _path, ancestors) {
if (directive.name.value !== "argumentDefinitions" || !directive.arguments) {
return false;
}
var fragmentDefinition = utils_1.findFragmentDefinitionParent(ancestors);
if (!fragmentDefinition) {
return false;
}
var typedArguments = argumentDefinitions_1.getFragmentArgumentDefinitions(context, fragmentDefinition);
directive.arguments.forEach(function (argument) {
if (argument.value.kind !== "ObjectValue") {
return;
}
var defaultValueField = argument.value.fields.find(function (f) { return f.name.value === "defaultValue"; });
if (!defaultValueField) {
return;
}
var arg = typedArguments[argument.name.value];
if (!arg) {
return;
}
if (arg.schemaType && arg.defaultValue && !utils_1.containsVariableNodes(arg.defaultValue)) {
if (arg.defaultValue.kind === "NullValue") {
context.reportError(new graphql_1.GraphQLError(cannotSpecifyNullAsDefaultValue(fragmentDefinition.name.value, argument.name.value), defaultValueField.value));
return;
}
var value = graphql_1.valueFromAST(arg.defaultValue, arg.schemaType);
if (value === undefined) {
context.reportError(new graphql_1.GraphQLError(badValueMessage(fragmentDefinition.name.value, argument.name.value, utils_1.makeNonNullable(arg.schemaType).toString()), defaultValueField.value));
}
}
});
}
};
};
function badValueMessage(fragmentName, argName, argType) {
return "defaultValue for argument \"" + argName + "\" on fragment \"" + fragmentName + "\" is expected to be of type \"" + argType + "\".";
}
function cannotSpecifyNullAsDefaultValue(fragmentName, argName) {
return "defaultValue for argument \"" + argName + "\" on fragment \"" + fragmentName + "\" cannot be null. Instead, omit defaultValue.";
}