graphql 15.2.0 → 15.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (338) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +19 -10
  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 +11 -15
  17. package/execution/execute.js +110 -110
  18. package/execution/execute.js.flow +132 -139
  19. package/execution/execute.mjs +92 -88
  20. package/execution/index.d.ts +1 -0
  21. package/execution/index.js +3 -3
  22. package/execution/index.js.flow +6 -2
  23. package/execution/values.js +11 -11
  24. package/execution/values.js.flow +0 -1
  25. package/graphql.js +5 -5
  26. package/graphql.js.flow +0 -1
  27. package/index.d.ts +2 -0
  28. package/index.js +9 -9
  29. package/index.js.flow +5 -2
  30. package/jsutils/ObjMap.js.flow +0 -1
  31. package/jsutils/Path.js.flow +0 -1
  32. package/jsutils/PromiseOrValue.js.flow +0 -1
  33. package/jsutils/defineInspect.js +2 -2
  34. package/jsutils/defineInspect.js.flow +0 -1
  35. package/jsutils/devAssert.js.flow +0 -1
  36. package/jsutils/didYouMean.js.flow +0 -1
  37. package/jsutils/identityFunc.js.flow +0 -1
  38. package/jsutils/inspect.js +1 -2
  39. package/jsutils/inspect.js.flow +10 -8
  40. package/jsutils/inspect.mjs +1 -1
  41. package/jsutils/instanceOf.js.flow +2 -3
  42. package/jsutils/invariant.js.flow +0 -1
  43. package/jsutils/isAsyncIterable.js +13 -0
  44. package/jsutils/isAsyncIterable.js.flow +14 -0
  45. package/jsutils/isAsyncIterable.mjs +10 -0
  46. package/jsutils/isObjectLike.js.flow +0 -1
  47. package/jsutils/isPromise.js.flow +0 -1
  48. package/jsutils/keyMap.js.flow +0 -1
  49. package/jsutils/keyValMap.js.flow +0 -1
  50. package/jsutils/mapValue.js +1 -1
  51. package/jsutils/mapValue.js.flow +0 -1
  52. package/jsutils/memoize3.js +2 -5
  53. package/jsutils/memoize3.js.flow +2 -5
  54. package/jsutils/memoize3.mjs +2 -5
  55. package/jsutils/naturalCompare.js +69 -0
  56. package/jsutils/naturalCompare.js.flow +59 -0
  57. package/jsutils/naturalCompare.mjs +61 -0
  58. package/jsutils/nodejsCustomInspectSymbol.js.flow +0 -1
  59. package/jsutils/printPathArray.js.flow +0 -1
  60. package/jsutils/promiseForObject.js.flow +0 -1
  61. package/jsutils/promiseReduce.js +1 -1
  62. package/jsutils/promiseReduce.js.flow +0 -1
  63. package/jsutils/safeArrayFrom.js +73 -0
  64. package/jsutils/safeArrayFrom.js.flow +59 -0
  65. package/jsutils/safeArrayFrom.mjs +66 -0
  66. package/jsutils/suggestionList.js +5 -1
  67. package/jsutils/suggestionList.js.flow +3 -2
  68. package/jsutils/suggestionList.mjs +3 -1
  69. package/jsutils/toObjMap.js +1 -1
  70. package/jsutils/toObjMap.js.flow +0 -1
  71. package/language/ast.js +1 -1
  72. package/language/ast.js.flow +0 -1
  73. package/language/blockString.d.ts +1 -1
  74. package/language/blockString.js +53 -32
  75. package/language/blockString.js.flow +51 -36
  76. package/language/blockString.mjs +54 -33
  77. package/language/directiveLocation.js.flow +0 -1
  78. package/language/experimentalOnlineParser/grammar.d.ts +1006 -0
  79. package/language/experimentalOnlineParser/grammar.js +987 -0
  80. package/language/experimentalOnlineParser/grammar.js.flow +1000 -0
  81. package/language/experimentalOnlineParser/grammar.mjs +980 -0
  82. package/language/experimentalOnlineParser/index.d.ts +6 -0
  83. package/language/experimentalOnlineParser/index.js +31 -0
  84. package/language/experimentalOnlineParser/index.js.flow +7 -0
  85. package/language/experimentalOnlineParser/index.mjs +1 -0
  86. package/language/experimentalOnlineParser/onlineParser.d.ts +125 -0
  87. package/language/experimentalOnlineParser/onlineParser.js +604 -0
  88. package/language/experimentalOnlineParser/onlineParser.js.flow +723 -0
  89. package/language/experimentalOnlineParser/onlineParser.mjs +587 -0
  90. package/language/index.js +12 -12
  91. package/language/index.js.flow +0 -1
  92. package/language/kinds.js.flow +0 -1
  93. package/language/lexer.js +242 -183
  94. package/language/lexer.js.flow +188 -184
  95. package/language/lexer.mjs +238 -179
  96. package/language/location.js.flow +0 -1
  97. package/language/parser.js +73 -68
  98. package/language/parser.js.flow +62 -57
  99. package/language/parser.mjs +64 -60
  100. package/language/predicates.js +1 -1
  101. package/language/predicates.js.flow +0 -1
  102. package/language/printLocation.js +1 -1
  103. package/language/printLocation.js.flow +0 -1
  104. package/language/printer.js +20 -13
  105. package/language/printer.js.flow +26 -25
  106. package/language/printer.mjs +18 -11
  107. package/language/source.d.ts +12 -6
  108. package/language/source.js +25 -9
  109. package/language/source.js.flow +26 -9
  110. package/language/source.mjs +19 -7
  111. package/language/tokenKind.js.flow +0 -1
  112. package/language/visitor.d.ts +3 -3
  113. package/language/visitor.js +5 -5
  114. package/language/visitor.js.flow +3 -4
  115. package/language/visitor.mjs +3 -3
  116. package/package.json +2 -3
  117. package/polyfills/arrayFrom.js +2 -2
  118. package/polyfills/arrayFrom.js.flow +1 -2
  119. package/polyfills/arrayFrom.mjs +1 -1
  120. package/polyfills/find.js +1 -1
  121. package/polyfills/find.js.flow +1 -2
  122. package/polyfills/find.mjs +1 -1
  123. package/polyfills/isFinite.js +1 -1
  124. package/polyfills/isFinite.js.flow +1 -2
  125. package/polyfills/isFinite.mjs +1 -1
  126. package/polyfills/isInteger.js +1 -1
  127. package/polyfills/isInteger.js.flow +1 -2
  128. package/polyfills/isInteger.mjs +1 -1
  129. package/polyfills/objectEntries.js +1 -1
  130. package/polyfills/objectEntries.js.flow +1 -2
  131. package/polyfills/objectEntries.mjs +1 -1
  132. package/polyfills/objectValues.js +1 -1
  133. package/polyfills/objectValues.js.flow +1 -2
  134. package/polyfills/objectValues.mjs +1 -1
  135. package/polyfills/symbols.js +3 -5
  136. package/polyfills/symbols.js.flow +9 -6
  137. package/polyfills/symbols.mjs +3 -5
  138. package/subscription/index.js +1 -1
  139. package/subscription/index.js.flow +0 -1
  140. package/subscription/mapAsyncIterator.js +2 -2
  141. package/subscription/mapAsyncIterator.js.flow +8 -9
  142. package/subscription/mapAsyncIterator.mjs +1 -1
  143. package/subscription/subscribe.js +61 -73
  144. package/subscription/subscribe.js.flow +71 -85
  145. package/subscription/subscribe.mjs +53 -65
  146. package/type/definition.d.ts +17 -9
  147. package/type/definition.js +37 -32
  148. package/type/definition.js.flow +93 -63
  149. package/type/definition.mjs +19 -14
  150. package/type/directives.js +17 -16
  151. package/type/directives.js.flow +20 -13
  152. package/type/directives.mjs +6 -5
  153. package/type/index.js +6 -6
  154. package/type/index.js.flow +0 -1
  155. package/type/introspection.js +86 -65
  156. package/type/introspection.js.flow +75 -43
  157. package/type/introspection.mjs +79 -58
  158. package/type/scalars.js +9 -9
  159. package/type/scalars.js.flow +1 -2
  160. package/type/scalars.mjs +1 -1
  161. package/type/schema.js +13 -13
  162. package/type/schema.js.flow +2 -3
  163. package/type/schema.mjs +1 -1
  164. package/type/validate.js +52 -19
  165. package/type/validate.js.flow +54 -8
  166. package/type/validate.mjs +43 -9
  167. package/utilities/TypeInfo.js +7 -7
  168. package/utilities/TypeInfo.js.flow +1 -2
  169. package/utilities/assertValidName.js +2 -2
  170. package/utilities/assertValidName.js.flow +0 -1
  171. package/utilities/astFromValue.js +14 -16
  172. package/utilities/astFromValue.js.flow +6 -7
  173. package/utilities/astFromValue.mjs +6 -7
  174. package/utilities/buildASTSchema.js +17 -27
  175. package/utilities/buildASTSchema.js.flow +5 -21
  176. package/utilities/buildASTSchema.mjs +11 -21
  177. package/utilities/buildClientSchema.js +16 -15
  178. package/utilities/buildClientSchema.js.flow +28 -12
  179. package/utilities/buildClientSchema.mjs +5 -4
  180. package/utilities/coerceInputValue.js +17 -18
  181. package/utilities/coerceInputValue.js.flow +12 -10
  182. package/utilities/coerceInputValue.mjs +7 -7
  183. package/utilities/concatAST.js +9 -8
  184. package/utilities/concatAST.js.flow +8 -8
  185. package/utilities/concatAST.mjs +9 -6
  186. package/utilities/extendSchema.js +26 -19
  187. package/utilities/extendSchema.js.flow +19 -7
  188. package/utilities/extendSchema.mjs +8 -1
  189. package/utilities/findBreakingChanges.js +15 -11
  190. package/utilities/findBreakingChanges.js.flow +6 -3
  191. package/utilities/findBreakingChanges.mjs +5 -2
  192. package/utilities/findDeprecatedUsages.js +2 -2
  193. package/utilities/findDeprecatedUsages.js.flow +0 -1
  194. package/utilities/getIntrospectionQuery.d.ts +6 -0
  195. package/utilities/getIntrospectionQuery.js +8 -2
  196. package/utilities/getIntrospectionQuery.js.flow +17 -5
  197. package/utilities/getIntrospectionQuery.mjs +8 -2
  198. package/utilities/getOperationAST.js +1 -1
  199. package/utilities/getOperationAST.js.flow +0 -1
  200. package/utilities/getOperationRootType.js +1 -1
  201. package/utilities/getOperationRootType.js.flow +0 -1
  202. package/utilities/index.d.ts +3 -0
  203. package/utilities/index.js +22 -22
  204. package/utilities/index.js.flow +0 -1
  205. package/utilities/introspectionFromSchema.js +7 -5
  206. package/utilities/introspectionFromSchema.js.flow +2 -1
  207. package/utilities/introspectionFromSchema.mjs +3 -1
  208. package/utilities/lexicographicSortSchema.js +13 -9
  209. package/utilities/lexicographicSortSchema.js.flow +21 -13
  210. package/utilities/lexicographicSortSchema.mjs +5 -2
  211. package/utilities/printSchema.js +15 -16
  212. package/utilities/printSchema.js.flow +23 -16
  213. package/utilities/printSchema.mjs +5 -6
  214. package/utilities/separateOperations.js +46 -42
  215. package/utilities/separateOperations.js.flow +46 -37
  216. package/utilities/separateOperations.mjs +44 -40
  217. package/utilities/stripIgnoredCharacters.js +6 -16
  218. package/utilities/stripIgnoredCharacters.js.flow +4 -13
  219. package/utilities/stripIgnoredCharacters.mjs +3 -10
  220. package/utilities/typeComparators.js +1 -1
  221. package/utilities/typeComparators.js.flow +0 -1
  222. package/utilities/typeFromAST.js +6 -6
  223. package/utilities/typeFromAST.js.flow +2 -3
  224. package/utilities/typeFromAST.mjs +2 -2
  225. package/utilities/typedQueryDocumentNode.d.ts +20 -0
  226. package/utilities/valueFromAST.js +6 -6
  227. package/utilities/valueFromAST.js.flow +4 -2
  228. package/utilities/valueFromASTUntyped.js +4 -4
  229. package/utilities/valueFromASTUntyped.js.flow +0 -1
  230. package/validation/ValidationContext.js +3 -3
  231. package/validation/ValidationContext.js.flow +3 -4
  232. package/validation/index.js +38 -38
  233. package/validation/index.js.flow +0 -1
  234. package/validation/rules/ExecutableDefinitions.js +1 -1
  235. package/validation/rules/ExecutableDefinitions.js.flow +0 -1
  236. package/validation/rules/ExecutableDefinitionsRule.js +3 -3
  237. package/validation/rules/ExecutableDefinitionsRule.js.flow +0 -1
  238. package/validation/rules/FieldsOnCorrectTypeRule.js +8 -6
  239. package/validation/rules/FieldsOnCorrectTypeRule.js.flow +2 -2
  240. package/validation/rules/FieldsOnCorrectTypeRule.mjs +2 -1
  241. package/validation/rules/FragmentsOnCompositeTypesRule.js +4 -4
  242. package/validation/rules/FragmentsOnCompositeTypesRule.js.flow +0 -1
  243. package/validation/rules/KnownArgumentNamesRule.js +5 -5
  244. package/validation/rules/KnownArgumentNamesRule.js.flow +1 -1
  245. package/validation/rules/KnownDirectivesRule.js +6 -6
  246. package/validation/rules/KnownDirectivesRule.js.flow +4 -3
  247. package/validation/rules/KnownFragmentNamesRule.js +1 -1
  248. package/validation/rules/KnownFragmentNamesRule.js.flow +0 -1
  249. package/validation/rules/KnownTypeNamesRule.js +6 -6
  250. package/validation/rules/KnownTypeNamesRule.js.flow +1 -2
  251. package/validation/rules/LoneAnonymousOperationRule.js +2 -2
  252. package/validation/rules/LoneAnonymousOperationRule.js.flow +0 -1
  253. package/validation/rules/LoneSchemaDefinition.js +1 -1
  254. package/validation/rules/LoneSchemaDefinition.js.flow +0 -1
  255. package/validation/rules/LoneSchemaDefinitionRule.js +1 -1
  256. package/validation/rules/LoneSchemaDefinitionRule.js.flow +0 -1
  257. package/validation/rules/NoFragmentCyclesRule.js +1 -1
  258. package/validation/rules/NoFragmentCyclesRule.js.flow +1 -2
  259. package/validation/rules/NoUndefinedVariablesRule.js +1 -1
  260. package/validation/rules/NoUndefinedVariablesRule.js.flow +0 -1
  261. package/validation/rules/NoUnusedFragmentsRule.js +1 -1
  262. package/validation/rules/NoUnusedFragmentsRule.js.flow +0 -1
  263. package/validation/rules/NoUnusedVariablesRule.js +1 -1
  264. package/validation/rules/NoUnusedVariablesRule.js.flow +0 -1
  265. package/validation/rules/OverlappingFieldsCanBeMergedRule.js +20 -20
  266. package/validation/rules/OverlappingFieldsCanBeMergedRule.js.flow +14 -14
  267. package/validation/rules/OverlappingFieldsCanBeMergedRule.mjs +12 -12
  268. package/validation/rules/PossibleFragmentSpreadsRule.js +5 -5
  269. package/validation/rules/PossibleFragmentSpreadsRule.js.flow +5 -2
  270. package/validation/rules/PossibleTypeExtensions.js +1 -1
  271. package/validation/rules/PossibleTypeExtensions.js.flow +0 -1
  272. package/validation/rules/PossibleTypeExtensionsRule.js +8 -8
  273. package/validation/rules/PossibleTypeExtensionsRule.js.flow +6 -4
  274. package/validation/rules/ProvidedRequiredArgumentsRule.js +7 -7
  275. package/validation/rules/ProvidedRequiredArgumentsRule.js.flow +4 -3
  276. package/validation/rules/ScalarLeafsRule.js +3 -3
  277. package/validation/rules/ScalarLeafsRule.js.flow +0 -1
  278. package/validation/rules/SingleFieldSubscriptionsRule.js +1 -1
  279. package/validation/rules/SingleFieldSubscriptionsRule.js.flow +0 -1
  280. package/validation/rules/UniqueArgumentNamesRule.js +1 -1
  281. package/validation/rules/UniqueArgumentNamesRule.js.flow +0 -1
  282. package/validation/rules/UniqueDirectiveNames.js +1 -1
  283. package/validation/rules/UniqueDirectiveNames.js.flow +0 -1
  284. package/validation/rules/UniqueDirectiveNamesRule.js +2 -2
  285. package/validation/rules/UniqueDirectiveNamesRule.js.flow +0 -1
  286. package/validation/rules/UniqueDirectiveNamesRule.mjs +1 -1
  287. package/validation/rules/UniqueDirectivesPerLocationRule.js +4 -4
  288. package/validation/rules/UniqueDirectivesPerLocationRule.js.flow +0 -1
  289. package/validation/rules/UniqueEnumValueNames.js +1 -1
  290. package/validation/rules/UniqueEnumValueNames.js.flow +0 -1
  291. package/validation/rules/UniqueEnumValueNamesRule.js +2 -2
  292. package/validation/rules/UniqueEnumValueNamesRule.js.flow +7 -2
  293. package/validation/rules/UniqueFieldDefinitionNames.js +1 -1
  294. package/validation/rules/UniqueFieldDefinitionNames.js.flow +0 -1
  295. package/validation/rules/UniqueFieldDefinitionNamesRule.js +3 -3
  296. package/validation/rules/UniqueFieldDefinitionNamesRule.js.flow +13 -4
  297. package/validation/rules/UniqueFieldDefinitionNamesRule.mjs +1 -1
  298. package/validation/rules/UniqueFragmentNamesRule.js +1 -1
  299. package/validation/rules/UniqueFragmentNamesRule.js.flow +0 -1
  300. package/validation/rules/UniqueInputFieldNamesRule.js +1 -1
  301. package/validation/rules/UniqueInputFieldNamesRule.js.flow +0 -1
  302. package/validation/rules/UniqueOperationNamesRule.js +1 -1
  303. package/validation/rules/UniqueOperationNamesRule.js.flow +0 -1
  304. package/validation/rules/UniqueOperationTypes.js +1 -1
  305. package/validation/rules/UniqueOperationTypes.js.flow +0 -1
  306. package/validation/rules/UniqueOperationTypesRule.js +1 -1
  307. package/validation/rules/UniqueOperationTypesRule.js.flow +7 -2
  308. package/validation/rules/UniqueTypeNames.js +1 -1
  309. package/validation/rules/UniqueTypeNames.js.flow +0 -1
  310. package/validation/rules/UniqueTypeNamesRule.js +2 -2
  311. package/validation/rules/UniqueTypeNamesRule.js.flow +0 -1
  312. package/validation/rules/UniqueTypeNamesRule.mjs +1 -1
  313. package/validation/rules/UniqueVariableNamesRule.js +1 -1
  314. package/validation/rules/UniqueVariableNamesRule.js.flow +0 -1
  315. package/validation/rules/ValuesOfCorrectTypeRule.js +8 -8
  316. package/validation/rules/ValuesOfCorrectTypeRule.js.flow +0 -1
  317. package/validation/rules/VariablesAreInputTypesRule.js +4 -4
  318. package/validation/rules/VariablesAreInputTypesRule.js.flow +0 -1
  319. package/validation/rules/VariablesInAllowedPositionRule.js +6 -6
  320. package/validation/rules/VariablesInAllowedPositionRule.js.flow +0 -1
  321. package/validation/rules/custom/NoDeprecatedCustomRule.js +47 -9
  322. package/validation/rules/custom/NoDeprecatedCustomRule.js.flow +56 -13
  323. package/validation/rules/custom/NoDeprecatedCustomRule.mjs +43 -8
  324. package/validation/rules/custom/NoSchemaIntrospectionCustomRule.js +3 -3
  325. package/validation/rules/custom/NoSchemaIntrospectionCustomRule.js.flow +0 -1
  326. package/validation/specifiedRules.js +33 -33
  327. package/validation/specifiedRules.js.flow +0 -1
  328. package/validation/validate.js +7 -7
  329. package/validation/validate.js.flow +4 -5
  330. package/version.js +2 -2
  331. package/version.js.flow +2 -3
  332. package/version.mjs +2 -2
  333. package/jsutils/isCollection.js +0 -47
  334. package/jsutils/isCollection.js.flow +0 -39
  335. package/jsutils/isCollection.mjs +0 -40
  336. package/polyfills/flatMap.js +0 -30
  337. package/polyfills/flatMap.js.flow +0 -28
  338. package/polyfills/flatMap.mjs +0 -23
