tsc-ts 0.0.3 → 0.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (596) hide show
  1. package/README.md +46 -0
  2. package/dist/api/compiler/ast-utilities.d.ts +82 -0
  3. package/dist/api/compiler/ast-utilities.js +462 -0
  4. package/dist/api/compiler/ast.d.ts +2350 -0
  5. package/dist/api/compiler/ast.js +11206 -0
  6. package/dist/api/compiler/astnav.d.ts +37 -0
  7. package/dist/api/compiler/astnav.js +767 -0
  8. package/dist/api/compiler/binder-utilities.d.ts +182 -0
  9. package/dist/api/compiler/binder-utilities.js +1240 -0
  10. package/dist/api/compiler/binder.d.ts +33 -0
  11. package/dist/api/compiler/binder.js +2358 -0
  12. package/dist/api/compiler/character-codes.d.ts +161 -0
  13. package/dist/api/compiler/character-codes.js +160 -0
  14. package/dist/api/compiler/checker-calls.d.ts +46 -0
  15. package/dist/api/compiler/checker-calls.js +1640 -0
  16. package/dist/api/compiler/checker-classes.d.ts +30 -0
  17. package/dist/api/compiler/checker-classes.js +582 -0
  18. package/dist/api/compiler/checker-contextual.d.ts +77 -0
  19. package/dist/api/compiler/checker-contextual.js +1136 -0
  20. package/dist/api/compiler/checker-declaration-order.d.ts +12 -0
  21. package/dist/api/compiler/checker-declaration-order.js +356 -0
  22. package/dist/api/compiler/checker-declarations.d.ts +33 -0
  23. package/dist/api/compiler/checker-declarations.js +888 -0
  24. package/dist/api/compiler/checker-declared-types.d.ts +48 -0
  25. package/dist/api/compiler/checker-declared-types.js +787 -0
  26. package/dist/api/compiler/checker-decorators.d.ts +26 -0
  27. package/dist/api/compiler/checker-decorators.js +562 -0
  28. package/dist/api/compiler/checker-deprecation.d.ts +33 -0
  29. package/dist/api/compiler/checker-deprecation.js +315 -0
  30. package/dist/api/compiler/checker-destructuring.d.ts +34 -0
  31. package/dist/api/compiler/checker-destructuring.js +584 -0
  32. package/dist/api/compiler/checker-elaboration.d.ts +15 -0
  33. package/dist/api/compiler/checker-elaboration.js +290 -0
  34. package/dist/api/compiler/checker-emit-helpers.d.ts +58 -0
  35. package/dist/api/compiler/checker-emit-helpers.js +154 -0
  36. package/dist/api/compiler/checker-emit-resolver.d.ts +75 -0
  37. package/dist/api/compiler/checker-emit-resolver.js +579 -0
  38. package/dist/api/compiler/checker-evaluator.d.ts +27 -0
  39. package/dist/api/compiler/checker-evaluator.js +188 -0
  40. package/dist/api/compiler/checker-expressions.d.ts +67 -0
  41. package/dist/api/compiler/checker-expressions.js +1351 -0
  42. package/dist/api/compiler/checker-features.d.ts +6 -0
  43. package/dist/api/compiler/checker-features.js +354 -0
  44. package/dist/api/compiler/checker-flow.d.ts +86 -0
  45. package/dist/api/compiler/checker-flow.js +169 -0
  46. package/dist/api/compiler/checker-functions.d.ts +43 -0
  47. package/dist/api/compiler/checker-functions.js +1002 -0
  48. package/dist/api/compiler/checker-generated-code.d.ts +25 -0
  49. package/dist/api/compiler/checker-generated-code.js +168 -0
  50. package/dist/api/compiler/checker-globals.d.ts +14 -0
  51. package/dist/api/compiler/checker-globals.js +37 -0
  52. package/dist/api/compiler/checker-grammar.d.ts +35 -0
  53. package/dist/api/compiler/checker-grammar.js +2573 -0
  54. package/dist/api/compiler/checker-heritage.d.ts +28 -0
  55. package/dist/api/compiler/checker-heritage.js +900 -0
  56. package/dist/api/compiler/checker-inference.d.ts +179 -0
  57. package/dist/api/compiler/checker-inference.js +2105 -0
  58. package/dist/api/compiler/checker-iteration.d.ts +115 -0
  59. package/dist/api/compiler/checker-iteration.js +857 -0
  60. package/dist/api/compiler/checker-javascript.d.ts +42 -0
  61. package/dist/api/compiler/checker-javascript.js +441 -0
  62. package/dist/api/compiler/checker-jsdoc.d.ts +30 -0
  63. package/dist/api/compiler/checker-jsdoc.js +320 -0
  64. package/dist/api/compiler/checker-jsx.d.ts +94 -0
  65. package/dist/api/compiler/checker-jsx.js +1433 -0
  66. package/dist/api/compiler/checker-literals.d.ts +6 -0
  67. package/dist/api/compiler/checker-literals.js +43 -0
  68. package/dist/api/compiler/checker-members.d.ts +198 -0
  69. package/dist/api/compiler/checker-members.js +2126 -0
  70. package/dist/api/compiler/checker-modules.d.ts +85 -0
  71. package/dist/api/compiler/checker-modules.js +2141 -0
  72. package/dist/api/compiler/checker-narrowing.d.ts +120 -0
  73. package/dist/api/compiler/checker-narrowing.js +2797 -0
  74. package/dist/api/compiler/checker-object-literals.d.ts +14 -0
  75. package/dist/api/compiler/checker-object-literals.js +479 -0
  76. package/dist/api/compiler/checker-operators.d.ts +33 -0
  77. package/dist/api/compiler/checker-operators.js +1040 -0
  78. package/dist/api/compiler/checker-overloads.d.ts +7 -0
  79. package/dist/api/compiler/checker-overloads.js +270 -0
  80. package/dist/api/compiler/checker-property-access.d.ts +34 -0
  81. package/dist/api/compiler/checker-property-access.js +672 -0
  82. package/dist/api/compiler/checker-services.d.ts +49 -0
  83. package/dist/api/compiler/checker-services.js +995 -0
  84. package/dist/api/compiler/checker-signatures.d.ts +55 -0
  85. package/dist/api/compiler/checker-signatures.js +788 -0
  86. package/dist/api/compiler/checker-source-file.d.ts +27 -0
  87. package/dist/api/compiler/checker-source-file.js +619 -0
  88. package/dist/api/compiler/checker-statements.d.ts +18 -0
  89. package/dist/api/compiler/checker-statements.js +226 -0
  90. package/dist/api/compiler/checker-super.d.ts +13 -0
  91. package/dist/api/compiler/checker-super.js +241 -0
  92. package/dist/api/compiler/checker-symbol-types.d.ts +67 -0
  93. package/dist/api/compiler/checker-symbol-types.js +1885 -0
  94. package/dist/api/compiler/checker-symbols.d.ts +181 -0
  95. package/dist/api/compiler/checker-symbols.js +1782 -0
  96. package/dist/api/compiler/checker-type-factory.d.ts +142 -0
  97. package/dist/api/compiler/checker-type-factory.js +2501 -0
  98. package/dist/api/compiler/checker-type-nodes.d.ts +26 -0
  99. package/dist/api/compiler/checker-type-nodes.js +828 -0
  100. package/dist/api/compiler/checker-type-operators.d.ts +109 -0
  101. package/dist/api/compiler/checker-type-operators.js +1842 -0
  102. package/dist/api/compiler/checker-types.d.ts +1027 -0
  103. package/dist/api/compiler/checker-types.js +1697 -0
  104. package/dist/api/compiler/checker-unused.d.ts +19 -0
  105. package/dist/api/compiler/checker-unused.js +524 -0
  106. package/dist/api/compiler/checker-utilities.d.ts +33 -0
  107. package/dist/api/compiler/checker-utilities.js +141 -0
  108. package/dist/api/compiler/checker.d.ts +491 -0
  109. package/dist/api/compiler/checker.js +912 -0
  110. package/dist/api/compiler/command-line.d.ts +32 -0
  111. package/dist/api/compiler/command-line.js +383 -0
  112. package/dist/api/compiler/compile-program.d.ts +118 -0
  113. package/dist/api/compiler/compile-program.js +384 -0
  114. package/dist/api/compiler/diagnostic-locales.d.ts +22 -0
  115. package/dist/api/compiler/diagnostic-locales.js +64 -0
  116. package/dist/api/compiler/diagnostic-messages.d.ts +2166 -0
  117. package/dist/api/compiler/diagnostic-messages.js +184 -0
  118. package/dist/api/compiler/diagnostics.d.ts +167 -0
  119. package/dist/api/compiler/diagnostics.js +820 -0
  120. package/dist/api/compiler/emitter.d.ts +71 -0
  121. package/dist/api/compiler/emitter.js +327 -0
  122. package/dist/api/compiler/file-include.d.ts +117 -0
  123. package/dist/api/compiler/file-include.js +536 -0
  124. package/dist/api/compiler/file-loader.d.ts +261 -0
  125. package/dist/api/compiler/file-loader.js +1257 -0
  126. package/dist/api/compiler/file-system.d.ts +51 -0
  127. package/dist/api/compiler/file-system.js +132 -0
  128. package/dist/api/compiler/flow.d.ts +60 -0
  129. package/dist/api/compiler/flow.js +45 -0
  130. package/dist/api/compiler/instantiation.d.ts +74 -0
  131. package/dist/api/compiler/instantiation.js +799 -0
  132. package/dist/api/compiler/jsdoc.d.ts +75 -0
  133. package/dist/api/compiler/jsdoc.js +1229 -0
  134. package/dist/api/compiler/link-tables.d.ts +36 -0
  135. package/dist/api/compiler/link-tables.js +83 -0
  136. package/dist/api/compiler/locale-data.d.ts +24 -0
  137. package/dist/api/compiler/locale-data.js +183 -0
  138. package/dist/api/compiler/locale.d.ts +4 -0
  139. package/dist/api/compiler/locale.js +317 -0
  140. package/dist/api/compiler/locales/cs-CZ.d.ts +2 -0
  141. package/dist/api/compiler/locales/cs-CZ.js +3 -0
  142. package/dist/api/compiler/locales/de-DE.d.ts +2 -0
  143. package/dist/api/compiler/locales/de-DE.js +3 -0
  144. package/dist/api/compiler/locales/es-ES.d.ts +2 -0
  145. package/dist/api/compiler/locales/es-ES.js +3 -0
  146. package/dist/api/compiler/locales/fr-FR.d.ts +2 -0
  147. package/dist/api/compiler/locales/fr-FR.js +3 -0
  148. package/dist/api/compiler/locales/it-IT.d.ts +2 -0
  149. package/dist/api/compiler/locales/it-IT.js +3 -0
  150. package/dist/api/compiler/locales/ja-JP.d.ts +2 -0
  151. package/dist/api/compiler/locales/ja-JP.js +3 -0
  152. package/dist/api/compiler/locales/ko-KR.d.ts +2 -0
  153. package/dist/api/compiler/locales/ko-KR.js +3 -0
  154. package/dist/api/compiler/locales/pl-PL.d.ts +2 -0
  155. package/dist/api/compiler/locales/pl-PL.js +3 -0
  156. package/dist/api/compiler/locales/pt-BR.d.ts +2 -0
  157. package/dist/api/compiler/locales/pt-BR.js +3 -0
  158. package/dist/api/compiler/locales/ru-RU.d.ts +2 -0
  159. package/dist/api/compiler/locales/ru-RU.js +3 -0
  160. package/dist/api/compiler/locales/tr-TR.d.ts +2 -0
  161. package/dist/api/compiler/locales/tr-TR.js +3 -0
  162. package/dist/api/compiler/locales/zh-CN.d.ts +2 -0
  163. package/dist/api/compiler/locales/zh-CN.js +3 -0
  164. package/dist/api/compiler/locales/zh-TW.d.ts +2 -0
  165. package/dist/api/compiler/locales/zh-TW.js +3 -0
  166. package/dist/api/compiler/module-resolution-types.d.ts +83 -0
  167. package/dist/api/compiler/module-resolution-types.js +176 -0
  168. package/dist/api/compiler/module-resolution.d.ts +71 -0
  169. package/dist/api/compiler/module-resolution.js +1598 -0
  170. package/dist/api/compiler/module-specifiers.d.ts +64 -0
  171. package/dist/api/compiler/module-specifiers.js +1101 -0
  172. package/dist/api/compiler/name-resolver.d.ts +43 -0
  173. package/dist/api/compiler/name-resolver.js +509 -0
  174. package/dist/api/compiler/node-builder-names.d.ts +32 -0
  175. package/dist/api/compiler/node-builder-names.js +854 -0
  176. package/dist/api/compiler/node-builder-pseudo.d.ts +36 -0
  177. package/dist/api/compiler/node-builder-pseudo.js +744 -0
  178. package/dist/api/compiler/node-builder-reuse.d.ts +4 -0
  179. package/dist/api/compiler/node-builder-reuse.js +647 -0
  180. package/dist/api/compiler/node-builder.d.ts +270 -0
  181. package/dist/api/compiler/node-builder.js +2645 -0
  182. package/dist/api/compiler/option-declarations.d.ts +90 -0
  183. package/dist/api/compiler/option-declarations.js +1460 -0
  184. package/dist/api/compiler/options.d.ts +289 -0
  185. package/dist/api/compiler/options.js +1197 -0
  186. package/dist/api/compiler/output-paths.d.ts +42 -0
  187. package/dist/api/compiler/output-paths.js +195 -0
  188. package/dist/api/compiler/package-json.d.ts +175 -0
  189. package/dist/api/compiler/package-json.js +1015 -0
  190. package/dist/api/compiler/parallel-parse.d.ts +219 -0
  191. package/dist/api/compiler/parallel-parse.js +537 -0
  192. package/dist/api/compiler/parser.d.ts +587 -0
  193. package/dist/api/compiler/parser.js +6407 -0
  194. package/dist/api/compiler/path.d.ts +91 -0
  195. package/dist/api/compiler/path.js +705 -0
  196. package/dist/api/compiler/printer/async-helpers.d.ts +22 -0
  197. package/dist/api/compiler/printer/async-helpers.js +91 -0
  198. package/dist/api/compiler/printer/auto-generate.d.ts +13 -0
  199. package/dist/api/compiler/printer/auto-generate.js +20 -0
  200. package/dist/api/compiler/printer/decorator-helpers.d.ts +24 -0
  201. package/dist/api/compiler/printer/decorator-helpers.js +118 -0
  202. package/dist/api/compiler/printer/emit-context.d.ts +154 -0
  203. package/dist/api/compiler/printer/emit-context.js +576 -0
  204. package/dist/api/compiler/printer/emit-flags.d.ts +60 -0
  205. package/dist/api/compiler/printer/emit-flags.js +2 -0
  206. package/dist/api/compiler/printer/factory-base.d.ts +171 -0
  207. package/dist/api/compiler/printer/factory-base.js +1505 -0
  208. package/dist/api/compiler/printer/factory.d.ts +147 -0
  209. package/dist/api/compiler/printer/factory.js +542 -0
  210. package/dist/api/compiler/printer/helpers.d.ts +27 -0
  211. package/dist/api/compiler/printer/helpers.js +164 -0
  212. package/dist/api/compiler/printer/name-generator.d.ts +41 -0
  213. package/dist/api/compiler/printer/name-generator.js +283 -0
  214. package/dist/api/compiler/printer/printer.d.ts +411 -0
  215. package/dist/api/compiler/printer/printer.js +4517 -0
  216. package/dist/api/compiler/printer/text-writer.d.ts +46 -0
  217. package/dist/api/compiler/printer/text-writer.js +172 -0
  218. package/dist/api/compiler/printer/utilities.d.ts +82 -0
  219. package/dist/api/compiler/printer/utilities.js +817 -0
  220. package/dist/api/compiler/program-checker.d.ts +156 -0
  221. package/dist/api/compiler/program-checker.js +526 -0
  222. package/dist/api/compiler/program-utilities.d.ts +52 -0
  223. package/dist/api/compiler/program-utilities.js +365 -0
  224. package/dist/api/compiler/program.d.ts +180 -0
  225. package/dist/api/compiler/program.js +1011 -0
  226. package/dist/api/compiler/pseudo-bigint.d.ts +5 -0
  227. package/dist/api/compiler/pseudo-bigint.js +61 -0
  228. package/dist/api/compiler/regexp-checker.d.ts +38 -0
  229. package/dist/api/compiler/regexp-checker.js +942 -0
  230. package/dist/api/compiler/relations.d.ts +263 -0
  231. package/dist/api/compiler/relations.js +4002 -0
  232. package/dist/api/compiler/reparser.d.ts +48 -0
  233. package/dist/api/compiler/reparser.js +1323 -0
  234. package/dist/api/compiler/scanner.d.ts +256 -0
  235. package/dist/api/compiler/scanner.js +2853 -0
  236. package/dist/api/compiler/side-state.d.ts +16 -0
  237. package/dist/api/compiler/side-state.js +89 -0
  238. package/dist/api/compiler/sourcemap.d.ts +55 -0
  239. package/dist/api/compiler/sourcemap.js +340 -0
  240. package/dist/api/compiler/spelling.d.ts +14 -0
  241. package/dist/api/compiler/spelling.js +128 -0
  242. package/dist/api/compiler/symbol-accessibility.d.ts +57 -0
  243. package/dist/api/compiler/symbol-accessibility.js +894 -0
  244. package/dist/api/compiler/symbol.d.ts +240 -0
  245. package/dist/api/compiler/symbol.js +228 -0
  246. package/dist/api/compiler/symlinks.d.ts +32 -0
  247. package/dist/api/compiler/symlinks.js +114 -0
  248. package/dist/api/compiler/syntax-kind.d.ts +389 -0
  249. package/dist/api/compiler/syntax-kind.js +2 -0
  250. package/dist/api/compiler/timeline.d.ts +9 -0
  251. package/dist/api/compiler/timeline.js +54 -0
  252. package/dist/api/compiler/transformers/alias-references.d.ts +39 -0
  253. package/dist/api/compiler/transformers/alias-references.js +676 -0
  254. package/dist/api/compiler/transformers/async-utilities.d.ts +51 -0
  255. package/dist/api/compiler/transformers/async-utilities.js +260 -0
  256. package/dist/api/compiler/transformers/async.d.ts +53 -0
  257. package/dist/api/compiler/transformers/async.js +645 -0
  258. package/dist/api/compiler/transformers/class-fields.d.ts +206 -0
  259. package/dist/api/compiler/transformers/class-fields.js +2418 -0
  260. package/dist/api/compiler/transformers/class-utilities.d.ts +46 -0
  261. package/dist/api/compiler/transformers/class-utilities.js +261 -0
  262. package/dist/api/compiler/transformers/commonjs-module.d.ts +103 -0
  263. package/dist/api/compiler/transformers/commonjs-module.js +1180 -0
  264. package/dist/api/compiler/transformers/const-enum-inliner.d.ts +11 -0
  265. package/dist/api/compiler/transformers/const-enum-inliner.js +36 -0
  266. package/dist/api/compiler/transformers/declarations-diagnostics.d.ts +52 -0
  267. package/dist/api/compiler/transformers/declarations-diagnostics.js +538 -0
  268. package/dist/api/compiler/transformers/declarations-pseudo.d.ts +160 -0
  269. package/dist/api/compiler/transformers/declarations-pseudo.js +797 -0
  270. package/dist/api/compiler/transformers/declarations-resolver.d.ts +152 -0
  271. package/dist/api/compiler/transformers/declarations-resolver.js +35 -0
  272. package/dist/api/compiler/transformers/declarations-syntactic.d.ts +119 -0
  273. package/dist/api/compiler/transformers/declarations-syntactic.js +1582 -0
  274. package/dist/api/compiler/transformers/declarations-tracker.d.ts +46 -0
  275. package/dist/api/compiler/transformers/declarations-tracker.js +197 -0
  276. package/dist/api/compiler/transformers/declarations.d.ts +175 -0
  277. package/dist/api/compiler/transformers/declarations.js +2380 -0
  278. package/dist/api/compiler/transformers/decorator-metadata.d.ts +54 -0
  279. package/dist/api/compiler/transformers/decorator-metadata.js +554 -0
  280. package/dist/api/compiler/transformers/decorator-utilities.d.ts +38 -0
  281. package/dist/api/compiler/transformers/decorator-utilities.js +238 -0
  282. package/dist/api/compiler/transformers/destructuring.d.ts +25 -0
  283. package/dist/api/compiler/transformers/destructuring.js +626 -0
  284. package/dist/api/compiler/transformers/downlevel.d.ts +6 -0
  285. package/dist/api/compiler/transformers/downlevel.js +45 -0
  286. package/dist/api/compiler/transformers/emit-resolver.d.ts +61 -0
  287. package/dist/api/compiler/transformers/emit-resolver.js +197 -0
  288. package/dist/api/compiler/transformers/es-decorators.d.ts +118 -0
  289. package/dist/api/compiler/transformers/es-decorators.js +1901 -0
  290. package/dist/api/compiler/transformers/exponentiation.d.ts +11 -0
  291. package/dist/api/compiler/transformers/exponentiation.js +76 -0
  292. package/dist/api/compiler/transformers/external-module-info.d.ts +35 -0
  293. package/dist/api/compiler/transformers/external-module-info.js +351 -0
  294. package/dist/api/compiler/transformers/for-await.d.ts +43 -0
  295. package/dist/api/compiler/transformers/for-await.js +469 -0
  296. package/dist/api/compiler/transformers/import-elision.d.ts +16 -0
  297. package/dist/api/compiler/transformers/import-elision.js +124 -0
  298. package/dist/api/compiler/transformers/jsx-entities.d.ts +1 -0
  299. package/dist/api/compiler/transformers/jsx-entities.js +256 -0
  300. package/dist/api/compiler/transformers/jsx.d.ts +71 -0
  301. package/dist/api/compiler/transformers/jsx.js +700 -0
  302. package/dist/api/compiler/transformers/legacy-decorators.d.ts +56 -0
  303. package/dist/api/compiler/transformers/legacy-decorators.js +564 -0
  304. package/dist/api/compiler/transformers/logical-assignment.d.ts +14 -0
  305. package/dist/api/compiler/transformers/logical-assignment.js +62 -0
  306. package/dist/api/compiler/transformers/module-utilities.d.ts +9 -0
  307. package/dist/api/compiler/transformers/module-utilities.js +36 -0
  308. package/dist/api/compiler/transformers/module.d.ts +49 -0
  309. package/dist/api/compiler/transformers/module.js +296 -0
  310. package/dist/api/compiler/transformers/named-evaluation.d.ts +26 -0
  311. package/dist/api/compiler/transformers/named-evaluation.js +266 -0
  312. package/dist/api/compiler/transformers/nullish-coalescing.d.ts +9 -0
  313. package/dist/api/compiler/transformers/nullish-coalescing.js +26 -0
  314. package/dist/api/compiler/transformers/object-rest-spread.d.ts +34 -0
  315. package/dist/api/compiler/transformers/object-rest-spread.js +411 -0
  316. package/dist/api/compiler/transformers/optional-catch.d.ts +9 -0
  317. package/dist/api/compiler/transformers/optional-catch.js +20 -0
  318. package/dist/api/compiler/transformers/optional-chain.d.ts +14 -0
  319. package/dist/api/compiler/transformers/optional-chain.js +188 -0
  320. package/dist/api/compiler/transformers/reference-resolver.d.ts +128 -0
  321. package/dist/api/compiler/transformers/reference-resolver.js +1155 -0
  322. package/dist/api/compiler/transformers/runtime-syntax.d.ts +71 -0
  323. package/dist/api/compiler/transformers/runtime-syntax.js +753 -0
  324. package/dist/api/compiler/transformers/subtree-facts.d.ts +9 -0
  325. package/dist/api/compiler/transformers/subtree-facts.js +203 -0
  326. package/dist/api/compiler/transformers/syntax-facts.d.ts +51 -0
  327. package/dist/api/compiler/transformers/syntax-facts.js +254 -0
  328. package/dist/api/compiler/transformers/tagged-template.d.ts +17 -0
  329. package/dist/api/compiler/transformers/tagged-template.js +148 -0
  330. package/dist/api/compiler/transformers/transformer.d.ts +17 -0
  331. package/dist/api/compiler/transformers/transformer.js +54 -0
  332. package/dist/api/compiler/transformers/type-eraser.d.ts +21 -0
  333. package/dist/api/compiler/transformers/type-eraser.js +346 -0
  334. package/dist/api/compiler/transformers/type-serialization.d.ts +20 -0
  335. package/dist/api/compiler/transformers/type-serialization.js +347 -0
  336. package/dist/api/compiler/transformers/using.d.ts +56 -0
  337. package/dist/api/compiler/transformers/using.js +453 -0
  338. package/dist/api/compiler/transformers/utilities.d.ts +50 -0
  339. package/dist/api/compiler/transformers/utilities.js +347 -0
  340. package/dist/api/compiler/transformers/visitor-base.d.ts +6 -0
  341. package/dist/api/compiler/transformers/visitor-base.js +817 -0
  342. package/dist/api/compiler/transformers/visitor-hooks.d.ts +29 -0
  343. package/dist/api/compiler/transformers/visitor-hooks.js +189 -0
  344. package/dist/api/compiler/tsconfig.d.ts +177 -0
  345. package/dist/api/compiler/tsconfig.js +1311 -0
  346. package/dist/api/compiler/type-printer.d.ts +15 -0
  347. package/dist/api/compiler/type-printer.js +74 -0
  348. package/dist/api/compiler/types.d.ts +87 -0
  349. package/dist/api/compiler/types.js +23 -0
  350. package/dist/api/compiler/unicode-identifiers.d.ts +2 -0
  351. package/dist/api/compiler/unicode-identifiers.js +209 -0
  352. package/dist/api/compiler/unicode-properties.d.ts +8 -0
  353. package/dist/api/compiler/unicode-properties.js +531 -0
  354. package/dist/api/compiler/vfs-match.d.ts +24 -0
  355. package/dist/api/compiler/vfs-match.js +587 -0
  356. package/dist/api/library/ast.d.ts +74 -0
  357. package/dist/api/library/ast.generated.d.ts +1145 -0
  358. package/dist/api/library/ast.generated.js +3 -0
  359. package/dist/api/library/ast.js +5 -0
  360. package/dist/api/library/checker.d.ts +51 -0
  361. package/dist/api/library/checker.js +318 -0
  362. package/dist/api/library/compiler-options.generated.d.ts +108 -0
  363. package/dist/api/library/compiler-options.generated.js +3 -0
  364. package/dist/api/library/diagnostics.d.ts +13 -0
  365. package/dist/api/library/diagnostics.js +50 -0
  366. package/dist/api/library/disk.d.ts +13 -0
  367. package/dist/api/library/disk.js +66 -0
  368. package/dist/api/library/enums.generated.d.ts +891 -0
  369. package/dist/api/library/enums.generated.js +916 -0
  370. package/dist/api/library/errors.d.ts +13 -0
  371. package/dist/api/library/errors.js +24 -0
  372. package/dist/api/library/host.d.ts +24 -0
  373. package/dist/api/library/host.js +52 -0
  374. package/dist/api/library/index.d.ts +14 -0
  375. package/dist/api/library/index.js +15 -0
  376. package/dist/api/library/nodes.d.ts +51 -0
  377. package/dist/api/library/nodes.js +196 -0
  378. package/dist/api/library/options.d.ts +144 -0
  379. package/dist/api/library/options.js +308 -0
  380. package/dist/api/library/parse.d.ts +19 -0
  381. package/dist/api/library/parse.js +41 -0
  382. package/dist/api/library/program.d.ts +21 -0
  383. package/dist/api/library/program.js +234 -0
  384. package/dist/api/library/symbols.d.ts +8 -0
  385. package/dist/api/library/symbols.js +11 -0
  386. package/dist/api/library/types.d.ts +313 -0
  387. package/dist/api/library/types.js +6 -0
  388. package/package.json +22 -8
  389. package/src/compiler/ast-utilities.ts +548 -0
  390. package/src/compiler/ast.ts +12862 -0
  391. package/src/compiler/astnav.ts +799 -0
  392. package/src/compiler/binder-utilities.ts +1392 -0
  393. package/src/compiler/binder.ts +2703 -0
  394. package/src/compiler/build-info.ts +1197 -0
  395. package/src/compiler/character-codes.ts +323 -0
  396. package/src/compiler/checker-calls.ts +2155 -0
  397. package/src/compiler/checker-classes.ts +706 -0
  398. package/src/compiler/checker-contextual.ts +1457 -0
  399. package/src/compiler/checker-declaration-order.ts +438 -0
  400. package/src/compiler/checker-declarations.ts +1194 -0
  401. package/src/compiler/checker-declared-types.ts +919 -0
  402. package/src/compiler/checker-decorators.ts +694 -0
  403. package/src/compiler/checker-deprecation.ts +359 -0
  404. package/src/compiler/checker-destructuring.ts +805 -0
  405. package/src/compiler/checker-elaboration.ts +477 -0
  406. package/src/compiler/checker-emit-helpers.ts +224 -0
  407. package/src/compiler/checker-emit-resolver.ts +769 -0
  408. package/src/compiler/checker-evaluator.ts +243 -0
  409. package/src/compiler/checker-expressions.ts +1831 -0
  410. package/src/compiler/checker-features.ts +361 -0
  411. package/src/compiler/checker-flow.ts +394 -0
  412. package/src/compiler/checker-functions.ts +1296 -0
  413. package/src/compiler/checker-generated-code.ts +227 -0
  414. package/src/compiler/checker-globals.ts +52 -0
  415. package/src/compiler/checker-grammar.ts +3584 -0
  416. package/src/compiler/checker-heritage.ts +1233 -0
  417. package/src/compiler/checker-inference.ts +2576 -0
  418. package/src/compiler/checker-iteration.ts +1206 -0
  419. package/src/compiler/checker-javascript.ts +502 -0
  420. package/src/compiler/checker-jsdoc.ts +360 -0
  421. package/src/compiler/checker-jsx.ts +1924 -0
  422. package/src/compiler/checker-literals.ts +61 -0
  423. package/src/compiler/checker-members.ts +2436 -0
  424. package/src/compiler/checker-modules.ts +2886 -0
  425. package/src/compiler/checker-narrowing.ts +3230 -0
  426. package/src/compiler/checker-object-literals.ts +575 -0
  427. package/src/compiler/checker-operators.ts +1422 -0
  428. package/src/compiler/checker-overloads.ts +328 -0
  429. package/src/compiler/checker-property-access.ts +906 -0
  430. package/src/compiler/checker-services.ts +1149 -0
  431. package/src/compiler/checker-signatures.ts +1032 -0
  432. package/src/compiler/checker-source-file.ts +732 -0
  433. package/src/compiler/checker-statements.ts +292 -0
  434. package/src/compiler/checker-super.ts +261 -0
  435. package/src/compiler/checker-symbol-types.ts +2107 -0
  436. package/src/compiler/checker-symbols.ts +2150 -0
  437. package/src/compiler/checker-type-factory.ts +2579 -0
  438. package/src/compiler/checker-type-nodes.ts +1033 -0
  439. package/src/compiler/checker-type-operators.ts +2502 -0
  440. package/src/compiler/checker-types.ts +2340 -0
  441. package/src/compiler/checker-unused.ts +642 -0
  442. package/src/compiler/checker-utilities.ts +161 -0
  443. package/src/compiler/checker.ts +1116 -0
  444. package/src/compiler/command-line.ts +436 -0
  445. package/src/compiler/compile-program.ts +439 -0
  446. package/src/compiler/decoder.ts +1209 -0
  447. package/src/compiler/diagnostic-locales.ts +86 -0
  448. package/src/compiler/diagnostic-messages.ts +2349 -0
  449. package/src/compiler/diagnostics.ts +897 -0
  450. package/src/compiler/emitter.ts +434 -0
  451. package/src/compiler/encoder.ts +1945 -0
  452. package/src/compiler/file-include.ts +673 -0
  453. package/src/compiler/file-loader.ts +1528 -0
  454. package/src/compiler/file-system.ts +143 -0
  455. package/src/compiler/flow.ts +89 -0
  456. package/src/compiler/help.ts +473 -0
  457. package/src/compiler/incremental.ts +2784 -0
  458. package/src/compiler/init.ts +141 -0
  459. package/src/compiler/instantiation.ts +894 -0
  460. package/src/compiler/jsdoc.ts +1386 -0
  461. package/src/compiler/link-tables.ts +98 -0
  462. package/src/compiler/locale-data.ts +203 -0
  463. package/src/compiler/locale.ts +307 -0
  464. package/src/compiler/locales/cs-CZ.ts +5 -0
  465. package/src/compiler/locales/de-DE.ts +5 -0
  466. package/src/compiler/locales/es-ES.ts +5 -0
  467. package/src/compiler/locales/fr-FR.ts +5 -0
  468. package/src/compiler/locales/it-IT.ts +5 -0
  469. package/src/compiler/locales/ja-JP.ts +5 -0
  470. package/src/compiler/locales/ko-KR.ts +5 -0
  471. package/src/compiler/locales/pl-PL.ts +5 -0
  472. package/src/compiler/locales/pt-BR.ts +5 -0
  473. package/src/compiler/locales/ru-RU.ts +5 -0
  474. package/src/compiler/locales/tr-TR.ts +5 -0
  475. package/src/compiler/locales/zh-CN.ts +5 -0
  476. package/src/compiler/locales/zh-TW.ts +5 -0
  477. package/src/compiler/module-resolution-types.ts +243 -0
  478. package/src/compiler/module-resolution.ts +2072 -0
  479. package/src/compiler/module-specifiers.ts +1491 -0
  480. package/src/compiler/name-resolver.ts +646 -0
  481. package/src/compiler/node-builder-names.ts +1069 -0
  482. package/src/compiler/node-builder-pseudo.ts +892 -0
  483. package/src/compiler/node-builder-reuse.ts +764 -0
  484. package/src/compiler/node-builder.ts +3425 -0
  485. package/src/compiler/option-declarations.ts +1560 -0
  486. package/src/compiler/options.ts +1576 -0
  487. package/src/compiler/output-paths.ts +334 -0
  488. package/src/compiler/package-json.ts +1083 -0
  489. package/src/compiler/parallel-check.ts +1951 -0
  490. package/src/compiler/parallel-parse.ts +590 -0
  491. package/src/compiler/parse-thread.ts +140 -0
  492. package/src/compiler/parser.ts +7716 -0
  493. package/src/compiler/path.ts +717 -0
  494. package/src/compiler/printer/async-helpers.ts +183 -0
  495. package/src/compiler/printer/auto-generate.ts +27 -0
  496. package/src/compiler/printer/decorator-helpers.ts +218 -0
  497. package/src/compiler/printer/emit-context.ts +679 -0
  498. package/src/compiler/printer/emit-flags.ts +64 -0
  499. package/src/compiler/printer/factory-base.ts +2577 -0
  500. package/src/compiler/printer/factory.ts +764 -0
  501. package/src/compiler/printer/helpers.ts +291 -0
  502. package/src/compiler/printer/name-generator.ts +372 -0
  503. package/src/compiler/printer/printer.ts +5072 -0
  504. package/src/compiler/printer/text-writer.ts +183 -0
  505. package/src/compiler/printer/utilities.ts +884 -0
  506. package/src/compiler/program-checker.ts +592 -0
  507. package/src/compiler/program-utilities.ts +435 -0
  508. package/src/compiler/program.ts +1419 -0
  509. package/src/compiler/pseudo-bigint.ts +62 -0
  510. package/src/compiler/regexp-checker.ts +1142 -0
  511. package/src/compiler/relations.ts +5149 -0
  512. package/src/compiler/reparser.ts +1566 -0
  513. package/src/compiler/scanner.ts +2951 -0
  514. package/src/compiler/show-config.ts +239 -0
  515. package/src/compiler/side-state.ts +125 -0
  516. package/src/compiler/sourcemap.ts +366 -0
  517. package/src/compiler/spelling.ts +122 -0
  518. package/src/compiler/symbol-accessibility.ts +1071 -0
  519. package/src/compiler/symbol.ts +439 -0
  520. package/src/compiler/symlinks.ts +137 -0
  521. package/src/compiler/syntax-kind.ts +391 -0
  522. package/src/compiler/thread-entry.ts +191 -0
  523. package/src/compiler/timeline.ts +53 -0
  524. package/src/compiler/transformers/alias-references.ts +757 -0
  525. package/src/compiler/transformers/async-utilities.ts +335 -0
  526. package/src/compiler/transformers/async.ts +838 -0
  527. package/src/compiler/transformers/class-fields.ts +2967 -0
  528. package/src/compiler/transformers/class-utilities.ts +324 -0
  529. package/src/compiler/transformers/commonjs-module.ts +1621 -0
  530. package/src/compiler/transformers/const-enum-inliner.ts +50 -0
  531. package/src/compiler/transformers/declarations-diagnostics.ts +832 -0
  532. package/src/compiler/transformers/declarations-pseudo.ts +966 -0
  533. package/src/compiler/transformers/declarations-resolver.ts +249 -0
  534. package/src/compiler/transformers/declarations-syntactic.ts +1859 -0
  535. package/src/compiler/transformers/declarations-tracker.ts +269 -0
  536. package/src/compiler/transformers/declarations.ts +3120 -0
  537. package/src/compiler/transformers/decorator-metadata.ts +697 -0
  538. package/src/compiler/transformers/decorator-utilities.ts +283 -0
  539. package/src/compiler/transformers/destructuring.ts +708 -0
  540. package/src/compiler/transformers/downlevel.ts +50 -0
  541. package/src/compiler/transformers/emit-resolver.ts +258 -0
  542. package/src/compiler/transformers/es-decorators.ts +2682 -0
  543. package/src/compiler/transformers/exponentiation.ts +80 -0
  544. package/src/compiler/transformers/external-module-info.ts +412 -0
  545. package/src/compiler/transformers/for-await.ts +687 -0
  546. package/src/compiler/transformers/import-elision.ts +152 -0
  547. package/src/compiler/transformers/jsx-entities.ts +256 -0
  548. package/src/compiler/transformers/jsx.ts +824 -0
  549. package/src/compiler/transformers/legacy-decorators.ts +726 -0
  550. package/src/compiler/transformers/logical-assignment.ts +75 -0
  551. package/src/compiler/transformers/module-utilities.ts +42 -0
  552. package/src/compiler/transformers/module.ts +474 -0
  553. package/src/compiler/transformers/named-evaluation.ts +389 -0
  554. package/src/compiler/transformers/nullish-coalescing.ts +35 -0
  555. package/src/compiler/transformers/object-rest-spread.ts +577 -0
  556. package/src/compiler/transformers/optional-catch.ts +29 -0
  557. package/src/compiler/transformers/optional-chain.ts +246 -0
  558. package/src/compiler/transformers/reference-resolver.ts +1201 -0
  559. package/src/compiler/transformers/runtime-syntax.ts +942 -0
  560. package/src/compiler/transformers/subtree-facts.ts +245 -0
  561. package/src/compiler/transformers/syntax-facts.ts +353 -0
  562. package/src/compiler/transformers/tagged-template.ts +167 -0
  563. package/src/compiler/transformers/transformer.ts +56 -0
  564. package/src/compiler/transformers/type-eraser.ts +520 -0
  565. package/src/compiler/transformers/type-serialization.ts +374 -0
  566. package/src/compiler/transformers/using.ts +613 -0
  567. package/src/compiler/transformers/utilities.ts +419 -0
  568. package/src/compiler/transformers/visitor-base.ts +1601 -0
  569. package/src/compiler/transformers/visitor-hooks.ts +252 -0
  570. package/src/compiler/tsc-build.ts +1418 -0
  571. package/src/compiler/tsc-cli.ts +666 -0
  572. package/src/compiler/tsc-compile.ts +437 -0
  573. package/src/compiler/tsc-watch.ts +854 -0
  574. package/src/compiler/tsconfig.ts +1574 -0
  575. package/src/compiler/type-printer.ts +110 -0
  576. package/src/compiler/types.ts +115 -0
  577. package/src/compiler/unicode-identifiers.ts +212 -0
  578. package/src/compiler/unicode-properties.ts +537 -0
  579. package/src/compiler/vfs-match.ts +597 -0
  580. package/src/compiler/xxh3.ts +650 -0
  581. package/src/library/ast.generated.ts +1685 -0
  582. package/src/library/ast.ts +104 -0
  583. package/src/library/checker.ts +384 -0
  584. package/src/library/compiler-options.generated.ts +114 -0
  585. package/src/library/diagnostics.ts +72 -0
  586. package/src/library/disk.ts +73 -0
  587. package/src/library/enums.generated.ts +1024 -0
  588. package/src/library/errors.ts +26 -0
  589. package/src/library/host.ts +63 -0
  590. package/src/library/index.ts +71 -0
  591. package/src/library/nodes.ts +232 -0
  592. package/src/library/options.ts +449 -0
  593. package/src/library/parse.ts +63 -0
  594. package/src/library/program.ts +293 -0
  595. package/src/library/symbols.ts +15 -0
  596. package/src/library/types.ts +359 -0
