tsc-ts 0.0.10 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (379) hide show
  1. package/README.md +1 -1
  2. package/bin/tsc-ts.js +70 -1
  3. package/dist/api/compiler/ast-utilities.d.ts +19 -1
  4. package/dist/api/compiler/ast-utilities.js +180 -95
  5. package/dist/api/compiler/ast.d.ts +29 -18
  6. package/dist/api/compiler/ast.js +1040 -1007
  7. package/dist/api/compiler/astnav.js +15 -15
  8. package/dist/api/compiler/binder-utilities.js +186 -186
  9. package/dist/api/compiler/binder.js +290 -263
  10. package/dist/api/compiler/character-codes.js +2 -2
  11. package/dist/api/compiler/checker-calls.js +173 -123
  12. package/dist/api/compiler/checker-classes.d.ts +14 -3
  13. package/dist/api/compiler/checker-classes.js +136 -91
  14. package/dist/api/compiler/checker-contextual.d.ts +20 -0
  15. package/dist/api/compiler/checker-contextual.js +175 -62
  16. package/dist/api/compiler/checker-declaration-order.js +79 -79
  17. package/dist/api/compiler/checker-declarations.d.ts +1 -0
  18. package/dist/api/compiler/checker-declarations.js +160 -136
  19. package/dist/api/compiler/checker-declared-types.js +67 -65
  20. package/dist/api/compiler/checker-decorators.js +77 -77
  21. package/dist/api/compiler/checker-deprecation.d.ts +8 -3
  22. package/dist/api/compiler/checker-deprecation.js +76 -55
  23. package/dist/api/compiler/checker-destructuring.js +47 -45
  24. package/dist/api/compiler/checker-elaboration.js +24 -24
  25. package/dist/api/compiler/checker-emit-helpers.js +4 -4
  26. package/dist/api/compiler/checker-emit-resolver.d.ts +4 -2
  27. package/dist/api/compiler/checker-emit-resolver.js +25 -13
  28. package/dist/api/compiler/checker-evaluator.js +9 -9
  29. package/dist/api/compiler/checker-expressions.js +258 -212
  30. package/dist/api/compiler/checker-functions.js +113 -107
  31. package/dist/api/compiler/checker-generated-code.d.ts +0 -11
  32. package/dist/api/compiler/checker-generated-code.js +28 -52
  33. package/dist/api/compiler/checker-grammar.d.ts +1 -0
  34. package/dist/api/compiler/checker-grammar.js +469 -438
  35. package/dist/api/compiler/checker-heritage.js +91 -93
  36. package/dist/api/compiler/checker-inference.d.ts +77 -5
  37. package/dist/api/compiler/checker-inference.js +487 -113
  38. package/dist/api/compiler/checker-iteration.d.ts +0 -10
  39. package/dist/api/compiler/checker-iteration.js +35 -52
  40. package/dist/api/compiler/checker-javascript.js +14 -14
  41. package/dist/api/compiler/checker-jsdoc.d.ts +8 -10
  42. package/dist/api/compiler/checker-jsdoc.js +67 -58
  43. package/dist/api/compiler/checker-jsx.js +107 -89
  44. package/dist/api/compiler/checker-members.d.ts +9 -2
  45. package/dist/api/compiler/checker-members.js +210 -74
  46. package/dist/api/compiler/checker-modules.d.ts +15 -6
  47. package/dist/api/compiler/checker-modules.js +469 -309
  48. package/dist/api/compiler/checker-narrowing.js +273 -189
  49. package/dist/api/compiler/checker-object-literals.js +25 -22
  50. package/dist/api/compiler/checker-operators.js +126 -118
  51. package/dist/api/compiler/checker-overloads.js +27 -27
  52. package/dist/api/compiler/checker-property-access.js +59 -55
  53. package/dist/api/compiler/checker-services.d.ts +1 -0
  54. package/dist/api/compiler/checker-services.js +222 -210
  55. package/dist/api/compiler/checker-signatures.js +65 -49
  56. package/dist/api/compiler/checker-source-file.d.ts +5 -0
  57. package/dist/api/compiler/checker-source-file.js +154 -130
  58. package/dist/api/compiler/checker-statements.js +33 -32
  59. package/dist/api/compiler/checker-super.js +50 -50
  60. package/dist/api/compiler/checker-symbol-types.js +109 -93
  61. package/dist/api/compiler/checker-symbols.d.ts +13 -1
  62. package/dist/api/compiler/checker-symbols.js +264 -149
  63. package/dist/api/compiler/checker-type-factory.d.ts +5 -0
  64. package/dist/api/compiler/checker-type-factory.js +190 -46
  65. package/dist/api/compiler/checker-type-nodes.d.ts +1 -0
  66. package/dist/api/compiler/checker-type-nodes.js +179 -141
  67. package/dist/api/compiler/checker-type-operators.d.ts +2 -0
  68. package/dist/api/compiler/checker-type-operators.js +110 -63
  69. package/dist/api/compiler/checker-types.d.ts +80 -3
  70. package/dist/api/compiler/checker-types.js +121 -2
  71. package/dist/api/compiler/checker-unused.js +114 -118
  72. package/dist/api/compiler/checker-utilities.js +11 -11
  73. package/dist/api/compiler/checker.d.ts +97 -31
  74. package/dist/api/compiler/checker.js +149 -35
  75. package/dist/api/compiler/command-line.d.ts +1 -3
  76. package/dist/api/compiler/command-line.js +47 -44
  77. package/dist/api/compiler/compile-program.d.ts +24 -4
  78. package/dist/api/compiler/compile-program.js +53 -26
  79. package/dist/api/compiler/diagnostic-messages.d.ts +1849 -1774
  80. package/dist/api/compiler/diagnostic-messages.js +128 -122
  81. package/dist/api/compiler/diagnostics.js +7 -7
  82. package/dist/api/compiler/emitter.d.ts +7 -1
  83. package/dist/api/compiler/emitter.js +53 -11
  84. package/dist/api/compiler/expr-record.d.ts +11 -0
  85. package/dist/api/compiler/expr-record.js +53 -0
  86. package/dist/api/compiler/file-include.d.ts +2 -1
  87. package/dist/api/compiler/file-include.js +11 -7
  88. package/dist/api/compiler/file-loader.d.ts +10 -0
  89. package/dist/api/compiler/file-loader.js +138 -41
  90. package/dist/api/compiler/identifier-name.d.ts +9 -0
  91. package/dist/api/compiler/identifier-name.js +10 -0
  92. package/dist/api/compiler/instantiation.d.ts +7 -0
  93. package/dist/api/compiler/instantiation.js +101 -49
  94. package/dist/api/compiler/jsdoc.js +27 -25
  95. package/dist/api/compiler/link-tables.d.ts +48 -18
  96. package/dist/api/compiler/link-tables.js +80 -37
  97. package/dist/api/compiler/locales/cs-CZ.d.ts +1 -1
  98. package/dist/api/compiler/locales/cs-CZ.js +1 -1
  99. package/dist/api/compiler/locales/de-DE.d.ts +1 -1
  100. package/dist/api/compiler/locales/de-DE.js +1 -1
  101. package/dist/api/compiler/locales/es-ES.d.ts +1 -1
  102. package/dist/api/compiler/locales/es-ES.js +1 -1
  103. package/dist/api/compiler/locales/fr-FR.d.ts +1 -1
  104. package/dist/api/compiler/locales/fr-FR.js +1 -1
  105. package/dist/api/compiler/locales/it-IT.d.ts +1 -1
  106. package/dist/api/compiler/locales/it-IT.js +1 -1
  107. package/dist/api/compiler/locales/ja-JP.d.ts +1 -1
  108. package/dist/api/compiler/locales/ja-JP.js +1 -1
  109. package/dist/api/compiler/locales/ko-KR.d.ts +1 -1
  110. package/dist/api/compiler/locales/ko-KR.js +1 -1
  111. package/dist/api/compiler/locales/pl-PL.d.ts +1 -1
  112. package/dist/api/compiler/locales/pl-PL.js +1 -1
  113. package/dist/api/compiler/locales/pt-BR.d.ts +1 -1
  114. package/dist/api/compiler/locales/pt-BR.js +1 -1
  115. package/dist/api/compiler/locales/ru-RU.d.ts +1 -1
  116. package/dist/api/compiler/locales/ru-RU.js +1 -1
  117. package/dist/api/compiler/locales/tr-TR.d.ts +1 -1
  118. package/dist/api/compiler/locales/tr-TR.js +1 -1
  119. package/dist/api/compiler/locales/zh-CN.d.ts +1 -1
  120. package/dist/api/compiler/locales/zh-CN.js +1 -1
  121. package/dist/api/compiler/locales/zh-TW.d.ts +1 -1
  122. package/dist/api/compiler/locales/zh-TW.js +1 -1
  123. package/dist/api/compiler/module-resolution-types.js +6 -6
  124. package/dist/api/compiler/module-resolution.d.ts +10 -1
  125. package/dist/api/compiler/module-resolution.js +115 -84
  126. package/dist/api/compiler/module-specifiers.d.ts +15 -0
  127. package/dist/api/compiler/module-specifiers.js +24 -18
  128. package/dist/api/compiler/name-resolver.js +74 -65
  129. package/dist/api/compiler/node-builder-names.d.ts +11 -3
  130. package/dist/api/compiler/node-builder-names.js +210 -90
  131. package/dist/api/compiler/node-builder-pseudo.js +29 -31
  132. package/dist/api/compiler/node-builder-reuse.js +23 -22
  133. package/dist/api/compiler/node-builder.d.ts +18 -1
  134. package/dist/api/compiler/node-builder.js +191 -102
  135. package/dist/api/compiler/option-declarations.d.ts +2 -6
  136. package/dist/api/compiler/option-declarations.js +315 -375
  137. package/dist/api/compiler/options.d.ts +15 -33
  138. package/dist/api/compiler/options.js +21 -54
  139. package/dist/api/compiler/output-paths.d.ts +4 -1
  140. package/dist/api/compiler/output-paths.js +6 -11
  141. package/dist/api/compiler/package-json.d.ts +3 -3
  142. package/dist/api/compiler/package-json.js +11 -10
  143. package/dist/api/compiler/parser.d.ts +42 -20
  144. package/dist/api/compiler/parser.js +318 -224
  145. package/dist/api/compiler/path.d.ts +9 -0
  146. package/dist/api/compiler/path.js +20 -3
  147. package/dist/api/compiler/printer/emit-context.d.ts +3 -1
  148. package/dist/api/compiler/printer/emit-context.js +16 -1
  149. package/dist/api/compiler/printer/factory-base.d.ts +2 -2
  150. package/dist/api/compiler/printer/factory-base.js +7 -3
  151. package/dist/api/compiler/printer/factory.js +6 -3
  152. package/dist/api/compiler/printer/helpers.js +10 -1
  153. package/dist/api/compiler/printer/name-generator.d.ts +1 -1
  154. package/dist/api/compiler/printer/name-generator.js +35 -16
  155. package/dist/api/compiler/printer/printer.d.ts +1 -0
  156. package/dist/api/compiler/printer/printer.js +306 -283
  157. package/dist/api/compiler/printer/utilities.js +149 -147
  158. package/dist/api/compiler/program-checker.d.ts +8 -2
  159. package/dist/api/compiler/program-checker.js +84 -34
  160. package/dist/api/compiler/program-utilities.d.ts +3 -1
  161. package/dist/api/compiler/program-utilities.js +28 -15
  162. package/dist/api/compiler/program.d.ts +2 -0
  163. package/dist/api/compiler/program.js +69 -57
  164. package/dist/api/compiler/pseudo-bigint.d.ts +2 -0
  165. package/dist/api/compiler/pseudo-bigint.js +18 -0
  166. package/dist/api/compiler/regexp-checker.d.ts +1 -1
  167. package/dist/api/compiler/regexp-checker.js +93 -76
  168. package/dist/api/compiler/relations.d.ts +27 -4
  169. package/dist/api/compiler/relations.js +337 -180
  170. package/dist/api/compiler/reparser.js +64 -59
  171. package/dist/api/compiler/scanner.d.ts +27 -2
  172. package/dist/api/compiler/scanner.js +181 -150
  173. package/dist/api/compiler/shared-results.d.ts +696 -0
  174. package/dist/api/compiler/shared-results.js +2905 -0
  175. package/dist/api/compiler/sourcemap.js +2 -2
  176. package/dist/api/compiler/symbol-accessibility.js +87 -74
  177. package/dist/api/compiler/symbol.d.ts +22 -13
  178. package/dist/api/compiler/symbol.js +15 -1
  179. package/dist/api/compiler/syntax-kind.d.ts +198 -197
  180. package/dist/api/compiler/transformers/alias-references.js +247 -139
  181. package/dist/api/compiler/transformers/async-utilities.js +25 -25
  182. package/dist/api/compiler/transformers/async.d.ts +0 -1
  183. package/dist/api/compiler/transformers/async.js +64 -77
  184. package/dist/api/compiler/transformers/class-fields.d.ts +1 -0
  185. package/dist/api/compiler/transformers/class-fields.js +81 -78
  186. package/dist/api/compiler/transformers/commonjs-module.js +18 -15
  187. package/dist/api/compiler/transformers/const-enum-inliner.js +1 -1
  188. package/dist/api/compiler/transformers/declarations-diagnostics.js +247 -244
  189. package/dist/api/compiler/transformers/declarations-pseudo.js +100 -100
  190. package/dist/api/compiler/transformers/declarations-resolver.d.ts +0 -3
  191. package/dist/api/compiler/transformers/declarations-syntactic.d.ts +1 -2
  192. package/dist/api/compiler/transformers/declarations-syntactic.js +134 -156
  193. package/dist/api/compiler/transformers/declarations-tracker.js +18 -18
  194. package/dist/api/compiler/transformers/declarations.d.ts +4 -1
  195. package/dist/api/compiler/transformers/declarations.js +307 -239
  196. package/dist/api/compiler/transformers/decorator-metadata.d.ts +1 -1
  197. package/dist/api/compiler/transformers/decorator-metadata.js +53 -45
  198. package/dist/api/compiler/transformers/decorator-utilities.js +24 -24
  199. package/dist/api/compiler/transformers/destructuring.js +19 -18
  200. package/dist/api/compiler/transformers/emit-resolver.js +1 -1
  201. package/dist/api/compiler/transformers/es-decorators.js +55 -55
  202. package/dist/api/compiler/transformers/external-module-info.js +3 -3
  203. package/dist/api/compiler/transformers/for-await.js +25 -25
  204. package/dist/api/compiler/transformers/import-elision.js +14 -14
  205. package/dist/api/compiler/transformers/jsx.js +12 -12
  206. package/dist/api/compiler/transformers/legacy-decorators.js +17 -17
  207. package/dist/api/compiler/transformers/module.js +8 -8
  208. package/dist/api/compiler/transformers/named-evaluation.js +4 -4
  209. package/dist/api/compiler/transformers/object-rest-spread.js +20 -20
  210. package/dist/api/compiler/transformers/optional-chain.js +10 -10
  211. package/dist/api/compiler/transformers/reference-resolver.d.ts +12 -1
  212. package/dist/api/compiler/transformers/reference-resolver.js +131 -69
  213. package/dist/api/compiler/transformers/runtime-syntax.js +35 -31
  214. package/dist/api/compiler/transformers/subtree-facts.js +47 -47
  215. package/dist/api/compiler/transformers/syntax-facts.js +56 -58
  216. package/dist/api/compiler/transformers/type-eraser.js +73 -66
  217. package/dist/api/compiler/transformers/type-serialization.js +24 -24
  218. package/dist/api/compiler/transformers/using.js +12 -12
  219. package/dist/api/compiler/transformers/utilities.js +77 -77
  220. package/dist/api/compiler/transformers/visitor-base.js +172 -172
  221. package/dist/api/compiler/transformers/visitor-hooks.js +6 -2
  222. package/dist/api/compiler/tsconfig.d.ts +10 -2
  223. package/dist/api/compiler/tsconfig.js +136 -48
  224. package/dist/api/compiler/type-printer.js +40 -3
  225. package/dist/api/compiler/types.d.ts +2 -1
  226. package/dist/api/library/ast.generated.d.ts +42 -39
  227. package/dist/api/library/ast.generated.js +1 -1
  228. package/dist/api/library/compiler-options.generated.d.ts +111 -100
  229. package/dist/api/library/compiler-options.generated.js +1 -1
  230. package/dist/api/library/disk.js +12 -1
  231. package/dist/api/library/enums.generated.d.ts +206 -206
  232. package/dist/api/library/enums.generated.js +206 -206
  233. package/dist/api/library/nodes.js +26 -26
  234. package/package.json +9 -9
  235. package/src/compiler/ast-utilities.ts +99 -7
  236. package/src/compiler/ast.ts +74 -38
  237. package/src/compiler/binder.ts +39 -4
  238. package/src/compiler/cgroup.ts +157 -0
  239. package/src/compiler/character-codes.ts +2 -2
  240. package/src/compiler/checker-calls.ts +76 -8
  241. package/src/compiler/checker-classes.ts +80 -25
  242. package/src/compiler/checker-contextual.ts +110 -1
  243. package/src/compiler/checker-declarations.ts +31 -4
  244. package/src/compiler/checker-declared-types.ts +8 -5
  245. package/src/compiler/checker-decorators.ts +1 -1
  246. package/src/compiler/checker-deprecation.ts +29 -8
  247. package/src/compiler/checker-destructuring.ts +10 -3
  248. package/src/compiler/checker-emit-helpers.ts +1 -0
  249. package/src/compiler/checker-emit-resolver.ts +16 -6
  250. package/src/compiler/checker-expressions.ts +95 -47
  251. package/src/compiler/checker-functions.ts +21 -6
  252. package/src/compiler/checker-generated-code.ts +2 -22
  253. package/src/compiler/checker-grammar.ts +133 -60
  254. package/src/compiler/checker-heritage.ts +22 -21
  255. package/src/compiler/checker-inference.ts +514 -87
  256. package/src/compiler/checker-iteration.ts +18 -31
  257. package/src/compiler/checker-javascript.ts +1 -1
  258. package/src/compiler/checker-jsdoc.ts +50 -27
  259. package/src/compiler/checker-jsx.ts +28 -5
  260. package/src/compiler/checker-members.ts +197 -55
  261. package/src/compiler/checker-modules.ts +332 -65
  262. package/src/compiler/checker-narrowing.ts +98 -19
  263. package/src/compiler/checker-object-literals.ts +3 -0
  264. package/src/compiler/checker-operators.ts +11 -4
  265. package/src/compiler/checker-property-access.ts +7 -2
  266. package/src/compiler/checker-services.ts +39 -12
  267. package/src/compiler/checker-signatures.ts +15 -1
  268. package/src/compiler/checker-source-file.ts +39 -13
  269. package/src/compiler/checker-statements.ts +3 -2
  270. package/src/compiler/checker-symbol-types.ts +29 -6
  271. package/src/compiler/checker-symbols.ts +158 -15
  272. package/src/compiler/checker-type-factory.ts +173 -35
  273. package/src/compiler/checker-type-nodes.ts +46 -3
  274. package/src/compiler/checker-type-operators.ts +83 -26
  275. package/src/compiler/checker-types.ts +147 -4
  276. package/src/compiler/checker-unused.ts +9 -14
  277. package/src/compiler/checker.ts +175 -41
  278. package/src/compiler/command-line.ts +28 -28
  279. package/src/compiler/compile-program.ts +59 -25
  280. package/src/compiler/decoder.ts +15 -5
  281. package/src/compiler/diagnostic-messages.ts +1973 -1892
  282. package/src/compiler/doctor-report.ts +133 -0
  283. package/src/compiler/emitter.ts +57 -8
  284. package/src/compiler/encoder.ts +23 -8
  285. package/src/compiler/expr-record.ts +59 -0
  286. package/src/compiler/file-include.ts +9 -3
  287. package/src/compiler/file-loader.ts +139 -32
  288. package/src/compiler/help.ts +10 -14
  289. package/src/compiler/identifier-name.ts +13 -0
  290. package/src/compiler/incremental.ts +86 -18
  291. package/src/compiler/init.ts +2 -7
  292. package/src/compiler/instantiation.ts +77 -22
  293. package/src/compiler/jsdoc.ts +7 -3
  294. package/src/compiler/link-tables.ts +82 -37
  295. package/src/compiler/locales/cs-CZ.ts +1 -1
  296. package/src/compiler/locales/de-DE.ts +1 -1
  297. package/src/compiler/locales/es-ES.ts +1 -1
  298. package/src/compiler/locales/fr-FR.ts +1 -1
  299. package/src/compiler/locales/it-IT.ts +1 -1
  300. package/src/compiler/locales/ja-JP.ts +1 -1
  301. package/src/compiler/locales/ko-KR.ts +1 -1
  302. package/src/compiler/locales/pl-PL.ts +1 -1
  303. package/src/compiler/locales/pt-BR.ts +1 -1
  304. package/src/compiler/locales/ru-RU.ts +1 -1
  305. package/src/compiler/locales/tr-TR.ts +1 -1
  306. package/src/compiler/locales/zh-CN.ts +1 -1
  307. package/src/compiler/locales/zh-TW.ts +1 -1
  308. package/src/compiler/module-resolution.ts +44 -8
  309. package/src/compiler/module-specifiers.ts +62 -20
  310. package/src/compiler/name-resolver.ts +9 -1
  311. package/src/compiler/node-builder-names.ts +236 -54
  312. package/src/compiler/node-builder-pseudo.ts +4 -7
  313. package/src/compiler/node-builder-reuse.ts +5 -4
  314. package/src/compiler/node-builder.ts +130 -31
  315. package/src/compiler/option-declarations.ts +33 -103
  316. package/src/compiler/options.ts +23 -62
  317. package/src/compiler/output-paths.ts +5 -18
  318. package/src/compiler/package-entrypoints.ts +345 -0
  319. package/src/compiler/package-json.ts +4 -4
  320. package/src/compiler/parallel-check.ts +543 -147
  321. package/src/compiler/parallel-emit.ts +4 -4
  322. package/src/compiler/parser.ts +166 -47
  323. package/src/compiler/path.ts +22 -2
  324. package/src/compiler/printer/emit-context.ts +16 -0
  325. package/src/compiler/printer/factory-base.ts +10 -3
  326. package/src/compiler/printer/factory.ts +7 -3
  327. package/src/compiler/printer/helpers.ts +10 -1
  328. package/src/compiler/printer/name-generator.ts +24 -2
  329. package/src/compiler/printer/printer.ts +39 -16
  330. package/src/compiler/printer/utilities.ts +8 -2
  331. package/src/compiler/program-checker.ts +53 -5
  332. package/src/compiler/program-utilities.ts +23 -10
  333. package/src/compiler/program.ts +13 -1
  334. package/src/compiler/pseudo-bigint.ts +17 -0
  335. package/src/compiler/regexp-checker.ts +63 -30
  336. package/src/compiler/relations.ts +233 -77
  337. package/src/compiler/reparser.ts +14 -5
  338. package/src/compiler/run-config.ts +1383 -0
  339. package/src/compiler/run-record-read.ts +87 -0
  340. package/src/compiler/run-records.ts +575 -0
  341. package/src/compiler/scanner.ts +166 -120
  342. package/src/compiler/shared-results.ts +3144 -0
  343. package/src/compiler/show-config.ts +18 -1
  344. package/src/compiler/sourcemap.ts +2 -2
  345. package/src/compiler/symbol-accessibility.ts +26 -3
  346. package/src/compiler/symbol.ts +31 -14
  347. package/src/compiler/syntax-kind.ts +188 -187
  348. package/src/compiler/thread-entry.ts +22 -3
  349. package/src/compiler/transformers/alias-references.ts +123 -4
  350. package/src/compiler/transformers/async.ts +2 -17
  351. package/src/compiler/transformers/class-fields.ts +13 -12
  352. package/src/compiler/transformers/commonjs-module.ts +11 -7
  353. package/src/compiler/transformers/declarations-diagnostics.ts +5 -3
  354. package/src/compiler/transformers/declarations-pseudo.ts +2 -4
  355. package/src/compiler/transformers/declarations-resolver.ts +0 -3
  356. package/src/compiler/transformers/declarations-syntactic.ts +1 -21
  357. package/src/compiler/transformers/declarations.ts +136 -49
  358. package/src/compiler/transformers/decorator-metadata.ts +9 -1
  359. package/src/compiler/transformers/destructuring.ts +4 -3
  360. package/src/compiler/transformers/external-module-info.ts +1 -1
  361. package/src/compiler/transformers/jsx.ts +2 -1
  362. package/src/compiler/transformers/reference-resolver.ts +83 -19
  363. package/src/compiler/transformers/runtime-syntax.ts +6 -1
  364. package/src/compiler/transformers/syntax-facts.ts +2 -7
  365. package/src/compiler/transformers/type-eraser.ts +10 -1
  366. package/src/compiler/transformers/type-serialization.ts +3 -2
  367. package/src/compiler/transformers/visitor-base.ts +2 -1
  368. package/src/compiler/transformers/visitor-hooks.ts +9 -4
  369. package/src/compiler/tsc-build.ts +67 -6
  370. package/src/compiler/tsc-cli.ts +35 -4
  371. package/src/compiler/tsc-compile.ts +220 -10
  372. package/src/compiler/tsc-watch.ts +97 -47
  373. package/src/compiler/tsconfig.ts +176 -19
  374. package/src/compiler/type-printer.ts +36 -2
  375. package/src/compiler/types.ts +2 -1
  376. package/src/library/ast.generated.ts +57 -41
  377. package/src/library/compiler-options.generated.ts +117 -103
  378. package/src/library/disk.ts +10 -1
  379. package/src/library/enums.generated.ts +196 -196
