@graphql-inspector/core
Version:
Tooling for GraphQL. Compare GraphQL Schemas, check documents, find breaking changes, find similar types.
38 lines (37 loc) • 1.84 kB
JavaScript
import { Kind, } from 'graphql';
import { compareLists, diffArrays, isNotEqual } from '../utils/compare.js';
import { fieldArgumentDefaultChanged, fieldArgumentDescriptionChanged, fieldArgumentTypeChanged, } from './changes/argument.js';
import { directiveUsageAdded, 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 (isNotEqual(oldArg.defaultValue, newArg.defaultValue)) {
if (Array.isArray(oldArg.defaultValue) && Array.isArray(newArg.defaultValue)) {
const diff = diffArrays(oldArg.defaultValue, newArg.defaultValue);
if (diff.length > 0) {
addChange(fieldArgumentDefaultChanged(type, field, oldArg, newArg));
}
}
else if (JSON.stringify(oldArg.defaultValue) !== JSON.stringify(newArg.defaultValue)) {
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) {
compareLists(oldArg.astNode.directives || [], newArg.astNode.directives || [], {
onAdded(directive) {
addChange(directiveUsageAdded(Kind.ARGUMENT, directive, {
argument: newArg,
field,
type,
}));
},
onRemoved(directive) {
addChange(directiveUsageRemoved(Kind.ARGUMENT, directive, { argument: oldArg, field, type }));
},
});
}
}