@graphql-inspector/action
Version:
GraphQL Inspector functionality for GitHub Actions
59 lines (58 loc) • 3.33 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.suppressRemovalOfDeprecatedField = void 0;
const graphql_1 = require("graphql");
const is_deprecated_js_1 = require("../../utils/is-deprecated.js");
const path_js_1 = require("../../utils/path.js");
const change_js_1 = require("./../changes/change.js");
const suppressRemovalOfDeprecatedField = ({ changes, oldSchema, newSchema }) => {
return changes.map(change => {
if (change.type === change_js_1.ChangeType.FieldRemoved &&
change.criticality.level === change_js_1.CriticalityLevel.Breaking &&
change.path) {
const [typeName, fieldName] = (0, path_js_1.parsePath)(change.path);
const type = oldSchema.getType(typeName);
if ((0, graphql_1.isObjectType)(type) || (0, graphql_1.isInterfaceType)(type)) {
const field = type.getFields()[fieldName];
if ((0, is_deprecated_js_1.isDeprecated)(field)) {
return Object.assign(Object.assign({}, change), { criticality: Object.assign(Object.assign({}, change.criticality), { level: change_js_1.CriticalityLevel.Dangerous }) });
}
}
}
if (change.type === change_js_1.ChangeType.EnumValueRemoved &&
change.criticality.level === change_js_1.CriticalityLevel.Breaking &&
change.path) {
const [enumName, enumItem] = (0, path_js_1.parsePath)(change.path);
const type = oldSchema.getType(enumName);
if ((0, graphql_1.isEnumType)(type)) {
const item = type.getValue(enumItem);
if (item && (0, is_deprecated_js_1.isDeprecated)(item)) {
return Object.assign(Object.assign({}, change), { criticality: Object.assign(Object.assign({}, change.criticality), { level: change_js_1.CriticalityLevel.Dangerous }) });
}
}
}
if (change.type === change_js_1.ChangeType.InputFieldRemoved &&
change.criticality.level === change_js_1.CriticalityLevel.Breaking &&
change.path) {
const [inputName, inputItem] = (0, path_js_1.parsePath)(change.path);
const type = oldSchema.getType(inputName);
if ((0, graphql_1.isInputObjectType)(type)) {
const item = type.getFields()[inputItem];
if (item && (0, is_deprecated_js_1.isDeprecated)(item)) {
return Object.assign(Object.assign({}, change), { criticality: Object.assign(Object.assign({}, change.criticality), { level: change_js_1.CriticalityLevel.Dangerous }) });
}
}
}
if (change.type === change_js_1.ChangeType.TypeRemoved &&
change.criticality.level === change_js_1.CriticalityLevel.Breaking &&
change.path) {
const [typeName] = (0, path_js_1.parsePath)(change.path);
const type = newSchema.getType(typeName);
if (!type) {
return Object.assign(Object.assign({}, change), { criticality: Object.assign(Object.assign({}, change.criticality), { level: change_js_1.CriticalityLevel.Dangerous }) });
}
}
return change;
});
};
exports.suppressRemovalOfDeprecatedField = suppressRemovalOfDeprecatedField;