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
@@ -13,7 +13,11 @@ import { CheckerDeclarationEmitResolver, CheckerEmitResolver } from './checker-e
13
13
  import { getEmitModuleFormatOfFile } from './program-utilities.js';
14
14
  import { DeclarationGlobals, SyntacticDeclarationEmitResolver } from './transformers/declarations-syntactic.js';
15
15
  import { mark } from './timeline.js';
16
- import type { EmitResolver } from './transformers/emit-resolver.js';
16
+ import { DecoratorMetadata } from './transformers/decorator-metadata.js';
17
+ import { SyntaxFacts } from './transformers/syntax-facts.js';
18
+ import type { TypeReferenceSerializationKind } from './transformers/type-serialization.js';
19
+ import { EmitContext } from './printer/emit-context.js';
20
+ import { type EmitResolver, SyntacticEmitResolver } from './transformers/emit-resolver.js';
17
21
  import { ModuleFormatHost } from './transformers/module.js';
18
22
  import { type MergedGlobals, ModuleLookup, ReferenceResolver } from './transformers/reference-resolver.js';
19
23
 
@@ -193,6 +197,100 @@ export class EmitIndexes {
193
197
  }
194
198
  }
195
199
 
200
+ /**
201
+ * The JavaScript emit of a program's files without a checker, for emit threads (parallel-emit.ts).
202
+ * JavaScript emit asks the checker only how decorator metadata serializes a type
203
+ * (`CheckerEmitResolver`): with `kinds`, the answers the main thread's checker gave
204
+ * (`recordMetadataKinds`), else files with decorator metadata are emitted by a `ProgramEmitter`.
205
+ */
206
+ export class JavaScriptEmitter {
207
+ private readonly host: ProgramEmitHost;
208
+ private readonly recorded: RecordedKindsEmitResolver | undefined;
209
+
210
+ constructor(program: Program, kinds: readonly number[] = []) {
211
+ const options = program.options;
212
+ const indexes = program.emitIndexes;
213
+ const references = new ReferenceResolver(
214
+ options,
215
+ program.getSourceFiles(),
216
+ new ProgramModules(program),
217
+ indexes !== undefined ? indexes.globals : undefined,
218
+ );
219
+ this.recorded = kinds.length > 0 ? new RecordedKindsEmitResolver(options, references, kinds) : undefined;
220
+ this.host = new ProgramEmitHost(program, this.recorded ?? new SyntacticEmitResolver(options, references));
221
+ }
222
+
223
+ /**
224
+ * Emits `file`, or returns undefined if its decorator metadata asked for a kind that wasn't recorded: what
225
+ * was written is then not the file's emit, and it must be emitted with the checker.
226
+ */
227
+ emit(file: SourceFile, writer: OutputWriter): EmitResult | undefined {
228
+ const host = this.host;
229
+ const recorded = this.recorded;
230
+ if (recorded !== undefined) recorded.missed = false;
231
+ host.writer = writer;
232
+ const result = emitFiles(host, [file], EmitOnly.Js);
233
+ host.writer = undefined;
234
+ return recorded !== undefined && recorded.missed ? undefined : result;
235
+ }
236
+ }
237
+
238
+ /**
239
+ * The serialization kinds of decorator metadata that the checker of `checked` gives the type references of
240
+ * `files`, in the order JavaScript emit asks for them: the type name's node id, the location's node id (-1 for
241
+ * none) and the kind, for each. Only the decorator metadata transform runs, as the first transform of emit.
242
+ */
243
+ export function recordMetadataKinds(checked: CheckedProgram, files: readonly SourceFile[]): number[] {
244
+ const program = checked.program;
245
+ const options = program.options;
246
+ const indexes = program.emitIndexes;
247
+ const references = new ReferenceResolver(
248
+ options,
249
+ program.getSourceFiles(),
250
+ new ProgramModules(program),
251
+ indexes !== undefined ? indexes.globals : undefined,
252
+ );
253
+ const resolver = new RecordingEmitResolver(options, references, checked.checker);
254
+ for (const file of files)
255
+ new DecoratorMetadata(new EmitContext(), options, resolver, new SyntaxFacts()).transformSourceFile(file);
256
+ return resolver.kinds;
257
+ }
258
+
259
+ /** A `CheckerEmitResolver` that records the serialization kinds it gives (`recordMetadataKinds`). */
260
+ class RecordingEmitResolver extends CheckerEmitResolver {
261
+ readonly kinds: number[] = [];
262
+
263
+ getTypeReferenceSerializationKind(typeName: Node, location: Node | undefined): TypeReferenceSerializationKind {
264
+ const kind = super.getTypeReferenceSerializationKind(typeName, location);
265
+ this.kinds.push(typeName.id, location === undefined ? -1 : location.id, kind);
266
+ return kind;
267
+ }
268
+ }
269
+
270
+ /** Answers serialization kinds from those recorded on the main thread; `missed` once one wasn't. */
271
+ class RecordedKindsEmitResolver extends SyntacticEmitResolver {
272
+ /** The kind and location of each type name, by the type name's node id. */
273
+ private readonly byName = new Map<number, number>();
274
+ missed = false;
275
+
276
+ constructor(
277
+ options: CompilerOptions,
278
+ referenceResolver: ReferenceResolver,
279
+ private readonly kinds: readonly number[],
280
+ ) {
281
+ super(options, referenceResolver);
282
+ for (let i = 0; i < kinds.length; i += 3) if (!this.byName.has(kinds[i]!)) this.byName.set(kinds[i]!, i);
283
+ }
284
+
285
+ getTypeReferenceSerializationKind(typeName: Node, location: Node | undefined): TypeReferenceSerializationKind {
286
+ const at = this.byName.get(typeName.id);
287
+ if (at !== undefined && this.kinds[at + 1] === (location === undefined ? -1 : location.id))
288
+ return this.kinds[at + 2]! as TypeReferenceSerializationKind;
289
+ this.missed = true;
290
+ return super.getTypeReferenceSerializationKind(typeName, location);
291
+ }
292
+ }
293
+
196
294
  /** A checked program and the emit of its files. */
