graphql 16.14.0 → 16.14.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 (371) hide show
  1. package/error/GraphQLError.d.ts +151 -15
  2. package/error/GraphQLError.js +143 -12
  3. package/error/GraphQLError.mjs +143 -12
  4. package/error/index.d.ts +6 -0
  5. package/error/index.mjs +6 -0
  6. package/error/locatedError.d.ts +20 -0
  7. package/error/locatedError.js +21 -0
  8. package/error/locatedError.mjs +20 -0
  9. package/error/syntaxError.d.ts +15 -0
  10. package/error/syntaxError.js +16 -0
  11. package/error/syntaxError.mjs +15 -0
  12. package/execution/collectFields.js +6 -0
  13. package/execution/collectFields.mjs +6 -0
  14. package/execution/execute.d.ts +211 -12
  15. package/execution/execute.js +214 -23
  16. package/execution/execute.mjs +213 -23
  17. package/execution/index.d.ts +6 -0
  18. package/execution/index.mjs +6 -0
  19. package/execution/mapAsyncIterator.d.ts +2 -0
  20. package/execution/mapAsyncIterator.js +2 -0
  21. package/execution/mapAsyncIterator.mjs +2 -0
  22. package/execution/subscribe.d.ts +195 -5
  23. package/execution/subscribe.js +154 -11
  24. package/execution/subscribe.mjs +153 -11
  25. package/execution/values.d.ts +167 -10
  26. package/execution/values.js +149 -5
  27. package/execution/values.mjs +148 -5
  28. package/graphql.d.ts +163 -41
  29. package/graphql.js +126 -4
  30. package/graphql.mjs +131 -41
  31. package/index.d.ts +11 -17
  32. package/index.mjs +13 -19
  33. package/jsutils/Maybe.d.ts +5 -1
  34. package/jsutils/ObjMap.d.ts +4 -0
  35. package/jsutils/Path.d.ts +30 -0
  36. package/jsutils/Path.js +29 -0
  37. package/jsutils/Path.mjs +29 -0
  38. package/jsutils/PromiseOrValue.d.ts +1 -0
  39. package/jsutils/devAssert.d.ts +1 -0
  40. package/jsutils/devAssert.js +1 -0
  41. package/jsutils/devAssert.mjs +1 -0
  42. package/jsutils/didYouMean.d.ts +4 -1
  43. package/jsutils/didYouMean.js +4 -1
  44. package/jsutils/didYouMean.mjs +4 -1
  45. package/jsutils/groupBy.d.ts +2 -0
  46. package/jsutils/groupBy.js +2 -0
  47. package/jsutils/groupBy.mjs +2 -0
  48. package/jsutils/identityFunc.d.ts +2 -0
  49. package/jsutils/identityFunc.js +2 -0
  50. package/jsutils/identityFunc.mjs +2 -0
  51. package/jsutils/inspect.d.ts +2 -0
  52. package/jsutils/inspect.js +2 -0
  53. package/jsutils/inspect.mjs +2 -0
  54. package/jsutils/instanceOf.d.ts +2 -0
  55. package/jsutils/instanceOf.js +2 -0
  56. package/jsutils/instanceOf.mjs +2 -0
  57. package/jsutils/invariant.d.ts +1 -0
  58. package/jsutils/invariant.js +1 -0
  59. package/jsutils/invariant.mjs +1 -0
  60. package/jsutils/isAsyncIterable.d.ts +2 -0
  61. package/jsutils/isAsyncIterable.js +2 -0
  62. package/jsutils/isAsyncIterable.mjs +2 -0
  63. package/jsutils/isIterableObject.d.ts +6 -5
  64. package/jsutils/isIterableObject.js +6 -5
  65. package/jsutils/isIterableObject.mjs +6 -5
  66. package/jsutils/isObjectLike.d.ts +2 -0
  67. package/jsutils/isObjectLike.js +2 -0
  68. package/jsutils/isObjectLike.mjs +2 -0
  69. package/jsutils/isPromise.d.ts +2 -0
  70. package/jsutils/isPromise.js +2 -0
  71. package/jsutils/isPromise.mjs +2 -0
  72. package/jsutils/keyMap.d.ts +7 -14
  73. package/jsutils/keyMap.js +7 -14
  74. package/jsutils/keyMap.mjs +7 -14
  75. package/jsutils/keyValMap.d.ts +9 -6
  76. package/jsutils/keyValMap.js +9 -6
  77. package/jsutils/keyValMap.mjs +9 -6
  78. package/jsutils/mapValue.d.ts +2 -0
  79. package/jsutils/mapValue.js +2 -0
  80. package/jsutils/mapValue.mjs +2 -0
  81. package/jsutils/memoize3.d.ts +2 -0
  82. package/jsutils/memoize3.js +2 -0
  83. package/jsutils/memoize3.mjs +2 -0
  84. package/jsutils/naturalCompare.d.ts +2 -0
  85. package/jsutils/naturalCompare.js +2 -0
  86. package/jsutils/naturalCompare.mjs +2 -0
  87. package/jsutils/printPathArray.d.ts +2 -0
  88. package/jsutils/printPathArray.js +2 -0
  89. package/jsutils/printPathArray.mjs +2 -0
  90. package/jsutils/promiseForObject.d.ts +2 -0
  91. package/jsutils/promiseForObject.js +2 -0
  92. package/jsutils/promiseForObject.mjs +2 -0
  93. package/jsutils/promiseReduce.d.ts +2 -0
  94. package/jsutils/promiseReduce.js +2 -0
  95. package/jsutils/promiseReduce.mjs +2 -0
  96. package/jsutils/suggestionList.d.ts +2 -0
  97. package/jsutils/suggestionList.js +4 -0
  98. package/jsutils/suggestionList.mjs +4 -0
  99. package/jsutils/toError.d.ts +2 -0
  100. package/jsutils/toError.js +2 -0
  101. package/jsutils/toError.mjs +2 -0
  102. package/jsutils/toObjMap.d.ts +1 -0
  103. package/jsutils/toObjMap.js +1 -0
  104. package/jsutils/toObjMap.mjs +1 -0
  105. package/language/ast.d.ts +412 -54
  106. package/language/ast.js +95 -38
  107. package/language/ast.mjs +95 -38
  108. package/language/blockString.d.ts +1 -3
  109. package/language/blockString.js +1 -3
  110. package/language/blockString.mjs +1 -3
  111. package/language/directiveLocation.d.ts +28 -8
  112. package/language/directiveLocation.js +9 -6
  113. package/language/directiveLocation.mjs +9 -6
  114. package/language/index.d.ts +6 -0
  115. package/language/index.mjs +6 -0
  116. package/language/kinds.d.ts +57 -18
  117. package/language/kinds.js +9 -6
  118. package/language/kinds.mjs +9 -6
  119. package/language/lexer.d.ts +47 -14
  120. package/language/lexer.js +71 -13
  121. package/language/lexer.mjs +70 -13
  122. package/language/location.d.ts +16 -3
  123. package/language/location.js +14 -3
  124. package/language/location.mjs +14 -3
  125. package/language/parser.d.ts +236 -13
  126. package/language/parser.js +224 -0
  127. package/language/parser.mjs +224 -3
  128. package/language/predicates.d.ts +169 -0
  129. package/language/predicates.js +170 -0
  130. package/language/predicates.mjs +180 -0
  131. package/language/printLocation.d.ts +28 -0
  132. package/language/printLocation.js +29 -0
  133. package/language/printLocation.mjs +28 -0
  134. package/language/printString.d.ts +2 -0
  135. package/language/printString.js +5 -1
  136. package/language/printString.mjs +5 -1
  137. package/language/printer.d.ts +12 -0
  138. package/language/printer.js +19 -0
  139. package/language/printer.mjs +18 -0
  140. package/language/schemaCoordinateLexer.d.ts +8 -6
  141. package/language/schemaCoordinateLexer.js +10 -6
  142. package/language/schemaCoordinateLexer.mjs +10 -6
  143. package/language/source.d.ts +28 -0
  144. package/language/source.js +32 -0
  145. package/language/source.mjs +31 -0
  146. package/language/tokenKind.d.ts +30 -3
  147. package/language/tokenKind.js +8 -3
  148. package/language/tokenKind.mjs +8 -3
  149. package/language/visitor.d.ts +200 -72
  150. package/language/visitor.js +122 -50
  151. package/language/visitor.mjs +122 -54
  152. package/package.json +1 -1
  153. package/subscription/index.d.ts +9 -3
  154. package/subscription/index.mjs +9 -3
  155. package/type/assertName.d.ts +18 -1
  156. package/type/assertName.js +19 -1
  157. package/type/assertName.mjs +18 -1
  158. package/type/definition.d.ts +2540 -79
  159. package/type/definition.js +2214 -61
  160. package/type/definition.mjs +2241 -60
  161. package/type/directives.d.ts +193 -18
  162. package/type/directives.js +196 -19
  163. package/type/directives.mjs +196 -19
  164. package/type/index.d.ts +6 -0
  165. package/type/index.mjs +6 -0
  166. package/type/introspection.d.ts +36 -0
  167. package/type/introspection.js +33 -0
  168. package/type/introspection.mjs +41 -0
  169. package/type/scalars.d.ts +29 -2
  170. package/type/scalars.js +37 -2
  171. package/type/scalars.mjs +36 -2
  172. package/type/schema.d.ts +490 -28
  173. package/type/schema.js +484 -26
  174. package/type/schema.mjs +484 -26
  175. package/type/validate.d.ts +31 -0
  176. package/type/validate.js +32 -0
  177. package/type/validate.mjs +31 -0
  178. package/utilities/TypeInfo.d.ts +441 -1
  179. package/utilities/TypeInfo.js +444 -1
  180. package/utilities/TypeInfo.mjs +443 -1
  181. package/utilities/assertValidName.d.ts +27 -2
  182. package/utilities/assertValidName.js +28 -2
  183. package/utilities/assertValidName.mjs +27 -2
  184. package/utilities/astFromValue.d.ts +33 -3
  185. package/utilities/astFromValue.js +36 -3
  186. package/utilities/astFromValue.mjs +35 -3
  187. package/utilities/buildASTSchema.d.ts +65 -6
  188. package/utilities/buildASTSchema.js +65 -6
  189. package/utilities/buildASTSchema.mjs +65 -6
  190. package/utilities/buildClientSchema.d.ts +15 -0
  191. package/utilities/buildClientSchema.js +16 -0
  192. package/utilities/buildClientSchema.mjs +15 -0
  193. package/utilities/coerceInputValue.d.ts +46 -0
  194. package/utilities/coerceInputValue.js +47 -0
  195. package/utilities/coerceInputValue.mjs +46 -0
  196. package/utilities/concatAST.d.ts +12 -0
  197. package/utilities/concatAST.js +13 -0
  198. package/utilities/concatAST.mjs +12 -0
  199. package/utilities/extendSchema.d.ts +56 -3
  200. package/utilities/extendSchema.js +63 -3
  201. package/utilities/extendSchema.mjs +62 -3
  202. package/utilities/findBreakingChanges.d.ts +95 -0
  203. package/utilities/findBreakingChanges.js +68 -0
  204. package/utilities/findBreakingChanges.mjs +70 -0
  205. package/utilities/getIntrospectionQuery.d.ts +132 -0
  206. package/utilities/getIntrospectionQuery.js +41 -0
  207. package/utilities/getIntrospectionQuery.mjs +41 -0
  208. package/utilities/getOperationAST.d.ts +15 -0
  209. package/utilities/getOperationAST.js +16 -0
  210. package/utilities/getOperationAST.mjs +15 -0
  211. package/utilities/getOperationRootType.d.ts +18 -1
  212. package/utilities/getOperationRootType.js +19 -1
  213. package/utilities/getOperationRootType.mjs +18 -1
  214. package/utilities/index.d.ts +7 -0
  215. package/utilities/index.mjs +7 -0
  216. package/utilities/introspectionFromSchema.d.ts +54 -0
  217. package/utilities/introspectionFromSchema.js +55 -0
  218. package/utilities/introspectionFromSchema.mjs +54 -0
  219. package/utilities/lexicographicSortSchema.d.ts +35 -0
  220. package/utilities/lexicographicSortSchema.js +36 -0
  221. package/utilities/lexicographicSortSchema.mjs +35 -0
  222. package/utilities/printSchema.d.ts +63 -0
  223. package/utilities/printSchema.js +66 -0
  224. package/utilities/printSchema.mjs +67 -0
  225. package/utilities/resolveSchemaCoordinate.d.ts +62 -0
  226. package/utilities/resolveSchemaCoordinate.js +64 -0
  227. package/utilities/resolveSchemaCoordinate.mjs +63 -0
  228. package/utilities/separateOperations.d.ts +30 -0
  229. package/utilities/separateOperations.js +31 -0
  230. package/utilities/separateOperations.mjs +30 -0
  231. package/utilities/stripIgnoredCharacters.d.ts +13 -6
  232. package/utilities/stripIgnoredCharacters.js +16 -6
  233. package/utilities/stripIgnoredCharacters.mjs +15 -6
  234. package/utilities/typeComparators.d.ts +84 -0
  235. package/utilities/typeComparators.js +85 -0
  236. package/utilities/typeComparators.mjs +84 -0
  237. package/utilities/typeFromAST.d.ts +86 -0
  238. package/utilities/typeFromAST.js +3 -0
  239. package/utilities/typeFromAST.mjs +3 -0
  240. package/utilities/typedQueryDocumentNode.d.ts +4 -0
  241. package/utilities/valueFromAST.d.ts +38 -0
  242. package/utilities/valueFromAST.js +39 -0
  243. package/utilities/valueFromAST.mjs +38 -0
  244. package/utilities/valueFromASTUntyped.d.ts +15 -2
  245. package/utilities/valueFromASTUntyped.js +16 -2
  246. package/utilities/valueFromASTUntyped.mjs +15 -2
  247. package/validation/ValidationContext.d.ts +399 -0
  248. package/validation/ValidationContext.js +400 -0
  249. package/validation/ValidationContext.mjs +401 -0
  250. package/validation/index.d.ts +6 -0
  251. package/validation/index.mjs +6 -0
  252. package/validation/rules/ExecutableDefinitionsRule.d.ts +28 -0
  253. package/validation/rules/ExecutableDefinitionsRule.js +29 -0
  254. package/validation/rules/ExecutableDefinitionsRule.mjs +28 -0
  255. package/validation/rules/FieldsOnCorrectTypeRule.d.ts +28 -0
  256. package/validation/rules/FieldsOnCorrectTypeRule.js +33 -0
  257. package/validation/rules/FieldsOnCorrectTypeRule.mjs +32 -0
  258. package/validation/rules/FragmentsOnCompositeTypesRule.d.ts +28 -0
  259. package/validation/rules/FragmentsOnCompositeTypesRule.js +29 -0
  260. package/validation/rules/FragmentsOnCompositeTypesRule.mjs +28 -0
  261. package/validation/rules/KnownArgumentNamesRule.d.ts +29 -3
  262. package/validation/rules/KnownArgumentNamesRule.js +30 -3
  263. package/validation/rules/KnownArgumentNamesRule.mjs +29 -3
  264. package/validation/rules/KnownDirectivesRule.d.ts +28 -0
  265. package/validation/rules/KnownDirectivesRule.js +29 -0
  266. package/validation/rules/KnownDirectivesRule.mjs +28 -0
  267. package/validation/rules/KnownFragmentNamesRule.d.ts +28 -0
  268. package/validation/rules/KnownFragmentNamesRule.js +29 -0
  269. package/validation/rules/KnownFragmentNamesRule.mjs +28 -0
  270. package/validation/rules/KnownTypeNamesRule.d.ts +28 -0
  271. package/validation/rules/KnownTypeNamesRule.js +29 -0
  272. package/validation/rules/KnownTypeNamesRule.mjs +28 -0
  273. package/validation/rules/LoneAnonymousOperationRule.d.ts +28 -0
  274. package/validation/rules/LoneAnonymousOperationRule.js +29 -0
  275. package/validation/rules/LoneAnonymousOperationRule.mjs +28 -0
  276. package/validation/rules/LoneSchemaDefinitionRule.d.ts +21 -0
  277. package/validation/rules/LoneSchemaDefinitionRule.js +22 -0
  278. package/validation/rules/LoneSchemaDefinitionRule.mjs +21 -0
  279. package/validation/rules/MaxIntrospectionDepthRule.d.ts +31 -0
  280. package/validation/rules/MaxIntrospectionDepthRule.js +33 -0
  281. package/validation/rules/MaxIntrospectionDepthRule.mjs +34 -0
  282. package/validation/rules/NoFragmentCyclesRule.d.ts +28 -0
  283. package/validation/rules/NoFragmentCyclesRule.js +29 -0
  284. package/validation/rules/NoFragmentCyclesRule.mjs +28 -0
  285. package/validation/rules/NoUndefinedVariablesRule.d.ts +28 -0
  286. package/validation/rules/NoUndefinedVariablesRule.js +29 -0
  287. package/validation/rules/NoUndefinedVariablesRule.mjs +28 -0
  288. package/validation/rules/NoUnusedFragmentsRule.d.ts +28 -0
  289. package/validation/rules/NoUnusedFragmentsRule.js +29 -0
  290. package/validation/rules/NoUnusedFragmentsRule.mjs +28 -0
  291. package/validation/rules/NoUnusedVariablesRule.d.ts +29 -0
  292. package/validation/rules/NoUnusedVariablesRule.js +30 -0
  293. package/validation/rules/NoUnusedVariablesRule.mjs +29 -0
  294. package/validation/rules/OverlappingFieldsCanBeMergedRule.d.ts +33 -0
  295. package/validation/rules/OverlappingFieldsCanBeMergedRule.js +45 -6
  296. package/validation/rules/OverlappingFieldsCanBeMergedRule.mjs +45 -6
  297. package/validation/rules/PossibleFragmentSpreadsRule.d.ts +36 -0
  298. package/validation/rules/PossibleFragmentSpreadsRule.js +37 -0
  299. package/validation/rules/PossibleFragmentSpreadsRule.mjs +36 -0
  300. package/validation/rules/PossibleTypeExtensionsRule.d.ts +21 -0
  301. package/validation/rules/PossibleTypeExtensionsRule.js +22 -0
  302. package/validation/rules/PossibleTypeExtensionsRule.mjs +21 -0
  303. package/validation/rules/ProvidedRequiredArgumentsRule.d.ts +29 -3
  304. package/validation/rules/ProvidedRequiredArgumentsRule.js +30 -3
  305. package/validation/rules/ProvidedRequiredArgumentsRule.mjs +29 -3
  306. package/validation/rules/ScalarLeafsRule.d.ts +28 -0
  307. package/validation/rules/ScalarLeafsRule.js +29 -0
  308. package/validation/rules/ScalarLeafsRule.mjs +28 -0
  309. package/validation/rules/SingleFieldSubscriptionsRule.d.ts +33 -0
  310. package/validation/rules/SingleFieldSubscriptionsRule.js +34 -0
  311. package/validation/rules/SingleFieldSubscriptionsRule.mjs +33 -0
  312. package/validation/rules/UniqueArgumentDefinitionNamesRule.d.ts +21 -0
  313. package/validation/rules/UniqueArgumentDefinitionNamesRule.js +22 -0
  314. package/validation/rules/UniqueArgumentDefinitionNamesRule.mjs +21 -0
  315. package/validation/rules/UniqueArgumentNamesRule.d.ts +28 -0
  316. package/validation/rules/UniqueArgumentNamesRule.js +29 -0
  317. package/validation/rules/UniqueArgumentNamesRule.mjs +28 -0
  318. package/validation/rules/UniqueDirectiveNamesRule.d.ts +21 -0
  319. package/validation/rules/UniqueDirectiveNamesRule.js +22 -0
  320. package/validation/rules/UniqueDirectiveNamesRule.mjs +21 -0
  321. package/validation/rules/UniqueDirectivesPerLocationRule.d.ts +28 -0
  322. package/validation/rules/UniqueDirectivesPerLocationRule.js +29 -0
  323. package/validation/rules/UniqueDirectivesPerLocationRule.mjs +28 -0
  324. package/validation/rules/UniqueEnumValueNamesRule.d.ts +21 -0
  325. package/validation/rules/UniqueEnumValueNamesRule.js +22 -0
  326. package/validation/rules/UniqueEnumValueNamesRule.mjs +21 -0
  327. package/validation/rules/UniqueFieldDefinitionNamesRule.d.ts +21 -0
  328. package/validation/rules/UniqueFieldDefinitionNamesRule.js +22 -0
  329. package/validation/rules/UniqueFieldDefinitionNamesRule.mjs +21 -0
  330. package/validation/rules/UniqueFragmentNamesRule.d.ts +28 -0
  331. package/validation/rules/UniqueFragmentNamesRule.js +29 -0
  332. package/validation/rules/UniqueFragmentNamesRule.mjs +28 -0
  333. package/validation/rules/UniqueInputFieldNamesRule.d.ts +32 -0
  334. package/validation/rules/UniqueInputFieldNamesRule.js +33 -0
  335. package/validation/rules/UniqueInputFieldNamesRule.mjs +32 -0
  336. package/validation/rules/UniqueOperationNamesRule.d.ts +28 -0
  337. package/validation/rules/UniqueOperationNamesRule.js +29 -0
  338. package/validation/rules/UniqueOperationNamesRule.mjs +28 -0
  339. package/validation/rules/UniqueOperationTypesRule.d.ts +21 -0
  340. package/validation/rules/UniqueOperationTypesRule.js +22 -0
  341. package/validation/rules/UniqueOperationTypesRule.mjs +21 -0
  342. package/validation/rules/UniqueTypeNamesRule.d.ts +21 -0
  343. package/validation/rules/UniqueTypeNamesRule.js +22 -0
  344. package/validation/rules/UniqueTypeNamesRule.mjs +21 -0
  345. package/validation/rules/UniqueVariableNamesRule.d.ts +28 -0
  346. package/validation/rules/UniqueVariableNamesRule.js +29 -0
  347. package/validation/rules/UniqueVariableNamesRule.mjs +28 -0
  348. package/validation/rules/ValuesOfCorrectTypeRule.d.ts +28 -0
  349. package/validation/rules/ValuesOfCorrectTypeRule.js +31 -0
  350. package/validation/rules/ValuesOfCorrectTypeRule.mjs +30 -0
  351. package/validation/rules/VariablesAreInputTypesRule.d.ts +32 -0
  352. package/validation/rules/VariablesAreInputTypesRule.js +33 -0
  353. package/validation/rules/VariablesAreInputTypesRule.mjs +32 -0
  354. package/validation/rules/VariablesInAllowedPositionRule.d.ts +28 -0
  355. package/validation/rules/VariablesInAllowedPositionRule.js +35 -1
  356. package/validation/rules/VariablesInAllowedPositionRule.mjs +34 -1
  357. package/validation/rules/custom/NoDeprecatedCustomRule.d.ts +41 -0
  358. package/validation/rules/custom/NoDeprecatedCustomRule.js +42 -0
  359. package/validation/rules/custom/NoDeprecatedCustomRule.mjs +41 -0
  360. package/validation/rules/custom/NoSchemaIntrospectionCustomRule.d.ts +28 -0
  361. package/validation/rules/custom/NoSchemaIntrospectionCustomRule.js +29 -0
  362. package/validation/rules/custom/NoSchemaIntrospectionCustomRule.mjs +28 -0
  363. package/validation/specifiedRules.d.ts +2 -3
  364. package/validation/specifiedRules.js +2 -3
  365. package/validation/specifiedRules.mjs +2 -3
  366. package/validation/validate.d.ts +70 -9
  367. package/validation/validate.js +63 -7
  368. package/validation/validate.mjs +63 -7
  369. package/version.d.ts +3 -6
  370. package/version.js +6 -8
  371. package/version.mjs +5 -8
