@vanta-inc/eslint-plugin-vanta
Version:
Custom ESLint rules for Vanta
55 lines (54 loc) • 2.22 kB
JavaScript
;
/**
* @fileoverview Ensure that all mutations take a unique type
*/
Object.defineProperty(exports, "__esModule", { value: true });
var graphqlutils_1 = require("../utils/graphqlutils");
var rule = {
meta: {
type: "suggestion",
docs: {
// @ts-ignore
description: "All mutations must take a unique input type",
category: "Operations",
url: "https://github.com/VantaInc/eslint-plugin-vanta/blob/main/docs/rules/mutations-inputs-unique.md",
},
},
create: function (context) {
var validatePayload = function (node) {
var _a;
var typeNames = new Set();
(_a = node.rawNode().definitions) === null || _a === void 0 ? void 0 : _a.forEach(function (definition) {
var _a;
if (definition.kind === "ObjectTypeDefinition" ||
definition.kind === "ObjectTypeExtension") {
if (definition.name.value !== "Mutation") {
return;
}
(_a = definition.fields) === null || _a === void 0 ? void 0 : _a.forEach(function (field) {
var _a;
(_a = field.arguments) === null || _a === void 0 ? void 0 : _a.forEach(function (arg) {
var inputTypeName = graphqlutils_1.extractNamedType(arg.type).name.value;
if (typeNames.has(inputTypeName)) {
context.report({
node: node,
message: "Mutation input types must be unique; reused type {{type}}",
data: {
type: inputTypeName,
},
});
return;
}
typeNames.add(inputTypeName);
});
});
}
});
};
return {
Document: validatePayload,
};
},
};
module.exports = rule;
exports.default = rule;