graphql 0.0.1-test.1

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 (390) hide show
  1. package/LICENSE +21 -0
  2. package/NotSupportedTSVersion.d.ts +1 -0
  3. package/README.md +158 -0
  4. package/error/GraphQLError.d.ts +142 -0
  5. package/error/GraphQLError.js +267 -0
  6. package/error/GraphQLError.mjs +253 -0
  7. package/error/index.d.ts +7 -0
  8. package/error/index.js +41 -0
  9. package/error/index.mjs +3 -0
  10. package/error/locatedError.d.ts +13 -0
  11. package/error/locatedError.js +40 -0
  12. package/error/locatedError.mjs +32 -0
  13. package/error/syntaxError.d.ts +11 -0
  14. package/error/syntaxError.js +21 -0
  15. package/error/syntaxError.mjs +11 -0
  16. package/execution/collectFields.d.ts +45 -0
  17. package/execution/collectFields.js +229 -0
  18. package/execution/collectFields.mjs +213 -0
  19. package/execution/execute.d.ts +185 -0
  20. package/execution/execute.js +1016 -0
  21. package/execution/execute.mjs +988 -0
  22. package/execution/index.d.ts +14 -0
  23. package/execution/index.js +67 -0
  24. package/execution/index.mjs +9 -0
  25. package/execution/mapAsyncIterator.d.ts +9 -0
  26. package/execution/mapAsyncIterator.js +68 -0
  27. package/execution/mapAsyncIterator.mjs +61 -0
  28. package/execution/subscribe.d.ts +68 -0
  29. package/execution/subscribe.js +261 -0
  30. package/execution/subscribe.mjs +239 -0
  31. package/execution/values.d.ts +81 -0
  32. package/execution/values.js +292 -0
  33. package/execution/values.mjs +255 -0
  34. package/graphql.d.ts +67 -0
  35. package/graphql.js +96 -0
  36. package/graphql.mjs +122 -0
  37. package/index.d.ts +411 -0
  38. package/index.js +1263 -0
  39. package/index.mjs +254 -0
  40. package/jsutils/Maybe.d.ts +2 -0
  41. package/jsutils/Maybe.js +5 -0
  42. package/jsutils/Maybe.mjs +1 -0
  43. package/jsutils/ObjMap.d.ts +16 -0
  44. package/jsutils/ObjMap.js +5 -0
  45. package/jsutils/ObjMap.mjs +1 -0
  46. package/jsutils/Path.d.ts +20 -0
  47. package/jsutils/Path.js +33 -0
  48. package/jsutils/Path.mjs +25 -0
  49. package/jsutils/PromiseOrValue.d.ts +1 -0
  50. package/jsutils/PromiseOrValue.js +5 -0
  51. package/jsutils/PromiseOrValue.mjs +1 -0
  52. package/jsutils/devAssert.d.ts +1 -0
  53. package/jsutils/devAssert.js +14 -0
  54. package/jsutils/devAssert.mjs +7 -0
  55. package/jsutils/didYouMean.d.ts +8 -0
  56. package/jsutils/didYouMean.js +38 -0
  57. package/jsutils/didYouMean.mjs +32 -0
  58. package/jsutils/groupBy.d.ts +7 -0
  59. package/jsutils/groupBy.js +26 -0
  60. package/jsutils/groupBy.mjs +19 -0
  61. package/jsutils/identityFunc.d.ts +4 -0
  62. package/jsutils/identityFunc.js +13 -0
  63. package/jsutils/identityFunc.mjs +6 -0
  64. package/jsutils/inspect.d.ts +4 -0
  65. package/jsutils/inspect.js +121 -0
  66. package/jsutils/inspect.mjs +115 -0
  67. package/jsutils/instanceOf.d.ts +16 -0
  68. package/jsutils/instanceOf.js +60 -0
  69. package/jsutils/instanceOf.mjs +52 -0
  70. package/jsutils/invariant.d.ts +4 -0
  71. package/jsutils/invariant.js +16 -0
  72. package/jsutils/invariant.mjs +9 -0
  73. package/jsutils/isAsyncIterable.d.ts +7 -0
  74. package/jsutils/isAsyncIterable.js +18 -0
  75. package/jsutils/isAsyncIterable.mjs +11 -0
  76. package/jsutils/isIterableObject.d.ts +20 -0
  77. package/jsutils/isIterableObject.js +32 -0
  78. package/jsutils/isIterableObject.mjs +25 -0
  79. package/jsutils/isObjectLike.d.ts +7 -0
  80. package/jsutils/isObjectLike.js +14 -0
  81. package/jsutils/isObjectLike.mjs +7 -0
  82. package/jsutils/isPromise.d.ts +5 -0
  83. package/jsutils/isPromise.js +17 -0
  84. package/jsutils/isPromise.mjs +10 -0
  85. package/jsutils/keyMap.d.ts +32 -0
  86. package/jsutils/keyMap.js +43 -0
  87. package/jsutils/keyMap.mjs +36 -0
  88. package/jsutils/keyValMap.d.ts +23 -0
  89. package/jsutils/keyValMap.js +33 -0
  90. package/jsutils/keyValMap.mjs +26 -0
  91. package/jsutils/mapValue.d.ts +9 -0
  92. package/jsutils/mapValue.js +20 -0
  93. package/jsutils/mapValue.mjs +13 -0
  94. package/jsutils/memoize3.d.ts +9 -0
  95. package/jsutils/memoize3.js +41 -0
  96. package/jsutils/memoize3.mjs +34 -0
  97. package/jsutils/naturalCompare.d.ts +8 -0
  98. package/jsutils/naturalCompare.js +69 -0
  99. package/jsutils/naturalCompare.mjs +61 -0
  100. package/jsutils/printPathArray.d.ts +6 -0
  101. package/jsutils/printPathArray.js +17 -0
  102. package/jsutils/printPathArray.mjs +10 -0
  103. package/jsutils/promiseForObject.d.ts +11 -0
  104. package/jsutils/promiseForObject.js +25 -0
  105. package/jsutils/promiseForObject.mjs +18 -0
  106. package/jsutils/promiseReduce.d.ts +13 -0
  107. package/jsutils/promiseReduce.js +27 -0
  108. package/jsutils/promiseReduce.mjs +20 -0
  109. package/jsutils/suggestionList.d.ts +8 -0
  110. package/jsutils/suggestionList.js +139 -0
  111. package/jsutils/suggestionList.mjs +130 -0
  112. package/jsutils/toError.d.ts +4 -0
  113. package/jsutils/toError.js +25 -0
  114. package/jsutils/toError.mjs +18 -0
  115. package/jsutils/toObjMap.d.ts +5 -0
  116. package/jsutils/toObjMap.js +24 -0
  117. package/jsutils/toObjMap.mjs +17 -0
  118. package/language/ast.d.ts +536 -0
  119. package/language/ast.js +224 -0
  120. package/language/ast.mjs +206 -0
  121. package/language/blockString.d.ts +28 -0
  122. package/language/blockString.js +195 -0
  123. package/language/blockString.mjs +178 -0
  124. package/language/characterClasses.d.ts +47 -0
  125. package/language/characterClasses.js +75 -0
  126. package/language/characterClasses.mjs +64 -0
  127. package/language/directiveLocation.d.ts +32 -0
  128. package/language/directiveLocation.js +40 -0
  129. package/language/directiveLocation.mjs +31 -0
  130. package/language/index.d.ts +97 -0
  131. package/language/index.js +215 -0
  132. package/language/index.mjs +29 -0
  133. package/language/kinds.d.ts +65 -0
  134. package/language/kinds.js +64 -0
  135. package/language/kinds.mjs +55 -0
  136. package/language/lexer.d.ts +45 -0
  137. package/language/lexer.js +1006 -0
  138. package/language/lexer.mjs +902 -0
  139. package/language/location.d.ts +16 -0
  140. package/language/location.js +38 -0
  141. package/language/location.mjs +30 -0
  142. package/language/parser.d.ts +554 -0
  143. package/language/parser.js +1567 -0
  144. package/language/parser.mjs +1524 -0
  145. package/language/predicates.d.ts +33 -0
  146. package/language/predicates.js +109 -0
  147. package/language/predicates.mjs +81 -0
  148. package/language/printLocation.d.ts +14 -0
  149. package/language/printLocation.js +74 -0
  150. package/language/printLocation.mjs +66 -0
  151. package/language/printString.d.ts +5 -0
  152. package/language/printString.js +183 -0
  153. package/language/printString.mjs +176 -0
  154. package/language/printer.d.ts +6 -0
  155. package/language/printer.js +351 -0
  156. package/language/printer.mjs +339 -0
  157. package/language/source.d.ts +25 -0
  158. package/language/source.js +65 -0
  159. package/language/source.mjs +50 -0
  160. package/language/tokenKind.d.ts +34 -0
  161. package/language/tokenKind.js +44 -0
  162. package/language/tokenKind.mjs +35 -0
  163. package/language/visitor.d.ts +194 -0
  164. package/language/visitor.js +377 -0
  165. package/language/visitor.mjs +361 -0
  166. package/package.json +40 -0
  167. package/subscription/index.d.ts +19 -0
  168. package/subscription/index.js +19 -0
  169. package/subscription/index.mjs +19 -0
  170. package/type/assertName.d.ts +10 -0
  171. package/type/assertName.js +59 -0
  172. package/type/assertName.mjs +44 -0
  173. package/type/definition.d.ts +917 -0
  174. package/type/definition.js +1329 -0
  175. package/type/definition.mjs +1167 -0
  176. package/type/directives.d.ts +86 -0
  177. package/type/directives.js +224 -0
  178. package/type/directives.mjs +190 -0
  179. package/type/index.d.ts +150 -0
  180. package/type/index.js +547 -0
  181. package/type/index.mjs +103 -0
  182. package/type/introspection.d.ts +29 -0
  183. package/type/introspection.js +617 -0
  184. package/type/introspection.mjs +550 -0
  185. package/type/scalars.d.ts +19 -0
  186. package/type/scalars.js +359 -0
  187. package/type/scalars.mjs +299 -0
  188. package/type/schema.d.ts +170 -0
  189. package/type/schema.js +402 -0
  190. package/type/schema.mjs +381 -0
  191. package/type/validate.d.ts +17 -0
  192. package/type/validate.js +672 -0
  193. package/type/validate.mjs +647 -0
  194. package/utilities/TypeInfo.d.ts +67 -0
  195. package/utilities/TypeInfo.js +418 -0
  196. package/utilities/TypeInfo.mjs +395 -0
  197. package/utilities/assertValidName.d.ts +13 -0
  198. package/utilities/assertValidName.js +51 -0
  199. package/utilities/assertValidName.mjs +40 -0
  200. package/utilities/astFromValue.d.ts +28 -0
  201. package/utilities/astFromValue.js +190 -0
  202. package/utilities/astFromValue.mjs +177 -0
  203. package/utilities/buildASTSchema.d.ts +35 -0
  204. package/utilities/buildASTSchema.js +115 -0
  205. package/utilities/buildASTSchema.mjs +97 -0
  206. package/utilities/buildClientSchema.d.ts +19 -0
  207. package/utilities/buildClientSchema.js +386 -0
  208. package/utilities/buildClientSchema.mjs +363 -0
  209. package/utilities/coerceInputValue.d.ts +16 -0
  210. package/utilities/coerceInputValue.js +191 -0
  211. package/utilities/coerceInputValue.mjs +172 -0
  212. package/utilities/concatAST.d.ts +9 -0
  213. package/utilities/concatAST.js +26 -0
  214. package/utilities/concatAST.mjs +19 -0
  215. package/utilities/extendSchema.d.ts +40 -0
  216. package/utilities/extendSchema.js +798 -0
  217. package/utilities/extendSchema.mjs +789 -0
  218. package/utilities/findBreakingChanges.d.ts +51 -0
  219. package/utilities/findBreakingChanges.js +547 -0
  220. package/utilities/findBreakingChanges.mjs +516 -0
  221. package/utilities/getIntrospectionQuery.d.ts +182 -0
  222. package/utilities/getIntrospectionQuery.js +134 -0
  223. package/utilities/getIntrospectionQuery.mjs +127 -0
  224. package/utilities/getOperationAST.d.ts +11 -0
  225. package/utilities/getOperationAST.js +43 -0
  226. package/utilities/getOperationAST.mjs +36 -0
  227. package/utilities/getOperationRootType.d.ts +15 -0
  228. package/utilities/getOperationRootType.js +59 -0
  229. package/utilities/getOperationRootType.mjs +52 -0
  230. package/utilities/index.d.ts +61 -0
  231. package/utilities/index.js +233 -0
  232. package/utilities/index.mjs +55 -0
  233. package/utilities/introspectionFromSchema.d.ts +18 -0
  234. package/utilities/introspectionFromSchema.js +42 -0
  235. package/utilities/introspectionFromSchema.mjs +30 -0
  236. package/utilities/lexicographicSortSchema.d.ts +9 -0
  237. package/utilities/lexicographicSortSchema.js +177 -0
  238. package/utilities/lexicographicSortSchema.mjs +172 -0
  239. package/utilities/printSchema.d.ts +5 -0
  240. package/utilities/printSchema.js +333 -0
  241. package/utilities/printSchema.mjs +309 -0
  242. package/utilities/separateOperations.d.ts +11 -0
  243. package/utilities/separateOperations.js +88 -0
  244. package/utilities/separateOperations.mjs +80 -0
  245. package/utilities/sortValueNode.d.ts +9 -0
  246. package/utilities/sortValueNode.js +47 -0
  247. package/utilities/sortValueNode.mjs +39 -0
  248. package/utilities/stripIgnoredCharacters.d.ts +62 -0
  249. package/utilities/stripIgnoredCharacters.js +121 -0
  250. package/utilities/stripIgnoredCharacters.mjs +104 -0
  251. package/utilities/typeComparators.d.ts +32 -0
  252. package/utilities/typeComparators.js +116 -0
  253. package/utilities/typeComparators.mjs +106 -0
  254. package/utilities/typeFromAST.d.ts +32 -0
  255. package/utilities/typeFromAST.js +27 -0
  256. package/utilities/typeFromAST.mjs +18 -0
  257. package/utilities/typedQueryDocumentNode.d.ts +22 -0
  258. package/utilities/typedQueryDocumentNode.js +5 -0
  259. package/utilities/typedQueryDocumentNode.mjs +1 -0
  260. package/utilities/valueFromAST.d.ts +29 -0
  261. package/utilities/valueFromAST.js +185 -0
  262. package/utilities/valueFromAST.mjs +172 -0
  263. package/utilities/valueFromASTUntyped.d.ts +23 -0
  264. package/utilities/valueFromASTUntyped.js +61 -0
  265. package/utilities/valueFromASTUntyped.mjs +53 -0
  266. package/validation/ValidationContext.d.ts +95 -0
  267. package/validation/ValidationContext.js +232 -0
  268. package/validation/ValidationContext.mjs +212 -0
  269. package/validation/index.d.ts +40 -0
  270. package/validation/index.js +317 -0
  271. package/validation/index.mjs +68 -0
  272. package/validation/rules/ExecutableDefinitionsRule.d.ts +13 -0
  273. package/validation/rules/ExecutableDefinitionsRule.js +44 -0
  274. package/validation/rules/ExecutableDefinitionsRule.mjs +35 -0
  275. package/validation/rules/FieldsOnCorrectTypeRule.d.ts +13 -0
  276. package/validation/rules/FieldsOnCorrectTypeRule.js +143 -0
  277. package/validation/rules/FieldsOnCorrectTypeRule.mjs +125 -0
  278. package/validation/rules/FragmentsOnCompositeTypesRule.d.ts +14 -0
  279. package/validation/rules/FragmentsOnCompositeTypesRule.js +65 -0
  280. package/validation/rules/FragmentsOnCompositeTypesRule.mjs +49 -0
  281. package/validation/rules/KnownArgumentNamesRule.d.ts +23 -0
  282. package/validation/rules/KnownArgumentNamesRule.js +116 -0
  283. package/validation/rules/KnownArgumentNamesRule.mjs +98 -0
  284. package/validation/rules/KnownDirectivesRule.d.ts +16 -0
  285. package/validation/rules/KnownDirectivesRule.js +163 -0
  286. package/validation/rules/KnownDirectivesRule.mjs +146 -0
  287. package/validation/rules/KnownFragmentNamesRule.d.ts +13 -0
  288. package/validation/rules/KnownFragmentNamesRule.js +34 -0
  289. package/validation/rules/KnownFragmentNamesRule.mjs +24 -0
  290. package/validation/rules/KnownTypeNamesRule.d.ts +16 -0
  291. package/validation/rules/KnownTypeNamesRule.js +87 -0
  292. package/validation/rules/KnownTypeNamesRule.mjs +75 -0
  293. package/validation/rules/LoneAnonymousOperationRule.d.ts +13 -0
  294. package/validation/rules/LoneAnonymousOperationRule.js +40 -0
  295. package/validation/rules/LoneAnonymousOperationRule.mjs +32 -0
  296. package/validation/rules/LoneSchemaDefinitionRule.d.ts +10 -0
  297. package/validation/rules/LoneSchemaDefinitionRule.js +63 -0
  298. package/validation/rules/LoneSchemaDefinitionRule.mjs +53 -0
  299. package/validation/rules/NoFragmentCyclesRule.d.ts +13 -0
  300. package/validation/rules/NoFragmentCyclesRule.js +83 -0
  301. package/validation/rules/NoFragmentCyclesRule.mjs +76 -0
  302. package/validation/rules/NoUndefinedVariablesRule.d.ts +13 -0
  303. package/validation/rules/NoUndefinedVariablesRule.js +50 -0
  304. package/validation/rules/NoUndefinedVariablesRule.mjs +43 -0
  305. package/validation/rules/NoUnusedFragmentsRule.d.ts +13 -0
  306. package/validation/rules/NoUnusedFragmentsRule.js +59 -0
  307. package/validation/rules/NoUnusedFragmentsRule.mjs +52 -0
  308. package/validation/rules/NoUnusedVariablesRule.d.ts +13 -0
  309. package/validation/rules/NoUnusedVariablesRule.js +55 -0
  310. package/validation/rules/NoUnusedVariablesRule.mjs +48 -0
  311. package/validation/rules/OverlappingFieldsCanBeMergedRule-old.js +805 -0
  312. package/validation/rules/OverlappingFieldsCanBeMergedRule-old.mjs +788 -0
  313. package/validation/rules/OverlappingFieldsCanBeMergedRule.d.ts +14 -0
  314. package/validation/rules/OverlappingFieldsCanBeMergedRule.js +805 -0
  315. package/validation/rules/OverlappingFieldsCanBeMergedRule.mjs +788 -0
  316. package/validation/rules/PossibleFragmentSpreadsRule.d.ts +12 -0
  317. package/validation/rules/PossibleFragmentSpreadsRule.js +91 -0
  318. package/validation/rules/PossibleFragmentSpreadsRule.mjs +69 -0
  319. package/validation/rules/PossibleTypeExtensionsRule.d.ts +10 -0
  320. package/validation/rules/PossibleTypeExtensionsRule.js +167 -0
  321. package/validation/rules/PossibleTypeExtensionsRule.mjs +147 -0
  322. package/validation/rules/ProvidedRequiredArgumentsRule.d.ts +20 -0
  323. package/validation/rules/ProvidedRequiredArgumentsRule.js +158 -0
  324. package/validation/rules/ProvidedRequiredArgumentsRule.mjs +138 -0
  325. package/validation/rules/ScalarLeafsRule.d.ts +9 -0
  326. package/validation/rules/ScalarLeafsRule.js +51 -0
  327. package/validation/rules/ScalarLeafsRule.mjs +42 -0
  328. package/validation/rules/SingleFieldSubscriptionsRule.d.ts +13 -0
  329. package/validation/rules/SingleFieldSubscriptionsRule.js +82 -0
  330. package/validation/rules/SingleFieldSubscriptionsRule.mjs +73 -0
  331. package/validation/rules/UniqueArgumentDefinitionNamesRule.d.ts +11 -0
  332. package/validation/rules/UniqueArgumentDefinitionNamesRule.js +90 -0
  333. package/validation/rules/UniqueArgumentDefinitionNamesRule.mjs +79 -0
  334. package/validation/rules/UniqueArgumentNamesRule.d.ts +13 -0
  335. package/validation/rules/UniqueArgumentNamesRule.js +53 -0
  336. package/validation/rules/UniqueArgumentNamesRule.mjs +42 -0
  337. package/validation/rules/UniqueDirectiveNamesRule.d.ts +10 -0
  338. package/validation/rules/UniqueDirectiveNamesRule.js +50 -0
  339. package/validation/rules/UniqueDirectiveNamesRule.mjs +43 -0
  340. package/validation/rules/UniqueDirectivesPerLocationRule.d.ts +16 -0
  341. package/validation/rules/UniqueDirectivesPerLocationRule.js +93 -0
  342. package/validation/rules/UniqueDirectivesPerLocationRule.mjs +83 -0
  343. package/validation/rules/UniqueEnumValueNamesRule.d.ts +10 -0
  344. package/validation/rules/UniqueEnumValueNamesRule.js +71 -0
  345. package/validation/rules/UniqueEnumValueNamesRule.mjs +60 -0
  346. package/validation/rules/UniqueFieldDefinitionNamesRule.d.ts +10 -0
  347. package/validation/rules/UniqueFieldDefinitionNamesRule.js +83 -0
  348. package/validation/rules/UniqueFieldDefinitionNamesRule.mjs +75 -0
  349. package/validation/rules/UniqueFragmentNamesRule.d.ts +12 -0
  350. package/validation/rules/UniqueFragmentNamesRule.js +39 -0
  351. package/validation/rules/UniqueFragmentNamesRule.mjs +32 -0
  352. package/validation/rules/UniqueInputFieldNamesRule.d.ts +13 -0
  353. package/validation/rules/UniqueInputFieldNamesRule.js +52 -0
  354. package/validation/rules/UniqueInputFieldNamesRule.mjs +44 -0
  355. package/validation/rules/UniqueOperationNamesRule.d.ts +12 -0
  356. package/validation/rules/UniqueOperationNamesRule.js +41 -0
  357. package/validation/rules/UniqueOperationNamesRule.mjs +34 -0
  358. package/validation/rules/UniqueOperationTypesRule.d.ts +10 -0
  359. package/validation/rules/UniqueOperationTypesRule.js +67 -0
  360. package/validation/rules/UniqueOperationTypesRule.mjs +60 -0
  361. package/validation/rules/UniqueTypeNamesRule.d.ts +10 -0
  362. package/validation/rules/UniqueTypeNamesRule.js +53 -0
  363. package/validation/rules/UniqueTypeNamesRule.mjs +46 -0
  364. package/validation/rules/UniqueVariableNamesRule.d.ts +10 -0
  365. package/validation/rules/UniqueVariableNamesRule.js +47 -0
  366. package/validation/rules/UniqueVariableNamesRule.mjs +39 -0
  367. package/validation/rules/ValuesOfCorrectTypeRule.d.ts +13 -0
  368. package/validation/rules/ValuesOfCorrectTypeRule.js +183 -0
  369. package/validation/rules/ValuesOfCorrectTypeRule.mjs +164 -0
  370. package/validation/rules/VariablesAreInputTypesRule.d.ts +13 -0
  371. package/validation/rules/VariablesAreInputTypesRule.js +44 -0
  372. package/validation/rules/VariablesAreInputTypesRule.mjs +31 -0
  373. package/validation/rules/VariablesInAllowedPositionRule.d.ts +12 -0
  374. package/validation/rules/VariablesInAllowedPositionRule.js +114 -0
  375. package/validation/rules/VariablesInAllowedPositionRule.mjs +95 -0
  376. package/validation/rules/custom/NoDeprecatedCustomRule.d.ts +15 -0
  377. package/validation/rules/custom/NoDeprecatedCustomRule.js +121 -0
  378. package/validation/rules/custom/NoDeprecatedCustomRule.mjs +107 -0
  379. package/validation/rules/custom/NoSchemaIntrospectionCustomRule.d.ts +15 -0
  380. package/validation/rules/custom/NoSchemaIntrospectionCustomRule.js +39 -0
  381. package/validation/rules/custom/NoSchemaIntrospectionCustomRule.mjs +30 -0
  382. package/validation/specifiedRules.d.ts +12 -0
  383. package/validation/specifiedRules.js +160 -0
  384. package/validation/specifiedRules.mjs +123 -0
  385. package/validation/validate.d.ts +61 -0
  386. package/validation/validate.js +151 -0
  387. package/validation/validate.mjs +133 -0
  388. package/version.d.ts +13 -0
  389. package/version.js +25 -0
  390. package/version.mjs +17 -0
