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
@@ -29,13 +29,26 @@
29
29
  // | checker-elaboration.ts | reporting relation errors at the failing subexpression |
30
30
  // | checker-grammar.ts | grammar checks |
31
31
  // | checker-flow.ts | control flow narrowing |
32
- import type { DeferredCollisionCheck } from './checker-generated-code.js';
32
+ import type { ModuleSpecifierResult } from './node-builder-names.js';
33
33
  import type { EmitHelperFileLinks } from './checker-emit-helpers.js';
34
34
  import { sideOf } from './side-state.js';
35
35
  import type { Node, PatternAmbientModule, SourceFile } from './ast.js';
36
- import { CompactSymbolLinkTable, IntLinkTable, LinkTable, PagedIdSet, SparseLinkTable } from './link-tables.js';
36
+ import {
37
+ CompactIntLinkTable,
38
+ CompactLinkTable,
39
+ IntLinkTable,
40
+ LinkTable,
41
+ PagedIdSet,
42
+ SparseLinkTable,
43
+ } from './link-tables.js';
37
44
  import { getErrorRangeForNode, getSourceFileOfNode } from './binder-utilities.js';
38
- import { Diagnostic, type DiagnosticMessage, Diagnostics, compareDiagnostics } from './diagnostics.js';
45
+ import {
46
+ Diagnostic,
47
+ type DiagnosticMessage,
48
+ Diagnostics,
49
+ compareDiagnostics,
50
+ equalDiagnostics,
51
+ } from './diagnostics.js';
39
52
  import {
40
53
  type CompilerOptions,
41
54
  ModuleKind,
@@ -51,6 +64,7 @@ import {
51
64
  IntrinsicType,
52
65
  LiteralType,
53
66
  MemberNames,
67
+ NamedMemberOrder,
54
68
  NodeLinks,
55
69
  ObjectFlags,
56
70
  ObjectType,
@@ -70,6 +84,8 @@ import {
70
84
  type ConditionalType,
71
85
  type InterfaceType,
72
86
  type TypeChecking,
87
+ type ConditionalResultKey,
88
+ type DistributedConditional,
73
89
  } from './checker-types.js';
74
90
  import { getBaseTypes } from './checker-declared-types.js';
75
91
  import type { ModuleResolution } from './checker-modules.js';
@@ -101,19 +117,28 @@ import {
101
117
  mergeAmbientModulesAndAugmentations,
102
118
  } from './checker-symbols.js';
103
119
  import { PermissiveMapper, ReportingMapper, RestrictiveMapper, UniqueLiteralMapper } from './instantiation.js';
104
- import { Relation, RelationKey, type InternedRelationKey, type Relater, TypeComparer } from './relations.js';
105
- import { TypeNodeVisitor, checkSourceFile } from './checker-source-file.js';
120
+ import {
121
+ Relation,
122
+ RelationKey,
123
+ type InternedRelationKey,
124
+ type Relater,
125
+ TypeComparer,
126
+ type VarianceStackEntry,
127
+ } from './relations.js';
128
+ import { TypeNodeVisitor, checkSourceFile, produceDeferredDiagnostics } from './checker-source-file.js';
129
+ import { checkObjectLiteralDeprecations } from './checker-deprecation.js';
106
130
  import { InferenceCaches } from './checker-inference.js';
107
131
  import { AssignmentMarker, type FlowLoopInfo, type FlowState, type FlowWalk } from './checker-narrowing.js';
108
132
  import type { FlowNode, FlowReduceLabel } from './flow.js';
109
133
  import { JsxState } from './checker-jsx.js';
110
- import type { DeferredIterationError, IterationTypes } from './checker-iteration.js';
134
+ import type { IterationTypes } from './checker-iteration.js';
111
135
  import type { SpreadIndices } from './checker-contextual.js';
112
136
  import { SourceFileMetadata, getEmitModuleFormatOfFile } from './program-utilities.js';
113
137
  import type { GrammarChecker } from './checker-grammar.js';
114
138
  import type { ResolvedModule } from './module-resolution-types.js';
115
139
  import type { ModuleSpecifierHost } from './module-specifiers.js';
116
140
  import type { PropertyListIndex } from './checker-members.js';
141
+ import { shareThreads, startThreadSharing, type ThreadSharing } from './shared-results.js';
117
142
 
118
143
  /** What the checker needs from a program. */
119
144
  export abstract class CheckerHost {
@@ -186,22 +211,36 @@ export abstract class CheckerHost {
186
211
  }
187
212
  }
188
213
 
189
- /** Per-file and global diagnostics, sorted on read like tsgo's DiagnosticsCollection. */
214
+ /**
215
+ * Per-file and global diagnostics, sorted on read like tsgo's DiagnosticsCollection, which keeps one of
216
+ * each set of equal diagnostics.
217
+ */
190
218
  class DiagnosticCollection {
191
219
  private readonly byFile = new Map<string, Diagnostic[]>();
192
220
  private readonly sortedFiles = new Set<string>();
193
221
  private readonly global: Diagnostic[] = [];
194
222
  private globalSorted = true;
195
- /** The diagnostics added since `startLog`, while recording. */
223
+ /** The diagnostics at each file, position, end and code, to find an equal one when adding. */
224
+ private readonly byLocation = new Map<string, Diagnostic[]>();
225
+ /** The diagnostics reported since `startLog`, while recording, also those equal to one already added. */
196
226
  private log: Diagnostic[] | undefined = undefined;
197
227
 
198
- add(diagnostic: Diagnostic): void {
228
+ /** Adds `diagnostic` unless an equal one was added; returns the one the collection holds. */
229
+ add(diagnostic: Diagnostic): Diagnostic {
199
230
  if (this.log !== undefined) this.log.push(diagnostic);
231
+ if (this.added !== undefined) this.added.push(diagnostic);
200
232
  const file = diagnostic.file;
233
+ const key = `${file === undefined ? '' : file.fileName}\0${diagnostic.pos}\0${diagnostic.end}\0${diagnostic.code}`;
234
+ const existing = this.byLocation.get(key);
235
+ if (existing === undefined) this.byLocation.set(key, [diagnostic]);
236
+ else {
237
+ for (const d of existing) if (equalDiagnostics(d, diagnostic)) return d;
238
+ existing.push(diagnostic);
239
+ }
201
240
  if (file === undefined) {
202
241
  this.global.push(diagnostic);
203
242
  this.globalSorted = false;
204
- return;
243
+ return diagnostic;
205
244
  }
206
245
  let list = this.byFile.get(file.fileName);
207
246
  if (list === undefined) {
@@ -210,6 +249,7 @@ class DiagnosticCollection {
210
249
  }
211
250
  list.push(diagnostic);
212
251
  this.sortedFiles.delete(file.fileName);
252
+ return diagnostic;
213
253
  }
214
254
 
215
255
  forFile(fileName: string): Diagnostic[] {
@@ -247,6 +287,8 @@ class DiagnosticCollection {
247
287
 
248
288
  /** The global diagnostics `withoutNewGlobals` removed. */
249
289
  removedGlobals = 0;
290
+ /** Where results are shared between checker threads (shared-results.ts): every diagnostic added, in order. */
291
+ added: Diagnostic[] | undefined = undefined;
250
292
 
251
293
  /** Runs `run`, then removes the global diagnostics it added. */
252
294
  withoutNewGlobals<T>(run: () => T): T {
@@ -261,14 +303,26 @@ class DiagnosticCollection {
261
303
  const globals = new Set<Diagnostic>();
262
304
  for (const d of added) if (d.file === undefined) globals.add(d);
263
305
  if (globals.size > 0) {
264
- this.removedGlobals += globals.size;
265
306
  let kept = 0;
266
- for (const d of this.global) if (!globals.has(d)) this.global[kept++] = d;
307
+ for (const d of this.global) {
308
+ if (!globals.has(d)) this.global[kept++] = d;
309
+ else this.forget(d);
310
+ }
311
+ this.removedGlobals += this.global.length - kept;
267
312
  this.global.length = kept;
268
313
  }
269
314
  }
270
315
  }
271
316
 
317
+ /** Removes the global diagnostic `diagnostic` from the location index. */
318
+ private forget(diagnostic: Diagnostic): void {
319
+ const key = `\0${diagnostic.pos}\0${diagnostic.end}\0${diagnostic.code}`;
320
+ const existing = this.byLocation.get(key);
321
+ if (existing === undefined) return;
322
+ const at = existing.indexOf(diagnostic);
323
+ if (at >= 0) existing.splice(at, 1);
324
+ }
325
+
272
326
  /** Records the diagnostics added from now on. */
273
327
  startLog(): void {
274
328
  this.log = [];
@@ -360,10 +414,20 @@ export class Checker implements TypeChecking {
360
414
  readonly memberPositionsInLists = new Map<Symbol[], Map<string, number>>();
361
415
  /** The property names of the last instantiation of each such list whose table is built on demand. */
362
416
  readonly memberNamesOfLists = new Map<Symbol[], MemberNames>();
417
+ /** The property order of the instantiations of each such list (`NamedMemberOrder`); null where it has none. */
418
+ readonly namedMemberOrdersOfLists = new Map<Symbol[], NamedMemberOrder | null>();
363
419
  /** Long lists of inherited properties, by name. */
364
420
  readonly propertiesByName = new Map<Symbol[], Map<string, Symbol>>();
365
421
  /** Number of `typeToString` calls in progress. */
366
422
  serializationLevel = 0;
423
+ /**
424
+ * `typeToString` results by type, enclosing declaration, flags and the type parameter of the variance check in
425
+ * progress: the prints that created no types, which a later print with the same inputs repeats exactly
426
+ * (`typeToString`).
427
+ */
428
+ readonly typeStrings = new Map<string, string>();
429
+ /** `symbolToString` results by symbol, then by enclosing declaration and flags, kept as `typeStrings` are. */
430
+ readonly symbolStrings = new Map<Symbol, Map<string, string>>();
367
431
  /** Whether `globalObjectType` is set; global type lookups before it can't suggest `typeof`. */
368
432
  hasGlobalObjectType = false;
369
433
  /** The node being checked, for errors with no better location. */
@@ -381,7 +445,7 @@ export class Checker implements TypeChecking {
381
445
  */
382
446
  modulesMerged = false;
383
447
  /** Module specifiers of `import("…")` types, by module symbol id, importing file path and resolution mode. */
384
- readonly moduleSpecifiers = new Map<string, string>();
448
+ readonly moduleSpecifiers = new Map<string, ModuleSpecifierResult>();
385
449
  /** Specifier generation for hosts without a program. */
386
450
  fallbackModuleSpecifierHost: ModuleSpecifierHost | undefined = undefined;
387
451
 
@@ -399,6 +463,9 @@ export class Checker implements TypeChecking {
399
463
  * so far; null where a list repeats a name.
400
464
  */
401
465
  readonly propertyListIndexes = new Map<Symbol[], PropertyListIndex | number | null>();
466
+ // Types, targets and mappers of symbols keep a slot per id: they are dense enough, and read on hot
467
+ // paths. The other symbol columns, which most symbols leave empty, keep only their values
468
+ // (CompactLinkTable).
402
469
  /** The type of a value symbol. */
403
470
  readonly symbolTypes = new LinkTable<Type>();
404
471
  /** For instantiated and synthetic symbols, the symbol they come from. */
@@ -406,24 +473,24 @@ export class Checker implements TypeChecking {
406
473
  /** The mapper of an instantiated symbol or a mapped type property. */
407
474
  readonly symbolMappers = new LinkTable<TypeMapper>();
408
475
  /** The literal type of a property name. */
409
- readonly symbolNameTypes = new LinkTable<Type>();
476
+ readonly symbolNameTypes = new CompactLinkTable<Type>();
410
477
  /** The mapped type of a mapped type property, or the union/intersection of a synthetic property. */
411
- readonly symbolContainingTypes = new LinkTable<Type>();
478
+ readonly symbolContainingTypes = new CompactLinkTable<Type>();
412
479
  /** The key type of a mapped type property. */
413
- readonly symbolKeyTypes = new LinkTable<Type>();
480
+ readonly symbolKeyTypes = new CompactLinkTable<Type>();
414
481
  /** The property a mapped, spread or synthetic property comes from. */
415
- readonly symbolSyntheticOrigins = new LinkTable<Symbol>();
482
+ readonly symbolSyntheticOrigins = new CompactLinkTable<Symbol>();
416
483
  /** The left and right properties a spread property combines. */
417
- readonly symbolLeftSpreads = new LinkTable<Symbol>();
418
- readonly symbolRightSpreads = new LinkTable<Symbol>();
484
+ readonly symbolLeftSpreads = new CompactLinkTable<Symbol>();
485
+ readonly symbolRightSpreads = new CompactLinkTable<Symbol>();
419
486
  /** Bits of SymbolFlags for the meanings in which a symbol was referenced. */
420
- readonly symbolReferenceKinds = new IntLinkTable();
487
+ readonly symbolReferenceKinds = new CompactIntLinkTable();
421
488
  /** The resolved symbol of an identifier, entity name or call. */
422
- readonly resolvedSymbols = new CompactSymbolLinkTable();
489
+ readonly resolvedSymbols = new CompactLinkTable<Symbol>();
423
490
  /** The resolved type of a type node or expression. */
424
- readonly resolvedTypes = new SparseLinkTable<Type>();
491
+ readonly resolvedTypes = new CompactLinkTable<Type>();
425
492
  /** The resolved signature of a call-like node or a signature declaration. */
426
- readonly resolvedSignatures = new SparseLinkTable<Signature>();
493
+ readonly resolvedSignatures = new CompactLinkTable<Signature>();
427
494
  /** Merged symbols, indexed by the id of the symbol merged into them. */
428
495
  readonly mergedSymbols: Map<number, Symbol>;
429
496
  /**
@@ -600,15 +667,21 @@ export class Checker implements TypeChecking {
600
667
 
601
668
  // Resolution stacks for cycle detection (see pushTypeResolution).
602
669
  resolutionStart = 0;
603
- inVarianceComputation = false;
670
+ /** The generic types whose variances are being computed, outermost first. */
671
+ varianceStack: VarianceStackEntry[] = [];
604
672
 
605
673
  // Instantiation
606
674
  instantiationDepth = 0;
675
+ /** The types being instantiated, outermost first: the first `instantiationDepth` entries are current. */
676
+ readonly instantiationStack: Type[] = [];
677
+ /** The calls being resolved, outermost first: the first `callResolutionDepth` entries are current. */
678
+ readonly callResolutionStack: Node[] = [];
679
+ callResolutionDepth = 0;
607
680
  instantiationCount = 0;
608
681
  /** Instantiations over the checker's lifetime (statistics). */
609
682
  totalInstantiations = 0;
610
- /** Mappers of the instantiations in progress: the first `activeMapperDepth` entries are live. */
611
- readonly activeMappers: TypeMapper[] = [];
683
+ /** Ids of the mappers of the instantiations in progress: the first `activeMapperDepth` entries are live. */
684
+ activeMapperIds = new Int32Array(16);
612
685
  activeMapperDepth = 0;
613
686
  /** Per active mapper: its instantiations by type id, created on the first nested write. */
614
687
  readonly activeMapperCaches: (Map<number, Type> | undefined)[] = [];
@@ -623,21 +696,35 @@ export class Checker implements TypeChecking {
623
696
  /** Empty lists for type arguments that are compared with cached instantiations before any is kept. */
624
697
  readonly freeTypeLists: Type[][] = [];
625
698
  /**
626
- * 1 by type id for the anonymous and mapped types whose declaration has no outer type parameters
699
+ * The ids of the anonymous and mapped types whose declaration has no outer type parameters
627
700
  * to instantiate (`getObjectTypeInstantiation`).
628
701
  */
629
- readonly withoutOuterTypeParameters = new IntLinkTable();
702
+ readonly withoutOuterTypeParameters = new PagedIdSet();
630
703
  conditionalConstraintDepth = 0;
631
704
 
632
705
  readonly suggestionResolver: SuggestionNameResolver;
633
706
  readonly awaitedTypeStack: number[] = [];
634
707
  /** Iteration types by type id and iteration use. */
635
708
  readonly iterationTypesCache = new Map<number, IterationTypes>();
636
- /** Whether diagnostics can be deferred to the end of the file being checked. */
637
- saveDeferredDiagnostics = false;
638
- deferredIterationErrors: DeferredIterationError[] = [];
639
- /** Collision checks waiting for the end of the file (checker-generated-code.ts). */
640
- deferredCollisionChecks: DeferredCollisionCheck[] = [];
709
+ /**
710
+ * Diagnostics reported after the checks of the file being checked, or before the next global
711
+ * diagnostics are read, in the order they were deferred. Reporting them earlier could resolve types
712
+ * that are being resolved.
713
+ */
714
+ deferredDiagnostics: (() => void)[] = [];
715
+
716
+ /** Defers the diagnostic `report` reports at `node` (`deferredDiagnostics`). */
717
+ deferDiagnostic(node: Node, report: () => void): void {
718
+ this.deferredDiagnostics.push(report);
719
+ if (this.deferredDiagnosticFiles !== undefined)
720
+ this.deferredDiagnosticFiles.push(getSourceFileOfNode(node).fileName);
721
+ }
722
+
723
+ /**
724
+ * The checked object literals of each file whose members may set deprecated properties of their contextual
725
+ * types, reported when the file's suggestion diagnostics are asked for (`checkObjectLiteralDeprecations`).
726
+ */
727
+ readonly objectLiteralsForDeprecations = new Map<SourceFile, Node[]>();
641
728
  /** Binding patterns whose implied type is being computed as a contextual type. */
642
729
  readonly contextualBindingPatterns: Node[] = [];
643
730
  /** The binding pattern or assignment pattern that implied each type. */
@@ -690,11 +777,13 @@ export class Checker implements TypeChecking {
690
777
  flowTypeCache: Map<Node, Type> | undefined = undefined;
691
778
  flowInvocationCount = 0;
692
779
  /** The reduce labels being passed, innermost last; each limits its target label's antecedents. */
693
- readonly flowReduceLabels: FlowReduceLabel[] = [];
780
+ flowReduceLabels: FlowReduceLabel[] = [];
694
781
  readonly flowNodeReachable = new Map<FlowNode, boolean>();
695
782
  readonly flowNodePostSuper = new Map<FlowNode, boolean>();
696
783
  lastFlowNode: FlowNode | undefined = undefined;
697
784
  lastFlowNodeReachable = false;
785
+ /** Symbols whose explicit type is being found, for flow analysis of self-referential `for...of`. */
786
+ readonly resolvingExplicitTypeOfSymbol = new Set<Symbol>();
698
787
  readonly assignmentMarker: AssignmentMarker;
699
788
  readonly primitiveTypeAliasSuggestions = new Map<string, Symbol>();
700
789
 
@@ -721,6 +810,9 @@ export class Checker implements TypeChecking {
721
810
  readonly ambientModuleSymbols: Symbol[] = [];
722
811
  readonly patternAmbientModules: PatternAmbientModule[] = [];
723
812
  readonly patternAmbientModuleAugmentations = new Map<string, Symbol>();
813
+ /** The pattern module each entry of `patternAmbientModuleAugmentations` augments. */
814
+ readonly patternAmbientModuleAugmentationTargets = new Map<string, Symbol>();
815
+ readonly moduleImportAttributesTypes = new Map<Symbol, Type>();
724
816
 
725
817
  readonly inferenceCaches = new InferenceCaches();
726
818
  /** The type resolution stack: the first `resolutionDepth` entries are live, later slots are reused. */
@@ -730,6 +822,28 @@ export class Checker implements TypeChecking {
730
822
  resolutionDepth = 0;
731
823
  /** The number of resolution cycles found (`pushTypeResolution`). */
732
824
  resolutionCycleCount = 0;
825
+ /**
826
+ * While an `inferTypesFromUnstarted` walk runs: the unions and intersections whose properties
827
+ * `hasUnmatchedProperty` searched before they were resolved. Such a search creates fewer types
828
+ * than one of the resolved properties.
829
+ */
830
+ unresolvedPropertySearches: Type[] | undefined = undefined;
831
+ // The fields of shared results come last, so the fields before keep their places.
832
+ /** TSC_TS_SHARE: the checker thread's sharing with the other checker threads. */
833
+ threadSharing: ThreadSharing | undefined = undefined;
834
+ /**
835
+ * Where results are shared (shared-results.ts): for each conditional type made as a member of the distribution of a
836
+ * conditional type instantiation, that instantiation and the constituent it is for.
837
+ */
838
+ distributedConditionals: Map<Type, DistributedConditional> | undefined = undefined;
839
+ /** The same members by `distributedKey`. */
840
+ distributedByKey: Map<string, Type> | undefined = undefined;
841
+ /** The conditional types conditional type instantiations resolved to, with the instantiation's root and key. */
842
+ conditionalResults: Map<Type, ConditionalResultKey> | undefined = undefined;
843
+ /** The access flags of the key `getIndexedAccessTypeEx` keeps each indexed access type by. */
844
+ indexedAccessKeyFlags: Map<Type, number> | undefined = undefined;
845
+ /** Where results are shared between checker threads (shared-results.ts): the file of each diagnostic deferred. */
846
+ deferredDiagnosticFiles: string[] | undefined = undefined;
733
847
 
734
848
  constructor(host: CheckerHost) {
735
849
  this.host = host;
@@ -942,6 +1056,13 @@ export class Checker implements TypeChecking {
942
1056
  mergeAmbientModulesAndAugmentations(this);
943
1057
  this.modulesMerged = true;
944
1058
  this.mergeDiagnostics.push(this.diagnostics.takeLog(), this.suggestionDiagnostics.takeLog());
1059
+ if (shareThreads) startThreadSharing(this);
1060
+ if (this.threadSharing !== undefined) {
1061
+ this.distributedConditionals = new Map<Type, DistributedConditional>();
1062
+ this.distributedByKey = new Map<string, Type>();
1063
+ this.conditionalResults = new Map<Type, ConditionalResultKey>();
1064
+ this.indexedAccessKeyFlags = new Map<Type, number>();
1065
+ }
945
1066
  }
946
1067
 
947
1068
  // ---- Public API
@@ -956,11 +1077,13 @@ export class Checker implements TypeChecking {
956
1077
  /** Checks `file`, including unused identifiers, and returns its suggestion diagnostics. */
957
1078
  getSuggestionDiagnostics(file: SourceFile): Diagnostic[] {
958
1079
  checkSourceFile(this, file, true);
1080
+ checkObjectLiteralDeprecations(this, file);
959
1081
  return this.suggestionDiagnostics.forFile(file.fileName);
960
1082
  }
961
1083
 
962
1084
  /** Diagnostics without a file, such as missing global types. */
963
1085
  getGlobalDiagnostics(): Diagnostic[] {
1086
+ produceDeferredDiagnostics(this);
964
1087
  return this.diagnostics.globals();
965
1088
  }
966
1089
 
@@ -1080,15 +1203,15 @@ export class Checker implements TypeChecking {
1080
1203
 
1081
1204
  /** Reports `message` at `node`, or as a global diagnostic without a node. */
1082
1205
  error(node: Node | undefined, message: DiagnosticMessage, ...args: string[]): Diagnostic {
1083
- const diagnostic = createDiagnosticForNode(node, message, args);
1084
- this.addDiagnostic(diagnostic);
1085
- return diagnostic;
1206
+ return this.addDiagnostic(createDiagnosticForNode(node, message, args));
1086
1207
  }
1087
1208
 
1088
- addDiagnostic(diagnostic: Diagnostic): void {
1209
+ /** Reports `diagnostic`; returns the equal diagnostic already reported, if any, else `diagnostic`. */
1210
+ addDiagnostic(diagnostic: Diagnostic): Diagnostic {
1089
1211
  this.reports++;
1090
1212
  // Discard diagnostics created while at the maximum number of nested typeToString calls.
1091
- if (this.serializationLevel < maxSerializationLevel) this.diagnostics.add(diagnostic);
1213
+ if (this.serializationLevel < maxSerializationLevel) return this.diagnostics.add(diagnostic);
1214
+ return diagnostic;
1092
1215
  }
1093
1216
 
1094
1217
  addSuggestion(diagnostic: Diagnostic): void {
@@ -1134,6 +1257,7 @@ export function disposeChecker(c: Checker): void {
1134
1257
  c.sharedSymbolCopies.clear();
1135
1258
  c.memberPositionsInLists.clear();
1136
1259
  c.memberNamesOfLists.clear();
1260
+ c.namedMemberOrdersOfLists.clear();
1137
1261
  c.propertiesByName.clear();
1138
1262
  c.symbolAccessibilityCaches = undefined;
1139
1263
  c.unresolvedSymbols.clear();
@@ -1159,8 +1283,8 @@ export function disposeChecker(c: Checker): void {
1159
1283
  c.cachedTypesById.clear();
1160
1284
  c.cachedTypesByPair.clear();
1161
1285
  c.iterationTypesCache.clear();
1162
- c.deferredIterationErrors = [];
1163
- c.deferredCollisionChecks = [];
1286
+ c.deferredDiagnostics = [];
1287
+ c.objectLiteralsForDeprecations.clear();
1164
1288
  c.errorTypes.clear();
1165
1289
  c.globalTypeCache.clear();
1166
1290
  c.globalSymbolCache.clear();
@@ -1171,8 +1295,11 @@ export function disposeChecker(c: Checker): void {
1171
1295
  c.flowNodePostSuper.clear();
1172
1296
  c.primitiveTypeAliasSuggestions.clear();
1173
1297
  c.patternAmbientModuleAugmentations.clear();
1298
+ c.patternAmbientModuleAugmentationTargets.clear();
1299
+ c.moduleImportAttributesTypes.clear();
1174
1300
  c.sharedFlowTypes.length = 0;
1175
1301
  c.relationComparers = [];
1302
+ c.inferenceCaches.unstartedInferences.clear();
1176
1303
  }
1177
1304
 
1178
1305
  export const enum VarianceReporting {
@@ -8,20 +8,18 @@ import {
8
8
  buildOption,
9
9
  buildOptionsByName,
10
10
  compilerOptionsByName,
11
- watchOptionsByName,
12
11
  type OptionDeclaration,
13
12
  type OptionNameMap,
14
13
  } from './option-declarations.js';
15
14
  import {
16
15
  setBuildOption,
17
16
  setCompilerOption,
18
- setWatchOption,
19
17
  type BuildOptions,
20
18
  type CompilerOptions,
21
19
  type OptionValue,
22
- type WatchOptions,
23
20
  } from './options.js';
24
- import { getNormalizedAbsolutePath } from './path.js';
21
+ import { getNormalizedAbsolutePath, isNetworkPathValue } from './path.js';
22
+ import { getSpellingSuggestion } from './spelling.js';
25
23
 
26
24
  /** Reads response files. */
27
25
  export abstract class CommandLineHost {
@@ -33,7 +31,6 @@ export abstract class CommandLineHost {
33
31
 
34
32
  export interface ParsedCommandLine {
35
33
  readonly options: CompilerOptions;
36
- readonly watchOptions: WatchOptions;
37
34
  readonly fileNames: readonly string[];
38
35
  readonly errors: readonly Diagnostic[];
39
36
  /** Options as written, keyed by declaration name in first-seen order. Paths are not made absolute. */
@@ -44,7 +41,6 @@ export interface ParsedBuildCommandLine {
44
41
  readonly buildOptions: BuildOptions;
45
42
  /** Only options shared with `tsc`, and `build`. */
46
43
  readonly compilerOptions: CompilerOptions;
47
- readonly watchOptions: WatchOptions;
48
44
  /** Project paths as given; `["."]` if none. */
49
45
  readonly projects: readonly string[];
50
46
  readonly errors: readonly Diagnostic[];
@@ -55,6 +51,8 @@ export interface ParsedBuildCommandLine {
55
51
  interface ParserMode {
56
52
  readonly options: OptionNameMap;
57
53
  readonly unknownOption: DiagnosticMessage;
54
+ /** An unknown option with a spelling suggestion among `options`. */
55
+ readonly unknownOptionDidYouMean: DiagnosticMessage;
58
56
  readonly missingArgument: DiagnosticMessage;
59
57
  /** Options of the other mode, reported with `wrongMode` instead of as unknown. */
60
58
  readonly otherModeOptions?: OptionNameMap;
@@ -64,6 +62,7 @@ interface ParserMode {
64
62
  const compilerMode: ParserMode = {
65
63
  options: compilerOptionsByName,
66
64
  unknownOption: Diagnostics.Unknown_compiler_option_0,
65
+ unknownOptionDidYouMean: Diagnostics.Unknown_compiler_option_0_Did_you_mean_1,
67
66
  missingArgument: Diagnostics.Compiler_option_0_expects_an_argument,
68
67
  otherModeOptions: buildOptionsByName,
69
68
  wrongMode: Diagnostics.Compiler_option_0_may_only_be_used_with_build,
@@ -72,29 +71,22 @@ const compilerMode: ParserMode = {
72
71
  const buildMode: ParserMode = {
73
72
  options: buildOptionsByName,
74
73
  unknownOption: Diagnostics.Unknown_build_option_0,
74
+ unknownOptionDidYouMean: Diagnostics.Unknown_build_option_0_Did_you_mean_1,
75
75
  missingArgument: Diagnostics.Build_option_0_requires_a_value_of_type_1,
76
76
  otherModeOptions: compilerOptionsByName,
77
77
  wrongMode: Diagnostics.Compiler_option_0_may_not_be_used_with_build,
78
78
  };
79
79
 
80
- const watchMode: ParserMode = {
81
- options: watchOptionsByName,
82
- unknownOption: Diagnostics.Unknown_watch_option_0,
83
- missingArgument: Diagnostics.Watch_option_0_requires_a_value_of_type_1,
84
- };
85
-
86
80
  export function parseCommandLine(args: readonly string[], host: CommandLineHost): ParsedCommandLine {
87
81
  const parser = new CommandLineParser(compilerMode, host);
88
82
  parser.parseArguments(args);
89
83
  const cwd = host.currentDirectory;
90
84
  const options: CompilerOptions = {};
91
- const watchOptions: WatchOptions = {};
92
85
  for (const [name, value] of parser.raw) {
93
86
  if (parser.droppedLists.has(name)) continue;
94
87
  setCompilerOption(options, name, toAbsolutePaths(name, value, cwd));
95
- setWatchOption(watchOptions, name, value);
96
88
  }
97
- return { options, watchOptions, fileNames: parser.fileNames, errors: parser.errors, raw: parser.raw };
89
+ return { options, fileNames: parser.fileNames, errors: parser.errors, raw: parser.raw };
98
90
  }
99
91
 
100
92
  export function parseBuildCommandLine(args: readonly string[], host: CommandLineHost): ParsedBuildCommandLine {
@@ -102,7 +94,6 @@ export function parseBuildCommandLine(args: readonly string[], host: CommandLine
102
94
  parser.parseArguments(args);
103
95
  const buildOptions: BuildOptions = {};
104
96
  const compilerOptions: CompilerOptions = {};
105
- const watchOptions: WatchOptions = {};
106
97
  for (const [name, value] of parser.raw) {
107
98
  if (parser.droppedLists.has(name)) continue;
108
99
  const declaration = buildOptionsByName.get(name);
@@ -110,7 +101,6 @@ export function parseBuildCommandLine(args: readonly string[], host: CommandLine
110
101
  setCompilerOption(compilerOptions, name, value);
111
102
  }
112
103
  setBuildOption(buildOptions, name, value);
113
- setWatchOption(watchOptions, name, value);
114
104
  }
115
105
  const errors = parser.errors;
116
106
  const { clean, force, verbose, dry } = buildOptions;
@@ -126,7 +116,6 @@ export function parseBuildCommandLine(args: readonly string[], host: CommandLine
126
116
  return {
127
117
  buildOptions,
128
118
  compilerOptions,
129
- watchOptions,
130
119
  projects: parser.fileNames.length > 0 ? parser.fileNames : ['.'],
131
120
  errors,
132
121
  raw: parser.raw,
@@ -156,6 +145,8 @@ class CommandLineParser {
156
145
  * though `raw` (and so `--init`) has `[]`.
157
146
  */
158
147
  readonly droppedLists = new Set<string>();
148
+ /** Response files being read, so one that includes itself is skipped. */
149
+ private readonly responseFiles = new Set<string>();
159
150
 
160
151
  constructor(
161
152
  private readonly mode: ParserMode,
@@ -173,13 +164,8 @@ class CommandLineParser {
173
164
  } else if (arg.startsWith('-')) {
174
165
  const name = arg.startsWith('--') ? arg.slice(2) : arg.slice(1);
175
166
  const option = this.mode.options.find(name, true);
176
- if (option !== undefined) {
177
- i = this.parseOptionValue(args, i, option, this.mode);
178
- } else {
179
- const watchOption = watchOptionsByName.find(name, true);
180
- if (watchOption !== undefined) i = this.parseOptionValue(args, i, watchOption, watchMode);
181
- else this.errors.push(this.unknownOptionError(name, arg));
182
- }
167
+ if (option !== undefined) i = this.parseOptionValue(args, i, option, this.mode);
168
+ else this.errors.push(this.unknownOptionError(name, arg));
183
169
  } else {
184
170
  this.fileNames.push(arg);
185
171
  }
@@ -193,12 +179,21 @@ class CommandLineParser {
193
179
  other.name === 'build' ? Diagnostics.Option_build_must_be_the_first_command_line_argument : this.mode.wrongMode;
194
180
  return createCompilerDiagnostic(message, name);
195
181
  }
182
+ const suggestion = getSpellingSuggestion(name, this.mode.options.names());
183
+ if (suggestion !== '') return createCompilerDiagnostic(this.mode.unknownOptionDidYouMean, arg, suggestion);
196
184
  return createCompilerDiagnostic(this.mode.unknownOption, arg);
197
185
  }
198
186
 
199
187
  /** Splits a response file into arguments at whitespace; `"` quotes an argument. */
200
188
  private parseResponseFile(fileName: string): void {
201
189
  const path = getNormalizedAbsolutePath(fileName, this.host.currentDirectory);
190
+ if (this.responseFiles.has(path)) return;
191
+ this.responseFiles.add(path);
192
+ this.readResponseFile(fileName, path);
193
+ this.responseFiles.delete(path);
194
+ }
195
+
196
+ private readResponseFile(fileName: string, path: string): void {
202
197
  const text = this.host.readFile(path);
203
198
  if (text === undefined) {
204
199
  this.errors.push(createCompilerDiagnostic(Diagnostics.Cannot_read_file_0, path));
@@ -217,10 +212,12 @@ class CommandLineParser {
217
212
  args.push(text.slice(start + 1, pos));
218
213
  pos++;
219
214
  } else {
220
- this.errors.push(createCompilerDiagnostic(Diagnostics.Unterminated_quoted_string_in_response_file_0, path));
215
+ // The file name as written.
216
+ this.errors.push(
217
+ createCompilerDiagnostic(Diagnostics.Unterminated_quoted_string_in_response_file_0, fileName),
218
+ );
221
219
  }
222
220
  } else {
223
- // tsgo panics when the file ends in an argument; tsc accepts it.
224
221
  while (pos < text.length && text.charCodeAt(pos) > 32) pos++;
225
222
  args.push(text.slice(start, pos));
226
223
  }
@@ -300,7 +297,10 @@ class CommandLineParser {
300
297
  this.raw.set(name, next !== 'false');
301
298
  return next === 'true' || next === 'false' ? i + 1 : i;
302
299
  case 'string':
303
- if (this.validateString(option, next)) this.raw.set(name, next);
300
+ if (!this.validateString(option, next)) return i + 1;
301
+ if (option.isFilePath === true && isNetworkPathValue(next!, this.host.currentDirectory))
302
+ this.errors.push(createCompilerDiagnostic(Diagnostics.Network_path_0_is_not_supported, next!));
303
+ else this.raw.set(name, next);
304
304
  return i + 1;
305
305
  case 'list': {
306
306
  const errorCount = this.errors.length;