tsc-ts 0.0.10 → 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 (367) hide show
  1. package/README.md +1 -1
  2. package/bin/tsc-ts.js +70 -1
  3. package/dist/api/compiler/ast-utilities.d.ts +19 -1
  4. package/dist/api/compiler/ast-utilities.js +180 -95
  5. package/dist/api/compiler/ast.d.ts +20 -15
  6. package/dist/api/compiler/ast.js +1023 -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 +173 -123
  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 +469 -438
  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 -113
  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 +210 -74
  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 +137 -34
  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 +93 -31
  73. package/dist/api/compiler/checker.js +143 -35
  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 +19 -4
  77. package/dist/api/compiler/compile-program.js +45 -26
  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.js +7 -7
  81. package/dist/api/compiler/emitter.d.ts +7 -1
  82. package/dist/api/compiler/emitter.js +53 -11
  83. package/dist/api/compiler/file-include.d.ts +2 -1
  84. package/dist/api/compiler/file-include.js +11 -7
  85. package/dist/api/compiler/file-loader.d.ts +10 -0
  86. package/dist/api/compiler/file-loader.js +138 -41
  87. package/dist/api/compiler/instantiation.d.ts +7 -0
  88. package/dist/api/compiler/instantiation.js +101 -49
  89. package/dist/api/compiler/jsdoc.js +23 -23
  90. package/dist/api/compiler/link-tables.d.ts +48 -18
  91. package/dist/api/compiler/link-tables.js +80 -37
  92. package/dist/api/compiler/locales/cs-CZ.d.ts +1 -1
  93. package/dist/api/compiler/locales/cs-CZ.js +1 -1
  94. package/dist/api/compiler/locales/de-DE.d.ts +1 -1
  95. package/dist/api/compiler/locales/de-DE.js +1 -1
  96. package/dist/api/compiler/locales/es-ES.d.ts +1 -1
  97. package/dist/api/compiler/locales/es-ES.js +1 -1
  98. package/dist/api/compiler/locales/fr-FR.d.ts +1 -1
  99. package/dist/api/compiler/locales/fr-FR.js +1 -1
  100. package/dist/api/compiler/locales/it-IT.d.ts +1 -1
  101. package/dist/api/compiler/locales/it-IT.js +1 -1
  102. package/dist/api/compiler/locales/ja-JP.d.ts +1 -1
  103. package/dist/api/compiler/locales/ja-JP.js +1 -1
  104. package/dist/api/compiler/locales/ko-KR.d.ts +1 -1
  105. package/dist/api/compiler/locales/ko-KR.js +1 -1
  106. package/dist/api/compiler/locales/pl-PL.d.ts +1 -1
  107. package/dist/api/compiler/locales/pl-PL.js +1 -1
  108. package/dist/api/compiler/locales/pt-BR.d.ts +1 -1
  109. package/dist/api/compiler/locales/pt-BR.js +1 -1
  110. package/dist/api/compiler/locales/ru-RU.d.ts +1 -1
  111. package/dist/api/compiler/locales/ru-RU.js +1 -1
  112. package/dist/api/compiler/locales/tr-TR.d.ts +1 -1
  113. package/dist/api/compiler/locales/tr-TR.js +1 -1
  114. package/dist/api/compiler/locales/zh-CN.d.ts +1 -1
  115. package/dist/api/compiler/locales/zh-CN.js +1 -1
  116. package/dist/api/compiler/locales/zh-TW.d.ts +1 -1
  117. package/dist/api/compiler/locales/zh-TW.js +1 -1
  118. package/dist/api/compiler/module-resolution-types.js +6 -6
  119. package/dist/api/compiler/module-resolution.d.ts +10 -1
  120. package/dist/api/compiler/module-resolution.js +115 -84
  121. package/dist/api/compiler/module-specifiers.d.ts +15 -0
  122. package/dist/api/compiler/module-specifiers.js +24 -18
  123. package/dist/api/compiler/name-resolver.js +74 -65
  124. package/dist/api/compiler/node-builder-names.d.ts +11 -3
  125. package/dist/api/compiler/node-builder-names.js +210 -90
  126. package/dist/api/compiler/node-builder-pseudo.js +29 -31
  127. package/dist/api/compiler/node-builder-reuse.js +23 -22
  128. package/dist/api/compiler/node-builder.d.ts +18 -1
  129. package/dist/api/compiler/node-builder.js +191 -102
  130. package/dist/api/compiler/option-declarations.d.ts +2 -6
  131. package/dist/api/compiler/option-declarations.js +315 -375
  132. package/dist/api/compiler/options.d.ts +15 -33
  133. package/dist/api/compiler/options.js +21 -54
  134. package/dist/api/compiler/output-paths.d.ts +4 -1
  135. package/dist/api/compiler/output-paths.js +6 -11
  136. package/dist/api/compiler/package-json.d.ts +3 -3
  137. package/dist/api/compiler/package-json.js +11 -10
  138. package/dist/api/compiler/parser.d.ts +40 -19
  139. package/dist/api/compiler/parser.js +308 -216
  140. package/dist/api/compiler/path.d.ts +9 -0
  141. package/dist/api/compiler/path.js +20 -3
  142. package/dist/api/compiler/printer/emit-context.d.ts +3 -1
  143. package/dist/api/compiler/printer/emit-context.js +16 -1
  144. package/dist/api/compiler/printer/factory-base.d.ts +2 -2
  145. package/dist/api/compiler/printer/factory-base.js +7 -3
  146. package/dist/api/compiler/printer/factory.js +3 -1
  147. package/dist/api/compiler/printer/helpers.js +10 -1
  148. package/dist/api/compiler/printer/name-generator.d.ts +1 -1
  149. package/dist/api/compiler/printer/name-generator.js +35 -16
  150. package/dist/api/compiler/printer/printer.d.ts +1 -0
  151. package/dist/api/compiler/printer/printer.js +303 -281
  152. package/dist/api/compiler/printer/utilities.js +149 -147
  153. package/dist/api/compiler/program-checker.d.ts +8 -2
  154. package/dist/api/compiler/program-checker.js +84 -34
  155. package/dist/api/compiler/program-utilities.d.ts +3 -1
  156. package/dist/api/compiler/program-utilities.js +28 -15
  157. package/dist/api/compiler/program.d.ts +2 -0
  158. package/dist/api/compiler/program.js +69 -57
  159. package/dist/api/compiler/pseudo-bigint.d.ts +2 -0
  160. package/dist/api/compiler/pseudo-bigint.js +18 -0
  161. package/dist/api/compiler/regexp-checker.d.ts +1 -1
  162. package/dist/api/compiler/regexp-checker.js +93 -76
  163. package/dist/api/compiler/relations.d.ts +27 -4
  164. package/dist/api/compiler/relations.js +337 -180
  165. package/dist/api/compiler/reparser.js +60 -56
  166. package/dist/api/compiler/scanner.d.ts +19 -2
  167. package/dist/api/compiler/scanner.js +123 -108
  168. package/dist/api/compiler/shared-results.d.ts +463 -0
  169. package/dist/api/compiler/shared-results.js +2128 -0
  170. package/dist/api/compiler/sourcemap.js +2 -2
  171. package/dist/api/compiler/symbol-accessibility.js +87 -74
  172. package/dist/api/compiler/symbol.d.ts +22 -13
  173. package/dist/api/compiler/symbol.js +15 -1
  174. package/dist/api/compiler/syntax-kind.d.ts +198 -197
  175. package/dist/api/compiler/transformers/alias-references.js +247 -139
  176. package/dist/api/compiler/transformers/async-utilities.js +25 -25
  177. package/dist/api/compiler/transformers/async.d.ts +0 -1
  178. package/dist/api/compiler/transformers/async.js +64 -77
  179. package/dist/api/compiler/transformers/class-fields.d.ts +1 -0
  180. package/dist/api/compiler/transformers/class-fields.js +81 -78
  181. package/dist/api/compiler/transformers/commonjs-module.js +18 -15
  182. package/dist/api/compiler/transformers/const-enum-inliner.js +1 -1
  183. package/dist/api/compiler/transformers/declarations-diagnostics.js +247 -244
  184. package/dist/api/compiler/transformers/declarations-pseudo.js +100 -100
  185. package/dist/api/compiler/transformers/declarations-resolver.d.ts +0 -3
  186. package/dist/api/compiler/transformers/declarations-syntactic.d.ts +1 -2
  187. package/dist/api/compiler/transformers/declarations-syntactic.js +134 -156
  188. package/dist/api/compiler/transformers/declarations-tracker.js +18 -18
  189. package/dist/api/compiler/transformers/declarations.d.ts +4 -1
  190. package/dist/api/compiler/transformers/declarations.js +305 -238
  191. package/dist/api/compiler/transformers/decorator-metadata.d.ts +1 -1
  192. package/dist/api/compiler/transformers/decorator-metadata.js +53 -45
  193. package/dist/api/compiler/transformers/decorator-utilities.js +24 -24
  194. package/dist/api/compiler/transformers/destructuring.js +19 -18
  195. package/dist/api/compiler/transformers/emit-resolver.js +1 -1
  196. package/dist/api/compiler/transformers/es-decorators.js +55 -55
  197. package/dist/api/compiler/transformers/external-module-info.js +3 -3
  198. package/dist/api/compiler/transformers/for-await.js +25 -25
  199. package/dist/api/compiler/transformers/import-elision.js +14 -14
  200. package/dist/api/compiler/transformers/jsx.js +12 -12
  201. package/dist/api/compiler/transformers/legacy-decorators.js +17 -17
  202. package/dist/api/compiler/transformers/module.js +8 -8
  203. package/dist/api/compiler/transformers/named-evaluation.js +4 -4
  204. package/dist/api/compiler/transformers/object-rest-spread.js +20 -20
  205. package/dist/api/compiler/transformers/optional-chain.js +10 -10
  206. package/dist/api/compiler/transformers/reference-resolver.d.ts +12 -1
  207. package/dist/api/compiler/transformers/reference-resolver.js +131 -69
  208. package/dist/api/compiler/transformers/runtime-syntax.js +35 -31
  209. package/dist/api/compiler/transformers/subtree-facts.js +47 -47
  210. package/dist/api/compiler/transformers/syntax-facts.js +56 -58
  211. package/dist/api/compiler/transformers/type-eraser.js +73 -66
  212. package/dist/api/compiler/transformers/type-serialization.js +24 -24
  213. package/dist/api/compiler/transformers/using.js +12 -12
  214. package/dist/api/compiler/transformers/utilities.js +77 -77
  215. package/dist/api/compiler/transformers/visitor-base.js +172 -172
  216. package/dist/api/compiler/transformers/visitor-hooks.js +6 -2
  217. package/dist/api/compiler/tsconfig.d.ts +10 -2
  218. package/dist/api/compiler/tsconfig.js +136 -48
  219. package/dist/api/compiler/type-printer.js +40 -3
  220. package/dist/api/compiler/types.d.ts +2 -1
  221. package/dist/api/library/ast.generated.d.ts +42 -39
  222. package/dist/api/library/ast.generated.js +1 -1
  223. package/dist/api/library/compiler-options.generated.d.ts +111 -100
  224. package/dist/api/library/compiler-options.generated.js +1 -1
  225. package/dist/api/library/disk.js +12 -1
  226. package/dist/api/library/enums.generated.d.ts +206 -206
  227. package/dist/api/library/enums.generated.js +206 -206
  228. package/dist/api/library/nodes.js +26 -26
  229. package/package.json +9 -9
  230. package/src/compiler/ast-utilities.ts +99 -7
  231. package/src/compiler/ast.ts +55 -26
  232. package/src/compiler/binder.ts +39 -4
  233. package/src/compiler/character-codes.ts +2 -2
  234. package/src/compiler/checker-calls.ts +76 -8
  235. package/src/compiler/checker-classes.ts +78 -24
  236. package/src/compiler/checker-contextual.ts +6 -1
  237. package/src/compiler/checker-declarations.ts +31 -4
  238. package/src/compiler/checker-declared-types.ts +8 -5
  239. package/src/compiler/checker-decorators.ts +1 -1
  240. package/src/compiler/checker-deprecation.ts +29 -8
  241. package/src/compiler/checker-destructuring.ts +10 -3
  242. package/src/compiler/checker-emit-helpers.ts +1 -0
  243. package/src/compiler/checker-emit-resolver.ts +16 -6
  244. package/src/compiler/checker-expressions.ts +79 -46
  245. package/src/compiler/checker-functions.ts +21 -6
  246. package/src/compiler/checker-generated-code.ts +2 -22
  247. package/src/compiler/checker-grammar.ts +133 -60
  248. package/src/compiler/checker-heritage.ts +22 -21
  249. package/src/compiler/checker-inference.ts +514 -87
  250. package/src/compiler/checker-iteration.ts +18 -31
  251. package/src/compiler/checker-javascript.ts +1 -1
  252. package/src/compiler/checker-jsdoc.ts +50 -27
  253. package/src/compiler/checker-jsx.ts +26 -4
  254. package/src/compiler/checker-members.ts +197 -55
  255. package/src/compiler/checker-modules.ts +332 -65
  256. package/src/compiler/checker-narrowing.ts +98 -19
  257. package/src/compiler/checker-object-literals.ts +3 -0
  258. package/src/compiler/checker-operators.ts +11 -4
  259. package/src/compiler/checker-property-access.ts +7 -2
  260. package/src/compiler/checker-services.ts +39 -12
  261. package/src/compiler/checker-signatures.ts +15 -1
  262. package/src/compiler/checker-source-file.ts +39 -13
  263. package/src/compiler/checker-statements.ts +3 -2
  264. package/src/compiler/checker-symbol-types.ts +29 -6
  265. package/src/compiler/checker-symbols.ts +158 -15
  266. package/src/compiler/checker-type-factory.ts +120 -21
  267. package/src/compiler/checker-type-nodes.ts +46 -3
  268. package/src/compiler/checker-type-operators.ts +83 -26
  269. package/src/compiler/checker-types.ts +147 -4
  270. package/src/compiler/checker-unused.ts +9 -14
  271. package/src/compiler/checker.ts +168 -41
  272. package/src/compiler/command-line.ts +28 -28
  273. package/src/compiler/compile-program.ts +51 -25
  274. package/src/compiler/decoder.ts +13 -4
  275. package/src/compiler/diagnostic-messages.ts +1973 -1892
  276. package/src/compiler/emitter.ts +57 -8
  277. package/src/compiler/encoder.ts +23 -8
  278. package/src/compiler/file-include.ts +9 -3
  279. package/src/compiler/file-loader.ts +139 -32
  280. package/src/compiler/help.ts +10 -14
  281. package/src/compiler/incremental.ts +86 -18
  282. package/src/compiler/init.ts +2 -7
  283. package/src/compiler/instantiation.ts +77 -22
  284. package/src/compiler/jsdoc.ts +3 -1
  285. package/src/compiler/link-tables.ts +82 -37
  286. package/src/compiler/locales/cs-CZ.ts +1 -1
  287. package/src/compiler/locales/de-DE.ts +1 -1
  288. package/src/compiler/locales/es-ES.ts +1 -1
  289. package/src/compiler/locales/fr-FR.ts +1 -1
  290. package/src/compiler/locales/it-IT.ts +1 -1
  291. package/src/compiler/locales/ja-JP.ts +1 -1
  292. package/src/compiler/locales/ko-KR.ts +1 -1
  293. package/src/compiler/locales/pl-PL.ts +1 -1
  294. package/src/compiler/locales/pt-BR.ts +1 -1
  295. package/src/compiler/locales/ru-RU.ts +1 -1
  296. package/src/compiler/locales/tr-TR.ts +1 -1
  297. package/src/compiler/locales/zh-CN.ts +1 -1
  298. package/src/compiler/locales/zh-TW.ts +1 -1
  299. package/src/compiler/module-resolution.ts +44 -8
  300. package/src/compiler/module-specifiers.ts +62 -20
  301. package/src/compiler/name-resolver.ts +9 -1
  302. package/src/compiler/node-builder-names.ts +236 -54
  303. package/src/compiler/node-builder-pseudo.ts +4 -7
  304. package/src/compiler/node-builder-reuse.ts +5 -4
  305. package/src/compiler/node-builder.ts +130 -31
  306. package/src/compiler/option-declarations.ts +33 -103
  307. package/src/compiler/options.ts +23 -62
  308. package/src/compiler/output-paths.ts +5 -18
  309. package/src/compiler/package-entrypoints.ts +345 -0
  310. package/src/compiler/package-json.ts +4 -4
  311. package/src/compiler/parallel-check.ts +197 -8
  312. package/src/compiler/parallel-emit.ts +1 -1
  313. package/src/compiler/parser.ts +156 -39
  314. package/src/compiler/path.ts +22 -2
  315. package/src/compiler/printer/emit-context.ts +16 -0
  316. package/src/compiler/printer/factory-base.ts +10 -3
  317. package/src/compiler/printer/factory.ts +4 -1
  318. package/src/compiler/printer/helpers.ts +10 -1
  319. package/src/compiler/printer/name-generator.ts +24 -2
  320. package/src/compiler/printer/printer.ts +35 -14
  321. package/src/compiler/printer/utilities.ts +8 -2
  322. package/src/compiler/program-checker.ts +53 -5
  323. package/src/compiler/program-utilities.ts +23 -10
  324. package/src/compiler/program.ts +13 -1
  325. package/src/compiler/pseudo-bigint.ts +17 -0
  326. package/src/compiler/regexp-checker.ts +63 -30
  327. package/src/compiler/relations.ts +233 -77
  328. package/src/compiler/reparser.ts +7 -2
  329. package/src/compiler/scanner.ts +109 -79
  330. package/src/compiler/shared-results.ts +2414 -0
  331. package/src/compiler/show-config.ts +18 -1
  332. package/src/compiler/sourcemap.ts +2 -2
  333. package/src/compiler/symbol-accessibility.ts +26 -3
  334. package/src/compiler/symbol.ts +31 -14
  335. package/src/compiler/syntax-kind.ts +188 -187
  336. package/src/compiler/thread-entry.ts +19 -2
  337. package/src/compiler/transformers/alias-references.ts +123 -4
  338. package/src/compiler/transformers/async.ts +2 -17
  339. package/src/compiler/transformers/class-fields.ts +13 -12
  340. package/src/compiler/transformers/commonjs-module.ts +11 -7
  341. package/src/compiler/transformers/declarations-diagnostics.ts +5 -3
  342. package/src/compiler/transformers/declarations-pseudo.ts +2 -4
  343. package/src/compiler/transformers/declarations-resolver.ts +0 -3
  344. package/src/compiler/transformers/declarations-syntactic.ts +1 -21
  345. package/src/compiler/transformers/declarations.ts +134 -48
  346. package/src/compiler/transformers/decorator-metadata.ts +9 -1
  347. package/src/compiler/transformers/destructuring.ts +4 -3
  348. package/src/compiler/transformers/external-module-info.ts +1 -1
  349. package/src/compiler/transformers/jsx.ts +2 -1
  350. package/src/compiler/transformers/reference-resolver.ts +83 -19
  351. package/src/compiler/transformers/runtime-syntax.ts +6 -1
  352. package/src/compiler/transformers/syntax-facts.ts +2 -7
  353. package/src/compiler/transformers/type-eraser.ts +10 -1
  354. package/src/compiler/transformers/type-serialization.ts +3 -2
  355. package/src/compiler/transformers/visitor-base.ts +2 -1
  356. package/src/compiler/transformers/visitor-hooks.ts +9 -4
  357. package/src/compiler/tsc-build.ts +3 -0
  358. package/src/compiler/tsc-cli.ts +2 -0
  359. package/src/compiler/tsc-compile.ts +7 -2
  360. package/src/compiler/tsc-watch.ts +74 -45
  361. package/src/compiler/tsconfig.ts +176 -19
  362. package/src/compiler/type-printer.ts +36 -2
  363. package/src/compiler/types.ts +2 -1
  364. package/src/library/ast.generated.ts +57 -41
  365. package/src/library/compiler-options.generated.ts +117 -103
  366. package/src/library/disk.ts +10 -1
  367. package/src/library/enums.generated.ts +196 -196
