tsc-ts 0.0.3 → 0.0.5

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 (596) hide show
  1. package/README.md +46 -0
  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 +2350 -0
  5. package/dist/api/compiler/ast.js +11206 -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 +1240 -0
  10. package/dist/api/compiler/binder.d.ts +33 -0
  11. package/dist/api/compiler/binder.js +2358 -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 +1640 -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 +356 -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 +787 -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 +315 -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 +290 -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 +579 -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 +2573 -0
  54. package/dist/api/compiler/checker-heritage.d.ts +28 -0
  55. package/dist/api/compiler/checker-heritage.js +900 -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 +441 -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 +198 -0
  69. package/dist/api/compiler/checker-members.js +2126 -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 +479 -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 +270 -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 +788 -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 +67 -0
  93. package/dist/api/compiler/checker-symbol-types.js +1885 -0
  94. package/dist/api/compiler/checker-symbols.d.ts +181 -0
  95. package/dist/api/compiler/checker-symbols.js +1782 -0
  96. package/dist/api/compiler/checker-type-factory.d.ts +142 -0
  97. package/dist/api/compiler/checker-type-factory.js +2501 -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 +1027 -0
  103. package/dist/api/compiler/checker-types.js +1697 -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 +491 -0
  109. package/dist/api/compiler/checker.js +912 -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 +167 -0
  119. package/dist/api/compiler/diagnostics.js +820 -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 +117 -0
  123. package/dist/api/compiler/file-include.js +536 -0
  124. package/dist/api/compiler/file-loader.d.ts +261 -0
  125. package/dist/api/compiler/file-loader.js +1257 -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 +799 -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 +36 -0
  135. package/dist/api/compiler/link-tables.js +83 -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 +744 -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 +219 -0
  191. package/dist/api/compiler/parallel-parse.js +537 -0
  192. package/dist/api/compiler/parser.d.ts +587 -0
  193. package/dist/api/compiler/parser.js +6407 -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 +154 -0
  203. package/dist/api/compiler/printer/emit-context.js +576 -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 +526 -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 +1011 -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 +894 -0
  244. package/dist/api/compiler/symbol.d.ts +240 -0
  245. package/dist/api/compiler/symbol.js +228 -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 +676 -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 +538 -0
  268. package/dist/api/compiler/transformers/declarations-pseudo.d.ts +160 -0
  269. package/dist/api/compiler/transformers/declarations-pseudo.js +797 -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 +197 -0
  276. package/dist/api/compiler/transformers/declarations.d.ts +175 -0
  277. package/dist/api/compiler/transformers/declarations.js +2380 -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 +128 -0
  321. package/dist/api/compiler/transformers/reference-resolver.js +1155 -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 +9 -0
  325. package/dist/api/compiler/transformers/subtree-facts.js +203 -0
  326. package/dist/api/compiler/transformers/syntax-facts.d.ts +51 -0
  327. package/dist/api/compiler/transformers/syntax-facts.js +254 -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 +74 -0
  357. package/dist/api/library/ast.generated.d.ts +1145 -0
  358. package/dist/api/library/ast.generated.js +3 -0
  359. package/dist/api/library/ast.js +5 -0
  360. package/dist/api/library/checker.d.ts +51 -0
  361. package/dist/api/library/checker.js +318 -0
  362. package/dist/api/library/compiler-options.generated.d.ts +108 -0
  363. package/dist/api/library/compiler-options.generated.js +3 -0
  364. package/dist/api/library/diagnostics.d.ts +13 -0
  365. package/dist/api/library/diagnostics.js +50 -0
  366. package/dist/api/library/disk.d.ts +13 -0
  367. package/dist/api/library/disk.js +66 -0
  368. package/dist/api/library/enums.generated.d.ts +891 -0
  369. package/dist/api/library/enums.generated.js +916 -0
  370. package/dist/api/library/errors.d.ts +13 -0
  371. package/dist/api/library/errors.js +24 -0
  372. package/dist/api/library/host.d.ts +24 -0
  373. package/dist/api/library/host.js +52 -0
  374. package/dist/api/library/index.d.ts +14 -0
  375. package/dist/api/library/index.js +15 -0
  376. package/dist/api/library/nodes.d.ts +51 -0
  377. package/dist/api/library/nodes.js +196 -0
  378. package/dist/api/library/options.d.ts +144 -0
  379. package/dist/api/library/options.js +308 -0
  380. package/dist/api/library/parse.d.ts +19 -0
  381. package/dist/api/library/parse.js +41 -0
  382. package/dist/api/library/program.d.ts +21 -0
  383. package/dist/api/library/program.js +234 -0
  384. package/dist/api/library/symbols.d.ts +8 -0
  385. package/dist/api/library/symbols.js +11 -0
  386. package/dist/api/library/types.d.ts +313 -0
  387. package/dist/api/library/types.js +6 -0
  388. package/package.json +22 -8
  389. package/src/compiler/ast-utilities.ts +548 -0
  390. package/src/compiler/ast.ts +12862 -0
  391. package/src/compiler/astnav.ts +799 -0
  392. package/src/compiler/binder-utilities.ts +1392 -0
  393. package/src/compiler/binder.ts +2703 -0
  394. package/src/compiler/build-info.ts +1197 -0
  395. package/src/compiler/character-codes.ts +323 -0
  396. package/src/compiler/checker-calls.ts +2155 -0
  397. package/src/compiler/checker-classes.ts +706 -0
  398. package/src/compiler/checker-contextual.ts +1457 -0
  399. package/src/compiler/checker-declaration-order.ts +438 -0
  400. package/src/compiler/checker-declarations.ts +1194 -0
  401. package/src/compiler/checker-declared-types.ts +919 -0
  402. package/src/compiler/checker-decorators.ts +694 -0
  403. package/src/compiler/checker-deprecation.ts +359 -0
  404. package/src/compiler/checker-destructuring.ts +805 -0
  405. package/src/compiler/checker-elaboration.ts +477 -0
  406. package/src/compiler/checker-emit-helpers.ts +224 -0
  407. package/src/compiler/checker-emit-resolver.ts +769 -0
  408. package/src/compiler/checker-evaluator.ts +243 -0
  409. package/src/compiler/checker-expressions.ts +1831 -0
  410. package/src/compiler/checker-features.ts +361 -0
  411. package/src/compiler/checker-flow.ts +394 -0
  412. package/src/compiler/checker-functions.ts +1296 -0
  413. package/src/compiler/checker-generated-code.ts +227 -0
  414. package/src/compiler/checker-globals.ts +52 -0
  415. package/src/compiler/checker-grammar.ts +3584 -0
  416. package/src/compiler/checker-heritage.ts +1233 -0
  417. package/src/compiler/checker-inference.ts +2576 -0
  418. package/src/compiler/checker-iteration.ts +1206 -0
  419. package/src/compiler/checker-javascript.ts +502 -0
  420. package/src/compiler/checker-jsdoc.ts +360 -0
  421. package/src/compiler/checker-jsx.ts +1924 -0
  422. package/src/compiler/checker-literals.ts +61 -0
  423. package/src/compiler/checker-members.ts +2436 -0
  424. package/src/compiler/checker-modules.ts +2886 -0
  425. package/src/compiler/checker-narrowing.ts +3230 -0
  426. package/src/compiler/checker-object-literals.ts +575 -0
  427. package/src/compiler/checker-operators.ts +1422 -0
  428. package/src/compiler/checker-overloads.ts +328 -0
  429. package/src/compiler/checker-property-access.ts +906 -0
  430. package/src/compiler/checker-services.ts +1149 -0
  431. package/src/compiler/checker-signatures.ts +1032 -0
  432. package/src/compiler/checker-source-file.ts +732 -0
  433. package/src/compiler/checker-statements.ts +292 -0
  434. package/src/compiler/checker-super.ts +261 -0
  435. package/src/compiler/checker-symbol-types.ts +2107 -0
  436. package/src/compiler/checker-symbols.ts +2150 -0
  437. package/src/compiler/checker-type-factory.ts +2579 -0
  438. package/src/compiler/checker-type-nodes.ts +1033 -0
  439. package/src/compiler/checker-type-operators.ts +2502 -0
  440. package/src/compiler/checker-types.ts +2340 -0
  441. package/src/compiler/checker-unused.ts +642 -0
  442. package/src/compiler/checker-utilities.ts +161 -0
  443. package/src/compiler/checker.ts +1116 -0
  444. package/src/compiler/command-line.ts +436 -0
  445. package/src/compiler/compile-program.ts +439 -0
  446. package/src/compiler/decoder.ts +1209 -0
  447. package/src/compiler/diagnostic-locales.ts +86 -0
  448. package/src/compiler/diagnostic-messages.ts +2349 -0
  449. package/src/compiler/diagnostics.ts +897 -0
  450. package/src/compiler/emitter.ts +434 -0
  451. package/src/compiler/encoder.ts +1945 -0
  452. package/src/compiler/file-include.ts +673 -0
  453. package/src/compiler/file-loader.ts +1528 -0
  454. package/src/compiler/file-system.ts +143 -0
  455. package/src/compiler/flow.ts +89 -0
  456. package/src/compiler/help.ts +473 -0
  457. package/src/compiler/incremental.ts +2784 -0
  458. package/src/compiler/init.ts +141 -0
  459. package/src/compiler/instantiation.ts +894 -0
  460. package/src/compiler/jsdoc.ts +1386 -0
  461. package/src/compiler/link-tables.ts +98 -0
  462. package/src/compiler/locale-data.ts +203 -0
  463. package/src/compiler/locale.ts +307 -0
  464. package/src/compiler/locales/cs-CZ.ts +5 -0
  465. package/src/compiler/locales/de-DE.ts +5 -0
  466. package/src/compiler/locales/es-ES.ts +5 -0
  467. package/src/compiler/locales/fr-FR.ts +5 -0
  468. package/src/compiler/locales/it-IT.ts +5 -0
  469. package/src/compiler/locales/ja-JP.ts +5 -0
  470. package/src/compiler/locales/ko-KR.ts +5 -0
  471. package/src/compiler/locales/pl-PL.ts +5 -0
  472. package/src/compiler/locales/pt-BR.ts +5 -0
  473. package/src/compiler/locales/ru-RU.ts +5 -0
  474. package/src/compiler/locales/tr-TR.ts +5 -0
  475. package/src/compiler/locales/zh-CN.ts +5 -0
  476. package/src/compiler/locales/zh-TW.ts +5 -0
  477. package/src/compiler/module-resolution-types.ts +243 -0
  478. package/src/compiler/module-resolution.ts +2072 -0
  479. package/src/compiler/module-specifiers.ts +1491 -0
  480. package/src/compiler/name-resolver.ts +646 -0
  481. package/src/compiler/node-builder-names.ts +1069 -0
  482. package/src/compiler/node-builder-pseudo.ts +892 -0
  483. package/src/compiler/node-builder-reuse.ts +764 -0
  484. package/src/compiler/node-builder.ts +3425 -0
  485. package/src/compiler/option-declarations.ts +1560 -0
  486. package/src/compiler/options.ts +1576 -0
  487. package/src/compiler/output-paths.ts +334 -0
  488. package/src/compiler/package-json.ts +1083 -0
  489. package/src/compiler/parallel-check.ts +1951 -0
  490. package/src/compiler/parallel-parse.ts +590 -0
  491. package/src/compiler/parse-thread.ts +140 -0
  492. package/src/compiler/parser.ts +7716 -0
  493. package/src/compiler/path.ts +717 -0
  494. package/src/compiler/printer/async-helpers.ts +183 -0
  495. package/src/compiler/printer/auto-generate.ts +27 -0
  496. package/src/compiler/printer/decorator-helpers.ts +218 -0
  497. package/src/compiler/printer/emit-context.ts +679 -0
  498. package/src/compiler/printer/emit-flags.ts +64 -0
  499. package/src/compiler/printer/factory-base.ts +2577 -0
  500. package/src/compiler/printer/factory.ts +764 -0
  501. package/src/compiler/printer/helpers.ts +291 -0
  502. package/src/compiler/printer/name-generator.ts +372 -0
  503. package/src/compiler/printer/printer.ts +5072 -0
  504. package/src/compiler/printer/text-writer.ts +183 -0
  505. package/src/compiler/printer/utilities.ts +884 -0
  506. package/src/compiler/program-checker.ts +592 -0
  507. package/src/compiler/program-utilities.ts +435 -0
  508. package/src/compiler/program.ts +1419 -0
  509. package/src/compiler/pseudo-bigint.ts +62 -0
  510. package/src/compiler/regexp-checker.ts +1142 -0
  511. package/src/compiler/relations.ts +5149 -0
  512. package/src/compiler/reparser.ts +1566 -0
  513. package/src/compiler/scanner.ts +2951 -0
  514. package/src/compiler/show-config.ts +239 -0
  515. package/src/compiler/side-state.ts +125 -0
  516. package/src/compiler/sourcemap.ts +366 -0
  517. package/src/compiler/spelling.ts +122 -0
  518. package/src/compiler/symbol-accessibility.ts +1071 -0
  519. package/src/compiler/symbol.ts +439 -0
  520. package/src/compiler/symlinks.ts +137 -0
  521. package/src/compiler/syntax-kind.ts +391 -0
  522. package/src/compiler/thread-entry.ts +191 -0
  523. package/src/compiler/timeline.ts +53 -0
  524. package/src/compiler/transformers/alias-references.ts +757 -0
  525. package/src/compiler/transformers/async-utilities.ts +335 -0
  526. package/src/compiler/transformers/async.ts +838 -0
  527. package/src/compiler/transformers/class-fields.ts +2967 -0
  528. package/src/compiler/transformers/class-utilities.ts +324 -0
  529. package/src/compiler/transformers/commonjs-module.ts +1621 -0
  530. package/src/compiler/transformers/const-enum-inliner.ts +50 -0
  531. package/src/compiler/transformers/declarations-diagnostics.ts +832 -0
  532. package/src/compiler/transformers/declarations-pseudo.ts +966 -0
  533. package/src/compiler/transformers/declarations-resolver.ts +249 -0
  534. package/src/compiler/transformers/declarations-syntactic.ts +1859 -0
  535. package/src/compiler/transformers/declarations-tracker.ts +269 -0
  536. package/src/compiler/transformers/declarations.ts +3120 -0
  537. package/src/compiler/transformers/decorator-metadata.ts +697 -0
  538. package/src/compiler/transformers/decorator-utilities.ts +283 -0
  539. package/src/compiler/transformers/destructuring.ts +708 -0
  540. package/src/compiler/transformers/downlevel.ts +50 -0
  541. package/src/compiler/transformers/emit-resolver.ts +258 -0
  542. package/src/compiler/transformers/es-decorators.ts +2682 -0
  543. package/src/compiler/transformers/exponentiation.ts +80 -0
  544. package/src/compiler/transformers/external-module-info.ts +412 -0
  545. package/src/compiler/transformers/for-await.ts +687 -0
  546. package/src/compiler/transformers/import-elision.ts +152 -0
  547. package/src/compiler/transformers/jsx-entities.ts +256 -0
  548. package/src/compiler/transformers/jsx.ts +824 -0
  549. package/src/compiler/transformers/legacy-decorators.ts +726 -0
  550. package/src/compiler/transformers/logical-assignment.ts +75 -0
  551. package/src/compiler/transformers/module-utilities.ts +42 -0
  552. package/src/compiler/transformers/module.ts +474 -0
  553. package/src/compiler/transformers/named-evaluation.ts +389 -0
  554. package/src/compiler/transformers/nullish-coalescing.ts +35 -0
  555. package/src/compiler/transformers/object-rest-spread.ts +577 -0
  556. package/src/compiler/transformers/optional-catch.ts +29 -0
  557. package/src/compiler/transformers/optional-chain.ts +246 -0
  558. package/src/compiler/transformers/reference-resolver.ts +1201 -0
  559. package/src/compiler/transformers/runtime-syntax.ts +942 -0
  560. package/src/compiler/transformers/subtree-facts.ts +245 -0
  561. package/src/compiler/transformers/syntax-facts.ts +353 -0
  562. package/src/compiler/transformers/tagged-template.ts +167 -0
  563. package/src/compiler/transformers/transformer.ts +56 -0
  564. package/src/compiler/transformers/type-eraser.ts +520 -0
  565. package/src/compiler/transformers/type-serialization.ts +374 -0
  566. package/src/compiler/transformers/using.ts +613 -0
  567. package/src/compiler/transformers/utilities.ts +419 -0
  568. package/src/compiler/transformers/visitor-base.ts +1601 -0
  569. package/src/compiler/transformers/visitor-hooks.ts +252 -0
  570. package/src/compiler/tsc-build.ts +1418 -0
  571. package/src/compiler/tsc-cli.ts +666 -0
  572. package/src/compiler/tsc-compile.ts +437 -0
  573. package/src/compiler/tsc-watch.ts +854 -0
  574. package/src/compiler/tsconfig.ts +1574 -0
  575. package/src/compiler/type-printer.ts +110 -0
  576. package/src/compiler/types.ts +115 -0
  577. package/src/compiler/unicode-identifiers.ts +212 -0
  578. package/src/compiler/unicode-properties.ts +537 -0
  579. package/src/compiler/vfs-match.ts +597 -0
  580. package/src/compiler/xxh3.ts +650 -0
  581. package/src/library/ast.generated.ts +1685 -0
  582. package/src/library/ast.ts +104 -0
  583. package/src/library/checker.ts +384 -0
  584. package/src/library/compiler-options.generated.ts +114 -0
  585. package/src/library/diagnostics.ts +72 -0
  586. package/src/library/disk.ts +73 -0
  587. package/src/library/enums.generated.ts +1024 -0
  588. package/src/library/errors.ts +26 -0
  589. package/src/library/host.ts +63 -0
  590. package/src/library/index.ts +71 -0
  591. package/src/library/nodes.ts +232 -0
  592. package/src/library/options.ts +449 -0
  593. package/src/library/parse.ts +63 -0
  594. package/src/library/program.ts +293 -0
  595. package/src/library/symbols.ts +15 -0
  596. package/src/library/types.ts +359 -0
