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,1101 @@
1
+ // Module specifier generation: the specifier a file uses to import another, as written by
2
+ // declaration emit, `import("…")` types in diagnostics and the language service. Prefers a
3
+ // package name reachable through `node_modules` (following symlinks the program saw), then
4
+ // `paths` and `package.json` `imports`, then a relative path, with the ending the resolution
5
+ // mode and the importing file's other imports call for.
6
+ import { getText } from './ast.js';
7
+ import { getConditions, getPackageNameFromTypesPackageName } from './module-resolution-types.js';
8
+ import { matchPatternOrExact, parsePatterns } from './module-resolution.js';
9
+ import { JsxEmit, ModuleKind, ModuleResolutionKind, getAllowImportingTsExtensions, getModuleResolutionKind, getResolvePackageJsonExports, getResolvePackageJsonImports, } from './options.js';
10
+ import { getOutputDeclarationFileNameWorker, getOutputJSFileNameWorker } from './output-paths.js';
11
+ import { isApplicableVersionedTypesKey } from './package-json.js';
12
+ import { changeExtension, combinePaths, comparePaths, containsPath, ensureTrailingDirectorySeparator, fileExtensionIsOneOf, getBaseFileName, getCanonicalFileName, getDeclarationFileExtension, getDirectoryPath, getNormalizedAbsolutePath, getPathComponentsRelativeTo, getPathFromPathComponents, getRelativePathFromDirectory, hasImplementationTSFileExtension, hasJSFileExtension, hasTSFileExtension, isDeclarationFileName, isExternalModuleNameRelative, isRootedDiskPath, normalizePath, pathIsAbsolute, pathIsRelative, removeExtension, removeFileExtension, removeTrailingDirectorySeparator, resolvePath, toPath, tryGetExtensionFromPath, } from './path.js';
13
+ import { containsIgnoredPath } from './symlinks.js';
14
+ export class ModuleSpecifierPreferences {
15
+ importModuleSpecifierPreference;
16
+ importModuleSpecifierEnding;
17
+ constructor(importModuleSpecifierPreference, importModuleSpecifierEnding) {
18
+ this.importModuleSpecifierPreference = importModuleSpecifierPreference;
19
+ this.importModuleSpecifierEnding = importModuleSpecifierEnding;
20
+ }
21
+ }
22
+ /** What specifier generation needs from a program. */
23
+ export class ModuleSpecifierHost {
24
+ }
25
+ /** A path a module can be imported through. */
26
+ class ModulePath {
27
+ fileName;
28
+ isInNodeModules;
29
+ isRedirect;
30
+ constructor(fileName, isInNodeModules,
31
+ /** A referenced project's declaration output standing for the imported source. */
32
+ isRedirect) {
33
+ this.fileName = fileName;
34
+ this.isInNodeModules = isInNodeModules;
35
+ this.isRedirect = isRedirect;
36
+ }
37
+ }
38
+ class ImporterInfo {
39
+ importingSourceFileName;
40
+ useCaseSensitiveFileNames;
41
+ sourceDirectory;
42
+ constructor(importingSourceFileName, useCaseSensitiveFileNames) {
43
+ this.importingSourceFileName = importingSourceFileName;
44
+ this.useCaseSensitiveFileNames = useCaseSensitiveFileNames;
45
+ this.sourceDirectory = getDirectoryPath(importingSourceFileName);
46
+ }
47
+ }
48
+ /** Preferences resolved for one importing file. */
49
+ class ResolvedPreferences {
50
+ relativePreference;
51
+ preferences;
52
+ host;
53
+ options;
54
+ importingFile;
55
+ oldImportSpecifier;
56
+ constructor(relativePreference, preferences, host, options, importingFile, oldImportSpecifier) {
57
+ this.relativePreference = relativePreference;
58
+ this.preferences = preferences;
59
+ this.host = host;
60
+ this.options = options;
61
+ this.importingFile = importingFile;
62
+ this.oldImportSpecifier = oldImportSpecifier;
63
+ }
64
+ allowedEndings(syntaxImpliedNodeFormat) {
65
+ return getAllowedEndingsInPreferredOrder(this.preferences, this.host, this.options, this.importingFile, this.oldImportSpecifier, syntaxImpliedNodeFormat);
66
+ }
67
+ }
68
+ //// Entry points
69
+ /**
70
+ * Specifiers `importingFile` can import `moduleFileName` with, best first, as tsgo's
71
+ * `GetModuleSpecifiersForFileWithInfo`. `overrideImportMode` is `None` for the file's own mode.
72
+ */
73
+ export function getModuleSpecifiersForFile(importingFile, moduleFileName, options, host, preferences, overrideImportMode, forAutoImports) {
74
+ const modulePaths = getAllModulePaths(new ImporterInfo(host.getSourceOfProjectReferenceIfOutputIncluded(importingFile), host.useCaseSensitiveFileNames()), moduleFileName, host);
75
+ return computeModuleSpecifiers(modulePaths, options, importingFile, host, preferences, overrideImportMode, forAutoImports);
76
+ }
77
+ /** Number of `/` in a specifier, ignoring a leading `./`. */
78
+ export function countPathComponents(path) {
79
+ let count = 0;
80
+ for (let i = path.startsWith('./') ? 2 : 0; i < path.length; i++)
81
+ if (path.charCodeAt(i) === 0x2f)
82
+ count++;
83
+ return count;
84
+ }
85
+ //// Module paths
86
+ function containsNodeModules(path) {
87
+ return path.includes('/node_modules/');
88
+ }
89
+ /** Every path the imported file can be reached by, closest to the importing file first. */
90
+ function getAllModulePaths(info, importedFileName, host) {
91
+ const remaining = new Map();
92
+ for (const p of getEachFileNameOfModule(info.importingSourceFileName, importedFileName, host, true))
93
+ remaining.set(p.fileName, p);
94
+ const caseSensitive = info.useCaseSensitiveFileNames;
95
+ const compare = (a, b) => comparePathsByRedirect(a, b, caseSensitive);
96
+ const sorted = [];
97
+ for (let directory = info.sourceDirectory; remaining.size !== 0;) {
98
+ const directoryStart = ensureTrailingDirectorySeparator(directory);
99
+ const inDirectory = [];
100
+ for (const [fileName, p] of remaining) {
101
+ if (fileName.startsWith(directoryStart)) {
102
+ inDirectory.push(p);
103
+ remaining.delete(fileName);
104
+ }
105
+ }
106
+ if (inDirectory.length > 0) {
107
+ inDirectory.sort(compare);
108
+ for (const p of inDirectory)
109
+ sorted.push(p);
110
+ }
111
+ const parent = getDirectoryPath(directory);
112
+ if (parent === directory)
113
+ break;
114
+ directory = parent;
115
+ }
116
+ if (remaining.size > 0) {
117
+ const rest = [...remaining.values()];
118
+ rest.sort(compare);
119
+ for (const p of rest)
120
+ sorted.push(p);
121
+ }
122
+ return sorted;
123
+ }
124
+ function comparePathsByRedirect(a, b, useCaseSensitiveFileNames) {
125
+ // Redirects first.
126
+ if (a.isRedirect !== b.isRedirect)
127
+ return a.isRedirect ? -1 : 1;
128
+ const separators = countSlashes(a.fileName) - countSlashes(b.fileName);
129
+ if (separators !== 0)
130
+ return separators < 0 ? -1 : 1;
131
+ return comparePaths(a.fileName, b.fileName, useCaseSensitiveFileNames);
132
+ }
133
+ function countSlashes(path) {
134
+ let count = 0;
135
+ for (let i = 0; i < path.length; i++)
136
+ if (path.charCodeAt(i) === 0x2f)
137
+ count++;
138
+ return count;
139
+ }
140
+ /** The imported file's paths: its real path, redirects and paths through known symlinks. */
141
+ function getEachFileNameOfModule(importingFileName, importedFileName, host, preferSymlinks) {
142
+ const cwd = host.getCurrentDirectory();
143
+ const caseSensitive = host.useCaseSensitiveFileNames();
144
+ const importedPath = toPath(importedFileName, cwd, caseSensitive);
145
+ const referenceRedirect = host.getProjectReferenceOutputDts(importedPath);
146
+ const targets = [];
147
+ if (referenceRedirect !== '')
148
+ targets.push(getNormalizedAbsolutePath(referenceRedirect, cwd));
149
+ targets.push(getNormalizedAbsolutePath(importedFileName, cwd));
150
+ for (const redirect of host.getRedirectTargets(importedPath))
151
+ targets.push(getNormalizedAbsolutePath(redirect, cwd));
152
+ let shouldFilterIgnoredPaths = false;
153
+ for (const target of targets)
154
+ if (!containsIgnoredPath(target))
155
+ shouldFilterIgnoredPaths = true;
156
+ const results = [];
157
+ const addTargets = () => {
158
+ for (const p of targets)
159
+ if (!(shouldFilterIgnoredPaths && containsIgnoredPath(p)))
160
+ results.push(new ModulePath(p, containsNodeModules(p), referenceRedirect === p));
161
+ };
162
+ if (!preferSymlinks)
163
+ addTargets();
164
+ const symlinks = host.getSymlinkCache();
165
+ if (symlinks !== undefined) {
166
+ const globalCache = host.getGlobalTypingsCacheLocation();
167
+ for (let directory = getDirectoryPath(getNormalizedAbsolutePath(importedFileName, cwd));;) {
168
+ const symlinkSet = symlinks.getSymlinksOfDirectory(ensureTrailingDirectorySeparator(toPath(directory, cwd, caseSensitive)));
169
+ if (symlinkSet !== undefined) {
170
+ // A package never imports itself through its own symlink; neither do ancestors.
171
+ if (startsWithDirectory(importingFileName, directory, caseSensitive))
172
+ break;
173
+ for (const target of targets) {
174
+ if (!startsWithDirectory(target, directory, caseSensitive))
175
+ continue;
176
+ const relative = getRelativePathFromDirectory(directory, target, caseSensitive, cwd);
177
+ for (const symlinkDirectory of symlinkSet) {
178
+ const option = resolvePath(symlinkDirectory, relative);
179
+ results.push(new ModulePath(option, containsNodeModules(option), target === referenceRedirect));
180
+ // A path through a symlink rules out ignored real paths.
181
+ shouldFilterIgnoredPaths = true;
182
+ }
183
+ }
184
+ }
185
+ if (directory === globalCache)
186
+ break;
187
+ const parent = getDirectoryPath(directory);
188
+ if (parent === directory)
189
+ break;
190
+ directory = parent;
191
+ }
192
+ }
193
+ if (preferSymlinks)
194
+ addTargets();
195
+ return results;
196
+ }
197
+ function startsWithDirectory(fileName, directoryName, useCaseSensitiveFileNames) {
198
+ if (directoryName === '')
199
+ return false;
200
+ const file = getCanonicalFileName(fileName, useCaseSensitiveFileNames);
201
+ let directory = getCanonicalFileName(directoryName, useCaseSensitiveFileNames);
202
+ if (directory.endsWith('/') || directory.endsWith('\\'))
203
+ directory = directory.slice(0, directory.length - 1);
204
+ return file.startsWith(directory + '/') || file.startsWith(directory + '\\');
205
+ }
206
+ //// Choosing specifiers
207
+ function computeModuleSpecifiers(modulePaths, options, importingFile, host, userPreferences, overrideImportMode, forAutoImport) {
208
+ const info = new ImporterInfo(importingFile.fileName, host.useCaseSensitiveFileNames());
209
+ const preferences = resolvePreferences(userPreferences, host, options, importingFile, '');
210
+ const cwd = host.getCurrentDirectory();
211
+ const targetMode = overrideImportMode !== ModuleKind.None ? overrideImportMode : host.getDefaultResolutionModeForFile(importingFile);
212
+ // An existing import of the module wins.
213
+ for (const modulePath of modulePaths) {
214
+ const targetPath = toPath(modulePath.fileName, cwd, info.useCaseSensitiveFileNames);
215
+ let existingImport;
216
+ for (const specifier of importingFile.imports) {
217
+ const resolved = host.getResolvedModuleFromModuleSpecifier(importingFile, specifier);
218
+ if (resolved !== undefined &&
219
+ resolved.resolvedFileName !== '' &&
220
+ toPath(resolved.resolvedFileName, cwd, info.useCaseSensitiveFileNames) === targetPath) {
221
+ existingImport = specifier;
222
+ break;
223
+ }
224
+ }
225
+ if (existingImport === undefined)
226
+ continue;
227
+ const text = getText(existingImport);
228
+ if (preferences.relativePreference === 1 /* RelativePreference.NonRelative */ && pathIsRelative(text))
229
+ continue;
230
+ const existingMode = host.getModeForUsageLocation(importingFile, existingImport);
231
+ // An import resolved in another mode may not resolve the same way.
232
+ if (existingMode !== targetMode && existingMode !== ModuleKind.None && targetMode !== ModuleKind.None)
233
+ continue;
234
+ return [text];
235
+ }
236
+ let importedFileIsInNodeModules = false;
237
+ for (const p of modulePaths)
238
+ if (p.isInNodeModules)
239
+ importedFileIsInNodeModules = true;
240
+ // Priority: package names through `node_modules` (a bare package name first), then `paths`,
241
+ // then deeper `node_modules` paths, then relative paths.
242
+ const pathsSpecifiers = [];
243
+ const redirectPathsSpecifiers = [];
244
+ const nodeModulesSpecifiers = [];
245
+ const relativeSpecifiers = [];
246
+ for (const modulePath of modulePaths) {
247
+ const specifier = modulePath.isInNodeModules
248
+ ? tryGetModuleNameAsNodeModule(modulePath, info, importingFile, host, options, userPreferences, false, overrideImportMode)
249
+ : '';
250
+ if (specifier !== '') {
251
+ nodeModulesSpecifiers.push(specifier);
252
+ // A specifier for a redirect is a bare package name; nothing beats it.
253
+ if (modulePath.isRedirect)
254
+ return nodeModulesSpecifiers;
255
+ }
256
+ const local = getLocalModuleSpecifier(modulePath.fileName, info, options, host, targetMode, preferences, modulePath.isRedirect || specifier !== '');
257
+ if (local === '')
258
+ continue;
259
+ if (modulePath.isRedirect) {
260
+ redirectPathsSpecifiers.push(local);
261
+ }
262
+ else if (pathIsBareSpecifier(local)) {
263
+ // A bare specifier through `node_modules` likely comes from a misused `baseUrl`; it would be
264
+ // reported as not portable, so it isn't preferred.
265
+ if (containsNodeModules(local))
266
+ relativeSpecifiers.push(local);
267
+ else
268
+ pathsSpecifiers.push(local);
269
+ }
270
+ else if (forAutoImport || !importedFileIsInNodeModules || modulePath.isInNodeModules) {
271
+ // When only some paths go through `node_modules`, a relative path that doesn't is probably
272
+ // the real path of a symlinked monorepo package, which isn't portable; the relative path
273
+ // through `node_modules` is used so declaration emit reports it.
274
+ relativeSpecifiers.push(local);
275
+ }
276
+ }
277
+ if (pathsSpecifiers.length > 0)
278
+ return pathsSpecifiers;
279
+ if (redirectPathsSpecifiers.length > 0)
280
+ return redirectPathsSpecifiers;
281
+ if (nodeModulesSpecifiers.length > 0)
282
+ return nodeModulesSpecifiers;
283
+ return relativeSpecifiers;
284
+ }
285
+ /** A specifier through `paths`, `package.json` `imports`, `rootDirs` or a relative path. */
286
+ function getLocalModuleSpecifier(moduleFileName, info, options, host, importMode, preferences, pathsOnly) {
287
+ const paths = options.paths;
288
+ const rootDirs = options.rootDirs;
289
+ if (pathsOnly && paths === undefined)
290
+ return '';
291
+ const cwd = host.getCurrentDirectory();
292
+ const caseSensitive = host.useCaseSensitiveFileNames();
293
+ const sourceDirectory = info.sourceDirectory;
294
+ const allowedEndings = preferences.allowedEndings(importMode);
295
+ let relativePath = rootDirs !== undefined && rootDirs.length > 0
296
+ ? tryGetModuleNameFromRootDirs(rootDirs, moduleFileName, sourceDirectory, allowedEndings, options, host)
297
+ : '';
298
+ if (relativePath === '')
299
+ relativePath = processEnding(ensurePathIsNonModuleName(getRelativePathFromDirectory(sourceDirectory, moduleFileName, caseSensitive, cwd)), allowedEndings, options, host);
300
+ if ((paths === undefined && !getResolvePackageJsonImports(options)) ||
301
+ preferences.relativePreference === 0 /* RelativePreference.Relative */)
302
+ return pathsOnly ? '' : relativePath;
303
+ const baseDirectory = getNormalizedAbsolutePath(getPathsBasePath(options, cwd), cwd);
304
+ const relativeToBaseUrl = getRelativePathIfInSameVolume(moduleFileName, baseDirectory, caseSensitive);
305
+ if (relativeToBaseUrl === '')
306
+ return pathsOnly ? '' : relativePath;
307
+ const fromPackageJsonImports = pathsOnly
308
+ ? ''
309
+ : tryGetModuleNameFromPackageJsonImports(moduleFileName, sourceDirectory, options, host, importMode, prefersTsExtension(allowedEndings));
310
+ const fromPaths = (pathsOnly || fromPackageJsonImports === '') && paths !== undefined
311
+ ? tryGetModuleNameFromPaths(relativeToBaseUrl, paths, allowedEndings, baseDirectory, host, options)
312
+ : '';
313
+ if (pathsOnly)
314
+ return fromPaths;
315
+ const maybeNonRelative = fromPackageJsonImports !== '' ? fromPackageJsonImports : fromPaths;
316
+ if (maybeNonRelative === '')
317
+ return relativePath;
318
+ if (preferences.relativePreference === 1 /* RelativePreference.NonRelative */ && !pathIsRelative(maybeNonRelative))
319
+ return maybeNonRelative;
320
+ if (preferences.relativePreference === 3 /* RelativePreference.ExternalNonRelative */ && !pathIsRelative(maybeNonRelative)) {
321
+ const projectDirectory = toPath(options.configFilePath !== undefined && options.configFilePath !== ''
322
+ ? getDirectoryPath(options.configFilePath)
323
+ : cwd, cwd, caseSensitive);
324
+ const canonicalSourceDirectory = toPath(sourceDirectory, cwd, caseSensitive);
325
+ const modulePath = toPath(moduleFileName, projectDirectory, caseSensitive);
326
+ const sourceIsInternal = pathContainsPath(projectDirectory, canonicalSourceDirectory);
327
+ const targetIsInternal = pathContainsPath(projectDirectory, modulePath);
328
+ // The import crosses the directory of the tsconfig.json.
329
+ if (sourceIsInternal !== targetIsInternal)
330
+ return maybeNonRelative;
331
+ const nearestTargetPackageJson = host.getNearestAncestorDirectoryWithPackageJson(getDirectoryPath(modulePath));
332
+ const nearestSourcePackageJson = host.getNearestAncestorDirectoryWithPackageJson(sourceDirectory);
333
+ // The files belong to different packages.
334
+ if (!packageJsonPathsAreEqual(nearestTargetPackageJson, nearestSourcePackageJson, caseSensitive, cwd))
335
+ return maybeNonRelative;
336
+ return relativePath;
337
+ }
338
+ // A relative path wins over a non-relative one with more components.
339
+ if (isPathRelativeToParent(maybeNonRelative) ||
340
+ countPathComponents(relativePath) < countPathComponents(maybeNonRelative))
341
+ return relativePath;
342
+ return maybeNonRelative;
343
+ }
344
+ function getPathsBasePath(options, currentDirectory) {
345
+ if (options.paths === undefined || options.paths.size === 0)
346
+ return '';
347
+ return options.pathsBasePath !== undefined && options.pathsBasePath !== '' ? options.pathsBasePath : currentDirectory;
348
+ }
349
+ /** Whether the canonical path `child` is `parent` or inside it. */
350
+ function pathContainsPath(parent, child) {
351
+ if (parent === '')
352
+ return false;
353
+ return (parent === child ||
354
+ (child.length > parent.length &&
355
+ child.startsWith(parent) &&
356
+ (parent.endsWith('/') || child.charCodeAt(parent.length) === 0x2f)));
357
+ }
358
+ function packageJsonPathsAreEqual(a, b, useCaseSensitiveFileNames, cwd) {
359
+ if (a === b)
360
+ return true;
361
+ if (a === '' || b === '')
362
+ return false;
363
+ return comparePaths(a, b, useCaseSensitiveFileNames, cwd) === 0;
364
+ }
365
+ function tryGetModuleNameFromRootDirs(rootDirs, moduleFileName, sourceDirectory, allowedEndings, options, host) {
366
+ const caseSensitive = host.useCaseSensitiveFileNames();
367
+ const targetPaths = getPathsRelativeToRootDirs(moduleFileName, rootDirs, caseSensitive);
368
+ if (targetPaths.length === 0)
369
+ return '';
370
+ const sourcePaths = getPathsRelativeToRootDirs(sourceDirectory, rootDirs, caseSensitive);
371
+ let shortest = '';
372
+ let shortestSeparators = 0;
373
+ for (const sourcePath of sourcePaths) {
374
+ for (const targetPath of targetPaths) {
375
+ const candidate = ensurePathIsNonModuleName(getPathFromPathComponents(getPathComponentsRelativeTo(sourcePath, targetPath, caseSensitive, host.getCurrentDirectory())));
376
+ const separators = countSlashes(candidate);
377
+ if (shortest === '' || separators < shortestSeparators) {
378
+ shortest = candidate;
379
+ shortestSeparators = separators;
380
+ }
381
+ }
382
+ }
383
+ return shortest === '' ? '' : processEnding(shortest, allowedEndings, options, host);
384
+ }
385
+ function getPathsRelativeToRootDirs(path, rootDirs, useCaseSensitiveFileNames) {
386
+ const results = [];
387
+ for (const rootDir of rootDirs) {
388
+ const relative = getRelativePathIfInSameVolume(path, rootDir, useCaseSensitiveFileNames);
389
+ if (!isPathRelativeToParent(relative))
390
+ results.push(relative);
391
+ }
392
+ return results;
393
+ }
394
+ function isPathRelativeToParent(path) {
395
+ return path.startsWith('..');
396
+ }
397
+ /** The path from `directoryPath` to `path`, or `''` when they are on different roots. */
398
+ function getRelativePathIfInSameVolume(path, directoryPath, useCaseSensitiveFileNames) {
399
+ const relative = getPathFromPathComponents(getPathComponentsRelativeTo(directoryPath, path, useCaseSensitiveFileNames, directoryPath));
400
+ return isRootedDiskPath(relative) ? '' : relative;
401
+ }
402
+ function pathIsBareSpecifier(path) {
403
+ return !pathIsAbsolute(path) && !pathIsRelative(path);
404
+ }
405
+ function ensurePathIsNonModuleName(path) {
406
+ return pathIsBareSpecifier(path) ? './' + path : path;
407
+ }
408
+ //// Package names
409
+ /** Index positions in a path through `node_modules`. */
410
+ class NodeModulePathParts {
411
+ topLevelNodeModulesIndex;
412
+ topLevelPackageNameIndex;
413
+ packageRootIndex;
414
+ fileNameIndex;
415
+ constructor(
416
+ /** The `/` before the outermost `node_modules`. */
417
+ topLevelNodeModulesIndex,
418
+ /** The `/` before the outermost package name. */
419
+ topLevelPackageNameIndex,
420
+ /** The `/` after the innermost package name. */
421
+ packageRootIndex, fileNameIndex) {
422
+ this.topLevelNodeModulesIndex = topLevelNodeModulesIndex;
423
+ this.topLevelPackageNameIndex = topLevelPackageNameIndex;
424
+ this.packageRootIndex = packageRootIndex;
425
+ this.fileNameIndex = fileNameIndex;
426
+ }
427
+ }
428
+ /**
429
+ * The parts of `/base/node_modules/[@scope/]package/[node_modules/[@scope/]package/]sub/file.js`,
430
+ * or undefined if the path is not a file inside a package.
431
+ */
432
+ function getNodeModulePathParts(fullPath) {
433
+ let topLevelNodeModulesIndex = 0;
434
+ let topLevelPackageNameIndex = 0;
435
+ let packageRootIndex = 0;
436
+ let partStart = 0;
437
+ let partEnd = 0;
438
+ let state = 0 /* PathParseState.BeforeNodeModules */;
439
+ while (partEnd >= 0) {
440
+ partStart = partEnd;
441
+ partEnd = fullPath.indexOf('/', partStart + 1);
442
+ switch (state) {
443
+ case 0 /* PathParseState.BeforeNodeModules */:
444
+ if (fullPath.startsWith('/node_modules/', partStart)) {
445
+ topLevelNodeModulesIndex = partStart;
446
+ topLevelPackageNameIndex = partEnd;
447
+ state = 1 /* PathParseState.NodeModules */;
448
+ }
449
+ break;
450
+ case 1 /* PathParseState.NodeModules */:
451
+ case 2 /* PathParseState.Scope */:
452
+ if (state === 1 /* PathParseState.NodeModules */ && fullPath.charCodeAt(partStart + 1) === 0x40) {
453
+ state = 2 /* PathParseState.Scope */;
454
+ }
455
+ else {
456
+ packageRootIndex = partEnd;
457
+ state = 3 /* PathParseState.PackageContent */;
458
+ }
459
+ break;
460
+ case 3 /* PathParseState.PackageContent */:
461
+ state = fullPath.startsWith('/node_modules/', partStart)
462
+ ? 1 /* PathParseState.NodeModules */
463
+ : 3 /* PathParseState.PackageContent */;
464
+ break;
465
+ }
466
+ }
467
+ if (state <= 1 /* PathParseState.NodeModules */)
468
+ return undefined;
469
+ return new NodeModulePathParts(topLevelNodeModulesIndex, topLevelPackageNameIndex, packageRootIndex, partStart);
470
+ }
471
+ /** The package name of a file or directory in `node_modules`, or `''`. */
472
+ export function getPackageNameFromDirectory(fileOrDirectoryPath) {
473
+ const index = fileOrDirectoryPath.lastIndexOf('/node_modules/');
474
+ if (index === -1)
475
+ return '';
476
+ const basename = fileOrDirectoryPath.slice(index + '/node_modules/'.length);
477
+ if (basename.startsWith('.'))
478
+ return '';
479
+ const nextSlash = basename.indexOf('/');
480
+ if (nextSlash === -1)
481
+ return basename;
482
+ if (!basename.startsWith('@') || nextSlash === basename.length - 1)
483
+ return basename.slice(0, nextSlash);
484
+ const secondSlash = basename.indexOf('/', nextSlash + 1);
485
+ return secondSlash === -1 ? basename : basename.slice(0, secondSlash);
486
+ }
487
+ /** A specifier through the nearest `node_modules` of the importing file, or `''`. */
488
+ function tryGetModuleNameAsNodeModule(modulePath, info, importingFile, host, options, userPreferences, packageNameOnly, overrideMode) {
489
+ const parts = getNodeModulePathParts(modulePath.fileName);
490
+ if (parts === undefined)
491
+ return '';
492
+ const preferences = resolvePreferences(userPreferences, host, options, importingFile, '');
493
+ const allowedEndings = preferences.allowedEndings(ModuleKind.None);
494
+ const caseSensitive = host.useCaseSensitiveFileNames();
495
+ let moduleSpecifier = modulePath.fileName;
496
+ let isPackageRootPath = false;
497
+ if (!packageNameOnly) {
498
+ // tsgo tries only the innermost package directory, with no deeper directories.
499
+ const attempt = tryDirectoryWithPackageJson(parts, modulePath, importingFile, host, overrideMode, options, allowedEndings);
500
+ // Not exported: `node_modules` resolution can't reach it.
501
+ if (attempt.blockedByExports)
502
+ return '';
503
+ if (attempt.verbatimFromExports)
504
+ return attempt.moduleFileToTry;
505
+ if (attempt.packageRootPath !== '') {
506
+ moduleSpecifier = attempt.packageRootPath;
507
+ isPackageRootPath = true;
508
+ }
509
+ else {
510
+ moduleSpecifier = processEnding(attempt.moduleFileToTry, allowedEndings, options, host);
511
+ }
512
+ }
513
+ if (modulePath.isRedirect && !isPackageRootPath)
514
+ return '';
515
+ // Only a `node_modules` in the importing file's directory or above can be used, and not the
516
+ // global typings cache.
517
+ const globalTypingsCacheLocation = host.getGlobalTypingsCacheLocation();
518
+ const pathToTopLevelNodeModules = moduleSpecifier.slice(0, parts.topLevelNodeModulesIndex);
519
+ if (!hasPrefix(info.sourceDirectory, pathToTopLevelNodeModules, caseSensitive) ||
520
+ (globalTypingsCacheLocation !== '' &&
521
+ hasPrefix(globalTypingsCacheLocation, pathToTopLevelNodeModules, caseSensitive)))
522
+ return '';
523
+ // A package found in `@types` is imported by its own name.
524
+ return getPackageNameFromTypesPackageName(moduleSpecifier.slice(parts.topLevelPackageNameIndex + 1));
525
+ }
526
+ class PackageDirectoryAttempt {
527
+ moduleFileToTry;
528
+ packageRootPath;
529
+ blockedByExports;
530
+ verbatimFromExports;
531
+ constructor(moduleFileToTry,
532
+ /** The package directory, when the file is the package's entry point. */
533
+ packageRootPath, blockedByExports,
534
+ /** `moduleFileToTry` is a specifier from `exports`, used as is. */
535
+ verbatimFromExports) {
536
+ this.moduleFileToTry = moduleFileToTry;
537
+ this.packageRootPath = packageRootPath;
538
+ this.blockedByExports = blockedByExports;
539
+ this.verbatimFromExports = verbatimFromExports;
540
+ }
541
+ }
542
+ function attempt(moduleFileToTry, packageRootPath) {
543
+ return new PackageDirectoryAttempt(moduleFileToTry, packageRootPath, false, false);
544
+ }
545
+ function tryDirectoryWithPackageJson(parts, modulePath, importingFile, host, overrideMode, options, allowedEndings) {
546
+ const fileName = modulePath.fileName;
547
+ const packageRootPath = fileName.slice(0, parts.packageRootIndex === -1 ? fileName.length : parts.packageRootIndex);
548
+ const packageJsonPath = combinePaths(packageRootPath, 'package.json');
549
+ let moduleFileToTry = fileName;
550
+ let maybeBlockedByTypesVersions = false;
551
+ const packageJson = host.getPackageJsonInfo(packageJsonPath);
552
+ if (packageJson === undefined) {
553
+ // Without a package.json, an index file still resolves as the package name.
554
+ const name = moduleFileToTry.slice(parts.packageRootIndex + 1);
555
+ return name === 'index.d.ts' || name === 'index.js' || name === 'index.ts' || name === 'index.tsx'
556
+ ? attempt(moduleFileToTry, packageRootPath)
557
+ : attempt(moduleFileToTry, '');
558
+ }
559
+ let importMode = overrideMode !== ModuleKind.None ? overrideMode : host.getDefaultResolutionModeForFile(importingFile);
560
+ const contents = packageJson.contents;
561
+ if (getResolvePackageJsonExports(options)) {
562
+ // The directory name in node_modules, not the package.json `name`, which can differ for
563
+ // url or file dependencies.
564
+ const packageName = getPackageNameFromTypesPackageName(packageRootPath.slice(parts.topLevelPackageNameIndex + 1));
565
+ // Conditions follow the target file's format: `.cjs`-like files match `require`, `.mjs`-like `import`.
566
+ if (fileExtensionIsOneOf(fileName, ['.cjs', '.cts', '.d.cts']))
567
+ importMode = ModuleKind.CommonJS;
568
+ else if (fileExtensionIsOneOf(fileName, ['.mjs', '.mts', '.d.mts']))
569
+ importMode = ModuleKind.ESNext;
570
+ const exports = contents?.exports;
571
+ if (exports !== undefined) {
572
+ const conditions = getConditions(options, importMode);
573
+ const fromExports = tryGetModuleNameFromExports(options, host, fileName, packageRootPath, packageName, exports, conditions);
574
+ if (fromExports !== '')
575
+ return new PackageDirectoryAttempt(fromExports, '', false, true);
576
+ return new PackageDirectoryAttempt(fileName, '', true, false);
577
+ }
578
+ }
579
+ const versionPaths = contents !== undefined && contents.typesVersions !== undefined && contents.typesVersions.type === 'object'
580
+ ? contents.getVersionPaths(undefined)
581
+ : undefined;
582
+ if (versionPaths !== undefined) {
583
+ const subModuleName = fileName.slice(packageRootPath.length + 1);
584
+ const fromPaths = tryGetModuleNameFromPaths(subModuleName, versionPaths.paths, allowedEndings, packageRootPath, host, options);
585
+ if (fromPaths === '')
586
+ maybeBlockedByTypesVersions = true;
587
+ else
588
+ moduleFileToTry = combinePaths(packageRootPath, fromPaths);
589
+ }
590
+ // The main file can be imported by the package name.
591
+ let mainFileRelative = 'index.js';
592
+ if (contents !== undefined) {
593
+ if (contents.typings.value !== undefined)
594
+ mainFileRelative = contents.typings.value;
595
+ else if (contents.types.value !== undefined)
596
+ mainFileRelative = contents.types.value;
597
+ else if (contents.main.value !== undefined)
598
+ mainFileRelative = contents.main.value;
599
+ }
600
+ // When typesVersions maps the main file but gave no path for this file, the main file isn't
601
+ // reachable through the package name.
602
+ if (mainFileRelative !== '' &&
603
+ !(maybeBlockedByTypesVersions &&
604
+ versionPaths !== undefined &&
605
+ matchPatternOrExact(parsePatterns(versionPaths.paths), mainFileRelative) !== undefined)) {
606
+ const caseSensitive = host.useCaseSensitiveFileNames();
607
+ const cwd = host.getCurrentDirectory();
608
+ const mainExportFile = toPath(mainFileRelative, packageRootPath, caseSensitive);
609
+ if (comparePaths(removeFileExtension(mainExportFile), removeFileExtension(moduleFileToTry), caseSensitive, cwd) === 0)
610
+ return attempt(moduleFileToTry, packageRootPath);
611
+ // A main naming a directory reaches its index file, except in `"type": "module"` packages.
612
+ if ((contents === undefined || contents.type.value !== 'module') &&
613
+ !fileExtensionIsOneOf(moduleFileToTry, extensionsNotSupportingExtensionlessResolution()) &&
614
+ hasPrefix(moduleFileToTry, mainExportFile, caseSensitive) &&
615
+ comparePaths(getDirectoryPath(moduleFileToTry), removeTrailingDirectorySeparator(mainExportFile), caseSensitive, cwd) === 0 &&
616
+ removeFileExtension(getBaseFileName(moduleFileToTry)) === 'index')
617
+ return attempt(moduleFileToTry, packageRootPath);
618
+ }
619
+ return attempt(moduleFileToTry, '');
620
+ }
621
+ function tryGetModuleNameFromExports(options, host, targetFilePath, packageDirectory, packageName, exports, conditions) {
622
+ if (exports.type === 'object' && exports.kind === 1 /* JsonObjectKind.Subpaths */) {
623
+ // Directory (`./dir/`), pattern (`./*`) and exact subpath keys.
624
+ for (const [key, value] of exports.entries) {
625
+ const subPackageName = getNormalizedAbsolutePath(combinePaths(packageName, key), '');
626
+ const mode = key.endsWith('/')
627
+ ? 1 /* MatchingMode.Directory */
628
+ : key.includes('*')
629
+ ? 2 /* MatchingMode.Pattern */
630
+ : 0 /* MatchingMode.Exact */;
631
+ const result = tryGetModuleNameFromExportsOrImports(options, host, targetFilePath, packageDirectory, subPackageName, value, conditions, mode, false, false);
632
+ if (result !== '')
633
+ return result;
634
+ }
635
+ }
636
+ return tryGetModuleNameFromExportsOrImports(options, host, targetFilePath, packageDirectory, packageName, exports, conditions, 0 /* MatchingMode.Exact */, false, false);
637
+ }
638
+ function tryGetModuleNameFromPackageJsonImports(moduleFileName, sourceDirectory, options, host, importMode, preferTsExtension) {
639
+ if (!getResolvePackageJsonImports(options))
640
+ return '';
641
+ const packageDirectory = host.getNearestAncestorDirectoryWithPackageJson(sourceDirectory);
642
+ if (packageDirectory === '')
643
+ return '';
644
+ const info = host.getPackageJsonInfo(combinePaths(packageDirectory, 'package.json'));
645
+ const imports = info?.contents?.imports;
646
+ if (imports === undefined || imports.type !== 'object')
647
+ return '';
648
+ const conditions = getConditions(options, importMode);
649
+ const resolution = getModuleResolutionKind(options);
650
+ for (const [key, value] of imports.entries) {
651
+ if (key === '#' || key === '#/' || !key.startsWith('#'))
652
+ continue;
653
+ // `#/` keys are valid only in nodenext and bundler.
654
+ if (key.startsWith('#/') &&
655
+ resolution !== ModuleResolutionKind.NodeNext &&
656
+ resolution !== ModuleResolutionKind.Bundler)
657
+ continue;
658
+ const mode = key.endsWith('/')
659
+ ? 1 /* MatchingMode.Directory */
660
+ : key.includes('*')
661
+ ? 2 /* MatchingMode.Pattern */
662
+ : 0 /* MatchingMode.Exact */;
663
+ const result = tryGetModuleNameFromExportsOrImports(options, host, moduleFileName, packageDirectory, key, value, conditions, mode, true, preferTsExtension);
664
+ if (result !== '')
665
+ return result;
666
+ }
667
+ return '';
668
+ }
669
+ function tryGetModuleNameFromExportsOrImports(options, host, targetFilePath, packageDirectory, packageName, exports, conditions, mode, isImports, preferTsExtension) {
670
+ switch (exports.type) {
671
+ case 'string': {
672
+ // As tsgo, the importing project's options apply to the package's files.
673
+ const outputFile = isImports ? getOutputJSFileNameWorker(targetFilePath, options, host.getOutputPathsHost()) : '';
674
+ const declarationFile = isImports
675
+ ? getOutputDeclarationFileNameWorker(targetFilePath, options, host.getOutputPathsHost())
676
+ : '';
677
+ const target = exports.value;
678
+ const pathOrPattern = getNormalizedAbsolutePath(combinePaths(packageDirectory, target), '');
679
+ const extensionSwappedTarget = hasTSFileExtension(targetFilePath)
680
+ ? removeFileExtension(targetFilePath) + tryGetJSExtensionForFile(targetFilePath, options)
681
+ : '';
682
+ const canTryTsExtension = preferTsExtension && hasImplementationTSFileExtension(targetFilePath);
683
+ const caseSensitive = host.useCaseSensitiveFileNames();
684
+ const cwd = host.getCurrentDirectory();
685
+ switch (mode) {
686
+ case 0 /* MatchingMode.Exact */:
687
+ if ((extensionSwappedTarget !== '' &&
688
+ comparePaths(extensionSwappedTarget, pathOrPattern, caseSensitive, cwd) === 0) ||
689
+ comparePaths(targetFilePath, pathOrPattern, caseSensitive, cwd) === 0 ||
690
+ (outputFile !== '' && comparePaths(outputFile, pathOrPattern, caseSensitive, cwd) === 0) ||
691
+ (declarationFile !== '' && comparePaths(declarationFile, pathOrPattern, caseSensitive, cwd) === 0))
692
+ return packageName;
693
+ break;
694
+ case 1 /* MatchingMode.Directory */: {
695
+ const subdirectory = (file) => getNormalizedAbsolutePath(combinePaths(combinePaths(packageName, target), getRelativePathFromDirectory(pathOrPattern, file, caseSensitive, cwd)), '');
696
+ if (canTryTsExtension && containsPath(targetFilePath, pathOrPattern, caseSensitive, cwd))
697
+ return subdirectory(targetFilePath);
698
+ if (extensionSwappedTarget !== '' && containsPath(pathOrPattern, extensionSwappedTarget, caseSensitive, cwd))
699
+ return subdirectory(extensionSwappedTarget);
700
+ if (!canTryTsExtension && containsPath(pathOrPattern, targetFilePath, caseSensitive, cwd))
701
+ return subdirectory(targetFilePath);
702
+ if (outputFile !== '' && containsPath(pathOrPattern, outputFile, caseSensitive, cwd))
703
+ return combinePaths(packageName, getRelativePathFromDirectory(pathOrPattern, outputFile, caseSensitive, cwd));
704
+ if (declarationFile !== '' && containsPath(pathOrPattern, declarationFile, caseSensitive, cwd)) {
705
+ const fragment = getRelativePathFromDirectory(pathOrPattern, declarationFile, caseSensitive, cwd);
706
+ return combinePaths(packageName, changeExtension(fragment, tryGetJSExtensionForFile(declarationFile, options)));
707
+ }
708
+ break;
709
+ }
710
+ case 2 /* MatchingMode.Pattern */: {
711
+ const star = pathOrPattern.indexOf('*');
712
+ const leading = star === -1 ? pathOrPattern : pathOrPattern.slice(0, star);
713
+ const trailing = star === -1 ? '' : pathOrPattern.slice(star + 1);
714
+ const replacement = (file) => replaceFirstStar(packageName, file.slice(leading.length, file.length - trailing.length));
715
+ if (canTryTsExtension && hasPrefixAndSuffixWithoutOverlap(targetFilePath, leading, trailing, caseSensitive))
716
+ return replacement(targetFilePath);
717
+ if (extensionSwappedTarget !== '' &&
718
+ hasPrefixAndSuffixWithoutOverlap(extensionSwappedTarget, leading, trailing, caseSensitive))
719
+ return replacement(extensionSwappedTarget);
720
+ if (!canTryTsExtension && hasPrefixAndSuffixWithoutOverlap(targetFilePath, leading, trailing, caseSensitive))
721
+ return replacement(targetFilePath);
722
+ if (outputFile !== '' && hasPrefixAndSuffixWithoutOverlap(outputFile, leading, trailing, caseSensitive))
723
+ return replacement(outputFile);
724
+ if (declarationFile !== '' &&
725
+ hasPrefixAndSuffixWithoutOverlap(declarationFile, leading, trailing, caseSensitive)) {
726
+ const jsExtension = tryGetJSExtensionForFile(declarationFile, options);
727
+ if (jsExtension !== '')
728
+ return changeFullExtension(replacement(declarationFile), jsExtension);
729
+ }
730
+ break;
731
+ }
732
+ }
733
+ return '';
734
+ }
735
+ case 'array':
736
+ for (const item of exports.items) {
737
+ const result = tryGetModuleNameFromExportsOrImports(options, host, targetFilePath, packageDirectory, packageName, item, conditions, mode, isImports, preferTsExtension);
738
+ if (result !== '')
739
+ return result;
740
+ }
741
+ return '';
742
+ case 'object':
743
+ // Conditions.
744
+ for (const [key, value] of exports.entries) {
745
+ if (key === 'default' ||
746
+ conditions.includes(key) ||
747
+ (conditions.includes('types') && isApplicableVersionedTypesKey(key))) {
748
+ const result = tryGetModuleNameFromExportsOrImports(options, host, targetFilePath, packageDirectory, packageName, value, conditions, mode, isImports, preferTsExtension);
749
+ if (result !== '')
750
+ return result;
751
+ }
752
+ }
753
+ return '';
754
+ }
755
+ return '';
756
+ }
757
+ /** The first `paths` key whose substitution matches the file, with `*` filled in, or `''`. */
758
+ function tryGetModuleNameFromPaths(relativeToBaseUrl, paths, allowedEndings, baseDirectory, host, options) {
759
+ const caseSensitive = host.useCaseSensitiveFileNames();
760
+ for (const [key, values] of paths) {
761
+ if (values === undefined)
762
+ continue;
763
+ for (const patternText of values) {
764
+ const normalized = normalizePath(patternText);
765
+ let pattern = getRelativePathIfInSameVolume(normalized, baseDirectory, caseSensitive);
766
+ if (pattern === '')
767
+ pattern = normalized;
768
+ const star = pattern.indexOf('*');
769
+ const prefix = star === -1 ? pattern : pattern.slice(0, star);
770
+ const suffix = star === -1 ? '' : pattern.slice(star + 1);
771
+ // Candidates: the file with each allowed ending, then, when the pattern has an extension,
772
+ // the file name itself (a pattern like `./dist/*.d.ts` maps to the file directly).
773
+ const candidateEndings = [];
774
+ const candidates = [];
775
+ for (const ending of allowedEndings) {
776
+ candidateEndings.push(ending);
777
+ candidates.push(processEnding(relativeToBaseUrl, [ending], options, host));
778
+ }
779
+ if (tryGetExtensionFromPath(pattern) !== '') {
780
+ candidateEndings.push(2 /* ModuleSpecifierEnding.JsExtension */);
781
+ candidates.push(relativeToBaseUrl);
782
+ }
783
+ if (star !== -1) {
784
+ for (let i = 0; i < candidates.length; i++) {
785
+ const value = candidates[i];
786
+ if (value.length >= prefix.length + suffix.length &&
787
+ hasPrefix(value, prefix, caseSensitive) &&
788
+ hasSuffix(value, suffix, caseSensitive) &&
789
+ validateEnding(candidateEndings[i], value, relativeToBaseUrl, options, host)) {
790
+ const matchedStar = value.slice(prefix.length, value.length - suffix.length);
791
+ if (!pathIsRelative(matchedStar))
792
+ return replaceFirstStar(key, matchedStar);
793
+ }
794
+ }
795
+ }
796
+ else {
797
+ for (let i = 0; i < candidates.length; i++)
798
+ if (candidateEndings[i] !== 0 /* ModuleSpecifierEnding.Minimal */ && pattern === candidates[i])
799
+ return key;
800
+ for (let i = 0; i < candidates.length; i++)
801
+ if (candidateEndings[i] === 0 /* ModuleSpecifierEnding.Minimal */ &&
802
+ pattern === candidates[i] &&
803
+ validateEnding(candidateEndings[i], candidates[i], relativeToBaseUrl, options, host))
804
+ return key;
805
+ }
806
+ }
807
+ }
808
+ return '';
809
+ }
810
+ /** A minimal ending must agree with what dropping `/index` gives once the file system is checked. */
811
+ function validateEnding(ending, value, relativeToBaseUrl, options, host) {
812
+ return (ending !== 0 /* ModuleSpecifierEnding.Minimal */ || value === processEnding(relativeToBaseUrl, [ending], options, host));
813
+ }
814
+ function replaceFirstStar(text, replacement) {
815
+ const star = text.indexOf('*');
816
+ return star === -1 ? text : text.slice(0, star) + replacement + text.slice(star + 1);
817
+ }
818
+ function hasPrefix(text, prefix, caseSensitive) {
819
+ if (caseSensitive)
820
+ return text.startsWith(prefix);
821
+ if (prefix.length > text.length)
822
+ return false;
823
+ return text.slice(0, prefix.length).toLowerCase() === prefix.toLowerCase();
824
+ }
825
+ function hasSuffix(text, suffix, caseSensitive) {
826
+ if (caseSensitive)
827
+ return text.endsWith(suffix);
828
+ if (suffix.length > text.length)
829
+ return false;
830
+ return text.slice(text.length - suffix.length).toLowerCase() === suffix.toLowerCase();
831
+ }
832
+ function hasPrefixAndSuffixWithoutOverlap(text, prefix, suffix, caseSensitive) {
833
+ return (prefix.length + suffix.length <= text.length &&
834
+ hasPrefix(text, prefix, caseSensitive) &&
835
+ hasSuffix(text, suffix, caseSensitive));
836
+ }
837
+ /** Replaces the extension, taking a declaration extension from its `.d`. */
838
+ function changeFullExtension(path, newExtension) {
839
+ const declarationExtension = getDeclarationFileExtension(path);
840
+ if (declarationExtension === '')
841
+ return changeExtension(path, newExtension);
842
+ return (path.slice(0, path.length - declarationExtension.length) +
843
+ (newExtension.startsWith('.') ? newExtension : '.' + newExtension));
844
+ }
845
+ //// Endings
846
+ function extensionsNotSupportingExtensionlessResolution() {
847
+ return ['.mts', '.d.mts', '.mjs', '.cts', '.d.cts', '.cjs'];
848
+ }
849
+ function isNodeNext(options) {
850
+ const kind = getModuleResolutionKind(options);
851
+ return ModuleResolutionKind.Node16 <= kind && kind <= ModuleResolutionKind.NodeNext;
852
+ }
853
+ // `noEmit` or `emitDeclarationOnly` is validated with the option elsewhere.
854
+ function shouldAllowImportingTsExtension(options, fromFileName) {
855
+ return getAllowImportingTsExtensions(options) || (fromFileName !== '' && isDeclarationFileName(fromFileName));
856
+ }
857
+ function usesExtensionsOnImports(file) {
858
+ for (const specifier of file.imports) {
859
+ const text = getText(specifier);
860
+ if (pathIsRelative(text) && !fileExtensionIsOneOf(text, extensionsNotSupportingExtensionlessResolution()))
861
+ return hasTSFileExtension(text) || hasJSFileExtension(text);
862
+ }
863
+ return false;
864
+ }
865
+ function inferPreference(resolutionMode, file, nodeNext) {
866
+ let usesJsExtensions = false;
867
+ for (const specifier of file.imports) {
868
+ const path = getText(specifier);
869
+ if (!pathIsRelative(path))
870
+ continue;
871
+ if (nodeNext && resolutionMode === ModuleKind.CommonJS)
872
+ continue;
873
+ // Extensions these require say nothing about preference.
874
+ if (fileExtensionIsOneOf(path, extensionsNotSupportingExtensionlessResolution()))
875
+ continue;
876
+ if (hasTSFileExtension(path))
877
+ return 3 /* ModuleSpecifierEnding.TsExtension */;
878
+ if (hasJSFileExtension(path))
879
+ usesJsExtensions = true;
880
+ }
881
+ return usesJsExtensions ? 2 /* ModuleSpecifierEnding.JsExtension */ : 0 /* ModuleSpecifierEnding.Minimal */;
882
+ }
883
+ function getModuleSpecifierEndingPreference(preference, resolutionMode, options, file) {
884
+ const nodeNext = isNodeNext(options);
885
+ if (preference === 'js' || (resolutionMode === ModuleKind.ESNext && nodeNext)) {
886
+ // An extension is requested or required: `.js`, or `.ts` where allowed unless the file
887
+ // only uses `.js`.
888
+ if (!shouldAllowImportingTsExtension(options, ''))
889
+ return 2 /* ModuleSpecifierEnding.JsExtension */;
890
+ return inferPreference(resolutionMode, file, nodeNext) !== 2 /* ModuleSpecifierEnding.JsExtension */
891
+ ? 3 /* ModuleSpecifierEnding.TsExtension */
892
+ : 2 /* ModuleSpecifierEnding.JsExtension */;
893
+ }
894
+ if (preference === 'minimal')
895
+ return 0 /* ModuleSpecifierEnding.Minimal */;
896
+ if (preference === 'index')
897
+ return 1 /* ModuleSpecifierEnding.Index */;
898
+ // No preference: follow the file's other imports.
899
+ if (!shouldAllowImportingTsExtension(options, ''))
900
+ return usesExtensionsOnImports(file) ? 2 /* ModuleSpecifierEnding.JsExtension */ : 0 /* ModuleSpecifierEnding.Minimal */;
901
+ return inferPreference(resolutionMode, file, nodeNext);
902
+ }
903
+ function getPreferredEnding(preferences, host, options, importingFile, oldImportSpecifier, resolutionMode) {
904
+ if (oldImportSpecifier !== '') {
905
+ if (hasJSFileExtension(oldImportSpecifier))
906
+ return 2 /* ModuleSpecifierEnding.JsExtension */;
907
+ if (oldImportSpecifier.endsWith('/index'))
908
+ return 1 /* ModuleSpecifierEnding.Index */;
909
+ }
910
+ if (resolutionMode === ModuleKind.None)
911
+ resolutionMode = host.getDefaultResolutionModeForFile(importingFile);
912
+ return getModuleSpecifierEndingPreference(preferences.importModuleSpecifierEnding, resolutionMode, options, importingFile);
913
+ }
914
+ /** The endings a specifier from `importingFile` may have, most preferred first. */
915
+ export function getAllowedEndingsInPreferredOrder(preferences, host, options, importingFile, oldImportSpecifier, syntaxImpliedNodeFormat) {
916
+ let preferred = getPreferredEnding(preferences, host, options, importingFile, oldImportSpecifier, ModuleKind.None);
917
+ if (host.getDefaultResolutionModeForFile(importingFile) !== syntaxImpliedNodeFormat)
918
+ preferred = getPreferredEnding(preferences, host, options, importingFile, oldImportSpecifier, syntaxImpliedNodeFormat);
919
+ const allowTs = shouldAllowImportingTsExtension(options, importingFile.fileName);
920
+ if (syntaxImpliedNodeFormat === ModuleKind.ESNext && isNodeNext(options))
921
+ return allowTs
922
+ ? [3 /* ModuleSpecifierEnding.TsExtension */, 2 /* ModuleSpecifierEnding.JsExtension */]
923
+ : [2 /* ModuleSpecifierEnding.JsExtension */];
924
+ switch (preferred) {
925
+ case 2 /* ModuleSpecifierEnding.JsExtension */:
926
+ return allowTs
927
+ ? [
928
+ 2 /* ModuleSpecifierEnding.JsExtension */,
929
+ 3 /* ModuleSpecifierEnding.TsExtension */,
930
+ 0 /* ModuleSpecifierEnding.Minimal */,
931
+ 1 /* ModuleSpecifierEnding.Index */,
932
+ ]
933
+ : [2 /* ModuleSpecifierEnding.JsExtension */, 0 /* ModuleSpecifierEnding.Minimal */, 1 /* ModuleSpecifierEnding.Index */];
934
+ case 3 /* ModuleSpecifierEnding.TsExtension */:
935
+ return [
936
+ 3 /* ModuleSpecifierEnding.TsExtension */,
937
+ 0 /* ModuleSpecifierEnding.Minimal */,
938
+ 2 /* ModuleSpecifierEnding.JsExtension */,
939
+ 1 /* ModuleSpecifierEnding.Index */,
940
+ ];
941
+ case 1 /* ModuleSpecifierEnding.Index */:
942
+ return allowTs
943
+ ? [
944
+ 1 /* ModuleSpecifierEnding.Index */,
945
+ 0 /* ModuleSpecifierEnding.Minimal */,
946
+ 3 /* ModuleSpecifierEnding.TsExtension */,
947
+ 2 /* ModuleSpecifierEnding.JsExtension */,
948
+ ]
949
+ : [1 /* ModuleSpecifierEnding.Index */, 0 /* ModuleSpecifierEnding.Minimal */, 2 /* ModuleSpecifierEnding.JsExtension */];
950
+ }
951
+ return allowTs
952
+ ? [
953
+ 0 /* ModuleSpecifierEnding.Minimal */,
954
+ 1 /* ModuleSpecifierEnding.Index */,
955
+ 3 /* ModuleSpecifierEnding.TsExtension */,
956
+ 2 /* ModuleSpecifierEnding.JsExtension */,
957
+ ]
958
+ : [0 /* ModuleSpecifierEnding.Minimal */, 1 /* ModuleSpecifierEnding.Index */, 2 /* ModuleSpecifierEnding.JsExtension */];
959
+ }
960
+ function resolvePreferences(preferences, host, options, importingFile, oldImportSpecifier) {
961
+ let relativePreference = 2 /* RelativePreference.Shortest */;
962
+ if (oldImportSpecifier !== '') {
963
+ relativePreference = isExternalModuleNameRelative(oldImportSpecifier)
964
+ ? 0 /* RelativePreference.Relative */
965
+ : 1 /* RelativePreference.NonRelative */;
966
+ }
967
+ else {
968
+ switch (preferences.importModuleSpecifierPreference) {
969
+ case 'relative':
970
+ relativePreference = 0 /* RelativePreference.Relative */;
971
+ break;
972
+ case 'non-relative':
973
+ relativePreference = 1 /* RelativePreference.NonRelative */;
974
+ break;
975
+ case 'project-relative':
976
+ relativePreference = 3 /* RelativePreference.ExternalNonRelative */;
977
+ break;
978
+ }
979
+ }
980
+ return new ResolvedPreferences(relativePreference, preferences, host, options, importingFile, oldImportSpecifier);
981
+ }
982
+ function prefersTsExtension(allowedEndings) {
983
+ const tsPriority = allowedEndings.indexOf(3 /* ModuleSpecifierEnding.TsExtension */);
984
+ return tsPriority > -1 && tsPriority < allowedEndings.indexOf(2 /* ModuleSpecifierEnding.JsExtension */);
985
+ }
986
+ /** The JavaScript extension a file is imported with, or `''`. */
987
+ export function tryGetJSExtensionForFile(fileName, options) {
988
+ const extension = tryGetExtensionFromPath(fileName);
989
+ switch (extension) {
990
+ case '.ts':
991
+ case '.d.ts':
992
+ return '.js';
993
+ case '.tsx':
994
+ return options.jsx === JsxEmit.Preserve ? '.jsx' : '.js';
995
+ case '.js':
996
+ case '.jsx':
997
+ case '.json':
998
+ return extension;
999
+ case '.d.mts':
1000
+ case '.mts':
1001
+ case '.mjs':
1002
+ return '.mjs';
1003
+ case '.d.cts':
1004
+ case '.cts':
1005
+ case '.cjs':
1006
+ return '.cjs';
1007
+ }
1008
+ return '';
1009
+ }
1010
+ function getJSExtensionForFile(fileName, options) {
1011
+ const extension = tryGetJSExtensionForFile(fileName, options);
1012
+ if (extension === '')
1013
+ throw new Error('Extension ' + tryGetExtensionFromPath(fileName) + ' is unsupported: ' + fileName);
1014
+ return extension;
1015
+ }
1016
+ /** `.js`, `.mjs` or `.cjs` for `.d.ts`, `.d.mts` or `.d.cts`; `.json` for `.d.json.ts` and the like. */
1017
+ export function getJSExtensionForDeclarationFileExtension(extension) {
1018
+ switch (extension) {
1019
+ case '.d.ts':
1020
+ return '.js';
1021
+ case '.d.mts':
1022
+ return '.mjs';
1023
+ case '.d.cts':
1024
+ return '.cjs';
1025
+ }
1026
+ return extension.slice('.d'.length, extension.length - '.ts'.length);
1027
+ }
1028
+ /** `foo.d.json.ts` or `foo.module.d.css.ts` back to `foo.json` or `foo.module.css`, else `''`. */
1029
+ export function tryGetRealFileNameForNonJSDeclarationFileName(fileName) {
1030
+ const baseName = getBaseFileName(fileName);
1031
+ if (!fileName.endsWith('.ts') || !baseName.includes('.d.') || baseName.endsWith('.d.ts'))
1032
+ return '';
1033
+ const noExtension = removeExtension(fileName, '.ts');
1034
+ const extension = noExtension.slice(noExtension.lastIndexOf('.'));
1035
+ return noExtension.slice(0, noExtension.indexOf('.d.')) + extension;
1036
+ }
1037
+ /** `fileName`, a path to a module, with the ending the first of `allowedEndings` gives it. */
1038
+ export function processEnding(fileName, allowedEndings, options, host) {
1039
+ if (fileExtensionIsOneOf(fileName, ['.json', '.mjs', '.cjs']))
1040
+ return fileName;
1041
+ const noExtension = removeFileExtension(fileName);
1042
+ if (fileName === noExtension)
1043
+ return fileName;
1044
+ const jsPriority = allowedEndings.indexOf(2 /* ModuleSpecifierEnding.JsExtension */);
1045
+ const tsPriority = allowedEndings.indexOf(3 /* ModuleSpecifierEnding.TsExtension */);
1046
+ if (fileExtensionIsOneOf(fileName, ['.mts', '.cts']) && tsPriority !== -1 && tsPriority < jsPriority)
1047
+ return fileName;
1048
+ if (fileExtensionIsOneOf(fileName, ['.d.mts', '.d.cts'])) {
1049
+ const inputExtension = getDeclarationFileExtension(fileName);
1050
+ return removeExtension(fileName, inputExtension) + getJSExtensionForDeclarationFileExtension(inputExtension);
1051
+ }
1052
+ if (fileExtensionIsOneOf(fileName, ['.mts', '.cts']))
1053
+ return noExtension + getJSExtensionForFile(fileName, options);
1054
+ if (!fileName.endsWith('.d.ts') && fileName.endsWith('.ts') && fileName.includes('.d.')) {
1055
+ const real = tryGetRealFileNameForNonJSDeclarationFileName(fileName);
1056
+ if (real !== '')
1057
+ return real;
1058
+ }
1059
+ switch (allowedEndings[0]) {
1060
+ case 0 /* ModuleSpecifierEnding.Minimal */: {
1061
+ const withoutIndex = noExtension.endsWith('/index')
1062
+ ? noExtension.slice(0, noExtension.length - '/index'.length)
1063
+ : noExtension;
1064
+ // A file named like the directory would be imported instead.
1065
+ if (host !== undefined && withoutIndex !== noExtension && tryGetAnyFileFromPath(host, withoutIndex))
1066
+ return noExtension;
1067
+ return withoutIndex;
1068
+ }
1069
+ case 1 /* ModuleSpecifierEnding.Index */:
1070
+ return noExtension;
1071
+ case 2 /* ModuleSpecifierEnding.JsExtension */:
1072
+ return noExtension + getJSExtensionForFile(fileName, options);
1073
+ case 3 /* ModuleSpecifierEnding.TsExtension */: {
1074
+ // Whether the import is type-only isn't known, so a declaration file gets no extension or `.js`.
1075
+ if (isDeclarationFileName(fileName)) {
1076
+ let extensionlessPriority = -1;
1077
+ for (let i = 0; i < allowedEndings.length; i++) {
1078
+ if (allowedEndings[i] === 0 /* ModuleSpecifierEnding.Minimal */ ||
1079
+ allowedEndings[i] === 1 /* ModuleSpecifierEnding.Index */) {
1080
+ extensionlessPriority = i;
1081
+ break;
1082
+ }
1083
+ }
1084
+ if (extensionlessPriority !== -1 && extensionlessPriority < jsPriority)
1085
+ return noExtension;
1086
+ return noExtension + getJSExtensionForFile(fileName, options);
1087
+ }
1088
+ return fileName;
1089
+ }
1090
+ }
1091
+ return fileName;
1092
+ }
1093
+ /** Whether a file `path` with a JavaScript, TypeScript or declaration extension exists. */
1094
+ function tryGetAnyFileFromPath(host, path) {
1095
+ const extensions = ['.ts', '.tsx', '.d.ts', '.js', '.jsx', '.cts', '.d.cts', '.cjs', '.mts', '.d.mts', '.mjs'];
1096
+ const cwd = host.getCurrentDirectory();
1097
+ for (const extension of extensions)
1098
+ if (host.fileExists(getNormalizedAbsolutePath(path + extension, cwd)))
1099
+ return true;
1100
+ return false;
1101
+ }