tsc-ts 0.0.3 → 0.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (596) hide show
  1. package/README.md +46 -0
  2. package/dist/api/compiler/ast-utilities.d.ts +82 -0
  3. package/dist/api/compiler/ast-utilities.js +462 -0
  4. package/dist/api/compiler/ast.d.ts +2350 -0
  5. package/dist/api/compiler/ast.js +11206 -0
  6. package/dist/api/compiler/astnav.d.ts +37 -0
  7. package/dist/api/compiler/astnav.js +767 -0
  8. package/dist/api/compiler/binder-utilities.d.ts +182 -0
  9. package/dist/api/compiler/binder-utilities.js +1240 -0
  10. package/dist/api/compiler/binder.d.ts +33 -0
  11. package/dist/api/compiler/binder.js +2358 -0
  12. package/dist/api/compiler/character-codes.d.ts +161 -0
  13. package/dist/api/compiler/character-codes.js +160 -0
  14. package/dist/api/compiler/checker-calls.d.ts +46 -0
  15. package/dist/api/compiler/checker-calls.js +1640 -0
  16. package/dist/api/compiler/checker-classes.d.ts +30 -0
  17. package/dist/api/compiler/checker-classes.js +582 -0
  18. package/dist/api/compiler/checker-contextual.d.ts +77 -0
  19. package/dist/api/compiler/checker-contextual.js +1136 -0
  20. package/dist/api/compiler/checker-declaration-order.d.ts +12 -0
  21. package/dist/api/compiler/checker-declaration-order.js +356 -0
  22. package/dist/api/compiler/checker-declarations.d.ts +33 -0
  23. package/dist/api/compiler/checker-declarations.js +888 -0
  24. package/dist/api/compiler/checker-declared-types.d.ts +48 -0
  25. package/dist/api/compiler/checker-declared-types.js +787 -0
  26. package/dist/api/compiler/checker-decorators.d.ts +26 -0
  27. package/dist/api/compiler/checker-decorators.js +562 -0
  28. package/dist/api/compiler/checker-deprecation.d.ts +33 -0
  29. package/dist/api/compiler/checker-deprecation.js +315 -0
  30. package/dist/api/compiler/checker-destructuring.d.ts +34 -0
  31. package/dist/api/compiler/checker-destructuring.js +584 -0
  32. package/dist/api/compiler/checker-elaboration.d.ts +15 -0
  33. package/dist/api/compiler/checker-elaboration.js +290 -0
  34. package/dist/api/compiler/checker-emit-helpers.d.ts +58 -0
  35. package/dist/api/compiler/checker-emit-helpers.js +154 -0
  36. package/dist/api/compiler/checker-emit-resolver.d.ts +75 -0
  37. package/dist/api/compiler/checker-emit-resolver.js +579 -0
  38. package/dist/api/compiler/checker-evaluator.d.ts +27 -0
  39. package/dist/api/compiler/checker-evaluator.js +188 -0
  40. package/dist/api/compiler/checker-expressions.d.ts +67 -0
  41. package/dist/api/compiler/checker-expressions.js +1351 -0
  42. package/dist/api/compiler/checker-features.d.ts +6 -0
  43. package/dist/api/compiler/checker-features.js +354 -0
  44. package/dist/api/compiler/checker-flow.d.ts +86 -0
  45. package/dist/api/compiler/checker-flow.js +169 -0
  46. package/dist/api/compiler/checker-functions.d.ts +43 -0
  47. package/dist/api/compiler/checker-functions.js +1002 -0
  48. package/dist/api/compiler/checker-generated-code.d.ts +25 -0
  49. package/dist/api/compiler/checker-generated-code.js +168 -0
  50. package/dist/api/compiler/checker-globals.d.ts +14 -0
  51. package/dist/api/compiler/checker-globals.js +37 -0
  52. package/dist/api/compiler/checker-grammar.d.ts +35 -0
  53. package/dist/api/compiler/checker-grammar.js +2573 -0
  54. package/dist/api/compiler/checker-heritage.d.ts +28 -0
  55. package/dist/api/compiler/checker-heritage.js +900 -0
  56. package/dist/api/compiler/checker-inference.d.ts +179 -0
  57. package/dist/api/compiler/checker-inference.js +2105 -0
  58. package/dist/api/compiler/checker-iteration.d.ts +115 -0
  59. package/dist/api/compiler/checker-iteration.js +857 -0
  60. package/dist/api/compiler/checker-javascript.d.ts +42 -0
  61. package/dist/api/compiler/checker-javascript.js +441 -0
  62. package/dist/api/compiler/checker-jsdoc.d.ts +30 -0
  63. package/dist/api/compiler/checker-jsdoc.js +320 -0
  64. package/dist/api/compiler/checker-jsx.d.ts +94 -0
  65. package/dist/api/compiler/checker-jsx.js +1433 -0
  66. package/dist/api/compiler/checker-literals.d.ts +6 -0
  67. package/dist/api/compiler/checker-literals.js +43 -0
  68. package/dist/api/compiler/checker-members.d.ts +198 -0
  69. package/dist/api/compiler/checker-members.js +2126 -0
  70. package/dist/api/compiler/checker-modules.d.ts +85 -0
  71. package/dist/api/compiler/checker-modules.js +2141 -0
  72. package/dist/api/compiler/checker-narrowing.d.ts +120 -0
  73. package/dist/api/compiler/checker-narrowing.js +2797 -0
  74. package/dist/api/compiler/checker-object-literals.d.ts +14 -0
  75. package/dist/api/compiler/checker-object-literals.js +479 -0
  76. package/dist/api/compiler/checker-operators.d.ts +33 -0
  77. package/dist/api/compiler/checker-operators.js +1040 -0
  78. package/dist/api/compiler/checker-overloads.d.ts +7 -0
  79. package/dist/api/compiler/checker-overloads.js +270 -0
  80. package/dist/api/compiler/checker-property-access.d.ts +34 -0
  81. package/dist/api/compiler/checker-property-access.js +672 -0
  82. package/dist/api/compiler/checker-services.d.ts +49 -0
  83. package/dist/api/compiler/checker-services.js +995 -0
  84. package/dist/api/compiler/checker-signatures.d.ts +55 -0
  85. package/dist/api/compiler/checker-signatures.js +788 -0
  86. package/dist/api/compiler/checker-source-file.d.ts +27 -0
  87. package/dist/api/compiler/checker-source-file.js +619 -0
  88. package/dist/api/compiler/checker-statements.d.ts +18 -0
  89. package/dist/api/compiler/checker-statements.js +226 -0
  90. package/dist/api/compiler/checker-super.d.ts +13 -0
  91. package/dist/api/compiler/checker-super.js +241 -0
  92. package/dist/api/compiler/checker-symbol-types.d.ts +67 -0
  93. package/dist/api/compiler/checker-symbol-types.js +1885 -0
  94. package/dist/api/compiler/checker-symbols.d.ts +181 -0
  95. package/dist/api/compiler/checker-symbols.js +1782 -0
  96. package/dist/api/compiler/checker-type-factory.d.ts +142 -0
  97. package/dist/api/compiler/checker-type-factory.js +2501 -0
  98. package/dist/api/compiler/checker-type-nodes.d.ts +26 -0
  99. package/dist/api/compiler/checker-type-nodes.js +828 -0
  100. package/dist/api/compiler/checker-type-operators.d.ts +109 -0
  101. package/dist/api/compiler/checker-type-operators.js +1842 -0
  102. package/dist/api/compiler/checker-types.d.ts +1027 -0
  103. package/dist/api/compiler/checker-types.js +1697 -0
  104. package/dist/api/compiler/checker-unused.d.ts +19 -0
  105. package/dist/api/compiler/checker-unused.js +524 -0
  106. package/dist/api/compiler/checker-utilities.d.ts +33 -0
  107. package/dist/api/compiler/checker-utilities.js +141 -0
  108. package/dist/api/compiler/checker.d.ts +491 -0
  109. package/dist/api/compiler/checker.js +912 -0
  110. package/dist/api/compiler/command-line.d.ts +32 -0
  111. package/dist/api/compiler/command-line.js +383 -0
  112. package/dist/api/compiler/compile-program.d.ts +118 -0
  113. package/dist/api/compiler/compile-program.js +384 -0
  114. package/dist/api/compiler/diagnostic-locales.d.ts +22 -0
  115. package/dist/api/compiler/diagnostic-locales.js +64 -0
  116. package/dist/api/compiler/diagnostic-messages.d.ts +2166 -0
  117. package/dist/api/compiler/diagnostic-messages.js +184 -0
  118. package/dist/api/compiler/diagnostics.d.ts +167 -0
  119. package/dist/api/compiler/diagnostics.js +820 -0
  120. package/dist/api/compiler/emitter.d.ts +71 -0
  121. package/dist/api/compiler/emitter.js +327 -0
  122. package/dist/api/compiler/file-include.d.ts +117 -0
  123. package/dist/api/compiler/file-include.js +536 -0
  124. package/dist/api/compiler/file-loader.d.ts +261 -0
  125. package/dist/api/compiler/file-loader.js +1257 -0
  126. package/dist/api/compiler/file-system.d.ts +51 -0
  127. package/dist/api/compiler/file-system.js +132 -0
  128. package/dist/api/compiler/flow.d.ts +60 -0
  129. package/dist/api/compiler/flow.js +45 -0
  130. package/dist/api/compiler/instantiation.d.ts +74 -0
  131. package/dist/api/compiler/instantiation.js +799 -0
  132. package/dist/api/compiler/jsdoc.d.ts +75 -0
  133. package/dist/api/compiler/jsdoc.js +1229 -0
  134. package/dist/api/compiler/link-tables.d.ts +36 -0
  135. package/dist/api/compiler/link-tables.js +83 -0
  136. package/dist/api/compiler/locale-data.d.ts +24 -0
  137. package/dist/api/compiler/locale-data.js +183 -0
  138. package/dist/api/compiler/locale.d.ts +4 -0
  139. package/dist/api/compiler/locale.js +317 -0
  140. package/dist/api/compiler/locales/cs-CZ.d.ts +2 -0
  141. package/dist/api/compiler/locales/cs-CZ.js +3 -0
  142. package/dist/api/compiler/locales/de-DE.d.ts +2 -0
  143. package/dist/api/compiler/locales/de-DE.js +3 -0
  144. package/dist/api/compiler/locales/es-ES.d.ts +2 -0
  145. package/dist/api/compiler/locales/es-ES.js +3 -0
  146. package/dist/api/compiler/locales/fr-FR.d.ts +2 -0
  147. package/dist/api/compiler/locales/fr-FR.js +3 -0
  148. package/dist/api/compiler/locales/it-IT.d.ts +2 -0
  149. package/dist/api/compiler/locales/it-IT.js +3 -0
  150. package/dist/api/compiler/locales/ja-JP.d.ts +2 -0
  151. package/dist/api/compiler/locales/ja-JP.js +3 -0
  152. package/dist/api/compiler/locales/ko-KR.d.ts +2 -0
  153. package/dist/api/compiler/locales/ko-KR.js +3 -0
  154. package/dist/api/compiler/locales/pl-PL.d.ts +2 -0
  155. package/dist/api/compiler/locales/pl-PL.js +3 -0
  156. package/dist/api/compiler/locales/pt-BR.d.ts +2 -0
  157. package/dist/api/compiler/locales/pt-BR.js +3 -0
  158. package/dist/api/compiler/locales/ru-RU.d.ts +2 -0
  159. package/dist/api/compiler/locales/ru-RU.js +3 -0
  160. package/dist/api/compiler/locales/tr-TR.d.ts +2 -0
  161. package/dist/api/compiler/locales/tr-TR.js +3 -0
  162. package/dist/api/compiler/locales/zh-CN.d.ts +2 -0
  163. package/dist/api/compiler/locales/zh-CN.js +3 -0
  164. package/dist/api/compiler/locales/zh-TW.d.ts +2 -0
  165. package/dist/api/compiler/locales/zh-TW.js +3 -0
  166. package/dist/api/compiler/module-resolution-types.d.ts +83 -0
  167. package/dist/api/compiler/module-resolution-types.js +176 -0
  168. package/dist/api/compiler/module-resolution.d.ts +71 -0
  169. package/dist/api/compiler/module-resolution.js +1598 -0
  170. package/dist/api/compiler/module-specifiers.d.ts +64 -0
  171. package/dist/api/compiler/module-specifiers.js +1101 -0
  172. package/dist/api/compiler/name-resolver.d.ts +43 -0
  173. package/dist/api/compiler/name-resolver.js +509 -0
  174. package/dist/api/compiler/node-builder-names.d.ts +32 -0
  175. package/dist/api/compiler/node-builder-names.js +854 -0
  176. package/dist/api/compiler/node-builder-pseudo.d.ts +36 -0
  177. package/dist/api/compiler/node-builder-pseudo.js +744 -0
  178. package/dist/api/compiler/node-builder-reuse.d.ts +4 -0
  179. package/dist/api/compiler/node-builder-reuse.js +647 -0
  180. package/dist/api/compiler/node-builder.d.ts +270 -0
  181. package/dist/api/compiler/node-builder.js +2645 -0
  182. package/dist/api/compiler/option-declarations.d.ts +90 -0
  183. package/dist/api/compiler/option-declarations.js +1460 -0
  184. package/dist/api/compiler/options.d.ts +289 -0
  185. package/dist/api/compiler/options.js +1197 -0
  186. package/dist/api/compiler/output-paths.d.ts +42 -0
  187. package/dist/api/compiler/output-paths.js +195 -0
  188. package/dist/api/compiler/package-json.d.ts +175 -0
  189. package/dist/api/compiler/package-json.js +1015 -0
  190. package/dist/api/compiler/parallel-parse.d.ts +219 -0
  191. package/dist/api/compiler/parallel-parse.js +537 -0
  192. package/dist/api/compiler/parser.d.ts +587 -0
  193. package/dist/api/compiler/parser.js +6407 -0
  194. package/dist/api/compiler/path.d.ts +91 -0
  195. package/dist/api/compiler/path.js +705 -0
  196. package/dist/api/compiler/printer/async-helpers.d.ts +22 -0
  197. package/dist/api/compiler/printer/async-helpers.js +91 -0
  198. package/dist/api/compiler/printer/auto-generate.d.ts +13 -0
  199. package/dist/api/compiler/printer/auto-generate.js +20 -0
  200. package/dist/api/compiler/printer/decorator-helpers.d.ts +24 -0
  201. package/dist/api/compiler/printer/decorator-helpers.js +118 -0
  202. package/dist/api/compiler/printer/emit-context.d.ts +154 -0
  203. package/dist/api/compiler/printer/emit-context.js +576 -0
  204. package/dist/api/compiler/printer/emit-flags.d.ts +60 -0
  205. package/dist/api/compiler/printer/emit-flags.js +2 -0
  206. package/dist/api/compiler/printer/factory-base.d.ts +171 -0
  207. package/dist/api/compiler/printer/factory-base.js +1505 -0
  208. package/dist/api/compiler/printer/factory.d.ts +147 -0
  209. package/dist/api/compiler/printer/factory.js +542 -0
  210. package/dist/api/compiler/printer/helpers.d.ts +27 -0
  211. package/dist/api/compiler/printer/helpers.js +164 -0
  212. package/dist/api/compiler/printer/name-generator.d.ts +41 -0
  213. package/dist/api/compiler/printer/name-generator.js +283 -0
  214. package/dist/api/compiler/printer/printer.d.ts +411 -0
  215. package/dist/api/compiler/printer/printer.js +4517 -0
  216. package/dist/api/compiler/printer/text-writer.d.ts +46 -0
  217. package/dist/api/compiler/printer/text-writer.js +172 -0
  218. package/dist/api/compiler/printer/utilities.d.ts +82 -0
  219. package/dist/api/compiler/printer/utilities.js +817 -0
  220. package/dist/api/compiler/program-checker.d.ts +156 -0
  221. package/dist/api/compiler/program-checker.js +526 -0
  222. package/dist/api/compiler/program-utilities.d.ts +52 -0
  223. package/dist/api/compiler/program-utilities.js +365 -0
  224. package/dist/api/compiler/program.d.ts +180 -0
  225. package/dist/api/compiler/program.js +1011 -0
  226. package/dist/api/compiler/pseudo-bigint.d.ts +5 -0
  227. package/dist/api/compiler/pseudo-bigint.js +61 -0
  228. package/dist/api/compiler/regexp-checker.d.ts +38 -0
  229. package/dist/api/compiler/regexp-checker.js +942 -0
  230. package/dist/api/compiler/relations.d.ts +263 -0
  231. package/dist/api/compiler/relations.js +4002 -0
  232. package/dist/api/compiler/reparser.d.ts +48 -0
  233. package/dist/api/compiler/reparser.js +1323 -0
  234. package/dist/api/compiler/scanner.d.ts +256 -0
  235. package/dist/api/compiler/scanner.js +2853 -0
  236. package/dist/api/compiler/side-state.d.ts +16 -0
  237. package/dist/api/compiler/side-state.js +89 -0
  238. package/dist/api/compiler/sourcemap.d.ts +55 -0
  239. package/dist/api/compiler/sourcemap.js +340 -0
  240. package/dist/api/compiler/spelling.d.ts +14 -0
  241. package/dist/api/compiler/spelling.js +128 -0
  242. package/dist/api/compiler/symbol-accessibility.d.ts +57 -0
  243. package/dist/api/compiler/symbol-accessibility.js +894 -0
  244. package/dist/api/compiler/symbol.d.ts +240 -0
  245. package/dist/api/compiler/symbol.js +228 -0
  246. package/dist/api/compiler/symlinks.d.ts +32 -0
  247. package/dist/api/compiler/symlinks.js +114 -0
  248. package/dist/api/compiler/syntax-kind.d.ts +389 -0
  249. package/dist/api/compiler/syntax-kind.js +2 -0
  250. package/dist/api/compiler/timeline.d.ts +9 -0
  251. package/dist/api/compiler/timeline.js +54 -0
  252. package/dist/api/compiler/transformers/alias-references.d.ts +39 -0
  253. package/dist/api/compiler/transformers/alias-references.js +676 -0
  254. package/dist/api/compiler/transformers/async-utilities.d.ts +51 -0
  255. package/dist/api/compiler/transformers/async-utilities.js +260 -0
  256. package/dist/api/compiler/transformers/async.d.ts +53 -0
  257. package/dist/api/compiler/transformers/async.js +645 -0
  258. package/dist/api/compiler/transformers/class-fields.d.ts +206 -0
  259. package/dist/api/compiler/transformers/class-fields.js +2418 -0
  260. package/dist/api/compiler/transformers/class-utilities.d.ts +46 -0
  261. package/dist/api/compiler/transformers/class-utilities.js +261 -0
  262. package/dist/api/compiler/transformers/commonjs-module.d.ts +103 -0
  263. package/dist/api/compiler/transformers/commonjs-module.js +1180 -0
  264. package/dist/api/compiler/transformers/const-enum-inliner.d.ts +11 -0
  265. package/dist/api/compiler/transformers/const-enum-inliner.js +36 -0
  266. package/dist/api/compiler/transformers/declarations-diagnostics.d.ts +52 -0
  267. package/dist/api/compiler/transformers/declarations-diagnostics.js +538 -0
  268. package/dist/api/compiler/transformers/declarations-pseudo.d.ts +160 -0
  269. package/dist/api/compiler/transformers/declarations-pseudo.js +797 -0
  270. package/dist/api/compiler/transformers/declarations-resolver.d.ts +152 -0
  271. package/dist/api/compiler/transformers/declarations-resolver.js +35 -0
  272. package/dist/api/compiler/transformers/declarations-syntactic.d.ts +119 -0
  273. package/dist/api/compiler/transformers/declarations-syntactic.js +1582 -0
  274. package/dist/api/compiler/transformers/declarations-tracker.d.ts +46 -0
  275. package/dist/api/compiler/transformers/declarations-tracker.js +197 -0
  276. package/dist/api/compiler/transformers/declarations.d.ts +175 -0
  277. package/dist/api/compiler/transformers/declarations.js +2380 -0
  278. package/dist/api/compiler/transformers/decorator-metadata.d.ts +54 -0
  279. package/dist/api/compiler/transformers/decorator-metadata.js +554 -0
  280. package/dist/api/compiler/transformers/decorator-utilities.d.ts +38 -0
  281. package/dist/api/compiler/transformers/decorator-utilities.js +238 -0
  282. package/dist/api/compiler/transformers/destructuring.d.ts +25 -0
  283. package/dist/api/compiler/transformers/destructuring.js +626 -0
  284. package/dist/api/compiler/transformers/downlevel.d.ts +6 -0
  285. package/dist/api/compiler/transformers/downlevel.js +45 -0
  286. package/dist/api/compiler/transformers/emit-resolver.d.ts +61 -0
  287. package/dist/api/compiler/transformers/emit-resolver.js +197 -0
  288. package/dist/api/compiler/transformers/es-decorators.d.ts +118 -0
  289. package/dist/api/compiler/transformers/es-decorators.js +1901 -0
  290. package/dist/api/compiler/transformers/exponentiation.d.ts +11 -0
  291. package/dist/api/compiler/transformers/exponentiation.js +76 -0
  292. package/dist/api/compiler/transformers/external-module-info.d.ts +35 -0
  293. package/dist/api/compiler/transformers/external-module-info.js +351 -0
  294. package/dist/api/compiler/transformers/for-await.d.ts +43 -0
  295. package/dist/api/compiler/transformers/for-await.js +469 -0
  296. package/dist/api/compiler/transformers/import-elision.d.ts +16 -0
  297. package/dist/api/compiler/transformers/import-elision.js +124 -0
  298. package/dist/api/compiler/transformers/jsx-entities.d.ts +1 -0
  299. package/dist/api/compiler/transformers/jsx-entities.js +256 -0
  300. package/dist/api/compiler/transformers/jsx.d.ts +71 -0
  301. package/dist/api/compiler/transformers/jsx.js +700 -0
  302. package/dist/api/compiler/transformers/legacy-decorators.d.ts +56 -0
  303. package/dist/api/compiler/transformers/legacy-decorators.js +564 -0
  304. package/dist/api/compiler/transformers/logical-assignment.d.ts +14 -0
  305. package/dist/api/compiler/transformers/logical-assignment.js +62 -0
  306. package/dist/api/compiler/transformers/module-utilities.d.ts +9 -0
  307. package/dist/api/compiler/transformers/module-utilities.js +36 -0
  308. package/dist/api/compiler/transformers/module.d.ts +49 -0
  309. package/dist/api/compiler/transformers/module.js +296 -0
  310. package/dist/api/compiler/transformers/named-evaluation.d.ts +26 -0
  311. package/dist/api/compiler/transformers/named-evaluation.js +266 -0
  312. package/dist/api/compiler/transformers/nullish-coalescing.d.ts +9 -0
  313. package/dist/api/compiler/transformers/nullish-coalescing.js +26 -0
  314. package/dist/api/compiler/transformers/object-rest-spread.d.ts +34 -0
  315. package/dist/api/compiler/transformers/object-rest-spread.js +411 -0
  316. package/dist/api/compiler/transformers/optional-catch.d.ts +9 -0
  317. package/dist/api/compiler/transformers/optional-catch.js +20 -0
  318. package/dist/api/compiler/transformers/optional-chain.d.ts +14 -0
  319. package/dist/api/compiler/transformers/optional-chain.js +188 -0
  320. package/dist/api/compiler/transformers/reference-resolver.d.ts +128 -0
  321. package/dist/api/compiler/transformers/reference-resolver.js +1155 -0
  322. package/dist/api/compiler/transformers/runtime-syntax.d.ts +71 -0
  323. package/dist/api/compiler/transformers/runtime-syntax.js +753 -0
  324. package/dist/api/compiler/transformers/subtree-facts.d.ts +9 -0
  325. package/dist/api/compiler/transformers/subtree-facts.js +203 -0
  326. package/dist/api/compiler/transformers/syntax-facts.d.ts +51 -0
  327. package/dist/api/compiler/transformers/syntax-facts.js +254 -0
  328. package/dist/api/compiler/transformers/tagged-template.d.ts +17 -0
  329. package/dist/api/compiler/transformers/tagged-template.js +148 -0
  330. package/dist/api/compiler/transformers/transformer.d.ts +17 -0
  331. package/dist/api/compiler/transformers/transformer.js +54 -0
  332. package/dist/api/compiler/transformers/type-eraser.d.ts +21 -0
  333. package/dist/api/compiler/transformers/type-eraser.js +346 -0
  334. package/dist/api/compiler/transformers/type-serialization.d.ts +20 -0
  335. package/dist/api/compiler/transformers/type-serialization.js +347 -0
  336. package/dist/api/compiler/transformers/using.d.ts +56 -0
  337. package/dist/api/compiler/transformers/using.js +453 -0
  338. package/dist/api/compiler/transformers/utilities.d.ts +50 -0
  339. package/dist/api/compiler/transformers/utilities.js +347 -0
  340. package/dist/api/compiler/transformers/visitor-base.d.ts +6 -0
  341. package/dist/api/compiler/transformers/visitor-base.js +817 -0
  342. package/dist/api/compiler/transformers/visitor-hooks.d.ts +29 -0
  343. package/dist/api/compiler/transformers/visitor-hooks.js +189 -0
  344. package/dist/api/compiler/tsconfig.d.ts +177 -0
  345. package/dist/api/compiler/tsconfig.js +1311 -0
  346. package/dist/api/compiler/type-printer.d.ts +15 -0
  347. package/dist/api/compiler/type-printer.js +74 -0
  348. package/dist/api/compiler/types.d.ts +87 -0
  349. package/dist/api/compiler/types.js +23 -0
  350. package/dist/api/compiler/unicode-identifiers.d.ts +2 -0
  351. package/dist/api/compiler/unicode-identifiers.js +209 -0
  352. package/dist/api/compiler/unicode-properties.d.ts +8 -0
  353. package/dist/api/compiler/unicode-properties.js +531 -0
  354. package/dist/api/compiler/vfs-match.d.ts +24 -0
  355. package/dist/api/compiler/vfs-match.js +587 -0
  356. package/dist/api/library/ast.d.ts +74 -0
  357. package/dist/api/library/ast.generated.d.ts +1145 -0
  358. package/dist/api/library/ast.generated.js +3 -0
  359. package/dist/api/library/ast.js +5 -0
  360. package/dist/api/library/checker.d.ts +51 -0
  361. package/dist/api/library/checker.js +318 -0
  362. package/dist/api/library/compiler-options.generated.d.ts +108 -0
  363. package/dist/api/library/compiler-options.generated.js +3 -0
  364. package/dist/api/library/diagnostics.d.ts +13 -0
  365. package/dist/api/library/diagnostics.js +50 -0
  366. package/dist/api/library/disk.d.ts +13 -0
  367. package/dist/api/library/disk.js +66 -0
  368. package/dist/api/library/enums.generated.d.ts +891 -0
  369. package/dist/api/library/enums.generated.js +916 -0
  370. package/dist/api/library/errors.d.ts +13 -0
  371. package/dist/api/library/errors.js +24 -0
  372. package/dist/api/library/host.d.ts +24 -0
  373. package/dist/api/library/host.js +52 -0
  374. package/dist/api/library/index.d.ts +14 -0
  375. package/dist/api/library/index.js +15 -0
  376. package/dist/api/library/nodes.d.ts +51 -0
  377. package/dist/api/library/nodes.js +196 -0
  378. package/dist/api/library/options.d.ts +144 -0
  379. package/dist/api/library/options.js +308 -0
  380. package/dist/api/library/parse.d.ts +19 -0
  381. package/dist/api/library/parse.js +41 -0
  382. package/dist/api/library/program.d.ts +21 -0
  383. package/dist/api/library/program.js +234 -0
  384. package/dist/api/library/symbols.d.ts +8 -0
  385. package/dist/api/library/symbols.js +11 -0
  386. package/dist/api/library/types.d.ts +313 -0
  387. package/dist/api/library/types.js +6 -0
  388. package/package.json +22 -8
  389. package/src/compiler/ast-utilities.ts +548 -0
  390. package/src/compiler/ast.ts +12862 -0
  391. package/src/compiler/astnav.ts +799 -0
  392. package/src/compiler/binder-utilities.ts +1392 -0
  393. package/src/compiler/binder.ts +2703 -0
  394. package/src/compiler/build-info.ts +1197 -0
  395. package/src/compiler/character-codes.ts +323 -0
  396. package/src/compiler/checker-calls.ts +2155 -0
  397. package/src/compiler/checker-classes.ts +706 -0
  398. package/src/compiler/checker-contextual.ts +1457 -0
  399. package/src/compiler/checker-declaration-order.ts +438 -0
  400. package/src/compiler/checker-declarations.ts +1194 -0
  401. package/src/compiler/checker-declared-types.ts +919 -0
  402. package/src/compiler/checker-decorators.ts +694 -0
  403. package/src/compiler/checker-deprecation.ts +359 -0
  404. package/src/compiler/checker-destructuring.ts +805 -0
  405. package/src/compiler/checker-elaboration.ts +477 -0
  406. package/src/compiler/checker-emit-helpers.ts +224 -0
  407. package/src/compiler/checker-emit-resolver.ts +769 -0
  408. package/src/compiler/checker-evaluator.ts +243 -0
  409. package/src/compiler/checker-expressions.ts +1831 -0
  410. package/src/compiler/checker-features.ts +361 -0
  411. package/src/compiler/checker-flow.ts +394 -0
  412. package/src/compiler/checker-functions.ts +1296 -0
  413. package/src/compiler/checker-generated-code.ts +227 -0
  414. package/src/compiler/checker-globals.ts +52 -0
  415. package/src/compiler/checker-grammar.ts +3584 -0
  416. package/src/compiler/checker-heritage.ts +1233 -0
  417. package/src/compiler/checker-inference.ts +2576 -0
  418. package/src/compiler/checker-iteration.ts +1206 -0
  419. package/src/compiler/checker-javascript.ts +502 -0
  420. package/src/compiler/checker-jsdoc.ts +360 -0
  421. package/src/compiler/checker-jsx.ts +1924 -0
  422. package/src/compiler/checker-literals.ts +61 -0
  423. package/src/compiler/checker-members.ts +2436 -0
  424. package/src/compiler/checker-modules.ts +2886 -0
  425. package/src/compiler/checker-narrowing.ts +3230 -0
  426. package/src/compiler/checker-object-literals.ts +575 -0
  427. package/src/compiler/checker-operators.ts +1422 -0
  428. package/src/compiler/checker-overloads.ts +328 -0
  429. package/src/compiler/checker-property-access.ts +906 -0
  430. package/src/compiler/checker-services.ts +1149 -0
  431. package/src/compiler/checker-signatures.ts +1032 -0
  432. package/src/compiler/checker-source-file.ts +732 -0
  433. package/src/compiler/checker-statements.ts +292 -0
  434. package/src/compiler/checker-super.ts +261 -0
  435. package/src/compiler/checker-symbol-types.ts +2107 -0
  436. package/src/compiler/checker-symbols.ts +2150 -0
  437. package/src/compiler/checker-type-factory.ts +2579 -0
  438. package/src/compiler/checker-type-nodes.ts +1033 -0
  439. package/src/compiler/checker-type-operators.ts +2502 -0
  440. package/src/compiler/checker-types.ts +2340 -0
  441. package/src/compiler/checker-unused.ts +642 -0
  442. package/src/compiler/checker-utilities.ts +161 -0
  443. package/src/compiler/checker.ts +1116 -0
  444. package/src/compiler/command-line.ts +436 -0
  445. package/src/compiler/compile-program.ts +439 -0
  446. package/src/compiler/decoder.ts +1209 -0
  447. package/src/compiler/diagnostic-locales.ts +86 -0
  448. package/src/compiler/diagnostic-messages.ts +2349 -0
  449. package/src/compiler/diagnostics.ts +897 -0
  450. package/src/compiler/emitter.ts +434 -0
  451. package/src/compiler/encoder.ts +1945 -0
  452. package/src/compiler/file-include.ts +673 -0
  453. package/src/compiler/file-loader.ts +1528 -0
  454. package/src/compiler/file-system.ts +143 -0
  455. package/src/compiler/flow.ts +89 -0
  456. package/src/compiler/help.ts +473 -0
  457. package/src/compiler/incremental.ts +2784 -0
  458. package/src/compiler/init.ts +141 -0
  459. package/src/compiler/instantiation.ts +894 -0
  460. package/src/compiler/jsdoc.ts +1386 -0
  461. package/src/compiler/link-tables.ts +98 -0
  462. package/src/compiler/locale-data.ts +203 -0
  463. package/src/compiler/locale.ts +307 -0
  464. package/src/compiler/locales/cs-CZ.ts +5 -0
  465. package/src/compiler/locales/de-DE.ts +5 -0
  466. package/src/compiler/locales/es-ES.ts +5 -0
  467. package/src/compiler/locales/fr-FR.ts +5 -0
  468. package/src/compiler/locales/it-IT.ts +5 -0
  469. package/src/compiler/locales/ja-JP.ts +5 -0
  470. package/src/compiler/locales/ko-KR.ts +5 -0
  471. package/src/compiler/locales/pl-PL.ts +5 -0
  472. package/src/compiler/locales/pt-BR.ts +5 -0
  473. package/src/compiler/locales/ru-RU.ts +5 -0
  474. package/src/compiler/locales/tr-TR.ts +5 -0
  475. package/src/compiler/locales/zh-CN.ts +5 -0
  476. package/src/compiler/locales/zh-TW.ts +5 -0
  477. package/src/compiler/module-resolution-types.ts +243 -0
  478. package/src/compiler/module-resolution.ts +2072 -0
  479. package/src/compiler/module-specifiers.ts +1491 -0
  480. package/src/compiler/name-resolver.ts +646 -0
  481. package/src/compiler/node-builder-names.ts +1069 -0
  482. package/src/compiler/node-builder-pseudo.ts +892 -0
  483. package/src/compiler/node-builder-reuse.ts +764 -0
  484. package/src/compiler/node-builder.ts +3425 -0
  485. package/src/compiler/option-declarations.ts +1560 -0
  486. package/src/compiler/options.ts +1576 -0
  487. package/src/compiler/output-paths.ts +334 -0
  488. package/src/compiler/package-json.ts +1083 -0
  489. package/src/compiler/parallel-check.ts +1951 -0
  490. package/src/compiler/parallel-parse.ts +590 -0
  491. package/src/compiler/parse-thread.ts +140 -0
  492. package/src/compiler/parser.ts +7716 -0
  493. package/src/compiler/path.ts +717 -0
  494. package/src/compiler/printer/async-helpers.ts +183 -0
  495. package/src/compiler/printer/auto-generate.ts +27 -0
  496. package/src/compiler/printer/decorator-helpers.ts +218 -0
  497. package/src/compiler/printer/emit-context.ts +679 -0
  498. package/src/compiler/printer/emit-flags.ts +64 -0
  499. package/src/compiler/printer/factory-base.ts +2577 -0
  500. package/src/compiler/printer/factory.ts +764 -0
  501. package/src/compiler/printer/helpers.ts +291 -0
  502. package/src/compiler/printer/name-generator.ts +372 -0
  503. package/src/compiler/printer/printer.ts +5072 -0
  504. package/src/compiler/printer/text-writer.ts +183 -0
  505. package/src/compiler/printer/utilities.ts +884 -0
  506. package/src/compiler/program-checker.ts +592 -0
  507. package/src/compiler/program-utilities.ts +435 -0
  508. package/src/compiler/program.ts +1419 -0
  509. package/src/compiler/pseudo-bigint.ts +62 -0
  510. package/src/compiler/regexp-checker.ts +1142 -0
  511. package/src/compiler/relations.ts +5149 -0
  512. package/src/compiler/reparser.ts +1566 -0
  513. package/src/compiler/scanner.ts +2951 -0
  514. package/src/compiler/show-config.ts +239 -0
  515. package/src/compiler/side-state.ts +125 -0
  516. package/src/compiler/sourcemap.ts +366 -0
  517. package/src/compiler/spelling.ts +122 -0
  518. package/src/compiler/symbol-accessibility.ts +1071 -0
  519. package/src/compiler/symbol.ts +439 -0
  520. package/src/compiler/symlinks.ts +137 -0
  521. package/src/compiler/syntax-kind.ts +391 -0
  522. package/src/compiler/thread-entry.ts +191 -0
  523. package/src/compiler/timeline.ts +53 -0
  524. package/src/compiler/transformers/alias-references.ts +757 -0
  525. package/src/compiler/transformers/async-utilities.ts +335 -0
  526. package/src/compiler/transformers/async.ts +838 -0
  527. package/src/compiler/transformers/class-fields.ts +2967 -0
  528. package/src/compiler/transformers/class-utilities.ts +324 -0
  529. package/src/compiler/transformers/commonjs-module.ts +1621 -0
  530. package/src/compiler/transformers/const-enum-inliner.ts +50 -0
  531. package/src/compiler/transformers/declarations-diagnostics.ts +832 -0
  532. package/src/compiler/transformers/declarations-pseudo.ts +966 -0
  533. package/src/compiler/transformers/declarations-resolver.ts +249 -0
  534. package/src/compiler/transformers/declarations-syntactic.ts +1859 -0
  535. package/src/compiler/transformers/declarations-tracker.ts +269 -0
  536. package/src/compiler/transformers/declarations.ts +3120 -0
  537. package/src/compiler/transformers/decorator-metadata.ts +697 -0
  538. package/src/compiler/transformers/decorator-utilities.ts +283 -0
  539. package/src/compiler/transformers/destructuring.ts +708 -0
  540. package/src/compiler/transformers/downlevel.ts +50 -0
  541. package/src/compiler/transformers/emit-resolver.ts +258 -0
  542. package/src/compiler/transformers/es-decorators.ts +2682 -0
  543. package/src/compiler/transformers/exponentiation.ts +80 -0
  544. package/src/compiler/transformers/external-module-info.ts +412 -0
  545. package/src/compiler/transformers/for-await.ts +687 -0
  546. package/src/compiler/transformers/import-elision.ts +152 -0
  547. package/src/compiler/transformers/jsx-entities.ts +256 -0
  548. package/src/compiler/transformers/jsx.ts +824 -0
  549. package/src/compiler/transformers/legacy-decorators.ts +726 -0
  550. package/src/compiler/transformers/logical-assignment.ts +75 -0
  551. package/src/compiler/transformers/module-utilities.ts +42 -0
  552. package/src/compiler/transformers/module.ts +474 -0
  553. package/src/compiler/transformers/named-evaluation.ts +389 -0
  554. package/src/compiler/transformers/nullish-coalescing.ts +35 -0
  555. package/src/compiler/transformers/object-rest-spread.ts +577 -0
  556. package/src/compiler/transformers/optional-catch.ts +29 -0
  557. package/src/compiler/transformers/optional-chain.ts +246 -0
  558. package/src/compiler/transformers/reference-resolver.ts +1201 -0
  559. package/src/compiler/transformers/runtime-syntax.ts +942 -0
  560. package/src/compiler/transformers/subtree-facts.ts +245 -0
  561. package/src/compiler/transformers/syntax-facts.ts +353 -0
  562. package/src/compiler/transformers/tagged-template.ts +167 -0
  563. package/src/compiler/transformers/transformer.ts +56 -0
  564. package/src/compiler/transformers/type-eraser.ts +520 -0
  565. package/src/compiler/transformers/type-serialization.ts +374 -0
  566. package/src/compiler/transformers/using.ts +613 -0
  567. package/src/compiler/transformers/utilities.ts +419 -0
  568. package/src/compiler/transformers/visitor-base.ts +1601 -0
  569. package/src/compiler/transformers/visitor-hooks.ts +252 -0
  570. package/src/compiler/tsc-build.ts +1418 -0
  571. package/src/compiler/tsc-cli.ts +666 -0
  572. package/src/compiler/tsc-compile.ts +437 -0
  573. package/src/compiler/tsc-watch.ts +854 -0
  574. package/src/compiler/tsconfig.ts +1574 -0
  575. package/src/compiler/type-printer.ts +110 -0
  576. package/src/compiler/types.ts +115 -0
  577. package/src/compiler/unicode-identifiers.ts +212 -0
  578. package/src/compiler/unicode-properties.ts +537 -0
  579. package/src/compiler/vfs-match.ts +597 -0
  580. package/src/compiler/xxh3.ts +650 -0
  581. package/src/library/ast.generated.ts +1685 -0
  582. package/src/library/ast.ts +104 -0
  583. package/src/library/checker.ts +384 -0
  584. package/src/library/compiler-options.generated.ts +114 -0
  585. package/src/library/diagnostics.ts +72 -0
  586. package/src/library/disk.ts +73 -0
  587. package/src/library/enums.generated.ts +1024 -0
  588. package/src/library/errors.ts +26 -0
  589. package/src/library/host.ts +63 -0
  590. package/src/library/index.ts +71 -0
  591. package/src/library/nodes.ts +232 -0
  592. package/src/library/options.ts +449 -0
  593. package/src/library/parse.ts +63 -0
  594. package/src/library/program.ts +293 -0
  595. package/src/library/symbols.ts +15 -0
  596. package/src/library/types.ts +359 -0
