UNPKG

@graphql-inspector/cli

Version:

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

86 lines (85 loc) 4 kB
/* eslint-disable unicorn/no-negated-condition */ import { Kind, OperationTypeNode } from 'graphql'; import { ValueMismatchError } from '../errors.js'; import { nameNode } from '../node-templates.js'; export function schemaMutationTypeChanged(change, schemaNodes, config, _context) { for (const schemaNode of schemaNodes) { const mutation = schemaNode.operationTypes?.find(({ operation }) => operation === OperationTypeNode.MUTATION); if (!mutation) { if (change.meta.oldMutationTypeName !== 'unknown') { config.onError(new ValueMismatchError(Kind.SCHEMA_DEFINITION, change.meta.oldMutationTypeName, 'unknown'), change); } schemaNode.operationTypes = [ ...(schemaNode.operationTypes ?? []), { kind: Kind.OPERATION_TYPE_DEFINITION, operation: OperationTypeNode.MUTATION, type: { kind: Kind.NAMED_TYPE, name: nameNode(change.meta.newMutationTypeName), }, }, ]; } else { if (mutation.type.name.value !== change.meta.oldMutationTypeName) { config.onError(new ValueMismatchError(Kind.SCHEMA_DEFINITION, change.meta.oldMutationTypeName, mutation?.type.name.value), change); } mutation.type.name = nameNode(change.meta.newMutationTypeName); } } } export function schemaQueryTypeChanged(change, schemaNodes, config, _context) { for (const schemaNode of schemaNodes) { const query = schemaNode.operationTypes?.find(({ operation }) => operation === OperationTypeNode.MUTATION); if (!query) { if (change.meta.oldQueryTypeName !== 'unknown') { config.onError(new ValueMismatchError(Kind.SCHEMA_DEFINITION, change.meta.oldQueryTypeName, 'unknown'), change); } schemaNode.operationTypes = [ ...(schemaNode.operationTypes ?? []), { kind: Kind.OPERATION_TYPE_DEFINITION, operation: OperationTypeNode.QUERY, type: { kind: Kind.NAMED_TYPE, name: nameNode(change.meta.newQueryTypeName), }, }, ]; } else { if (query.type.name.value !== change.meta.oldQueryTypeName) { config.onError(new ValueMismatchError(Kind.SCHEMA_DEFINITION, change.meta.oldQueryTypeName, query?.type.name.value), change); } query.type.name = nameNode(change.meta.newQueryTypeName); } } } export function schemaSubscriptionTypeChanged(change, schemaNodes, config, _context) { for (const schemaNode of schemaNodes) { const sub = schemaNode.operationTypes?.find(({ operation }) => operation === OperationTypeNode.SUBSCRIPTION); if (!sub) { if (change.meta.oldSubscriptionTypeName !== 'unknown') { config.onError(new ValueMismatchError(Kind.SCHEMA_DEFINITION, change.meta.oldSubscriptionTypeName, 'unknown'), change); } schemaNode.operationTypes = [ ...(schemaNode.operationTypes ?? []), { kind: Kind.OPERATION_TYPE_DEFINITION, operation: OperationTypeNode.QUERY, type: { kind: Kind.NAMED_TYPE, name: nameNode(change.meta.newSubscriptionTypeName), }, }, ]; } else { if (sub.type.name.value !== change.meta.oldSubscriptionTypeName) { config.onError(new ValueMismatchError(Kind.SCHEMA_DEFINITION, change.meta.oldSubscriptionTypeName, sub?.type.name.value), change); } sub.type.name = nameNode(change.meta.newSubscriptionTypeName); } } }