@@ -1,5 +1,4 @@
1
1
  // @flow strict
2
-
3
2
  import { syntaxError } from '../error/syntaxError';
4
3
 
5
4
  import type { Source } from './source';
@@ -96,7 +95,7 @@ export function isPunctuatorTokenKind(kind: TokenKindEnum): boolean %checks {
96
95
  );
97
96
  }
98
97
 
99
- function printCharCode(code) {
98
+ function printCharCode(code: number): string {
100
99
  return (
101
100
  // NaN/undefined represents access beyond the end of the file.
102
101
  isNaN(code)
@@ -121,149 +120,159 @@ function readToken(lexer: Lexer, prev: Token): Token {
121
120
  const body = source.body;
122
121
  const bodyLength = body.length;
123
122
 
124
- const pos = positionAfterWhitespace(body, prev.end, lexer);
125
- const line = lexer.line;
126
- const col = 1 + pos - lexer.lineStart;
123
+ let pos = prev.end;
124
+ while (pos < bodyLength) {
125
+ const code = body.charCodeAt(pos);
127
126
 
128
- if (pos >= bodyLength) {
129
- return new Token(TokenKind.EOF, bodyLength, bodyLength, line, col, prev);
130
- }
127
+ const line = lexer.line;
128
+ const col = 1 + pos - lexer.lineStart;
131
129
 
132
- const code = body.charCodeAt(pos);
133
-
134
- // SourceCharacter
135
- switch (code) {
136
- // !
137
- case 33:
138
- return new Token(TokenKind.BANG, pos, pos + 1, line, col, prev);
139
- // #
140
- case 35:
141
- return readComment(source, pos, line, col, prev);
142
- // $
143
- case 36:
144
- return new Token(TokenKind.DOLLAR, pos, pos + 1, line, col, prev);
145
- // &
146
- case 38:
147
- return new Token(TokenKind.AMP, pos, pos + 1, line, col, prev);
148
- // (
149
- case 40:
150
- return new Token(TokenKind.PAREN_L, pos, pos + 1, line, col, prev);
151
- // )
152
- case 41:
153
- return new Token(TokenKind.PAREN_R, pos, pos + 1, line, col, prev);
154
- // .
155
- case 46:
156
- if (body.charCodeAt(pos + 1) === 46 && body.charCodeAt(pos + 2) === 46) {
157
- return new Token(TokenKind.SPREAD, pos, pos + 3, line, col, prev);
158
- }
159
- break;
160
- // :
161
- case 58:
162
- return new Token(TokenKind.COLON, pos, pos + 1, line, col, prev);
163
- // =
164
- case 61:
165
- return new Token(TokenKind.EQUALS, pos, pos + 1, line, col, prev);
166
- // @
167
- case 64:
168
- return new Token(TokenKind.AT, pos, pos + 1, line, col, prev);
169
- // [
170
- case 91:
171
- return new Token(TokenKind.BRACKET_L, pos, pos + 1, line, col, prev);
172
- // ]
173
- case 93:
174
- return new Token(TokenKind.BRACKET_R, pos, pos + 1, line, col, prev);
175
- // {
176
- case 123:
177
- return new Token(TokenKind.BRACE_L, pos, pos + 1, line, col, prev);
178
- // |
179
- case 124:
180
- return new Token(TokenKind.PIPE, pos, pos + 1, line, col, prev);
181
- // }
182
- case 125:
183
- return new Token(TokenKind.BRACE_R, pos, pos + 1, line, col, prev);
184
- // A-Z _ a-z
185
- case 65:
186
- case 66:
187
- case 67:
188
- case 68:
189
- case 69:
190
- case 70:
191
- case 71:
192
- case 72:
193
- case 73:
194
- case 74:
195
- case 75:
196
- case 76:
197
- case 77:
198
- case 78:
199
- case 79:
200
- case 80:
201
- case 81:
202
- case 82:
203
- case 83:
204
- case 84:
205
- case 85:
206
- case 86:
207
- case 87:
208
- case 88:
209
- case 89:
210
- case 90:
211
- case 95:
212
- case 97:
213
- case 98:
214
- case 99:
215
- case 100:
216
- case 101:
217
- case 102:
218
- case 103:
219
- case 104:
220
- case 105:
221
- case 106:
222
- case 107:
223
- case 108:
224
- case 109:
225
- case 110:
226
- case 111:
227
- case 112:
228
- case 113:
229
- case 114:
230
- case 115:
231
- case 116:
232
- case 117:
233
- case 118:
234
- case 119:
235
- case 120:
236
- case 121:
237
- case 122:
238
- return readName(source, pos, line, col, prev);
239
- // - 0-9
240
- case 45:
241
- case 48:
242
- case 49:
243
- case 50:
244
- case 51:
245
- case 52:
246
- case 53:
247
- case 54:
248
- case 55:
249
- case 56:
250
- case 57:
251
- return readNumber(source, pos, code, line, col, prev);
252
- // "
253
- case 34:
254
- if (body.charCodeAt(pos + 1) === 34 && body.charCodeAt(pos + 2) === 34) {
255
- return readBlockString(source, pos, line, col, prev, lexer);
256
- }
257
- return readString(source, pos, line, col, prev);
130
+ // SourceCharacter
131
+ switch (code) {
132
+ case 0xfeff: // <BOM>
133
+ case 9: // \t
134
+ case 32: // <space>
135
+ case 44: // ,
136
+ ++pos;
137
+ continue;
138
+ case 10: // \n
139
+ ++pos;
140
+ ++lexer.line;
141
+ lexer.lineStart = pos;
142
+ continue;
143
+ case 13: // \r
144
+ if (body.charCodeAt(pos + 1) === 10) {
145
+ pos += 2;
146
+ } else {
147
+ ++pos;
148
+ }
149
+ ++lexer.line;
150
+ lexer.lineStart = pos;
151
+ continue;
152
+ case 33: // !
153
+ return new Token(TokenKind.BANG, pos, pos + 1, line, col, prev);
154
+ case 35: // #
155
+ return readComment(source, pos, line, col, prev);
156
+ case 36: // $
157
+ return new Token(TokenKind.DOLLAR, pos, pos + 1, line, col, prev);
158
+ case 38: // &
159
+ return new Token(TokenKind.AMP, pos, pos + 1, line, col, prev);
160
+ case 40: // (
161
+ return new Token(TokenKind.PAREN_L, pos, pos + 1, line, col, prev);
162
+ case 41: // )
163
+ return new Token(TokenKind.PAREN_R, pos, pos + 1, line, col, prev);
164
+ case 46: // .
165
+ if (
166
+ body.charCodeAt(pos + 1) === 46 &&
167
+ body.charCodeAt(pos + 2) === 46
168
+ ) {
169
+ return new Token(TokenKind.SPREAD, pos, pos + 3, line, col, prev);
170
+ }
171
+ break;
172
+ case 58: // :
173
+ return new Token(TokenKind.COLON, pos, pos + 1, line, col, prev);
174
+ case 61: // =
175
+ return new Token(TokenKind.EQUALS, pos, pos + 1, line, col, prev);
176
+ case 64: // @
177
+ return new Token(TokenKind.AT, pos, pos + 1, line, col, prev);
178
+ case 91: // [
179
+ return new Token(TokenKind.BRACKET_L, pos, pos + 1, line, col, prev);
180
+ case 93: // ]
181
+ return new Token(TokenKind.BRACKET_R, pos, pos + 1, line, col, prev);
182
+ case 123: // {
183
+ return new Token(TokenKind.BRACE_L, pos, pos + 1, line, col, prev);
184
+ case 124: // |
185
+ return new Token(TokenKind.PIPE, pos, pos + 1, line, col, prev);
186
+ case 125: // }
187
+ return new Token(TokenKind.BRACE_R, pos, pos + 1, line, col, prev);
188
+ case 34: // "
189
+ if (
190
+ body.charCodeAt(pos + 1) === 34 &&
191
+ body.charCodeAt(pos + 2) === 34
192
+ ) {
193
+ return readBlockString(source, pos, line, col, prev, lexer);
194
+ }
195
+ return readString(source, pos, line, col, prev);
196
+ case 45: // -
197
+ case 48: // 0
198
+ case 49: // 1
199
+ case 50: // 2
200
+ case 51: // 3
201
+ case 52: // 4
202
+ case 53: // 5
203
+ case 54: // 6
204
+ case 55: // 7
205
+ case 56: // 8
206
+ case 57: // 9
207
+ return readNumber(source, pos, code, line, col, prev);
208
+ case 65: // A
209
+ case 66: // B
210
+ case 67: // C
211
+ case 68: // D
212
+ case 69: // E
213
+ case 70: // F
214
+ case 71: // G
215
+ case 72: // H
216
+ case 73: // I
217
+ case 74: // J
218
+ case 75: // K
219
+ case 76: // L
220
+ case 77: // M
221
+ case 78: // N
222
+ case 79: // O
223
+ case 80: // P
224
+ case 81: // Q
225
+ case 82: // R
226
+ case 83: // S
227
+ case 84: // T
228
+ case 85: // U
229
+ case 86: // V
230
+ case 87: // W
231
+ case 88: // X
232
+ case 89: // Y
233
+ case 90: // Z
234
+ case 95: // _
235
+ case 97: // a
236
+ case 98: // b
237
+ case 99: // c
238
+ case 100: // d
239
+ case 101: // e
240
+ case 102: // f
241
+ case 103: // g
242
+ case 104: // h
243
+ case 105: // i
244
+ case 106: // j
245
+ case 107: // k
246
+ case 108: // l
247
+ case 109: // m
248
+ case 110: // n
249
+ case 111: // o
250
+ case 112: // p
251
+ case 113: // q
252
+ case 114: // r
253
+ case 115: // s
254
+ case 116: // t
255
+ case 117: // u
256
+ case 118: // v
257
+ case 119: // w
258
+ case 120: // x
259
+ case 121: // y
260
+ case 122: // z
261
+ return readName(source, pos, line, col, prev);
262
+ }
263
+
264
+ throw syntaxError(source, pos, unexpectedCharacterMessage(code));
258
265
  }
259
266
 
260
- throw syntaxError(source, pos, unexpectedCharacterMessage(code));
267
+ const line = lexer.line;
268
+ const col = 1 + pos - lexer.lineStart;
269
+ return new Token(TokenKind.EOF, bodyLength, bodyLength, line, col, prev);
261
270
  }
262
271
 
263
272
  /**
264
273
  * Report a message that an unexpected character was encountered.
265
274
  */
266
- function unexpectedCharacterMessage(code) {
275
+ function unexpectedCharacterMessage(code: number): string {
267
276
  if (code < 0x0020 && code !== 0x0009 && code !== 0x000a && code !== 0x000d) {
268
277
  return `Cannot contain the invalid character ${printCharCode(code)}.`;
269
278
  }
@@ -276,49 +285,18 @@ function unexpectedCharacterMessage(code) {
276
285
  return `Cannot parse the unexpected character ${printCharCode(code)}.`;
277
286
  }
278
287
 
279
- /**
280
- * Reads from body starting at startPosition until it finds a non-whitespace
281
- * character, then returns the position of that character for lexing.
282
- */
283
- function positionAfterWhitespace(
284
- body: string,
285
- startPosition: number,
286
- lexer: Lexer,
287
- ): number {
288
- const bodyLength = body.length;
289
- let position = startPosition;
290
- while (position < bodyLength) {
291
- const code = body.charCodeAt(position);
292
- // tab | space | comma | BOM
293
- if (code === 9 || code === 32 || code === 44 || code === 0xfeff) {
294
- ++position;
295
- } else if (code === 10) {
296
- // new line
297
- ++position;
298
- ++lexer.line;
299
- lexer.lineStart = position;
300
- } else if (code === 13) {
301
- // carriage return
302
- if (body.charCodeAt(position + 1) === 10) {
303
- position += 2;
304
- } else {
305
- ++position;
306
- }
307
- ++lexer.line;
308
- lexer.lineStart = position;
309
- } else {
310
- break;
311
- }
312
- }
313
- return position;
314
- }
315
-
316
288
  /**
317
289
  * Reads a comment token from the source file.
318
290
  *
319
291
  * #[\u0009\u0020-\uFFFF]*
320
292
  */
321
- function readComment(source, start, line, col, prev): Token {
293
+ function readComment(
294
+ source: Source,
295
+ start: number,
296
+ line: number,
297
+ col: number,
298
+ prev: Token | null,
299
+ ): Token {
322
300
  const body = source.body;
323
301
  let code;
324
302
  let position = start;
@@ -349,7 +327,14 @@ function readComment(source, start, line, col, prev): Token {
349
327
  * Int: -?(0|[1-9][0-9]*)
350
328
  * Float: -?(0|[1-9][0-9]*)(\.[0-9]+)?((E|e)(+|-)?[0-9]+)?
351
329
  */
352
- function readNumber(source, start, firstCode, line, col, prev): Token {
330
+ function readNumber(
331
+ source: Source,
332
+ start: number,
333
+ firstCode: number,
334
+ line: number,
335
+ col: number,
336
+ prev: Token | null,
337
+ ): Token {
353
338
  const body = source.body;
354
339
  let code = firstCode;
355
340
  let position = start;
@@ -420,7 +405,7 @@ function readNumber(source, start, firstCode, line, col, prev): Token {
420
405
  /**
421
406
  * Returns the new position in the source after reading digits.
422
407
  */
423
- function readDigits(source, start, firstCode) {
408
+ function readDigits(source: Source, start: number, firstCode: number): number {
424
409
  const body = source.body;
425
410
  let position = start;
426
411
  let code = firstCode;
@@ -443,7 +428,13 @@ function readDigits(source, start, firstCode) {
443
428
  *
444
429
  * "([^"\\\u000A\u000D]|(\\(u[0-9a-fA-F]{4}|["\\/bfnrt])))*"
445
430
  */
446
- function readString(source, start, line, col, prev): Token {
431
+ function readString(
432
+ source: Source,
433
+ start: number,
434
+ line: number,
435
+ col: number,
436
+ prev: Token | null,
437
+ ): Token {
447
438
  const body = source.body;
448
439
  let position = start + 1;
449
440
  let chunkStart = position;
@@ -552,7 +543,14 @@ function readString(source, start, line, col, prev): Token {
552
543
  *
553
544
  * """("?"?(\\"""|\\(?!=""")|[^"\\]))*"""
554
545
  */
555
- function readBlockString(source, start, line, col, prev, lexer): Token {
546
+ function readBlockString(
547
+ source: Source,
548
+ start: number,
549
+ line: number,
550
+ col: number,
551
+ prev: Token | null,
552
+ lexer: Lexer,
553
+ ): Token {
556
554
  const body = source.body;
557
555
  let position = start + 3;
558
556
  let chunkStart = position;
@@ -634,7 +632,7 @@ function readBlockString(source, start, line, col, prev, lexer): Token {
634
632
  * This is implemented by noting that char2hex() returns -1 on error,
635
633
  * which means the result of ORing the char2hex() will also be negative.
636
634
  */
637
- function uniCharCode(a, b, c, d) {
635
+ function uniCharCode(a: number, b: number, c: number, d: number): number {
638
636
  return (
639
637
  (char2hex(a) << 12) | (char2hex(b) << 8) | (char2hex(c) << 4) | char2hex(d)
640
638
  );
@@ -648,7 +646,7 @@ function uniCharCode(a, b, c, d) {
648
646
  *
649
647
  * Returns -1 on error.
650
648
  */
651
- function char2hex(a) {
649
+ function char2hex(a: number): number {
652
650
  return a >= 48 && a <= 57
653
651
  ? a - 48 // 0-9
654
652
  : a >= 65 && a <= 70
@@ -663,7 +661,13 @@ function char2hex(a) {
663
661
  *
664
662
  * [_A-Za-z][_0-9A-Za-z]*
665
663
  */
666
- function readName(source, start, line, col, prev): Token {
664
+ function readName(
665
+ source: Source,
666
+ start: number,
667
+ line: number,
668
+ col: number,
669
+ prev: Token | null,
670
+ ): Token {
667
671
  const body = source.body;
668
672
  const bodyLength = body.length;
669
673
  let position = start + 1;
@@ -672,8 +676,8 @@ function readName(source, start, line, col, prev): Token {
672
676
  position !== bodyLength &&
673
677
  !isNaN((code = body.charCodeAt(position))) &&
674
678
  (code === 95 || // _
675
- (code >= 48 && code <= 57) || // 0-9
676
- (code >= 65 && code <= 90) || // A-Z
679
+ (code >= 48 && code <= 57) || // 0-9
680
+ (code >= 65 && code <= 90) || // A-Z
677
681
  (code >= 97 && code <= 122)) // a-z
678
682
  ) {
679
683
  ++position;
@@ -690,7 +694,7 @@ function readName(source, start, line, col, prev): Token {
690
694
  }
691
695
 
692
696
  // _ A-Z a-z
693
- function isNameStart(code): boolean {
697
+ function isNameStart(code: number): boolean {
694
698
  return (
695
699
  code === 95 || (code >= 65 && code <= 90) || (code >= 97 && code <= 122)
696
700
  );