tsc-ts 0.0.10 → 0.1.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 (379) hide show
  1. package/README.md +1 -1
  2. package/bin/tsc-ts.js +70 -1
  3. package/dist/api/compiler/ast-utilities.d.ts +19 -1
  4. package/dist/api/compiler/ast-utilities.js +180 -95
  5. package/dist/api/compiler/ast.d.ts +29 -18
  6. package/dist/api/compiler/ast.js +1040 -1007
  7. package/dist/api/compiler/astnav.js +15 -15
  8. package/dist/api/compiler/binder-utilities.js +186 -186
  9. package/dist/api/compiler/binder.js +290 -263
  10. package/dist/api/compiler/character-codes.js +2 -2
  11. package/dist/api/compiler/checker-calls.js +173 -123
  12. package/dist/api/compiler/checker-classes.d.ts +14 -3
  13. package/dist/api/compiler/checker-classes.js +136 -91
  14. package/dist/api/compiler/checker-contextual.d.ts +20 -0
  15. package/dist/api/compiler/checker-contextual.js +175 -62
  16. package/dist/api/compiler/checker-declaration-order.js +79 -79
  17. package/dist/api/compiler/checker-declarations.d.ts +1 -0
  18. package/dist/api/compiler/checker-declarations.js +160 -136
  19. package/dist/api/compiler/checker-declared-types.js +67 -65
  20. package/dist/api/compiler/checker-decorators.js +77 -77
  21. package/dist/api/compiler/checker-deprecation.d.ts +8 -3
  22. package/dist/api/compiler/checker-deprecation.js +76 -55
  23. package/dist/api/compiler/checker-destructuring.js +47 -45
  24. package/dist/api/compiler/checker-elaboration.js +24 -24
  25. package/dist/api/compiler/checker-emit-helpers.js +4 -4
  26. package/dist/api/compiler/checker-emit-resolver.d.ts +4 -2
  27. package/dist/api/compiler/checker-emit-resolver.js +25 -13
  28. package/dist/api/compiler/checker-evaluator.js +9 -9
  29. package/dist/api/compiler/checker-expressions.js +258 -212
  30. package/dist/api/compiler/checker-functions.js +113 -107
  31. package/dist/api/compiler/checker-generated-code.d.ts +0 -11
  32. package/dist/api/compiler/checker-generated-code.js +28 -52
  33. package/dist/api/compiler/checker-grammar.d.ts +1 -0
  34. package/dist/api/compiler/checker-grammar.js +469 -438
  35. package/dist/api/compiler/checker-heritage.js +91 -93
  36. package/dist/api/compiler/checker-inference.d.ts +77 -5
  37. package/dist/api/compiler/checker-inference.js +487 -113
  38. package/dist/api/compiler/checker-iteration.d.ts +0 -10
  39. package/dist/api/compiler/checker-iteration.js +35 -52
  40. package/dist/api/compiler/checker-javascript.js +14 -14
  41. package/dist/api/compiler/checker-jsdoc.d.ts +8 -10
  42. package/dist/api/compiler/checker-jsdoc.js +67 -58
  43. package/dist/api/compiler/checker-jsx.js +107 -89
  44. package/dist/api/compiler/checker-members.d.ts +9 -2
  45. package/dist/api/compiler/checker-members.js +210 -74
  46. package/dist/api/compiler/checker-modules.d.ts +15 -6
  47. package/dist/api/compiler/checker-modules.js +469 -309
  48. package/dist/api/compiler/checker-narrowing.js +273 -189
  49. package/dist/api/compiler/checker-object-literals.js +25 -22
  50. package/dist/api/compiler/checker-operators.js +126 -118
  51. package/dist/api/compiler/checker-overloads.js +27 -27
  52. package/dist/api/compiler/checker-property-access.js +59 -55
  53. package/dist/api/compiler/checker-services.d.ts +1 -0
  54. package/dist/api/compiler/checker-services.js +222 -210
  55. package/dist/api/compiler/checker-signatures.js +65 -49
  56. package/dist/api/compiler/checker-source-file.d.ts +5 -0
  57. package/dist/api/compiler/checker-source-file.js +154 -130
  58. package/dist/api/compiler/checker-statements.js +33 -32
  59. package/dist/api/compiler/checker-super.js +50 -50
  60. package/dist/api/compiler/checker-symbol-types.js +109 -93
  61. package/dist/api/compiler/checker-symbols.d.ts +13 -1
  62. package/dist/api/compiler/checker-symbols.js +264 -149
  63. package/dist/api/compiler/checker-type-factory.d.ts +5 -0
  64. package/dist/api/compiler/checker-type-factory.js +190 -46
  65. package/dist/api/compiler/checker-type-nodes.d.ts +1 -0
  66. package/dist/api/compiler/checker-type-nodes.js +179 -141
  67. package/dist/api/compiler/checker-type-operators.d.ts +2 -0
  68. package/dist/api/compiler/checker-type-operators.js +110 -63
  69. package/dist/api/compiler/checker-types.d.ts +80 -3
  70. package/dist/api/compiler/checker-types.js +121 -2
  71. package/dist/api/compiler/checker-unused.js +114 -118
  72. package/dist/api/compiler/checker-utilities.js +11 -11
  73. package/dist/api/compiler/checker.d.ts +97 -31
  74. package/dist/api/compiler/checker.js +149 -35
  75. package/dist/api/compiler/command-line.d.ts +1 -3
  76. package/dist/api/compiler/command-line.js +47 -44
  77. package/dist/api/compiler/compile-program.d.ts +24 -4
  78. package/dist/api/compiler/compile-program.js +53 -26
  79. package/dist/api/compiler/diagnostic-messages.d.ts +1849 -1774
  80. package/dist/api/compiler/diagnostic-messages.js +128 -122
  81. package/dist/api/compiler/diagnostics.js +7 -7
  82. package/dist/api/compiler/emitter.d.ts +7 -1
  83. package/dist/api/compiler/emitter.js +53 -11
  84. package/dist/api/compiler/expr-record.d.ts +11 -0
  85. package/dist/api/compiler/expr-record.js +53 -0
  86. package/dist/api/compiler/file-include.d.ts +2 -1
  87. package/dist/api/compiler/file-include.js +11 -7
  88. package/dist/api/compiler/file-loader.d.ts +10 -0
  89. package/dist/api/compiler/file-loader.js +138 -41
  90. package/dist/api/compiler/identifier-name.d.ts +9 -0
  91. package/dist/api/compiler/identifier-name.js +10 -0
  92. package/dist/api/compiler/instantiation.d.ts +7 -0
  93. package/dist/api/compiler/instantiation.js +101 -49
  94. package/dist/api/compiler/jsdoc.js +27 -25
  95. package/dist/api/compiler/link-tables.d.ts +48 -18
  96. package/dist/api/compiler/link-tables.js +80 -37
  97. package/dist/api/compiler/locales/cs-CZ.d.ts +1 -1
  98. package/dist/api/compiler/locales/cs-CZ.js +1 -1
  99. package/dist/api/compiler/locales/de-DE.d.ts +1 -1
  100. package/dist/api/compiler/locales/de-DE.js +1 -1
  101. package/dist/api/compiler/locales/es-ES.d.ts +1 -1
  102. package/dist/api/compiler/locales/es-ES.js +1 -1
  103. package/dist/api/compiler/locales/fr-FR.d.ts +1 -1
  104. package/dist/api/compiler/locales/fr-FR.js +1 -1
  105. package/dist/api/compiler/locales/it-IT.d.ts +1 -1
  106. package/dist/api/compiler/locales/it-IT.js +1 -1
  107. package/dist/api/compiler/locales/ja-JP.d.ts +1 -1
  108. package/dist/api/compiler/locales/ja-JP.js +1 -1
  109. package/dist/api/compiler/locales/ko-KR.d.ts +1 -1
  110. package/dist/api/compiler/locales/ko-KR.js +1 -1
  111. package/dist/api/compiler/locales/pl-PL.d.ts +1 -1
  112. package/dist/api/compiler/locales/pl-PL.js +1 -1
  113. package/dist/api/compiler/locales/pt-BR.d.ts +1 -1
  114. package/dist/api/compiler/locales/pt-BR.js +1 -1
  115. package/dist/api/compiler/locales/ru-RU.d.ts +1 -1
  116. package/dist/api/compiler/locales/ru-RU.js +1 -1
  117. package/dist/api/compiler/locales/tr-TR.d.ts +1 -1
  118. package/dist/api/compiler/locales/tr-TR.js +1 -1
  119. package/dist/api/compiler/locales/zh-CN.d.ts +1 -1
  120. package/dist/api/compiler/locales/zh-CN.js +1 -1
  121. package/dist/api/compiler/locales/zh-TW.d.ts +1 -1
  122. package/dist/api/compiler/locales/zh-TW.js +1 -1
  123. package/dist/api/compiler/module-resolution-types.js +6 -6
  124. package/dist/api/compiler/module-resolution.d.ts +10 -1
  125. package/dist/api/compiler/module-resolution.js +115 -84
  126. package/dist/api/compiler/module-specifiers.d.ts +15 -0
  127. package/dist/api/compiler/module-specifiers.js +24 -18
  128. package/dist/api/compiler/name-resolver.js +74 -65
  129. package/dist/api/compiler/node-builder-names.d.ts +11 -3
  130. package/dist/api/compiler/node-builder-names.js +210 -90
  131. package/dist/api/compiler/node-builder-pseudo.js +29 -31
  132. package/dist/api/compiler/node-builder-reuse.js +23 -22
  133. package/dist/api/compiler/node-builder.d.ts +18 -1
  134. package/dist/api/compiler/node-builder.js +191 -102
  135. package/dist/api/compiler/option-declarations.d.ts +2 -6
  136. package/dist/api/compiler/option-declarations.js +315 -375
  137. package/dist/api/compiler/options.d.ts +15 -33
  138. package/dist/api/compiler/options.js +21 -54
  139. package/dist/api/compiler/output-paths.d.ts +4 -1
  140. package/dist/api/compiler/output-paths.js +6 -11
  141. package/dist/api/compiler/package-json.d.ts +3 -3
  142. package/dist/api/compiler/package-json.js +11 -10
  143. package/dist/api/compiler/parser.d.ts +42 -20
  144. package/dist/api/compiler/parser.js +318 -224
  145. package/dist/api/compiler/path.d.ts +9 -0
  146. package/dist/api/compiler/path.js +20 -3
  147. package/dist/api/compiler/printer/emit-context.d.ts +3 -1
  148. package/dist/api/compiler/printer/emit-context.js +16 -1
  149. package/dist/api/compiler/printer/factory-base.d.ts +2 -2
  150. package/dist/api/compiler/printer/factory-base.js +7 -3
  151. package/dist/api/compiler/printer/factory.js +6 -3
  152. package/dist/api/compiler/printer/helpers.js +10 -1
  153. package/dist/api/compiler/printer/name-generator.d.ts +1 -1
  154. package/dist/api/compiler/printer/name-generator.js +35 -16
  155. package/dist/api/compiler/printer/printer.d.ts +1 -0
  156. package/dist/api/compiler/printer/printer.js +306 -283
  157. package/dist/api/compiler/printer/utilities.js +149 -147
  158. package/dist/api/compiler/program-checker.d.ts +8 -2
  159. package/dist/api/compiler/program-checker.js +84 -34
  160. package/dist/api/compiler/program-utilities.d.ts +3 -1
  161. package/dist/api/compiler/program-utilities.js +28 -15
  162. package/dist/api/compiler/program.d.ts +2 -0
  163. package/dist/api/compiler/program.js +69 -57
  164. package/dist/api/compiler/pseudo-bigint.d.ts +2 -0
  165. package/dist/api/compiler/pseudo-bigint.js +18 -0
  166. package/dist/api/compiler/regexp-checker.d.ts +1 -1
  167. package/dist/api/compiler/regexp-checker.js +93 -76
  168. package/dist/api/compiler/relations.d.ts +27 -4
  169. package/dist/api/compiler/relations.js +337 -180
  170. package/dist/api/compiler/reparser.js +64 -59
  171. package/dist/api/compiler/scanner.d.ts +27 -2
  172. package/dist/api/compiler/scanner.js +181 -150
  173. package/dist/api/compiler/shared-results.d.ts +696 -0
  174. package/dist/api/compiler/shared-results.js +2905 -0
  175. package/dist/api/compiler/sourcemap.js +2 -2
  176. package/dist/api/compiler/symbol-accessibility.js +87 -74
  177. package/dist/api/compiler/symbol.d.ts +22 -13
  178. package/dist/api/compiler/symbol.js +15 -1
  179. package/dist/api/compiler/syntax-kind.d.ts +198 -197
  180. package/dist/api/compiler/transformers/alias-references.js +247 -139
  181. package/dist/api/compiler/transformers/async-utilities.js +25 -25
  182. package/dist/api/compiler/transformers/async.d.ts +0 -1
  183. package/dist/api/compiler/transformers/async.js +64 -77
  184. package/dist/api/compiler/transformers/class-fields.d.ts +1 -0
  185. package/dist/api/compiler/transformers/class-fields.js +81 -78
  186. package/dist/api/compiler/transformers/commonjs-module.js +18 -15
  187. package/dist/api/compiler/transformers/const-enum-inliner.js +1 -1
  188. package/dist/api/compiler/transformers/declarations-diagnostics.js +247 -244
  189. package/dist/api/compiler/transformers/declarations-pseudo.js +100 -100
  190. package/dist/api/compiler/transformers/declarations-resolver.d.ts +0 -3
  191. package/dist/api/compiler/transformers/declarations-syntactic.d.ts +1 -2
  192. package/dist/api/compiler/transformers/declarations-syntactic.js +134 -156
  193. package/dist/api/compiler/transformers/declarations-tracker.js +18 -18
  194. package/dist/api/compiler/transformers/declarations.d.ts +4 -1
  195. package/dist/api/compiler/transformers/declarations.js +307 -239
  196. package/dist/api/compiler/transformers/decorator-metadata.d.ts +1 -1
  197. package/dist/api/compiler/transformers/decorator-metadata.js +53 -45
  198. package/dist/api/compiler/transformers/decorator-utilities.js +24 -24
  199. package/dist/api/compiler/transformers/destructuring.js +19 -18
  200. package/dist/api/compiler/transformers/emit-resolver.js +1 -1
  201. package/dist/api/compiler/transformers/es-decorators.js +55 -55
  202. package/dist/api/compiler/transformers/external-module-info.js +3 -3
  203. package/dist/api/compiler/transformers/for-await.js +25 -25
  204. package/dist/api/compiler/transformers/import-elision.js +14 -14
  205. package/dist/api/compiler/transformers/jsx.js +12 -12
  206. package/dist/api/compiler/transformers/legacy-decorators.js +17 -17
  207. package/dist/api/compiler/transformers/module.js +8 -8
  208. package/dist/api/compiler/transformers/named-evaluation.js +4 -4
  209. package/dist/api/compiler/transformers/object-rest-spread.js +20 -20
  210. package/dist/api/compiler/transformers/optional-chain.js +10 -10
  211. package/dist/api/compiler/transformers/reference-resolver.d.ts +12 -1
  212. package/dist/api/compiler/transformers/reference-resolver.js +131 -69
  213. package/dist/api/compiler/transformers/runtime-syntax.js +35 -31
  214. package/dist/api/compiler/transformers/subtree-facts.js +47 -47
  215. package/dist/api/compiler/transformers/syntax-facts.js +56 -58
  216. package/dist/api/compiler/transformers/type-eraser.js +73 -66
  217. package/dist/api/compiler/transformers/type-serialization.js +24 -24
  218. package/dist/api/compiler/transformers/using.js +12 -12
  219. package/dist/api/compiler/transformers/utilities.js +77 -77
  220. package/dist/api/compiler/transformers/visitor-base.js +172 -172
  221. package/dist/api/compiler/transformers/visitor-hooks.js +6 -2
  222. package/dist/api/compiler/tsconfig.d.ts +10 -2
  223. package/dist/api/compiler/tsconfig.js +136 -48
  224. package/dist/api/compiler/type-printer.js +40 -3
  225. package/dist/api/compiler/types.d.ts +2 -1
  226. package/dist/api/library/ast.generated.d.ts +42 -39
  227. package/dist/api/library/ast.generated.js +1 -1
  228. package/dist/api/library/compiler-options.generated.d.ts +111 -100
  229. package/dist/api/library/compiler-options.generated.js +1 -1
  230. package/dist/api/library/disk.js +12 -1
  231. package/dist/api/library/enums.generated.d.ts +206 -206
  232. package/dist/api/library/enums.generated.js +206 -206
  233. package/dist/api/library/nodes.js +26 -26
  234. package/package.json +9 -9
  235. package/src/compiler/ast-utilities.ts +99 -7
  236. package/src/compiler/ast.ts +74 -38
  237. package/src/compiler/binder.ts +39 -4
  238. package/src/compiler/cgroup.ts +157 -0
  239. package/src/compiler/character-codes.ts +2 -2
  240. package/src/compiler/checker-calls.ts +76 -8
  241. package/src/compiler/checker-classes.ts +80 -25
  242. package/src/compiler/checker-contextual.ts +110 -1
  243. package/src/compiler/checker-declarations.ts +31 -4
  244. package/src/compiler/checker-declared-types.ts +8 -5
  245. package/src/compiler/checker-decorators.ts +1 -1
  246. package/src/compiler/checker-deprecation.ts +29 -8
  247. package/src/compiler/checker-destructuring.ts +10 -3
  248. package/src/compiler/checker-emit-helpers.ts +1 -0
  249. package/src/compiler/checker-emit-resolver.ts +16 -6
  250. package/src/compiler/checker-expressions.ts +95 -47
  251. package/src/compiler/checker-functions.ts +21 -6
  252. package/src/compiler/checker-generated-code.ts +2 -22
  253. package/src/compiler/checker-grammar.ts +133 -60
  254. package/src/compiler/checker-heritage.ts +22 -21
  255. package/src/compiler/checker-inference.ts +514 -87
  256. package/src/compiler/checker-iteration.ts +18 -31
  257. package/src/compiler/checker-javascript.ts +1 -1
  258. package/src/compiler/checker-jsdoc.ts +50 -27
  259. package/src/compiler/checker-jsx.ts +28 -5
  260. package/src/compiler/checker-members.ts +197 -55
  261. package/src/compiler/checker-modules.ts +332 -65
  262. package/src/compiler/checker-narrowing.ts +98 -19
  263. package/src/compiler/checker-object-literals.ts +3 -0
  264. package/src/compiler/checker-operators.ts +11 -4
  265. package/src/compiler/checker-property-access.ts +7 -2
  266. package/src/compiler/checker-services.ts +39 -12
  267. package/src/compiler/checker-signatures.ts +15 -1
  268. package/src/compiler/checker-source-file.ts +39 -13
  269. package/src/compiler/checker-statements.ts +3 -2
  270. package/src/compiler/checker-symbol-types.ts +29 -6
  271. package/src/compiler/checker-symbols.ts +158 -15
  272. package/src/compiler/checker-type-factory.ts +173 -35
  273. package/src/compiler/checker-type-nodes.ts +46 -3
  274. package/src/compiler/checker-type-operators.ts +83 -26
  275. package/src/compiler/checker-types.ts +147 -4
  276. package/src/compiler/checker-unused.ts +9 -14
  277. package/src/compiler/checker.ts +175 -41
  278. package/src/compiler/command-line.ts +28 -28
  279. package/src/compiler/compile-program.ts +59 -25
  280. package/src/compiler/decoder.ts +15 -5
  281. package/src/compiler/diagnostic-messages.ts +1973 -1892
  282. package/src/compiler/doctor-report.ts +133 -0
  283. package/src/compiler/emitter.ts +57 -8
  284. package/src/compiler/encoder.ts +23 -8
  285. package/src/compiler/expr-record.ts +59 -0
  286. package/src/compiler/file-include.ts +9 -3
  287. package/src/compiler/file-loader.ts +139 -32
  288. package/src/compiler/help.ts +10 -14
  289. package/src/compiler/identifier-name.ts +13 -0
  290. package/src/compiler/incremental.ts +86 -18
  291. package/src/compiler/init.ts +2 -7
  292. package/src/compiler/instantiation.ts +77 -22
  293. package/src/compiler/jsdoc.ts +7 -3
  294. package/src/compiler/link-tables.ts +82 -37
  295. package/src/compiler/locales/cs-CZ.ts +1 -1
  296. package/src/compiler/locales/de-DE.ts +1 -1
  297. package/src/compiler/locales/es-ES.ts +1 -1
  298. package/src/compiler/locales/fr-FR.ts +1 -1
  299. package/src/compiler/locales/it-IT.ts +1 -1
  300. package/src/compiler/locales/ja-JP.ts +1 -1
  301. package/src/compiler/locales/ko-KR.ts +1 -1
  302. package/src/compiler/locales/pl-PL.ts +1 -1
  303. package/src/compiler/locales/pt-BR.ts +1 -1
  304. package/src/compiler/locales/ru-RU.ts +1 -1
  305. package/src/compiler/locales/tr-TR.ts +1 -1
  306. package/src/compiler/locales/zh-CN.ts +1 -1
  307. package/src/compiler/locales/zh-TW.ts +1 -1
  308. package/src/compiler/module-resolution.ts +44 -8
  309. package/src/compiler/module-specifiers.ts +62 -20
  310. package/src/compiler/name-resolver.ts +9 -1
  311. package/src/compiler/node-builder-names.ts +236 -54
  312. package/src/compiler/node-builder-pseudo.ts +4 -7
  313. package/src/compiler/node-builder-reuse.ts +5 -4
  314. package/src/compiler/node-builder.ts +130 -31
  315. package/src/compiler/option-declarations.ts +33 -103
  316. package/src/compiler/options.ts +23 -62
  317. package/src/compiler/output-paths.ts +5 -18
  318. package/src/compiler/package-entrypoints.ts +345 -0
  319. package/src/compiler/package-json.ts +4 -4
  320. package/src/compiler/parallel-check.ts +543 -147
  321. package/src/compiler/parallel-emit.ts +4 -4
  322. package/src/compiler/parser.ts +166 -47
  323. package/src/compiler/path.ts +22 -2
  324. package/src/compiler/printer/emit-context.ts +16 -0
  325. package/src/compiler/printer/factory-base.ts +10 -3
  326. package/src/compiler/printer/factory.ts +7 -3
  327. package/src/compiler/printer/helpers.ts +10 -1
  328. package/src/compiler/printer/name-generator.ts +24 -2
  329. package/src/compiler/printer/printer.ts +39 -16
  330. package/src/compiler/printer/utilities.ts +8 -2
  331. package/src/compiler/program-checker.ts +53 -5
  332. package/src/compiler/program-utilities.ts +23 -10
  333. package/src/compiler/program.ts +13 -1
  334. package/src/compiler/pseudo-bigint.ts +17 -0
  335. package/src/compiler/regexp-checker.ts +63 -30
  336. package/src/compiler/relations.ts +233 -77
  337. package/src/compiler/reparser.ts +14 -5
  338. package/src/compiler/run-config.ts +1383 -0
  339. package/src/compiler/run-record-read.ts +87 -0
  340. package/src/compiler/run-records.ts +575 -0
  341. package/src/compiler/scanner.ts +166 -120
  342. package/src/compiler/shared-results.ts +3144 -0
  343. package/src/compiler/show-config.ts +18 -1
  344. package/src/compiler/sourcemap.ts +2 -2
  345. package/src/compiler/symbol-accessibility.ts +26 -3
  346. package/src/compiler/symbol.ts +31 -14
  347. package/src/compiler/syntax-kind.ts +188 -187
  348. package/src/compiler/thread-entry.ts +22 -3
  349. package/src/compiler/transformers/alias-references.ts +123 -4
  350. package/src/compiler/transformers/async.ts +2 -17
  351. package/src/compiler/transformers/class-fields.ts +13 -12
  352. package/src/compiler/transformers/commonjs-module.ts +11 -7
  353. package/src/compiler/transformers/declarations-diagnostics.ts +5 -3
  354. package/src/compiler/transformers/declarations-pseudo.ts +2 -4
  355. package/src/compiler/transformers/declarations-resolver.ts +0 -3
  356. package/src/compiler/transformers/declarations-syntactic.ts +1 -21
  357. package/src/compiler/transformers/declarations.ts +136 -49
  358. package/src/compiler/transformers/decorator-metadata.ts +9 -1
  359. package/src/compiler/transformers/destructuring.ts +4 -3
  360. package/src/compiler/transformers/external-module-info.ts +1 -1
  361. package/src/compiler/transformers/jsx.ts +2 -1
  362. package/src/compiler/transformers/reference-resolver.ts +83 -19
  363. package/src/compiler/transformers/runtime-syntax.ts +6 -1
  364. package/src/compiler/transformers/syntax-facts.ts +2 -7
  365. package/src/compiler/transformers/type-eraser.ts +10 -1
  366. package/src/compiler/transformers/type-serialization.ts +3 -2
  367. package/src/compiler/transformers/visitor-base.ts +2 -1
  368. package/src/compiler/transformers/visitor-hooks.ts +9 -4
  369. package/src/compiler/tsc-build.ts +67 -6
  370. package/src/compiler/tsc-cli.ts +35 -4
  371. package/src/compiler/tsc-compile.ts +220 -10
  372. package/src/compiler/tsc-watch.ts +97 -47
  373. package/src/compiler/tsconfig.ts +176 -19
  374. package/src/compiler/type-printer.ts +36 -2
  375. package/src/compiler/types.ts +2 -1
  376. package/src/library/ast.generated.ts +57 -41
  377. package/src/library/compiler-options.generated.ts +117 -103
  378. package/src/library/disk.ts +10 -1
  379. package/src/library/enums.generated.ts +196 -196
