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