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,901 @@
1
+ // Class and interface heritage: base class and implemented interface conformance, member overrides,
2
+ // index signature constraints and duplicate members.
3
+ import { getExpression, getHeritageClauses, getInitializer, getMembers, getName, getParameters, getPostfixToken, getText, getType, getTypeParameters, getTypeArguments, } from './ast.js';
4
+ import { findConstructorDeclaration, getNameOfDeclaration, getDeclarationOfKind, hasStaticModifier, hasSyntacticModifier, isClassLike, isOptionalChain, isParameterPropertyDeclaration, isStatic, } from './binder-utilities.js';
5
+ import { chainDiagnostic } from './diagnostics.js';
6
+ import { getUseDefineForClassFields } from './options.js';
7
+ import { createDiagnosticForNode } from './checker.js';
8
+ import { emptyIndexInfos, emptySignatures, newTypeMapper, } from './checker-types.js';
9
+ import { createAnonymousType, getIntersectionType, isErrorType, typesOf } from './checker-type-factory.js';
10
+ import { getBaseConstructorTypeOfClass, getBaseTypes, getClassLikeDeclarationOfSymbol, getConstraintOfTypeParameter, getDeclaredTypeOfSymbol, getDefaultFromTypeParameter, getExtendsHeritageClauseElement, getExtendsHeritageClauseElements, getMinTypeArgumentCount, isEntityNameExpression, isMixinConstructorType, isValidBaseType, getDeclaredTypeOfTypeParameter, fillMissingTypeArguments, getInstantiatedConstructorsForTypeArguments, } from './checker-declared-types.js';
11
+ import { getReturnTypeOfSignature } from './checker-signatures.js';
12
+ import { instantiateType } from './instantiation.js';
13
+ import { checkSourceElement } from './checker-source-file.js';
14
+ import { isInJSFile } from './ast-utilities.js';
15
+ import { getFullyQualifiedName, getParentOfSymbol, getSpellingSuggestionForName, getSymbolOfDeclaration, } from './checker-symbols.js';
16
+ import { getNonMissingTypeOfSymbol, getTypeOfSymbol } from './checker-symbol-types.js';
17
+ import { getApparentType, getDeclarationModifierFlagsFromSymbol, getIndexInfoOfType, getIndexInfosOfType, getIndexSymbol, getIndexTypeOfType, getPropertiesOfObjectType, getPropertiesOfType, getPropertyOfObjectType, getPropertyOfType, getReducedType, getSignaturesOfType, getTargetSymbol, getTypeWithThisArgument, isApplicableIndexType, isNamedMember, isPrototypeProperty, resolveDeclaredMembers, resolveStructuredTypeMembers, } from './checker-members.js';
18
+ import { getLiteralTypeFromProperty } from './checker-type-operators.js';
19
+ import { getTypeFromTypeNode } from './checker-type-nodes.js';
20
+ import { getTypeOfExpression } from './checker-expressions.js';
21
+ import { tryGetNameFromType } from './checker-narrowing.js';
22
+ import { hasDynamicName, hasLateBindableName, isBindingPattern } from './checker-utilities.js';
23
+ import { checkTypeAssignableTo, checkTypeRelatedTo, compareProperties, isTypeAssignableTo, isTypeIdenticalTo, } from './relations.js';
24
+ import { symbolToString, typeToString } from './type-printer.js';
25
+ import { checkFunctionOrConstructorSymbol } from './checker-overloads.js';
26
+ import { isPropertyInitializedInConstructor } from './checker-classes.js';
27
+ import { declarationCount, getDeclarations, } from './symbol.js';
28
+ // ---- Classes
29
+ /** Checks a class's merged declarations, members, base class, implemented types and index signatures. */
30
+ export function checkClassHeritage(c, node) {
31
+ const symbol = getSymbolOfDeclaration(c, node);
32
+ if (symbol === undefined)
33
+ return;
34
+ const classType = getDeclaredTypeOfSymbol(c, symbol);
35
+ if ((classType.flags & 1048576 /* TypeFlags.Object */) === 0)
36
+ return;
37
+ const typeWithThis = getTypeWithThisArgument(c, classType, undefined, false);
38
+ const staticType = getTypeOfSymbol(c, symbol);
39
+ checkTypeParameterListsIdentical(c, symbol);
40
+ checkFunctionOrConstructorSymbol(c, symbol);
41
+ checkObjectTypeForDuplicateDeclarations(c, node, true);
42
+ if ((node.flags & 8388608 /* NodeFlags.Ambient */) === 0)
43
+ checkClassForStaticPropertyNameConflicts(c, node);
44
+ const baseTypeNode = getExtendsHeritageClauseElement(node);
45
+ if (baseTypeNode !== undefined) {
46
+ const baseTypes = getBaseTypes(c, classType);
47
+ if (baseTypes.length !== 0)
48
+ checkBaseClass(c, node, classType, typeWithThis, staticType, baseTypes[0]);
49
+ }
50
+ checkMembersForOverrideModifier(c, node, classType, typeWithThis, staticType);
51
+ for (const typeRefNode of getImplementsHeritageClauseElements(node)) {
52
+ const expr = getExpression(typeRefNode);
53
+ if (!isEntityNameExpression(expr) || isOptionalChain(expr))
54
+ c.error(expr, 660 /* Diagnostics.A_class_can_only_implement_an_identifier_Slashqualified_name_with_optional_type_arguments */);
55
+ const t = getReducedType(c, getTypeFromTypeNode(c, typeRefNode));
56
+ if (isErrorType(c, t))
57
+ continue;
58
+ if (!isValidBaseType(c, t)) {
59
+ c.error(typeRefNode, 592 /* Diagnostics.A_class_can_only_implement_an_object_type_or_intersection_of_object_types_with_statically_known_members */);
60
+ continue;
61
+ }
62
+ const message = t.symbol !== undefined && (t.symbol.flags & 32 /* SymbolFlags.Class */) !== 0
63
+ ? 852 /* Diagnostics.Class_0_incorrectly_implements_class_1_Did_you_mean_to_extend_1_and_inherit_its_members_as_a_subclass */
64
+ : 591 /* Diagnostics.Class_0_incorrectly_implements_interface_1 */;
65
+ const baseWithThis = getTypeWithThisArgument(c, t, classType.thisType, false);
66
+ if (!checkTypeAssignableTo(c, typeWithThis, baseWithThis, undefined, undefined))
67
+ issueMemberSpecificError(c, node, typeWithThis, baseWithThis, message);
68
+ }
69
+ checkIndexConstraints(c, classType, symbol, false);
70
+ checkIndexConstraints(c, staticType, symbol, true);
71
+ checkClassOrInterfaceForDuplicateIndexSignatures(c, node);
72
+ }
73
+ function checkBaseClass(c, node, classType, typeWithThis, staticType, baseType) {
74
+ const baseConstructorType = getBaseConstructorTypeOfClass(c, classType);
75
+ const staticBaseType = getApparentType(c, baseConstructorType);
76
+ const baseTypeNode = getExtendsHeritageClauseElement(node);
77
+ checkBaseTypeAccessibility(c, staticBaseType, baseTypeNode);
78
+ const typeArgumentNodes = getTypeArguments(baseTypeNode);
79
+ if (typeArgumentNodes !== undefined && typeArgumentNodes.nodes.length !== 0) {
80
+ for (const n of typeArgumentNodes.nodes)
81
+ checkSourceElement(c, n);
82
+ for (const constructor of getConstructorsForTypeArguments(c, staticBaseType, typeArgumentNodes.nodes))
83
+ if (!checkTypeArgumentConstraints(c, baseTypeNode, constructor.typeParameters))
84
+ break;
85
+ }
86
+ const baseWithThis = getTypeWithThisArgument(c, baseType, classType.thisType, false);
87
+ const errorNode = getName(node) ?? node;
88
+ if (!checkTypeAssignableTo(c, typeWithThis, baseWithThis, undefined, undefined))
89
+ issueMemberSpecificError(c, node, typeWithThis, baseWithThis, 586 /* Diagnostics.Class_0_incorrectly_extends_base_class_1 */);
90
+ // The static side is checked only when the instance side is assignable.
91
+ else
92
+ checkTypeAssignableTo(c, staticType, getTypeWithoutSignatures(c, staticBaseType), errorNode, 588 /* Diagnostics.Class_static_side_0_incorrectly_extends_base_class_static_side_1 */);
93
+ if ((baseConstructorType.flags & 34078720 /* TypeFlags.TypeVariable */) !== 0) {
94
+ if (!isMixinConstructorType(c, staticType))
95
+ c.error(errorNode, 701 /* Diagnostics.A_mixin_class_must_have_a_constructor_with_a_single_rest_parameter_of_type_any */);
96
+ else if (hasAbstractSignature(getSignaturesOfType(c, baseConstructorType, 1 /* SignatureKind.Construct */)) &&
97
+ !hasSyntacticModifier(node, 64 /* ModifierFlags.Abstract */))
98
+ c.error(errorNode, 929 /* Diagnostics.A_mixin_class_that_extends_from_a_type_variable_containing_an_abstract_construct_signature_must_also_be_declared_abstract */);
99
+ }
100
+ // A class-like constructor function that isn't a class must return the same type from every
101
+ // instantiated construct signature.
102
+ if (!(staticBaseType.symbol !== undefined && (staticBaseType.symbol.flags & 32 /* SymbolFlags.Class */) !== 0) &&
103
+ (baseConstructorType.flags & 34078720 /* TypeFlags.TypeVariable */) === 0) {
104
+ const constructors = getInstantiatedConstructorsForTypeArguments(c, staticBaseType, getTypeArguments(baseTypeNode)?.nodes, baseTypeNode);
105
+ for (const sig of constructors) {
106
+ if (!isTypeIdenticalTo(c, getReturnTypeOfSignature(c, sig), baseType)) {
107
+ c.error(getExpression(baseTypeNode), 670 /* Diagnostics.Base_constructors_must_all_have_the_same_return_type */);
108
+ break;
109
+ }
110
+ }
111
+ }
112
+ checkKindsOfPropertyMemberOverrides(c, classType, baseType);
113
+ }
114
+ function hasAbstractSignature(signatures) {
115
+ for (const s of signatures)
116
+ if ((s.flags & 8 /* SignatureFlags.Abstract */) !== 0)
117
+ return true;
118
+ return false;
119
+ }
120
+ function getConstructorsForTypeArguments(c, t, typeArgumentNodes) {
121
+ const count = typeArgumentNodes.length;
122
+ const result = [];
123
+ for (const sig of getSignaturesOfType(c, t, 1 /* SignatureKind.Construct */))
124
+ if (count >= getMinTypeArgumentCount(c, sig.typeParameters) && count <= sig.typeParameters.length)
125
+ result.push(sig);
126
+ return result;
127
+ }
128
+ /**
129
+ * Checks the type arguments of `node` against the constraints of `typeParameters`, defaults included, up to
130
+ * the first that does not satisfy its constraint.
131
+ */
132
+ export function checkTypeArgumentConstraints(c, node, typeParameters) {
133
+ let typeArguments = undefined;
134
+ let mapper = undefined;
135
+ const typeArgumentNodes = getTypeArguments(node)?.nodes ?? [];
136
+ let result = true;
137
+ for (let i = 0; i < typeParameters.length; i++) {
138
+ const constraint = getConstraintOfTypeParameter(c, typeParameters[i]);
139
+ if (constraint === undefined)
140
+ continue;
141
+ if (typeArguments === undefined) {
142
+ const explicit = [];
143
+ for (const n of typeArgumentNodes)
144
+ explicit.push(getTypeFromTypeNode(c, n));
145
+ typeArguments = fillMissingTypeArguments(c, explicit, typeParameters, getMinTypeArgumentCount(c, typeParameters), isInJSFile(node));
146
+ mapper = newTypeMapper(typeParameters.slice(), typeArguments);
147
+ }
148
+ result =
149
+ result &&
150
+ checkTypeAssignableTo(c, typeArguments[i], instantiateType(c, constraint, mapper), i < typeArgumentNodes.length ? typeArgumentNodes[i] : undefined, 520 /* Diagnostics.Type_0_does_not_satisfy_the_constraint_1 */);
151
+ }
152
+ return result;
153
+ }
154
+ function getImplementsHeritageClauseElements(node) {
155
+ const result = [];
156
+ const clauses = getHeritageClauses(node);
157
+ if (clauses === undefined)
158
+ return result;
159
+ // Only the first `implements` clause counts; others are syntax errors.
160
+ for (const clause of clauses.nodes) {
161
+ const heritage = clause;
162
+ if (heritage.token === 118 /* SyntaxKind.ImplementsKeyword */) {
163
+ for (const t of heritage.types.nodes)
164
+ result.push(t);
165
+ break;
166
+ }
167
+ }
168
+ return result;
169
+ }
170
+ function checkBaseTypeAccessibility(c, t, node) {
171
+ const signatures = getSignaturesOfType(c, t, 1 /* SignatureKind.Construct */);
172
+ if (signatures.length === 0)
173
+ return;
174
+ const declaration = signatures[0].declaration;
175
+ if (declaration === undefined || !hasSyntacticModifier(declaration, 2 /* ModifierFlags.Private */))
176
+ return;
177
+ const typeClassDeclaration = t.symbol !== undefined ? getClassLikeDeclarationOfSymbol(t.symbol) : undefined;
178
+ if (!isNodeWithinClass(node, typeClassDeclaration))
179
+ c.error(node, 809 /* Diagnostics.Cannot_extend_a_class_0_Class_constructor_is_marked_as_private */, getFullyQualifiedName(c, t.symbol));
180
+ }
181
+ function isNodeWithinClass(node, classDeclaration) {
182
+ for (let n = node; n !== undefined; n = n.parent)
183
+ if (n === classDeclaration)
184
+ return true;
185
+ return false;
186
+ }
187
+ /** Reports each incompatible member, or the class as a whole when no member is to blame. */
188
+ function issueMemberSpecificError(c, node, typeWithThis, baseWithThis, broadMessage) {
189
+ let issuedMemberError = false;
190
+ for (const member of getMembers(node).nodes) {
191
+ if (isStatic(member))
192
+ continue;
193
+ const declaredProp = getSymbolOfDeclaration(c, member);
194
+ if (declaredProp === undefined || declaredProp.name === "\uFFFEcomputed" /* InternalSymbolName.Computed */)
195
+ continue;
196
+ const prop = getPropertyOfType(c, typeWithThis, declaredProp.name);
197
+ const baseProp = getPropertyOfType(c, baseWithThis, declaredProp.name);
198
+ if (prop === undefined || baseProp === undefined)
199
+ continue;
200
+ const diagnostics = [];
201
+ if (!checkTypeRelatedTo(c, getTypeOfSymbol(c, prop), getTypeOfSymbol(c, baseProp), c.assignableRelation, getName(member) ?? member, undefined, diagnostics)) {
202
+ c.addDiagnostic(chainDiagnostic(diagnostics[0], 587 /* Diagnostics.Property_0_in_type_1_is_not_assignable_to_the_same_property_in_base_type_2 */, symbolToString(c, declaredProp), typeToString(c, typeWithThis), typeToString(c, baseWithThis)));
203
+ issuedMemberError = true;
204
+ }
205
+ }
206
+ if (!issuedMemberError)
207
+ checkTypeAssignableTo(c, typeWithThis, baseWithThis, getName(node) ?? node, broadMessage);
208
+ }
209
+ function getTypeWithoutSignatures(c, t) {
210
+ if ((t.flags & 1048576 /* TypeFlags.Object */) !== 0) {
211
+ const resolved = resolveStructuredTypeMembers(c, t);
212
+ if (resolved.callSignatures.length !== 0 || resolved.constructSignatures.length !== 0)
213
+ return createAnonymousType(c, t.symbol, resolved.members, emptySignatures, emptySignatures, emptyIndexInfos);
214
+ }
215
+ else if ((t.flags & 268435456 /* TypeFlags.Intersection */) !== 0) {
216
+ const types = [];
217
+ for (const u of typesOf(t))
218
+ types.push(getTypeWithoutSignatures(c, u));
219
+ return getIntersectionType(c, types);
220
+ }
221
+ return t;
222
+ }
223
+ function checkClassForStaticPropertyNameConflicts(c, node) {
224
+ if (getUseDefineForClassFields(c.compilerOptions))
225
+ return;
226
+ for (const member of getMembers(node).nodes) {
227
+ const name = getName(member);
228
+ if (name === undefined || !isStatic(member))
229
+ continue;
230
+ const memberName = getEffectivePropertyName(c, name);
231
+ if (memberName === 'name' || memberName === 'length' || memberName === 'caller' || memberName === 'arguments')
232
+ c.error(name, 831 /* Diagnostics.Static_property_0_conflicts_with_built_in_property_Function_0_of_constructor_function_1 */, memberName, symbolToString(c, getSymbolOfDeclaration(c, node)));
233
+ }
234
+ }
235
+ /** The property name a name denotes: a literal name, or the literal type of a computed name's expression. */
236
+ function getEffectivePropertyName(c, name) {
237
+ switch (name.kind) {
238
+ case 79 /* SyntaxKind.Identifier */:
239
+ case 10 /* SyntaxKind.StringLiteral */:
240
+ case 8 /* SyntaxKind.NumericLiteral */:
241
+ case 14 /* SyntaxKind.NoSubstitutionTemplateLiteral */:
242
+ return getText(name);
243
+ case 168 /* SyntaxKind.ComputedPropertyName */: {
244
+ const e = getExpression(name);
245
+ if (e.kind === 10 /* SyntaxKind.StringLiteral */ ||
246
+ e.kind === 8 /* SyntaxKind.NumericLiteral */ ||
247
+ e.kind === 14 /* SyntaxKind.NoSubstitutionTemplateLiteral */)
248
+ return getText(e);
249
+ return tryGetNameFromType(getTypeOfExpression(c, e));
250
+ }
251
+ }
252
+ return undefined;
253
+ }
254
+ // ---- Member overrides
255
+ class MissingAbstractMembers {
256
+ baseTypeName;
257
+ typeName;
258
+ properties = [];
259
+ constructor(baseTypeName, typeName) {
260
+ this.baseTypeName = baseTypeName;
261
+ this.typeName = typeName;
262
+ }
263
+ }
264
+ /**
265
+ * Checks that derived members override base members of the same kind, and that abstract members
266
+ * are implemented. Assignability is checked by `checkBaseClass`.
267
+ */
268
+ function checkKindsOfPropertyMemberOverrides(c, t, baseType) {
269
+ let missing = undefined;
270
+ let missingNode = undefined;
271
+ for (const baseProperty of getPropertiesOfType(c, baseType)) {
272
+ const base = getTargetSymbol(c, baseProperty);
273
+ if ((base.flags & 4194304 /* SymbolFlags.Prototype */) !== 0)
274
+ continue;
275
+ const baseSymbol = getPropertyOfObjectType(c, t, base.name);
276
+ if (baseSymbol === undefined)
277
+ continue;
278
+ const derived = getTargetSymbol(c, baseSymbol);
279
+ const baseDeclarationFlags = getDeclarationModifierFlagsFromSymbol(c, base, false);
280
+ // Uninstantiated targets: an inherited member of a generic class resolves to the same symbol.
281
+ if (derived === base) {
282
+ // An inherited abstract member must be implemented, or the class declared abstract.
283
+ if ((baseDeclarationFlags & 64 /* ModifierFlags.Abstract */) === 0)
284
+ continue;
285
+ const derivedClassDecl = getClassLikeDeclarationOfSymbol(t.symbol);
286
+ if (derivedClassDecl !== undefined && hasSyntacticModifier(derivedClassDecl, 64 /* ModifierFlags.Abstract */))
287
+ continue;
288
+ // Another base type (from a merged interface) may implement it.
289
+ if (isImplementedByOtherBaseType(c, t, baseType, base))
290
+ continue;
291
+ if (missing === undefined) {
292
+ missing = new MissingAbstractMembers(typeToString(c, baseType), typeToString(c, t));
293
+ missingNode = derivedClassDecl;
294
+ }
295
+ missing.properties.push(symbolToString(c, baseProperty));
296
+ continue;
297
+ }
298
+ const derivedDeclarationFlags = getDeclarationModifierFlagsFromSymbol(c, derived, false);
299
+ // Private members aren't overridden.
300
+ if (((baseDeclarationFlags | derivedDeclarationFlags) & 2 /* ModifierFlags.Private */) !== 0)
301
+ continue;
302
+ const basePropertyFlags = base.flags & 98308 /* SymbolFlags.PropertyOrAccessor */;
303
+ const derivedPropertyFlags = derived.flags & 98308 /* SymbolFlags.PropertyOrAccessor */;
304
+ const derivedName = getNameOfDeclaration(derived.valueDeclaration) ?? derived.valueDeclaration;
305
+ if (basePropertyFlags !== 0 && derivedPropertyFlags !== 0) {
306
+ // Abstract and interface members, and assignment-declared overrides, may change kind.
307
+ if ((base.checkFlags & 262144 /* CheckFlags.Mapped */) !== 0 ||
308
+ (derived.valueDeclaration !== undefined && derived.valueDeclaration.kind === 227 /* SyntaxKind.BinaryExpression */) ||
309
+ arePropertiesAbstractOrInterface(base, baseDeclarationFlags))
310
+ continue;
311
+ const overriddenInstanceProperty = basePropertyFlags !== 4 /* SymbolFlags.Property */ && derivedPropertyFlags === 4 /* SymbolFlags.Property */;
312
+ const overriddenInstanceAccessor = basePropertyFlags === 4 /* SymbolFlags.Property */ && derivedPropertyFlags !== 4 /* SymbolFlags.Property */;
313
+ if (overriddenInstanceProperty || overriddenInstanceAccessor)
314
+ c.error(derivedName, overriddenInstanceProperty
315
+ ? 754 /* Diagnostics.X_0_is_defined_as_an_accessor_in_class_1_but_is_overridden_here_in_2_as_an_instance_property */
316
+ : 755 /* Diagnostics.X_0_is_defined_as_a_property_in_class_1_but_is_overridden_here_in_2_as_an_accessor */, symbolToString(c, base), typeToString(c, baseType), typeToString(c, t));
317
+ else if (getUseDefineForClassFields(c.compilerOptions))
318
+ checkPropertyOverwritesBase(c, t, baseType, base, derived, baseDeclarationFlags, derivedDeclarationFlags);
319
+ continue;
320
+ }
321
+ let message;
322
+ if (isPrototypeProperty(base)) {
323
+ // A method may be overridden by a method or property.
324
+ if (isPrototypeProperty(derived) || (derived.flags & 4 /* SymbolFlags.Property */) !== 0)
325
+ continue;
326
+ message =
327
+ 593 /* Diagnostics.Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_accessor */;
328
+ }
329
+ else if ((base.flags & 98304 /* SymbolFlags.Accessor */) !== 0)
330
+ message =
331
+ 595 /* Diagnostics.Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_function */;
332
+ else
333
+ message =
334
+ 594 /* Diagnostics.Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_function */;
335
+ c.error(derivedName, message, typeToString(c, baseType), symbolToString(c, base), typeToString(c, t));
336
+ }
337
+ if (missing !== undefined)
338
+ reportMissingAbstractMembers(c, missingNode, missing);
339
+ }
340
+ function isImplementedByOtherBaseType(c, t, baseType, base) {
341
+ for (const otherBaseType of getBaseTypes(c, t)) {
342
+ if (otherBaseType === baseType)
343
+ continue;
344
+ const baseSymbol = getPropertyOfObjectType(c, otherBaseType, base.name);
345
+ if (baseSymbol !== undefined && getTargetSymbol(c, baseSymbol) !== base)
346
+ return true;
347
+ }
348
+ return false;
349
+ }
350
+ /** With `useDefineForClassFields`, a redeclared property without an initializer resets the base value. */
351
+ function checkPropertyOverwritesBase(c, t, baseType, base, derived, baseDeclarationFlags, derivedDeclarationFlags) {
352
+ let uninitialized;
353
+ for (const d of getDeclarations(derived)) {
354
+ if (d.kind === 173 /* SyntaxKind.PropertyDeclaration */ && getInitializer(d) === undefined) {
355
+ uninitialized = d;
356
+ break;
357
+ }
358
+ }
359
+ if (uninitialized === undefined ||
360
+ (derived.flags & 33554432 /* SymbolFlags.Transient */) !== 0 ||
361
+ (baseDeclarationFlags & 64 /* ModifierFlags.Abstract */) !== 0 ||
362
+ (derivedDeclarationFlags & 64 /* ModifierFlags.Abstract */) !== 0)
363
+ return;
364
+ for (const d of getDeclarations(derived))
365
+ if ((d.flags & 8388608 /* NodeFlags.Ambient */) !== 0)
366
+ return;
367
+ const constructor = findConstructorDeclaration(getClassLikeDeclarationOfSymbol(t.symbol));
368
+ const propName = getName(uninitialized);
369
+ const postfix = getPostfixToken(uninitialized);
370
+ if ((postfix !== undefined && postfix.kind === 53 /* SyntaxKind.ExclamationToken */) ||
371
+ constructor === undefined ||
372
+ propName.kind !== 79 /* SyntaxKind.Identifier */ ||
373
+ !c.strictNullChecks ||
374
+ !isPropertyInitializedInConstructor(c, propName, t, constructor))
375
+ c.error(getNameOfDeclaration(derived.valueDeclaration) ?? derived.valueDeclaration, 756 /* Diagnostics.Property_0_will_overwrite_the_base_property_in_1_If_this_is_intentional_add_an_initializer_Otherwise_add_a_declare_modifier_or_remove_the_redundant_declaration */, symbolToString(c, base), typeToString(c, baseType));
376
+ }
377
+ function reportMissingAbstractMembers(c, node, missing) {
378
+ const isExpression = node !== undefined && node.kind === 232 /* SyntaxKind.ClassExpression */;
379
+ const properties = missing.properties;
380
+ if (properties.length === 1) {
381
+ if (isExpression)
382
+ c.error(node, 787 /* Diagnostics.Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1 */, properties[0], missing.baseTypeName);
383
+ else
384
+ c.error(node, 675 /* Diagnostics.Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2 */, missing.typeName, properties[0], missing.baseTypeName);
385
+ return;
386
+ }
387
+ if (properties.length > 5) {
388
+ const listed = properties
389
+ .slice(0, 4)
390
+ .map((p) => "'" + p + "'")
391
+ .join(', ');
392
+ const remaining = String(properties.length - 4);
393
+ if (isExpression)
394
+ c.error(node, 784 /* Diagnostics.Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_and_2_more */, missing.baseTypeName, listed, remaining);
395
+ else
396
+ c.error(node, 789 /* Diagnostics.Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_and_3_more */, missing.typeName, missing.baseTypeName, listed, remaining);
397
+ return;
398
+ }
399
+ const listed = properties.map((p) => "'" + p + "'").join(', ');
400
+ if (isExpression)
401
+ c.error(node, 790 /* Diagnostics.Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1 */, missing.baseTypeName, listed);
402
+ else
403
+ c.error(node, 788 /* Diagnostics.Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2 */, missing.typeName, missing.baseTypeName, listed);
404
+ }
405
+ function arePropertiesAbstractOrInterface(base, baseDeclarationFlags) {
406
+ // Synthetic (intersection) properties need any declaration to qualify; others need all.
407
+ if ((base.checkFlags & 6 /* CheckFlags.Synthetic */) !== 0) {
408
+ for (const d of getDeclarations(base))
409
+ if (isPropertyAbstractOrInterface(d, baseDeclarationFlags))
410
+ return true;
411
+ return false;
412
+ }
413
+ for (const d of getDeclarations(base))
414
+ if (!isPropertyAbstractOrInterface(d, baseDeclarationFlags))
415
+ return false;
416
+ return true;
417
+ }
418
+ function isPropertyAbstractOrInterface(declaration, baseDeclarationFlags) {
419
+ return (declaration.parent.kind === 265 /* SyntaxKind.InterfaceDeclaration */ ||
420
+ ((baseDeclarationFlags & 64 /* ModifierFlags.Abstract */) !== 0 &&
421
+ (declaration.kind !== 173 /* SyntaxKind.PropertyDeclaration */ || getInitializer(declaration) === undefined)));
422
+ }
423
+ // ---- `override`
424
+ function checkMembersForOverrideModifier(c, node, t, typeWithThis, staticType) {
425
+ let baseWithThis = undefined;
426
+ if (getExtendsHeritageClauseElement(node) !== undefined) {
427
+ const baseTypes = getBaseTypes(c, t);
428
+ if (baseTypes.length > 0)
429
+ baseWithThis = getTypeWithThisArgument(c, baseTypes[0], t.thisType, false);
430
+ }
431
+ const baseStaticType = getBaseConstructorTypeOfClass(c, t);
432
+ for (const member of getMembers(node).nodes) {
433
+ if (hasSyntacticModifier(member, 128 /* ModifierFlags.Ambient */))
434
+ continue;
435
+ if (member.kind === 177 /* SyntaxKind.Constructor */) {
436
+ for (const param of getParameters(member).nodes)
437
+ if (isParameterPropertyDeclaration(param, member))
438
+ checkMemberForOverrideModifier(c, node, staticType, baseStaticType, baseWithThis, t, typeWithThis, param);
439
+ }
440
+ else
441
+ checkMemberForOverrideModifier(c, node, staticType, baseStaticType, baseWithThis, t, typeWithThis, member);
442
+ }
443
+ }
444
+ function checkMemberForOverrideModifier(c, node, staticType, baseStaticType, baseWithThis, t, typeWithThis, member) {
445
+ const isJs = (node.flags & 65536 /* NodeFlags.JavaScriptFile */) !== 0;
446
+ const memberHasOverrideModifier = hasSyntacticModifier(member, 16 /* ModifierFlags.Override */);
447
+ if (baseWithThis === undefined) {
448
+ if (memberHasOverrideModifier)
449
+ c.error(member, isJs
450
+ ? 1107 /* Diagnostics.This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_containing_class_0_does_not_extend_another_class */
451
+ : 1098 /* Diagnostics.This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another_class */, typeToString(c, t));
452
+ return;
453
+ }
454
+ const memberSymbol = getSymbolOfDeclaration(c, member);
455
+ if (memberHasOverrideModifier &&
456
+ memberSymbol !== undefined &&
457
+ memberSymbol.valueDeclaration !== undefined &&
458
+ member.kind !== 170 /* SyntaxKind.Parameter */ &&
459
+ hasDynamicName(member) &&
460
+ !hasLateBindableName(c, member)) {
461
+ c.error(member, isJs
462
+ ? 1114 /* Diagnostics.This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_name_is_dynamic */
463
+ : 1113 /* Diagnostics.This_member_cannot_have_an_override_modifier_because_its_name_is_dynamic */);
464
+ return;
465
+ }
466
+ if (!memberHasOverrideModifier && c.compilerOptions.noImplicitOverride !== true)
467
+ return;
468
+ if (memberSymbol === undefined)
469
+ return;
470
+ const memberIsStatic = isStatic(member);
471
+ const prop = getPropertyOfType(c, memberIsStatic ? staticType : typeWithThis, memberSymbol.name);
472
+ if (prop === undefined)
473
+ return;
474
+ const baseType = memberIsStatic ? baseStaticType : baseWithThis;
475
+ const baseProp = getPropertyOfType(c, baseType, memberSymbol.name);
476
+ if (baseProp === undefined && memberHasOverrideModifier) {
477
+ const suggestion = getSpellingSuggestionForName(c, memberSymbol.name, getPropertiesOfType(c, baseType), 106500 /* SymbolFlags.ClassMember */);
478
+ if (suggestion !== undefined)
479
+ c.error(member, isJs
480
+ ? 1109 /* Diagnostics.This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base_class_0_Did_you_mean_1 */
481
+ : 1103 /* Diagnostics.This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you_mean_1 */, typeToString(c, baseWithThis), symbolToString(c, suggestion));
482
+ else
483
+ c.error(member, isJs
484
+ ? 1108 /* Diagnostics.This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base_class_0 */
485
+ : 1099 /* Diagnostics.This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0 */, typeToString(c, baseWithThis));
486
+ return;
487
+ }
488
+ if (baseProp === undefined ||
489
+ declarationCount(baseProp) === 0 ||
490
+ memberHasOverrideModifier ||
491
+ c.compilerOptions.noImplicitOverride !== true ||
492
+ (node.flags & 8388608 /* NodeFlags.Ambient */) !== 0)
493
+ return;
494
+ let baseHasAbstract = false;
495
+ for (const d of getDeclarations(baseProp)) {
496
+ if (hasSyntacticModifier(d, 64 /* ModifierFlags.Abstract */)) {
497
+ baseHasAbstract = true;
498
+ break;
499
+ }
500
+ }
501
+ if (!baseHasAbstract) {
502
+ let message;
503
+ if (member.kind === 170 /* SyntaxKind.Parameter */)
504
+ message = isJs
505
+ ? 1106 /* Diagnostics.This_parameter_property_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_class_0 */
506
+ : 1101 /* Diagnostics.This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0 */;
507
+ else
508
+ message = isJs
509
+ ? 1105 /* Diagnostics.This_member_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_class_0 */
510
+ : 1100 /* Diagnostics.This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0 */;
511
+ c.error(member, message, typeToString(c, baseWithThis));
512
+ return;
513
+ }
514
+ if (hasSyntacticModifier(member, 64 /* ModifierFlags.Abstract */))
515
+ c.error(member, 1102 /* Diagnostics.This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared_in_the_base_class_0 */, typeToString(c, baseWithThis));
516
+ }
517
+ // ---- Interfaces
518
+ /** Checks an interface's merged declarations, base interfaces and index signatures, once per symbol. */
519
+ export function checkInterfaceHeritage(c, node) {
520
+ const symbol = getSymbolOfDeclaration(c, node);
521
+ if (symbol === undefined)
522
+ return;
523
+ checkTypeParameterListsIdentical(c, symbol);
524
+ const links = c.symbolLinks(symbol);
525
+ if (!links.interfaceChecked) {
526
+ links.interfaceChecked = true;
527
+ const t = getDeclaredTypeOfSymbol(c, symbol);
528
+ if ((t.flags & 1048576 /* TypeFlags.Object */) !== 0) {
529
+ const typeWithThis = getTypeWithThisArgument(c, t, undefined, false);
530
+ // Later checks run only when inherited properties agree.
531
+ if (checkInheritedPropertiesAreIdentical(c, t, getName(node))) {
532
+ for (const baseType of getBaseTypes(c, t))
533
+ checkTypeAssignableTo(c, typeWithThis, getTypeWithThisArgument(c, baseType, t.thisType, false), getName(node), 598 /* Diagnostics.Interface_0_incorrectly_extends_interface_1 */);
534
+ checkIndexConstraints(c, t, symbol, false);
535
+ }
536
+ }
537
+ }
538
+ checkObjectTypeForDuplicateDeclarations(c, node, false);
539
+ for (const element of getExtendsHeritageClauseElements(node)) {
540
+ const expr = getExpression(element);
541
+ if (!isEntityNameExpression(expr) || isOptionalChain(expr))
542
+ c.error(expr, 659 /* Diagnostics.An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments */);
543
+ }
544
+ }
545
+ /** Checks a type literal's index signatures and members after its members are checked. */
546
+ export function checkTypeLiteralMembers(c, node) {
547
+ const t = getTypeFromTypeNode(c, node);
548
+ if (t.symbol !== undefined)
549
+ checkIndexConstraints(c, t, t.symbol, false);
550
+ checkTypeForDuplicateIndexSignatures(c, node);
551
+ checkObjectTypeForDuplicateDeclarations(c, node, false);
552
+ }
553
+ class InheritanceInfo {
554
+ prop;
555
+ containingType;
556
+ constructor(prop, containingType) {
557
+ this.prop = prop;
558
+ this.containingType = containingType;
559
+ }
560
+ }
561
+ function checkInheritedPropertiesAreIdentical(c, t, typeNode) {
562
+ const baseTypes = getBaseTypes(c, t);
563
+ if (baseTypes.length < 2)
564
+ return true;
565
+ const seen = new Map();
566
+ const declaredMembers = resolveDeclaredMembers(c, t).declaredMembers;
567
+ if (declaredMembers !== undefined)
568
+ for (const [id, p] of declaredMembers)
569
+ if (isNamedMember(c, p, id))
570
+ seen.set(p.name, new InheritanceInfo(p, t));
571
+ let identical = true;
572
+ for (const base of baseTypes) {
573
+ for (const prop of getPropertiesOfType(c, getTypeWithThisArgument(c, base, t.thisType, false))) {
574
+ const existing = seen.get(prop.name);
575
+ if (existing === undefined) {
576
+ seen.set(prop.name, new InheritanceInfo(prop, base));
577
+ continue;
578
+ }
579
+ if (existing.containingType !== t &&
580
+ compareProperties(c, existing.prop, prop, 0 /* ComparerKind.Identical */) === 0 /* Ternary.False */) {
581
+ identical = false;
582
+ const typeName1 = typeToString(c, existing.containingType);
583
+ const typeName2 = typeToString(c, base);
584
+ const errorInfo = createDiagnosticForNode(typeNode, 497 /* Diagnostics.Named_property_0_of_types_1_and_2_are_not_identical */, [symbolToString(c, prop), typeName1, typeName2]);
585
+ c.addDiagnostic(chainDiagnostic(errorInfo, 498 /* Diagnostics.Interface_0_cannot_simultaneously_extend_types_1_and_2 */, typeToString(c, t), typeName1, typeName2));
586
+ }
587
+ }
588
+ }
589
+ return identical;
590
+ }
591
+ // ---- Type parameters of merged declarations
592
+ /** Reports class and interface declarations of one symbol whose type parameters differ. */
593
+ export function checkTypeParameterListsIdentical(c, symbol) {
594
+ if (declarationCount(symbol) === 1)
595
+ return;
596
+ const links = c.symbolLinks(symbol);
597
+ if (links.typeParametersChecked)
598
+ return;
599
+ links.typeParametersChecked = true;
600
+ const declarations = [];
601
+ for (const d of getDeclarations(symbol))
602
+ if (d.kind === 264 /* SyntaxKind.ClassDeclaration */ || d.kind === 265 /* SyntaxKind.InterfaceDeclaration */)
603
+ declarations.push(d);
604
+ if (declarations.length <= 1)
605
+ return;
606
+ const t = getDeclaredTypeOfSymbol(c, symbol);
607
+ if ((t.flags & 1048576 /* TypeFlags.Object */) === 0)
608
+ return;
609
+ const lists = [];
610
+ for (const d of declarations) {
611
+ const list = getTypeParameters(d);
612
+ lists.push(list !== undefined ? list.nodes : []);
613
+ }
614
+ if (areTypeParametersIdentical(c, lists, t.localTypeParameters()))
615
+ return;
616
+ const name = symbolToString(c, symbol);
617
+ for (const d of declarations)
618
+ c.error(getName(d), 597 /* Diagnostics.All_declarations_of_0_must_have_identical_type_parameters */, name);
619
+ }
620
+ /** Reports the declarations of an `infer` type parameter declared more than once with different constraints. */
621
+ export function checkInferTypeParameterDeclarations(c, symbol) {
622
+ if (declarationCount(symbol) <= 1)
623
+ return;
624
+ const links = c.symbolLinks(symbol);
625
+ if (links.typeParametersChecked)
626
+ return;
627
+ links.typeParametersChecked = true;
628
+ const declarations = [];
629
+ const typeParameterLists = [];
630
+ for (const d of getDeclarations(symbol)) {
631
+ if (d.kind === 169 /* SyntaxKind.TypeParameter */) {
632
+ declarations.push(d);
633
+ typeParameterLists.push([d]);
634
+ }
635
+ }
636
+ if (areTypeParametersIdentical(c, typeParameterLists, [getDeclaredTypeOfTypeParameter(c, symbol)]))
637
+ return;
638
+ const name = symbolToString(c, symbol);
639
+ for (const d of declarations)
640
+ c.error(getName(d), 960 /* Diagnostics.All_declarations_of_0_must_have_identical_constraints */, name);
641
+ }
642
+ function areTypeParametersIdentical(c, lists, targetParameters) {
643
+ const maxTypeArgumentCount = targetParameters.length;
644
+ const minTypeArgumentCount = getMinTypeArgumentCount(c, targetParameters);
645
+ for (const sourceParameters of lists) {
646
+ if (sourceParameters.length < minTypeArgumentCount || sourceParameters.length > maxTypeArgumentCount)
647
+ return false;
648
+ for (let i = 0; i < sourceParameters.length; i++) {
649
+ const source = sourceParameters[i];
650
+ const target = targetParameters[i];
651
+ if (getText(source.name) !== target.symbol.name)
652
+ return false;
653
+ // A later declaration without a constraint may merge with a constrained one.
654
+ const targetConstraint = getConstraintOfTypeParameter(c, target);
655
+ if (source.constraint !== undefined &&
656
+ targetConstraint !== undefined &&
657
+ !isTypeIdenticalTo(c, getTypeFromTypeNode(c, source.constraint), targetConstraint))
658
+ return false;
659
+ const targetDefault = getDefaultFromTypeParameter(c, target);
660
+ if (source.defaultType !== undefined &&
661
+ targetDefault !== undefined &&
662
+ !isTypeIdenticalTo(c, getTypeFromTypeNode(c, source.defaultType), targetDefault))
663
+ return false;
664
+ }
665
+ }
666
+ return true;
667
+ }
668
+ /**
669
+ * Reports properties declared twice, properties combined with accessors, `static prototype`, and
670
+ * (with `checkPrivateNames`) private names shared by static and instance members.
671
+ */
672
+ export function checkObjectTypeForDuplicateDeclarations(c, node, checkPrivateNames) {
673
+ const instanceNames = new Map();
674
+ const staticNames = new Map();
675
+ const privateNames = new Map();
676
+ const nodeInAmbientContext = (node.flags & 8388608 /* NodeFlags.Ambient */) !== 0;
677
+ for (const member of getMembers(node).nodes) {
678
+ if (member.kind === 177 /* SyntaxKind.Constructor */) {
679
+ for (const param of getParameters(member).nodes)
680
+ if (isParameterPropertyDeclaration(param, member) && !isBindingPattern(getName(param))) {
681
+ const symbol = getSymbolOfDeclaration(c, param);
682
+ if (symbol !== undefined)
683
+ checkPropertyOrAccessor(c, node, instanceNames, symbol, 1 /* MemberKind.Property */, false);
684
+ }
685
+ continue;
686
+ }
687
+ const symbol = getSymbolOfDeclaration(c, member);
688
+ if (symbol === undefined)
689
+ continue;
690
+ const memberIsStatic = hasStaticModifier(member);
691
+ if (!nodeInAmbientContext && memberIsStatic && symbol.name === 'prototype')
692
+ c.error(getName(member), 831 /* Diagnostics.Static_property_0_conflicts_with_built_in_property_Function_0_of_constructor_function_1 */, symbol.name, symbolToString(c, getSymbolOfDeclaration(c, node)));
693
+ const names = memberIsStatic ? staticNames : instanceNames;
694
+ const hasAccessorModifier = hasSyntacticModifier(member, 512 /* ModifierFlags.Accessor */);
695
+ if ((member.kind === 173 /* SyntaxKind.PropertyDeclaration */ && !hasAccessorModifier) ||
696
+ member.kind === 172 /* SyntaxKind.PropertySignature */)
697
+ checkPropertyOrAccessor(c, node, names, symbol, 1 /* MemberKind.Property */, memberIsStatic);
698
+ else if (member.kind === 178 /* SyntaxKind.GetAccessor */ ||
699
+ member.kind === 179 /* SyntaxKind.SetAccessor */ ||
700
+ (member.kind === 173 /* SyntaxKind.PropertyDeclaration */ && hasAccessorModifier))
701
+ checkPropertyOrAccessor(c, node, names, symbol, 2 /* MemberKind.Accessor */, memberIsStatic);
702
+ const name = getName(member);
703
+ if (checkPrivateNames && name !== undefined && name.kind === 80 /* SyntaxKind.PrivateIdentifier */) {
704
+ let flags = privateNames.get(symbol.name) ?? 0;
705
+ if (flags === 3)
706
+ continue;
707
+ flags |= isStatic(member) ? 2 : 1;
708
+ privateNames.set(symbol.name, flags);
709
+ if (flags === 3)
710
+ reportDuplicateMemberErrors(c, node, symbol.name, false, false, 936 /* Diagnostics.Duplicate_identifier_0_Static_and_instance_elements_cannot_share_the_same_private_name */);
711
+ }
712
+ }
713
+ }
714
+ function checkPropertyOrAccessor(c, node, names, symbol, kind, isStaticMember) {
715
+ if (declarationCount(symbol) <= 1)
716
+ return;
717
+ const state = names.get(symbol.name) ?? 0 /* MemberKind.None */;
718
+ if (state === 0 /* MemberKind.None */)
719
+ names.set(symbol.name, kind);
720
+ // A second property, or a property combined with an accessor.
721
+ else if (state === 1 /* MemberKind.Property */ || (state === 2 /* MemberKind.Accessor */ && kind !== 2 /* MemberKind.Accessor */)) {
722
+ reportDuplicateMemberErrors(c, node, symbol.name, true, isStaticMember, 478 /* Diagnostics.Duplicate_identifier_0 */);
723
+ names.set(symbol.name, 3 /* MemberKind.Reported */);
724
+ }
725
+ }
726
+ function reportDuplicateMemberErrors(c, node, name, checkStatic, isStaticMember, message) {
727
+ for (const member of getMembers(node).nodes) {
728
+ if (member.kind === 177 /* SyntaxKind.Constructor */) {
729
+ for (const param of getParameters(member).nodes) {
730
+ if (!isParameterPropertyDeclaration(param, member) || isBindingPattern(getName(param)))
731
+ continue;
732
+ const symbol = getSymbolOfDeclaration(c, param);
733
+ if (symbol !== undefined && symbol.name === name)
734
+ c.error(getName(param), message, symbolToString(c, symbol));
735
+ }
736
+ continue;
737
+ }
738
+ const symbol = getSymbolOfDeclaration(c, member);
739
+ if (symbol !== undefined && symbol.name === name && (!checkStatic || isStaticMember === isStatic(member)))
740
+ c.error(getName(member), message, symbolToString(c, symbol));
741
+ }
742
+ }
743
+ // ---- Index signatures
744
+ /** Checks properties and index signatures of `t` against its applicable index signatures. */
745
+ export function checkIndexConstraints(c, t, symbol, isStaticIndex) {
746
+ const indexInfos = getIndexInfosOfType(c, t);
747
+ if (indexInfos.length === 0)
748
+ return;
749
+ for (const prop of getPropertiesOfObjectType(c, t)) {
750
+ if (isStaticIndex && (prop.flags & 4194304 /* SymbolFlags.Prototype */) !== 0)
751
+ continue;
752
+ checkIndexConstraintForProperty(c, t, prop, getLiteralTypeFromProperty(c, prop, 19456 /* TypeFlags.StringOrNumberLiteralOrUnique */, true), getNonMissingTypeOfSymbol(c, prop));
753
+ }
754
+ const typeDeclaration = symbol.valueDeclaration;
755
+ if (typeDeclaration !== undefined && isClassLike(typeDeclaration)) {
756
+ // Members with dynamic names aren't properties of the type.
757
+ for (const member of getMembers(typeDeclaration).nodes) {
758
+ if (isStatic(member) !== isStaticIndex || !hasDynamicName(member) || hasLateBindableName(c, member))
759
+ continue;
760
+ const memberSymbol = getSymbolOfDeclaration(c, member);
761
+ if (memberSymbol === undefined)
762
+ continue;
763
+ checkIndexConstraintForProperty(c, t, memberSymbol, getTypeOfExpression(c, getExpression(getName(member))), getNonMissingTypeOfSymbol(c, memberSymbol));
764
+ }
765
+ }
766
+ if (indexInfos.length > 1)
767
+ for (const info of indexInfos)
768
+ checkIndexConstraintForIndexSignature(c, t, info);
769
+ }
770
+ function getApplicableIndexInfos(c, t, keyType) {
771
+ const result = [];
772
+ for (const info of getIndexInfosOfType(c, t))
773
+ if (isApplicableIndexType(c, keyType, info.keyType))
774
+ result.push(info);
775
+ return result;
776
+ }
777
+ function getLocalIndexDeclaration(c, t, info) {
778
+ const declaration = info.declaration;
779
+ if (declaration === undefined)
780
+ return undefined;
781
+ const symbol = getSymbolOfDeclaration(c, declaration);
782
+ return symbol !== undefined && getParentOfSymbol(c, symbol) === t.symbol ? declaration : undefined;
783
+ }
784
+ function checkIndexConstraintForProperty(c, t, prop, propNameType, propType) {
785
+ const declaration = prop.valueDeclaration;
786
+ const name = getNameOfDeclaration(declaration);
787
+ if (name !== undefined && name.kind === 80 /* SyntaxKind.PrivateIdentifier */)
788
+ return;
789
+ const indexInfos = getApplicableIndexInfos(c, t, propNameType);
790
+ if (indexInfos.length === 0)
791
+ return;
792
+ const interfaceDeclaration = (t.objectFlags & 2 /* ObjectFlags.Interface */) !== 0
793
+ ? getDeclarationOfKind(t.symbol, 265 /* SyntaxKind.InterfaceDeclaration */)
794
+ : undefined;
795
+ const propDeclaration = (declaration !== undefined && declaration.kind === 227 /* SyntaxKind.BinaryExpression */) ||
796
+ (name !== undefined && name.kind === 168 /* SyntaxKind.ComputedPropertyName */)
797
+ ? declaration
798
+ : undefined;
799
+ const localPropDeclaration = getParentOfSymbol(c, prop) === t.symbol ? declaration : undefined;
800
+ for (const info of indexInfos) {
801
+ // Only check a property or index signature declared here, or, in an interface, ones inherited
802
+ // from different bases.
803
+ let errorNode = localPropDeclaration ?? getLocalIndexDeclaration(c, t, info);
804
+ if (errorNode === undefined &&
805
+ interfaceDeclaration !== undefined &&
806
+ !someBaseHasPropertyAndIndexType(c, t, prop.name, info.keyType))
807
+ errorNode = interfaceDeclaration;
808
+ if (errorNode === undefined || isTypeAssignableTo(c, propType, info.valueType))
809
+ continue;
810
+ const diagnostic = createDiagnosticForNode(errorNode, 582 /* Diagnostics.Property_0_of_type_1_is_not_assignable_to_2_index_type_3 */, [
811
+ symbolToString(c, prop),
812
+ typeToString(c, propType),
813
+ typeToString(c, info.keyType),
814
+ typeToString(c, info.valueType),
815
+ ]);
816
+ if (propDeclaration !== undefined && errorNode !== propDeclaration)
817
+ diagnostic.addRelatedInfo(createDiagnosticForNode(propDeclaration, 860 /* Diagnostics.X_0_is_declared_here */, [symbolToString(c, prop)]));
818
+ c.addDiagnostic(diagnostic);
819
+ }
820
+ }
821
+ function someBaseHasPropertyAndIndexType(c, t, name, keyType) {
822
+ for (const base of getBaseTypes(c, t))
823
+ if (getPropertyOfObjectType(c, base, name) !== undefined && getIndexTypeOfType(c, base, keyType) !== undefined)
824
+ return true;
825
+ return false;
826
+ }
827
+ function someBaseHasIndexTypes(c, t, checkKeyType, keyType) {
828
+ for (const base of getBaseTypes(c, t))
829
+ if (getIndexInfoOfType(c, base, checkKeyType) !== undefined && getIndexTypeOfType(c, base, keyType) !== undefined)
830
+ return true;
831
+ return false;
832
+ }
833
+ function checkIndexConstraintForIndexSignature(c, t, checkInfo) {
834
+ const indexInfos = getApplicableIndexInfos(c, t, checkInfo.keyType);
835
+ if (indexInfos.length === 0)
836
+ return;
837
+ const interfaceDeclaration = (t.objectFlags & 2 /* ObjectFlags.Interface */) !== 0
838
+ ? getDeclarationOfKind(t.symbol, 265 /* SyntaxKind.InterfaceDeclaration */)
839
+ : undefined;
840
+ const localCheckDeclaration = getLocalIndexDeclaration(c, t, checkInfo);
841
+ for (const info of indexInfos) {
842
+ if (info === checkInfo)
843
+ continue;
844
+ let errorNode = localCheckDeclaration ?? getLocalIndexDeclaration(c, t, info);
845
+ if (errorNode === undefined &&
846
+ interfaceDeclaration !== undefined &&
847
+ !someBaseHasIndexTypes(c, t, checkInfo.keyType, info.keyType))
848
+ errorNode = interfaceDeclaration;
849
+ if (errorNode !== undefined && !isTypeAssignableTo(c, checkInfo.valueType, info.valueType))
850
+ c.error(errorNode, 584 /* Diagnostics.X_0_index_type_1_is_not_assignable_to_2_index_type_3 */, typeToString(c, checkInfo.keyType), typeToString(c, checkInfo.valueType), typeToString(c, info.keyType), typeToString(c, info.valueType));
851
+ }
852
+ }
853
+ /** Reports duplicate index signatures of a class or interface, once per symbol. */
854
+ export function checkClassOrInterfaceForDuplicateIndexSignatures(c, node) {
855
+ const symbol = getSymbolOfDeclaration(c, node);
856
+ if (symbol === undefined)
857
+ return;
858
+ const links = c.symbolLinks(symbol);
859
+ if (links.indexSignaturesChecked)
860
+ return;
861
+ links.indexSignaturesChecked = true;
862
+ checkTypeForDuplicateIndexSignatures(c, node);
863
+ }
864
+ function checkTypeForDuplicateIndexSignatures(c, node) {
865
+ const symbol = getSymbolOfDeclaration(c, node);
866
+ if (symbol === undefined)
867
+ return;
868
+ const indexSymbol = getIndexSymbol(c, symbol);
869
+ if (indexSymbol === undefined || declarationCount(indexSymbol) <= 1)
870
+ return;
871
+ // Late-bound index signatures may duplicate each other and explicit ones.
872
+ const keyTypes = [];
873
+ const declarationsByKey = [];
874
+ for (const declaration of getDeclarations(indexSymbol)) {
875
+ if (declaration.kind !== 182 /* SyntaxKind.IndexSignature */)
876
+ continue;
877
+ const parameters = getParameters(declaration).nodes;
878
+ if (parameters.length !== 1)
879
+ continue;
880
+ const typeNode = getType(parameters[0]);
881
+ if (typeNode === undefined)
882
+ continue;
883
+ const keyType = getTypeFromTypeNode(c, typeNode);
884
+ const distributed = (keyType.flags & 134217728 /* TypeFlags.Union */) !== 0 ? typesOf(keyType) : [keyType];
885
+ for (const k of distributed) {
886
+ let index = keyTypes.indexOf(k);
887
+ if (index < 0) {
888
+ index = keyTypes.length;
889
+ keyTypes.push(k);
890
+ declarationsByKey.push([]);
891
+ }
892
+ declarationsByKey[index].push(declaration);
893
+ }
894
+ }
895
+ for (let i = 0; i < keyTypes.length; i++) {
896
+ if (declarationsByKey[i].length <= 1)
897
+ continue;
898
+ for (const declaration of declarationsByKey[i])
899
+ c.error(declaration, 548 /* Diagnostics.Duplicate_index_signature_for_type_0 */, typeToString(c, keyTypes[i]));
900
+ }
901
+ }