123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- import { invariant } from '../../../jsutils/invariant.mjs';
- import { GraphQLError } from '../../../error/GraphQLError.mjs';
- import { getNamedType, isInputObjectType } from '../../../type/definition.mjs';
- /**
- * 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.
- */
- export 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 || invariant(false);
- context.reportError(
- new 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(
- `Directive "@${directiveDef.name}" argument "${argDef.name}" is deprecated. ${deprecationReason}`,
- {
- nodes: node,
- },
- ),
- );
- } else {
- const parentType = context.getParentType();
- const fieldDef = context.getFieldDef();
- (parentType != null && fieldDef != null) || invariant(false);
- context.reportError(
- new GraphQLError(
- `Field "${parentType.name}.${fieldDef.name}" argument "${argDef.name}" is deprecated. ${deprecationReason}`,
- {
- nodes: node,
- },
- ),
- );
- }
- }
- },
- ObjectField(node) {
- const inputObjectDef = getNamedType(context.getParentInputType());
- if (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(
- `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 = getNamedType(context.getInputType());
- enumTypeDef != null || invariant(false);
- context.reportError(
- new GraphQLError(
- `The enum value "${enumTypeDef.name}.${enumValueDef.name}" is deprecated. ${deprecationReason}`,
- {
- nodes: node,
- },
- ),
- );
- }
- },
- };
- }
|