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
@@ -347,6 +347,11 @@ export class Diagnostic {
347
347
  readonly reportsDeprecated: boolean;
348
348
  skippedOnNoEmit = false;
349
349
  repopulateInfo: RepopulateInfo | undefined = undefined;
350
+ /**
351
+ * What `formatDiagnostic` gives for this diagnostic in `formattedReports.format`, where the checker
352
+ * thread that found it formatted it (`packResult`); `''` otherwise.
353
+ */
354
+ formatted = '';
350
355
 
351
356
  constructor(
352
357
  file: DiagnosticFile | undefined,
@@ -388,6 +393,7 @@ export class Diagnostic {
388
393
  result.relatedInformation = this.relatedInformation;
389
394
  result.skippedOnNoEmit = this.skippedOnNoEmit;
390
395
  result.repopulateInfo = this.repopulateInfo;
396
+ result.formatted = this.formatted;
391
397
  return result;
392
398
  }
393
399
  }
@@ -510,9 +516,13 @@ function compareRelatedInfo(a: readonly Diagnostic[], b: readonly Diagnostic[]):
510
516
  /** The order tsc reports diagnostics in: by file, position, code, arguments, then elaboration. */
511
517
  export function compareDiagnostics(a: Diagnostic, b: Diagnostic): number {
512
518
  if (a === b) return 0;
513
- let c = compareCodePoints(fileNameOf(a), fileNameOf(b));
514
- if (c !== 0) return c;
515
- c = a.pos - b.pos;
519
+ const c = compareCodePoints(fileNameOf(a), fileNameOf(b));
520
+ return c !== 0 ? c : compareDiagnosticsInFile(a, b);
521
+ }
522
+
523
+ /** `compareDiagnostics` of two diagnostics whose files have the same name. */
524
+ function compareDiagnosticsInFile(a: Diagnostic, b: Diagnostic): number {
525
+ let c = a.pos - b.pos;
516
526
  if (c !== 0) return c;
517
527
  c = a.end - b.end;
518
528
  if (c !== 0) return c;
@@ -527,6 +537,61 @@ export function compareDiagnostics(a: Diagnostic, b: Diagnostic): number {
527
537
  return compareRelatedInfo(a.relatedInformation, b.relatedInformation);
528
538
  }
529
539
 
540
+ /**
541
+ * `diagnostics` in the order of `compareDiagnostics`, equal ones in their order in `diagnostics`. File
542
+ * names are compared once per pair of files rather than once per pair of diagnostics: the distinct
543
+ * files are sorted by name, and each diagnostic sorts by its file's place in that order, then by the
544
+ * rest of `compareDiagnostics`. A program's diagnostics come a file at a time, so the files are found
545
+ * from the runs of one file.
546
+ */
547
+ export function sortDiagnostics(diagnostics: readonly Diagnostic[]): Diagnostic[] {
548
+ const n = diagnostics.length;
549
+ if (n < 2) return diagnostics.slice();
550
+ const fileIndices = new Map<DiagnosticFile | undefined, number>();
551
+ const files: (DiagnosticFile | undefined)[] = [];
552
+ const fileOf: number[] = [];
553
+ let last: DiagnosticFile | undefined = undefined;
554
+ let lastIndex = -1;
555
+ for (let i = 0; i < n; i++) {
556
+ const file = diagnostics[i]!.file;
557
+ if (lastIndex < 0 || file !== last) {
558
+ let k = fileIndices.get(file);
559
+ if (k === undefined) {
560
+ k = files.length;
561
+ fileIndices.set(file, k);
562
+ files.push(file);
563
+ }
564
+ last = file;
565
+ lastIndex = k;
566
+ }
567
+ fileOf.push(lastIndex);
568
+ }
569
+ // Files with the same name share a rank, as they compare equal.
570
+ const nameOf = (k: number): string => {
571
+ const file = files[k];
572
+ return file === undefined ? '' : file.fileName;
573
+ };
574
+ const byName: number[] = [];
575
+ for (let k = 0; k < files.length; k++) byName.push(k);
576
+ byName.sort((x, y) => compareCodePoints(nameOf(x), nameOf(y)));
577
+ const rank: number[] = [];
578
+ for (let k = 0; k < files.length; k++) rank.push(0);
579
+ for (let k = 1; k < byName.length; k++)
580
+ rank[byName[k]!] = rank[byName[k - 1]!]! + (nameOf(byName[k]!) === nameOf(byName[k - 1]!) ? 0 : 1);
581
+ const order: number[] = [];
582
+ for (let i = 0; i < n; i++) order.push(i);
583
+ order.sort((x, y) => {
584
+ const c = rank[fileOf[x]!]! - rank[fileOf[y]!]!;
585
+ if (c !== 0) return c;
586
+ const a = diagnostics[x]!;
587
+ const b = diagnostics[y]!;
588
+ return a === b ? 0 : compareDiagnosticsInFile(a, b);
589
+ });
590
+ const sorted: Diagnostic[] = [];
591
+ for (const i of order) sorted.push(diagnostics[i]!);
592
+ return sorted;
593
+ }
594
+
530
595
  function equalChain(a: readonly Diagnostic[], b: readonly Diagnostic[]): boolean {
531
596
  if (a.length !== b.length) return false;
532
597
  for (let i = 0; i < a.length; i++) {
@@ -625,13 +690,29 @@ function formatDiagnosticIn(diagnostic: Diagnostic, fileName: string, options: D
625
690
  return result + flattenDiagnosticMessage(diagnostic, options.newLine, options.locale) + options.newLine;
626
691
  }
627
692
 
693
+ /**
694
+ * The plain format the main thread reports a compilation's diagnostics in (`DiagnosticReporter.plainFormat`),
695
+ * which its checker threads receive a copy of and format the diagnostics they send back in
696
+ * (`Diagnostic.formatted`). Unset where diagnostics are reported with color and context, or not at all.
697
+ */
698
+ export class FormattedReports {
699
+ format: DiagnosticFormatOptions | undefined = undefined;
700
+ }
701
+
702
+ export const formattedReports = new FormattedReports();
703
+
628
704
  /** `formatDiagnostic` of each diagnostic. */
629
705
  export function formatDiagnostics(diagnostics: readonly Diagnostic[], options: DiagnosticFormatOptions): string {
630
706
  let result = '';
707
+ const formatted = options === formattedReports.format;
631
708
  // Sorted diagnostics come a file at a time: the relative name of the last file is kept.
632
709
  let lastFile: DiagnosticFile | undefined = undefined;
633
710
  let lastName = '';
634
711
  for (const diagnostic of diagnostics) {
712
+ if (formatted && diagnostic.formatted !== '') {
713
+ result += diagnostic.formatted;
714
+ continue;
715
+ }
635
716
  const file = diagnostic.file;
636
717
  if (file !== undefined && file !== lastFile) {
637
718
  lastFile = file;
@@ -1,7 +1,7 @@
1
1
  // Emits JavaScript and declarations for source files: runs the transforms, prints, and writes
2
2
  // the output, source map and `//# sourceMappingURL` comment.
3
3
  import { ScriptKind, type SourceFile } from './ast.js';
4
- import { compareDiagnostics, type Diagnostic } from './diagnostics.js';
4
+ import { compareDiagnostics, equalDiagnostics, type Diagnostic } from './diagnostics.js';
5
5
  import { type CompilerOptions, JsxEmit, NewLineKind, getEmitScriptTarget, getIsolatedModules } from './options.js';
6
6
  import { LanguageVariant } from './types.js';
7
7
  import { type OutputPathsHost, getOutputPathsFor } from './output-paths.js';
@@ -33,7 +33,7 @@ import { RuntimeSyntax } from './transformers/runtime-syntax.js';
33
33
  import { ConstEnumInliner } from './transformers/const-enum-inliner.js';
34
34
  import { addDownlevelTransformers } from './transformers/downlevel.js';
35
35
  import { JsxTransformer } from './transformers/jsx.js';
36
- import { SyntaxFacts } from './transformers/syntax-facts.js';
36
+ import { SubtreeFacts, SyntaxFacts } from './transformers/syntax-facts.js';
37
37
  import { LegacyDecorators } from './transformers/legacy-decorators.js';
38
38
  import { DecoratorMetadata } from './transformers/decorator-metadata.js';
39
39
 
@@ -143,6 +143,12 @@ export const enum EmitOnly {
143
143
  * signature of incremental builds; it is written with its errors and without a map.
144
144
  */
145
145
  ForcedDts,
146
+ /**
147
+ * The declaration file of a file whose JavaScript this build emits in a separate request, such as on another
148
+ * thread. tsgo emits both with one emit context, so the emit flags its JavaScript transforms set on the file's
149
+ * own nodes also apply to its declarations; this replays those transforms first.
150
+ */
151
+ DtsAfterJs,
146
152
  }
147
153
 
148
154
  export function emitFiles(host: EmitHost, files: readonly SourceFile[], emitOnly: EmitOnly = EmitOnly.All): EmitResult {
@@ -157,21 +163,44 @@ export function emitFiles(host: EmitHost, files: readonly SourceFile[], emitOnly
157
163
  const file = files[i];
158
164
  if (!sourceFileMayBeEmitted(file, options) || host.isSourceFileFromExternalLibrary(file)) continue;
159
165
  const paths = getOutputPathsFor(file.fileName, file.scriptKind === ScriptKind.JSON, options, host, forced);
166
+ // As in tsgo, a file's JavaScript and declarations share one emit context: emit flags that JavaScript
167
+ // transforms set on the file's own nodes, such as a decorated parameter's name, also apply to its declarations.
168
+ const context = new EmitContext();
160
169
  if (paths.jsFilePath !== '' && (emitOnly === EmitOnly.All || emitOnly === EmitOnly.Js)) {
161
170
  if (host.isEmitBlocked(paths.jsFilePath)) result.emitSkipped = true;
162
- else emitJSFile(host, file, paths.jsFilePath, paths.sourceMapFilePath, result);
171
+ else emitJSFile(host, context, file, paths.jsFilePath, paths.sourceMapFilePath, result);
163
172
  }
164
173
  if (paths.declarationFilePath !== '' && emitOnly !== EmitOnly.Js) {
165
174
  if (!forced && host.isEmitBlocked(paths.declarationFilePath)) result.emitSkipped = true;
166
- else emitDeclarationFile(host, file, paths.declarationFilePath, paths.declarationMapPath, result, forced);
175
+ else {
176
+ if (emitOnly === EmitOnly.DtsAfterJs && paths.jsFilePath !== '') replayScriptTransforms(host, context, file);
177
+ emitDeclarationFile(host, context, file, paths.declarationFilePath, paths.declarationMapPath, result, forced);
178
+ }
167
179
  }
168
180
  }
169
181
  return result;
170
182
  }
171
183
 
184
+ /**
185
+ * Runs the JavaScript transforms of `file` in `context` without printing, for the emit flags they set on the
186
+ * file's own nodes. Only the decorator transforms set any that declaration emit prints (on decorated parameters'
187
+ * names), so files without decorators are skipped.
188
+ */
189
+ function replayScriptTransforms(host: EmitHost, context: EmitContext, file: SourceFile): void {
190
+ if (!new SyntaxFacts().has(file, SubtreeFacts.ContainsDecorators)) return;
191
+ let transformed = file;
192
+ const transformers = getScriptTransformers(host, context, file);
193
+ for (let i = 0; i < transformers.length; i++) {
194
+ const transformer = transformers[i];
195
+ if (transformer.unsupported !== '') return;
196
+ transformed = transformer.transformSourceFile(transformed);
197
+ }
198
+ }
199
+
172
200
  /** Emits a declaration file; the host's resolver must be a `DeclarationEmitResolver`. */
173
201
  function emitDeclarationFile(
174
202
  host: EmitHost,
203
+ context: EmitContext,
175
204
  file: SourceFile,
176
205
  declarationFilePath: string,
177
206
  declarationMapPath: string,
@@ -184,7 +213,6 @@ function emitDeclarationFile(
184
213
  return false;
185
214
  }
186
215
  const options = host.options;
187
- const context = new EmitContext();
188
216
  const transformer = new DeclarationTransformer(context, host, options, resolver, declarationFilePath);
189
217
  const transformed = transformer.transformSourceFile(file);
190
218
  result.declarationTransformed = true;
@@ -214,11 +242,32 @@ function emitDeclarationFile(
214
242
  emitSourceMaps,
215
243
  false,
216
244
  result,
217
- // Sorted, as tsgo's emitter diagnostics are; the order is part of the file's signature in build info.
218
- diagnostics.length > 1 ? diagnostics.toSorted(compareDiagnostics) : diagnostics,
245
+ emitterDiagnostics(diagnostics),
219
246
  );
220
247
  }
221
248
 
249
+ /**
250
+ * Declaration diagnostics as tsgo's emitter collects them: sorted, without repeats of an equal
251
+ * diagnostic. They are part of the file's signature in build info.
252
+ */
253
+ function emitterDiagnostics(diagnostics: readonly Diagnostic[]): readonly Diagnostic[] {
254
+ if (diagnostics.length < 2) return diagnostics;
255
+ const sorted = diagnostics.toSorted(compareDiagnostics);
256
+ const result: Diagnostic[] = [];
257
+ for (const diagnostic of sorted) {
258
+ // Equal diagnostics compare as 0, so a repeat is among the last ones kept that compare as 0.
259
+ let repeated = false;
260
+ for (let i = result.length - 1; i >= 0 && compareDiagnostics(result[i], diagnostic) === 0; i--) {
261
+ if (equalDiagnostics(result[i], diagnostic)) {
262
+ repeated = true;
263
+ break;
264
+ }
265
+ }
266
+ if (!repeated) result.push(diagnostic);
267
+ }
268
+ return result;
269
+ }
270
+
222
271
  function getScriptTransformers(host: EmitHost, context: EmitContext, file: SourceFile): Transformer[] {
223
272
  const options = host.options;
224
273
  const facts = new TypeScriptFacts();
@@ -248,13 +297,13 @@ function isJsxTransformEnabled(options: CompilerOptions): boolean {
248
297
 
249
298
  function emitJSFile(
250
299
  host: EmitHost,
300
+ context: EmitContext,
251
301
  file: SourceFile,
252
302
  jsFilePath: string,
253
303
  sourceMapFilePath: string,
254
304
  result: EmitResult,
255
305
  ): boolean {
256
306
  const options = host.options;
257
- const context = new EmitContext();
258
307
  let transformed = file;
259
308
  const transformers = getScriptTransformers(host, context, file);
260
309
  for (let i = 0; i < transformers.length; i++) {
@@ -1,7 +1,7 @@
1
- // Encodes a source file in TypeScript 7's binary AST format (protocol version 5), the
1
+ // Encodes a source file in TypeScript 7.1's binary AST format (protocol version 9), the
2
2
  // `getSourceFile` payload of the API.
3
3
  //
4
- // Layout: a 44-byte header, string offsets (UTF-8 start/end pairs), string data (the
4
+ // Layout: a 64-byte header, string offsets (UTF-8 start/end pairs), string data (the
5
5
  // UTF-8 file text, then strings that aren't slices of it), extended node data,
6
6
  // msgpack structured data, and 28-byte node records in visit order. Node positions are
7
7
  // UTF-16 offsets.
@@ -197,10 +197,10 @@ import { SyntaxKind } from './syntax-kind.js';
197
197
  import { hash128 } from './xxh3.js';
198
198
  import { utf8Offsets } from './character-codes.js';
199
199
 
200
- export const protocolVersion = 5;
200
+ export const protocolVersion = 9;
201
201
 
202
202
  const nodeSize = 28;
203
- const headerSize = 44;
203
+ const headerSize = 64;
204
204
  const nodeListKind = 0xffffffff;
205
205
  const noStructuredData = 0xffffffff;
206
206
 
@@ -210,6 +210,11 @@ const dataTypeExtended = 2 << 30;
210
210
 
211
211
  const utf8Encoder = new TextEncoder();
212
212
 
213
+ /** A node list record's last word: 1 when the list ends with a comma. */
214
+ function trailingComma(list: NodeList): number {
215
+ return list.hasTrailingComma() ? 1 : 0;
216
+ }
217
+
213
218
  /** A growable little-endian byte buffer. */
214
219
  class ByteWriter {
215
220
  bytes: Uint8Array;
@@ -1261,7 +1266,8 @@ function childrenPropertyMask(node: Node): number {
1261
1266
  return node instanceof ModuleDeclaration
1262
1267
  ? (hasModifiers((node as ModuleDeclaration).modifiers) ? 1 : 0) |
1263
1268
  ((node as ModuleDeclaration).name !== undefined ? 2 : 0) |
1264
- ((node as ModuleDeclaration).body !== undefined ? 4 : 0)
1269
+ ((node as ModuleDeclaration).attributes !== undefined ? 4 : 0) |
1270
+ ((node as ModuleDeclaration).body !== undefined ? 8 : 0)
1265
1271
  : 0;
1266
1272
  case SyntaxKind.ImportEqualsDeclaration:
1267
1273
  return node instanceof ImportEqualsDeclaration
@@ -1381,6 +1387,7 @@ function commonData(node: Node): number {
1381
1387
  if (!(node instanceof ImportClause)) return 0;
1382
1388
  if ((node as ImportClause).phaseModifier === SyntaxKind.TypeKeyword) return 1 << 24;
1383
1389
  if ((node as ImportClause).phaseModifier === SyntaxKind.DeferKeyword) return 2 << 24;
1390
+ if ((node as ImportClause).phaseModifier === SyntaxKind.SourceKeyword) return 3 << 24;
1384
1391
  return 0;
1385
1392
  case SyntaxKind.ImportSpecifier:
1386
1393
  return node instanceof ImportSpecifier ? bit((node as ImportSpecifier).isTypeOnly) << 24 : 0;
@@ -1577,7 +1584,7 @@ class Encoder extends NodeVisitor {
1577
1584
  this.linkSibling(index);
1578
1585
  const positions = this.positions;
1579
1586
  if (positions === undefined)
1580
- this.nodes.push(nodeListKind, list.pos, list.end, this.parentIndex, list.nodes.length, 0);
1587
+ this.nodes.push(nodeListKind, list.pos, list.end, this.parentIndex, list.nodes.length, trailingComma(list));
1581
1588
  else
1582
1589
  this.nodes.push(
1583
1590
  nodeListKind,
@@ -1585,7 +1592,7 @@ class Encoder extends NodeVisitor {
1585
1592
  positions.of(list.end),
1586
1593
  this.parentIndex,
1587
1594
  list.nodes.length,
1588
- 0,
1595
+ trailingComma(list),
1589
1596
  );
1590
1597
  const saveParent = this.parentIndex;
1591
1598
  this.prevIndex = 0;
@@ -1659,6 +1666,8 @@ class Encoder extends NodeVisitor {
1659
1666
  out.u32(offsetExtended);
1660
1667
  out.u32(offsetStructured);
1661
1668
  out.u32(offsetNodes);
1669
+ // Source file ID and lease ID (u64 each) and binder data offset: 0, none.
1670
+ for (let i = 0; i < 5; i++) out.u32(0);
1662
1671
  out.append(strings.offsets.view());
1663
1672
  out.append(fileText);
1664
1673
  out.append(strings.others.view());
@@ -1787,7 +1796,8 @@ class Encoder extends NodeVisitor {
1787
1796
  );
1788
1797
  out.u32((node as TemplateTail).templateFlags);
1789
1798
  } else if (node instanceof SourceFile) {
1790
- out.u32(strings.addFileText((node as SourceFile).pos, (node as SourceFile).end));
1799
+ const text = strings.addFileText((node as SourceFile).pos, (node as SourceFile).end);
1800
+ out.u32(text);
1791
1801
  out.u32(strings.add((node as SourceFile).fileName, SyntaxKind.Unknown, 0, 0));
1792
1802
  out.u32(strings.add((node as SourceFile).path, SyntaxKind.Unknown, 0, 0));
1793
1803
  out.u32((node as SourceFile).languageVariant);
@@ -1801,6 +1811,11 @@ class Encoder extends NodeVisitor {
1801
1811
  out.u32(noStructuredData);
1802
1812
  out.u32(noStructuredData);
1803
1813
  out.u32(0);
1814
+ // The original text is the text, and the content mapper fields (span map, supplemental
1815
+ // file names, canonical file name, mapper, virtual file name, diagnostic directives) are
1816
+ // empty: tsc-ts maps no file contents.
1817
+ out.u32(text);
1818
+ for (let i = 0; i < 6; i++) out.u32(noStructuredData);
1804
1819
  } else throw new Error(`no extended data for kind ${node.kind}`);
1805
1820
  return offset;
1806
1821
  }
@@ -597,10 +597,16 @@ export class IncludeProcessor {
597
597
  return this.fileIncludeReasons.get(path) ?? [];
598
598
  }
599
599
 
600
- addReason(path: string, reason: FileIncludeReason): void {
600
+ /** Adds an include reason of the file at `path`; returns the file's reasons. */
601
+ addReason(path: string, reason: FileIncludeReason): FileIncludeReason[] {
601
602
  const reasons = this.fileIncludeReasons.get(path);
602
- if (reasons === undefined) this.fileIncludeReasons.set(path, [reason]);
603
- else reasons.push(reason);
603
+ if (reasons === undefined) {
604
+ const added = [reason];
605
+ this.fileIncludeReasons.set(path, added);
606
+ return added;
607
+ }
608
+ reasons.push(reason);
609
+ return reasons;
604
610
  }
605
611
 
606
612
  addProcessingDiagnostic(diagnostic: ProcessingDiagnostic): void {