graphql 15.3.0 → 15.5.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 (337) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +10 -0
  3. package/error/GraphQLError.js +8 -8
  4. package/error/GraphQLError.js.flow +2 -3
  5. package/error/GraphQLError.mjs +2 -2
  6. package/error/formatError.js +1 -1
  7. package/error/formatError.js.flow +0 -1
  8. package/error/index.js +4 -4
  9. package/error/index.js.flow +0 -1
  10. package/error/locatedError.d.ts +2 -2
  11. package/error/locatedError.js +10 -5
  12. package/error/locatedError.js.flow +10 -4
  13. package/error/locatedError.mjs +6 -4
  14. package/error/syntaxError.js +1 -1
  15. package/error/syntaxError.js.flow +0 -1
  16. package/execution/execute.d.ts +0 -15
  17. package/execution/execute.js +104 -104
  18. package/execution/execute.js.flow +119 -133
  19. package/execution/execute.mjs +86 -82
  20. package/execution/index.js +3 -3
  21. package/execution/index.js.flow +0 -1
  22. package/execution/values.js +11 -11
  23. package/execution/values.js.flow +0 -1
  24. package/graphql.js +5 -5
  25. package/graphql.js.flow +0 -1
  26. package/index.d.ts +1 -0
  27. package/index.js +9 -9
  28. package/index.js.flow +0 -1
  29. package/jsutils/ObjMap.js.flow +0 -1
  30. package/jsutils/Path.js.flow +0 -1
  31. package/jsutils/PromiseOrValue.js.flow +0 -1
  32. package/jsutils/defineInspect.js +2 -2
  33. package/jsutils/defineInspect.js.flow +0 -1
  34. package/jsutils/devAssert.js.flow +0 -1
  35. package/jsutils/didYouMean.js.flow +0 -1
  36. package/jsutils/identityFunc.js.flow +0 -1
  37. package/jsutils/inspect.js +1 -2
  38. package/jsutils/inspect.js.flow +10 -8
  39. package/jsutils/inspect.mjs +1 -1
  40. package/jsutils/instanceOf.js +15 -9
  41. package/jsutils/instanceOf.js.flow +13 -7
  42. package/jsutils/instanceOf.mjs +13 -5
  43. package/jsutils/invariant.js.flow +0 -1
  44. package/jsutils/isAsyncIterable.js +13 -0
  45. package/jsutils/isAsyncIterable.js.flow +14 -0
  46. package/jsutils/isAsyncIterable.mjs +10 -0
  47. package/jsutils/isObjectLike.js.flow +0 -1
  48. package/jsutils/isPromise.js.flow +0 -1
  49. package/jsutils/keyMap.js.flow +0 -1
  50. package/jsutils/keyValMap.js.flow +0 -1
  51. package/jsutils/mapValue.js +1 -1
  52. package/jsutils/mapValue.js.flow +0 -1
  53. package/jsutils/memoize3.js +2 -5
  54. package/jsutils/memoize3.js.flow +2 -5
  55. package/jsutils/memoize3.mjs +2 -5
  56. package/jsutils/naturalCompare.js +69 -0
  57. package/jsutils/naturalCompare.js.flow +59 -0
  58. package/jsutils/naturalCompare.mjs +61 -0
  59. package/jsutils/nodejsCustomInspectSymbol.js.flow +0 -1
  60. package/jsutils/printPathArray.js.flow +0 -1
  61. package/jsutils/promiseForObject.js.flow +0 -1
  62. package/jsutils/promiseReduce.js +1 -1
  63. package/jsutils/promiseReduce.js.flow +0 -1
  64. package/jsutils/safeArrayFrom.js +73 -0
  65. package/jsutils/safeArrayFrom.js.flow +59 -0
  66. package/jsutils/safeArrayFrom.mjs +66 -0
  67. package/jsutils/suggestionList.js +5 -1
  68. package/jsutils/suggestionList.js.flow +3 -2
  69. package/jsutils/suggestionList.mjs +3 -1
  70. package/jsutils/toObjMap.js +1 -1
  71. package/jsutils/toObjMap.js.flow +0 -1
  72. package/language/ast.js +1 -1
  73. package/language/ast.js.flow +0 -1
  74. package/language/blockString.d.ts +1 -1
  75. package/language/blockString.js +53 -32
  76. package/language/blockString.js.flow +51 -36
  77. package/language/blockString.mjs +54 -33
  78. package/language/directiveLocation.js.flow +0 -1
  79. package/language/experimentalOnlineParser/grammar.d.ts +1006 -0
  80. package/language/experimentalOnlineParser/grammar.js +987 -0
  81. package/language/experimentalOnlineParser/grammar.js.flow +1000 -0
  82. package/language/experimentalOnlineParser/grammar.mjs +980 -0
  83. package/language/experimentalOnlineParser/index.d.ts +6 -0
  84. package/language/experimentalOnlineParser/index.js +31 -0
  85. package/language/experimentalOnlineParser/index.js.flow +7 -0
  86. package/language/experimentalOnlineParser/index.mjs +1 -0
  87. package/language/experimentalOnlineParser/onlineParser.d.ts +125 -0
  88. package/language/experimentalOnlineParser/onlineParser.js +604 -0
  89. package/language/experimentalOnlineParser/onlineParser.js.flow +723 -0
  90. package/language/experimentalOnlineParser/onlineParser.mjs +587 -0
  91. package/language/index.js +12 -12
  92. package/language/index.js.flow +0 -1
  93. package/language/kinds.js.flow +0 -1
  94. package/language/lexer.js +242 -183
  95. package/language/lexer.js.flow +188 -184
  96. package/language/lexer.mjs +238 -179
  97. package/language/location.js.flow +0 -1
  98. package/language/parser.js +73 -68
  99. package/language/parser.js.flow +62 -57
  100. package/language/parser.mjs +64 -60
  101. package/language/predicates.js +1 -1
  102. package/language/predicates.js.flow +0 -1
  103. package/language/printLocation.js +1 -1
  104. package/language/printLocation.js.flow +0 -1
  105. package/language/printer.js +20 -13
  106. package/language/printer.js.flow +26 -25
  107. package/language/printer.mjs +18 -11
  108. package/language/source.d.ts +7 -0
  109. package/language/source.js +20 -3
  110. package/language/source.js.flow +21 -3
  111. package/language/source.mjs +14 -1
  112. package/language/tokenKind.js.flow +0 -1
  113. package/language/visitor.js +2 -2
  114. package/language/visitor.js.flow +0 -1
  115. package/package.json +2 -3
  116. package/polyfills/arrayFrom.js +2 -2
  117. package/polyfills/arrayFrom.js.flow +1 -2
  118. package/polyfills/arrayFrom.mjs +1 -1
  119. package/polyfills/find.js +1 -1
  120. package/polyfills/find.js.flow +1 -2
  121. package/polyfills/find.mjs +1 -1
  122. package/polyfills/isFinite.js +1 -1
  123. package/polyfills/isFinite.js.flow +1 -2
  124. package/polyfills/isFinite.mjs +1 -1
  125. package/polyfills/isInteger.js +1 -1
  126. package/polyfills/isInteger.js.flow +1 -2
  127. package/polyfills/isInteger.mjs +1 -1
  128. package/polyfills/objectEntries.js +1 -1
  129. package/polyfills/objectEntries.js.flow +1 -2
  130. package/polyfills/objectEntries.mjs +1 -1
  131. package/polyfills/objectValues.js +1 -1
  132. package/polyfills/objectValues.js.flow +1 -2
  133. package/polyfills/objectValues.mjs +1 -1
  134. package/polyfills/symbols.js +3 -5
  135. package/polyfills/symbols.js.flow +9 -6
  136. package/polyfills/symbols.mjs +3 -5
  137. package/subscription/index.js +1 -1
  138. package/subscription/index.js.flow +0 -1
  139. package/subscription/mapAsyncIterator.js +2 -2
  140. package/subscription/mapAsyncIterator.js.flow +8 -9
  141. package/subscription/mapAsyncIterator.mjs +1 -1
  142. package/subscription/subscribe.js +61 -73
  143. package/subscription/subscribe.js.flow +71 -85
  144. package/subscription/subscribe.mjs +53 -65
  145. package/type/definition.d.ts +16 -6
  146. package/type/definition.js +37 -32
  147. package/type/definition.js.flow +93 -63
  148. package/type/definition.mjs +19 -14
  149. package/type/directives.js +17 -16
  150. package/type/directives.js.flow +20 -13
  151. package/type/directives.mjs +6 -5
  152. package/type/index.js +6 -6
  153. package/type/index.js.flow +0 -1
  154. package/type/introspection.js +86 -65
  155. package/type/introspection.js.flow +75 -43
  156. package/type/introspection.mjs +79 -58
  157. package/type/scalars.js +9 -9
  158. package/type/scalars.js.flow +1 -2
  159. package/type/scalars.mjs +1 -1
  160. package/type/schema.js +13 -13
  161. package/type/schema.js.flow +2 -3
  162. package/type/schema.mjs +1 -1
  163. package/type/validate.js +52 -19
  164. package/type/validate.js.flow +54 -8
  165. package/type/validate.mjs +43 -9
  166. package/utilities/TypeInfo.js +7 -7
  167. package/utilities/TypeInfo.js.flow +1 -2
  168. package/utilities/assertValidName.js +2 -2
  169. package/utilities/assertValidName.js.flow +0 -1
  170. package/utilities/astFromValue.js +14 -16
  171. package/utilities/astFromValue.js.flow +6 -7
  172. package/utilities/astFromValue.mjs +6 -7
  173. package/utilities/buildASTSchema.js +17 -27
  174. package/utilities/buildASTSchema.js.flow +5 -21
  175. package/utilities/buildASTSchema.mjs +11 -21
  176. package/utilities/buildClientSchema.js +16 -15
  177. package/utilities/buildClientSchema.js.flow +28 -12
  178. package/utilities/buildClientSchema.mjs +5 -4
  179. package/utilities/coerceInputValue.js +17 -18
  180. package/utilities/coerceInputValue.js.flow +12 -10
  181. package/utilities/coerceInputValue.mjs +7 -7
  182. package/utilities/concatAST.js +9 -8
  183. package/utilities/concatAST.js.flow +8 -8
  184. package/utilities/concatAST.mjs +9 -6
  185. package/utilities/extendSchema.js +26 -19
  186. package/utilities/extendSchema.js.flow +19 -7
  187. package/utilities/extendSchema.mjs +8 -1
  188. package/utilities/findBreakingChanges.js +15 -11
  189. package/utilities/findBreakingChanges.js.flow +6 -3
  190. package/utilities/findBreakingChanges.mjs +5 -2
  191. package/utilities/findDeprecatedUsages.js +2 -2
  192. package/utilities/findDeprecatedUsages.js.flow +0 -1
  193. package/utilities/getIntrospectionQuery.d.ts +6 -0
  194. package/utilities/getIntrospectionQuery.js +8 -2
  195. package/utilities/getIntrospectionQuery.js.flow +17 -5
  196. package/utilities/getIntrospectionQuery.mjs +8 -2
  197. package/utilities/getOperationAST.js +1 -1
  198. package/utilities/getOperationAST.js.flow +0 -1
  199. package/utilities/getOperationRootType.js +1 -1
  200. package/utilities/getOperationRootType.js.flow +0 -1
  201. package/utilities/index.d.ts +3 -0
  202. package/utilities/index.js +22 -22
  203. package/utilities/index.js.flow +0 -1
  204. package/utilities/introspectionFromSchema.js +7 -5
  205. package/utilities/introspectionFromSchema.js.flow +2 -1
  206. package/utilities/introspectionFromSchema.mjs +3 -1
  207. package/utilities/lexicographicSortSchema.js +13 -9
  208. package/utilities/lexicographicSortSchema.js.flow +21 -13
  209. package/utilities/lexicographicSortSchema.mjs +5 -2
  210. package/utilities/printSchema.js +15 -16
  211. package/utilities/printSchema.js.flow +23 -16
  212. package/utilities/printSchema.mjs +5 -6
  213. package/utilities/separateOperations.js +46 -42
  214. package/utilities/separateOperations.js.flow +46 -37
  215. package/utilities/separateOperations.mjs +44 -40
  216. package/utilities/stripIgnoredCharacters.js +6 -16
  217. package/utilities/stripIgnoredCharacters.js.flow +4 -13
  218. package/utilities/stripIgnoredCharacters.mjs +3 -10
  219. package/utilities/typeComparators.js +1 -1
  220. package/utilities/typeComparators.js.flow +0 -1
  221. package/utilities/typeFromAST.js +6 -6
  222. package/utilities/typeFromAST.js.flow +2 -3
  223. package/utilities/typeFromAST.mjs +2 -2
  224. package/utilities/typedQueryDocumentNode.d.ts +20 -0
  225. package/utilities/valueFromAST.js +6 -6
  226. package/utilities/valueFromAST.js.flow +4 -2
  227. package/utilities/valueFromASTUntyped.js +4 -4
  228. package/utilities/valueFromASTUntyped.js.flow +0 -1
  229. package/validation/ValidationContext.js +3 -3
  230. package/validation/ValidationContext.js.flow +3 -4
  231. package/validation/index.js +38 -38
  232. package/validation/index.js.flow +0 -1
  233. package/validation/rules/ExecutableDefinitions.js +1 -1
  234. package/validation/rules/ExecutableDefinitions.js.flow +0 -1
  235. package/validation/rules/ExecutableDefinitionsRule.js +3 -3
  236. package/validation/rules/ExecutableDefinitionsRule.js.flow +0 -1
  237. package/validation/rules/FieldsOnCorrectTypeRule.js +8 -6
  238. package/validation/rules/FieldsOnCorrectTypeRule.js.flow +2 -2
  239. package/validation/rules/FieldsOnCorrectTypeRule.mjs +2 -1
  240. package/validation/rules/FragmentsOnCompositeTypesRule.js +4 -4
  241. package/validation/rules/FragmentsOnCompositeTypesRule.js.flow +0 -1
  242. package/validation/rules/KnownArgumentNamesRule.js +5 -5
  243. package/validation/rules/KnownArgumentNamesRule.js.flow +1 -1
  244. package/validation/rules/KnownDirectivesRule.js +6 -6
  245. package/validation/rules/KnownDirectivesRule.js.flow +4 -3
  246. package/validation/rules/KnownFragmentNamesRule.js +1 -1
  247. package/validation/rules/KnownFragmentNamesRule.js.flow +0 -1
  248. package/validation/rules/KnownTypeNamesRule.js +6 -6
  249. package/validation/rules/KnownTypeNamesRule.js.flow +1 -2
  250. package/validation/rules/LoneAnonymousOperationRule.js +2 -2
  251. package/validation/rules/LoneAnonymousOperationRule.js.flow +0 -1
  252. package/validation/rules/LoneSchemaDefinition.js +1 -1
  253. package/validation/rules/LoneSchemaDefinition.js.flow +0 -1
  254. package/validation/rules/LoneSchemaDefinitionRule.js +1 -1
  255. package/validation/rules/LoneSchemaDefinitionRule.js.flow +0 -1
  256. package/validation/rules/NoFragmentCyclesRule.js +1 -1
  257. package/validation/rules/NoFragmentCyclesRule.js.flow +1 -2
  258. package/validation/rules/NoUndefinedVariablesRule.js +1 -1
  259. package/validation/rules/NoUndefinedVariablesRule.js.flow +0 -1
  260. package/validation/rules/NoUnusedFragmentsRule.js +1 -1
  261. package/validation/rules/NoUnusedFragmentsRule.js.flow +0 -1
  262. package/validation/rules/NoUnusedVariablesRule.js +1 -1
  263. package/validation/rules/NoUnusedVariablesRule.js.flow +0 -1
  264. package/validation/rules/OverlappingFieldsCanBeMergedRule.js +20 -20
  265. package/validation/rules/OverlappingFieldsCanBeMergedRule.js.flow +14 -14
  266. package/validation/rules/OverlappingFieldsCanBeMergedRule.mjs +12 -12
  267. package/validation/rules/PossibleFragmentSpreadsRule.js +5 -5
  268. package/validation/rules/PossibleFragmentSpreadsRule.js.flow +5 -2
  269. package/validation/rules/PossibleTypeExtensions.js +1 -1
  270. package/validation/rules/PossibleTypeExtensions.js.flow +0 -1
  271. package/validation/rules/PossibleTypeExtensionsRule.js +8 -8
  272. package/validation/rules/PossibleTypeExtensionsRule.js.flow +6 -4
  273. package/validation/rules/ProvidedRequiredArgumentsRule.js +7 -7
  274. package/validation/rules/ProvidedRequiredArgumentsRule.js.flow +4 -3
  275. package/validation/rules/ScalarLeafsRule.js +3 -3
  276. package/validation/rules/ScalarLeafsRule.js.flow +0 -1
  277. package/validation/rules/SingleFieldSubscriptionsRule.js +1 -1
  278. package/validation/rules/SingleFieldSubscriptionsRule.js.flow +0 -1
  279. package/validation/rules/UniqueArgumentNamesRule.js +1 -1
  280. package/validation/rules/UniqueArgumentNamesRule.js.flow +0 -1
  281. package/validation/rules/UniqueDirectiveNames.js +1 -1
  282. package/validation/rules/UniqueDirectiveNames.js.flow +0 -1
  283. package/validation/rules/UniqueDirectiveNamesRule.js +2 -2
  284. package/validation/rules/UniqueDirectiveNamesRule.js.flow +0 -1
  285. package/validation/rules/UniqueDirectiveNamesRule.mjs +1 -1
  286. package/validation/rules/UniqueDirectivesPerLocationRule.js +4 -4
  287. package/validation/rules/UniqueDirectivesPerLocationRule.js.flow +0 -1
  288. package/validation/rules/UniqueEnumValueNames.js +1 -1
  289. package/validation/rules/UniqueEnumValueNames.js.flow +0 -1
  290. package/validation/rules/UniqueEnumValueNamesRule.js +2 -2
  291. package/validation/rules/UniqueEnumValueNamesRule.js.flow +7 -2
  292. package/validation/rules/UniqueFieldDefinitionNames.js +1 -1
  293. package/validation/rules/UniqueFieldDefinitionNames.js.flow +0 -1
  294. package/validation/rules/UniqueFieldDefinitionNamesRule.js +3 -3
  295. package/validation/rules/UniqueFieldDefinitionNamesRule.js.flow +13 -4
  296. package/validation/rules/UniqueFieldDefinitionNamesRule.mjs +1 -1
  297. package/validation/rules/UniqueFragmentNamesRule.js +1 -1
  298. package/validation/rules/UniqueFragmentNamesRule.js.flow +0 -1
  299. package/validation/rules/UniqueInputFieldNamesRule.js +1 -1
  300. package/validation/rules/UniqueInputFieldNamesRule.js.flow +0 -1
  301. package/validation/rules/UniqueOperationNamesRule.js +1 -1
  302. package/validation/rules/UniqueOperationNamesRule.js.flow +0 -1
  303. package/validation/rules/UniqueOperationTypes.js +1 -1
  304. package/validation/rules/UniqueOperationTypes.js.flow +0 -1
  305. package/validation/rules/UniqueOperationTypesRule.js +1 -1
  306. package/validation/rules/UniqueOperationTypesRule.js.flow +7 -2
  307. package/validation/rules/UniqueTypeNames.js +1 -1
  308. package/validation/rules/UniqueTypeNames.js.flow +0 -1
  309. package/validation/rules/UniqueTypeNamesRule.js +2 -2
  310. package/validation/rules/UniqueTypeNamesRule.js.flow +0 -1
  311. package/validation/rules/UniqueTypeNamesRule.mjs +1 -1
  312. package/validation/rules/UniqueVariableNamesRule.js +1 -1
  313. package/validation/rules/UniqueVariableNamesRule.js.flow +0 -1
  314. package/validation/rules/ValuesOfCorrectTypeRule.js +8 -8
  315. package/validation/rules/ValuesOfCorrectTypeRule.js.flow +0 -1
  316. package/validation/rules/VariablesAreInputTypesRule.js +4 -4
  317. package/validation/rules/VariablesAreInputTypesRule.js.flow +0 -1
  318. package/validation/rules/VariablesInAllowedPositionRule.js +6 -6
  319. package/validation/rules/VariablesInAllowedPositionRule.js.flow +0 -1
  320. package/validation/rules/custom/NoDeprecatedCustomRule.js +47 -9
  321. package/validation/rules/custom/NoDeprecatedCustomRule.js.flow +56 -13
  322. package/validation/rules/custom/NoDeprecatedCustomRule.mjs +43 -8
  323. package/validation/rules/custom/NoSchemaIntrospectionCustomRule.js +3 -3
  324. package/validation/rules/custom/NoSchemaIntrospectionCustomRule.js.flow +0 -1
  325. package/validation/specifiedRules.js +33 -33
  326. package/validation/specifiedRules.js.flow +0 -1
  327. package/validation/validate.js +7 -7
  328. package/validation/validate.js.flow +4 -5
  329. package/version.js +3 -3
  330. package/version.js.flow +3 -4
  331. package/version.mjs +3 -3
  332. package/jsutils/isCollection.js +0 -47
  333. package/jsutils/isCollection.js.flow +0 -39
  334. package/jsutils/isCollection.mjs +0 -40
  335. package/polyfills/flatMap.js +0 -30
  336. package/polyfills/flatMap.js.flow +0 -28
  337. package/polyfills/flatMap.mjs +0 -23