197
295
  export class ProgramEmitter {
198
296
  private host: ProgramEmitHost | undefined = undefined;
@@ -277,6 +375,14 @@ export abstract class CompilerProgram {
277
375
  this.emitter = new ProgramEmitter(checked);
278
376
  }
279
377
 
378
+ /**
379
+ * The time spent in declaration emit while checking, to count as emit time rather than check time, since
380
+ * the last call. Only an incremental program emits while checking, to compute signatures.
381
+ */
382
+ takeNestedEmitTime(): number {
383
+ return 0;
384
+ }
385
+
280
386
  get program(): Program {
281
387
  return this.checked.program;
282
388
  }
@@ -302,6 +408,15 @@ export abstract class CompilerProgram {
302
408
  return this.checked.getGlobalDiagnostics(withCheckerThreads);
303
409
  }
304
410
 
411
+ /**
412
+ * Whether the global diagnostics found by checking are reported after the semantic diagnostics. An
413
+ * incremental program has them in the semantic diagnostics of the files they were found in
414
+ * (`CheckedProgram.globalsInFileDiagnostics`).
415
+ */
416
+ reportsGlobalDiagnosticsOfChecking(): boolean {
417
+ return !this.checked.globalsInFileDiagnostics;
418
+ }
419
+
305
420
  /** Semantic diagnostics of every file. */
306
421
  abstract getSemanticDiagnostics(): Diagnostic[];
307
422
 
@@ -347,32 +462,37 @@ export class PlainProgram extends CompilerProgram {
347
462
 
348
463
  emit(writer: OutputWriter): EmitResult {
349
464
  const options = this.options;
350
- if (options.noEmit !== true) {
351
- const skipped = handleNoEmitOnError(this);
352
- if (skipped !== undefined) return skipped;
353
- }
465
+ // A `noEmit` program emits nothing, and its emit is not skipped (tsgo's `HandleNoEmitOptions`): its
466
+ // declaration errors come with its other diagnostics (`getDiagnosticsOfProgram`).
467
+ if (options.noEmit === true) return new EmitResult();
468
+ const skipped = handleNoEmitOnError(this);
469
+ if (skipped !== undefined) return skipped;
354
470
  const program = this.program;
355
471
  const files = program.getSourceFiles();
356
472
  const parallel = this.checked.emittedInParallel;
357
- // Checker threads emitted the files they checked (parallel-check.ts); the others are emitted here, in order.
473
+ // Checker threads emitted the files they checked (parallel-check.ts), or emit threads their JavaScript
474
+ // (parallel-emit.ts); the rest is emitted here, in order.
358
475
  const result =
359
476
  parallel === undefined
360
477
  ? this.emitter.emit(files, EmitOnly.All, writer)
361
478
  : combineEmitResults(
362
479
  files.map((file, i) => {
363
480
  const emitted = parallel[i];
364
- return emitted !== undefined
365
- ? writeHeldOutputs(emitted, writer)
366
- : this.emitter.emit([file], EmitOnly.All, writer);
481
+ // The declaration thread emitted the declarations of the files it could (parallel-emit.ts).
482
+ const ahead = this.checked.declarationsEmittedAhead;
483
+ // The file's JavaScript is emitted too, here or on an emit thread.
484
+ const declarations = (): EmitResult =>
485
+ ahead?.[i] ?? this.emitter.emit([file], EmitOnly.DtsAfterJs, writer);
486
+ if (emitted === undefined)
487
+ return ahead !== undefined
488
+ ? combineEmitResults([this.emitter.emit([file], EmitOnly.Js, writer), declarations()])
489
+ : this.emitter.emit([file], EmitOnly.All, writer);
490
+ const written = writeHeldOutputs(emitted, writer);
491
+ // Emit threads emit JavaScript only.
492
+ if (!this.checked.javaScriptEmittedOnThreads || !getEmitDeclarations(options)) return written;
493
+ return combineEmitResults([written, declarations()]);
367
494
  }),
368
495
  );
369
- if (options.noEmit === true) {
370
- // Emit is skipped only for files that would have been emitted.
371
- result.emitSkipped = files.some((file) => program.sourceFileMayBeEmitted(file, false));
372
- // Declaration emit still runs for its errors, as in tsgo, also when other errors were found.
373
- if (getEmitDeclarations(options) && options.noEmitOnError !== true)
374
- for (const d of this.getDeclarationDiagnostics()) result.diagnostics.push(d);
375
- }
376
496
  return result;
377
497
  }
378
498
  }
@@ -389,10 +509,15 @@ export function handleNoEmitOnError(program: CompilerProgram): EmitResult | unde
389
509
  }