@@ -0,0 +1,787 @@
1
+ // Declared types: classes, interfaces, type aliases, enums and type parameters, with their base
2
+ // types, constraints and defaults.
3
+ import { sideOf } from './side-state.js';
4
+ import { getInferredTypeParameterConstraint } from './checker-inference.js';
5
+ import { getExpression, getInitializer, getLocals, getName, getText, getType, getTypeArguments as getTypeArgumentNodes, getTypeParameters as getTypeParameterNodes, getHeritageClauses, } from './ast.js';
6
+ import { getSourceFileOfNode, isEnumConst, isObjectLiteralMethod } from './binder-utilities.js';
7
+ import { createDiagnosticForNode } from './checker.js';
8
+ import { elaborateNeverIntersection } from './checker-property-access.js';
9
+ import { TypeAlias, emptyTypes, newTypeMapper, ReferenceCache, } from './checker-types.js';
10
+ import { createArrayTypeEx, getFreshTypeOfLiteralType, getNumberEnumLiteralType, getStringEnumLiteralType, getTargetType, getTypeArguments, getUnionType, getUnionTypeEx, isErrorType, newObjectType, typeListKey, typesOf, typeListHash, } from './checker-type-factory.js';
11
+ import { getFirstIdentifier, getMergedSymbol, getParentOfSymbol, getSymbolOfDeclaration, popTypeResolution, pushTypeResolution, resolveEntityName, } from './checker-symbols.js';
12
+ import { getTypeFromTypeNode, getTypeFromClassOrInterfaceReference, isTypeAlias } from './checker-type-nodes.js';
13
+ import { instantiateType } from './instantiation.js';
14
+ import { symbolToString, typeToString } from './type-printer.js';
15
+ import { getApparentType, getBaseConstraintOfType, getReducedType, getResolvedBaseConstraint, getReturnTypeOfSignature, getSignaturesOfType, membersHolder, resolveStructuredTypeMembers, } from './checker-members.js';
16
+ import { checkExpression } from './checker-expressions.js';
17
+ import { isContextSensitive } from './checker-functions.js';
18
+ import { getTypeOfSymbol } from './checker-symbol-types.js';
19
+ import { getIndexedAccessType, isGenericMappedType } from './checker-type-operators.js';
20
+ import { getSignatureInstantiation } from './checker-signatures.js';
21
+ import { evaluateEnumMember } from './checker-evaluator.js';
22
+ import { checkTypeAssignableTo, isTypeIdenticalTo } from './relations.js';
23
+ export { getParentOfSymbol };
24
+ export function getDeclaredTypeOfSymbol(c, symbol) {
25
+ return tryGetDeclaredTypeOfSymbol(c, symbol) ?? c.errorType;
26
+ }
27
+ export function tryGetDeclaredTypeOfSymbol(c, symbol) {
28
+ const flags = symbol.flags;
29
+ if ((flags & (32 /* SymbolFlags.Class */ | 64 /* SymbolFlags.Interface */)) !== 0)
30
+ return getDeclaredTypeOfClassOrInterface(c, symbol);
31
+ if ((flags & 262144 /* SymbolFlags.TypeParameter */) !== 0)
32
+ return getDeclaredTypeOfTypeParameter(c, symbol);
33
+ if ((flags & 524288 /* SymbolFlags.TypeAlias */) !== 0)
34
+ return getDeclaredTypeOfTypeAlias(c, symbol);
35
+ if ((flags & 384 /* SymbolFlags.Enum */) !== 0)
36
+ return getDeclaredTypeOfEnum(c, symbol);
37
+ if ((flags & 8 /* SymbolFlags.EnumMember */) !== 0)
38
+ return getDeclaredTypeOfEnumMember(c, symbol);
39
+ if ((flags & 2097152 /* SymbolFlags.Alias */) !== 0)
40
+ return getDeclaredTypeOfAlias(c, symbol);
41
+ return undefined;
42
+ }
43
+ function getDeclaredTypeOfAlias(c, symbol) {
44
+ const links = c.symbolLinks(symbol);
45
+ if (links.declaredType === undefined) {
46
+ const target = resolveAliasForType(c, symbol);
47
+ links.declaredType = target !== undefined ? getDeclaredTypeOfSymbol(c, target) : c.errorType;
48
+ }
49
+ return links.declaredType;
50
+ }
51
+ function resolveAliasForType(c, symbol) {
52
+ // Imported to avoid a static cycle at module load; resolveAlias is declaration-only.
53
+ return resolveAliasLazy(c, symbol);
54
+ }
55
+ import { resolveAlias as resolveAliasLazy } from './checker-symbols.js';
56
+ // ---- Classes and interfaces
57
+ export function getDeclaredTypeOfClassOrInterface(c, symbol) {
58
+ const links = c.symbolLinks(symbol);
59
+ if (links.declaredType === undefined) {
60
+ const kind = (symbol.flags & 32 /* SymbolFlags.Class */) !== 0 ? 1 /* ObjectFlags.Class */ : 2 /* ObjectFlags.Interface */;
61
+ const type = newObjectType(c, kind, symbol);
62
+ links.declaredType = type;
63
+ const outerTypeParameters = getOuterTypeParametersOfClassOrInterface(c, symbol);
64
+ const typeParameters = appendLocalTypeParameters(c, outerTypeParameters.slice(), symbol);
65
+ // Classes always get a `this` type; interfaces when they may reference `this`.
66
+ if (typeParameters.length !== 0 || kind === 1 /* ObjectFlags.Class */ || !isThislessInterface(c, symbol)) {
67
+ type.objectFlags |= 4 /* ObjectFlags.Reference */;
68
+ const thisType = c.newTypeParameter(symbol);
69
+ thisType.isThisType = true;
70
+ thisType.constraint = type;
71
+ type.thisType = thisType;
72
+ typeParameters.push(thisType);
73
+ type.allTypeParameters = typeParameters;
74
+ type.outerTypeParameterCount = outerTypeParameters.length;
75
+ type.resolvedTypeArguments = type.typeParameters();
76
+ const references = new ReferenceCache();
77
+ sideOf(c, type).references = references;
78
+ references.add(typeListHash(type.resolvedTypeArguments, undefined, 0), type);
79
+ type.target = type;
80
+ }
81
+ }
82
+ return links.declaredType;
83
+ }
84
+ function isThislessInterface(c, symbol) {
85
+ for (const declaration of symbol.declarations) {
86
+ if (declaration.kind !== 265 /* SyntaxKind.InterfaceDeclaration */)
87
+ continue;
88
+ if ((declaration.flags & 128 /* NodeFlags.ContainsThis */) !== 0)
89
+ return false;
90
+ for (const node of getExtendsHeritageClauseElements(declaration)) {
91
+ const expression = getExpression(node);
92
+ if (isEntityNameExpression(expression)) {
93
+ const baseSymbol = resolveEntityName(c, expression, 788968 /* SymbolFlags.Type */, true, false, undefined);
94
+ if (baseSymbol === undefined ||
95
+ (baseSymbol.flags & 64 /* SymbolFlags.Interface */) === 0 ||
96
+ getDeclaredTypeOfClassOrInterface(c, baseSymbol).thisType !== undefined)
97
+ return false;
98
+ }
99
+ }
100
+ }
101
+ return true;
102
+ }
103
+ export function isEntityNameExpression(node) {
104
+ if (node.kind === 79 /* SyntaxKind.Identifier */)
105
+ return true;
106
+ if (node.kind === 212 /* SyntaxKind.PropertyAccessExpression */) {
107
+ const name = getName(node);
108
+ return name !== undefined && name.kind === 79 /* SyntaxKind.Identifier */ && isEntityNameExpression(getExpression(node));
109
+ }
110
+ return false;
111
+ }
112
+ export function getHeritageClauseElements(node, token) {
113
+ const clauses = getHeritageClauses(node);
114
+ if (clauses === undefined)
115
+ return emptyNodes;
116
+ for (const clause of clauses.nodes)
117
+ if (clause.token === token)
118
+ return clause.types.nodes;
119
+ return emptyNodes;
120
+ }
121
+ const emptyNodes = [];
122
+ export function getExtendsHeritageClauseElements(node) {
123
+ return getHeritageClauseElements(node, 95 /* SyntaxKind.ExtendsKeyword */);
124
+ }
125
+ export function getExtendsHeritageClauseElement(node) {
126
+ const elements = getExtendsHeritageClauseElements(node);
127
+ return elements.length !== 0 ? elements[0] : undefined;
128
+ }
129
+ export function getClassLikeDeclarationOfSymbol(symbol) {
130
+ for (const d of symbol.declarations)
131
+ if (d.kind === 264 /* SyntaxKind.ClassDeclaration */ || d.kind === 232 /* SyntaxKind.ClassExpression */)
132
+ return d;
133
+ return undefined;
134
+ }
135
+ function getOuterTypeParametersOfClassOrInterface(c, symbol) {
136
+ let declaration = symbol.valueDeclaration;
137
+ if ((symbol.flags & (32 /* SymbolFlags.Class */ | 16 /* SymbolFlags.Function */)) === 0) {
138
+ declaration = undefined;
139
+ for (const d of symbol.declarations) {
140
+ if (d.kind === 265 /* SyntaxKind.InterfaceDeclaration */) {
141
+ declaration = d;
142
+ break;
143
+ }
144
+ if (d.kind === 261 /* SyntaxKind.VariableDeclaration */) {
145
+ const initializer = getInitializer(d);
146
+ if (initializer !== undefined &&
147
+ (initializer.kind === 219 /* SyntaxKind.FunctionExpression */ || initializer.kind === 220 /* SyntaxKind.ArrowFunction */)) {
148
+ declaration = d;
149
+ break;
150
+ }
151
+ }
152
+ }
153
+ }
154
+ if (declaration === undefined)
155
+ return [];
156
+ return getOuterTypeParameters(c, declaration, false);
157
+ }
158
+ /** Type parameters of the declarations enclosing `node`, outermost first. */
159
+ export function getOuterTypeParameters(c, node, includeThisTypes) {
160
+ for (let current = node.parent; current !== undefined; current = current.parent) {
161
+ const kind = current.kind;
162
+ switch (kind) {
163
+ case 264 /* SyntaxKind.ClassDeclaration */:
164
+ case 232 /* SyntaxKind.ClassExpression */:
165
+ case 265 /* SyntaxKind.InterfaceDeclaration */:
166
+ case 180 /* SyntaxKind.CallSignature */:
167
+ case 181 /* SyntaxKind.ConstructSignature */:
168
+ case 174 /* SyntaxKind.MethodSignature */:
169
+ case 185 /* SyntaxKind.FunctionType */:
170
+ case 186 /* SyntaxKind.ConstructorType */:
171
+ case 263 /* SyntaxKind.FunctionDeclaration */:
172
+ case 175 /* SyntaxKind.MethodDeclaration */:
173
+ case 219 /* SyntaxKind.FunctionExpression */:
174
+ case 220 /* SyntaxKind.ArrowFunction */:
175
+ case 266 /* SyntaxKind.TypeAliasDeclaration */:
176
+ case 345 /* SyntaxKind.JSTypeAliasDeclaration */:
177
+ case 201 /* SyntaxKind.MappedType */:
178
+ case 195 /* SyntaxKind.ConditionalType */: {
179
+ const outer = getOuterTypeParameters(c, current, includeThisTypes);
180
+ // A contextually typed function has the type parameters of its contextual signature.
181
+ if ((kind === 219 /* SyntaxKind.FunctionExpression */ ||
182
+ kind === 220 /* SyntaxKind.ArrowFunction */ ||
183
+ isObjectLiteralMethod(current)) &&
184
+ isContextSensitive(c, current)) {
185
+ const signatures = getSignaturesOfType(c, getTypeOfSymbol(c, getSymbolOfDeclaration(c, current)), 0 /* SignatureKind.Call */);
186
+ if (signatures.length !== 0 && signatures[0].typeParameters.length !== 0) {
187
+ for (const t of signatures[0].typeParameters)
188
+ outer.push(t);
189
+ return outer;
190
+ }
191
+ }
192
+ if (kind === 201 /* SyntaxKind.MappedType */) {
193
+ const typeParameter = current.typeParameter;
194
+ outer.push(getDeclaredTypeOfTypeParameter(c, getSymbolOfDeclaration(c, typeParameter)));
195
+ return outer;
196
+ }
197
+ if (kind === 195 /* SyntaxKind.ConditionalType */) {
198
+ for (const t of getInferTypeParameters(c, current))
199
+ outer.push(t);
200
+ return outer;
201
+ }
202
+ appendTypeParameters(c, outer, getTypeParameterNodes(current)?.nodes);
203
+ if (includeThisTypes &&
204
+ (kind === 264 /* SyntaxKind.ClassDeclaration */ ||
205
+ kind === 232 /* SyntaxKind.ClassExpression */ ||
206
+ kind === 265 /* SyntaxKind.InterfaceDeclaration */)) {
207
+ const thisType = getDeclaredTypeOfClassOrInterface(c, getSymbolOfDeclaration(c, current)).thisType;
208
+ if (thisType !== undefined)
209
+ outer.push(thisType);
210
+ }
211
+ return outer;
212
+ }
213
+ }
214
+ }
215
+ return [];
216
+ }
217
+ export function getInferTypeParameters(c, node) {
218
+ const result = [];
219
+ const locals = getLocals(node);
220
+ if (locals !== undefined)
221
+ for (const symbol of locals.values())
222
+ if ((symbol.flags & 262144 /* SymbolFlags.TypeParameter */) !== 0)
223
+ result.push(getDeclaredTypeOfSymbol(c, symbol));
224
+ return result;
225
+ }
226
+ export function getLocalTypeParametersOfClassOrInterfaceOrTypeAlias(c, symbol) {
227
+ return appendLocalTypeParameters(c, [], symbol);
228
+ }
229
+ function appendLocalTypeParameters(c, types, symbol) {
230
+ for (const node of symbol.declarations) {
231
+ if (node.kind === 265 /* SyntaxKind.InterfaceDeclaration */ ||
232
+ node.kind === 264 /* SyntaxKind.ClassDeclaration */ ||
233
+ node.kind === 232 /* SyntaxKind.ClassExpression */ ||
234
+ isTypeAlias(node))
235
+ appendTypeParameters(c, types, getTypeParameterNodes(node)?.nodes);
236
+ }
237
+ return types;
238
+ }
239
+ function appendTypeParameters(c, types, declarations) {
240
+ if (declarations === undefined)
241
+ return;
242
+ for (const declaration of declarations) {
243
+ const t = getDeclaredTypeOfTypeParameter(c, getSymbolOfDeclaration(c, declaration));
244
+ if (!types.includes(t))
245
+ types.push(t);
246
+ }
247
+ }
248
+ // ---- Type parameters, aliases and enums
249
+ export function getDeclaredTypeOfTypeParameter(c, symbol) {
250
+ const links = c.symbolLinks(symbol);
251
+ if (links.declaredType === undefined)
252
+ links.declaredType = c.newTypeParameter(symbol);
253
+ return links.declaredType;
254
+ }
255
+ export function getDeclaredTypeOfTypeAlias(c, symbol) {
256
+ const links = c.symbolLinks(symbol);
257
+ if (links.declaredType !== undefined)
258
+ return links.declaredType;
259
+ if (!pushTypeResolution(c, symbol, 2 /* TypeSystemPropertyName.DeclaredType */))
260
+ return c.errorType;
261
+ let declaration;
262
+ for (const d of symbol.declarations)
263
+ if (d.kind === 266 /* SyntaxKind.TypeAliasDeclaration */ || d.kind === 345 /* SyntaxKind.JSTypeAliasDeclaration */) {
264
+ declaration = d;
265
+ break;
266
+ }
267
+ const typeNode = declaration !== undefined ? getType(declaration) : undefined;
268
+ let type = typeNode !== undefined ? getTypeFromTypeNode(c, typeNode) : c.errorType;
269
+ if (popTypeResolution(c)) {
270
+ const typeParameters = getLocalTypeParametersOfClassOrInterfaceOrTypeAlias(c, symbol);
271
+ if (typeParameters.length !== 0) {
272
+ // The declared type is the instantiation with the type parameters themselves.
273
+ links.typeParameters = typeParameters;
274
+ links.instantiations = new Map();
275
+ links.instantiations.set(typeListKey(typeParameters), type);
276
+ }
277
+ // `BuiltinIteratorReturn` is `undefined` with `strictBuiltinIteratorReturn`, else `any`.
278
+ if (type === c.intrinsicMarkerType && symbol.name === 'BuiltinIteratorReturn')
279
+ type = c.strictBuiltinIteratorReturn ? c.undefinedType : c.anyType;
280
+ }
281
+ else {
282
+ const errorNode = declaration !== undefined ? (getName(declaration) ?? declaration) : undefined;
283
+ c.error(errorNode, 622 /* Diagnostics.Type_alias_0_circularly_references_itself */, symbolToString(c, symbol));
284
+ type = c.errorType;
285
+ }
286
+ if (links.declaredType === undefined)
287
+ links.declaredType = type;
288
+ return links.declaredType;
289
+ }
290
+ export function getDeclaredTypeOfEnum(c, symbol) {
291
+ const links = c.symbolLinks(symbol);
292
+ if (links.declaredType !== undefined)
293
+ return links.declaredType;
294
+ const memberTypes = [];
295
+ for (const declaration of symbol.declarations) {
296
+ if (declaration.kind !== 267 /* SyntaxKind.EnumDeclaration */)
297
+ continue;
298
+ for (const member of declaration.members.nodes) {
299
+ if (!hasBindableName(member))
300
+ continue;
301
+ const memberSymbol = getSymbolOfDeclaration(c, member);
302
+ computeEnumMemberValues(c, declaration);
303
+ const memberLinks = c.nodeLinks(member);
304
+ let memberType;
305
+ if (memberLinks.enumValueKind === 2 /* EvaluatedKind.String */)
306
+ memberType = getStringEnumLiteralType(c, memberLinks.enumStringValue, symbol, memberSymbol);
307
+ else if (memberLinks.enumValueKind === 1 /* EvaluatedKind.Number */)
308
+ memberType = getNumberEnumLiteralType(c, memberLinks.enumNumberValue, symbol, memberSymbol);
309
+ else
310
+ memberType = createComputedEnumType(c, memberSymbol);
311
+ c.symbolLinks(memberSymbol).declaredType = getFreshTypeOfLiteralType(c, memberType);
312
+ memberTypes.push(memberType);
313
+ }
314
+ }
315
+ const enumType = memberTypes.length !== 0
316
+ ? getUnionTypeEx(c, memberTypes, 1 /* UnionReduction.Literal */, new TypeAlias(symbol, emptyTypes), undefined)
317
+ : createComputedEnumType(c, symbol);
318
+ if ((enumType.flags & 134217728 /* TypeFlags.Union */) !== 0) {
319
+ enumType.flags |= 32768 /* TypeFlags.EnumLiteral */;
320
+ enumType.symbol = symbol;
321
+ }
322
+ links.declaredType = enumType;
323
+ return enumType;
324
+ }
325
+ export function hasBindableName(node) {
326
+ const name = getName(node);
327
+ return name === undefined || name.kind !== 168 /* SyntaxKind.ComputedPropertyName */ || isLiteralComputed(name);
328
+ }
329
+ function isLiteralComputed(name) {
330
+ const e = getExpression(name);
331
+ return (e.kind === 10 /* SyntaxKind.StringLiteral */ ||
332
+ e.kind === 8 /* SyntaxKind.NumericLiteral */ ||
333
+ e.kind === 14 /* SyntaxKind.NoSubstitutionTemplateLiteral */);
334
+ }
335
+ function createComputedEnumType(c, symbol) {
336
+ const regular = c.newLiteralType(65536 /* TypeFlags.Enum */, '', 0, symbol);
337
+ const fresh = c.newLiteralType(65536 /* TypeFlags.Enum */, '', 0, symbol);
338
+ fresh.regularType = regular;
339
+ regular.freshType = fresh;
340
+ fresh.freshType = fresh;
341
+ return regular;
342
+ }
343
+ export function getDeclaredTypeOfEnumMember(c, symbol) {
344
+ const links = c.symbolLinks(symbol);
345
+ if (links.declaredType === undefined) {
346
+ const enumType = getDeclaredTypeOfEnum(c, getParentOfSymbol(c, symbol));
347
+ if (links.declaredType === undefined)
348
+ links.declaredType = enumType;
349
+ }
350
+ return links.declaredType;
351
+ }
352
+ /** Computes the values of an enum's members into their node links. */
353
+ export function computeEnumMemberValues(c, node) {
354
+ const nodeLinks = c.nodeLinks(node);
355
+ if ((nodeLinks.flags & (1 << 10)) !== 0)
356
+ return;
357
+ nodeLinks.flags |= 1 << 10;
358
+ let hasAuto = true;
359
+ let autoValue = 0;
360
+ let previous;
361
+ for (const member of node.members.nodes) {
362
+ const links = c.nodeLinks(member);
363
+ computeEnumMemberValue(c, member, hasAuto, autoValue, previous);
364
+ if (links.enumValueKind === 1 /* EvaluatedKind.Number */) {
365
+ autoValue = links.enumNumberValue + 1;
366
+ hasAuto = true;
367
+ }
368
+ else
369
+ hasAuto = false;
370
+ previous = member;
371
+ }
372
+ }
373
+ function computeEnumMemberValue(c, member, hasAuto, autoValue, previous) {
374
+ const links = c.nodeLinks(member);
375
+ const name = getName(member);
376
+ if (name.kind === 168 /* SyntaxKind.ComputedPropertyName */ && !isLiteralComputed(name))
377
+ c.error(name, 121 /* Diagnostics.Computed_property_names_are_not_allowed_in_enums */);
378
+ else if (name.kind === 9 /* SyntaxKind.BigIntLiteral */)
379
+ c.error(name, 620 /* Diagnostics.An_enum_member_cannot_have_a_numeric_name */);
380
+ else {
381
+ const text = name.kind === 168 /* SyntaxKind.ComputedPropertyName */ ? getText(getExpression(name)) : getText(name);
382
+ if (isNumericLiteralName(text) && text !== 'Infinity' && text !== '-Infinity' && text !== 'NaN')
383
+ c.error(name, 620 /* Diagnostics.An_enum_member_cannot_have_a_numeric_name */);
384
+ }
385
+ const initializer = getInitializer(member);
386
+ if (initializer !== undefined) {
387
+ computeConstantEnumMemberValue(c, member, initializer);
388
+ return;
389
+ }
390
+ // Members of ambient non-const enums without initializers are computed.
391
+ if ((member.parent.flags & 8388608 /* NodeFlags.Ambient */) !== 0 && !isEnumConst(member.parent)) {
392
+ links.enumValueKind = 0 /* EvaluatedKind.None */;
393
+ return;
394
+ }
395
+ if (!hasAuto) {
396
+ c.error(name, 46 /* Diagnostics.Enum_member_must_have_initializer */);
397
+ links.enumValueKind = 0 /* EvaluatedKind.None */;
398
+ return;
399
+ }
400
+ // A transpiler can count on from the previous member only when its value is a number of this file.
401
+ if (c.isolatedModules && previous !== undefined && getInitializer(previous) !== undefined) {
402
+ const previousLinks = c.nodeLinks(previous);
403
+ if (previousLinks.enumValueKind !== 1 /* EvaluatedKind.Number */ ||
404
+ (previousLinks.enumValueFlags & 2 /* EvaluatedFlags.ResolvedOtherFiles */) !== 0)
405
+ c.error(name, 1871 /* Diagnostics.Enum_member_following_a_non_literal_numeric_member_must_have_an_initializer_when_isolatedModules_is_enabled */);
406
+ }
407
+ links.enumValueKind = 1 /* EvaluatedKind.Number */;
408
+ links.enumNumberValue = autoValue;
409
+ }
410
+ function computeConstantEnumMemberValue(c, member, initializer) {
411
+ const links = c.nodeLinks(member);
412
+ const isConstEnum = isEnumConst(member.parent);
413
+ const result = evaluateEnumMember(c, initializer, member);
414
+ links.enumValueKind = result.kind;
415
+ links.enumStringValue = result.stringValue;
416
+ links.enumNumberValue = result.numberValue;
417
+ links.enumValueFlags = result.flags;
418
+ if (result.kind !== 0 /* EvaluatedKind.None */) {
419
+ if (isConstEnum && result.kind === 1 /* EvaluatedKind.Number */ && !Number.isFinite(result.numberValue))
420
+ c.error(initializer, result.numberValue !== result.numberValue
421
+ ? 642 /* Diagnostics.X_const_enum_member_initializer_was_evaluated_to_disallowed_value_NaN */
422
+ : 641 /* Diagnostics.X_const_enum_member_initializer_was_evaluated_to_a_non_finite_value */);
423
+ // A transpiler emits a string member without a reverse mapping only when it sees a string.
424
+ if (c.isolatedModules &&
425
+ result.kind === 2 /* EvaluatedKind.String */ &&
426
+ (result.flags & 1 /* EvaluatedFlags.SyntacticallyString */) === 0)
427
+ c.error(initializer, 1870 /* Diagnostics.X_0_has_a_string_type_but_must_have_syntactically_recognizable_string_syntax_when_isolatedModules_is_enabled */, getText(getName(member.parent)) + '.' + getText(getName(member)));
428
+ }
429
+ else if (isConstEnum)
430
+ c.error(initializer, 638 /* Diagnostics.X_const_enum_member_initializers_must_be_constant_expressions */);
431
+ else if ((member.parent.flags & 8388608 /* NodeFlags.Ambient */) !== 0)
432
+ c.error(initializer, 51 /* Diagnostics.In_ambient_enum_declarations_member_initializer_must_be_constant_expression */);
433
+ else
434
+ checkTypeAssignableTo(c, checkExpression(c, initializer), c.numberType, initializer, 1850 /* Diagnostics.Type_0_is_not_assignable_to_type_1_as_required_for_computed_enum_member_values */);
435
+ }
436
+ export function isNumericLiteralName(name) {
437
+ // A name is numeric when it round-trips through Number.
438
+ return name.length !== 0 && String(Number(name)) === name;
439
+ }
440
+ // ---- Base types
441
+ export function getBaseTypes(c, t) {
442
+ if ((t.objectFlags & (3 /* ObjectFlags.ClassOrInterface */ | 8 /* ObjectFlags.Tuple */)) === 0)
443
+ return emptyTypes;
444
+ const data = sideOf(c, t);
445
+ if (!data.baseTypesResolved) {
446
+ if (!pushTypeResolution(c, t, 6 /* TypeSystemPropertyName.ResolvedBaseTypes */))
447
+ return data.resolvedBaseTypes;
448
+ if ((t.objectFlags & 8 /* ObjectFlags.Tuple */) !== 0)
449
+ data.resolvedBaseTypes = [getTupleBaseType(c, t)];
450
+ else {
451
+ if ((t.symbol.flags & 32 /* SymbolFlags.Class */) !== 0)
452
+ resolveBaseTypesOfClass(c, t);
453
+ if ((t.symbol.flags & 64 /* SymbolFlags.Interface */) !== 0)
454
+ resolveBaseTypesOfInterface(c, t);
455
+ }
456
+ if (!popTypeResolution(c))
457
+ for (const declaration of t.symbol.declarations)
458
+ if (declaration.kind === 264 /* SyntaxKind.ClassDeclaration */ || declaration.kind === 265 /* SyntaxKind.InterfaceDeclaration */)
459
+ reportCircularBaseType(c, declaration, t);
460
+ // Circular defaults may leave members partially resolved; reset them.
461
+ membersHolder(c, t).objectFlags &= ~2097152 /* ObjectFlags.MembersResolved */;
462
+ data.baseTypesResolved = true;
463
+ }
464
+ return data.resolvedBaseTypes;
465
+ }
466
+ function getTupleBaseType(c, t) {
467
+ const typeParameters = t.typeParameters();
468
+ const elementTypes = [];
469
+ for (let i = 0; i < typeParameters.length; i++)
470
+ elementTypes.push((t.elementInfos[i].flags & 8 /* ElementFlags.Variadic */) !== 0
471
+ ? getIndexedAccessType(c, typeParameters[i], c.numberType)
472
+ : typeParameters[i]);
473
+ return createArrayTypeEx(c, getUnionType(c, elementTypes), t.readonly);
474
+ }
475
+ function resolveBaseTypesOfClass(c, t) {
476
+ const baseConstructorType = getApparentType(c, getBaseConstructorTypeOfClass(c, t));
477
+ if ((baseConstructorType.flags & (1048576 /* TypeFlags.Object */ | 268435456 /* TypeFlags.Intersection */ | 1 /* TypeFlags.Any */)) === 0)
478
+ return;
479
+ const baseTypeNode = getExtendsHeritageClauseElement(getClassLikeDeclarationOfSymbol(t.symbol));
480
+ let baseType;
481
+ const constructorSymbol = baseConstructorType.symbol;
482
+ const originalBaseType = constructorSymbol !== undefined ? getDeclaredTypeOfSymbol(c, constructorSymbol) : undefined;
483
+ if (constructorSymbol !== undefined &&
484
+ (constructorSymbol.flags & 32 /* SymbolFlags.Class */) !== 0 &&
485
+ areAllOuterTypeParametersApplied(c, originalBaseType)) {
486
+ // A class with no captured type arguments: apply type arguments like a type reference.
487
+ baseType = getTypeFromClassOrInterfaceReference(c, baseTypeNode, constructorSymbol);
488
+ }
489
+ else if ((baseConstructorType.flags & 1 /* TypeFlags.Any */) !== 0)
490
+ baseType = baseConstructorType;
491
+ else {
492
+ const constructors = getInstantiatedConstructorsForTypeArguments(c, baseConstructorType, getTypeArgumentNodes(baseTypeNode)?.nodes, baseTypeNode);
493
+ if (constructors.length === 0) {
494
+ c.error(getExpression(baseTypeNode), 668 /* Diagnostics.No_base_constructor_has_the_specified_number_of_type_arguments */);
495
+ return;
496
+ }
497
+ baseType = getReturnTypeOfSignature(c, constructors[0]);
498
+ }
499
+ if (isErrorType(c, baseType))
500
+ return;
501
+ const reducedBaseType = getReducedType(c, baseType);
502
+ if (!isValidBaseType(c, reducedBaseType)) {
503
+ const errorNode = getExpression(baseTypeNode);
504
+ const diagnostic = createDiagnosticForNode(errorNode, 669 /* Diagnostics.Base_constructor_return_type_0_is_not_an_object_type_or_intersection_of_object_types_with_statically_known_members */, [typeToString(c, reducedBaseType)]);
505
+ c.addDiagnostic(diagnostic.addMessageChain(elaborateNeverIntersection(c, undefined, errorNode, baseType)));
506
+ return;
507
+ }
508
+ if (t.id === reducedBaseType.id || hasBaseType(c, reducedBaseType, t)) {
509
+ c.error(t.symbol.valueDeclaration, 488 /* Diagnostics.Type_0_recursively_references_itself_as_a_base_type */, typeToString(c, t));
510
+ return;
511
+ }
512
+ sideOf(c, t).resolvedBaseTypes = [reducedBaseType];
513
+ }
514
+ export function getInstantiatedConstructorsForTypeArguments(c, t, typeArgumentNodes, location) {
515
+ const nodes = typeArgumentNodes ?? emptyNodes;
516
+ const typeArguments = [];
517
+ for (const n of nodes)
518
+ typeArguments.push(getTypeFromTypeNode(c, n));
519
+ const result = [];
520
+ for (const sig of getSignaturesOfType(c, t, 1 /* SignatureKind.Construct */)) {
521
+ if (nodes.length < getMinTypeArgumentCount(c, sig.typeParameters) || nodes.length > sig.typeParameters.length)
522
+ continue;
523
+ result.push(sig.typeParameters.length !== 0 ? getSignatureInstantiation(c, sig, typeArguments, isInJS(location)) : sig);
524
+ }
525
+ return result;
526
+ }
527
+ function isInJS(node) {
528
+ return (node.flags & 65536 /* NodeFlags.JavaScriptFile */) !== 0;
529
+ }
530
+ function resolveBaseTypesOfInterface(c, t) {
531
+ for (const declaration of t.symbol.declarations) {
532
+ if (declaration.kind !== 265 /* SyntaxKind.InterfaceDeclaration */)
533
+ continue;
534
+ for (const node of getExtendsHeritageClauseElements(declaration)) {
535
+ const baseType = getReducedType(c, getTypeFromTypeNode(c, node));
536
+ if (isErrorType(c, baseType))
537
+ continue;
538
+ if (isValidBaseType(c, baseType)) {
539
+ if (t.id !== baseType.id && !hasBaseType(c, baseType, t)) {
540
+ const side = sideOf(c, t);
541
+ if (side.resolvedBaseTypes === emptyTypes)
542
+ side.resolvedBaseTypes = [baseType];
543
+ else
544
+ side.resolvedBaseTypes.push(baseType);
545
+ }
546
+ else
547
+ reportCircularBaseType(c, declaration, t);
548
+ }
549
+ else
550
+ c.error(node, 490 /* Diagnostics.An_interface_can_only_extend_an_object_type_or_intersection_of_object_types_with_statically_known_members */);
551
+ }
552
+ }
553
+ }
554
+ function areAllOuterTypeParametersApplied(c, t) {
555
+ // Unapplied type parameters still have the symbol of the matching argument; only the last needs checking.
556
+ const outer = t.outerTypeParameters();
557
+ if (outer.length === 0)
558
+ return true;
559
+ const last = outer.length - 1;
560
+ return outer[last].symbol !== getTypeArguments(c, t)[last].symbol;
561
+ }
562
+ function reportCircularBaseType(c, node, t) {
563
+ c.error(node, 488 /* Diagnostics.Type_0_recursively_references_itself_as_a_base_type */, typeToString(c, t, undefined, 1 << 1));
564
+ }
565
+ export function isValidBaseType(c, t) {
566
+ if ((t.flags & 524288 /* TypeFlags.TypeParameter */) !== 0) {
567
+ const constraint = getBaseConstraintOfType(c, t);
568
+ if (constraint !== undefined)
569
+ return isValidBaseType(c, constraint);
570
+ }
571
+ if ((t.flags & (1048576 /* TypeFlags.Object */ | 131072 /* TypeFlags.NonPrimitive */ | 1 /* TypeFlags.Any */)) !== 0)
572
+ return !isGenericMappedType(c, t);
573
+ if ((t.flags & 268435456 /* TypeFlags.Intersection */) !== 0) {
574
+ for (const u of typesOf(t))
575
+ if (!isValidBaseType(c, u))
576
+ return false;
577
+ return true;
578
+ }
579
+ return false;
580
+ }
581
+ export function hasBaseType(c, t, checkBase) {
582
+ if ((t.objectFlags & (3 /* ObjectFlags.ClassOrInterface */ | 4 /* ObjectFlags.Reference */)) !== 0 &&
583
+ (t.flags & 1048576 /* TypeFlags.Object */) !== 0) {
584
+ const target = getTargetType(t);
585
+ if (target === checkBase)
586
+ return true;
587
+ for (const b of getBaseTypes(c, target))
588
+ if (hasBaseType(c, b, checkBase))
589
+ return true;
590
+ return false;
591
+ }
592
+ if ((t.flags & 268435456 /* TypeFlags.Intersection */) !== 0) {
593
+ for (const u of typesOf(t))
594
+ if (hasBaseType(c, u, checkBase))
595
+ return true;
596
+ }
597
+ return false;
598
+ }
599
+ export function getBaseConstructorTypeOfClass(c, t) {
600
+ const side = sideOf(c, t);
601
+ if (side.resolvedBaseConstructorType !== undefined)
602
+ return side.resolvedBaseConstructorType;
603
+ const declaration = getClassLikeDeclarationOfSymbol(t.symbol);
604
+ const baseTypeNode = declaration !== undefined ? getExtendsHeritageClauseElement(declaration) : undefined;
605
+ if (baseTypeNode === undefined) {
606
+ side.resolvedBaseConstructorType = c.undefinedType;
607
+ return c.undefinedType;
608
+ }
609
+ if (!pushTypeResolution(c, t, 1 /* TypeSystemPropertyName.ResolvedBaseConstructorType */))
610
+ return c.errorType;
611
+ const baseConstructorType = checkExpression(c, getExpression(baseTypeNode));
612
+ if ((baseConstructorType.flags & (1048576 /* TypeFlags.Object */ | 268435456 /* TypeFlags.Intersection */)) !== 0)
613
+ resolveStructuredTypeMembers(c, baseConstructorType);
614
+ if (!popTypeResolution(c)) {
615
+ c.error(t.symbol.valueDeclaration, 666 /* Diagnostics.X_0_is_referenced_directly_or_indirectly_in_its_own_base_expression */, symbolToString(c, t.symbol));
616
+ if (side.resolvedBaseConstructorType === undefined)
617
+ side.resolvedBaseConstructorType = c.errorType;
618
+ return side.resolvedBaseConstructorType;
619
+ }
620
+ if ((baseConstructorType.flags & 1 /* TypeFlags.Any */) === 0 &&
621
+ baseConstructorType !== c.nullWideningType &&
622
+ !isConstructorType(c, baseConstructorType)) {
623
+ c.error(getExpression(baseTypeNode), 667 /* Diagnostics.Type_0_is_not_a_constructor_function_type */, typeToString(c, baseConstructorType));
624
+ if (side.resolvedBaseConstructorType === undefined)
625
+ side.resolvedBaseConstructorType = c.errorType;
626
+ return side.resolvedBaseConstructorType;
627
+ }
628
+ if (side.resolvedBaseConstructorType === undefined)
629
+ side.resolvedBaseConstructorType = baseConstructorType;
630
+ return side.resolvedBaseConstructorType;
631
+ }
632
+ export function isConstructorType(c, t) {
633
+ if (getSignaturesOfType(c, t, 1 /* SignatureKind.Construct */).length > 0)
634
+ return true;
635
+ if ((t.flags & 34078720 /* TypeFlags.TypeVariable */) !== 0) {
636
+ const constraint = getBaseConstraintOfType(c, t);
637
+ return constraint !== undefined && isMixinConstructorType(c, constraint);
638
+ }
639
+ return false;
640
+ }
641
+ export function isMixinConstructorType(c, t) {
642
+ const signatures = getSignaturesOfType(c, t, 1 /* SignatureKind.Construct */);
643
+ if (signatures.length !== 1)
644
+ return false;
645
+ const s = signatures[0];
646
+ if (s.typeParameters.length !== 0 || s.parameters.length !== 1 || !s.hasRestParameter())
647
+ return false;
648
+ const paramType = getTypeOfParameterLazy(c, s.parameters[0]);
649
+ return (paramType.flags & 1 /* TypeFlags.Any */) !== 0 || getElementTypeOfArrayType(c, paramType) === c.anyType;
650
+ }
651
+ import { getTypeOfParameter as getTypeOfParameterLazy } from './checker-symbol-types.js';
652
+ export function getElementTypeOfArrayType(c, t) {
653
+ if ((t.objectFlags & 4 /* ObjectFlags.Reference */) === 0)
654
+ return undefined;
655
+ const target = t.target;
656
+ if (target !== c.globalArrayType && target !== c.globalReadonlyArrayType)
657
+ return undefined;
658
+ return getTypeArguments(c, t)[0];
659
+ }
660
+ // ---- Constraints and defaults
661
+ export function getConstraintOfTypeParameter(c, typeParameter) {
662
+ return hasNonCircularBaseConstraint(c, typeParameter) ? getConstraintFromTypeParameter(c, typeParameter) : undefined;
663
+ }
664
+ export function hasNonCircularBaseConstraint(c, t) {
665
+ return getResolvedBaseConstraint(c, t) !== c.circularConstraintType;
666
+ }
667
+ export function getConstraintDeclaration(t) {
668
+ if (t.symbol !== undefined)
669
+ for (const d of t.symbol.declarations)
670
+ if (d.kind === 169 /* SyntaxKind.TypeParameter */) {
671
+ const constraint = d.constraint;
672
+ if (constraint !== undefined)
673
+ return constraint;
674
+ }
675
+ return undefined;
676
+ }
677
+ /** The declared constraint; use getConstraintOfTypeParameter, which guards against circularity. */
678
+ export function getConstraintFromTypeParameter(c, t) {
679
+ if ((t.flags & 524288 /* TypeFlags.TypeParameter */) === 0)
680
+ return undefined;
681
+ const tp = t;
682
+ // Type parameters created with a constraint have it inline; others get it on first use.
683
+ if (tp.constraint !== undefined)
684
+ return tp.constraint !== c.noConstraintType ? tp.constraint : undefined;
685
+ const side = sideOf(c, tp);
686
+ if (side.constraint === undefined) {
687
+ let constraint;
688
+ if (tp.target !== undefined) {
689
+ const targetConstraint = getConstraintOfTypeParameter(c, tp.target);
690
+ constraint = targetConstraint !== undefined ? instantiateType(c, targetConstraint, tp.mapper) : undefined;
691
+ }
692
+ else {
693
+ const declaration = getConstraintDeclaration(t);
694
+ if (declaration !== undefined) {
695
+ constraint = getTypeFromTypeNode(c, declaration);
696
+ if ((constraint.flags & 1 /* TypeFlags.Any */) !== 0 && !isErrorType(c, constraint))
697
+ // Mapped type keys use string | number | symbol; others unknown.
698
+ constraint =
699
+ declaration.parent.parent.kind === 201 /* SyntaxKind.MappedType */ ? c.stringNumberSymbolType : c.unknownType;
700
+ }
701
+ else
702
+ constraint = getInferredTypeParameterConstraint(c, t);
703
+ }
704
+ side.constraint = constraint ?? c.noConstraintType;
705
+ }
706
+ return side.constraint !== c.noConstraintType ? side.constraint : undefined;
707
+ }
708
+ export function getDefaultFromTypeParameter(c, t) {
709
+ if ((t.flags & 524288 /* TypeFlags.TypeParameter */) === 0)
710
+ return undefined;
711
+ const defaultType = getResolvedTypeParameterDefault(c, t);
712
+ return defaultType !== c.noConstraintType && defaultType !== c.circularConstraintType ? defaultType : undefined;
713
+ }
714
+ export function getResolvedTypeParameterDefault(c, t) {
715
+ const side = sideOf(c, t);
716
+ if (side.resolvedDefaultType === undefined) {
717
+ if (t.target !== undefined) {
718
+ const targetDefault = getResolvedTypeParameterDefault(c, t.target);
719
+ side.resolvedDefaultType = instantiateType(c, targetDefault, t.mapper);
720
+ }
721
+ else {
722
+ // Block recursion while resolving.
723
+ side.resolvedDefaultType = c.resolvingDefaultType;
724
+ let defaultType = c.noConstraintType;
725
+ if (t.symbol !== undefined)
726
+ for (const d of t.symbol.declarations)
727
+ if (d.kind === 169 /* SyntaxKind.TypeParameter */) {
728
+ const node = d.defaultType;
729
+ if (node !== undefined) {
730
+ defaultType = getTypeFromTypeNode(c, node);
731
+ break;
732
+ }
733
+ }
734
+ if (side.resolvedDefaultType === c.resolvingDefaultType)
735
+ side.resolvedDefaultType = defaultType;
736
+ }
737
+ }
738
+ else if (side.resolvedDefaultType === c.resolvingDefaultType)
739
+ side.resolvedDefaultType = c.circularConstraintType;
740
+ return side.resolvedDefaultType;
741
+ }
742
+ export function getDefaultOrUnknownFromTypeParameter(c, t) {
743
+ return getDefaultFromTypeParameter(c, t) ?? c.unknownType;
744
+ }
745
+ export function getMinTypeArgumentCount(c, typeParameters) {
746
+ let minTypeArgumentCount = 0;
747
+ for (let i = 0; i < typeParameters.length; i++)
748
+ if (!hasTypeParameterDefault(typeParameters[i]))
749
+ minTypeArgumentCount = i + 1;
750
+ return minTypeArgumentCount;
751
+ }
752
+ /** Whether a type parameter is declared with a default, without resolving it. */
753
+ function hasTypeParameterDefault(t) {
754
+ if (t.symbol === undefined)
755
+ return false;
756
+ for (const d of t.symbol.declarations)
757
+ if (d.kind === 169 /* SyntaxKind.TypeParameter */ && d.defaultType !== undefined)
758
+ return true;
759
+ return false;
760
+ }
761
+ export function fillMissingTypeArguments(c, typeArguments, typeParameters, minTypeArgumentCount, isJavaScriptImplicitAny) {
762
+ const numTypeParameters = typeParameters.length;
763
+ if (numTypeParameters === 0)
764
+ return [];
765
+ const numTypeArguments = typeArguments.length;
766
+ if (!isJavaScriptImplicitAny && numTypeArguments >= numTypeParameters)
767
+ return typeArguments;
768
+ const result = typeArguments.slice();
769
+ // Invalid forward references in defaults map to the error type.
770
+ for (let i = numTypeArguments; i < numTypeParameters; i++)
771
+ result.push(c.errorType);
772
+ const baseDefaultType = isJavaScriptImplicitAny ? c.anyType : c.unknownType;
773
+ for (let i = numTypeArguments; i < numTypeParameters; i++) {
774
+ let defaultType = getDefaultFromTypeParameter(c, typeParameters[i]);
775
+ // In JavaScript, a default of unknown or {} is any.
776
+ if (isJavaScriptImplicitAny &&
777
+ defaultType !== undefined &&
778
+ (isTypeIdenticalTo(c, defaultType, c.unknownType) || isTypeIdenticalTo(c, defaultType, c.emptyObjectType)))
779
+ defaultType = c.anyType;
780
+ result[i] =
781
+ defaultType !== undefined
782
+ ? instantiateType(c, defaultType, newTypeMapper(typeParameters, result))
783
+ : baseDefaultType;
784
+ }
785
+ return result;
786
+ }
787
+ export { getFirstIdentifier, getMergedSymbol, getSourceFileOfNode };