ExecutableDefinitionsRule.js 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. 'use strict';
  2. Object.defineProperty(exports, '__esModule', {
  3. value: true,
  4. });
  5. exports.ExecutableDefinitionsRule = ExecutableDefinitionsRule;
  6. var _GraphQLError = require('../../error/GraphQLError.js');
  7. var _kinds = require('../../language/kinds.js');
  8. var _predicates = require('../../language/predicates.js');
  9. /**
  10. * Executable definitions
  11. *
  12. * A GraphQL document is only valid for execution if all definitions are either
  13. * operation or fragment definitions.
  14. *
  15. * See https://spec.graphql.org/draft/#sec-Executable-Definitions
  16. */
  17. function ExecutableDefinitionsRule(context) {
  18. return {
  19. Document(node) {
  20. for (const definition of node.definitions) {
  21. if (!(0, _predicates.isExecutableDefinitionNode)(definition)) {
  22. const defName =
  23. definition.kind === _kinds.Kind.SCHEMA_DEFINITION ||
  24. definition.kind === _kinds.Kind.SCHEMA_EXTENSION
  25. ? 'schema'
  26. : '"' + definition.name.value + '"';
  27. context.reportError(
  28. new _GraphQLError.GraphQLError(
  29. `The ${defName} definition is not executable.`,
  30. {
  31. nodes: definition,
  32. },
  33. ),
  34. );
  35. }
  36. }
  37. return false;
  38. },
  39. };
  40. }