tsc-ts 0.0.4 → 0.0.6

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 (584) hide show
  1. package/README.md +34 -2
  2. package/dist/api/compiler/ast-utilities.d.ts +82 -0
  3. package/dist/api/compiler/ast-utilities.js +462 -0
  4. package/dist/api/compiler/ast.d.ts +2351 -0
  5. package/dist/api/compiler/ast.js +11212 -0
  6. package/dist/api/compiler/astnav.d.ts +37 -0
  7. package/dist/api/compiler/astnav.js +767 -0
  8. package/dist/api/compiler/binder-utilities.d.ts +182 -0
  9. package/dist/api/compiler/binder-utilities.js +1241 -0
  10. package/dist/api/compiler/binder.d.ts +33 -0
  11. package/dist/api/compiler/binder.js +2359 -0
  12. package/dist/api/compiler/character-codes.d.ts +161 -0
  13. package/dist/api/compiler/character-codes.js +160 -0
  14. package/dist/api/compiler/checker-calls.d.ts +46 -0
  15. package/dist/api/compiler/checker-calls.js +1641 -0
  16. package/dist/api/compiler/checker-classes.d.ts +30 -0
  17. package/dist/api/compiler/checker-classes.js +582 -0
  18. package/dist/api/compiler/checker-contextual.d.ts +77 -0
  19. package/dist/api/compiler/checker-contextual.js +1136 -0
  20. package/dist/api/compiler/checker-declaration-order.d.ts +12 -0
  21. package/dist/api/compiler/checker-declaration-order.js +357 -0
  22. package/dist/api/compiler/checker-declarations.d.ts +33 -0
  23. package/dist/api/compiler/checker-declarations.js +888 -0
  24. package/dist/api/compiler/checker-declared-types.d.ts +48 -0
  25. package/dist/api/compiler/checker-declared-types.js +788 -0
  26. package/dist/api/compiler/checker-decorators.d.ts +26 -0
  27. package/dist/api/compiler/checker-decorators.js +562 -0
  28. package/dist/api/compiler/checker-deprecation.d.ts +33 -0
  29. package/dist/api/compiler/checker-deprecation.js +314 -0
  30. package/dist/api/compiler/checker-destructuring.d.ts +34 -0
  31. package/dist/api/compiler/checker-destructuring.js +584 -0
  32. package/dist/api/compiler/checker-elaboration.d.ts +15 -0
  33. package/dist/api/compiler/checker-elaboration.js +291 -0
  34. package/dist/api/compiler/checker-emit-helpers.d.ts +58 -0
  35. package/dist/api/compiler/checker-emit-helpers.js +154 -0
  36. package/dist/api/compiler/checker-emit-resolver.d.ts +75 -0
  37. package/dist/api/compiler/checker-emit-resolver.js +580 -0
  38. package/dist/api/compiler/checker-evaluator.d.ts +27 -0
  39. package/dist/api/compiler/checker-evaluator.js +188 -0
  40. package/dist/api/compiler/checker-expressions.d.ts +67 -0
  41. package/dist/api/compiler/checker-expressions.js +1351 -0
  42. package/dist/api/compiler/checker-features.d.ts +6 -0
  43. package/dist/api/compiler/checker-features.js +354 -0
  44. package/dist/api/compiler/checker-flow.d.ts +86 -0
  45. package/dist/api/compiler/checker-flow.js +169 -0
  46. package/dist/api/compiler/checker-functions.d.ts +43 -0
  47. package/dist/api/compiler/checker-functions.js +1002 -0
  48. package/dist/api/compiler/checker-generated-code.d.ts +25 -0
  49. package/dist/api/compiler/checker-generated-code.js +168 -0
  50. package/dist/api/compiler/checker-globals.d.ts +14 -0
  51. package/dist/api/compiler/checker-globals.js +37 -0
  52. package/dist/api/compiler/checker-grammar.d.ts +35 -0
  53. package/dist/api/compiler/checker-grammar.js +2587 -0
  54. package/dist/api/compiler/checker-heritage.d.ts +28 -0
  55. package/dist/api/compiler/checker-heritage.js +901 -0
  56. package/dist/api/compiler/checker-inference.d.ts +179 -0
  57. package/dist/api/compiler/checker-inference.js +2105 -0
  58. package/dist/api/compiler/checker-iteration.d.ts +115 -0
  59. package/dist/api/compiler/checker-iteration.js +857 -0
  60. package/dist/api/compiler/checker-javascript.d.ts +42 -0
  61. package/dist/api/compiler/checker-javascript.js +442 -0
  62. package/dist/api/compiler/checker-jsdoc.d.ts +30 -0
  63. package/dist/api/compiler/checker-jsdoc.js +320 -0
  64. package/dist/api/compiler/checker-jsx.d.ts +94 -0
  65. package/dist/api/compiler/checker-jsx.js +1433 -0
  66. package/dist/api/compiler/checker-literals.d.ts +6 -0
  67. package/dist/api/compiler/checker-literals.js +43 -0
  68. package/dist/api/compiler/checker-members.d.ts +200 -0
  69. package/dist/api/compiler/checker-members.js +2148 -0
  70. package/dist/api/compiler/checker-modules.d.ts +85 -0
  71. package/dist/api/compiler/checker-modules.js +2141 -0
  72. package/dist/api/compiler/checker-narrowing.d.ts +120 -0
  73. package/dist/api/compiler/checker-narrowing.js +2797 -0
  74. package/dist/api/compiler/checker-object-literals.d.ts +14 -0
  75. package/dist/api/compiler/checker-object-literals.js +483 -0
  76. package/dist/api/compiler/checker-operators.d.ts +33 -0
  77. package/dist/api/compiler/checker-operators.js +1040 -0
  78. package/dist/api/compiler/checker-overloads.d.ts +7 -0
  79. package/dist/api/compiler/checker-overloads.js +271 -0
  80. package/dist/api/compiler/checker-property-access.d.ts +34 -0
  81. package/dist/api/compiler/checker-property-access.js +672 -0
  82. package/dist/api/compiler/checker-services.d.ts +49 -0
  83. package/dist/api/compiler/checker-services.js +995 -0
  84. package/dist/api/compiler/checker-signatures.d.ts +55 -0
  85. package/dist/api/compiler/checker-signatures.js +789 -0
  86. package/dist/api/compiler/checker-source-file.d.ts +27 -0
  87. package/dist/api/compiler/checker-source-file.js +619 -0
  88. package/dist/api/compiler/checker-statements.d.ts +18 -0
  89. package/dist/api/compiler/checker-statements.js +226 -0
  90. package/dist/api/compiler/checker-super.d.ts +13 -0
  91. package/dist/api/compiler/checker-super.js +241 -0
  92. package/dist/api/compiler/checker-symbol-types.d.ts +51 -0
  93. package/dist/api/compiler/checker-symbol-types.js +955 -0
  94. package/dist/api/compiler/checker-symbols.d.ts +181 -0
  95. package/dist/api/compiler/checker-symbols.js +1784 -0
  96. package/dist/api/compiler/checker-type-factory.d.ts +142 -0
  97. package/dist/api/compiler/checker-type-factory.js +2542 -0
  98. package/dist/api/compiler/checker-type-nodes.d.ts +26 -0
  99. package/dist/api/compiler/checker-type-nodes.js +828 -0
  100. package/dist/api/compiler/checker-type-operators.d.ts +109 -0
  101. package/dist/api/compiler/checker-type-operators.js +1842 -0
  102. package/dist/api/compiler/checker-types.d.ts +1093 -0
  103. package/dist/api/compiler/checker-types.js +1874 -0
  104. package/dist/api/compiler/checker-unused.d.ts +19 -0
  105. package/dist/api/compiler/checker-unused.js +524 -0
  106. package/dist/api/compiler/checker-utilities.d.ts +33 -0
  107. package/dist/api/compiler/checker-utilities.js +141 -0
  108. package/dist/api/compiler/checker.d.ts +512 -0
  109. package/dist/api/compiler/checker.js +932 -0
  110. package/dist/api/compiler/command-line.d.ts +32 -0
  111. package/dist/api/compiler/command-line.js +383 -0
  112. package/dist/api/compiler/compile-program.d.ts +118 -0
  113. package/dist/api/compiler/compile-program.js +384 -0
  114. package/dist/api/compiler/diagnostic-locales.d.ts +22 -0
  115. package/dist/api/compiler/diagnostic-locales.js +64 -0
  116. package/dist/api/compiler/diagnostic-messages.d.ts +2166 -0
  117. package/dist/api/compiler/diagnostic-messages.js +184 -0
  118. package/dist/api/compiler/diagnostics.d.ts +161 -0
  119. package/dist/api/compiler/diagnostics.js +784 -0
  120. package/dist/api/compiler/emitter.d.ts +71 -0
  121. package/dist/api/compiler/emitter.js +327 -0
  122. package/dist/api/compiler/file-include.d.ts +144 -0
  123. package/dist/api/compiler/file-include.js +599 -0
  124. package/dist/api/compiler/file-loader.d.ts +290 -0
  125. package/dist/api/compiler/file-loader.js +1323 -0
  126. package/dist/api/compiler/file-system.d.ts +51 -0
  127. package/dist/api/compiler/file-system.js +132 -0
  128. package/dist/api/compiler/flow.d.ts +60 -0
  129. package/dist/api/compiler/flow.js +45 -0
  130. package/dist/api/compiler/instantiation.d.ts +74 -0
  131. package/dist/api/compiler/instantiation.js +835 -0
  132. package/dist/api/compiler/jsdoc.d.ts +75 -0
  133. package/dist/api/compiler/jsdoc.js +1229 -0
  134. package/dist/api/compiler/link-tables.d.ts +105 -0
  135. package/dist/api/compiler/link-tables.js +319 -0
  136. package/dist/api/compiler/locale-data.d.ts +24 -0
  137. package/dist/api/compiler/locale-data.js +183 -0
  138. package/dist/api/compiler/locale.d.ts +4 -0
  139. package/dist/api/compiler/locale.js +317 -0
  140. package/dist/api/compiler/locales/cs-CZ.d.ts +2 -0
  141. package/dist/api/compiler/locales/cs-CZ.js +3 -0
  142. package/dist/api/compiler/locales/de-DE.d.ts +2 -0
  143. package/dist/api/compiler/locales/de-DE.js +3 -0
  144. package/dist/api/compiler/locales/es-ES.d.ts +2 -0
  145. package/dist/api/compiler/locales/es-ES.js +3 -0
  146. package/dist/api/compiler/locales/fr-FR.d.ts +2 -0
  147. package/dist/api/compiler/locales/fr-FR.js +3 -0
  148. package/dist/api/compiler/locales/it-IT.d.ts +2 -0
  149. package/dist/api/compiler/locales/it-IT.js +3 -0
  150. package/dist/api/compiler/locales/ja-JP.d.ts +2 -0
  151. package/dist/api/compiler/locales/ja-JP.js +3 -0
  152. package/dist/api/compiler/locales/ko-KR.d.ts +2 -0
  153. package/dist/api/compiler/locales/ko-KR.js +3 -0
  154. package/dist/api/compiler/locales/pl-PL.d.ts +2 -0
  155. package/dist/api/compiler/locales/pl-PL.js +3 -0
  156. package/dist/api/compiler/locales/pt-BR.d.ts +2 -0
  157. package/dist/api/compiler/locales/pt-BR.js +3 -0
  158. package/dist/api/compiler/locales/ru-RU.d.ts +2 -0
  159. package/dist/api/compiler/locales/ru-RU.js +3 -0
  160. package/dist/api/compiler/locales/tr-TR.d.ts +2 -0
  161. package/dist/api/compiler/locales/tr-TR.js +3 -0
  162. package/dist/api/compiler/locales/zh-CN.d.ts +2 -0
  163. package/dist/api/compiler/locales/zh-CN.js +3 -0
  164. package/dist/api/compiler/locales/zh-TW.d.ts +2 -0
  165. package/dist/api/compiler/locales/zh-TW.js +3 -0
  166. package/dist/api/compiler/module-resolution-types.d.ts +83 -0
  167. package/dist/api/compiler/module-resolution-types.js +176 -0
  168. package/dist/api/compiler/module-resolution.d.ts +71 -0
  169. package/dist/api/compiler/module-resolution.js +1598 -0
  170. package/dist/api/compiler/module-specifiers.d.ts +64 -0
  171. package/dist/api/compiler/module-specifiers.js +1101 -0
  172. package/dist/api/compiler/name-resolver.d.ts +43 -0
  173. package/dist/api/compiler/name-resolver.js +509 -0
  174. package/dist/api/compiler/node-builder-names.d.ts +32 -0
  175. package/dist/api/compiler/node-builder-names.js +854 -0
  176. package/dist/api/compiler/node-builder-pseudo.d.ts +36 -0
  177. package/dist/api/compiler/node-builder-pseudo.js +745 -0
  178. package/dist/api/compiler/node-builder-reuse.d.ts +4 -0
  179. package/dist/api/compiler/node-builder-reuse.js +647 -0
  180. package/dist/api/compiler/node-builder.d.ts +270 -0
  181. package/dist/api/compiler/node-builder.js +2645 -0
  182. package/dist/api/compiler/option-declarations.d.ts +90 -0
  183. package/dist/api/compiler/option-declarations.js +1460 -0
  184. package/dist/api/compiler/options.d.ts +289 -0
  185. package/dist/api/compiler/options.js +1197 -0
  186. package/dist/api/compiler/output-paths.d.ts +42 -0
  187. package/dist/api/compiler/output-paths.js +195 -0
  188. package/dist/api/compiler/package-json.d.ts +175 -0
  189. package/dist/api/compiler/package-json.js +1015 -0
  190. package/dist/api/compiler/parallel-parse.d.ts +221 -0
  191. package/dist/api/compiler/parallel-parse.js +541 -0
  192. package/dist/api/compiler/parser.d.ts +604 -0
  193. package/dist/api/compiler/parser.js +6426 -0
  194. package/dist/api/compiler/path.d.ts +91 -0
  195. package/dist/api/compiler/path.js +705 -0
  196. package/dist/api/compiler/printer/async-helpers.d.ts +22 -0
  197. package/dist/api/compiler/printer/async-helpers.js +91 -0
  198. package/dist/api/compiler/printer/auto-generate.d.ts +13 -0
  199. package/dist/api/compiler/printer/auto-generate.js +20 -0
  200. package/dist/api/compiler/printer/decorator-helpers.d.ts +24 -0
  201. package/dist/api/compiler/printer/decorator-helpers.js +118 -0
  202. package/dist/api/compiler/printer/emit-context.d.ts +157 -0
  203. package/dist/api/compiler/printer/emit-context.js +582 -0
  204. package/dist/api/compiler/printer/emit-flags.d.ts +60 -0
  205. package/dist/api/compiler/printer/emit-flags.js +2 -0
  206. package/dist/api/compiler/printer/factory-base.d.ts +171 -0
  207. package/dist/api/compiler/printer/factory-base.js +1505 -0
  208. package/dist/api/compiler/printer/factory.d.ts +147 -0
  209. package/dist/api/compiler/printer/factory.js +542 -0
  210. package/dist/api/compiler/printer/helpers.d.ts +27 -0
  211. package/dist/api/compiler/printer/helpers.js +164 -0
  212. package/dist/api/compiler/printer/name-generator.d.ts +41 -0
  213. package/dist/api/compiler/printer/name-generator.js +283 -0
  214. package/dist/api/compiler/printer/printer.d.ts +411 -0
  215. package/dist/api/compiler/printer/printer.js +4517 -0
  216. package/dist/api/compiler/printer/text-writer.d.ts +46 -0
  217. package/dist/api/compiler/printer/text-writer.js +172 -0
  218. package/dist/api/compiler/printer/utilities.d.ts +82 -0
  219. package/dist/api/compiler/printer/utilities.js +817 -0
  220. package/dist/api/compiler/program-checker.d.ts +156 -0
  221. package/dist/api/compiler/program-checker.js +529 -0
  222. package/dist/api/compiler/program-utilities.d.ts +52 -0
  223. package/dist/api/compiler/program-utilities.js +365 -0
  224. package/dist/api/compiler/program.d.ts +180 -0
  225. package/dist/api/compiler/program.js +1019 -0
  226. package/dist/api/compiler/pseudo-bigint.d.ts +5 -0
  227. package/dist/api/compiler/pseudo-bigint.js +61 -0
  228. package/dist/api/compiler/regexp-checker.d.ts +38 -0
  229. package/dist/api/compiler/regexp-checker.js +942 -0
  230. package/dist/api/compiler/relations.d.ts +263 -0
  231. package/dist/api/compiler/relations.js +4002 -0
  232. package/dist/api/compiler/reparser.d.ts +48 -0
  233. package/dist/api/compiler/reparser.js +1323 -0
  234. package/dist/api/compiler/scanner.d.ts +256 -0
  235. package/dist/api/compiler/scanner.js +2853 -0
  236. package/dist/api/compiler/side-state.d.ts +16 -0
  237. package/dist/api/compiler/side-state.js +89 -0
  238. package/dist/api/compiler/sourcemap.d.ts +55 -0
  239. package/dist/api/compiler/sourcemap.js +340 -0
  240. package/dist/api/compiler/spelling.d.ts +14 -0
  241. package/dist/api/compiler/spelling.js +128 -0
  242. package/dist/api/compiler/symbol-accessibility.d.ts +57 -0
  243. package/dist/api/compiler/symbol-accessibility.js +991 -0
  244. package/dist/api/compiler/symbol.d.ts +282 -0
  245. package/dist/api/compiler/symbol.js +339 -0
  246. package/dist/api/compiler/symlinks.d.ts +32 -0
  247. package/dist/api/compiler/symlinks.js +114 -0
  248. package/dist/api/compiler/syntax-kind.d.ts +389 -0
  249. package/dist/api/compiler/syntax-kind.js +2 -0
  250. package/dist/api/compiler/timeline.d.ts +9 -0
  251. package/dist/api/compiler/timeline.js +54 -0
  252. package/dist/api/compiler/transformers/alias-references.d.ts +39 -0
  253. package/dist/api/compiler/transformers/alias-references.js +677 -0
  254. package/dist/api/compiler/transformers/async-utilities.d.ts +51 -0
  255. package/dist/api/compiler/transformers/async-utilities.js +260 -0
  256. package/dist/api/compiler/transformers/async.d.ts +53 -0
  257. package/dist/api/compiler/transformers/async.js +645 -0
  258. package/dist/api/compiler/transformers/class-fields.d.ts +206 -0
  259. package/dist/api/compiler/transformers/class-fields.js +2418 -0
  260. package/dist/api/compiler/transformers/class-utilities.d.ts +46 -0
  261. package/dist/api/compiler/transformers/class-utilities.js +261 -0
  262. package/dist/api/compiler/transformers/commonjs-module.d.ts +103 -0
  263. package/dist/api/compiler/transformers/commonjs-module.js +1180 -0
  264. package/dist/api/compiler/transformers/const-enum-inliner.d.ts +11 -0
  265. package/dist/api/compiler/transformers/const-enum-inliner.js +36 -0
  266. package/dist/api/compiler/transformers/declarations-diagnostics.d.ts +52 -0
  267. package/dist/api/compiler/transformers/declarations-diagnostics.js +539 -0
  268. package/dist/api/compiler/transformers/declarations-pseudo.d.ts +160 -0
  269. package/dist/api/compiler/transformers/declarations-pseudo.js +799 -0
  270. package/dist/api/compiler/transformers/declarations-resolver.d.ts +152 -0
  271. package/dist/api/compiler/transformers/declarations-resolver.js +35 -0
  272. package/dist/api/compiler/transformers/declarations-syntactic.d.ts +119 -0
  273. package/dist/api/compiler/transformers/declarations-syntactic.js +1582 -0
  274. package/dist/api/compiler/transformers/declarations-tracker.d.ts +46 -0
  275. package/dist/api/compiler/transformers/declarations-tracker.js +198 -0
  276. package/dist/api/compiler/transformers/declarations.d.ts +175 -0
  277. package/dist/api/compiler/transformers/declarations.js +2381 -0
  278. package/dist/api/compiler/transformers/decorator-metadata.d.ts +54 -0
  279. package/dist/api/compiler/transformers/decorator-metadata.js +554 -0
  280. package/dist/api/compiler/transformers/decorator-utilities.d.ts +38 -0
  281. package/dist/api/compiler/transformers/decorator-utilities.js +238 -0
  282. package/dist/api/compiler/transformers/destructuring.d.ts +25 -0
  283. package/dist/api/compiler/transformers/destructuring.js +626 -0
  284. package/dist/api/compiler/transformers/downlevel.d.ts +6 -0
  285. package/dist/api/compiler/transformers/downlevel.js +45 -0
  286. package/dist/api/compiler/transformers/emit-resolver.d.ts +61 -0
  287. package/dist/api/compiler/transformers/emit-resolver.js +197 -0
  288. package/dist/api/compiler/transformers/es-decorators.d.ts +118 -0
  289. package/dist/api/compiler/transformers/es-decorators.js +1901 -0
  290. package/dist/api/compiler/transformers/exponentiation.d.ts +11 -0
  291. package/dist/api/compiler/transformers/exponentiation.js +76 -0
  292. package/dist/api/compiler/transformers/external-module-info.d.ts +35 -0
  293. package/dist/api/compiler/transformers/external-module-info.js +351 -0
  294. package/dist/api/compiler/transformers/for-await.d.ts +43 -0
  295. package/dist/api/compiler/transformers/for-await.js +469 -0
  296. package/dist/api/compiler/transformers/import-elision.d.ts +16 -0
  297. package/dist/api/compiler/transformers/import-elision.js +124 -0
  298. package/dist/api/compiler/transformers/jsx-entities.d.ts +1 -0
  299. package/dist/api/compiler/transformers/jsx-entities.js +256 -0
  300. package/dist/api/compiler/transformers/jsx.d.ts +71 -0
  301. package/dist/api/compiler/transformers/jsx.js +700 -0
  302. package/dist/api/compiler/transformers/legacy-decorators.d.ts +56 -0
  303. package/dist/api/compiler/transformers/legacy-decorators.js +564 -0
  304. package/dist/api/compiler/transformers/logical-assignment.d.ts +14 -0
  305. package/dist/api/compiler/transformers/logical-assignment.js +62 -0
  306. package/dist/api/compiler/transformers/module-utilities.d.ts +9 -0
  307. package/dist/api/compiler/transformers/module-utilities.js +36 -0
  308. package/dist/api/compiler/transformers/module.d.ts +49 -0
  309. package/dist/api/compiler/transformers/module.js +296 -0
  310. package/dist/api/compiler/transformers/named-evaluation.d.ts +26 -0
  311. package/dist/api/compiler/transformers/named-evaluation.js +266 -0
  312. package/dist/api/compiler/transformers/nullish-coalescing.d.ts +9 -0
  313. package/dist/api/compiler/transformers/nullish-coalescing.js +26 -0
  314. package/dist/api/compiler/transformers/object-rest-spread.d.ts +34 -0
  315. package/dist/api/compiler/transformers/object-rest-spread.js +411 -0
  316. package/dist/api/compiler/transformers/optional-catch.d.ts +9 -0
  317. package/dist/api/compiler/transformers/optional-catch.js +20 -0
  318. package/dist/api/compiler/transformers/optional-chain.d.ts +14 -0
  319. package/dist/api/compiler/transformers/optional-chain.js +188 -0
  320. package/dist/api/compiler/transformers/reference-resolver.d.ts +129 -0
  321. package/dist/api/compiler/transformers/reference-resolver.js +1157 -0
  322. package/dist/api/compiler/transformers/runtime-syntax.d.ts +71 -0
  323. package/dist/api/compiler/transformers/runtime-syntax.js +753 -0
  324. package/dist/api/compiler/transformers/subtree-facts.d.ts +10 -0
  325. package/dist/api/compiler/transformers/subtree-facts.js +205 -0
  326. package/dist/api/compiler/transformers/syntax-facts.d.ts +52 -0
  327. package/dist/api/compiler/transformers/syntax-facts.js +258 -0
  328. package/dist/api/compiler/transformers/tagged-template.d.ts +17 -0
  329. package/dist/api/compiler/transformers/tagged-template.js +148 -0
  330. package/dist/api/compiler/transformers/transformer.d.ts +17 -0
  331. package/dist/api/compiler/transformers/transformer.js +54 -0
  332. package/dist/api/compiler/transformers/type-eraser.d.ts +21 -0
  333. package/dist/api/compiler/transformers/type-eraser.js +346 -0
  334. package/dist/api/compiler/transformers/type-serialization.d.ts +20 -0
  335. package/dist/api/compiler/transformers/type-serialization.js +347 -0
  336. package/dist/api/compiler/transformers/using.d.ts +56 -0
  337. package/dist/api/compiler/transformers/using.js +453 -0
  338. package/dist/api/compiler/transformers/utilities.d.ts +50 -0
  339. package/dist/api/compiler/transformers/utilities.js +347 -0
  340. package/dist/api/compiler/transformers/visitor-base.d.ts +6 -0
  341. package/dist/api/compiler/transformers/visitor-base.js +817 -0
  342. package/dist/api/compiler/transformers/visitor-hooks.d.ts +29 -0
  343. package/dist/api/compiler/transformers/visitor-hooks.js +189 -0
  344. package/dist/api/compiler/tsconfig.d.ts +177 -0
  345. package/dist/api/compiler/tsconfig.js +1311 -0
  346. package/dist/api/compiler/type-printer.d.ts +15 -0
  347. package/dist/api/compiler/type-printer.js +74 -0
  348. package/dist/api/compiler/types.d.ts +87 -0
  349. package/dist/api/compiler/types.js +23 -0
  350. package/dist/api/compiler/unicode-identifiers.d.ts +2 -0
  351. package/dist/api/compiler/unicode-identifiers.js +209 -0
  352. package/dist/api/compiler/unicode-properties.d.ts +8 -0
  353. package/dist/api/compiler/unicode-properties.js +531 -0
  354. package/dist/api/compiler/vfs-match.d.ts +24 -0
  355. package/dist/api/compiler/vfs-match.js +587 -0
  356. package/dist/api/library/ast.d.ts +3 -2
  357. package/dist/api/library/ast.generated.d.ts +127 -139
  358. package/dist/api/library/checker.d.ts +51 -0
  359. package/dist/api/library/checker.js +318 -0
  360. package/dist/api/library/diagnostics.d.ts +13 -0
  361. package/dist/api/library/diagnostics.js +50 -0
  362. package/dist/api/library/disk.d.ts +13 -0
  363. package/dist/api/library/disk.js +66 -0
  364. package/dist/api/library/errors.d.ts +13 -0
  365. package/dist/api/library/errors.js +24 -0
  366. package/dist/api/library/host.d.ts +24 -0
  367. package/dist/api/library/host.js +52 -0
  368. package/dist/api/library/index.d.ts +5 -1
  369. package/dist/api/library/index.js +4 -0
  370. package/dist/api/library/nodes.d.ts +51 -0
  371. package/dist/api/library/nodes.js +196 -0
  372. package/dist/api/library/options.d.ts +144 -0
  373. package/dist/api/library/options.js +308 -0
  374. package/dist/api/library/parse.d.ts +19 -0
  375. package/dist/api/library/parse.js +41 -0
  376. package/dist/api/library/program.d.ts +21 -0
  377. package/dist/api/library/program.js +234 -0
  378. package/dist/api/library/types.d.ts +14 -1
  379. package/package.json +12 -8
  380. package/src/compiler/ast-utilities.ts +548 -0
  381. package/src/compiler/ast.ts +12870 -0
  382. package/src/compiler/astnav.ts +799 -0
  383. package/src/compiler/binder-utilities.ts +1392 -0
  384. package/src/compiler/binder.ts +2707 -0
  385. package/src/compiler/build-info.ts +1197 -0
  386. package/src/compiler/character-codes.ts +323 -0
  387. package/src/compiler/checker-calls.ts +2155 -0
  388. package/src/compiler/checker-classes.ts +706 -0
  389. package/src/compiler/checker-contextual.ts +1457 -0
  390. package/src/compiler/checker-declaration-order.ts +438 -0
  391. package/src/compiler/checker-declarations.ts +1201 -0
  392. package/src/compiler/checker-declared-types.ts +919 -0
  393. package/src/compiler/checker-decorators.ts +694 -0
  394. package/src/compiler/checker-deprecation.ts +355 -0
  395. package/src/compiler/checker-destructuring.ts +805 -0
  396. package/src/compiler/checker-elaboration.ts +477 -0
  397. package/src/compiler/checker-emit-helpers.ts +224 -0
  398. package/src/compiler/checker-emit-resolver.ts +769 -0
  399. package/src/compiler/checker-evaluator.ts +243 -0
  400. package/src/compiler/checker-expressions.ts +1831 -0
  401. package/src/compiler/checker-features.ts +361 -0
  402. package/src/compiler/checker-flow.ts +394 -0
  403. package/src/compiler/checker-functions.ts +1296 -0
  404. package/src/compiler/checker-generated-code.ts +227 -0
  405. package/src/compiler/checker-globals.ts +52 -0
  406. package/src/compiler/checker-grammar.ts +3596 -0
  407. package/src/compiler/checker-heritage.ts +1240 -0
  408. package/src/compiler/checker-inference.ts +2584 -0
  409. package/src/compiler/checker-iteration.ts +1206 -0
  410. package/src/compiler/checker-javascript.ts +502 -0
  411. package/src/compiler/checker-jsdoc.ts +360 -0
  412. package/src/compiler/checker-jsx.ts +1928 -0
  413. package/src/compiler/checker-literals.ts +61 -0
  414. package/src/compiler/checker-members.ts +2480 -0
  415. package/src/compiler/checker-modules.ts +2896 -0
  416. package/src/compiler/checker-narrowing.ts +3230 -0
  417. package/src/compiler/checker-object-literals.ts +591 -0
  418. package/src/compiler/checker-operators.ts +1422 -0
  419. package/src/compiler/checker-overloads.ts +328 -0
  420. package/src/compiler/checker-property-access.ts +906 -0
  421. package/src/compiler/checker-services.ts +1149 -0
  422. package/src/compiler/checker-signatures.ts +1032 -0
  423. package/src/compiler/checker-source-file.ts +732 -0
  424. package/src/compiler/checker-statements.ts +292 -0
  425. package/src/compiler/checker-super.ts +261 -0
  426. package/src/compiler/checker-symbol-types.ts +1187 -0
  427. package/src/compiler/checker-symbols.ts +2157 -0
  428. package/src/compiler/checker-type-factory.ts +2616 -0
  429. package/src/compiler/checker-type-nodes.ts +1033 -0
  430. package/src/compiler/checker-type-operators.ts +2510 -0
  431. package/src/compiler/checker-types.ts +2520 -0
  432. package/src/compiler/checker-unused.ts +642 -0
  433. package/src/compiler/checker-utilities.ts +161 -0
  434. package/src/compiler/checker.ts +1138 -0
  435. package/src/compiler/command-line.ts +436 -0
  436. package/src/compiler/compile-program.ts +439 -0
  437. package/src/compiler/decoder.ts +1209 -0
  438. package/src/compiler/diagnostic-locales.ts +86 -0
  439. package/src/compiler/diagnostic-messages.ts +2349 -0
  440. package/src/compiler/diagnostics.ts +858 -0
  441. package/src/compiler/emitter.ts +434 -0
  442. package/src/compiler/encoder.ts +1945 -0
  443. package/src/compiler/file-include.ts +741 -0
  444. package/src/compiler/file-loader.ts +1597 -0
  445. package/src/compiler/file-system.ts +143 -0
  446. package/src/compiler/flow.ts +89 -0
  447. package/src/compiler/help.ts +473 -0
  448. package/src/compiler/incremental.ts +2818 -0
  449. package/src/compiler/init.ts +141 -0
  450. package/src/compiler/instantiation.ts +938 -0
  451. package/src/compiler/jsdoc.ts +1386 -0
  452. package/src/compiler/link-tables.ts +343 -0
  453. package/src/compiler/locale-data.ts +203 -0
  454. package/src/compiler/locale.ts +307 -0
  455. package/src/compiler/locales/cs-CZ.ts +5 -0
  456. package/src/compiler/locales/de-DE.ts +5 -0
  457. package/src/compiler/locales/es-ES.ts +5 -0
  458. package/src/compiler/locales/fr-FR.ts +5 -0
  459. package/src/compiler/locales/it-IT.ts +5 -0
  460. package/src/compiler/locales/ja-JP.ts +5 -0
  461. package/src/compiler/locales/ko-KR.ts +5 -0
  462. package/src/compiler/locales/pl-PL.ts +5 -0
  463. package/src/compiler/locales/pt-BR.ts +5 -0
  464. package/src/compiler/locales/ru-RU.ts +5 -0
  465. package/src/compiler/locales/tr-TR.ts +5 -0
  466. package/src/compiler/locales/zh-CN.ts +5 -0
  467. package/src/compiler/locales/zh-TW.ts +5 -0
  468. package/src/compiler/module-resolution-types.ts +243 -0
  469. package/src/compiler/module-resolution.ts +2072 -0
  470. package/src/compiler/module-specifiers.ts +1491 -0
  471. package/src/compiler/name-resolver.ts +646 -0
  472. package/src/compiler/node-builder-names.ts +1071 -0
  473. package/src/compiler/node-builder-pseudo.ts +892 -0
  474. package/src/compiler/node-builder-reuse.ts +764 -0
  475. package/src/compiler/node-builder.ts +3433 -0
  476. package/src/compiler/option-declarations.ts +1560 -0
  477. package/src/compiler/options.ts +1576 -0
  478. package/src/compiler/output-paths.ts +334 -0
  479. package/src/compiler/package-json.ts +1083 -0
  480. package/src/compiler/parallel-check.ts +1954 -0
  481. package/src/compiler/parallel-parse.ts +595 -0
  482. package/src/compiler/parse-thread.ts +136 -0
  483. package/src/compiler/parser.ts +7766 -0
  484. package/src/compiler/path.ts +717 -0
  485. package/src/compiler/printer/async-helpers.ts +183 -0
  486. package/src/compiler/printer/auto-generate.ts +27 -0
  487. package/src/compiler/printer/decorator-helpers.ts +218 -0
  488. package/src/compiler/printer/emit-context.ts +684 -0
  489. package/src/compiler/printer/emit-flags.ts +64 -0
  490. package/src/compiler/printer/factory-base.ts +2577 -0
  491. package/src/compiler/printer/factory.ts +764 -0
  492. package/src/compiler/printer/helpers.ts +291 -0
  493. package/src/compiler/printer/name-generator.ts +372 -0
  494. package/src/compiler/printer/printer.ts +5072 -0
  495. package/src/compiler/printer/text-writer.ts +183 -0
  496. package/src/compiler/printer/utilities.ts +884 -0
  497. package/src/compiler/program-checker.ts +594 -0
  498. package/src/compiler/program-utilities.ts +435 -0
  499. package/src/compiler/program.ts +1426 -0
  500. package/src/compiler/pseudo-bigint.ts +62 -0
  501. package/src/compiler/regexp-checker.ts +1142 -0
  502. package/src/compiler/relations.ts +5149 -0
  503. package/src/compiler/reparser.ts +1566 -0
  504. package/src/compiler/scanner.ts +2951 -0
  505. package/src/compiler/show-config.ts +239 -0
  506. package/src/compiler/side-state.ts +125 -0
  507. package/src/compiler/sourcemap.ts +366 -0
  508. package/src/compiler/spelling.ts +122 -0
  509. package/src/compiler/symbol-accessibility.ts +1166 -0
  510. package/src/compiler/symbol.ts +557 -0
  511. package/src/compiler/symlinks.ts +137 -0
  512. package/src/compiler/syntax-kind.ts +391 -0
  513. package/src/compiler/thread-entry.ts +191 -0
  514. package/src/compiler/timeline.ts +53 -0
  515. package/src/compiler/transformers/alias-references.ts +757 -0
  516. package/src/compiler/transformers/async-utilities.ts +335 -0
  517. package/src/compiler/transformers/async.ts +838 -0
  518. package/src/compiler/transformers/class-fields.ts +2967 -0
  519. package/src/compiler/transformers/class-utilities.ts +324 -0
  520. package/src/compiler/transformers/commonjs-module.ts +1621 -0
  521. package/src/compiler/transformers/const-enum-inliner.ts +50 -0
  522. package/src/compiler/transformers/declarations-diagnostics.ts +833 -0
  523. package/src/compiler/transformers/declarations-pseudo.ts +969 -0
  524. package/src/compiler/transformers/declarations-resolver.ts +249 -0
  525. package/src/compiler/transformers/declarations-syntactic.ts +1867 -0
  526. package/src/compiler/transformers/declarations-tracker.ts +269 -0
  527. package/src/compiler/transformers/declarations.ts +3120 -0
  528. package/src/compiler/transformers/decorator-metadata.ts +697 -0
  529. package/src/compiler/transformers/decorator-utilities.ts +283 -0
  530. package/src/compiler/transformers/destructuring.ts +708 -0
  531. package/src/compiler/transformers/downlevel.ts +50 -0
  532. package/src/compiler/transformers/emit-resolver.ts +258 -0
  533. package/src/compiler/transformers/es-decorators.ts +2682 -0
  534. package/src/compiler/transformers/exponentiation.ts +80 -0
  535. package/src/compiler/transformers/external-module-info.ts +412 -0
  536. package/src/compiler/transformers/for-await.ts +687 -0
  537. package/src/compiler/transformers/import-elision.ts +152 -0
  538. package/src/compiler/transformers/jsx-entities.ts +256 -0
  539. package/src/compiler/transformers/jsx.ts +824 -0
  540. package/src/compiler/transformers/legacy-decorators.ts +726 -0
  541. package/src/compiler/transformers/logical-assignment.ts +75 -0
  542. package/src/compiler/transformers/module-utilities.ts +42 -0
  543. package/src/compiler/transformers/module.ts +474 -0
  544. package/src/compiler/transformers/named-evaluation.ts +389 -0
  545. package/src/compiler/transformers/nullish-coalescing.ts +35 -0
  546. package/src/compiler/transformers/object-rest-spread.ts +577 -0
  547. package/src/compiler/transformers/optional-catch.ts +29 -0
  548. package/src/compiler/transformers/optional-chain.ts +246 -0
  549. package/src/compiler/transformers/reference-resolver.ts +1213 -0
  550. package/src/compiler/transformers/runtime-syntax.ts +942 -0
  551. package/src/compiler/transformers/subtree-facts.ts +253 -0
  552. package/src/compiler/transformers/syntax-facts.ts +358 -0
  553. package/src/compiler/transformers/tagged-template.ts +167 -0
  554. package/src/compiler/transformers/transformer.ts +56 -0
  555. package/src/compiler/transformers/type-eraser.ts +520 -0
  556. package/src/compiler/transformers/type-serialization.ts +374 -0
  557. package/src/compiler/transformers/using.ts +613 -0
  558. package/src/compiler/transformers/utilities.ts +419 -0
  559. package/src/compiler/transformers/visitor-base.ts +1601 -0
  560. package/src/compiler/transformers/visitor-hooks.ts +252 -0
  561. package/src/compiler/tsc-build.ts +1422 -0
  562. package/src/compiler/tsc-cli.ts +669 -0
  563. package/src/compiler/tsc-compile.ts +446 -0
  564. package/src/compiler/tsc-watch.ts +922 -0
  565. package/src/compiler/tsconfig.ts +1574 -0
  566. package/src/compiler/type-printer.ts +110 -0
  567. package/src/compiler/types.ts +115 -0
  568. package/src/compiler/unicode-identifiers.ts +212 -0
  569. package/src/compiler/unicode-properties.ts +537 -0
  570. package/src/compiler/vfs-match.ts +597 -0
  571. package/src/compiler/xxh3.ts +650 -0
  572. package/src/library/ast.generated.ts +141 -167
  573. package/src/library/ast.ts +4 -1
  574. package/src/library/checker.ts +384 -0
  575. package/src/library/diagnostics.ts +72 -0
  576. package/src/library/disk.ts +73 -0
  577. package/src/library/errors.ts +26 -0
  578. package/src/library/host.ts +63 -0
  579. package/src/library/index.ts +21 -0
  580. package/src/library/nodes.ts +232 -0
  581. package/src/library/options.ts +449 -0
  582. package/src/library/parse.ts +63 -0
  583. package/src/library/program.ts +293 -0
  584. package/src/library/types.ts +14 -1