390
510
 
391
511
  /**
392
- * Config and syntax errors; without syntax errors, program, global and semantic errors too, and
393
- * declaration errors under `noEmit` (or `withDeclarationDiagnostics`).
512
+ * Config and syntax errors; without syntax errors, program, global and semantic errors too, and, when
513
+ * there are none of these, declaration errors under `noEmit` (or `withDeclarationDiagnostics`). With
514
+ * `declarationsLater`, the declaration errors are left to the caller (`declarationDiagnosticsDue`).
394
515
  */
395
- export function getDiagnosticsOfProgram(program: CompilerProgram, withDeclarationDiagnostics: boolean): Diagnostic[] {
516
+ export function getDiagnosticsOfProgram(
517
+ program: CompilerProgram,
518
+ withDeclarationDiagnostics: boolean,
519
+ declarationsLater: boolean = false,
520
+ ): Diagnostic[] {
396
521
  const result: Diagnostic[] = [...program.getConfigFileParsingDiagnostics()];
397
522
  const configCount = result.length;
398
523
  for (const d of program.getSyntacticDiagnostics()) result.push(d);
@@ -407,22 +532,37 @@ export function getDiagnosticsOfProgram(program: CompilerProgram, withDeclaratio
407
532
  if (result.length === configCount) {
408
533
  const checkStart = performance.now();
409
534
  const semantic = program.getSemanticDiagnostics();
410
- program.times.checkTime = performance.now() - checkStart;
535
+ // Declaration emit that computed signatures while checking counts as emit time, as in TypeScript 7.1.
536
+ const nestedEmitTime = program.takeNestedEmitTime();
537
+ program.times.checkTime = Math.max(0, performance.now() - checkStart - nestedEmitTime);
538
+ program.times.emitTime += nestedEmitTime;
411
539
  for (const d of semantic) result.push(d);
412
540
  // Checking may have found more, such as missing global types.
413
- for (const d of program.getGlobalDiagnostics()) result.push(d);
541
+ if (program.reportsGlobalDiagnosticsOfChecking()) for (const d of program.getGlobalDiagnostics()) result.push(d);
414
542
  mark('semantic diagnostics');
415
543
  }
416
- if (
417
- (withDeclarationDiagnostics || options.noEmit === true) &&
418
- getEmitDeclarations(options) &&
419
- result.length === configCount
420
- ) {
544
+ if (!declarationsLater && declarationDiagnosticsDue(program, result, withDeclarationDiagnostics))
421
545
  for (const d of program.getDeclarationDiagnostics()) result.push(d);
422
- }
423
546
  return result;
424
547
  }
425
548
 
549
+ /**
550
+ * Whether `getDiagnosticsOfProgram` adds the declaration errors to `diagnostics`: under `noEmit` (or
551
+ * `withDeclarationDiagnostics`) with declarations, when only config errors were found.
552
+ */
553
+ export function declarationDiagnosticsDue(
554
+ program: CompilerProgram,
555
+ diagnostics: readonly Diagnostic[],
556
+ withDeclarationDiagnostics: boolean,
557
+ ): boolean {
558
+ const options = program.options;
559
+ return (
560
+ (withDeclarationDiagnostics || options.noEmit === true) &&
561
+ getEmitDeclarations(options) &&
562
+ diagnostics.length === program.getConfigFileParsingDiagnostics().length
563
+ );
564
+ }
565
+
426
566
  /** Combines emit results in order. */
427
567
  export function combineEmitResults(results: readonly EmitResult[]): EmitResult {
428
568
  const result = new EmitResult();
@@ -203,7 +203,7 @@ import { protocolVersion } from './encoder.js';
203
203
  import { SyntaxKind } from './syntax-kind.js';
204
204
 
205
205
  const nodeSize = 28;
206
- const headerSize = 44;
206
+ const headerSize = 64;
207
207
  const nodeListKind = 0xffffffff;
208
208
 
209
209
  const fieldKind = 0;
@@ -533,6 +533,13 @@ class Decoder {
533
533
  throw unexpected(node);
534
534
  }
535
535
 
536
+ typeLiteral(bit: number): TypeLiteralNode | undefined {
537
+ const node = this.node(bit);
538
+ if (node === undefined) return undefined;
539
+ if (node instanceof TypeLiteralNode) return node as TypeLiteralNode;
540
+ throw unexpected(node);
541
+ }
542
+
536
543
  importAttributes(bit: number): ImportAttributes | undefined {
537
544
  const node = this.node(bit);
538
545
  if (node === undefined) return undefined;
@@ -596,7 +603,7 @@ class Decoder {
596
603
  createWithChildren(kind: SyntaxKind, common: number): Node {
597
604
  switch (kind) {
598
605
  case SyntaxKind.QualifiedName:
599
- return new QualifiedName(this.required(0), this.requiredIdentifier(1));
606
+ return new QualifiedName(this.required(0), this.required(1));
600
607
  case SyntaxKind.ComputedPropertyName:
601
608
  return new ComputedPropertyName(this.required(0));
602
609
  case SyntaxKind.Decorator:
@@ -1110,7 +1117,8 @@ class Decoder {
1110
1117
  this.modifiers(0),
1111
1118
  (common & 1) !== 0 ? SyntaxKind.NamespaceKeyword : SyntaxKind.ModuleKeyword,
1112
1119
  this.required(1),
1113
- this.node(2),
1120
+ this.typeLiteral(2),
1121
+ this.node(3),
1114
1122
  );
1115
1123
  case SyntaxKind.ImportEqualsDeclaration:
1116
1124
  return new ImportEqualsDeclaration(
@@ -1163,7 +1171,7 @@ class Decoder {
1163
1171
  this.list(3),
1164
1172
  );
1165
1173
  }
1166
- if (kind <= SyntaxKind.DeferKeyword) return new Token(kind);
1174
+ if (kind <= SyntaxKind.LastToken) return new Token(kind);
1167
1175
  throw invalid(`unhandled node kind ${kind} with ${this.children.length} children`);
1168
1176
  }
1169
1177
  }
@@ -1201,6 +1209,7 @@ function typeOperator(index: number): SyntaxKind {
1201
1209
  function importPhase(index: number): SyntaxKind | undefined {
1202
1210
  if (index === 1) return SyntaxKind.TypeKeyword;
1203
1211
  if (index === 2) return SyntaxKind.DeferKeyword;
1212
+ if (index === 3) return SyntaxKind.SourceKeyword;
1204
1213
  return undefined;
1205
1214
  }
1206
1215