UNPKG

@graphql-inspector/core

Version:

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

108 lines (107 loc) 5.26 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.fieldArgumentDescriptionChangedFromMeta = fieldArgumentDescriptionChangedFromMeta; exports.fieldArgumentDescriptionChanged = fieldArgumentDescriptionChanged; exports.fieldArgumentDefaultChangedFromMeta = fieldArgumentDefaultChangedFromMeta; exports.fieldArgumentDefaultChanged = fieldArgumentDefaultChanged; exports.fieldArgumentTypeChangedFromMeta = fieldArgumentTypeChangedFromMeta; exports.fieldArgumentTypeChanged = fieldArgumentTypeChanged; const graphql_js_1 = require("../../utils/graphql.js"); const string_js_1 = require("../../utils/string.js"); const change_js_1 = require("./change.js"); function buildFieldArgumentDescriptionChangedMessage(args) { return `Description for argument '${args.argumentName}' on field '${args.typeName}.${args.fieldName}' changed from '${args.oldDescription}' to '${args.newDescription}'`; } function fieldArgumentDescriptionChangedFromMeta(args) { return { type: change_js_1.ChangeType.FieldArgumentDescriptionChanged, criticality: { level: change_js_1.CriticalityLevel.NonBreaking, }, message: buildFieldArgumentDescriptionChangedMessage(args.meta), meta: args.meta, path: [args.meta.typeName, args.meta.fieldName, args.meta.argumentName].join('.'), }; } function fieldArgumentDescriptionChanged(type, field, oldArg, newArg) { return fieldArgumentDescriptionChangedFromMeta({ type: change_js_1.ChangeType.FieldArgumentDescriptionChanged, meta: { typeName: type.name, fieldName: field.name, argumentName: oldArg.name, oldDescription: oldArg.description ?? null, newDescription: newArg.description ?? null, }, }); } function buildFieldArgumentDefaultChangedMessage(args) { return args.oldDefaultValue === undefined ? `Default value '${args.newDefaultValue}' was added to argument '${args.argumentName}' on field '${args.typeName}.${args.fieldName}'` : `Default value for argument '${args.argumentName}' on field '${args.typeName}.${args.fieldName}' changed from '${args.oldDefaultValue}' to '${args.newDefaultValue}'`; } const fieldArgumentDefaultChangedCriticalityDangerousReason = 'Changing the default value for an argument may change the runtime behaviour of a field if it was never provided.'; function fieldArgumentDefaultChangedFromMeta(args) { return { type: change_js_1.ChangeType.FieldArgumentDefaultChanged, criticality: { level: change_js_1.CriticalityLevel.Dangerous, reason: fieldArgumentDefaultChangedCriticalityDangerousReason, }, message: buildFieldArgumentDefaultChangedMessage(args.meta), meta: args.meta, path: [args.meta.typeName, args.meta.fieldName, args.meta.argumentName].join('.'), }; } function fieldArgumentDefaultChanged(type, field, oldArg, newArg) { const meta = { typeName: type.name, fieldName: field.name, argumentName: newArg.name, }; if (oldArg.defaultValue !== undefined) { meta.oldDefaultValue = (0, string_js_1.safeString)(oldArg.defaultValue); } if (newArg.defaultValue !== undefined) { meta.newDefaultValue = (0, string_js_1.safeString)(newArg.defaultValue); } return fieldArgumentDefaultChangedFromMeta({ type: change_js_1.ChangeType.FieldArgumentDefaultChanged, meta, }); } function buildFieldArgumentTypeChangedMessage(args) { return `Type for argument '${args.argumentName}' on field '${args.typeName}.${args.fieldName}' changed from '${args.oldArgumentType}' to '${args.newArgumentType}'`; } const fieldArgumentTypeChangedCriticalityNonBreakingReason = `Changing an input field from non-null to null is considered non-breaking.`; const fieldArgumentTypeChangedCriticalityBreakingReason = `Changing the type of a field's argument can cause existing queries that use this argument to error.`; function fieldArgumentTypeChangedFromMeta(args) { return { type: change_js_1.ChangeType.FieldArgumentTypeChanged, criticality: args.meta.isSafeArgumentTypeChange ? { level: change_js_1.CriticalityLevel.NonBreaking, reason: fieldArgumentTypeChangedCriticalityNonBreakingReason, } : { level: change_js_1.CriticalityLevel.Breaking, reason: fieldArgumentTypeChangedCriticalityBreakingReason, }, message: buildFieldArgumentTypeChangedMessage(args.meta), meta: args.meta, path: [args.meta.typeName, args.meta.fieldName, args.meta.argumentName].join('.'), }; } function fieldArgumentTypeChanged(type, field, oldArg, newArg) { return fieldArgumentTypeChangedFromMeta({ type: change_js_1.ChangeType.FieldArgumentTypeChanged, meta: { typeName: type.name, fieldName: field.name, argumentName: newArg.name, oldArgumentType: oldArg.type.toString(), newArgumentType: newArg.type.toString(), isSafeArgumentTypeChange: (0, graphql_js_1.safeChangeForInputValue)(oldArg.type, newArg.type), }, }); }