132 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			132 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 'use strict';
 | |
| 
 | |
| Object.defineProperty(exports, '__esModule', {
 | |
|   value: true,
 | |
| });
 | |
| exports.NoDeprecatedCustomRule = NoDeprecatedCustomRule;
 | |
| 
 | |
| var _invariant = require('../../../jsutils/invariant.js');
 | |
| 
 | |
| var _GraphQLError = require('../../../error/GraphQLError.js');
 | |
| 
 | |
| var _definition = require('../../../type/definition.js');
 | |
| 
 | |
| /**
 | |
|  * No deprecated
 | |
|  *
 | |
|  * A GraphQL document is only valid if all selected fields and all used enum values have not been
 | |
|  * deprecated.
 | |
|  *
 | |
|  * Note: This rule is optional and is not part of the Validation section of the GraphQL
 | |
|  * Specification. The main purpose of this rule is detection of deprecated usages and not
 | |
|  * necessarily to forbid their use when querying a service.
 | |
|  */
 | |
| function NoDeprecatedCustomRule(context) {
 | |
|   return {
 | |
|     Field(node) {
 | |
|       const fieldDef = context.getFieldDef();
 | |
|       const deprecationReason =
 | |
|         fieldDef === null || fieldDef === void 0
 | |
|           ? void 0
 | |
|           : fieldDef.deprecationReason;
 | |
| 
 | |
|       if (fieldDef && deprecationReason != null) {
 | |
|         const parentType = context.getParentType();
 | |
|         parentType != null || (0, _invariant.invariant)(false);
 | |
|         context.reportError(
 | |
|           new _GraphQLError.GraphQLError(
 | |
|             `The field ${parentType.name}.${fieldDef.name} is deprecated. ${deprecationReason}`,
 | |
|             {
 | |
|               nodes: node,
 | |
|             },
 | |
|           ),
 | |
|         );
 | |
|       }
 | |
|     },
 | |
| 
 | |
|     Argument(node) {
 | |
|       const argDef = context.getArgument();
 | |
|       const deprecationReason =
 | |
|         argDef === null || argDef === void 0
 | |
|           ? void 0
 | |
|           : argDef.deprecationReason;
 | |
| 
 | |
|       if (argDef && deprecationReason != null) {
 | |
|         const directiveDef = context.getDirective();
 | |
| 
 | |
|         if (directiveDef != null) {
 | |
|           context.reportError(
 | |
|             new _GraphQLError.GraphQLError(
 | |
|               `Directive "@${directiveDef.name}" argument "${argDef.name}" is deprecated. ${deprecationReason}`,
 | |
|               {
 | |
|                 nodes: node,
 | |
|               },
 | |
|             ),
 | |
|           );
 | |
|         } else {
 | |
|           const parentType = context.getParentType();
 | |
|           const fieldDef = context.getFieldDef();
 | |
|           (parentType != null && fieldDef != null) ||
 | |
|             (0, _invariant.invariant)(false);
 | |
|           context.reportError(
 | |
|             new _GraphQLError.GraphQLError(
 | |
|               `Field "${parentType.name}.${fieldDef.name}" argument "${argDef.name}" is deprecated. ${deprecationReason}`,
 | |
|               {
 | |
|                 nodes: node,
 | |
|               },
 | |
|             ),
 | |
|           );
 | |
|         }
 | |
|       }
 | |
|     },
 | |
| 
 | |
|     ObjectField(node) {
 | |
|       const inputObjectDef = (0, _definition.getNamedType)(
 | |
|         context.getParentInputType(),
 | |
|       );
 | |
| 
 | |
|       if ((0, _definition.isInputObjectType)(inputObjectDef)) {
 | |
|         const inputFieldDef = inputObjectDef.getFields()[node.name.value];
 | |
|         const deprecationReason =
 | |
|           inputFieldDef === null || inputFieldDef === void 0
 | |
|             ? void 0
 | |
|             : inputFieldDef.deprecationReason;
 | |
| 
 | |
|         if (deprecationReason != null) {
 | |
|           context.reportError(
 | |
|             new _GraphQLError.GraphQLError(
 | |
|               `The input field ${inputObjectDef.name}.${inputFieldDef.name} is deprecated. ${deprecationReason}`,
 | |
|               {
 | |
|                 nodes: node,
 | |
|               },
 | |
|             ),
 | |
|           );
 | |
|         }
 | |
|       }
 | |
|     },
 | |
| 
 | |
|     EnumValue(node) {
 | |
|       const enumValueDef = context.getEnumValue();
 | |
|       const deprecationReason =
 | |
|         enumValueDef === null || enumValueDef === void 0
 | |
|           ? void 0
 | |
|           : enumValueDef.deprecationReason;
 | |
| 
 | |
|       if (enumValueDef && deprecationReason != null) {
 | |
|         const enumTypeDef = (0, _definition.getNamedType)(
 | |
|           context.getInputType(),
 | |
|         );
 | |
|         enumTypeDef != null || (0, _invariant.invariant)(false);
 | |
|         context.reportError(
 | |
|           new _GraphQLError.GraphQLError(
 | |
|             `The enum value "${enumTypeDef.name}.${enumValueDef.name}" is deprecated. ${deprecationReason}`,
 | |
|             {
 | |
|               nodes: node,
 | |
|             },
 | |
|           ),
 | |
|         );
 | |
|       }
 | |
|     },
 | |
|   };
 | |
| }
 |