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
@@ -30,6 +30,7 @@ import {
30
30
  MetaProperty,
31
31
  ModifierFlags,
32
32
  ModuleDeclaration,
33
+ getNodeId,
33
34
  type Node,
34
35
  NonNullExpression,
35
36
  NodeFlags,
@@ -590,7 +591,16 @@ class Binder extends NodeVisitor {
590
591
  if (name !== undefined) {
591
592
  if (isAmbientModule(node)) {
592
593
  if (isGlobalScopeAugmentation(node)) return InternalSymbolName.Global;
593
- return '"' + nodeText(name) + '"';
594
+ const moduleName = nodeText(name);
595
+ // A pattern module with import attributes has its own symbol, named after the attributes node's id: it merges
596
+ // only with pattern modules of the same pattern and identical attributes, which the checker decides. The id
597
+ // is written at a fixed width so that names sort in declaration order.
598
+ const attributes = (node as ModuleDeclaration).attributes;
599
+ if (attributes !== undefined && hasSingleStar(moduleName))
600
+ return (
601
+ internalSymbolNamePrefix + '"' + moduleName + '"pattern@' + String(getNodeId(attributes)).padStart(10, '0')
602
+ );
603
+ return '"' + moduleName + '"';
594
604
  }
595
605
  if (name.kind === SyntaxKind.PrivateIdentifier) {
596
606
  // Private names are only allowed in classes; elsewhere there is already a parse error.
@@ -1116,7 +1126,6 @@ class Binder extends NodeVisitor {
1116
1126
  if (this.seenThisKeyword) node.flags |= NodeFlags.ContainsThis;
1117
1127
  if (node.kind === SyntaxKind.SourceFile) {
1118
1128
  node.flags |= this.emitFlags;
1119
- (node as SourceFile).endFlowNode = this.currentFlow;
1120
1129
  }
1121
1130
  const returnTarget = this.currentReturnTarget;
1122
1131
  if (returnTarget !== undefined) {
@@ -1516,11 +1525,19 @@ class Binder extends NodeVisitor {
1516
1525
  }
1517
1526
 
1518
1527
  bindForStatement(node: ForStatement): void {
1528
+ this.bindOptional(node.initializer);
1529
+ if (this.currentFlow === this.unreachableFlow) {
1530
+ // An initializer that ends the flow (a throwing IIFE) would leave the loop label only the
1531
+ // incrementor's back edge: a cycle with no entry. Bind the rest as unreachable.
1532
+ this.bindOptional(node.condition);
1533
+ this.bind(node.statement);
1534
+ this.bindOptional(node.incrementor);
1535
+ return;
1536
+ }
1519
1537
  const preLoopLabel = this.setContinueTarget(node, this.createLoopLabel());
1520
1538
  const preBodyLabel = this.createBranchLabel();
1521
1539
  const preIncrementorLabel = this.createBranchLabel();
1522
1540
  const postLoopLabel = this.createBranchLabel();
1523
- this.bindOptional(node.initializer);
1524
1541
  this.addAntecedent(preLoopLabel, this.currentFlow);
1525
1542
  this.currentFlow = preLoopLabel;
1526
1543
  this.bindCondition(node.condition, preBodyLabel, postLoopLabel);
@@ -1534,9 +1551,15 @@ class Binder extends NodeVisitor {
1534
1551
  }
1535
1552
 
1536
1553
  bindForInOrForOfStatement(node: ForInOrOfStatement): void {
1554
+ this.bind(node.expression);
1555
+ if (this.currentFlow === this.unreachableFlow) {
1556
+ // As for a `for` initializer: an expression that ends the flow leaves the loop unreachable.
1557
+ this.bind(node.initializer);
1558
+ this.bind(node.statement);
1559
+ return;
1560
+ }
1537
1561
  const preLoopLabel = this.setContinueTarget(node, this.createLoopLabel());
1538
1562
  const postLoopLabel = this.createBranchLabel();
1539
- this.bind(node.expression);
1540
1563
  this.addAntecedent(preLoopLabel, this.currentFlow);
1541
1564
  this.currentFlow = preLoopLabel;
1542
1565
  if (node.kind === SyntaxKind.ForOfStatement) this.bindOptional(node.awaitModifier);
@@ -1980,6 +2003,12 @@ class Binder extends NodeVisitor {
1980
2003
  this.file.patternAmbientModules,
1981
2004
  new PatternAmbientModule(text, starIndex, symbol),
1982
2005
  );
2006
+ else if (node.attributes !== undefined)
2007
+ this.errorOnNode(
2008
+ name,
2009
+ Diagnostics.An_ambient_module_declaration_with_import_attributes_must_use_a_pattern_name_with_an_Asterisk_character,
2010
+ noArgs,
2011
+ );
1983
2012
  }
1984
2013
  return;
1985
2014
  }
@@ -2711,3 +2740,9 @@ export function findUseStrictPrologue(file: SourceFile, statements: readonly Nod
2711
2740
  }
2712
2741
  return undefined;
2713
2742
  }
2743
+
2744
+ /** Whether a module name is a pattern with exactly one `*`. */
2745
+ function hasSingleStar(text: string): boolean {
2746
+ const star = text.indexOf('*');
2747
+ return star >= 0 && text.indexOf('*', star + 1) < 0;
2748
+ }
@@ -0,0 +1,157 @@
1
+ // The limits the process's cgroup puts on the machine a run sees: the whole CPUs its CPU quota allows
2
+ // and the smallest memory limit of its cgroup and that cgroup's ancestors. `os.availableParallelism()`
3
+ // already lowers its count to a quota of one CPU or more; the native runtime's count ignores a quota
4
+ // below one, which truncates to no CPUs there and falls back to the affinity mask, so the quota is read
5
+ // here too. The memory limit only sometimes reaches `process.constrainedMemory()` (libuv reads the
6
+ // process's own cgroup, and scriptc's runtime only the root of the cgroup mount, which is the process's
7
+ // own cgroup only inside a cgroup namespace).
8
+ import { readFileSync } from 'node:fs';
9
+ import { availableParallelism } from 'node:os';
10
+
11
+ /**
12
+ * The CPUs this process may run on: `os.availableParallelism()`, lowered to the whole CPUs its cgroup
13
+ * quota allows (`cgroupCpuQuota`). Where the runtime already applies the quota this returns the same
14
+ * count; a quota below one CPU, which the native runtime's count ignores, lowers it to one. The text and
15
+ * root parameters are for the tests.
16
+ */
17
+ export function availableCpus(membershipText: string = readMembership(), root: string = '/sys/fs/cgroup'): number {
18
+ const cpus = Math.max(1, availableParallelism());
19
+ const quota = cgroupCpuQuota(membershipText, root);
20
+ return quota > 0 && quota < cpus ? quota : cpus;
21
+ }
22
+
23
+ /**
24
+ * The whole CPUs this process's cgroup and its ancestors allow, or 0 where there is none or it is
25
+ * unknown: `cpu.max` under cgroup v2, `cpu.cfs_quota_us` and `cpu.cfs_period_us` under v1. A quota
26
+ * below one CPU counts as one, the least a run can use. The text and root parameters are for the tests.
27
+ */
28
+ export function cgroupCpuQuota(membershipText: string = readMembership(), root: string = '/sys/fs/cgroup'): number {
29
+ let quota = 0;
30
+ const lower = (value: number): void => {
31
+ if (value > 0 && (quota === 0 || value < quota)) quota = value;
32
+ };
33
+ forEachCgroupDirectory(membershipText, root, '', (directory) => {
34
+ lower(cpuMaxValue(directory + '/cpu.max'));
35
+ });
36
+ forEachCgroupDirectory(membershipText, root, 'cpu', (directory) => {
37
+ // The kernel's default period, for a mount that lost the file but kept its quota.
38
+ const period = numberIn(directory + '/cpu.cfs_period_us') || 100_000;
39
+ lower(wholeCpus(numberIn(directory + '/cpu.cfs_quota_us'), period));
40
+ });
41
+ return quota;
42
+ }
43
+
44
+ /**
45
+ * The smallest memory limit of this process's cgroup and its ancestors (Linux), or 0 where there is
46
+ * none or it is unknown: `memory.max` and `memory.high` under cgroup v2, `memory.limit_in_bytes` under
47
+ * v1. The text and root parameters are for the tests.
48
+ */
49
+ export function cgroupMemoryLimit(membershipText: string = readMembership(), root: string = '/sys/fs/cgroup'): number {
50
+ let limit = 0;
51
+ const lower = (value: number): void => {
52
+ if (value > 0 && (limit === 0 || value < limit)) limit = value;
53
+ };
54
+ forEachCgroupDirectory(membershipText, root, '', (directory) => {
55
+ lower(memoryLimitValue(directory + '/memory.max'));
56
+ lower(memoryLimitValue(directory + '/memory.high'));
57
+ });
58
+ forEachCgroupDirectory(membershipText, root, 'memory', (directory) => {
59
+ lower(memoryLimitValue(directory + '/memory.limit_in_bytes'));
60
+ });
61
+ return limit;
62
+ }
63
+
64
+ /**
65
+ * Calls `visit` with the directory of this process's cgroup for `controller` and of each of its
66
+ * ancestors, deepest first: the unified hierarchy for `''` (cgroup v2, whose line lists no
67
+ * controllers), or the controller's own mount for a v1 line that lists it.
68
+ */
69
+ function forEachCgroupDirectory(
70
+ membershipText: string,
71
+ root: string,
72
+ controller: string,
73
+ visit: (directory: string) => void,
74
+ ): void {
75
+ for (const line of membershipText.split('\n')) {
76
+ // "0::/path" (v2), "N:cpu:/path" or "N:cpu,cpuacct:/path" (v1).
77
+ const first = line.indexOf(':');
78
+ const second = line.indexOf(':', first + 1);
79
+ if (first < 0 || second < 0) continue;
80
+ const controllers = line.substring(first + 1, second);
81
+ const path = line.substring(second + 1);
82
+ if (controller === '') {
83
+ if (controllers !== '') continue;
84
+ forEachAncestor(path, (directory) => visit(root + directory));
85
+ } else if (controllers.split(',').indexOf(controller) >= 0) {
86
+ forEachAncestor(path, (directory) => visit(root + '/' + controller + directory));
87
+ }
88
+ }
89
+ }
90
+
91
+ /**
92
+ * Calls `visit` with `path` and each of its ancestors, deepest first ("/a/b/c", "/a/b", "/a", ""): a
93
+ * cgroup's limits apply to every process below it, in cgroup v1 as in v2.
94
+ */
95
+ function forEachAncestor(path: string, visit: (directory: string) => void): void {
96
+ for (let directory = path; ; directory = directory.substring(0, directory.lastIndexOf('/'))) {
97
+ visit(directory === '/' ? '' : directory);
98
+ if (directory === '' || directory.lastIndexOf('/') < 0) break;
99
+ }
100
+ }
101
+
102
+ /** `/proc/self/cgroup`, or an empty text where it cannot be read (no cgroup limits). */
103
+ function readMembership(): string {
104
+ try {
105
+ return readFileSync('/proc/self/cgroup', 'utf8');
106
+ } catch {
107
+ return '';
108
+ }
109
+ }
110
+
111
+ /**
112
+ * The whole CPUs a cgroup v2 quota file allows, or 0 for `max`, an unreadable file or no number:
113
+ * `cpu.max` holds "MAX PERIOD" in microseconds.
114
+ */
115
+ function cpuMaxValue(file: string): number {
116
+ let text: string;
117
+ try {
118
+ text = readFileSync(file, 'utf8').trim();
119
+ } catch {
120
+ return 0;
121
+ }
122
+ if (text === '' || text === 'max') return 0;
123
+ const parts = text.split(/\s+/).map(Number);
124
+ return wholeCpus(parts[0]!, parts[1] ?? 100_000);
125
+ }
126
+
127
+ /** A cgroup memory limit file's value in bytes, or 0 for `max`, an unreadable file or no number. */
128
+ function memoryLimitValue(file: string): number {
129
+ let text: string;
130
+ try {
131
+ text = readFileSync(file, 'utf8').trim();
132
+ } catch {
133
+ return 0;
134
+ }
135
+ if (text === '' || text === 'max') return 0;
136
+ const value = Number(text);
137
+ // cgroup v1 reports no limit as a page-aligned value near 2^63.
138
+ return Number.isFinite(value) && value > 0 && value < 2 ** 62 ? value : 0;
139
+ }
140
+
141
+ /** A file's number, or 0 where it cannot be read or holds none (a v1 quota of -1 is no quota). */
142
+ function numberIn(file: string): number {
143
+ let text: string;
144
+ try {
145
+ text = readFileSync(file, 'utf8').trim();
146
+ } catch {
147
+ return 0;
148
+ }
149
+ const value = Number(text);
150
+ return Number.isFinite(value) && value > 0 ? value : 0;
151
+ }
152
+
153
+ /** The whole CPUs `quota` microseconds per `period` microseconds allow, at least one where there is one. */
154
+ function wholeCpus(quota: number, period: number): number {
155
+ if (!Number.isFinite(quota) || !Number.isFinite(period) || quota <= 0 || period <= 0) return 0;
156
+ return Math.max(1, Math.floor(quota / period));
157
+ }
@@ -295,8 +295,8 @@ export function isIdentifierPart(codePoint: number, languageVariant = LanguageVa
295
295
  isWordCharacter(codePoint) ||
296
296
  codePoint === CharacterCodes.$ ||
297
297
  (codePoint > CharacterCodes.maxAsciiCharacter && isUnicodeIdentifierPart(codePoint)) ||
298
- (languageVariant === LanguageVariant.JSX &&
299
- (codePoint === CharacterCodes.minus || codePoint === CharacterCodes.colon))
298
+ // `:` is part of a JSX namespaced name, but not of a JSX identifier.
299
+ (languageVariant === LanguageVariant.JSX && codePoint === CharacterCodes.minus)
300
300
  );
301
301
  }
302
302
 
@@ -43,6 +43,7 @@ import {
43
43
  isOptionalChain,
44
44
  isOutermostOptionalChain,
45
45
  isDottedName,
46
+ isFunctionExpressionOrArrowFunction,
46
47
  } from './binder-utilities.js';
47
48
  import { Diagnostic, type DiagnosticMessage, Diagnostics, chainDiagnostic } from './diagnostics.js';
48
49
  import { resolveInstanceofExpression } from './checker-operators.js';
@@ -147,6 +148,7 @@ import {
147
148
  checkNonNullType,
148
149
  checkNonNullTypeEx,
149
150
  checkTypeQueryExpression,
151
+ getResolvedSymbol,
150
152
  } from './checker-expressions.js';
151
153
  import { IterationUse, checkIteratedTypeOrElementType } from './checker-iteration.js';
152
154
  import { isContextSensitive } from './checker-functions.js';
@@ -182,6 +184,7 @@ import {
182
184
  everyInferenceHasCandidates,
183
185
  someInferenceHasCandidates,
184
186
  inferTypes,
187
+ inferTypesFromUnstarted,
185
188
  isConstTypeVariable,
186
189
  isMutableArrayLikeType,
187
190
  } from './checker-inference.js';
@@ -207,7 +210,14 @@ import {
207
210
  resolveJsxOpeningLikeElement,
208
211
  } from './checker-jsx.js';
209
212
  import { isCommonJSRequire, resolveExternalModuleTypeByLiteral } from './checker-javascript.js';
210
- import { declarationCount, getDeclarations, InternalSymbolName, type Symbol, SymbolFlags } from './symbol.js';
213
+ import {
214
+ copyDeclarations,
215
+ declarationCount,
216
+ getDeclarations,
217
+ InternalSymbolName,
218
+ type Symbol,
219
+ SymbolFlags,
220
+ } from './symbol.js';
211
221
 
212
222
  /** The type of an optional chain's expression with the chain's `undefined` removed. */
213
223
  export function getOptionalExpressionType(c: Checker, exprType: Type, expression: Node): Type {
@@ -430,7 +440,7 @@ function resolveNewExpression(c: Checker, node: NewExpression, checkMode: CheckM
430
440
  }
431
441
  const constructSignatures = getSignaturesOfType(c, expressionType, SignatureKind.Construct);
432
442
  if (constructSignatures.length !== 0) {
433
- if (!isConstructorAccessible(c, node, constructSignatures[0]!)) return resolveErrorCall(c, node);
443
+ if (!isConstructorAccessible(c, node, constructSignatures)) return resolveErrorCall(c, node);
434
444
  if (someSignature(constructSignatures, (s) => (s.flags & SignatureFlags.Abstract) !== 0)) {
435
445
  c.error(node, Diagnostics.Cannot_create_an_instance_of_an_abstract_class);
436
446
  return resolveErrorCall(c, node);
@@ -892,6 +902,8 @@ class CallState {
892
902
  candidates: Signature[];
893
903
  argCheckMode: CheckMode = CheckMode.Normal;
894
904
  isSingleNonGenericCandidate = false;
905
+ /** The call is resolved while its own resolution is in progress. */
906
+ recursiveResolution = false;
895
907
  candidatesForArgumentError: Signature[] = [];
896
908
  candidateForArgumentArityError: Signature | undefined = undefined;
897
909
  candidateForTypeArgumentError: Signature | undefined = undefined;
@@ -933,8 +945,19 @@ export function resolveCall(
933
945
  s.argCheckMode = CheckMode.SkipContextSensitive;
934
946
  // A subtype pass picks the best overload; assignability decides whether the call is an error.
935
947
  let result: Signature | undefined = undefined;
948
+ const callResolutionDepth = c.callResolutionDepth;
949
+ const callResolutionStack = c.callResolutionStack;
950
+ for (let i = 0; i < callResolutionDepth; i++)
951
+ if (callResolutionStack[i] === node) {
952
+ s.recursiveResolution = true;
953
+ break;
954
+ }
955
+ if (callResolutionDepth < callResolutionStack.length) callResolutionStack[callResolutionDepth] = node;
956
+ else callResolutionStack.push(node);
957
+ c.callResolutionDepth = callResolutionDepth + 1;
936
958
  if (candidates.length > 1) result = chooseOverload(c, s, c.subtypeRelation);
937
959
  if (result === undefined) result = chooseOverload(c, s, c.assignableRelation);
960
+ c.callResolutionDepth = callResolutionDepth;
938
961
  if (result !== undefined) return result;
939
962
  result = getCandidateForOverloadFailure(c, node, s.candidates, s.args, checkMode);
940
963
  // Cache now so that error reporting below handles circularities like getResolvedSignature would.
@@ -1031,7 +1054,11 @@ function chooseOverload(c: Checker, s: CallState, relation: Relation): Signature
1031
1054
  c,
1032
1055
  candidate.typeParameters,
1033
1056
  candidate,
1034
- isInJSFile(s.node) ? InferenceFlags.AnyDefault : InferenceFlags.None,
1057
+ // A recursive resolution of a call with one candidate skips constraint checks during inference, which
1058
+ // would otherwise report circularities.
1059
+ (s.recursiveResolution && s.candidates.length === 1
1060
+ ? InferenceFlags.NoConstraintChecks
1061
+ : InferenceFlags.None) | (isInJSFile(s.node) ? InferenceFlags.AnyDefault : InferenceFlags.None),
1035
1062
  undefined,
1036
1063
  );
1037
1064
  typeArgumentTypes = inferTypeArguments(
@@ -1408,13 +1435,13 @@ function inferTypeArguments(
1408
1435
  )
1409
1436
  : instantiatedType;
1410
1437
  // Return type inferences have the lowest priority.
1411
- inferTypes(
1438
+ inferTypesFromUnstarted(
1412
1439
  c,
1440
+ signature,
1413
1441
  context.inferences,
1414
1442
  inferenceSourceType,
1415
1443
  inferenceTargetType,
1416
1444
  InferencePriority.ReturnType,
1417
- false,
1418
1445
  );
1419
1446
  }
1420
1447
  // A separate pass for the mapper used to instantiate generic contextual types, from the outer
@@ -1422,7 +1449,14 @@ function inferTypeArguments(
1422
1449
  const returnContext = createInferenceContext(c, signature.typeParameters, signature, context.flags, undefined);
1423
1450
  const outerReturnMapper = outerContext !== undefined ? createOuterReturnMapper(c, outerContext) : undefined;
1424
1451
  const returnSourceType = instantiateType(c, contextualType, outerReturnMapper);
1425
- inferTypes(c, returnContext.inferences, returnSourceType, inferenceTargetType, InferencePriority.None, false);
1452
+ inferTypesFromUnstarted(
1453
+ c,
1454
+ signature,
1455
+ returnContext.inferences,
1456
+ returnSourceType,
1457
+ inferenceTargetType,
1458
+ InferencePriority.None,
1459
+ );
1426
1460
  context.returnMapper = someInferenceHasCandidates(returnContext.inferences)
1427
1461
  ? getMapperFromContext(cloneInferredPartOfContext(c, returnContext))
1428
1462
  : undefined;
@@ -1708,6 +1742,26 @@ function withHeadMessage(diagnostic: Diagnostic, headMessage: DiagnosticMessage
1708
1742
  return headMessage !== undefined ? chainDiagnostic(diagnostic, headMessage) : diagnostic;
1709
1743
  }
1710
1744
 
1745
+ /** Whether `node` calls the `resolve` parameter of an executor passed to the global `new Promise`. */
1746
+ function isPromiseResolveArityError(c: Checker, node: Node): boolean {
1747
+ if (node.kind !== SyntaxKind.CallExpression) return false;
1748
+ const callee = getExpression(node)!;
1749
+ if (callee.kind !== SyntaxKind.Identifier) return false;
1750
+ const symbol = resolveName(c, callee, getText(callee), SymbolFlags.Value, undefined, false, false);
1751
+ const declaration = symbol?.valueDeclaration;
1752
+ if (
1753
+ declaration === undefined ||
1754
+ declaration.kind !== SyntaxKind.Parameter ||
1755
+ !isFunctionExpressionOrArrowFunction(declaration.parent!) ||
1756
+ declaration.parent!.parent?.kind !== SyntaxKind.NewExpression
1757
+ )
1758
+ return false;
1759
+ const constructor = getExpression(declaration.parent!.parent!);
1760
+ if (constructor === undefined || constructor.kind !== SyntaxKind.Identifier) return false;
1761
+ const globalPromiseSymbol = getGlobalValueSymbol(c, 'Promise', false);
1762
+ return globalPromiseSymbol !== undefined && getResolvedSymbol(c, constructor) === globalPromiseSymbol;
1763
+ }
1764
+
1711
1765
  function getArgumentArityError(
1712
1766
  c: Checker,
1713
1767
  node: Node,
@@ -1750,7 +1804,16 @@ function getArgumentArityError(
1750
1804
  : minCount < maxCount
1751
1805
  ? minCount + '-' + maxCount
1752
1806
  : String(minCount);
1807
+ // `resolve()` without an argument, where `resolve` is the parameter of a `new Promise` executor.
1808
+ const isVoidPromiseError =
1809
+ !hasRestParameter && parameterRange === '1' && args.length === 0 && isPromiseResolveArityError(c, node);
1753
1810
  const errorNode = getErrorNodeForCallNode(node);
1811
+ if (isVoidPromiseError && isInJSFile(node))
1812
+ return createDiagnosticForNode(
1813
+ errorNode,
1814
+ Diagnostics.Expected_1_argument_but_got_0_new_Promise_needs_a_JSDoc_hint_to_produce_a_resolve_that_can_be_called_without_arguments,
1815
+ [],
1816
+ );
1754
1817
  const message =
1755
1818
  node.kind === SyntaxKind.Decorator
1756
1819
  ? hasRestParameter
@@ -1758,7 +1821,9 @@ function getArgumentArityError(
1758
1821
  : Diagnostics.The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_0
1759
1822
  : hasRestParameter
1760
1823
  ? Diagnostics.Expected_at_least_0_arguments_but_got_1
1761
- : Diagnostics.Expected_0_arguments_but_got_1;
1824
+ : isVoidPromiseError
1825
+ ? Diagnostics.Expected_0_arguments_but_got_1_Did_you_forget_to_include_void_in_your_type_argument_to_Promise
1826
+ : Diagnostics.Expected_0_arguments_but_got_1;
1762
1827
  if (minCount < args.length && args.length < maxCount)
1763
1828
  // Between min and max, but no overload matches.
1764
1829
  return withHeadMessage(
@@ -2106,10 +2171,13 @@ class InstantiationExpressionInstantiator {
2106
2171
  if (resolved.callSignatures.length !== 0 || resolved.constructSignatures.length !== 0) this.hasSignatures = true;
2107
2172
  if (callSignatures.length !== 0 || constructSignatures.length !== 0) this.hasApplicableSignature = true;
2108
2173
  if (callSignatures !== resolved.callSignatures || constructSignatures !== resolved.constructSignatures) {
2174
+ // A symbol of its own, with the declarations of the instantiated type's symbol.
2175
+ const symbol = c.newSymbol(SymbolFlags.None, InternalSymbolName.InstantiationExpression);
2176
+ if (t.symbol !== undefined) copyDeclarations(symbol, t.symbol);
2109
2177
  const result = newObjectType(
2110
2178
  c,
2111
2179
  ObjectFlags.Anonymous | ObjectFlags.InstantiationExpressionType,
2112
- c.newSymbol(SymbolFlags.None, InternalSymbolName.InstantiationExpression),
2180
+ symbol,
2113
2181
  ) as InstantiationExpressionType;
2114
2182
  setStructuredTypeMembers(c, result, resolved.members, callSignatures, constructSignatures, resolved.indexInfos);
2115
2183
  result.node = this.node;
@@ -46,7 +46,7 @@ import {
46
46
  isPrivateIdentifierClassElementDeclaration,
47
47
  isStatic,
48
48
  } from './binder-utilities.js';
49
- import { isFunctionLike, nodeIsMissing, nodeIsPresent } from './ast-utilities.js';
49
+ import { isFunctionLike, isInJSFile, nodeIsMissing, nodeIsPresent } from './ast-utilities.js';
50
50
  import { ScriptTarget, getEmitScriptTarget, getUseDefineForClassFields } from './options.js';
51
51
  import { hasDynamicName, hasLateBindableName } from './checker-utilities.js';
52
52
  import { type DiagnosticMessage, Diagnostics } from './diagnostics.js';
@@ -78,7 +78,13 @@ import { getSymbolOfDeclaration } from './checker-symbols.js';
78
78
  import { getOptionalType, getTypeOfSymbol } from './checker-symbol-types.js';
79
79
  import { convertAutoToAny, getFlowTypeOfReference } from './checker-narrowing.js';
80
80
  import { TypeFacts, hasTypeFacts } from './checker-flow.js';
81
- import { getIndexInfosOfType, getSignaturesOfType, getTypeOfPropertyOfType } from './checker-members.js';
81
+ import {
82
+ getIndexInfosOfType,
83
+ getPropertiesOfType,
84
+ getSignaturesOfType,
85
+ getTypeOfPropertyOfType,
86
+ } from './checker-members.js';
87
+ import { isConstructorDeclaredThisProperty } from './checker-javascript.js';
82
88
  import {
83
89
  checkJSDocLinksOfNode,
84
90
  checkNodeDeferred,
@@ -91,7 +97,7 @@ import {
91
97
  checkExportsOnMergedDeclarations,
92
98
  } from './checker-declarations.js';
93
99
  import { checkFunctionLikeBody } from './checker-functions.js';
94
- import { checkJSDocFullSignature } from './checker-jsdoc.js';
100
+ import { checkJSDocFullSignature, checkJSDocFullSignatureType } from './checker-jsdoc.js';
95
101
  import { checkComputedPropertyName } from './checker-expressions.js';
96
102
  import { checkFunctionOrConstructorSymbol, checkFunctionOrMethodSymbols } from './checker-overloads.js';
97
103
  import {
@@ -100,6 +106,8 @@ import {
100
106
  checkInterfaceHeritage,
101
107
  } from './checker-heritage.js';
102
108
  import { checkDecorators, getFirstTransformableStaticClassElement } from './checker-decorators.js';
109
+ import { getTypeOfNode } from './checker-services.js';
110
+ import { IdentifierName } from './identifier-name.js';
103
111
 
104
112
  export function checkClassDeclaration(c: Checker, node: Node): void {
105
113
  checkClassLikeDeclaration(c, node);
@@ -148,6 +156,23 @@ export function checkClassLikeDeferred(c: Checker, node: Node): void {
148
156
 
149
157
  function checkClassMembers(c: Checker, node: Node): void {
150
158
  for (const member of getMembers(node)!.nodes) checkClassMember(c, member);
159
+ checkConstructorDeclaredProperties(c, node);
160
+ }
161
+
162
+ /**
163
+ * Resolves the types of a JavaScript class's properties declared by `this.x` assignments in its
164
+ * constructor, so the diagnostics of their initializers don't depend on which use is checked first.
165
+ */
166
+ function checkConstructorDeclaredProperties(c: Checker, node: Node): void {
167
+ if (!isInJSFile(node)) return;
168
+ const symbol = getSymbolOfDeclaration(c, node);
169
+ if (symbol === undefined) return;
170
+ for (const property of getPropertiesOfType(c, getDeclaredTypeOfSymbol(c, symbol)))
171
+ if (
172
+ isConstructorDeclaredThisProperty(c, property) &&
173
+ c.symbolLinks(property).thisAssignmentLocation!.parent === node
174
+ )
175
+ getTypeOfSymbol(c, property);
151
176
  }
152
177
 
153
178
  function checkClassLikeDeclaration(c: Checker, node: Node): void {
@@ -241,6 +266,7 @@ function checkClassMember(c: Checker, member: Node): void {
241
266
  if (symbol !== undefined && member.kind !== SyntaxKind.Constructor) getTypeOfSymbol(c, symbol);
242
267
  checkFunctionLikeBody(c, member);
243
268
  if (member.kind === SyntaxKind.MethodDeclaration) {
269
+ checkJSDocFullSignatureType(c, member);
244
270
  checkJSDocFullSignature(c, member);
245
271
  checkFunctionOrMethodSymbols(c, member);
246
272
  if (hasSyntacticModifier(member, ModifierFlags.Abstract) && getBody(member) !== undefined)
@@ -563,7 +589,7 @@ function newThisPropertyReference(symbol: Symbol, container: Node, flowNode: Flo
563
589
  const name = symbol.name;
564
590
  let accessName: Node;
565
591
  if (name.startsWith('\ufffe#')) accessName = new PrivateIdentifier(name.substring(name.indexOf('@') + 1));
566
- else accessName = new Identifier(name);
592
+ else accessName = new Identifier(new IdentifierName(name));
567
593
  const thisExpression = new KeywordExpression(SyntaxKind.ThisKeyword);
568
594
  const reference = new PropertyAccessExpression(thisExpression, undefined, accessName, NodeFlags.None);
569
595
  thisExpression.parent = reference;
@@ -612,35 +638,64 @@ function containsUndefinedType(t: Type): boolean {
612
638
  return (first.flags & TypeFlags.Undefined) !== 0;
613
639
  }
614
640
 
615
- /** Whether `new` at `node` may call a constructor, reporting private and protected ones out of reach. */
616
- export function isConstructorAccessible(c: Checker, node: Node, signature: Signature | undefined): boolean {
617
- if (signature === undefined || signature.declaration === undefined) return true;
618
- const declaration = signature.declaration;
619
- const modifiers = getModifierFlags(declaration) & ModifierFlags.NonPublicAccessibilityModifier;
620
- // Public constructors and constructor functions are always accessible.
621
- if (modifiers === 0 || declaration.kind !== SyntaxKind.Constructor) return true;
622
- const classSymbol = getSymbol(declaration.parent!)!;
623
- const declaringClassDeclaration = getClassLikeDeclarationOfSymbol(classSymbol);
624
- const declaringClass = getDeclaredTypeOfSymbol(c, classSymbol);
625
- // Private and protected constructors are only callable within their class, or subclasses if protected.
626
- for (let container = getContainingClass(node); container !== undefined; container = getContainingClass(container))
627
- if (container === declaringClassDeclaration) return true;
628
- const containingClass = getContainingClass(node);
629
- if (containingClass !== undefined && (modifiers & ModifierFlags.Protected) !== 0) {
630
- const containingType = getDeclaredTypeOfSymbol(c, getSymbol(containingClass)!);
631
- if (typeHasProtectedAccessibleBase(c, classSymbol, containingType)) return true;
641
+ /** A constructor that `node` may not call: the modifiers that forbid it, and the class that declares it. */
642
+ export class ConstructorAccessibilityError {
643
+ constructor(
644
+ readonly kind: ModifierFlags,
645
+ readonly declaringClass: Type,
646
+ ) {}
647
+ }
648
+
649
+ /**
650
+ * The first of `signatures` whose constructor `node` may not call because of the modifiers in `modifiersMask`:
651
+ * private and protected constructors are only callable within their class, or subclasses if protected.
652
+ */
653
+ export function getConstructorAccessibilityError(
654
+ c: Checker,
655
+ node: Node,
656
+ signatures: readonly Signature[],
657
+ modifiersMask: ModifierFlags,
658
+ ): ConstructorAccessibilityError | undefined {
659
+ for (const signature of signatures) {
660
+ const declaration = signature.declaration;
661
+ if (declaration === undefined) continue;
662
+ const modifiers = getModifierFlags(declaration) & modifiersMask;
663
+ // Public constructors and constructor functions are always accessible.
664
+ if (modifiers === 0 || declaration.kind !== SyntaxKind.Constructor) continue;
665
+ const classSymbol = getSymbol(declaration.parent!)!;
666
+ const declaringClassDeclaration = getClassLikeDeclarationOfSymbol(classSymbol);
667
+ let withinClass = false;
668
+ for (let container = getContainingClass(node); container !== undefined; container = getContainingClass(container))
669
+ if (container === declaringClassDeclaration) {
670
+ withinClass = true;
671
+ break;
672
+ }
673
+ if (withinClass) continue;
674
+ const containingClass = getContainingClass(node);
675
+ if (containingClass !== undefined && (modifiers & ModifierFlags.Protected) !== 0) {
676
+ const containingType = getTypeOfNode(c, containingClass);
677
+ if (typeHasProtectedAccessibleBase(c, classSymbol, containingType)) continue;
678
+ }
679
+ return new ConstructorAccessibilityError(modifiers, getDeclaredTypeOfSymbol(c, classSymbol));
632
680
  }
633
- if ((modifiers & ModifierFlags.Private) !== 0)
681
+ return undefined;
682
+ }
683
+
684
+ /** Whether `new` at `node` may call the constructors of `signatures`, reporting private and protected ones out of reach. */
685
+ export function isConstructorAccessible(c: Checker, node: Node, signatures: readonly Signature[]): boolean {
686
+ const error = getConstructorAccessibilityError(c, node, signatures, ModifierFlags.NonPublicAccessibilityModifier);
687
+ if (error === undefined) return true;
688
+ if ((error.kind & ModifierFlags.Private) !== 0)
634
689
  c.error(
635
690
  node,
636
691
  Diagnostics.Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration,
637
- typeToString(c, declaringClass),
692
+ typeToString(c, error.declaringClass),
638
693
  );
639
- if ((modifiers & ModifierFlags.Protected) !== 0)
694
+ if ((error.kind & ModifierFlags.Protected) !== 0)
640
695
  c.error(
641
696
  node,
642
697
  Diagnostics.Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration,
643
- typeToString(c, declaringClass),
698
+ typeToString(c, error.declaringClass),
644
699
  );
645
700
  return false;
646
701
  }