123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236 |
- function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }
- import { Kind } from '../language/kinds';
- import { visit, visitWithTypeInfo } from '../language/visitor';
- import { TypeInfo } from '../utilities/TypeInfo';
- /**
- * An instance of this class is passed as the "this" context to all validators,
- * allowing access to commonly useful contextual information from within a
- * validation rule.
- */
- export var ASTValidationContext =
- /*#__PURE__*/
- function () {
- function ASTValidationContext(ast, onError) {
- this._ast = ast;
- this._errors = [];
- this._fragments = undefined;
- this._fragmentSpreads = new Map();
- this._recursivelyReferencedFragments = new Map();
- this._onError = onError;
- }
- var _proto = ASTValidationContext.prototype;
- _proto.reportError = function reportError(error) {
- this._errors.push(error);
- if (this._onError) {
- this._onError(error);
- }
- } // @deprecated: use onError callback instead - will be removed in v15.
- ;
- _proto.getErrors = function getErrors() {
- return this._errors;
- };
- _proto.getDocument = function getDocument() {
- return this._ast;
- };
- _proto.getFragment = function getFragment(name) {
- var fragments = this._fragments;
- if (!fragments) {
- this._fragments = fragments = this.getDocument().definitions.reduce(function (frags, statement) {
- if (statement.kind === Kind.FRAGMENT_DEFINITION) {
- frags[statement.name.value] = statement;
- }
- return frags;
- }, Object.create(null));
- }
- return fragments[name];
- };
- _proto.getFragmentSpreads = function getFragmentSpreads(node) {
- var spreads = this._fragmentSpreads.get(node);
- if (!spreads) {
- spreads = [];
- var setsToVisit = [node];
- while (setsToVisit.length !== 0) {
- var set = setsToVisit.pop();
- for (var _i2 = 0, _set$selections2 = set.selections; _i2 < _set$selections2.length; _i2++) {
- var selection = _set$selections2[_i2];
- if (selection.kind === Kind.FRAGMENT_SPREAD) {
- spreads.push(selection);
- } else if (selection.selectionSet) {
- setsToVisit.push(selection.selectionSet);
- }
- }
- }
- this._fragmentSpreads.set(node, spreads);
- }
- return spreads;
- };
- _proto.getRecursivelyReferencedFragments = function getRecursivelyReferencedFragments(operation) {
- var fragments = this._recursivelyReferencedFragments.get(operation);
- if (!fragments) {
- fragments = [];
- var collectedNames = Object.create(null);
- var nodesToVisit = [operation.selectionSet];
- while (nodesToVisit.length !== 0) {
- var node = nodesToVisit.pop();
- for (var _i4 = 0, _this$getFragmentSpre2 = this.getFragmentSpreads(node); _i4 < _this$getFragmentSpre2.length; _i4++) {
- var spread = _this$getFragmentSpre2[_i4];
- var fragName = spread.name.value;
- if (collectedNames[fragName] !== true) {
- collectedNames[fragName] = true;
- var fragment = this.getFragment(fragName);
- if (fragment) {
- fragments.push(fragment);
- nodesToVisit.push(fragment.selectionSet);
- }
- }
- }
- }
- this._recursivelyReferencedFragments.set(operation, fragments);
- }
- return fragments;
- };
- return ASTValidationContext;
- }();
- export var SDLValidationContext =
- /*#__PURE__*/
- function (_ASTValidationContext) {
- _inheritsLoose(SDLValidationContext, _ASTValidationContext);
- function SDLValidationContext(ast, schema, onError) {
- var _this;
- _this = _ASTValidationContext.call(this, ast, onError) || this;
- _this._schema = schema;
- return _this;
- }
- var _proto2 = SDLValidationContext.prototype;
- _proto2.getSchema = function getSchema() {
- return this._schema;
- };
- return SDLValidationContext;
- }(ASTValidationContext);
- export var ValidationContext =
- /*#__PURE__*/
- function (_ASTValidationContext2) {
- _inheritsLoose(ValidationContext, _ASTValidationContext2);
- function ValidationContext(schema, ast, typeInfo, onError) {
- var _this2;
- _this2 = _ASTValidationContext2.call(this, ast, onError) || this;
- _this2._schema = schema;
- _this2._typeInfo = typeInfo;
- _this2._variableUsages = new Map();
- _this2._recursiveVariableUsages = new Map();
- return _this2;
- }
- var _proto3 = ValidationContext.prototype;
- _proto3.getSchema = function getSchema() {
- return this._schema;
- };
- _proto3.getVariableUsages = function getVariableUsages(node) {
- var usages = this._variableUsages.get(node);
- if (!usages) {
- var newUsages = [];
- var typeInfo = new TypeInfo(this._schema);
- visit(node, visitWithTypeInfo(typeInfo, {
- VariableDefinition: function VariableDefinition() {
- return false;
- },
- Variable: function Variable(variable) {
- newUsages.push({
- node: variable,
- type: typeInfo.getInputType(),
- defaultValue: typeInfo.getDefaultValue()
- });
- }
- }));
- usages = newUsages;
- this._variableUsages.set(node, usages);
- }
- return usages;
- };
- _proto3.getRecursiveVariableUsages = function getRecursiveVariableUsages(operation) {
- var usages = this._recursiveVariableUsages.get(operation);
- if (!usages) {
- usages = this.getVariableUsages(operation);
- for (var _i6 = 0, _this$getRecursivelyR2 = this.getRecursivelyReferencedFragments(operation); _i6 < _this$getRecursivelyR2.length; _i6++) {
- var frag = _this$getRecursivelyR2[_i6];
- usages = usages.concat(this.getVariableUsages(frag));
- }
- this._recursiveVariableUsages.set(operation, usages);
- }
- return usages;
- };
- _proto3.getType = function getType() {
- return this._typeInfo.getType();
- };
- _proto3.getParentType = function getParentType() {
- return this._typeInfo.getParentType();
- };
- _proto3.getInputType = function getInputType() {
- return this._typeInfo.getInputType();
- };
- _proto3.getParentInputType = function getParentInputType() {
- return this._typeInfo.getParentInputType();
- };
- _proto3.getFieldDef = function getFieldDef() {
- return this._typeInfo.getFieldDef();
- };
- _proto3.getDirective = function getDirective() {
- return this._typeInfo.getDirective();
- };
- _proto3.getArgument = function getArgument() {
- return this._typeInfo.getArgument();
- };
- return ValidationContext;
- }(ASTValidationContext);
|