@@ -1,26 +1,28 @@
1
- import type { DeferredCollisionCheck } from './checker-generated-code.js';
1
+ import type { ModuleSpecifierResult } from './node-builder-names.js';
2
2
  import type { EmitHelperFileLinks } from './checker-emit-helpers.js';
3
3
  import type { Node, PatternAmbientModule, SourceFile } from './ast.js';
4
- import { CompactSymbolLinkTable, IntLinkTable, LinkTable, PagedIdSet, SparseLinkTable } from './link-tables.js';
4
+ import { CompactIntLinkTable, CompactLinkTable, IntLinkTable, LinkTable, PagedIdSet, SparseLinkTable } from './link-tables.js';
5
+ import { ExprCheckRecord } from './expr-record.js';
5
6
  import { Diagnostic, type DiagnosticMessage, Diagnostics } from './diagnostics.js';
6
7
  import { type CompilerOptions, ModuleKind, ScriptTarget } from './options.js';
7
8
  import { CheckFlags, Symbol, SymbolFlags, type SymbolTable } from './symbol.js';
8
- import { IndexInfo, IntrinsicType, LiteralType, MemberNames, NodeLinks, ObjectFlags, ObjectType, Signature, SignatureFlags, SymbolLinks, type Type, TypeFlags, TypeMapper, TypeParameter, TypePredicate, VarianceFlags, TypeListCache, TypeListTable, type ConditionalType, type InterfaceType, type TypeChecking } from './checker-types.js';
9
+ import { IndexInfo, IntrinsicType, LiteralType, MemberNames, NamedMemberOrder, NodeLinks, ObjectFlags, ObjectType, Signature, SignatureFlags, SymbolLinks, type Type, TypeFlags, TypeMapper, TypeParameter, TypePredicate, VarianceFlags, TypeListCache, TypeListTable, type ConditionalType, type InterfaceType, type TypeChecking, type ConditionalResultKey, type DistributedConditional } from './checker-types.js';
9
10
  import type { ModuleResolution } from './checker-modules.js';
