tsc-ts 0.0.4 → 0.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (584) hide show
  1. package/README.md +34 -2
  2. package/dist/api/compiler/ast-utilities.d.ts +82 -0
  3. package/dist/api/compiler/ast-utilities.js +462 -0
  4. package/dist/api/compiler/ast.d.ts +2351 -0
  5. package/dist/api/compiler/ast.js +11212 -0
  6. package/dist/api/compiler/astnav.d.ts +37 -0
  7. package/dist/api/compiler/astnav.js +767 -0
  8. package/dist/api/compiler/binder-utilities.d.ts +182 -0
  9. package/dist/api/compiler/binder-utilities.js +1241 -0
  10. package/dist/api/compiler/binder.d.ts +33 -0
  11. package/dist/api/compiler/binder.js +2359 -0
  12. package/dist/api/compiler/character-codes.d.ts +161 -0
  13. package/dist/api/compiler/character-codes.js +160 -0
  14. package/dist/api/compiler/checker-calls.d.ts +46 -0
  15. package/dist/api/compiler/checker-calls.js +1641 -0
  16. package/dist/api/compiler/checker-classes.d.ts +30 -0
  17. package/dist/api/compiler/checker-classes.js +582 -0
  18. package/dist/api/compiler/checker-contextual.d.ts +77 -0
  19. package/dist/api/compiler/checker-contextual.js +1136 -0
  20. package/dist/api/compiler/checker-declaration-order.d.ts +12 -0
  21. package/dist/api/compiler/checker-declaration-order.js +357 -0
  22. package/dist/api/compiler/checker-declarations.d.ts +33 -0
  23. package/dist/api/compiler/checker-declarations.js +888 -0
  24. package/dist/api/compiler/checker-declared-types.d.ts +48 -0
  25. package/dist/api/compiler/checker-declared-types.js +788 -0
  26. package/dist/api/compiler/checker-decorators.d.ts +26 -0
  27. package/dist/api/compiler/checker-decorators.js +562 -0
  28. package/dist/api/compiler/checker-deprecation.d.ts +33 -0
  29. package/dist/api/compiler/checker-deprecation.js +314 -0
  30. package/dist/api/compiler/checker-destructuring.d.ts +34 -0
  31. package/dist/api/compiler/checker-destructuring.js +584 -0
  32. package/dist/api/compiler/checker-elaboration.d.ts +15 -0
  33. package/dist/api/compiler/checker-elaboration.js +291 -0
  34. package/dist/api/compiler/checker-emit-helpers.d.ts +58 -0
  35. package/dist/api/compiler/checker-emit-helpers.js +154 -0
  36. package/dist/api/compiler/checker-emit-resolver.d.ts +75 -0
  37. package/dist/api/compiler/checker-emit-resolver.js +580 -0
  38. package/dist/api/compiler/checker-evaluator.d.ts +27 -0
  39. package/dist/api/compiler/checker-evaluator.js +188 -0
  40. package/dist/api/compiler/checker-expressions.d.ts +67 -0
  41. package/dist/api/compiler/checker-expressions.js +1351 -0
  42. package/dist/api/compiler/checker-features.d.ts +6 -0
  43. package/dist/api/compiler/checker-features.js +354 -0
  44. package/dist/api/compiler/checker-flow.d.ts +86 -0
  45. package/dist/api/compiler/checker-flow.js +169 -0
  46. package/dist/api/compiler/checker-functions.d.ts +43 -0
  47. package/dist/api/compiler/checker-functions.js +1002 -0
  48. package/dist/api/compiler/checker-generated-code.d.ts +25 -0
  49. package/dist/api/compiler/checker-generated-code.js +168 -0
  50. package/dist/api/compiler/checker-globals.d.ts +14 -0
  51. package/dist/api/compiler/checker-globals.js +37 -0
  52. package/dist/api/compiler/checker-grammar.d.ts +35 -0
  53. package/dist/api/compiler/checker-grammar.js +2587 -0
  54. package/dist/api/compiler/checker-heritage.d.ts +28 -0
  55. package/dist/api/compiler/checker-heritage.js +901 -0
  56. package/dist/api/compiler/checker-inference.d.ts +179 -0
  57. package/dist/api/compiler/checker-inference.js +2105 -0
  58. package/dist/api/compiler/checker-iteration.d.ts +115 -0
  59. package/dist/api/compiler/checker-iteration.js +857 -0
  60. package/dist/api/compiler/checker-javascript.d.ts +42 -0
  61. package/dist/api/compiler/checker-javascript.js +442 -0
  62. package/dist/api/compiler/checker-jsdoc.d.ts +30 -0
  63. package/dist/api/compiler/checker-jsdoc.js +320 -0
  64. package/dist/api/compiler/checker-jsx.d.ts +94 -0
  65. package/dist/api/compiler/checker-jsx.js +1433 -0
  66. package/dist/api/compiler/checker-literals.d.ts +6 -0
  67. package/dist/api/compiler/checker-literals.js +43 -0
  68. package/dist/api/compiler/checker-members.d.ts +200 -0
  69. package/dist/api/compiler/checker-members.js +2148 -0
  70. package/dist/api/compiler/checker-modules.d.ts +85 -0
  71. package/dist/api/compiler/checker-modules.js +2141 -0
  72. package/dist/api/compiler/checker-narrowing.d.ts +120 -0
  73. package/dist/api/compiler/checker-narrowing.js +2797 -0
  74. package/dist/api/compiler/checker-object-literals.d.ts +14 -0
  75. package/dist/api/compiler/checker-object-literals.js +483 -0
  76. package/dist/api/compiler/checker-operators.d.ts +33 -0
  77. package/dist/api/compiler/checker-operators.js +1040 -0
  78. package/dist/api/compiler/checker-overloads.d.ts +7 -0
  79. package/dist/api/compiler/checker-overloads.js +271 -0
  80. package/dist/api/compiler/checker-property-access.d.ts +34 -0
  81. package/dist/api/compiler/checker-property-access.js +672 -0
  82. package/dist/api/compiler/checker-services.d.ts +49 -0
  83. package/dist/api/compiler/checker-services.js +995 -0
  84. package/dist/api/compiler/checker-signatures.d.ts +55 -0
  85. package/dist/api/compiler/checker-signatures.js +789 -0
  86. package/dist/api/compiler/checker-source-file.d.ts +27 -0
  87. package/dist/api/compiler/checker-source-file.js +619 -0
  88. package/dist/api/compiler/checker-statements.d.ts +18 -0
  89. package/dist/api/compiler/checker-statements.js +226 -0
  90. package/dist/api/compiler/checker-super.d.ts +13 -0
  91. package/dist/api/compiler/checker-super.js +241 -0
  92. package/dist/api/compiler/checker-symbol-types.d.ts +51 -0
  93. package/dist/api/compiler/checker-symbol-types.js +955 -0
  94. package/dist/api/compiler/checker-symbols.d.ts +181 -0
  95. package/dist/api/compiler/checker-symbols.js +1784 -0
  96. package/dist/api/compiler/checker-type-factory.d.ts +142 -0
  97. package/dist/api/compiler/checker-type-factory.js +2542 -0
  98. package/dist/api/compiler/checker-type-nodes.d.ts +26 -0
  99. package/dist/api/compiler/checker-type-nodes.js +828 -0
  100. package/dist/api/compiler/checker-type-operators.d.ts +109 -0
  101. package/dist/api/compiler/checker-type-operators.js +1842 -0
  102. package/dist/api/compiler/checker-types.d.ts +1093 -0
  103. package/dist/api/compiler/checker-types.js +1874 -0
  104. package/dist/api/compiler/checker-unused.d.ts +19 -0
  105. package/dist/api/compiler/checker-unused.js +524 -0
  106. package/dist/api/compiler/checker-utilities.d.ts +33 -0
  107. package/dist/api/compiler/checker-utilities.js +141 -0
  108. package/dist/api/compiler/checker.d.ts +512 -0
  109. package/dist/api/compiler/checker.js +932 -0
  110. package/dist/api/compiler/command-line.d.ts +32 -0
  111. package/dist/api/compiler/command-line.js +383 -0
  112. package/dist/api/compiler/compile-program.d.ts +118 -0
  113. package/dist/api/compiler/compile-program.js +384 -0
  114. package/dist/api/compiler/diagnostic-locales.d.ts +22 -0
  115. package/dist/api/compiler/diagnostic-locales.js +64 -0
  116. package/dist/api/compiler/diagnostic-messages.d.ts +2166 -0
  117. package/dist/api/compiler/diagnostic-messages.js +184 -0
  118. package/dist/api/compiler/diagnostics.d.ts +161 -0
  119. package/dist/api/compiler/diagnostics.js +784 -0
  120. package/dist/api/compiler/emitter.d.ts +71 -0
  121. package/dist/api/compiler/emitter.js +327 -0
  122. package/dist/api/compiler/file-include.d.ts +144 -0
  123. package/dist/api/compiler/file-include.js +599 -0
  124. package/dist/api/compiler/file-loader.d.ts +290 -0
  125. package/dist/api/compiler/file-loader.js +1323 -0
  126. package/dist/api/compiler/file-system.d.ts +51 -0
  127. package/dist/api/compiler/file-system.js +132 -0
  128. package/dist/api/compiler/flow.d.ts +60 -0
  129. package/dist/api/compiler/flow.js +45 -0
  130. package/dist/api/compiler/instantiation.d.ts +74 -0
  131. package/dist/api/compiler/instantiation.js +835 -0
  132. package/dist/api/compiler/jsdoc.d.ts +75 -0
  133. package/dist/api/compiler/jsdoc.js +1229 -0
  134. package/dist/api/compiler/link-tables.d.ts +105 -0
  135. package/dist/api/compiler/link-tables.js +319 -0
  136. package/dist/api/compiler/locale-data.d.ts +24 -0
  137. package/dist/api/compiler/locale-data.js +183 -0
  138. package/dist/api/compiler/locale.d.ts +4 -0
  139. package/dist/api/compiler/locale.js +317 -0
  140. package/dist/api/compiler/locales/cs-CZ.d.ts +2 -0
  141. package/dist/api/compiler/locales/cs-CZ.js +3 -0
  142. package/dist/api/compiler/locales/de-DE.d.ts +2 -0
  143. package/dist/api/compiler/locales/de-DE.js +3 -0
  144. package/dist/api/compiler/locales/es-ES.d.ts +2 -0
  145. package/dist/api/compiler/locales/es-ES.js +3 -0
  146. package/dist/api/compiler/locales/fr-FR.d.ts +2 -0
  147. package/dist/api/compiler/locales/fr-FR.js +3 -0
  148. package/dist/api/compiler/locales/it-IT.d.ts +2 -0
  149. package/dist/api/compiler/locales/it-IT.js +3 -0
  150. package/dist/api/compiler/locales/ja-JP.d.ts +2 -0
  151. package/dist/api/compiler/locales/ja-JP.js +3 -0
  152. package/dist/api/compiler/locales/ko-KR.d.ts +2 -0
  153. package/dist/api/compiler/locales/ko-KR.js +3 -0
  154. package/dist/api/compiler/locales/pl-PL.d.ts +2 -0
  155. package/dist/api/compiler/locales/pl-PL.js +3 -0
  156. package/dist/api/compiler/locales/pt-BR.d.ts +2 -0
  157. package/dist/api/compiler/locales/pt-BR.js +3 -0
  158. package/dist/api/compiler/locales/ru-RU.d.ts +2 -0
  159. package/dist/api/compiler/locales/ru-RU.js +3 -0
  160. package/dist/api/compiler/locales/tr-TR.d.ts +2 -0
  161. package/dist/api/compiler/locales/tr-TR.js +3 -0
  162. package/dist/api/compiler/locales/zh-CN.d.ts +2 -0
  163. package/dist/api/compiler/locales/zh-CN.js +3 -0
  164. package/dist/api/compiler/locales/zh-TW.d.ts +2 -0
  165. package/dist/api/compiler/locales/zh-TW.js +3 -0
  166. package/dist/api/compiler/module-resolution-types.d.ts +83 -0
  167. package/dist/api/compiler/module-resolution-types.js +176 -0
  168. package/dist/api/compiler/module-resolution.d.ts +71 -0
  169. package/dist/api/compiler/module-resolution.js +1598 -0
  170. package/dist/api/compiler/module-specifiers.d.ts +64 -0
  171. package/dist/api/compiler/module-specifiers.js +1101 -0
  172. package/dist/api/compiler/name-resolver.d.ts +43 -0
  173. package/dist/api/compiler/name-resolver.js +509 -0
  174. package/dist/api/compiler/node-builder-names.d.ts +32 -0
  175. package/dist/api/compiler/node-builder-names.js +854 -0
  176. package/dist/api/compiler/node-builder-pseudo.d.ts +36 -0
  177. package/dist/api/compiler/node-builder-pseudo.js +745 -0
  178. package/dist/api/compiler/node-builder-reuse.d.ts +4 -0
  179. package/dist/api/compiler/node-builder-reuse.js +647 -0
  180. package/dist/api/compiler/node-builder.d.ts +270 -0
  181. package/dist/api/compiler/node-builder.js +2645 -0
  182. package/dist/api/compiler/option-declarations.d.ts +90 -0
  183. package/dist/api/compiler/option-declarations.js +1460 -0
  184. package/dist/api/compiler/options.d.ts +289 -0
  185. package/dist/api/compiler/options.js +1197 -0
  186. package/dist/api/compiler/output-paths.d.ts +42 -0
  187. package/dist/api/compiler/output-paths.js +195 -0
  188. package/dist/api/compiler/package-json.d.ts +175 -0
  189. package/dist/api/compiler/package-json.js +1015 -0
  190. package/dist/api/compiler/parallel-parse.d.ts +221 -0
  191. package/dist/api/compiler/parallel-parse.js +541 -0
  192. package/dist/api/compiler/parser.d.ts +604 -0
  193. package/dist/api/compiler/parser.js +6426 -0
  194. package/dist/api/compiler/path.d.ts +91 -0
  195. package/dist/api/compiler/path.js +705 -0
  196. package/dist/api/compiler/printer/async-helpers.d.ts +22 -0
  197. package/dist/api/compiler/printer/async-helpers.js +91 -0
  198. package/dist/api/compiler/printer/auto-generate.d.ts +13 -0
  199. package/dist/api/compiler/printer/auto-generate.js +20 -0
  200. package/dist/api/compiler/printer/decorator-helpers.d.ts +24 -0
  201. package/dist/api/compiler/printer/decorator-helpers.js +118 -0
  202. package/dist/api/compiler/printer/emit-context.d.ts +157 -0
  203. package/dist/api/compiler/printer/emit-context.js +582 -0
  204. package/dist/api/compiler/printer/emit-flags.d.ts +60 -0
  205. package/dist/api/compiler/printer/emit-flags.js +2 -0
  206. package/dist/api/compiler/printer/factory-base.d.ts +171 -0
  207. package/dist/api/compiler/printer/factory-base.js +1505 -0
  208. package/dist/api/compiler/printer/factory.d.ts +147 -0
  209. package/dist/api/compiler/printer/factory.js +542 -0
  210. package/dist/api/compiler/printer/helpers.d.ts +27 -0
  211. package/dist/api/compiler/printer/helpers.js +164 -0
  212. package/dist/api/compiler/printer/name-generator.d.ts +41 -0
  213. package/dist/api/compiler/printer/name-generator.js +283 -0
  214. package/dist/api/compiler/printer/printer.d.ts +411 -0
  215. package/dist/api/compiler/printer/printer.js +4517 -0
  216. package/dist/api/compiler/printer/text-writer.d.ts +46 -0
  217. package/dist/api/compiler/printer/text-writer.js +172 -0
  218. package/dist/api/compiler/printer/utilities.d.ts +82 -0
  219. package/dist/api/compiler/printer/utilities.js +817 -0
  220. package/dist/api/compiler/program-checker.d.ts +156 -0
  221. package/dist/api/compiler/program-checker.js +529 -0
  222. package/dist/api/compiler/program-utilities.d.ts +52 -0
  223. package/dist/api/compiler/program-utilities.js +365 -0
  224. package/dist/api/compiler/program.d.ts +180 -0
  225. package/dist/api/compiler/program.js +1019 -0
  226. package/dist/api/compiler/pseudo-bigint.d.ts +5 -0
  227. package/dist/api/compiler/pseudo-bigint.js +61 -0
  228. package/dist/api/compiler/regexp-checker.d.ts +38 -0
  229. package/dist/api/compiler/regexp-checker.js +942 -0
  230. package/dist/api/compiler/relations.d.ts +263 -0
  231. package/dist/api/compiler/relations.js +4002 -0
  232. package/dist/api/compiler/reparser.d.ts +48 -0
  233. package/dist/api/compiler/reparser.js +1323 -0
  234. package/dist/api/compiler/scanner.d.ts +256 -0
  235. package/dist/api/compiler/scanner.js +2853 -0
  236. package/dist/api/compiler/side-state.d.ts +16 -0
  237. package/dist/api/compiler/side-state.js +89 -0
  238. package/dist/api/compiler/sourcemap.d.ts +55 -0
  239. package/dist/api/compiler/sourcemap.js +340 -0
  240. package/dist/api/compiler/spelling.d.ts +14 -0
  241. package/dist/api/compiler/spelling.js +128 -0
  242. package/dist/api/compiler/symbol-accessibility.d.ts +57 -0
  243. package/dist/api/compiler/symbol-accessibility.js +991 -0
  244. package/dist/api/compiler/symbol.d.ts +282 -0
  245. package/dist/api/compiler/symbol.js +339 -0
  246. package/dist/api/compiler/symlinks.d.ts +32 -0
  247. package/dist/api/compiler/symlinks.js +114 -0
  248. package/dist/api/compiler/syntax-kind.d.ts +389 -0
  249. package/dist/api/compiler/syntax-kind.js +2 -0
  250. package/dist/api/compiler/timeline.d.ts +9 -0
  251. package/dist/api/compiler/timeline.js +54 -0
  252. package/dist/api/compiler/transformers/alias-references.d.ts +39 -0
  253. package/dist/api/compiler/transformers/alias-references.js +677 -0
  254. package/dist/api/compiler/transformers/async-utilities.d.ts +51 -0
  255. package/dist/api/compiler/transformers/async-utilities.js +260 -0
  256. package/dist/api/compiler/transformers/async.d.ts +53 -0
  257. package/dist/api/compiler/transformers/async.js +645 -0
  258. package/dist/api/compiler/transformers/class-fields.d.ts +206 -0
  259. package/dist/api/compiler/transformers/class-fields.js +2418 -0
  260. package/dist/api/compiler/transformers/class-utilities.d.ts +46 -0
  261. package/dist/api/compiler/transformers/class-utilities.js +261 -0
  262. package/dist/api/compiler/transformers/commonjs-module.d.ts +103 -0
  263. package/dist/api/compiler/transformers/commonjs-module.js +1180 -0
  264. package/dist/api/compiler/transformers/const-enum-inliner.d.ts +11 -0
  265. package/dist/api/compiler/transformers/const-enum-inliner.js +36 -0
  266. package/dist/api/compiler/transformers/declarations-diagnostics.d.ts +52 -0
  267. package/dist/api/compiler/transformers/declarations-diagnostics.js +539 -0
  268. package/dist/api/compiler/transformers/declarations-pseudo.d.ts +160 -0
  269. package/dist/api/compiler/transformers/declarations-pseudo.js +799 -0
  270. package/dist/api/compiler/transformers/declarations-resolver.d.ts +152 -0
  271. package/dist/api/compiler/transformers/declarations-resolver.js +35 -0
  272. package/dist/api/compiler/transformers/declarations-syntactic.d.ts +119 -0
  273. package/dist/api/compiler/transformers/declarations-syntactic.js +1582 -0
  274. package/dist/api/compiler/transformers/declarations-tracker.d.ts +46 -0
  275. package/dist/api/compiler/transformers/declarations-tracker.js +198 -0
  276. package/dist/api/compiler/transformers/declarations.d.ts +175 -0
  277. package/dist/api/compiler/transformers/declarations.js +2381 -0
  278. package/dist/api/compiler/transformers/decorator-metadata.d.ts +54 -0
  279. package/dist/api/compiler/transformers/decorator-metadata.js +554 -0
  280. package/dist/api/compiler/transformers/decorator-utilities.d.ts +38 -0
  281. package/dist/api/compiler/transformers/decorator-utilities.js +238 -0
  282. package/dist/api/compiler/transformers/destructuring.d.ts +25 -0
  283. package/dist/api/compiler/transformers/destructuring.js +626 -0
  284. package/dist/api/compiler/transformers/downlevel.d.ts +6 -0
  285. package/dist/api/compiler/transformers/downlevel.js +45 -0
  286. package/dist/api/compiler/transformers/emit-resolver.d.ts +61 -0
  287. package/dist/api/compiler/transformers/emit-resolver.js +197 -0
  288. package/dist/api/compiler/transformers/es-decorators.d.ts +118 -0
  289. package/dist/api/compiler/transformers/es-decorators.js +1901 -0
  290. package/dist/api/compiler/transformers/exponentiation.d.ts +11 -0
  291. package/dist/api/compiler/transformers/exponentiation.js +76 -0
  292. package/dist/api/compiler/transformers/external-module-info.d.ts +35 -0
  293. package/dist/api/compiler/transformers/external-module-info.js +351 -0
  294. package/dist/api/compiler/transformers/for-await.d.ts +43 -0
  295. package/dist/api/compiler/transformers/for-await.js +469 -0
  296. package/dist/api/compiler/transformers/import-elision.d.ts +16 -0
  297. package/dist/api/compiler/transformers/import-elision.js +124 -0
  298. package/dist/api/compiler/transformers/jsx-entities.d.ts +1 -0
  299. package/dist/api/compiler/transformers/jsx-entities.js +256 -0
  300. package/dist/api/compiler/transformers/jsx.d.ts +71 -0
  301. package/dist/api/compiler/transformers/jsx.js +700 -0
  302. package/dist/api/compiler/transformers/legacy-decorators.d.ts +56 -0
  303. package/dist/api/compiler/transformers/legacy-decorators.js +564 -0
  304. package/dist/api/compiler/transformers/logical-assignment.d.ts +14 -0
  305. package/dist/api/compiler/transformers/logical-assignment.js +62 -0
  306. package/dist/api/compiler/transformers/module-utilities.d.ts +9 -0
  307. package/dist/api/compiler/transformers/module-utilities.js +36 -0
  308. package/dist/api/compiler/transformers/module.d.ts +49 -0
  309. package/dist/api/compiler/transformers/module.js +296 -0
  310. package/dist/api/compiler/transformers/named-evaluation.d.ts +26 -0
  311. package/dist/api/compiler/transformers/named-evaluation.js +266 -0
  312. package/dist/api/compiler/transformers/nullish-coalescing.d.ts +9 -0
  313. package/dist/api/compiler/transformers/nullish-coalescing.js +26 -0
  314. package/dist/api/compiler/transformers/object-rest-spread.d.ts +34 -0
  315. package/dist/api/compiler/transformers/object-rest-spread.js +411 -0
  316. package/dist/api/compiler/transformers/optional-catch.d.ts +9 -0
  317. package/dist/api/compiler/transformers/optional-catch.js +20 -0
  318. package/dist/api/compiler/transformers/optional-chain.d.ts +14 -0
  319. package/dist/api/compiler/transformers/optional-chain.js +188 -0
  320. package/dist/api/compiler/transformers/reference-resolver.d.ts +129 -0
  321. package/dist/api/compiler/transformers/reference-resolver.js +1157 -0
  322. package/dist/api/compiler/transformers/runtime-syntax.d.ts +71 -0
  323. package/dist/api/compiler/transformers/runtime-syntax.js +753 -0
  324. package/dist/api/compiler/transformers/subtree-facts.d.ts +10 -0
  325. package/dist/api/compiler/transformers/subtree-facts.js +205 -0
  326. package/dist/api/compiler/transformers/syntax-facts.d.ts +52 -0
  327. package/dist/api/compiler/transformers/syntax-facts.js +258 -0
  328. package/dist/api/compiler/transformers/tagged-template.d.ts +17 -0
  329. package/dist/api/compiler/transformers/tagged-template.js +148 -0
  330. package/dist/api/compiler/transformers/transformer.d.ts +17 -0
  331. package/dist/api/compiler/transformers/transformer.js +54 -0
  332. package/dist/api/compiler/transformers/type-eraser.d.ts +21 -0
  333. package/dist/api/compiler/transformers/type-eraser.js +346 -0
  334. package/dist/api/compiler/transformers/type-serialization.d.ts +20 -0
  335. package/dist/api/compiler/transformers/type-serialization.js +347 -0
  336. package/dist/api/compiler/transformers/using.d.ts +56 -0
  337. package/dist/api/compiler/transformers/using.js +453 -0
  338. package/dist/api/compiler/transformers/utilities.d.ts +50 -0
  339. package/dist/api/compiler/transformers/utilities.js +347 -0
  340. package/dist/api/compiler/transformers/visitor-base.d.ts +6 -0
  341. package/dist/api/compiler/transformers/visitor-base.js +817 -0
  342. package/dist/api/compiler/transformers/visitor-hooks.d.ts +29 -0
  343. package/dist/api/compiler/transformers/visitor-hooks.js +189 -0
  344. package/dist/api/compiler/tsconfig.d.ts +177 -0
  345. package/dist/api/compiler/tsconfig.js +1311 -0
  346. package/dist/api/compiler/type-printer.d.ts +15 -0
  347. package/dist/api/compiler/type-printer.js +74 -0
  348. package/dist/api/compiler/types.d.ts +87 -0
  349. package/dist/api/compiler/types.js +23 -0
  350. package/dist/api/compiler/unicode-identifiers.d.ts +2 -0
  351. package/dist/api/compiler/unicode-identifiers.js +209 -0
  352. package/dist/api/compiler/unicode-properties.d.ts +8 -0
  353. package/dist/api/compiler/unicode-properties.js +531 -0
  354. package/dist/api/compiler/vfs-match.d.ts +24 -0
  355. package/dist/api/compiler/vfs-match.js +587 -0
  356. package/dist/api/library/ast.d.ts +3 -2
  357. package/dist/api/library/ast.generated.d.ts +127 -139
  358. package/dist/api/library/checker.d.ts +51 -0
  359. package/dist/api/library/checker.js +318 -0
  360. package/dist/api/library/diagnostics.d.ts +13 -0
  361. package/dist/api/library/diagnostics.js +50 -0
  362. package/dist/api/library/disk.d.ts +13 -0
  363. package/dist/api/library/disk.js +66 -0
  364. package/dist/api/library/errors.d.ts +13 -0
  365. package/dist/api/library/errors.js +24 -0
  366. package/dist/api/library/host.d.ts +24 -0
  367. package/dist/api/library/host.js +52 -0
  368. package/dist/api/library/index.d.ts +5 -1
  369. package/dist/api/library/index.js +4 -0
  370. package/dist/api/library/nodes.d.ts +51 -0
  371. package/dist/api/library/nodes.js +196 -0
  372. package/dist/api/library/options.d.ts +144 -0
  373. package/dist/api/library/options.js +308 -0
  374. package/dist/api/library/parse.d.ts +19 -0
  375. package/dist/api/library/parse.js +41 -0
  376. package/dist/api/library/program.d.ts +21 -0
  377. package/dist/api/library/program.js +234 -0
  378. package/dist/api/library/types.d.ts +14 -1
  379. package/package.json +12 -8
  380. package/src/compiler/ast-utilities.ts +548 -0
  381. package/src/compiler/ast.ts +12870 -0
  382. package/src/compiler/astnav.ts +799 -0
  383. package/src/compiler/binder-utilities.ts +1392 -0
  384. package/src/compiler/binder.ts +2707 -0
  385. package/src/compiler/build-info.ts +1197 -0
  386. package/src/compiler/character-codes.ts +323 -0
  387. package/src/compiler/checker-calls.ts +2155 -0
  388. package/src/compiler/checker-classes.ts +706 -0
  389. package/src/compiler/checker-contextual.ts +1457 -0
  390. package/src/compiler/checker-declaration-order.ts +438 -0
  391. package/src/compiler/checker-declarations.ts +1201 -0
  392. package/src/compiler/checker-declared-types.ts +919 -0
  393. package/src/compiler/checker-decorators.ts +694 -0
  394. package/src/compiler/checker-deprecation.ts +355 -0
  395. package/src/compiler/checker-destructuring.ts +805 -0
  396. package/src/compiler/checker-elaboration.ts +477 -0
  397. package/src/compiler/checker-emit-helpers.ts +224 -0
  398. package/src/compiler/checker-emit-resolver.ts +769 -0
  399. package/src/compiler/checker-evaluator.ts +243 -0
  400. package/src/compiler/checker-expressions.ts +1831 -0
  401. package/src/compiler/checker-features.ts +361 -0
  402. package/src/compiler/checker-flow.ts +394 -0
  403. package/src/compiler/checker-functions.ts +1296 -0
  404. package/src/compiler/checker-generated-code.ts +227 -0
  405. package/src/compiler/checker-globals.ts +52 -0
  406. package/src/compiler/checker-grammar.ts +3596 -0
  407. package/src/compiler/checker-heritage.ts +1240 -0
  408. package/src/compiler/checker-inference.ts +2584 -0
  409. package/src/compiler/checker-iteration.ts +1206 -0
  410. package/src/compiler/checker-javascript.ts +502 -0
  411. package/src/compiler/checker-jsdoc.ts +360 -0
  412. package/src/compiler/checker-jsx.ts +1928 -0
  413. package/src/compiler/checker-literals.ts +61 -0
  414. package/src/compiler/checker-members.ts +2480 -0
  415. package/src/compiler/checker-modules.ts +2896 -0
  416. package/src/compiler/checker-narrowing.ts +3230 -0
  417. package/src/compiler/checker-object-literals.ts +591 -0
  418. package/src/compiler/checker-operators.ts +1422 -0
  419. package/src/compiler/checker-overloads.ts +328 -0
  420. package/src/compiler/checker-property-access.ts +906 -0
  421. package/src/compiler/checker-services.ts +1149 -0
  422. package/src/compiler/checker-signatures.ts +1032 -0
  423. package/src/compiler/checker-source-file.ts +732 -0
  424. package/src/compiler/checker-statements.ts +292 -0
  425. package/src/compiler/checker-super.ts +261 -0
  426. package/src/compiler/checker-symbol-types.ts +1187 -0
  427. package/src/compiler/checker-symbols.ts +2157 -0
  428. package/src/compiler/checker-type-factory.ts +2616 -0
  429. package/src/compiler/checker-type-nodes.ts +1033 -0
  430. package/src/compiler/checker-type-operators.ts +2510 -0
  431. package/src/compiler/checker-types.ts +2520 -0
  432. package/src/compiler/checker-unused.ts +642 -0
  433. package/src/compiler/checker-utilities.ts +161 -0
  434. package/src/compiler/checker.ts +1138 -0
  435. package/src/compiler/command-line.ts +436 -0
  436. package/src/compiler/compile-program.ts +439 -0
  437. package/src/compiler/decoder.ts +1209 -0
  438. package/src/compiler/diagnostic-locales.ts +86 -0
  439. package/src/compiler/diagnostic-messages.ts +2349 -0
  440. package/src/compiler/diagnostics.ts +858 -0
  441. package/src/compiler/emitter.ts +434 -0
  442. package/src/compiler/encoder.ts +1945 -0
  443. package/src/compiler/file-include.ts +741 -0
  444. package/src/compiler/file-loader.ts +1597 -0
  445. package/src/compiler/file-system.ts +143 -0
  446. package/src/compiler/flow.ts +89 -0
  447. package/src/compiler/help.ts +473 -0
  448. package/src/compiler/incremental.ts +2818 -0
  449. package/src/compiler/init.ts +141 -0
  450. package/src/compiler/instantiation.ts +938 -0
  451. package/src/compiler/jsdoc.ts +1386 -0
  452. package/src/compiler/link-tables.ts +343 -0
  453. package/src/compiler/locale-data.ts +203 -0
  454. package/src/compiler/locale.ts +307 -0
  455. package/src/compiler/locales/cs-CZ.ts +5 -0
  456. package/src/compiler/locales/de-DE.ts +5 -0
  457. package/src/compiler/locales/es-ES.ts +5 -0
  458. package/src/compiler/locales/fr-FR.ts +5 -0
  459. package/src/compiler/locales/it-IT.ts +5 -0
  460. package/src/compiler/locales/ja-JP.ts +5 -0
  461. package/src/compiler/locales/ko-KR.ts +5 -0
  462. package/src/compiler/locales/pl-PL.ts +5 -0
  463. package/src/compiler/locales/pt-BR.ts +5 -0
  464. package/src/compiler/locales/ru-RU.ts +5 -0
  465. package/src/compiler/locales/tr-TR.ts +5 -0
  466. package/src/compiler/locales/zh-CN.ts +5 -0
  467. package/src/compiler/locales/zh-TW.ts +5 -0
  468. package/src/compiler/module-resolution-types.ts +243 -0
  469. package/src/compiler/module-resolution.ts +2072 -0
  470. package/src/compiler/module-specifiers.ts +1491 -0
  471. package/src/compiler/name-resolver.ts +646 -0
  472. package/src/compiler/node-builder-names.ts +1071 -0
  473. package/src/compiler/node-builder-pseudo.ts +892 -0
  474. package/src/compiler/node-builder-reuse.ts +764 -0
  475. package/src/compiler/node-builder.ts +3433 -0
  476. package/src/compiler/option-declarations.ts +1560 -0
  477. package/src/compiler/options.ts +1576 -0
  478. package/src/compiler/output-paths.ts +334 -0
  479. package/src/compiler/package-json.ts +1083 -0
  480. package/src/compiler/parallel-check.ts +1954 -0
  481. package/src/compiler/parallel-parse.ts +595 -0
  482. package/src/compiler/parse-thread.ts +136 -0
  483. package/src/compiler/parser.ts +7766 -0
  484. package/src/compiler/path.ts +717 -0
  485. package/src/compiler/printer/async-helpers.ts +183 -0
  486. package/src/compiler/printer/auto-generate.ts +27 -0
  487. package/src/compiler/printer/decorator-helpers.ts +218 -0
  488. package/src/compiler/printer/emit-context.ts +684 -0
  489. package/src/compiler/printer/emit-flags.ts +64 -0
  490. package/src/compiler/printer/factory-base.ts +2577 -0
  491. package/src/compiler/printer/factory.ts +764 -0
  492. package/src/compiler/printer/helpers.ts +291 -0
  493. package/src/compiler/printer/name-generator.ts +372 -0
  494. package/src/compiler/printer/printer.ts +5072 -0
  495. package/src/compiler/printer/text-writer.ts +183 -0
  496. package/src/compiler/printer/utilities.ts +884 -0
  497. package/src/compiler/program-checker.ts +594 -0
  498. package/src/compiler/program-utilities.ts +435 -0
  499. package/src/compiler/program.ts +1426 -0
  500. package/src/compiler/pseudo-bigint.ts +62 -0
  501. package/src/compiler/regexp-checker.ts +1142 -0
  502. package/src/compiler/relations.ts +5149 -0
  503. package/src/compiler/reparser.ts +1566 -0
  504. package/src/compiler/scanner.ts +2951 -0
  505. package/src/compiler/show-config.ts +239 -0
  506. package/src/compiler/side-state.ts +125 -0
  507. package/src/compiler/sourcemap.ts +366 -0
  508. package/src/compiler/spelling.ts +122 -0
  509. package/src/compiler/symbol-accessibility.ts +1166 -0
  510. package/src/compiler/symbol.ts +557 -0
  511. package/src/compiler/symlinks.ts +137 -0
  512. package/src/compiler/syntax-kind.ts +391 -0
  513. package/src/compiler/thread-entry.ts +191 -0
  514. package/src/compiler/timeline.ts +53 -0
  515. package/src/compiler/transformers/alias-references.ts +757 -0
  516. package/src/compiler/transformers/async-utilities.ts +335 -0
  517. package/src/compiler/transformers/async.ts +838 -0
  518. package/src/compiler/transformers/class-fields.ts +2967 -0
  519. package/src/compiler/transformers/class-utilities.ts +324 -0
  520. package/src/compiler/transformers/commonjs-module.ts +1621 -0
  521. package/src/compiler/transformers/const-enum-inliner.ts +50 -0
  522. package/src/compiler/transformers/declarations-diagnostics.ts +833 -0
  523. package/src/compiler/transformers/declarations-pseudo.ts +969 -0
  524. package/src/compiler/transformers/declarations-resolver.ts +249 -0
  525. package/src/compiler/transformers/declarations-syntactic.ts +1867 -0
  526. package/src/compiler/transformers/declarations-tracker.ts +269 -0
  527. package/src/compiler/transformers/declarations.ts +3120 -0
  528. package/src/compiler/transformers/decorator-metadata.ts +697 -0
  529. package/src/compiler/transformers/decorator-utilities.ts +283 -0
  530. package/src/compiler/transformers/destructuring.ts +708 -0
  531. package/src/compiler/transformers/downlevel.ts +50 -0
  532. package/src/compiler/transformers/emit-resolver.ts +258 -0
  533. package/src/compiler/transformers/es-decorators.ts +2682 -0
  534. package/src/compiler/transformers/exponentiation.ts +80 -0
  535. package/src/compiler/transformers/external-module-info.ts +412 -0
  536. package/src/compiler/transformers/for-await.ts +687 -0
  537. package/src/compiler/transformers/import-elision.ts +152 -0
  538. package/src/compiler/transformers/jsx-entities.ts +256 -0
  539. package/src/compiler/transformers/jsx.ts +824 -0
  540. package/src/compiler/transformers/legacy-decorators.ts +726 -0
  541. package/src/compiler/transformers/logical-assignment.ts +75 -0
  542. package/src/compiler/transformers/module-utilities.ts +42 -0
  543. package/src/compiler/transformers/module.ts +474 -0
  544. package/src/compiler/transformers/named-evaluation.ts +389 -0
  545. package/src/compiler/transformers/nullish-coalescing.ts +35 -0
  546. package/src/compiler/transformers/object-rest-spread.ts +577 -0
  547. package/src/compiler/transformers/optional-catch.ts +29 -0
  548. package/src/compiler/transformers/optional-chain.ts +246 -0
  549. package/src/compiler/transformers/reference-resolver.ts +1213 -0
  550. package/src/compiler/transformers/runtime-syntax.ts +942 -0
  551. package/src/compiler/transformers/subtree-facts.ts +253 -0
  552. package/src/compiler/transformers/syntax-facts.ts +358 -0
  553. package/src/compiler/transformers/tagged-template.ts +167 -0
  554. package/src/compiler/transformers/transformer.ts +56 -0
  555. package/src/compiler/transformers/type-eraser.ts +520 -0
  556. package/src/compiler/transformers/type-serialization.ts +374 -0
  557. package/src/compiler/transformers/using.ts +613 -0
  558. package/src/compiler/transformers/utilities.ts +419 -0
  559. package/src/compiler/transformers/visitor-base.ts +1601 -0
  560. package/src/compiler/transformers/visitor-hooks.ts +252 -0
  561. package/src/compiler/tsc-build.ts +1422 -0
  562. package/src/compiler/tsc-cli.ts +669 -0
  563. package/src/compiler/tsc-compile.ts +446 -0
  564. package/src/compiler/tsc-watch.ts +922 -0
  565. package/src/compiler/tsconfig.ts +1574 -0
  566. package/src/compiler/type-printer.ts +110 -0
  567. package/src/compiler/types.ts +115 -0
  568. package/src/compiler/unicode-identifiers.ts +212 -0
  569. package/src/compiler/unicode-properties.ts +537 -0
  570. package/src/compiler/vfs-match.ts +597 -0
  571. package/src/compiler/xxh3.ts +650 -0
  572. package/src/library/ast.generated.ts +141 -167
  573. package/src/library/ast.ts +4 -1
  574. package/src/library/checker.ts +384 -0
  575. package/src/library/diagnostics.ts +72 -0
  576. package/src/library/disk.ts +73 -0
  577. package/src/library/errors.ts +26 -0
  578. package/src/library/host.ts +63 -0
  579. package/src/library/index.ts +21 -0
  580. package/src/library/nodes.ts +232 -0
  581. package/src/library/options.ts +449 -0
  582. package/src/library/parse.ts +63 -0
  583. package/src/library/program.ts +293 -0
  584. package/src/library/types.ts +14 -1
