@graphql-eslint/eslint-plugin
Version:
GraphQL plugin for ESLint
67 lines (66 loc) • 2.2 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.rule = void 0;
const graphql_1 = require("graphql");
const utils_js_1 = require("../utils.js");
const RULE_ID = 'no-scalar-result-type-on-mutation';
exports.rule = {
meta: {
type: 'suggestion',
hasSuggestions: true,
docs: {
category: 'Schema',
description: 'Avoid scalar result type on mutation type to make sure to return a valid state.',
url: `https://the-guild.dev/graphql/eslint/rules/${RULE_ID}`,
requiresSchema: true,
examples: [
{
title: 'Incorrect',
code: /* GraphQL */ `
type Mutation {
createUser: Boolean
}
`,
},
{
title: 'Correct',
code: /* GraphQL */ `
type Mutation {
createUser: User!
}
`,
},
],
},
schema: [],
},
create(context) {
const schema = (0, utils_js_1.requireGraphQLSchemaFromContext)(RULE_ID, context);
const mutationType = schema.getMutationType();
if (!mutationType) {
return {};
}
const selector = [
`:matches(ObjectTypeDefinition, ObjectTypeExtension)[name.value=${mutationType.name}]`,
'> FieldDefinition > .gqlType Name',
].join(' ');
return {
[selector](node) {
const typeName = node.value;
const graphQLType = schema.getType(typeName);
if ((0, graphql_1.isScalarType)(graphQLType)) {
context.report({
node,
message: `Unexpected scalar result type \`${typeName}\`.`,
suggest: [
{
desc: `Remove \`${typeName}\``,
fix: fixer => fixer.remove(node),
},
],
});
}
},
};
},
};