package/graphql.js CHANGED
@@ -18,15 +18,137 @@ var _validate2 = require('./validation/validate.js');
18
18
 
19
19
  var _execute = require('./execution/execute.js');
20
20
 
21
+ /**
22
+ * Parses, validates, and executes a GraphQL document against a schema.
23
+ *
24
+ * This is the primary entry point for fulfilling GraphQL operations. Use this
25
+ * when you want a single-call request lifecycle that returns a promise in all
26
+ * cases.
27
+ *
28
+ * More sophisticated GraphQL servers, such as those which persist queries, may
29
+ * wish to separate the validation and execution phases to a static-time tooling
30
+ * step and a server runtime step.
31
+ * @param args - Request execution arguments, including schema and source.
32
+ * @returns A promise that resolves to an execution result or validation errors.
33
+ * @example
34
+ * ```ts
35
+ * // Execute a complete asynchronous request with variables.
36
+ * import { graphql, buildSchema } from 'graphql';
37
+ *
38
+ * const schema = buildSchema(`
39
+ * type Query {
40
+ * greeting(name: String!): String
41
+ * }
42
+ * `);
43
+ *
44
+ * const result = await graphql({
45
+ * schema,
46
+ * source: 'query SayHello($name: String!) { greeting(name: $name) }',
47
+ * rootValue: {
48
+ * greeting: ({ name }) => `Hello, ${name}!`,
49
+ * },
50
+ * variableValues: { name: 'Ada' },
51
+ * operationName: 'SayHello',
52
+ * });
53
+ *
54
+ * result; // => { data: { greeting: 'Hello, Ada!' } }
55
+ * ```
56
+ * @example
57
+ * ```ts
58
+ * // This variant supplies context plus custom field and type resolvers.
59
+ * import { graphql, buildSchema } from 'graphql';
60
+ *
61
+ * const schema = buildSchema(`
62
+ * interface Named {
63
+ * name: String!
64
+ * }
65
+ *
66
+ * type User implements Named {
67
+ * name: String!
68
+ * }
69
+ *
70
+ * type Query {
71
+ * viewer: Named
72
+ * }
73
+ * `);
74
+ *
75
+ * const result = await graphql({
76
+ * schema,
77
+ * source: '{ viewer { __typename name } }',
78
+ * rootValue: { viewer: { kind: 'user', name: 'Ada' } },
79
+ * contextValue: { locale: 'en' },
80
+ * fieldResolver: (source, _args, context, info) => {
81
+ * context.locale; // => 'en'
82
+ * return source[info.fieldName];
83
+ * },
84
+ * typeResolver: (value) => {
85
+ * return value.kind === 'user' ? 'User' : undefined;
86
+ * },
87
+ * });
88
+ *
89
+ * result; // => { data: { viewer: { __typename: 'User', name: 'Ada' } } }
90
+ * ```
91
+ * @category Request Pipeline
92
+ */
21
93
  function graphql(args) {
22
94
  // Always return a Promise for a consistent API.
23
95
  return new Promise((resolve) => resolve(graphqlImpl(args)));
24
96
  }
