UNPKG

@graphql-inspector/core

Version:

Tooling for GraphQL. Compare GraphQL Schemas, check documents, find breaking changes, find similar types.

48 lines (47 loc) 2.21 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.changesInObject = changesInObject; 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 changesInObject(oldType, newType, addChange) { const oldInterfaces = oldType?.getInterfaces() ?? []; const newInterfaces = newType.getInterfaces(); const oldFields = oldType?.getFields() ?? {}; const newFields = newType.getFields(); (0, compare_js_1.compareLists)(oldInterfaces, newInterfaces, { onAdded(i) { addChange((0, object_js_1.objectTypeInterfaceAdded)(i, newType, oldType === null)); }, onRemoved(i) { addChange((0, object_js_1.objectTypeInterfaceRemoved)(i, oldType)); }, }); (0, compare_js_1.compareLists)(Object.values(oldFields), Object.values(newFields), { onAdded(f) { addChange((0, field_js_1.fieldAdded)(newType, f)); (0, field_js_2.changesInField)(newType, null, f, addChange); }, onRemoved(f) { addChange((0, field_js_1.fieldRemoved)(oldType, f)); }, onMutual(f) { (0, field_js_2.changesInField)(newType, f.oldVersion, f.newVersion, addChange); }, }); (0, compare_js_1.compareDirectiveLists)(oldType?.astNode?.directives || [], newType.astNode?.directives || [], { onAdded(directive) { addChange((0, directive_usage_js_1.directiveUsageAdded)(graphql_1.Kind.OBJECT, directive, newType, oldType === null)); (0, directive_usage_js_1.directiveUsageChanged)(null, directive, addChange, newType); }, onMutual(directive) { (0, directive_usage_js_1.directiveUsageChanged)(directive.oldVersion, directive.newVersion, addChange, newType); }, onRemoved(directive) { addChange((0, directive_usage_js_1.directiveUsageRemoved)(graphql_1.Kind.OBJECT, directive, oldType)); }, }); }