@@ -0,0 +1,1033 @@
1
+ // Types from type nodes: `getTypeFromTypeNode` and the resolution of type references.
2
+ import {
3
+ type ArrayTypeNode,
4
+ ModifierFlags,
5
+ type ExpressionWithTypeArguments,
6
+ type IndexedAccessTypeNode,
7
+ type InferTypeNode,
8
+ type IntersectionTypeNode,
9
+ type LiteralTypeNode,
10
+ type NamedTupleMember,
11
+ type Node,
12
+ NodeFlags,
13
+ type OptionalTypeNode,
14
+ type QualifiedName,
15
+ type RestTypeNode,
16
+ type TemplateLiteralTypeNode,
17
+ type TemplateLiteralTypeSpan,
18
+ type TupleTypeNode,
19
+ type TypeOperatorNode,
20
+ type TypeReferenceNode,
21
+ type UnionTypeNode,
22
+ getExpression,
23
+ getName,
24
+ getText,
25
+ getType,
26
+ getSymbol,
27
+ type ConditionalTypeNode,
28
+ type MappedTypeNode,
29
+ TypePredicateNode,
30
+ getBody,
31
+ getTypeArguments,
32
+ } from './ast.js';
33
+ import {
34
+ declarationNameToString,
35
+ getSourceFileOfNode,
36
+ getThisContainer,
37
+ isClassLike,
38
+ isStatic,
39
+ isDeclarationStatementKind,
40
+ } from './binder-utilities.js';
41
+ import { Diagnostics } from './diagnostics.js';
42
+ import { SyntaxKind } from './syntax-kind.js';
43
+ import type { Checker } from './checker.js';
44
+ import {
45
+ ElementFlags,
46
+ type InterfaceType,
47
+ type MappedType,
48
+ ObjectFlags,
49
+ TupleElementInfo,
50
+ type TupleType,
51
+ type Type,
52
+ TypeAlias,
53
+ TypeFlags,
54
+ UniqueESSymbolType,
55
+ emptyTypes,
56
+ newTypeMapper,
57
+ } from './checker-types.js';
58
+ import {
59
+ createArrayType,
60
+ IntersectionFlags,
61
+ UnionReduction,
62
+ aliasKey,
63
+ createDeferredTypeReference,
64
+ createNormalizedTupleType,
65
+ createTypeReferenceEx,
66
+ getIntersectionTypeEx,
67
+ getRegularTypeOfLiteralType,
68
+ getTemplateLiteralType,
69
+ getTupleTargetType,
70
+ getUnionTypeEx,
71
+ getIntersectionType,
72
+ everyType,
73
+ isArrayOrTupleType,
74
+ isPatternLiteralType,
75
+ newObjectType,
76
+ typeListKey,
77
+ } from './checker-type-factory.js';
78
+ import {
79
+ getMembersOfSymbol,
80
+ getMergedSymbol,
81
+ getSymbolOfDeclaration,
82
+ resolveAlias,
83
+ resolveEntityName,
84
+ } from './checker-symbols.js';
85
+ import { getTypeFromImportTypeNode } from './checker-modules.js';
86
+ import {
87
+ fillMissingTypeArguments,
88
+ getDeclaredTypeOfClassOrInterface,
89
+ getDeclaredTypeOfSymbol,
90
+ getDeclaredTypeOfTypeParameter,
91
+ getConstraintOfTypeParameter,
92
+ getLocalTypeParametersOfClassOrInterfaceOrTypeAlias,
93
+ getMinTypeArgumentCount,
94
+ tryGetDeclaredTypeOfSymbol,
95
+ } from './checker-declared-types.js';
96
+ import { addOptionality, getNullableType, getWidenedType } from './checker-symbol-types.js';
97
+ import { instantiateTypeWithAlias } from './instantiation.js';
98
+ import { symbolToString, typeToString } from './type-printer.js';
99
+ import {
100
+ getIndexType,
101
+ getIndexedAccessTypeEx,
102
+ getNoInferType,
103
+ getStringMappingType,
104
+ getTypeFromConditionalTypeNode,
105
+ getTypeFromMappedTypeNode,
106
+ intrinsicTypeKind,
107
+ IntrinsicTypeKind,
108
+ getSubstitutionType,
109
+ getActualTypeVariable,
110
+ getHomomorphicTypeVariable,
111
+ getTypeParameterFromMappedType,
112
+ } from './checker-type-operators.js';
113
+ import { checkExpression, checkExpressionCached, getResolvedSymbol } from './checker-expressions.js';
114
+ import { checkExpressionWithTypeArguments } from './checker-calls.js';
115
+ import { getIntendedTypeFromJSDocTypeReference } from './checker-jsdoc.js';
116
+ import { getCombinedNodeFlags, hasSyntacticModifier } from './binder-utilities.js';
117
+ import { CheckFlags, getDeclarations, getSymbolId, type Symbol, SymbolFlags } from './symbol.js';
118
+
119
+ export function getTypeFromTypeNode(c: Checker, node: Node): Type {
120
+ return getConditionalFlowTypeOfType(c, getTypeFromTypeNodeWorker(c, node), node);
121
+ }
122
+
123
+ /**
124
+ * `t` with the constraints implied by enclosing conditional types, as a substitution type: in
125
+ * `T extends string ? X : Y`, references to T in X are known to be strings.
126
+ */
127
+ function getConditionalFlowTypeOfType(c: Checker, t: Type, start: Node): Type {
128
+ let constraints: Type[] | undefined;
129
+ let covariant = true;
130
+ for (let node: Node | undefined = start; node !== undefined && !isStatementLike(node); node = node.parent) {
131
+ const parent: Node | undefined = node.parent;
132
+ if (parent === undefined) break;
133
+ // Only parameter positions flip variance; `keyof` is mostly used invariantly in indexed accesses.
134
+ if (parent.kind === SyntaxKind.Parameter) covariant = !covariant;
135
+ // Type variables always substitute, as even contravariant positions may rely on their constraints.
136
+ if (
137
+ (covariant || (t.flags & TypeFlags.TypeVariable) !== 0) &&
138
+ parent.kind === SyntaxKind.ConditionalType &&
139
+ node === (parent as ConditionalTypeNode).trueType
140
+ ) {
141
+ const conditional = parent as ConditionalTypeNode;
142
+ const constraint = getImpliedConstraint(c, t, conditional.checkType, conditional.extendsType);
143
+ if (constraint !== undefined) (constraints ??= []).push(constraint);
144
+ } else if (
145
+ (t.flags & TypeFlags.TypeParameter) !== 0 &&
146
+ parent.kind === SyntaxKind.MappedType &&
147
+ (parent as MappedTypeNode).nameType === undefined &&
148
+ node === (parent as MappedTypeNode).type
149
+ ) {
150
+ // Homomorphic mapped types over arrays and tuples map numeric keys only.
151
+ const mappedType = getTypeFromTypeNode(c, parent) as MappedType;
152
+ if (getTypeParameterFromMappedType(c, mappedType) === getActualTypeVariable(c, t)) {
153
+ const typeParameter = getHomomorphicTypeVariable(c, mappedType);
154
+ if (typeParameter !== undefined) {
155
+ const constraint = getConstraintOfTypeParameter(c, typeParameter);
156
+ if (constraint !== undefined && everyType(constraint, (u) => isArrayOrTupleType(c, u)))
157
+ (constraints ??= []).push(
158
+ getUnionTypeEx(c, [c.numberType, c.numericStringType], UnionReduction.Literal, undefined, undefined),
159
+ );
160
+ }
161
+ }
162
+ }
163
+ }
164
+ return constraints !== undefined ? getSubstitutionType(c, t, getIntersectionType(c, constraints)) : t;
165
+ }
166
+
167
+ function getImpliedConstraint(c: Checker, t: Type, checkNode: Node, extendsNode: Node): Type | undefined {
168
+ if (isUnaryTupleTypeNode(checkNode) && isUnaryTupleTypeNode(extendsNode))
169
+ return getImpliedConstraint(
170
+ c,
171
+ t,
172
+ (checkNode as TupleTypeNode).elements.nodes[0]!,
173
+ (extendsNode as TupleTypeNode).elements.nodes[0]!,
174
+ );
175
+ if (getActualTypeVariable(c, getTypeFromTypeNode(c, checkNode)) === getActualTypeVariable(c, t))
176
+ return getTypeFromTypeNode(c, extendsNode);
177
+ return undefined;
178
+ }
179
+
180
+ function isUnaryTupleTypeNode(node: Node): boolean {
181
+ return node.kind === SyntaxKind.TupleType && (node as TupleTypeNode).elements.nodes.length === 1;
182
+ }
183
+
184
+ /** A statement, declaration statement or block, which ends the search for enclosing conditional types. */
185
+ function isStatementLike(node: Node): boolean {
186
+ switch (node.kind) {
187
+ case SyntaxKind.Block:
188
+ case SyntaxKind.BreakStatement:
189
+ case SyntaxKind.ContinueStatement:
190
+ case SyntaxKind.DebuggerStatement:
191
+ case SyntaxKind.DoStatement:
192
+ case SyntaxKind.ExpressionStatement:
193
+ case SyntaxKind.EmptyStatement:
194
+ case SyntaxKind.ForInStatement:
195
+ case SyntaxKind.ForOfStatement:
196
+ case SyntaxKind.ForStatement:
197
+ case SyntaxKind.IfStatement:
198
+ case SyntaxKind.LabeledStatement:
199
+ case SyntaxKind.ReturnStatement:
200
+ case SyntaxKind.SwitchStatement:
201
+ case SyntaxKind.ThrowStatement:
202
+ case SyntaxKind.TryStatement:
203
+ case SyntaxKind.VariableStatement:
204
+ case SyntaxKind.WhileStatement:
205
+ case SyntaxKind.WithStatement:
206
+ case SyntaxKind.NotEmittedStatement:
207
+ case SyntaxKind.JSDoc:
208
+ return true;
209
+ }
210
+ return isDeclarationStatementKind(node.kind);
211
+ }
212
+
213
+ function getTypeFromTypeNodeWorker(c: Checker, node: Node): Type {
214
+ switch (node.kind) {
215
+ case SyntaxKind.AnyKeyword:
216
+ case SyntaxKind.JSDocAllType:
217
+ return c.anyType;
218
+ case SyntaxKind.JSDocNonNullableType:
219
+ return getTypeFromTypeNode(c, getType(node)!);
220
+ case SyntaxKind.JSDocNullableType: {
221
+ const t = getTypeFromTypeNode(c, getType(node)!);
222
+ return c.strictNullChecks ? getNullableType(c, t, TypeFlags.Null) : t;
223
+ }
224
+ case SyntaxKind.JSDocVariadicType:
225
+ return createArrayType(c, getTypeFromTypeNode(c, getType(node)!));
226
+ case SyntaxKind.JSDocOptionalType:
227
+ return addOptionality(c, getTypeFromTypeNode(c, getType(node)!), false, true);
228
+ case SyntaxKind.UnknownKeyword:
229
+ return c.unknownType;
230
+ case SyntaxKind.StringKeyword:
231
+ return c.stringType;
232
+ case SyntaxKind.NumberKeyword:
233
+ return c.numberType;
234
+ case SyntaxKind.BigIntKeyword:
235
+ return c.bigintType;
236
+ case SyntaxKind.BooleanKeyword:
237
+ return c.booleanType;
238
+ case SyntaxKind.SymbolKeyword:
239
+ return c.esSymbolType;
240
+ case SyntaxKind.VoidKeyword:
241
+ return c.voidType;
242
+ case SyntaxKind.UndefinedKeyword:
243
+ return c.undefinedType;
244
+ case SyntaxKind.NullKeyword:
245
+ return c.nullType;
246
+ case SyntaxKind.NeverKeyword:
247
+ return c.neverType;
248
+ case SyntaxKind.ObjectKeyword:
249
+ return c.nonPrimitiveType;
250
+ case SyntaxKind.IntrinsicKeyword:
251
+ return c.intrinsicMarkerType;
252
+ case SyntaxKind.ThisType:
253
+ case SyntaxKind.ThisKeyword:
254
+ return getTypeFromThisTypeNode(c, node);
255
+ case SyntaxKind.LiteralType:
256
+ return getTypeFromLiteralTypeNode(c, node as LiteralTypeNode);
257
+ case SyntaxKind.TypeReference:
258
+ case SyntaxKind.ExpressionWithTypeArguments:
259
+ return getTypeFromTypeReference(c, node);
260
+ case SyntaxKind.TypePredicate:
261
+ return (node as TypePredicateNode).assertsModifier !== undefined ? c.voidType : c.booleanType;
262
+ case SyntaxKind.TypeQuery:
263
+ return getTypeFromTypeQueryNode(c, node);
264
+ case SyntaxKind.ArrayType:
265
+ case SyntaxKind.TupleType:
266
+ return getTypeFromArrayOrTupleTypeNode(c, node);
267
+ case SyntaxKind.OptionalType:
268
+ return addOptionality(c, getTypeFromTypeNode(c, (node as OptionalTypeNode).type), true, true);
269
+ case SyntaxKind.UnionType:
270
+ return getTypeFromUnionTypeNode(c, node as UnionTypeNode);
271
+ case SyntaxKind.IntersectionType:
272
+ return getTypeFromIntersectionTypeNode(c, node as IntersectionTypeNode);
273
+ case SyntaxKind.NamedTupleMember:
274
+ return getTypeFromNamedTupleTypeNode(c, node as NamedTupleMember);
275
+ case SyntaxKind.ParenthesizedType:
276
+ return getTypeFromTypeNode(c, getType(node)!);
277
+ case SyntaxKind.RestType:
278
+ return getTypeFromRestTypeNode(c, node);
279
+ case SyntaxKind.FunctionType:
280
+ case SyntaxKind.ConstructorType:
281
+ case SyntaxKind.TypeLiteral:
282
+ return getTypeFromTypeLiteralOrFunctionOrConstructorTypeNode(c, node);
283
+ case SyntaxKind.TypeOperator:
284
+ return getTypeFromTypeOperatorNode(c, node as TypeOperatorNode);
285
+ case SyntaxKind.IndexedAccessType:
286
+ return getTypeFromIndexedAccessTypeNode(c, node as IndexedAccessTypeNode);
287
+ case SyntaxKind.TemplateLiteralType:
288
+ return getTypeFromTemplateTypeNode(c, node as TemplateLiteralTypeNode);
289
+ case SyntaxKind.MappedType:
290
+ return getTypeFromMappedTypeNode(c, node);
291
+ case SyntaxKind.ConditionalType:
292
+ return getTypeFromConditionalTypeNode(c, node);
293
+ case SyntaxKind.InferType: {
294
+ let type = c.resolvedTypes.get(node.id);
295
+ if (type === undefined) {
296
+ type = getDeclaredTypeOfTypeParameter(c, getSymbolOfDeclaration(c, (node as InferTypeNode).typeParameter)!);
297
+ c.resolvedTypes.set(node.id, type);
298
+ }
299
+ return type;
300
+ }
301
+ case SyntaxKind.ImportType:
302
+ return getTypeFromImportTypeNode(c, node);
303
+ }
304
+ return c.errorType;
305
+ }
306
+
307
+ export function getTypeFromThisTypeNode(c: Checker, node: Node): Type {
308
+ let type = c.resolvedTypes.get(node.id);
309
+ if (type === undefined) {
310
+ type = getThisType(c, node);
311
+ c.resolvedTypes.set(node.id, type);
312
+ }
313
+ return type;
314
+ }
315
+
316
+ function getThisType(c: Checker, node: Node): Type {
317
+ const container = getThisContainer(node, false, false);
318
+ const parent = container.parent;
319
+ if (parent !== undefined && (isClassLike(parent) || parent.kind === SyntaxKind.InterfaceDeclaration)) {
320
+ if (!isStatic(container) && (container.kind !== SyntaxKind.Constructor || isDescendant(node, getBody(container))))
321
+ return getDeclaredTypeOfClassOrInterface(c, getSymbolOfDeclaration(c, parent)!).thisType ?? c.errorType;
322
+ }
323
+ c.error(node, Diagnostics.A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface);
324
+ return c.errorType;
325
+ }
326
+
327
+ function isDescendant(node: Node, ancestor: Node | undefined): boolean {
328
+ if (ancestor === undefined) return false;
329
+ for (let n: Node | undefined = node; n !== undefined; n = n.parent) if (n === ancestor) return true;
330
+ return false;
331
+ }
332
+
333
+ function getTypeFromLiteralTypeNode(c: Checker, node: LiteralTypeNode): Type {
334
+ if (node.literal.kind === SyntaxKind.NullKeyword) return c.nullType;
335
+ let type = c.resolvedTypes.get(node.id);
336
+ if (type === undefined) {
337
+ type = getRegularTypeOfLiteralType(c, checkExpression(c, node.literal));
338
+ c.resolvedTypes.set(node.id, type);
339
+ }
340
+ return type;
341
+ }
342
+
343
+ function getTypeFromTypeLiteralOrFunctionOrConstructorTypeNode(c: Checker, node: Node): Type {
344
+ let type = c.resolvedTypes.get(node.id);
345
+ if (type === undefined) {
346
+ // Members resolve lazily.
347
+ const alias = getAliasForTypeNode(c, node);
348
+ const symbol = getSymbol(node);
349
+ if (symbol === undefined || (getMembersOfSymbol(c, symbol).size === 0 && alias === undefined))
350
+ type = c.emptyTypeLiteralType;
351
+ else {
352
+ const t = newObjectType(c, ObjectFlags.Anonymous, symbol);
353
+ t.alias = alias;
354
+ type = t;
355
+ }
356
+ c.resolvedTypes.set(node.id, type);
357
+ }
358
+ return type;
359
+ }
360
+
361
+ export function getTypeFromIndexedAccessTypeNode(c: Checker, node: IndexedAccessTypeNode): Type {
362
+ let type = c.resolvedTypes.get(node.id);
363
+ if (type === undefined) {
364
+ const objectType = getTypeFromTypeNode(c, node.objectType);
365
+ const indexType = getTypeFromTypeNode(c, node.indexType);
366
+ type = getIndexedAccessTypeEx(c, objectType, indexType, 0, node, getAliasForTypeNode(c, node));
367
+ c.resolvedTypes.set(node.id, type);
368
+ }
369
+ return type;
370
+ }
371
+
372
+ function getTypeFromTypeOperatorNode(c: Checker, node: TypeOperatorNode): Type {
373
+ let type = c.resolvedTypes.get(node.id);
374
+ if (type === undefined) {
375
+ const argType = node.type;
376
+ switch (node.operator) {
377
+ case SyntaxKind.KeyOfKeyword:
378
+ type = getIndexType(c, getTypeFromTypeNode(c, argType));
379
+ break;
380
+ case SyntaxKind.UniqueKeyword:
381
+ type =
382
+ argType.kind === SyntaxKind.SymbolKeyword
383
+ ? getESSymbolLikeTypeForNode(c, walkUpParenthesizedTypes(node.parent!))
384
+ : c.errorType;
385
+ break;
386
+ default:
387
+ type = getTypeFromTypeNode(c, argType);
388
+ }
389
+ c.resolvedTypes.set(node.id, type);
390
+ }
391
+ return type;
392
+ }
393
+
394
+ function walkUpParenthesizedTypes(node: Node): Node {
395
+ let n = node;
396
+ while (n.kind === SyntaxKind.ParenthesizedType && n.parent !== undefined) n = n.parent;
397
+ return n;
398
+ }
399
+
400
+ /** A const variable of a variable statement, a static readonly property, or a readonly property signature. */
401
+ function isValidESSymbolDeclaration(node: Node): boolean {
402
+ switch (node.kind) {
403
+ case SyntaxKind.VariableDeclaration: {
404
+ const list = node.parent!;
405
+ return (
406
+ (getCombinedNodeFlags(node) & NodeFlags.Constant) === NodeFlags.Const &&
407
+ getName(node)!.kind === SyntaxKind.Identifier &&
408
+ list.kind === SyntaxKind.VariableDeclarationList &&
409
+ list.parent!.kind === SyntaxKind.VariableStatement
410
+ );
411
+ }
412
+ case SyntaxKind.PropertyDeclaration:
413
+ return hasSyntacticModifier(node, ModifierFlags.Readonly) && isStatic(node);
414
+ case SyntaxKind.PropertySignature:
415
+ return hasSyntacticModifier(node, ModifierFlags.Readonly);
416
+ }
417
+ return false;
418
+ }
419
+
420
+ export function getESSymbolLikeTypeForNode(c: Checker, node: Node): Type {
421
+ if (isValidESSymbolDeclaration(node)) {
422
+ const symbol = getSymbolOfDeclaration(c, node);
423
+ if (symbol !== undefined) {
424
+ let uniqueType = c.uniqueESSymbolTypes.get(symbol);
425
+ if (uniqueType === undefined) {
426
+ uniqueType = new UniqueESSymbolType(c.nextTypeId(), symbol, '￾@' + symbol.name + '@' + getSymbolId(symbol));
427
+ c.uniqueESSymbolTypes.set(symbol, uniqueType);
428
+ }
429
+ return uniqueType;
430
+ }
431
+ }
432
+ return c.esSymbolType;
433
+ }
434
+
435
+ // ---- Type references
436
+
437
+ function isConstTypeReference(node: Node): boolean {
438
+ if (node.kind !== SyntaxKind.TypeReference) return false;
439
+ const ref = node as TypeReferenceNode;
440
+ return (
441
+ ref.typeName.kind === SyntaxKind.Identifier && getText(ref.typeName) === 'const' && ref.typeArguments === undefined
442
+ );
443
+ }
444
+
445
+ function isAssertionExpression(node: Node | undefined): boolean {
446
+ return (
447
+ node !== undefined && (node.kind === SyntaxKind.AsExpression || node.kind === SyntaxKind.TypeAssertionExpression)
448
+ );
449
+ }
450
+
451
+ export function getTypeFromTypeReference(c: Checker, node: Node): Type {
452
+ let type = c.resolvedTypes.get(node.id);
453
+ if (type === undefined) {
454
+ if (isConstTypeReference(node) && isAssertionExpression(node.parent))
455
+ type = checkExpressionCached(c, getExpression(node.parent!)!);
456
+ else
457
+ type =
458
+ getIntendedTypeFromJSDocTypeReference(c, node) ??
459
+ getTypeReferenceType(c, node, getSymbolFromTypeReference(c, node));
460
+ c.resolvedTypes.set(node.id, type);
461
+ }
462
+ return type;
463
+ }
464
+
465
+ export function getSymbolFromTypeReference(c: Checker, node: Node): Symbol {
466
+ let symbol = c.resolvedSymbols.get(node.id);
467
+ if (symbol === undefined) {
468
+ if (isConstTypeReference(node) && isAssertionExpression(node.parent)) symbol = c.unknownSymbol;
469
+ else symbol = resolveTypeReferenceName(c, node, SymbolFlags.Type, false);
470
+ c.resolvedSymbols.set(node.id, symbol);
471
+ }
472
+ return symbol;
473
+ }
474
+
475
+ function getTypeReferenceName(node: Node): Node | undefined {
476
+ if (node.kind === SyntaxKind.TypeReference) return (node as TypeReferenceNode).typeName;
477
+ if (node.kind === SyntaxKind.ExpressionWithTypeArguments) {
478
+ const e = (node as ExpressionWithTypeArguments).expression;
479
+ if (isEntityNameExpression(e)) return e;
480
+ }
481
+ return undefined;
482
+ }
483
+
484
+ function isEntityNameExpression(node: Node): boolean {
485
+ if (node.kind === SyntaxKind.Identifier) return true;
486
+ if (node.kind === SyntaxKind.PropertyAccessExpression) {
487
+ const name = getName(node);
488
+ return name !== undefined && name.kind === SyntaxKind.Identifier && isEntityNameExpression(getExpression(node)!);
489
+ }
490
+ return false;
491
+ }
492
+
493
+ export function resolveTypeReferenceName(
494
+ c: Checker,
495
+ typeReference: Node,
496
+ meaning: SymbolFlags,
497
+ ignoreErrors: boolean,
498
+ ): Symbol {
499
+ const name = getTypeReferenceName(typeReference);
500
+ if (name === undefined) return c.unknownSymbol;
501
+ const symbol = resolveEntityName(c, name, meaning, ignoreErrors, false, undefined);
502
+ if (symbol !== undefined && symbol !== c.unknownSymbol) return symbol;
503
+ if (ignoreErrors) return c.unknownSymbol;
504
+ return getUnresolvedSymbolForEntityName(c, name);
505
+ }
506
+
507
+ export function getUnresolvedSymbolForEntityName(c: Checker, name: Node): Symbol {
508
+ let identifier: Node;
509
+ if (name.kind === SyntaxKind.QualifiedName) identifier = (name as QualifiedName).right;
510
+ else if (name.kind === SyntaxKind.PropertyAccessExpression) identifier = getName(name)!;
511
+ else identifier = name;
512
+ const text = getText(identifier);
513
+ if (text === '') return c.unknownSymbol;
514
+ let parentSymbol: Symbol | undefined;
515
+ if (name.kind === SyntaxKind.QualifiedName)
516
+ parentSymbol = getUnresolvedSymbolForEntityName(c, (name as QualifiedName).left);
517
+ else if (name.kind === SyntaxKind.PropertyAccessExpression)
518
+ parentSymbol = getUnresolvedSymbolForEntityName(c, getExpression(name)!);
519
+ const path = parentSymbol !== undefined ? getSymbolPath(parentSymbol) + '.' + text : text;
520
+ let result = c.unresolvedSymbols.get(path);
521
+ if (result === undefined) {
522
+ result = c.newSymbolWithCheckFlags(SymbolFlags.TypeAlias, text, CheckFlags.Unresolved);
523
+ c.unresolvedSymbols.set(path, result);
524
+ result.parent = parentSymbol;
525
+ c.symbolLinks(result).declaredType = c.unresolvedType;
526
+ }
527
+ return result;
528
+ }
529
+
530
+ function getSymbolPath(symbol: Symbol): string {
531
+ return symbol.parent !== undefined ? getSymbolPath(symbol.parent) + '.' + symbol.name : symbol.name;
532
+ }
533
+
534
+ export function getTypeReferenceType(c: Checker, node: Node, symbol: Symbol): Type {
535
+ if (symbol === c.unknownSymbol) return c.errorType;
536
+ if ((symbol.flags & (SymbolFlags.Class | SymbolFlags.Interface)) !== 0)
537
+ return getTypeFromClassOrInterfaceReference(c, node, symbol);
538
+ if ((symbol.flags & SymbolFlags.TypeAlias) !== 0) return getTypeFromTypeAliasReference(c, node, symbol);
539
+ // Enums and type parameters can't be generic.
540
+ const res = tryGetDeclaredTypeOfSymbol(c, symbol);
541
+ if (res !== undefined && checkNoTypeArguments(c, node, symbol)) return getRegularTypeOfLiteralType(c, res);
542
+ return c.errorType;
543
+ }
544
+
545
+ function typeArgumentNodesOf(node: Node): Node[] {
546
+ const list = getTypeArguments(node);
547
+ return list !== undefined ? list.nodes : emptyNodes;
548
+ }
549
+
550
+ const emptyNodes: Node[] = [];
551
+
552
+ export function getTypeArgumentsFromNode(c: Checker, node: Node): Type[] {
553
+ return getTypesFromTypeNodes(c, typeArgumentNodesOf(node));
554
+ }
555
+
556
+ export function getTypesFromTypeNodes(c: Checker, nodes: readonly Node[]): Type[] {
557
+ const result: Type[] = [];
558
+ for (const n of nodes) result.push(getTypeFromTypeNode(c, n));
559
+ return result;
560
+ }
561
+
562
+ export function getTypeFromClassOrInterfaceReference(c: Checker, node: Node, symbol: Symbol): Type {
563
+ const t = getDeclaredTypeOfClassOrInterface(c, getMergedSymbol(c, symbol));
564
+ const typeParameters = t.localTypeParameters();
565
+ if (typeParameters.length === 0) return checkNoTypeArguments(c, node, symbol) ? t : c.errorType;
566
+ const numTypeArguments = typeArgumentNodesOf(node).length;
567
+ const minTypeArgumentCount = getMinTypeArgumentCount(c, typeParameters);
568
+ const isJs = (node.flags & NodeFlags.JavaScriptFile) !== 0;
569
+ const isJsImplicitAny = !c.noImplicitAny && isJs;
570
+ if (!isJsImplicitAny && (numTypeArguments < minTypeArgumentCount || numTypeArguments > typeParameters.length)) {
571
+ const message =
572
+ minTypeArgumentCount < typeParameters.length
573
+ ? Diagnostics.Generic_type_0_requires_between_1_and_2_type_arguments
574
+ : Diagnostics.Generic_type_0_requires_1_type_argument_s;
575
+ c.error(
576
+ node,
577
+ message,
578
+ typeToString(c, t, undefined, 1 << 1),
579
+ String(minTypeArgumentCount),
580
+ String(typeParameters.length),
581
+ );
582
+ if (!isJs) return c.errorType;
583
+ }
584
+ if (
585
+ node.kind === SyntaxKind.TypeReference &&
586
+ isDeferredTypeReferenceNode(c, node, numTypeArguments !== typeParameters.length)
587
+ )
588
+ return createDeferredTypeReference(c, t, node, undefined, getAliasForTypeNode(c, node));
589
+ // Outer type parameters are supplied automatically; the reference gives the local ones.
590
+ const localTypeArguments = fillMissingTypeArguments(
591
+ c,
592
+ getTypeArgumentsFromNode(c, node),
593
+ typeParameters,
594
+ minTypeArgumentCount,
595
+ isJs,
596
+ );
597
+ // localTypeArguments is a new list, so without outer type parameters it is the reference's own.
598
+ const outerCount = t.outerTypeParameterCount;
599
+ if (outerCount === 0) return createTypeReferenceEx(c, t, localTypeArguments, ObjectFlags.FromTypeNode);
600
+ const typeArguments: Type[] = [];
601
+ for (let i = 0; i < outerCount; i++) typeArguments.push(t.allTypeParameters[i]!);
602
+ for (const typeArgument of localTypeArguments) typeArguments.push(typeArgument);
603
+ return createTypeReferenceEx(c, t, typeArguments, ObjectFlags.FromTypeNode);
604
+ }
605
+
606
+ export function checkNoTypeArguments(c: Checker, node: Node, symbol: Symbol | undefined): boolean {
607
+ if (typeArgumentNodesOf(node).length === 0) return true;
608
+ const typeName =
609
+ symbol !== undefined
610
+ ? symbolToString(c, symbol)
611
+ : declarationNameToString(getSourceFileOfNode(node), (node as TypeReferenceNode).typeName);
612
+ c.error(node, Diagnostics.Type_0_is_not_generic, typeName);
613
+ return false;
614
+ }
615
+
616
+ /** Directly aliased references, and those possibly in circular chains of eagerly resolved types, are deferred. */
617
+ function isDeferredTypeReferenceNode(c: Checker, node: Node, hasDefaultTypeArguments: boolean): boolean {
618
+ if (getAliasSymbolForTypeNode(c, node) !== undefined) return true;
619
+ if (!isResolvedByTypeAlias(node)) return false;
620
+ switch (node.kind) {
621
+ case SyntaxKind.ArrayType:
622
+ return mayResolveTypeAlias(c, (node as ArrayTypeNode).elementType);
623
+ case SyntaxKind.TupleType:
624
+ return someMayResolveTypeAlias(c, (node as TupleTypeNode).elements.nodes);
625
+ case SyntaxKind.TypeReference:
626
+ return hasDefaultTypeArguments || someMayResolveTypeAlias(c, typeArgumentNodesOf(node));
627
+ }
628
+ return false;
629
+ }
630
+
631
+ function isResolvedByTypeAlias(node: Node): boolean {
632
+ const parent = node.parent!;
633
+ switch (parent.kind) {
634
+ case SyntaxKind.ParenthesizedType:
635
+ case SyntaxKind.NamedTupleMember:
636
+ case SyntaxKind.TypeReference:
637
+ case SyntaxKind.UnionType:
638
+ case SyntaxKind.IntersectionType:
639
+ case SyntaxKind.IndexedAccessType:
640
+ case SyntaxKind.ConditionalType:
641
+ case SyntaxKind.TypeOperator:
642
+ case SyntaxKind.ArrayType:
643
+ case SyntaxKind.TupleType:
644
+ return isResolvedByTypeAlias(parent);
645
+ case SyntaxKind.TypeAliasDeclaration:
646
+ case SyntaxKind.JSTypeAliasDeclaration:
647
+ return true;
648
+ }
649
+ return false;
650
+ }
651
+
652
+ function mayResolveTypeAlias(c: Checker, node: Node): boolean {
653
+ switch (node.kind) {
654
+ case SyntaxKind.TypeReference:
655
+ return (resolveTypeReferenceName(c, node, SymbolFlags.Type, false).flags & SymbolFlags.TypeAlias) !== 0;
656
+ case SyntaxKind.TypeQuery:
657
+ return true;
658
+ case SyntaxKind.TypeOperator:
659
+ return (
660
+ (node as TypeOperatorNode).operator !== SyntaxKind.UniqueKeyword &&
661
+ mayResolveTypeAlias(c, (node as TypeOperatorNode).type)
662
+ );
663
+ case SyntaxKind.ParenthesizedType:
664
+ case SyntaxKind.OptionalType:
665
+ case SyntaxKind.NamedTupleMember:
666
+ return mayResolveTypeAlias(c, getType(node)!);
667
+ case SyntaxKind.RestType: {
668
+ const t = (node as RestTypeNode).type;
669
+ return t.kind !== SyntaxKind.ArrayType || mayResolveTypeAlias(c, (t as ArrayTypeNode).elementType);
670
+ }
671
+ case SyntaxKind.UnionType:
672
+ return someMayResolveTypeAlias(c, (node as UnionTypeNode).types.nodes);
673
+ case SyntaxKind.IntersectionType:
674
+ return someMayResolveTypeAlias(c, (node as IntersectionTypeNode).types.nodes);
675
+ case SyntaxKind.IndexedAccessType:
676
+ return (
677
+ mayResolveTypeAlias(c, (node as IndexedAccessTypeNode).objectType) ||
678
+ mayResolveTypeAlias(c, (node as IndexedAccessTypeNode).indexType)
679
+ );
680
+ case SyntaxKind.ConditionalType: {
681
+ const n = node as ConditionalTypeNode;
682
+ return (
683
+ mayResolveTypeAlias(c, n.checkType) ||
684
+ mayResolveTypeAlias(c, n.extendsType) ||
685
+ mayResolveTypeAlias(c, n.trueType) ||
686
+ mayResolveTypeAlias(c, n.falseType)
687
+ );
688
+ }
689
+ }
690
+ return false;
691
+ }
692
+
693
+ function someMayResolveTypeAlias(c: Checker, nodes: readonly Node[]): boolean {
694
+ for (const n of nodes) if (mayResolveTypeAlias(c, n)) return true;
695
+ return false;
696
+ }
697
+
698
+ // ---- Type aliases
699
+
700
+ export function isTypeAlias(node: Node): boolean {
701
+ return node.kind === SyntaxKind.TypeAliasDeclaration || node.kind === SyntaxKind.JSTypeAliasDeclaration;
702
+ }
703
+
704
+ export function getAliasForTypeNode(c: Checker, node: Node): TypeAlias | undefined {
705
+ const symbol = getAliasSymbolForTypeNode(c, node);
706
+ return symbol !== undefined
707
+ ? new TypeAlias(symbol, getLocalTypeParametersOfClassOrInterfaceOrTypeAlias(c, symbol))
708
+ : undefined;
709
+ }
710
+
711
+ export function getAliasSymbolForTypeNode(c: Checker, node: Node): Symbol | undefined {
712
+ let host = node.parent!;
713
+ while (
714
+ host.kind === SyntaxKind.ParenthesizedType ||
715
+ (host.kind === SyntaxKind.TypeOperator && (host as TypeOperatorNode).operator === SyntaxKind.ReadonlyKeyword)
716
+ )
717
+ host = host.parent!;
718
+ return isTypeAlias(host) ? getSymbolOfDeclaration(c, host) : undefined;
719
+ }
720
+
721
+ function isLocalTypeAlias(symbol: Symbol): boolean {
722
+ let declaration: Node | undefined;
723
+ for (const d of getDeclarations(symbol)) {
724
+ if (isTypeAlias(d)) {
725
+ declaration = d;
726
+ break;
727
+ }
728
+ }
729
+ if (declaration === undefined) return false;
730
+ for (let n = declaration.parent; n !== undefined; n = n.parent) {
731
+ switch (n.kind) {
732
+ case SyntaxKind.FunctionDeclaration:
733
+ case SyntaxKind.FunctionExpression:
734
+ case SyntaxKind.ArrowFunction:
735
+ case SyntaxKind.MethodDeclaration:
736
+ case SyntaxKind.Constructor:
737
+ case SyntaxKind.GetAccessor:
738
+ case SyntaxKind.SetAccessor:
739
+ return true;
740
+ }
741
+ }
742
+ return false;
743
+ }
744
+
745
+ function getTypeFromTypeAliasReference(c: Checker, node: Node, symbol: Symbol): Type {
746
+ const typeArgumentNodes = typeArgumentNodesOf(node);
747
+ if ((symbol.checkFlags & CheckFlags.Unresolved) !== 0) {
748
+ const alias = new TypeAlias(symbol, getTypesFromTypeNodes(c, typeArgumentNodes));
749
+ const key = aliasKey(alias);
750
+ let errorType = c.errorTypes.get(key);
751
+ if (errorType === undefined) {
752
+ errorType = c.newIntrinsicType(TypeFlags.Any, 'error', ObjectFlags.None);
753
+ errorType.alias = alias;
754
+ c.errorTypes.set(key, errorType);
755
+ }
756
+ return errorType;
757
+ }
758
+ const t = getDeclaredTypeOfSymbol(c, symbol);
759
+ const typeParameters = c.symbolLinks(symbol).typeParameters;
760
+ if (typeParameters !== undefined && typeParameters.length !== 0) {
761
+ const numTypeArguments = typeArgumentNodes.length;
762
+ const minTypeArgumentCount = getMinTypeArgumentCount(c, typeParameters);
763
+ if (numTypeArguments < minTypeArgumentCount || numTypeArguments > typeParameters.length) {
764
+ const message =
765
+ minTypeArgumentCount === typeParameters.length
766
+ ? Diagnostics.Generic_type_0_requires_1_type_argument_s
767
+ : Diagnostics.Generic_type_0_requires_between_1_and_2_type_arguments;
768
+ c.error(node, message, symbolToString(c, symbol), String(minTypeArgumentCount), String(typeParameters.length));
769
+ return c.errorType;
770
+ }
771
+ // A local alias doesn't name an instantiation of a top-level one.
772
+ const aliasSymbol = getAliasSymbolForTypeNode(c, node);
773
+ let newAliasSymbol =
774
+ aliasSymbol !== undefined && (isLocalTypeAlias(symbol) || !isLocalTypeAlias(aliasSymbol))
775
+ ? aliasSymbol
776
+ : undefined;
777
+ let aliasTypeArguments: Type[] | undefined;
778
+ if (newAliasSymbol !== undefined)
779
+ aliasTypeArguments = getLocalTypeParametersOfClassOrInterfaceOrTypeAlias(c, newAliasSymbol);
780
+ else if (node.kind === SyntaxKind.TypeReference) {
781
+ const aliased = resolveTypeReferenceName(c, node, SymbolFlags.Alias, true);
782
+ if (aliased !== c.unknownSymbol) {
783
+ const resolved = resolveAlias(c, aliased);
784
+ if ((resolved.flags & SymbolFlags.TypeAlias) !== 0) {
785
+ newAliasSymbol = resolved;
786
+ aliasTypeArguments = getTypeArgumentsFromNode(c, node);
787
+ }
788
+ }
789
+ }
790
+ const newAlias =
791
+ newAliasSymbol !== undefined ? new TypeAlias(newAliasSymbol, aliasTypeArguments ?? emptyTypes) : undefined;
792
+ return getTypeAliasInstantiation(c, symbol, getTypeArgumentsFromNode(c, node), newAlias);
793
+ }
794
+ return checkNoTypeArguments(c, node, symbol) ? t : c.errorType;
795
+ }
796
+
797
+ export function getTypeAliasInstantiation(
798
+ c: Checker,
799
+ symbol: Symbol,
800
+ typeArguments: Type[],
801
+ alias: TypeAlias | undefined,
802
+ ): Type {
803
+ const t = getDeclaredTypeOfSymbol(c, symbol);
804
+ if (t === c.intrinsicMarkerType && typeArguments.length === 1) {
805
+ const kind = intrinsicTypeKind(symbol.name);
806
+ if (kind === IntrinsicTypeKind.NoInfer) return getNoInferType(c, typeArguments[0]!);
807
+ if (kind !== IntrinsicTypeKind.Unknown) return getStringMappingType(c, symbol, typeArguments[0]!);
808
+ }
809
+ const links = c.symbolLinks(symbol);
810
+ const typeParameters = links.typeParameters ?? emptyTypes;
811
+ let instantiations = links.instantiations;
812
+ if (instantiations === undefined) {
813
+ instantiations = new Map<string, Type>();
814
+ links.instantiations = instantiations;
815
+ }
816
+ const key = typeListKey(typeArguments) + aliasKey(alias);
817
+ let instantiation = instantiations.get(key);
818
+ if (instantiation === undefined) {
819
+ const inJs =
820
+ symbol.valueDeclaration !== undefined && (symbol.valueDeclaration.flags & NodeFlags.JavaScriptFile) !== 0;
821
+ const mapper = newTypeMapper(
822
+ typeParameters,
823
+ fillMissingTypeArguments(c, typeArguments, typeParameters, getMinTypeArgumentCount(c, typeParameters), inJs),
824
+ );
825
+ instantiation = instantiateTypeWithAlias(c, t, mapper, alias);
826
+ instantiations.set(key, instantiation);
827
+ }
828
+ return instantiation;
829
+ }
830
+
831
+ // ---- Other type nodes
832
+
833
+ function getTypeFromTypeQueryNode(c: Checker, node: Node): Type {
834
+ let type = c.resolvedTypes.get(node.id);
835
+ if (type === undefined) {
836
+ type = getRegularTypeOfLiteralType(c, getWidenedType(c, checkExpressionWithTypeArguments(c, node)));
837
+ c.resolvedTypes.set(node.id, type);
838
+ }
839
+ return type;
840
+ }
841
+
842
+ export function getTupleElementFlags(c: Checker, node: Node): ElementFlags {
843
+ switch (node.kind) {
844
+ case SyntaxKind.OptionalType:
845
+ return ElementFlags.Optional;
846
+ case SyntaxKind.RestType:
847
+ return getArrayElementTypeNode((node as RestTypeNode).type) !== undefined
848
+ ? ElementFlags.Rest
849
+ : ElementFlags.Variadic;
850
+ case SyntaxKind.NamedTupleMember: {
851
+ const named = node as NamedTupleMember;
852
+ if (named.questionToken !== undefined) return ElementFlags.Optional;
853
+ if (named.dotDotDotToken !== undefined)
854
+ return getArrayElementTypeNode(named.type) !== undefined ? ElementFlags.Rest : ElementFlags.Variadic;
855
+ return ElementFlags.Required;
856
+ }
857
+ }
858
+ return ElementFlags.Required;
859
+ }
860
+
861
+ function getTupleElementInfo(c: Checker, node: Node): TupleElementInfo {
862
+ return new TupleElementInfo(
863
+ getTupleElementFlags(c, node),
864
+ node.kind === SyntaxKind.NamedTupleMember || node.kind === SyntaxKind.Parameter ? node : undefined,
865
+ );
866
+ }
867
+
868
+ function getArrayElementTypeNode(node: Node): Node | undefined {
869
+ switch (node.kind) {
870
+ case SyntaxKind.ParenthesizedType:
871
+ return getArrayElementTypeNode(getType(node)!);
872
+ case SyntaxKind.TupleType: {
873
+ const elements = (node as TupleTypeNode).elements.nodes;
874
+ if (elements.length === 1) {
875
+ const e = elements[0]!;
876
+ if (e.kind === SyntaxKind.RestType) return getArrayElementTypeNode((e as RestTypeNode).type);
877
+ if (e.kind === SyntaxKind.NamedTupleMember && (e as NamedTupleMember).dotDotDotToken !== undefined)
878
+ return getArrayElementTypeNode((e as NamedTupleMember).type);
879
+ }
880
+ return undefined;
881
+ }
882
+ case SyntaxKind.ArrayType:
883
+ return (node as ArrayTypeNode).elementType;
884
+ }
885
+ return undefined;
886
+ }
887
+
888
+ function getArrayOrTupleTargetType(c: Checker, node: Node): Type {
889
+ const parent = node.parent!;
890
+ const readonly =
891
+ parent.kind === SyntaxKind.TypeOperator && (parent as TypeOperatorNode).operator === SyntaxKind.ReadonlyKeyword;
892
+ if (getArrayElementTypeNode(node) !== undefined) return readonly ? c.globalReadonlyArrayType : c.globalArrayType;
893
+ const elementInfos: TupleElementInfo[] = [];
894
+ for (const e of (node as TupleTypeNode).elements.nodes) elementInfos.push(getTupleElementInfo(c, e));
895
+ return getTupleTargetType(c, elementInfos, readonly);
896
+ }
897
+
898
+ function getTypeFromArrayOrTupleTypeNode(c: Checker, node: Node): Type {
899
+ const type = c.resolvedTypes.get(node.id);
900
+ if (type !== undefined) return type;
901
+ const target = getArrayOrTupleTargetType(c, node);
902
+ if (target === c.emptyGenericType) c.resolvedTypes.set(node.id, c.emptyObjectType);
903
+ else if (
904
+ !(node.kind === SyntaxKind.TupleType && hasVariadicTupleElement(c, node as TupleTypeNode)) &&
905
+ isDeferredTypeReferenceNode(c, node, false)
906
+ )
907
+ c.resolvedTypes.set(
908
+ node.id,
909
+ node.kind === SyntaxKind.TupleType && (node as TupleTypeNode).elements.nodes.length === 0
910
+ ? target
911
+ : createDeferredTypeReference(c, target, node, undefined, getAliasForTypeNode(c, node)),
912
+ );
913
+ else {
914
+ const elementTypes =
915
+ node.kind === SyntaxKind.ArrayType
916
+ ? [getTypeFromTypeNode(c, (node as ArrayTypeNode).elementType)]
917
+ : getTypesFromTypeNodes(c, (node as TupleTypeNode).elements.nodes);
918
+ c.resolvedTypes.set(
919
+ node.id,
920
+ (target.objectFlags & ObjectFlags.Tuple) !== 0
921
+ ? createNormalizedTupleType(c, target as TupleType, elementTypes, ObjectFlags.FromTypeNode)
922
+ : createTypeReferenceEx(c, target, elementTypes, ObjectFlags.FromTypeNode),
923
+ );
924
+ }
925
+ return c.resolvedTypes.get(node.id)!;
926
+ }
927
+
928
+ function hasVariadicTupleElement(c: Checker, node: TupleTypeNode): boolean {
929
+ for (const e of node.elements.nodes) if ((getTupleElementFlags(c, e) & ElementFlags.Variadic) !== 0) return true;
930
+ return false;
931
+ }
932
+
933
+ /** Type arguments of a deferred reference from its node. */
934
+ export function getTypeArgumentsOfDeferredReference(c: Checker, node: Node, target: InterfaceType): Type[] {
935
+ switch (node.kind) {
936
+ case SyntaxKind.TypeReference:
937
+ return target
938
+ .outerTypeParameters()
939
+ .concat(
940
+ fillMissingTypeArguments(
941
+ c,
942
+ getTypeArgumentsFromNode(c, node),
943
+ target.localTypeParameters(),
944
+ getMinTypeArgumentCount(c, target.localTypeParameters()),
945
+ (node.flags & NodeFlags.JavaScriptFile) !== 0,
946
+ ),
947
+ );
948
+ case SyntaxKind.ArrayType:
949
+ return [getTypeFromTypeNode(c, (node as ArrayTypeNode).elementType)];
950
+ case SyntaxKind.TupleType:
951
+ return getTypesFromTypeNodes(c, (node as TupleTypeNode).elements.nodes);
952
+ }
953
+ return [];
954
+ }
955
+
956
+ function getTypeFromNamedTupleTypeNode(c: Checker, node: NamedTupleMember): Type {
957
+ let type = c.resolvedTypes.get(node.id);
958
+ if (type === undefined) {
959
+ type =
960
+ node.dotDotDotToken !== undefined
961
+ ? getTypeFromRestTypeNode(c, node)
962
+ : addOptionality(c, getTypeFromTypeNode(c, node.type), true, node.questionToken !== undefined);
963
+ c.resolvedTypes.set(node.id, type);
964
+ }
965
+ return type;
966
+ }
967
+
968
+ function getTypeFromRestTypeNode(c: Checker, node: Node): Type {
969
+ const typeNode = getType(node)!;
970
+ return getTypeFromTypeNode(c, getArrayElementTypeNode(typeNode) ?? typeNode);
971
+ }
972
+
973
+ function getTypeFromUnionTypeNode(c: Checker, node: UnionTypeNode): Type {
974
+ let type = c.resolvedTypes.get(node.id);
975
+ if (type === undefined) {
976
+ type = getUnionTypeEx(
977
+ c,
978
+ getTypesFromTypeNodes(c, node.types.nodes),
979
+ UnionReduction.Literal,
980
+ getAliasForTypeNode(c, node),
981
+ undefined,
982
+ );
983
+ c.resolvedTypes.set(node.id, type);
984
+ }
985
+ return type;
986
+ }
987
+
988
+ function getTypeFromIntersectionTypeNode(c: Checker, node: IntersectionTypeNode): Type {
989
+ if (c.resolvedTypes.get(node.id) === undefined) {
990
+ const alias = getAliasForTypeNode(c, node);
991
+ const types = getTypesFromTypeNodes(c, node.types.nodes);
992
+ // `string & {}` and friends keep literal completions in unions.
993
+ let noSupertypeReduction = false;
994
+ if (types.length === 2) {
995
+ const emptyIndex = types.indexOf(c.emptyTypeLiteralType);
996
+ if (emptyIndex >= 0) {
997
+ const t = types[1 - emptyIndex]!;
998
+ noSupertypeReduction =
999
+ (t.flags & (TypeFlags.String | TypeFlags.Number | TypeFlags.BigInt)) !== 0 ||
1000
+ ((t.flags & TypeFlags.TemplateLiteral) !== 0 && isPatternLiteralType(c, t));
1001
+ }
1002
+ }
1003
+ c.resolvedTypes.set(
1004
+ node.id,
1005
+ getIntersectionTypeEx(
1006
+ c,
1007
+ types,
1008
+ noSupertypeReduction ? IntersectionFlags.NoSupertypeReduction : IntersectionFlags.None,
1009
+ alias,
1010
+ ),
1011
+ );
1012
+ }
1013
+ return c.resolvedTypes.get(node.id)!;
1014
+ }
1015
+
1016
+ function getTypeFromTemplateTypeNode(c: Checker, node: TemplateLiteralTypeNode): Type {
1017
+ if (c.resolvedTypes.get(node.id) === undefined) {
1018
+ const spans = node.templateSpans.nodes;
1019
+ const texts: string[] = [getText(node.head)];
1020
+ const types: Type[] = [];
1021
+ for (const span of spans) {
1022
+ texts.push(getText((span as TemplateLiteralTypeSpan).literal));
1023
+ types.push(getTypeFromTypeNode(c, (span as TemplateLiteralTypeSpan).type));
1024
+ }
1025
+ c.resolvedTypes.set(node.id, getTemplateLiteralType(c, texts, types));
1026
+ }
1027
+ return c.resolvedTypes.get(node.id)!;
1028
+ }
1029
+
1030
+ /** The symbol an identifier resolves to, cached on the identifier. */
1031
+ export function getResolvedSymbolOfIdentifier(c: Checker, node: Node): Symbol {
1032
+ return getResolvedSymbol(c, node);
1033
+ }