@@ -106,6 +106,11 @@ export declare function getIntersectionType(c: Checker, types: Type[]): Type;
106
106
  export declare function getIntersectionTypeEx(c: Checker, types: Type[], flags: IntersectionFlags, alias: TypeAlias | undefined): Type;
107
107
  export declare function isPrimitiveOrObjectOrEmptyType(c: Checker, t: Type): boolean;
108
108
  export declare function containsMissingType(c: Checker, t: Type): boolean;
109
+ /**
110
+ * Whether `union` contains `t`, `undefined` where `t` is the missing type and the other way around, or
111
+ * the primitive type of literal `t` (of a unique symbol only with `matchSymbol`).
112
+ */
113
+ export declare function unionContainsTypeOrPrimitive(c: Checker, union: UnionType, t: Type, matchSymbol: boolean): boolean;
109
114
  export declare function getCrossProductUnionSize(types: readonly Type[]): number;
110
115
  export declare function checkCrossProductUnion(c: Checker, types: readonly Type[]): boolean;
111
116
  export declare function getUnionOrIntersectionType(c: Checker, types: Type[], isUnion: boolean, reduction: UnionReduction): Type;
@@ -8,6 +8,7 @@ import { getAliasForTypeNode, getTypeArgumentsOfDeferredReference } from './chec
8
8
  import { popTypeResolution, pushTypeResolution } from './checker-symbols.js';
