UNPKG

@graphql-inspector/cli

Version:

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

291 lines (290 loc) • 14 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.directiveArgumentTypeChanged = exports.directiveArgumentTypeChangedFromMeta = exports.directiveArgumentDefaultValueChanged = exports.directiveArgumentDefaultValueChangedFromMeta = exports.directiveArgumentDescriptionChanged = exports.directiveArgumentDescriptionChangedFromMeta = exports.directiveArgumentRemoved = exports.directiveArgumentRemovedFromMeta = exports.directiveArgumentAdded = exports.directiveArgumentAddedFromMeta = exports.directiveLocationRemoved = exports.directiveLocationRemovedFromMeta = exports.directiveLocationAdded = exports.directiveLocationAddedFromMeta = exports.directiveDescriptionChanged = exports.directiveDescriptionChangedFromMeta = exports.directiveAdded = exports.directiveAddedFromMeta = exports.directiveRemoved = exports.directiveRemovedFromMeta = void 0; const graphql_1 = require("graphql"); const graphql_js_1 = require("../../utils/graphql.js"); const string_js_1 = require("../../utils/string.js"); const change_js_1 = require("./change.js"); function buildDirectiveRemovedMessage(args) { return `Directive '${args.removedDirectiveName}' was removed`; } const directiveRemovedCriticalityBreakingReason = `A directive could be in use of a client application. Removing it could break the client application.`; function directiveRemovedFromMeta(args) { return { criticality: { level: change_js_1.CriticalityLevel.Breaking, reason: directiveRemovedCriticalityBreakingReason, }, type: change_js_1.ChangeType.DirectiveRemoved, message: buildDirectiveRemovedMessage(args.meta), path: `@${args.meta.removedDirectiveName}`, meta: args.meta, }; } exports.directiveRemovedFromMeta = directiveRemovedFromMeta; function directiveRemoved(directive) { return directiveRemovedFromMeta({ type: change_js_1.ChangeType.DirectiveRemoved, meta: { removedDirectiveName: directive.name, }, }); } exports.directiveRemoved = directiveRemoved; function buildDirectiveAddedMessage(args) { return `Directive '${args.addedDirectiveName}' was added`; } function directiveAddedFromMeta(args) { return { criticality: { level: change_js_1.CriticalityLevel.NonBreaking, }, type: change_js_1.ChangeType.DirectiveAdded, message: buildDirectiveAddedMessage(args.meta), path: `@${args.meta.addedDirectiveName}`, meta: args.meta, }; } exports.directiveAddedFromMeta = directiveAddedFromMeta; function directiveAdded(directive) { return directiveAddedFromMeta({ type: change_js_1.ChangeType.DirectiveAdded, meta: { addedDirectiveName: directive.name, }, }); } exports.directiveAdded = directiveAdded; function buildDirectiveDescriptionChangedMessage(args) { return `Directive '${args.directiveName}' description changed from '${args.oldDirectiveDescription ?? 'undefined'}' to '${args.newDirectiveDescription ?? 'undefined'}'`; } function directiveDescriptionChangedFromMeta(args) { return { criticality: { level: change_js_1.CriticalityLevel.NonBreaking, }, type: change_js_1.ChangeType.DirectiveDescriptionChanged, message: buildDirectiveDescriptionChangedMessage(args.meta), path: `@${args.meta.directiveName}`, meta: args.meta, }; } exports.directiveDescriptionChangedFromMeta = directiveDescriptionChangedFromMeta; function directiveDescriptionChanged(oldDirective, newDirective) { return directiveDescriptionChangedFromMeta({ type: change_js_1.ChangeType.DirectiveDescriptionChanged, meta: { directiveName: oldDirective.name, oldDirectiveDescription: oldDirective.description ?? null, newDirectiveDescription: newDirective.description ?? null, }, }); } exports.directiveDescriptionChanged = directiveDescriptionChanged; function buildDirectiveLocationAddedMessage(args) { return `Location '${args.addedDirectiveLocation}' was added to directive '${args.directiveName}'`; } function directiveLocationAddedFromMeta(args) { return { criticality: { level: change_js_1.CriticalityLevel.NonBreaking, }, type: change_js_1.ChangeType.DirectiveLocationAdded, message: buildDirectiveLocationAddedMessage(args.meta), path: `@${args.meta.directiveName}`, meta: args.meta, }; } exports.directiveLocationAddedFromMeta = directiveLocationAddedFromMeta; function directiveLocationAdded(directive, location) { return directiveLocationAddedFromMeta({ type: change_js_1.ChangeType.DirectiveLocationAdded, meta: { directiveName: directive.name, addedDirectiveLocation: location.toString(), }, }); } exports.directiveLocationAdded = directiveLocationAdded; function buildDirectiveLocationRemovedMessage(args) { return `Location '${args.removedDirectiveLocation}' was removed from directive '${args.directiveName}'`; } const directiveLocationRemovedBreakingReason = `A directive could be in use of a client application. Removing it could break the client application.`; function directiveLocationRemovedFromMeta(args) { return { criticality: { level: change_js_1.CriticalityLevel.Breaking, reason: directiveLocationRemovedBreakingReason, }, type: change_js_1.ChangeType.DirectiveLocationRemoved, message: buildDirectiveLocationRemovedMessage(args.meta), path: `@${args.meta.directiveName}`, meta: args.meta, }; } exports.directiveLocationRemovedFromMeta = directiveLocationRemovedFromMeta; function directiveLocationRemoved(directive, location) { return directiveLocationRemovedFromMeta({ type: change_js_1.ChangeType.DirectiveLocationRemoved, meta: { directiveName: directive.name, removedDirectiveLocation: location.toString(), }, }); } exports.directiveLocationRemoved = directiveLocationRemoved; const directiveArgumentAddedBreakingReason = `A directive could be in use of a client application. Adding a non-nullable argument will break those clients.`; const directiveArgumentNonBreakingReason = `A directive could be in use of a client application. Adding a non-nullable argument will break those clients.`; function directiveArgumentAddedFromMeta(args) { return { criticality: args.meta.addedDirectiveArgumentTypeIsNonNull ? { level: change_js_1.CriticalityLevel.Breaking, reason: directiveArgumentAddedBreakingReason, } : { level: change_js_1.CriticalityLevel.NonBreaking, reason: directiveArgumentNonBreakingReason, }, type: change_js_1.ChangeType.DirectiveArgumentAdded, message: `Argument '${args.meta.addedDirectiveArgumentName}' was added to directive '${args.meta.directiveName}'`, path: `@${args.meta.directiveName}`, meta: args.meta, }; } exports.directiveArgumentAddedFromMeta = directiveArgumentAddedFromMeta; function directiveArgumentAdded(directive, arg) { return directiveArgumentAddedFromMeta({ type: change_js_1.ChangeType.DirectiveArgumentAdded, meta: { directiveName: directive.name, addedDirectiveArgumentName: arg.name, addedDirectiveArgumentTypeIsNonNull: (0, graphql_1.isNonNullType)(arg.type), }, }); } exports.directiveArgumentAdded = directiveArgumentAdded; function buildDirectiveArgumentRemovedMessage(args) { return `Argument '${args.removedDirectiveArgumentName}' was removed from directive '${args.directiveName}'`; } const directiveArgumentRemovedBreakingReason = `A directive argument could be in use of a client application. Removing the argument can break client applications.`; function directiveArgumentRemovedFromMeta(args) { return { criticality: { level: change_js_1.CriticalityLevel.Breaking, reason: directiveArgumentRemovedBreakingReason, }, type: change_js_1.ChangeType.DirectiveArgumentRemoved, message: buildDirectiveArgumentRemovedMessage(args.meta), path: `@${args.meta.directiveName}.${args.meta.removedDirectiveArgumentName}`, meta: args.meta, }; } exports.directiveArgumentRemovedFromMeta = directiveArgumentRemovedFromMeta; function directiveArgumentRemoved(directive, arg) { return directiveArgumentRemovedFromMeta({ type: change_js_1.ChangeType.DirectiveArgumentRemoved, meta: { directiveName: directive.name, removedDirectiveArgumentName: arg.name, }, }); } exports.directiveArgumentRemoved = directiveArgumentRemoved; function buildDirectiveArgumentDescriptionChangedMessage(args) { return `Description for argument '${args.directiveArgumentName}' on directive '${args.directiveName}' changed from '${args.oldDirectiveArgumentDescription}' to '${args.newDirectiveArgumentDescription}'`; } function directiveArgumentDescriptionChangedFromMeta(args) { return { criticality: { level: change_js_1.CriticalityLevel.NonBreaking, }, type: change_js_1.ChangeType.DirectiveArgumentDescriptionChanged, message: buildDirectiveArgumentDescriptionChangedMessage(args.meta), path: `@${args.meta.directiveName}.${args.meta.directiveArgumentName}`, meta: args.meta, }; } exports.directiveArgumentDescriptionChangedFromMeta = directiveArgumentDescriptionChangedFromMeta; function directiveArgumentDescriptionChanged(directive, oldArg, newArg) { return directiveArgumentDescriptionChangedFromMeta({ type: change_js_1.ChangeType.DirectiveArgumentDescriptionChanged, meta: { directiveName: directive.name, directiveArgumentName: oldArg.name, oldDirectiveArgumentDescription: oldArg.description ?? null, newDirectiveArgumentDescription: newArg.description ?? null, }, }); } exports.directiveArgumentDescriptionChanged = directiveArgumentDescriptionChanged; function buildDirectiveArgumentDefaultValueChanged(args) { return args.oldDirectiveArgumentDefaultValue === undefined ? `Default value '${args.newDirectiveArgumentDefaultValue}' was added to argument '${args.directiveArgumentName}' on directive '${args.directiveName}'` : `Default value for argument '${args.directiveArgumentName}' on directive '${args.directiveName}' changed from '${args.oldDirectiveArgumentDefaultValue}' to '${args.newDirectiveArgumentDefaultValue}'`; } const directiveArgumentDefaultValueChangedDangerousReason = 'Changing the default value for an argument may change the runtime behaviour of a field if it was never provided.'; function directiveArgumentDefaultValueChangedFromMeta(args) { return { criticality: { level: change_js_1.CriticalityLevel.Dangerous, reason: directiveArgumentDefaultValueChangedDangerousReason, }, type: change_js_1.ChangeType.DirectiveArgumentDefaultValueChanged, message: buildDirectiveArgumentDefaultValueChanged(args.meta), path: `@${args.meta.directiveName}.${args.meta.directiveArgumentName}`, meta: args.meta, }; } exports.directiveArgumentDefaultValueChangedFromMeta = directiveArgumentDefaultValueChangedFromMeta; function directiveArgumentDefaultValueChanged(directive, oldArg, newArg) { const meta = { directiveName: directive.name, directiveArgumentName: oldArg.name, }; if (oldArg.defaultValue !== undefined) { meta.oldDirectiveArgumentDefaultValue = (0, string_js_1.safeString)(oldArg.defaultValue); } if (newArg.defaultValue !== undefined) { meta.newDirectiveArgumentDefaultValue = (0, string_js_1.safeString)(newArg.defaultValue); } return directiveArgumentDefaultValueChangedFromMeta({ type: change_js_1.ChangeType.DirectiveArgumentDefaultValueChanged, meta, }); } exports.directiveArgumentDefaultValueChanged = directiveArgumentDefaultValueChanged; function buildDirectiveArgumentTypeChangedMessage(args) { return `Type for argument '${args.meta.directiveArgumentName}' on directive '${args.meta.directiveName}' changed from '${args.meta.oldDirectiveArgumentType}' to '${args.meta.newDirectiveArgumentType}'`; } const directiveArgumentTypeChangedNonBreakingReason = 'Changing an input field from non-null to null is considered non-breaking.'; function directiveArgumentTypeChangedFromMeta(args) { return { criticality: args.meta.isSafeDirectiveArgumentTypeChange ? { level: change_js_1.CriticalityLevel.NonBreaking, reason: directiveArgumentTypeChangedNonBreakingReason, } : { level: change_js_1.CriticalityLevel.Breaking, }, type: change_js_1.ChangeType.DirectiveArgumentTypeChanged, message: buildDirectiveArgumentTypeChangedMessage(args), path: `@${args.meta.directiveName}.${args.meta.directiveArgumentName}`, meta: args.meta, }; } exports.directiveArgumentTypeChangedFromMeta = directiveArgumentTypeChangedFromMeta; function directiveArgumentTypeChanged(directive, oldArg, newArg) { return directiveArgumentTypeChangedFromMeta({ type: change_js_1.ChangeType.DirectiveArgumentTypeChanged, meta: { directiveName: directive.name, directiveArgumentName: oldArg.name, oldDirectiveArgumentType: oldArg.type.toString(), newDirectiveArgumentType: newArg.type.toString(), isSafeDirectiveArgumentTypeChange: (0, graphql_js_1.safeChangeForInputValue)(oldArg.type, newArg.type), }, }); } exports.directiveArgumentTypeChanged = directiveArgumentTypeChanged;