@@ -0,0 +1,59 @@
1
+ // @flow strict
2
+ /**
3
+ * Returns a number indicating whether a reference string comes before, or after,
4
+ * or is the same as the given string in natural sort order.
5
+ *
6
+ * See: https://en.wikipedia.org/wiki/Natural_sort_order
7
+ *
8
+ */
9
+ export default function naturalCompare(aStr: string, bStr: string): number {
10
+ let aIdx = 0;
11
+ let bIdx = 0;
12
+
13
+ while (aIdx < aStr.length && bIdx < bStr.length) {
14
+ let aChar = aStr.charCodeAt(aIdx);
15
+ let bChar = bStr.charCodeAt(bIdx);
16
+
17
+ if (isDigit(aChar) && isDigit(bChar)) {
18
+ let aNum = 0;
19
+ do {
20
+ ++aIdx;
21
+ aNum = aNum * 10 + aChar - DIGIT_0;
22
+ aChar = aStr.charCodeAt(aIdx);
23
+ } while (isDigit(aChar) && aNum > 0);
24
+
25
+ let bNum = 0;
26
+ do {
27
+ ++bIdx;
28
+ bNum = bNum * 10 + bChar - DIGIT_0;
29
+ bChar = bStr.charCodeAt(bIdx);
30
+ } while (isDigit(bChar) && bNum > 0);
31
+
32
+ if (aNum < bNum) {
33
+ return -1;
34
+ }
35
+
36
+ if (aNum > bNum) {
37
+ return 1;
38
+ }
39
+ } else {
40
+ if (aChar < bChar) {
41
+ return -1;
42
+ }
43
+ if (aChar > bChar) {
44
+ return 1;
45
+ }
46
+ ++aIdx;
47
+ ++bIdx;
48
+ }
49
+ }
50
+
51
+ return aStr.length - bStr.length;
52
+ }
53
+
54
+ const DIGIT_0 = 48;
55
+ const DIGIT_9 = 57;
56
+
57
+ function isDigit(code: number): boolean {
58
+ return !isNaN(code) && DIGIT_0 <= code && code <= DIGIT_9;
59
+ }
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Returns a number indicating whether a reference string comes before, or after,
3
+ * or is the same as the given string in natural sort order.
4
+ *
5
+ * See: https://en.wikipedia.org/wiki/Natural_sort_order
6
+ *
7
+ */
8
+ export default function naturalCompare(aStr, bStr) {
9
+ var aIdx = 0;
10
+ var bIdx = 0;
11
+
12
+ while (aIdx < aStr.length && bIdx < bStr.length) {
13
+ var aChar = aStr.charCodeAt(aIdx);
14
+ var bChar = bStr.charCodeAt(bIdx);
15
+
16
+ if (isDigit(aChar) && isDigit(bChar)) {
17
+ var aNum = 0;
18
+
19
+ do {
20
+ ++aIdx;
21
+ aNum = aNum * 10 + aChar - DIGIT_0;
22
+ aChar = aStr.charCodeAt(aIdx);
23
+ } while (isDigit(aChar) && aNum > 0);
24
+
25
+ var bNum = 0;
26
+
27
+ do {
28
+ ++bIdx;
29
+ bNum = bNum * 10 + bChar - DIGIT_0;
30
+ bChar = bStr.charCodeAt(bIdx);
31
+ } while (isDigit(bChar) && bNum > 0);
32
+
33
+ if (aNum < bNum) {
34
+ return -1;
35
+ }
36
+
37
+ if (aNum > bNum) {
38
+ return 1;
39
+ }
40
+ } else {
41
+ if (aChar < bChar) {
42
+ return -1;
43
+ }
44
+
45
+ if (aChar > bChar) {
46
+ return 1;
47
+ }
48
+
49
+ ++aIdx;
50
+ ++bIdx;
51
+ }
52
+ }
53
+
54
+ return aStr.length - bStr.length;
55
+ }
56
+ var DIGIT_0 = 48;
57
+ var DIGIT_9 = 57;
58
+
59
+ function isDigit(code) {
60
+ return !isNaN(code) && DIGIT_0 <= code && code <= DIGIT_9;
61
+ }
@@ -1,5 +1,4 @@
1
1
  // @flow strict
