diff --git a/package-lock.json b/package-lock.json index e338e37..38c610e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "gqlint", - "version": "1.6.1", + "version": "1.8.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 53304e5..932b0f4 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,12 @@ "name": "gqlint", "version": "1.8.0", "description": "GraphQL Linter", - "keywords": ["graphql", "gql", "lint", "linter"], + "keywords": [ + "graphql", + "gql", + "lint", + "linter" + ], "repository": { "type": "git", "url": "https://github.com/happylinks/gqlint.git" @@ -14,7 +19,10 @@ "precommit": "lint-staged" }, "lint-staged": { - "*.js": ["prettier --single-quote --write", "git add"] + "*.js": [ + "prettier --single-quote --write", + "git add" + ] }, "bin": { "gqlint": "./bin/gqlint.js" diff --git a/rules/removedelete.mutations.js b/rules/removedelete.mutations.js index 7ae4504..7c4d9dc 100644 --- a/rules/removedelete.mutations.js +++ b/rules/removedelete.mutations.js @@ -58,12 +58,43 @@ const checkWrongName = (text, node, messages, name) => { } }; +function getMutationNames(ast) { + const mutationNames = []; + + visit(ast, { + ObjectTypeExtension(node) { + if ( + node.name.value !== 'Mutation' || + node.name.value === 'GraphQLMutation' + ) { + return; + } + visit(node, { + FieldDefinition(node) { + mutationNames.push(node.type.name.value); + } + }); + }, + ObjectTypeDefinition(node) { + if ( + node.name.value === 'Mutation' || + node.name.value === 'GraphQLMutation' + ) { + mutationNames.push(node.name.value); + } + } + }); + return mutationNames; +} + module.exports = function(ast, text) { const messages = []; + const mutationNames = getMutationNames(ast); + visit(ast, { ObjectTypeDefinition(node) { - if (node.name.value !== 'GraphQLMutation') { + if (mutationNames.indexOf(node.name.value) < 0) { return; } diff --git a/rules/singular.mutations.js b/rules/singular.mutations.js index 6fb8974..f058b4f 100644 --- a/rules/singular.mutations.js +++ b/rules/singular.mutations.js @@ -19,12 +19,43 @@ const getMessage = (text, name, start) => { }; }; +function getMutationNames(ast) { + const mutationNames = []; + + visit(ast, { + ObjectTypeExtension(node) { + if ( + node.name.value !== 'Mutation' || + node.name.value === 'GraphQLMutation' + ) { + return; + } + visit(node, { + FieldDefinition(node) { + mutationNames.push(node.type.name.value); + } + }); + }, + ObjectTypeDefinition(node) { + if ( + node.name.value === 'Mutation' || + node.name.value === 'GraphQLMutation' + ) { + mutationNames.push(node.name.value); + } + } + }); + return mutationNames; +} + module.exports = function(ast, text) { const messages = []; + const mutationNames = getMutationNames(ast); + visit(ast, { ObjectTypeDefinition(node) { - if (node.name.value !== 'GraphQLMutation') { + if (mutationNames.indexOf(node.name.value) < 0) { return; }