UNPKG

@relay-graphql-js/validation-rules

Version:
51 lines (50 loc) 2.65 kB
"use strict"; 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."; }