2
-
3
2
  // istanbul ignore next (See: 'https://github.com/graphql/graphql-js/issues/2317')
4
3
  const nodejsCustomInspectSymbol =
5
4
  typeof Symbol === 'function' && typeof Symbol.for === 'function'
@@ -1,5 +1,4 @@
1
1
  // @flow strict
2
-
3
2
  /**
4
3
  * Build a string describing the path.
5
4
  */
@@ -1,5 +1,4 @@
1
1
  // @flow strict
2
-
3
2
  import type { ObjMap } from './ObjMap';
4
3
 
5
4
  /**
@@ -5,7 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = promiseReduce;
7
7
 
8
- var _isPromise = _interopRequireDefault(require("./isPromise"));
8
+ var _isPromise = _interopRequireDefault(require("./isPromise.js"));
9
9
 
10
10
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
11
 
@@ -1,5 +1,4 @@
1
1
  // @flow strict
2
-
3
2
  import type { PromiseOrValue } from './PromiseOrValue';
4
3
 
5
4
  import isPromise from './isPromise';
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = safeArrayFrom;
7
+
8
+ var _symbols = require("../polyfills/symbols.js");
9
+
10
+ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
11
+
12
+ /**
13
+ * Safer version of `Array.from` that return `null` if value isn't convertible to array.
14
+ * Also protects against Array-like objects without items.
15
+ *
16
+ * @example
17
+ *
18
+ * safeArrayFrom([ 1, 2, 3 ]) // [1, 2, 3]
19
+ * safeArrayFrom('ABC') // null
20
+ * safeArrayFrom({ length: 1 }) // null
21
+ * safeArrayFrom({ length: 1, 0: 'Alpha' }) // ['Alpha']
22
+ * safeArrayFrom({ key: 'value' }) // null
23
+ * safeArrayFrom(new Map()) // []
24
+ *
25
+ */
26
+ function safeArrayFrom(collection) {
27
+ var mapFn = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function (item) {
28
+ return item;
29
+ };
30
+
31
+ if (collection == null || _typeof(collection) !== 'object') {
32
+ return null;
33
+ }
34
+
35
+ if (Array.isArray(collection)) {
36
+ return collection.map(mapFn);
37
+ } // Is Iterable?
38
+
39
+
40
+ var iteratorMethod = collection[_symbols.SYMBOL_ITERATOR];
41
+
42
+ if (typeof iteratorMethod === 'function') {
43
+ // $FlowFixMe[incompatible-use]
44
+ var iterator = iteratorMethod.call(collection);
45
+ var result = [];
46
+ var step;
47
+
48
+ for (var i = 0; !(step = iterator.next()).done; ++i) {
49
+ result.push(mapFn(step.value, i));
50
+ }
51
+
52
+ return result;
53
+ } // Is Array like?
54
+
55
+
56
+ var length = collection.length;
57
+
58
+ if (typeof length === 'number' && length >= 0 && length % 1 === 0) {
59
+ var _result = [];
60
+
61
+ for (var _i = 0; _i < length; ++_i) {
62
+ if (!Object.prototype.hasOwnProperty.call(collection, _i)) {
63
+ return null;
64
+ }
65
+
66
+ _result.push(mapFn(collection[String(_i)], _i));
67
+ }
68
+
69
+ return _result;
70
+ }
71
+
72
+ return null;
73
+ }
@@ -0,0 +1,59 @@
1
+ // @flow strict
2
+ import { SYMBOL_ITERATOR } from '../polyfills/symbols';
3
+
4
+ /**
5
+ * Safer version of `Array.from` that return `null` if value isn't convertible to array.
6
+ * Also protects against Array-like objects without items.
7
+ *
8
+ * @example
9
+ *
10
+ * safeArrayFrom([ 1, 2, 3 ]) // [1, 2, 3]
11
+ * safeArrayFrom('ABC') // null
12
+ * safeArrayFrom({ length: 1 }) // null
13
+ * safeArrayFrom({ length: 1, 0: 'Alpha' }) // ['Alpha']
14
+ * safeArrayFrom({ key: 'value' }) // null
15
+ * safeArrayFrom(new Map()) // []
16
+ *
17
+ */
18
+ export default function safeArrayFrom<T>(
19
+ collection: mixed,
20
+ mapFn: (elem: mixed, index: number) => T = (item) => ((item: any): T),
21
+ ): Array<T> | null {
22
+ if (collection == null || typeof collection !== 'object') {
23
+ return null;
24
+ }
25
+
26
+ if (Array.isArray(collection)) {
27
+ return collection.map(mapFn);
28
+ }
29
+
30
+ // Is Iterable?
31
+ const iteratorMethod = collection[SYMBOL_ITERATOR];
32
+ if (typeof iteratorMethod === 'function') {
33
+ // $FlowFixMe[incompatible-use]
34
+ const iterator = iteratorMethod.call(collection);
35
+ const result = [];
36
+ let step;
37
+
38
+ for (let i = 0; !(step = iterator.next()).done; ++i) {
39
+ result.push(mapFn(step.value, i));
40
+ }
41
+ return result;
42
+ }
43
+
44
+ // Is Array like?
45
+ const length = collection.length;
46
+ if (typeof length === 'number' && length >= 0 && length % 1 === 0) {
47
+ const result = [];
48
+ for (let i = 0; i < length; ++i) {
49
+ if (!Object.prototype.hasOwnProperty.call(collection, i)) {
50
+ return null;
51
+ }
52
+ result.push(mapFn(collection[String(i)], i));
53
+ }
54
+
55
+ return result;
56
+ }
57
+
58
+ return null;
59
+ }
@@ -0,0 +1,66 @@
1
+ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
2
+
3
+ import { SYMBOL_ITERATOR } from "../polyfills/symbols.mjs";
4
+ /**
5
+ * Safer version of `Array.from` that return `null` if value isn't convertible to array.
6
+ * Also protects against Array-like objects without items.
7
+ *
8
+ * @example
9
+ *
10
+ * safeArrayFrom([ 1, 2, 3 ]) // [1, 2, 3]
11
+ * safeArrayFrom('ABC') // null
12
+ * safeArrayFrom({ length: 1 }) // null
13
+ * safeArrayFrom({ length: 1, 0: 'Alpha' }) // ['Alpha']
14
+ * safeArrayFrom({ key: 'value' }) // null
15
+ * safeArrayFrom(new Map()) // []
16
+ *
17
+ */
18
+
19
+ export default function safeArrayFrom(collection) {
20
+ var mapFn = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function (item) {
21
+ return item;
22
+ };
23
+
24
+ if (collection == null || _typeof(collection) !== 'object') {
25
+ return null;
26
+ }
27
+
28
+ if (Array.isArray(collection)) {
29
+ return collection.map(mapFn);
30
+ } // Is Iterable?
31
+
32
+
33
+ var iteratorMethod = collection[SYMBOL_ITERATOR];
34
+
35
+ if (typeof iteratorMethod === 'function') {
36
+ // $FlowFixMe[incompatible-use]
37
+ var iterator = iteratorMethod.call(collection);
38
+ var result = [];
39
+ var step;
40
+
41
+ for (var i = 0; !(step = iterator.next()).done; ++i) {
42
+ result.push(mapFn(step.value, i));
43
+ }
44
+
45
+ return result;
46
+ } // Is Array like?
47
+
48
+
49
+ var length = collection.length;
50
+
51
+ if (typeof length === 'number' && length >= 0 && length % 1 === 0) {
52
+ var _result = [];
53
+
54
+ for (var _i = 0; _i < length; ++_i) {
55
+ if (!Object.prototype.hasOwnProperty.call(collection, _i)) {
56
+ return null;
57
+ }
58
+
59
+ _result.push(mapFn(collection[String(_i)], _i));
60
+ }
61
+
62
+ return _result;
63
+ }
64
+
65
+ return null;
66
+ }
@@ -5,6 +5,10 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = suggestionList;
7
7
 