@@ -0,0 +1,75 @@
1
+ // Lowers `a ||= b`, `a &&= b` and `a ??= b` to `a || (a = b)` and so on (ES2021).
2
+ import { BinaryExpression, ElementAccessExpression, type Node, PropertyAccessExpression } from '../ast.js';
3
+ import { skipParentheses } from '../binder-utilities.js';
4
+ import type { EmitContext } from '../printer/emit-context.js';
5
+ import { SyntaxKind } from '../syntax-kind.js';
6
+ import { isSimpleCopiableExpression } from './destructuring.js';
7
+ import { SubtreeFacts, type SyntaxFacts } from './syntax-facts.js';
8
+ import { Transformer } from './transformer.js';
9
+
10
+ export class LogicalAssignmentTransformer extends Transformer {
11
+ readonly facts: SyntaxFacts;
12
+
13
+ constructor(context: EmitContext, facts: SyntaxFacts) {
14
+ super(context);
15
+ this.facts = facts;
16
+ }
17
+
18
+ visit(node: Node): Node | undefined {
19
+ if (!this.facts.has(node, SubtreeFacts.ContainsLogicalAssignments)) return node;
20
+ if (node instanceof BinaryExpression) {
21
+ const operator = logicalOperatorOf(node.operatorToken.kind);
22
+ if (operator !== SyntaxKind.Unknown) return this.visitLogicalAssignment(node as BinaryExpression, operator);
23
+ }
24
+ return this.visitEachChild(node);
25
+ }
26
+
27
+ private visitLogicalAssignment(node: BinaryExpression, operator: SyntaxKind): Node {
28
+ const factory = this.factory;
29
+ const visited = skipParentheses(this.visitNode(node.left)!);
30
+ let left = visited;
31
+ let target = visited;
32
+ const right = skipParentheses(this.visitNode(node.right)!);
33
+ if (visited instanceof PropertyAccessExpression) {
34
+ const object = this.copiableObject(visited.expression);
35
+ target = factory.createPropertyAccessExpression(object, visited.name);
36
+ left = factory.createPropertyAccessExpression(this.assignedObject(object, visited.expression), visited.name);
37
+ } else if (visited instanceof ElementAccessExpression) {
38
+ const object = this.copiableObject(visited.expression);
39
+ const argument = this.copiableObject(visited.argumentExpression);
40
+ target = factory.createElementAccessExpression(object, argument);
41
+ left = factory.createElementAccessExpression(
42
+ this.assignedObject(object, visited.expression),
43
+ this.assignedObject(argument, visited.argumentExpression),
44
+ );
45
+ }
46
+ return factory.createBinaryExpression(
47
+ left,
48
+ operator,
49
+ factory.createParenthesizedExpression(factory.createAssignment(target, right)),
50
+ );
51
+ }
52
+
53
+ /** `expression`, or a temporary to hold it when it can't be evaluated twice. */
54
+ private copiableObject(expression: Node): Node {
55
+ if (isSimpleCopiableExpression(expression)) return expression;
56
+ return this.context.addVariableDeclaration(this.factory.createTempVariable(0));
57
+ }
58
+
59
+ /** `expression`, or its assignment to the temporary `copy` holding it. */
60
+ private assignedObject(copy: Node, expression: Node): Node {
61
+ return copy === expression ? expression : this.factory.createAssignment(copy, expression);
62
+ }
63
+ }
64
+
65
+ function logicalOperatorOf(kind: SyntaxKind): SyntaxKind {
66
+ switch (kind) {
67
+ case SyntaxKind.BarBarEqualsToken:
68
+ return SyntaxKind.BarBarToken;
69
+ case SyntaxKind.AmpersandAmpersandEqualsToken:
70
+ return SyntaxKind.AmpersandAmpersandToken;
71
+ case SyntaxKind.QuestionQuestionEqualsToken:
72
+ return SyntaxKind.QuestionQuestionToken;
73
+ }
74
+ return SyntaxKind.Unknown;
75
+ }
@@ -0,0 +1,42 @@
1
+ // Module specifiers as module transforms write them.
2
+ import { type Node, StringLiteral } from '../ast.js';
3
+ import { getExternalModuleName } from '../ast-utilities.js';
4
+ import type { CompilerOptions } from '../options.js';
5
+ import { getOutputExtension } from '../output-paths.js';
6
+ import { changeExtension, hasTSFileExtension, isDeclarationFileName, pathIsRelative } from '../path.js';
7
+ import type { EmitContext } from '../printer/emit-context.js';
8
+ import { TokenFlags } from '../types.js';
9
+
10
+ /** The module name of an import, export or `import()` as written in output, or undefined. */
11
+ export function getExternalModuleNameLiteral(context: EmitContext, node: Node): StringLiteral | undefined {
12
+ const name = getExternalModuleName(node);
13
+ if (!(name instanceof StringLiteral)) return undefined;
14
+ return context.factory.createStringLiteral(name.text, TokenFlags.None);
15
+ }
16
+
17
+ /** The arguments of the `require` call for an import: its rewritten module name. */
18
+ export function createRequireCallArguments(context: EmitContext, node: Node, options: CompilerOptions): Node[] {
19
+ const name = getExternalModuleNameLiteral(context, node);
20
+ return name === undefined ? [] : [rewriteModuleSpecifier(context, name, options)];
21
+ }
22
+
23
+ /** With `rewriteRelativeImportExtensions`, `./a.ts` becomes `./a.js`. */
24
+ export function rewriteModuleSpecifier(context: EmitContext, node: Node, options: CompilerOptions): Node {
25
+ if (!(node instanceof StringLiteral) || !shouldRewriteModuleSpecifier(node.text, options)) return node;
26
+ const text = node.text;
27
+ const updatedText = changeExtension(text, getOutputExtension(text, options.jsx));
28
+ if (updatedText === text) return node;
29
+ const updated = context.factory.createStringLiteral(updatedText, node.tokenFlags);
30
+ context.setOriginal(updated, node);
31
+ context.assignCommentAndSourceMapRanges(updated, node);
32
+ return updated;
33
+ }
34
+
35
+ function shouldRewriteModuleSpecifier(specifier: string, options: CompilerOptions): boolean {
36
+ return (
37
+ options.rewriteRelativeImportExtensions === true &&
38
+ pathIsRelative(specifier) &&
39
+ !isDeclarationFileName(specifier) &&
40
+ hasTSFileExtension(specifier)
41
+ );
42
+ }
@@ -0,0 +1,474 @@
1
+ // `"use strict"` prologues and module output: ECMAScript modules, CommonJS, or each file in the
2
+ // format its extension and package.json imply.
3
+ import {
4
+ CallExpression,
5
+ ExportAssignment,
6
+ ExportDeclaration,
7
+ ExportSpecifier,
8
+ ExpressionStatement,
9
+ ExternalModuleReference,
10
+ ImportAttributes,
11
+ ImportClause,
12
+ ImportDeclaration,
13
+ ImportEqualsDeclaration,
14
+ ImportSpecifier,
15
+ MetaProperty,
16
+ ModifierFlags,
17
+ NamedExports,
18
+ NamedImports,
19
+ NamespaceExport,
20
+ NamespaceImport,
21
+ type Node,
22
+ NodeFlags,
23
+ NodeList,
24
+ ScriptKind,
25
+ SourceFile,
26
+ StringLiteral,
27
+ NoSubstitutionTemplateLiteral,
28
+ Identifier,
29
+ } from '../ast.js';
30
+ import { isAnyImportOrReExport, isImportCall, isInJSFile, isRequireCall } from '../ast-utilities.js';
31
+ import { type CompilerOptions, JsxEmit, ModuleKind, getEmitModuleKind, getIsolatedModules } from '../options.js';
32
+ import type { EmitContext } from '../printer/emit-context.js';
33
+ import { EmitFlags, GeneratedIdentifierFlags } from '../printer/emit-flags.js';
34
+ import { isPrologueDirective } from '../printer/utilities.js';
35
+ import { SyntaxKind } from '../syntax-kind.js';
36
+ import { TokenFlags } from '../types.js';
37
+ import { CommonJSModuleTransformer } from './commonjs-module.js';
38
+ import type { EmitResolver } from './emit-resolver.js';
39
+ import { createExternalHelpersImportDeclarationIfNeeded } from './external-module-info.js';
40
+ import { createRequireCallArguments, rewriteModuleSpecifier } from './module-utilities.js';
41
+ import { Transformer } from './transformer.js';
42
+ import { hasSyntacticModifier, isExternalModule, singleOrMany } from './utilities.js';
43
+
44
+ /** Decides the module format each file is emitted in, from its extension and the nearest package.json. */
45
+ export abstract class ModuleFormatHost {
46
+ abstract getEmitModuleFormat(fileName: string): ModuleKind;
47
+ }
48
+
49
+ export class UseStrictTransformer extends Transformer {
50
+ readonly options: CompilerOptions;
51
+ readonly formats: ModuleFormatHost;
52
+
53
+ constructor(context: EmitContext, options: CompilerOptions, formats: ModuleFormatHost) {
54
+ super(context);
55
+ this.options = options;
56
+ this.formats = formats;
57
+ }
58
+
59
+ visit(node: Node): Node | undefined {
60
+ if (!(node instanceof SourceFile) || node.scriptKind === ScriptKind.JSON) return node;
61
+ const moduleKind = getEmitModuleKind(this.options);
62
+ // ES modules are always strict.
63
+ if (
64
+ isExternalModule(node) &&
65
+ moduleKind >= ModuleKind.ES2015 &&
66
+ (moduleKind === ModuleKind.Preserve || this.formats.getEmitModuleFormat(node.fileName) >= ModuleKind.ES2015)
67
+ )
68
+ return node;
69
+ const statements = node.statements.nodes;
70
+ const first = statements.length > 0 ? statements[0] : undefined;
71
+ if (
72
+ first instanceof ExpressionStatement &&
73
+ first.expression instanceof StringLiteral &&
74
+ first.expression.text === 'use strict'
75
+ )
76
+ return node;
77
+ const factory = this.factory;
78
+ const useStrict = factory.createExpressionStatement(factory.createStringLiteral('use strict', TokenFlags.None));
79
+ return factory.updateSourceFile(
80
+ node,
81
+ new NodeList(node.statements.pos, node.statements.end, [useStrict as Node].concat(statements)),
82
+ node.endOfFileToken,
83
+ );
84
+ }
85
+ }
86
+
87
+ /** The module transform for `module`: ES modules, CommonJS, or the format each file implies. */
88
+ export function createModuleTransformer(
89
+ context: EmitContext,
90
+ options: CompilerOptions,
91
+ resolver: EmitResolver,
92
+ formats: ModuleFormatHost,
93
+ ): Transformer {
94
+ switch (getEmitModuleKind(options)) {
95
+ case ModuleKind.Preserve:
96
+ // ES module output also keeps CommonJS syntax for `module: preserve`.
97
+ return new ESModuleTransformer(context, options, formats);
98
+ case ModuleKind.ESNext:
99
+ case ModuleKind.ES2022:
100
+ case ModuleKind.ES2020:
101
+ case ModuleKind.ES2015:
102
+ case ModuleKind.Node20:
103
+ case ModuleKind.Node18:
104
+ case ModuleKind.Node16:
105
+ case ModuleKind.NodeNext:
106
+ case ModuleKind.CommonJS:
107
+ return new ImpliedModuleTransformer(context, options, resolver, formats);
108
+ }
109
+ return new CommonJSModuleTransformer(context, options, resolver, formats);
110
+ }
111
+
112
+ /** Emits each file as an ES module or as CommonJS, by its format. */
113
+ export class ImpliedModuleTransformer extends Transformer {
114
+ readonly options: CompilerOptions;
115
+ readonly resolver: EmitResolver;
116
+ readonly formats: ModuleFormatHost;
117
+ private esm: ESModuleTransformer | undefined;
118
+ private commonjs: CommonJSModuleTransformer | undefined;
119
+
120
+ constructor(context: EmitContext, options: CompilerOptions, resolver: EmitResolver, formats: ModuleFormatHost) {
121
+ super(context);
122
+ this.options = options;
123
+ this.resolver = resolver;
124
+ this.formats = formats;
125
+ this.esm = undefined;
126
+ this.commonjs = undefined;
127
+ }
128
+
129
+ visit(node: Node): Node | undefined {
130
+ if (!(node instanceof SourceFile) || node.isDeclarationFile) return node;
131
+ if (this.formats.getEmitModuleFormat(node.fileName) >= ModuleKind.ES2015) {
132
+ if (this.esm === undefined) this.esm = new ESModuleTransformer(this.context, this.options, this.formats);
133
+ return this.esm.transformSourceFile(node);
134
+ }
135
+ if (this.commonjs === undefined)
136
+ this.commonjs = new CommonJSModuleTransformer(this.context, this.options, this.resolver, this.formats);
137
+ return this.commonjs.transformSourceFile(node);
138
+ }
139
+ }
140
+
141
+ /** ECMAScript module output: drops or rewrites `import x = require()` and `export =`, and keeps files modules. */
142
+ export class ESModuleTransformer extends Transformer {
143
+ readonly options: CompilerOptions;
144
+ readonly formats: ModuleFormatHost;
145
+ private currentSourceFile: SourceFile | undefined;
146
+ /** `import { createRequire } from "module"` and `const __require = ...`, once a file needs them. */
147
+ private requireStatements: Node[] | undefined;
148
+ private requireHelperName: Identifier | undefined;
149
+
150
+ constructor(context: EmitContext, options: CompilerOptions, formats: ModuleFormatHost) {
151
+ super(context);
152
+ this.options = options;
153
+ this.formats = formats;
154
+ this.currentSourceFile = undefined;
155
+ this.requireStatements = undefined;
156
+ this.requireHelperName = undefined;
157
+ }
158
+
159
+ visit(node: Node): Node | undefined {
160
+ switch (node.kind) {
161
+ case SyntaxKind.SourceFile:
162
+ if (node instanceof SourceFile) return this.visitSourceFile(node);
163
+ break;
164
+ case SyntaxKind.ImportDeclaration:
165
+ if (node instanceof ImportDeclaration) return this.visitImportDeclaration(node);
166
+ break;
167
+ case SyntaxKind.ImportEqualsDeclaration:
168
+ if (node instanceof ImportEqualsDeclaration) return this.visitImportEqualsDeclaration(node);
169
+ break;
170
+ case SyntaxKind.ExportAssignment:
171
+ if (node instanceof ExportAssignment) return this.visitExportAssignment(node);
172
+ break;
173
+ case SyntaxKind.ExportDeclaration:
174
+ if (node instanceof ExportDeclaration) return this.visitExportDeclaration(node);
175
+ break;
176
+ case SyntaxKind.CallExpression:
177
+ if (node instanceof CallExpression) return this.visitCallExpression(node);
178
+ break;
179
+ }
180
+ return this.visitEachChild(node);
181
+ }
182
+
183
+ private visitSourceFile(node: SourceFile): Node {
184
+ if (node.isDeclarationFile || !(isExternalModule(node) || getIsolatedModules(this.options))) return node;
185
+ const factory = this.factory;
186
+ const context = this.context;
187
+ this.currentSourceFile = node;
188
+ this.requireStatements = undefined;
189
+ this.requireHelperName = undefined;
190
+ const visited = this.visitEachChild(node);
191
+ let result = visited instanceof SourceFile ? (visited as SourceFile) : node;
192
+ const helpers = context.readEmitHelpers();
193
+ for (let i = 0; i < helpers.length; i++) context.addEmitHelper(result, helpers[i]);
194
+ const helpersImport = createExternalHelpersImportDeclarationIfNeeded(
195
+ context,
196
+ result,
197
+ this.options,
198
+ this.formats.getEmitModuleFormat(node.fileName),
199
+ );
200
+ const requireStatements = this.getRequireStatements();
201
+ if (helpersImport !== undefined || requireStatements !== undefined) {
202
+ const current = result.statements.nodes;
203
+ let end = 0;
204
+ while (end < current.length && isPrologueDirective(current[end])) end++;
205
+ while (
206
+ end < current.length &&
207
+ !isPrologueDirective(current[end]) &&
208
+ (context.getEmitFlags(current[end]) & EmitFlags.CustomPrologue) !== 0
209
+ )
210
+ end++;
211
+ const statements = current.slice(0, end);
212
+ if (helpersImport !== undefined) {
213
+ // Visited so that `import tslib = require("tslib")` becomes `const tslib = require("tslib")`.
214
+ const visitedImport = this.visitNode(helpersImport);
215
+ if (visitedImport !== undefined) statements.push(visitedImport);
216
+ }
217
+ if (requireStatements !== undefined)
218
+ for (let i = 0; i < requireStatements.length; i++) statements.push(requireStatements[i]);
219
+ for (let i = end; i < current.length; i++) statements.push(current[i]);
220
+ result = factory.updateSourceFile(
221
+ result,
222
+ new NodeList(result.statements.pos, result.statements.end, statements),
223
+ node.endOfFileToken,
224
+ );
225
+ }
226
+ if (isExternalModule(result) && getEmitModuleKind(this.options) !== ModuleKind.Preserve) {
227
+ const statements = result.statements.nodes;
228
+ let hasIndicator = false;
229
+ for (let i = 0; i < statements.length && !hasIndicator; i++)
230
+ hasIndicator = isExternalModuleIndicator(statements[i]);
231
+ if (!hasIndicator) {
232
+ const emptyExport: Node = factory.created(
233
+ new ExportDeclaration(
234
+ undefined,
235
+ false,
236
+ factory.created(new NamedExports(factory.createNodeList([]))),
237
+ undefined,
238
+ undefined,
239
+ ),
240
+ );
241
+ result = factory.updateSourceFile(
242
+ result,
243
+ new NodeList(result.statements.pos, result.statements.end, statements.concat([emptyExport])),
244
+ node.endOfFileToken,
245
+ );
246
+ }
247
+ }
248
+ this.requireStatements = undefined;
249
+ this.requireHelperName = undefined;
250
+ this.currentSourceFile = undefined;
251
+ return result;
252
+ }
253
+
254
+ /** The statements declaring `__require`, if the file needed them. */
255
+ private getRequireStatements(): Node[] | undefined {
256
+ return this.requireStatements;
257
+ }
258
+
259
+ private visitImportDeclaration(node: ImportDeclaration): Node {
260
+ if (this.options.rewriteRelativeImportExtensions !== true) return node;
261
+ const clause = this.visitNode(node.importClause);
262
+ return this.factory.updateImportDeclaration(
263
+ node,
264
+ undefined,
265
+ clause instanceof ImportClause ? (clause as ImportClause) : undefined,
266
+ rewriteModuleSpecifier(this.context, node.moduleSpecifier, this.options),
267
+ this.importAttributes(node.attributes),
268
+ );
269
+ }
270
+
271
+ /** In node16+ ES modules, `import x = require("m")` becomes a call of a `createRequire` require. */
272
+ private visitImportEqualsDeclaration(node: ImportEqualsDeclaration): Node | undefined {
273
+ if (getEmitModuleKind(this.options) < ModuleKind.Node16) return undefined;
274
+ if (!(node.moduleReference instanceof ExternalModuleReference)) return node;
275
+ const factory = this.factory;
276
+ const statement = factory.createVariableStatement(
277
+ undefined,
278
+ factory.createVariableDeclarationList(
279
+ factory.createNodeList([
280
+ factory.createVariableDeclaration(
281
+ factory.cloneIdentifier(node.name),
282
+ undefined,
283
+ undefined,
284
+ this.createRequireCall(node),
285
+ ),
286
+ ]),
287
+ NodeFlags.Const,
288
+ ),
289
+ );
290
+ this.context.setOriginal(statement, node);
291
+ this.context.assignCommentAndSourceMapRanges(statement, node);
292
+ const statements: Node[] = [statement];
293
+ if (hasSyntacticModifier(node, ModifierFlags.Export))
294
+ statements.push(
295
+ factory.created(
296
+ new ExportDeclaration(
297
+ undefined,
298
+ false,
299
+ factory.created(
300
+ new NamedExports(
301
+ factory.createNodeList([
302
+ factory.created(new ExportSpecifier(false, undefined, factory.cloneIdentifier(node.name))),
303
+ ]),
304
+ ),
305
+ ),
306
+ undefined,
307
+ undefined,
308
+ ),
309
+ ),
310
+ );
311
+ return singleOrMany(statements, factory);
312
+ }
313
+
314
+ private visitExportAssignment(node: ExportAssignment): Node | undefined {
315
+ if (!node.isExportEquals) return this.visitEachChild(node);
316
+ // `export =` isn't valid in ES modules; `module: preserve` keeps it as CommonJS.
317
+ if (getEmitModuleKind(this.options) !== ModuleKind.Preserve) return undefined;
318
+ const factory = this.factory;
319
+ const statement = factory.createExpressionStatement(
320
+ factory.createAssignment(
321
+ factory.createPropertyAccessExpression(factory.createIdentifier('module'), factory.createIdentifier('exports')),
322
+ this.visitNode(node.expression)!,
323
+ ),
324
+ );
325
+ this.context.setOriginal(statement, node);
326
+ return statement;
327
+ }
328
+
329
+ private visitExportDeclaration(node: ExportDeclaration): Node | undefined {
330
+ if (node.moduleSpecifier === undefined) return node;
331
+ const factory = this.factory;
332
+ const specifier = rewriteModuleSpecifier(this.context, node.moduleSpecifier, this.options);
333
+ const clause = node.exportClause;
334
+ const module = this.options.module;
335
+ if ((module !== undefined && module > ModuleKind.ES2015) || !(clause instanceof NamespaceExport))
336
+ return factory.updateExportDeclaration(
337
+ node,
338
+ undefined,
339
+ false,
340
+ clause,
341
+ specifier,
342
+ this.importAttributes(node.attributes),
343
+ );
344
+ // ES2015 has no `export * as ns`: import the namespace and export it.
345
+ const name = clause.name;
346
+ const generated = factory.createGeneratedNameForNode(name, 0, '', '');
347
+ const importDeclaration = factory.created(
348
+ new ImportDeclaration(
349
+ SyntaxKind.ImportDeclaration,
350
+ undefined,
351
+ factory.created(new ImportClause(undefined, undefined, factory.created(new NamespaceImport(generated)))),
352
+ specifier,
353
+ this.importAttributes(node.attributes),
354
+ ),
355
+ );
356
+ this.context.setOriginal(importDeclaration, clause);
357
+ const exportDeclaration: Node =
358
+ name instanceof Identifier && name.text === 'default'
359
+ ? factory.created(new ExportAssignment(undefined, false, undefined, generated))
360
+ : factory.created(
361
+ new ExportDeclaration(
362
+ undefined,
363
+ false,
364
+ factory.created(
365
+ new NamedExports(
366
+ factory.createNodeList([factory.created(new ExportSpecifier(false, generated, name))]),
367
+ ),
368
+ ),
369
+ undefined,
370
+ undefined,
371
+ ),
372
+ );
373
+ this.context.setOriginal(exportDeclaration, node);
374
+ return singleOrMany([importDeclaration, exportDeclaration], factory);
375
+ }
376
+
377
+ private visitCallExpression(node: CallExpression): Node {
378
+ const args = node.arguments.nodes;
379
+ if (
380
+ this.options.rewriteRelativeImportExtensions !== true ||
381
+ args.length === 0 ||
382
+ !(isImportCall(node) || (isInJSFile(node) && isRequireCall(node, false)))
383
+ )
384
+ return this.visitEachChild(node);
385
+ const factory = this.factory;
386
+ const first = args[0];
387
+ const argument =
388
+ first instanceof StringLiteral || first instanceof NoSubstitutionTemplateLiteral
389
+ ? rewriteModuleSpecifier(this.context, first, this.options)
390
+ : factory.createRewriteRelativeImportExtensionsHelper(first, this.options.jsx === JsxEmit.Preserve);
391
+ const rest = this.visitArray(args.slice(1));
392
+ return factory.updateCallExpression(
393
+ node,
394
+ this.visitNode(node.expression)!,
395
+ node.questionDotToken,
396
+ undefined,
397
+ new NodeList(node.arguments.pos, node.arguments.end, [argument].concat(rest)),
398
+ node.flags,
399
+ );
400
+ }
401
+
402
+ private importAttributes(node: ImportAttributes | undefined): ImportAttributes | undefined {
403
+ const visited = this.visitNode(node);
404
+ return visited instanceof ImportAttributes ? (visited as ImportAttributes) : undefined;
405
+ }
406
+
407
+ private createRequireCall(node: Node): Node {
408
+ const factory = this.factory;
409
+ const args = createRequireCallArguments(this.context, node, this.options);
410
+ if (getEmitModuleKind(this.options) === ModuleKind.Preserve)
411
+ return factory.createCallExpression(factory.createIdentifier('require'), args);
412
+ let helperName = this.requireHelperName;
413
+ if (helperName === undefined) {
414
+ const flags = GeneratedIdentifierFlags.Optimistic | GeneratedIdentifierFlags.FileLevel;
415
+ // import { createRequire as _createRequire } from "module";
416
+ const createRequireName = factory.createUniqueName('_createRequire', flags);
417
+ const importStatement = factory.created(
418
+ new ImportDeclaration(
419
+ SyntaxKind.ImportDeclaration,
420
+ undefined,
421
+ factory.created(
422
+ new ImportClause(
423
+ undefined,
424
+ undefined,
425
+ factory.created(
426
+ new NamedImports(
427
+ factory.createNodeList([
428
+ factory.created(
429
+ new ImportSpecifier(false, factory.createIdentifier('createRequire'), createRequireName),
430
+ ),
431
+ ]),
432
+ ),
433
+ ),
434
+ ),
435
+ ),
436
+ factory.createStringLiteral('module', TokenFlags.None),
437
+ undefined,
438
+ ),
439
+ );
440
+ this.context.addEmitFlags(importStatement, EmitFlags.CustomPrologue);
441
+ // const __require = _createRequire(import.meta.url);
442
+ helperName = factory.createUniqueName('__require', flags);
443
+ const requireStatement = factory.createVariableStatement(
444
+ undefined,
445
+ factory.createVariableDeclarationList(
446
+ factory.createNodeList([
447
+ factory.createVariableDeclaration(
448
+ helperName,
449
+ undefined,
450
+ undefined,
451
+ factory.createCallExpression(factory.cloneIdentifier(createRequireName), [
452
+ factory.createPropertyAccessExpression(
453
+ factory.created(new MetaProperty(SyntaxKind.ImportKeyword, factory.createIdentifier('meta'))),
454
+ factory.createIdentifier('url'),
455
+ ),
456
+ ]),
457
+ ),
458
+ ]),
459
+ NodeFlags.Const,
460
+ ),
461
+ );
462
+ this.context.addEmitFlags(requireStatement, EmitFlags.CustomPrologue);
463
+ this.requireStatements = [importStatement, requireStatement];
464
+ this.requireHelperName = helperName;
465
+ }
466
+ return factory.createCallExpression(factory.cloneIdentifier(helperName), args);
467
+ }
468
+ }
469
+
470
+ function isExternalModuleIndicator(node: Node): boolean {
471
+ return (
472
+ isAnyImportOrReExport(node) || node instanceof ExportAssignment || hasSyntacticModifier(node, ModifierFlags.Export)
473
+ );
474
+ }