tsc-ts 0.0.9 → 0.1.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 (373) hide show
  1. package/README.md +2 -2
  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 +22 -15
  6. package/dist/api/compiler/ast.js +1026 -995
  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 +178 -124
  12. package/dist/api/compiler/checker-classes.d.ts +14 -3
  13. package/dist/api/compiler/checker-classes.js +134 -90
  14. package/dist/api/compiler/checker-contextual.js +64 -61
  15. package/dist/api/compiler/checker-declaration-order.js +79 -79
  16. package/dist/api/compiler/checker-declarations.d.ts +1 -0
  17. package/dist/api/compiler/checker-declarations.js +160 -136
  18. package/dist/api/compiler/checker-declared-types.js +67 -65
  19. package/dist/api/compiler/checker-decorators.js +77 -77
  20. package/dist/api/compiler/checker-deprecation.d.ts +8 -3
  21. package/dist/api/compiler/checker-deprecation.js +76 -55
  22. package/dist/api/compiler/checker-destructuring.js +47 -45
  23. package/dist/api/compiler/checker-elaboration.js +24 -24
  24. package/dist/api/compiler/checker-emit-helpers.js +4 -4
  25. package/dist/api/compiler/checker-emit-resolver.d.ts +4 -2
  26. package/dist/api/compiler/checker-emit-resolver.js +25 -13
  27. package/dist/api/compiler/checker-evaluator.js +9 -9
  28. package/dist/api/compiler/checker-expressions.js +244 -211
  29. package/dist/api/compiler/checker-functions.js +113 -107
  30. package/dist/api/compiler/checker-generated-code.d.ts +0 -11
  31. package/dist/api/compiler/checker-generated-code.js +28 -52
  32. package/dist/api/compiler/checker-grammar.d.ts +1 -0
  33. package/dist/api/compiler/checker-grammar.js +472 -440
  34. package/dist/api/compiler/checker-heritage.js +91 -93
  35. package/dist/api/compiler/checker-inference.d.ts +77 -5
  36. package/dist/api/compiler/checker-inference.js +487 -107
  37. package/dist/api/compiler/checker-iteration.d.ts +0 -10
  38. package/dist/api/compiler/checker-iteration.js +35 -52
  39. package/dist/api/compiler/checker-javascript.js +14 -14
  40. package/dist/api/compiler/checker-jsdoc.d.ts +8 -10
  41. package/dist/api/compiler/checker-jsdoc.js +67 -58
  42. package/dist/api/compiler/checker-jsx.js +105 -88
  43. package/dist/api/compiler/checker-members.d.ts +9 -2
  44. package/dist/api/compiler/checker-members.js +212 -75
  45. package/dist/api/compiler/checker-modules.d.ts +15 -6
  46. package/dist/api/compiler/checker-modules.js +469 -309
  47. package/dist/api/compiler/checker-narrowing.js +273 -189
  48. package/dist/api/compiler/checker-object-literals.js +25 -22
  49. package/dist/api/compiler/checker-operators.js +126 -118
  50. package/dist/api/compiler/checker-overloads.js +27 -27
  51. package/dist/api/compiler/checker-property-access.js +59 -55
  52. package/dist/api/compiler/checker-services.d.ts +1 -0
  53. package/dist/api/compiler/checker-services.js +222 -210
  54. package/dist/api/compiler/checker-signatures.js +65 -49
  55. package/dist/api/compiler/checker-source-file.d.ts +5 -0
  56. package/dist/api/compiler/checker-source-file.js +154 -130
  57. package/dist/api/compiler/checker-statements.js +33 -32
  58. package/dist/api/compiler/checker-super.js +50 -50
  59. package/dist/api/compiler/checker-symbol-types.js +109 -93
  60. package/dist/api/compiler/checker-symbols.d.ts +13 -1
  61. package/dist/api/compiler/checker-symbols.js +264 -149
  62. package/dist/api/compiler/checker-type-factory.d.ts +5 -0
  63. package/dist/api/compiler/checker-type-factory.js +145 -36
  64. package/dist/api/compiler/checker-type-nodes.d.ts +1 -0
  65. package/dist/api/compiler/checker-type-nodes.js +179 -141
  66. package/dist/api/compiler/checker-type-operators.d.ts +2 -0
  67. package/dist/api/compiler/checker-type-operators.js +110 -63
  68. package/dist/api/compiler/checker-types.d.ts +80 -3
  69. package/dist/api/compiler/checker-types.js +121 -2
  70. package/dist/api/compiler/checker-unused.js +114 -118
  71. package/dist/api/compiler/checker-utilities.js +11 -11
  72. package/dist/api/compiler/checker.d.ts +104 -31
  73. package/dist/api/compiler/checker.js +181 -33
  74. package/dist/api/compiler/command-line.d.ts +1 -3
  75. package/dist/api/compiler/command-line.js +47 -44
  76. package/dist/api/compiler/compile-program.d.ts +42 -3
  77. package/dist/api/compiler/compile-program.js +139 -27
  78. package/dist/api/compiler/diagnostic-messages.d.ts +1849 -1774
  79. package/dist/api/compiler/diagnostic-messages.js +128 -122
  80. package/dist/api/compiler/diagnostics.d.ts +22 -0
  81. package/dist/api/compiler/diagnostics.js +93 -11
  82. package/dist/api/compiler/emitter.d.ts +7 -1
  83. package/dist/api/compiler/emitter.js +53 -11
  84. package/dist/api/compiler/file-include.d.ts +2 -1
  85. package/dist/api/compiler/file-include.js +11 -7
  86. package/dist/api/compiler/file-loader.d.ts +21 -1
  87. package/dist/api/compiler/file-loader.js +201 -48
  88. package/dist/api/compiler/instantiation.d.ts +7 -0
  89. package/dist/api/compiler/instantiation.js +101 -49
  90. package/dist/api/compiler/jsdoc.js +23 -23
  91. package/dist/api/compiler/link-tables.d.ts +48 -18
  92. package/dist/api/compiler/link-tables.js +80 -37
  93. package/dist/api/compiler/locales/cs-CZ.d.ts +1 -1
  94. package/dist/api/compiler/locales/cs-CZ.js +1 -1
  95. package/dist/api/compiler/locales/de-DE.d.ts +1 -1
  96. package/dist/api/compiler/locales/de-DE.js +1 -1
  97. package/dist/api/compiler/locales/es-ES.d.ts +1 -1
  98. package/dist/api/compiler/locales/es-ES.js +1 -1
  99. package/dist/api/compiler/locales/fr-FR.d.ts +1 -1
  100. package/dist/api/compiler/locales/fr-FR.js +1 -1
  101. package/dist/api/compiler/locales/it-IT.d.ts +1 -1
  102. package/dist/api/compiler/locales/it-IT.js +1 -1
  103. package/dist/api/compiler/locales/ja-JP.d.ts +1 -1
  104. package/dist/api/compiler/locales/ja-JP.js +1 -1
  105. package/dist/api/compiler/locales/ko-KR.d.ts +1 -1
  106. package/dist/api/compiler/locales/ko-KR.js +1 -1
  107. package/dist/api/compiler/locales/pl-PL.d.ts +1 -1
  108. package/dist/api/compiler/locales/pl-PL.js +1 -1
  109. package/dist/api/compiler/locales/pt-BR.d.ts +1 -1
  110. package/dist/api/compiler/locales/pt-BR.js +1 -1
  111. package/dist/api/compiler/locales/ru-RU.d.ts +1 -1
  112. package/dist/api/compiler/locales/ru-RU.js +1 -1
  113. package/dist/api/compiler/locales/tr-TR.d.ts +1 -1
  114. package/dist/api/compiler/locales/tr-TR.js +1 -1
  115. package/dist/api/compiler/locales/zh-CN.d.ts +1 -1
  116. package/dist/api/compiler/locales/zh-CN.js +1 -1
  117. package/dist/api/compiler/locales/zh-TW.d.ts +1 -1
  118. package/dist/api/compiler/locales/zh-TW.js +1 -1
  119. package/dist/api/compiler/module-resolution-types.js +6 -6
  120. package/dist/api/compiler/module-resolution.d.ts +10 -1
  121. package/dist/api/compiler/module-resolution.js +115 -84
  122. package/dist/api/compiler/module-specifiers.d.ts +15 -0
  123. package/dist/api/compiler/module-specifiers.js +24 -18
  124. package/dist/api/compiler/name-resolver.js +74 -65
  125. package/dist/api/compiler/node-builder-names.d.ts +11 -3
  126. package/dist/api/compiler/node-builder-names.js +210 -90
  127. package/dist/api/compiler/node-builder-pseudo.js +29 -31
  128. package/dist/api/compiler/node-builder-reuse.js +23 -22
  129. package/dist/api/compiler/node-builder.d.ts +18 -1
  130. package/dist/api/compiler/node-builder.js +191 -102
  131. package/dist/api/compiler/option-declarations.d.ts +2 -6
  132. package/dist/api/compiler/option-declarations.js +315 -375
  133. package/dist/api/compiler/options.d.ts +15 -33
  134. package/dist/api/compiler/options.js +21 -54
  135. package/dist/api/compiler/output-paths.d.ts +4 -1
  136. package/dist/api/compiler/output-paths.js +6 -11
  137. package/dist/api/compiler/package-json.d.ts +3 -3
  138. package/dist/api/compiler/package-json.js +11 -10
  139. package/dist/api/compiler/parallel-parse.d.ts +3 -2
  140. package/dist/api/compiler/parallel-parse.js +17 -5
  141. package/dist/api/compiler/parser.d.ts +40 -19
  142. package/dist/api/compiler/parser.js +308 -216
  143. package/dist/api/compiler/path.d.ts +9 -0
  144. package/dist/api/compiler/path.js +20 -3
  145. package/dist/api/compiler/printer/emit-context.d.ts +5 -1
  146. package/dist/api/compiler/printer/emit-context.js +20 -1
  147. package/dist/api/compiler/printer/factory-base.d.ts +2 -2
  148. package/dist/api/compiler/printer/factory-base.js +7 -3
  149. package/dist/api/compiler/printer/factory.js +3 -1
  150. package/dist/api/compiler/printer/helpers.js +10 -1
  151. package/dist/api/compiler/printer/name-generator.d.ts +1 -1
  152. package/dist/api/compiler/printer/name-generator.js +35 -16
  153. package/dist/api/compiler/printer/printer.d.ts +49 -2
  154. package/dist/api/compiler/printer/printer.js +539 -293
  155. package/dist/api/compiler/printer/utilities.js +149 -147
  156. package/dist/api/compiler/program-checker.d.ts +12 -2
  157. package/dist/api/compiler/program-checker.js +88 -34
  158. package/dist/api/compiler/program-utilities.d.ts +3 -1
  159. package/dist/api/compiler/program-utilities.js +28 -15
  160. package/dist/api/compiler/program.d.ts +4 -6
  161. package/dist/api/compiler/program.js +74 -87
  162. package/dist/api/compiler/pseudo-bigint.d.ts +2 -0
  163. package/dist/api/compiler/pseudo-bigint.js +18 -0
  164. package/dist/api/compiler/regexp-checker.d.ts +1 -1
  165. package/dist/api/compiler/regexp-checker.js +93 -76
  166. package/dist/api/compiler/relations.d.ts +27 -4
  167. package/dist/api/compiler/relations.js +347 -180
  168. package/dist/api/compiler/reparser.js +60 -56
  169. package/dist/api/compiler/scanner.d.ts +19 -2
  170. package/dist/api/compiler/scanner.js +123 -108
  171. package/dist/api/compiler/shared-results.d.ts +463 -0
  172. package/dist/api/compiler/shared-results.js +2128 -0
  173. package/dist/api/compiler/sourcemap.js +2 -2
  174. package/dist/api/compiler/symbol-accessibility.js +87 -74
  175. package/dist/api/compiler/symbol.d.ts +23 -14
  176. package/dist/api/compiler/symbol.js +23 -11
  177. package/dist/api/compiler/syntax-kind.d.ts +198 -197
  178. package/dist/api/compiler/transformers/alias-references.js +247 -139
  179. package/dist/api/compiler/transformers/async-utilities.js +25 -25
  180. package/dist/api/compiler/transformers/async.d.ts +0 -1
  181. package/dist/api/compiler/transformers/async.js +64 -77
  182. package/dist/api/compiler/transformers/class-fields.d.ts +1 -0
  183. package/dist/api/compiler/transformers/class-fields.js +81 -78
  184. package/dist/api/compiler/transformers/commonjs-module.js +18 -15
  185. package/dist/api/compiler/transformers/const-enum-inliner.js +1 -1
  186. package/dist/api/compiler/transformers/declarations-diagnostics.js +247 -244
  187. package/dist/api/compiler/transformers/declarations-pseudo.js +100 -100
  188. package/dist/api/compiler/transformers/declarations-resolver.d.ts +0 -3
  189. package/dist/api/compiler/transformers/declarations-syntactic.d.ts +1 -2
  190. package/dist/api/compiler/transformers/declarations-syntactic.js +134 -156
  191. package/dist/api/compiler/transformers/declarations-tracker.js +18 -18
  192. package/dist/api/compiler/transformers/declarations.d.ts +4 -1
  193. package/dist/api/compiler/transformers/declarations.js +305 -238
  194. package/dist/api/compiler/transformers/decorator-metadata.d.ts +1 -1
  195. package/dist/api/compiler/transformers/decorator-metadata.js +53 -45
  196. package/dist/api/compiler/transformers/decorator-utilities.js +24 -24
  197. package/dist/api/compiler/transformers/destructuring.js +19 -18
  198. package/dist/api/compiler/transformers/emit-resolver.js +1 -1
  199. package/dist/api/compiler/transformers/es-decorators.js +55 -55
  200. package/dist/api/compiler/transformers/external-module-info.js +3 -3
  201. package/dist/api/compiler/transformers/for-await.js +25 -25
  202. package/dist/api/compiler/transformers/import-elision.js +14 -14
  203. package/dist/api/compiler/transformers/jsx.js +12 -12
  204. package/dist/api/compiler/transformers/legacy-decorators.js +17 -17
  205. package/dist/api/compiler/transformers/module.js +8 -8
  206. package/dist/api/compiler/transformers/named-evaluation.js +4 -4
  207. package/dist/api/compiler/transformers/object-rest-spread.js +20 -20
  208. package/dist/api/compiler/transformers/optional-chain.js +10 -10
  209. package/dist/api/compiler/transformers/reference-resolver.d.ts +12 -1
  210. package/dist/api/compiler/transformers/reference-resolver.js +131 -69
  211. package/dist/api/compiler/transformers/runtime-syntax.js +35 -31
  212. package/dist/api/compiler/transformers/subtree-facts.js +47 -47
  213. package/dist/api/compiler/transformers/syntax-facts.js +56 -58
  214. package/dist/api/compiler/transformers/type-eraser.js +73 -66
  215. package/dist/api/compiler/transformers/type-serialization.js +24 -24
  216. package/dist/api/compiler/transformers/using.js +12 -12
  217. package/dist/api/compiler/transformers/utilities.js +77 -77
  218. package/dist/api/compiler/transformers/visitor-base.js +172 -172
  219. package/dist/api/compiler/transformers/visitor-hooks.js +6 -2
  220. package/dist/api/compiler/tsconfig.d.ts +10 -2
  221. package/dist/api/compiler/tsconfig.js +136 -48
  222. package/dist/api/compiler/type-printer.js +40 -3
  223. package/dist/api/compiler/types.d.ts +2 -1
  224. package/dist/api/library/ast.generated.d.ts +42 -39
  225. package/dist/api/library/ast.generated.js +1 -1
  226. package/dist/api/library/compiler-options.generated.d.ts +111 -100
  227. package/dist/api/library/compiler-options.generated.js +1 -1
  228. package/dist/api/library/disk.js +12 -1
  229. package/dist/api/library/enums.generated.d.ts +206 -206
  230. package/dist/api/library/enums.generated.js +206 -206
  231. package/dist/api/library/nodes.js +26 -26
  232. package/package.json +9 -9
  233. package/src/compiler/ast-utilities.ts +99 -7
  234. package/src/compiler/ast.ts +58 -26
  235. package/src/compiler/binder.ts +39 -4
  236. package/src/compiler/character-codes.ts +2 -2
  237. package/src/compiler/checker-calls.ts +79 -9
  238. package/src/compiler/checker-classes.ts +78 -24
  239. package/src/compiler/checker-contextual.ts +6 -1
  240. package/src/compiler/checker-declarations.ts +31 -4
  241. package/src/compiler/checker-declared-types.ts +8 -5
  242. package/src/compiler/checker-decorators.ts +1 -1
  243. package/src/compiler/checker-deprecation.ts +29 -8
  244. package/src/compiler/checker-destructuring.ts +10 -3
  245. package/src/compiler/checker-emit-helpers.ts +1 -0
  246. package/src/compiler/checker-emit-resolver.ts +16 -6
  247. package/src/compiler/checker-expressions.ts +79 -46
  248. package/src/compiler/checker-functions.ts +21 -6
  249. package/src/compiler/checker-generated-code.ts +2 -22
  250. package/src/compiler/checker-grammar.ts +136 -62
  251. package/src/compiler/checker-heritage.ts +22 -21
  252. package/src/compiler/checker-inference.ts +514 -82
  253. package/src/compiler/checker-iteration.ts +18 -31
  254. package/src/compiler/checker-javascript.ts +1 -1
  255. package/src/compiler/checker-jsdoc.ts +50 -27
  256. package/src/compiler/checker-jsx.ts +26 -4
  257. package/src/compiler/checker-members.ts +200 -56
  258. package/src/compiler/checker-modules.ts +332 -65
  259. package/src/compiler/checker-narrowing.ts +98 -19
  260. package/src/compiler/checker-object-literals.ts +3 -0
  261. package/src/compiler/checker-operators.ts +11 -4
  262. package/src/compiler/checker-property-access.ts +7 -2
  263. package/src/compiler/checker-services.ts +39 -12
  264. package/src/compiler/checker-signatures.ts +15 -1
  265. package/src/compiler/checker-source-file.ts +39 -13
  266. package/src/compiler/checker-statements.ts +3 -2
  267. package/src/compiler/checker-symbol-types.ts +29 -6
  268. package/src/compiler/checker-symbols.ts +158 -15
  269. package/src/compiler/checker-type-factory.ts +124 -23
  270. package/src/compiler/checker-type-nodes.ts +46 -3
  271. package/src/compiler/checker-type-operators.ts +83 -26
  272. package/src/compiler/checker-types.ts +147 -4
  273. package/src/compiler/checker-unused.ts +9 -14
  274. package/src/compiler/checker.ts +203 -39
  275. package/src/compiler/command-line.ts +28 -28
  276. package/src/compiler/compile-program.ts +167 -27
  277. package/src/compiler/decoder.ts +13 -4
  278. package/src/compiler/diagnostic-messages.ts +1973 -1892
  279. package/src/compiler/diagnostics.ts +84 -3
  280. package/src/compiler/emitter.ts +57 -8
  281. package/src/compiler/encoder.ts +23 -8
  282. package/src/compiler/file-include.ts +9 -3
  283. package/src/compiler/file-loader.ts +197 -38
  284. package/src/compiler/help.ts +10 -14
  285. package/src/compiler/incremental.ts +165 -30
  286. package/src/compiler/init.ts +2 -7
  287. package/src/compiler/instantiation.ts +77 -22
  288. package/src/compiler/jsdoc.ts +3 -1
  289. package/src/compiler/link-tables.ts +82 -37
  290. package/src/compiler/locales/cs-CZ.ts +1 -1
  291. package/src/compiler/locales/de-DE.ts +1 -1
  292. package/src/compiler/locales/es-ES.ts +1 -1
  293. package/src/compiler/locales/fr-FR.ts +1 -1
  294. package/src/compiler/locales/it-IT.ts +1 -1
  295. package/src/compiler/locales/ja-JP.ts +1 -1
  296. package/src/compiler/locales/ko-KR.ts +1 -1
  297. package/src/compiler/locales/pl-PL.ts +1 -1
  298. package/src/compiler/locales/pt-BR.ts +1 -1
  299. package/src/compiler/locales/ru-RU.ts +1 -1
  300. package/src/compiler/locales/tr-TR.ts +1 -1
  301. package/src/compiler/locales/zh-CN.ts +1 -1
  302. package/src/compiler/locales/zh-TW.ts +1 -1
  303. package/src/compiler/module-resolution.ts +44 -8
  304. package/src/compiler/module-specifiers.ts +62 -20
  305. package/src/compiler/name-resolver.ts +9 -1
  306. package/src/compiler/node-builder-names.ts +236 -54
  307. package/src/compiler/node-builder-pseudo.ts +4 -7
  308. package/src/compiler/node-builder-reuse.ts +5 -4
  309. package/src/compiler/node-builder.ts +130 -31
  310. package/src/compiler/option-declarations.ts +33 -103
  311. package/src/compiler/options.ts +23 -62
  312. package/src/compiler/output-paths.ts +5 -18
  313. package/src/compiler/package-entrypoints.ts +345 -0
  314. package/src/compiler/package-json.ts +4 -4
  315. package/src/compiler/parallel-check.ts +326 -52
  316. package/src/compiler/parallel-emit.ts +320 -0
  317. package/src/compiler/parallel-parse.ts +16 -5
  318. package/src/compiler/parse-thread.ts +3 -0
  319. package/src/compiler/parser.ts +156 -39
  320. package/src/compiler/path.ts +22 -2
  321. package/src/compiler/printer/emit-context.ts +21 -0
  322. package/src/compiler/printer/factory-base.ts +10 -3
  323. package/src/compiler/printer/factory.ts +4 -1
  324. package/src/compiler/printer/helpers.ts +10 -1
  325. package/src/compiler/printer/name-generator.ts +24 -2
  326. package/src/compiler/printer/printer.ts +266 -30
  327. package/src/compiler/printer/utilities.ts +8 -2
  328. package/src/compiler/program-checker.ts +57 -5
  329. package/src/compiler/program-utilities.ts +23 -10
  330. package/src/compiler/program.ts +18 -26
  331. package/src/compiler/pseudo-bigint.ts +17 -0
  332. package/src/compiler/regexp-checker.ts +63 -30
  333. package/src/compiler/relations.ts +240 -77
  334. package/src/compiler/reparser.ts +7 -2
  335. package/src/compiler/scanner.ts +109 -79
  336. package/src/compiler/shared-results.ts +2414 -0
  337. package/src/compiler/show-config.ts +18 -1
  338. package/src/compiler/sourcemap.ts +2 -2
  339. package/src/compiler/symbol-accessibility.ts +26 -3
  340. package/src/compiler/symbol.ts +46 -24
  341. package/src/compiler/syntax-kind.ts +188 -187
  342. package/src/compiler/thread-entry.ts +64 -4
  343. package/src/compiler/transformers/alias-references.ts +123 -4
  344. package/src/compiler/transformers/async.ts +2 -17
  345. package/src/compiler/transformers/class-fields.ts +13 -12
  346. package/src/compiler/transformers/commonjs-module.ts +11 -7
  347. package/src/compiler/transformers/declarations-diagnostics.ts +5 -3
  348. package/src/compiler/transformers/declarations-pseudo.ts +2 -4
  349. package/src/compiler/transformers/declarations-resolver.ts +0 -3
  350. package/src/compiler/transformers/declarations-syntactic.ts +1 -21
  351. package/src/compiler/transformers/declarations.ts +134 -48
  352. package/src/compiler/transformers/decorator-metadata.ts +9 -1
  353. package/src/compiler/transformers/destructuring.ts +4 -3
  354. package/src/compiler/transformers/external-module-info.ts +1 -1
  355. package/src/compiler/transformers/jsx.ts +2 -1
  356. package/src/compiler/transformers/reference-resolver.ts +83 -19
  357. package/src/compiler/transformers/runtime-syntax.ts +6 -1
  358. package/src/compiler/transformers/syntax-facts.ts +2 -7
  359. package/src/compiler/transformers/type-eraser.ts +10 -1
  360. package/src/compiler/transformers/type-serialization.ts +3 -2
  361. package/src/compiler/transformers/visitor-base.ts +2 -1
  362. package/src/compiler/transformers/visitor-hooks.ts +9 -4
  363. package/src/compiler/tsc-build.ts +66 -9
  364. package/src/compiler/tsc-cli.ts +7 -0
  365. package/src/compiler/tsc-compile.ts +284 -4
  366. package/src/compiler/tsc-watch.ts +74 -45
  367. package/src/compiler/tsconfig.ts +176 -19
  368. package/src/compiler/type-printer.ts +36 -2
  369. package/src/compiler/types.ts +2 -1
  370. package/src/library/ast.generated.ts +57 -41
  371. package/src/library/compiler-options.generated.ts +117 -103
  372. package/src/library/disk.ts +10 -1
  373. 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';