9
9
  import { isGenericIndexType } from './checker-type-operators.js';
10
10
  import { compareCodePoints } from './diagnostics.js';
11
+ import { utf8Length } from './character-codes.js';
11
12
  import { cachedTypeKey, EvolvingArrayType, IndexInfo, IndexType, IndexedAccessType, InstantiationExpressionType, InterfaceType, IntersectionType, MappedType, ObjectType, ReverseMappedType, SubstitutionType, TemplateLiteralType, TupleElementInfo, TupleType, TypeAlias, TypeReference, UnionType, ArrayTypeMapper, ArrayToSingleTypeMapper, MergedTypeMapper, SimpleTypeMapper, emptyIndexInfos, emptySignatures, emptySymbols, emptyTypes, ReferenceCache, } from './checker-types.js';
12
13
  import { getNamedMembers, getMembersOfSymbol } from './checker-symbols.js';
13
14
  import { getBaseConstraintOfType, getBaseConstraintOrType, getIndexTypeOfType, getPropertiesOfType, getTypeOfPropertyOfType, isArrayLikeType, resolveStructuredTypeMembers, hasResolvedProperties, memberResolutionFlags, membersHolder, } from './checker-members.js';
@@ -19,6 +20,7 @@ import { addOptionality } from './checker-symbol-types.js';
19
20
  import { getSourceFileOfNode } from './binder-utilities.js';
