@graphql-inspector/core
Version:
Tooling for GraphQL. Compare GraphQL Schemas, check documents, find breaking changes, find similar types.
58 lines (57 loc) • 2.87 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.changesInEnum = changesInEnum;
const graphql_1 = require("graphql");
const compare_js_1 = require("../utils/compare.js");
const directive_usage_js_1 = require("./changes/directive-usage.js");
const enum_js_1 = require("./changes/enum.js");
function changesInEnum(oldEnum, newEnum, addChange) {
(0, compare_js_1.compareLists)(oldEnum.getValues(), newEnum.getValues(), {
onAdded(value) {
addChange((0, enum_js_1.enumValueAdded)(newEnum, value));
},
onRemoved(value) {
addChange((0, enum_js_1.enumValueRemoved)(oldEnum, value));
},
onMutual(value) {
const oldValue = value.oldVersion;
const newValue = value.newVersion;
if ((0, compare_js_1.isNotEqual)(oldValue.description, newValue.description)) {
addChange((0, enum_js_1.enumValueDescriptionChanged)(newEnum, oldValue, newValue));
}
if ((0, compare_js_1.isNotEqual)(oldValue.deprecationReason, newValue.deprecationReason)) {
if ((0, compare_js_1.isVoid)(oldValue.deprecationReason)) {
addChange((0, enum_js_1.enumValueDeprecationReasonAdded)(newEnum, oldValue, newValue));
}
else if ((0, compare_js_1.isVoid)(newValue.deprecationReason)) {
addChange((0, enum_js_1.enumValueDeprecationReasonRemoved)(newEnum, oldValue, newValue));
}
else {
addChange((0, enum_js_1.enumValueDeprecationReasonChanged)(newEnum, oldValue, newValue));
}
}
(0, compare_js_1.compareLists)(oldValue.astNode?.directives || [], newValue.astNode?.directives || [], {
onAdded(directive) {
addChange((0, directive_usage_js_1.directiveUsageAdded)(graphql_1.Kind.ENUM_VALUE_DEFINITION, directive, {
type: newEnum,
value: newValue,
}));
},
onRemoved(directive) {
addChange((0, directive_usage_js_1.directiveUsageRemoved)(graphql_1.Kind.ENUM_VALUE_DEFINITION, directive, {
type: oldEnum,
value: oldValue,
}));
},
});
},
});
(0, compare_js_1.compareLists)(oldEnum.astNode?.directives || [], newEnum.astNode?.directives || [], {
onAdded(directive) {
addChange((0, directive_usage_js_1.directiveUsageAdded)(graphql_1.Kind.ENUM_TYPE_DEFINITION, directive, newEnum));
},
onRemoved(directive) {
addChange((0, directive_usage_js_1.directiveUsageRemoved)(graphql_1.Kind.ENUM_TYPE_DEFINITION, directive, newEnum));
},
});
}
;