10
11
  import { CheckerNameResolver, type LibGlobals, type MergedGlobals, TableChanges, SuggestionNameResolver } from './checker-symbols.js';
11
- import { Relation, RelationKey, type InternedRelationKey, type Relater, TypeComparer } from './relations.js';
12
+ import { Relation, RelationKey, type InternedRelationKey, type Relater, TypeComparer, type VarianceStackEntry } from './relations.js';
12
13
  import { TypeNodeVisitor } from './checker-source-file.js';
13
14
  import { InferenceCaches } from './checker-inference.js';
14
15
  import { AssignmentMarker, type FlowLoopInfo, type FlowState, type FlowWalk } from './checker-narrowing.js';
15
16
  import type { FlowNode, FlowReduceLabel } from './flow.js';
16
17
  import { JsxState } from './checker-jsx.js';
17
- import type { DeferredIterationError, IterationTypes } from './checker-iteration.js';
18
+ import type { IterationTypes } from './checker-iteration.js';
18
19
  import type { SpreadIndices } from './checker-contextual.js';
19
20
  import { SourceFileMetadata } from './program-utilities.js';
20
21
  import type { GrammarChecker } from './checker-grammar.js';
21
22
  import type { ResolvedModule } from './module-resolution-types.js';
22
23
  import type { ModuleSpecifierHost } from './module-specifiers.js';
