@graphql-inspector/action
Version:
GraphQL Inspector functionality for GitHub Actions
44 lines (43 loc) • 2.06 kB
JavaScript
import { compareLists, diffArrays, isNotEqual, isVoid } from '../utils/compare.js';
import { inputFieldAdded, inputFieldDefaultValueChanged, inputFieldDescriptionAdded, inputFieldDescriptionChanged, inputFieldDescriptionRemoved, inputFieldRemoved, inputFieldTypeChanged, } from './changes/input.js';
export function changesInInputObject(oldInput, newInput, addChange) {
const oldFields = oldInput.getFields();
const newFields = newInput.getFields();
compareLists(Object.values(oldFields), Object.values(newFields), {
onAdded(field) {
addChange(inputFieldAdded(newInput, field));
},
onRemoved(field) {
addChange(inputFieldRemoved(oldInput, field));
},
onMutual(field) {
changesInInputField(oldInput, field.oldVersion, field.newVersion, addChange);
},
});
}
function changesInInputField(input, oldField, newField, addChange) {
if (isNotEqual(oldField.description, newField.description)) {
if (isVoid(oldField.description)) {
addChange(inputFieldDescriptionAdded(input, newField));
}
else if (isVoid(newField.description)) {
addChange(inputFieldDescriptionRemoved(input, oldField));
}
else {
addChange(inputFieldDescriptionChanged(input, oldField, newField));
}
}
if (isNotEqual(oldField.defaultValue, newField.defaultValue)) {
if (Array.isArray(oldField.defaultValue) && Array.isArray(newField.defaultValue)) {
if (diffArrays(oldField.defaultValue, newField.defaultValue).length > 0) {
addChange(inputFieldDefaultValueChanged(input, oldField, newField));
}
}
else if (JSON.stringify(oldField.defaultValue) !== JSON.stringify(newField.defaultValue)) {
addChange(inputFieldDefaultValueChanged(input, oldField, newField));
}
}
if (isNotEqual(oldField.type.toString(), newField.type.toString())) {
addChange(inputFieldTypeChanged(input, oldField, newField));
}
}