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,1433 @@
1
+ // JSX: element and fragment types, the `JSX` namespace, intrinsic elements, attributes and children.
2
+ import { checkDeprecatedJsxAttribute, checkDeprecatedSignature } from './checker-deprecation.js';
3
+ import { getSymbol, getTagName, getText, getTypeArguments, getExpression, Identifier, PropertySignatureDeclaration, } from './ast.js';
4
+ import { getSourceFileOfNode, getSourceTextOfNode } from './binder-utilities.js';
5
+ import { Diagnostic, chainDiagnostic } from './diagnostics.js';
6
+ import { JsxEmit } from './options.js';
7
+ import { parseIsolatedEntityName } from './parser.js';
8
+ import { skipTrivia } from './scanner.js';
9
+ import { createDiagnosticForNode } from './checker.js';
10
+ import { newTypeMapper, } from './checker-types.js';
11
+ import { createAnonymousType, createArrayType, createTupleType, createTypeReference, getIntersectionType, getPropagatingFlagsOfTypes, getStringLiteralType, getUnionType, intersectTypes, isErrorType, everyType, isArrayType, mapTypeEx, someType, typesOf, } from './checker-type-factory.js';
12
+ import { getApparentType, getApplicableIndexInfo, getApplicableIndexInfoForName, getIndexTypeOfType, getPropertiesOfType, getPropertyOfType, getSignaturesOfType, getTypeOfPropertyOfType, getUnionSignatures, isArrayLikeType, } from './checker-members.js';
13
+ import { getMergedSymbol, getExportsOfSymbol, getFirstIdentifier, getGlobalSymbol, getSymbolOfMeaning, resolveAlias, resolveEntityName, getSpellingSuggestionForName, resolveName, resolveSymbol, } from './checker-symbols.js';
14
+ import { resolveExternalModule } from './checker-modules.js';
15
+ import { fillMissingTypeArguments, getDeclaredTypeOfSymbol, getLocalTypeParametersOfClassOrInterfaceOrTypeAlias, getMinTypeArgumentCount, } from './checker-declared-types.js';
16
+ import { getTypeAliasInstantiation } from './checker-type-nodes.js';
17
+ import { getTypeOfSymbol } from './checker-symbol-types.js';
18
+ import { getMinArgumentCount, getOrCreateTypeFromSignature, getParameterCount, getReturnTypeOfSignature, getTypeAtPosition, hasEffectiveRestParameter, } from './checker-signatures.js';
19
+ import { instantiateType } from './instantiation.js';
20
+ import { checkTypeRelatedTo, getRegularTypeOfObjectLiteral, isExactOptionalPropertyMismatch, isTypeRelatedTo, } from './relations.js';
21
+ import { checkExpression, checkExpressionCached, checkExpressionEx, checkExpressionForMutableLocationEx, } from './checker-expressions.js';
22
+ import { checkExpressionWithContextualType, findContextualNode, getApparentTypeOfContextualType, getApparentTypeOfContextualTypeEx, getContextualType, getContextualTypeEx, getTypeOfPropertyOfContextualType, getInferenceContext, } from './checker-contextual.js';
23
+ import { checkNodeDeferred, checkSourceElement } from './checker-source-file.js';
24
+ import { getResolvedSignature, resolveCall } from './checker-calls.js';
25
+ import { addIntraExpressionInferenceSite, getInferredTypes, inferTypes, } from './checker-inference.js';
26
+ import { isContextSensitive } from './checker-functions.js';
27
+ import { checkSpreadPropOverrides, getSpreadType } from './checker-object-literals.js';
28
+ import { isValidSpreadType } from './checker-destructuring.js';
29
+ import { checkExpressionForMutableLocationWithContextualType, checkTypeRelatedToAndOptionallyElaborate, elaborateElement, elaborateError, getBestMatchIndexedAccessTypeOrUndefined, } from './checker-elaboration.js';
30
+ import { getGlobalIterableType, getIterationTypeOfIterable, } from './checker-iteration.js';
31
+ import { getIndexedAccessTypeOrUndefined, getPropertyNameFromIndex } from './checker-type-operators.js';
32
+ import { removeMissingType } from './checker-symbol-types.js';
33
+ import { typeToString } from './type-printer.js';
34
+ import { getReducedType } from './checker-members.js';
35
+ import { getNumberLiteralType } from './checker-type-factory.js';
36
+ import { getIndexedAccessType } from './checker-type-operators.js';
37
+ import { filterType, isTupleType } from './checker-type-factory.js';
38
+ import { createTypeFromGenericGlobalType } from './checker-type-factory.js';
39
+ import { isTypeAssignableTo } from './relations.js';
40
+ import { copyDeclarations, declarationCount, getSymbolId, } from './symbol.js';
41
+ // Names in the `JSX` namespace.
42
+ const jsxNamespaceName = 'JSX';
43
+ const jsxIntrinsicElementsName = 'IntrinsicElements';
44
+ const jsxElementClassName = 'ElementClass';
45
+ const jsxElementAttributesPropertyName = 'ElementAttributesProperty';
46
+ const jsxElementChildrenAttributeName = 'ElementChildrenAttribute';
47
+ const jsxElementName = 'Element';
48
+ const jsxElementTypeName = 'ElementType';
49
+ const jsxIntrinsicAttributesName = 'IntrinsicAttributes';
50
+ const jsxIntrinsicClassAttributesName = 'IntrinsicClassAttributes';
51
+ const jsxLibraryManagedAttributesName = 'LibraryManagedAttributes';
52
+ /** Per-element JSX state. */
53
+ class JsxElementLinks {
54
+ jsxFlags = 0 /* JsxFlags.None */;
55
+ resolvedJsxElementAttributesType = undefined;
56
+ resolvedSymbol = undefined;
57
+ /** The resolved `JSX` namespace; `unknownSymbol` when the local lookup failed. */
58
+ jsxNamespace = undefined;
59
+ }
60
+ /** Per-file JSX state: pragmas, factories and the implicit runtime import. */
61
+ class JsxFileLinks {
62
+ localJsxNamespace = '';
63
+ localJsxFactory = undefined;
64
+ localJsxFragmentNamespace = '';
65
+ localJsxFragmentFactory = undefined;
66
+ jsxFragmentType = undefined;
67
+ /** `unknownSymbol` when there is no implicit import container. */
68
+ jsxImplicitImportContainer = undefined;
69
+ }
70
+ /** The checker's JSX caches. */
71
+ export class JsxState {
72
+ elementLinks = new Map();
73
+ fileLinks = new Map();
74
+ /** getJsxIntrinsicConstructorType by attributes and element type ids. */
75
+ intrinsicConstructorTypes = new Map();
76
+ jsxNamespace = '';
77
+ jsxFactoryEntity = undefined;
78
+ }
79
+ function elementLinks(c, node) {
80
+ let links = c.jsx.elementLinks.get(node);
81
+ if (links === undefined) {
82
+ links = new JsxElementLinks();
83
+ c.jsx.elementLinks.set(node, links);
84
+ }
85
+ return links;
86
+ }
87
+ function fileLinks(c, file) {
88
+ let links = c.jsx.fileLinks.get(file);
89
+ if (links === undefined) {
90
+ links = new JsxFileLinks();
91
+ c.jsx.fileLinks.set(file, links);
92
+ }
93
+ return links;
94
+ }
95
+ // ---- Syntax helpers
96
+ export function isJsxOpeningLikeElement(node) {
97
+ return node.kind === 287 /* SyntaxKind.JsxOpeningElement */ || node.kind === 286 /* SyntaxKind.JsxSelfClosingElement */;
98
+ }
99
+ function isIntrinsicJsxName(name) {
100
+ if (name.length === 0)
101
+ return false;
102
+ const ch = name.charCodeAt(0);
103
+ return (ch >= 0x61 && ch <= 0x7a) || name.includes('-');
104
+ }
105
+ /** Whether a tag name refers to an intrinsic element: a lowercase or dashed identifier, or `ns:name`. */
106
+ export function isJsxIntrinsicTagName(tagName) {
107
+ return ((tagName.kind === 79 /* SyntaxKind.Identifier */ && isIntrinsicJsxName(getText(tagName))) ||
108
+ tagName.kind === 296 /* SyntaxKind.JsxNamespacedName */);
109
+ }
110
+ /** The text of an identifier or `ns:name`. */
111
+ function jsxNameText(node) {
112
+ if (node.kind === 296 /* SyntaxKind.JsxNamespacedName */) {
113
+ const name = node;
114
+ return name.namespace.text + ':' + name.name.text;
115
+ }
116
+ return getText(node);
117
+ }
118
+ function getTextOfNode(node) {
119
+ return getSourceTextOfNode(getSourceFileOfNode(node), node);
120
+ }
121
+ function entityNameToString(node) {
122
+ switch (node.kind) {
123
+ case 109 /* SyntaxKind.ThisKeyword */:
124
+ return 'this';
125
+ case 212 /* SyntaxKind.PropertyAccessExpression */: {
126
+ const access = node;
127
+ return entityNameToString(access.expression) + '.' + entityNameToString(access.name);
128
+ }
129
+ case 167 /* SyntaxKind.QualifiedName */:
130
+ return entityNameToString(node.left) + '.' + node.right.text;
131
+ case 296 /* SyntaxKind.JsxNamespacedName */:
132
+ return jsxNameText(node);
133
+ }
134
+ return getText(node);
135
+ }
136
+ export function getTagNameOf(node) {
137
+ return getTagName(node);
138
+ }
139
+ export function getAttributesOf(node) {
140
+ return node.kind === 286 /* SyntaxKind.JsxSelfClosingElement */
141
+ ? node.attributes
142
+ : node.attributes;
143
+ }
144
+ function getTypeArgumentListOf(node) {
145
+ return getTypeArguments(node);
146
+ }
147
+ function getChildrenOf(node) {
148
+ if (node.kind === 285 /* SyntaxKind.JsxElement */)
149
+ return node.children.nodes;
150
+ if (node.kind === 289 /* SyntaxKind.JsxFragment */)
151
+ return node.children.nodes;
152
+ return [];
153
+ }
154
+ /** Children that produce values: non-empty expressions, non-whitespace text and elements. */
155
+ export function getSemanticJsxChildren(children) {
156
+ const result = [];
157
+ for (const child of children) {
158
+ if (child.kind === 295 /* SyntaxKind.JsxExpression */) {
159
+ if (child.expression !== undefined)
160
+ result.push(child);
161
+ }
162
+ else if (child.kind === 11 /* SyntaxKind.JsxText */) {
163
+ if (!child.containsOnlyTriviaWhiteSpaces)
164
+ result.push(child);
165
+ }
166
+ else
167
+ result.push(child);
168
+ }
169
+ return result;
170
+ }
171
+ function isHyphenatedJsxName(name) {
172
+ return name.includes('-');
173
+ }
174
+ function getPragma(file, name, argument) {
175
+ let result = undefined;
176
+ // The last pragma wins.
177
+ for (const pragma of file.pragmas)
178
+ if (pragma.name === name)
179
+ result = pragma.args.get(argument)?.value ?? '';
180
+ return result;
181
+ }
182
+ function isJsxTransformEnabled(c) {
183
+ const jsx = c.compilerOptions.jsx;
184
+ return jsx === JsxEmit.React || jsx === JsxEmit.ReactJSX || jsx === JsxEmit.ReactJSXDev;
185
+ }
186
+ function grammarErrorOnNode(c, node, message, ...args) {
187
+ if (getSourceFileOfNode(node).diagnostics.length !== 0)
188
+ return false;
189
+ c.error(node, message, ...args);
190
+ return true;
191
+ }
192
+ function grammarErrorAtPos(c, node, pos, length, message) {
193
+ const file = getSourceFileOfNode(node);
194
+ if (file.diagnostics.length !== 0)
195
+ return false;
196
+ c.addDiagnostic(new Diagnostic(file.diagnosticFile(), pos, pos + length, message, []));
197
+ return true;
198
+ }
199
+ // ---- The JSX namespace
200
+ /** The name of the factory namespace in scope at `location`, such as `React`. */
201
+ export function getJsxNamespace(c, location) {
202
+ if (location !== undefined) {
203
+ const file = getSourceFileOfNode(location);
204
+ const links = fileLinks(c, file);
205
+ if (location.kind === 290 /* SyntaxKind.JsxOpeningFragment */) {
206
+ if (links.localJsxFragmentNamespace !== '')
207
+ return links.localJsxFragmentNamespace;
208
+ const fragmentPragma = getPragma(file, 'jsxfrag', 'factory');
209
+ if (fragmentPragma !== undefined) {
210
+ links.localJsxFragmentFactory = parseIsolatedEntityName(fragmentPragma);
211
+ if (links.localJsxFragmentFactory !== undefined) {
212
+ links.localJsxFragmentNamespace = getText(getFirstIdentifier(links.localJsxFragmentFactory));
213
+ return links.localJsxFragmentNamespace;
214
+ }
215
+ }
216
+ const entity = getJsxFragmentFactoryEntity(c, location);
217
+ if (entity !== undefined) {
218
+ links.localJsxFragmentFactory = entity;
219
+ links.localJsxFragmentNamespace = getText(getFirstIdentifier(entity));
220
+ return links.localJsxFragmentNamespace;
221
+ }
222
+ }
223
+ else {
224
+ const local = getLocalJsxNamespace(c, file);
225
+ if (local !== '') {
226
+ links.localJsxNamespace = local;
227
+ return local;
228
+ }
229
+ }
230
+ }
231
+ const state = c.jsx;
232
+ if (state.jsxNamespace === '') {
233
+ state.jsxNamespace = 'React';
234
+ const factory = c.compilerOptions.jsxFactory;
235
+ if (factory !== undefined && factory !== '') {
236
+ state.jsxFactoryEntity = parseIsolatedEntityName(factory);
237
+ if (state.jsxFactoryEntity !== undefined)
238
+ state.jsxNamespace = getText(getFirstIdentifier(state.jsxFactoryEntity));
239
+ }
240
+ else {
241
+ const reactNamespace = c.compilerOptions.reactNamespace;
242
+ if (reactNamespace !== undefined && reactNamespace !== '')
243
+ state.jsxNamespace = reactNamespace;
244
+ }
245
+ }
246
+ if (state.jsxFactoryEntity === undefined)
247
+ state.jsxFactoryEntity = parseIsolatedEntityName(state.jsxNamespace + '.createElement');
248
+ return state.jsxNamespace;
249
+ }
250
+ function getLocalJsxNamespace(c, file) {
251
+ const links = fileLinks(c, file);
252
+ if (links.localJsxNamespace !== '')
253
+ return links.localJsxNamespace;
254
+ const pragma = getPragma(file, 'jsx', 'factory');
255
+ if (pragma !== undefined) {
256
+ links.localJsxFactory = parseIsolatedEntityName(pragma);
257
+ if (links.localJsxFactory !== undefined) {
258
+ links.localJsxNamespace = getText(getFirstIdentifier(links.localJsxFactory));
259
+ return links.localJsxNamespace;
260
+ }
261
+ }
262
+ return '';
263
+ }
264
+ function getJsxFactoryEntity(c, location) {
265
+ getJsxNamespace(c, location);
266
+ const local = fileLinks(c, getSourceFileOfNode(location)).localJsxFactory;
267
+ return local ?? c.jsx.jsxFactoryEntity;
268
+ }
269
+ function getJsxFragmentFactoryEntity(c, location) {
270
+ const file = getSourceFileOfNode(location);
271
+ const links = fileLinks(c, file);
272
+ if (links.localJsxFragmentFactory !== undefined)
273
+ return links.localJsxFragmentFactory;
274
+ const pragma = getPragma(file, 'jsxfrag', 'factory');
275
+ if (pragma !== undefined) {
276
+ links.localJsxFragmentFactory = parseIsolatedEntityName(pragma);
277
+ return links.localJsxFragmentFactory;
278
+ }
279
+ const factory = c.compilerOptions.jsxFragmentFactory;
280
+ if (factory !== undefined && factory !== '')
281
+ return parseIsolatedEntityName(factory);
282
+ return undefined;
283
+ }
284
+ /** The module of the automatic runtime's implicit import, such as `react/jsx-runtime`. */
285
+ export function getJsxNamespaceContainerForImplicitImport(c, location) {
286
+ const file = getSourceFileOfNode(location);
287
+ const links = fileLinks(c, file);
288
+ const cached = links.jsxImplicitImportContainer;
289
+ if (cached !== undefined)
290
+ return cached === c.unknownSymbol ? undefined : cached;
291
+ const specifier = c.host.getJSXRuntimeImportSpecifier(file);
292
+ if (specifier === undefined) {
293
+ links.jsxImplicitImportContainer = c.unknownSymbol;
294
+ return undefined;
295
+ }
296
+ const mod = resolveExternalModule(c, specifier, getText(specifier), 995 /* Diagnostics.This_JSX_tag_requires_the_module_path_0_to_exist_but_none_could_be_found_Make_sure_you_have_types_for_the_appropriate_package_installed */, location, false);
297
+ const resolved = mod !== undefined && mod !== c.unknownSymbol ? resolveSymbol(c, mod) : undefined;
298
+ const result = resolved !== undefined ? getMergedSymbol(c, resolved) : undefined;
299
+ links.jsxImplicitImportContainer = result ?? c.unknownSymbol;
300
+ return result;
301
+ }
302
+ /** The `JSX` namespace for `location`: the factory's, the runtime module's, or the global one. */
303
+ export function getJsxNamespaceAt(c, location) {
304
+ const links = elementLinks(c, location);
305
+ if (links.jsxNamespace !== undefined && links.jsxNamespace !== c.unknownSymbol)
306
+ return links.jsxNamespace;
307
+ if (links.jsxNamespace !== c.unknownSymbol) {
308
+ let resolvedNamespace = getJsxNamespaceContainerForImplicitImport(c, location);
309
+ if (resolvedNamespace === undefined || resolvedNamespace === c.unknownSymbol) {
310
+ const namespaceName = getJsxNamespace(c, location);
311
+ resolvedNamespace = resolveName(c, location, namespaceName, 1920 /* SymbolFlags.Namespace */, undefined, false, false);
312
+ }
313
+ if (resolvedNamespace !== undefined) {
314
+ const container = resolveSymbol(c, resolvedNamespace);
315
+ const candidate = resolveSymbol(c, getSymbolOfMeaning(c, getExportsOfSymbol(c, container), jsxNamespaceName, 1920 /* SymbolFlags.Namespace */));
316
+ if (candidate !== undefined && candidate !== c.unknownSymbol) {
317
+ links.jsxNamespace = candidate;
318
+ return candidate;
319
+ }
320
+ }
321
+ links.jsxNamespace = c.unknownSymbol;
322
+ }
323
+ const global = resolveSymbol(c, getGlobalSymbol(c, jsxNamespaceName, 1920 /* SymbolFlags.Namespace */, undefined));
324
+ return global === c.unknownSymbol ? undefined : global;
325
+ }
326
+ export function getJsxType(c, name, location) {
327
+ const namespace = getJsxNamespaceAt(c, location);
328
+ if (namespace !== undefined) {
329
+ const typeSymbol = getSymbolOfMeaning(c, getExportsOfSymbol(c, namespace), name, 788968 /* SymbolFlags.Type */);
330
+ if (typeSymbol !== undefined)
331
+ return getDeclaredTypeOfSymbol(c, typeSymbol);
332
+ }
333
+ return c.errorType;
334
+ }
335
+ /** `JSX.Element`, or the error type when it doesn't exist. */
336
+ export function getJsxElementTypeAt(c, location) {
337
+ return getJsxType(c, jsxElementName, location);
338
+ }
339
+ function getJsxStatelessElementTypeAt(c, location) {
340
+ return getUnionType(c, [getJsxElementTypeAt(c, location), c.nullType]);
341
+ }
342
+ function getJsxElementClassTypeAt(c, location) {
343
+ const t = getJsxType(c, jsxElementClassName, location);
344
+ return isErrorType(c, t) ? undefined : t;
345
+ }
346
+ function getJsxElementTypeTypeAt(c, location) {
347
+ const ns = getJsxNamespaceAt(c, location);
348
+ if (ns === undefined)
349
+ return undefined;
350
+ const sym = getSymbolOfMeaning(c, getExportsOfSymbol(c, ns), jsxElementTypeName, 788968 /* SymbolFlags.Type */);
351
+ if (sym === undefined)
352
+ return undefined;
353
+ const t = instantiateAliasOrInterfaceWithDefaults(c, sym, []);
354
+ return t === undefined || isErrorType(c, t) ? undefined : t;
355
+ }
356
+ function instantiateAliasOrInterfaceWithDefaults(c, managedSym, typeArguments) {
357
+ const declaredManagedType = getDeclaredTypeOfSymbol(c, managedSym);
358
+ if ((managedSym.flags & 524288 /* SymbolFlags.TypeAlias */) !== 0) {
359
+ const params = c.symbolLinks(managedSym).typeParameters ?? [];
360
+ if (params.length >= typeArguments.length) {
361
+ const args = fillMissingTypeArguments(c, typeArguments, params, typeArguments.length, false);
362
+ return args.length === 0 ? declaredManagedType : getTypeAliasInstantiation(c, managedSym, args, undefined);
363
+ }
364
+ }
365
+ if ((declaredManagedType.objectFlags & 3 /* ObjectFlags.ClassOrInterface */) !== 0) {
366
+ const params = getLocalTypeParametersOfClassOrInterfaceOrTypeAlias(c, managedSym);
367
+ if (params.length >= typeArguments.length) {
368
+ const args = fillMissingTypeArguments(c, typeArguments, params, typeArguments.length, false);
369
+ return createTypeReference(c, declaredManagedType, args);
370
+ }
371
+ }
372
+ return undefined;
373
+ }
374
+ /**
375
+ * The single property name of `JSX.ElementAttributesProperty` or `JSX.ElementChildrenAttribute`: `''` when
376
+ * the interface is empty, `InternalSymbolName.Missing` when it doesn't exist.
377
+ */
378
+ function getNameFromJsxElementAttributesContainer(c, containerName, ns) {
379
+ if (ns !== undefined) {
380
+ const sym = getSymbolOfMeaning(c, getExportsOfSymbol(c, ns), containerName, 788968 /* SymbolFlags.Type */);
381
+ if (sym !== undefined) {
382
+ const props = getPropertiesOfType(c, getDeclaredTypeOfSymbol(c, sym));
383
+ if (props.length === 0)
384
+ return '';
385
+ if (props.length === 1)
386
+ return props[0].name;
387
+ if (declarationCount(sym) !== 0)
388
+ c.error(sym.declaration, 752 /* Diagnostics.The_global_type_JSX_0_may_not_have_more_than_one_property */, containerName);
389
+ }
390
+ }
391
+ return "\uFFFEmissing" /* InternalSymbolName.Missing */;
392
+ }
393
+ function getJsxElementPropertiesName(c, ns) {
394
+ return getNameFromJsxElementAttributesContainer(c, jsxElementAttributesPropertyName, ns);
395
+ }
396
+ export function getJsxElementChildrenPropertyName(c, ns) {
397
+ const jsx = c.compilerOptions.jsx;
398
+ // The automatic runtime always passes children as `children`.
399
+ if (jsx === JsxEmit.ReactJSX || jsx === JsxEmit.ReactJSXDev)
400
+ return 'children';
401
+ return getNameFromJsxElementAttributesContainer(c, jsxElementChildrenAttributeName, ns);
402
+ }
403
+ function getJsxLibraryManagedAttributes(c, ns) {
404
+ return ns !== undefined
405
+ ? getSymbolOfMeaning(c, getExportsOfSymbol(c, ns), jsxLibraryManagedAttributesName, 788968 /* SymbolFlags.Type */)
406
+ : undefined;
407
+ }
408
+ // ---- Intrinsic elements and props types
409
+ /**
410
+ * The `JSX.IntrinsicElements` property or index signature for an intrinsic tag, recording which in the
411
+ * element's flags; `unknownSymbol` when neither exists.
412
+ */
413
+ export function getIntrinsicTagSymbol(c, node) {
414
+ const links = elementLinks(c, node);
415
+ if (links.resolvedSymbol !== undefined)
416
+ return links.resolvedSymbol;
417
+ const intrinsicElementsType = getJsxType(c, jsxIntrinsicElementsName, node);
418
+ if (!isErrorType(c, intrinsicElementsType)) {
419
+ const tagName = getTagNameOf(node);
420
+ const propName = jsxNameText(tagName);
421
+ const intrinsicProp = getPropertyOfType(c, intrinsicElementsType, propName);
422
+ if (intrinsicProp !== undefined) {
423
+ links.jsxFlags |= 1 /* JsxFlags.IntrinsicNamedElement */;
424
+ links.resolvedSymbol = intrinsicProp;
425
+ return intrinsicProp;
426
+ }
427
+ const info = getApplicableIndexInfo(c, intrinsicElementsType, getStringLiteralType(c, propName));
428
+ if ((info !== undefined && info !== c.anyBaseTypeIndexInfo) ||
429
+ getApplicableIndexInfoForName(c, intrinsicElementsType, propName) !== undefined) {
430
+ links.jsxFlags |= 2 /* JsxFlags.IntrinsicIndexedElement */;
431
+ links.resolvedSymbol = intrinsicElementsType.symbol ?? c.unknownSymbol;
432
+ return links.resolvedSymbol;
433
+ }
434
+ c.error(node, 516 /* Diagnostics.Property_0_does_not_exist_on_type_1 */, propName, 'JSX.' + jsxIntrinsicElementsName);
435
+ links.resolvedSymbol = c.unknownSymbol;
436
+ return c.unknownSymbol;
437
+ }
438
+ if (c.noImplicitAny)
439
+ c.error(node, 1697 /* Diagnostics.JSX_element_implicitly_has_type_any_because_no_interface_JSX_0_exists */, jsxIntrinsicElementsName);
440
+ links.resolvedSymbol = c.unknownSymbol;
441
+ return c.unknownSymbol;
442
+ }
443
+ /** The props type of an intrinsic element. */
444
+ function getIntrinsicAttributesTypeFromJsxOpeningLikeElement(c, node) {
445
+ const links = elementLinks(c, node);
446
+ if (links.resolvedJsxElementAttributesType !== undefined)
447
+ return links.resolvedJsxElementAttributesType;
448
+ const symbol = getIntrinsicTagSymbol(c, node);
449
+ let result = c.errorType;
450
+ if ((links.jsxFlags & 1 /* JsxFlags.IntrinsicNamedElement */) !== 0)
451
+ result = getTypeOfSymbol(c, symbol);
452
+ else if ((links.jsxFlags & 2 /* JsxFlags.IntrinsicIndexedElement */) !== 0) {
453
+ const info = getApplicableIndexInfoForName(c, getJsxType(c, jsxIntrinsicElementsName, node), jsxNameText(getTagNameOf(node)));
454
+ if (info !== undefined)
455
+ result = info.valueType;
456
+ }
457
+ links.resolvedJsxElementAttributesType = result;
458
+ return result;
459
+ }
460
+ function getIntrinsicAttributesTypeFromStringLiteralType(c, t, location) {
461
+ const intrinsicElementsType = getJsxType(c, jsxIntrinsicElementsName, location);
462
+ if (isErrorType(c, intrinsicElementsType))
463
+ return c.anyType;
464
+ const name = t.stringValue;
465
+ const intrinsicProp = getPropertyOfType(c, intrinsicElementsType, name);
466
+ if (intrinsicProp !== undefined)
467
+ return getTypeOfSymbol(c, intrinsicProp);
468
+ return getIndexTypeOfType(c, intrinsicElementsType, c.stringType);
469
+ }
470
+ /** A `(props: result) => JSX.Element` signature for an intrinsic element. */
471
+ function createSignatureForJSXIntrinsic(c, node, result) {
472
+ return newJsxIntrinsicSignature(c, result, getJsxElementTypeForIntrinsic(c, node));
473
+ }
474
+ /** The return type of createSignatureForJSXIntrinsic: `JSX.Element` at `node`, or the error type. */
475
+ function getJsxElementTypeForIntrinsic(c, node) {
476
+ let elementType = c.errorType;
477
+ const namespace = getJsxNamespaceAt(c, node);
478
+ if (namespace !== undefined) {
479
+ const typeSymbol = getSymbolOfMeaning(c, getExportsOfSymbol(c, namespace), jsxElementName, 788968 /* SymbolFlags.Type */);
480
+ if (typeSymbol !== undefined)
481
+ elementType = getDeclaredTypeOfSymbol(c, typeSymbol);
482
+ }
483
+ return elementType;
484
+ }
485
+ function newJsxIntrinsicSignature(c, result, elementType) {
486
+ const parameterSymbol = c.newSymbol(1 /* SymbolFlags.FunctionScopedVariable */, 'props');
487
+ c.symbolTypes.set(getSymbolId(parameterSymbol), result);
488
+ return c.newSignature(0 /* SignatureFlags.None */, undefined, [], undefined, [parameterSymbol], elementType, 1);
489
+ }
490
+ /**
491
+ * `getOrCreateTypeFromSignature(createSignatureForJSXIntrinsic(node, result))`, the type that
492
+ * getStaticTypeOfReferencedJsxConstructor gives an intrinsic element: `new (props: result) =>
493
+ * JSX.Element`. tsgo creates a new one for every element, which makes each element's
494
+ * `LibraryManagedAttributes<C, P>` a new instantiation; it is a function of the two types, so one is
495
+ * kept per pair.
496
+ */
497
+ function getJsxIntrinsicConstructorType(c, node, result) {
498
+ const elementType = getJsxElementTypeForIntrinsic(c, node);
499
+ const key = result.id + ',' + elementType.id;
500
+ let t = c.jsx.intrinsicConstructorTypes.get(key);
501
+ if (t === undefined) {
502
+ t = getOrCreateTypeFromSignature(c, newJsxIntrinsicSignature(c, result, elementType));
503
+ c.jsx.intrinsicConstructorTypes.set(key, t);
504
+ }
505
+ return t;
506
+ }
507
+ function getJsxReferenceKind(c, node) {
508
+ const tagName = getTagNameOf(node);
509
+ if (isJsxIntrinsicTagName(tagName))
510
+ return 2 /* JsxReferenceKind.Mixed */;
511
+ const tagType = getApparentType(c, checkExpression(c, tagName));
512
+ if (getSignaturesOfType(c, tagType, 1 /* SignatureKind.Construct */).length !== 0)
513
+ return 0 /* JsxReferenceKind.Component */;
514
+ if (getSignaturesOfType(c, tagType, 0 /* SignatureKind.Call */).length !== 0)
515
+ return 1 /* JsxReferenceKind.Function */;
516
+ return 2 /* JsxReferenceKind.Mixed */;
517
+ }
518
+ function getUninstantiatedJsxSignaturesOfType(c, elementType, caller) {
519
+ if ((elementType.flags & 32 /* TypeFlags.String */) !== 0)
520
+ return [c.anySignature];
521
+ if ((elementType.flags & 1024 /* TypeFlags.StringLiteral */) !== 0) {
522
+ const intrinsicType = getIntrinsicAttributesTypeFromStringLiteralType(c, elementType, caller);
523
+ if (intrinsicType === undefined) {
524
+ c.error(caller, 516 /* Diagnostics.Property_0_does_not_exist_on_type_1 */, elementType.stringValue, 'JSX.' + jsxIntrinsicElementsName);
525
+ return [];
526
+ }
527
+ return [createSignatureForJSXIntrinsic(c, caller, intrinsicType)];
528
+ }
529
+ const apparentElemType = getApparentType(c, elementType);
530
+ // Prefer construct signatures.
531
+ let signatures = getSignaturesOfType(c, apparentElemType, 1 /* SignatureKind.Construct */);
532
+ if (signatures.length === 0)
533
+ signatures = getSignaturesOfType(c, apparentElemType, 0 /* SignatureKind.Call */);
534
+ if (signatures.length === 0 && (apparentElemType.flags & 134217728 /* TypeFlags.Union */) !== 0) {
535
+ const lists = [];
536
+ for (const t of typesOf(apparentElemType))
537
+ lists.push(getUninstantiatedJsxSignaturesOfType(c, t, caller));
538
+ signatures = getUnionSignatures(c, lists);
539
+ }
540
+ return signatures;
541
+ }
542
+ function getTypeOfFirstParameterOfSignatureWithFallback(c, sig, fallback) {
543
+ return sig.parameters.length > 0 ? getTypeAtPosition(c, sig, 0) : fallback;
544
+ }
545
+ /** The props type a signature expects of an element's attributes. */
546
+ export function getEffectiveFirstArgumentForJsxSignature(c, signature, node) {
547
+ if (node.kind === 290 /* SyntaxKind.JsxOpeningFragment */ || getJsxReferenceKind(c, node) !== 0 /* JsxReferenceKind.Component */)
548
+ return getJsxPropsTypeFromCallSignature(c, signature, node);
549
+ return getJsxPropsTypeFromClassType(c, signature, node);
550
+ }
551
+ function getJsxPropsTypeFromCallSignature(c, sig, context) {
552
+ let propsType = getTypeOfFirstParameterOfSignatureWithFallback(c, sig, c.unknownType);
553
+ propsType = getJsxManagedAttributesFromLocatedAttributes(c, context, getJsxNamespaceAt(c, context), propsType);
554
+ const intrinsicAttribs = getJsxType(c, jsxIntrinsicAttributesName, context);
555
+ if (!isErrorType(c, intrinsicAttribs))
556
+ propsType = intersectTypes(c, intrinsicAttribs, propsType);
557
+ return propsType;
558
+ }
559
+ function getJsxPropsTypeFromClassType(c, sig, context) {
560
+ const ns = getJsxNamespaceAt(c, context);
561
+ const forcedLookupLocation = getJsxElementPropertiesName(c, ns);
562
+ let attributesType;
563
+ if (forcedLookupLocation === "\uFFFEmissing" /* InternalSymbolName.Missing */)
564
+ attributesType = getTypeOfFirstParameterOfSignatureWithFallback(c, sig, c.unknownType);
565
+ else if (forcedLookupLocation === '')
566
+ attributesType = getReturnTypeOfSignature(c, sig);
567
+ else {
568
+ attributesType = getJsxPropsTypeForSignatureFromMember(c, sig, forcedLookupLocation);
569
+ if (attributesType === undefined && getAttributesOf(context).properties.nodes.length !== 0)
570
+ c.error(context, 751 /* Diagnostics.JSX_element_class_does_not_support_attributes_because_it_does_not_have_a_0_property */, forcedLookupLocation);
571
+ }
572
+ if (attributesType === undefined)
573
+ return c.unknownType;
574
+ attributesType = getJsxManagedAttributesFromLocatedAttributes(c, context, ns, attributesType);
575
+ if ((attributesType.flags & 1 /* TypeFlags.Any */) !== 0)
576
+ return attributesType;
577
+ let apparentAttributesType = attributesType;
578
+ const intrinsicClassAttribs = getJsxType(c, jsxIntrinsicClassAttributesName, context);
579
+ if (!isErrorType(c, intrinsicClassAttribs)) {
580
+ const typeParams = getLocalTypeParametersOfClassOrInterfaceOrTypeAlias(c, intrinsicClassAttribs.symbol);
581
+ const hostClassType = getReturnTypeOfSignature(c, sig);
582
+ let libraryManagedAttributeType = intrinsicClassAttribs;
583
+ if (typeParams.length !== 0) {
584
+ const inferredArgs = fillMissingTypeArguments(c, [hostClassType], typeParams, getMinTypeArgumentCount(c, typeParams), false);
585
+ libraryManagedAttributeType = instantiateType(c, intrinsicClassAttribs, newTypeMapper(typeParams, inferredArgs));
586
+ }
587
+ apparentAttributesType = intersectTypes(c, libraryManagedAttributeType, apparentAttributesType);
588
+ }
589
+ const intrinsicAttribs = getJsxType(c, jsxIntrinsicAttributesName, context);
590
+ if (!isErrorType(c, intrinsicAttribs))
591
+ apparentAttributesType = intersectTypes(c, intrinsicAttribs, apparentAttributesType);
592
+ return apparentAttributesType;
593
+ }
594
+ function getJsxPropsTypeForSignatureFromMember(c, sig, name) {
595
+ if (sig.composite !== undefined) {
596
+ // `props` of a union or intersection signature is an input: intersect the members' instance props.
597
+ const results = [];
598
+ for (const signature of sig.composite.signatures) {
599
+ const instance = getReturnTypeOfSignature(c, signature);
600
+ if ((instance.flags & 1 /* TypeFlags.Any */) !== 0)
601
+ return instance;
602
+ const propType = getTypeOfPropertyOfType(c, instance, name);
603
+ if (propType === undefined)
604
+ return undefined;
605
+ results.push(propType);
606
+ }
607
+ return getIntersectionType(c, results);
608
+ }
609
+ const instanceType = getReturnTypeOfSignature(c, sig);
610
+ if ((instanceType.flags & 1 /* TypeFlags.Any */) !== 0)
611
+ return instanceType;
612
+ return getTypeOfPropertyOfType(c, instanceType, name);
613
+ }
614
+ function getJsxManagedAttributesFromLocatedAttributes(c, context, ns, attributesType) {
615
+ const managedSym = getJsxLibraryManagedAttributes(c, ns);
616
+ if (managedSym !== undefined) {
617
+ const ctorType = getStaticTypeOfReferencedJsxConstructor(c, context);
618
+ const result = instantiateAliasOrInterfaceWithDefaults(c, managedSym, [ctorType, attributesType]);
619
+ if (result !== undefined)
620
+ return result;
621
+ }
622
+ return attributesType;
623
+ }
624
+ function getStaticTypeOfReferencedJsxConstructor(c, context) {
625
+ if (context.kind === 290 /* SyntaxKind.JsxOpeningFragment */)
626
+ return getJSXFragmentType(c, context);
627
+ const tagName = getTagNameOf(context);
628
+ if (isJsxIntrinsicTagName(tagName)) {
629
+ const result = getIntrinsicAttributesTypeFromJsxOpeningLikeElement(c, context);
630
+ return getJsxIntrinsicConstructorType(c, context, result);
631
+ }
632
+ const tagType = checkExpressionCached(c, tagName);
633
+ if ((tagType.flags & 1024 /* TypeFlags.StringLiteral */) !== 0) {
634
+ const result = getIntrinsicAttributesTypeFromStringLiteralType(c, tagType, context);
635
+ if (result === undefined)
636
+ return c.errorType;
637
+ return getJsxIntrinsicConstructorType(c, context, result);
638
+ }
639
+ return tagType;
640
+ }
641
+ /** The type of the fragment factory, such as `React.Fragment`. */
642
+ function getJSXFragmentType(c, node) {
643
+ const links = fileLinks(c, getSourceFileOfNode(node));
644
+ if (links.jsxFragmentType !== undefined)
645
+ return links.jsxFragmentType;
646
+ const jsxFragmentFactoryName = getJsxNamespace(c, node);
647
+ // `null` is allowed as the fragment factory.
648
+ const shouldResolveFactoryReference = (c.compilerOptions.jsx === JsxEmit.React ||
649
+ (c.compilerOptions.jsxFragmentFactory !== undefined && c.compilerOptions.jsxFragmentFactory !== '')) &&
650
+ jsxFragmentFactoryName !== 'null';
651
+ if (!shouldResolveFactoryReference) {
652
+ links.jsxFragmentType = c.anyType;
653
+ return c.anyType;
654
+ }
655
+ let jsxFactorySymbol = getJsxNamespaceContainerForImplicitImport(c, node);
656
+ if (jsxFactorySymbol === undefined) {
657
+ const shouldModuleRefErr = c.compilerOptions.jsx !== JsxEmit.Preserve && c.compilerOptions.jsx !== JsxEmit.ReactNative;
658
+ let flags = 111551 /* SymbolFlags.Value */;
659
+ if (!shouldModuleRefErr)
660
+ flags &= ~384 /* SymbolFlags.Enum */;
661
+ jsxFactorySymbol = resolveName(c, node, jsxFragmentFactoryName, flags, 999 /* Diagnostics.Using_JSX_fragments_requires_fragment_factory_0_to_be_in_scope_but_it_could_not_be_found */, true, false);
662
+ }
663
+ if (jsxFactorySymbol === undefined) {
664
+ links.jsxFragmentType = c.errorType;
665
+ return c.errorType;
666
+ }
667
+ if (jsxFactorySymbol.name === 'Fragment') {
668
+ links.jsxFragmentType = getTypeOfSymbol(c, jsxFactorySymbol);
669
+ return links.jsxFragmentType;
670
+ }
671
+ const resolvedAlias = (jsxFactorySymbol.flags & 2097152 /* SymbolFlags.Alias */) !== 0 ? resolveAlias(c, jsxFactorySymbol) : jsxFactorySymbol;
672
+ const typeSymbol = getSymbolOfMeaning(c, getExportsOfSymbol(c, resolvedAlias), 'Fragment', 2 /* SymbolFlags.BlockScopedVariable */);
673
+ links.jsxFragmentType = typeSymbol !== undefined ? getTypeOfSymbol(c, typeSymbol) : c.errorType;
674
+ return links.jsxFragmentType;
675
+ }
676
+ // ---- Attributes and children
677
+ export function checkJsxAttribute(c, node, checkMode) {
678
+ const initializer = node.initializer;
679
+ // `<Elem attr />` is `<Elem attr={true} />`.
680
+ return initializer !== undefined ? checkExpressionForMutableLocationEx(c, initializer, checkMode) : c.trueType;
681
+ }
682
+ export function checkJsxChildren(c, node, checkMode) {
683
+ const childTypes = [];
684
+ for (const child of getChildrenOf(node)) {
685
+ // Whitespace-only text isn't a child in React.
686
+ if (child.kind === 11 /* SyntaxKind.JsxText */) {
687
+ if (!child.containsOnlyTriviaWhiteSpaces)
688
+ childTypes.push(c.stringType);
689
+ }
690
+ else if (child.kind === 295 /* SyntaxKind.JsxExpression */ && child.expression === undefined)
691
+ continue;
692
+ else
693
+ childTypes.push(checkExpressionForMutableLocationEx(c, child, checkMode));
694
+ }
695
+ return childTypes;
696
+ }
697
+ function parentHasSemanticJsxChildren(openingLikeElement) {
698
+ const parent = openingLikeElement.parent;
699
+ if (parent === undefined)
700
+ return false;
701
+ if (parent.kind === 285 /* SyntaxKind.JsxElement */ && parent.openingElement === openingLikeElement)
702
+ return getSemanticJsxChildren(parent.children.nodes).length !== 0;
703
+ if (parent.kind === 289 /* SyntaxKind.JsxFragment */ && parent.openingFragment === openingLikeElement)
704
+ return getSemanticJsxChildren(parent.children.nodes).length !== 0;
705
+ return false;
706
+ }
707
+ function createJsxAttributesType(c, symbol, table, objectFlags) {
708
+ const result = createAnonymousType(c, symbol, table, [], [], []);
709
+ result.objectFlags |=
710
+ objectFlags | 8192 /* ObjectFlags.FreshLiteral */ | 128 /* ObjectFlags.ObjectLiteral */ | 131072 /* ObjectFlags.ContainsObjectOrArrayLiteral */;
711
+ return result;
712
+ }
713
+ /** The object type of an element's attributes and children, like an object literal's. */
714
+ export function createJsxAttributesTypeFromAttributesProperty(c, openingLikeElement, checkMode) {
715
+ const allAttributesTable = c.strictNullChecks ? new Map() : undefined;
716
+ let attributesTable = new Map();
717
+ let attributesSymbol = undefined;
718
+ let attributeParent = openingLikeElement;
719
+ let spread = c.emptyJsxObjectType;
720
+ let hasSpreadAnyType = false;
721
+ let typeToIntersect = undefined;
722
+ let explicitlySpecifyChildrenAttribute = false;
723
+ let objectFlags = 2048 /* ObjectFlags.JsxAttributes */;
724
+ const jsxChildrenPropertyName = getJsxElementChildrenPropertyName(c, getJsxNamespaceAt(c, openingLikeElement));
725
+ if (openingLikeElement.kind !== 290 /* SyntaxKind.JsxOpeningFragment */) {
726
+ const attributes = getAttributesOf(openingLikeElement);
727
+ attributesSymbol = attributes.symbol;
728
+ attributeParent = attributes;
729
+ const contextualType = getContextualType(c, attributes);
730
+ for (const attributeDecl of attributes.properties.nodes) {
731
+ if (attributeDecl.kind === 292 /* SyntaxKind.JsxAttribute */) {
732
+ const member = getSymbol(attributeDecl);
733
+ const exprType = checkJsxAttribute(c, attributeDecl, checkMode);
734
+ objectFlags |= exprType.objectFlags & 458752 /* ObjectFlags.PropagatingFlags */;
735
+ const attributeSymbol = c.newSymbol(4 /* SymbolFlags.Property */ | member.flags, member.name);
736
+ copyDeclarations(attributeSymbol, member);
737
+ attributeSymbol.parent = member.parent;
738
+ if (member.valueDeclaration !== undefined)
739
+ attributeSymbol.valueDeclaration = member.valueDeclaration;
740
+ const id = getSymbolId(attributeSymbol);
741
+ c.symbolTypes.set(id, exprType);
742
+ c.symbolTargets.set(id, member);
743
+ attributesTable.set(attributeSymbol.name, attributeSymbol);
744
+ if (allAttributesTable !== undefined)
745
+ allAttributesTable.set(attributeSymbol.name, attributeSymbol);
746
+ if (jsxNameText(attributeDecl.name) === jsxChildrenPropertyName)
747
+ explicitlySpecifyChildrenAttribute = true;
748
+ if (contextualType !== undefined)
749
+ checkDeprecatedJsxAttribute(c, contextualType, attributeDecl);
750
+ if (contextualType !== undefined &&
751
+ (checkMode & 2 /* CheckMode.Inferential */) !== 0 &&
752
+ (checkMode & 4 /* CheckMode.SkipContextSensitive */) === 0 &&
753
+ isContextSensitive(c, attributeDecl)) {
754
+ // Inferences flowing between context-sensitive attributes are made before fixing.
755
+ const inferenceContext = getInferenceContext(c, attributes);
756
+ const initializer = attributeDecl.initializer;
757
+ if (inferenceContext !== undefined && initializer !== undefined)
758
+ addIntraExpressionInferenceSite(inferenceContext, getExpression(initializer), exprType);
759
+ }
760
+ }
761
+ else {
762
+ if (attributesTable.size !== 0) {
763
+ // Attribute objects are fresh, and so are spreads after the first one.
764
+ objectFlags |= 8192 /* ObjectFlags.FreshLiteral */;
765
+ spread = getSpreadType(c, spread, createJsxAttributesType(c, attributesSymbol, attributesTable, objectFlags), attributesSymbol, objectFlags, false);
766
+ attributesTable = new Map();
767
+ }
768
+ const expression = attributeDecl.expression;
769
+ const exprType = getReducedType(c, checkExpressionEx(c, expression, checkMode & 2 /* CheckMode.Inferential */));
770
+ if ((exprType.flags & 1 /* TypeFlags.Any */) !== 0)
771
+ hasSpreadAnyType = true;
772
+ if (isValidSpreadType(c, exprType)) {
773
+ spread = getSpreadType(c, spread, exprType, attributesSymbol, objectFlags, false);
774
+ if (allAttributesTable !== undefined)
775
+ checkSpreadPropOverrides(c, exprType, allAttributesTable, attributeDecl);
776
+ }
777
+ else {
778
+ c.error(expression, 830 /* Diagnostics.Spread_types_may_only_be_created_from_object_types */);
779
+ typeToIntersect =
780
+ typeToIntersect !== undefined ? getIntersectionType(c, [typeToIntersect, exprType]) : exprType;
781
+ }
782
+ }
783
+ }
784
+ if (!hasSpreadAnyType && attributesTable.size !== 0) {
785
+ objectFlags |= 8192 /* ObjectFlags.FreshLiteral */;
786
+ spread = getSpreadType(c, spread, createJsxAttributesType(c, attributesSymbol, attributesTable, objectFlags), attributesSymbol, objectFlags, false);
787
+ }
788
+ }
789
+ if (parentHasSemanticJsxChildren(openingLikeElement)) {
790
+ const childTypes = checkJsxChildren(c, openingLikeElement.parent, checkMode);
791
+ if (!hasSpreadAnyType && jsxChildrenPropertyName !== "\uFFFEmissing" /* InternalSymbolName.Missing */ && jsxChildrenPropertyName !== '') {
792
+ // Children overwrite a `children` attribute; one from a spread isn't reported.
793
+ if (explicitlySpecifyChildrenAttribute)
794
+ c.error(attributeParent, 842 /* Diagnostics.X_0_are_specified_twice_The_attribute_named_0_will_be_overwritten */, jsxChildrenPropertyName);
795
+ let childrenContextualType = undefined;
796
+ if (openingLikeElement.kind === 287 /* SyntaxKind.JsxOpeningElement */) {
797
+ const contextualType = getApparentTypeOfContextualType(c, getAttributesOf(openingLikeElement));
798
+ if (contextualType !== undefined)
799
+ childrenContextualType = getTypeOfPropertyOfContextualType(c, contextualType, jsxChildrenPropertyName);
800
+ }
801
+ const childrenPropSymbol = c.newSymbol(4 /* SymbolFlags.Property */, jsxChildrenPropertyName);
802
+ const id = getSymbolId(childrenPropSymbol);
803
+ if (childTypes.length === 1)
804
+ c.symbolTypes.set(id, childTypes[0]);
805
+ else if (childrenContextualType !== undefined && someType(childrenContextualType, (t) => isTupleLikeType(c, t)))
806
+ c.symbolTypes.set(id, createTupleType(c, childTypes));
807
+ else
808
+ c.symbolTypes.set(id, createArrayType(c, getUnionType(c, childTypes)));
809
+ // A property signature in the attributes declares the synthetic `children` property, so it is
810
+ // checked as an excess property like the attributes.
811
+ const childrenDeclaration = new PropertySignatureDeclaration(undefined, new Identifier(jsxChildrenPropertyName), undefined, undefined, undefined);
812
+ childrenDeclaration.parent = attributeParent;
813
+ childrenDeclaration.symbol = childrenPropSymbol;
814
+ childrenPropSymbol.valueDeclaration = childrenDeclaration;
815
+ const childPropMap = new Map();
816
+ childPropMap.set(jsxChildrenPropertyName, childrenPropSymbol);
817
+ spread = getSpreadType(c, spread, createAnonymousType(c, attributesSymbol, childPropMap, [], [], []), attributesSymbol, objectFlags | getPropagatingFlagsOfTypes(childTypes, 0 /* TypeFlags.None */), false);
818
+ }
819
+ }
820
+ if (hasSpreadAnyType)
821
+ return c.anyType;
822
+ if (typeToIntersect !== undefined)
823
+ return spread !== c.emptyJsxObjectType ? getIntersectionType(c, [typeToIntersect, spread]) : typeToIntersect;
824
+ if (spread === c.emptyJsxObjectType)
825
+ return createJsxAttributesType(c, attributesSymbol, attributesTable, objectFlags);
826
+ return spread;
827
+ }
828
+ export function isTupleLikeType(c, t) {
829
+ if (isTupleType(t) || getPropertyOfType(c, t, '0') !== undefined)
830
+ return true;
831
+ if (isArrayLikeType(c, t)) {
832
+ const lengthType = getTypeOfPropertyOfType(c, t, 'length');
833
+ if (lengthType !== undefined)
834
+ return everyType(lengthType, (u) => (u.flags & 2048 /* TypeFlags.NumberLiteral */) !== 0);
835
+ }
836
+ return false;
837
+ }
838
+ export function isArrayOrTupleLikeType(c, t) {
839
+ return isArrayLikeType(c, t) || isTupleLikeType(c, t);
840
+ }
841
+ // ---- Signature resolution
842
+ /** The attributes argument of an element, if it has attributes or children. */
843
+ export function getEffectiveJsxArguments(node) {
844
+ const attributes = getAttributesOf(node);
845
+ if (attributes.properties.nodes.length !== 0 ||
846
+ (node.kind === 287 /* SyntaxKind.JsxOpeningElement */ && node.parent.children.nodes.length !== 0))
847
+ return [attributes];
848
+ return [];
849
+ }
850
+ /** Whether `signature` accepts the element's attributes, reporting why not when `reportErrors`. */
851
+ export function checkApplicableSignatureForJsxCallLikeElement(c, node, signature, relation, checkMode, reportErrors, diagnosticOutput) {
852
+ // Function components get props, context and an updater; only props come from attributes.
853
+ const paramType = getEffectiveFirstArgumentForJsxSignature(c, signature, node);
854
+ const attributesType = node.kind === 290 /* SyntaxKind.JsxOpeningFragment */
855
+ ? createJsxAttributesTypeFromAttributesProperty(c, node, 0 /* CheckMode.Normal */)
856
+ : checkExpressionWithContextualType(c, getAttributesOf(node), paramType, undefined, checkMode);
857
+ const checkAttributesType = (checkMode & 4 /* CheckMode.SkipContextSensitive */) !== 0
858
+ ? getRegularTypeOfObjectLiteral(c, attributesType)
859
+ : attributesType;
860
+ if (!checkTagNameDoesNotExpectTooManyArguments(c, node, reportErrors, diagnosticOutput))
861
+ return false;
862
+ const errorNode = reportErrors
863
+ ? node.kind === 290 /* SyntaxKind.JsxOpeningFragment */
864
+ ? node
865
+ : getTagNameOf(node)
866
+ : undefined;
867
+ const attributes = node.kind === 290 /* SyntaxKind.JsxOpeningFragment */ ? undefined : getAttributesOf(node);
868
+ return checkTypeRelatedToAndOptionallyElaborate(c, checkAttributesType, paramType, relation, errorNode, attributes, undefined, diagnosticOutput);
869
+ }
870
+ /** Whether a function component's required parameters fit what the factory passes it. */
871
+ function checkTagNameDoesNotExpectTooManyArguments(c, node, reportErrors, diagnosticOutput) {
872
+ // The automatic runtime's factories aren't looked at.
873
+ if (getJsxNamespaceContainerForImplicitImport(c, node) !== undefined)
874
+ return true;
875
+ if (node.kind === 290 /* SyntaxKind.JsxOpeningFragment */)
876
+ return true;
877
+ const tagName = getTagNameOf(node);
878
+ if (isJsxIntrinsicTagName(tagName))
879
+ return true;
880
+ const tagType = checkExpression(c, tagName);
881
+ const tagCallSignatures = getSignaturesOfType(c, tagType, 0 /* SignatureKind.Call */);
882
+ if (tagCallSignatures.length === 0)
883
+ return true;
884
+ const factory = getJsxFactoryEntity(c, node);
885
+ if (factory === undefined)
886
+ return true;
887
+ const factorySymbol = resolveEntityName(c, factory, 111551 /* SymbolFlags.Value */, true, false, node);
888
+ if (factorySymbol === undefined)
889
+ return true;
890
+ const callSignatures = getSignaturesOfType(c, getTypeOfSymbol(c, factorySymbol), 0 /* SignatureKind.Call */);
891
+ if (callSignatures.length === 0)
892
+ return true;
893
+ let hasFirstParamSignatures = false;
894
+ let maxParamCount = 0;
895
+ // Some first parameter must expect a function component that takes the element's arguments.
896
+ for (const sig of callSignatures) {
897
+ const firstParam = getTypeAtPosition(c, sig, 0);
898
+ for (const paramSig of getSignaturesOfType(c, firstParam, 0 /* SignatureKind.Call */)) {
899
+ hasFirstParamSignatures = true;
900
+ if (hasEffectiveRestParameter(c, paramSig))
901
+ return true;
902
+ maxParamCount = Math.max(maxParamCount, getParameterCount(c, paramSig));
903
+ }
904
+ }
905
+ // Generic factories have no signatures to look at.
906
+ if (!hasFirstParamSignatures)
907
+ return true;
908
+ let absoluteMinArgCount = Number.MAX_SAFE_INTEGER;
909
+ for (const tagSig of tagCallSignatures)
910
+ absoluteMinArgCount = Math.min(absoluteMinArgCount, getMinArgumentCount(c, tagSig));
911
+ if (absoluteMinArgCount <= maxParamCount)
912
+ return true;
913
+ if (reportErrors) {
914
+ const diagnostic = createDiagnosticForNode(tagName, 1381 /* Diagnostics.Tag_0_expects_at_least_1_arguments_but_the_JSX_factory_2_provides_at_most_3 */, [entityNameToString(tagName), String(absoluteMinArgCount), entityNameToString(factory), String(maxParamCount)]);
915
+ const tagNameSymbol = getSymbolOfTagName(c, tagName);
916
+ if (tagNameSymbol !== undefined && tagNameSymbol.valueDeclaration !== undefined)
917
+ diagnostic.addRelatedInfo(createDiagnosticForNode(tagNameSymbol.valueDeclaration, 860 /* Diagnostics.X_0_is_declared_here */, [
918
+ entityNameToString(tagName),
919
+ ]));
920
+ reportDiagnostic(c, diagnostic, diagnosticOutput);
921
+ }
922
+ return false;
923
+ }
924
+ function getSymbolOfTagName(c, tagName) {
925
+ if (tagName.kind === 79 /* SyntaxKind.Identifier */ || tagName.kind === 212 /* SyntaxKind.PropertyAccessExpression */)
926
+ return resolveEntityName(c, tagName, 111551 /* SymbolFlags.Value */, true, false, undefined);
927
+ return undefined;
928
+ }
929
+ function reportDiagnostic(c, diagnostic, output) {
930
+ if (output !== undefined)
931
+ output.push(diagnostic);
932
+ else
933
+ c.addDiagnostic(diagnostic);
934
+ }
935
+ export function resolveJsxOpeningLikeElement(c, node, checkMode) {
936
+ const isJsxOpenFragment = node.kind === 290 /* SyntaxKind.JsxOpeningFragment */;
937
+ let exprTypes;
938
+ if (!isJsxOpenFragment) {
939
+ const tagName = getTagNameOf(node);
940
+ if (isJsxIntrinsicTagName(tagName)) {
941
+ const result = getIntrinsicAttributesTypeFromJsxOpeningLikeElement(c, node);
942
+ const fakeSignature = createSignatureForJSXIntrinsic(c, node, result);
943
+ const attributes = getAttributesOf(node);
944
+ checkTypeAssignableToAndOptionallyElaborateJsx(c, checkExpressionWithContextualType(c, attributes, getEffectiveFirstArgumentForJsxSignature(c, fakeSignature, node), undefined, 0 /* CheckMode.Normal */), result, tagName, attributes);
945
+ const typeArguments = getTypeArgumentListOf(node);
946
+ if (typeArguments !== undefined && typeArguments.nodes.length !== 0) {
947
+ for (const t of typeArguments.nodes)
948
+ checkSourceElement(c, t);
949
+ const file = getSourceFileOfNode(node);
950
+ c.addDiagnostic(new Diagnostic(file.diagnosticFile(), skipTrivia(file.text, typeArguments.pos), typeArguments.end, 712 /* Diagnostics.Expected_0_type_arguments_but_got_1 */, ['0', String(typeArguments.nodes.length)]));
951
+ }
952
+ return fakeSignature;
953
+ }
954
+ exprTypes = checkExpression(c, tagName);
955
+ }
956
+ else
957
+ exprTypes = getJSXFragmentType(c, node);
958
+ const apparentType = getApparentType(c, exprTypes);
959
+ if (isErrorType(c, apparentType))
960
+ return resolveErrorCall(c, node);
961
+ const signatures = getUninstantiatedJsxSignaturesOfType(c, exprTypes, node);
962
+ if (isUntypedFunctionCall(c, exprTypes, apparentType, signatures.length))
963
+ return resolveUntypedCall(c, node);
964
+ if (signatures.length === 0) {
965
+ const errorNode = isJsxOpenFragment ? node : getTagNameOf(node);
966
+ c.error(errorNode, 749 /* Diagnostics.JSX_element_type_0_does_not_have_any_construct_or_call_signatures */, getTextOfNode(errorNode));
967
+ return resolveErrorCall(c, node);
968
+ }
969
+ return resolveCall(c, node, signatures, checkMode, 0 /* SignatureFlags.None */, undefined);
970
+ }
971
+ function checkTypeAssignableToAndOptionallyElaborateJsx(c, source, target, errorNode, expr) {
972
+ return checkTypeRelatedToAndOptionallyElaborate(c, source, target, c.assignableRelation, errorNode, expr, undefined, undefined);
973
+ }
974
+ function isUntypedFunctionCall(c, funcType, apparentFuncType, numCallSignatures) {
975
+ if ((funcType.flags & 1 /* TypeFlags.Any */) !== 0)
976
+ return true;
977
+ if ((apparentFuncType.flags & 1 /* TypeFlags.Any */) !== 0)
978
+ return true;
979
+ if ((funcType.flags & 524288 /* TypeFlags.TypeParameter */) !== 0)
980
+ return false;
981
+ return (numCallSignatures === 0 &&
982
+ (apparentFuncType.flags & 134217728 /* TypeFlags.Union */) === 0 &&
983
+ (getReducedType(c, apparentFuncType).flags & 262144 /* TypeFlags.Never */) === 0 &&
984
+ isTypeAssignableTo(c, funcType, c.globalFunctionType));
985
+ }
986
+ function resolveUntypedCall(c, node) {
987
+ if (node.kind !== 290 /* SyntaxKind.JsxOpeningFragment */) {
988
+ // Type arguments are checked even though an untyped element can't accept them: they get their
989
+ // diagnostics and mark what they reference as used.
990
+ const typeArguments = getTypeArgumentListOf(node);
991
+ if (typeArguments !== undefined)
992
+ for (const t of typeArguments.nodes)
993
+ checkSourceElement(c, t);
994
+ checkExpression(c, getAttributesOf(node));
995
+ }
996
+ return c.anySignature;
997
+ }
998
+ function resolveErrorCall(c, node) {
999
+ resolveUntypedCall(c, node);
1000
+ return c.unknownSignature;
1001
+ }
1002
+ /** The signature an element resolves to, computed once. */
1003
+ export function getResolvedJsxSignature(c, node) {
1004
+ return getResolvedSignature(c, node, 0 /* CheckMode.Normal */);
1005
+ }
1006
+ /** Infers a generic component's type arguments from the element's attributes. */
1007
+ export function inferJsxTypeArguments(c, node, signature, checkMode, context) {
1008
+ const paramType = getEffectiveFirstArgumentForJsxSignature(c, signature, node);
1009
+ const checkAttrType = checkExpressionWithContextualType(c, getAttributesOf(node), paramType, context, checkMode);
1010
+ inferTypes(c, context.inferences, checkAttrType, paramType, 0 /* InferencePriority.None */, false);
1011
+ return getInferredTypes(c, context);
1012
+ }
1013
+ // ---- Checking
1014
+ /** Checks a JSX expression, element, fragment or attributes node. */
1015
+ export function checkJsx(c, node, checkMode) {
1016
+ switch (node.kind) {
1017
+ case 295 /* SyntaxKind.JsxExpression */:
1018
+ return checkJsxExpression(c, node, checkMode);
1019
+ case 285 /* SyntaxKind.JsxElement */:
1020
+ case 286 /* SyntaxKind.JsxSelfClosingElement */: {
1021
+ checkNodeDeferred(c, node);
1022
+ return getJsxElementTypeAt(c, node);
1023
+ }
1024
+ case 289 /* SyntaxKind.JsxFragment */:
1025
+ return checkJsxFragment(c, node);
1026
+ case 293 /* SyntaxKind.JsxAttributes */:
1027
+ return createJsxAttributesTypeFromAttributesProperty(c, node.parent, checkMode);
1028
+ }
1029
+ return c.errorType;
1030
+ }
1031
+ function checkJsxExpression(c, node, checkMode) {
1032
+ checkGrammarJsxExpression(c, node);
1033
+ if (node.expression === undefined)
1034
+ return c.errorType;
1035
+ const t = checkExpressionEx(c, node.expression, checkMode);
1036
+ if (node.dotDotDotToken !== undefined && t !== c.anyType && !isArrayType(c, t))
1037
+ c.error(node, 753 /* Diagnostics.JSX_spread_child_must_be_an_array_type */);
1038
+ return t;
1039
+ }
1040
+ function checkJsxFragment(c, node) {
1041
+ checkJsxOpeningLikeElementOrOpeningFragment(c, node.openingFragment);
1042
+ // With a custom factory, fragments need a fragment factory too.
1043
+ const file = getSourceFileOfNode(node);
1044
+ const options = c.compilerOptions;
1045
+ const hasFactory = options.jsxFactory !== undefined && options.jsxFactory !== '';
1046
+ const hasFragmentFactory = options.jsxFragmentFactory !== undefined && options.jsxFragmentFactory !== '';
1047
+ if (isJsxTransformEnabled(c) &&
1048
+ (hasFactory || getPragma(file, 'jsx', 'factory') !== undefined) &&
1049
+ !hasFragmentFactory &&
1050
+ getPragma(file, 'jsxfrag', 'factory') === undefined)
1051
+ c.error(node, hasFactory
1052
+ ? 1819 /* Diagnostics.The_jsxFragmentFactory_compiler_option_must_be_provided_to_use_JSX_fragments_with_the_jsxFactory_compiler_option */
1053
+ : 1820 /* Diagnostics.An_jsxFrag_pragma_is_required_when_using_an_jsx_pragma_with_JSX_fragments */);
1054
+ checkJsxChildren(c, node, 0 /* CheckMode.Normal */);
1055
+ const t = getJsxElementTypeAt(c, node);
1056
+ return isErrorType(c, t) ? c.anyType : t;
1057
+ }
1058
+ /** The deferred check of an element: its signature, closing tag and children. */
1059
+ export function checkJsxElementDeferred(c, node) {
1060
+ if (node.kind === 286 /* SyntaxKind.JsxSelfClosingElement */) {
1061
+ checkJsxOpeningLikeElementOrOpeningFragment(c, node);
1062
+ return;
1063
+ }
1064
+ const element = node;
1065
+ checkJsxOpeningLikeElementOrOpeningFragment(c, element.openingElement);
1066
+ const closingTagName = element.closingElement.tagName;
1067
+ if (isJsxIntrinsicTagName(closingTagName))
1068
+ getIntrinsicTagSymbol(c, element.closingElement);
1069
+ else
1070
+ checkExpression(c, closingTagName);
1071
+ checkJsxChildren(c, node, 0 /* CheckMode.Normal */);
1072
+ }
1073
+ function checkJsxOpeningLikeElementOrOpeningFragment(c, node) {
1074
+ const isNodeOpeningLikeElement = isJsxOpeningLikeElement(node);
1075
+ if (isNodeOpeningLikeElement)
1076
+ checkGrammarJsxElement(c, node);
1077
+ checkJsxPreconditions(c, node);
1078
+ markJsxAliasReferenced(c, node);
1079
+ const sig = getResolvedJsxSignature(c, node);
1080
+ checkDeprecatedSignature(c, sig, node);
1081
+ if (!isNodeOpeningLikeElement)
1082
+ return;
1083
+ const elementTypeConstraint = getJsxElementTypeTypeAt(c, node);
1084
+ if (elementTypeConstraint !== undefined) {
1085
+ const tagName = getTagNameOf(node);
1086
+ const tagType = isJsxIntrinsicTagName(tagName)
1087
+ ? getStringLiteralType(c, jsxNameText(tagName))
1088
+ : checkExpression(c, tagName);
1089
+ const diagnostics = [];
1090
+ if (!checkTypeRelatedTo(c, tagType, elementTypeConstraint, c.assignableRelation, tagName, 1868 /* Diagnostics.Its_type_0_is_not_a_valid_JSX_element_type */, diagnostics))
1091
+ c.addDiagnostic(chainDiagnostic(diagnostics[0], 918 /* Diagnostics.X_0_cannot_be_used_as_a_JSX_component */, getTextOfNode(tagName)));
1092
+ }
1093
+ else
1094
+ checkJsxReturnAssignableToAppropriateBound(c, getJsxReferenceKind(c, node), getReturnTypeOfSignature(c, sig), node);
1095
+ }
1096
+ function checkJsxPreconditions(c, errorNode) {
1097
+ if (c.compilerOptions.jsx === undefined)
1098
+ c.error(errorNode, 1807 /* Diagnostics.Cannot_use_JSX_unless_the_jsx_flag_is_provided */);
1099
+ // A missing `JSX.Element` is the error type rather than absent, so TS2602 is never reported.
1100
+ }
1101
+ function checkJsxReturnAssignableToAppropriateBound(c, refKind, elemInstanceType, openingLikeElement) {
1102
+ const diagnostics = [];
1103
+ const tagName = getTagNameOf(openingLikeElement);
1104
+ if (refKind === 1 /* JsxReferenceKind.Function */) {
1105
+ const sfcReturnConstraint = getJsxStatelessElementTypeAt(c, openingLikeElement);
1106
+ if (sfcReturnConstraint !== undefined)
1107
+ checkTypeRelatedTo(c, elemInstanceType, sfcReturnConstraint, c.assignableRelation, tagName, 919 /* Diagnostics.Its_return_type_0_is_not_a_valid_JSX_element */, diagnostics);
1108
+ }
1109
+ else if (refKind === 0 /* JsxReferenceKind.Component */) {
1110
+ const classConstraint = getJsxElementClassTypeAt(c, openingLikeElement);
1111
+ if (classConstraint !== undefined)
1112
+ checkTypeRelatedTo(c, elemInstanceType, classConstraint, c.assignableRelation, tagName, 920 /* Diagnostics.Its_instance_type_0_is_not_a_valid_JSX_element */, diagnostics);
1113
+ }
1114
+ else {
1115
+ const sfcReturnConstraint = getJsxStatelessElementTypeAt(c, openingLikeElement);
1116
+ const classConstraint = getJsxElementClassTypeAt(c, openingLikeElement);
1117
+ if (sfcReturnConstraint === undefined || classConstraint === undefined)
1118
+ return;
1119
+ const combined = getUnionType(c, [sfcReturnConstraint, classConstraint]);
1120
+ checkTypeRelatedTo(c, elemInstanceType, combined, c.assignableRelation, tagName, 921 /* Diagnostics.Its_element_type_0_is_not_a_valid_JSX_element */, diagnostics);
1121
+ }
1122
+ if (diagnostics.length !== 0)
1123
+ c.addDiagnostic(chainDiagnostic(diagnostics[0], 918 /* Diagnostics.X_0_cannot_be_used_as_a_JSX_component */, getTextOfNode(tagName)));
1124
+ }
1125
+ /** Resolves the factory namespace, which must be in scope for the classic React transform. */
1126
+ function markJsxAliasReferenced(c, node) {
1127
+ if (getJsxNamespaceContainerForImplicitImport(c, node) !== undefined)
1128
+ return;
1129
+ const jsxFactoryRefErr = c.compilerOptions.jsx === JsxEmit.React
1130
+ ? 994 /* Diagnostics.This_JSX_tag_requires_0_to_be_in_scope_but_it_could_not_be_found */
1131
+ : undefined;
1132
+ const jsxFactoryNamespace = getJsxNamespace(c, node);
1133
+ const jsxFactoryLocation = isJsxOpeningLikeElement(node) ? getTagNameOf(node) : node;
1134
+ const shouldFactoryRefErr = c.compilerOptions.jsx !== JsxEmit.Preserve && c.compilerOptions.jsx !== JsxEmit.ReactNative;
1135
+ let flags = 111551 /* SymbolFlags.Value */;
1136
+ if (!shouldFactoryRefErr)
1137
+ flags &= ~384 /* SymbolFlags.Enum */;
1138
+ // `null` is allowed as the fragment factory.
1139
+ if (!(node.kind === 290 /* SyntaxKind.JsxOpeningFragment */ && jsxFactoryNamespace === 'null'))
1140
+ resolveName(c, jsxFactoryLocation, jsxFactoryNamespace, flags, jsxFactoryRefErr, true, false);
1141
+ if (node.kind === 290 /* SyntaxKind.JsxOpeningFragment */) {
1142
+ const file = getSourceFileOfNode(node);
1143
+ const entity = getJsxFactoryEntity(c, file);
1144
+ if (entity !== undefined)
1145
+ resolveName(c, jsxFactoryLocation, getText(getFirstIdentifier(entity)), flags, jsxFactoryRefErr, true, false);
1146
+ }
1147
+ }
1148
+ // ---- Grammar
1149
+ function checkGrammarJsxElement(c, node) {
1150
+ checkGrammarJsxName(c, getTagNameOf(node));
1151
+ checkGrammarTypeArguments(c, node, getTypeArgumentListOf(node));
1152
+ const seen = new Set();
1153
+ for (const attrNode of getAttributesOf(node).properties.nodes) {
1154
+ if (attrNode.kind === 294 /* SyntaxKind.JsxSpreadAttribute */)
1155
+ continue;
1156
+ const attr = attrNode;
1157
+ const textOfName = jsxNameText(attr.name);
1158
+ if (seen.has(textOfName))
1159
+ return grammarErrorOnNode(c, attr.name, 1805 /* Diagnostics.JSX_elements_cannot_have_multiple_attributes_with_the_same_name */);
1160
+ seen.add(textOfName);
1161
+ const initializer = attr.initializer;
1162
+ if (initializer !== undefined &&
1163
+ initializer.kind === 295 /* SyntaxKind.JsxExpression */ &&
1164
+ initializer.expression === undefined)
1165
+ return grammarErrorOnNode(c, initializer, 1804 /* Diagnostics.JSX_attributes_must_only_be_assigned_a_non_empty_expression */);
1166
+ }
1167
+ return false;
1168
+ }
1169
+ function checkGrammarJsxName(c, node) {
1170
+ if (node.kind === 212 /* SyntaxKind.PropertyAccessExpression */ &&
1171
+ node.expression.kind === 296 /* SyntaxKind.JsxNamespacedName */)
1172
+ return grammarErrorOnNode(c, node.expression, 776 /* Diagnostics.JSX_property_access_expressions_cannot_include_JSX_namespace_names */);
1173
+ if (node.kind === 296 /* SyntaxKind.JsxNamespacedName */ &&
1174
+ isJsxTransformEnabled(c) &&
1175
+ !isIntrinsicJsxName(node.namespace.text))
1176
+ return grammarErrorOnNode(c, node, 782 /* Diagnostics.React_components_cannot_include_JSX_namespace_names */);
1177
+ return false;
1178
+ }
1179
+ function checkGrammarTypeArguments(c, node, typeArguments) {
1180
+ if (typeArguments === undefined)
1181
+ return false;
1182
+ if (typeArguments.hasTrailingComma())
1183
+ return grammarErrorAtPos(c, typeArguments.nodes[0], typeArguments.end - 1, 1, 5 /* Diagnostics.Trailing_comma_not_allowed */);
1184
+ if (typeArguments.nodes.length === 0) {
1185
+ const file = getSourceFileOfNode(node);
1186
+ const start = typeArguments.pos - 1;
1187
+ const end = skipTrivia(file.text, typeArguments.end) + 1;
1188
+ return grammarErrorAtPos(c, file, start, end - start, 68 /* Diagnostics.Type_argument_list_cannot_be_empty */);
1189
+ }
1190
+ return false;
1191
+ }
1192
+ function checkGrammarJsxExpression(c, node) {
1193
+ const expression = node.expression;
1194
+ if (expression !== undefined &&
1195
+ expression.kind === 227 /* SyntaxKind.BinaryExpression */ &&
1196
+ expression.operatorToken.kind === 27 /* SyntaxKind.CommaToken */)
1197
+ return grammarErrorOnNode(c, expression, 1830 /* Diagnostics.JSX_expressions_may_not_use_the_comma_operator_Did_you_mean_to_write_an_array */);
1198
+ return false;
1199
+ }
1200
+ // ---- Contextual types
1201
+ export function getContextualTypeForJsxExpression(c, node, contextFlags) {
1202
+ const parent = node.parent;
1203
+ if (parent.kind === 292 /* SyntaxKind.JsxAttribute */ || parent.kind === 294 /* SyntaxKind.JsxSpreadAttribute */)
1204
+ return getContextualTypeEx(c, node, contextFlags);
1205
+ if (parent.kind === 285 /* SyntaxKind.JsxElement */)
1206
+ return getContextualTypeForChildJsxExpression(c, parent, node, contextFlags);
1207
+ return undefined;
1208
+ }
1209
+ export function getContextualTypeForJsxAttribute(c, attribute, contextFlags) {
1210
+ // While a function component's signature is tried, its attributes carry the parameter type.
1211
+ if (attribute.kind === 292 /* SyntaxKind.JsxAttribute */) {
1212
+ const attributesType = getApparentTypeOfContextualTypeEx(c, attribute.parent, contextFlags);
1213
+ if (attributesType === undefined || (attributesType.flags & 1 /* TypeFlags.Any */) !== 0)
1214
+ return undefined;
1215
+ return getTypeOfPropertyOfContextualType(c, attributesType, jsxNameText(attribute.name));
1216
+ }
1217
+ return getContextualTypeEx(c, attribute.parent, contextFlags);
1218
+ }
1219
+ export function getContextualJsxElementAttributesType(c, node, contextFlags) {
1220
+ if (node.kind === 287 /* SyntaxKind.JsxOpeningElement */) {
1221
+ // Contextual types of an element's attributes are pushed onto the element, which spans the children.
1222
+ // Cached contextual types were obtained without flags.
1223
+ const index = findContextualNode(c, node.parent, contextFlags === 0 /* ContextFlags.None */);
1224
+ if (index >= 0)
1225
+ return c.inferenceCaches.contextualTypes[index];
1226
+ }
1227
+ const signature = c.resolvedSignatures.get(node.id) === c.resolvingSignature
1228
+ ? c.resolvingSignature
1229
+ : getResolvedJsxSignature(c, node);
1230
+ return getEffectiveFirstArgumentForJsxSignature(c, signature, node);
1231
+ }
1232
+ function getContextualTypeForChildJsxExpression(c, node, child, contextFlags) {
1233
+ const element = node;
1234
+ const attributesType = getApparentTypeOfContextualTypeEx(c, element.openingElement.attributes, contextFlags);
1235
+ // Children are the `children` attribute (named by `JSX.ElementChildrenAttribute`).
1236
+ const jsxChildrenPropertyName = getJsxElementChildrenPropertyName(c, getJsxNamespaceAt(c, node));
1237
+ if (attributesType === undefined ||
1238
+ (attributesType.flags & 1 /* TypeFlags.Any */) !== 0 ||
1239
+ jsxChildrenPropertyName === "\uFFFEmissing" /* InternalSymbolName.Missing */ ||
1240
+ jsxChildrenPropertyName === '')
1241
+ return undefined;
1242
+ const realChildren = getSemanticJsxChildren(element.children.nodes);
1243
+ const childIndex = realChildren.indexOf(child);
1244
+ const childFieldType = getTypeOfPropertyOfContextualType(c, attributesType, jsxChildrenPropertyName);
1245
+ if (childFieldType === undefined)
1246
+ return undefined;
1247
+ if (realChildren.length === 1)
1248
+ return childFieldType;
1249
+ return mapTypeEx(c, childFieldType, (t) => (isArrayLikeType(c, t) ? getIndexedAccessType(c, t, getNumberLiteralType(c, childIndex)) : t), true);
1250
+ }
1251
+ export function isJsxAttributesContextSensitive(c, node) {
1252
+ for (const p of node.properties.nodes)
1253
+ if (isContextSensitive(c, p))
1254
+ return true;
1255
+ if (node.parent.kind === 287 /* SyntaxKind.JsxOpeningElement */)
1256
+ for (const child of node.parent.parent.children.nodes)
1257
+ if (isContextSensitive(c, child))
1258
+ return true;
1259
+ return false;
1260
+ }
1261
+ // ---- Elaboration
1262
+ /** A child of an element that an error can be reported on. */
1263
+ class JsxElaborationElement {
1264
+ errorNode;
1265
+ innerExpression;
1266
+ nameType;
1267
+ isText;
1268
+ constructor(errorNode, innerExpression, nameType,
1269
+ /** Text children report this message instead of a relation error. */
1270
+ isText) {
1271
+ this.errorNode = errorNode;
1272
+ this.innerExpression = innerExpression;
1273
+ this.nameType = nameType;
1274
+ this.isText = isText;
1275
+ }
1276
+ }
1277
+ function getElaborationElementForJsxChild(child, nameType) {
1278
+ switch (child.kind) {
1279
+ case 295 /* SyntaxKind.JsxExpression */:
1280
+ return new JsxElaborationElement(child, child.expression, nameType, false);
1281
+ case 11 /* SyntaxKind.JsxText */:
1282
+ // Whitespace-only text isn't a child.
1283
+ if (child.containsOnlyTriviaWhiteSpaces)
1284
+ return undefined;
1285
+ return new JsxElaborationElement(child, undefined, nameType, true);
1286
+ }
1287
+ return new JsxElaborationElement(child, child, nameType, false);
1288
+ }
1289
+ /** Reports attribute and children errors at the attributes and children themselves. */
1290
+ export function elaborateJsxComponents(c, node, source, target, relation, diagnosticOutput) {
1291
+ let reportedError = false;
1292
+ for (const prop of node.properties.nodes) {
1293
+ if (prop.kind === 294 /* SyntaxKind.JsxSpreadAttribute */)
1294
+ continue;
1295
+ const attr = prop;
1296
+ const name = jsxNameText(attr.name);
1297
+ if (isHyphenatedJsxName(name))
1298
+ continue;
1299
+ const nameType = getStringLiteralType(c, name);
1300
+ reportedError =
1301
+ elaborateElement(c, source, target, relation, attr.name, attr.initializer, nameType, undefined, undefined, [], diagnosticOutput) || reportedError;
1302
+ }
1303
+ const opening = node.parent;
1304
+ if (opening.kind !== 287 /* SyntaxKind.JsxOpeningElement */ || opening.parent.kind !== 285 /* SyntaxKind.JsxElement */)
1305
+ return reportedError;
1306
+ const containingElement = opening.parent;
1307
+ let childrenPropName = getJsxElementChildrenPropertyName(c, getJsxNamespaceAt(c, node));
1308
+ if (childrenPropName === "\uFFFEmissing" /* InternalSymbolName.Missing */)
1309
+ childrenPropName = 'children';
1310
+ const childrenNameType = getStringLiteralType(c, childrenPropName);
1311
+ const childrenTargetType = getIndexedAccessType(c, target, childrenNameType);
1312
+ const validChildren = getSemanticJsxChildren(containingElement.children.nodes);
1313
+ if (validChildren.length === 0)
1314
+ return reportedError;
1315
+ const moreThanOneRealChildren = validChildren.length > 1;
1316
+ let arrayLikeTargetParts;
1317
+ let nonArrayLikeTargetParts;
1318
+ const iterableType = getGlobalIterableType(c, false);
1319
+ if (iterableType !== c.emptyGenericType) {
1320
+ const anyIterable = createTypeFromGenericGlobalType(c, iterableType, [c.anyType, c.anyType, c.anyType]);
1321
+ arrayLikeTargetParts = filterType(c, childrenTargetType, (t) => isTypeAssignableTo(c, t, anyIterable));
1322
+ nonArrayLikeTargetParts = filterType(c, childrenTargetType, (t) => !isTypeAssignableTo(c, t, anyIterable));
1323
+ }
1324
+ else {
1325
+ arrayLikeTargetParts = filterType(c, childrenTargetType, (t) => isArrayOrTupleLikeType(c, t));
1326
+ nonArrayLikeTargetParts = filterType(c, childrenTargetType, (t) => !isArrayOrTupleLikeType(c, t));
1327
+ }
1328
+ const textMessage = 879 /* Diagnostics.X_0_components_don_t_accept_text_as_child_elements_Text_in_JSX_has_the_type_string_but_the_expected_type_of_1_is_2 */;
1329
+ const textArgs = [
1330
+ getTextOfNode(opening.kind === 287 /* SyntaxKind.JsxOpeningElement */ ? getTagNameOf(opening) : opening),
1331
+ childrenPropName,
1332
+ typeToString(c, childrenTargetType),
1333
+ ];
1334
+ if (moreThanOneRealChildren) {
1335
+ if (arrayLikeTargetParts !== c.neverType) {
1336
+ const realSource = createTupleType(c, checkJsxChildren(c, containingElement, 0 /* CheckMode.Normal */));
1337
+ const children = [];
1338
+ let memberOffset = 0;
1339
+ const allChildren = containingElement.children.nodes;
1340
+ for (let i = 0; i < allChildren.length; i++) {
1341
+ const e = getElaborationElementForJsxChild(allChildren[i], getNumberLiteralType(c, i - memberOffset));
1342
+ if (e !== undefined)
1343
+ children.push(e);
1344
+ else
1345
+ memberOffset++;
1346
+ }
1347
+ reportedError =
1348
+ elaborateIterableOrArrayLikeTargetElementwise(c, children, realSource, arrayLikeTargetParts, relation, textMessage, textArgs, diagnosticOutput) || reportedError;
1349
+ }
1350
+ else if (!isTypeRelatedTo(c, getIndexedAccessType(c, source, childrenNameType), childrenTargetType, relation)) {
1351
+ // Arity errors are reported both directly and through the output.
1352
+ const diagnostic = c.error(containingElement.openingElement.tagName, 878 /* Diagnostics.This_JSX_tag_s_0_prop_expects_a_single_child_of_type_1_but_multiple_children_were_provided */, childrenPropName, typeToString(c, childrenTargetType));
1353
+ reportDiagnostic(c, diagnostic, diagnosticOutput);
1354
+ reportedError = true;
1355
+ }
1356
+ }
1357
+ else if (nonArrayLikeTargetParts !== c.neverType) {
1358
+ const e = getElaborationElementForJsxChild(validChildren[0], childrenNameType);
1359
+ if (e !== undefined)
1360
+ reportedError =
1361
+ elaborateElement(c, source, target, relation, e.errorNode, e.innerExpression, e.nameType, undefined, e.isText ? textMessage : undefined, textArgs, diagnosticOutput) || reportedError;
1362
+ }
1363
+ else if (!isTypeRelatedTo(c, getIndexedAccessType(c, source, childrenNameType), childrenTargetType, relation)) {
1364
+ const diagnostic = c.error(containingElement.openingElement.tagName, 877 /* Diagnostics.This_JSX_tag_s_0_prop_expects_type_1_which_requires_multiple_children_but_only_a_single_child_was_provided */, childrenPropName, typeToString(c, childrenTargetType));
1365
+ reportDiagnostic(c, diagnostic, diagnosticOutput);
1366
+ reportedError = true;
1367
+ }
1368
+ return reportedError;
1369
+ }
1370
+ function elaborateIterableOrArrayLikeTargetElementwise(c, elements, source, target, relation, textMessage, textArgs, diagnosticOutput) {
1371
+ const tupleOrArrayLikeTargetParts = filterType(c, target, (t) => isArrayOrTupleLikeType(c, t));
1372
+ const nonTupleOrArrayLikeTargetParts = filterType(c, target, (t) => !isArrayOrTupleLikeType(c, t));
1373
+ // A non-array-like part means `Iterable` exists.
1374
+ const iterationType = nonTupleOrArrayLikeTargetParts !== c.neverType
1375
+ ? getIterationTypeOfIterable(c, 13 /* IterationUse.ForOf */, 0 /* IterationTypeKind.Yield */, nonTupleOrArrayLikeTargetParts, undefined)
1376
+ : undefined;
1377
+ let reportedError = false;
1378
+ for (const e of elements) {
1379
+ let targetPropType = iterationType;
1380
+ const targetIndexedPropType = tupleOrArrayLikeTargetParts !== c.neverType
1381
+ ? getBestMatchIndexedAccessTypeOrUndefined(c, source, tupleOrArrayLikeTargetParts, e.nameType)
1382
+ : undefined;
1383
+ if (targetIndexedPropType !== undefined && (targetIndexedPropType.flags & 33554432 /* TypeFlags.IndexedAccess */) === 0)
1384
+ targetPropType =
1385
+ iterationType !== undefined ? getUnionType(c, [iterationType, targetIndexedPropType]) : targetIndexedPropType;
1386
+ if (targetPropType === undefined)
1387
+ continue;
1388
+ let sourcePropType = getIndexedAccessTypeOrUndefined(c, source, e.nameType, 0 /* AccessFlags.None */);
1389
+ if (sourcePropType === undefined)
1390
+ continue;
1391
+ if (checkTypeRelatedTo(c, sourcePropType, targetPropType, relation, undefined, undefined, undefined))
1392
+ continue;
1393
+ const next = e.innerExpression;
1394
+ const elaborated = next !== undefined &&
1395
+ elaborateError(c, next, sourcePropType, targetPropType, relation, undefined, diagnosticOutput);
1396
+ reportedError = true;
1397
+ if (elaborated)
1398
+ continue;
1399
+ // Report on the child itself, with the expression's type when there is one.
1400
+ const specificSource = next !== undefined
1401
+ ? checkExpressionForMutableLocationWithContextualType(c, next, sourcePropType)
1402
+ : sourcePropType;
1403
+ if (e.isText) {
1404
+ reportDiagnostic(c, createDiagnosticForNode(e.errorNode, textMessage, textArgs), diagnosticOutput);
1405
+ continue;
1406
+ }
1407
+ if (c.exactOptionalPropertyTypes && isExactOptionalPropertyMismatch(c, specificSource, targetPropType)) {
1408
+ reportDiagnostic(c, createDiagnosticForNode(e.errorNode, 583 /* Diagnostics.Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefined_to_the_type_of_the_target */, [typeToString(c, specificSource), typeToString(c, targetPropType)]), diagnosticOutput);
1409
+ continue;
1410
+ }
1411
+ const propName = getPropertyNameFromIndex(e.nameType);
1412
+ const targetProp = propName !== undefined ? getPropertyOfType(c, tupleOrArrayLikeTargetParts, propName) : undefined;
1413
+ const sourceProp = propName !== undefined ? getPropertyOfType(c, source, propName) : undefined;
1414
+ const targetIsOptional = targetProp !== undefined && (targetProp.flags & 16777216 /* SymbolFlags.Optional */) !== 0;
1415
+ const sourceIsOptional = sourceProp !== undefined && (sourceProp.flags & 16777216 /* SymbolFlags.Optional */) !== 0;
1416
+ targetPropType = removeMissingType(c, targetPropType, targetIsOptional);
1417
+ sourcePropType = removeMissingType(c, sourcePropType, targetIsOptional && sourceIsOptional);
1418
+ const result = checkTypeRelatedTo(c, specificSource, targetPropType, relation, e.errorNode, undefined, diagnosticOutput);
1419
+ if (result && specificSource !== sourcePropType)
1420
+ checkTypeRelatedTo(c, sourcePropType, targetPropType, relation, e.errorNode, undefined, diagnosticOutput);
1421
+ }
1422
+ return reportedError;
1423
+ }
1424
+ /** Suggests `htmlFor` for `for`, `className` for `class`, or a similar property name. */
1425
+ export function getSuggestedSymbolForNonexistentJSXAttribute(c, name, containingType) {
1426
+ const properties = getPropertiesOfType(c, containingType);
1427
+ const jsxSpecific = name === 'for' ? 'htmlFor' : name === 'class' ? 'className' : '';
1428
+ if (jsxSpecific !== '')
1429
+ for (const p of properties)
1430
+ if (p.name === jsxSpecific)
1431
+ return p;
1432
+ return getSpellingSuggestionForName(c, name, properties, 111551 /* SymbolFlags.Value */);
1433
+ }