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,687 @@
1
+ // ES2018 async iteration: async generators become generators run by `__asyncGenerator`, and
2
+ // `for await` loops iterate `__asyncValues(x)` by hand, closing the iterator on early exit.
3
+ import {
4
+ ArrowFunction,
5
+ Block,
6
+ CatchClause,
7
+ ConstructorDeclaration,
8
+ ForInOrOfStatement,
9
+ ForStatement,
10
+ FunctionDeclaration,
11
+ FunctionExpression,
12
+ GetAccessorDeclaration,
13
+ Identifier,
14
+ IfStatement,
15
+ LabeledStatement,
16
+ MethodDeclaration,
17
+ ModifierFlags,
18
+ type ModifierList,
19
+ type Node,
20
+ NodeFlags,
21
+ type NodeList,
22
+ ParameterDeclaration,
23
+ ReturnStatement,
24
+ SetAccessorDeclaration,
25
+ SourceFile,
26
+ ThrowStatement,
27
+ TryStatement,
28
+ VariableDeclarationList,
29
+ YieldExpression,
30
+ AwaitExpression,
31
+ getBody,
32
+ getName,
33
+ getParameters,
34
+ } from '../ast.js';
35
+ import {
36
+ advancedAsyncSuperHelper,
37
+ asyncSuperHelper,
38
+ createAsyncDelegatorHelper,
39
+ createAsyncGeneratorHelper,
40
+ createAsyncValuesHelper,
41
+ createAwaitHelper,
42
+ } from '../printer/async-helpers.js';
43
+ import type { EmitContext } from '../printer/emit-context.js';
44
+ import { EmitFlags, GeneratedIdentifierFlags } from '../printer/emit-flags.js';
45
+ import { SyntaxKind } from '../syntax-kind.js';
46
+ import { FunctionFlags, SuperAccess, getFunctionFlags, isSimpleParameterList } from './async-utilities.js';
47
+ import { SubtreeFacts, type SyntaxFacts } from './syntax-facts.js';
48
+ import { Transformer } from './transformer.js';
49
+ import { VisitorBase } from './visitor-base.js';
50
+
51
+ const enum HierarchyFacts {
52
+ None = 0,
53
+ HasLexicalThis = 1 << 0,
54
+ IterationContainer = 1 << 1,
55
+ }
56
+
57
+ /** Visits subtrees without async iteration, tracking `super` accesses only. */
58
+ class FallbackVisitor extends VisitorBase {
59
+ readonly owner: AsyncIteration;
60
+
61
+ constructor(owner: AsyncIteration) {
62
+ super(owner.context);
63
+ this.owner = owner;
64
+ }
65
+
66
+ visit(node: Node): Node | undefined {
67
+ return this.owner.fallback(node);
68
+ }
69
+ }
70
+
71
+ export class AsyncIteration extends Transformer {
72
+ private readonly facts: SyntaxFacts;
73
+ private readonly superAccess: SuperAccess;
74
+ private readonly fallbackVisitor: FallbackVisitor;
75
+ private enclosingFunctionFlags: FunctionFlags;
76
+ private hierarchyFacts: HierarchyFacts;
77
+
78
+ constructor(context: EmitContext, facts: SyntaxFacts) {
79
+ super(context);
80
+ this.facts = facts;
81
+ this.superAccess = new SuperAccess(context);
82
+ this.fallbackVisitor = new FallbackVisitor(this);
83
+ this.enclosingFunctionFlags = FunctionFlags.Normal;
84
+ this.hierarchyFacts = HierarchyFacts.None;
85
+ }
86
+
87
+ fallback(node: Node): Node | undefined {
88
+ if (this.superAccess.capturedSuperProperties === undefined) return node;
89
+ switch (node.kind) {
90
+ case SyntaxKind.FunctionExpression:
91
+ case SyntaxKind.FunctionDeclaration:
92
+ case SyntaxKind.MethodDeclaration:
93
+ case SyntaxKind.GetAccessor:
94
+ case SyntaxKind.SetAccessor:
95
+ case SyntaxKind.Constructor:
96
+ return node;
97
+ }
98
+ this.superAccess.track(node);
99
+ return this.fallbackVisitor.visitEachChild(node);
100
+ }
101
+
102
+ private inAsyncGenerator(): boolean {
103
+ return (this.enclosingFunctionFlags & FunctionFlags.AsyncGenerator) === FunctionFlags.AsyncGenerator;
104
+ }
105
+
106
+ visit(node: Node): Node | undefined {
107
+ if (!this.facts.has(node, SubtreeFacts.ContainsForAwaitOrAsyncGenerator)) return this.fallback(node);
108
+ this.superAccess.track(node);
109
+ switch (node.kind) {
110
+ case SyntaxKind.SourceFile:
111
+ if (node instanceof SourceFile) return this.visitSourceFile(node);
112
+ break;
113
+ case SyntaxKind.AwaitExpression:
114
+ if (node instanceof AwaitExpression) return this.visitAwaitExpression(node);
115
+ break;
116
+ case SyntaxKind.YieldExpression:
117
+ if (node instanceof YieldExpression) return this.visitYieldExpression(node);
118
+ break;
119
+ case SyntaxKind.ReturnStatement:
120
+ if (node instanceof ReturnStatement) return this.visitReturnStatement(node);
121
+ break;
122
+ case SyntaxKind.LabeledStatement:
123
+ if (node instanceof LabeledStatement) return this.visitLabeledStatement(node);
124
+ break;
125
+ case SyntaxKind.DoStatement:
126
+ case SyntaxKind.WhileStatement:
127
+ case SyntaxKind.ForInStatement:
128
+ case SyntaxKind.ForStatement:
129
+ return this.visitWithFacts(node, HierarchyFacts.None, HierarchyFacts.IterationContainer);
130
+ case SyntaxKind.ForOfStatement:
131
+ if (node instanceof ForInOrOfStatement) return this.visitForOfStatement(node, undefined);
132
+ break;
133
+ case SyntaxKind.ArrowFunction:
134
+ return this.visitWithFacts(node, HierarchyFacts.IterationContainer, HierarchyFacts.None);
135
+ case SyntaxKind.Constructor:
136
+ case SyntaxKind.MethodDeclaration:
137
+ case SyntaxKind.GetAccessor:
138
+ case SyntaxKind.SetAccessor:
139
+ case SyntaxKind.FunctionDeclaration:
140
+ case SyntaxKind.FunctionExpression:
141
+ case SyntaxKind.ClassDeclaration:
142
+ case SyntaxKind.ClassExpression:
143
+ return this.visitWithFacts(node, HierarchyFacts.IterationContainer, HierarchyFacts.HasLexicalThis);
144
+ }
145
+ return this.visitEachChild(node);
146
+ }
147
+
148
+ private visitWithFacts(node: Node, exclude: HierarchyFacts, include: HierarchyFacts): Node {
149
+ const ancestorFacts = this.hierarchyFacts;
150
+ this.hierarchyFacts = (ancestorFacts & ~exclude) | include;
151
+ const result = this.visitScope(node);
152
+ this.hierarchyFacts = ancestorFacts;
153
+ return result;
154
+ }
155
+
156
+ private visitScope(node: Node): Node {
157
+ if (node instanceof ConstructorDeclaration) return this.visitConstructor(node as ConstructorDeclaration);
158
+ if (node instanceof MethodDeclaration) return this.visitMethodDeclaration(node as MethodDeclaration);
159
+ if (node instanceof GetAccessorDeclaration) return this.visitGetAccessor(node as GetAccessorDeclaration);
160
+ if (node instanceof SetAccessorDeclaration) return this.visitSetAccessor(node as SetAccessorDeclaration);
161
+ if (node instanceof FunctionDeclaration) return this.visitFunctionDeclaration(node as FunctionDeclaration);
162
+ if (node instanceof FunctionExpression) return this.visitFunctionExpression(node as FunctionExpression);
163
+ if (node instanceof ArrowFunction) return this.visitArrowFunction(node as ArrowFunction);
164
+ return this.visitEachChild(node);
165
+ }
166
+
167
+ private visitSourceFile(node: SourceFile): Node {
168
+ const ancestorFacts = this.hierarchyFacts;
169
+ this.hierarchyFacts = ancestorFacts & ~HierarchyFacts.IterationContainer;
170
+ const visited = this.visitEachChild(node);
171
+ const helpers = this.context.readEmitHelpers();
172
+ for (let i = 0; i < helpers.length; i++) this.context.addEmitHelper(visited, helpers[i]);
173
+ this.hierarchyFacts = ancestorFacts;
174
+ return visited;
175
+ }
176
+
177
+ /** `await x` in an async generator as `yield __await(x)`. */
178
+ private visitAwaitExpression(node: AwaitExpression): Node {
179
+ if (!this.inAsyncGenerator()) return this.visitEachChild(node);
180
+ const factory = this.factory;
181
+ const result = factory.created(
182
+ new YieldExpression(undefined, createAwaitHelper(factory, this.visitNode(node.expression)!)),
183
+ );
184
+ result.pos = node.pos;
185
+ result.end = node.end;
186
+ this.context.setOriginal(result, node);
187
+ return result;
188
+ }
189
+
190
+ /** `yield x` as `yield yield __await(x)`; `yield* x` as `yield __await(yield* __asyncDelegator(__asyncValues(x)))`. */
191
+ private visitYieldExpression(node: YieldExpression): Node {
192
+ if (!this.inAsyncGenerator()) return this.visitEachChild(node);
193
+ const factory = this.factory;
194
+ let inner: Node;
195
+ if (node.asteriskToken !== undefined) {
196
+ const expression = this.visitNode(node.expression)!;
197
+ const values = createAsyncValuesHelper(factory, expression);
198
+ values.pos = expression.pos;
199
+ values.end = expression.end;
200
+ const delegator = createAsyncDelegatorHelper(factory, values);
201
+ delegator.pos = expression.pos;
202
+ delegator.end = expression.end;
203
+ inner = createAwaitHelper(factory, factory.updateYieldExpression(node, node.asteriskToken, delegator));
204
+ } else
205
+ inner = this.createDownlevelAwait(
206
+ node.expression !== undefined ? this.visitNode(node.expression)! : factory.createVoidZero(),
207
+ );
208
+ const result = factory.created(new YieldExpression(undefined, inner));
209
+ result.pos = node.pos;
210
+ result.end = node.end;
211
+ this.context.setOriginal(result, node);
212
+ return result;
213
+ }
214
+
215
+ private visitReturnStatement(node: ReturnStatement): Node {
216
+ if (!this.inAsyncGenerator()) return this.visitEachChild(node);
217
+ const expression = node.expression !== undefined ? this.visitNode(node.expression)! : this.factory.createVoidZero();
218
+ return this.factory.updateReturnStatement(node, this.createDownlevelAwait(expression));
219
+ }
220
+
221
+ private visitLabeledStatement(node: LabeledStatement): Node | undefined {
222
+ if ((this.enclosingFunctionFlags & FunctionFlags.Async) === 0) return this.visitEachChild(node);
223
+ let innermost = node;
224
+ while (innermost.statement instanceof LabeledStatement) innermost = innermost.statement;
225
+ const statement = innermost.statement;
226
+ if (statement instanceof ForInOrOfStatement && statement.awaitModifier !== undefined)
227
+ return this.visitForOfStatement(statement, node);
228
+ return this.restoreEnclosingLabel(this.visitNode(statement)!, node);
229
+ }
230
+
231
+ private restoreEnclosingLabel(node: Node, outermost: LabeledStatement | undefined): Node {
232
+ if (outermost === undefined) return node;
233
+ const inner =
234
+ outermost.statement instanceof LabeledStatement ? this.restoreEnclosingLabel(node, outermost.statement) : node;
235
+ return this.factory.updateLabeledStatement(outermost, outermost.label, inner);
236
+ }
237
+
238
+ private visitForOfStatement(node: ForInOrOfStatement, outermost: LabeledStatement | undefined): Node {
239
+ const ancestorFacts = this.hierarchyFacts;
240
+ this.hierarchyFacts = ancestorFacts | HierarchyFacts.IterationContainer;
241
+ const result =
242
+ node.awaitModifier !== undefined
243
+ ? this.transformForAwaitOfStatement(node, outermost, ancestorFacts)
244
+ : this.restoreEnclosingLabel(this.visitEachChild(node), outermost);
245
+ this.hierarchyFacts = ancestorFacts;
246
+ return result;
247
+ }
248
+
249
+ private createDownlevelAwait(expression: Node): Node {
250
+ const factory = this.factory;
251
+ if ((this.enclosingFunctionFlags & FunctionFlags.Generator) !== 0)
252
+ return factory.created(new YieldExpression(undefined, createAwaitHelper(factory, expression)));
253
+ return factory.created(new AwaitExpression(expression));
254
+ }
255
+
256
+ /** The loop body: assigns the iterated value, clears `nonUserCode`, binds the loop variable. */
257
+ private convertForOfStatementHead(node: ForInOrOfStatement, boundValue: Node, nonUserCode: Identifier): Node {
258
+ const factory = this.factory;
259
+ const context = this.context;
260
+ const value = factory.createTempVariable(GeneratedIdentifierFlags.None);
261
+ context.addVariableDeclaration(value);
262
+ const valueStatement = factory.createExpressionStatement(factory.createAssignment(value, boundValue));
263
+ context.setSourceMapRange(valueStatement, node.expression.pos, node.expression.end);
264
+ const exitNonUserCode = factory.createExpressionStatement(
265
+ factory.createAssignment(nonUserCode, factory.createKeywordExpression(SyntaxKind.FalseKeyword)),
266
+ );
267
+ context.setSourceMapRange(exitNonUserCode, node.expression.pos, node.expression.end);
268
+ const statements: Node[] = [valueStatement, exitNonUserCode];
269
+ statements.push(this.visitNode(this.createForOfBindingStatement(node.initializer, value))!);
270
+ const statement = this.visitEmbeddedStatement(node.statement)!;
271
+ // Without a block body, tsgo leaves both ranges empty at the start of the file.
272
+ let pos = 0;
273
+ let end = 0;
274
+ let listPos = 0;
275
+ let listEnd = 0;
276
+ if (statement instanceof Block) {
277
+ const nodes = statement.statements.nodes;
278
+ for (let i = 0; i < nodes.length; i++) statements.push(nodes[i]);
279
+ pos = statement.pos;
280
+ end = statement.end;
281
+ listPos = statement.statements.pos;
282
+ listEnd = statement.statements.end;
283
+ } else statements.push(statement);
284
+ const block = factory.createBlock(statements, true);
285
+ block.statements.pos = listPos;
286
+ block.statements.end = listEnd;
287
+ block.pos = pos;
288
+ block.end = end;
289
+ return block;
290
+ }
291
+
292
+ private createForOfBindingStatement(node: Node, boundValue: Node): Node {
293
+ const factory = this.factory;
294
+ if (node instanceof VariableDeclarationList) {
295
+ const first = node.declarations.nodes[0];
296
+ const declaration = factory.createVariableDeclaration(getName(first)!, undefined, undefined, boundValue);
297
+ factory.cloneNode(first, declaration);
298
+ const statement = factory.createVariableStatement(
299
+ undefined,
300
+ factory.updateVariableDeclarationList(node, factory.createNodeList([declaration]), node.flags),
301
+ );
302
+ statement.pos = node.pos;
303
+ statement.end = node.end;
304
+ return statement;
305
+ }
306
+ const assignment = factory.createAssignment(node, boundValue);
307
+ assignment.pos = node.pos;
308
+ assignment.end = node.end;
309
+ const statement = factory.createExpressionStatement(assignment);
310
+ statement.pos = node.pos;
311
+ statement.end = node.end;
312
+ return statement;
313
+ }
314
+
315
+ private transformForAwaitOfStatement(
316
+ node: ForInOrOfStatement,
317
+ outermost: LabeledStatement | undefined,
318
+ ancestorFacts: HierarchyFacts,
319
+ ): Node {
320
+ const factory = this.factory;
321
+ const context = this.context;
322
+ const expression = this.visitNode(node.expression)!;
323
+ const iterator =
324
+ expression instanceof Identifier
325
+ ? factory.createGeneratedNameForNode(expression, GeneratedIdentifierFlags.None, '', '')
326
+ : factory.createTempVariable(GeneratedIdentifierFlags.None);
327
+ const result =
328
+ expression instanceof Identifier
329
+ ? factory.createGeneratedNameForNode(iterator, GeneratedIdentifierFlags.None, '', '')
330
+ : factory.createTempVariable(GeneratedIdentifierFlags.None);
331
+ const nonUserCode = factory.createTempVariable(GeneratedIdentifierFlags.None);
332
+ const done = factory.createTempVariable(GeneratedIdentifierFlags.None);
333
+ context.addVariableDeclaration(done);
334
+ const errorRecord = factory.createUniqueName('e', GeneratedIdentifierFlags.None);
335
+ const catchVariable = factory.createGeneratedNameForNode(errorRecord, GeneratedIdentifierFlags.None, '', '');
336
+ const returnMethod = factory.createTempVariable(GeneratedIdentifierFlags.None);
337
+ const callValues = createAsyncValuesHelper(factory, expression);
338
+ callValues.pos = node.expression.pos;
339
+ callValues.end = node.expression.end;
340
+ const callNext = factory.createCallExpression(
341
+ factory.createPropertyAccessExpression(iterator, factory.createIdentifier('next')),
342
+ [],
343
+ );
344
+ const getDone = factory.createPropertyAccessExpression(result, factory.createIdentifier('done'));
345
+ const getValue = factory.createPropertyAccessExpression(result, factory.createIdentifier('value'));
346
+ const callReturn = factory.createCallExpression(
347
+ factory.createPropertyAccessExpression(returnMethod, factory.createIdentifier('call')),
348
+ [iterator],
349
+ );
350
+ context.addVariableDeclaration(errorRecord);
351
+ context.addVariableDeclaration(returnMethod);
352
+
353
+ // In an outer loop, reset the error record on each iteration.
354
+ const initializer =
355
+ (ancestorFacts & HierarchyFacts.IterationContainer) !== 0
356
+ ? factory.inlineExpressions([factory.createAssignment(errorRecord, factory.createVoidZero()), callValues])!
357
+ : callValues;
358
+ const iteratorDeclaration = factory.createVariableDeclaration(iterator, undefined, undefined, initializer);
359
+ iteratorDeclaration.pos = node.expression.pos;
360
+ iteratorDeclaration.end = node.expression.end;
361
+ const declarations = factory.createVariableDeclarationList(
362
+ factory.createNodeList([
363
+ factory.createVariableDeclaration(
364
+ nonUserCode,
365
+ undefined,
366
+ undefined,
367
+ factory.createKeywordExpression(SyntaxKind.TrueKeyword),
368
+ ),
369
+ iteratorDeclaration,
370
+ factory.createVariableDeclaration(result, undefined, undefined, undefined),
371
+ ]),
372
+ NodeFlags.None,
373
+ );
374
+ declarations.pos = node.expression.pos;
375
+ declarations.end = node.expression.end;
376
+ const condition = factory.inlineExpressions([
377
+ factory.createAssignment(result, this.createDownlevelAwait(callNext)),
378
+ factory.createAssignment(done, getDone),
379
+ factory.createPrefixUnaryExpression(SyntaxKind.ExclamationToken, done),
380
+ ])!;
381
+ const incrementor = factory.createAssignment(nonUserCode, factory.createKeywordExpression(SyntaxKind.TrueKeyword));
382
+ const forStatement = factory.created(
383
+ new ForStatement(
384
+ declarations,
385
+ condition,
386
+ incrementor,
387
+ this.convertForOfStatementHead(node, getValue, nonUserCode),
388
+ ),
389
+ );
390
+ forStatement.pos = node.pos;
391
+ forStatement.end = node.end;
392
+ context.addEmitFlags(forStatement, EmitFlags.NoTokenTrailingSourceMaps);
393
+ context.setOriginal(forStatement, node);
394
+
395
+ const tryBlock = factory.createBlock([this.restoreEnclosingLabel(forStatement, outermost)], true);
396
+ // catch (e_1_1) { e_1 = { error: e_1_1 }; }
397
+ const catchBody = factory.createBlock(
398
+ [
399
+ factory.createExpressionStatement(
400
+ factory.createAssignment(
401
+ errorRecord,
402
+ factory.createObjectLiteral(
403
+ [factory.createPropertyAssignment(factory.createIdentifier('error'), catchVariable)],
404
+ false,
405
+ ),
406
+ ),
407
+ ),
408
+ ],
409
+ false,
410
+ );
411
+ context.addEmitFlags(catchBody, EmitFlags.SingleLine);
412
+ const catchClause = factory.created(
413
+ new CatchClause(factory.createVariableDeclaration(catchVariable, undefined, undefined, undefined), catchBody),
414
+ );
415
+ // if (!nonUserCode && !done && (returnMethod = iterator.return)) await returnMethod.call(iterator);
416
+ const closeCondition = factory.createBinaryExpression(
417
+ factory.createBinaryExpression(
418
+ factory.createPrefixUnaryExpression(SyntaxKind.ExclamationToken, nonUserCode),
419
+ SyntaxKind.AmpersandAmpersandToken,
420
+ factory.createPrefixUnaryExpression(SyntaxKind.ExclamationToken, done),
421
+ ),
422
+ SyntaxKind.AmpersandAmpersandToken,
423
+ factory.createAssignment(
424
+ returnMethod,
425
+ factory.createPropertyAccessExpression(iterator, factory.createIdentifier('return')),
426
+ ),
427
+ );
428
+ const close = factory.createIfStatement(
429
+ closeCondition,
430
+ factory.createExpressionStatement(this.createDownlevelAwait(callReturn)),
431
+ undefined,
432
+ );
433
+ context.addEmitFlags(close, EmitFlags.SingleLine);
434
+ // if (e_1) throw e_1.error;
435
+ const rethrow = factory.created(
436
+ new IfStatement(
437
+ errorRecord,
438
+ factory.created(
439
+ new ThrowStatement(factory.createPropertyAccessExpression(errorRecord, factory.createIdentifier('error'))),
440
+ ),
441
+ undefined,
442
+ ),
443
+ );
444
+ context.addEmitFlags(rethrow, EmitFlags.SingleLine);
445
+ const innerFinally = factory.createBlock([rethrow], false);
446
+ context.addEmitFlags(innerFinally, EmitFlags.SingleLine);
447
+ const innerTry = factory.created(new TryStatement(factory.createBlock([close], false), undefined, innerFinally));
448
+ return factory.created(new TryStatement(tryBlock, catchClause, factory.createBlock([innerTry], true)));
449
+ }
450
+
451
+ // Functions
452
+
453
+ private visitConstructor(node: ConstructorDeclaration): Node {
454
+ const saved = this.enclosingFunctionFlags;
455
+ this.enclosingFunctionFlags = getFunctionFlags(node);
456
+ const updated = this.factory.updateConstructorDeclaration(
457
+ node,
458
+ node.modifiers,
459
+ undefined,
460
+ this.visitParameters(node.parameters)!,
461
+ undefined,
462
+ undefined,
463
+ this.visitFunctionBody(node.body),
464
+ );
465
+ this.enclosingFunctionFlags = saved;
466
+ return updated;
467
+ }
468
+
469
+ private visitGetAccessor(node: GetAccessorDeclaration): Node {
470
+ const saved = this.enclosingFunctionFlags;
471
+ this.enclosingFunctionFlags = getFunctionFlags(node);
472
+ const updated = this.factory.updateGetAccessorDeclaration(
473
+ node,
474
+ node.modifiers,
475
+ this.visitNode(node.name)!,
476
+ undefined,
477
+ this.visitParameters(node.parameters)!,
478
+ undefined,
479
+ undefined,
480
+ this.visitFunctionBody(node.body),
481
+ );
482
+ this.enclosingFunctionFlags = saved;
483
+ return updated;
484
+ }
485
+
486
+ private visitSetAccessor(node: SetAccessorDeclaration): Node {
487
+ const saved = this.enclosingFunctionFlags;
488
+ this.enclosingFunctionFlags = getFunctionFlags(node);
489
+ const updated = this.factory.updateSetAccessorDeclaration(
490
+ node,
491
+ node.modifiers,
492
+ this.visitNode(node.name)!,
493
+ undefined,
494
+ this.visitParameters(node.parameters)!,
495
+ undefined,
496
+ undefined,
497
+ this.visitFunctionBody(node.body),
498
+ );
499
+ this.enclosingFunctionFlags = saved;
500
+ return updated;
501
+ }
502
+
503
+ /** Modifiers without `async` for generators, whose `async` moves to `__asyncGenerator`. */
504
+ private generatorModifiers(modifiers: ModifierList | undefined): ModifierList | undefined {
505
+ if ((this.enclosingFunctionFlags & FunctionFlags.Generator) === 0) return modifiers;
506
+ return this.extractModifiers(modifiers, ~ModifierFlags.Async);
507
+ }
508
+
509
+ private visitMethodDeclaration(node: MethodDeclaration): Node {
510
+ const saved = this.enclosingFunctionFlags;
511
+ this.enclosingFunctionFlags = getFunctionFlags(node);
512
+ const modifiers = this.generatorModifiers(node.modifiers);
513
+ const asteriskToken = (this.enclosingFunctionFlags & FunctionFlags.Async) !== 0 ? undefined : node.asteriskToken;
514
+ let parameters: NodeList;
515
+ let body: Node | undefined;
516
+ if (this.inAsyncGenerator()) {
517
+ parameters = this.transformAsyncGeneratorParameterList(node);
518
+ body = this.transformAsyncGeneratorBody(node);
519
+ } else {
520
+ parameters = this.visitParameters(node.parameters)!;
521
+ body = this.visitFunctionBody(node.body);
522
+ }
523
+ const updated = this.factory.updateMethodDeclaration(
524
+ node,
525
+ modifiers,
526
+ asteriskToken,
527
+ this.visitNode(node.name)!,
528
+ undefined,
529
+ undefined,
530
+ parameters,
531
+ undefined,
532
+ undefined,
533
+ body,
534
+ );
535
+ this.enclosingFunctionFlags = saved;
536
+ return updated;
537
+ }
538
+
539
+ private visitFunctionDeclaration(node: FunctionDeclaration): Node {
540
+ const saved = this.enclosingFunctionFlags;
541
+ this.enclosingFunctionFlags = getFunctionFlags(node);
542
+ const modifiers = this.generatorModifiers(node.modifiers);
543
+ const asteriskToken = (this.enclosingFunctionFlags & FunctionFlags.Async) !== 0 ? undefined : node.asteriskToken;
544
+ let parameters: NodeList;
545
+ let body: Node | undefined;
546
+ if (this.inAsyncGenerator()) {
547
+ parameters = this.transformAsyncGeneratorParameterList(node);
548
+ body = this.transformAsyncGeneratorBody(node);
549
+ } else {
550
+ parameters = this.visitParameters(node.parameters)!;
551
+ body = this.visitFunctionBody(node.body);
552
+ }
553
+ const updated = this.factory.updateFunctionDeclaration(
554
+ node,
555
+ modifiers,
556
+ asteriskToken,
557
+ node.name,
558
+ undefined,
559
+ parameters,
560
+ undefined,
561
+ undefined,
562
+ body,
563
+ );
564
+ this.enclosingFunctionFlags = saved;
565
+ return updated;
566
+ }
567
+
568
+ private visitFunctionExpression(node: FunctionExpression): Node {
569
+ const saved = this.enclosingFunctionFlags;
570
+ this.enclosingFunctionFlags = getFunctionFlags(node);
571
+ const modifiers = this.generatorModifiers(node.modifiers);
572
+ const asteriskToken = (this.enclosingFunctionFlags & FunctionFlags.Async) !== 0 ? undefined : node.asteriskToken;
573
+ let parameters: NodeList;
574
+ let body: Node;
575
+ if (this.inAsyncGenerator()) {
576
+ parameters = this.transformAsyncGeneratorParameterList(node);
577
+ body = this.transformAsyncGeneratorBody(node);
578
+ } else {
579
+ parameters = this.visitParameters(node.parameters)!;
580
+ body = this.visitFunctionBody(node.body)!;
581
+ }
582
+ const updated = this.factory.updateFunctionExpression(
583
+ node,
584
+ modifiers,
585
+ asteriskToken,
586
+ node.name,
587
+ undefined,
588
+ parameters,
589
+ undefined,
590
+ undefined,
591
+ body,
592
+ );
593
+ this.enclosingFunctionFlags = saved;
594
+ return updated;
595
+ }
596
+
597
+ private visitArrowFunction(node: ArrowFunction): Node {
598
+ const saved = this.enclosingFunctionFlags;
599
+ this.enclosingFunctionFlags = getFunctionFlags(node);
600
+ const updated = this.factory.updateArrowFunction(
601
+ node,
602
+ node.modifiers,
603
+ undefined,
604
+ this.visitParameters(node.parameters)!,
605
+ undefined,
606
+ undefined,
607
+ node.equalsGreaterThanToken,
608
+ this.visitFunctionBody(node.body)!,
609
+ );
610
+ this.enclosingFunctionFlags = saved;
611
+ return updated;
612
+ }
613
+
614
+ /** The visited parameters if simple, else placeholders up to the first initializer or rest, keeping `length`. */
615
+ private transformAsyncGeneratorParameterList(node: Node): NodeList {
616
+ const list = getParameters(node)!;
617
+ if (isSimpleParameterList(list.nodes)) return this.visitParameters(list)!;
618
+ const factory = this.factory;
619
+ const parameters: Node[] = [];
620
+ for (let i = 0; i < list.nodes.length; i++) {
621
+ const parameter = list.nodes[i] as ParameterDeclaration;
622
+ if (parameter.initializer !== undefined || parameter.dotDotDotToken !== undefined) break;
623
+ parameters.push(
624
+ factory.createParameter(
625
+ factory.createGeneratedNameForNode(parameter.name, GeneratedIdentifierFlags.ReservedInNestedScopes, '', ''),
626
+ ),
627
+ );
628
+ }
629
+ const result = factory.createNodeList(parameters);
630
+ result.pos = list.pos;
631
+ result.end = list.end;
632
+ return result;
633
+ }
634
+
635
+ private transformAsyncGeneratorBody(node: Node): Node {
636
+ const factory = this.factory;
637
+ const context = this.context;
638
+ const superAccess = this.superAccess;
639
+ const parameterList = getParameters(node)!;
640
+ const innerParameters = isSimpleParameterList(parameterList.nodes)
641
+ ? undefined
642
+ : this.visitParameters(parameterList);
643
+ const saved = superAccess.enter();
644
+ const body = getBody(node) as Block;
645
+ let asyncBody = factory.updateBlock(body, this.visitNodes(body.statements)!, body.multiLine);
646
+ asyncBody = factory.updateBlock(
647
+ asyncBody,
648
+ context.mergeEnvironmentList(asyncBody.statements, context.endVariableEnvironment()),
649
+ asyncBody.multiLine,
650
+ );
651
+ const emitSuperHelpers = superAccess.needsHelpers();
652
+ if (emitSuperHelpers) asyncBody = superAccess.visitNode(asyncBody) as Block;
653
+ const name = getName(node);
654
+ const generator = factory.created(
655
+ new FunctionExpression(
656
+ undefined,
657
+ factory.createToken(SyntaxKind.AsteriskToken),
658
+ name !== undefined
659
+ ? factory.createGeneratedNameForNode(name, GeneratedIdentifierFlags.None, '', '')
660
+ : undefined,
661
+ undefined,
662
+ innerParameters !== undefined ? innerParameters : factory.createNodeList([]),
663
+ undefined,
664
+ undefined,
665
+ asyncBody as Node,
666
+ ),
667
+ );
668
+ const returnStatement = factory.createReturnStatement(
669
+ createAsyncGeneratorHelper(factory, generator, (this.hierarchyFacts & HierarchyFacts.HasLexicalThis) !== 0),
670
+ );
671
+ context.startVariableEnvironment();
672
+ if (emitSuperHelpers && superAccess.capturedSuperProperties!.length > 0)
673
+ context.addInitializationStatement(superAccess.createSuperAccessVariableStatement());
674
+ const block = factory.updateBlock(
675
+ body,
676
+ factory.createNodeList(context.mergeEnvironment([returnStatement], context.endVariableEnvironment())),
677
+ body.multiLine,
678
+ );
679
+ if (emitSuperHelpers && superAccess.hasSuperElementAccess)
680
+ context.addEmitHelper(
681
+ block,
682
+ superAccess.hasSuperPropertyAssignment ? advancedAsyncSuperHelper : asyncSuperHelper,
683
+ );
684
+ superAccess.exit(saved);
685
+ return block;
686
+ }
687
+ }