@relay-graphql-js/validation-rules
Version:
shared relay validation rules for graphql-js parser
42 lines (41 loc) • 2.04 kB
JavaScript
;
var __spreadArrays = (this && this.__spreadArrays) || function () {
for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
for (var r = Array(s), k = 0, i = 0; i < il; i++)
for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
r[k] = a[j];
return r;
};
exports.__esModule = true;
exports.RelayKnownVariableNames = exports.undefinedVarMessage = void 0;
var graphql_1 = require("graphql");
var argumentDefinitions_1 = require("./argumentDefinitions");
function undefinedVarMessage(varName, opName, usingFragmentName) {
opName = !opName ? "unnamed operation" : opName;
return usingFragmentName
? "Variable \"$" + varName + "\" is used by fragment \"" + usingFragmentName + "\", but not defined by operation \"" + opName + "\"."
: "Variable \"$" + varName + "\" is not defined by operation \"" + opName + "\".";
}
exports.undefinedVarMessage = undefinedVarMessage;
// tslint:disable-next-line: no-shadowed-variable
exports.RelayKnownVariableNames = function RelayKnownVariableNames(context) {
return {
OperationDefinition: function (opDef) {
var usages = argumentDefinitions_1.getRecursiveVariableUsagesWithRelayInfo(context, opDef);
var errors = Object.create(null);
usages.forEach(function (usage) {
var varName = usage.node.name.value;
if (!usage.variableDefinition) {
var location_1 = __spreadArrays((!usage.usingFragmentName ? [usage.node] : []), [opDef]);
var errorStr = undefinedVarMessage(varName, opDef.name && opDef.name.value, usage.usingFragmentName);
if (!errors[errorStr]) {
if (usage.usingFragmentName) {
errors[errorStr] = true;
}
context.reportError(new graphql_1.GraphQLError(errorStr, location_1));
}
}
});
}
};
};