20
21
  import { isPartOfTypeNode } from './transformers/alias-references.js';
21
22
  import { declarationCount, getSymbolId } from './symbol.js';
23
+ import { comparePseudoBigInts } from './pseudo-bigint.js';
22
24
  // ---- Keys
23
25
  export function typeListKey(types) {
24
26
  let key = '';
@@ -402,6 +404,10 @@ export function compareNodes(c, n1, n2) {
402
404
  return 1;
403
405
  if (n2 === undefined)
404
406
  return -1;
407
+ // Siblings are in one file: most compared declarations are members of one declaration.
408
+ const parent = n1.parent;
409
+ if (parent !== undefined && parent === n2.parent)
410
+ return n1.pos - n2.pos;
405
411
  const s1 = sourceFileOf(n1);
406
412
  const s2 = sourceFileOf(n2);
407
413
  if (s1 !== s2)
@@ -470,12 +476,14 @@ function compareTypeNames(c, t1, t2) {
470
476
  const s1 = getTypeNameSymbol(t1);
471
477
  const s2 = getTypeNameSymbol(t2);
472
478
  if (s1 === s2)
473
- return t1.alias !== undefined ? compareTypeLists(c, t1.alias.typeArguments, t2.alias.typeArguments) : 0;
479
+ return compareTypeLists(c, t1.alias?.typeArguments, t2.alias?.typeArguments);
474
480
  if (s1 === undefined)
475
481
  return 1;
476
482
  if (s2 === undefined)
477
483
  return -1;
478
- return compareCodePoints(s1.name, s2.name);
484
+ const r = compareCodePoints(s1.name, s2.name);
485
+ // Distinct declarations with the same name stay together before alias arguments or structure decide.
486
+ return r !== 0 ? r : compareSymbols(c, s1, s2);
479
487
  }
480
488
  function compareTypeLists(c, s1, s2) {
481
489
  // Index the parameters directly: an alias such as `s1 ?? emptyTypes` would hold its own reference.
@@ -734,9 +742,21 @@ export function compareTypes(c, t1, t2) {
734
742
  // Only distinguished by ids.
735
743
  }
736
744
  else if ((flags & 1048576 /* TypeFlags.Object */) !== 0) {
737
- r = compareSymbols(c, t1.symbol, t2.symbol);
738
- if (r !== 0)
739
- return r;
745
+ if ((t1.objectFlags & t2.objectFlags & 16777216 /* ObjectFlags.InstantiationExpressionType */) !== 0) {
746
+ // Instantiation expression types are ordered by their source declaration, since one expression
747
+ // can produce a type for each union constituent, then by the expression, without symbol ids.
748
+ r = compareNodes(c, t1.symbol?.declaration, t2.symbol?.declaration);
749
+ if (r !== 0)
750
+ return r;
751
+ r = compareNodes(c, t1.node, t2.node);
752
+ if (r !== 0)
753
+ return r;
754
+ }
755
+ else {
756
+ r = compareSymbols(c, t1.symbol, t2.symbol);
757
+ if (r !== 0)
758
+ return r;
759
+ }
740
760
  if ((t1.objectFlags & 4 /* ObjectFlags.Reference */) !== 0 && (t2.objectFlags & 4 /* ObjectFlags.Reference */) !== 0) {
741
761
  const r1 = t1;
742
762
  const r2 = t2;
@@ -766,10 +786,34 @@ export function compareTypes(c, t1, t2) {
766
786
  else if ((t2.objectFlags & 4 /* ObjectFlags.Reference */) !== 0)
767
787
  return 1;
768
788
  else {
789
+ // Unnamed non-reference object types are ordered by kind and instantiation data.
769
790
  r = (t1.objectFlags & 50332991 /* ObjectFlags.ObjectTypeKindMask */) - (t2.objectFlags & 50332991 /* ObjectFlags.ObjectTypeKindMask */);
770
791
  if (r !== 0)
771
792
  return r;
772
- r = compareTypeMappers(c, t1.mapper, t2.mapper);
793
+ if ((t1.objectFlags & 1024 /* ObjectFlags.ReverseMapped */) !== 0) {
794
+ const r1 = t1;
795
+ const r2 = t2;
796
+ r = compareTypes(c, r1.source, r2.source);
797
+ if (r !== 0)
798
+ return r;
799
+ r = compareTypes(c, r1.mappedType, r2.mappedType);
800
+ if (r !== 0)
801
+ return r;
802
+ r = compareTypes(c, r1.constraintType, r2.constraintType);
803
+ if (r !== 0)
804
+ return r;
805
+ }
806
+ let m1 = t1.mapper;
807
+ let m2 = t2.mapper;
808
+ if ((t1.objectFlags & 32 /* ObjectFlags.Mapped */) !== 0) {
809
+ // instantiateAnonymousType prepends a mapping to a fresh type parameter; compare the
810
+ // instantiation itself rather than the identity of that parameter.
811
+ if (m1 instanceof CompositeTypeMapper)
812
+ m1 = m1.m2;
813
+ if (m2 instanceof CompositeTypeMapper)
814
+ m2 = m2.m2;
815
+ }
816
+ r = compareTypeMappers(c, m1, m2);
773
817
  if (r !== 0)
774
818
  return r;
775
819
  }
@@ -812,6 +856,11 @@ export function compareTypes(c, t1, t2) {
812
856
  if (r !== 0)
813
857
  return r;
814
858
  }
859
+ else if ((flags & 4096 /* TypeFlags.BigIntLiteral */) !== 0) {
860
+ r = comparePseudoBigInts(t1.stringValue, t2.stringValue);
861
+ if (r !== 0)
862
+ return r;
863
+ }
815
864
  else if ((flags & 8192 /* TypeFlags.BooleanLiteral */) !== 0) {
816
865
  const b1 = t1.stringValue === 'true';
817
866
  const b2 = t2.stringValue === 'true';
@@ -1099,7 +1148,26 @@ export function filterType(c, type, f) {
1099
1148
  return (type.flags & 262144 /* TypeFlags.Never */) !== 0 || f(type) ? type : c.neverType;
1100
1149
  }
1101
1150
  export function removeType(c, type, target) {
1102
- return filterType(c, type, (t) => t !== target);
1151
+ if ((type.flags & 134217728 /* TypeFlags.Union */) === 0)
1152
+ return type === target ? c.neverType : type;
1153
+ const union = type;
1154
+ const origin = union.origin;
1155
+ // An origin that lists the target keeps the rest of its constituents.
1156
+ if (origin !== undefined &&
1157
+ (origin.flags & 134217728 /* TypeFlags.Union */) !== 0 &&
1158
+ containsType(c, origin.types, target))
1159
+ return filterType(c, type, (t) => t !== target);
1160
+ const types = union.types;
1161
+ const index = types.length < linearTypeSearchLimit ? indexOfType(types, target, 0) : binarySearchTypes(c, types, target);
1162
+ if (index < 0)
1163
+ return type;
1164
+ if (types.length === 2)
1165
+ return types[1 - index];
1166
+ const filtered = [];
1167
+ for (let i = 0; i < types.length; i++)
1168
+ if (i !== index)
1169
+ filtered.push(types[i]);
1170
+ return getUnionTypeFromSortedList(c, filtered, union.objectFlags & (32768 /* ObjectFlags.PrimitiveUnion */ | 33554432 /* ObjectFlags.ContainsIntersections */), undefined, undefined);
1103
1171
  }
1104
1172
  export function countTypes(type) {
1105
1173
  if ((type.flags & 134217728 /* TypeFlags.Union */) !== 0)
@@ -1119,37 +1187,78 @@ export function getUnionTypeEx(c, types, unionReduction, alias, origin) {
1119
1187
  return c.neverType;
1120
1188
  if (types.length === 1)
1121
1189
  return types[0];
1122
- // Optimize the common case of unioning a union with some other type, like `undefined`.
1123
- if (types.length === 2 &&
1124
- origin === undefined &&
1125
- ((types[0].flags & 134217728 /* TypeFlags.Union */) !== 0 || (types[1].flags & 134217728 /* TypeFlags.Union */) !== 0)) {
1126
- let id1 = types[0].id;
1127
- let id2 = types[1].id;
1190
+ // Unioning two types is the common case, both a union with some other type, like `undefined`, and
1191
+ // two constituents of a list, and the same pairs recur. The union is a function of the two types,
1192
+ // the reduction and the alias, so the result is cached by the pair. A union that exceeded the
1193
+ // complexity limit was reported at the expression that needed it and comes back as the error
1194
+ // type: caching that would silence the report at the next expression with the same input list, so
1195
+ // an error result is not cached.
1196
+ if (types.length === 2 && origin === undefined) {
1197
+ const t0 = types[0];
1198
+ const t1 = types[1];
1199
+ let id1 = t0.id;
1200
+ let id2 = t1.id;
1128
1201
  if (id1 > id2) {
1129
1202
  const t = id1;
1130
1203
  id1 = id2;
1131
1204
  id2 = t;
1132
1205
  }
1133
- // Without an alias, both ids and the reduction pack into one exact number.
1134
- if (alias === undefined && id2 < UnionPairIdLimit) {
1206
+ // Without an alias or a constrained intersection, both ids and the reduction pack into one
1207
+ // exact number. A constrained intersection's reduction resolves a type variable's constraint
1208
+ // (`addTypeToUnion`), so those pairs take the general path.
1209
+ if (alias === undefined &&
1210
+ id2 < UnionPairIdLimit &&
1211
+ !isConstrainedIntersection(t0) &&
1212
+ !isConstrainedIntersection(t1)) {
1135
1213
  const id = (id1 * UnionPairIdLimit + id2) * 4 + unionReduction;
1136
1214
  let result = c.unionOfUnionTypesById.get(id);
1137
1215
  if (result === undefined) {
1138
1216
  result = getUnionTypeWorker(c, types, unionReduction, alias, undefined);
1139
- c.unionOfUnionTypesById.set(id, result);
1217
+ if (result !== c.errorType)
1218
+ c.unionOfUnionTypesById.set(id, result);
1219
+ }
1220
+ return result;
1221
+ }
1222
+ if ((t0.flags & 134217728 /* TypeFlags.Union */) !== 0 || (t1.flags & 134217728 /* TypeFlags.Union */) !== 0) {
1223
+ const key = id1 + ',' + id2 + ',' + unionReduction + aliasKey(alias);
1224
+ let result = c.unionOfUnionTypes.get(key);
1225
+ if (result === undefined) {
1226
+ result = getUnionTypeWorker(c, types, unionReduction, alias, undefined);
1227
+ if (result !== c.errorType)
1228
+ c.unionOfUnionTypes.set(key, result);
1140
1229
  }
1141
1230
  return result;
1142
1231
  }
1143
- const key = id1 + ',' + id2 + ',' + unionReduction + aliasKey(alias);
1144
- let result = c.unionOfUnionTypes.get(key);
1232
+ }
1233
+ // Longer lists recur too, from nested unions and from constituents mapped in the same order.
1234
+ // Normalizing a list costs a sort of its constituents and the reductions, and the union is a
1235
+ // function of the list as given, the reduction and the alias, so the result is cached by the list.
1236
+ if (origin === undefined) {
1237
+ const hash = typeListHash(types, alias, unionReduction);
1238
+ let result = c.unionTypesByInputList.get(hash, types, alias, unionReduction);
1145
1239
  if (result === undefined) {
1146
1240
  result = getUnionTypeWorker(c, types, unionReduction, alias, undefined);
1147
- c.unionOfUnionTypes.set(key, result);
1241
+ if (result !== c.errorType && !hasConstrainedIntersection(types))
1242
+ c.unionTypesByInputList.set(hash, types.slice(), alias, unionReduction, result);
1148
1243
  }
1149
1244
  return result;
1150
1245
  }
1151
1246
  return getUnionTypeWorker(c, types, unionReduction, alias, origin);
1152
1247
  }
1248
+ /** An intersection that `addTypeToUnion` reduces by resolving a type variable's constraint. */
1249
+ function isConstrainedIntersection(t) {
1250
+ return (t.flags & 268435456 /* TypeFlags.Intersection */) !== 0 && (t.objectFlags & 134217728 /* ObjectFlags.IsConstrainedTypeVariable */) !== 0;
1251
+ }
1252
+ /** Whether `addTypesToUnion` would set `IncludesConstrainedTypeVariable` for `types`. */
1253
+ function hasConstrainedIntersection(types) {
1254
+ for (const t of types) {
1255
+ if (isConstrainedIntersection(t))
1256
+ return true;
1257
+ if ((t.flags & 134217728 /* TypeFlags.Union */) !== 0 && hasConstrainedIntersection(t.types))
1258
+ return true;
1259
+ }
1260
+ return false;
1261
+ }
1153
1262
  class TypeSet {
1154
1263
  types = [];
1155
1264
  includes = 0;
@@ -1534,7 +1643,7 @@ function removeSubtypes(c, types, hasObjectTypes) {
1534
1643
  if (count === 100000) {
1535
1644
  const estimatedCount = Math.trunc(count / (length - i)) * length;
1536
1645
  if (estimatedCount > 1000000) {
1537
- c.error(c.currentNode, 738 /* Diagnostics.Expression_produces_a_union_type_that_is_too_complex_to_represent */);
1646
+ c.error(c.currentNode, 745 /* Diagnostics.Expression_produces_a_union_type_that_is_too_complex_to_represent */);
1538
1647
  return undefined;
1539
1648
  }
1540
1649
  }
@@ -1937,28 +2046,33 @@ function intersectUnionsOfPrimitiveTypes(c, types) {
1937
2046
  return true;
1938
2047
  }
1939
2048
  function eachUnionContains(c, unionTypes, t) {
1940
- for (const type of unionTypes) {
1941
- const u = type;
1942
- if (unionContainsType(c, u, t))
1943
- continue;
1944
- if (t === c.missingType)
1945
- return unionContainsType(c, u, c.undefinedType);
1946
- if (t === c.undefinedType)
1947
- return unionContainsType(c, u, c.missingType);
1948
- let primitive;
1949
- if ((t.flags & 1024 /* TypeFlags.StringLiteral */) !== 0)
1950
- primitive = c.stringType;
1951
- else if ((t.flags & (65536 /* TypeFlags.Enum */ | 2048 /* TypeFlags.NumberLiteral */)) !== 0)
1952
- primitive = c.numberType;
1953
- else if ((t.flags & 4096 /* TypeFlags.BigIntLiteral */) !== 0)
1954
- primitive = c.bigintType;
1955
- else if ((t.flags & 16384 /* TypeFlags.UniqueESSymbol */) !== 0)
1956
- primitive = c.esSymbolType;
1957
- if (primitive === undefined || !unionContainsType(c, u, primitive))
2049
+ for (const type of unionTypes)
2050
+ if (!unionContainsTypeOrPrimitive(c, type, t, true))
1958
2051
  return false;
1959
- }
1960
2052
  return true;
1961
2053
  }
2054
+ /**
2055
+ * Whether `union` contains `t`, `undefined` where `t` is the missing type and the other way around, or
2056
+ * the primitive type of literal `t` (of a unique symbol only with `matchSymbol`).
2057
+ */
2058
+ export function unionContainsTypeOrPrimitive(c, union, t, matchSymbol) {
2059
+ if (unionContainsType(c, union, t))
2060
+ return true;
2061
+ if (t === c.missingType)
2062
+ return unionContainsType(c, union, c.undefinedType);
2063
+ if (t === c.undefinedType)
2064
+ return unionContainsType(c, union, c.missingType);
2065
+ let primitive;
2066
+ if ((t.flags & 1024 /* TypeFlags.StringLiteral */) !== 0)
2067
+ primitive = c.stringType;
2068
+ else if ((t.flags & (65536 /* TypeFlags.Enum */ | 2048 /* TypeFlags.NumberLiteral */)) !== 0)
2069
+ primitive = c.numberType;
2070
+ else if ((t.flags & 4096 /* TypeFlags.BigIntLiteral */) !== 0)
2071
+ primitive = c.bigintType;
2072
+ else if ((t.flags & 16384 /* TypeFlags.UniqueESSymbol */) !== 0 && matchSymbol)
2073
+ primitive = c.esSymbolType;
2074
+ return primitive !== undefined && unionContainsType(c, union, primitive);
2075
+ }
1962
2076
  export function getCrossProductUnionSize(types) {
1963
2077
  let size = 1;
1964
2078
  for (const t of types) {
@@ -1972,7 +2086,7 @@ export function getCrossProductUnionSize(types) {
1972
2086
  export function checkCrossProductUnion(c, types) {
1973
2087
  const size = getCrossProductUnionSize(types);
1974
2088
  if (size >= 100000) {
1975
- c.error(c.currentNode, 738 /* Diagnostics.Expression_produces_a_union_type_that_is_too_complex_to_represent */);
2089
+ c.error(c.currentNode, 745 /* Diagnostics.Expression_produces_a_union_type_that_is_too_complex_to_represent */);
1976
2090
  return false;
1977
2091
  }
1978
2092
  return true;
@@ -2353,8 +2467,8 @@ class TupleNormalizer {
2353
2467
  const spreadTypes = getElementTypes(c, t);
2354
2468
  if (spreadTypes.length + this.types.length >= 10000) {
2355
2469
  c.error(c.currentNode, c.currentNode !== undefined && isPartOfTypeNode(c.currentNode)
2356
- ? 931 /* Diagnostics.Type_produces_a_tuple_type_that_is_too_large_to_represent */
2357
- : 932 /* Diagnostics.Expression_produces_a_tuple_type_that_is_too_large_to_represent */);
2470
+ ? 938 /* Diagnostics.Type_produces_a_tuple_type_that_is_too_large_to_represent */
2471
+ : 939 /* Diagnostics.Expression_produces_a_tuple_type_that_is_too_large_to_represent */);
2358
2472
  return false;
2359
2473
  }
2360
2474
  const spreadInfos = tupleTargetOf(t).elementInfos;
@@ -2438,9 +2552,9 @@ export function getTypeArguments(c, t) {
2438
2552
  }
2439
2553
  const errorNode = node ?? c.currentNode;
2440
2554
  if (target.symbol !== undefined)
2441
- c.error(errorNode, 1095 /* Diagnostics.Type_arguments_for_0_circularly_reference_themselves */, symbolToString(c, target.symbol));
2555
+ c.error(errorNode, 1102 /* Diagnostics.Type_arguments_for_0_circularly_reference_themselves */, symbolToString(c, target.symbol));
2442
2556
  else
2443
- c.error(errorNode, 1096 /* Diagnostics.Tuple_type_arguments_circularly_reference_themselves */);
2557
+ c.error(errorNode, 1103 /* Diagnostics.Tuple_type_arguments_circularly_reference_themselves */);
2444
2558
  }
2445
2559
  return resolved;
2446
2560
  }
@@ -2475,8 +2589,13 @@ export function getTemplateLiteralType(c, texts, types) {
2475
2589
  if (types.includes(c.wildcardType))
2476
2590
  return c.wildcardType;
2477
2591
  const builder = new TemplateBuilder(c, texts[0]);
2478
- if (!builder.addSpans(texts, types))
2592
+ if (!builder.addSpans(texts, types)) {
2593
+ if (builder.tooLarge) {
2594
+ c.error(c.currentNode, 744 /* Diagnostics.Type_instantiation_is_excessively_deep_and_possibly_infinite */);
2595
+ return c.errorType;
2596
+ }
2479
2597
  return c.stringType;
2598
+ }
2480
2599
  if (builder.newTypes.length === 0)
2481
2600
  return getStringLiteralType(c, builder.text);
2482
2601
  builder.newTexts.push(builder.text);
@@ -2497,36 +2616,61 @@ export function getTemplateLiteralType(c, texts, types) {
2497
2616
  }
2498
2617
  return type;
2499
2618
  }
2619
+ /**
2620
+ * Limits on the size of a template literal type that getTemplateLiteralType builds, in UTF-8 bytes of text
2621
+ * and in placeholders. Recursive instantiations such as `Recur<any, `${S}_${S}`>` double the text or the
2622
+ * placeholders on every step and exhaust memory long before the tail recursion limit of conditional types.
2623
+ */
2624
+ const maxTemplateLiteralTypeLength = 50_000_000;
2625
+ const maxTemplateLiteralTypeSpans = 100_000;
2500
2626
  class TemplateBuilder {
2501
2627
  c;
2502
2628
  text;
2503
2629
  newTypes = [];
2504
2630
  newTexts = [];
2631
+ /** UTF-8 bytes of `text`. */
2632
+ textBytes;
2633
+ /** UTF-8 bytes of the texts already moved into `newTexts`. */
2634
+ movedBytes = 0;
2635
+ /** Whether `addSpans` stopped because the result passed a size limit. */
2636
+ tooLarge = false;
2505
2637
  constructor(c, text) {
2506
2638
  this.c = c;
2507
2639
  this.text = text;
2640
+ this.textBytes = utf8Length(text);
2508
2641
  }
2509
2642
  addSpans(texts, types) {
2510
2643
  const c = this.c;
2511
2644
  for (let i = 0; i < types.length; i++) {
2512
2645
  const t = types[i];
2513
2646
  if ((t.flags & (15360 /* TypeFlags.Literal */ | 8 /* TypeFlags.Null */ | 4 /* TypeFlags.Undefined */)) !== 0) {
2514
- this.text += getTemplateStringForType(c, t) + texts[i + 1];
2647
+ const added = getTemplateStringForType(c, t) + texts[i + 1];
2648
+ this.text += added;
2649
+ this.textBytes += utf8Length(added);
2515
2650
  }
2516
2651
  else if ((t.flags & 4194304 /* TypeFlags.TemplateLiteral */) !== 0) {
2517
2652
  const template = t;
2518
2653
  this.text += template.texts[0];
2654
+ this.textBytes += utf8Length(template.texts[0]);
2519
2655
  if (!this.addSpans(template.texts, template.types))
2520
2656
  return false;
2521
2657
  this.text += texts[i + 1];
2658
+ this.textBytes += utf8Length(texts[i + 1]);
2522
2659
  }
2523
2660
  else if (isGenericIndexType(c, t) || isPatternLiteralPlaceholderType(c, t)) {
2524
2661
  this.newTypes.push(t);
2525
2662
  this.newTexts.push(this.text);
2663
+ this.movedBytes += this.textBytes;
2526
2664
  this.text = texts[i + 1];
2665
+ this.textBytes = utf8Length(this.text);
2527
2666
  }
2528
2667
  else
2529
2668
  return false;
2669
+ if (this.movedBytes + this.textBytes > maxTemplateLiteralTypeLength ||
2670
+ this.newTypes.length > maxTemplateLiteralTypeSpans) {
2671
+ this.tooLarge = true;
2672
+ return false;
2673
+ }
2530
2674
  }
2531
2675
  return true;
2532
2676
  }
@@ -6,6 +6,7 @@ export declare function getTypeFromTypeNode(c: Checker, node: Node): Type;
6
6
  export declare function getTypeFromThisTypeNode(c: Checker, node: Node): Type;
7
7
  export declare function getTypeFromIndexedAccessTypeNode(c: Checker, node: IndexedAccessTypeNode): Type;
8
8
  export declare function getESSymbolLikeTypeForNode(c: Checker, node: Node): Type;
9
+ export declare function isAssertionExpression(node: Node | undefined): boolean;
9
10
  export declare function getTypeFromTypeReference(c: Checker, node: Node): Type;
10
11
  export declare function getSymbolFromTypeReference(c: Checker, node: Node): Symbol;
11
12
  export declare function resolveTypeReferenceName(c: Checker, typeReference: Node, meaning: SymbolFlags, ignoreErrors: boolean): Symbol;