@@ -0,0 +1,1167 @@
1
+ import { devAssert } from '../jsutils/devAssert.mjs';
2
+ import { didYouMean } from '../jsutils/didYouMean.mjs';
3
+ import { identityFunc } from '../jsutils/identityFunc.mjs';
4
+ import { inspect } from '../jsutils/inspect.mjs';
5
+ import { instanceOf } from '../jsutils/instanceOf.mjs';
6
+ import { isObjectLike } from '../jsutils/isObjectLike.mjs';
7
+ import { keyMap } from '../jsutils/keyMap.mjs';
8
+ import { keyValMap } from '../jsutils/keyValMap.mjs';
9
+ import { mapValue } from '../jsutils/mapValue.mjs';
10
+ import { suggestionList } from '../jsutils/suggestionList.mjs';
11
+ import { toObjMap } from '../jsutils/toObjMap.mjs';
12
+ import { GraphQLError } from '../error/GraphQLError.mjs';
13
+ import { Kind } from '../language/kinds.mjs';
14
+ import { print } from '../language/printer.mjs';
15
+ import { valueFromASTUntyped } from '../utilities/valueFromASTUntyped.mjs';
16
+ import { assertEnumValueName, assertName } from './assertName.mjs';
17
+ export function isType(type) {
18
+ return (
19
+ isScalarType(type) ||
20
+ isObjectType(type) ||
21
+ isInterfaceType(type) ||
22
+ isUnionType(type) ||
23
+ isEnumType(type) ||
24
+ isInputObjectType(type) ||
25
+ isListType(type) ||
26
+ isNonNullType(type)
27
+ );
28
+ }
29
+ export function assertType(type) {
30
+ if (!isType(type)) {
31
+ throw new Error(`Expected ${inspect(type)} to be a GraphQL type.`);
32
+ }
33
+
34
+ return type;
35
+ }
36
+ /**
37
+ * There are predicates for each kind of GraphQL type.
38
+ */
39
+
40
+ export function isScalarType(type) {
41
+ return instanceOf(type, GraphQLScalarType);
42
+ }
43
+ export function assertScalarType(type) {
44
+ if (!isScalarType(type)) {
45
+ throw new Error(`Expected ${inspect(type)} to be a GraphQL Scalar type.`);
46
+ }
47
+
48
+ return type;
49
+ }
50
+ export function isObjectType(type) {
51
+ return instanceOf(type, GraphQLObjectType);
52
+ }
53
+ export function assertObjectType(type) {
54
+ if (!isObjectType(type)) {
55
+ throw new Error(`Expected ${inspect(type)} to be a GraphQL Object type.`);
56
+ }
57
+
58
+ return type;
59
+ }
60
+ export function isInterfaceType(type) {
61
+ return instanceOf(type, GraphQLInterfaceType);
62
+ }
63
+ export function assertInterfaceType(type) {
64
+ if (!isInterfaceType(type)) {
65
+ throw new Error(
66
+ `Expected ${inspect(type)} to be a GraphQL Interface type.`,
67
+ );
68
+ }
69
+
70
+ return type;
71
+ }
72
+ export function isUnionType(type) {
73
+ return instanceOf(type, GraphQLUnionType);
74
+ }
75
+ export function assertUnionType(type) {
76
+ if (!isUnionType(type)) {
77
+ throw new Error(`Expected ${inspect(type)} to be a GraphQL Union type.`);
78
+ }
79
+
80
+ return type;
81
+ }
82
+ export function isEnumType(type) {
83
+ return instanceOf(type, GraphQLEnumType);
84
+ }
85
+ export function assertEnumType(type) {
86
+ if (!isEnumType(type)) {
87
+ throw new Error(`Expected ${inspect(type)} to be a GraphQL Enum type.`);
88
+ }
89
+
90
+ return type;
91
+ }
92
+ export function isInputObjectType(type) {
93
+ return instanceOf(type, GraphQLInputObjectType);
94
+ }
95
+ export function assertInputObjectType(type) {
96
+ if (!isInputObjectType(type)) {
97
+ throw new Error(
98
+ `Expected ${inspect(type)} to be a GraphQL Input Object type.`,
99
+ );
100
+ }
101
+
102
+ return type;
103
+ }
104
+ export function isListType(type) {
105
+ return instanceOf(type, GraphQLList);
106
+ }
107
+ export function assertListType(type) {
108
+ if (!isListType(type)) {
109
+ throw new Error(`Expected ${inspect(type)} to be a GraphQL List type.`);
110
+ }
111
+
112
+ return type;
113
+ }
114
+ export function isNonNullType(type) {
115
+ return instanceOf(type, GraphQLNonNull);
116
+ }
117
+ export function assertNonNullType(type) {
118
+ if (!isNonNullType(type)) {
119
+ throw new Error(`Expected ${inspect(type)} to be a GraphQL Non-Null type.`);
120
+ }
121
+
122
+ return type;
123
+ }
124
+ /**
125
+ * These types may be used as input types for arguments and directives.
126
+ */
127
+
128
+ export function isInputType(type) {
129
+ return (
130
+ isScalarType(type) ||
131
+ isEnumType(type) ||
132
+ isInputObjectType(type) ||
133
+ (isWrappingType(type) && isInputType(type.ofType))
134
+ );
135
+ }
136
+ export function assertInputType(type) {
137
+ if (!isInputType(type)) {
138
+ throw new Error(`Expected ${inspect(type)} to be a GraphQL input type.`);
139
+ }
140
+
141
+ return type;
142
+ }
143
+ /**
144
+ * These types may be used as output types as the result of fields.
145
+ */
146
+
147
+ export function isOutputType(type) {
148
+ return (
149
+ isScalarType(type) ||
150
+ isObjectType(type) ||
151
+ isInterfaceType(type) ||
152
+ isUnionType(type) ||
153
+ isEnumType(type) ||
154
+ (isWrappingType(type) && isOutputType(type.ofType))
155
+ );
156
+ }
157
+ export function assertOutputType(type) {
158
+ if (!isOutputType(type)) {
159
+ throw new Error(`Expected ${inspect(type)} to be a GraphQL output type.`);
160
+ }
161
+
162
+ return type;
163
+ }
164
+ /**
165
+ * These types may describe types which may be leaf values.
166
+ */
167
+
168
+ export function isLeafType(type) {
169
+ return isScalarType(type) || isEnumType(type);
170
+ }
171
+ export function assertLeafType(type) {
172
+ if (!isLeafType(type)) {
173
+ throw new Error(`Expected ${inspect(type)} to be a GraphQL leaf type.`);
174
+ }
175
+
176
+ return type;
177
+ }
178
+ /**
179
+ * These types may describe the parent context of a selection set.
180
+ */
181
+
182
+ export function isCompositeType(type) {
183
+ return isObjectType(type) || isInterfaceType(type) || isUnionType(type);
184
+ }
185
+ export function assertCompositeType(type) {
186
+ if (!isCompositeType(type)) {
187
+ throw new Error(
188
+ `Expected ${inspect(type)} to be a GraphQL composite type.`,
189
+ );
190
+ }
191
+
192
+ return type;
193
+ }
194
+ /**
195
+ * These types may describe the parent context of a selection set.
196
+ */
197
+
198
+ export function isAbstractType(type) {
199
+ return isInterfaceType(type) || isUnionType(type);
200
+ }
201
+ export function assertAbstractType(type) {
202
+ if (!isAbstractType(type)) {
203
+ throw new Error(`Expected ${inspect(type)} to be a GraphQL abstract type.`);
204
+ }
205
+
206
+ return type;
207
+ }
208
+ /**
209
+ * List Type Wrapper
210
+ *
211
+ * A list is a wrapping type which points to another type.
212
+ * Lists are often created within the context of defining the fields of
213
+ * an object type.
214
+ *
215
+ * Example:
216
+ *
217
+ * ```ts
218
+ * const PersonType = new GraphQLObjectType({
219
+ * name: 'Person',
220
+ * fields: () => ({
221
+ * parents: { type: new GraphQLList(PersonType) },
222
+ * children: { type: new GraphQLList(PersonType) },
223
+ * })
224
+ * })
225
+ * ```
226
+ */
227
+
228
+ export class GraphQLList {
229
+ constructor(ofType) {
230
+ isType(ofType) ||
231
+ devAssert(false, `Expected ${inspect(ofType)} to be a GraphQL type.`);
232
+ this.ofType = ofType;
233
+ }
234
+
235
+ get [Symbol.toStringTag]() {
236
+ return 'GraphQLList';
237
+ }
238
+
239
+ toString() {
240
+ return '[' + String(this.ofType) + ']';
241
+ }
242
+
243
+ toJSON() {
244
+ return this.toString();
245
+ }
246
+ }
247
+ /**
248
+ * Non-Null Type Wrapper
249
+ *
250
+ * A non-null is a wrapping type which points to another type.
251
+ * Non-null types enforce that their values are never null and can ensure
252
+ * an error is raised if this ever occurs during a request. It is useful for
253
+ * fields which you can make a strong guarantee on non-nullability, for example
254
+ * usually the id field of a database row will never be null.
255
+ *
256
+ * Example:
257
+ *
258
+ * ```ts
259
+ * const RowType = new GraphQLObjectType({
260
+ * name: 'Row',
261
+ * fields: () => ({
262
+ * id: { type: new GraphQLNonNull(GraphQLString) },
263
+ * })
264
+ * })
265
+ * ```
266
+ * Note: the enforcement of non-nullability occurs within the executor.
267
+ */
268
+
269
+ export class GraphQLNonNull {
270
+ constructor(ofType) {
271
+ isNullableType(ofType) ||
272
+ devAssert(
273
+ false,
274
+ `Expected ${inspect(ofType)} to be a GraphQL nullable type.`,
275
+ );
276
+ this.ofType = ofType;
277
+ }
278
+
279
+ get [Symbol.toStringTag]() {
280
+ return 'GraphQLNonNull';
281
+ }
282
+
283
+ toString() {
284
+ return String(this.ofType) + '!';
285
+ }
286
+
287
+ toJSON() {
288
+ return this.toString();
289
+ }
290
+ }
291
+ /**
292
+ * These types wrap and modify other types
293
+ */
294
+
295
+ export function isWrappingType(type) {
296
+ return isListType(type) || isNonNullType(type);
297
+ }
298
+ export function assertWrappingType(type) {
299
+ if (!isWrappingType(type)) {
300
+ throw new Error(`Expected ${inspect(type)} to be a GraphQL wrapping type.`);
301
+ }
302
+
303
+ return type;
304
+ }
305
+ /**
306
+ * These types can all accept null as a value.
307
+ */
308
+
309
+ export function isNullableType(type) {
310
+ return isType(type) && !isNonNullType(type);
311
+ }
312
+ export function assertNullableType(type) {
313
+ if (!isNullableType(type)) {
314
+ throw new Error(`Expected ${inspect(type)} to be a GraphQL nullable type.`);
315
+ }
316
+
317
+ return type;
318
+ }
319
+ export function getNullableType(type) {
320
+ if (type) {
321
+ return isNonNullType(type) ? type.ofType : type;
322
+ }
323
+ }
324
+ /**
325
+ * These named types do not include modifiers like List or NonNull.
326
+ */
327
+
328
+ export function isNamedType(type) {
329
+ return (
330
+ isScalarType(type) ||
331
+ isObjectType(type) ||
332
+ isInterfaceType(type) ||
333
+ isUnionType(type) ||
334
+ isEnumType(type) ||
335
+ isInputObjectType(type)
336
+ );
337
+ }
338
+ export function assertNamedType(type) {
339
+ if (!isNamedType(type)) {
340
+ throw new Error(`Expected ${inspect(type)} to be a GraphQL named type.`);
341
+ }
342
+
343
+ return type;
344
+ }
345
+ export function getNamedType(type) {
346
+ if (type) {
347
+ let unwrappedType = type;
348
+
349
+ while (isWrappingType(unwrappedType)) {
350
+ unwrappedType = unwrappedType.ofType;
351
+ }
352
+
353
+ return unwrappedType;
354
+ }
355
+ }
356
+ /**
357
+ * Used while defining GraphQL types to allow for circular references in
358
+ * otherwise immutable type definitions.
359
+ */
360
+
361
+ export function resolveReadonlyArrayThunk(thunk) {
362
+ return typeof thunk === 'function' ? thunk() : thunk;
363
+ }
364
+ export function resolveObjMapThunk(thunk) {
365
+ return typeof thunk === 'function' ? thunk() : thunk;
366
+ }
367
+ /**
368
+ * Custom extensions
369
+ *
370
+ * @remarks
371
+ * Use a unique identifier name for your extension, for example the name of
372
+ * your library or project. Do not use a shortened identifier as this increases
373
+ * the risk of conflicts. We recommend you add at most one extension field,
374
+ * an object which can contain all the values you need.
375
+ */
376
+
377
+ /**
378
+ * Scalar Type Definition
379
+ *
380
+ * The leaf values of any request and input values to arguments are
381
+ * Scalars (or Enums) and are defined with a name and a series of functions
382
+ * used to parse input from ast or variables and to ensure validity.
383
+ *
384
+ * If a type's serialize function does not return a value (i.e. it returns
385
+ * `undefined`) then an error will be raised and a `null` value will be returned
386
+ * in the response. If the serialize function returns `null`, then no error will
387
+ * be included in the response.
388
+ *
389
+ * Example:
390
+ *
391
+ * ```ts
392
+ * const OddType = new GraphQLScalarType({
393
+ * name: 'Odd',
394
+ * serialize(value) {
395
+ * if (value % 2 === 1) {
396
+ * return value;
397
+ * }
398
+ * }
399
+ * });
400
+ * ```
401
+ */
402
+ export class GraphQLScalarType {
403
+ constructor(config) {
404
+ var _config$parseValue,
405
+ _config$serialize,
406
+ _config$parseLiteral,
407
+ _config$extensionASTN;
408
+
409
+ const parseValue =
410
+ (_config$parseValue = config.parseValue) !== null &&
411
+ _config$parseValue !== void 0
412
+ ? _config$parseValue
413
+ : identityFunc;
414
+ this.name = assertName(config.name);
415
+ this.description = config.description;
416
+ this.specifiedByURL = config.specifiedByURL;
417
+ this.serialize =
418
+ (_config$serialize = config.serialize) !== null &&
419
+ _config$serialize !== void 0
420
+ ? _config$serialize
421
+ : identityFunc;
422
+ this.parseValue = parseValue;
423
+ this.parseLiteral =
424
+ (_config$parseLiteral = config.parseLiteral) !== null &&
425
+ _config$parseLiteral !== void 0
426
+ ? _config$parseLiteral
427
+ : (node, variables) => parseValue(valueFromASTUntyped(node, variables));
428
+ this.extensions = toObjMap(config.extensions);
429
+ this.astNode = config.astNode;
430
+ this.extensionASTNodes =
431
+ (_config$extensionASTN = config.extensionASTNodes) !== null &&
432
+ _config$extensionASTN !== void 0
433
+ ? _config$extensionASTN
434
+ : [];
435
+ config.specifiedByURL == null ||
436
+ typeof config.specifiedByURL === 'string' ||
437
+ devAssert(
438
+ false,
439
+ `${this.name} must provide "specifiedByURL" as a string, ` +
440
+ `but got: ${inspect(config.specifiedByURL)}.`,
441
+ );
442
+ config.serialize == null ||
443
+ typeof config.serialize === 'function' ||
444
+ devAssert(
445
+ false,
446
+ `${this.name} must provide "serialize" function. If this custom Scalar is also used as an input type, ensure "parseValue" and "parseLiteral" functions are also provided.`,
447
+ );
448
+
449
+ if (config.parseLiteral) {
450
+ (typeof config.parseValue === 'function' &&
451
+ typeof config.parseLiteral === 'function') ||
452
+ devAssert(
453
+ false,
454
+ `${this.name} must provide both "parseValue" and "parseLiteral" functions.`,
455
+ );
456
+ }
457
+ }
458
+
459
+ get [Symbol.toStringTag]() {
460
+ return 'GraphQLScalarType';
461
+ }
462
+
463
+ toConfig() {
464
+ return {
465
+ name: this.name,
466
+ description: this.description,
467
+ specifiedByURL: this.specifiedByURL,
468
+ serialize: this.serialize,
469
+ parseValue: this.parseValue,
470
+ parseLiteral: this.parseLiteral,
471
+ extensions: this.extensions,
472
+ astNode: this.astNode,
473
+ extensionASTNodes: this.extensionASTNodes,
474
+ };
475
+ }
476
+
477
+ toString() {
478
+ return this.name;
479
+ }
480
+
481
+ toJSON() {
482
+ return this.toString();
483
+ }
484
+ }
485
+
486
+ /**
487
+ * Object Type Definition
488
+ *
489
+ * Almost all of the GraphQL types you define will be object types. Object types
490
+ * have a name, but most importantly describe their fields.
491
+ *
492
+ * Example:
493
+ *
494
+ * ```ts
495
+ * const AddressType = new GraphQLObjectType({
496
+ * name: 'Address',
497
+ * fields: {
498
+ * street: { type: GraphQLString },
499
+ * number: { type: GraphQLInt },
500
+ * formatted: {
501
+ * type: GraphQLString,
502
+ * resolve(obj) {
503
+ * return obj.number + ' ' + obj.street
504
+ * }
505
+ * }
506
+ * }
507
+ * });
508
+ * ```
509
+ *
510
+ * When two types need to refer to each other, or a type needs to refer to
511
+ * itself in a field, you can use a function expression (aka a closure or a
512
+ * thunk) to supply the fields lazily.
513
+ *
514
+ * Example:
515
+ *
516
+ * ```ts
517
+ * const PersonType = new GraphQLObjectType({
518
+ * name: 'Person',
519
+ * fields: () => ({
520
+ * name: { type: GraphQLString },
521
+ * bestFriend: { type: PersonType },
522
+ * })
523
+ * });
524
+ * ```
525
+ */
526
+ export class GraphQLObjectType {
527
+ constructor(config) {
528
+ var _config$extensionASTN2;
529
+
530
+ this.name = assertName(config.name);
531
+ this.description = config.description;
532
+ this.isTypeOf = config.isTypeOf;
533
+ this.extensions = toObjMap(config.extensions);
534
+ this.astNode = config.astNode;
535
+ this.extensionASTNodes =
536
+ (_config$extensionASTN2 = config.extensionASTNodes) !== null &&
537
+ _config$extensionASTN2 !== void 0
538
+ ? _config$extensionASTN2
539
+ : [];
540
+
541
+ this._fields = () => defineFieldMap(config);
542
+
543
+ this._interfaces = () => defineInterfaces(config);
544
+
545
+ config.isTypeOf == null ||
546
+ typeof config.isTypeOf === 'function' ||
547
+ devAssert(
548
+ false,
549
+ `${this.name} must provide "isTypeOf" as a function, ` +
550
+ `but got: ${inspect(config.isTypeOf)}.`,
551
+ );
552
+ }
553
+
554
+ get [Symbol.toStringTag]() {
555
+ return 'GraphQLObjectType';
556
+ }
557
+
558
+ getFields() {
559
+ if (typeof this._fields === 'function') {
560
+ this._fields = this._fields();
561
+ }
562
+
563
+ return this._fields;
564
+ }
565
+
566
+ getInterfaces() {
567
+ if (typeof this._interfaces === 'function') {
568
+ this._interfaces = this._interfaces();
569
+ }
570
+
571
+ return this._interfaces;
572
+ }
573
+
574
+ toConfig() {
575
+ return {
576
+ name: this.name,
577
+ description: this.description,
578
+ interfaces: this.getInterfaces(),
579
+ fields: fieldsToFieldsConfig(this.getFields()),
580
+ isTypeOf: this.isTypeOf,
581
+ extensions: this.extensions,
582
+ astNode: this.astNode,
583
+ extensionASTNodes: this.extensionASTNodes,
584
+ };
585
+ }
586
+
587
+ toString() {
588
+ return this.name;
589
+ }
590
+
591
+ toJSON() {
592
+ return this.toString();
593
+ }
594
+ }
595
+
596
+ function defineInterfaces(config) {
597
+ var _config$interfaces;
598
+
599
+ const interfaces = resolveReadonlyArrayThunk(
600
+ (_config$interfaces = config.interfaces) !== null &&
601
+ _config$interfaces !== void 0
602
+ ? _config$interfaces
603
+ : [],
604
+ );
605
+ Array.isArray(interfaces) ||
606
+ devAssert(
607
+ false,
608
+ `${config.name} interfaces must be an Array or a function which returns an Array.`,
609
+ );
610
+ return interfaces;
611
+ }
612
+
613
+ function defineFieldMap(config) {
614
+ const fieldMap = resolveObjMapThunk(config.fields);
615
+ isPlainObj(fieldMap) ||
616
+ devAssert(
617
+ false,
618
+ `${config.name} fields must be an object with field names as keys or a function which returns such an object.`,
619
+ );
620
+ return mapValue(fieldMap, (fieldConfig, fieldName) => {
621
+ var _fieldConfig$args;
622
+
623
+ isPlainObj(fieldConfig) ||
624
+ devAssert(
625
+ false,
626
+ `${config.name}.${fieldName} field config must be an object.`,
627
+ );
628
+ fieldConfig.resolve == null ||
629
+ typeof fieldConfig.resolve === 'function' ||
630
+ devAssert(
631
+ false,
632
+ `${config.name}.${fieldName} field resolver must be a function if ` +
633
+ `provided, but got: ${inspect(fieldConfig.resolve)}.`,
634
+ );
635
+ const argsConfig =
636
+ (_fieldConfig$args = fieldConfig.args) !== null &&
637
+ _fieldConfig$args !== void 0
638
+ ? _fieldConfig$args
639
+ : {};
640
+ isPlainObj(argsConfig) ||
641
+ devAssert(
642
+ false,
643
+ `${config.name}.${fieldName} args must be an object with argument names as keys.`,
644
+ );
645
+ return {
646
+ name: assertName(fieldName),
647
+ description: fieldConfig.description,
648
+ type: fieldConfig.type,
649
+ args: defineArguments(argsConfig),
650
+ resolve: fieldConfig.resolve,
651
+ subscribe: fieldConfig.subscribe,
652
+ deprecationReason: fieldConfig.deprecationReason,
653
+ extensions: toObjMap(fieldConfig.extensions),
654
+ astNode: fieldConfig.astNode,
655
+ };
656
+ });
657
+ }
658
+
659
+ export function defineArguments(config) {
660
+ return Object.entries(config).map(([argName, argConfig]) => ({
661
+ name: assertName(argName),
662
+ description: argConfig.description,
663
+ type: argConfig.type,
664
+ defaultValue: argConfig.defaultValue,
665
+ deprecationReason: argConfig.deprecationReason,
666
+ extensions: toObjMap(argConfig.extensions),
667
+ astNode: argConfig.astNode,
668
+ }));
669
+ }
670
+
671
+ function isPlainObj(obj) {
672
+ return isObjectLike(obj) && !Array.isArray(obj);
673
+ }
674
+
675
+ function fieldsToFieldsConfig(fields) {
676
+ return mapValue(fields, (field) => ({
677
+ description: field.description,
678
+ type: field.type,
679
+ args: argsToArgsConfig(field.args),
680
+ resolve: field.resolve,
681
+ subscribe: field.subscribe,
682
+ deprecationReason: field.deprecationReason,
683
+ extensions: field.extensions,
684
+ astNode: field.astNode,
685
+ }));
686
+ }
687
+ /**
688
+ * @internal
689
+ */
690
+
691
+ export function argsToArgsConfig(args) {
692
+ return keyValMap(
693
+ args,
694
+ (arg) => arg.name,
695
+ (arg) => ({
696
+ description: arg.description,
697
+ type: arg.type,
698
+ defaultValue: arg.defaultValue,
699
+ deprecationReason: arg.deprecationReason,
700
+ extensions: arg.extensions,
701
+ astNode: arg.astNode,
702
+ }),
703
+ );
704
+ }
705
+ export function isRequiredArgument(arg) {
706
+ return isNonNullType(arg.type) && arg.defaultValue === undefined;
707
+ }
708
+
709
+ /**
710
+ * Interface Type Definition
711
+ *
712
+ * When a field can return one of a heterogeneous set of types, a Interface type
713
+ * is used to describe what types are possible, what fields are in common across
714
+ * all types, as well as a function to determine which type is actually used
715
+ * when the field is resolved.
716
+ *
717
+ * Example:
718
+ *
719
+ * ```ts
720
+ * const EntityType = new GraphQLInterfaceType({
721
+ * name: 'Entity',
722
+ * fields: {
723
+ * name: { type: GraphQLString }
724
+ * }
725
+ * });
726
+ * ```
727
+ */
728
+ export class GraphQLInterfaceType {
729
+ constructor(config) {
730
+ var _config$extensionASTN3;
731
+
732
+ this.name = assertName(config.name);
733
+ this.description = config.description;
734
+ this.resolveType = config.resolveType;
735
+ this.extensions = toObjMap(config.extensions);
736
+ this.astNode = config.astNode;
737
+ this.extensionASTNodes =
738
+ (_config$extensionASTN3 = config.extensionASTNodes) !== null &&
739
+ _config$extensionASTN3 !== void 0
740
+ ? _config$extensionASTN3
741
+ : [];
742
+ this._fields = defineFieldMap.bind(undefined, config);
743
+ this._interfaces = defineInterfaces.bind(undefined, config);
744
+ config.resolveType == null ||
745
+ typeof config.resolveType === 'function' ||
746
+ devAssert(
747
+ false,
748
+ `${this.name} must provide "resolveType" as a function, ` +
749
+ `but got: ${inspect(config.resolveType)}.`,
750
+ );
751
+ }
752
+
753
+ get [Symbol.toStringTag]() {
754
+ return 'GraphQLInterfaceType';
755
+ }
756
+
757
+ getFields() {
758
+ if (typeof this._fields === 'function') {
759
+ this._fields = this._fields();
760
+ }
761
+
762
+ return this._fields;
763
+ }
764
+
765
+ getInterfaces() {
766
+ if (typeof this._interfaces === 'function') {
767
+ this._interfaces = this._interfaces();
768
+ }
769
+
770
+ return this._interfaces;
771
+ }
772
+
773
+ toConfig() {
774
+ return {
775
+ name: this.name,
776
+ description: this.description,
777
+ interfaces: this.getInterfaces(),
778
+ fields: fieldsToFieldsConfig(this.getFields()),
779
+ resolveType: this.resolveType,
780
+ extensions: this.extensions,
781
+ astNode: this.astNode,
782
+ extensionASTNodes: this.extensionASTNodes,
783
+ };
784
+ }
785
+
786
+ toString() {
787
+ return this.name;
788
+ }
789
+
790
+ toJSON() {
791
+ return this.toString();
792
+ }
793
+ }
794
+
795
+ /**
796
+ * Union Type Definition
797
+ *
798
+ * When a field can return one of a heterogeneous set of types, a Union type
799
+ * is used to describe what types are possible as well as providing a function
800
+ * to determine which type is actually used when the field is resolved.
801
+ *
802
+ * Example:
803
+ *
804
+ * ```ts
805
+ * const PetType = new GraphQLUnionType({
806
+ * name: 'Pet',
807
+ * types: [ DogType, CatType ],
808
+ * resolveType(value) {
809
+ * if (value instanceof Dog) {
810
+ * return DogType;
811
+ * }
812
+ * if (value instanceof Cat) {
813
+ * return CatType;
814
+ * }
815
+ * }
816
+ * });
817
+ * ```
818
+ */
819
+ export class GraphQLUnionType {
820
+ constructor(config) {
821
+ var _config$extensionASTN4;
822
+
823
+ this.name = assertName(config.name);
824
+ this.description = config.description;
825
+ this.resolveType = config.resolveType;
826
+ this.extensions = toObjMap(config.extensions);
827
+ this.astNode = config.astNode;
828
+ this.extensionASTNodes =
829
+ (_config$extensionASTN4 = config.extensionASTNodes) !== null &&
830
+ _config$extensionASTN4 !== void 0
831
+ ? _config$extensionASTN4
832
+ : [];
833
+ this._types = defineTypes.bind(undefined, config);
834
+ config.resolveType == null ||
835
+ typeof config.resolveType === 'function' ||
836
+ devAssert(
837
+ false,
838
+ `${this.name} must provide "resolveType" as a function, ` +
839
+ `but got: ${inspect(config.resolveType)}.`,
840
+ );
841
+ }
842
+
843
+ get [Symbol.toStringTag]() {
844
+ return 'GraphQLUnionType';
845
+ }
846
+
847
+ getTypes() {
848
+ if (typeof this._types === 'function') {
849
+ this._types = this._types();
850
+ }
851
+
852
+ return this._types;
853
+ }
854
+
855
+ toConfig() {
856
+ return {
857
+ name: this.name,
858
+ description: this.description,
859
+ types: this.getTypes(),
860
+ resolveType: this.resolveType,
861
+ extensions: this.extensions,
862
+ astNode: this.astNode,
863
+ extensionASTNodes: this.extensionASTNodes,
864
+ };
865
+ }
866
+
867
+ toString() {
868
+ return this.name;
869
+ }
870
+
871
+ toJSON() {
872
+ return this.toString();
873
+ }
874
+ }
875
+
876
+ function defineTypes(config) {
877
+ const types = resolveReadonlyArrayThunk(config.types);
878
+ Array.isArray(types) ||
879
+ devAssert(
880
+ false,
881
+ `Must provide Array of types or a function which returns such an array for Union ${config.name}.`,
882
+ );
883
+ return types;
884
+ }
885
+
886
+ /**
887
+ * Enum Type Definition
888
+ *
889
+ * Some leaf values of requests and input values are Enums. GraphQL serializes
890
+ * Enum values as strings, however internally Enums can be represented by any
891
+ * kind of type, often integers.
892
+ *
893
+ * Example:
894
+ *
895
+ * ```ts
896
+ * const RGBType = new GraphQLEnumType({
897
+ * name: 'RGB',
898
+ * values: {
899
+ * RED: { value: 0 },
900
+ * GREEN: { value: 1 },
901
+ * BLUE: { value: 2 }
902
+ * }
903
+ * });
904
+ * ```
905
+ *
906
+ * Note: If a value is not provided in a definition, the name of the enum value
907
+ * will be used as its internal value.
908
+ */
909
+ export class GraphQLEnumType {
910
+ /* <T> */
911
+ constructor(config) {
912
+ var _config$extensionASTN5;
913
+
914
+ this.name = assertName(config.name);
915
+ this.description = config.description;
916
+ this.extensions = toObjMap(config.extensions);
917
+ this.astNode = config.astNode;
918
+ this.extensionASTNodes =
919
+ (_config$extensionASTN5 = config.extensionASTNodes) !== null &&
920
+ _config$extensionASTN5 !== void 0
921
+ ? _config$extensionASTN5
922
+ : [];
923
+ this._values = defineEnumValues(this.name, config.values);
924
+ this._valueLookup = new Map(
925
+ this._values.map((enumValue) => [enumValue.value, enumValue]),
926
+ );
927
+ this._nameLookup = keyMap(this._values, (value) => value.name);
928
+ }
929
+
930
+ get [Symbol.toStringTag]() {
931
+ return 'GraphQLEnumType';
932
+ }
933
+
934
+ getValues() {
935
+ return this._values;
936
+ }
937
+
938
+ getValue(name) {
939
+ return this._nameLookup[name];
940
+ }
941
+
942
+ serialize(outputValue) {
943
+ const enumValue = this._valueLookup.get(outputValue);
944
+
945
+ if (enumValue === undefined) {
946
+ throw new GraphQLError(
947
+ `Enum "${this.name}" cannot represent value: ${inspect(outputValue)}`,
948
+ );
949
+ }
950
+
951
+ return enumValue.name;
952
+ }
953
+
954
+ parseValue(inputValue) /* T */
955
+ {
956
+ if (typeof inputValue !== 'string') {
957
+ const valueStr = inspect(inputValue);
958
+ throw new GraphQLError(
959
+ `Enum "${this.name}" cannot represent non-string value: ${valueStr}.` +
960
+ didYouMeanEnumValue(this, valueStr),
961
+ );
962
+ }
963
+
964
+ const enumValue = this.getValue(inputValue);
965
+
966
+ if (enumValue == null) {
967
+ throw new GraphQLError(
968
+ `Value "${inputValue}" does not exist in "${this.name}" enum.` +
969
+ didYouMeanEnumValue(this, inputValue),
970
+ );
971
+ }
972
+
973
+ return enumValue.value;
974
+ }
975
+
976
+ parseLiteral(valueNode, _variables) /* T */
977
+ {
978
+ // Note: variables will be resolved to a value before calling this function.
979
+ if (valueNode.kind !== Kind.ENUM) {
980
+ const valueStr = print(valueNode);
981
+ throw new GraphQLError(
982
+ `Enum "${this.name}" cannot represent non-enum value: ${valueStr}.` +
983
+ didYouMeanEnumValue(this, valueStr),
984
+ valueNode,
985
+ );
986
+ }
987
+
988
+ const enumValue = this.getValue(valueNode.value);
989
+
990
+ if (enumValue == null) {
991
+ const valueStr = print(valueNode);
992
+ throw new GraphQLError(
993
+ `Value "${valueStr}" does not exist in "${this.name}" enum.` +
994
+ didYouMeanEnumValue(this, valueStr),
995
+ valueNode,
996
+ );
997
+ }
998
+
999
+ return enumValue.value;
1000
+ }
1001
+
1002
+ toConfig() {
1003
+ const values = keyValMap(
1004
+ this.getValues(),
1005
+ (value) => value.name,
1006
+ (value) => ({
1007
+ description: value.description,
1008
+ value: value.value,
1009
+ deprecationReason: value.deprecationReason,
1010
+ extensions: value.extensions,
1011
+ astNode: value.astNode,
1012
+ }),
1013
+ );
1014
+ return {
1015
+ name: this.name,
1016
+ description: this.description,
1017
+ values,
1018
+ extensions: this.extensions,
1019
+ astNode: this.astNode,
1020
+ extensionASTNodes: this.extensionASTNodes,
1021
+ };
1022
+ }
1023
+
1024
+ toString() {
1025
+ return this.name;
1026
+ }
1027
+
1028
+ toJSON() {
1029
+ return this.toString();
1030
+ }
1031
+ }
1032
+
1033
+ function didYouMeanEnumValue(enumType, unknownValueStr) {
1034
+ const allNames = enumType.getValues().map((value) => value.name);
1035
+ const suggestedValues = suggestionList(unknownValueStr, allNames);
1036
+ return didYouMean('the enum value', suggestedValues);
1037
+ }
1038
+
1039
+ function defineEnumValues(typeName, valueMap) {
1040
+ isPlainObj(valueMap) ||
1041
+ devAssert(
1042
+ false,
1043
+ `${typeName} values must be an object with value names as keys.`,
1044
+ );
1045
+ return Object.entries(valueMap).map(([valueName, valueConfig]) => {
1046
+ isPlainObj(valueConfig) ||
1047
+ devAssert(
1048
+ false,
1049
+ `${typeName}.${valueName} must refer to an object with a "value" key ` +
1050
+ `representing an internal value but got: ${inspect(valueConfig)}.`,
1051
+ );
1052
+ return {
1053
+ name: assertEnumValueName(valueName),
1054
+ description: valueConfig.description,
1055
+ value: valueConfig.value !== undefined ? valueConfig.value : valueName,
1056
+ deprecationReason: valueConfig.deprecationReason,
1057
+ extensions: toObjMap(valueConfig.extensions),
1058
+ astNode: valueConfig.astNode,
1059
+ };
1060
+ });
1061
+ }
1062
+
1063
+ /**
1064
+ * Input Object Type Definition
1065
+ *
1066
+ * An input object defines a structured collection of fields which may be
1067
+ * supplied to a field argument.
1068
+ *
1069
+ * Using `NonNull` will ensure that a value must be provided by the query
1070
+ *
1071
+ * Example:
1072
+ *
1073
+ * ```ts
1074
+ * const GeoPoint = new GraphQLInputObjectType({
1075
+ * name: 'GeoPoint',
1076
+ * fields: {
1077
+ * lat: { type: new GraphQLNonNull(GraphQLFloat) },
1078
+ * lon: { type: new GraphQLNonNull(GraphQLFloat) },
1079
+ * alt: { type: GraphQLFloat, defaultValue: 0 },
1080
+ * }
1081
+ * });
1082
+ * ```
1083
+ */
1084
+ export class GraphQLInputObjectType {
1085
+ constructor(config) {
1086
+ var _config$extensionASTN6;
1087
+
1088
+ this.name = assertName(config.name);
1089
+ this.description = config.description;
1090
+ this.extensions = toObjMap(config.extensions);
1091
+ this.astNode = config.astNode;
1092
+ this.extensionASTNodes =
1093
+ (_config$extensionASTN6 = config.extensionASTNodes) !== null &&
1094
+ _config$extensionASTN6 !== void 0
1095
+ ? _config$extensionASTN6
1096
+ : [];
1097
+ this._fields = defineInputFieldMap.bind(undefined, config);
1098
+ }
1099
+
1100
+ get [Symbol.toStringTag]() {
1101
+ return 'GraphQLInputObjectType';
1102
+ }
1103
+
1104
+ getFields() {
1105
+ if (typeof this._fields === 'function') {
1106
+ this._fields = this._fields();
1107
+ }
1108
+
1109
+ return this._fields;
1110
+ }
1111
+
1112
+ toConfig() {
1113
+ const fields = mapValue(this.getFields(), (field) => ({
1114
+ description: field.description,
1115
+ type: field.type,
1116
+ defaultValue: field.defaultValue,
1117
+ deprecationReason: field.deprecationReason,
1118
+ extensions: field.extensions,
1119
+ astNode: field.astNode,
1120
+ }));
1121
+ return {
1122
+ name: this.name,
1123
+ description: this.description,
1124
+ fields,
1125
+ extensions: this.extensions,
1126
+ astNode: this.astNode,
1127
+ extensionASTNodes: this.extensionASTNodes,
1128
+ };
1129
+ }
1130
+
1131
+ toString() {
1132
+ return this.name;
1133
+ }
1134
+
1135
+ toJSON() {
1136
+ return this.toString();
1137
+ }
1138
+ }
1139
+
1140
+ function defineInputFieldMap(config) {
1141
+ const fieldMap = resolveObjMapThunk(config.fields);
1142
+ isPlainObj(fieldMap) ||
1143
+ devAssert(
1144
+ false,
1145
+ `${config.name} fields must be an object with field names as keys or a function which returns such an object.`,
1146
+ );
1147
+ return mapValue(fieldMap, (fieldConfig, fieldName) => {
1148
+ !('resolve' in fieldConfig) ||
1149
+ devAssert(
1150
+ false,
1151
+ `${config.name}.${fieldName} field has a resolve property, but Input Types cannot define resolvers.`,
1152
+ );
1153
+ return {
1154
+ name: assertName(fieldName),
1155
+ description: fieldConfig.description,
1156
+ type: fieldConfig.type,
1157
+ defaultValue: fieldConfig.defaultValue,
1158
+ deprecationReason: fieldConfig.deprecationReason,
1159
+ extensions: toObjMap(fieldConfig.extensions),
1160
+ astNode: fieldConfig.astNode,
1161
+ };
1162
+ });
1163
+ }
1164
+
1165
+ export function isRequiredInputField(field) {
1166
+ return isNonNullType(field.type) && field.defaultValue === undefined;
1167
+ }