summaryrefslogtreecommitdiff
path: root/school/node_modules/graphql/validation/rules/VariablesInAllowedPositionRule.js
diff options
context:
space:
mode:
authorMinteck <contact@minteck.org>2023-01-10 14:54:04 +0100
committerMinteck <contact@minteck.org>2023-01-10 14:54:04 +0100
commit99c1d9af689e5325f3cf535c4007b3aeb8325229 (patch)
treee663b3c2ebdbd67c818ac0c5147f0ce1d2463cda /school/node_modules/graphql/validation/rules/VariablesInAllowedPositionRule.js
parent9871b03912fc28ad38b4037ebf26a78aa937baba (diff)
downloadpluralconnect-99c1d9af689e5325f3cf535c4007b3aeb8325229.tar.gz
pluralconnect-99c1d9af689e5325f3cf535c4007b3aeb8325229.tar.bz2
pluralconnect-99c1d9af689e5325f3cf535c4007b3aeb8325229.zip
Update - This is an automated commit
Diffstat (limited to 'school/node_modules/graphql/validation/rules/VariablesInAllowedPositionRule.js')
-rw-r--r--school/node_modules/graphql/validation/rules/VariablesInAllowedPositionRule.js87
1 files changed, 87 insertions, 0 deletions
diff --git a/school/node_modules/graphql/validation/rules/VariablesInAllowedPositionRule.js b/school/node_modules/graphql/validation/rules/VariablesInAllowedPositionRule.js
new file mode 100644
index 0000000..ad0ce8c
--- /dev/null
+++ b/school/node_modules/graphql/validation/rules/VariablesInAllowedPositionRule.js
@@ -0,0 +1,87 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.VariablesInAllowedPositionRule = VariablesInAllowedPositionRule;
+
+var _inspect = _interopRequireDefault(require("../../jsutils/inspect.js"));
+
+var _GraphQLError = require("../../error/GraphQLError.js");
+
+var _kinds = require("../../language/kinds.js");
+
+var _definition = require("../../type/definition.js");
+
+var _typeFromAST = require("../../utilities/typeFromAST.js");
+
+var _typeComparators = require("../../utilities/typeComparators.js");
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+/**
+ * Variables passed to field arguments conform to type
+ */
+function VariablesInAllowedPositionRule(context) {
+ var varDefMap = Object.create(null);
+ return {
+ OperationDefinition: {
+ enter: function enter() {
+ varDefMap = Object.create(null);
+ },
+ leave: function leave(operation) {
+ var usages = context.getRecursiveVariableUsages(operation);
+
+ for (var _i2 = 0; _i2 < usages.length; _i2++) {
+ var _ref2 = usages[_i2];
+ var node = _ref2.node;
+ var type = _ref2.type;
+ var defaultValue = _ref2.defaultValue;
+ var varName = node.name.value;
+ var varDef = varDefMap[varName];
+
+ if (varDef && type) {
+ // A var type is allowed if it is the same or more strict (e.g. is
+ // a subtype of) than the expected type. It can be more strict if
+ // the variable type is non-null when the expected type is nullable.
+ // If both are list types, the variable item type can be more strict
+ // than the expected item type (contravariant).
+ var schema = context.getSchema();
+ var varType = (0, _typeFromAST.typeFromAST)(schema, varDef.type);
+
+ if (varType && !allowedVariableUsage(schema, varType, varDef.defaultValue, type, defaultValue)) {
+ var varTypeStr = (0, _inspect.default)(varType);
+ var typeStr = (0, _inspect.default)(type);
+ context.reportError(new _GraphQLError.GraphQLError("Variable \"$".concat(varName, "\" of type \"").concat(varTypeStr, "\" used in position expecting type \"").concat(typeStr, "\"."), [varDef, node]));
+ }
+ }
+ }
+ }
+ },
+ VariableDefinition: function VariableDefinition(node) {
+ varDefMap[node.variable.name.value] = node;
+ }
+ };
+}
+/**
+ * Returns true if the variable is allowed in the location it was found,
+ * which includes considering if default values exist for either the variable
+ * or the location at which it is located.
+ */
+
+
+function allowedVariableUsage(schema, varType, varDefaultValue, locationType, locationDefaultValue) {
+ if ((0, _definition.isNonNullType)(locationType) && !(0, _definition.isNonNullType)(varType)) {
+ var hasNonNullVariableDefaultValue = varDefaultValue != null && varDefaultValue.kind !== _kinds.Kind.NULL;
+ var hasLocationDefaultValue = locationDefaultValue !== undefined;
+
+ if (!hasNonNullVariableDefaultValue && !hasLocationDefaultValue) {
+ return false;
+ }
+
+ var nullableLocationType = locationType.ofType;
+ return (0, _typeComparators.isTypeSubTypeOf)(schema, varType, nullableLocationType);
+ }
+
+ return (0, _typeComparators.isTypeSubTypeOf)(schema, varType, locationType);
+}