UniqueFragmentNamesRule.js 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. 'use strict';
  2. Object.defineProperty(exports, '__esModule', {
  3. value: true,
  4. });
  5. exports.UniqueFragmentNamesRule = UniqueFragmentNamesRule;
  6. var _GraphQLError = require('../../error/GraphQLError.js');
  7. /**
  8. * Unique fragment names
  9. *
  10. * A GraphQL document is only valid if all defined fragments have unique names.
  11. *
  12. * See https://spec.graphql.org/draft/#sec-Fragment-Name-Uniqueness
  13. */
  14. function UniqueFragmentNamesRule(context) {
  15. const knownFragmentNames = Object.create(null);
  16. return {
  17. OperationDefinition: () => false,
  18. FragmentDefinition(node) {
  19. const fragmentName = node.name.value;
  20. if (knownFragmentNames[fragmentName]) {
  21. context.reportError(
  22. new _GraphQLError.GraphQLError(
  23. `There can be only one fragment named "${fragmentName}".`,
  24. {
  25. nodes: [knownFragmentNames[fragmentName], node.name],
  26. },
  27. ),
  28. );
  29. } else {
  30. knownFragmentNames[fragmentName] = node.name;
  31. }
  32. return false;
  33. },
  34. };
  35. }