@@ -0,0 +1,1069 @@
1
+ // Naming symbols in built nodes: the chain of symbols reaching a symbol from the enclosing
2
+ // declaration, written as an entity name, `import("…")` type, indexed access or expression.
3
+ import {
4
+ ComputedPropertyName,
5
+ ElementAccessExpression,
6
+ ExpressionWithTypeArguments,
7
+ Identifier,
8
+ ImportAttribute,
9
+ ImportAttributes,
10
+ ImportTypeNode,
11
+ IndexedAccessTypeNode,
12
+ LiteralTypeNode,
13
+ type Node,
14
+ type NodeList,
15
+ NodeFlags,
16
+ ParenthesizedTypeNode,
17
+ PrefixUnaryExpression,
18
+ PropertyAccessExpression,
19
+ QualifiedName,
20
+ SourceFile,
21
+ StringLiteral,
22
+ TypeQueryNode,
23
+ TypeReferenceNode,
24
+ getArguments,
25
+ getExpression,
26
+ getInitializer,
27
+ getModuleSpecifier,
28
+ getName,
29
+ getSymbol,
30
+ getText,
31
+ } from './ast.js';
32
+ import {
33
+ declarationNameToString,
34
+ getDeclarationOfKind,
35
+ getNameOfDeclaration,
36
+ getSourceFileOfNode,
37
+ isModuleAugmentationExternal,
38
+ } from './binder-utilities.js';
39
+ import { getExternalModuleName, isAmbientModule, isGlobalScopeAugmentation, isRequireCall } from './ast-utilities.js';
40
+ import { getSymbolAtLocation } from './checker-services.js';
41
+ import { checkExpression } from './checker-expressions.js';
42
+ import { getExportsOfSymbol, getMembersOfSymbol, isAmbientModuleSymbolName, resolveAlias } from './checker-symbols.js';
43
+ import { compareSymbols } from './checker-type-factory.js';
44
+ import { TypeFlags, type LiteralType, type Type } from './checker-types.js';
45
+ import { isLateBoundName } from './checker-utilities.js';
46
+ import { isExternalModuleNameRelative, pathIsRelative } from './path.js';
47
+ import type { Checker } from './checker.js';
48
+ import type { ResolvedModule } from './module-resolution-types.js';
49
+ import {
50
+ ModuleSpecifierHost,
51
+ ModuleSpecifierPreferences,
52
+ countPathComponents,
53
+ getModuleSpecifiersForFile,
54
+ } from './module-specifiers.js';
55
+ import { ModuleKind, ModuleResolutionKind, getModuleResolutionKind } from './options.js';
56
+ import type { OutputPathsHost } from './output-paths.js';
57
+ import type { PackageJsonInfo } from './package-json.js';
58
+ import type { KnownSymlinks } from './symlinks.js';
59
+ import { isExternalModuleAugmentation } from './transformers/declarations-syntactic.js';
60
+ import { EmitFlags } from './printer/emit-flags.js';
61
+ import { isIdentifierText } from './scanner.js';
62
+ import {
63
+ CheckFlags,
64
+ InternalSymbolName,
65
+ type Symbol,
66
+ SymbolFlags,
67
+ escapeInternalSymbolName,
68
+ getSymbolId,
69
+ } from './symbol.js';
70
+ import {
71
+ getAccessibleSymbolChain,
72
+ getAliasForSymbolInContainer,
73
+ getContainersOfSymbol,
74
+ getFileSymbolIfFileSymbolExportEqualsContainer,
75
+ getQualifiedLeftMeaning,
76
+ getSymbolIfSameReference,
77
+ hasNonGlobalAugmentationExternalModuleDeclaration,
78
+ needsQualification,
79
+ } from './symbol-accessibility.js';
80
+ import { SyntaxKind } from './syntax-kind.js';
81
+ import { NodeBuilderFlags, NodeBuilderInternalFlags } from './transformers/declarations-resolver.js';
82
+ import { TokenFlags } from './types.js';
83
+ import { type NodeBuilder, classifyPropertyName, isNumericLiteralName } from './node-builder.js';
84
+
85
+ // ---- Symbol chains
86
+
87
+ /** The chain of symbols naming `symbol`, reported to the tracker. */
88
+ export function lookupSymbolChain(
89
+ b: NodeBuilder,
90
+ symbol: Symbol,
91
+ meaning: SymbolFlags,
92
+ yieldModuleSymbol: boolean,
93
+ ): Symbol[] {
94
+ b.trackSymbol(symbol, b.enclosingDeclaration, meaning);
95
+ // Qualified only with somewhere to qualify from, and never for type parameters.
96
+ if (
97
+ (symbol.flags & SymbolFlags.TypeParameter) === 0 &&
98
+ (b.enclosingDeclaration !== undefined || (b.flags & NodeBuilderFlags.UseFullyQualifiedType) !== 0) &&
99
+ (b.internalFlags & NodeBuilderInternalFlags.DoNotIncludeSymbolChain) === 0
100
+ )
101
+ return getSymbolChain(b, symbol, meaning, true, yieldModuleSymbol)!;
102
+ return [symbol];
103
+ }
104
+
105
+ /** `endOfChain` is false for parents, which may be omitted. */
106
+ function getSymbolChain(
107
+ b: NodeBuilder,
108
+ symbol: Symbol,
109
+ meaning: SymbolFlags,
110
+ endOfChain: boolean,
111
+ yieldModuleSymbol: boolean,
112
+ ): Symbol[] | undefined {
113
+ const c = b.c;
114
+ let chain = getAccessibleSymbolChain(
115
+ c,
116
+ symbol,
117
+ b.enclosingDeclaration,
118
+ meaning,
119
+ (b.flags & NodeBuilderFlags.UseOnlyExternalAliasing) !== 0,
120
+ );
121
+ const qualifierMeaning = chain.length > 1 ? getQualifiedLeftMeaning(meaning) : meaning;
122
+ if (chain.length === 0 || needsQualification(c, chain[0]!, b.enclosingDeclaration, qualifierMeaning)) {
123
+ // Go up and add the parent.
124
+ const root = chain.length > 0 ? chain[0]! : symbol;
125
+ const parents = getContainersOfSymbol(c, root, b.enclosingDeclaration, meaning);
126
+ if (parents.length > 0) {
127
+ const specifiers: string[] = [];
128
+ const order: number[] = [];
129
+ for (const p of parents) {
130
+ order.push(specifiers.length);
131
+ specifiers.push(
132
+ hasNonGlobalAugmentationExternalModuleDeclaration(p)
133
+ ? getSpecifierForModuleSymbol(b, p, ModuleKind.None)
134
+ : '',
135
+ );
136
+ }
137
+ order.sort((x, y) => compareByBestName(b, parents[x]!, specifiers[x]!, parents[y]!, specifiers[y]!) || x - y);
138
+ for (const index of order) {
139
+ const parent = parents[index]!;
140
+ const parentChain = getSymbolChain(b, parent, getQualifiedLeftMeaning(meaning), false, yieldModuleSymbol);
141
+ if (parentChain === undefined || parentChain.length === 0) continue;
142
+ const exportEquals = parent.exports?.get(InternalSymbolName.ExportEquals);
143
+ if (exportEquals !== undefined && getSymbolIfSameReference(c, exportEquals, symbol) !== undefined) {
144
+ // The parent's `export =` is the symbol itself: no alias to look up.
145
+ chain = parentChain;
146
+ break;
147
+ }
148
+ const next = chain.length > 0 ? chain : [getAliasForSymbolInContainer(c, parent, symbol) ?? symbol];
149
+ chain = parentChain.concat(next);
150
+ break;
151
+ }
152
+ }
153
+ }
154
+ if (chain.length > 0) return chain;
155
+ // The end of a chain is always written; an anonymous type parent never is.
156
+ if (endOfChain || (symbol.flags & (SymbolFlags.TypeLiteral | SymbolFlags.ObjectLiteral)) === 0) {
157
+ // An external module parent isn't written: `x` rather than `"foo/bar".x`.
158
+ if (!endOfChain && !yieldModuleSymbol && hasNonGlobalAugmentationExternalModuleDeclaration(symbol))
159
+ return undefined;
160
+ return [symbol];
161
+ }
162
+ return undefined;
163
+ }
164
+
165
+ function compareByBestName(b: NodeBuilder, a: Symbol, specifierA: string, other: Symbol, specifierB: string): number {
166
+ if (specifierA.length > 0 && specifierB.length > 0) {
167
+ const isBRelative = pathIsRelative(specifierB);
168
+ if (pathIsRelative(specifierA) === isBRelative)
169
+ return countPathComponents(specifierA) - countPathComponents(specifierB);
170
+ return isBRelative ? -1 : 1;
171
+ }
172
+ return compareSymbols(b.c, a, other);
173
+ }
174
+
175
+ // ---- Type nodes
176
+
177
+ /** A type node naming `symbol` with `mask`: a type reference, `typeof`, indexed access or `import("…")`. */
178
+ export function symbolToTypeNode(
179
+ b: NodeBuilder,
180
+ symbol: Symbol,
181
+ mask: SymbolFlags,
182
+ typeArguments: NodeList | undefined,
183
+ ): Node | undefined {
184
+ // Outside the current scope, the module isn't needed.
185
+ const chain = lookupSymbolChain(
186
+ b,
187
+ symbol,
188
+ mask,
189
+ (b.flags & NodeBuilderFlags.UseAliasDefinedOutsideCurrentScope) === 0,
190
+ );
191
+ if (chain.length === 0) return undefined;
192
+ const isTypeOf = mask === SymbolFlags.Value;
193
+ if (hasNonGlobalAugmentationExternalModuleDeclaration(chain[0]!)) {
194
+ // A module root needs an `import` type.
195
+ const nonRootParts =
196
+ chain.length > 1 ? createAccessFromSymbolChain(b, chain, chain.length - 1, 1, typeArguments) : undefined;
197
+ const typeParameterNodes = typeArguments ?? lookupTypeParameterNodes(b, chain, 0);
198
+ let specifier = '';
199
+ let attributes: ImportAttributes | undefined = undefined;
200
+ const c = b.c;
201
+ const resolution = getModuleResolutionKind(c.compilerOptions);
202
+ const nodeNext = resolution === ModuleResolutionKind.Node16 || resolution === ModuleResolutionKind.NodeNext;
203
+ const contextFile =
204
+ b.enclosingDeclaration === undefined
205
+ ? undefined
206
+ : getSourceFileOfNode(b.context.mostOriginal(b.enclosingDeclaration));
207
+ if (nodeNext) {
208
+ // An `import` type of an ES module from a file of another format resolves only in ESM mode.
209
+ const targetFile = getSourceFileOfModule(chain[0]!);
210
+ if (targetFile !== undefined && contextFile !== undefined) {
211
+ const targetFormat = c.host.getEmitModuleFormatOfFile(targetFile);
212
+ if (targetFormat === ModuleKind.ESNext && targetFormat !== c.host.getEmitModuleFormatOfFile(contextFile)) {
213
+ specifier = getSpecifierForModuleSymbol(b, chain[0]!, ModuleKind.ESNext);
214
+ attributes = resolutionModeAttributes(b, 'import');
215
+ }
216
+ }
217
+ }
218
+ if (specifier === '') specifier = getSpecifierForModuleSymbol(b, chain[0]!, ModuleKind.None);
219
+ if ((b.flags & NodeBuilderFlags.AllowNodeModulesRelativePaths) === 0 && specifier.includes('/node_modules/')) {
220
+ const oldSpecifier = specifier;
221
+ if (nodeNext && contextFile !== undefined) {
222
+ // The other mode may reach the module portably.
223
+ const swappedMode =
224
+ c.host.getEmitModuleFormatOfFile(contextFile) === ModuleKind.ESNext ? ModuleKind.CommonJS : ModuleKind.ESNext;
225
+ specifier = getSpecifierForModuleSymbol(b, chain[0]!, swappedMode);
226
+ if (specifier.includes('/node_modules/')) specifier = oldSpecifier;
227
+ else attributes = resolutionModeAttributes(b, swappedMode === ModuleKind.ESNext ? 'import' : 'require');
228
+ }
229
+ if (attributes === undefined) {
230
+ // A reference into `node_modules` is likely to break when published.
231
+ b.encounteredError = true;
232
+ b.tracker.reportLikelyUnsafeImportRequiredError(oldSpecifier, symbol.name);
233
+ }
234
+ }
235
+ const literal = b.created(new LiteralTypeNode(b.stringLiteral(specifier, false)));
236
+ b.approximateLength += specifier.length + 10;
237
+ if (nonRootParts === undefined || isEntityName(nonRootParts))
238
+ return b.created(new ImportTypeNode(isTypeOf, literal, attributes, nonRootParts, typeParameterNodes));
239
+ const splitNode = getTopmostIndexedAccessType(nonRootParts as IndexedAccessTypeNode);
240
+ const qualifier = (splitNode.objectType as TypeReferenceNode).typeName;
241
+ return b.created(
242
+ new IndexedAccessTypeNode(
243
+ b.created(new ImportTypeNode(isTypeOf, literal, attributes, qualifier, typeParameterNodes)),
244
+ splitNode.indexType,
245
+ ),
246
+ );
247
+ }
248
+ const entityName = createAccessFromSymbolChain(b, chain, chain.length - 1, 0, typeArguments);
249
+ // Indexed accesses can't be `typeof`.
250
+ if (entityName instanceof IndexedAccessTypeNode) return entityName;
251
+ if (isEntityName(entityName))
252
+ return isTypeOf
253
+ ? b.created(new TypeQueryNode(entityName, undefined))
254
+ : b.created(new TypeReferenceNode(entityName, typeArguments));
255
+ if (isTypeOf && entityName instanceof ExpressionWithTypeArguments)
256
+ return b.created(new TypeQueryNode(entityName.expression.deepClone(), entityName.typeArguments));
257
+ return entityName;
258
+ }
259
+
260
+ function isEntityName(node: Node): boolean {
261
+ return node.kind === SyntaxKind.Identifier || node.kind === SyntaxKind.QualifiedName;
262
+ }
263
+
264
+ /** `with { "resolution-mode": "import" }` or `"require"`. */
265
+ function resolutionModeAttributes(b: NodeBuilder, mode: string): ImportAttributes {
266
+ const attribute = b.created(
267
+ new ImportAttribute(b.stringLiteral('resolution-mode', false), b.stringLiteral(mode, false)),
268
+ );
269
+ return b.created(new ImportAttributes(SyntaxKind.WithKeyword, b.list([attribute]), false));
270
+ }
271
+
272
+ function getTopmostIndexedAccessType(node: IndexedAccessTypeNode): IndexedAccessTypeNode {
273
+ const objectType = node.objectType;
274
+ return objectType instanceof IndexedAccessTypeNode ? getTopmostIndexedAccessType(objectType) : node;
275
+ }
276
+
277
+ function createAccessFromSymbolChain(
278
+ b: NodeBuilder,
279
+ chain: Symbol[],
280
+ index: number,
281
+ stopper: number,
282
+ overrideTypeArguments: NodeList | undefined,
283
+ ): Node {
284
+ const c = b.c;
285
+ const typeParameterNodes =
286
+ index !== chain.length - 1 ? lookupTypeParameterNodes(b, chain, index) : overrideTypeArguments;
287
+ const symbol = chain[index]!;
288
+ const parent = index > 0 ? chain[index - 1]! : undefined;
289
+ let symbolName = '';
290
+ if (index === 0) {
291
+ b.flags |= NodeBuilderFlags.InInitialEntityName;
292
+ symbolName = getNameOfSymbolAsWritten(b, symbol);
293
+ b.approximateLength += symbolName.length + 1;
294
+ b.flags ^= NodeBuilderFlags.InInitialEntityName;
295
+ } else if (parent !== undefined) {
296
+ // A reference to the symbol within its parent, for export aliases.
297
+ const exports = getExportsOfSymbol(c, parent);
298
+ const direct = exports.get(symbol.name);
299
+ if (
300
+ symbol.name !== InternalSymbolName.ExportEquals &&
301
+ !isLateBoundName(symbol.name) &&
302
+ direct !== undefined &&
303
+ getSymbolIfSameReference(c, direct, symbol) !== undefined
304
+ )
305
+ symbolName = symbol.name;
306
+ else {
307
+ const candidates: Symbol[] = [];
308
+ const names: string[] = [];
309
+ for (const [name, exported] of exports)
310
+ if (
311
+ getSymbolIfSameReference(c, exported, symbol) !== undefined &&
312
+ !isLateBoundName(name) &&
313
+ name !== InternalSymbolName.ExportEquals
314
+ ) {
315
+ candidates.push(exported);
316
+ names.push(name);
317
+ }
318
+ if (candidates.length > 0) {
319
+ let best = 0;
320
+ for (let i = 1; i < candidates.length; i++)
321
+ if (compareSymbols(c, candidates[i]!, candidates[best]!) < 0) best = i;
322
+ symbolName = names[best]!;
323
+ }
324
+ }
325
+ }
326
+ if (symbolName.length === 0) {
327
+ let name: Node | undefined = undefined;
328
+ for (const d of symbol.declarations) {
329
+ name = getNameOfDeclaration(d);
330
+ if (name !== undefined) break;
331
+ }
332
+ if (name !== undefined && name.kind === SyntaxKind.ComputedPropertyName && isEntityName(getExpression(name)!)) {
333
+ const lhs = createAccessFromSymbolChain(b, chain, index - 1, stopper, overrideTypeArguments);
334
+ if (isEntityName(lhs))
335
+ return b.created(
336
+ new IndexedAccessTypeNode(
337
+ b.created(new ParenthesizedTypeNode(b.created(new TypeQueryNode(lhs, undefined)))),
338
+ b.created(new TypeQueryNode(getExpression(name)!, undefined)),
339
+ ),
340
+ );
341
+ return lhs;
342
+ }
343
+ symbolName = getNameOfSymbolAsWritten(b, symbol);
344
+ }
345
+ b.approximateLength += symbolName.length + 1;
346
+ if ((b.flags & NodeBuilderFlags.ForbidIndexedAccessSymbolReferences) === 0 && parent !== undefined) {
347
+ const member = getMembersOfSymbol(c, parent).get(symbol.name);
348
+ if (member !== undefined && getSymbolIfSameReference(c, member, symbol) !== undefined) {
349
+ // An indexed access.
350
+ const lhs = createAccessFromSymbolChain(b, chain, index - 1, stopper, overrideTypeArguments);
351
+ const literal = b.created(new LiteralTypeNode(b.stringLiteral(symbolName, false)));
352
+ if (lhs instanceof IndexedAccessTypeNode) return b.created(new IndexedAccessTypeNode(lhs, literal));
353
+ return b.created(new IndexedAccessTypeNode(b.created(new TypeReferenceNode(lhs, typeParameterNodes)), literal));
354
+ }
355
+ }
356
+ const identifier = b.identifier(symbolName);
357
+ b.context.addEmitFlags(identifier, EmitFlags.NoAsciiEscaping);
358
+ if (index > stopper) {
359
+ const lhs = createAccessFromSymbolChain(b, chain, index - 1, stopper, overrideTypeArguments);
360
+ if (
361
+ (b.flags & NodeBuilderFlags.UseInstantiationExpressions) === 0 ||
362
+ (isEntityName(lhs) && (typeParameterNodes === undefined || typeParameterNodes.nodes.length === 0))
363
+ )
364
+ return b.created(new QualifiedName(lhs, identifier));
365
+ return createExpressionWithTypeArguments(
366
+ b,
367
+ b.created(new PropertyAccessExpression(createAccessExpression(b, lhs), undefined, identifier, NodeFlags.None)),
368
+ typeParameterNodes,
369
+ );
370
+ }
371
+ return identifier;
372
+ }
373
+
374
+ /** `ref`'s names appended to the reference `root`, for an outer type parameter group. */
375
+ export function appendReferenceToType(b: NodeBuilder, root: Node, ref: Node): Node {
376
+ if (root instanceof ImportTypeNode) return appendReferenceToImportType(b, root as ImportTypeNode, ref);
377
+ if (root instanceof TypeReferenceNode) return appendReferenceToTypeReference(b, root as TypeReferenceNode, ref);
378
+ let expr = createAccessExpression(b, root);
379
+ for (const id of getAccessStack(ref))
380
+ expr = b.created(new PropertyAccessExpression(expr, undefined, id, NodeFlags.None));
381
+ return expr;
382
+ }
383
+
384
+ function appendReferenceToImportType(b: NodeBuilder, root: ImportTypeNode, ref: Node): Node {
385
+ // Type arguments of the root are dropped, as tsgo does.
386
+ let qualifier = root.qualifier;
387
+ for (const id of getAccessStack(ref))
388
+ qualifier = qualifier === undefined ? id : b.created(new QualifiedName(qualifier, id as Identifier));
389
+ return b.factory.updateImportTypeNode(
390
+ root,
391
+ root.isTypeOf,
392
+ root.argument,
393
+ root.attributes,
394
+ qualifier,
395
+ referenceTypeArguments(ref),
396
+ );
397
+ }
398
+
399
+ function appendReferenceToTypeReference(b: NodeBuilder, root: TypeReferenceNode, ref: Node): Node {
400
+ if (
401
+ (b.flags & NodeBuilderFlags.UseInstantiationExpressions) !== 0 &&
402
+ root.typeArguments !== undefined &&
403
+ root.typeArguments.nodes.length !== 0
404
+ ) {
405
+ let expr = createExpressionWithTypeArguments(b, createAccessExpression(b, root.typeName), root.typeArguments);
406
+ for (const id of getAccessStack(ref))
407
+ expr = b.created(new PropertyAccessExpression(expr, undefined, id, NodeFlags.None));
408
+ return expr;
409
+ }
410
+ let typeName = root.typeName;
411
+ for (const id of getAccessStack(ref)) typeName = b.created(new QualifiedName(typeName, id as Identifier));
412
+ return b.factory.updateTypeReferenceNode(root, typeName, referenceTypeArguments(ref));
413
+ }
414
+
415
+ function referenceTypeArguments(ref: Node): NodeList | undefined {
416
+ return ref instanceof TypeReferenceNode ? (ref as TypeReferenceNode).typeArguments : undefined;
417
+ }
418
+
419
+ function getAccessStack(ref: Node): Node[] {
420
+ let state = (ref as TypeReferenceNode).typeName;
421
+ const ids: Node[] = [];
422
+ while (state instanceof QualifiedName) {
423
+ ids.unshift(state.right);
424
+ state = state.left;
425
+ }
426
+ ids.unshift(state);
427
+ return ids;
428
+ }
429
+
430
+ function createAccessExpression(b: NodeBuilder, node: Node): Node {
431
+ if (node instanceof QualifiedName)
432
+ return b.created(
433
+ new PropertyAccessExpression(
434
+ createAccessExpression(b, node.left),
435
+ undefined,
436
+ node.right.deepClone(),
437
+ NodeFlags.None,
438
+ ),
439
+ );
440
+ return node.deepClone();
441
+ }
442
+
443
+ function createExpressionWithTypeArguments(b: NodeBuilder, expr: Node, typeArguments: NodeList | undefined): Node {
444
+ if (typeArguments === undefined || typeArguments.nodes.length === 0) return expr;
445
+ return b.created(new ExpressionWithTypeArguments(expr, typeArguments));
446
+ }
447
+
448
+ // ---- Entity names and expressions
449
+
450
+ /** An entity name for `symbol`; with `expectsIdentifier`, a qualified name is an error unless allowed. */
451
+ export function symbolToName(b: NodeBuilder, symbol: Symbol, meaning: SymbolFlags, expectsIdentifier: boolean): Node {
452
+ const chain = lookupSymbolChain(b, symbol, meaning, false);
453
+ if (
454
+ expectsIdentifier &&
455
+ chain.length !== 1 &&
456
+ !b.encounteredError &&
457
+ (b.flags & NodeBuilderFlags.AllowQualifiedNameInPlaceOfIdentifier) !== 0
458
+ )
459
+ b.encounteredError = true;
460
+ return createEntityNameFromSymbolChain(b, chain, chain.length - 1);
461
+ }
462
+
463
+ function createEntityNameFromSymbolChain(b: NodeBuilder, chain: Symbol[], index: number): Node {
464
+ const symbol = chain[index]!;
465
+ if (index === 0) b.flags |= NodeBuilderFlags.InInitialEntityName;
466
+ const symbolName = getNameOfSymbolAsWritten(b, symbol);
467
+ if (index === 0) b.flags ^= NodeBuilderFlags.InInitialEntityName;
468
+ const identifier = b.identifier(symbolName);
469
+ b.context.addEmitFlags(identifier, EmitFlags.NoAsciiEscaping);
470
+ if (index > 0) return b.created(new QualifiedName(createEntityNameFromSymbolChain(b, chain, index - 1), identifier));
471
+ return identifier;
472
+ }
473
+
474
+ /** The symbol's name qualified by its parents' names, without looking up a chain. */
475
+ export function symbolToEntityNameNode(b: NodeBuilder, symbol: Symbol): Node {
476
+ const identifier = b.identifier(symbol.name);
477
+ if (symbol.parent !== undefined)
478
+ return b.created(new QualifiedName(symbolToEntityNameNode(b, symbol.parent), identifier));
479
+ return identifier;
480
+ }
481
+
482
+ export function symbolToExpression(b: NodeBuilder, symbol: Symbol, meaning: SymbolFlags): Node {
483
+ const chain = lookupSymbolChain(b, symbol, meaning, false);
484
+ return createExpressionFromSymbolChain(b, chain, chain.length - 1);
485
+ }
486
+
487
+ function createExpressionFromSymbolChain(b: NodeBuilder, chain: Symbol[], index: number): Node {
488
+ const typeParameterNodes = lookupExpressionChainTypeArgumentNodes(b, chain, index);
489
+ const symbol = chain[index]!;
490
+ if (index === 0) b.flags |= NodeBuilderFlags.InInitialEntityName;
491
+ let symbolName = getNameOfSymbolAsWritten(b, symbol);
492
+ if (index === 0) b.flags ^= NodeBuilderFlags.InInitialEntityName;
493
+ if (startsWithQuote(symbolName) && hasNonGlobalAugmentationExternalModuleDeclaration(symbol)) {
494
+ const specifier = getSpecifierForModuleSymbol(b, symbol, ModuleKind.None);
495
+ b.approximateLength += 2 + specifier.length;
496
+ return b.stringLiteral(specifier, false);
497
+ }
498
+ if (index === 0 || canUsePropertyAccess(symbolName)) {
499
+ const identifier = b.identifier(symbolName);
500
+ b.context.addEmitFlags(identifier, EmitFlags.NoAsciiEscaping);
501
+ b.approximateLength += 1 + symbolName.length;
502
+ if (index > 0) {
503
+ const result = b.created(
504
+ new PropertyAccessExpression(
505
+ createExpressionFromSymbolChain(b, chain, index - 1),
506
+ undefined,
507
+ identifier,
508
+ NodeFlags.None,
509
+ ),
510
+ );
511
+ b.context.addEmitFlags(result, EmitFlags.NoIndentation);
512
+ return createExpressionWithTypeArguments(b, result, typeParameterNodes);
513
+ }
514
+ return createExpressionWithTypeArguments(b, identifier, typeParameterNodes);
515
+ }
516
+ if (symbolName.startsWith('[')) symbolName = symbolName.substring(1, symbolName.length - 1);
517
+ let expression: Node | undefined = undefined;
518
+ if (startsWithQuote(symbolName) && (symbol.flags & SymbolFlags.EnumMember) === 0) {
519
+ const literalText = unquote(symbolName);
520
+ b.approximateLength += literalText.length + 2;
521
+ expression = b.stringLiteral(literalText, symbolName.charCodeAt(0) === 0x27);
522
+ } else if (String(Number(symbolName)) === symbolName) {
523
+ b.approximateLength += symbolName.length;
524
+ expression = b.factory.createNumericLiteral(symbolName);
525
+ }
526
+ if (expression === undefined) {
527
+ b.approximateLength += symbolName.length;
528
+ expression = b.identifier(symbolName);
529
+ b.context.addEmitFlags(expression, EmitFlags.NoAsciiEscaping);
530
+ }
531
+ b.approximateLength += 2;
532
+ return createExpressionWithTypeArguments(
533
+ b,
534
+ b.created(
535
+ new ElementAccessExpression(
536
+ createExpressionFromSymbolChain(b, chain, index - 1),
537
+ undefined,
538
+ expression,
539
+ NodeFlags.None,
540
+ ),
541
+ ),
542
+ typeParameterNodes,
543
+ );
544
+ }
545
+
546
+ function canUsePropertyAccess(name: string): boolean {
547
+ if (name.length === 0) return false;
548
+ if (name.startsWith('#')) return name.length > 1 && isIdentifierText(name.substring(1));
549
+ return isIdentifierText(name);
550
+ }
551
+
552
+ function startsWithQuote(s: string): boolean {
553
+ return s.startsWith("'") || s.startsWith('"');
554
+ }
555
+
556
+ function unquote(s: string): string {
557
+ if (
558
+ s.length >= 2 &&
559
+ (s.charCodeAt(0) === 0x22 || s.charCodeAt(0) === 0x27) &&
560
+ s.charCodeAt(s.length - 1) === s.charCodeAt(0)
561
+ )
562
+ return s.substring(1, s.length - 1);
563
+ return s;
564
+ }
565
+
566
+ // ---- Type arguments in qualified names
567
+
568
+ function shouldWriteTypeParametersInQualifiedName(b: NodeBuilder, chain: Symbol[], index: number): boolean {
569
+ return (b.flags & NodeBuilderFlags.WriteTypeParametersInQualifiedName) !== 0 && index < chain.length - 1;
570
+ }
571
+
572
+ function lookupTypeParameterNodes(b: NodeBuilder, chain: Symbol[], index: number): NodeList | undefined {
573
+ const symbolId = getSymbolId(chain[index]!);
574
+ const symbolList = b.typeParameterSymbolList ?? new Set<number>();
575
+ if (symbolList.has(symbolId)) return undefined;
576
+ symbolList.add(symbolId);
577
+ b.typeParameterSymbolList = symbolList;
578
+ if (shouldWriteTypeParametersInQualifiedName(b, chain, index)) {
579
+ const typeArgumentNodes = lookupInstantiatedTypeArgumentNodes(b, chain, index);
580
+ if (typeArgumentNodes !== undefined) return typeArgumentNodes;
581
+ const typeParameterNodes = b.typeParametersToTypeParameterDeclarations(chain[index]!);
582
+ return typeParameterNodes.length > 0 ? b.list(typeParameterNodes) : undefined;
583
+ }
584
+ return undefined;
585
+ }
586
+
587
+ function lookupInstantiatedTypeArgumentNodes(b: NodeBuilder, chain: Symbol[], index: number): NodeList | undefined {
588
+ if (!shouldWriteTypeParametersInQualifiedName(b, chain, index)) return undefined;
589
+ const symbol = chain[index]!;
590
+ const nextSymbol = chain[index + 1]!;
591
+ if ((nextSymbol.checkFlags & CheckFlags.Instantiated) === 0) return undefined;
592
+ const target = (symbol.flags & SymbolFlags.Alias) !== 0 ? resolveAlias(b.c, symbol) : symbol;
593
+ let params = b.getTypeParametersOfClassOrInterface(target);
594
+ const mapper = b.c.symbolMappers.get(getSymbolId(nextSymbol));
595
+ if (mapper !== undefined) {
596
+ const mapped: Type[] = [];
597
+ for (const p of params) mapped.push(mapper.map(p));
598
+ params = mapped;
599
+ }
600
+ return b.mapToTypeNodes(params, false);
601
+ }
602
+
603
+ function lookupExpressionChainTypeArgumentNodes(b: NodeBuilder, chain: Symbol[], index: number): NodeList | undefined {
604
+ if (!shouldWriteTypeParametersInQualifiedName(b, chain, index)) return undefined;
605
+ const symbolId = getSymbolId(chain[index]!);
606
+ const symbolList = b.typeParameterSymbolList ?? new Set<number>();
607
+ if (symbolList.has(symbolId)) return undefined;
608
+ symbolList.add(symbolId);
609
+ b.typeParameterSymbolList = symbolList;
610
+ const typeArgumentNodes = lookupInstantiatedTypeArgumentNodes(b, chain, index);
611
+ if (typeArgumentNodes !== undefined) return typeArgumentNodes;
612
+ const typeParameterNodes = b.typeParametersToTypeParameterDeclarations(chain[index]!);
613
+ return typeParameterNodes.length > 0 ? b.list(typeParameterNodes) : undefined;
614
+ }
615
+
616
+ // ---- Names as written
617
+
618
+ function isDefaultBindingContext(node: Node): boolean {
619
+ return node.kind === SyntaxKind.SourceFile || isAmbientModule(node);
620
+ }
621
+
622
+ function findDefaultBindingContext(node: Node): Node | undefined {
623
+ for (let current: Node | undefined = node; current !== undefined; current = current.parent)
624
+ if (isDefaultBindingContext(current)) return current;
625
+ return undefined;
626
+ }
627
+
628
+ function getNameOfSymbolFromNameType(b: NodeBuilder, symbol: Symbol): string {
629
+ const nameType = b.c.symbolNameTypes.get(getSymbolId(symbol));
630
+ if (nameType === undefined) return '';
631
+ if ((nameType.flags & TypeFlags.StringOrNumberLiteral) !== 0) {
632
+ const literal = nameType as LiteralType;
633
+ const name = (nameType.flags & TypeFlags.StringLiteral) !== 0 ? literal.stringValue : String(literal.numberValue);
634
+ if (!isIdentifierText(name) && !isNumericLiteralName(name))
635
+ return (nameType.flags & TypeFlags.StringLiteral) !== 0 ? quoteString(name) : name;
636
+ if (isNumericLiteralName(name) && name.startsWith('-')) return '[' + name + ']';
637
+ return name;
638
+ }
639
+ if ((nameType.flags & TypeFlags.UniqueESSymbol) !== 0)
640
+ return '[' + getNameOfSymbolAsWritten(b, nameType.symbol!) + ']';
641
+ return '';
642
+ }
643
+
644
+ /** A JSON-style double quoted string, as tsgo's `valueToString`. */
645
+ function quoteString(s: string): string {
646
+ return JSON.stringify(s);
647
+ }
648
+
649
+ /**
650
+ * A readable name for a symbol, not for the right of a `.`: quoted if from a string literal,
651
+ * and a number as written (`0o11`, not `9`).
652
+ */
653
+ export function getNameOfSymbolAsWritten(b: NodeBuilder, symbol: Symbol): string {
654
+ const remapped = b.remappedSymbolReferences.get(getSymbolId(symbol));
655
+ if (remapped !== undefined) symbol = remapped;
656
+ if (
657
+ symbol.name === InternalSymbolName.Default &&
658
+ (b.flags & NodeBuilderFlags.UseAliasDefinedOutsideCurrentScope) === 0 &&
659
+ // Not the first part of an entity name, synthesized, or from another binding context.
660
+ ((b.flags & NodeBuilderFlags.InInitialEntityName) === 0 ||
661
+ symbol.declarations.length === 0 ||
662
+ (b.enclosingDeclaration !== undefined &&
663
+ findDefaultBindingContext(symbol.declarations[0]!) !== findDefaultBindingContext(b.enclosingDeclaration)))
664
+ )
665
+ return 'default';
666
+ if (symbol.declarations.length > 0) {
667
+ let name: Node | undefined = undefined;
668
+ for (const d of symbol.declarations) {
669
+ name = getNameOfDeclaration(d);
670
+ if (name !== undefined) break;
671
+ }
672
+ if (name !== undefined) {
673
+ if (name.kind === SyntaxKind.ComputedPropertyName && (symbol.checkFlags & CheckFlags.Late) === 0) {
674
+ const nameType = b.c.symbolNameTypes.get(getSymbolId(symbol));
675
+ if (nameType !== undefined && (nameType.flags & TypeFlags.StringOrNumberLiteral) !== 0) {
676
+ const result = getNameOfSymbolFromNameType(b, symbol);
677
+ if (result.length > 0) return result;
678
+ }
679
+ }
680
+ return declarationNameToString(getSourceFileOfNode(name), name);
681
+ }
682
+ const declaration = symbol.declarations[0]!;
683
+ const parent = declaration.parent;
684
+ if (parent !== undefined && parent.kind === SyntaxKind.VariableDeclaration) {
685
+ const parentName = getName(parent)!;
686
+ return declarationNameToString(getSourceFileOfNode(parentName), parentName);
687
+ }
688
+ switch (declaration.kind) {
689
+ case SyntaxKind.ClassExpression:
690
+ case SyntaxKind.FunctionExpression:
691
+ case SyntaxKind.ArrowFunction:
692
+ if (!b.encounteredError && (b.flags & NodeBuilderFlags.AllowAnonymousIdentifier) === 0)
693
+ b.encounteredError = true;
694
+ return declaration.kind === SyntaxKind.ClassExpression ? '(Anonymous class)' : '(Anonymous function)';
695
+ }
696
+ }
697
+ const name = getNameOfSymbolFromNameType(b, symbol);
698
+ if (name.length > 0) return name;
699
+ return escapeInternalSymbolName(symbol.name);
700
+ }
701
+
702
+ // ---- Property names
703
+
704
+ function isStringNamed(b: NodeBuilder, d: Node): boolean {
705
+ const name = getNameOfDeclaration(d);
706
+ if (name === undefined) return false;
707
+ if (name instanceof ComputedPropertyName)
708
+ return (checkExpression(b.c, name.expression).flags & TypeFlags.StringLike) !== 0;
709
+ if (name instanceof ElementAccessExpression)
710
+ return (checkExpression(b.c, name.argumentExpression).flags & TypeFlags.StringLike) !== 0;
711
+ return name.kind === SyntaxKind.StringLiteral;
712
+ }
713
+
714
+ function isSingleQuotedStringNamed(d: Node): boolean {
715
+ const name = getNameOfDeclaration(d);
716
+ return name instanceof StringLiteral && (name.tokenFlags & TokenFlags.SingleQuote) !== 0;
717
+ }
718
+
719
+ /** The name node of a property. */
720
+ export function getPropertyNameNodeForSymbol(b: NodeBuilder, symbol: Symbol): Node {
721
+ // A private name is the declaration's.
722
+ const valueDeclaration = symbol.valueDeclaration;
723
+ if (valueDeclaration !== undefined) {
724
+ const declarationName = getName(valueDeclaration);
725
+ if (declarationName !== undefined && declarationName.kind === SyntaxKind.PrivateIdentifier)
726
+ return b.cloneSynthesized(declarationName);
727
+ }
728
+ const declarations = symbol.declarations;
729
+ let stringNamed = declarations.length !== 0;
730
+ for (const d of declarations)
731
+ if (!isStringNamed(b, d)) {
732
+ stringNamed = false;
733
+ break;
734
+ }
735
+ let singleQuote = declarations.length !== 0;
736
+ for (const d of declarations)
737
+ if (!isSingleQuotedStringNamed(d)) {
738
+ singleQuote = false;
739
+ break;
740
+ }
741
+ const isMethod = (symbol.flags & SymbolFlags.Method) !== 0;
742
+ const fromNameType = getPropertyNameNodeForSymbolFromNameType(b, symbol, singleQuote, stringNamed, isMethod);
743
+ if (fromNameType !== undefined) return fromNameType;
744
+ let name = symbol.name;
745
+ const privateNamePrefix = '￾#';
746
+ if (name.startsWith(privateNamePrefix)) {
747
+ // Symbol ids are unstable: `#123@#x` becomes `__#private@#x`.
748
+ let rest = name.substring(privateNamePrefix.length);
749
+ let i = 0;
750
+ while (i < rest.length && rest.charCodeAt(i) >= 0x30 && rest.charCodeAt(i) <= 0x39) i++;
751
+ rest = rest.substring(i);
752
+ name = '__#private' + rest;
753
+ }
754
+ return createPropertyNameNodeForIdentifierOrLiteral(b, name, singleQuote, stringNamed, isMethod);
755
+ }
756
+
757
+ function createPropertyNameNodeForIdentifierOrLiteral(
758
+ b: NodeBuilder,
759
+ name: string,
760
+ singleQuote: boolean,
761
+ stringNamed: boolean,
762
+ isMethod: boolean,
763
+ ): Node {
764
+ switch (classifyPropertyName(name, stringNamed, isMethod)) {
765
+ case 0:
766
+ return b.identifier(name);
767
+ case 1:
768
+ return b.factory.createNumericLiteral(name);
769
+ }
770
+ return b.factory.createStringLiteral(name, singleQuote ? TokenFlags.SingleQuote : TokenFlags.None);
771
+ }
772
+
773
+ function getPropertyNameNodeForSymbolFromNameType(
774
+ b: NodeBuilder,
775
+ symbol: Symbol,
776
+ singleQuote: boolean,
777
+ stringNamed: boolean,
778
+ isMethod: boolean,
779
+ ): Node | undefined {
780
+ const nameType = b.c.symbolNameTypes.get(getSymbolId(symbol));
781
+ if (nameType === undefined) return undefined;
782
+ if ((nameType.flags & TypeFlags.StringOrNumberLiteral) !== 0) {
783
+ const literal = nameType as LiteralType;
784
+ const name = (nameType.flags & TypeFlags.StringLiteral) !== 0 ? literal.stringValue : String(literal.numberValue);
785
+ if (!isIdentifierText(name) && (stringNamed || !isNumericLiteralName(name)))
786
+ return b.factory.createStringLiteral(name, singleQuote ? TokenFlags.SingleQuote : TokenFlags.None);
787
+ if (isNumericLiteralName(name) && name.startsWith('-'))
788
+ return b.created(
789
+ new ComputedPropertyName(
790
+ b.created(
791
+ new PrefixUnaryExpression(SyntaxKind.MinusToken, b.factory.createNumericLiteral(name.substring(1))),
792
+ ),
793
+ ),
794
+ );
795
+ return createPropertyNameNodeForIdentifierOrLiteral(b, name, singleQuote, stringNamed, isMethod);
796
+ }
797
+ if ((nameType.flags & TypeFlags.UniqueESSymbol) !== 0)
798
+ return b.created(new ComputedPropertyName(symbolToExpression(b, nameType.symbol!, SymbolFlags.Value)));
799
+ return undefined;
800
+ }
801
+
802
+ // ---- Module specifiers
803
+
804
+ /**
805
+ * The specifier an `import("…")` type names a module with: an ambient module's name, the file
806
+ * name without an enclosing file, else what module specifier generation gives for the enclosing
807
+ * file. `overrideImportMode` is `None` for the mode of the enclosing import or file.
808
+ */
809
+ export function getSpecifierForModuleSymbol(b: NodeBuilder, symbol: Symbol, overrideImportMode: ModuleKind): string {
810
+ const c = b.c;
811
+ let file = asSourceFile(getDeclarationOfKind(symbol, SyntaxKind.SourceFile));
812
+ if (file === undefined)
813
+ for (const d of symbol.declarations) {
814
+ const equivalent = getFileSymbolIfFileSymbolExportEqualsContainer(c, d, symbol);
815
+ if (equivalent !== undefined) {
816
+ file = asSourceFile(getDeclarationOfKind(equivalent, SyntaxKind.SourceFile));
817
+ break;
818
+ }
819
+ }
820
+ if (file === undefined && isAmbientModuleSymbolName(symbol.name))
821
+ return symbol.name.substring(1, symbol.name.length - 1);
822
+ const contextFile = b.enclosingFile;
823
+ if (contextFile === undefined) {
824
+ if (isAmbientModuleSymbolName(symbol.name)) return symbol.name.substring(1, symbol.name.length - 1);
825
+ const moduleFile = getSourceFileOfModule(symbol);
826
+ return moduleFile === undefined ? '' : moduleFile.fileName;
827
+ }
828
+ const enclosingDeclaration =
829
+ b.enclosingDeclaration === undefined ? undefined : b.context.mostOriginal(b.enclosingDeclaration);
830
+ const originalModuleSpecifier =
831
+ enclosingDeclaration !== undefined && canHaveModuleSpecifier(enclosingDeclaration)
832
+ ? tryGetModuleSpecifierFromDeclaration(enclosingDeclaration)
833
+ : undefined;
834
+ let resolutionMode = overrideImportMode;
835
+ if (resolutionMode === ModuleKind.None)
836
+ resolutionMode =
837
+ originalModuleSpecifier !== undefined
838
+ ? c.host.getModeForUsageLocation(contextFile, originalModuleSpecifier)
839
+ : c.host.getDefaultResolutionModeForFile(contextFile);
840
+ const key = getSymbolId(symbol) + '|' + contextFile.path + '|' + resolutionMode;
841
+ const cached = c.moduleSpecifiers.get(key);
842
+ if (cached !== undefined) return cached;
843
+ // Declaration emit prefers project-relative specifiers, with `.js` extensions in ES modules.
844
+ const preferences = new ModuleSpecifierPreferences(
845
+ 'project-relative',
846
+ resolutionMode === ModuleKind.ESNext ? 'js' : '',
847
+ );
848
+ const specifiers = getModuleSpecifiers(c, symbol, contextFile, preferences, overrideImportMode);
849
+ const specifier = specifiers.length > 0 ? specifiers[0]! : '';
850
+ c.moduleSpecifiers.set(key, specifier);
851
+ return specifier;
852
+ }
853
+
854
+ /** Specifiers `importingFile` can import the module `moduleSymbol` with, best first. */
855
+ export function getModuleSpecifiers(
856
+ c: Checker,
857
+ moduleSymbol: Symbol,
858
+ importingFile: SourceFile,
859
+ preferences: ModuleSpecifierPreferences,
860
+ overrideImportMode: ModuleKind,
861
+ ): string[] {
862
+ const ambient = tryGetModuleNameFromAmbientModule(c, moduleSymbol);
863
+ if (ambient !== '') return [ambient];
864
+ const moduleFile = getSourceFileOfModule(moduleSymbol);
865
+ if (moduleFile === undefined) return [];
866
+ const host = getModuleSpecifierHost(c);
867
+ // A referenced project's declaration output is named by its source.
868
+ return getModuleSpecifiersForFile(
869
+ importingFile,
870
+ host.getSourceOfProjectReferenceIfOutputIncluded(moduleFile),
871
+ c.compilerOptions,
872
+ host,
873
+ preferences,
874
+ overrideImportMode,
875
+ false,
876
+ );
877
+ }
878
+
879
+ function getModuleSpecifierHost(c: Checker): ModuleSpecifierHost {
880
+ let host = c.host.getModuleSpecifierHost();
881
+ if (host === undefined) {
882
+ host = c.fallbackModuleSpecifierHost;
883
+ if (host === undefined) {
884
+ host = new CheckerModuleSpecifierHost(c);
885
+ c.fallbackModuleSpecifierHost = host;
886
+ }
887
+ }
888
+ return host;
889
+ }
890
+
891
+ /** The name of an ambient module declaring `moduleSymbol`, or of the one whose `export =` it is, else `''`. */
892
+ function tryGetModuleNameFromAmbientModule(c: Checker, moduleSymbol: Symbol): string {
893
+ for (const d of moduleSymbol.declarations) {
894
+ const name = isModuleWithStringLiteralName(d) ? getName(d)! : undefined;
895
+ if (name !== undefined && (!isModuleAugmentationExternal(d) || !isExternalModuleNameRelative(getText(name))))
896
+ return getText(name);
897
+ }
898
+ // A namespace exported with `export =` from an ambient module: `import { c } from "m"` names
899
+ // `ns.c` for `declare module "m" { namespace ns { class c {} } export = ns; }`.
900
+ for (const d of moduleSymbol.declarations) {
901
+ if (d.kind !== SyntaxKind.ModuleDeclaration) continue;
902
+ let container: Node | undefined = d;
903
+ while (container !== undefined && !isModuleWithStringLiteralName(container)) container = container.parent;
904
+ if (container === undefined || container.parent === undefined || container.parent.kind !== SyntaxKind.SourceFile)
905
+ continue;
906
+ const exportEquals = getSymbol(container)?.exports?.get(InternalSymbolName.ExportEquals);
907
+ const assignment = exportEquals?.valueDeclaration;
908
+ if (assignment === undefined || assignment.kind !== SyntaxKind.ExportAssignment) continue;
909
+ let exported = getSymbolAtLocation(c, getExpression(assignment)!);
910
+ if (exported === undefined) continue;
911
+ if ((exported.flags & SymbolFlags.Alias) !== 0) exported = resolveAlias(c, exported);
912
+ if (exported === getSymbol(d)) return getText(getName(container)!);
913
+ }
914
+ return '';
915
+ }
916
+
917
+ function isModuleWithStringLiteralName(node: Node): boolean {
918
+ return node.kind === SyntaxKind.ModuleDeclaration && getName(node)?.kind === SyntaxKind.StringLiteral;
919
+ }
920
+
921
+ function canHaveModuleSpecifier(node: Node): boolean {
922
+ switch (node.kind) {
923
+ case SyntaxKind.VariableDeclaration:
924
+ case SyntaxKind.BindingElement:
925
+ case SyntaxKind.ImportDeclaration:
926
+ case SyntaxKind.ExportDeclaration:
927
+ case SyntaxKind.ImportEqualsDeclaration:
928
+ case SyntaxKind.ImportClause:
929
+ case SyntaxKind.NamespaceExport:
930
+ case SyntaxKind.NamespaceImport:
931
+ case SyntaxKind.ExportSpecifier:
932
+ case SyntaxKind.ImportSpecifier:
933
+ case SyntaxKind.ImportType:
934
+ return true;
935
+ }
936
+ return false;
937
+ }
938
+
939
+ /** The string literal module specifier of an import, export, `require` or `import("…")` type declaration. */
940
+ function tryGetModuleSpecifierFromDeclaration(node: Node): Node | undefined {
941
+ let specifier: Node | undefined;
942
+ switch (node.kind) {
943
+ case SyntaxKind.VariableDeclaration:
944
+ case SyntaxKind.BindingElement: {
945
+ let call = getInitializer(node);
946
+ while (call !== undefined && !isRequireCall(call, true)) call = call.parent;
947
+ specifier = call === undefined ? undefined : getArguments(call)!.nodes[0];
948
+ break;
949
+ }
950
+ case SyntaxKind.ImportDeclaration:
951
+ case SyntaxKind.ExportDeclaration:
952
+ specifier = getModuleSpecifier(node);
953
+ break;
954
+ case SyntaxKind.ImportEqualsDeclaration:
955
+ specifier = getExternalModuleName(node);
956
+ break;
957
+ case SyntaxKind.ImportClause:
958
+ case SyntaxKind.NamespaceExport:
959
+ specifier = getModuleSpecifier(node.parent!);
960
+ break;
961
+ case SyntaxKind.NamespaceImport:
962
+ case SyntaxKind.ExportSpecifier:
963
+ specifier = getModuleSpecifier(node.parent!.parent!);
964
+ break;
965
+ case SyntaxKind.ImportSpecifier:
966
+ specifier = getModuleSpecifier(node.parent!.parent!.parent!);
967
+ break;
968
+ case SyntaxKind.ImportType: {
969
+ const argument = (node as ImportTypeNode).argument;
970
+ specifier = argument instanceof LiteralTypeNode ? (argument as LiteralTypeNode).literal : undefined;
971
+ break;
972
+ }
973
+ }
974
+ return specifier !== undefined && specifier.kind === SyntaxKind.StringLiteral ? specifier : undefined;
975
+ }
976
+
977
+ /**
978
+ * Specifier generation without a program, as the checker of single files uses: relative paths
979
+ * between the checker's files.
980
+ */
981
+ class CheckerModuleSpecifierHost extends ModuleSpecifierHost {
982
+ constructor(readonly c: Checker) {
983
+ super();
984
+ }
985
+
986
+ getCurrentDirectory(): string {
987
+ return '';
988
+ }
989
+
990
+ useCaseSensitiveFileNames(): boolean {
991
+ return true;
992
+ }
993
+
994
+ getSymlinkCache(): KnownSymlinks | undefined {
995
+ return undefined;
996
+ }
997
+
998
+ getGlobalTypingsCacheLocation(): string {
999
+ return '';
1000
+ }
1001
+
1002
+ getProjectReferenceOutputDts(_path: string): string {
1003
+ return '';
1004
+ }
1005
+
1006
+ getRedirectTargets(_path: string): readonly string[] {
1007
+ return [];
1008
+ }
1009
+
1010
+ getSourceOfProjectReferenceIfOutputIncluded(file: SourceFile): string {
1011
+ return file.fileName;
1012
+ }
1013
+
1014
+ fileExists(path: string): boolean {
1015
+ for (const file of this.c.files) if (file.fileName === path) return true;
1016
+ return false;
1017
+ }
1018
+
1019
+ getNearestAncestorDirectoryWithPackageJson(_directory: string): string {
1020
+ return '';
1021
+ }
1022
+
1023
+ getPackageJsonInfo(_packageJsonPath: string): PackageJsonInfo | undefined {
1024
+ return undefined;
1025
+ }
1026
+
1027
+ getDefaultResolutionModeForFile(file: SourceFile): ModuleKind {
1028
+ return this.c.host.getDefaultResolutionModeForFile(file);
1029
+ }
1030
+
1031
+ getResolvedModuleFromModuleSpecifier(_file: SourceFile, _specifier: Node): ResolvedModule | undefined {
1032
+ return undefined;
1033
+ }
1034
+
1035
+ getModeForUsageLocation(file: SourceFile, specifier: Node): ModuleKind {
1036
+ return this.c.host.getModeForUsageLocation(file, specifier);
1037
+ }
1038
+
1039
+ getOutputPathsHost(): OutputPathsHost {
1040
+ return new FallbackOutputPathsHost();
1041
+ }
1042
+ }
1043
+
1044
+ class FallbackOutputPathsHost implements OutputPathsHost {
1045
+ readonly currentDirectory = '';
1046
+ readonly useCaseSensitiveFileNames = true;
1047
+
1048
+ commonSourceDirectory(): string {
1049
+ return '';
1050
+ }
1051
+ }
1052
+
1053
+ function asSourceFile(node: Node | undefined): SourceFile | undefined {
1054
+ if (node === undefined) return undefined;
1055
+ if (node instanceof SourceFile) return node as SourceFile;
1056
+ return undefined;
1057
+ }
1058
+
1059
+ /** The file of a module: its value declaration's, else that of a declaration that isn't an augmentation. */
1060
+ function getSourceFileOfModule(symbol: Symbol): SourceFile | undefined {
1061
+ let d = symbol.valueDeclaration;
1062
+ if (d === undefined)
1063
+ for (const declaration of symbol.declarations)
1064
+ if (!isExternalModuleAugmentation(declaration) && !isGlobalScopeAugmentation(declaration)) {
1065
+ d = declaration;
1066
+ break;
1067
+ }
1068
+ return d === undefined ? undefined : getSourceFileOfNode(d);
1069
+ }