You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
132 lines
4.0 KiB
132 lines
4.0 KiB
4 months ago
|
'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,
|
||
|
},
|
||
|
),
|
||
|
);
|
||
|
}
|
||
|
},
|
||
|
};
|
||
|
}
|