@graphql-inspector/core
Version:
Tooling for GraphQL. Compare GraphQL Schemas, check documents, find breaking changes, find similar types.
154 lines (153 loc) • 6.45 kB
JavaScript
import { isDeprecated } from '../../utils/is-deprecated.js';
import { ChangeType, CriticalityLevel, } from './change.js';
function buildEnumValueRemovedMessage(args) {
return `Enum value '${args.removedEnumValueName}' ${args.isEnumValueDeprecated ? '(deprecated) ' : ''}was removed from enum '${args.enumName}'`;
}
const enumValueRemovedCriticalityBreakingReason = `Removing an enum value will cause existing queries that use this enum value to error.`;
export function enumValueRemovedFromMeta(args) {
return {
type: ChangeType.EnumValueRemoved,
criticality: {
level: CriticalityLevel.Breaking,
reason: enumValueRemovedCriticalityBreakingReason,
},
message: buildEnumValueRemovedMessage(args.meta),
meta: args.meta,
path: [args.meta.enumName, args.meta.removedEnumValueName].join('.'),
};
}
export function enumValueRemoved(oldEnum, value) {
return enumValueRemovedFromMeta({
type: ChangeType.EnumValueRemoved,
meta: {
enumName: oldEnum.name,
removedEnumValueName: value.name,
isEnumValueDeprecated: isDeprecated(value),
},
});
}
function buildEnumValueAddedMessage(args) {
return `Enum value '${args.meta.addedEnumValueName}' was added to enum '${args.meta.enumName}'`;
}
const enumValueAddedCriticalityDangerousReason = `Adding an enum value may break existing clients that were not programming defensively against an added case when querying an enum.`;
export function enumValueAddedFromMeta(args) {
return {
type: ChangeType.EnumValueAdded,
criticality: {
level: CriticalityLevel.Dangerous,
reason: enumValueAddedCriticalityDangerousReason,
},
message: buildEnumValueAddedMessage(args),
meta: args.meta,
path: [args.meta.enumName, args.meta.addedEnumValueName].join('.'),
};
}
export function enumValueAdded(newEnum, value) {
return enumValueAddedFromMeta({
type: ChangeType.EnumValueAdded,
meta: {
enumName: newEnum.name,
addedEnumValueName: value.name,
},
});
}
function buildEnumValueDescriptionChangedMessage(args) {
return args.oldEnumValueDescription === null
? `Description '${args.newEnumValueDescription ?? 'undefined'}' was added to enum value '${args.enumName}.${args.enumValueName}'`
: `Description for enum value '${args.enumName}.${args.enumValueName}' changed from '${args.oldEnumValueDescription ?? 'undefined'}' to '${args.newEnumValueDescription ?? 'undefined'}'`;
}
export function enumValueDescriptionChangedFromMeta(args) {
return {
criticality: {
level: CriticalityLevel.NonBreaking,
},
type: ChangeType.EnumValueDescriptionChanged,
message: buildEnumValueDescriptionChangedMessage(args.meta),
path: [args.meta.enumName, args.meta.enumValueName].join('.'),
meta: args.meta,
};
}
export function enumValueDescriptionChanged(newEnum, oldValue, newValue) {
return enumValueDescriptionChangedFromMeta({
type: ChangeType.EnumValueDescriptionChanged,
meta: {
enumName: newEnum.name,
enumValueName: oldValue.name,
oldEnumValueDescription: oldValue.description ?? null,
newEnumValueDescription: newValue.description ?? null,
},
});
}
function buildEnumValueDeprecationChangedMessage(args) {
return `Enum value '${args.enumName}.${args.enumValueName}' deprecation reason changed from '${args.oldEnumValueDeprecationReason}' to '${args.newEnumValueDeprecationReason}'`;
}
export function enumValueDeprecationReasonChangedFromMeta(args) {
return {
criticality: {
level: CriticalityLevel.NonBreaking,
},
type: ChangeType.EnumValueDeprecationReasonChanged,
message: buildEnumValueDeprecationChangedMessage(args.meta),
path: [args.meta.enumName, args.meta.enumValueName].join('.'),
meta: args.meta,
};
}
export function enumValueDeprecationReasonChanged(newEnum, oldValue, newValue) {
return enumValueDeprecationReasonChangedFromMeta({
type: ChangeType.EnumValueDeprecationReasonChanged,
meta: {
enumName: newEnum.name,
enumValueName: oldValue.name,
oldEnumValueDeprecationReason: oldValue.deprecationReason ?? '',
newEnumValueDeprecationReason: newValue.deprecationReason ?? '',
},
});
}
function buildEnumValueDeprecationReasonAddedMessage(args) {
return `Enum value '${args.enumName}.${args.enumValueName}' was deprecated with reason '${args.addedValueDeprecationReason}'`;
}
export function enumValueDeprecationReasonAddedFromMeta(args) {
return {
criticality: {
level: CriticalityLevel.NonBreaking,
},
type: ChangeType.EnumValueDeprecationReasonAdded,
message: buildEnumValueDeprecationReasonAddedMessage(args.meta),
path: [args.meta.enumName, args.meta.enumValueName].join('.'),
meta: args.meta,
};
}
export function enumValueDeprecationReasonAdded(newEnum, oldValue, newValue) {
return enumValueDeprecationReasonAddedFromMeta({
type: ChangeType.EnumValueDeprecationReasonAdded,
meta: {
enumName: newEnum.name,
enumValueName: oldValue.name,
addedValueDeprecationReason: newValue.deprecationReason ?? '',
},
});
}
function buildEnumValueDeprecationReasonRemovedMessage(args) {
return `Deprecation reason was removed from enum value '${args.enumName}.${args.enumValueName}'`;
}
export function enumValueDeprecationReasonRemovedFromMeta(args) {
return {
criticality: {
level: CriticalityLevel.NonBreaking,
},
type: ChangeType.EnumValueDeprecationReasonRemoved,
message: buildEnumValueDeprecationReasonRemovedMessage(args.meta),
path: [args.meta.enumName, args.meta.enumValueName].join('.'),
meta: args.meta,
};
}
export function enumValueDeprecationReasonRemoved(newEnum, oldValue, _newValue) {
return enumValueDeprecationReasonRemovedFromMeta({
type: ChangeType.EnumValueDeprecationReasonRemoved,
meta: {
enumName: newEnum.name,
enumValueName: oldValue.name,
removedEnumValueDeprecationReason: oldValue.deprecationReason ?? '',
},
});
}