25
97
  /**
26
- * The graphqlSync function also fulfills GraphQL operations by parsing,
27
- * validating, and executing a GraphQL document along side a GraphQL schema.
28
- * However, it guarantees to complete synchronously (or throw an error) assuming
29
- * that all field resolvers are also synchronous.
98
+ * Parses, validates, and executes a GraphQL document synchronously.
99
+ *
100
+ * This function guarantees that execution completes synchronously, or throws an
101
+ * error, assuming that all field resolvers are also synchronous. It throws when
102
+ * any resolver returns a promise.
103
+ * @param args - Request execution arguments, including schema and source.
104
+ * @returns Completed execution output, or request errors if parsing or
105
+ * validation fails.
106
+ * @example
107
+ * ```ts
108
+ * // Execute a complete synchronous request with variables.
109
+ * import { graphqlSync, buildSchema } from 'graphql';
110
+ *
111
+ * const schema = buildSchema(`
112
+ * type Query {
113
+ * greeting(name: String!): String
114
+ * }
115
+ * `);
116
+ *
117
+ * const result = graphqlSync({
118
+ * schema,
119
+ * source: 'query SayHello($name: String!) { greeting(name: $name) }',
120
+ * rootValue: {
121
+ * greeting: ({ name }) => `Hello, ${name}!`,
122
+ * },
123
+ * variableValues: { name: 'Ada' },
124
+ * operationName: 'SayHello',
125
+ * });
126
+ *
127
+ * result; // => { data: { greeting: 'Hello, Ada!' } }
128
+ * ```
129
+ * @example
130
+ * ```ts
131
+ * // This variant uses a synchronous custom field resolver and context.
132
+ * import { graphqlSync, buildSchema } from 'graphql';
133
+ *
134
+ * const schema = buildSchema(`
135
+ * type Query {
136
+ * greeting: String
137
+ * }
138
+ * `);
139
+ *
140
+ * const result = graphqlSync({
141
+ * schema,
142
+ * source: '{ greeting }',
143
+ * fieldResolver: (_source, _args, contextValue) => {
144
+ * return contextValue.defaultGreeting;
145
+ * },
146
+ * contextValue: { defaultGreeting: 'Hello' },
147
+ * });
148
+ *
149
+ * result; // => { data: { greeting: 'Hello' } }
150
+ * ```
151
+ * @category Request Pipeline
30
152
  */