8
+ var _naturalCompare = _interopRequireDefault(require("./naturalCompare.js"));
9
+
10
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
+
8
12
  /**
9
13
  * Given an invalid input string and a list of valid options, returns a filtered
10
14
  * list of valid options sorted based on their similarity with the input.
@@ -25,7 +29,7 @@ function suggestionList(input, options) {
25
29
 
26
30
  return Object.keys(optionsByDistance).sort(function (a, b) {
27
31
  var distanceDiff = optionsByDistance[a] - optionsByDistance[b];
28
- return distanceDiff !== 0 ? distanceDiff : a.localeCompare(b);
32
+ return distanceDiff !== 0 ? distanceDiff : (0, _naturalCompare.default)(a, b);
29
33
  });
30
34
  }
31
35
  /**
@@ -1,4 +1,5 @@
1
1
  // @flow strict
2
+ import naturalCompare from './naturalCompare';
2
3
 
3
4
  /**
4
5
  * Given an invalid input string and a list of valid options, returns a filtered
@@ -21,7 +22,7 @@ export default function suggestionList(
21
22
 
22
23
  return Object.keys(optionsByDistance).sort((a, b) => {
23
24
  const distanceDiff = optionsByDistance[a] - optionsByDistance[b];
24
- return distanceDiff !== 0 ? distanceDiff : a.localeCompare(b);
25
+ return distanceDiff !== 0 ? distanceDiff : naturalCompare(a, b);
25
26
  });
26
27
  }
27
28
 
@@ -127,7 +128,7 @@ class LexicalDistance {
127
128
  }
128
129
  }
129
130
 
130
- function stringToArray(str) {
131
+ function stringToArray(str: string): Array<number> {
131
132
  const strLength = str.length;
132
133
  const array = new Array(strLength);
133
134
  for (let i = 0; i < strLength; ++i) {
@@ -1,7 +1,9 @@
1
+ import naturalCompare from "./naturalCompare.mjs";
1
2
  /**
2
3
  * Given an invalid input string and a list of valid options, returns a filtered
3
4
  * list of valid options sorted based on their similarity with the input.
4
5
  */
