predicates.mjs 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. import { Kind } from './kinds.mjs';
  2. export function isDefinitionNode(node) {
  3. return (
  4. isExecutableDefinitionNode(node) ||
  5. isTypeSystemDefinitionNode(node) ||
  6. isTypeSystemExtensionNode(node)
  7. );
  8. }
  9. export function isExecutableDefinitionNode(node) {
  10. return (
  11. node.kind === Kind.OPERATION_DEFINITION ||
  12. node.kind === Kind.FRAGMENT_DEFINITION
  13. );
  14. }
  15. export function isSelectionNode(node) {
  16. return (
  17. node.kind === Kind.FIELD ||
  18. node.kind === Kind.FRAGMENT_SPREAD ||
  19. node.kind === Kind.INLINE_FRAGMENT
  20. );
  21. }
  22. export function isValueNode(node) {
  23. return (
  24. node.kind === Kind.VARIABLE ||
  25. node.kind === Kind.INT ||
  26. node.kind === Kind.FLOAT ||
  27. node.kind === Kind.STRING ||
  28. node.kind === Kind.BOOLEAN ||
  29. node.kind === Kind.NULL ||
  30. node.kind === Kind.ENUM ||
  31. node.kind === Kind.LIST ||
  32. node.kind === Kind.OBJECT
  33. );
  34. }
  35. export function isConstValueNode(node) {
  36. return (
  37. isValueNode(node) &&
  38. (node.kind === Kind.LIST
  39. ? node.values.some(isConstValueNode)
  40. : node.kind === Kind.OBJECT
  41. ? node.fields.some((field) => isConstValueNode(field.value))
  42. : node.kind !== Kind.VARIABLE)
  43. );
  44. }
  45. export function isTypeNode(node) {
  46. return (
  47. node.kind === Kind.NAMED_TYPE ||
  48. node.kind === Kind.LIST_TYPE ||
  49. node.kind === Kind.NON_NULL_TYPE
  50. );
  51. }
  52. export function isTypeSystemDefinitionNode(node) {
  53. return (
  54. node.kind === Kind.SCHEMA_DEFINITION ||
  55. isTypeDefinitionNode(node) ||
  56. node.kind === Kind.DIRECTIVE_DEFINITION
  57. );
  58. }
  59. export function isTypeDefinitionNode(node) {
  60. return (
  61. node.kind === Kind.SCALAR_TYPE_DEFINITION ||
  62. node.kind === Kind.OBJECT_TYPE_DEFINITION ||
  63. node.kind === Kind.INTERFACE_TYPE_DEFINITION ||
  64. node.kind === Kind.UNION_TYPE_DEFINITION ||
  65. node.kind === Kind.ENUM_TYPE_DEFINITION ||
  66. node.kind === Kind.INPUT_OBJECT_TYPE_DEFINITION
  67. );
  68. }
  69. export function isTypeSystemExtensionNode(node) {
  70. return node.kind === Kind.SCHEMA_EXTENSION || isTypeExtensionNode(node);
  71. }
  72. export function isTypeExtensionNode(node) {
  73. return (
  74. node.kind === Kind.SCALAR_TYPE_EXTENSION ||
  75. node.kind === Kind.OBJECT_TYPE_EXTENSION ||
  76. node.kind === Kind.INTERFACE_TYPE_EXTENSION ||
  77. node.kind === Kind.UNION_TYPE_EXTENSION ||
  78. node.kind === Kind.ENUM_TYPE_EXTENSION ||
  79. node.kind === Kind.INPUT_OBJECT_TYPE_EXTENSION
  80. );
  81. }