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,995 @@
1
+ // Checker queries for language services and the API: the symbol or type at a node, constant
2
+ // values, alias targets and module exports, like tsgo's checker services. These answer *some*
3
+ // symbol or type for any node; the checker itself uses the precise functions they call.
4
+ import { getArguments, getExpression, getInitializer, getName, getParameters, getPropertyName, getSymbol, getTagName, getText, getType, getTypeArguments, isDeclarationNode, NodeVisitor, } from './ast.js';
5
+ import { compareNodePositions, getExternalModuleName, isAssignmentOperator, isFunctionLike, isImportCall, isLiteralImportTypeNode, isStringLiteralLike, isTypeDeclaration, nodeIsMissing, } from './ast-utilities.js';
6
+ import { getNameOfDeclaration, getSourceFileOfNode, getThisContainer, isAssignmentTarget, isBindableObjectDefinePropertyCall, isClassLike, isEnumConst, isExternalOrCommonJSModule, isVariableDeclarationInitializedToRequire, } from './binder-utilities.js';
7
+ import { getResolvedSignature, tryGetRestTypeOfSignature } from './checker-calls.js';
8
+ import { getContextualType } from './checker-contextual.js';
9
+ import { computeEnumMemberValues, getBaseTypes, getDeclaredTypeOfClassOrInterface, getDeclaredTypeOfSymbol, isEntityNameExpression, } from './checker-declared-types.js';
10
+ import { checkExpression, checkExpressionCached, checkPropertyAccessExpression, checkQualifiedName, isThisInTypeQuery, } from './checker-expressions.js';
11
+ import { getIntrinsicTagSymbol, isJsxIntrinsicTagName } from './checker-jsx.js';
12
+ import { getApplicableIndexInfo, getIndexInfosOfType, getPropertyOfType, getTypeWithThisArgument, isApplicableIndexType, } from './checker-members.js';
13
+ import { checkNewTargetMetaProperty, getExternalModuleMember, getHostSignatureFromJSDoc, getSymbolOfPartOfRightHandSideOfImportEquals, getTargetOfAliasDeclaration, resolveExternalModuleName, resolveJSDocMemberName, } from './checker-modules.js';
14
+ import { getSymbolHasInstanceMethodOfObjectType } from './checker-operators.js';
15
+ import { getSymbolForPrivateIdentifierExpression } from './checker-property-access.js';
16
+ import { getSignatureFromDeclaration } from './checker-signatures.js';
17
+ import { getAnnotatedAccessorTypeNode, getNonMissingTypeOfSymbol, getTypeForVariableLikeDeclaration, getTypeOfSymbol, getWriteTypeOfAccessors, getWriteTypeOfSymbol, removeOptionalTypeMarker, } from './checker-symbol-types.js';
18
+ import { getCachedGlobalType, getDeclarationOfAliasSymbol, getExportsOfModule, getExportsOfSymbol, getExportSymbolOfValueSymbolIfExported, getMergedSymbol, getSymbolOfDeclaration, isReservedMemberName, resolveEntityName, } from './checker-symbols.js';
19
+ import { createAnonymousType, getRegularTypeOfLiteralType, isErrorType } from './checker-type-factory.js';
20
+ import { getLiteralTypeFromPropertyName } from './checker-type-operators.js';
21
+ import { getTypeFromThisTypeNode, getTypeFromTypeNode, getUnresolvedSymbolForEntityName, } from './checker-type-nodes.js';
22
+ import { getNodeAtPosition } from './parser.js';
23
+ import { getSymbolId, setDeclarations } from './symbol.js';
24
+ // ---- Symbols at locations
25
+ /** The symbol a name, keyword or literal at `node` refers to. */
26
+ export function getSymbolAtLocation(c, node) {
27
+ // API lookups shouldn't report errors.
28
+ return getSymbolAtLocationWorker(c, getReparsedNodeForNode(node), true);
29
+ }
30
+ /** The symbol a node refers to, reporting resolution errors unless `ignoreErrors`. */
31
+ export function getSymbolAtLocationWorker(c, node, ignoreErrors) {
32
+ if (node.kind === 307 /* SyntaxKind.SourceFile */)
33
+ return isExternalOrCommonJSModule(node) ? getSymbolOfDeclaration(c, node) : undefined;
34
+ const parent = node.parent;
35
+ const grandParent = parent.parent;
36
+ // Semantic questions inside `with` blocks have no answer.
37
+ if ((node.flags & 16777216 /* NodeFlags.InWithStatement */) !== 0)
38
+ return undefined;
39
+ if (isDeclarationNameOrImportPropertyName(node)) {
40
+ const parentSymbol = getSymbolOfDeclaration(c, parent);
41
+ if (isImportOrExportSpecifier(parent) && getPropertyName(parent) === node)
42
+ return parentSymbol !== undefined ? getImmediateAliasedSymbol(c, parentSymbol) : undefined;
43
+ return parentSymbol;
44
+ }
45
+ if (isLiteralComputedPropertyDeclarationName(node))
46
+ return getSymbolOfDeclaration(c, grandParent);
47
+ if (node.kind === 79 /* SyntaxKind.Identifier */) {
48
+ if (isInRightSideOfImportOrExportAssignment(node))
49
+ return getSymbolOfNameOrPropertyAccessExpression(c, node);
50
+ if (parent.kind === 209 /* SyntaxKind.BindingElement */ &&
51
+ grandParent.kind === 207 /* SyntaxKind.ObjectBindingPattern */ &&
52
+ node === getPropertyName(parent)) {
53
+ const property = getPropertyOfType(c, getTypeOfNode(c, grandParent), getText(node));
54
+ if (property !== undefined)
55
+ return property;
56
+ }
57
+ else if (parent.kind === 237 /* SyntaxKind.MetaProperty */ && parent.name === node) {
58
+ const meta = parent;
59
+ // `target` in `new.target`.
60
+ if (meta.keywordToken === 104 /* SyntaxKind.NewKeyword */ && getText(node) === 'target')
61
+ return checkNewTargetMetaProperty(c, parent).symbol;
62
+ // `meta` in `import.meta` is the declarationless `meta` member of a synthetic type.
63
+ if (meta.keywordToken === 101 /* SyntaxKind.ImportKeyword */ && getText(node) === 'meta')
64
+ return getGlobalImportMetaExpressionType(c).symbol.members.get('meta');
65
+ // Other meta properties are invalid syntax.
66
+ return undefined;
67
+ }
68
+ else if (parent.kind === 333 /* SyntaxKind.JSDocParameterTag */ && getName(parent) === node) {
69
+ const fn = getNodeAtPosition(getSourceFileOfNode(node), node.pos, false);
70
+ if (isFunctionLike(fn)) {
71
+ for (const param of getParameters(fn).nodes) {
72
+ const name = getName(param);
73
+ if (name !== undefined && name.kind === 79 /* SyntaxKind.Identifier */ && getText(name) === getText(node))
74
+ return getSymbolOfDeclaration(c, param);
75
+ }
76
+ }
77
+ }
78
+ }
79
+ switch (node.kind) {
80
+ case 79 /* SyntaxKind.Identifier */:
81
+ case 80 /* SyntaxKind.PrivateIdentifier */:
82
+ case 212 /* SyntaxKind.PropertyAccessExpression */:
83
+ case 167 /* SyntaxKind.QualifiedName */:
84
+ if (!isThisInTypeQuery(node))
85
+ return getSymbolOfNameOrPropertyAccessExpression(c, node);
86
+ return getSymbolOfThis(c, node);
87
+ case 109 /* SyntaxKind.ThisKeyword */:
88
+ return getSymbolOfThis(c, node);
89
+ case 198 /* SyntaxKind.ThisType */:
90
+ return getTypeFromThisTypeNode(c, node).symbol;
91
+ case 107 /* SyntaxKind.SuperKeyword */:
92
+ return checkExpression(c, node).symbol;
93
+ case 136 /* SyntaxKind.ConstructorKeyword */:
94
+ // The keyword of a constructor overload.
95
+ return parent.kind === 177 /* SyntaxKind.Constructor */ ? getSymbol(parent.parent) : undefined;
96
+ case 10 /* SyntaxKind.StringLiteral */:
97
+ case 14 /* SyntaxKind.NoSubstitutionTemplateLiteral */:
98
+ // Module names: `import x = require("m")`, import and export declarations, `require("m")`,
99
+ // `import("m")` and `import("m")` types.
100
+ if ((grandParent !== undefined &&
101
+ isExternalModuleImportEqualsDeclaration(grandParent) &&
102
+ grandParent.moduleReference.expression === node) ||
103
+ ((parent.kind === 273 /* SyntaxKind.ImportDeclaration */ ||
104
+ parent.kind === 346 /* SyntaxKind.JSImportDeclaration */ ||
105
+ parent.kind === 279 /* SyntaxKind.ExportDeclaration */) &&
106
+ getExternalModuleName(parent) === node) ||
107
+ (grandParent !== undefined && isVariableDeclarationInitializedToRequire(grandParent)) ||
108
+ isImportCall(parent) ||
109
+ (parent.kind === 202 /* SyntaxKind.LiteralType */ &&
110
+ grandParent !== undefined &&
111
+ isLiteralImportTypeNode(grandParent) &&
112
+ grandParent.argument === parent))
113
+ return resolveExternalModuleName(c, node, node, ignoreErrors);
114
+ if (parent.kind === 214 /* SyntaxKind.CallExpression */ &&
115
+ isBindableObjectDefinePropertyCall(parent) &&
116
+ getArguments(parent).nodes[1] === node)
117
+ return getSymbolOfDeclaration(c, parent);
118
+ return getSymbolOfLiteralIndex(c, node);
119
+ case 8 /* SyntaxKind.NumericLiteral */:
120
+ return getSymbolOfLiteralIndex(c, node);
121
+ case 89 /* SyntaxKind.DefaultKeyword */:
122
+ case 99 /* SyntaxKind.FunctionKeyword */:
123
+ case 38 /* SyntaxKind.EqualsGreaterThanToken */:
124
+ case 85 /* SyntaxKind.ClassKeyword */:
125
+ return getSymbolOfDeclaration(c, parent);
126
+ case 206 /* SyntaxKind.ImportType */:
127
+ if (isLiteralImportTypeNode(node))
128
+ return getSymbolAtLocationWorker(c, node.argument.literal, ignoreErrors);
129
+ return undefined;
130
+ case 94 /* SyntaxKind.ExportKeyword */:
131
+ return parent.kind === 278 /* SyntaxKind.ExportAssignment */ ? getSymbol(parent) : undefined;
132
+ case 101 /* SyntaxKind.ImportKeyword */:
133
+ if (parent.kind === 237 /* SyntaxKind.MetaProperty */ && parent.name.text === 'defer')
134
+ return undefined;
135
+ return parent.kind === 237 /* SyntaxKind.MetaProperty */ ? checkMetaPropertyKeyword(c).symbol : undefined;
136
+ case 104 /* SyntaxKind.NewKeyword */:
137
+ return parent.kind === 237 /* SyntaxKind.MetaProperty */ ? checkMetaPropertyKeyword(c).symbol : undefined;
138
+ case 103 /* SyntaxKind.InstanceOfKeyword */:
139
+ if (parent.kind === 227 /* SyntaxKind.BinaryExpression */) {
140
+ const t = checkExpressionCached(c, parent.right);
141
+ const hasInstanceMethodType = getSymbolHasInstanceMethodOfObjectType(c, t);
142
+ if (hasInstanceMethodType !== undefined && hasInstanceMethodType.symbol !== undefined)
143
+ return hasInstanceMethodType.symbol;
144
+ return t.symbol;
145
+ }
146
+ return undefined;
147
+ case 237 /* SyntaxKind.MetaProperty */:
148
+ return checkExpression(c, node).symbol;
149
+ case 296 /* SyntaxKind.JsxNamespacedName */:
150
+ if (isJsxTagName(node) && isJsxIntrinsicTagName(node)) {
151
+ const symbol = getIntrinsicTagSymbol(c, parent);
152
+ return symbol === c.unknownSymbol ? undefined : symbol;
153
+ }
154
+ return undefined;
155
+ }
156
+ return undefined;
157
+ }
158
+ /** The symbol of `this`: the function's `this` parameter, or the type `this` refers to. */
159
+ function getSymbolOfThis(c, node) {
160
+ const container = getThisContainer(node, false, false);
161
+ if (isFunctionLike(container)) {
162
+ const signature = getSignatureFromDeclaration(c, container);
163
+ if (signature.thisParameter !== undefined)
164
+ return signature.thisParameter;
165
+ }
166
+ if (isInExpressionContext(node))
167
+ return checkExpression(c, node).symbol;
168
+ return getTypeFromThisTypeNode(c, node).symbol;
169
+ }
170
+ /** The property a literal index refers to, in `o["x"]` or `T["x"]`. */
171
+ function getSymbolOfLiteralIndex(c, node) {
172
+ const parent = node.parent;
173
+ let objectType;
174
+ if (parent.kind === 213 /* SyntaxKind.ElementAccessExpression */) {
175
+ if (parent.argumentExpression === node)
176
+ objectType = checkExpressionCached(c, parent.expression);
177
+ }
178
+ else if (parent.kind === 202 /* SyntaxKind.LiteralType */ && parent.parent.kind === 200 /* SyntaxKind.IndexedAccessType */)
179
+ objectType = getTypeFromTypeNode(c, parent.parent.objectType);
180
+ return objectType !== undefined ? getPropertyOfType(c, objectType, getText(node)) : undefined;
181
+ }
182
+ function getSymbolOfNameOrPropertyAccessExpression(c, nameIn) {
183
+ let name = nameIn;
184
+ if (isDeclarationName(name))
185
+ return getSymbolOfDeclaration(c, name.parent);
186
+ if (name.parent.kind === 278 /* SyntaxKind.ExportAssignment */ && isEntityNameExpression(name)) {
187
+ // An entity name that doesn't resolve as one may still check as a property access.
188
+ const meaning = 111551 /* SymbolFlags.Value */ | 788968 /* SymbolFlags.Type */ | 1920 /* SymbolFlags.Namespace */ | 2097152 /* SymbolFlags.Alias */;
189
+ const success = resolveEntityName(c, name, meaning, true, false, undefined);
190
+ if (success !== undefined && success !== c.unknownSymbol)
191
+ return success;
192
+ }
193
+ else if (isEntityName(name) && isInRightSideOfImportOrExportAssignment(name)) {
194
+ // Export assignments were handled above, so this is an import.
195
+ return getSymbolOfPartOfRightHandSideOfImportEquals(c, name);
196
+ }
197
+ if (isEntityName(name)) {
198
+ const possibleImportNode = isImportTypeQualifierPart(name);
199
+ if (possibleImportNode !== undefined) {
200
+ getTypeFromTypeNode(c, possibleImportNode);
201
+ const symbol = c.resolvedSymbols.get(name.id);
202
+ return symbol === c.unknownSymbol ? undefined : symbol;
203
+ }
204
+ }
205
+ while (isRightSideOfQualifiedNameOrPropertyAccess(name))
206
+ name = name.parent;
207
+ if (isInNameOfExpressionWithTypeArguments(name)) {
208
+ let meaning;
209
+ if (name.parent.kind === 234 /* SyntaxKind.ExpressionWithTypeArguments */) {
210
+ // `extends Bar<T>` in an interface is a type, `foo<T>` a value, and a class `extends` both.
211
+ meaning = isPartOfTypeNode(name) ? 788968 /* SymbolFlags.Type */ : 111551 /* SymbolFlags.Value */;
212
+ if (isExpressionWithTypeArgumentsInClassExtendsClause(name.parent))
213
+ meaning |= 111551 /* SymbolFlags.Value */;
214
+ }
215
+ else
216
+ meaning = 1920 /* SymbolFlags.Namespace */;
217
+ meaning |= 2097152 /* SymbolFlags.Alias */;
218
+ const entityNameSymbol = isEntityNameExpression(name)
219
+ ? resolveEntityName(c, name, meaning, true, false, undefined)
220
+ : undefined;
221
+ if (entityNameSymbol !== undefined)
222
+ return entityNameSymbol;
223
+ }
224
+ if (isExpressionNode(name)) {
225
+ // A missing entity name.
226
+ if (nodeIsMissing(name))
227
+ return undefined;
228
+ const isJSDoc = isJSDocNameReferenceContext(name);
229
+ if (name.kind === 79 /* SyntaxKind.Identifier */) {
230
+ if (isJsxTagName(name) && isJsxIntrinsicTagName(name)) {
231
+ const symbol = getIntrinsicTagSymbol(c, name.parent);
232
+ return symbol === c.unknownSymbol ? undefined : symbol;
233
+ }
234
+ const meaning = isJSDoc ? 111551 /* SymbolFlags.Value */ | 788968 /* SymbolFlags.Type */ | 1920 /* SymbolFlags.Namespace */ : 111551 /* SymbolFlags.Value */;
235
+ const location = isJSDoc ? getHostSignatureFromJSDoc(name) : undefined;
236
+ let result = resolveEntityName(c, name, meaning, true, true, location);
237
+ if (result === undefined && isJSDoc) {
238
+ // Unqualified references to static members and instance members of a class or interface.
239
+ let container = name.parent;
240
+ while (container !== undefined && !isClassOrInterfaceLike(container))
241
+ container = container.parent;
242
+ if (container !== undefined) {
243
+ const symbol = getSymbolOfDeclaration(c, container);
244
+ const member = getExportsOfSymbol(c, symbol).get(getText(name));
245
+ result =
246
+ member !== undefined && (member.flags & meaning) !== 0
247
+ ? getMergedSymbol(c, member)
248
+ : getPropertyOfType(c, getDeclaredTypeOfSymbol(c, symbol), getText(name));
249
+ }
250
+ }
251
+ return result;
252
+ }
253
+ if (name.kind === 80 /* SyntaxKind.PrivateIdentifier */)
254
+ return getSymbolForPrivateIdentifierExpression(c, name);
255
+ if (name.kind === 212 /* SyntaxKind.PropertyAccessExpression */ || name.kind === 167 /* SyntaxKind.QualifiedName */) {
256
+ const cached = c.resolvedSymbols.get(name.id);
257
+ if (cached !== undefined)
258
+ return cached;
259
+ if (name.kind === 212 /* SyntaxKind.PropertyAccessExpression */) {
260
+ const access = name;
261
+ checkPropertyAccessExpression(c, access, false);
262
+ if (c.resolvedSymbols.get(name.id) === undefined && access.name.kind !== 80 /* SyntaxKind.PrivateIdentifier */)
263
+ c.resolvedSymbols.set(name.id, getApplicableIndexSymbol(c, checkExpressionCached(c, access.expression), getLiteralTypeFromPropertyName(c, access.name) ?? c.errorType));
264
+ }
265
+ else
266
+ checkQualifiedName(c, name);
267
+ if (c.resolvedSymbols.get(name.id) === undefined && isJSDoc && name.kind === 167 /* SyntaxKind.QualifiedName */)
268
+ return resolveJSDocMemberName(c, name);
269
+ return c.resolvedSymbols.get(name.id);
270
+ }
271
+ }
272
+ else if (isEntityName(name) && isTypeReferenceIdentifier(name)) {
273
+ const meaning = name.parent.kind === 184 /* SyntaxKind.TypeReference */ ? 788968 /* SymbolFlags.Type */ : 1920 /* SymbolFlags.Namespace */;
274
+ const symbol = resolveEntityName(c, name, meaning, true, true, undefined);
275
+ if (symbol !== undefined && symbol !== c.unknownSymbol)
276
+ return symbol;
277
+ return getUnresolvedSymbolForEntityName(c, name);
278
+ }
279
+ if (name.parent.kind === 183 /* SyntaxKind.TypePredicate */)
280
+ return resolveEntityName(c, name, 1 /* SymbolFlags.FunctionScopedVariable */, true, false, undefined);
281
+ return undefined;
282
+ }
283
+ /** A property symbol for the index signatures of `t` that apply to `keyType`, made once per signature. */
284
+ function getApplicableIndexSymbol(c, t, keyType) {
285
+ const info = getApplicableIndexInfo(c, t, keyType);
286
+ if (info === undefined || info === c.anyBaseTypeIndexInfo)
287
+ return undefined;
288
+ if (info.indexSymbol === undefined) {
289
+ const declarations = [];
290
+ if (info.declaration !== undefined)
291
+ declarations.push(info.declaration);
292
+ else
293
+ for (const other of getIndexInfosOfType(c, t))
294
+ if (other.declaration !== undefined && isApplicableIndexType(c, keyType, other.keyType))
295
+ declarations.push(other.declaration);
296
+ if (declarations.length !== 0) {
297
+ const symbol = c.newSymbolWithCheckFlags(4 /* SymbolFlags.Property */, "\uFFFEindex" /* InternalSymbolName.Index */, 8388608 /* CheckFlags.IndexSymbol */);
298
+ setDeclarations(symbol, declarations);
299
+ symbol.valueDeclaration = declarations[0];
300
+ symbol.parent = t.symbol;
301
+ c.symbolTypes.set(getSymbolId(symbol), info.valueType);
302
+ info.indexSymbol = symbol;
303
+ }
304
+ }
305
+ return info.indexSymbol;
306
+ }
307
+ /** The type of `import.meta` as an expression: `{ meta: ImportMeta }`. */
308
+ function getGlobalImportMetaExpressionType(c) {
309
+ let t = c.importMetaExpressionType;
310
+ if (t === undefined) {
311
+ const symbol = c.newSymbol(0 /* SymbolFlags.None */, 'ImportMetaExpression');
312
+ const metaProperty = c.newSymbolWithCheckFlags(4 /* SymbolFlags.Property */, 'meta', 8 /* CheckFlags.Readonly */);
313
+ metaProperty.parent = symbol;
314
+ c.symbolTypes.set(getSymbolId(metaProperty), getCachedGlobalType(c, 'ImportMeta', 0, true));
315
+ const members = new Map();
316
+ members.set('meta', metaProperty);
317
+ symbol.members = members;
318
+ t = createAnonymousType(c, symbol, members, [], [], []);
319
+ c.importMetaExpressionType = t;
320
+ }
321
+ return t;
322
+ }
323
+ /** The type of the `import` or `new` keyword of a meta property, which has none. */
324
+ function checkMetaPropertyKeyword(c) {
325
+ return c.errorType;
326
+ }
327
+ // ---- Types at locations
328
+ /** The type of the expression, type node or declaration at `node`. */
329
+ export function getTypeAtLocation(c, node) {
330
+ return getTypeOfNode(c, getReparsedNodeForNode(node));
331
+ }
332
+ function getTypeOfNode(c, node) {
333
+ if (node.kind === 307 /* SyntaxKind.SourceFile */ && !isExternalOrCommonJSModule(node))
334
+ return c.errorType;
335
+ // Semantic questions inside `with` blocks have no answer.
336
+ if ((node.flags & 16777216 /* NodeFlags.InWithStatement */) !== 0)
337
+ return c.errorType;
338
+ const heritage = getClassOfHeritageExpression(node);
339
+ const classType = heritage !== undefined ? getDeclaredTypeOfClassOrInterface(c, getSymbolOfDeclaration(c, heritage)) : undefined;
340
+ if (isPartOfTypeNode(node)) {
341
+ const typeFromTypeNode = getTypeFromTypeNode(c, node);
342
+ return classType !== undefined
343
+ ? getTypeWithThisArgument(c, typeFromTypeNode, classType.thisType, false)
344
+ : typeFromTypeNode;
345
+ }
346
+ if (isExpressionNode(node))
347
+ return getRegularTypeOfExpression(c, node);
348
+ if (classType !== undefined && !isImplementsExpression(node)) {
349
+ // An expression with type arguments in a class `extends` clause is the base type.
350
+ const baseTypes = getBaseTypes(c, classType);
351
+ return baseTypes.length > 0 ? getTypeWithThisArgument(c, baseTypes[0], classType.thisType, false) : c.errorType;
352
+ }
353
+ if (isTypeDeclaration(node))
354
+ return getDeclaredTypeOfSymbol(c, getSymbolOfDeclaration(c, node));
355
+ if (isTypeDeclarationName(node)) {
356
+ const symbol = getSymbolAtLocationWorker(c, node, false);
357
+ return symbol !== undefined ? getDeclaredTypeOfSymbol(c, symbol) : c.errorType;
358
+ }
359
+ if (node.kind === 209 /* SyntaxKind.BindingElement */)
360
+ return getTypeForVariableLikeDeclaration(c, node, true) ?? c.errorType;
361
+ if (isDeclaration(node)) {
362
+ const symbol = getSymbolOfDeclaration(c, node);
363
+ return symbol !== undefined ? getTypeOfSymbol(c, symbol) : c.errorType;
364
+ }
365
+ if (isDeclarationNameOrImportPropertyName(node)) {
366
+ const symbol = getSymbolAtLocationWorker(c, node, false);
367
+ return symbol !== undefined ? getTypeOfSymbol(c, symbol) : c.errorType;
368
+ }
369
+ if (isBindingPattern(node))
370
+ return getTypeForVariableLikeDeclaration(c, node.parent, true) ?? c.errorType;
371
+ if (isInRightSideOfImportOrExportAssignment(node)) {
372
+ const symbol = getSymbolAtLocationWorker(c, node, false);
373
+ if (symbol !== undefined) {
374
+ const declaredType = getDeclaredTypeOfSymbol(c, symbol);
375
+ return !isErrorType(c, declaredType) ? declaredType : getTypeOfSymbol(c, symbol);
376
+ }
377
+ }
378
+ const parent = node.parent;
379
+ if (parent !== undefined &&
380
+ parent.kind === 237 /* SyntaxKind.MetaProperty */ &&
381
+ parent.keywordToken === node.kind)
382
+ return checkMetaPropertyKeyword(c);
383
+ if (node.kind === 301 /* SyntaxKind.ImportAttributes */)
384
+ return getCachedGlobalType(c, 'ImportAttributes', 0, true);
385
+ return c.errorType;
386
+ }
387
+ function getRegularTypeOfExpression(c, node) {
388
+ const expr = isRightSideOfQualifiedNameOrPropertyAccess(node) ? node.parent : node;
389
+ return getRegularTypeOfLiteralType(c, checkExpressionCached(c, expr));
390
+ }
391
+ /** The narrowed type of `symbol` at `location`, or its declared type when `location` doesn't reference it. */
392
+ export function getTypeOfSymbolAtLocation(c, symbolIn, locationIn) {
393
+ const symbol = getExportSymbolOfValueSymbolIfExported(c, symbolIn);
394
+ let location = locationIn;
395
+ if (location !== undefined) {
396
+ // A reference to the symbol that isn't only assigned to has a flow type.
397
+ if ((location.kind === 79 /* SyntaxKind.Identifier */ || location.kind === 80 /* SyntaxKind.PrivateIdentifier */) &&
398
+ !(isJsxTagName(location) ||
399
+ location.parent.kind === 292 /* SyntaxKind.JsxAttribute */ ||
400
+ location.parent.kind === 296 /* SyntaxKind.JsxNamespacedName */)) {
401
+ if (isRightSideOfQualifiedNameOrPropertyAccess(location))
402
+ location = location.parent;
403
+ if (isExpressionNode(location) && (!isAssignmentTarget(location) || isWriteAccess(location))) {
404
+ const t = checkExpressionCached(c, location);
405
+ const resolved = c.resolvedSymbols.get(location.id);
406
+ if (resolved !== undefined && getExportSymbolOfValueSymbolIfExported(c, resolved) === symbol)
407
+ return removeOptionalTypeMarker(c, t);
408
+ }
409
+ }
410
+ if (isDeclarationName(location) &&
411
+ location.parent.kind === 179 /* SyntaxKind.SetAccessor */ &&
412
+ getAnnotatedAccessorTypeNode(location.parent) !== undefined)
413
+ return getWriteTypeOfAccessors(c, getSymbol(location.parent));
414
+ // A hypothetical reference has no flow information, so it gets the declared type.
415
+ if (isRightSideOfAccessExpression(location) && isWriteAccess(location.parent))
416
+ return getWriteTypeOfSymbol(c, symbol);
417
+ }
418
+ return getNonMissingTypeOfSymbol(c, symbol);
419
+ }
420
+ // ---- Other queries
421
+ /** The value symbol of a shorthand property assignment's name. */
422
+ export function getShorthandAssignmentValueSymbol(c, node) {
423
+ if (node === undefined || node.kind !== 304 /* SyntaxKind.ShorthandPropertyAssignment */)
424
+ return undefined;
425
+ return resolveEntityName(c, node.name, 111551 /* SymbolFlags.Value */ | 2097152 /* SymbolFlags.Alias */, true, false, undefined);
426
+ }
427
+ /** The local symbol an export specifier, or the identifier of one, refers to. Throws for other nodes. */
428
+ export function getExportSpecifierLocalTargetSymbol(c, node) {
429
+ const meaning = 111551 /* SymbolFlags.Value */ | 788968 /* SymbolFlags.Type */ | 1920 /* SymbolFlags.Namespace */ | 2097152 /* SymbolFlags.Alias */;
430
+ if (node.kind === 282 /* SyntaxKind.ExportSpecifier */) {
431
+ const exportDeclaration = node.parent.parent;
432
+ if (getExternalModuleName(exportDeclaration) !== undefined)
433
+ return getExternalModuleMember(c, exportDeclaration, node, false);
434
+ const specifier = node;
435
+ const name = specifier.propertyName ?? specifier.name;
436
+ // Invalid syntax like `export { "x" }`.
437
+ if (name.kind === 10 /* SyntaxKind.StringLiteral */)
438
+ return undefined;
439
+ return resolveEntityName(c, name, meaning, true, false, undefined);
440
+ }
441
+ if (node.kind === 79 /* SyntaxKind.Identifier */)
442
+ return resolveEntityName(c, node, meaning, true, false, undefined);
443
+ throw new Error('getExportSpecifierLocalTargetSymbol expects an export specifier or identifier');
444
+ }
445
+ /** The value of an enum member, or of a reference to a const enum member. */
446
+ export function getConstantValue(c, node) {
447
+ if (node.kind === 306 /* SyntaxKind.EnumMember */)
448
+ return getEnumMemberValue(c, node);
449
+ // Checking the expression records the symbol it resolves to.
450
+ if (c.resolvedSymbols.get(node.id) === undefined)
451
+ checkExpressionCached(c, node);
452
+ let symbol = c.resolvedSymbols.get(node.id);
453
+ if (symbol === undefined && isEntityNameExpression(node))
454
+ symbol = resolveEntityName(c, node, 111551 /* SymbolFlags.Value */, true, false, undefined);
455
+ if (symbol !== undefined && (symbol.flags & 8 /* SymbolFlags.EnumMember */) !== 0) {
456
+ // Only const enum accesses are inlined.
457
+ const member = symbol.valueDeclaration;
458
+ if (isEnumConst(member.parent))
459
+ return getEnumMemberValue(c, member);
460
+ }
461
+ return undefined;
462
+ }
463
+ function getEnumMemberValue(c, member) {
464
+ computeEnumMemberValues(c, member.parent);
465
+ const links = c.nodeLinks(member);
466
+ if (links.enumValueKind === 1 /* EvaluatedKind.Number */)
467
+ return links.enumNumberValue;
468
+ if (links.enumValueKind === 2 /* EvaluatedKind.String */)
469
+ return links.enumStringValue;
470
+ return undefined;
471
+ }
472
+ /** The symbol an alias refers to directly, without following further aliases. Throws for non-aliases. */
473
+ export function getImmediateAliasedSymbol(c, symbol) {
474
+ const links = c.symbolLinks(symbol);
475
+ if (links.immediateTarget === undefined) {
476
+ const node = getDeclarationOfAliasSymbol(symbol);
477
+ if (node === undefined)
478
+ throw new Error('getImmediateAliasedSymbol expects an alias symbol');
479
+ links.immediateTarget = getTargetOfAliasDeclaration(c, node);
480
+ }
481
+ return links.immediateTarget;
482
+ }
483
+ /** The export of a module named `name`. */
484
+ export function tryGetMemberInModuleExports(c, name, moduleSymbol) {
485
+ return getExportsOfModule(c, moduleSymbol).get(name);
486
+ }
487
+ /** The exports of a module, without reserved names like `export=`. */
488
+ export function getExportsOfModuleAsArray(c, moduleSymbol) {
489
+ const result = [];
490
+ for (const [name, symbol] of getExportsOfModule(c, moduleSymbol))
491
+ if (!isReservedMemberName(name))
492
+ result.push(symbol);
493
+ return result;
494
+ }
495
+ /** The element type of a signature's rest parameter, or `any` without one. */
496
+ export function getRestTypeOfSignature(c, signature) {
497
+ return tryGetRestTypeOfSignature(c, signature) ?? c.anyType;
498
+ }
499
+ /**
500
+ * The signature of a function-like declaration. Declarations and call-like expressions share the
501
+ * cached signature, so a call that was resolved gives its signature; other nodes throw.
502
+ */
503
+ export function querySignatureFromDeclaration(c, node) {
504
+ const cached = c.resolvedSignatures.get(node.id);
505
+ if (cached !== undefined)
506
+ return cached;
507
+ if (!isFunctionLike(node))
508
+ throw new Error('getSignatureFromDeclaration expects a function-like declaration');
509
+ return getSignatureFromDeclaration(c, node);
510
+ }
511
+ /** The signature a call-like expression resolves to. Throws for other nodes. */
512
+ export function queryResolvedSignature(c, node) {
513
+ switch (node.kind) {
514
+ case 214 /* SyntaxKind.CallExpression */:
515
+ case 215 /* SyntaxKind.NewExpression */:
516
+ case 216 /* SyntaxKind.TaggedTemplateExpression */:
517
+ case 171 /* SyntaxKind.Decorator */:
518
+ case 290 /* SyntaxKind.JsxOpeningFragment */:
519
+ case 287 /* SyntaxKind.JsxOpeningElement */:
520
+ case 286 /* SyntaxKind.JsxSelfClosingElement */:
521
+ case 227 /* SyntaxKind.BinaryExpression */:
522
+ return getResolvedSignature(c, node, 0 /* CheckMode.Normal */);
523
+ }
524
+ throw new Error('getResolvedSignature expects a call-like expression');
525
+ }
526
+ /** The contextual type of an expression. Throws for a source file, which has no parent. */
527
+ export function queryContextualType(c, node) {
528
+ if (node.parent === undefined)
529
+ throw new Error('getContextualType expects a node with a parent');
530
+ // Semantic questions inside `with` blocks have no answer.
531
+ if ((node.flags & 16777216 /* NodeFlags.InWithStatement */) !== 0)
532
+ return undefined;
533
+ return getContextualType(c, node);
534
+ }
535
+ // ---- Syntax
536
+ /**
537
+ * The node a JSDoc node was reparsed into, if any: types and declarations written in JSDoc are
538
+ * checked as clones in the tree.
539
+ */
540
+ export function getReparsedNodeForNode(node) {
541
+ if ((node.flags & 4194304 /* NodeFlags.JSDoc */) === 0 || (node.flags & 8 /* NodeFlags.Reparsed */) !== 0)
542
+ return node;
543
+ const clones = getSourceFileOfNode(node).reparsedClones;
544
+ if (clones.length === 0)
545
+ return node;
546
+ let low = 0;
547
+ let high = clones.length - 1;
548
+ let index = -1;
549
+ while (low <= high) {
550
+ const middle = low + ((high - low) >> 1);
551
+ const cmp = compareNodePositions(clones[middle], node);
552
+ if (cmp < 0)
553
+ low = middle + 1;
554
+ else if (cmp > 0)
555
+ high = middle - 1;
556
+ else {
557
+ index = middle;
558
+ break;
559
+ }
560
+ }
561
+ if (index < 0)
562
+ index = low > 0 ? low - 1 : 0;
563
+ const candidate = clones[index];
564
+ if (candidate.pos <= node.pos && node.end <= candidate.end) {
565
+ const clone = findCloneInNode(candidate, node);
566
+ if (clone !== undefined)
567
+ return clone;
568
+ }
569
+ return node;
570
+ }
571
+ function findCloneInNode(root, original) {
572
+ let node = root;
573
+ for (;;) {
574
+ if (node.kind === original.kind && node.pos === original.pos && node.end === original.end)
575
+ return node;
576
+ let next;
577
+ for (const child of childrenOf(node))
578
+ if (child.pos <= original.pos && original.end <= child.end) {
579
+ next = child;
580
+ break;
581
+ }
582
+ if (next === undefined)
583
+ return undefined;
584
+ node = next;
585
+ }
586
+ }
587
+ function childrenOf(node) {
588
+ const result = [];
589
+ node.forEachChild(new ChildCollector(result));
590
+ return result;
591
+ }
592
+ class ChildCollector extends NodeVisitor {
593
+ nodes;
594
+ constructor(nodes) {
595
+ super();
596
+ this.nodes = nodes;
597
+ }
598
+ visitNode(node) {
599
+ this.nodes.push(node);
600
+ return false;
601
+ }
602
+ }
603
+ export function isEntityName(node) {
604
+ return node.kind === 79 /* SyntaxKind.Identifier */ || node.kind === 167 /* SyntaxKind.QualifiedName */;
605
+ }
606
+ function isBindingPattern(node) {
607
+ return node.kind === 207 /* SyntaxKind.ObjectBindingPattern */ || node.kind === 208 /* SyntaxKind.ArrayBindingPattern */;
608
+ }
609
+ function isImportOrExportSpecifier(node) {
610
+ return node.kind === 277 /* SyntaxKind.ImportSpecifier */ || node.kind === 282 /* SyntaxKind.ExportSpecifier */;
611
+ }
612
+ function isClassOrInterfaceLike(node) {
613
+ return (node.kind === 264 /* SyntaxKind.ClassDeclaration */ ||
614
+ node.kind === 232 /* SyntaxKind.ClassExpression */ ||
615
+ node.kind === 265 /* SyntaxKind.InterfaceDeclaration */);
616
+ }
617
+ function isJSDocLinkLike(node) {
618
+ return (node.kind === 319 /* SyntaxKind.JSDocLink */ ||
619
+ node.kind === 320 /* SyntaxKind.JSDocLinkCode */ ||
620
+ node.kind === 321 /* SyntaxKind.JSDocLinkPlain */);
621
+ }
622
+ export function isDeclaration(node) {
623
+ if (node.kind === 169 /* SyntaxKind.TypeParameter */)
624
+ return node.parent !== undefined;
625
+ return isDeclarationNode(node);
626
+ }
627
+ export function isDeclarationName(name) {
628
+ return (name.kind !== 307 /* SyntaxKind.SourceFile */ &&
629
+ !isBindingPattern(name) &&
630
+ isDeclaration(name.parent) &&
631
+ getName(name.parent) === name);
632
+ }
633
+ /** Like `isDeclarationName`, but also the left of `import { x as y }` and `export { x as y }`. */
634
+ function isDeclarationNameOrImportPropertyName(name) {
635
+ if (isImportOrExportSpecifier(name.parent))
636
+ return name.kind === 79 /* SyntaxKind.Identifier */ || name.kind === 10 /* SyntaxKind.StringLiteral */;
637
+ return isDeclarationName(name);
638
+ }
639
+ export function isLiteralComputedPropertyDeclarationName(node) {
640
+ return ((isStringLiteralLike(node) || node.kind === 8 /* SyntaxKind.NumericLiteral */) &&
641
+ node.parent.kind === 168 /* SyntaxKind.ComputedPropertyName */ &&
642
+ isDeclaration(node.parent.parent));
643
+ }
644
+ function isExternalModuleImportEqualsDeclaration(node) {
645
+ return (node.kind === 272 /* SyntaxKind.ImportEqualsDeclaration */ &&
646
+ node.moduleReference.kind === 284 /* SyntaxKind.ExternalModuleReference */);
647
+ }
648
+ export function isInRightSideOfImportOrExportAssignment(nodeIn) {
649
+ let node = nodeIn;
650
+ while (node.parent.kind === 167 /* SyntaxKind.QualifiedName */)
651
+ node = node.parent;
652
+ const parent = node.parent;
653
+ return ((parent.kind === 272 /* SyntaxKind.ImportEqualsDeclaration */ &&
654
+ parent.moduleReference === node) ||
655
+ (parent.kind === 278 /* SyntaxKind.ExportAssignment */ && getExpression(parent) === node));
656
+ }
657
+ /** The `import()` type whose qualifier contains `node`. */
658
+ function isImportTypeQualifierPart(nodeIn) {
659
+ let node = nodeIn;
660
+ let parent = node.parent;
661
+ while (parent !== undefined && parent.kind === 167 /* SyntaxKind.QualifiedName */) {
662
+ node = parent;
663
+ parent = parent.parent;
664
+ }
665
+ if (parent !== undefined && parent.kind === 206 /* SyntaxKind.ImportType */ && parent.qualifier === node)
666
+ return parent;
667
+ return undefined;
668
+ }
669
+ function isInNameOfExpressionWithTypeArguments(nodeIn) {
670
+ let node = nodeIn;
671
+ while (node.parent.kind === 212 /* SyntaxKind.PropertyAccessExpression */)
672
+ node = node.parent;
673
+ return node.parent.kind === 234 /* SyntaxKind.ExpressionWithTypeArguments */;
674
+ }
675
+ export function isRightSideOfQualifiedNameOrPropertyAccess(node) {
676
+ const parent = node.parent;
677
+ switch (parent.kind) {
678
+ case 167 /* SyntaxKind.QualifiedName */:
679
+ return parent.right === node;
680
+ case 212 /* SyntaxKind.PropertyAccessExpression */:
681
+ return parent.name === node;
682
+ case 237 /* SyntaxKind.MetaProperty */:
683
+ return parent.name === node;
684
+ }
685
+ return false;
686
+ }
687
+ function isRightSideOfAccessExpression(node) {
688
+ const parent = node.parent;
689
+ if (parent === undefined)
690
+ return false;
691
+ if (parent.kind === 212 /* SyntaxKind.PropertyAccessExpression */)
692
+ return parent.name === node;
693
+ if (parent.kind === 213 /* SyntaxKind.ElementAccessExpression */)
694
+ return parent.argumentExpression === node;
695
+ return false;
696
+ }
697
+ function isJsxTagName(node) {
698
+ const parent = node.parent;
699
+ switch (parent.kind) {
700
+ case 287 /* SyntaxKind.JsxOpeningElement */:
701
+ case 288 /* SyntaxKind.JsxClosingElement */:
702
+ case 286 /* SyntaxKind.JsxSelfClosingElement */:
703
+ return getTagName(parent) === node;
704
+ }
705
+ return false;
706
+ }
707
+ export function isJSDocNameReferenceContext(node) {
708
+ if ((node.flags & 4194304 /* NodeFlags.JSDoc */) === 0)
709
+ return false;
710
+ for (let current = node; current !== undefined; current = current.parent)
711
+ if (current.kind === 309 /* SyntaxKind.JSDocNameReference */ || isJSDocLinkLike(current))
712
+ return true;
713
+ return false;
714
+ }
715
+ /** The class of an expression with type arguments in its heritage clause. */
716
+ function getClassOfHeritageExpression(node) {
717
+ if (node.kind !== 234 /* SyntaxKind.ExpressionWithTypeArguments */)
718
+ return undefined;
719
+ const parent = node.parent;
720
+ return parent.kind === 299 /* SyntaxKind.HeritageClause */ && isClassLike(parent.parent) ? parent.parent : undefined;
721
+ }
722
+ function isImplementsExpression(node) {
723
+ return node.parent.token === 118 /* SyntaxKind.ImplementsKeyword */;
724
+ }
725
+ function isExpressionWithTypeArgumentsInClassExtendsClause(node) {
726
+ return getClassOfHeritageExpression(node) !== undefined && !isImplementsExpression(node);
727
+ }
728
+ function isTypeDeclarationName(name) {
729
+ return (name.kind === 79 /* SyntaxKind.Identifier */ && isTypeDeclaration(name.parent) && getNameOfDeclaration(name.parent) === name);
730
+ }
731
+ /** Whether a type reference names `node`, as `T`, `N.T` or the namespace part of one. */
732
+ function isTypeReferenceIdentifier(nodeIn) {
733
+ let node = nodeIn;
734
+ while (node.parent.kind === 167 /* SyntaxKind.QualifiedName */)
735
+ node = node.parent;
736
+ return node.parent.kind === 184 /* SyntaxKind.TypeReference */;
737
+ }
738
+ export function isPartOfTypeNode(node) {
739
+ const kind = node.kind;
740
+ if (kind >= 183 /* SyntaxKind.FirstTypeNode */ && kind <= 206 /* SyntaxKind.LastTypeNode */)
741
+ return true;
742
+ switch (kind) {
743
+ case 132 /* SyntaxKind.AnyKeyword */:
744
+ case 159 /* SyntaxKind.UnknownKeyword */:
745
+ case 150 /* SyntaxKind.NumberKeyword */:
746
+ case 163 /* SyntaxKind.BigIntKeyword */:
747
+ case 154 /* SyntaxKind.StringKeyword */:
748
+ case 135 /* SyntaxKind.BooleanKeyword */:
749
+ case 155 /* SyntaxKind.SymbolKeyword */:
750
+ case 151 /* SyntaxKind.ObjectKeyword */:
751
+ case 157 /* SyntaxKind.UndefinedKeyword */:
752
+ case 105 /* SyntaxKind.NullKeyword */:
753
+ case 146 /* SyntaxKind.NeverKeyword */:
754
+ return true;
755
+ case 115 /* SyntaxKind.VoidKeyword */:
756
+ return node.parent.kind !== 223 /* SyntaxKind.VoidExpression */;
757
+ case 234 /* SyntaxKind.ExpressionWithTypeArguments */:
758
+ return isPartOfTypeExpressionWithTypeArguments(node);
759
+ case 169 /* SyntaxKind.TypeParameter */:
760
+ return node.parent.kind === 201 /* SyntaxKind.MappedType */ || node.parent.kind === 196 /* SyntaxKind.InferType */;
761
+ case 79 /* SyntaxKind.Identifier */: {
762
+ const parent = node.parent;
763
+ if (parent.kind === 167 /* SyntaxKind.QualifiedName */ && parent.right === node)
764
+ return isPartOfTypeNodeInParent(parent);
765
+ if (parent.kind === 212 /* SyntaxKind.PropertyAccessExpression */ && parent.name === node)
766
+ return isPartOfTypeNodeInParent(parent);
767
+ return isPartOfTypeNodeInParent(node);
768
+ }
769
+ case 167 /* SyntaxKind.QualifiedName */:
770
+ case 212 /* SyntaxKind.PropertyAccessExpression */:
771
+ case 109 /* SyntaxKind.ThisKeyword */:
772
+ return isPartOfTypeNodeInParent(node);
773
+ }
774
+ return false;
775
+ }
776
+ function isPartOfTypeExpressionWithTypeArguments(node) {
777
+ const parent = node.parent;
778
+ return ((parent.kind === 299 /* SyntaxKind.HeritageClause */ &&
779
+ (!isClassLike(parent.parent) || parent.token === 118 /* SyntaxKind.ImplementsKeyword */)) ||
780
+ parent.kind === 324 /* SyntaxKind.JSDocImplementsTag */ ||
781
+ parent.kind === 323 /* SyntaxKind.JSDocAugmentsTag */);
782
+ }
783
+ // Only the parent is tested: in `let a: A.B.C`, `C` and `A.B.C` are type nodes but `A.B` isn't.
784
+ function isPartOfTypeNodeInParent(node) {
785
+ const parent = node.parent;
786
+ if (parent.kind === 187 /* SyntaxKind.TypeQuery */)
787
+ return false;
788
+ if (parent.kind === 206 /* SyntaxKind.ImportType */)
789
+ return !parent.isTypeOf;
790
+ if (parent.kind >= 183 /* SyntaxKind.FirstTypeNode */ && parent.kind <= 206 /* SyntaxKind.LastTypeNode */)
791
+ return true;
792
+ switch (parent.kind) {
793
+ case 234 /* SyntaxKind.ExpressionWithTypeArguments */:
794
+ return isPartOfTypeExpressionWithTypeArguments(parent);
795
+ case 169 /* SyntaxKind.TypeParameter */:
796
+ return node === parent.constraint;
797
+ case 261 /* SyntaxKind.VariableDeclaration */:
798
+ case 170 /* SyntaxKind.Parameter */:
799
+ case 173 /* SyntaxKind.PropertyDeclaration */:
800
+ case 172 /* SyntaxKind.PropertySignature */:
801
+ case 263 /* SyntaxKind.FunctionDeclaration */:
802
+ case 219 /* SyntaxKind.FunctionExpression */:
803
+ case 220 /* SyntaxKind.ArrowFunction */:
804
+ case 177 /* SyntaxKind.Constructor */:
805
+ case 175 /* SyntaxKind.MethodDeclaration */:
806
+ case 174 /* SyntaxKind.MethodSignature */:
807
+ case 178 /* SyntaxKind.GetAccessor */:
808
+ case 179 /* SyntaxKind.SetAccessor */:
809
+ case 180 /* SyntaxKind.CallSignature */:
810
+ case 181 /* SyntaxKind.ConstructSignature */:
811
+ case 182 /* SyntaxKind.IndexSignature */:
812
+ case 217 /* SyntaxKind.TypeAssertionExpression */:
813
+ return node === getType(parent);
814
+ case 214 /* SyntaxKind.CallExpression */:
815
+ case 215 /* SyntaxKind.NewExpression */:
816
+ case 216 /* SyntaxKind.TaggedTemplateExpression */: {
817
+ const typeArguments = getTypeArguments(parent);
818
+ return typeArguments !== undefined && typeArguments.nodes.includes(node);
819
+ }
820
+ }
821
+ return false;
822
+ }
823
+ export function isExpressionNode(nodeIn) {
824
+ let node = nodeIn;
825
+ switch (node.kind) {
826
+ case 107 /* SyntaxKind.SuperKeyword */:
827
+ case 105 /* SyntaxKind.NullKeyword */:
828
+ case 111 /* SyntaxKind.TrueKeyword */:
829
+ case 96 /* SyntaxKind.FalseKeyword */:
830
+ case 13 /* SyntaxKind.RegularExpressionLiteral */:
831
+ case 210 /* SyntaxKind.ArrayLiteralExpression */:
832
+ case 211 /* SyntaxKind.ObjectLiteralExpression */:
833
+ case 212 /* SyntaxKind.PropertyAccessExpression */:
834
+ case 213 /* SyntaxKind.ElementAccessExpression */:
835
+ case 214 /* SyntaxKind.CallExpression */:
836
+ case 215 /* SyntaxKind.NewExpression */:
837
+ case 216 /* SyntaxKind.TaggedTemplateExpression */:
838
+ case 235 /* SyntaxKind.AsExpression */:
839
+ case 217 /* SyntaxKind.TypeAssertionExpression */:
840
+ case 239 /* SyntaxKind.SatisfiesExpression */:
841
+ case 236 /* SyntaxKind.NonNullExpression */:
842
+ case 218 /* SyntaxKind.ParenthesizedExpression */:
843
+ case 219 /* SyntaxKind.FunctionExpression */:
844
+ case 232 /* SyntaxKind.ClassExpression */:
845
+ case 220 /* SyntaxKind.ArrowFunction */:
846
+ case 223 /* SyntaxKind.VoidExpression */:
847
+ case 221 /* SyntaxKind.DeleteExpression */:
848
+ case 222 /* SyntaxKind.TypeOfExpression */:
849
+ case 225 /* SyntaxKind.PrefixUnaryExpression */:
850
+ case 226 /* SyntaxKind.PostfixUnaryExpression */:
851
+ case 227 /* SyntaxKind.BinaryExpression */:
852
+ case 228 /* SyntaxKind.ConditionalExpression */:
853
+ case 231 /* SyntaxKind.SpreadElement */:
854
+ case 229 /* SyntaxKind.TemplateExpression */:
855
+ case 233 /* SyntaxKind.OmittedExpression */:
856
+ case 285 /* SyntaxKind.JsxElement */:
857
+ case 286 /* SyntaxKind.JsxSelfClosingElement */:
858
+ case 289 /* SyntaxKind.JsxFragment */:
859
+ case 230 /* SyntaxKind.YieldExpression */:
860
+ case 224 /* SyntaxKind.AwaitExpression */:
861
+ return true;
862
+ case 237 /* SyntaxKind.MetaProperty */:
863
+ // `import.defer` in `import.defer(...)` isn't an expression.
864
+ return !isImportCall(node.parent) || getExpression(node.parent) !== node;
865
+ case 234 /* SyntaxKind.ExpressionWithTypeArguments */:
866
+ return node.parent.kind !== 299 /* SyntaxKind.HeritageClause */;
867
+ case 167 /* SyntaxKind.QualifiedName */:
868
+ while (node.parent.kind === 167 /* SyntaxKind.QualifiedName */)
869
+ node = node.parent;
870
+ return isNameReferenceParent(node) || isJsxTagName(node);
871
+ case 80 /* SyntaxKind.PrivateIdentifier */: {
872
+ const parent = node.parent;
873
+ return (parent.kind === 227 /* SyntaxKind.BinaryExpression */ &&
874
+ parent.left === node &&
875
+ parent.operatorToken.kind === 102 /* SyntaxKind.InKeyword */);
876
+ }
877
+ case 79 /* SyntaxKind.Identifier */:
878
+ if (isNameReferenceParent(node) || isJsxTagName(node))
879
+ return true;
880
+ return isInExpressionContext(node);
881
+ case 8 /* SyntaxKind.NumericLiteral */:
882
+ case 9 /* SyntaxKind.BigIntLiteral */:
883
+ case 10 /* SyntaxKind.StringLiteral */:
884
+ case 14 /* SyntaxKind.NoSubstitutionTemplateLiteral */:
885
+ case 109 /* SyntaxKind.ThisKeyword */:
886
+ return isInExpressionContext(node);
887
+ }
888
+ return false;
889
+ }
890
+ /** Whether `node`'s parent is a `typeof` query, a JSDoc link or a JSDoc name reference. */
891
+ function isNameReferenceParent(node) {
892
+ const parent = node.parent;
893
+ return (parent.kind === 187 /* SyntaxKind.TypeQuery */ || isJSDocLinkLike(parent) || parent.kind === 309 /* SyntaxKind.JSDocNameReference */);
894
+ }
895
+ function isInExpressionContext(node) {
896
+ const parent = node.parent;
897
+ switch (parent.kind) {
898
+ case 261 /* SyntaxKind.VariableDeclaration */:
899
+ case 170 /* SyntaxKind.Parameter */:
900
+ case 173 /* SyntaxKind.PropertyDeclaration */:
901
+ case 172 /* SyntaxKind.PropertySignature */:
902
+ case 306 /* SyntaxKind.EnumMember */:
903
+ case 303 /* SyntaxKind.PropertyAssignment */:
904
+ case 209 /* SyntaxKind.BindingElement */:
905
+ return getInitializer(parent) === node;
906
+ case 245 /* SyntaxKind.ExpressionStatement */:
907
+ case 246 /* SyntaxKind.IfStatement */:
908
+ case 247 /* SyntaxKind.DoStatement */:
909
+ case 248 /* SyntaxKind.WhileStatement */:
910
+ case 254 /* SyntaxKind.ReturnStatement */:
911
+ case 255 /* SyntaxKind.WithStatement */:
912
+ case 256 /* SyntaxKind.SwitchStatement */:
913
+ case 297 /* SyntaxKind.CaseClause */:
914
+ case 298 /* SyntaxKind.DefaultClause */:
915
+ case 258 /* SyntaxKind.ThrowStatement */:
916
+ case 217 /* SyntaxKind.TypeAssertionExpression */:
917
+ case 235 /* SyntaxKind.AsExpression */:
918
+ case 240 /* SyntaxKind.TemplateSpan */:
919
+ case 168 /* SyntaxKind.ComputedPropertyName */:
920
+ case 239 /* SyntaxKind.SatisfiesExpression */:
921
+ return getExpression(parent) === node;
922
+ case 249 /* SyntaxKind.ForStatement */: {
923
+ const s = parent;
924
+ return ((s.initializer === node && node.kind !== 262 /* SyntaxKind.VariableDeclarationList */) ||
925
+ s.condition === node ||
926
+ s.incrementor === node);
927
+ }
928
+ case 250 /* SyntaxKind.ForInStatement */:
929
+ case 251 /* SyntaxKind.ForOfStatement */: {
930
+ const s = parent;
931
+ return (s.initializer === node && node.kind !== 262 /* SyntaxKind.VariableDeclarationList */) || s.expression === node;
932
+ }
933
+ case 171 /* SyntaxKind.Decorator */:
934
+ case 295 /* SyntaxKind.JsxExpression */:
935
+ case 294 /* SyntaxKind.JsxSpreadAttribute */:
936
+ case 305 /* SyntaxKind.SpreadAssignment */:
937
+ return true;
938
+ case 234 /* SyntaxKind.ExpressionWithTypeArguments */:
939
+ return getExpression(parent) === node && !isPartOfTypeNode(parent);
940
+ case 304 /* SyntaxKind.ShorthandPropertyAssignment */:
941
+ return parent.objectAssignmentInitializer === node;
942
+ }
943
+ return isExpressionNode(parent);
944
+ }
945
+ function isWriteAccess(node) {
946
+ return accessKind(node) !== 0 /* AccessKind.Read */;
947
+ }
948
+ function accessKind(node) {
949
+ const parent = node.parent;
950
+ if (parent === undefined)
951
+ return 0 /* AccessKind.Read */;
952
+ switch (parent.kind) {
953
+ case 218 /* SyntaxKind.ParenthesizedExpression */:
954
+ case 210 /* SyntaxKind.ArrayLiteralExpression */:
955
+ return accessKind(parent);
956
+ case 225 /* SyntaxKind.PrefixUnaryExpression */:
957
+ case 226 /* SyntaxKind.PostfixUnaryExpression */: {
958
+ const operator = parent.kind === 225 /* SyntaxKind.PrefixUnaryExpression */
959
+ ? parent.operator
960
+ : parent.operator;
961
+ return operator === 45 /* SyntaxKind.PlusPlusToken */ || operator === 46 /* SyntaxKind.MinusMinusToken */
962
+ ? 2 /* AccessKind.ReadWrite */
963
+ : 0 /* AccessKind.Read */;
964
+ }
965
+ case 227 /* SyntaxKind.BinaryExpression */: {
966
+ const binary = parent;
967
+ if (binary.left === node && isAssignmentOperator(binary.operatorToken.kind))
968
+ return binary.operatorToken.kind === 63 /* SyntaxKind.EqualsToken */ ? 1 /* AccessKind.Write */ : 2 /* AccessKind.ReadWrite */;
969
+ return 0 /* AccessKind.Read */;
970
+ }
971
+ case 212 /* SyntaxKind.PropertyAccessExpression */:
972
+ return parent.name !== node ? 0 /* AccessKind.Read */ : accessKind(parent);
973
+ case 303 /* SyntaxKind.PropertyAssignment */: {
974
+ const parentAccess = accessKind(parent.parent);
975
+ // In `({ x: v } = o)`, the `x` is read and `v` written.
976
+ if (node === getName(parent)) {
977
+ if (parentAccess === 0 /* AccessKind.Read */)
978
+ return 1 /* AccessKind.Write */;
979
+ if (parentAccess === 1 /* AccessKind.Write */)
980
+ return 0 /* AccessKind.Read */;
981
+ return 2 /* AccessKind.ReadWrite */;
982
+ }
983
+ return parentAccess;
984
+ }
985
+ case 304 /* SyntaxKind.ShorthandPropertyAssignment */:
986
+ // The local variable is what's accessed.
987
+ if (node === parent.objectAssignmentInitializer)
988
+ return 0 /* AccessKind.Read */;
989
+ return accessKind(parent.parent);
990
+ case 250 /* SyntaxKind.ForInStatement */:
991
+ case 251 /* SyntaxKind.ForOfStatement */:
992
+ return node === parent.initializer ? 1 /* AccessKind.Write */ : 0 /* AccessKind.Read */;
993
+ }
994
+ return 0 /* AccessKind.Read */;
995
+ }