@@ -52,6 +52,17 @@ import { lastSymbolIdValue } from './symbol.js';
52
52
  import { shareMergedGlobals } from './checker-symbols.js';
53
53
  import { readFileSync } from 'node:fs';
54
54
  import { availableParallelism, totalmem } from 'node:os';
55
+ import {
56
+ forbiddenWords,
57
+ isForbidden,
58
+ maxSharingCheckers,
59
+ numberLogSize,
60
+ recordTableSize,
61
+ resultTableSize,
62
+ shareThreads,
63
+ stringLogSize,
64
+ type ThreadSharingData,
65
+ } from './shared-results.js';
55
66
 
56
67
  /** With TSC_TS_CHECKERS_TRACE: the process's resident and peak resident set in MB (Linux), else 0. */
57
68
  export function residentMB(): number[] {
@@ -73,7 +84,8 @@ export function residentMB(): number[] {
73
84
  * the main thread emits the program (`checkersEmit`). `emitKinds`, by file index, is what the emit of
74
85
  * each file includes (an `EmitOnly`, or -1 for none) where not every output of every file is emitted
75
86
  * (an incremental program's rebuild); `undefined` for all of them. `units` are the statement ranges of
76
- * declaration files the order has positions for (`CheckPlan.units`).
87
+ * declaration files the order has positions for (`CheckPlan.units`). `globalsInFileDiagnostics` is the main
88
+ * thread's `CheckedProgram.globalsInFileDiagnostics`.
77
89
  */
78
90
  export type CheckerSpawn = (
79
91
  program: Program | undefined,
@@ -87,6 +99,8 @@ export type CheckerSpawn = (
87
99
  emitKinds: number[] | undefined,
88
100
  checking: boolean,
89
101
  units: number[],
102
+ globalsInFileDiagnostics: boolean,
103
+ sharing: ThreadSharingData | undefined,
90
104
  ) => Worker;
91
105
 
92
106
  export class ParallelCheck {
@@ -1549,6 +1563,137 @@ export function traceSingleChecker(checked: CheckedProgram): void {
1549
1563
  );
1550
1564
  }
1551
1565
 
1566
+ /** The file a position of the order checks: a file index, or for a statement range, its file's. */
1567
+ function fileOfPosition(order: readonly number[], units: readonly number[], k: number): number {
1568
+ const i = order[k]!;
1569
+ return i >= 0 ? i : units[3 * (-1 - i)]!;
1570
+ }
1571
+
1572
+ /**
1573
+ * Hands position `k` of the order on to another checker (TSC_TS_SHARE). The handed-on positions are a list in
1574
+ * `handoff`: a lock, their number, the number of checkers that may still hand positions on, then the positions.
1575
+ */
1576
+ function handOff(handoff: Int32Array, k: number): void {
1577
+ while (Atomics.compareExchange(handoff, 0, 0, 1) !== 0) {
1578
+ // Another checker hands a position on or takes one.
1579
+ }
1580
+ const n = handoff[1]!;
1581
+ handoff[3 + n] = k;
1582
+ Atomics.store(handoff, 1, n + 1);
1583
+ Atomics.store(handoff, 0, 0);
1584
+ // Checkers with nothing else to check wait for handed-on positions.
1585
+ Atomics.notify(handoff, 1);
1586
+ }
1587
+
1588
+ /**
1589
+ * Once checker `index` has no more positions of its own: a handed-on position it may check, waiting while other
1590
+ * checkers may still hand some on; -1 when none is left for it.
1591
+ */
1592
+ function waitForHandedOff(
1593
+ handoff: Int32Array,
1594
+ forbidden: Int32Array,
1595
+ count: number,
1596
+ order: readonly number[],
1597
+ units: readonly number[],
1598
+ index: number,
1599
+ ): number {
1600
+ Atomics.sub(handoff, 2, 1);
1601
+ const start = performance.now();
1602
+ for (;;) {
1603
+ const n = Atomics.load(handoff, 1);
1604
+ const k = takeHandedOff(handoff, forbidden, count, order, units, index);
1605
+ if (k >= 0) {
1606
+ // Checking it, this checker may hand positions on again.
1607
+ Atomics.add(handoff, 2, 1);
1608
+ return k;
1609
+ }
1610
+ // The main thread checks what is handed on later, as it does the files of a thread that failed.
1611
+ if (Atomics.load(handoff, 2) === 0 || performance.now() - start > 2000) return -1;
1612
+ Atomics.wait(handoff, 1, n, 1);
1613
+ }
1614
+ }
1615
+
1616
+ /**
1617
+ * A handed-on position checker `index` of `count` may check, removed from the handed-on positions; -1 if there is
1618
+ * none.
1619
+ */
1620
+ function takeHandedOff(
1621
+ handoff: Int32Array,
1622
+ forbidden: Int32Array,
1623
+ count: number,
1624
+ order: readonly number[],
1625
+ units: readonly number[],
1626
+ index: number,
1627
+ ): number {
1628
+ if (Atomics.load(handoff, 1) === 0) return -1;
1629
+ while (Atomics.compareExchange(handoff, 0, 0, 1) !== 0) {
1630
+ // Another checker hands a position on or takes one.
1631
+ }
1632
+ const n = handoff[1]!;
1633
+ let found = -1;
1634
+ for (let j = 0; j < n; j++) {
1635
+ const k = handoff[3 + j]!;
1636
+ if (!isForbidden(forbidden, count, fileOfPosition(order, units, k), index)) {
1637
+ found = k;
1638
+ handoff[3 + j] = handoff[3 + n - 1]!;
1639
+ Atomics.store(handoff, 1, n - 1);
1640
+ break;
1641
+ }
1642
+ }
1643
+ Atomics.store(handoff, 0, 0);
1644
+ return found;
1645
+ }
1646
+
1647
+ /** TSC_TS_SHARE: the sharing data of each of `count` checker threads. */
1648
+ function threadSharingOf(
1649
+ count: number,
1650
+ order: readonly number[],
1651
+ units: readonly number[],
1652
+ files: number,
1653
+ ): ThreadSharingData[] {
1654
+ const takers = new SharedArrayBuffer(4 * files);
1655
+ const forbidden = new SharedArrayBuffer(4 * files * forbiddenWords(count));
1656
+ const handoff = new SharedArrayBuffer(4 * (3 + order.length));
1657
+ new Int32Array(handoff)[2] = count;
1658
+ const taken = new Int32Array(takers);
1659
+ taken.fill(-2);
1660
+ for (let k = 0; k < order.length; k++) {
1661
+ const i = order[k]!;
1662
+ if (i >= 0) {
1663
+ if (taken[i] === -2) taken[i] = 0;
1664
+ } else taken[units[3 * (-1 - i)]!] = -1;
1665
+ }
1666
+ const typeTable = new SharedArrayBuffer(8 * resultTableSize);
1667
+ const returnTable = new SharedArrayBuffer(8 * resultTableSize);
1668
+ const numberLogs: SharedArrayBuffer[] = [];
1669
+ const recordTables: SharedArrayBuffer[] = [];
1670
+ const stringLogs: SharedArrayBuffer[] = [];
1671
+ for (let i = 0; i < count; i++) {
1672
+ numberLogs.push(new SharedArrayBuffer(4 * numberLogSize));
1673
+ recordTables.push(new SharedArrayBuffer(8 * recordTableSize));
1674
+ stringLogs.push(new SharedArrayBuffer(2 * stringLogSize));
1675
+ }
1676
+ const used = new SharedArrayBuffer(8 * count);
1677
+ const data: ThreadSharingData[] = [];
1678
+ for (let i = 0; i < count; i++)
1679
+ data.push({
1680
+ index: i,
1681
+ count,
1682
+ takers,
1683
+ forbidden,
1684
+ handoff,
1685
+ typeTable,
1686
+ returnTable,
1687
+ nodeIds: lastNodeIdValue(),
1688
+ symbolIds: lastSymbolIdValue(),
1689
+ numberLogs,
1690
+ recordTables,
1691
+ stringLogs,
1692
+ used,
1693
+ });
1694
+ return data;
1695
+ }
1696
+
1552
1697
  /**
1553
1698
  * Checks files from the shared queue until it is empty; the main thread and checker threads alike.
1554
1699
  * A checker thread (`onMainThread` false) also sends back its global diagnostics. At `limit` files
@@ -1570,8 +1715,14 @@ export function checkFromQueue(
1570
1715
  emitKinds: readonly number[] | undefined = undefined,
1571
1716
  checking: boolean = true,
1572
1717
  units: readonly number[] = [],
1718
+ sharing: ThreadSharingData | undefined = undefined,
1573
1719
  ): CheckerResult {
1574
1720
  const start = performance.now();
1721
+ // TSC_TS_SHARE: each file's taker, which other checkers then take the results of its declarations from.
1722
+ const takers = sharing === undefined ? undefined : new Int32Array(sharing.takers);
1723
+ const forbidden = sharing === undefined ? undefined : new Int32Array(sharing.forbidden);
1724
+ const handoff = sharing === undefined ? undefined : new Int32Array(sharing.handoff);
1725
+ const sharingCount = sharing === undefined ? 0 : sharing.count;
1575
1726
  const readyAt = Date.now();
1576
1727
  const verbose = process.env.TSC_TS_CHECKERS_TRACE === '3';
1577
1728
  mark('checking');
@@ -1613,16 +1764,29 @@ export function checkFromQueue(
1613
1764
  if (limit > 0 && done.length >= limit) {
1614
1765
  more = true;
1615
1766
  left = reservedBy(index).splice(0);
1767
+ // The thread that continues doesn't share results, so it hands nothing on.
1768
+ if (handoff !== undefined) Atomics.sub(handoff, 2, 1);
1616
1769
  break;
1617
1770
  }
1618
1771
  // Except on checker 0, read the process's memory every 20 ms at most.
1619
1772
  if (retirement > 0 && performance.now() - memoryReadAt >= 20) {
1620
1773
  memoryReadAt = performance.now();
1621
- if (retires(counter, index, retirement)) break;
1774
+ if (retires(counter, index, retirement)) {
1775
+ if (handoff !== undefined) Atomics.sub(handoff, 2, 1);
1776
+ break;
1777
+ }
1622
1778
  }
1623
- const k = takePosition(counter, order.length, index, plan);
1779
+ let k = handoff !== undefined ? takeHandedOff(handoff, forbidden!, sharingCount, order, units, index) : -1;
1780
+ if (k < 0) k = takePosition(counter, order.length, index, plan);
1781
+ if (k < 0 && handoff !== undefined) k = waitForHandedOff(handoff, forbidden!, sharingCount, order, units, index);
1624
1782
  if (k < 0) break;
1625
1783
  const i = order[k]!;
1784
+ // A file this checker took results for before anyone took it goes to another checker.
1785
+ if (forbidden !== undefined && i >= 0 && isForbidden(forbidden, sharingCount, i, index)) {
1786
+ handOff(handoff!, k);
1787
+ continue;
1788
+ }
1789
+ if (takers !== undefined && i >= 0) Atomics.store(takers, i, index + 1);
1626
1790
  if (i < 0) {
1627
1791
  // A statement range of a declaration file, which has nothing to emit.
1628
1792
  const u = -1 - i;
@@ -1698,8 +1862,9 @@ export function checkFromQueue(
1698
1862
  }
1699
1863
  }
1700
1864
  mark(`checked ${done.length} files, ${unitsDone.length} ranges`);
1701
- // The main thread reports its own global diagnostics (CheckedProgram.getGlobalDiagnostics).
1702
- const globals = onMainThread ? [] : checked.getGlobalDiagnostics().slice();
1865
+ // On the main thread, those from before checking are the program's own (`ownGlobalDiagnostics`), and
1866
+ // CheckedProgram.getGlobalDiagnostics deduplicates them with these.
1867
+ const globals = (onMainThread ? checked.checker.getGlobalDiagnostics() : checked.getGlobalDiagnostics()).slice();
1703
1868
  let stats: number[] = [];
1704
1869
  if (process.env.TSC_TS_CHECKERS_TRACE !== undefined) {
1705
1870
  const cpu = process.threadCpuUsage();
@@ -1952,9 +2117,15 @@ export function startParallelCheck(
1952
2117
  }
1953
2118
  if (checking) {
1954
2119
  joinRanges(checked, units, perUnit, perFile);
1955
- // A thread that failed may have taken files it never checked: check them here.
2120
+ // A thread that failed may have taken files it never checked, and with TSC_TS_SHARE every checker left may
2121
+ // have taken results for declarations of a file handed on: check them here.
2122
+ let left = 0;
1956
2123
  for (const i of order)
1957
- if (i >= 0 && perFile[i] === undefined) perFile[i] = checked.unfilteredDiagnosticsOfFile(files[i]!);
2124
+ if (i >= 0 && perFile[i] === undefined) {
2125
+ perFile[i] = checked.unfilteredDiagnosticsOfFile(files[i]!);
2126
+ left++;
2127
+ }
2128
+ if (trace && left > 0) process.stderr.write(`checkers: the main thread checked ${left} files\n`);
1958
2129
  checked.checkedInParallel = perFile;
1959
2130
  }
1960
2131
  mark('all checked');
@@ -2017,6 +2188,17 @@ export function startParallelCheck(
2017
2188
  if (remaining === 0 && ownDone) finish();
2018
2189
  };
2019
2190
  const diagnosticFiles = new Map<string, DiagnosticFile>();
2191
+ // TSC_TS_SHARE: checker threads share results (shared-results.ts).
2192
+ const sharing =
2193
+ shareThreads && shared && !mainChecks && count > 1 && count <= maxSharingCheckers
2194
+ ? threadSharingOf(count, order, units, files.length)
2195
+ : undefined;
2196
+ const sharingStarted: boolean[] = [];
2197
+ for (let i = 0; i < count; i++) sharingStarted.push(false);
2198
+ const startSharingOf = (i: number): ThreadSharingData => {
2199
+ sharingStarted[i] = true;
2200
+ return sharing![i]!;
2201
+ };
2020
2202
  const spawn = (i: number, reserved: number[]): void => {
2021
2203
  const worker = parallelCheck.spawn!(
2022
2204
  shared ? program : undefined,
@@ -2030,6 +2212,9 @@ export function startParallelCheck(
2030
2212
  emitKinds,
2031
2213
  checking,
2032
2214
  units,
2215
+ checked.globalsInFileDiagnostics,
2216
+ // A thread that continues another's index doesn't share.
2217
+ reserved.length === 0 && sharing !== undefined && !sharingStarted[i] ? startSharingOf(i) : undefined,
2033
2218
  );
2034
2219
  worker.on('message', (message: unknown) => {
2035
2220
  mark(`result from c${i}`);
@@ -2046,7 +2231,8 @@ export function startParallelCheck(
2046
2231
  else threadDone();
2047
2232
  });
2048
2233
  worker.on('error', (error: unknown) => {
2049
- if (trace) process.stderr.write(`checkers: thread ${i} failed: ${String(error)}\n`);
2234
+ // Sharing results (TSC_TS_SHARE) is still checked for such failures, which the main thread hides otherwise.
2235
+ if (trace || shareThreads) process.stderr.write(`checkers: thread ${i} failed: ${String(error)}\n`);
2050
2236
  threadDone();
2051
2237
  });
2052
2238
  };
@@ -2059,6 +2245,9 @@ export function startParallelCheck(
2059
2245
  const emittedHere =
2060
2246
  !mainChecks && emitKinds === undefined ? emitUncheckedFiles(checked, order, emits) : new Map<number, EmitResult>();
2061
2247
  if (mainChecks) {
2248
+ // The program reports the global diagnostics this checker has before checking files as found before
2249
+ // checking; those it finds checking them come with the threads' (`record`).
2250
+ checked.ownGlobalDiagnostics = checked.checker.getGlobalDiagnostics().slice();
2062
2251
  const own = checkFromQueue(
2063
2252
  checked,
2064
2253
  0,
@@ -247,7 +247,7 @@ export function startDeclarationThread(
247
247
  let declarations: boolean;
248
248
  if (emitKinds === undefined) declarations = sourceFileMayBeEmitted(files[i]!, options);
249
249
  else declarations = emitKinds[i] === EmitOnly.All || emitKinds[i] === EmitOnly.Dts;
250
- kinds.push(declarations ? EmitOnly.Dts : -1);
250
+ kinds.push(declarations ? (emitsJavaScript(program, emitKinds, i) ? EmitOnly.DtsAfterJs : EmitOnly.Dts) : -1);
251
251
  results.push(undefined);
252
252
  }
253
253
  for (const i of metadata) kinds[i] = emitKinds === undefined ? EmitOnly.All : emitKinds[i]!;