tsc-ts 0.0.9 → 0.1.0

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 (373) hide show
  1. package/README.md +2 -2
  2. package/bin/tsc-ts.js +70 -1
  3. package/dist/api/compiler/ast-utilities.d.ts +19 -1
  4. package/dist/api/compiler/ast-utilities.js +180 -95
  5. package/dist/api/compiler/ast.d.ts +22 -15
  6. package/dist/api/compiler/ast.js +1026 -995
  7. package/dist/api/compiler/astnav.js +15 -15
  8. package/dist/api/compiler/binder-utilities.js +186 -186
  9. package/dist/api/compiler/binder.js +290 -263
  10. package/dist/api/compiler/character-codes.js +2 -2
  11. package/dist/api/compiler/checker-calls.js +178 -124
  12. package/dist/api/compiler/checker-classes.d.ts +14 -3
  13. package/dist/api/compiler/checker-classes.js +134 -90
  14. package/dist/api/compiler/checker-contextual.js +64 -61
  15. package/dist/api/compiler/checker-declaration-order.js +79 -79
  16. package/dist/api/compiler/checker-declarations.d.ts +1 -0
  17. package/dist/api/compiler/checker-declarations.js +160 -136
  18. package/dist/api/compiler/checker-declared-types.js +67 -65
  19. package/dist/api/compiler/checker-decorators.js +77 -77
  20. package/dist/api/compiler/checker-deprecation.d.ts +8 -3
  21. package/dist/api/compiler/checker-deprecation.js +76 -55
  22. package/dist/api/compiler/checker-destructuring.js +47 -45
  23. package/dist/api/compiler/checker-elaboration.js +24 -24
  24. package/dist/api/compiler/checker-emit-helpers.js +4 -4
  25. package/dist/api/compiler/checker-emit-resolver.d.ts +4 -2
  26. package/dist/api/compiler/checker-emit-resolver.js +25 -13
  27. package/dist/api/compiler/checker-evaluator.js +9 -9
  28. package/dist/api/compiler/checker-expressions.js +244 -211
  29. package/dist/api/compiler/checker-functions.js +113 -107
  30. package/dist/api/compiler/checker-generated-code.d.ts +0 -11
  31. package/dist/api/compiler/checker-generated-code.js +28 -52
  32. package/dist/api/compiler/checker-grammar.d.ts +1 -0
  33. package/dist/api/compiler/checker-grammar.js +472 -440
  34. package/dist/api/compiler/checker-heritage.js +91 -93
  35. package/dist/api/compiler/checker-inference.d.ts +77 -5
  36. package/dist/api/compiler/checker-inference.js +487 -107
  37. package/dist/api/compiler/checker-iteration.d.ts +0 -10
  38. package/dist/api/compiler/checker-iteration.js +35 -52
  39. package/dist/api/compiler/checker-javascript.js +14 -14
  40. package/dist/api/compiler/checker-jsdoc.d.ts +8 -10
  41. package/dist/api/compiler/checker-jsdoc.js +67 -58
  42. package/dist/api/compiler/checker-jsx.js +105 -88
  43. package/dist/api/compiler/checker-members.d.ts +9 -2
  44. package/dist/api/compiler/checker-members.js +212 -75
  45. package/dist/api/compiler/checker-modules.d.ts +15 -6
  46. package/dist/api/compiler/checker-modules.js +469 -309
  47. package/dist/api/compiler/checker-narrowing.js +273 -189
  48. package/dist/api/compiler/checker-object-literals.js +25 -22
  49. package/dist/api/compiler/checker-operators.js +126 -118
  50. package/dist/api/compiler/checker-overloads.js +27 -27
  51. package/dist/api/compiler/checker-property-access.js +59 -55
  52. package/dist/api/compiler/checker-services.d.ts +1 -0
  53. package/dist/api/compiler/checker-services.js +222 -210
  54. package/dist/api/compiler/checker-signatures.js +65 -49
  55. package/dist/api/compiler/checker-source-file.d.ts +5 -0
  56. package/dist/api/compiler/checker-source-file.js +154 -130
  57. package/dist/api/compiler/checker-statements.js +33 -32
  58. package/dist/api/compiler/checker-super.js +50 -50
  59. package/dist/api/compiler/checker-symbol-types.js +109 -93
  60. package/dist/api/compiler/checker-symbols.d.ts +13 -1
  61. package/dist/api/compiler/checker-symbols.js +264 -149
  62. package/dist/api/compiler/checker-type-factory.d.ts +5 -0
  63. package/dist/api/compiler/checker-type-factory.js +145 -36
  64. package/dist/api/compiler/checker-type-nodes.d.ts +1 -0
  65. package/dist/api/compiler/checker-type-nodes.js +179 -141
  66. package/dist/api/compiler/checker-type-operators.d.ts +2 -0
  67. package/dist/api/compiler/checker-type-operators.js +110 -63
  68. package/dist/api/compiler/checker-types.d.ts +80 -3
  69. package/dist/api/compiler/checker-types.js +121 -2
  70. package/dist/api/compiler/checker-unused.js +114 -118
  71. package/dist/api/compiler/checker-utilities.js +11 -11
  72. package/dist/api/compiler/checker.d.ts +104 -31
  73. package/dist/api/compiler/checker.js +181 -33
  74. package/dist/api/compiler/command-line.d.ts +1 -3
  75. package/dist/api/compiler/command-line.js +47 -44
  76. package/dist/api/compiler/compile-program.d.ts +42 -3
  77. package/dist/api/compiler/compile-program.js +139 -27
  78. package/dist/api/compiler/diagnostic-messages.d.ts +1849 -1774
  79. package/dist/api/compiler/diagnostic-messages.js +128 -122
  80. package/dist/api/compiler/diagnostics.d.ts +22 -0
  81. package/dist/api/compiler/diagnostics.js +93 -11
  82. package/dist/api/compiler/emitter.d.ts +7 -1
  83. package/dist/api/compiler/emitter.js +53 -11
  84. package/dist/api/compiler/file-include.d.ts +2 -1
  85. package/dist/api/compiler/file-include.js +11 -7
  86. package/dist/api/compiler/file-loader.d.ts +21 -1
  87. package/dist/api/compiler/file-loader.js +201 -48
  88. package/dist/api/compiler/instantiation.d.ts +7 -0
  89. package/dist/api/compiler/instantiation.js +101 -49
  90. package/dist/api/compiler/jsdoc.js +23 -23
  91. package/dist/api/compiler/link-tables.d.ts +48 -18
  92. package/dist/api/compiler/link-tables.js +80 -37
  93. package/dist/api/compiler/locales/cs-CZ.d.ts +1 -1
  94. package/dist/api/compiler/locales/cs-CZ.js +1 -1
  95. package/dist/api/compiler/locales/de-DE.d.ts +1 -1
  96. package/dist/api/compiler/locales/de-DE.js +1 -1
  97. package/dist/api/compiler/locales/es-ES.d.ts +1 -1
  98. package/dist/api/compiler/locales/es-ES.js +1 -1
  99. package/dist/api/compiler/locales/fr-FR.d.ts +1 -1
  100. package/dist/api/compiler/locales/fr-FR.js +1 -1
  101. package/dist/api/compiler/locales/it-IT.d.ts +1 -1
  102. package/dist/api/compiler/locales/it-IT.js +1 -1
  103. package/dist/api/compiler/locales/ja-JP.d.ts +1 -1
  104. package/dist/api/compiler/locales/ja-JP.js +1 -1
  105. package/dist/api/compiler/locales/ko-KR.d.ts +1 -1
  106. package/dist/api/compiler/locales/ko-KR.js +1 -1
  107. package/dist/api/compiler/locales/pl-PL.d.ts +1 -1
  108. package/dist/api/compiler/locales/pl-PL.js +1 -1
  109. package/dist/api/compiler/locales/pt-BR.d.ts +1 -1
  110. package/dist/api/compiler/locales/pt-BR.js +1 -1
  111. package/dist/api/compiler/locales/ru-RU.d.ts +1 -1
  112. package/dist/api/compiler/locales/ru-RU.js +1 -1
  113. package/dist/api/compiler/locales/tr-TR.d.ts +1 -1
  114. package/dist/api/compiler/locales/tr-TR.js +1 -1
  115. package/dist/api/compiler/locales/zh-CN.d.ts +1 -1
  116. package/dist/api/compiler/locales/zh-CN.js +1 -1
  117. package/dist/api/compiler/locales/zh-TW.d.ts +1 -1
  118. package/dist/api/compiler/locales/zh-TW.js +1 -1
  119. package/dist/api/compiler/module-resolution-types.js +6 -6
  120. package/dist/api/compiler/module-resolution.d.ts +10 -1
  121. package/dist/api/compiler/module-resolution.js +115 -84
  122. package/dist/api/compiler/module-specifiers.d.ts +15 -0
  123. package/dist/api/compiler/module-specifiers.js +24 -18
  124. package/dist/api/compiler/name-resolver.js +74 -65
  125. package/dist/api/compiler/node-builder-names.d.ts +11 -3
  126. package/dist/api/compiler/node-builder-names.js +210 -90
  127. package/dist/api/compiler/node-builder-pseudo.js +29 -31
  128. package/dist/api/compiler/node-builder-reuse.js +23 -22
  129. package/dist/api/compiler/node-builder.d.ts +18 -1
  130. package/dist/api/compiler/node-builder.js +191 -102
  131. package/dist/api/compiler/option-declarations.d.ts +2 -6
  132. package/dist/api/compiler/option-declarations.js +315 -375
  133. package/dist/api/compiler/options.d.ts +15 -33
  134. package/dist/api/compiler/options.js +21 -54
  135. package/dist/api/compiler/output-paths.d.ts +4 -1
  136. package/dist/api/compiler/output-paths.js +6 -11
  137. package/dist/api/compiler/package-json.d.ts +3 -3
  138. package/dist/api/compiler/package-json.js +11 -10
  139. package/dist/api/compiler/parallel-parse.d.ts +3 -2
  140. package/dist/api/compiler/parallel-parse.js +17 -5
  141. package/dist/api/compiler/parser.d.ts +40 -19
  142. package/dist/api/compiler/parser.js +308 -216
  143. package/dist/api/compiler/path.d.ts +9 -0
  144. package/dist/api/compiler/path.js +20 -3
  145. package/dist/api/compiler/printer/emit-context.d.ts +5 -1
  146. package/dist/api/compiler/printer/emit-context.js +20 -1
  147. package/dist/api/compiler/printer/factory-base.d.ts +2 -2
  148. package/dist/api/compiler/printer/factory-base.js +7 -3
  149. package/dist/api/compiler/printer/factory.js +3 -1
  150. package/dist/api/compiler/printer/helpers.js +10 -1
  151. package/dist/api/compiler/printer/name-generator.d.ts +1 -1
  152. package/dist/api/compiler/printer/name-generator.js +35 -16
  153. package/dist/api/compiler/printer/printer.d.ts +49 -2
  154. package/dist/api/compiler/printer/printer.js +539 -293
  155. package/dist/api/compiler/printer/utilities.js +149 -147
  156. package/dist/api/compiler/program-checker.d.ts +12 -2
  157. package/dist/api/compiler/program-checker.js +88 -34
  158. package/dist/api/compiler/program-utilities.d.ts +3 -1
  159. package/dist/api/compiler/program-utilities.js +28 -15
  160. package/dist/api/compiler/program.d.ts +4 -6
  161. package/dist/api/compiler/program.js +74 -87
  162. package/dist/api/compiler/pseudo-bigint.d.ts +2 -0
  163. package/dist/api/compiler/pseudo-bigint.js +18 -0
  164. package/dist/api/compiler/regexp-checker.d.ts +1 -1
  165. package/dist/api/compiler/regexp-checker.js +93 -76
  166. package/dist/api/compiler/relations.d.ts +27 -4
  167. package/dist/api/compiler/relations.js +347 -180
  168. package/dist/api/compiler/reparser.js +60 -56
  169. package/dist/api/compiler/scanner.d.ts +19 -2
  170. package/dist/api/compiler/scanner.js +123 -108
  171. package/dist/api/compiler/shared-results.d.ts +463 -0
  172. package/dist/api/compiler/shared-results.js +2128 -0
  173. package/dist/api/compiler/sourcemap.js +2 -2
  174. package/dist/api/compiler/symbol-accessibility.js +87 -74
  175. package/dist/api/compiler/symbol.d.ts +23 -14
  176. package/dist/api/compiler/symbol.js +23 -11
  177. package/dist/api/compiler/syntax-kind.d.ts +198 -197
  178. package/dist/api/compiler/transformers/alias-references.js +247 -139
  179. package/dist/api/compiler/transformers/async-utilities.js +25 -25
  180. package/dist/api/compiler/transformers/async.d.ts +0 -1
  181. package/dist/api/compiler/transformers/async.js +64 -77
  182. package/dist/api/compiler/transformers/class-fields.d.ts +1 -0
  183. package/dist/api/compiler/transformers/class-fields.js +81 -78
  184. package/dist/api/compiler/transformers/commonjs-module.js +18 -15
  185. package/dist/api/compiler/transformers/const-enum-inliner.js +1 -1
  186. package/dist/api/compiler/transformers/declarations-diagnostics.js +247 -244
  187. package/dist/api/compiler/transformers/declarations-pseudo.js +100 -100
  188. package/dist/api/compiler/transformers/declarations-resolver.d.ts +0 -3
  189. package/dist/api/compiler/transformers/declarations-syntactic.d.ts +1 -2
  190. package/dist/api/compiler/transformers/declarations-syntactic.js +134 -156
  191. package/dist/api/compiler/transformers/declarations-tracker.js +18 -18
  192. package/dist/api/compiler/transformers/declarations.d.ts +4 -1
  193. package/dist/api/compiler/transformers/declarations.js +305 -238
  194. package/dist/api/compiler/transformers/decorator-metadata.d.ts +1 -1
  195. package/dist/api/compiler/transformers/decorator-metadata.js +53 -45
  196. package/dist/api/compiler/transformers/decorator-utilities.js +24 -24
  197. package/dist/api/compiler/transformers/destructuring.js +19 -18
  198. package/dist/api/compiler/transformers/emit-resolver.js +1 -1
  199. package/dist/api/compiler/transformers/es-decorators.js +55 -55
  200. package/dist/api/compiler/transformers/external-module-info.js +3 -3
  201. package/dist/api/compiler/transformers/for-await.js +25 -25
  202. package/dist/api/compiler/transformers/import-elision.js +14 -14
  203. package/dist/api/compiler/transformers/jsx.js +12 -12
  204. package/dist/api/compiler/transformers/legacy-decorators.js +17 -17
  205. package/dist/api/compiler/transformers/module.js +8 -8
  206. package/dist/api/compiler/transformers/named-evaluation.js +4 -4
  207. package/dist/api/compiler/transformers/object-rest-spread.js +20 -20
  208. package/dist/api/compiler/transformers/optional-chain.js +10 -10
  209. package/dist/api/compiler/transformers/reference-resolver.d.ts +12 -1
  210. package/dist/api/compiler/transformers/reference-resolver.js +131 -69
  211. package/dist/api/compiler/transformers/runtime-syntax.js +35 -31
  212. package/dist/api/compiler/transformers/subtree-facts.js +47 -47
  213. package/dist/api/compiler/transformers/syntax-facts.js +56 -58
  214. package/dist/api/compiler/transformers/type-eraser.js +73 -66
  215. package/dist/api/compiler/transformers/type-serialization.js +24 -24
  216. package/dist/api/compiler/transformers/using.js +12 -12
  217. package/dist/api/compiler/transformers/utilities.js +77 -77
  218. package/dist/api/compiler/transformers/visitor-base.js +172 -172
  219. package/dist/api/compiler/transformers/visitor-hooks.js +6 -2
  220. package/dist/api/compiler/tsconfig.d.ts +10 -2
  221. package/dist/api/compiler/tsconfig.js +136 -48
  222. package/dist/api/compiler/type-printer.js +40 -3
  223. package/dist/api/compiler/types.d.ts +2 -1
  224. package/dist/api/library/ast.generated.d.ts +42 -39
  225. package/dist/api/library/ast.generated.js +1 -1
  226. package/dist/api/library/compiler-options.generated.d.ts +111 -100
  227. package/dist/api/library/compiler-options.generated.js +1 -1
  228. package/dist/api/library/disk.js +12 -1
  229. package/dist/api/library/enums.generated.d.ts +206 -206
  230. package/dist/api/library/enums.generated.js +206 -206
  231. package/dist/api/library/nodes.js +26 -26
  232. package/package.json +9 -9
  233. package/src/compiler/ast-utilities.ts +99 -7
  234. package/src/compiler/ast.ts +58 -26
  235. package/src/compiler/binder.ts +39 -4
  236. package/src/compiler/character-codes.ts +2 -2
  237. package/src/compiler/checker-calls.ts +79 -9
  238. package/src/compiler/checker-classes.ts +78 -24
  239. package/src/compiler/checker-contextual.ts +6 -1
  240. package/src/compiler/checker-declarations.ts +31 -4
  241. package/src/compiler/checker-declared-types.ts +8 -5
  242. package/src/compiler/checker-decorators.ts +1 -1
  243. package/src/compiler/checker-deprecation.ts +29 -8
  244. package/src/compiler/checker-destructuring.ts +10 -3
  245. package/src/compiler/checker-emit-helpers.ts +1 -0
  246. package/src/compiler/checker-emit-resolver.ts +16 -6
  247. package/src/compiler/checker-expressions.ts +79 -46
  248. package/src/compiler/checker-functions.ts +21 -6
  249. package/src/compiler/checker-generated-code.ts +2 -22
  250. package/src/compiler/checker-grammar.ts +136 -62
  251. package/src/compiler/checker-heritage.ts +22 -21
  252. package/src/compiler/checker-inference.ts +514 -82
  253. package/src/compiler/checker-iteration.ts +18 -31
  254. package/src/compiler/checker-javascript.ts +1 -1
  255. package/src/compiler/checker-jsdoc.ts +50 -27
  256. package/src/compiler/checker-jsx.ts +26 -4
  257. package/src/compiler/checker-members.ts +200 -56
  258. package/src/compiler/checker-modules.ts +332 -65
  259. package/src/compiler/checker-narrowing.ts +98 -19
  260. package/src/compiler/checker-object-literals.ts +3 -0
  261. package/src/compiler/checker-operators.ts +11 -4
  262. package/src/compiler/checker-property-access.ts +7 -2
  263. package/src/compiler/checker-services.ts +39 -12
  264. package/src/compiler/checker-signatures.ts +15 -1
  265. package/src/compiler/checker-source-file.ts +39 -13
  266. package/src/compiler/checker-statements.ts +3 -2
  267. package/src/compiler/checker-symbol-types.ts +29 -6
  268. package/src/compiler/checker-symbols.ts +158 -15
  269. package/src/compiler/checker-type-factory.ts +124 -23
  270. package/src/compiler/checker-type-nodes.ts +46 -3
  271. package/src/compiler/checker-type-operators.ts +83 -26
  272. package/src/compiler/checker-types.ts +147 -4
  273. package/src/compiler/checker-unused.ts +9 -14
  274. package/src/compiler/checker.ts +203 -39
  275. package/src/compiler/command-line.ts +28 -28
  276. package/src/compiler/compile-program.ts +167 -27
  277. package/src/compiler/decoder.ts +13 -4
  278. package/src/compiler/diagnostic-messages.ts +1973 -1892
  279. package/src/compiler/diagnostics.ts +84 -3
  280. package/src/compiler/emitter.ts +57 -8
  281. package/src/compiler/encoder.ts +23 -8
  282. package/src/compiler/file-include.ts +9 -3
  283. package/src/compiler/file-loader.ts +197 -38
  284. package/src/compiler/help.ts +10 -14
  285. package/src/compiler/incremental.ts +165 -30
  286. package/src/compiler/init.ts +2 -7
  287. package/src/compiler/instantiation.ts +77 -22
  288. package/src/compiler/jsdoc.ts +3 -1
  289. package/src/compiler/link-tables.ts +82 -37
  290. package/src/compiler/locales/cs-CZ.ts +1 -1
  291. package/src/compiler/locales/de-DE.ts +1 -1
  292. package/src/compiler/locales/es-ES.ts +1 -1
  293. package/src/compiler/locales/fr-FR.ts +1 -1
  294. package/src/compiler/locales/it-IT.ts +1 -1
  295. package/src/compiler/locales/ja-JP.ts +1 -1
  296. package/src/compiler/locales/ko-KR.ts +1 -1
  297. package/src/compiler/locales/pl-PL.ts +1 -1
  298. package/src/compiler/locales/pt-BR.ts +1 -1
  299. package/src/compiler/locales/ru-RU.ts +1 -1
  300. package/src/compiler/locales/tr-TR.ts +1 -1
  301. package/src/compiler/locales/zh-CN.ts +1 -1
  302. package/src/compiler/locales/zh-TW.ts +1 -1
  303. package/src/compiler/module-resolution.ts +44 -8
  304. package/src/compiler/module-specifiers.ts +62 -20
  305. package/src/compiler/name-resolver.ts +9 -1
  306. package/src/compiler/node-builder-names.ts +236 -54
  307. package/src/compiler/node-builder-pseudo.ts +4 -7
  308. package/src/compiler/node-builder-reuse.ts +5 -4
  309. package/src/compiler/node-builder.ts +130 -31
  310. package/src/compiler/option-declarations.ts +33 -103
  311. package/src/compiler/options.ts +23 -62
  312. package/src/compiler/output-paths.ts +5 -18
  313. package/src/compiler/package-entrypoints.ts +345 -0
  314. package/src/compiler/package-json.ts +4 -4
  315. package/src/compiler/parallel-check.ts +326 -52
  316. package/src/compiler/parallel-emit.ts +320 -0
  317. package/src/compiler/parallel-parse.ts +16 -5
  318. package/src/compiler/parse-thread.ts +3 -0
  319. package/src/compiler/parser.ts +156 -39
  320. package/src/compiler/path.ts +22 -2
  321. package/src/compiler/printer/emit-context.ts +21 -0
  322. package/src/compiler/printer/factory-base.ts +10 -3
  323. package/src/compiler/printer/factory.ts +4 -1
  324. package/src/compiler/printer/helpers.ts +10 -1
  325. package/src/compiler/printer/name-generator.ts +24 -2
  326. package/src/compiler/printer/printer.ts +266 -30
  327. package/src/compiler/printer/utilities.ts +8 -2
  328. package/src/compiler/program-checker.ts +57 -5
  329. package/src/compiler/program-utilities.ts +23 -10
  330. package/src/compiler/program.ts +18 -26
  331. package/src/compiler/pseudo-bigint.ts +17 -0
  332. package/src/compiler/regexp-checker.ts +63 -30
  333. package/src/compiler/relations.ts +240 -77
  334. package/src/compiler/reparser.ts +7 -2
  335. package/src/compiler/scanner.ts +109 -79
  336. package/src/compiler/shared-results.ts +2414 -0
  337. package/src/compiler/show-config.ts +18 -1
  338. package/src/compiler/sourcemap.ts +2 -2
  339. package/src/compiler/symbol-accessibility.ts +26 -3
  340. package/src/compiler/symbol.ts +46 -24
  341. package/src/compiler/syntax-kind.ts +188 -187
  342. package/src/compiler/thread-entry.ts +64 -4
  343. package/src/compiler/transformers/alias-references.ts +123 -4
  344. package/src/compiler/transformers/async.ts +2 -17
  345. package/src/compiler/transformers/class-fields.ts +13 -12
  346. package/src/compiler/transformers/commonjs-module.ts +11 -7
  347. package/src/compiler/transformers/declarations-diagnostics.ts +5 -3
  348. package/src/compiler/transformers/declarations-pseudo.ts +2 -4
  349. package/src/compiler/transformers/declarations-resolver.ts +0 -3
  350. package/src/compiler/transformers/declarations-syntactic.ts +1 -21
  351. package/src/compiler/transformers/declarations.ts +134 -48
  352. package/src/compiler/transformers/decorator-metadata.ts +9 -1
  353. package/src/compiler/transformers/destructuring.ts +4 -3
  354. package/src/compiler/transformers/external-module-info.ts +1 -1
  355. package/src/compiler/transformers/jsx.ts +2 -1
  356. package/src/compiler/transformers/reference-resolver.ts +83 -19
  357. package/src/compiler/transformers/runtime-syntax.ts +6 -1
  358. package/src/compiler/transformers/syntax-facts.ts +2 -7
  359. package/src/compiler/transformers/type-eraser.ts +10 -1
  360. package/src/compiler/transformers/type-serialization.ts +3 -2
  361. package/src/compiler/transformers/visitor-base.ts +2 -1
  362. package/src/compiler/transformers/visitor-hooks.ts +9 -4
  363. package/src/compiler/tsc-build.ts +66 -9
  364. package/src/compiler/tsc-cli.ts +7 -0
  365. package/src/compiler/tsc-compile.ts +284 -4
  366. package/src/compiler/tsc-watch.ts +74 -45
  367. package/src/compiler/tsconfig.ts +176 -19
  368. package/src/compiler/type-printer.ts +36 -2
  369. package/src/compiler/types.ts +2 -1
  370. package/src/library/ast.generated.ts +57 -41
  371. package/src/library/compiler-options.generated.ts +117 -103
  372. package/src/library/disk.ts +10 -1
  373. package/src/library/enums.generated.ts +196 -196
