UNPKG

@graphql-eslint/eslint-plugin

Version:
73 lines (72 loc) 1.85 kB
import { Kind } from "graphql"; import { getNodeName } from "../../utils.js"; const rule = { meta: { type: "suggestion", hasSuggestions: true, docs: { url: "https://the-guild.dev/graphql/eslint/rules/unique-enum-value-names", category: "Schema", recommended: true, description: `A GraphQL enum type is only valid if all its values are uniquely named. > This rule disallows case-insensitive enum values duplicates too.`, examples: [ { title: "Incorrect", code: ( /* GraphQL */ ` enum MyEnum { Value VALUE ValuE } ` ) }, { title: "Correct", code: ( /* GraphQL */ ` enum MyEnum { Value1 Value2 Value3 } ` ) } ] }, schema: [] }, create(context) { const selector = [Kind.ENUM_TYPE_DEFINITION, Kind.ENUM_TYPE_EXTENSION].join(","); return { [selector](node) { const duplicates = node.values?.filter( (item, index, array) => array.findIndex((v) => v.name.value.toLowerCase() === item.name.value.toLowerCase()) !== index ); for (const duplicate of duplicates || []) { const enumName = duplicate.name.value; context.report({ node: duplicate.name, message: `Unexpected case-insensitive enum values duplicates for ${getNodeName( duplicate )}`, suggest: [ { desc: `Remove \`${enumName}\` enum value`, fix: (fixer) => fixer.remove(duplicate) } ] }); } } }; } }; export { rule };