graphql 17.0.0-beta.2 → 17.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (262) hide show
  1. package/README.md +3 -5
  2. package/__dev__/diagnostics.d.mts +1 -0
  3. package/__dev__/diagnostics.d.ts +1 -0
  4. package/__dev__/diagnostics.js +3 -0
  5. package/__dev__/diagnostics.mjs +3 -0
  6. package/diagnostics.d.mts +307 -0
  7. package/diagnostics.d.ts +307 -0
  8. package/diagnostics.js +75 -0
  9. package/diagnostics.js.map +1 -0
  10. package/diagnostics.mjs +70 -0
  11. package/diagnostics.mjs.map +1 -0
  12. package/error/GraphQLError.d.mts +3 -1
  13. package/error/GraphQLError.d.ts +3 -1
  14. package/error/GraphQLError.js +3 -3
  15. package/error/GraphQLError.js.map +1 -1
  16. package/error/GraphQLError.mjs +3 -3
  17. package/error/GraphQLError.mjs.map +1 -1
  18. package/error/locatedError.d.mts +1 -3
  19. package/error/locatedError.d.ts +1 -3
  20. package/error/locatedError.js.map +1 -1
  21. package/error/locatedError.mjs.map +1 -1
  22. package/execution/ExecutionArgs.d.mts +6 -0
  23. package/execution/ExecutionArgs.d.ts +6 -0
  24. package/execution/ExecutionArgs.js.map +1 -1
  25. package/execution/ExecutionArgs.mjs.map +1 -1
  26. package/execution/Executor.d.mts +19 -1
  27. package/execution/Executor.d.ts +19 -1
  28. package/execution/Executor.js +49 -4
  29. package/execution/Executor.js.map +1 -1
  30. package/execution/Executor.mjs +49 -4
  31. package/execution/Executor.mjs.map +1 -1
  32. package/execution/execute.d.mts +65 -44
  33. package/execution/execute.d.ts +65 -44
  34. package/execution/execute.js +73 -4
  35. package/execution/execute.js.map +1 -1
  36. package/execution/execute.mjs +73 -4
  37. package/execution/execute.mjs.map +1 -1
  38. package/execution/values.d.mts +17 -17
  39. package/execution/values.d.ts +17 -17
  40. package/execution/values.js.map +1 -1
  41. package/execution/values.mjs.map +1 -1
  42. package/index.d.mts +1 -0
  43. package/index.d.ts +1 -0
  44. package/index.js.map +1 -1
  45. package/index.mjs.map +1 -1
  46. package/language/parser.d.mts +20 -30
  47. package/language/parser.d.ts +20 -30
  48. package/language/parser.js +9 -9
  49. package/language/parser.js.map +1 -1
  50. package/language/parser.mjs +9 -9
  51. package/language/parser.mjs.map +1 -1
  52. package/language/predicates.d.mts +5 -1
  53. package/language/predicates.d.ts +5 -1
  54. package/language/predicates.js.map +1 -1
  55. package/language/predicates.mjs.map +1 -1
  56. package/language/source.d.mts +4 -5
  57. package/language/source.d.ts +4 -5
  58. package/language/source.js.map +1 -1
  59. package/language/source.mjs.map +1 -1
  60. package/language/visitor.d.mts +10 -2
  61. package/language/visitor.d.ts +10 -2
  62. package/language/visitor.js.map +1 -1
  63. package/language/visitor.mjs.map +1 -1
  64. package/package.json +2 -2
  65. package/type/definition.d.mts +96 -64
  66. package/type/definition.d.ts +96 -64
  67. package/type/definition.js.map +1 -1
  68. package/type/definition.mjs.map +1 -1
  69. package/type/directives.d.mts +3 -3
  70. package/type/directives.d.ts +3 -3
  71. package/type/directives.js.map +1 -1
  72. package/type/directives.mjs.map +1 -1
  73. package/type/schema.d.mts +4 -8
  74. package/type/schema.d.ts +4 -8
  75. package/type/schema.js.map +1 -1
  76. package/type/schema.mjs.map +1 -1
  77. package/type/validate.js +101 -30
  78. package/type/validate.js.map +1 -1
  79. package/type/validate.mjs +101 -30
  80. package/type/validate.mjs.map +1 -1
  81. package/utilities/TypeInfo.d.mts +1 -1
  82. package/utilities/TypeInfo.d.ts +1 -1
  83. package/utilities/TypeInfo.js.map +1 -1
  84. package/utilities/TypeInfo.mjs.map +1 -1
  85. package/utilities/buildASTSchema.d.mts +0 -1
  86. package/utilities/buildASTSchema.d.ts +0 -1
  87. package/utilities/buildASTSchema.js +0 -1
  88. package/utilities/buildASTSchema.js.map +1 -1
  89. package/utilities/buildASTSchema.mjs +0 -1
  90. package/utilities/buildASTSchema.mjs.map +1 -1
  91. package/utilities/buildClientSchema.d.mts +5 -1
  92. package/utilities/buildClientSchema.d.ts +5 -1
  93. package/utilities/buildClientSchema.js.map +1 -1
  94. package/utilities/buildClientSchema.mjs.map +1 -1
  95. package/utilities/coerceInputValue.d.mts +7 -6
  96. package/utilities/coerceInputValue.d.ts +7 -6
  97. package/utilities/coerceInputValue.js.map +1 -1
  98. package/utilities/coerceInputValue.mjs.map +1 -1
  99. package/utilities/concatAST.d.mts +4 -1
  100. package/utilities/concatAST.d.ts +4 -1
  101. package/utilities/concatAST.js.map +1 -1
  102. package/utilities/concatAST.mjs.map +1 -1
  103. package/utilities/extendSchema.d.mts +3 -3
  104. package/utilities/extendSchema.d.ts +3 -3
  105. package/utilities/extendSchema.js +5 -1
  106. package/utilities/extendSchema.js.map +1 -1
  107. package/utilities/extendSchema.mjs +5 -1
  108. package/utilities/extendSchema.mjs.map +1 -1
  109. package/utilities/introspectionFromSchema.d.mts +6 -2
  110. package/utilities/introspectionFromSchema.d.ts +6 -2
  111. package/utilities/introspectionFromSchema.js.map +1 -1
  112. package/utilities/introspectionFromSchema.mjs.map +1 -1
  113. package/utilities/lexicographicSortSchema.d.mts +5 -1
  114. package/utilities/lexicographicSortSchema.d.ts +5 -1
  115. package/utilities/lexicographicSortSchema.js.map +1 -1
  116. package/utilities/lexicographicSortSchema.mjs.map +1 -1
  117. package/utilities/printSchema.d.mts +5 -1
  118. package/utilities/printSchema.d.ts +5 -1
  119. package/utilities/printSchema.js.map +1 -1
  120. package/utilities/printSchema.mjs.map +1 -1
  121. package/utilities/replaceVariables.d.mts +4 -8
  122. package/utilities/replaceVariables.d.ts +4 -8
  123. package/utilities/replaceVariables.js.map +1 -1
  124. package/utilities/replaceVariables.mjs.map +1 -1
  125. package/utilities/stripIgnoredCharacters.d.mts +2 -2
  126. package/utilities/stripIgnoredCharacters.d.ts +2 -2
  127. package/utilities/stripIgnoredCharacters.js.map +1 -1
  128. package/utilities/stripIgnoredCharacters.mjs.map +1 -1
  129. package/utilities/typeComparators.d.mts +1 -5
  130. package/utilities/typeComparators.d.ts +1 -5
  131. package/utilities/typeComparators.js.map +1 -1
  132. package/utilities/typeComparators.mjs.map +1 -1
  133. package/utilities/validateInputValue.d.mts +10 -8
  134. package/utilities/validateInputValue.d.ts +10 -8
  135. package/utilities/validateInputValue.js.map +1 -1
  136. package/utilities/validateInputValue.mjs.map +1 -1
  137. package/validation/rules/DeferStreamDirectiveOnRootFieldRule.d.mts +4 -1
  138. package/validation/rules/DeferStreamDirectiveOnRootFieldRule.d.ts +4 -1
  139. package/validation/rules/DeferStreamDirectiveOnRootFieldRule.js +70 -17
  140. package/validation/rules/DeferStreamDirectiveOnRootFieldRule.js.map +1 -1
  141. package/validation/rules/DeferStreamDirectiveOnRootFieldRule.mjs +70 -17
  142. package/validation/rules/DeferStreamDirectiveOnRootFieldRule.mjs.map +1 -1
  143. package/validation/rules/DeferStreamDirectiveOnValidOperationsRule.d.mts +1 -1
  144. package/validation/rules/DeferStreamDirectiveOnValidOperationsRule.d.ts +1 -1
  145. package/validation/rules/DeferStreamDirectiveOnValidOperationsRule.js +90 -21
  146. package/validation/rules/DeferStreamDirectiveOnValidOperationsRule.js.map +1 -1
  147. package/validation/rules/DeferStreamDirectiveOnValidOperationsRule.mjs +91 -22
  148. package/validation/rules/DeferStreamDirectiveOnValidOperationsRule.mjs.map +1 -1
  149. package/validation/rules/ExecutableDefinitionsRule.d.mts +6 -2
  150. package/validation/rules/ExecutableDefinitionsRule.d.ts +6 -2
  151. package/validation/rules/ExecutableDefinitionsRule.js.map +1 -1
  152. package/validation/rules/ExecutableDefinitionsRule.mjs.map +1 -1
  153. package/validation/rules/FieldsOnCorrectTypeRule.d.mts +3 -1
  154. package/validation/rules/FieldsOnCorrectTypeRule.d.ts +3 -1
  155. package/validation/rules/FieldsOnCorrectTypeRule.js.map +1 -1
  156. package/validation/rules/FieldsOnCorrectTypeRule.mjs.map +1 -1
  157. package/validation/rules/FragmentsOnCompositeTypesRule.d.mts +6 -2
  158. package/validation/rules/FragmentsOnCompositeTypesRule.d.ts +6 -2
  159. package/validation/rules/FragmentsOnCompositeTypesRule.js.map +1 -1
  160. package/validation/rules/FragmentsOnCompositeTypesRule.mjs.map +1 -1
  161. package/validation/rules/KnownArgumentNamesRule.d.mts +3 -1
  162. package/validation/rules/KnownArgumentNamesRule.d.ts +3 -1
  163. package/validation/rules/KnownArgumentNamesRule.js.map +1 -1
  164. package/validation/rules/KnownArgumentNamesRule.mjs.map +1 -1
  165. package/validation/rules/KnownDirectivesRule.js +2 -1
  166. package/validation/rules/KnownDirectivesRule.js.map +1 -1
  167. package/validation/rules/KnownDirectivesRule.mjs +2 -1
  168. package/validation/rules/KnownDirectivesRule.mjs.map +1 -1
  169. package/validation/rules/KnownFragmentNamesRule.d.mts +3 -1
  170. package/validation/rules/KnownFragmentNamesRule.d.ts +3 -1
  171. package/validation/rules/KnownFragmentNamesRule.js.map +1 -1
  172. package/validation/rules/KnownFragmentNamesRule.mjs.map +1 -1
  173. package/validation/rules/LoneAnonymousOperationRule.d.mts +6 -2
  174. package/validation/rules/LoneAnonymousOperationRule.d.ts +6 -2
  175. package/validation/rules/LoneAnonymousOperationRule.js.map +1 -1
  176. package/validation/rules/LoneAnonymousOperationRule.mjs.map +1 -1
  177. package/validation/rules/MaxIntrospectionDepthRule.d.mts +6 -2
  178. package/validation/rules/MaxIntrospectionDepthRule.d.ts +6 -2
  179. package/validation/rules/MaxIntrospectionDepthRule.js.map +1 -1
  180. package/validation/rules/MaxIntrospectionDepthRule.mjs.map +1 -1
  181. package/validation/rules/NoUndefinedVariablesRule.d.mts +3 -1
  182. package/validation/rules/NoUndefinedVariablesRule.d.ts +3 -1
  183. package/validation/rules/NoUndefinedVariablesRule.js.map +1 -1
  184. package/validation/rules/NoUndefinedVariablesRule.mjs.map +1 -1
  185. package/validation/rules/NoUnusedFragmentsRule.d.mts +3 -1
  186. package/validation/rules/NoUnusedFragmentsRule.d.ts +3 -1
  187. package/validation/rules/NoUnusedFragmentsRule.js.map +1 -1
  188. package/validation/rules/NoUnusedFragmentsRule.mjs.map +1 -1
  189. package/validation/rules/NoUnusedVariablesRule.d.mts +3 -1
  190. package/validation/rules/NoUnusedVariablesRule.d.ts +3 -1
  191. package/validation/rules/NoUnusedVariablesRule.js.map +1 -1
  192. package/validation/rules/NoUnusedVariablesRule.mjs.map +1 -1
  193. package/validation/rules/OverlappingFieldsCanBeMergedRule.d.mts +6 -2
  194. package/validation/rules/OverlappingFieldsCanBeMergedRule.d.ts +6 -2
  195. package/validation/rules/OverlappingFieldsCanBeMergedRule.js.map +1 -1
  196. package/validation/rules/OverlappingFieldsCanBeMergedRule.mjs.map +1 -1
  197. package/validation/rules/PossibleFragmentSpreadsRule.d.mts +6 -2
  198. package/validation/rules/PossibleFragmentSpreadsRule.d.ts +6 -2
  199. package/validation/rules/PossibleFragmentSpreadsRule.js.map +1 -1
  200. package/validation/rules/PossibleFragmentSpreadsRule.mjs.map +1 -1
  201. package/validation/rules/ProvidedRequiredArgumentsRule.d.mts +6 -2
  202. package/validation/rules/ProvidedRequiredArgumentsRule.d.ts +6 -2
  203. package/validation/rules/ProvidedRequiredArgumentsRule.js.map +1 -1
  204. package/validation/rules/ProvidedRequiredArgumentsRule.mjs.map +1 -1
  205. package/validation/rules/SingleFieldSubscriptionsRule.d.mts +6 -2
  206. package/validation/rules/SingleFieldSubscriptionsRule.d.ts +6 -2
  207. package/validation/rules/SingleFieldSubscriptionsRule.js.map +1 -1
  208. package/validation/rules/SingleFieldSubscriptionsRule.mjs.map +1 -1
  209. package/validation/rules/UniqueArgumentNamesRule.d.mts +3 -1
  210. package/validation/rules/UniqueArgumentNamesRule.d.ts +3 -1
  211. package/validation/rules/UniqueArgumentNamesRule.js.map +1 -1
  212. package/validation/rules/UniqueArgumentNamesRule.mjs.map +1 -1
  213. package/validation/rules/UniqueDirectivesPerLocationRule.d.mts +6 -2
  214. package/validation/rules/UniqueDirectivesPerLocationRule.d.ts +6 -2
  215. package/validation/rules/UniqueDirectivesPerLocationRule.js.map +1 -1
  216. package/validation/rules/UniqueDirectivesPerLocationRule.mjs.map +1 -1
  217. package/validation/rules/UniqueFragmentNamesRule.d.mts +3 -1
  218. package/validation/rules/UniqueFragmentNamesRule.d.ts +3 -1
  219. package/validation/rules/UniqueFragmentNamesRule.js.map +1 -1
  220. package/validation/rules/UniqueFragmentNamesRule.mjs.map +1 -1
  221. package/validation/rules/UniqueInputFieldNamesRule.d.mts +6 -2
  222. package/validation/rules/UniqueInputFieldNamesRule.d.ts +6 -2
  223. package/validation/rules/UniqueInputFieldNamesRule.js.map +1 -1
  224. package/validation/rules/UniqueInputFieldNamesRule.mjs.map +1 -1
  225. package/validation/rules/UniqueOperationNamesRule.d.mts +3 -1
  226. package/validation/rules/UniqueOperationNamesRule.d.ts +3 -1
  227. package/validation/rules/UniqueOperationNamesRule.js.map +1 -1
  228. package/validation/rules/UniqueOperationNamesRule.mjs.map +1 -1
  229. package/validation/rules/UniqueVariableNamesRule.d.mts +3 -1
  230. package/validation/rules/UniqueVariableNamesRule.d.ts +3 -1
  231. package/validation/rules/UniqueVariableNamesRule.js.map +1 -1
  232. package/validation/rules/UniqueVariableNamesRule.mjs.map +1 -1
  233. package/validation/rules/ValuesOfCorrectTypeRule.d.mts +3 -1
  234. package/validation/rules/ValuesOfCorrectTypeRule.d.ts +3 -1
  235. package/validation/rules/ValuesOfCorrectTypeRule.js.map +1 -1
  236. package/validation/rules/ValuesOfCorrectTypeRule.mjs.map +1 -1
  237. package/validation/rules/VariablesAreInputTypesRule.d.mts +6 -2
  238. package/validation/rules/VariablesAreInputTypesRule.d.ts +6 -2
  239. package/validation/rules/VariablesAreInputTypesRule.js.map +1 -1
  240. package/validation/rules/VariablesAreInputTypesRule.mjs.map +1 -1
  241. package/validation/rules/VariablesInAllowedPositionRule.d.mts +6 -2
  242. package/validation/rules/VariablesInAllowedPositionRule.d.ts +6 -2
  243. package/validation/rules/VariablesInAllowedPositionRule.js.map +1 -1
  244. package/validation/rules/VariablesInAllowedPositionRule.mjs.map +1 -1
  245. package/validation/rules/custom/NoDeprecatedCustomRule.d.mts +3 -1
  246. package/validation/rules/custom/NoDeprecatedCustomRule.d.ts +3 -1
  247. package/validation/rules/custom/NoDeprecatedCustomRule.js.map +1 -1
  248. package/validation/rules/custom/NoDeprecatedCustomRule.mjs.map +1 -1
  249. package/validation/rules/custom/NoSchemaIntrospectionCustomRule.d.mts +6 -2
  250. package/validation/rules/custom/NoSchemaIntrospectionCustomRule.d.ts +6 -2
  251. package/validation/rules/custom/NoSchemaIntrospectionCustomRule.js.map +1 -1
  252. package/validation/rules/custom/NoSchemaIntrospectionCustomRule.mjs.map +1 -1
  253. package/validation/validate.d.mts +3 -6
  254. package/validation/validate.d.ts +3 -6
  255. package/validation/validate.js +6 -0
  256. package/validation/validate.js.map +1 -1
  257. package/validation/validate.mjs +6 -0
  258. package/validation/validate.mjs.map +1 -1
  259. package/version.js +2 -2
  260. package/version.js.map +1 -1
  261. package/version.mjs +2 -2
  262. package/version.mjs.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/type/validate.ts"],"names":[],"mappings":"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","sourcesContent":["/** @category Validation */\n\nimport { AccumulatorMap } from '../jsutils/AccumulatorMap.ts';\nimport { capitalize } from '../jsutils/capitalize.ts';\nimport { andList } from '../jsutils/formatList.ts';\nimport { inspect } from '../jsutils/inspect.ts';\nimport { invariant } from '../jsutils/invariant.ts';\nimport { isIterableObject } from '../jsutils/isIterableObject.ts';\nimport { isObjectLike } from '../jsutils/isObjectLike.ts';\nimport { keyMap } from '../jsutils/keyMap.ts';\nimport { mapValue } from '../jsutils/mapValue.ts';\nimport type { Maybe } from '../jsutils/Maybe.ts';\nimport type { ObjMap } from '../jsutils/ObjMap.ts';\nimport { printPathArray } from '../jsutils/printPathArray.ts';\n\nimport { GraphQLError } from '../error/GraphQLError.ts';\n\nimport type {\n ASTNode,\n ConstValueNode,\n DirectiveNode,\n InterfaceTypeDefinitionNode,\n InterfaceTypeExtensionNode,\n NamedTypeNode,\n ObjectTypeDefinitionNode,\n ObjectTypeExtensionNode,\n UnionTypeDefinitionNode,\n UnionTypeExtensionNode,\n} from '../language/ast.ts';\nimport { OperationTypeNode } from '../language/ast.ts';\nimport { Kind } from '../language/kinds.ts';\n\nimport { isEqualType, isTypeSubTypeOf } from '../utilities/typeComparators.ts';\nimport {\n validateInputLiteral,\n validateInputValue,\n} from '../utilities/validateInputValue.ts';\n\nimport type {\n GraphQLArgument,\n GraphQLDefaultInput,\n GraphQLEnumType,\n GraphQLInputField,\n GraphQLInputObjectType,\n GraphQLInputType,\n GraphQLInterfaceType,\n GraphQLObjectType,\n GraphQLUnionType,\n} from './definition.ts';\nimport {\n assertLeafType,\n getNamedType,\n isEnumType,\n isInputObjectType,\n isInputType,\n isInterfaceType,\n isListType,\n isNamedType,\n isNonNullType,\n isObjectType,\n isOutputType,\n isRequiredArgument,\n isRequiredInputField,\n isUnionType,\n} from './definition.ts';\nimport { GraphQLDeprecatedDirective, isDirective } from './directives.ts';\nimport { isIntrospectionType } from './introspection.ts';\nimport type { GraphQLSchema } from './schema.ts';\nimport { assertSchema } from './schema.ts';\n\n/**\n * Implements the \"Type Validation\" sub-sections of the specification's\n * \"Type System\" section.\n *\n * Validation runs synchronously, returning an array of encountered errors, or\n * an empty array if no errors were encountered and the Schema is valid.\n * @param schema - GraphQL schema to use.\n * @returns Schema validation errors, or an empty array when the schema is valid.\n * @example\n * ```ts\n * import { validateSchema } from 'graphql/type';\n * import { buildSchema } from 'graphql/utilities';\n *\n * const schema = buildSchema(`\n * type Query {\n * name: String\n * }\n * `);\n * const errors = validateSchema(schema);\n *\n * errors; // => []\n * ```\n */\nexport function validateSchema(\n schema: GraphQLSchema,\n): ReadonlyArray<GraphQLError> {\n // First check to ensure the provided value is in fact a GraphQLSchema.\n assertSchema(schema);\n\n // If this Schema has already been validated, return the previous results.\n if (schema.__validationErrors) {\n return schema.__validationErrors;\n }\n\n // Validate the schema, producing a list of errors.\n const context = new SchemaValidationContext(schema);\n validateRootTypes(context);\n validateDirectives(context);\n validateTypes(context);\n\n // Persist the results of validation before returning to ensure validation\n // does not run multiple times for this schema.\n const errors = context.getErrors();\n schema.__validationErrors = errors;\n return errors;\n}\n\n/**\n * Utility function which asserts a schema is valid by throwing an error if\n * it is invalid.\n * @param schema - GraphQL schema to use.\n * @example\n * ```ts\n * import { assertValidSchema } from 'graphql/type';\n * import { buildSchema } from 'graphql/utilities';\n *\n * const schema = buildSchema(`\n * type Query {\n * name: String\n * }\n * `);\n *\n * assertValidSchema(schema); // does not throw\n * ```\n */\nexport function assertValidSchema(schema: GraphQLSchema): void {\n const errors = validateSchema(schema);\n if (errors.length !== 0) {\n throw new Error(errors.map((error) => error.message).join('\\n\\n'));\n }\n}\n\nclass SchemaValidationContext {\n readonly _errors: Array<GraphQLError>;\n readonly schema: GraphQLSchema;\n\n constructor(schema: GraphQLSchema) {\n this._errors = [];\n this.schema = schema;\n }\n\n reportError(\n message: string,\n nodes?: ReadonlyArray<Maybe<ASTNode>> | Maybe<ASTNode>,\n ): void {\n const _nodes = Array.isArray(nodes)\n ? (nodes.filter(Boolean) as ReadonlyArray<ASTNode>)\n : (nodes as Maybe<ASTNode>);\n this._errors.push(new GraphQLError(message, { nodes: _nodes }));\n }\n\n getErrors(): ReadonlyArray<GraphQLError> {\n return this._errors;\n }\n}\n\nfunction validateRootTypes(context: SchemaValidationContext): void {\n const schema = context.schema;\n\n if (schema.getQueryType() == null) {\n context.reportError('Query root type must be provided.', schema.astNode);\n }\n\n const rootTypesMap = new AccumulatorMap<\n GraphQLObjectType,\n OperationTypeNode\n >();\n for (const operationType of Object.values(OperationTypeNode)) {\n const rootType = schema.getRootType(operationType);\n\n if (rootType != null) {\n if (!isObjectType(rootType)) {\n const operationTypeStr = capitalize(operationType);\n const rootTypeStr = inspect(rootType);\n context.reportError(\n operationType === OperationTypeNode.QUERY\n ? `${operationTypeStr} root type must be Object type, it cannot be ${rootTypeStr}.`\n : `${operationTypeStr} root type must be Object type if provided, it cannot be ${rootTypeStr}.`,\n getOperationTypeNode(schema, operationType) ??\n (rootType as any).astNode,\n );\n } else {\n rootTypesMap.add(rootType, operationType);\n }\n }\n }\n\n for (const [rootType, operationTypes] of rootTypesMap) {\n if (operationTypes.length > 1) {\n const operationList = andList(operationTypes);\n context.reportError(\n `All root types must be different, \"${rootType}\" type is used as ${operationList} root types.`,\n operationTypes.map((operationType) =>\n getOperationTypeNode(schema, operationType),\n ),\n );\n }\n }\n}\n\nfunction getOperationTypeNode(\n schema: GraphQLSchema,\n operation: OperationTypeNode,\n): Maybe<ASTNode> {\n return [schema.astNode, ...schema.extensionASTNodes]\n .flatMap((schemaNode) => schemaNode?.operationTypes ?? [])\n .find((operationNode) => operationNode.operation === operation)?.type;\n}\n\nfunction validateDirectives(context: SchemaValidationContext): void {\n for (const directive of context.schema.getDirectives()) {\n // Ensure all directives are in fact GraphQL directives.\n if (!isDirective(directive)) {\n context.reportError(\n `Expected directive but got: ${inspect(directive)}.`,\n (directive as any)?.astNode,\n );\n continue;\n }\n\n // Ensure they are named correctly.\n validateName(context, directive);\n\n if (directive.locations.length === 0) {\n context.reportError(\n `Directive ${directive} must include 1 or more locations.`,\n directive.astNode,\n );\n }\n\n // Ensure the arguments are valid.\n for (const arg of directive.args) {\n // Ensure they are named correctly.\n validateName(context, arg);\n\n // Ensure the type is an input type.\n if (!isInputType(arg.type)) {\n context.reportError(\n `The type of ${arg} must be Input Type ` +\n `but got: ${inspect(arg.type)}.`,\n arg.astNode,\n );\n }\n\n if (isRequiredArgument(arg) && arg.deprecationReason != null) {\n context.reportError(`Required argument ${arg} cannot be deprecated.`, [\n getDeprecatedDirectiveNode(arg.astNode),\n arg.astNode?.type,\n ]);\n }\n\n validateDefaultValue(context, arg);\n }\n }\n}\n\nfunction validateDefaultValue(\n context: SchemaValidationContext,\n inputValue: GraphQLArgument | GraphQLInputField,\n): void {\n const defaultInput = inputValue.default;\n\n if (!defaultInput) {\n return;\n }\n\n const errors: Array<[GraphQLError, ReadonlyArray<string | number>]> = [];\n validateDefaultInput(defaultInput, inputValue.type, (error, path) => {\n errors.push([error, path]);\n });\n\n if (errors.length === 0) {\n return;\n }\n\n if (!defaultInput.literal) {\n // If there were validation errors, check to see if it can be \"uncoerced\"\n // and then correctly validated. If so, report a clear error with a path\n // to resolution.\n try {\n const uncoercedValue = uncoerceDefaultValue(\n defaultInput.value,\n inputValue.type,\n );\n\n const uncoercedErrors = [];\n validateInputValue(uncoercedValue, inputValue.type, (error, path) => {\n uncoercedErrors.push([error, path]);\n });\n\n if (uncoercedErrors.length === 0) {\n context.reportError(\n `${inputValue} has invalid default value: ${inspect(\n defaultInput.value,\n )}. Did you mean: ${inspect(uncoercedValue)}?`,\n inputValue.astNode?.defaultValue,\n );\n return;\n }\n } catch (_error) {\n // ignore\n }\n }\n\n // Otherwise report the original set of errors.\n for (const [error, path] of errors) {\n context.reportError(\n `${inputValue} has invalid default value${printPathArray(path)}: ${\n error.message\n }`,\n error.nodes ?? inputValue.astNode?.defaultValue,\n );\n }\n}\n\n/** @internal */\nexport function validateDefaultInput(\n defaultInput: GraphQLDefaultInput,\n inputType: GraphQLInputType,\n onError: (error: GraphQLError, path: ReadonlyArray<string | number>) => void,\n hideSuggestions?: Maybe<boolean>,\n): void {\n if (defaultInput.literal) {\n validateInputLiteral(\n defaultInput.literal,\n inputType,\n onError,\n undefined,\n undefined,\n hideSuggestions,\n );\n return;\n }\n validateInputValue(defaultInput.value, inputType, onError, hideSuggestions);\n}\n\n/**\n * Historically GraphQL.js allowed default values to be provided as\n * assumed-coerced \"internal\" values, however default values should be provided\n * as \"external\" pre-coerced values. `uncoerceDefaultValue()` will convert such\n * \"internal\" values to \"external\" values to display as part of validation.\n *\n * This performs the \"opposite\" of `coerceInputValue()`. Given an \"internal\"\n * coerced value, reverse the process to provide an \"external\" uncoerced value.\n *\n * @internal\n */\nfunction uncoerceDefaultValue(value: unknown, type: GraphQLInputType): unknown {\n if (isNonNullType(type)) {\n return uncoerceDefaultValue(value, type.ofType);\n }\n\n if (value === null) {\n return null;\n }\n\n if (isListType(type)) {\n if (isIterableObject(value)) {\n return Array.from(value, (itemValue) =>\n uncoerceDefaultValue(itemValue, type.ofType),\n );\n }\n return [uncoerceDefaultValue(value, type.ofType)];\n }\n\n if (isInputObjectType(type)) {\n invariant(isObjectLike(value));\n const fieldDefs = type.getFields();\n return mapValue(value, (fieldValue, fieldName) => {\n invariant(fieldName in fieldDefs);\n return uncoerceDefaultValue(fieldValue, fieldDefs[fieldName].type);\n });\n }\n\n assertLeafType(type);\n\n // For most leaf types (Scalars, Enums), output value coercion (\"serialize\") is\n // the inverse of input coercion (\"parseValue\") and will produce an\n // \"external\" value. Historically, this method was also used as part of the\n // now-deprecated \"astFromValue\" to perform the same behavior.\n return type.coerceOutputValue(value);\n}\n\nfunction validateName(\n context: SchemaValidationContext,\n node: { readonly name: string; readonly astNode: Maybe<ASTNode> },\n): void {\n // Ensure names are valid, however introspection types opt out.\n if (node.name.startsWith('__')) {\n context.reportError(\n `Name \"${node.name}\" must not begin with \"__\", which is reserved by GraphQL introspection.`,\n node.astNode,\n );\n }\n}\n\nfunction validateTypes(context: SchemaValidationContext): void {\n // Ensure Input Objects do not contain non-nullable circular references.\n const validateInputObjectNonNullCircularRefs =\n createInputObjectNonNullCircularRefsValidator(context);\n const validateInputObjectDefaultValueCircularRefs =\n createInputObjectDefaultValueCircularRefsValidator(context);\n const typeMap = context.schema.getTypeMap();\n for (const type of Object.values(typeMap)) {\n // Ensure all provided types are in fact GraphQL type.\n if (!isNamedType(type)) {\n context.reportError(\n `Expected GraphQL named type but got: ${inspect(type)}.`,\n (type as any).astNode,\n );\n continue;\n }\n\n // Ensure it is named correctly (excluding introspection types).\n if (!isIntrospectionType(type)) {\n validateName(context, type);\n }\n\n if (isObjectType(type)) {\n // Ensure fields are valid\n validateFields(context, type);\n\n // Ensure objects implement the interfaces they claim to.\n validateInterfaces(context, type);\n } else if (isInterfaceType(type)) {\n // Ensure fields are valid.\n validateFields(context, type);\n\n // Ensure interfaces implement the interfaces they claim to.\n validateInterfaces(context, type);\n } else if (isUnionType(type)) {\n // Ensure Unions include valid member types.\n validateUnionMembers(context, type);\n } else if (isEnumType(type)) {\n // Ensure Enums have valid values.\n validateEnumValues(context, type);\n } else if (isInputObjectType(type)) {\n // Ensure Input Object fields are valid.\n validateInputFields(context, type);\n\n // Ensure Input Objects do not contain invalid field circular references.\n // Ensure Input Objects do not contain non-nullable circular references.\n validateInputObjectNonNullCircularRefs(type);\n\n // Ensure Input Objects do not contain invalid default value circular references.\n validateInputObjectDefaultValueCircularRefs(type);\n }\n }\n}\n\nfunction validateFields(\n context: SchemaValidationContext,\n type: GraphQLObjectType | GraphQLInterfaceType,\n): void {\n const fields = Object.values(type.getFields());\n\n // Objects and Interfaces both must define one or more fields.\n if (fields.length === 0) {\n context.reportError(`Type ${type} must define one or more fields.`, [\n type.astNode,\n ...type.extensionASTNodes,\n ]);\n }\n\n for (const field of fields) {\n // Ensure they are named correctly.\n validateName(context, field);\n\n // Ensure the type is an output type\n if (!isOutputType(field.type)) {\n context.reportError(\n `The type of ${field} must be Output Type ` +\n `but got: ${inspect(field.type)}.`,\n field.astNode?.type,\n );\n }\n\n // Ensure the arguments are valid\n for (const arg of field.args) {\n // Ensure they are named correctly.\n validateName(context, arg);\n\n // Ensure the type is an input type\n if (!isInputType(arg.type)) {\n context.reportError(\n `The type of ${arg} must be Input Type but got: ${inspect(arg.type)}.`,\n arg.astNode?.type,\n );\n }\n\n if (isRequiredArgument(arg) && arg.deprecationReason != null) {\n context.reportError(`Required argument ${arg} cannot be deprecated.`, [\n getDeprecatedDirectiveNode(arg.astNode),\n arg.astNode?.type,\n ]);\n }\n\n validateDefaultValue(context, arg);\n }\n }\n}\n\nfunction validateInterfaces(\n context: SchemaValidationContext,\n type: GraphQLObjectType | GraphQLInterfaceType,\n): void {\n const ifaceTypeNames = new Set<string>();\n for (const iface of type.getInterfaces()) {\n if (!isInterfaceType(iface)) {\n context.reportError(\n `Type ${type} must only implement Interface types, ` +\n `it cannot implement ${inspect(iface)}.`,\n getAllImplementsInterfaceNodes(type, iface),\n );\n continue;\n }\n\n if (type === iface) {\n context.reportError(\n `Type ${type} cannot implement itself because it would create a circular reference.`,\n getAllImplementsInterfaceNodes(type, iface),\n );\n continue;\n }\n\n if (ifaceTypeNames.has(iface.name)) {\n context.reportError(\n `Type ${type} can only implement ${iface} once.`,\n getAllImplementsInterfaceNodes(type, iface),\n );\n continue;\n }\n\n ifaceTypeNames.add(iface.name);\n\n validateTypeImplementsAncestors(context, type, iface);\n validateTypeImplementsInterface(context, type, iface);\n }\n}\n\nfunction validateTypeImplementsInterface(\n context: SchemaValidationContext,\n type: GraphQLObjectType | GraphQLInterfaceType,\n iface: GraphQLInterfaceType,\n): void {\n const typeFieldMap = type.getFields();\n\n // Assert each interface field is implemented.\n for (const ifaceField of Object.values(iface.getFields())) {\n const typeField = typeFieldMap[ifaceField.name];\n\n // Assert interface field exists on type.\n if (typeField == null) {\n context.reportError(\n `Interface field ${ifaceField} expected but ${type} does not provide it.`,\n [ifaceField.astNode, type.astNode, ...type.extensionASTNodes],\n );\n continue;\n }\n\n // Assert interface field type is satisfied by type field type, by being\n // a valid subtype. (covariant)\n if (!isTypeSubTypeOf(context.schema, typeField.type, ifaceField.type)) {\n context.reportError(\n `Interface field ${ifaceField} expects type ${ifaceField.type} ` +\n `but ${typeField} is type ${typeField.type}.`,\n [ifaceField.astNode?.type, typeField.astNode?.type],\n );\n }\n\n // Assert each interface field arg is implemented.\n for (const ifaceArg of ifaceField.args) {\n const typeArg = typeField.args.find((arg) => arg.name === ifaceArg.name);\n\n // Assert interface field arg exists on object field.\n if (!typeArg) {\n context.reportError(\n `Interface field argument ${ifaceArg} expected but ${typeField} does not provide it.`,\n [ifaceArg.astNode, typeField.astNode],\n );\n continue;\n }\n\n // Assert interface field arg type matches object field arg type.\n // (invariant)\n // TODO: change to contravariant?\n if (!isEqualType(ifaceArg.type, typeArg.type)) {\n context.reportError(\n `Interface field argument ${ifaceArg} expects type ${ifaceArg.type} ` +\n `but ${typeArg} is type ${typeArg.type}.`,\n [ifaceArg.astNode?.type, typeArg.astNode?.type],\n );\n }\n }\n\n // Assert additional arguments must not be required.\n for (const typeArg of typeField.args) {\n if (isRequiredArgument(typeArg)) {\n const ifaceArg = ifaceField.args.find(\n (arg) => arg.name === typeArg.name,\n );\n if (!ifaceArg) {\n context.reportError(\n `Argument \"${typeArg}\" must not be required type \"${typeArg.type}\" ` +\n `if not provided by the Interface field \"${ifaceField}\".`,\n [typeArg.astNode, ifaceField.astNode],\n );\n }\n }\n }\n\n // Asserts that field is not deprecated unless interface field is\n if (\n typeField.deprecationReason != null &&\n ifaceField.deprecationReason == null\n ) {\n context.reportError(\n `Interface field ${iface.name}.${ifaceField.name} is not deprecated, so ` +\n `implementation field ${type.name}.${typeField.name} must not be deprecated.`,\n [\n getDeprecatedDirectiveNode(typeField.astNode),\n typeField.astNode?.type,\n ],\n );\n }\n }\n}\n\nfunction validateTypeImplementsAncestors(\n context: SchemaValidationContext,\n type: GraphQLObjectType | GraphQLInterfaceType,\n iface: GraphQLInterfaceType,\n): void {\n const ifaceInterfaces = type.getInterfaces();\n for (const transitive of iface.getInterfaces()) {\n if (!ifaceInterfaces.includes(transitive)) {\n context.reportError(\n transitive === type\n ? `Type ${type} cannot implement ${iface} because it would create a circular reference.`\n : `Type ${type} must implement ${transitive} because it is implemented by ${iface}.`,\n [\n ...getAllImplementsInterfaceNodes(iface, transitive),\n ...getAllImplementsInterfaceNodes(type, iface),\n ],\n );\n }\n }\n}\n\nfunction validateUnionMembers(\n context: SchemaValidationContext,\n union: GraphQLUnionType,\n): void {\n const memberTypes = union.getTypes();\n\n if (memberTypes.length === 0) {\n context.reportError(\n `Union type ${union} must define one or more member types.`,\n [union.astNode, ...union.extensionASTNodes],\n );\n }\n\n const includedTypeNames = new Set<string>();\n for (const memberType of memberTypes) {\n if (includedTypeNames.has(memberType.name)) {\n context.reportError(\n `Union type ${union} can only include type ${memberType} once.`,\n getUnionMemberTypeNodes(union, memberType.name),\n );\n continue;\n }\n includedTypeNames.add(memberType.name);\n if (!isObjectType(memberType)) {\n context.reportError(\n `Union type ${union} can only include Object types, ` +\n `it cannot include ${inspect(memberType)}.`,\n getUnionMemberTypeNodes(union, String(memberType)),\n );\n }\n }\n}\n\nfunction validateEnumValues(\n context: SchemaValidationContext,\n enumType: GraphQLEnumType,\n): void {\n const enumValues = enumType.getValues();\n\n if (enumValues.length === 0) {\n context.reportError(\n `Enum type ${enumType} must define one or more values.`,\n [enumType.astNode, ...enumType.extensionASTNodes],\n );\n }\n\n for (const enumValue of enumValues) {\n // Ensure valid name.\n validateName(context, enumValue);\n }\n}\n\nfunction validateInputFields(\n context: SchemaValidationContext,\n inputObj: GraphQLInputObjectType,\n): void {\n const fields = Object.values(inputObj.getFields());\n\n if (fields.length === 0) {\n context.reportError(\n `Input Object type ${inputObj} must define one or more fields.`,\n [inputObj.astNode, ...inputObj.extensionASTNodes],\n );\n }\n\n // Ensure the input fields are valid\n for (const field of fields) {\n // Ensure they are named correctly.\n validateName(context, field);\n\n // Ensure the type is an input type\n if (!isInputType(field.type)) {\n context.reportError(\n `The type of ${field} must be Input Type ` +\n `but got: ${inspect(field.type)}.`,\n field.astNode?.type,\n );\n }\n\n if (isRequiredInputField(field) && field.deprecationReason != null) {\n context.reportError(\n `Required input field ${field} cannot be deprecated.`,\n [getDeprecatedDirectiveNode(field.astNode), field.astNode?.type],\n );\n }\n\n validateDefaultValue(context, field);\n\n if (inputObj.isOneOf) {\n validateOneOfInputObjectField(inputObj, field, context);\n }\n }\n}\n\nfunction validateOneOfInputObjectField(\n type: GraphQLInputObjectType,\n field: GraphQLInputField,\n context: SchemaValidationContext,\n): void {\n if (isNonNullType(field.type)) {\n context.reportError(\n `OneOf input field ${type}.${field.name} must be nullable.`,\n field.astNode?.type,\n );\n }\n\n if (field.default !== undefined || field.defaultValue !== undefined) {\n context.reportError(\n `OneOf input field ${type}.${field.name} cannot have a default value.`,\n field.astNode,\n );\n }\n}\n\nfunction createInputObjectNonNullCircularRefsValidator(\n context: SchemaValidationContext,\n): (inputObj: GraphQLInputObjectType) => void {\n // Modified copy of algorithm from 'src/validation/rules/NoFragmentCycles.js'.\n // Tracks already visited types to maintain O(N) and to ensure that cycles\n // are not redundantly reported.\n const visitedTypes = new Set<GraphQLInputObjectType>();\n\n // Array of types nodes used to produce meaningful errors\n const fieldPath: Array<{ fieldStr: string; astNode: Maybe<ASTNode> }> = [];\n\n // Position in the type path\n const fieldPathIndexByTypeName: ObjMap<number | undefined> =\n Object.create(null);\n\n return detectCycleRecursive;\n\n // This does a straight-forward DFS to find cycles.\n // It does not terminate when a cycle was found but continues to explore\n // the graph to find all possible cycles.\n function detectCycleRecursive(inputObj: GraphQLInputObjectType): void {\n if (visitedTypes.has(inputObj)) {\n return;\n }\n\n visitedTypes.add(inputObj);\n fieldPathIndexByTypeName[inputObj.name] = fieldPath.length;\n\n const fields = Object.values(inputObj.getFields());\n for (const field of fields) {\n if (isNonNullType(field.type) && isInputObjectType(field.type.ofType)) {\n const fieldType = field.type.ofType;\n const cycleIndex = fieldPathIndexByTypeName[fieldType.name];\n\n fieldPath.push({\n fieldStr: `${inputObj}.${field.name}`,\n astNode: field.astNode,\n });\n if (cycleIndex === undefined) {\n detectCycleRecursive(fieldType);\n } else {\n const cyclePath = fieldPath.slice(cycleIndex);\n const pathStr = cyclePath\n .map((fieldObj) => fieldObj.fieldStr)\n .join(', ');\n context.reportError(\n `Invalid circular reference. The Input Object ${fieldType} references itself ${\n cyclePath.length > 1\n ? 'via the non-null fields:'\n : 'in the non-null field'\n } ${pathStr}.`,\n cyclePath.map((fieldObj) => fieldObj.astNode),\n );\n }\n fieldPath.pop();\n }\n }\n\n fieldPathIndexByTypeName[inputObj.name] = undefined;\n }\n}\n\nfunction createInputObjectDefaultValueCircularRefsValidator(\n context: SchemaValidationContext,\n): (inputObj: GraphQLInputObjectType) => void {\n // Modified copy of algorithm from 'src/validation/rules/NoFragmentCycles.js'.\n // Tracks already visited types to maintain O(N) and to ensure that cycles\n // are not redundantly reported.\n const visitedFields = Object.create(null);\n\n // Array of keys for fields and default values used to produce meaningful errors.\n const fieldPath: Array<\n [fieldStr: string, defaultValue: ConstValueNode | undefined]\n > = [];\n\n // Position in the path\n const fieldPathIndex: ObjMap<number | undefined> = Object.create(null);\n\n // This does a straight-forward DFS to find cycles.\n // It does not terminate when a cycle was found but continues to explore\n // the graph to find all possible cycles.\n return function validateInputObjectDefaultValueCircularRefs(\n inputObj: GraphQLInputObjectType,\n ): void {\n // Start with an empty object as a way to visit every field in this input\n // object type and apply every default value.\n return detectValueDefaultValueCycle(inputObj, Object.create(null));\n };\n\n function detectValueDefaultValueCycle(\n inputObj: GraphQLInputObjectType,\n defaultValue: unknown,\n ): void {\n // If the value is a List, recursively check each entry for a cycle.\n // Otherwise, only object values can contain a cycle.\n if (isIterableObject(defaultValue)) {\n for (const itemValue of defaultValue) {\n detectValueDefaultValueCycle(inputObj, itemValue);\n }\n return;\n } else if (!isObjectLike(defaultValue)) {\n return;\n }\n\n // Check each defined field for a cycle.\n for (const field of Object.values(inputObj.getFields())) {\n const namedFieldType = getNamedType(field.type);\n\n // Only input object type fields can result in a cycle.\n if (!isInputObjectType(namedFieldType)) {\n continue;\n }\n\n if (Object.hasOwn(defaultValue, field.name)) {\n // If the provided value has this field defined, recursively check it\n // for cycles.\n detectValueDefaultValueCycle(namedFieldType, defaultValue[field.name]);\n } else {\n // Otherwise check this field's default value for cycles.\n detectFieldDefaultValueCycle(\n field,\n namedFieldType,\n `${inputObj}.${field.name}`,\n );\n }\n }\n }\n\n function detectLiteralDefaultValueCycle(\n inputObj: GraphQLInputObjectType,\n defaultValue: ConstValueNode,\n ): void {\n // If the value is a List, recursively check each entry for a cycle.\n // Otherwise, only object values can contain a cycle.\n if (defaultValue.kind === Kind.LIST) {\n for (const itemLiteral of defaultValue.values) {\n detectLiteralDefaultValueCycle(inputObj, itemLiteral);\n }\n return;\n } else if (defaultValue.kind !== Kind.OBJECT) {\n return;\n }\n\n // Check each defined field for a cycle.\n const fieldNodes = keyMap(defaultValue.fields, (field) => field.name.value);\n for (const field of Object.values(inputObj.getFields())) {\n const namedFieldType = getNamedType(field.type);\n\n // Only input object type fields can result in a cycle.\n if (!isInputObjectType(namedFieldType)) {\n continue;\n }\n\n if (Object.hasOwn(fieldNodes, field.name)) {\n // If the provided value has this field defined, recursively check it\n // for cycles.\n detectLiteralDefaultValueCycle(\n namedFieldType,\n fieldNodes[field.name].value,\n );\n } else {\n // Otherwise check this field's default value for cycles.\n detectFieldDefaultValueCycle(\n field,\n namedFieldType,\n `${inputObj}.${field.name}`,\n );\n }\n }\n }\n\n function detectFieldDefaultValueCycle(\n field: GraphQLInputField,\n fieldType: GraphQLInputObjectType,\n fieldStr: string,\n ): void {\n // Only a field with a default value can result in a cycle.\n const defaultInput = field.default;\n if (defaultInput === undefined) {\n return;\n }\n\n // Check to see if there is cycle.\n const cycleIndex = fieldPathIndex[fieldStr];\n if (cycleIndex !== undefined) {\n context.reportError(\n `Invalid circular reference. The default value of Input Object field ${fieldStr} references itself${\n cycleIndex < fieldPath.length\n ? ` via the default values of: ${fieldPath\n .slice(cycleIndex)\n .map(([stringForMessage]) => stringForMessage)\n .join(', ')}`\n : ''\n }.`,\n fieldPath.slice(cycleIndex - 1).map(([, node]) => node),\n );\n return;\n }\n\n // Recurse into this field's default value once, tracking the path.\n if (visitedFields[fieldStr] === undefined) {\n visitedFields[fieldStr] = true;\n fieldPathIndex[fieldStr] = fieldPath.push([\n fieldStr,\n field.astNode?.defaultValue,\n ]);\n if (defaultInput.literal) {\n detectLiteralDefaultValueCycle(fieldType, defaultInput.literal);\n } else {\n detectValueDefaultValueCycle(fieldType, defaultInput.value);\n }\n fieldPath.pop();\n fieldPathIndex[fieldStr] = undefined;\n }\n }\n}\n\nfunction getAllImplementsInterfaceNodes(\n type: GraphQLObjectType | GraphQLInterfaceType,\n iface: GraphQLInterfaceType,\n): ReadonlyArray<NamedTypeNode> {\n const { astNode, extensionASTNodes } = type;\n const nodes: ReadonlyArray<\n | ObjectTypeDefinitionNode\n | ObjectTypeExtensionNode\n | InterfaceTypeDefinitionNode\n | InterfaceTypeExtensionNode\n > = astNode != null ? [astNode, ...extensionASTNodes] : extensionASTNodes;\n\n return nodes\n .flatMap((typeNode) => typeNode.interfaces ?? [])\n .filter((ifaceNode) => ifaceNode.name.value === iface.name);\n}\n\nfunction getUnionMemberTypeNodes(\n union: GraphQLUnionType,\n typeName: string,\n): ReadonlyArray<NamedTypeNode> {\n const { astNode, extensionASTNodes } = union;\n const nodes: ReadonlyArray<UnionTypeDefinitionNode | UnionTypeExtensionNode> =\n astNode != null ? [astNode, ...extensionASTNodes] : extensionASTNodes;\n\n return nodes\n .flatMap((unionNode) => unionNode.types ?? [])\n .filter((typeNode) => typeNode.name.value === typeName);\n}\n\nfunction getDeprecatedDirectiveNode(\n definitionNode: Maybe<{\n readonly directives?: ReadonlyArray<DirectiveNode> | undefined;\n }>,\n): Maybe<DirectiveNode> {\n return definitionNode?.directives?.find(\n (node) => node.name.value === GraphQLDeprecatedDirective.name,\n );\n}\n"]}
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/type/validate.ts"],"names":[],"mappings":"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","sourcesContent":["/** @category Validation */\n\nimport { AccumulatorMap } from '../jsutils/AccumulatorMap.ts';\nimport { capitalize } from '../jsutils/capitalize.ts';\nimport { andList } from '../jsutils/formatList.ts';\nimport { inspect } from '../jsutils/inspect.ts';\nimport { invariant } from '../jsutils/invariant.ts';\nimport { isIterableObject } from '../jsutils/isIterableObject.ts';\nimport { isObjectLike } from '../jsutils/isObjectLike.ts';\nimport { keyMap } from '../jsutils/keyMap.ts';\nimport { mapValue } from '../jsutils/mapValue.ts';\nimport type { Maybe } from '../jsutils/Maybe.ts';\nimport type { ObjMap } from '../jsutils/ObjMap.ts';\nimport { printPathArray } from '../jsutils/printPathArray.ts';\n\nimport { GraphQLError } from '../error/GraphQLError.ts';\n\nimport type {\n ASTNode,\n ConstValueNode,\n DirectiveNode,\n InterfaceTypeDefinitionNode,\n InterfaceTypeExtensionNode,\n NamedTypeNode,\n ObjectTypeDefinitionNode,\n ObjectTypeExtensionNode,\n UnionTypeDefinitionNode,\n UnionTypeExtensionNode,\n} from '../language/ast.ts';\nimport { OperationTypeNode } from '../language/ast.ts';\nimport { Kind } from '../language/kinds.ts';\n\nimport { isEqualType, isTypeSubTypeOf } from '../utilities/typeComparators.ts';\nimport {\n validateInputLiteral,\n validateInputValue,\n} from '../utilities/validateInputValue.ts';\n\nimport type {\n GraphQLArgument,\n GraphQLDefaultInput,\n GraphQLEnumType,\n GraphQLInputField,\n GraphQLInputObjectType,\n GraphQLInputType,\n GraphQLInterfaceType,\n GraphQLObjectType,\n GraphQLUnionType,\n} from './definition.ts';\nimport {\n assertLeafType,\n getNamedType,\n isEnumType,\n isInputObjectType,\n isInputType,\n isInterfaceType,\n isListType,\n isNamedType,\n isNonNullType,\n isObjectType,\n isOutputType,\n isRequiredArgument,\n isRequiredInputField,\n isUnionType,\n} from './definition.ts';\nimport { GraphQLDeprecatedDirective, isDirective } from './directives.ts';\nimport { isIntrospectionType } from './introspection.ts';\nimport type { GraphQLSchema } from './schema.ts';\nimport { assertSchema } from './schema.ts';\n\n/**\n * Implements the \"Type Validation\" sub-sections of the specification's\n * \"Type System\" section.\n *\n * Validation runs synchronously, returning an array of encountered errors, or\n * an empty array if no errors were encountered and the Schema is valid.\n * @param schema - GraphQL schema to use.\n * @returns Schema validation errors, or an empty array when the schema is valid.\n * @example\n * ```ts\n * import { validateSchema } from 'graphql/type';\n * import { buildSchema } from 'graphql/utilities';\n *\n * const schema = buildSchema(`\n * type Query {\n * name: String\n * }\n * `);\n * const errors = validateSchema(schema);\n *\n * errors; // => []\n * ```\n */\nexport function validateSchema(\n schema: GraphQLSchema,\n): ReadonlyArray<GraphQLError> {\n // First check to ensure the provided value is in fact a GraphQLSchema.\n assertSchema(schema);\n\n // If this Schema has already been validated, return the previous results.\n if (schema.__validationErrors) {\n return schema.__validationErrors;\n }\n\n // Validate the schema, producing a list of errors.\n const context = new SchemaValidationContext(schema);\n validateRootTypes(context);\n validateDirectives(context);\n validateTypes(context);\n\n // Persist the results of validation before returning to ensure validation\n // does not run multiple times for this schema.\n const errors = context.getErrors();\n schema.__validationErrors = errors;\n return errors;\n}\n\n/**\n * Utility function which asserts a schema is valid by throwing an error if\n * it is invalid.\n * @param schema - GraphQL schema to use.\n * @example\n * ```ts\n * import { assertValidSchema } from 'graphql/type';\n * import { buildSchema } from 'graphql/utilities';\n *\n * const schema = buildSchema(`\n * type Query {\n * name: String\n * }\n * `);\n *\n * assertValidSchema(schema); // does not throw\n * ```\n */\nexport function assertValidSchema(schema: GraphQLSchema): void {\n const errors = validateSchema(schema);\n if (errors.length !== 0) {\n throw new Error(errors.map((error) => error.message).join('\\n\\n'));\n }\n}\n\nclass SchemaValidationContext {\n readonly _errors: Array<GraphQLError>;\n readonly schema: GraphQLSchema;\n\n constructor(schema: GraphQLSchema) {\n this._errors = [];\n this.schema = schema;\n }\n\n reportError(\n message: string,\n nodes?: ReadonlyArray<Maybe<ASTNode>> | Maybe<ASTNode>,\n ): void {\n const _nodes = Array.isArray(nodes)\n ? (nodes.filter(Boolean) as ReadonlyArray<ASTNode>)\n : (nodes as Maybe<ASTNode>);\n this._errors.push(new GraphQLError(message, { nodes: _nodes }));\n }\n\n getErrors(): ReadonlyArray<GraphQLError> {\n return this._errors;\n }\n}\n\nfunction validateRootTypes(context: SchemaValidationContext): void {\n const schema = context.schema;\n\n if (schema.getQueryType() == null) {\n context.reportError('Query root type must be provided.', schema.astNode);\n }\n\n const rootTypesMap = new AccumulatorMap<\n GraphQLObjectType,\n OperationTypeNode\n >();\n for (const operationType of Object.values(OperationTypeNode)) {\n const rootType = schema.getRootType(operationType);\n\n if (rootType != null) {\n if (!isObjectType(rootType)) {\n const operationTypeStr = capitalize(operationType);\n const rootTypeStr = inspect(rootType);\n context.reportError(\n operationType === OperationTypeNode.QUERY\n ? `${operationTypeStr} root type must be Object type, it cannot be ${rootTypeStr}.`\n : `${operationTypeStr} root type must be Object type if provided, it cannot be ${rootTypeStr}.`,\n getOperationTypeNode(schema, operationType) ??\n (rootType as any).astNode,\n );\n } else {\n rootTypesMap.add(rootType, operationType);\n }\n }\n }\n\n for (const [rootType, operationTypes] of rootTypesMap) {\n if (operationTypes.length > 1) {\n const operationList = andList(operationTypes);\n context.reportError(\n `All root types must be different, \"${rootType}\" type is used as ${operationList} root types.`,\n operationTypes.map((operationType) =>\n getOperationTypeNode(schema, operationType),\n ),\n );\n }\n }\n}\n\nfunction getOperationTypeNode(\n schema: GraphQLSchema,\n operation: OperationTypeNode,\n): Maybe<ASTNode> {\n return [schema.astNode, ...schema.extensionASTNodes]\n .flatMap((schemaNode) => schemaNode?.operationTypes ?? [])\n .find((operationNode) => operationNode.operation === operation)?.type;\n}\n\nfunction validateDirectives(context: SchemaValidationContext): void {\n for (const directive of context.schema.getDirectives()) {\n // Ensure all directives are in fact GraphQL directives.\n if (!isDirective(directive)) {\n context.reportError(\n `Expected directive but got: ${inspect(directive)}.`,\n (directive as any)?.astNode,\n );\n continue;\n }\n\n // Ensure they are named correctly.\n validateName(context, directive);\n\n if (directive.locations.length === 0) {\n context.reportError(\n `Directive ${directive} must include 1 or more locations.`,\n directive.astNode,\n );\n }\n\n // Ensure the arguments are valid.\n for (const arg of directive.args) {\n // Ensure they are named correctly.\n validateName(context, arg);\n\n // Ensure the type is an input type.\n if (!isInputType(arg.type)) {\n context.reportError(\n `The type of ${arg} must be Input Type ` +\n `but got: ${inspect(arg.type)}.`,\n arg.astNode,\n );\n }\n\n if (isRequiredArgument(arg) && arg.deprecationReason != null) {\n context.reportError(`Required argument ${arg} cannot be deprecated.`, [\n getDeprecatedDirectiveNode(arg.astNode),\n arg.astNode?.type,\n ]);\n }\n\n validateDefaultValue(context, arg);\n }\n }\n}\n\nfunction validateDefaultValue(\n context: SchemaValidationContext,\n inputValue: GraphQLArgument | GraphQLInputField,\n): void {\n const defaultInput = inputValue.default;\n\n if (!defaultInput) {\n return;\n }\n\n const errors: Array<[GraphQLError, ReadonlyArray<string | number>]> = [];\n validateDefaultInput(defaultInput, inputValue.type, (error, path) => {\n errors.push([error, path]);\n });\n\n if (errors.length === 0) {\n return;\n }\n\n if (!defaultInput.literal) {\n // If there were validation errors, check to see if it can be \"uncoerced\"\n // and then correctly validated. If so, report a clear error with a path\n // to resolution.\n try {\n const uncoercedValue = uncoerceDefaultValue(\n defaultInput.value,\n inputValue.type,\n );\n\n const uncoercedErrors = [];\n validateInputValue(uncoercedValue, inputValue.type, (error, path) => {\n uncoercedErrors.push([error, path]);\n });\n\n if (uncoercedErrors.length === 0) {\n context.reportError(\n `${inputValue} has invalid default value: ${inspect(\n defaultInput.value,\n )}. Did you mean: ${inspect(uncoercedValue)}?`,\n inputValue.astNode?.defaultValue,\n );\n return;\n }\n } catch (_error) {\n // ignore\n }\n }\n\n // Otherwise report the original set of errors.\n for (const [error, path] of errors) {\n context.reportError(\n `${inputValue} has invalid default value${printPathArray(path)}: ${\n error.message\n }`,\n error.nodes ?? inputValue.astNode?.defaultValue,\n );\n }\n}\n\n/** @internal */\nexport function validateDefaultInput(\n defaultInput: GraphQLDefaultInput,\n inputType: GraphQLInputType,\n onError: (error: GraphQLError, path: ReadonlyArray<string | number>) => void,\n hideSuggestions?: Maybe<boolean>,\n): void {\n if (defaultInput.literal) {\n validateInputLiteral(\n defaultInput.literal,\n inputType,\n onError,\n undefined,\n undefined,\n hideSuggestions,\n );\n return;\n }\n validateInputValue(defaultInput.value, inputType, onError, hideSuggestions);\n}\n\n/**\n * Historically GraphQL.js allowed default values to be provided as\n * assumed-coerced \"internal\" values, however default values should be provided\n * as \"external\" pre-coerced values. `uncoerceDefaultValue()` will convert such\n * \"internal\" values to \"external\" values to display as part of validation.\n *\n * This performs the \"opposite\" of `coerceInputValue()`. Given an \"internal\"\n * coerced value, reverse the process to provide an \"external\" uncoerced value.\n *\n * @internal\n */\nfunction uncoerceDefaultValue(value: unknown, type: GraphQLInputType): unknown {\n if (isNonNullType(type)) {\n return uncoerceDefaultValue(value, type.ofType);\n }\n\n if (value === null) {\n return null;\n }\n\n if (isListType(type)) {\n if (isIterableObject(value)) {\n return Array.from(value, (itemValue) =>\n uncoerceDefaultValue(itemValue, type.ofType),\n );\n }\n return [uncoerceDefaultValue(value, type.ofType)];\n }\n\n if (isInputObjectType(type)) {\n invariant(isObjectLike(value));\n const fieldDefs = type.getFields();\n return mapValue(value, (fieldValue, fieldName) => {\n invariant(fieldName in fieldDefs);\n return uncoerceDefaultValue(fieldValue, fieldDefs[fieldName].type);\n });\n }\n\n assertLeafType(type);\n\n // For most leaf types (Scalars, Enums), output value coercion (\"serialize\") is\n // the inverse of input coercion (\"parseValue\") and will produce an\n // \"external\" value. Historically, this method was also used as part of the\n // now-deprecated \"astFromValue\" to perform the same behavior.\n return type.coerceOutputValue(value);\n}\n\nfunction validateName(\n context: SchemaValidationContext,\n node: { readonly name: string; readonly astNode: Maybe<ASTNode> },\n): void {\n // Ensure names are valid, however introspection types opt out.\n if (node.name.startsWith('__')) {\n context.reportError(\n `Name \"${node.name}\" must not begin with \"__\", which is reserved by GraphQL introspection.`,\n node.astNode,\n );\n }\n}\n\nfunction validateTypes(context: SchemaValidationContext): void {\n const validateInputObjectDefaultValueCircularRefs =\n createInputObjectDefaultValueCircularRefsValidator(context);\n const typeMap = context.schema.getTypeMap();\n const finiteValueStates = new Map<\n GraphQLInputObjectType,\n InputObjectFiniteValueState\n >();\n\n for (const type of Object.values(typeMap)) {\n // Ensure all provided types are in fact GraphQL type.\n if (!isNamedType(type)) {\n context.reportError(\n `Expected GraphQL named type but got: ${inspect(type)}.`,\n (type as any).astNode,\n );\n continue;\n }\n\n // Ensure it is named correctly (excluding introspection types).\n if (!isIntrospectionType(type)) {\n validateName(context, type);\n }\n\n if (isObjectType(type)) {\n // Ensure fields are valid\n validateFields(context, type);\n\n // Ensure objects implement the interfaces they claim to.\n validateInterfaces(context, type);\n } else if (isInterfaceType(type)) {\n // Ensure fields are valid.\n validateFields(context, type);\n\n // Ensure interfaces implement the interfaces they claim to.\n validateInterfaces(context, type);\n } else if (isUnionType(type)) {\n // Ensure Unions include valid member types.\n validateUnionMembers(context, type);\n } else if (isEnumType(type)) {\n // Ensure Enums have valid values.\n validateEnumValues(context, type);\n } else if (isInputObjectType(type)) {\n // Ensure Input Object fields are valid.\n validateInputFields(context, type);\n\n initializeInputObjectFiniteValueState(type);\n\n // Ensure Input Objects do not contain invalid default value circular references.\n validateInputObjectDefaultValueCircularRefs(type);\n }\n }\n\n detectInputObjectNonFiniteValues(context, finiteValueStates);\n\n function initializeInputObjectFiniteValueState(\n inputObj: GraphQLInputObjectType,\n ): void {\n finiteValueStates.set(inputObj, {\n inputObj,\n targets: [],\n dependents: [],\n unresolvedTargetCount: 0,\n hasFiniteValue: false,\n });\n }\n}\n\nfunction validateFields(\n context: SchemaValidationContext,\n type: GraphQLObjectType | GraphQLInterfaceType,\n): void {\n const fields = Object.values(type.getFields());\n\n // Objects and Interfaces both must define one or more fields.\n if (fields.length === 0) {\n context.reportError(`Type ${type} must define one or more fields.`, [\n type.astNode,\n ...type.extensionASTNodes,\n ]);\n }\n\n for (const field of fields) {\n // Ensure they are named correctly.\n validateName(context, field);\n\n // Ensure the type is an output type\n if (!isOutputType(field.type)) {\n context.reportError(\n `The type of ${field} must be Output Type ` +\n `but got: ${inspect(field.type)}.`,\n field.astNode?.type,\n );\n }\n\n // Ensure the arguments are valid\n for (const arg of field.args) {\n // Ensure they are named correctly.\n validateName(context, arg);\n\n // Ensure the type is an input type\n if (!isInputType(arg.type)) {\n context.reportError(\n `The type of ${arg} must be Input Type but got: ${inspect(arg.type)}.`,\n arg.astNode?.type,\n );\n }\n\n if (isRequiredArgument(arg) && arg.deprecationReason != null) {\n context.reportError(`Required argument ${arg} cannot be deprecated.`, [\n getDeprecatedDirectiveNode(arg.astNode),\n arg.astNode?.type,\n ]);\n }\n\n validateDefaultValue(context, arg);\n }\n }\n}\n\nfunction validateInterfaces(\n context: SchemaValidationContext,\n type: GraphQLObjectType | GraphQLInterfaceType,\n): void {\n const ifaceTypeNames = new Set<string>();\n for (const iface of type.getInterfaces()) {\n if (!isInterfaceType(iface)) {\n context.reportError(\n `Type ${type} must only implement Interface types, ` +\n `it cannot implement ${inspect(iface)}.`,\n getAllImplementsInterfaceNodes(type, iface),\n );\n continue;\n }\n\n if (type === iface) {\n context.reportError(\n `Type ${type} cannot implement itself because it would create a circular reference.`,\n getAllImplementsInterfaceNodes(type, iface),\n );\n continue;\n }\n\n if (ifaceTypeNames.has(iface.name)) {\n context.reportError(\n `Type ${type} can only implement ${iface} once.`,\n getAllImplementsInterfaceNodes(type, iface),\n );\n continue;\n }\n\n ifaceTypeNames.add(iface.name);\n\n validateTypeImplementsAncestors(context, type, iface);\n validateTypeImplementsInterface(context, type, iface);\n }\n}\n\nfunction validateTypeImplementsInterface(\n context: SchemaValidationContext,\n type: GraphQLObjectType | GraphQLInterfaceType,\n iface: GraphQLInterfaceType,\n): void {\n const typeFieldMap = type.getFields();\n\n // Assert each interface field is implemented.\n for (const ifaceField of Object.values(iface.getFields())) {\n const typeField = typeFieldMap[ifaceField.name];\n\n // Assert interface field exists on type.\n if (typeField == null) {\n context.reportError(\n `Interface field ${ifaceField} expected but ${type} does not provide it.`,\n [ifaceField.astNode, type.astNode, ...type.extensionASTNodes],\n );\n continue;\n }\n\n // Assert interface field type is satisfied by type field type, by being\n // a valid subtype. (covariant)\n if (!isTypeSubTypeOf(context.schema, typeField.type, ifaceField.type)) {\n context.reportError(\n `Interface field ${ifaceField} expects type ${ifaceField.type} ` +\n `but ${typeField} is type ${typeField.type}.`,\n [ifaceField.astNode?.type, typeField.astNode?.type],\n );\n }\n\n // Assert each interface field arg is implemented.\n for (const ifaceArg of ifaceField.args) {\n const typeArg = typeField.args.find((arg) => arg.name === ifaceArg.name);\n\n // Assert interface field arg exists on object field.\n if (!typeArg) {\n context.reportError(\n `Interface field argument ${ifaceArg} expected but ${typeField} does not provide it.`,\n [ifaceArg.astNode, typeField.astNode],\n );\n continue;\n }\n\n // Assert interface field arg type matches object field arg type.\n // (invariant)\n // TODO: change to contravariant?\n if (!isEqualType(ifaceArg.type, typeArg.type)) {\n context.reportError(\n `Interface field argument ${ifaceArg} expects type ${ifaceArg.type} ` +\n `but ${typeArg} is type ${typeArg.type}.`,\n [ifaceArg.astNode?.type, typeArg.astNode?.type],\n );\n }\n }\n\n // Assert additional arguments must not be required.\n for (const typeArg of typeField.args) {\n if (isRequiredArgument(typeArg)) {\n const ifaceArg = ifaceField.args.find(\n (arg) => arg.name === typeArg.name,\n );\n if (!ifaceArg) {\n context.reportError(\n `Argument \"${typeArg}\" must not be required type \"${typeArg.type}\" ` +\n `if not provided by the Interface field \"${ifaceField}\".`,\n [typeArg.astNode, ifaceField.astNode],\n );\n }\n }\n }\n\n // Asserts that field is not deprecated unless interface field is\n if (\n typeField.deprecationReason != null &&\n ifaceField.deprecationReason == null\n ) {\n context.reportError(\n `Interface field ${iface.name}.${ifaceField.name} is not deprecated, so ` +\n `implementation field ${type.name}.${typeField.name} must not be deprecated.`,\n [\n getDeprecatedDirectiveNode(typeField.astNode),\n typeField.astNode?.type,\n ],\n );\n }\n }\n}\n\nfunction validateTypeImplementsAncestors(\n context: SchemaValidationContext,\n type: GraphQLObjectType | GraphQLInterfaceType,\n iface: GraphQLInterfaceType,\n): void {\n const ifaceInterfaces = type.getInterfaces();\n for (const transitive of iface.getInterfaces()) {\n if (!ifaceInterfaces.includes(transitive)) {\n context.reportError(\n transitive === type\n ? `Type ${type} cannot implement ${iface} because it would create a circular reference.`\n : `Type ${type} must implement ${transitive} because it is implemented by ${iface}.`,\n [\n ...getAllImplementsInterfaceNodes(iface, transitive),\n ...getAllImplementsInterfaceNodes(type, iface),\n ],\n );\n }\n }\n}\n\nfunction validateUnionMembers(\n context: SchemaValidationContext,\n union: GraphQLUnionType,\n): void {\n const memberTypes = union.getTypes();\n\n if (memberTypes.length === 0) {\n context.reportError(\n `Union type ${union} must define one or more member types.`,\n [union.astNode, ...union.extensionASTNodes],\n );\n }\n\n const includedTypeNames = new Set<string>();\n for (const memberType of memberTypes) {\n if (includedTypeNames.has(memberType.name)) {\n context.reportError(\n `Union type ${union} can only include type ${memberType} once.`,\n getUnionMemberTypeNodes(union, memberType.name),\n );\n continue;\n }\n includedTypeNames.add(memberType.name);\n if (!isObjectType(memberType)) {\n context.reportError(\n `Union type ${union} can only include Object types, ` +\n `it cannot include ${inspect(memberType)}.`,\n getUnionMemberTypeNodes(union, String(memberType)),\n );\n }\n }\n}\n\nfunction validateEnumValues(\n context: SchemaValidationContext,\n enumType: GraphQLEnumType,\n): void {\n const enumValues = enumType.getValues();\n\n if (enumValues.length === 0) {\n context.reportError(\n `Enum type ${enumType} must define one or more values.`,\n [enumType.astNode, ...enumType.extensionASTNodes],\n );\n }\n\n for (const enumValue of enumValues) {\n // Ensure valid name.\n validateName(context, enumValue);\n }\n}\n\nfunction validateInputFields(\n context: SchemaValidationContext,\n inputObj: GraphQLInputObjectType,\n): void {\n const fields = Object.values(inputObj.getFields());\n\n if (fields.length === 0) {\n context.reportError(\n `Input Object type ${inputObj} must define one or more fields.`,\n [inputObj.astNode, ...inputObj.extensionASTNodes],\n );\n }\n\n // Ensure the input fields are valid\n for (const field of fields) {\n // Ensure they are named correctly.\n validateName(context, field);\n\n // Ensure the type is an input type\n if (!isInputType(field.type)) {\n context.reportError(\n `The type of ${field} must be Input Type ` +\n `but got: ${inspect(field.type)}.`,\n field.astNode?.type,\n );\n }\n\n if (isRequiredInputField(field) && field.deprecationReason != null) {\n context.reportError(\n `Required input field ${field} cannot be deprecated.`,\n [getDeprecatedDirectiveNode(field.astNode), field.astNode?.type],\n );\n }\n\n validateDefaultValue(context, field);\n\n if (inputObj.isOneOf) {\n validateOneOfInputObjectField(inputObj, field, context);\n }\n }\n}\n\nfunction validateOneOfInputObjectField(\n type: GraphQLInputObjectType,\n field: GraphQLInputField,\n context: SchemaValidationContext,\n): void {\n if (isNonNullType(field.type)) {\n context.reportError(\n `OneOf input field ${type}.${field.name} must be nullable.`,\n field.astNode?.type,\n );\n }\n\n if (field.default !== undefined || field.defaultValue !== undefined) {\n context.reportError(\n `OneOf input field ${type}.${field.name} cannot have a default value.`,\n field.astNode,\n );\n }\n}\n\ninterface InputObjectFiniteValueTarget {\n field: GraphQLInputField;\n target: GraphQLInputObjectType;\n}\n\ninterface InputObjectFiniteValueState {\n inputObj: GraphQLInputObjectType;\n targets: Array<InputObjectFiniteValueTarget>;\n dependents: Array<InputObjectFiniteValueState>;\n unresolvedTargetCount: number;\n hasFiniteValue: boolean;\n}\n\n// Implements the spec's InputObjectHasUnbreakableCycle algorithm for all Input\n// Objects in one pass by propagating known breakable types through reverse edges.\nfunction detectInputObjectNonFiniteValues(\n context: SchemaValidationContext,\n finiteValueStates: ReadonlyMap<\n GraphQLInputObjectType,\n InputObjectFiniteValueState\n >,\n): void {\n const inputObjectsWithFiniteValues: Array<InputObjectFiniteValueState> = [];\n\n for (const state of finiteValueStates.values()) {\n const inputObj = state.inputObj;\n const fields = Object.values(inputObj.getFields());\n\n for (const field of fields) {\n const target = getFiniteValueTarget(inputObj, field.type);\n if (target === undefined) {\n continue;\n }\n\n state.targets.push({ field, target });\n const targetState = finiteValueStates.get(target);\n if (targetState !== undefined) {\n targetState.dependents.push(state);\n }\n }\n\n if (inputObj.isOneOf) {\n // OneOf Input Objects have an unbreakable cycle if every field leads to an unbreakable cycle.\n if (fields.length === 0 || state.targets.length < fields.length) {\n markInputObjectHasFiniteValue(state);\n }\n } else {\n // Non-OneOf Input Objects have an unbreakable cycle if any non-null field has one.\n state.unresolvedTargetCount = state.targets.length;\n if (state.targets.length === 0) {\n markInputObjectHasFiniteValue(state);\n }\n }\n }\n\n let nextFiniteValueState: InputObjectFiniteValueState | undefined;\n while (\n (nextFiniteValueState = inputObjectsWithFiniteValues.pop()) !== undefined\n ) {\n for (const dependentState of nextFiniteValueState.dependents) {\n if (dependentState.hasFiniteValue) {\n continue;\n }\n\n if (dependentState.inputObj.isOneOf) {\n markInputObjectHasFiniteValue(dependentState);\n continue;\n }\n\n --dependentState.unresolvedTargetCount;\n if (dependentState.unresolvedTargetCount === 0) {\n markInputObjectHasFiniteValue(dependentState);\n }\n }\n }\n\n // Tracks already visited types to ensure that cycles are not redundantly\n // reported.\n const visitedTypes = new Set<GraphQLInputObjectType>();\n\n // Array of fields used to produce meaningful errors.\n const fieldPath: Array<{ fieldStr: string; astNode: Maybe<ASTNode> }> = [];\n\n // Position in the field path.\n const fieldPathIndexByType = new Map<GraphQLInputObjectType, number>();\n\n for (const state of finiteValueStates.values()) {\n if (!state.hasFiniteValue) {\n reportCycleRecursive(state);\n }\n }\n\n function markInputObjectHasFiniteValue(\n finiteValueState: InputObjectFiniteValueState,\n ): void {\n if (!finiteValueState.hasFiniteValue) {\n finiteValueState.hasFiniteValue = true;\n inputObjectsWithFiniteValues.push(finiteValueState);\n }\n }\n\n function reportCycleRecursive(state: InputObjectFiniteValueState): void {\n const inputObj = state.inputObj;\n if (visitedTypes.has(inputObj)) {\n return;\n }\n\n visitedTypes.add(inputObj);\n fieldPathIndexByType.set(inputObj, fieldPath.length);\n\n for (const { field, target } of state.targets) {\n const targetState = finiteValueStates.get(target);\n if (targetState?.hasFiniteValue !== false) {\n continue;\n }\n\n const cycleIndex = fieldPathIndexByType.get(target);\n fieldPath.push({\n fieldStr: `${inputObj}.${field.name}`,\n astNode: field.astNode,\n });\n\n if (cycleIndex === undefined) {\n reportCycleRecursive(targetState);\n } else {\n const cyclePath = fieldPath.slice(cycleIndex);\n const pathStr = cyclePath.map((p) => p.fieldStr).join(', ');\n context.reportError(\n `Input Object ${target} cannot be provided a finite value because it references itself through fields: ${pathStr}.`,\n cyclePath.map((p) => p.astNode),\n );\n }\n\n fieldPath.pop();\n }\n\n fieldPathIndexByType.delete(inputObj);\n }\n}\n\nfunction getFiniteValueTarget(\n inputObj: GraphQLInputObjectType,\n fieldType: GraphQLInputType,\n): GraphQLInputObjectType | undefined {\n if (inputObj.isOneOf) {\n if (isInputObjectType(fieldType)) {\n return fieldType;\n }\n return;\n }\n\n if (isNonNullType(fieldType) && isInputObjectType(fieldType.ofType)) {\n return fieldType.ofType;\n }\n}\n\nfunction createInputObjectDefaultValueCircularRefsValidator(\n context: SchemaValidationContext,\n): (inputObj: GraphQLInputObjectType) => void {\n // Modified copy of algorithm from 'src/validation/rules/NoFragmentCycles.js'.\n // Tracks already visited types to maintain O(N) and to ensure that cycles\n // are not redundantly reported.\n const visitedFields = Object.create(null);\n\n // Array of keys for fields and default values used to produce meaningful errors.\n const fieldPath: Array<\n [fieldStr: string, defaultValue: ConstValueNode | undefined]\n > = [];\n\n // Position in the path\n const fieldPathIndex: ObjMap<number | undefined> = Object.create(null);\n\n // This does a straight-forward DFS to find cycles.\n // It does not terminate when a cycle was found but continues to explore\n // the graph to find all possible cycles.\n return function validateInputObjectDefaultValueCircularRefs(\n inputObj: GraphQLInputObjectType,\n ): void {\n // Start with an empty object as a way to visit every field in this input\n // object type and apply every default value.\n return detectValueDefaultValueCycle(inputObj, Object.create(null));\n };\n\n function detectValueDefaultValueCycle(\n inputObj: GraphQLInputObjectType,\n defaultValue: unknown,\n ): void {\n // If the value is a List, recursively check each entry for a cycle.\n // Otherwise, only object values can contain a cycle.\n if (isIterableObject(defaultValue)) {\n for (const itemValue of defaultValue) {\n detectValueDefaultValueCycle(inputObj, itemValue);\n }\n return;\n } else if (!isObjectLike(defaultValue)) {\n return;\n }\n\n // Check each defined field for a cycle.\n for (const field of Object.values(inputObj.getFields())) {\n const namedFieldType = getNamedType(field.type);\n\n // Only input object type fields can result in a cycle.\n if (!isInputObjectType(namedFieldType)) {\n continue;\n }\n\n if (Object.hasOwn(defaultValue, field.name)) {\n // If the provided value has this field defined, recursively check it\n // for cycles.\n detectValueDefaultValueCycle(namedFieldType, defaultValue[field.name]);\n } else {\n // Otherwise check this field's default value for cycles.\n detectFieldDefaultValueCycle(\n field,\n namedFieldType,\n `${inputObj}.${field.name}`,\n );\n }\n }\n }\n\n function detectLiteralDefaultValueCycle(\n inputObj: GraphQLInputObjectType,\n defaultValue: ConstValueNode,\n ): void {\n // If the value is a List, recursively check each entry for a cycle.\n // Otherwise, only object values can contain a cycle.\n if (defaultValue.kind === Kind.LIST) {\n for (const itemLiteral of defaultValue.values) {\n detectLiteralDefaultValueCycle(inputObj, itemLiteral);\n }\n return;\n } else if (defaultValue.kind !== Kind.OBJECT) {\n return;\n }\n\n // Check each defined field for a cycle.\n const fieldNodes = keyMap(defaultValue.fields, (field) => field.name.value);\n for (const field of Object.values(inputObj.getFields())) {\n const namedFieldType = getNamedType(field.type);\n\n // Only input object type fields can result in a cycle.\n if (!isInputObjectType(namedFieldType)) {\n continue;\n }\n\n if (Object.hasOwn(fieldNodes, field.name)) {\n // If the provided value has this field defined, recursively check it\n // for cycles.\n detectLiteralDefaultValueCycle(\n namedFieldType,\n fieldNodes[field.name].value,\n );\n } else {\n // Otherwise check this field's default value for cycles.\n detectFieldDefaultValueCycle(\n field,\n namedFieldType,\n `${inputObj}.${field.name}`,\n );\n }\n }\n }\n\n function detectFieldDefaultValueCycle(\n field: GraphQLInputField,\n fieldType: GraphQLInputObjectType,\n fieldStr: string,\n ): void {\n // Only a field with a default value can result in a cycle.\n const defaultInput = field.default;\n if (defaultInput === undefined) {\n return;\n }\n\n // Check to see if there is cycle.\n const cycleIndex = fieldPathIndex[fieldStr];\n if (cycleIndex !== undefined) {\n context.reportError(\n `Invalid circular reference. The default value of Input Object field ${fieldStr} references itself${\n cycleIndex < fieldPath.length\n ? ` via the default values of: ${fieldPath\n .slice(cycleIndex)\n .map(([stringForMessage]) => stringForMessage)\n .join(', ')}`\n : ''\n }.`,\n fieldPath.slice(cycleIndex - 1).map(([, node]) => node),\n );\n return;\n }\n\n // Recurse into this field's default value once, tracking the path.\n if (visitedFields[fieldStr] === undefined) {\n visitedFields[fieldStr] = true;\n fieldPathIndex[fieldStr] = fieldPath.push([\n fieldStr,\n field.astNode?.defaultValue,\n ]);\n if (defaultInput.literal) {\n detectLiteralDefaultValueCycle(fieldType, defaultInput.literal);\n } else {\n detectValueDefaultValueCycle(fieldType, defaultInput.value);\n }\n fieldPath.pop();\n fieldPathIndex[fieldStr] = undefined;\n }\n }\n}\n\nfunction getAllImplementsInterfaceNodes(\n type: GraphQLObjectType | GraphQLInterfaceType,\n iface: GraphQLInterfaceType,\n): ReadonlyArray<NamedTypeNode> {\n const { astNode, extensionASTNodes } = type;\n const nodes: ReadonlyArray<\n | ObjectTypeDefinitionNode\n | ObjectTypeExtensionNode\n | InterfaceTypeDefinitionNode\n | InterfaceTypeExtensionNode\n > = astNode != null ? [astNode, ...extensionASTNodes] : extensionASTNodes;\n\n return nodes\n .flatMap((typeNode) => typeNode.interfaces ?? [])\n .filter((ifaceNode) => ifaceNode.name.value === iface.name);\n}\n\nfunction getUnionMemberTypeNodes(\n union: GraphQLUnionType,\n typeName: string,\n): ReadonlyArray<NamedTypeNode> {\n const { astNode, extensionASTNodes } = union;\n const nodes: ReadonlyArray<UnionTypeDefinitionNode | UnionTypeExtensionNode> =\n astNode != null ? [astNode, ...extensionASTNodes] : extensionASTNodes;\n\n return nodes\n .flatMap((unionNode) => unionNode.types ?? [])\n .filter((typeNode) => typeNode.name.value === typeName);\n}\n\nfunction getDeprecatedDirectiveNode(\n definitionNode: Maybe<{\n readonly directives?: ReadonlyArray<DirectiveNode> | undefined;\n }>,\n): Maybe<DirectiveNode> {\n return definitionNode?.directives?.find(\n (node) => node.name.value === GraphQLDeprecatedDirective.name,\n );\n}\n"]}
package/type/validate.mjs CHANGED
@@ -181,9 +181,9 @@ function validateName(context, node) {
181
181
  }
182
182
  }
183
183
  function validateTypes(context) {
184
- const validateInputObjectNonNullCircularRefs = createInputObjectNonNullCircularRefsValidator(context);
185
184
  const validateInputObjectDefaultValueCircularRefs = createInputObjectDefaultValueCircularRefsValidator(context);
186
185
  const typeMap = context.schema.getTypeMap();
186
+ const finiteValueStates = new Map();
187
187
  for (const type of Object.values(typeMap)) {
188
188
  if (!isNamedType(type)) {
189
189
  context.reportError(`Expected GraphQL named type but got: ${inspect(type)}.`, type.astNode);
@@ -208,10 +208,20 @@ function validateTypes(context) {
208
208
  }
209
209
  else if (isInputObjectType(type)) {
210
210
  validateInputFields(context, type);
211
- validateInputObjectNonNullCircularRefs(type);
211
+ initializeInputObjectFiniteValueState(type);
212
212
  validateInputObjectDefaultValueCircularRefs(type);
213
213
  }
214
214
  }
215
+ detectInputObjectNonFiniteValues(context, finiteValueStates);
216
+ function initializeInputObjectFiniteValueState(inputObj) {
217
+ finiteValueStates.set(inputObj, {
218
+ inputObj,
219
+ targets: [],
220
+ dependents: [],
221
+ unresolvedTargetCount: 0,
222
+ hasFiniteValue: false,
223
+ });
224
+ }
215
225
  }
216
226
  function validateFields(context, type) {
217
227
  const fields = Object.values(type.getFields());
@@ -373,42 +383,103 @@ function validateOneOfInputObjectField(type, field, context) {
373
383
  context.reportError(`OneOf input field ${type}.${field.name} cannot have a default value.`, field.astNode);
374
384
  }
375
385
  }
376
- function createInputObjectNonNullCircularRefsValidator(context) {
386
+ function detectInputObjectNonFiniteValues(context, finiteValueStates) {
387
+ const inputObjectsWithFiniteValues = [];
388
+ for (const state of finiteValueStates.values()) {
389
+ const inputObj = state.inputObj;
390
+ const fields = Object.values(inputObj.getFields());
391
+ for (const field of fields) {
392
+ const target = getFiniteValueTarget(inputObj, field.type);
393
+ if (target === undefined) {
394
+ continue;
395
+ }
396
+ state.targets.push({ field, target });
397
+ const targetState = finiteValueStates.get(target);
398
+ if (targetState !== undefined) {
399
+ targetState.dependents.push(state);
400
+ }
401
+ }
402
+ if (inputObj.isOneOf) {
403
+ if (fields.length === 0 || state.targets.length < fields.length) {
404
+ markInputObjectHasFiniteValue(state);
405
+ }
406
+ }
407
+ else {
408
+ state.unresolvedTargetCount = state.targets.length;
409
+ if (state.targets.length === 0) {
410
+ markInputObjectHasFiniteValue(state);
411
+ }
412
+ }
413
+ }
414
+ let nextFiniteValueState;
415
+ while ((nextFiniteValueState = inputObjectsWithFiniteValues.pop()) !== undefined) {
416
+ for (const dependentState of nextFiniteValueState.dependents) {
417
+ if (dependentState.hasFiniteValue) {
418
+ continue;
419
+ }
420
+ if (dependentState.inputObj.isOneOf) {
421
+ markInputObjectHasFiniteValue(dependentState);
422
+ continue;
423
+ }
424
+ --dependentState.unresolvedTargetCount;
425
+ if (dependentState.unresolvedTargetCount === 0) {
426
+ markInputObjectHasFiniteValue(dependentState);
427
+ }
428
+ }
429
+ }
377
430
  const visitedTypes = new Set();
378
431
  const fieldPath = [];
379
- const fieldPathIndexByTypeName = Object.create(null);
380
- return detectCycleRecursive;
381
- function detectCycleRecursive(inputObj) {
432
+ const fieldPathIndexByType = new Map();
433
+ for (const state of finiteValueStates.values()) {
434
+ if (!state.hasFiniteValue) {
435
+ reportCycleRecursive(state);
436
+ }
437
+ }
438
+ function markInputObjectHasFiniteValue(finiteValueState) {
439
+ if (!finiteValueState.hasFiniteValue) {
440
+ finiteValueState.hasFiniteValue = true;
441
+ inputObjectsWithFiniteValues.push(finiteValueState);
442
+ }
443
+ }
444
+ function reportCycleRecursive(state) {
445
+ const inputObj = state.inputObj;
382
446
  if (visitedTypes.has(inputObj)) {
383
447
  return;
384
448
  }
385
449
  visitedTypes.add(inputObj);
386
- fieldPathIndexByTypeName[inputObj.name] = fieldPath.length;
387
- const fields = Object.values(inputObj.getFields());
388
- for (const field of fields) {
389
- if (isNonNullType(field.type) && isInputObjectType(field.type.ofType)) {
390
- const fieldType = field.type.ofType;
391
- const cycleIndex = fieldPathIndexByTypeName[fieldType.name];
392
- fieldPath.push({
393
- fieldStr: `${inputObj}.${field.name}`,
394
- astNode: field.astNode,
395
- });
396
- if (cycleIndex === undefined) {
397
- detectCycleRecursive(fieldType);
398
- }
399
- else {
400
- const cyclePath = fieldPath.slice(cycleIndex);
401
- const pathStr = cyclePath
402
- .map((fieldObj) => fieldObj.fieldStr)
403
- .join(', ');
404
- context.reportError(`Invalid circular reference. The Input Object ${fieldType} references itself ${cyclePath.length > 1
405
- ? 'via the non-null fields:'
406
- : 'in the non-null field'} ${pathStr}.`, cyclePath.map((fieldObj) => fieldObj.astNode));
407
- }
408
- fieldPath.pop();
450
+ fieldPathIndexByType.set(inputObj, fieldPath.length);
451
+ for (const { field, target } of state.targets) {
452
+ const targetState = finiteValueStates.get(target);
453
+ if (targetState?.hasFiniteValue !== false) {
454
+ continue;
409
455
  }
456
+ const cycleIndex = fieldPathIndexByType.get(target);
457
+ fieldPath.push({
458
+ fieldStr: `${inputObj}.${field.name}`,
459
+ astNode: field.astNode,
460
+ });
461
+ if (cycleIndex === undefined) {
462
+ reportCycleRecursive(targetState);
463
+ }
464
+ else {
465
+ const cyclePath = fieldPath.slice(cycleIndex);
466
+ const pathStr = cyclePath.map((p) => p.fieldStr).join(', ');
467
+ context.reportError(`Input Object ${target} cannot be provided a finite value because it references itself through fields: ${pathStr}.`, cyclePath.map((p) => p.astNode));
468
+ }
469
+ fieldPath.pop();
410
470
  }
411
- fieldPathIndexByTypeName[inputObj.name] = undefined;
471
+ fieldPathIndexByType.delete(inputObj);
472
+ }
473
+ }
474
+ function getFiniteValueTarget(inputObj, fieldType) {
475
+ if (inputObj.isOneOf) {
476
+ if (isInputObjectType(fieldType)) {
477
+ return fieldType;
478
+ }
479
+ return;
480
+ }
481
+ if (isNonNullType(fieldType) && isInputObjectType(fieldType.ofType)) {
482
+ return fieldType.ofType;
412
483
  }
413
484
  }
414
485
  function createInputObjectDefaultValueCircularRefsValidator(context) {