@@ -19,10 +19,11 @@ export enum ScriptTarget {
19
19
  ES2023 = 10,
20
20
  ES2024 = 11,
21
21
  ES2025 = 12,
22
+ ES2026 = 13,
22
23
  ESNext = 99,
23
24
  JSON = 100,
24
25
  Latest = ESNext,
25
- LatestStandard = ES2025,
26
+ LatestStandard = ES2026,
26
27
  }
27
28
 
28
29
  export enum ModuleKind {
@@ -48,6 +49,16 @@ export enum ModuleKind {
48
49
  Preserve = 200,
49
50
  }
50
51
 
52
+ /** Whether `import defer` and `import.defer()` are allowed under a module kind. */
53
+ export function supportsDeferredImports(moduleKind: ModuleKind): boolean {
54
+ return moduleKind === ModuleKind.ESNext || moduleKind === ModuleKind.Preserve;
55
+ }
56
+
57
+ /** Whether `import source` and `import.source()` are allowed under a module kind. */
58
+ export function supportsSourcePhaseImports(moduleKind: ModuleKind): boolean {
59
+ return moduleKind === ModuleKind.ESNext || moduleKind === ModuleKind.NodeNext || moduleKind === ModuleKind.Preserve;
60
+ }
61
+
51
62
  export enum ModuleResolutionKind {
52
63
  /** @deprecated Accepted for parsing and validation only. */
53
64
  Classic = 1,
@@ -66,8 +77,8 @@ export enum ModuleDetectionKind {
66
77
 
67
78
  export enum JsxEmit {
68
79
  Preserve = 1,
69
- ReactNative = 2,
70
- React = 3,
80
+ React = 2,
81
+ ReactNative = 3,
71
82
  ReactJSX = 4,
72
83
  ReactJSXDev = 5,
73
84
  }
@@ -77,29 +88,6 @@ export enum NewLineKind {
77
88
  LF = 2,
78
89
  }
79
90
 
80
- export enum WatchFileKind {
81
- FixedPollingInterval = 1,
82
- PriorityPollingInterval = 2,
83
- DynamicPriorityPolling = 3,
84
- FixedChunkSizePolling = 4,
85
- UseFsEvents = 5,
86
- UseFsEventsOnParentDirectory = 6,
87
- }
88
-
89
- export enum WatchDirectoryKind {
90
- UseFsEvents = 1,
91
- FixedPollingInterval = 2,
92
- DynamicPriorityPolling = 3,
93
- FixedChunkSizePolling = 4,
94
- }
95
-
96
- export enum PollingKind {
97
- FixedInterval = 1,
98
- PriorityInterval = 2,
99
- DynamicPriority = 3,
100
- FixedChunkSize = 4,
101
- }
102
-
103
91
  /**
104
92
  * Compiler options, in tsgo's field order (which `--showConfig` follows).
105
93
  *
@@ -174,6 +162,8 @@ export interface CompilerOptions {
174
162
  outDir?: string;
175
163
  /** Substitutions are `undefined` where the config gave a non-array. */
176
164
  paths?: Map<string, string[] | undefined>;
165
+ /** Read only for `--showConfig`; plugins are not loaded. */
166
+ plugins?: PluginImport[];
177
167
  preserveConstEnums?: boolean;
178
168
  preserveSymlinks?: boolean;
179
169
  project?: string;
@@ -239,16 +229,6 @@ export interface CompilerOptions {
239
229
  checkers?: number;
240
230
  }
241
231
 
242
- export interface WatchOptions {
243
- watchInterval?: number;
244
- watchFile?: WatchFileKind;
245
- watchDirectory?: WatchDirectoryKind;
246
- fallbackPolling?: PollingKind;
247
- synchronousWatchDirectory?: boolean;
248
- excludeDirectories?: string[];
249
- excludeFiles?: string[];
250
- }
251
-
252
232
  export interface BuildOptions {
253
233
  dry?: boolean;
254
234
  force?: boolean;
@@ -275,6 +255,11 @@ export type OptionValue = boolean | number | string | string[] | null;
275
255
  /** A compiler option value as stored in `CompilerOptions`, except `paths`. */
276
256
  export type CompilerOptionValue = boolean | number | string | string[];
277
257
 
258
+ /** An entry of `plugins`: its `name`, or `''` when it has no string name. */
259
+ export class PluginImport {
260
+ constructor(readonly name: string) {}
261
+ }
262
+
278
263
  /** Compiler option names in field order. */
279
264
  export const compilerOptionNames: readonly string[] = [
280
265
  'allowJs',
@@ -344,6 +329,7 @@ export const compilerOptionNames: readonly string[] = [
344
329
  'noUncheckedSideEffectImports',
345
330
  'outDir',
346
331
  'paths',
332
+ 'plugins',
347
333
  'preserveConstEnums',
348
334
  'preserveSymlinks',
349
335
  'project',
@@ -991,6 +977,7 @@ export function mergeCompilerOptions(
991
977
  );
992
978
  target.outDir = merged(source.outDir, target.outDir, nulls, 'outDir');
993
979
  target.paths = merged(source.paths, target.paths, nulls, 'paths');
980
+ target.plugins = merged(source.plugins, target.plugins, nulls, 'plugins');
994
981
  target.preserveConstEnums = merged(source.preserveConstEnums, target.preserveConstEnums, nulls, 'preserveConstEnums');
995
982
  target.preserveSymlinks = merged(source.preserveSymlinks, target.preserveSymlinks, nulls, 'preserveSymlinks');
996
983
  target.project = merged(source.project, target.project, nulls, 'project');
@@ -1411,32 +1398,6 @@ export function getCompilerOption(options: CompilerOptions, name: string): Compi
1411
1398
  return undefined;
1412
1399
  }
1413
1400
 
1414
- export function setWatchOption(options: WatchOptions, name: string, value: OptionValue): void {
1415
- switch (name) {
1416
- case 'watchInterval':
1417
- options.watchInterval = numberValue(value);
1418
- break;
1419
- case 'watchFile':
1420
- if (value !== null) options.watchFile = numberValue(value);
1421
- break;
1422
- case 'watchDirectory':
1423
- if (value !== null) options.watchDirectory = numberValue(value);
1424
- break;
1425
- case 'fallbackPolling':
1426
- if (value !== null) options.fallbackPolling = numberValue(value);
1427
- break;
1428
- case 'synchronousWatchDirectory':
1429
- options.synchronousWatchDirectory = value === null ? undefined : value === true;
1430
- break;
1431
- case 'excludeDirectories':
1432
- options.excludeDirectories = stringList(value);
1433
- break;
1434
- case 'excludeFiles':
1435
- options.excludeFiles = stringList(value);
1436
- break;
1437
- }
1438
- }
1439
-
1440
1401
  export function setBuildOption(options: BuildOptions, name: string, value: OptionValue): void {
1441
1402
  if (value === null) return;
1442
1403
  switch (name) {
@@ -6,7 +6,6 @@ import {
6
6
  changeExtension,
7
7
  combinePaths,
8
8
  comparePaths,
9
- containsPath,
10
9
  ensureTrailingDirectorySeparator,
11
10
  fileExtensionIs,
12
11
  fileExtensionIsOneOf,
@@ -182,22 +181,10 @@ function getDeclarationEmitOutputFilePath(file: string, options: CompilerOptions
182
181
  return removeFileExtension(path) + getDeclarationEmitExtensionForPath(path);
183
182
  }
184
183
 
185
- function getSourceFilePathInNewDir(
186
- fileName: string,
187
- newDirectory: string,
188
- currentDirectory: string,
189
- commonSourceDirectory: string,
190
- useCaseSensitiveFileNames: boolean,
191
- ): string {
192
- let sourceFilePath = getNormalizedAbsolutePath(fileName, currentDirectory);
193
- const common = ensureTrailingDirectorySeparator(commonSourceDirectory);
194
- if (containsPath(common, sourceFilePath, useCaseSensitiveFileNames, currentDirectory)) {
195
- sourceFilePath = sourceFilePath.slice(common.length);
196
- }
197
- return combinePaths(newDirectory, sourceFilePath);
198
- }
199
-
200
- /** Like `getSourceFilePathInNewDir`, but with a case-folded prefix check. */
184
+ /**
185
+ * `fileName` moved from `commonSourceDirectory` to `newDirectory`. The prefix check is case-folded when file names
186
+ * are case-insensitive; case folding keeps each code point's length, so the prefix is removed by its own length.
187
+ */
201
188
  export function getSourceFilePathInNewDirWorker(
202
189
  fileName: string,
203
190
  newDirectory: string,
@@ -223,7 +210,7 @@ function getOwnEmitOutputFilePath(
223
210
  options.outDir === undefined
224
211
  ? removeFileExtension(fileName)
225
212
  : removeFileExtension(
226
- getSourceFilePathInNewDir(
213
+ getSourceFilePathInNewDirWorker(
227
214
  fileName,
228
215
  options.outDir,
229
216
  host.currentDirectory,
@@ -0,0 +1,345 @@
1
+ // The files a package offers for import and the module specifiers that reach them, as tsgo's
2
+ // GetEntrypointsFromPackageJsonInfo finds them for auto-imports, and the ending a specifier takes in an importing file.
3
+ import type { FileSystem } from './file-system.js';
4
+ import type { Resolver } from './module-resolution.js';
5
+ import {
6
+ getJSExtensionForDeclarationFileExtension,
7
+ ModuleSpecifierEnding,
8
+ tryGetJSExtensionForFile,
9
+ } from './module-specifiers.js';
10
+ import type { CompilerOptions } from './options.js';
11
+ import { isApplicableVersionedTypesKey, type JsonValue, JsonObjectKind, type PackageJsonInfo } from './package-json.js';
12
+ import {
13
+ changeExtension,
14
+ comparePaths,
15
+ fileExtensionIsOneOf,
16
+ getDeclarationFileExtension,
17
+ getPathComponents,
18
+ getRelativePathFromDirectory,
19
+ normalizePath,
20
+ removeExtension,
21
+ removeFileExtension,
22
+ resolvePath,
23
+ } from './path.js';
24
+ import { readDirectory, unlimitedDepth } from './vfs-match.js';
25
+
26
+ /** Whether the file name and extension of an entrypoint's module specifier can change. */
27
+ export const enum EntrypointEnding {
28
+ /** The specifier cannot change without changing what it resolves to. */
29
+ Fixed,
30
+ /** The extension came from a file on disk, so an interchangeable one can be used (`.d.ts` as `.js`). */
31
+ ExtensionChangeable,
32
+ /**
33
+ * The file name and extension came from a file on disk outside an `exports` pattern, so they follow the
34
+ * importing file's resolution rules (an `/index.d.ts` may be dropped).
35
+ */
36
+ Changeable,
37
+ }
38
+
39
+ /** A file a package offers for import, with the module specifier that reaches it. */
40
+ export class ResolvedEntrypoint {
41
+ constructor(
42
+ /** The path the entrypoint was found at when that is a symlink, else `''`. */
43
+ readonly originalFileName: string,
44
+ /** The real path of the file. */
45
+ readonly resolvedFileName: string,
46
+ readonly moduleSpecifier: string,
47
+ readonly ending: EntrypointEnding,
48
+ /** The conditions a resolver needs to reach this entrypoint. */
49
+ readonly includeConditions: ReadonlySet<string> | undefined,
50
+ /** The conditions a resolver must not have to reach this entrypoint. */
51
+ readonly excludeConditions: ReadonlySet<string> | undefined,
52
+ ) {}
53
+
54
+ symlinkOrRealpath(): string {
55
+ return this.originalFileName !== '' ? this.originalFileName : this.resolvedFileName;
56
+ }
57
+ }
58
+
59
+ // TypeScript and declaration files.
60
+ const entrypointExtensions = ['.ts', '.tsx', '.mts', '.cts', '.d.ts', '.d.mts', '.d.cts'];
61
+
62
+ /**
63
+ * The entrypoints of a package: what its `exports` lead to, or else its main file and, with `enableDirectorySearch`,
64
+ * every TypeScript and declaration file in it outside `node_modules`. Undefined for none.
65
+ */
66
+ export function getEntrypointsFromPackageJsonInfo(
67
+ resolver: Resolver,
68
+ fs: FileSystem,
69
+ info: PackageJsonInfo,
70
+ packageName: string,
71
+ enableDirectorySearch: boolean,
72
+ ): ResolvedEntrypoint[] | undefined {
73
+ const exports = info.contents?.exports;
74
+ if (exports !== undefined) return new ExportMapWalker(resolver, fs, info, packageName).walk(exports);
75
+
76
+ const result: ResolvedEntrypoint[] = [];
77
+ const main = resolver.loadPackageMainEntrypoint(info);
78
+ if (main !== '') {
79
+ result.push(createEntrypoint(fs, main, packageName, undefined, undefined, EntrypointEnding.Fixed));
80
+ }
81
+ if (enableDirectorySearch) {
82
+ const directory = info.packageDirectory;
83
+ const files = readDirectory(
84
+ fs,
85
+ directory,
86
+ directory,
87
+ entrypointExtensions,
88
+ ['node_modules'],
89
+ ['**/*'],
90
+ unlimitedDepth,
91
+ );
92
+ for (const file of files) {
93
+ if (main !== '' && comparePaths(file, main, fs.useCaseSensitiveFileNames) === 0) continue;
94
+ const relative = getRelativePathFromDirectory(directory, file, fs.useCaseSensitiveFileNames);
95
+ result.push(
96
+ createEntrypoint(fs, file, packageName + '/' + relative, undefined, undefined, EntrypointEnding.Changeable),
97
+ );
98
+ }
99
+ }
100
+ return result.length > 0 ? result : undefined;
101
+ }
102
+
103
+ function createEntrypoint(
104
+ fs: FileSystem,
105
+ fileName: string,
106
+ moduleSpecifier: string,
107
+ includeConditions: ReadonlySet<string> | undefined,
108
+ excludeConditions: ReadonlySet<string> | undefined,
109
+ ending: EntrypointEnding,
110
+ ): ResolvedEntrypoint {
111
+ const realpath = normalizePath(fs.realpath(fileName));
112
+ return realpath !== fileName
113
+ ? new ResolvedEntrypoint(fileName, realpath, moduleSpecifier, ending, includeConditions, excludeConditions)
114
+ : new ResolvedEntrypoint('', fileName, moduleSpecifier, ending, includeConditions, excludeConditions);
115
+ }
116
+
117
+ // Walks an `exports` value, collecting the entrypoint of each target and the conditions that reach it.
118
+ class ExportMapWalker {
119
+ readonly entrypoints: ResolvedEntrypoint[] = [];
120
+
121
+ constructor(
122
+ private readonly resolver: Resolver,
123
+ private readonly fs: FileSystem,
124
+ private readonly info: PackageJsonInfo,
125
+ private readonly packageName: string,
126
+ ) {}
127
+
128
+ walk(exports: JsonValue): ResolvedEntrypoint[] {
129
+ if (exports.type === 'array') {
130
+ for (const element of exports.items) this.target('.', undefined, undefined, element);
131
+ } else if (exports.type === 'object' && exports.kind === JsonObjectKind.Subpaths) {
132
+ for (const [subpath, target] of exports.entries) this.target(subpath, undefined, undefined, target);
133
+ } else {
134
+ this.target('.', undefined, undefined, exports);
135
+ }
136
+ return this.entrypoints;
137
+ }
138
+
139
+ private target(
140
+ subpath: string,
141
+ includeConditions: Set<string> | undefined,
142
+ excludeConditionsIn: Set<string> | undefined,
143
+ exports: JsonValue,
144
+ ): void {
145
+ let excludeConditions = excludeConditionsIn;
146
+ if (exports.type === 'string' && exports.value.startsWith('./')) {
147
+ const target = exports.value;
148
+ // A target with `.` or `..` after its leading `./` offers nothing, as in tsc; for a pattern this also keeps the
149
+ // directory search inside the package. A literal target into `node_modules` offers nothing either.
150
+ const partsAfterFirst = getPathComponents(target).slice(2);
151
+ if (partsAfterFirst.includes('..') || partsAfterFirst.includes('.')) return;
152
+ if (target.includes('*')) this.patternTarget(subpath, includeConditions, excludeConditions, target);
153
+ else {
154
+ if (partsAfterFirst.includes('node_modules')) return;
155
+ const candidate = resolvePath(this.info.packageDirectory, target);
156
+ const resolved = this.resolver.loadPackageExportTargetEntrypoint(this.info.packageDirectory, candidate, target);
157
+ if (resolved !== '') {
158
+ this.entrypoints.push(
159
+ createEntrypoint(
160
+ this.fs,
161
+ resolved,
162
+ resolvePath(this.packageName, subpath),
163
+ includeConditions,
164
+ excludeConditions,
165
+ target.endsWith('*') ? EntrypointEnding.ExtensionChangeable : EntrypointEnding.Fixed,
166
+ ),
167
+ );
168
+ }
169
+ }
170
+ } else if (exports.type === 'array') {
171
+ for (const element of exports.items) this.target(subpath, includeConditions, excludeConditions, element);
172
+ } else if (exports.type === 'object') {
173
+ const previousConditions: string[] = [];
174
+ for (const [condition, conditionTarget] of exports.entries) {
175
+ if (excludeConditions?.has(condition) === true) continue;
176
+ const alwaysMatches =
177
+ condition === 'default' || condition === 'types' || isApplicableVersionedTypesKey(condition);
178
+ let newIncludeConditions = includeConditions;
179
+ if (!alwaysMatches) {
180
+ // A later condition is reached only without the earlier ones; the exclusions carry over to the
181
+ // conditions after it, as tsgo keeps them.
182
+ newIncludeConditions = includeConditions === undefined ? new Set<string>() : new Set(includeConditions);
183
+ if (excludeConditions !== undefined) excludeConditions = new Set(excludeConditions);
184
+ newIncludeConditions.add(condition);
185
+ for (const previous of previousConditions) {
186
+ excludeConditions ??= new Set();
187
+ excludeConditions.add(previous);
188
+ }
189
+ }
190
+ previousConditions.push(condition);
191
+ this.target(subpath, newIncludeConditions, excludeConditions, conditionTarget);
192
+ if (alwaysMatches) break;
193
+ }
194
+ }
195
+ }
196
+
197
+ // A target with a `*`: each file the pattern matches.
198
+ private patternTarget(
199
+ subpath: string,
200
+ includeConditions: Set<string> | undefined,
201
+ excludeConditions: Set<string> | undefined,
202
+ target: string,
203
+ ): void {
204
+ const star = target.indexOf('*');
205
+ if (star !== target.lastIndexOf('*')) return;
206
+ const directory = this.info.packageDirectory;
207
+ const include = changeFullExtension(target.replace('*', '**/*'), '.*');
208
+ const patternPath = target.slice('./'.length);
209
+ const leading = patternPath.slice(0, patternPath.indexOf('*'));
210
+ const trailing = patternPath.slice(patternPath.indexOf('*') + 1);
211
+ const caseSensitive = this.fs.useCaseSensitiveFileNames;
212
+ const files = readDirectory(this.fs, directory, directory, entrypointExtensions, [], [include], unlimitedDepth);
213
+ for (const file of files) {
214
+ const relative = getRelativePathFromDirectory(directory, file, caseSensitive);
215
+ const matchedStar = getMatchedStarForPatternEntrypoint(relative, leading, trailing, caseSensitive);
216
+ if (matchedStar === undefined) continue;
217
+ let resolvedSubpath = subpath.replace('*', matchedStar);
218
+ if (resolvedSubpath.startsWith('./')) resolvedSubpath = resolvedSubpath.slice('./'.length);
219
+ if (resolvedSubpath === '') continue;
220
+ this.entrypoints.push(
221
+ createEntrypoint(
222
+ this.fs,
223
+ file,
224
+ this.packageName + '/' + resolvedSubpath,
225
+ includeConditions,
226
+ excludeConditions,
227
+ target.endsWith('*') ? EntrypointEnding.ExtensionChangeable : EntrypointEnding.Fixed,
228
+ ),
229
+ );
230
+ }
231
+ }
232
+ }
233
+
234
+ // The text a pattern's `*` matches in a package file, also with the file's JavaScript extension in place of its own.
235
+ function getMatchedStarForPatternEntrypoint(
236
+ file: string,
237
+ leading: string,
238
+ trailing: string,
239
+ caseSensitive: boolean,
240
+ ): string | undefined {
241
+ if (hasPrefixAndSuffixWithoutOverlap(file, leading, trailing, caseSensitive)) {
242
+ return file.slice(leading.length, file.length - trailing.length);
243
+ }
244
+ const jsExtension = tryGetJSExtensionForFile(file, {});
245
+ if (jsExtension !== '') {
246
+ const swapped = changeFullExtension(file, jsExtension);
247
+ if (hasPrefixAndSuffixWithoutOverlap(swapped, leading, trailing, caseSensitive)) {
248
+ return swapped.slice(leading.length, swapped.length - trailing.length);
249
+ }
250
+ }
251
+ return undefined;
252
+ }
253
+
254
+ function hasPrefixAndSuffixWithoutOverlap(
255
+ text: string,
256
+ prefix: string,
257
+ suffix: string,
258
+ caseSensitive: boolean,
259
+ ): boolean {
260
+ if (prefix.length + suffix.length > text.length) return false;
261
+ if (caseSensitive) return text.startsWith(prefix) && text.endsWith(suffix);
262
+ const lower = text.toLowerCase();
263
+ return lower.startsWith(prefix.toLowerCase()) && lower.endsWith(suffix.toLowerCase());
264
+ }
265
+
266
+ /** Replaces the extension, taking a declaration extension from its `.d`. */
267
+ function changeFullExtension(path: string, newExtension: string): string {
268
+ const declarationExtension = getDeclarationFileExtension(path);
269
+ if (declarationExtension === '') return changeExtension(path, newExtension);
270
+ return path.slice(0, path.length - declarationExtension.length) + newExtension;
271
+ }
272
+
273
+ /**
274
+ * The module specifier of an entrypoint as `importingFile` writes it: a fixed specifier as it is, others with the
275
+ * extension or file name the importing file's preferred ending gives them.
276
+ */
277
+ export function processEntrypointEnding(
278
+ entrypoint: ResolvedEntrypoint,
279
+ options: CompilerOptions,
280
+ allowedEndings: readonly ModuleSpecifierEnding[],
281
+ ): string {
282
+ let specifier = entrypoint.moduleSpecifier;
283
+ if (entrypoint.ending === EntrypointEnding.Fixed) return specifier;
284
+ const preferredEnding = allowedEndings[0]!;
285
+
286
+ const dtsExtension = getDeclarationFileExtension(specifier);
287
+ if (dtsExtension !== '') {
288
+ const withJsExtension = (): string =>
289
+ removeExtension(specifier, dtsExtension) + getJSExtensionForDeclarationFileExtension(dtsExtension);
290
+ switch (preferredEnding) {
291
+ case ModuleSpecifierEnding.TsExtension:
292
+ case ModuleSpecifierEnding.JsExtension:
293
+ return withJsExtension();
294
+ case ModuleSpecifierEnding.Minimal:
295
+ case ModuleSpecifierEnding.Index:
296
+ if (entrypoint.ending === EntrypointEnding.Changeable && dtsExtension === '.d.ts') {
297
+ specifier = removeExtension(specifier, dtsExtension);
298
+ if (preferredEnding === ModuleSpecifierEnding.Minimal) specifier = trimSuffix(specifier, '/index');
299
+ return specifier;
300
+ }
301
+ // `.d.mts` and `.d.cts` keep an extension; an extension changeable entrypoint keeps one too.
302
+ return withJsExtension();
303
+ }
304
+ return specifier;
305
+ }
306
+
307
+ if (fileExtensionIsOneOf(specifier, ['.ts', '.tsx', '.mts', '.cts'])) {
308
+ switch (preferredEnding) {
309
+ case ModuleSpecifierEnding.TsExtension:
310
+ return specifier;
311
+ case ModuleSpecifierEnding.JsExtension: {
312
+ const jsExtension = tryGetJSExtensionForFile(specifier, options);
313
+ return jsExtension !== '' ? removeFileExtension(specifier) + jsExtension : specifier;
314
+ }
315
+ case ModuleSpecifierEnding.Minimal:
316
+ case ModuleSpecifierEnding.Index: {
317
+ if (entrypoint.ending === EntrypointEnding.Changeable) {
318
+ specifier = removeFileExtension(specifier);
319
+ if (preferredEnding === ModuleSpecifierEnding.Minimal) specifier = trimSuffix(specifier, '/index');
320
+ return specifier;
321
+ }
322
+ const jsExtension = tryGetJSExtensionForFile(specifier, options);
323
+ return jsExtension !== '' ? removeFileExtension(specifier) + jsExtension : specifier;
324
+ }
325
+ }
326
+ return specifier;
327
+ }
328
+
329
+ if (fileExtensionIsOneOf(specifier, ['.js', '.jsx', '.mjs', '.cjs'])) {
330
+ switch (preferredEnding) {
331
+ case ModuleSpecifierEnding.Minimal:
332
+ case ModuleSpecifierEnding.Index:
333
+ if (entrypoint.ending === EntrypointEnding.Changeable) {
334
+ specifier = removeFileExtension(specifier);
335
+ if (preferredEnding === ModuleSpecifierEnding.Minimal) specifier = trimSuffix(specifier, '/index');
336
+ }
337
+ return specifier;
338
+ }
339
+ }
340
+ return specifier;
341
+ }
342
+
343
+ function trimSuffix(text: string, suffix: string): string {
344
+ return text.endsWith(suffix) ? text.slice(0, text.length - suffix.length) : text;
345
+ }
@@ -8,8 +8,8 @@
8
8
  import { Diagnostics, messageWithArgs, type MessageWithArgs } from './diagnostics.js';
9
9
  import { toPath, type Path } from './path.js';
10
10
 
11
- export const typeScriptVersion = '7.0.2';
12
- export const typeScriptVersionMajorMinor = '7.0';
11
+ export const typeScriptVersion = '7.1.0-beta';
12
+ export const typeScriptVersionMajorMinor = '7.1';
13
13
 
14
14
  //// JSON values
15
15
 
@@ -679,10 +679,10 @@ export class PackageJsonInfoCache {
679
679
 
680
680
  /**
681
681
  * Called before the cache is shared with other threads, which makes it immutable: from then on,
682
- * each thread keeps the lookups it adds in a table of its own.
682
+ * each thread keeps the lookups it adds in a table of its own. A cache already shared is immutable.
683
683
  */
684
684
  prepareForSharing(): void {
685
- this.shared = true;
685
+ if (!this.shared) this.shared = true;
686
686
  }
687
687
 
688
688
  get(packageJsonPath: string): PackageJsonInfo | undefined {