@@ -989,7 +1038,10 @@ export function insertType(c, types, t) {
989
1038
  const index = binarySearchTypes(c, types, t);
990
1039
  if (index >= 0)
991
1040
  return false;
992
- types.splice(~index, 0, t);
1041
+ if (~index === types.length)
1042
+ types.push(t);
1043
+ else
1044
+ types.splice(~index, 0, t);
993
1045
  return true;
994
1046
  }
995
1047
  // ---- Iterating unions
@@ -1096,7 +1148,26 @@ export function filterType(c, type, f) {
1096
1148
  return (type.flags & 262144 /* TypeFlags.Never */) !== 0 || f(type) ? type : c.neverType;
1097
1149
  }
1098
1150
  export function removeType(c, type, target) {
1099
- 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);
1100
1171
  }
1101
1172
  export function countTypes(type) {
1102
1173
  if ((type.flags & 134217728 /* TypeFlags.Union */) !== 0)
@@ -1198,7 +1269,10 @@ function insertTypeNearLast(c, set, t) {
1198
1269
  else
1199
1270
  high = middle - 1;
1200
1271
  }
1201
- types.splice(low, 0, t);
1272
+ if (low === types.length)
1273
+ types.push(t);
1274
+ else
1275
+ types.splice(low, 0, t);
1202
1276
  set.last = low;
1203
1277
  }
