UNPKG

@graphql-eslint/eslint-plugin

Version:
91 lines (88 loc) 2.96 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.rule = exports.checkNode = void 0; const path_1 = require("path"); const graphql_1 = require("graphql"); const utils_js_1 = require("../utils.js"); const RULE_ID = 'unique-fragment-name'; const checkNode = (context, node, ruleId) => { const documentName = node.name.value; const siblings = (0, utils_js_1.requireSiblingsOperations)(ruleId, context); const siblingDocuments = node.kind === graphql_1.Kind.FRAGMENT_DEFINITION ? siblings.getFragment(documentName) : siblings.getOperation(documentName); const filepath = context.getFilename(); const conflictingDocuments = siblingDocuments.filter(f => { var _a; const isSameName = ((_a = f.document.name) === null || _a === void 0 ? void 0 : _a.value) === documentName; const isSamePath = (0, utils_js_1.normalizePath)(f.filePath) === (0, utils_js_1.normalizePath)(filepath); return isSameName && !isSamePath; }); if (conflictingDocuments.length > 0) { context.report({ messageId: ruleId, data: { documentName, summary: conflictingDocuments .map(f => `\t${(0, path_1.relative)(utils_js_1.CWD, f.filePath.replace(utils_js_1.VIRTUAL_DOCUMENT_REGEX, ''))}`) .join('\n'), }, node: node.name, }); } }; exports.checkNode = checkNode; exports.rule = { meta: { type: 'suggestion', docs: { category: 'Operations', description: 'Enforce unique fragment names across your project.', url: `https://github.com/B2o5T/graphql-eslint/blob/master/docs/rules/${RULE_ID}.md`, requiresSiblings: true, examples: [ { title: 'Incorrect', code: /* GraphQL */ ` # user.fragment.graphql fragment UserFields on User { id name fullName } # user-fields.graphql fragment UserFields on User { id } `, }, { title: 'Correct', code: /* GraphQL */ ` # user.fragment.graphql fragment AllUserFields on User { id name fullName } # user-fields.graphql fragment UserFields on User { id } `, }, ], }, messages: { [RULE_ID]: 'Fragment named "{{ documentName }}" already defined in:\n{{ summary }}', }, schema: [], }, create(context) { return { FragmentDefinition(node) { (0, exports.checkNode)(context, node, RULE_ID); }, }; }, };