UNPKG

@graphql-inspector/action

Version:

GraphQL Inspector functionality for GitHub Actions

112 lines (111 loc) 5.75 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.schemaMutationTypeChanged = schemaMutationTypeChanged; exports.schemaQueryTypeChanged = schemaQueryTypeChanged; exports.schemaSubscriptionTypeChanged = schemaSubscriptionTypeChanged; /* eslint-disable unicorn/no-negated-condition */ const graphql_1 = require("graphql"); const errors_js_1 = require("../errors.js"); const node_templates_js_1 = require("../node-templates.js"); function schemaMutationTypeChanged(change, schemaNodes, config, _context) { for (const schemaNode of schemaNodes) { const mutation = schemaNode.operationTypes?.find(({ operation }) => operation === graphql_1.OperationTypeNode.MUTATION); if (!mutation) { if (change.meta.oldMutationTypeName !== null) { config.onError(new errors_js_1.ValueMismatchError(graphql_1.Kind.SCHEMA_DEFINITION, change.meta.oldMutationTypeName, null), change); } if (change.meta.newMutationTypeName) { schemaNode.operationTypes = [ ...(schemaNode.operationTypes ?? []), { kind: graphql_1.Kind.OPERATION_TYPE_DEFINITION, operation: graphql_1.OperationTypeNode.MUTATION, type: { kind: graphql_1.Kind.NAMED_TYPE, name: (0, node_templates_js_1.nameNode)(change.meta.newMutationTypeName), }, }, ]; } } else { if (mutation.type.name.value !== change.meta.oldMutationTypeName) { config.onError(new errors_js_1.ValueMismatchError(graphql_1.Kind.SCHEMA_DEFINITION, change.meta.oldMutationTypeName, mutation?.type.name.value), change); } if (change.meta.newMutationTypeName === null) { schemaNode.operationTypes = schemaNode.operationTypes?.filter(({ operation }) => operation !== graphql_1.OperationTypeNode.MUTATION); return; } mutation.type.name = (0, node_templates_js_1.nameNode)(change.meta.newMutationTypeName); } } } function schemaQueryTypeChanged(change, schemaNodes, config, _context) { for (const schemaNode of schemaNodes) { const query = schemaNode.operationTypes?.find(({ operation }) => operation === graphql_1.OperationTypeNode.MUTATION); if (!query) { if (change.meta.oldQueryTypeName !== null) { config.onError(new errors_js_1.ValueMismatchError(graphql_1.Kind.SCHEMA_DEFINITION, change.meta.oldQueryTypeName, null), change); } if (change.meta.newQueryTypeName) { schemaNode.operationTypes = [ ...(schemaNode.operationTypes ?? []), { kind: graphql_1.Kind.OPERATION_TYPE_DEFINITION, operation: graphql_1.OperationTypeNode.QUERY, type: { kind: graphql_1.Kind.NAMED_TYPE, name: (0, node_templates_js_1.nameNode)(change.meta.newQueryTypeName), }, }, ]; } } else { if (query.type.name.value !== change.meta.oldQueryTypeName) { config.onError(new errors_js_1.ValueMismatchError(graphql_1.Kind.SCHEMA_DEFINITION, change.meta.oldQueryTypeName, query?.type.name.value), change); } if (change.meta.newQueryTypeName === null) { schemaNode.operationTypes = schemaNode.operationTypes?.filter(({ operation }) => operation !== graphql_1.OperationTypeNode.QUERY); return; } query.type.name = (0, node_templates_js_1.nameNode)(change.meta.newQueryTypeName); } } } function schemaSubscriptionTypeChanged(change, schemaNodes, config, _context) { for (const schemaNode of schemaNodes) { const sub = schemaNode.operationTypes?.find(({ operation }) => operation === graphql_1.OperationTypeNode.SUBSCRIPTION); if (!sub) { if (change.meta.oldSubscriptionTypeName !== null) { config.onError(new errors_js_1.ValueMismatchError(graphql_1.Kind.SCHEMA_DEFINITION, change.meta.oldSubscriptionTypeName, null), change); } if (change.meta.newSubscriptionTypeName) { schemaNode.operationTypes = [ ...(schemaNode.operationTypes ?? []), { kind: graphql_1.Kind.OPERATION_TYPE_DEFINITION, operation: graphql_1.OperationTypeNode.QUERY, type: { kind: graphql_1.Kind.NAMED_TYPE, name: (0, node_templates_js_1.nameNode)(change.meta.newSubscriptionTypeName), }, }, ]; } } else { if (sub.type.name.value !== change.meta.oldSubscriptionTypeName) { config.onError(new errors_js_1.ValueMismatchError(graphql_1.Kind.SCHEMA_DEFINITION, change.meta.oldSubscriptionTypeName, sub?.type.name.value), change); } if (change.meta.newSubscriptionTypeName === null) { schemaNode.operationTypes = schemaNode.operationTypes?.filter(({ operation }) => operation !== graphql_1.OperationTypeNode.SUBSCRIPTION); return; } sub.type.name = (0, node_templates_js_1.nameNode)(change.meta.newSubscriptionTypeName); } } }