1204
1278
  function getUnionTypeWorker(c, types, unionReduction, alias, origin) {
@@ -1528,7 +1602,7 @@ function removeSubtypes(c, types, hasObjectTypes) {
1528
1602
  if (count === 100000) {
1529
1603
  const estimatedCount = Math.trunc(count / (length - i)) * length;
1530
1604
  if (estimatedCount > 1000000) {
1531
- c.error(c.currentNode, 738 /* Diagnostics.Expression_produces_a_union_type_that_is_too_complex_to_represent */);
1605
+ c.error(c.currentNode, 745 /* Diagnostics.Expression_produces_a_union_type_that_is_too_complex_to_represent */);
1532
1606
  return undefined;
1533
1607
  }
1534
1608
  }
@@ -1931,28 +2005,33 @@ function intersectUnionsOfPrimitiveTypes(c, types) {
1931
2005
  return true;
1932
2006
  }
1933
2007
  function eachUnionContains(c, unionTypes, t) {
1934
- for (const type of unionTypes) {
1935
- const u = type;
1936
- if (unionContainsType(c, u, t))
1937
- continue;
1938
- if (t === c.missingType)
1939
- return unionContainsType(c, u, c.undefinedType);
1940
- if (t === c.undefinedType)
1941
- return unionContainsType(c, u, c.missingType);
1942
- let primitive;
1943
- if ((t.flags & 1024 /* TypeFlags.StringLiteral */) !== 0)
1944
- primitive = c.stringType;
1945
- else if ((t.flags & (65536 /* TypeFlags.Enum */ | 2048 /* TypeFlags.NumberLiteral */)) !== 0)
1946
- primitive = c.numberType;
1947
- else if ((t.flags & 4096 /* TypeFlags.BigIntLiteral */) !== 0)
1948
- primitive = c.bigintType;
1949
- else if ((t.flags & 16384 /* TypeFlags.UniqueESSymbol */) !== 0)
1950
- primitive = c.esSymbolType;
1951
- if (primitive === undefined || !unionContainsType(c, u, primitive))
2008
+ for (const type of unionTypes)
2009
+ if (!unionContainsTypeOrPrimitive(c, type, t, true))
1952
2010
  return false;
1953
- }
1954
2011
  return true;
1955
2012
  }
2013
+ /**
2014
+ * Whether `union` contains `t`, `undefined` where `t` is the missing type and the other way around, or
2015
+ * the primitive type of literal `t` (of a unique symbol only with `matchSymbol`).
2016
+ */
2017
+ export function unionContainsTypeOrPrimitive(c, union, t, matchSymbol) {
2018
+ if (unionContainsType(c, union, t))
2019
+ return true;
2020
+ if (t === c.missingType)
2021
+ return unionContainsType(c, union, c.undefinedType);
2022
+ if (t === c.undefinedType)
2023
+ return unionContainsType(c, union, c.missingType);
2024
+ let primitive;
2025
+ if ((t.flags & 1024 /* TypeFlags.StringLiteral */) !== 0)
2026
+ primitive = c.stringType;
2027
+ else if ((t.flags & (65536 /* TypeFlags.Enum */ | 2048 /* TypeFlags.NumberLiteral */)) !== 0)
2028
+ primitive = c.numberType;
2029
+ else if ((t.flags & 4096 /* TypeFlags.BigIntLiteral */) !== 0)
2030
+ primitive = c.bigintType;
2031
+ else if ((t.flags & 16384 /* TypeFlags.UniqueESSymbol */) !== 0 && matchSymbol)
2032
+ primitive = c.esSymbolType;
2033
+ return primitive !== undefined && unionContainsType(c, union, primitive);
2034
+ }
1956
2035
  export function getCrossProductUnionSize(types) {
1957
2036
  let size = 1;
1958
2037
  for (const t of types) {
@@ -1966,7 +2045,7 @@ export function getCrossProductUnionSize(types) {
1966
2045
  export function checkCrossProductUnion(c, types) {
1967
2046
  const size = getCrossProductUnionSize(types);
1968
2047
  if (size >= 100000) {
1969
- c.error(c.currentNode, 738 /* Diagnostics.Expression_produces_a_union_type_that_is_too_complex_to_represent */);
2048
+ c.error(c.currentNode, 745 /* Diagnostics.Expression_produces_a_union_type_that_is_too_complex_to_represent */);
1970
2049
  return false;
1971
2050
  }
1972
2051
  return true;
@@ -2347,8 +2426,8 @@ class TupleNormalizer {
2347
2426
  const spreadTypes = getElementTypes(c, t);
2348
2427
  if (spreadTypes.length + this.types.length >= 10000) {
2349
2428
  c.error(c.currentNode, c.currentNode !== undefined && isPartOfTypeNode(c.currentNode)
2350
- ? 931 /* Diagnostics.Type_produces_a_tuple_type_that_is_too_large_to_represent */
2351
- : 932 /* Diagnostics.Expression_produces_a_tuple_type_that_is_too_large_to_represent */);
2429
+ ? 938 /* Diagnostics.Type_produces_a_tuple_type_that_is_too_large_to_represent */
2430
+ : 939 /* Diagnostics.Expression_produces_a_tuple_type_that_is_too_large_to_represent */);
2352
2431
  return false;
2353
2432
  }
2354
2433
  const spreadInfos = tupleTargetOf(t).elementInfos;
@@ -2432,9 +2511,9 @@ export function getTypeArguments(c, t) {
2432
2511
  }
2433
2512
  const errorNode = node ?? c.currentNode;
2434
2513
  if (target.symbol !== undefined)
2435
- c.error(errorNode, 1095 /* Diagnostics.Type_arguments_for_0_circularly_reference_themselves */, symbolToString(c, target.symbol));
2514
+ c.error(errorNode, 1102 /* Diagnostics.Type_arguments_for_0_circularly_reference_themselves */, symbolToString(c, target.symbol));
2436
2515
  else
2437
- c.error(errorNode, 1096 /* Diagnostics.Tuple_type_arguments_circularly_reference_themselves */);
2516
+ c.error(errorNode, 1103 /* Diagnostics.Tuple_type_arguments_circularly_reference_themselves */);
2438
2517
  }
2439
2518
  return resolved;
2440
2519
  }
@@ -2469,8 +2548,13 @@ export function getTemplateLiteralType(c, texts, types) {
2469
2548
  if (types.includes(c.wildcardType))
2470
2549
  return c.wildcardType;
2471
2550
  const builder = new TemplateBuilder(c, texts[0]);
2472
- if (!builder.addSpans(texts, types))
2551
+ if (!builder.addSpans(texts, types)) {
2552
+ if (builder.tooLarge) {
2553
+ c.error(c.currentNode, 744 /* Diagnostics.Type_instantiation_is_excessively_deep_and_possibly_infinite */);
2554
+ return c.errorType;
2555
+ }
2473
2556
  return c.stringType;
2557
+ }
2474
2558
  if (builder.newTypes.length === 0)
2475
2559
  return getStringLiteralType(c, builder.text);
2476
2560
  builder.newTexts.push(builder.text);
@@ -2491,36 +2575,61 @@ export function getTemplateLiteralType(c, texts, types) {
2491
2575
  }
2492
2576
  return type;
2493
2577
  }
2578
+ /**
2579
+ * Limits on the size of a template literal type that getTemplateLiteralType builds, in UTF-8 bytes of text
2580
+ * and in placeholders. Recursive instantiations such as `Recur<any, `${S}_${S}`>` double the text or the
2581
+ * placeholders on every step and exhaust memory long before the tail recursion limit of conditional types.
2582
+ */
2583
+ const maxTemplateLiteralTypeLength = 50_000_000;
2584
+ const maxTemplateLiteralTypeSpans = 100_000;
2494
2585
  class TemplateBuilder {
2495
2586
  c;
2496
2587
  text;
2497
2588
  newTypes = [];
2498
2589
  newTexts = [];
2590
+ /** UTF-8 bytes of `text`. */
2591
+ textBytes;
2592
+ /** UTF-8 bytes of the texts already moved into `newTexts`. */
2593
+ movedBytes = 0;
2594
+ /** Whether `addSpans` stopped because the result passed a size limit. */
2595
+ tooLarge = false;
2499
2596
  constructor(c, text) {
2500
2597
  this.c = c;
2501
2598
  this.text = text;
2599
+ this.textBytes = utf8Length(text);
2502
2600
  }
2503
2601
  addSpans(texts, types) {
2504
2602
  const c = this.c;
2505
2603
  for (let i = 0; i < types.length; i++) {
2506
2604
  const t = types[i];
2507
2605
  if ((t.flags & (15360 /* TypeFlags.Literal */ | 8 /* TypeFlags.Null */ | 4 /* TypeFlags.Undefined */)) !== 0) {
2508
- this.text += getTemplateStringForType(c, t) + texts[i + 1];
2606
+ const added = getTemplateStringForType(c, t) + texts[i + 1];
2607
+ this.text += added;
2608
+ this.textBytes += utf8Length(added);
2509
2609
  }
2510
2610
  else if ((t.flags & 4194304 /* TypeFlags.TemplateLiteral */) !== 0) {
2511
2611
  const template = t;
2512
2612
  this.text += template.texts[0];
2613
+ this.textBytes += utf8Length(template.texts[0]);
2513
2614
  if (!this.addSpans(template.texts, template.types))
2514
2615
  return false;
2515
2616
  this.text += texts[i + 1];
2617
+ this.textBytes += utf8Length(texts[i + 1]);
2516
2618
  }
2517
2619
  else if (isGenericIndexType(c, t) || isPatternLiteralPlaceholderType(c, t)) {
2518
2620
  this.newTypes.push(t);
2519
2621
  this.newTexts.push(this.text);
2622
+ this.movedBytes += this.textBytes;
2520
2623
  this.text = texts[i + 1];
2624
+ this.textBytes = utf8Length(this.text);
2521
2625
  }
2522
2626
  else
2523
2627
  return false;
2628
+ if (this.movedBytes + this.textBytes > maxTemplateLiteralTypeLength ||
2629
+ this.newTypes.length > maxTemplateLiteralTypeSpans) {
2630
+ this.tooLarge = true;
2631
+ return false;
2632
+ }
2524
2633
  }
2525
2634
  return true;
2526
2635
  }
@@ -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;