@@ -0,0 +1,753 @@
1
+ // TypeScript syntax with runtime behavior: parameter properties, enums, namespaces and
2
+ // `import x = a.b`.
3
+ import { Block, CatchClause, PrivateIdentifier, getBody, getName, getParameters, ClassDeclaration, ClassExpression, ComputedPropertyName, ConstructorDeclaration, EnumDeclaration, EnumMember, ExpressionStatement, ExternalModuleReference, FunctionDeclaration, Identifier, ImportEqualsDeclaration, KeywordExpression, ModuleBlock, ModuleDeclaration, NodeList, NumericLiteral, ParameterDeclaration, PropertyAccessExpression, PropertyDeclaration, ShorthandPropertyAssignment, SourceFile, StringLiteral, TryStatement, CallExpression, ParenthesizedExpression, VariableDeclaration, VariableStatement, BindingPattern, BinaryExpression, } from '../ast.js';
4
+ import { ModuleKind, getEmitModuleKind, shouldPreserveConstEnums } from '../options.js';
5
+ import { isPrologueDirective } from '../printer/utilities.js';
6
+ import { AssignmentFactory, convertVariableDeclarationToAssignment, flattenDestructuringAssignment, } from './destructuring.js';
7
+ import { Transformer } from './transformer.js';
8
+ import { getInnermostModuleDeclaration, hasDecorators, hasSyntacticModifier, isIdentifierReference, isInstantiatedModule, isParameterPropertyDeclaration, isSameNode, } from './utilities.js';
9
+ const typeScriptModifiers = 128 /* ModifierFlags.Ambient */ |
10
+ 1 /* ModifierFlags.Public */ |
11
+ 2 /* ModifierFlags.Private */ |
12
+ 4 /* ModifierFlags.Protected */ |
13
+ 8 /* ModifierFlags.Readonly */ |
14
+ 64 /* ModifierFlags.Abstract */ |
15
+ 4096 /* ModifierFlags.Const */ |
16
+ 16 /* ModifierFlags.Override */ |
17
+ 8192 /* ModifierFlags.In */ |
18
+ 16384 /* ModifierFlags.Out */;
19
+ const exportDefault = 32 /* ModifierFlags.Export */ | 2048 /* ModifierFlags.Default */;
20
+ export class RuntimeSyntax extends Transformer {
21
+ options;
22
+ facts;
23
+ resolver;
24
+ parentNode;
25
+ currentNode;
26
+ currentSourceFile;
27
+ /** The source file, block, module block or case block declarations are in. */
28
+ currentScope;
29
+ /** The first declaration of each name in the current scope. */
30
+ firstDeclarations;
31
+ currentEnum;
32
+ currentNamespace;
33
+ namespaceExports;
34
+ constructor(context, options, facts, resolver) {
35
+ super(context);
36
+ this.options = options;
37
+ this.facts = facts;
38
+ this.resolver = resolver;
39
+ this.parentNode = undefined;
40
+ this.currentNode = undefined;
41
+ this.currentSourceFile = undefined;
42
+ this.currentScope = undefined;
43
+ this.firstDeclarations = undefined;
44
+ this.currentEnum = undefined;
45
+ this.currentNamespace = undefined;
46
+ this.namespaceExports = new NamespaceExportAssignments(this);
47
+ }
48
+ visit(node) {
49
+ const grandparent = this.parentNode;
50
+ this.parentNode = this.currentNode;
51
+ this.currentNode = node;
52
+ const savedScope = this.currentScope;
53
+ const savedDeclarations = this.firstDeclarations;
54
+ this.enterScope(node);
55
+ const result = this.visitWorker(node);
56
+ if (this.currentScope !== savedScope)
57
+ this.firstDeclarations = savedDeclarations;
58
+ this.currentScope = savedScope;
59
+ this.currentNode = this.parentNode;
60
+ this.parentNode = grandparent;
61
+ return result;
62
+ }
63
+ enterScope(node) {
64
+ switch (node.kind) {
65
+ case 307 /* SyntaxKind.SourceFile */:
66
+ this.currentScope = node;
67
+ if (node instanceof SourceFile)
68
+ this.currentSourceFile = node;
69
+ this.firstDeclarations = undefined;
70
+ break;
71
+ case 270 /* SyntaxKind.CaseBlock */:
72
+ case 269 /* SyntaxKind.ModuleBlock */:
73
+ case 242 /* SyntaxKind.Block */:
74
+ this.currentScope = node;
75
+ this.firstDeclarations = undefined;
76
+ break;
77
+ case 263 /* SyntaxKind.FunctionDeclaration */:
78
+ case 264 /* SyntaxKind.ClassDeclaration */:
79
+ case 244 /* SyntaxKind.VariableStatement */:
80
+ this.recordDeclarationInScope(node);
81
+ break;
82
+ }
83
+ return true;
84
+ }
85
+ visitWorker(node) {
86
+ if (!this.facts.containsTypeScript(node) && this.currentNamespace === undefined && this.currentEnum === undefined)
87
+ return node;
88
+ switch (node.kind) {
89
+ case 124 /* SyntaxKind.PublicKeyword */:
90
+ case 122 /* SyntaxKind.PrivateKeyword */:
91
+ case 123 /* SyntaxKind.ProtectedKeyword */:
92
+ case 148 /* SyntaxKind.ReadonlyKeyword */:
93
+ case 164 /* SyntaxKind.OverrideKeyword */:
94
+ return undefined;
95
+ case 267 /* SyntaxKind.EnumDeclaration */:
96
+ if (node instanceof EnumDeclaration)
97
+ return this.visitEnumDeclaration(node);
98
+ break;
99
+ case 268 /* SyntaxKind.ModuleDeclaration */:
100
+ if (node instanceof ModuleDeclaration)
101
+ return this.visitModuleDeclaration(node);
102
+ break;
103
+ case 264 /* SyntaxKind.ClassDeclaration */:
104
+ if (node instanceof ClassDeclaration)
105
+ return this.visitClassDeclaration(node);
106
+ break;
107
+ case 232 /* SyntaxKind.ClassExpression */:
108
+ if (node instanceof ClassExpression)
109
+ return this.factory.updateClassExpression(node, this.visitModifiers(this.extractModifiers(node.modifiers, ~exportDefault)), node.name, undefined, this.visitNodes(node.heritageClauses), this.classMembers(node.members));
110
+ break;
111
+ case 177 /* SyntaxKind.Constructor */:
112
+ if (node instanceof ConstructorDeclaration)
113
+ return this.visitConstructor(node);
114
+ break;
115
+ case 263 /* SyntaxKind.FunctionDeclaration */:
116
+ if (node instanceof FunctionDeclaration)
117
+ return this.visitFunctionDeclaration(node);
118
+ break;
119
+ case 244 /* SyntaxKind.VariableStatement */:
120
+ if (node instanceof VariableStatement)
121
+ return this.visitVariableStatement(node);
122
+ break;
123
+ case 279 /* SyntaxKind.ExportDeclaration */:
124
+ case 273 /* SyntaxKind.ImportDeclaration */:
125
+ case 274 /* SyntaxKind.ImportClause */:
126
+ // ES imports and exports are illegal in a namespace.
127
+ if (this.inNamespaceBody())
128
+ return undefined;
129
+ return this.visitEachChild(node);
130
+ case 272 /* SyntaxKind.ImportEqualsDeclaration */:
131
+ if (node instanceof ImportEqualsDeclaration) {
132
+ const external = node.moduleReference instanceof ExternalModuleReference;
133
+ if (this.currentNamespace !== undefined && this.currentScope !== undefined) {
134
+ const inBlock = this.currentScope.kind === 242 /* SyntaxKind.Block */;
135
+ if (external !== inBlock)
136
+ return undefined;
137
+ }
138
+ return this.visitImportEqualsDeclaration(node);
139
+ }
140
+ break;
141
+ case 79 /* SyntaxKind.Identifier */:
142
+ if (node instanceof Identifier && isIdentifierReference(node, this.parentNode))
143
+ return this.visitExpressionIdentifier(node);
144
+ return node;
145
+ case 304 /* SyntaxKind.ShorthandPropertyAssignment */:
146
+ if (node instanceof ShorthandPropertyAssignment)
147
+ return this.visitShorthandPropertyAssignment(node);
148
+ break;
149
+ }
150
+ return this.visitEachChild(node);
151
+ }
152
+ inNamespaceBody() {
153
+ return (this.currentNamespace !== undefined &&
154
+ this.currentScope !== undefined &&
155
+ this.currentScope.kind !== 242 /* SyntaxKind.Block */);
156
+ }
157
+ // Scopes
158
+ recordDeclarationInScope(node) {
159
+ if (node instanceof VariableStatement) {
160
+ const declarations = node.declarationList.declarations.nodes;
161
+ for (let i = 0; i < declarations.length; i++)
162
+ this.recordDeclarationInScope(declarations[i]);
163
+ return true;
164
+ }
165
+ if (node instanceof BindingPattern) {
166
+ const elements = node.elements.nodes;
167
+ for (let i = 0; i < elements.length; i++)
168
+ this.recordDeclarationInScope(elements[i]);
169
+ return true;
170
+ }
171
+ const name = getName(node);
172
+ if (name instanceof Identifier) {
173
+ if (this.firstDeclarations === undefined)
174
+ this.firstDeclarations = new Map();
175
+ if (!this.firstDeclarations.has(name.text))
176
+ this.firstDeclarations.set(name.text, node);
177
+ }
178
+ else if (name instanceof BindingPattern)
179
+ this.recordDeclarationInScope(name);
180
+ return true;
181
+ }
182
+ isFirstDeclarationInScope(node) {
183
+ const name = getName(node);
184
+ if (!(name instanceof Identifier) || this.firstDeclarations === undefined)
185
+ return false;
186
+ return this.firstDeclarations.get(name.text) === node;
187
+ }
188
+ isExportOfNamespace(node) {
189
+ return (this.currentNamespace !== undefined &&
190
+ (this.currentScope === undefined || this.currentScope.kind !== 242 /* SyntaxKind.Block */) &&
191
+ hasSyntacticModifier(node, 32 /* ModifierFlags.Export */));
192
+ }
193
+ // Names
194
+ /** The name a namespace or enum is referred to by inside its body. */
195
+ getNamespaceContainerName(node) {
196
+ return this.factory.createGeneratedNameForNode(node, 0, '', '');
197
+ }
198
+ getCurrentNamespaceName() {
199
+ const namespace = this.currentNamespace;
200
+ return namespace === undefined ? undefined : this.getNamespaceContainerName(namespace);
201
+ }
202
+ /** `ns.x` for an export of the current namespace, else the declaration's name. */
203
+ getExportQualifiedReferenceToDeclaration(node) {
204
+ if (this.isExportOfNamespace(node))
205
+ return this.factory.getExternalModuleOrNamespaceExportName(this.getCurrentNamespaceName(), node, 2 /* NameOptions.AllowSourceMaps */);
206
+ return this.factory.getDeclarationName(node, 2 /* NameOptions.AllowSourceMaps */);
207
+ }
208
+ /** `"A"` for the member `A`. */
209
+ getExpressionForPropertyName(member) {
210
+ const factory = this.factory;
211
+ const name = member.name;
212
+ if (name instanceof PrivateIdentifier)
213
+ return factory.createIdentifier('');
214
+ if (name instanceof ComputedPropertyName)
215
+ return this.visitNode(name.expression);
216
+ if (name instanceof Identifier)
217
+ return factory.createStringLiteral(name.text, 0 /* TokenFlags.None */);
218
+ if (name instanceof StringLiteral)
219
+ return factory.createStringLiteral(name.text, 0 /* TokenFlags.None */);
220
+ if (name instanceof NumericLiteral)
221
+ return factory.createNumericLiteral(name.text);
222
+ return name;
223
+ }
224
+ /** `E["A"]` */
225
+ getEnumQualifiedElement(enumDeclaration, member) {
226
+ const name = this.getExpressionForPropertyName(member);
227
+ const element = this.factory.createElementAccessExpression(this.getNamespaceContainerName(enumDeclaration), name);
228
+ this.context.assignCommentAndSourceMapRanges(element, name);
229
+ this.context.addEmitFlags(element, 384 /* EmitFlags.NoComments */ | 512 /* EmitFlags.NoNestedComments */ | 12 /* EmitFlags.NoSourceMap */ | 16 /* EmitFlags.NoNestedSourceMaps */);
230
+ return element;
231
+ }
232
+ // Enums and namespaces
233
+ /** Adds `var name;` before the first declaration of a name in its scope; true if added. */
234
+ addVarForDeclaration(statements, node) {
235
+ this.recordDeclarationInScope(node);
236
+ if (!this.isFirstDeclarationInScope(node))
237
+ return false;
238
+ const factory = this.factory;
239
+ const context = this.context;
240
+ const declaration = factory.createVariableDeclaration(factory.getLocalName(node, 2 /* NameOptions.AllowSourceMaps */), undefined, undefined, undefined);
241
+ const list = factory.createVariableDeclarationList(factory.createNodeList([declaration]), isSameNode(this.currentScope, this.currentSourceFile) ? 0 /* NodeFlags.None */ : 1 /* NodeFlags.Let */);
242
+ let mask = ~(typeScriptModifiers | 32768 /* ModifierFlags.Decorator */);
243
+ if (this.currentNamespace !== undefined)
244
+ mask &= ~32 /* ModifierFlags.Export */;
245
+ const statement = factory.createVariableStatement(this.extractModifiers(modifiersOf(node), mask), list);
246
+ context.setOriginal(declaration, node);
247
+ context.setOriginal(statement, node);
248
+ if (node instanceof EnumDeclaration)
249
+ context.setSourceMapRange(list, node.pos, node.end);
250
+ else
251
+ context.setSourceMapRange(statement, node.pos, node.end);
252
+ // Trailing comments of the declaration go after the function closure instead.
253
+ context.setCommentRange(statement, node.pos, node.end);
254
+ context.addEmitFlags(statement, 256 /* EmitFlags.NoTrailingComments */);
255
+ statements.push(statement);
256
+ return true;
257
+ }
258
+ /** `(function (name) { body })(name || (name = {}))`, with `ns.name` for namespace exports. */
259
+ createContainerStatement(node, nameNode, body, varAdded) {
260
+ const factory = this.factory;
261
+ const context = this.context;
262
+ let argument = factory.createLogicalOr(this.getExportQualifiedReferenceToDeclaration(node), factory.createAssignment(this.getExportQualifiedReferenceToDeclaration(node), factory.createObjectLiteral([], false)));
263
+ if (this.isExportOfNamespace(node))
264
+ argument = factory.createAssignment(factory.getLocalName(node, 2 /* NameOptions.AllowSourceMaps */), argument);
265
+ const parameterName = factory.createGeneratedNameForNode(node, 0, '', '');
266
+ context.setSourceMapRange(parameterName, nameNode.pos, nameNode.end);
267
+ const fn = factory.createFunctionExpression([factory.createParameter(parameterName)], body);
268
+ const call = factory.createCallExpression(factory.createParenthesizedExpression(fn), [argument]);
269
+ const statement = factory.createExpressionStatement(call);
270
+ context.setOriginal(statement, node);
271
+ context.assignCommentAndSourceMapRanges(statement, node);
272
+ // The leading comments went to `var name;`; System modules keep them at the top level.
273
+ if (varAdded &&
274
+ (getEmitModuleKind(this.options) !== ModuleKind.System || !isSameNode(this.currentScope, this.currentSourceFile)))
275
+ context.addEmitFlags(statement, 128 /* EmitFlags.NoLeadingComments */);
276
+ return statement;
277
+ }
278
+ visitEnumDeclaration(node) {
279
+ if (hasSyntacticModifier(node, 4096 /* ModifierFlags.Const */) && !shouldPreserveConstEnums(this.options))
280
+ return this.notEmitted(node);
281
+ const statements = [];
282
+ const varAdded = this.addVarForDeclaration(statements, node);
283
+ statements.push(this.createContainerStatement(node, node.name, this.transformEnumBody(node), varAdded));
284
+ return this.factory.createSyntaxList(statements);
285
+ }
286
+ transformEnumBody(node) {
287
+ const saved = this.currentEnum;
288
+ this.currentEnum = node;
289
+ // References to other members become `E.A`.
290
+ const visited = this.visitEachChild(node);
291
+ const enumDeclaration = visited instanceof EnumDeclaration ? visited : node;
292
+ const statements = [];
293
+ const members = enumDeclaration.members.nodes;
294
+ for (let i = 0; i < members.length; i++) {
295
+ const member = members[i];
296
+ if (member instanceof EnumMember)
297
+ statements.push(this.transformEnumMember(enumDeclaration, member));
298
+ }
299
+ this.currentEnum = saved;
300
+ return this.factory.created(new Block(new NodeList(enumDeclaration.members.pos, enumDeclaration.members.end, statements), true));
301
+ }
302
+ /** `E[E["A"] = 0] = "A";` or `E["A"] = "a";` */
303
+ transformEnumMember(enumDeclaration, member) {
304
+ const factory = this.factory;
305
+ const context = this.context;
306
+ const savedParent = this.parentNode;
307
+ this.parentNode = this.currentNode;
308
+ this.currentNode = member;
309
+ let expression = member.initializer;
310
+ let reverseMapping;
311
+ const parseNode = context.parseNode(member);
312
+ const value = parseNode !== undefined ? this.resolver.getEnumMemberValue(parseNode) : undefined;
313
+ if (value !== undefined && value.kind === 1 /* ConstantKind.Number */) {
314
+ expression = constantExpression(factory, value);
315
+ reverseMapping = true;
316
+ }
317
+ else if (value !== undefined && value.kind === 2 /* ConstantKind.String */) {
318
+ expression = constantExpression(factory, value);
319
+ reverseMapping = false;
320
+ }
321
+ else {
322
+ if (expression === undefined)
323
+ expression = factory.createVoidZero();
324
+ reverseMapping = value === undefined || !value.isSyntacticallyString;
325
+ }
326
+ let assignment = factory.createAssignment(this.getEnumQualifiedElement(enumDeclaration, member), expression);
327
+ if (reverseMapping)
328
+ assignment = factory.createAssignment(factory.createElementAccessExpression(this.getNamespaceContainerName(enumDeclaration), assignment), this.getExpressionForPropertyName(member));
329
+ const statement = factory.createExpressionStatement(assignment);
330
+ context.assignCommentAndSourceMapRanges(assignment, member);
331
+ context.assignCommentAndSourceMapRanges(statement, member);
332
+ this.currentNode = this.parentNode;
333
+ this.parentNode = savedParent;
334
+ return statement;
335
+ }
336
+ visitModuleDeclaration(node) {
337
+ const parseNode = this.context.parseNode(node);
338
+ if (parseNode instanceof ModuleDeclaration &&
339
+ !isInstantiatedModule(parseNode, shouldPreserveConstEnums(this.options)))
340
+ return this.notEmitted(node);
341
+ const statements = [];
342
+ const varAdded = this.addVarForDeclaration(statements, node);
343
+ statements.push(this.createContainerStatement(node, node.name, this.transformModuleBody(node), varAdded));
344
+ return this.factory.createSyntaxList(statements);
345
+ }
346
+ transformModuleBody(node) {
347
+ const context = this.context;
348
+ const savedNamespace = this.currentNamespace;
349
+ const savedScope = this.currentScope;
350
+ const savedDeclarations = this.firstDeclarations;
351
+ this.currentNamespace = node;
352
+ this.firstDeclarations = undefined;
353
+ context.startVariableEnvironment();
354
+ let statements = [];
355
+ let statementsPos = 0;
356
+ let statementsEnd = 0;
357
+ let blockPos = -1;
358
+ let blockEnd = -1;
359
+ const body = node.body;
360
+ if (body instanceof ModuleBlock) {
361
+ // Visited first, so that references to namespace members become `ns.x`.
362
+ const visited = this.visitEachChild(node);
363
+ const visitedBody = visited instanceof ModuleDeclaration ? visited.body : undefined;
364
+ if (visitedBody instanceof ModuleBlock) {
365
+ statements = visitedBody.statements.nodes;
366
+ statementsPos = visitedBody.statements.pos;
367
+ statementsEnd = visitedBody.statements.end;
368
+ blockPos = visitedBody.pos;
369
+ blockEnd = visitedBody.end;
370
+ }
371
+ }
372
+ else if (body !== undefined) {
373
+ statements = this.visitArray([body]);
374
+ const innermost = getInnermostModuleDeclaration(node).body;
375
+ if (innermost instanceof ModuleBlock) {
376
+ statementsPos = -1;
377
+ statementsEnd = innermost.statements.end;
378
+ }
379
+ }
380
+ this.currentNamespace = savedNamespace;
381
+ this.currentScope = savedScope;
382
+ this.firstDeclarations = savedDeclarations;
383
+ const merged = context.mergeEnvironment(statements, context.endVariableEnvironment());
384
+ const block = this.factory.created(new Block(new NodeList(statementsPos, statementsEnd, merged), true));
385
+ block.pos = blockPos;
386
+ block.end = blockEnd;
387
+ // `namespace a.b {}`: comments belong to the innermost namespace only.
388
+ if (!(body instanceof ModuleBlock))
389
+ context.addEmitFlags(block, 384 /* EmitFlags.NoComments */);
390
+ return block;
391
+ }
392
+ /** `var x = a.b;`, or `ns.x = a.b;` for a namespace export. */
393
+ visitImportEqualsDeclaration(node) {
394
+ if (node.moduleReference instanceof ExternalModuleReference)
395
+ return this.visitEachChild(node);
396
+ const factory = this.factory;
397
+ const context = this.context;
398
+ const reference = factory.createExpressionFromEntityName(node.moduleReference);
399
+ context.setEmitFlags(reference, 384 /* EmitFlags.NoComments */ | 512 /* EmitFlags.NoNestedComments */);
400
+ if (this.isExportOfNamespace(node)) {
401
+ const statement = this.createExportStatement(node.name, reference, node.pos, node.end, node.pos, node.end, node);
402
+ statement.pos = node.pos;
403
+ statement.end = node.end;
404
+ return statement;
405
+ }
406
+ const declaration = factory.createVariableDeclaration(node.name, undefined, undefined, reference);
407
+ context.setOriginal(declaration, node);
408
+ const statement = factory.createVariableStatement(this.extractModifiers(node.modifiers, 32 /* ModifierFlags.Export */), factory.createVariableDeclarationList(factory.createNodeList([declaration]), 0 /* NodeFlags.None */));
409
+ context.setOriginal(statement, node);
410
+ context.assignCommentAndSourceMapRanges(statement, node);
411
+ return statement;
412
+ }
413
+ /** In a namespace, `export var x = 1` becomes `ns.x = 1`. */
414
+ visitVariableStatement(node) {
415
+ if (!this.isExportOfNamespace(node))
416
+ return this.visitEachChild(node);
417
+ const expressions = [];
418
+ const declarations = node.declarationList.declarations.nodes;
419
+ for (let i = 0; i < declarations.length; i++) {
420
+ const declaration = declarations[i];
421
+ if (!(declaration instanceof VariableDeclaration) || declaration.initializer === undefined)
422
+ continue;
423
+ if (declaration.name instanceof BindingPattern)
424
+ expressions.push(flattenDestructuringAssignment(this, this.visitNode(declaration), false, this.namespaceExports));
425
+ else {
426
+ const assignment = convertVariableDeclarationToAssignment(this, declaration);
427
+ if (assignment !== undefined)
428
+ expressions.push(assignment);
429
+ }
430
+ }
431
+ if (expressions.length === 0)
432
+ return undefined;
433
+ const statement = this.factory.createExpressionStatement(this.factory.inlineExpressions(expressions));
434
+ this.context.setOriginal(statement, node);
435
+ this.context.assignCommentAndSourceMapRanges(statement, node);
436
+ // Visited as the new node, so that the assigned names become `ns.x`.
437
+ const saved = this.currentNode;
438
+ this.currentNode = statement;
439
+ const visited = this.visitEachChild(statement);
440
+ this.currentNode = saved;
441
+ return visited;
442
+ }
443
+ /** `ns.x = value` for a flattened destructuring of a namespace export. */
444
+ createNamespaceExportExpression(name, value, pos, end) {
445
+ const member = this.factory.getNamespaceMemberName(this.getCurrentNamespaceName(), name, 2 /* NameOptions.AllowSourceMaps */);
446
+ const expression = this.factory.createAssignment(member, value);
447
+ expression.pos = pos | 0;
448
+ expression.end = end | 0;
449
+ return expression;
450
+ }
451
+ visitFunctionDeclaration(node) {
452
+ if (!this.isExportOfNamespace(node))
453
+ return this.visitEachChild(node);
454
+ const name = this.visitNode(node.name);
455
+ const updated = this.factory.updateFunctionDeclaration(node, this.visitModifiers(this.extractModifiers(node.modifiers, ~32 /* ModifierFlags.Export */)), node.asteriskToken, name instanceof Identifier ? name : undefined, undefined, this.visitNodes(node.parameters), undefined, undefined, this.visitNode(node.body));
456
+ return this.factory.createSyntaxList([updated, this.createExportStatementForDeclaration(node)]);
457
+ }
458
+ visitClassDeclaration(node) {
459
+ const exported = this.isExportOfNamespace(node);
460
+ const modifiers = exported
461
+ ? this.visitModifiers(this.extractModifiers(node.modifiers, ~exportDefault))
462
+ : this.visitModifiers(node.modifiers);
463
+ const visitedName = this.visitNode(node.name);
464
+ let name = visitedName instanceof Identifier ? visitedName : undefined;
465
+ if (name === undefined &&
466
+ (exported || childIsDecorated(this.options.experimentalDecorators === true, node.members)))
467
+ name = this.factory.createGeneratedNameForNode(node, 0, '', '');
468
+ const updated = this.factory.updateClassDeclaration(node, modifiers, name, undefined, this.visitNodes(node.heritageClauses), this.classMembers(node.members));
469
+ if (!exported)
470
+ return updated;
471
+ return this.factory.createSyntaxList([updated, this.createExportStatementForDeclaration(node)]);
472
+ }
473
+ /** `ns.f = f;` after an exported function or class of a namespace. */
474
+ createExportStatementForDeclaration(node) {
475
+ const factory = this.factory;
476
+ const context = this.context;
477
+ const expression = factory.createAssignment(factory.getExternalModuleOrNamespaceExportName(this.getCurrentNamespaceName(), node, 2 /* NameOptions.AllowSourceMaps */), factory.getLocalName(node, 0 /* NameOptions.None */));
478
+ const name = getName(node);
479
+ context.setSourceMapRange(expression, name !== undefined ? name.pos : node.pos, node.end);
480
+ const statement = factory.createExpressionStatement(expression);
481
+ context.setSourceMapRange(statement, -1, node.end);
482
+ return statement;
483
+ }
484
+ createExportStatement(name, value, assignmentPos, assignmentEnd, statementPos, statementEnd, original) {
485
+ const factory = this.factory;
486
+ const context = this.context;
487
+ const assignment = factory.createAssignment(factory.getNamespaceMemberName(this.getCurrentNamespaceName(), name, 2 /* NameOptions.AllowSourceMaps */), value);
488
+ context.setOriginal(assignment, original);
489
+ context.setSourceMapRange(assignment, assignmentPos, assignmentEnd);
490
+ const statement = factory.createExpressionStatement(assignment);
491
+ context.setOriginal(statement, original);
492
+ context.setSourceMapRange(statement, statementPos, statementEnd);
493
+ return statement;
494
+ }
495
+ // References
496
+ visitShorthandPropertyAssignment(node) {
497
+ const factory = this.factory;
498
+ const name = node.name;
499
+ const reference = name instanceof Identifier ? this.visitExpressionIdentifier(name) : name;
500
+ if (reference !== name) {
501
+ let expression = reference;
502
+ if (node.objectAssignmentInitializer !== undefined) {
503
+ const equals = node.equalsToken !== undefined ? node.equalsToken : factory.createToken(63 /* SyntaxKind.EqualsToken */);
504
+ expression = factory.created(new BinaryExpression(undefined, expression, undefined, equals, this.visitNode(node.objectAssignmentInitializer)));
505
+ }
506
+ const updated = factory.createPropertyAssignment(name, expression);
507
+ updated.pos = node.pos;
508
+ updated.end = node.end;
509
+ this.context.setOriginal(updated, node);
510
+ this.context.assignCommentAndSourceMapRanges(updated, node);
511
+ return updated;
512
+ }
513
+ return factory.updateShorthandPropertyAssignment(node, undefined, name, undefined, undefined, node.equalsToken, this.visitNode(node.objectAssignmentInitializer));
514
+ }
515
+ /** `ns.x` for a reference to an export of an enclosing namespace or enum. */
516
+ visitExpressionIdentifier(node) {
517
+ if (this.currentEnum === undefined && this.currentNamespace === undefined)
518
+ return node;
519
+ const context = this.context;
520
+ if (context.hasAutoGenerateInfo(node) || (context.getEmitFlags(node) & 4096 /* EmitFlags.LocalName */) !== 0)
521
+ return node;
522
+ const location = context.mostOriginal(node);
523
+ if (!(location instanceof Identifier) || (location.flags & 16 /* NodeFlags.Synthesized */) !== 0)
524
+ return node;
525
+ const container = this.resolver.getReferencedExportContainer(location, false);
526
+ if (!(container instanceof EnumDeclaration || container instanceof ModuleDeclaration))
527
+ return node;
528
+ const member = this.factory.cloneIdentifier(node);
529
+ context.setEmitFlags(member, 384 /* EmitFlags.NoComments */ | 12 /* EmitFlags.NoSourceMap */);
530
+ const expression = this.factory.getNamespaceMemberName(this.getNamespaceContainerName(container), member, 2 /* NameOptions.AllowSourceMaps */);
531
+ context.assignCommentAndSourceMapRanges(expression, node);
532
+ return expression;
533
+ }
534
+ // Parameter properties
535
+ /** The visited members, with a field declaration for each parameter property first. */
536
+ classMembers(members) {
537
+ const visited = this.visitNodes(members);
538
+ const properties = parameterProperties(members);
539
+ if (properties.length === 0)
540
+ return visited;
541
+ const fields = [];
542
+ for (let i = 0; i < properties.length; i++) {
543
+ const name = properties[i].name;
544
+ if (!(name instanceof Identifier))
545
+ continue;
546
+ const field = this.factory.created(new PropertyDeclaration(undefined, this.factory.cloneIdentifier(name), undefined, undefined, undefined));
547
+ this.context.setOriginal(field, properties[i]);
548
+ fields.push(field);
549
+ }
550
+ if (fields.length === 0)
551
+ return visited;
552
+ return new NodeList(members.pos, members.end, fields.concat(visited.nodes));
553
+ }
554
+ visitConstructor(node) {
555
+ const modifiers = this.visitModifiers(node.modifiers);
556
+ const parameters = this.visitParameters(node.parameters);
557
+ const body = node.body;
558
+ const visitedBody = body instanceof Block && parameterPropertiesOf(node).length > 0
559
+ ? this.visitConstructorBody(body, node)
560
+ : this.visitFunctionBody(body);
561
+ return this.factory.updateConstructorDeclaration(node, modifiers, undefined, parameters, undefined, undefined, visitedBody);
562
+ }
563
+ visitConstructorBody(body, constructor) {
564
+ const factory = this.factory;
565
+ const context = this.context;
566
+ context.startVariableEnvironment();
567
+ const nodes = body.statements.nodes;
568
+ let prologueEnd = 0;
569
+ while (prologueEnd < nodes.length && isPrologueDirective(nodes[prologueEnd]))
570
+ prologueEnd++;
571
+ const statements = nodes.slice(0, prologueEnd);
572
+ const rest = nodes.slice(prologueEnd);
573
+ const assignments = [];
574
+ const properties = parameterPropertiesOf(constructor);
575
+ for (let i = 0; i < properties.length; i++) {
576
+ const name = properties[i].name;
577
+ if (!(name instanceof Identifier))
578
+ continue;
579
+ const propertyName = factory.cloneIdentifier(name);
580
+ propertyName.parent = name.parent;
581
+ context.addEmitFlags(propertyName, 384 /* EmitFlags.NoComments */ | 12 /* EmitFlags.NoSourceMap */);
582
+ const localName = factory.cloneIdentifier(name);
583
+ localName.parent = name.parent;
584
+ context.addEmitFlags(localName, 384 /* EmitFlags.NoComments */);
585
+ const assignment = factory.createExpressionStatement(factory.createAssignment(factory.created(new PropertyAccessExpression(factory.created(new KeywordExpression(109 /* SyntaxKind.ThisKeyword */)), undefined, propertyName, 0 /* NodeFlags.None */)), localName));
586
+ context.setOriginal(assignment, properties[i]);
587
+ context.addEmitFlags(assignment, 524288 /* EmitFlags.StartOnNewLine */);
588
+ assignments.push(assignment);
589
+ }
590
+ const superPath = findSuperStatementIndexPath(rest);
591
+ if (superPath.length > 0)
592
+ appendAll(statements, this.withInitializersAfterSuper(rest, superPath, 0, assignments));
593
+ else {
594
+ appendAll(statements, assignments);
595
+ appendAll(statements, this.visitArray(rest));
596
+ }
597
+ const merged = context.mergeEnvironment(statements, context.endVariableEnvironment());
598
+ const updated = factory.created(new Block(new NodeList(body.statements.pos, body.statements.end, merged), true));
599
+ context.setOriginal(updated, body);
600
+ updated.pos = body.pos;
601
+ updated.end = body.end;
602
+ return updated;
603
+ }
604
+ withInitializersAfterSuper(statements, superPath, depth, initializers) {
605
+ const index = superPath[depth] | 0;
606
+ const result = this.visitArray(statements.slice(0, index));
607
+ const superStatement = statements[index];
608
+ if (superStatement === undefined)
609
+ return result;
610
+ if (superStatement instanceof TryStatement) {
611
+ const tryStatement = superStatement;
612
+ const tryBlock = tryStatement.tryBlock;
613
+ const inner = this.withInitializersAfterSuper(tryBlock.statements.nodes, superPath, depth + 1, initializers);
614
+ const visitedCatch = this.visitNode(tryStatement.catchClause);
615
+ const visitedFinally = this.visitNode(tryStatement.finallyBlock);
616
+ const updated = this.factory.updateTryStatement(tryStatement, this.factory.updateBlock(tryBlock, new NodeList(tryBlock.statements.pos, tryBlock.statements.end, inner), tryBlock.multiLine), visitedCatch instanceof CatchClause ? visitedCatch : undefined, visitedFinally instanceof Block ? visitedFinally : undefined);
617
+ if (updated !== undefined)
618
+ result.push(updated);
619
+ }
620
+ else {
621
+ appendAll(result, this.visitArray([superStatement]));
622
+ appendAll(result, initializers);
623
+ }
624
+ appendAll(result, this.visitArray(statements.slice(index + 1)));
625
+ return result;
626
+ }
627
+ }
628
+ function appendAll(target, source) {
629
+ for (let i = 0; i < source.length; i++)
630
+ target.push(source[i]);
631
+ return target;
632
+ }
633
+ function parameterProperties(members) {
634
+ const nodes = members.nodes;
635
+ for (let i = 0; i < nodes.length; i++) {
636
+ const member = nodes[i];
637
+ if (member instanceof ConstructorDeclaration)
638
+ return parameterPropertiesOf(member);
639
+ }
640
+ return [];
641
+ }
642
+ function parameterPropertiesOf(constructor) {
643
+ const result = [];
644
+ const parameters = constructor.parameters.nodes;
645
+ for (let i = 0; i < parameters.length; i++) {
646
+ const parameter = parameters[i];
647
+ if (parameter instanceof ParameterDeclaration && isParameterPropertyDeclaration(parameter, constructor))
648
+ result.push(parameter);
649
+ }
650
+ return result;
651
+ }
652
+ /** Indexes of the `super()` statement, descending into `try` blocks; empty if there is none. */
653
+ function findSuperStatementIndexPath(statements) {
654
+ const path = [];
655
+ return findSuperStatement(statements, path) ? path : [];
656
+ }
657
+ function findSuperStatement(statements, path) {
658
+ for (let i = 0; i < statements.length; i++) {
659
+ const statement = statements[i];
660
+ if (isSuperCallStatement(statement)) {
661
+ path.push(i);
662
+ return true;
663
+ }
664
+ if (statement instanceof TryStatement) {
665
+ path.push(i);
666
+ if (findSuperStatement(statement.tryBlock.statements.nodes, path))
667
+ return true;
668
+ path.pop();
669
+ }
670
+ }
671
+ return false;
672
+ }
673
+ function isSuperCallStatement(statement) {
674
+ if (!(statement instanceof ExpressionStatement))
675
+ return false;
676
+ let expression = statement.expression;
677
+ while (expression instanceof ParenthesizedExpression)
678
+ expression = expression.expression;
679
+ return expression instanceof CallExpression && expression.expression.kind === 107 /* SyntaxKind.SuperKeyword */;
680
+ }
681
+ /** Whether a class member, or a parameter of one, has decorators that apply, as tsgo's `ChildIsDecorated`. */
682
+ function childIsDecorated(legacy, members) {
683
+ const nodes = members.nodes;
684
+ for (let i = 0; i < nodes.length; i++) {
685
+ const member = nodes[i];
686
+ if (hasDecorators(member) && memberCanBeDecorated(legacy, member))
687
+ return true;
688
+ if (legacy && hasDecoratedParameter(member))
689
+ return true;
690
+ }
691
+ return false;
692
+ }
693
+ function hasDecoratedParameter(member) {
694
+ if (member.kind !== 175 /* SyntaxKind.MethodDeclaration */ &&
695
+ member.kind !== 179 /* SyntaxKind.SetAccessor */ &&
696
+ member.kind !== 177 /* SyntaxKind.Constructor */)
697
+ return false;
698
+ const parameters = getParameters(member);
699
+ if (parameters === undefined || getBody(member) === undefined)
700
+ return false;
701
+ for (let j = 0; j < parameters.nodes.length; j++)
702
+ if (hasDecorators(parameters.nodes[j]))
703
+ return true;
704
+ return false;
705
+ }
706
+ function memberCanBeDecorated(legacy, member) {
707
+ if (legacy && getName(member) instanceof PrivateIdentifier)
708
+ return false;
709
+ switch (member.kind) {
710
+ case 173 /* SyntaxKind.PropertyDeclaration */:
711
+ return legacy || !hasSyntacticModifier(member, 64 /* ModifierFlags.Abstract */ | 128 /* ModifierFlags.Ambient */);
712
+ case 178 /* SyntaxKind.GetAccessor */:
713
+ case 179 /* SyntaxKind.SetAccessor */:
714
+ case 175 /* SyntaxKind.MethodDeclaration */:
715
+ return getBody(member) !== undefined;
716
+ }
717
+ return false;
718
+ }
719
+ /** Assigns flattened namespace exports as `ns.x = value`. */
720
+ class NamespaceExportAssignments extends AssignmentFactory {
721
+ transformer;
722
+ constructor(transformer) {
723
+ super();
724
+ this.transformer = transformer;
725
+ }
726
+ createAssignment(name, value, pos, end) {
727
+ return this.transformer.createNamespaceExportExpression(name, value, pos, end);
728
+ }
729
+ }
730
+ /** The literal for a constant: `1`, `-1`, `"a"`, `Infinity` or `NaN`. */
731
+ export function constantExpression(factory, value) {
732
+ if (value.kind === 2 /* ConstantKind.String */)
733
+ return factory.createStringLiteral(value.string, 0 /* TokenFlags.None */);
734
+ return numberExpression(factory, value.number);
735
+ }
736
+ function numberExpression(factory, value) {
737
+ if (value === Infinity)
738
+ return factory.createIdentifier('Infinity');
739
+ if (value === -Infinity)
740
+ return factory.createPrefixUnaryExpression(40 /* SyntaxKind.MinusToken */, factory.createIdentifier('Infinity'));
741
+ if (value !== value)
742
+ return factory.createIdentifier('NaN');
743
+ if (value < 0)
744
+ return factory.createPrefixUnaryExpression(40 /* SyntaxKind.MinusToken */, numberExpression(factory, -value));
745
+ return factory.createNumericLiteral(String(value));
746
+ }
747
+ function modifiersOf(node) {
748
+ if (node instanceof EnumDeclaration)
749
+ return node.modifiers;
750
+ if (node instanceof ModuleDeclaration)
751
+ return node.modifiers;
752
+ return undefined;
753
+ }