31
153
 
32
154
  function graphqlSync(args) {
package/graphql.mjs CHANGED
@@ -5,54 +5,144 @@ import { validateSchema } from './type/validate.mjs';
5
5
  import { validate } from './validation/validate.mjs';
6
6
  import { execute } from './execution/execute.mjs';
7
7
  /**
8
- * This is the primary entry point function for fulfilling GraphQL operations
9
- * by parsing, validating, and executing a GraphQL document along side a
10
- * GraphQL schema.
11
- *
12
- * More sophisticated GraphQL servers, such as those which persist queries,
13
- * may wish to separate the validation and execution phases to a static time
14
- * tooling step, and a server runtime step.
15
- *
16
- * Accepts either an object with named arguments, or individual arguments:
17
- *
18
- * schema:
19
- * The GraphQL type system to use when validating and executing a query.
20
- * source:
21
- * A GraphQL language formatted string representing the requested operation.
22
- * rootValue:
23
- * The value provided as the first argument to resolver functions on the top
24
- * level type (e.g. the query object type).
25
- * contextValue:
26
- * The context value is provided as an argument to resolver functions after
27
- * field arguments. It is used to pass shared information useful at any point
28
- * during executing this query, for example the currently logged in user and
29
- * connections to databases or other services.
30
- * variableValues:
31
- * A mapping of variable name to runtime value to use for all variables
32
- * defined in the requestString.
33
- * operationName:
34
- * The name of the operation to use if requestString contains multiple
35
- * possible operations. Can be omitted if requestString contains only
36
- * one operation.
37
- * fieldResolver:
38
- * A resolver function to use when one is not provided by the schema.
39
- * If not provided, the default field resolver is used (which looks for a
40
- * value or method on the source value with the field's name).
41
- * typeResolver:
42
- * A type resolver function to use when none is provided by the schema.
43
- * If not provided, the default type resolver is used (which looks for a
44
- * `__typename` field or alternatively calls the `isTypeOf` method).
8
+ * Describes the input object accepted by `graphql` and `graphqlSync`.
9
+ *
10
+ * These arguments describe the full parse, validate, and execute lifecycle for
11
+ * a GraphQL request.
12
+ * @category Request Pipeline
45
13
  */
46
14
 
15
+ /**
16
+ * Parses, validates, and executes a GraphQL document against a schema.
17
+ *
18
+ * This is the primary entry point for fulfilling GraphQL operations. Use this
19
+ * when you want a single-call request lifecycle that returns a promise in all
20
+ * cases.
21
+ *
22
+ * More sophisticated GraphQL servers, such as those which persist queries, may
23
+ * wish to separate the validation and execution phases to a static-time tooling
24
+ * step and a server runtime step.
25
+ * @param args - Request execution arguments, including schema and source.
26
+ * @returns A promise that resolves to an execution result or validation errors.
27
+ * @example
28
+ * ```ts
29
+ * // Execute a complete asynchronous request with variables.
30
+ * import { graphql, buildSchema } from 'graphql';
31
+ *
32
+ * const schema = buildSchema(`
33
+ * type Query {
34
+ * greeting(name: String!): String
35
+ * }
36
+ * `);
37
+ *
38
+ * const result = await graphql({
39
+ * schema,
40
+ * source: 'query SayHello($name: String!) { greeting(name: $name) }',
41
+ * rootValue: {
42
+ * greeting: ({ name }) => `Hello, ${name}!`,
43
+ * },
44
+ * variableValues: { name: 'Ada' },
45
+ * operationName: 'SayHello',
46
+ * });
47
+ *
48
+ * result; // => { data: { greeting: 'Hello, Ada!' } }
49
+ * ```
50
+ * @example
51
+ * ```ts
52
+ * // This variant supplies context plus custom field and type resolvers.
53
+ * import { graphql, buildSchema } from 'graphql';
54
+ *
55
+ * const schema = buildSchema(`
56
+ * interface Named {
57
+ * name: String!
58
+ * }
59
+ *
60
+ * type User implements Named {
61
+ * name: String!
62
+ * }
63
+ *
64
+ * type Query {
65
+ * viewer: Named
66
+ * }
67
+ * `);
68
+ *
69
+ * const result = await graphql({
70
+ * schema,
71
+ * source: '{ viewer { __typename name } }',
72
+ * rootValue: { viewer: { kind: 'user', name: 'Ada' } },
73
+ * contextValue: { locale: 'en' },
74
+ * fieldResolver: (source, _args, context, info) => {
75
+ * context.locale; // => 'en'
76
+ * return source[info.fieldName];
77
+ * },
78
+ * typeResolver: (value) => {
79
+ * return value.kind === 'user' ? 'User' : undefined;
80
+ * },
81
+ * });
82
+ *
83
+ * result; // => { data: { viewer: { __typename: 'User', name: 'Ada' } } }
84
+ * ```
85
+ * @category Request Pipeline
86
+ */
47
87
  export function graphql(args) {
48
88
  // Always return a Promise for a consistent API.
49
89
  return new Promise((resolve) => resolve(graphqlImpl(args)));
50
90
  }
51
91
  /**
52
- * The graphqlSync function also fulfills GraphQL operations by parsing,
53
- * validating, and executing a GraphQL document along side a GraphQL schema.
54
- * However, it guarantees to complete synchronously (or throw an error) assuming
55
- * that all field resolvers are also synchronous.
92
+ * Parses, validates, and executes a GraphQL document synchronously.
93
+ *
94
+ * This function guarantees that execution completes synchronously, or throws an
95
+ * error, assuming that all field resolvers are also synchronous. It throws when
96
+ * any resolver returns a promise.
97
+ * @param args - Request execution arguments, including schema and source.
98
+ * @returns Completed execution output, or request errors if parsing or
99
+ * validation fails.
100
+ * @example
101
+ * ```ts
102
+ * // Execute a complete synchronous request with variables.
103
+ * import { graphqlSync, buildSchema } from 'graphql';
104
+ *
105
+ * const schema = buildSchema(`
106
+ * type Query {
107
+ * greeting(name: String!): String
108
+ * }
109
+ * `);
110
+ *
111
+ * const result = graphqlSync({
112
+ * schema,
113
+ * source: 'query SayHello($name: String!) { greeting(name: $name) }',
114
+ * rootValue: {
115
+ * greeting: ({ name }) => `Hello, ${name}!`,
116
+ * },
117
+ * variableValues: { name: 'Ada' },
118
+ * operationName: 'SayHello',
119
+ * });
120
+ *
121
+ * result; // => { data: { greeting: 'Hello, Ada!' } }
122
+ * ```
123
+ * @example
124
+ * ```ts
125
+ * // This variant uses a synchronous custom field resolver and context.
126
+ * import { graphqlSync, buildSchema } from 'graphql';
127
+ *
128
+ * const schema = buildSchema(`
129
+ * type Query {
130
+ * greeting: String
131
+ * }
132
+ * `);
133
+ *
134
+ * const result = graphqlSync({
135
+ * schema,
136
+ * source: '{ greeting }',
137
+ * fieldResolver: (_source, _args, contextValue) => {
138
+ * return contextValue.defaultGreeting;
139
+ * },
140
+ * contextValue: { defaultGreeting: 'Hello' },
141
+ * });
142
+ *
143
+ * result; // => { data: { greeting: 'Hello' } }
144
+ * ```
145
+ * @category Request Pipeline
56
146
  */
57
147
 
58
148
  export function graphqlSync(args) {
package/index.d.ts CHANGED
@@ -1,28 +1,22 @@
1
1
  /**
2
- * GraphQL.js provides a reference implementation for the GraphQL specification
3
- * but is also a useful utility for operating on GraphQL files and building
4
- * sophisticated tools.
2
+ * The root `graphql` package re-exports the public GraphQL.js API from its
3
+ * submodules and provides the high-level request pipeline helpers defined in
4
+ * this module.
5
5
  *
6
- * This primary module exports a general purpose function for fulfilling all
7
- * steps of the GraphQL specification in a single operation, but also includes
8
- * utilities for every part of the GraphQL specification:
9
- *
10
- * - Parsing the GraphQL language.
11
- * - Building a GraphQL type schema.
12
- * - Validating a GraphQL request against a type schema.
13
- * - Executing a GraphQL request against a type schema.
14
- *
15
- * This also includes utility functions for operating on GraphQL types and
16
- * GraphQL documents to facilitate building tools.
17
- *
18
- * You may also import from each sub-directory directly. For example, the
19
- * following two import statements are equivalent:
6
+ * You can import public exports from GraphQL.js modules through the root
7
+ * `graphql` package or through their module-specific entry point. For example,
8
+ * these two references resolve to the same `parse` function:
20
9
  *
21
10
  * ```ts
22
11
  * import { parse } from 'graphql';
23
12
  * import { parse } from 'graphql/language';
24
13
  * ```
25
14
  *
15
+ * Use the root package when you want a single import surface, or use submodules
16
+ * such as `graphql/language`, `graphql/type`, `graphql/execution`, and
17
+ * `graphql/utilities` when you want module-focused imports. This module also
18
+ * defines root-only APIs, such as request pipeline helpers and version
19
+ * metadata, that do not belong to a narrower submodule.
26
20
  * @packageDocumentation
27
21
  */
28
22
  export { version, versionInfo } from './version';
package/index.mjs CHANGED
@@ -1,32 +1,26 @@
1
1
  /**
2
- * GraphQL.js provides a reference implementation for the GraphQL specification
3
- * but is also a useful utility for operating on GraphQL files and building
4
- * sophisticated tools.
2
+ * The root `graphql` package re-exports the public GraphQL.js API from its
3
+ * submodules and provides the high-level request pipeline helpers defined in
4
+ * this module.
5
5
  *
6
- * This primary module exports a general purpose function for fulfilling all
7
- * steps of the GraphQL specification in a single operation, but also includes
8
- * utilities for every part of the GraphQL specification:
9
- *
10
- * - Parsing the GraphQL language.
11
- * - Building a GraphQL type schema.
12
- * - Validating a GraphQL request against a type schema.
13
- * - Executing a GraphQL request against a type schema.
14
- *
15
- * This also includes utility functions for operating on GraphQL types and
16
- * GraphQL documents to facilitate building tools.
17
- *
18
- * You may also import from each sub-directory directly. For example, the
19
- * following two import statements are equivalent:
6
+ * You can import public exports from GraphQL.js modules through the root
7
+ * `graphql` package or through their module-specific entry point. For example,
8
+ * these two references resolve to the same `parse` function:
20
9
  *
21
10
  * ```ts
22
11
  * import { parse } from 'graphql';
23
12
  * import { parse } from 'graphql/language';
24
13
  * ```
25
14
  *
15
+ * Use the root package when you want a single import surface, or use submodules
16
+ * such as `graphql/language`, `graphql/type`, `graphql/execution`, and
17
+ * `graphql/utilities` when you want module-focused imports. This module also
18
+ * defines root-only APIs, such as request pipeline helpers and version
19
+ * metadata, that do not belong to a narrower submodule.
26
20
  * @packageDocumentation
27
21
  */
28
- // The GraphQL.js version info.
29
- export { version, versionInfo } from './version.mjs'; // The primary entry point into fulfilling a GraphQL request.
22
+ // Version constants for the GraphQL.js package.
23
+ export { version, versionInfo } from './version.mjs'; // Top-level helpers for fulfilling a GraphQL request.
30
24
 
31
25
  export { graphql, graphqlSync } from './graphql.mjs'; // Create and operate on GraphQL type definitions and schema.
32
26
 
@@ -1,2 +1,6 @@
1
- /** Conveniently represents flow's "Maybe" type https://flow.org/en/docs/types/maybe/ */
1
+ /**
2
+ * Conveniently represents flow's "Maybe" type https://flow.org/en/docs/types/maybe/
3
+ *
4
+ * @internal
5
+ */
2
6
  export declare type Maybe<T> = null | undefined | T;
@@ -1,14 +1,18 @@
1
+ /** @internal */
1
2
  export interface ObjMap<T> {
2
3
  [key: string]: T;
3
4
  }
5
+ /** @internal */
4
6
  export declare type ObjMapLike<T> =
5
7
  | ObjMap<T>
6
8
  | {
7
9
  [key: string]: T;
8
10
  };
11
+ /** @internal */
9
12
  export interface ReadOnlyObjMap<T> {
10
13
  readonly [key: string]: T;
11
14
  }
15
+ /** @internal */
12
16
  export declare type ReadOnlyObjMapLike<T> =
13
17
  | ReadOnlyObjMap<T>
14
18
  | {
package/jsutils/Path.d.ts CHANGED
@@ -1,11 +1,18 @@
1
+ /** @category Paths */
1
2
  import type { Maybe } from './Maybe';
3
+ /** Represents a linked response path from a field back to the root response. */
2
4
  export interface Path {
5
+ /** The previous segment in the linked response path, or undefined at the root. */
3
6
  readonly prev: Path | undefined;
7
+ /** The field name or list index for this response path segment. */
4
8
  readonly key: string | number;
9
+ /** The runtime object type name associated with this path segment, if known. */
5
10
  readonly typename: string | undefined;
6
11
  }
7
12
  /**
8
13
  * Given a Path and a key, return a new Path containing the new key.
14
+ *
15
+ * @internal
9
16
  */
10
17
  export declare function addPath(
11
18
  prev: Readonly<Path> | undefined,
@@ -14,6 +21,29 @@ export declare function addPath(
14
21
  ): Path;
15
22
  /**
16
23
  * Given a Path, return an Array of the path keys.
24
+ * @param path - The linked response path to flatten.
25
+ * @returns An array of response path keys from root to leaf.
26
+ * @example
27
+ * ```ts
28
+ * import { pathToArray } from 'graphql/jsutils/Path';
29
+ *
30
+ * const path = {
31
+ * prev: {
32
+ * prev: {
33
+ * prev: undefined,
34
+ * key: 'viewer',
35
+ * typename: 'Query',
36
+ * },
37
+ * key: 'friends',
38
+ * typename: 'User',
39
+ * },
40
+ * key: 0,
41
+ * typename: undefined,
42
+ * };
43
+ *
44
+ * pathToArray(path); // => ['viewer', 'friends', 0]
45
+ * pathToArray(undefined); // => []
46
+ * ```
17
47
  */
18
48
  export declare function pathToArray(
19
49
  path: Maybe<Readonly<Path>>,
package/jsutils/Path.js CHANGED
@@ -6,8 +6,14 @@ Object.defineProperty(exports, '__esModule', {
6
6
  exports.addPath = addPath;
7
7
  exports.pathToArray = pathToArray;
8
8
 
9
+ /** @category Paths */
10
+
11
+ /** Represents a linked response path from a field back to the root response. */
12
+
9
13
  /**
10
14
  * Given a Path and a key, return a new Path containing the new key.
15
+ *
16
+ * @internal
11
17
  */
12
18
  function addPath(prev, key, typename) {
13
19
  return {
@@ -18,6 +24,29 @@ function addPath(prev, key, typename) {
18
24
  }
19
25
  /**
20
26
  * Given a Path, return an Array of the path keys.
27
+ * @param path - The linked response path to flatten.
28
+ * @returns An array of response path keys from root to leaf.
29
+ * @example
30
+ * ```ts
31
+ * import { pathToArray } from 'graphql/jsutils/Path';
32
+ *
33
+ * const path = {
34
+ * prev: {
35
+ * prev: {
36
+ * prev: undefined,
37
+ * key: 'viewer',
38
+ * typename: 'Query',
39
+ * },
40
+ * key: 'friends',
41
+ * typename: 'User',
42
+ * },
43
+ * key: 0,
44
+ * typename: undefined,
45
+ * };
46
+ *
47
+ * pathToArray(path); // => ['viewer', 'friends', 0]
48
+ * pathToArray(undefined); // => []
49
+ * ```
21
50
  */
22
51
 
23
52
  function pathToArray(path) {
package/jsutils/Path.mjs CHANGED
@@ -1,5 +1,11 @@
1
+ /** @category Paths */
2
+
3
+ /** Represents a linked response path from a field back to the root response. */
4
+
1
5
  /**
2
6
  * Given a Path and a key, return a new Path containing the new key.
7
+ *
8
+ * @internal
3
9
  */
4
10
  export function addPath(prev, key, typename) {
5
11
  return {
@@ -10,6 +16,29 @@ export function addPath(prev, key, typename) {
10
16
  }
11
17
  /**
12
18
  * Given a Path, return an Array of the path keys.
19
+ * @param path - The linked response path to flatten.
20
+ * @returns An array of response path keys from root to leaf.
21
+ * @example
22
+ * ```ts
23
+ * import { pathToArray } from 'graphql/jsutils/Path';
24
+ *
25
+ * const path = {
26
+ * prev: {
27
+ * prev: {
28
+ * prev: undefined,
29
+ * key: 'viewer',
30
+ * typename: 'Query',
31
+ * },
32
+ * key: 'friends',
33
+ * typename: 'User',
34
+ * },
35
+ * key: 0,
36
+ * typename: undefined,
37
+ * };
38
+ *
39
+ * pathToArray(path); // => ['viewer', 'friends', 0]
40
+ * pathToArray(undefined); // => []
41
+ * ```
13
42
  */
14
43
 
15
44
  export function pathToArray(path) {
@@ -1 +1,2 @@
1
+ /** @internal */
1
2
  export declare type PromiseOrValue<T> = Promise<T> | T;
@@ -1 +1,2 @@
1
+ /** @internal */
1
2
  export declare function devAssert(condition: unknown, message: string): void;
@@ -5,6 +5,7 @@ Object.defineProperty(exports, '__esModule', {
5
5
  });
6
6
  exports.devAssert = devAssert;
7
7
 
8
+ /** @internal */
8
9
  function devAssert(condition, message) {
9
10
  const booleanCondition = Boolean(condition);
10
11
 
@@ -1,3 +1,4 @@
1
+ /** @internal */
1
2
  export function devAssert(condition, message) {
2
3
  const booleanCondition = Boolean(condition);
3
4
 
@@ -1,7 +1,10 @@
1
1
  /**
2
- * Given [ A, B, C ] return ' Did you mean A, B, or C?'.
2
+ * Given [A, B, C] return ' Did you mean A, B, or C?'.
3
+ *
4
+ * @internal
3
5
  */
4
6
  export declare function didYouMean(suggestions: ReadonlyArray<string>): string;
7
+ /** @internal */
5
8
  export declare function didYouMean(
6
9
  subMessage: string,
7
10
  suggestions: ReadonlyArray<string>,
@@ -6,9 +6,12 @@ Object.defineProperty(exports, '__esModule', {
6
6
  exports.didYouMean = didYouMean;
7
7
  const MAX_SUGGESTIONS = 5;
8
8
  /**
9
- * Given [ A, B, C ] return ' Did you mean A, B, or C?'.
9
+ * Given [A, B, C] return ' Did you mean A, B, or C?'.
10
+ *
11
+ * @internal
10
12
  */
11
13
 
14
+ /** @internal */
12
15
  function didYouMean(firstArg, secondArg) {
13
16
  const [subMessage, suggestionsArg] = secondArg
14
17
  ? [firstArg, secondArg]
@@ -1,8 +1,11 @@
1
1
  const MAX_SUGGESTIONS = 5;
2
2
  /**
3
- * Given [ A, B, C ] return ' Did you mean A, B, or C?'.
3
+ * Given [A, B, C] return ' Did you mean A, B, or C?'.
4
+ *
5
+ * @internal
4
6
  */
5
7
 
8
+ /** @internal */
6
9
  export function didYouMean(firstArg, secondArg) {
7
10
  const [subMessage, suggestionsArg] = secondArg
8
11
  ? [firstArg, secondArg]
@@ -1,5 +1,7 @@
1
1
  /**
2
2
  * Groups array items into a Map, given a function to produce grouping key.
3
+ *
4
+ * @internal
3
5
  */
4
6
  export declare function groupBy<K, T>(
5
7
  list: ReadonlyArray<T>,
@@ -7,6 +7,8 @@ exports.groupBy = groupBy;
7
7
 
8
8
  /**
9
9
  * Groups array items into a Map, given a function to produce grouping key.
10
+ *
11
+ * @internal
10
12
  */
11
13
  function groupBy(list, keyFn) {
12
14
  const result = new Map();
@@ -1,5 +1,7 @@
1
1
  /**
2
2
  * Groups array items into a Map, given a function to produce grouping key.
3
+ *
4
+ * @internal
3
5
  */
4
6
  export function groupBy(list, keyFn) {
5
7
  const result = new Map();
@@ -1,4 +1,6 @@
1
1
  /**
2
2
  * Returns the first argument it receives.
3
+ *
4
+ * @internal
3
5
  */
4
6
  export declare function identityFunc<T>(x: T): T;