UNPKG

@graphql-eslint/eslint-plugin

Version:
87 lines (86 loc) 2.74 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.rule = void 0; const utils_js_1 = require("../utils.js"); const schema = { type: 'array', minItems: 1, maxItems: 1, items: { type: 'object', additionalProperties: false, required: ['disallow'], properties: { disallow: { ...utils_js_1.ARRAY_DEFAULT_OPTIONS, items: { enum: ['mutation', 'subscription'], }, }, }, }, }; exports.rule = { meta: { type: 'suggestion', hasSuggestions: true, docs: { category: 'Schema', description: 'Disallow using root types `mutation` and/or `subscription`.', url: 'https://the-guild.dev/graphql/eslint/rules/no-root-type', requiresSchema: true, isDisabledForAllConfig: true, examples: [ { title: 'Incorrect', usage: [{ disallow: ['mutation', 'subscription'] }], code: /* GraphQL */ ` type Mutation { createUser(input: CreateUserInput!): User! } `, }, { title: 'Correct', usage: [{ disallow: ['mutation', 'subscription'] }], code: /* GraphQL */ ` type Query { users: [User!]! } `, }, ], }, schema, }, create(context) { const schema = (0, utils_js_1.requireGraphQLSchemaFromContext)('no-root-type', context); const disallow = new Set(context.options[0].disallow); const rootTypeNames = [ disallow.has('mutation') && schema.getMutationType(), disallow.has('subscription') && schema.getSubscriptionType(), ] .filter(utils_js_1.truthy) .map(type => type.name) .join('|'); if (!rootTypeNames) { return {}; } const selector = `:matches(ObjectTypeDefinition, ObjectTypeExtension) > .name[value=/^(${rootTypeNames})$/]`; return { [selector](node) { const typeName = node.value; context.report({ node, message: `Root type \`${typeName}\` is forbidden.`, suggest: [ { desc: `Remove \`${typeName}\` type`, fix: fixer => fixer.remove(node.parent), }, ], }); }, }; }, };