@graphql-inspector/core
Version:
Tooling for GraphQL. Compare GraphQL Schemas, check documents, find breaking changes, find similar types.
48 lines (47 loc) • 2.39 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.changesInInterface = changesInInterface;
const graphql_1 = require("graphql");
const compare_js_1 = require("../utils/compare.js");
const directive_usage_js_1 = require("./changes/directive-usage.js");
const field_js_1 = require("./changes/field.js");
const object_js_1 = require("./changes/object.js");
const field_js_2 = require("./field.js");
function changesInInterface(oldInterface, newInterface, addChange) {
const oldInterfaces = oldInterface?.getInterfaces() ?? [];
const newInterfaces = newInterface.getInterfaces();
(0, compare_js_1.compareLists)(oldInterfaces, newInterfaces, {
onAdded(i) {
addChange((0, object_js_1.objectTypeInterfaceAdded)(i, newInterface, oldInterface === null));
},
onRemoved(i) {
addChange((0, object_js_1.objectTypeInterfaceRemoved)(i, oldInterface));
},
});
const oldFields = oldInterface?.getFields() ?? {};
const newFields = newInterface.getFields();
(0, compare_js_1.compareLists)(Object.values(oldFields), Object.values(newFields), {
onAdded(field) {
addChange((0, field_js_1.fieldAdded)(newInterface, field));
(0, field_js_2.changesInField)(newInterface, null, field, addChange);
},
onRemoved(field) {
addChange((0, field_js_1.fieldRemoved)(oldInterface, field));
},
onMutual(field) {
(0, field_js_2.changesInField)(newInterface, field.oldVersion, field.newVersion, addChange);
},
});
(0, compare_js_1.compareDirectiveLists)(oldInterface?.astNode?.directives || [], newInterface.astNode?.directives || [], {
onAdded(directive) {
addChange((0, directive_usage_js_1.directiveUsageAdded)(graphql_1.Kind.INTERFACE_TYPE_DEFINITION, directive, newInterface, oldInterface === null));
(0, directive_usage_js_1.directiveUsageChanged)(null, directive, addChange, newInterface);
},
onMutual(directive) {
(0, directive_usage_js_1.directiveUsageChanged)(directive.oldVersion, directive.newVersion, addChange, newInterface);
},
onRemoved(directive) {
addChange((0, directive_usage_js_1.directiveUsageRemoved)(graphql_1.Kind.INTERFACE_TYPE_DEFINITION, directive, oldInterface));
},
});
}