6
+
5
7
  export default function suggestionList(input, options) {
6
8
  var optionsByDistance = Object.create(null);
7
9
  var lexicalDistance = new LexicalDistance(input);
@@ -18,7 +20,7 @@ export default function suggestionList(input, options) {
18
20
 
19
21
  return Object.keys(optionsByDistance).sort(function (a, b) {
20
22
  var distanceDiff = optionsByDistance[a] - optionsByDistance[b];
21
- return distanceDiff !== 0 ? distanceDiff : a.localeCompare(b);
23
+ return distanceDiff !== 0 ? distanceDiff : naturalCompare(a, b);
22
24
  });
23
25
  }
24
26
  /**
@@ -5,7 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = toObjMap;
7
7
 
8
- var _objectEntries3 = _interopRequireDefault(require("../polyfills/objectEntries"));
8
+ var _objectEntries3 = _interopRequireDefault(require("../polyfills/objectEntries.js"));
9
9
 
10
10
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
11
 
@@ -1,5 +1,4 @@
1
1
  // @flow strict
2
-
3
2
  import objectEntries from '../polyfills/objectEntries';
4
3
 
5
4
  import type {
package/language/ast.js CHANGED
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.isNode = isNode;
7
7
  exports.Token = exports.Location = void 0;
8
8
 
9
- var _defineInspect = _interopRequireDefault(require("../jsutils/defineInspect"));
9
+ var _defineInspect = _interopRequireDefault(require("../jsutils/defineInspect.js"));
10
10
 
11
11
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
12
12
 
@@ -1,5 +1,4 @@
1
1
  // @flow strict
2
-
3
2
  import defineInspect from '../jsutils/defineInspect';
4
3
 
5
4
  import type { Source } from './source';
@@ -9,7 +9,7 @@ export function dedentBlockStringValue(rawString: string): string;
9
9
  /**
10
10
  * @internal
11
11
  */
12
- export function getBlockStringIndentation(lines: ReadonlyArray<string>): number;
12
+ export function getBlockStringIndentation(body: string): number;
13
13
 
14
14
  /**
15
15
  * Print a block string in the indented block form by adding a leading and
@@ -19,7 +19,7 @@ function dedentBlockStringValue(rawString) {
19
19
  // Expand a block string's raw value into independent lines.
20
20
  var lines = rawString.split(/\r\n|[\n\r]/g); // Remove common indentation from all lines but first.
21
21
 
22
- var commonIndent = getBlockStringIndentation(lines);
22
+ var commonIndent = getBlockStringIndentation(rawString);
23
23
 
24
24
  if (commonIndent !== 0) {
25
25
  for (var i = 1; i < lines.length; i++) {
@@ -28,57 +28,78 @@ function dedentBlockStringValue(rawString) {
28
28
  } // Remove leading and trailing blank lines.
29
29
 
30
30
 
31
- while (lines.length > 0 && isBlank(lines[0])) {
32
- lines.shift();
31
+ var startLine = 0;
32
+
33
+ while (startLine < lines.length && isBlank(lines[startLine])) {
34
+ ++startLine;
33
35
  }
34
36
 
35
- while (lines.length > 0 && isBlank(lines[lines.length - 1])) {
36
- lines.pop();
37
+ var endLine = lines.length;
38
+
39
+ while (endLine > startLine && isBlank(lines[endLine - 1])) {
40
+ --endLine;
37
41
  } // Return a string of the lines joined with U+000A.
38
42
 
39
43
 
40
- return lines.join('\n');
44
+ return lines.slice(startLine, endLine).join('\n');
45
+ }
46
+
47
+ function isBlank(str) {
48
+ for (var i = 0; i < str.length; ++i) {
49
+ if (str[i] !== ' ' && str[i] !== '\t') {
50
+ return false;
51
+ }
52
+ }
53
+
54
+ return true;
41
55
  }
42
56
  /**
43
57
  * @internal
44
58
  */
45
59
 
46
60
 
47
- function getBlockStringIndentation(lines) {
48
- var commonIndent = null;
61
+ function getBlockStringIndentation(value) {
62
+ var _commonIndent;
49
63
 
50
- for (var i = 1; i < lines.length; i++) {
51
- var line = lines[i];
52
- var indent = leadingWhitespace(line);
64
+ var isFirstLine = true;
65
+ var isEmptyLine = true;
66
+ var indent = 0;
67
+ var commonIndent = null;
53
68
 
54
- if (indent === line.length) {
55
- continue; // skip empty lines
56
- }
69
+ for (var i = 0; i < value.length; ++i) {
70
+ switch (value.charCodeAt(i)) {
71
+ case 13:
72
+ // \r
73
+ if (value.charCodeAt(i + 1) === 10) {
74
+ ++i; // skip \r\n as one symbol
75
+ }
76
+
77
+ // falls through
78
+
79
+ case 10:
80
+ // \n
81
+ isFirstLine = false;
82
+ isEmptyLine = true;
83
+ indent = 0;
84
+ break;
57
85
 
58
- if (commonIndent === null || indent < commonIndent) {
59
- commonIndent = indent;
86
+ case 9: // \t
60
87
 
61
- if (commonIndent === 0) {
88
+ case 32:
89
+ // <space>
90
+ ++indent;
62
91
  break;
63
- }
64
- }
65
- }
66
-
67
- return commonIndent === null ? 0 : commonIndent;
68
- }
69
92
 
70
- function leadingWhitespace(str) {
71
- var i = 0;
93
+ default:
94
+ if (isEmptyLine && !isFirstLine && (commonIndent === null || indent < commonIndent)) {
95
+ commonIndent = indent;
96
+ }
72
97
 
73
- while (i < str.length && (str[i] === ' ' || str[i] === '\t')) {
74
- i++;
98
+ isEmptyLine = false;
99
+ }
75
100
  }
76
101
 
77
- return i;
78
- }
79
-
80
- function isBlank(str) {
81
- return leadingWhitespace(str) === str.length;
102
+ return (_commonIndent = commonIndent) !== null && _commonIndent !== void 0 ? _commonIndent : 0;
82
103
  }
83
104
  /**
84
105
  * Print a block string in the indented block form by adding a leading and