@graphql-inspector/cli
Version:
Tooling for GraphQL. Compare GraphQL Schemas, check documents, find breaking changes, find similar types.
35 lines (34 loc) • 1.77 kB
JavaScript
import { Kind, } from 'graphql';
import { compareDirectiveLists, isNotEqual } from '../utils/compare.js';
import { defaultValuesAreEqual } from '../utils/graphql.js';
import { fieldArgumentDefaultChanged, fieldArgumentDescriptionChanged, fieldArgumentTypeChanged, } from './changes/argument.js';
import { directiveUsageAdded, directiveUsageChanged, directiveUsageRemoved, } from './changes/directive-usage.js';
export function changesInArgument(type, field, oldArg, newArg, addChange) {
if (isNotEqual(oldArg?.description, newArg.description)) {
addChange(fieldArgumentDescriptionChanged(type, field, oldArg, newArg));
}
if (!defaultValuesAreEqual(oldArg, newArg)) {
addChange(fieldArgumentDefaultChanged(type, field, oldArg, newArg));
}
if (isNotEqual(oldArg?.type.toString(), newArg.type.toString())) {
addChange(fieldArgumentTypeChanged(type, field, oldArg, newArg));
}
if (oldArg?.astNode?.directives || newArg.astNode?.directives) {
compareDirectiveLists(oldArg?.astNode?.directives || [], newArg.astNode?.directives || [], {
onAdded(directive) {
addChange(directiveUsageAdded(Kind.ARGUMENT, directive, {
argument: newArg,
field,
type,
}, oldArg === null));
directiveUsageChanged(null, directive, addChange, type, field, newArg);
},
onMutual(directive) {
directiveUsageChanged(directive.oldVersion, directive.newVersion, addChange, type, field, newArg);
},
onRemoved(directive) {
addChange(directiveUsageRemoved(Kind.ARGUMENT, directive, { argument: oldArg, field, type }));
},
});
}
}