23
24
  import type { PropertyListIndex } from './checker-members.js';
25
+ import { type ThreadSharing } from './shared-results.js';
24
26
  /** What the checker needs from a program. */
25
27
  export declare abstract class CheckerHost {
26
28
  abstract getCompilerOptions(): CompilerOptions;
@@ -57,15 +59,21 @@ export declare abstract class CheckerHost {
57
59
  /** What module specifier generation needs; without it, specifiers are relative paths. */
58
60
  getModuleSpecifierHost(): ModuleSpecifierHost | undefined;
59
61
  }
60
- /** Per-file and global diagnostics, sorted on read like tsgo's DiagnosticsCollection. */
62
+ /**
63
+ * Per-file and global diagnostics, sorted on read like tsgo's DiagnosticsCollection, which keeps one of
64
+ * each set of equal diagnostics.
65
+ */
61
66
  declare class DiagnosticCollection {
62
67
  private readonly byFile;
63
68
  private readonly sortedFiles;
64
69
  private readonly global;
65
70
  private globalSorted;
66
- /** The diagnostics added since `startLog`, while recording. */
71
+ /** The diagnostics at each file, position, end and code, to find an equal one when adding. */
72
+ private readonly byLocation;
73
+ /** The diagnostics reported since `startLog`, while recording, also those equal to one already added. */
67
74
  private log;
68
- add(diagnostic: Diagnostic): void;
75
+ /** Adds `diagnostic` unless an equal one was added; returns the one the collection holds. */
76
+ add(diagnostic: Diagnostic): Diagnostic;
69
77
  forFile(fileName: string): Diagnostic[];
70
78
  count(): number;
71
79
  /** An already reported diagnostic equal to `diagnostic`, if any. */
@@ -73,8 +81,12 @@ declare class DiagnosticCollection {
73
81
  globals(): Diagnostic[];
74
82
  /** The global diagnostics `withoutNewGlobals` removed. */
75
83
  removedGlobals: number;
84
+ /** Where results are shared between checker threads (shared-results.ts): every diagnostic added, in order. */
85
+ added: Diagnostic[] | undefined;
76
86
  /** Runs `run`, then removes the global diagnostics it added. */
77
87
  withoutNewGlobals<T>(run: () => T): T;
88
+ /** Removes the global diagnostic `diagnostic` from the location index. */
89
+ private forget;
78
90
  /** Records the diagnostics added from now on. */
79
91
  startLog(): void;
80
92
  /** The diagnostics added since `startLog`, in order; stops recording. */
@@ -147,10 +159,20 @@ export declare class Checker implements TypeChecking {
147
159
  readonly memberPositionsInLists: Map<Symbol[], Map<string, number>>;
148
160
  /** The property names of the last instantiation of each such list whose table is built on demand. */
149
161
  readonly memberNamesOfLists: Map<Symbol[], MemberNames>;
162
+ /** The property order of the instantiations of each such list (`NamedMemberOrder`); null where it has none. */
163
+ readonly namedMemberOrdersOfLists: Map<Symbol[], NamedMemberOrder | null>;
150
164
  /** Long lists of inherited properties, by name. */
151
165
  readonly propertiesByName: Map<Symbol[], Map<string, Symbol>>;
152
166
  /** Number of `typeToString` calls in progress. */
153
167
  serializationLevel: number;
168
+ /**
169
+ * `typeToString` results by type, enclosing declaration, flags and the type parameter of the variance check in
170
+ * progress: the prints that created no types, which a later print with the same inputs repeats exactly
171
+ * (`typeToString`).
172
+ */
173
+ readonly typeStrings: Map<string, string>;
174
+ /** `symbolToString` results by symbol, then by enclosing declaration and flags, kept as `typeStrings` are. */
175
+ readonly symbolStrings: Map<Symbol, Map<string, string>>;
154
176
  /** Whether `globalObjectType` is set; global type lookups before it can't suggest `typeof`. */
155
177
  hasGlobalObjectType: boolean;
156
178
  /** The node being checked, for errors with no better location. */
@@ -167,7 +189,7 @@ export declare class Checker implements TypeChecking {
167
189
  */
168
190
  modulesMerged: boolean;
169
191
  /** Module specifiers of `import("…")` types, by module symbol id, importing file path and resolution mode. */
170
- readonly moduleSpecifiers: Map<string, string>;
192
+ readonly moduleSpecifiers: Map<string, ModuleSpecifierResult>;
171
193
  /** Specifier generation for hosts without a program. */
172
194
  fallbackModuleSpecifierHost: ModuleSpecifierHost | undefined;
173
195
  readonly symbolLinkTable: SparseLinkTable<SymbolLinks>;
@@ -188,24 +210,26 @@ export declare class Checker implements TypeChecking {
188
210
  /** The mapper of an instantiated symbol or a mapped type property. */
189
211
  readonly symbolMappers: LinkTable<TypeMapper>;
190
212
  /** The literal type of a property name. */
191
- readonly symbolNameTypes: LinkTable<Type>;
213
+ readonly symbolNameTypes: CompactLinkTable<Type>;
192
214
  /** The mapped type of a mapped type property, or the union/intersection of a synthetic property. */
193
- readonly symbolContainingTypes: LinkTable<Type>;
215
+ readonly symbolContainingTypes: CompactLinkTable<Type>;
194
216
  /** The key type of a mapped type property. */
195
- readonly symbolKeyTypes: LinkTable<Type>;
217
+ readonly symbolKeyTypes: CompactLinkTable<Type>;
196
218
  /** The property a mapped, spread or synthetic property comes from. */
197
- readonly symbolSyntheticOrigins: LinkTable<Symbol>;
219
+ readonly symbolSyntheticOrigins: CompactLinkTable<Symbol>;
198
220
  /** The left and right properties a spread property combines. */
199
- readonly symbolLeftSpreads: LinkTable<Symbol>;
200
- readonly symbolRightSpreads: LinkTable<Symbol>;
221
+ readonly symbolLeftSpreads: CompactLinkTable<Symbol>;
222
+ readonly symbolRightSpreads: CompactLinkTable<Symbol>;
201
223
  /** Bits of SymbolFlags for the meanings in which a symbol was referenced. */
202
- readonly symbolReferenceKinds: IntLinkTable;
224
+ readonly symbolReferenceKinds: CompactIntLinkTable;
203
225
  /** The resolved symbol of an identifier, entity name or call. */
204
- readonly resolvedSymbols: CompactSymbolLinkTable;
226
+ readonly resolvedSymbols: CompactLinkTable<Symbol>;
205
227
  /** The resolved type of a type node or expression. */
206
- readonly resolvedTypes: SparseLinkTable<Type>;
228
+ readonly resolvedTypes: CompactLinkTable<Type>;
229
+ /** The type the last completed check of each expression key produced (expr-record.ts). */
230
+ readonly exprCheckRecord: ExprCheckRecord;
207
231
  /** The resolved signature of a call-like node or a signature declaration. */
208
- readonly resolvedSignatures: SparseLinkTable<Signature>;
232
+ readonly resolvedSignatures: CompactLinkTable<Signature>;
209
233
  /** Merged symbols, indexed by the id of the symbol merged into them. */
210
234
  readonly mergedSymbols: Map<number, Symbol>;
211
235
  /**
@@ -253,6 +277,7 @@ export declare class Checker implements TypeChecking {
253
277
  readonly unionOfUnionTypes: Map<string, Type>;
254
278
  /** `unionOfUnionTypes` without an alias, by both ids and the reduction packed into one number. */
255
279
  readonly unionOfUnionTypesById: Map<number, Type>;
280
+ readonly unionTypesByInputList: TypeListCache<Type>;
256
281
  readonly intersectionTypes: TypeListCache<Type>;
257
282
  readonly tupleTypes: Map<string, Type>;
258
283
  readonly indexedAccessTypes: Map<string, Type>;
@@ -368,13 +393,19 @@ export declare class Checker implements TypeChecking {
368
393
  readonly moduleTypeCache: Map<string, Type>;
369
394
  readonly globalSymbolCache: Map<string, Symbol | null>;
370
395
  resolutionStart: number;
371
- inVarianceComputation: boolean;
396
+ /** The generic types whose variances are being computed, outermost first. */
397
+ varianceStack: VarianceStackEntry[];
372
398
  instantiationDepth: number;
399
+ /** The types being instantiated, outermost first: the first `instantiationDepth` entries are current. */
400
+ readonly instantiationStack: Type[];
401
+ /** The calls being resolved, outermost first: the first `callResolutionDepth` entries are current. */
402
+ readonly callResolutionStack: Node[];
403
+ callResolutionDepth: number;
373
404
  instantiationCount: number;
374
405
  /** Instantiations over the checker's lifetime (statistics). */
375
406
  totalInstantiations: number;
376
- /** Mappers of the instantiations in progress: the first `activeMapperDepth` entries are live. */
377
- readonly activeMappers: TypeMapper[];
407
+ /** Ids of the mappers of the instantiations in progress: the first `activeMapperDepth` entries are live. */
408
+ activeMapperIds: Int32Array<ArrayBuffer>;
378
409
  activeMapperDepth: number;
379
410
  /** Per active mapper: its instantiations by type id, created on the first nested write. */
380
411
  readonly activeMapperCaches: (Map<number, Type> | undefined)[];
@@ -389,20 +420,28 @@ export declare class Checker implements TypeChecking {
389
420
  /** Empty lists for type arguments that are compared with cached instantiations before any is kept. */
390
421
  readonly freeTypeLists: Type[][];
391
422
  /**
392
- * 1 by type id for the anonymous and mapped types whose declaration has no outer type parameters
423
+ * The ids of the anonymous and mapped types whose declaration has no outer type parameters
393
424
  * to instantiate (`getObjectTypeInstantiation`).
394
425
  */
395
- readonly withoutOuterTypeParameters: IntLinkTable;
426
+ readonly withoutOuterTypeParameters: PagedIdSet;
396
427
  conditionalConstraintDepth: number;
397
428
  readonly suggestionResolver: SuggestionNameResolver;
398
429
  readonly awaitedTypeStack: number[];
399
430
  /** Iteration types by type id and iteration use. */
400
431
  readonly iterationTypesCache: Map<number, IterationTypes>;
401
- /** Whether diagnostics can be deferred to the end of the file being checked. */
402
- saveDeferredDiagnostics: boolean;
403
- deferredIterationErrors: DeferredIterationError[];
404
- /** Collision checks waiting for the end of the file (checker-generated-code.ts). */
405
- deferredCollisionChecks: DeferredCollisionCheck[];
432
+ /**
433
+ * Diagnostics reported after the checks of the file being checked, or before the next global
434
+ * diagnostics are read, in the order they were deferred. Reporting them earlier could resolve types
435
+ * that are being resolved.
436
+ */
437
+ deferredDiagnostics: (() => void)[];
438
+ /** Defers the diagnostic `report` reports at `node` (`deferredDiagnostics`). */
439
+ deferDiagnostic(node: Node, report: () => void): void;
440
+ /**
441
+ * The checked object literals of each file whose members may set deprecated properties of their contextual
442
+ * types, reported when the file's suggestion diagnostics are asked for (`checkObjectLiteralDeprecations`).
443
+ */
444
+ readonly objectLiteralsForDeprecations: Map<SourceFile, Node[]>;
406
445
  /** Binding patterns whose implied type is being computed as a contextual type. */
407
446
  readonly contextualBindingPatterns: Node[];
408
447
  /** The binding pattern or assignment pattern that implied each type. */
@@ -453,11 +492,13 @@ export declare class Checker implements TypeChecking {
453
492
  flowTypeCache: Map<Node, Type> | undefined;
454
493
  flowInvocationCount: number;
455
494
  /** The reduce labels being passed, innermost last; each limits its target label's antecedents. */
456
- readonly flowReduceLabels: FlowReduceLabel[];
495
+ flowReduceLabels: FlowReduceLabel[];
457
496
  readonly flowNodeReachable: Map<FlowNode, boolean>;
458
497
  readonly flowNodePostSuper: Map<FlowNode, boolean>;
459
498
  lastFlowNode: FlowNode | undefined;
460
499
  lastFlowNodeReachable: boolean;
500
+ /** Symbols whose explicit type is being found, for flow analysis of self-referential `for...of`. */
501
+ readonly resolvingExplicitTypeOfSymbol: Set<Symbol>;
461
502
  readonly assignmentMarker: AssignmentMarker;
462
503
  readonly primitiveTypeAliasSuggestions: Map<string, Symbol>;
463
504
  /** Renamed binding elements in parameters of bodiless signatures, checked for use with their file. */
@@ -480,6 +521,9 @@ export declare class Checker implements TypeChecking {
480
521
  readonly ambientModuleSymbols: Symbol[];
481
522
  readonly patternAmbientModules: PatternAmbientModule[];
482
523
  readonly patternAmbientModuleAugmentations: Map<string, Symbol>;
524
+ /** The pattern module each entry of `patternAmbientModuleAugmentations` augments. */
525
+ readonly patternAmbientModuleAugmentationTargets: Map<string, Symbol>;
526
+ readonly moduleImportAttributesTypes: Map<Symbol, Type>;
483
527
  readonly inferenceCaches: InferenceCaches;
484
528
  /** The type resolution stack: the first `resolutionDepth` entries are live, later slots are reused. */
485
529
  readonly resolutionTargets: (Symbol | Type | Signature | Node)[];
@@ -488,6 +532,27 @@ export declare class Checker implements TypeChecking {
488
532
  resolutionDepth: number;
489
533
  /** The number of resolution cycles found (`pushTypeResolution`). */
490
534
  resolutionCycleCount: number;
535
+ /**
536
+ * While an `inferTypesFromUnstarted` walk runs: the unions and intersections whose properties
537
+ * `hasUnmatchedProperty` searched before they were resolved. Such a search creates fewer types
538
+ * than one of the resolved properties.
539
+ */
540
+ unresolvedPropertySearches: Type[] | undefined;
541
+ /** TSC_TS_SHARE: the checker thread's sharing with the other checker threads. */
542
+ threadSharing: ThreadSharing | undefined;
543
+ /**
544
+ * Where results are shared (shared-results.ts): for each conditional type made as a member of the distribution of a
545
+ * conditional type instantiation, that instantiation and the constituent it is for.
546
+ */
547
+ distributedConditionals: Map<Type, DistributedConditional> | undefined;
548
+ /** The same members by `distributedKey`. */
549
+ distributedByKey: Map<string, Type> | undefined;
550
+ /** The conditional types conditional type instantiations resolved to, with the instantiation's root and key. */
551
+ conditionalResults: Map<Type, ConditionalResultKey> | undefined;
552
+ /** The access flags of the key `getIndexedAccessTypeEx` keeps each indexed access type by. */
553
+ indexedAccessKeyFlags: Map<Type, number> | undefined;
554
+ /** Where results are shared between checker threads (shared-results.ts): the file of each diagnostic deferred. */
555
+ deferredDiagnosticFiles: number[] | undefined;
491
556
  constructor(host: CheckerHost);
492
557
  /** Checks `file` if needed and returns its semantic diagnostics, sorted. */
493
558
  getDiagnostics(file: SourceFile): Diagnostic[];
@@ -522,7 +587,8 @@ export declare class Checker implements TypeChecking {
522
587
  newSignature(flags: SignatureFlags, declaration: Node | undefined, typeParameters: Type[], thisParameter: Symbol | undefined, parameters: Symbol[], resolvedReturnType: Type | undefined, minArgumentCount: number): Signature;
523
588
  /** Reports `message` at `node`, or as a global diagnostic without a node. */
524
589
  error(node: Node | undefined, message: DiagnosticMessage, ...args: string[]): Diagnostic;
525
- addDiagnostic(diagnostic: Diagnostic): void;
590
+ /** Reports `diagnostic`; returns the equal diagnostic already reported, if any, else `diagnostic`. */
591
+ addDiagnostic(diagnostic: Diagnostic): Diagnostic;
526
592
  addSuggestion(diagnostic: Diagnostic): void;
527
593
  /** Reports an error, or a suggestion when `isError` is false. */
528
594
  addErrorOrSuggestion(isError: boolean, diagnostic: Diagnostic): void;
@@ -1,7 +1,8 @@
1
1
  import { sideOf } from './side-state.js';
2
- import { CompactSymbolLinkTable, IntLinkTable, LinkTable, PagedIdSet, SparseLinkTable } from './link-tables.js';
2
+ import { CompactIntLinkTable, CompactLinkTable, IntLinkTable, LinkTable, PagedIdSet, SparseLinkTable, } from './link-tables.js';
3
+ import { ExprCheckRecord } from './expr-record.js';
3
4
  import { getErrorRangeForNode, getSourceFileOfNode } from './binder-utilities.js';
4
- import { Diagnostic, compareDiagnostics } from './diagnostics.js';
5
+ import { Diagnostic, compareDiagnostics, equalDiagnostics, } from './diagnostics.js';
5
6
  import { ModuleKind, ScriptTarget, getEmitScriptTarget, getIsolatedModules, getStrictOptionValue, shouldPreserveConstEnums, } from './options.js';
6
7
  import { Symbol, getSymbolId } from './symbol.js';
7
8
  import { IndexInfo, IntrinsicType, LiteralType, NodeLinks, Signature, SymbolLinks, TypeParameter, TypePredicate, emptyTypes, TypeListCache, TypeListTable, } from './checker-types.js';
@@ -10,12 +11,14 @@ import { getFalseTypeFromConditionalType, getTrueTypeFromConditionalType } from
10
11
  import { createArrayType, createTypeFromGenericGlobalType, getBigIntLiteralType, getNumberLiteralType, getStringLiteralType, getTemplateLiteralType, getUnionType, newAnonymousType, newObjectType, } from './checker-type-factory.js';
11
12
  import { CheckerNameResolver, borrowLibGlobals, findLibGlobals, returnLibGlobals, setGlobal, SuggestionNameResolver, getGlobalStrictFunctionType, getGlobalType, initializeGlobals, mergeAmbientModulesAndAugmentations, } from './checker-symbols.js';
12
13
  import { PermissiveMapper, ReportingMapper, RestrictiveMapper, UniqueLiteralMapper } from './instantiation.js';
13
- import { Relation, RelationKey } from './relations.js';
14
- import { TypeNodeVisitor, checkSourceFile } from './checker-source-file.js';
14
+ import { Relation, RelationKey, } from './relations.js';
15
+ import { TypeNodeVisitor, checkSourceFile, produceDeferredDiagnostics } from './checker-source-file.js';
16
+ import { checkObjectLiteralDeprecations } from './checker-deprecation.js';
15
17
  import { InferenceCaches } from './checker-inference.js';
16
18
  import { AssignmentMarker } from './checker-narrowing.js';
17
19
  import { JsxState } from './checker-jsx.js';
18
20
  import { SourceFileMetadata, getEmitModuleFormatOfFile } from './program-utilities.js';
21
+ import { startThreadSharing } from './shared-results.js';
19
22
  /** What the checker needs from a program. */
20
23
  export class CheckerHost {
21
24
  /** How a module name in `file` resolved in `mode`, if the program resolved it. */
@@ -78,22 +81,40 @@ export class CheckerHost {
78
81
  return undefined;
79
82
  }
80
83
  }
81
- /** Per-file and global diagnostics, sorted on read like tsgo's DiagnosticsCollection. */
84
+ /**
85
+ * Per-file and global diagnostics, sorted on read like tsgo's DiagnosticsCollection, which keeps one of
86
+ * each set of equal diagnostics.
87
+ */
82
88
  class DiagnosticCollection {
83
89
  byFile = new Map();
84
90
  sortedFiles = new Set();
85
91
  global = [];
86
92
  globalSorted = true;
87
- /** The diagnostics added since `startLog`, while recording. */
93
+ /** The diagnostics at each file, position, end and code, to find an equal one when adding. */
94
+ byLocation = new Map();
95
+ /** The diagnostics reported since `startLog`, while recording, also those equal to one already added. */
88
96
  log = undefined;
97
+ /** Adds `diagnostic` unless an equal one was added; returns the one the collection holds. */
89
98
  add(diagnostic) {
90
99
  if (this.log !== undefined)
91
100
  this.log.push(diagnostic);
101
+ if (this.added !== undefined)
102
+ this.added.push(diagnostic);
92
103
  const file = diagnostic.file;
104
+ const key = `${file === undefined ? '' : file.fileName}\0${diagnostic.pos}\0${diagnostic.end}\0${diagnostic.code}`;
105
+ const existing = this.byLocation.get(key);
106
+ if (existing === undefined)
107
+ this.byLocation.set(key, [diagnostic]);
108
+ else {
109
+ for (const d of existing)
110
+ if (equalDiagnostics(d, diagnostic))
111
+ return d;
112
+ existing.push(diagnostic);
113
+ }
93
114
  if (file === undefined) {
94
115
  this.global.push(diagnostic);
95
116
  this.globalSorted = false;
96
- return;
117
+ return diagnostic;
97
118
  }
98
119
  let list = this.byFile.get(file.fileName);
99
120
  if (list === undefined) {
@@ -102,6 +123,7 @@ class DiagnosticCollection {
102
123
  }
103
124
  list.push(diagnostic);
104
125
  this.sortedFiles.delete(file.fileName);
126
+ return diagnostic;
105
127
  }
106
128
  forFile(fileName) {
107
129
  const list = this.byFile.get(fileName);
@@ -139,6 +161,8 @@ class DiagnosticCollection {
139
161
  }
140
162
  /** The global diagnostics `withoutNewGlobals` removed. */
141
163
  removedGlobals = 0;
164
+ /** Where results are shared between checker threads (shared-results.ts): every diagnostic added, in order. */
165
+ added = undefined;
142
166
  /** Runs `run`, then removes the global diagnostics it added. */
143
167
  withoutNewGlobals(run) {
144
168
  const outer = this.log;
@@ -157,15 +181,28 @@ class DiagnosticCollection {
157
181
  if (d.file === undefined)
158
182
  globals.add(d);
159
183
  if (globals.size > 0) {
160
- this.removedGlobals += globals.size;
161
184
  let kept = 0;
162
- for (const d of this.global)
185
+ for (const d of this.global) {
163
186
  if (!globals.has(d))
164
187
  this.global[kept++] = d;
188
+ else
189
+ this.forget(d);
190
+ }
191
+ this.removedGlobals += this.global.length - kept;
165
192
  this.global.length = kept;
166
193
  }
167
194
  }
168
195
  }
196
+ /** Removes the global diagnostic `diagnostic` from the location index. */
197
+ forget(diagnostic) {
198
+ const key = `\0${diagnostic.pos}\0${diagnostic.end}\0${diagnostic.code}`;
199
+ const existing = this.byLocation.get(key);
200
+ if (existing === undefined)
201
+ return;
202
+ const at = existing.indexOf(diagnostic);
203
+ if (at >= 0)
204
+ existing.splice(at, 1);
205
+ }
169
206
  /** Records the diagnostics added from now on. */
170
207
  startLog() {
171
208
  this.log = [];
@@ -249,10 +286,20 @@ export class Checker {
249
286
  memberPositionsInLists = new Map();
250
287
  /** The property names of the last instantiation of each such list whose table is built on demand. */
251
288
  memberNamesOfLists = new Map();
289
+ /** The property order of the instantiations of each such list (`NamedMemberOrder`); null where it has none. */
290
+ namedMemberOrdersOfLists = new Map();
252
291
  /** Long lists of inherited properties, by name. */
253
292
  propertiesByName = new Map();
254
293
  /** Number of `typeToString` calls in progress. */
255
294
  serializationLevel = 0;
295
+ /**
296
+ * `typeToString` results by type, enclosing declaration, flags and the type parameter of the variance check in
297
+ * progress: the prints that created no types, which a later print with the same inputs repeats exactly
298
+ * (`typeToString`).
299
+ */
300
+ typeStrings = new Map();
301
+ /** `symbolToString` results by symbol, then by enclosing declaration and flags, kept as `typeStrings` are. */
302
+ symbolStrings = new Map();
256
303
  /** Whether `globalObjectType` is set; global type lookups before it can't suggest `typeof`. */
257
304
  hasGlobalObjectType = false;
258
305
  /** The node being checked, for errors with no better location. */
@@ -286,6 +333,9 @@ export class Checker {
286
333
  * so far; null where a list repeats a name.
287
334
  */
288
335
  propertyListIndexes = new Map();
336
+ // Types, targets and mappers of symbols keep a slot per id: they are dense enough, and read on hot
337
+ // paths. The other symbol columns, which most symbols leave empty, keep only their values
338
+ // (CompactLinkTable).
289
339
  /** The type of a value symbol. */
290
340
  symbolTypes = new LinkTable();
291
341
  /** For instantiated and synthetic symbols, the symbol they come from. */
@@ -293,24 +343,26 @@ export class Checker {
293
343
  /** The mapper of an instantiated symbol or a mapped type property. */
294
344
  symbolMappers = new LinkTable();
295
345
  /** The literal type of a property name. */
296
- symbolNameTypes = new LinkTable();
346
+ symbolNameTypes = new CompactLinkTable();
297
347
  /** The mapped type of a mapped type property, or the union/intersection of a synthetic property. */
298
- symbolContainingTypes = new LinkTable();
348
+ symbolContainingTypes = new CompactLinkTable();
299
349
  /** The key type of a mapped type property. */
300
- symbolKeyTypes = new LinkTable();
350
+ symbolKeyTypes = new CompactLinkTable();
301
351
  /** The property a mapped, spread or synthetic property comes from. */
302
- symbolSyntheticOrigins = new LinkTable();
352
+ symbolSyntheticOrigins = new CompactLinkTable();
303
353
  /** The left and right properties a spread property combines. */
304
- symbolLeftSpreads = new LinkTable();
305
- symbolRightSpreads = new LinkTable();
354
+ symbolLeftSpreads = new CompactLinkTable();
355
+ symbolRightSpreads = new CompactLinkTable();
306
356
  /** Bits of SymbolFlags for the meanings in which a symbol was referenced. */
307
- symbolReferenceKinds = new IntLinkTable();
357
+ symbolReferenceKinds = new CompactIntLinkTable();
308
358
  /** The resolved symbol of an identifier, entity name or call. */
309
- resolvedSymbols = new CompactSymbolLinkTable();
359
+ resolvedSymbols = new CompactLinkTable();
310
360
  /** The resolved type of a type node or expression. */
311
- resolvedTypes = new SparseLinkTable();
361
+ resolvedTypes = new CompactLinkTable();
362
+ /** The type the last completed check of each expression key produced (expr-record.ts). */
363
+ exprCheckRecord = new ExprCheckRecord();
312
364
  /** The resolved signature of a call-like node or a signature declaration. */
313
- resolvedSignatures = new SparseLinkTable();
365
+ resolvedSignatures = new CompactLinkTable();
314
366
  /** Merged symbols, indexed by the id of the symbol merged into them. */
315
367
  mergedSymbols;
316
368
  /**
@@ -360,6 +412,7 @@ export class Checker {
360
412
  unionOfUnionTypes = new Map();
361
413
  /** `unionOfUnionTypes` without an alias, by both ids and the reduction packed into one number. */
362
414
  unionOfUnionTypesById = new Map();
415
+ unionTypesByInputList = new TypeListCache();
363
416
  intersectionTypes = new TypeListCache();
364
417
  tupleTypes = new Map();
365
418
  indexedAccessTypes = new Map();
@@ -480,14 +533,20 @@ export class Checker {
480
533
  globalSymbolCache = new Map();
481
534
  // Resolution stacks for cycle detection (see pushTypeResolution).
482
535
  resolutionStart = 0;
483
- inVarianceComputation = false;
536
+ /** The generic types whose variances are being computed, outermost first. */
537
+ varianceStack = [];
484
538
  // Instantiation
485
539
  instantiationDepth = 0;
540
+ /** The types being instantiated, outermost first: the first `instantiationDepth` entries are current. */
541
+ instantiationStack = [];
542
+ /** The calls being resolved, outermost first: the first `callResolutionDepth` entries are current. */
543
+ callResolutionStack = [];
544
+ callResolutionDepth = 0;
486
545
  instantiationCount = 0;
487
546
  /** Instantiations over the checker's lifetime (statistics). */
488
547
  totalInstantiations = 0;
489
- /** Mappers of the instantiations in progress: the first `activeMapperDepth` entries are live. */
490
- activeMappers = [];
548
+ /** Ids of the mappers of the instantiations in progress: the first `activeMapperDepth` entries are live. */
549
+ activeMapperIds = new Int32Array(16);
491
550
  activeMapperDepth = 0;
492
551
  /** Per active mapper: its instantiations by type id, created on the first nested write. */
493
552
  activeMapperCaches = [];
@@ -502,20 +561,32 @@ export class Checker {
502
561
  /** Empty lists for type arguments that are compared with cached instantiations before any is kept. */
503
562
  freeTypeLists = [];
504
563
  /**
505
- * 1 by type id for the anonymous and mapped types whose declaration has no outer type parameters
564
+ * The ids of the anonymous and mapped types whose declaration has no outer type parameters
506
565
  * to instantiate (`getObjectTypeInstantiation`).
507
566
  */
508
- withoutOuterTypeParameters = new IntLinkTable();
567
+ withoutOuterTypeParameters = new PagedIdSet();
509
568
  conditionalConstraintDepth = 0;
510
569
  suggestionResolver;
511
570
  awaitedTypeStack = [];
512
571
  /** Iteration types by type id and iteration use. */
513
572
  iterationTypesCache = new Map();
514
- /** Whether diagnostics can be deferred to the end of the file being checked. */
515
- saveDeferredDiagnostics = false;
516
- deferredIterationErrors = [];
517
- /** Collision checks waiting for the end of the file (checker-generated-code.ts). */
518
- deferredCollisionChecks = [];
573
+ /**
574
+ * Diagnostics reported after the checks of the file being checked, or before the next global
575
+ * diagnostics are read, in the order they were deferred. Reporting them earlier could resolve types
576
+ * that are being resolved.
577
+ */
578
+ deferredDiagnostics = [];
579
+ /** Defers the diagnostic `report` reports at `node` (`deferredDiagnostics`). */
580
+ deferDiagnostic(node, report) {
581
+ this.deferredDiagnostics.push(report);
582
+ if (this.deferredDiagnosticFiles !== undefined)
583
+ this.deferredDiagnosticFiles.push(this.fileIndex.get(getSourceFileOfNode(node)) ?? -1);
584
+ }
585
+ /**
586
+ * The checked object literals of each file whose members may set deprecated properties of their contextual
587
+ * types, reported when the file's suggestion diagnostics are asked for (`checkObjectLiteralDeprecations`).
588
+ */
589
+ objectLiteralsForDeprecations = new Map();
519
590
  /** Binding patterns whose implied type is being computed as a contextual type. */
520
591
  contextualBindingPatterns = [];
521
592
  /** The binding pattern or assignment pattern that implied each type. */
@@ -572,6 +643,8 @@ export class Checker {
572
643
  flowNodePostSuper = new Map();
573
644
  lastFlowNode = undefined;
574
645
  lastFlowNodeReachable = false;
646
+ /** Symbols whose explicit type is being found, for flow analysis of self-referential `for...of`. */
647
+ resolvingExplicitTypeOfSymbol = new Set();
575
648
  assignmentMarker;
576
649
  primitiveTypeAliasSuggestions = new Map();
577
650
  /** Renamed binding elements in parameters of bodiless signatures, checked for use with their file. */
@@ -595,6 +668,9 @@ export class Checker {
595
668
  ambientModuleSymbols = [];
596
669
  patternAmbientModules = [];
597
670
  patternAmbientModuleAugmentations = new Map();
671
+ /** The pattern module each entry of `patternAmbientModuleAugmentations` augments. */
672
+ patternAmbientModuleAugmentationTargets = new Map();
673
+ moduleImportAttributesTypes = new Map();
598
674
  inferenceCaches = new InferenceCaches();
599
675
  /** The type resolution stack: the first `resolutionDepth` entries are live, later slots are reused. */
600
676
  resolutionTargets = [];
@@ -603,6 +679,28 @@ export class Checker {
603
679
  resolutionDepth = 0;
604
680
  /** The number of resolution cycles found (`pushTypeResolution`). */
605
681
  resolutionCycleCount = 0;
682
+ /**
683
+ * While an `inferTypesFromUnstarted` walk runs: the unions and intersections whose properties
684
+ * `hasUnmatchedProperty` searched before they were resolved. Such a search creates fewer types
685
+ * than one of the resolved properties.
686
+ */
687
+ unresolvedPropertySearches = undefined;
688
+ // The fields of shared results come last, so the fields before keep their places.
689
+ /** TSC_TS_SHARE: the checker thread's sharing with the other checker threads. */
690
+ threadSharing = undefined;
691
+ /**
692
+ * Where results are shared (shared-results.ts): for each conditional type made as a member of the distribution of a
693
+ * conditional type instantiation, that instantiation and the constituent it is for.
694
+ */
695
+ distributedConditionals = undefined;
696
+ /** The same members by `distributedKey`. */
697
+ distributedByKey = undefined;
698
+ /** The conditional types conditional type instantiations resolved to, with the instantiation's root and key. */
699
+ conditionalResults = undefined;
700
+ /** The access flags of the key `getIndexedAccessTypeEx` keeps each indexed access type by. */
701
+ indexedAccessKeyFlags = undefined;
702
+ /** Where results are shared between checker threads (shared-results.ts): the file of each diagnostic deferred. */
703
+ deferredDiagnosticFiles = undefined;
606
704
  constructor(host) {
607
705
  this.host = host;
608
706
  const options = host.getCompilerOptions();
@@ -792,6 +890,15 @@ export class Checker {
792
890
  mergeAmbientModulesAndAugmentations(this);
793
891
  this.modulesMerged = true;
794
892
  this.mergeDiagnostics.push(this.diagnostics.takeLog(), this.suggestionDiagnostics.takeLog());
893
+ // Returns unless this thread was given sharing data (`ThreadSharingData` in its worker data): the
894
+ // main thread, and every thread of a run that didn't share.
895
+ startThreadSharing(this);
896
+ if (this.threadSharing !== undefined) {
897
+ this.distributedConditionals = new Map();
898
+ this.distributedByKey = new Map();
899
+ this.conditionalResults = new Map();
900
+ this.indexedAccessKeyFlags = new Map();
901
+ }
795
902
  }
796
903
  // ---- Public API
797
904
  /** Checks `file` if needed and returns its semantic diagnostics, sorted. */
@@ -803,10 +910,12 @@ export class Checker {
803
910
  /** Checks `file`, including unused identifiers, and returns its suggestion diagnostics. */
804
911
  getSuggestionDiagnostics(file) {
805
912
  checkSourceFile(this, file, true);
913
+ checkObjectLiteralDeprecations(this, file);
806
914
  return this.suggestionDiagnostics.forFile(file.fileName);
807
915
  }
808
916
  /** Diagnostics without a file, such as missing global types. */
809
917
  getGlobalDiagnostics() {
918
+ produceDeferredDiagnostics(this);
810
919
  return this.diagnostics.globals();
811
920
  }
812
921
  /**
@@ -887,15 +996,15 @@ export class Checker {
887
996
  // ---- Diagnostics
888
997
  /** Reports `message` at `node`, or as a global diagnostic without a node. */
889
998
  error(node, message, ...args) {
890
- const diagnostic = createDiagnosticForNode(node, message, args);
891
- this.addDiagnostic(diagnostic);
892
- return diagnostic;
999
+ return this.addDiagnostic(createDiagnosticForNode(node, message, args));
893
1000
  }
1001
+ /** Reports `diagnostic`; returns the equal diagnostic already reported, if any, else `diagnostic`. */
894
1002
  addDiagnostic(diagnostic) {
895
1003
  this.reports++;
896
1004
  // Discard diagnostics created while at the maximum number of nested typeToString calls.
897
1005
  if (this.serializationLevel < maxSerializationLevel)
898
- this.diagnostics.add(diagnostic);
1006
+ return this.diagnostics.add(diagnostic);
1007
+ return diagnostic;
899
1008
  }
900
1009
  addSuggestion(diagnostic) {
901
1010
  this.reports++;
@@ -941,6 +1050,7 @@ export function disposeChecker(c) {
941
1050
  c.sharedSymbolCopies.clear();
942
1051
  c.memberPositionsInLists.clear();
943
1052
  c.memberNamesOfLists.clear();
1053
+ c.namedMemberOrdersOfLists.clear();
944
1054
  c.propertiesByName.clear();
945
1055
  c.symbolAccessibilityCaches = undefined;
946
1056
  c.unresolvedSymbols.clear();
@@ -954,6 +1064,7 @@ export function disposeChecker(c) {
954
1064
  c.unionTypes.clear();
955
1065
  c.unionOfUnionTypes.clear();
956
1066
  c.unionOfUnionTypesById.clear();
1067
+ c.unionTypesByInputList.clear();
957
1068
  c.intersectionTypes.clear();
958
1069
  c.tupleTypes.clear();
959
1070
  c.indexedAccessTypes.clear();
@@ -966,8 +1077,8 @@ export function disposeChecker(c) {
966
1077
  c.cachedTypesById.clear();
967
1078
  c.cachedTypesByPair.clear();
968
1079
  c.iterationTypesCache.clear();
969
- c.deferredIterationErrors = [];
970
- c.deferredCollisionChecks = [];
1080
+ c.deferredDiagnostics = [];
1081
+ c.objectLiteralsForDeprecations.clear();
971
1082
  c.errorTypes.clear();
972
1083
  c.globalTypeCache.clear();
973
1084
  c.globalSymbolCache.clear();
@@ -978,8 +1089,11 @@ export function disposeChecker(c) {
978
1089
  c.flowNodePostSuper.clear();
979
1090
  c.primitiveTypeAliasSuggestions.clear();
980
1091
  c.patternAmbientModuleAugmentations.clear();
1092
+ c.patternAmbientModuleAugmentationTargets.clear();
1093
+ c.moduleImportAttributesTypes.clear();
981
1094
  c.sharedFlowTypes.length = 0;
982
1095
  c.relationComparers = [];
1096
+ c.inferenceCaches.unstartedInferences.clear();
983
1097
  }
984
1098
  /** A diagnostic at `node`'s error range, or a global one without a node. */
985
1099
  export function createDiagnosticForNode(node, message, args) {