tsc-ts 0.0.4 → 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 (584) hide show
  1. package/README.md +33 -1
  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 +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 +12862 -0
  382. package/src/compiler/astnav.ts +799 -0
  383. package/src/compiler/binder-utilities.ts +1392 -0
  384. package/src/compiler/binder.ts +2703 -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 +1194 -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 +359 -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 +3584 -0
  407. package/src/compiler/checker-heritage.ts +1233 -0
  408. package/src/compiler/checker-inference.ts +2576 -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 +1924 -0
  413. package/src/compiler/checker-literals.ts +61 -0
  414. package/src/compiler/checker-members.ts +2436 -0
  415. package/src/compiler/checker-modules.ts +2886 -0
  416. package/src/compiler/checker-narrowing.ts +3230 -0
  417. package/src/compiler/checker-object-literals.ts +575 -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 +2107 -0
  427. package/src/compiler/checker-symbols.ts +2150 -0
  428. package/src/compiler/checker-type-factory.ts +2579 -0
  429. package/src/compiler/checker-type-nodes.ts +1033 -0
  430. package/src/compiler/checker-type-operators.ts +2502 -0
  431. package/src/compiler/checker-types.ts +2340 -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 +1116 -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 +897 -0
  441. package/src/compiler/emitter.ts +434 -0
  442. package/src/compiler/encoder.ts +1945 -0
  443. package/src/compiler/file-include.ts +673 -0
  444. package/src/compiler/file-loader.ts +1528 -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 +2784 -0
  449. package/src/compiler/init.ts +141 -0
  450. package/src/compiler/instantiation.ts +894 -0
  451. package/src/compiler/jsdoc.ts +1386 -0
  452. package/src/compiler/link-tables.ts +98 -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 +1069 -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 +3425 -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 +1951 -0
  481. package/src/compiler/parallel-parse.ts +590 -0
  482. package/src/compiler/parse-thread.ts +140 -0
  483. package/src/compiler/parser.ts +7716 -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 +679 -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 +592 -0
  498. package/src/compiler/program-utilities.ts +435 -0
  499. package/src/compiler/program.ts +1419 -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 +1071 -0
  510. package/src/compiler/symbol.ts +439 -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 +832 -0
  523. package/src/compiler/transformers/declarations-pseudo.ts +966 -0
  524. package/src/compiler/transformers/declarations-resolver.ts +249 -0
  525. package/src/compiler/transformers/declarations-syntactic.ts +1859 -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 +1201 -0
  550. package/src/compiler/transformers/runtime-syntax.ts +942 -0
  551. package/src/compiler/transformers/subtree-facts.ts +245 -0
  552. package/src/compiler/transformers/syntax-facts.ts +353 -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 +1418 -0
  562. package/src/compiler/tsc-cli.ts +666 -0
  563. package/src/compiler/tsc-compile.ts +437 -0
  564. package/src/compiler/tsc-watch.ts +854 -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,245 @@
1
+ // Whether a subtree contains TypeScript-only syntax, computed as tsgo's subtree facts are.
2
+ // Transforms skip subtrees without it; that also decides how malformed code is emitted.
3
+ import {
4
+ ClassDeclaration,
5
+ ClassExpression,
6
+ ConstructorDeclaration,
7
+ ExportAssignment,
8
+ ExportDeclaration,
9
+ ExportSpecifier,
10
+ FunctionDeclaration,
11
+ GetAccessorDeclaration,
12
+ Identifier,
13
+ ImportClause,
14
+ ImportEqualsDeclaration,
15
+ ImportSpecifier,
16
+ MethodDeclaration,
17
+ ModifierFlags,
18
+ type Node,
19
+ NodeVisitor,
20
+ ParameterDeclaration,
21
+ PropertyDeclaration,
22
+ SetAccessorDeclaration,
23
+ VariableDeclaration,
24
+ VariableStatement,
25
+ ArrowFunction,
26
+ FunctionExpression,
27
+ CallExpression,
28
+ NewExpression,
29
+ TaggedTemplateExpression,
30
+ ExpressionWithTypeArguments,
31
+ JsxOpeningElement,
32
+ JsxSelfClosingElement,
33
+ HeritageClause,
34
+ getModifiers,
35
+ } from '../ast.js';
36
+ import { isTypeNodeKind } from '../printer/utilities.js';
37
+ import { SyntaxKind } from '../syntax-kind.js';
38
+
39
+ const enum Facts {
40
+ None = 0,
41
+ TypeScript = 1,
42
+ /** The node's own syntax decides; children aren't consulted. */
43
+ Final = 2,
44
+ }
45
+
46
+ /** Memoized `containsTypeScript` answers for one emit. */
47
+ export class TypeScriptFacts extends NodeVisitor {
48
+ private readonly cache: Map<Node, boolean>;
49
+ private found: boolean;
50
+
51
+ constructor() {
52
+ super();
53
+ this.cache = new Map<Node, boolean>();
54
+ this.found = false;
55
+ }
56
+
57
+ containsTypeScript(node: Node): boolean {
58
+ const cached = this.cache.get(node);
59
+ if (cached !== undefined) return cached;
60
+ const own = ownFacts(node);
61
+ let result = (own & Facts.TypeScript) !== 0;
62
+ if (!result && (own & Facts.Final) === 0) {
63
+ const saved = this.found;
64
+ this.found = false;
65
+ node.forEachChild(this);
66
+ result = this.found;
67
+ this.found = saved;
68
+ }
69
+ this.cache.set(node, result);
70
+ return result;
71
+ }
72
+
73
+ visitNode(node: Node): boolean {
74
+ if (this.containsTypeScript(node)) this.found = true;
75
+ return this.found;
76
+ }
77
+ }
78
+
79
+ function ambient(node: Node): boolean {
80
+ const modifiers = getModifiers(node);
81
+ return modifiers !== undefined && (modifiers.modifierFlags & ModifierFlags.Ambient) !== 0;
82
+ }
83
+
84
+ /** TypeScript syntax of the node itself, beyond what its children contribute. */
85
+ function ownFacts(node: Node): Facts {
86
+ const kind = node.kind;
87
+ if (isTypeNodeKind(kind) && kind !== SyntaxKind.ExpressionWithTypeArguments) return Facts.TypeScript;
88
+ switch (kind) {
89
+ case SyntaxKind.PublicKeyword:
90
+ case SyntaxKind.PrivateKeyword:
91
+ case SyntaxKind.ProtectedKeyword:
92
+ case SyntaxKind.ReadonlyKeyword:
93
+ case SyntaxKind.AbstractKeyword:
94
+ case SyntaxKind.DeclareKeyword:
95
+ case SyntaxKind.ConstKeyword:
96
+ case SyntaxKind.InKeyword:
97
+ case SyntaxKind.OutKeyword:
98
+ case SyntaxKind.OverrideKeyword:
99
+ case SyntaxKind.ExportKeyword:
100
+ case SyntaxKind.Decorator:
101
+ case SyntaxKind.EnumMember:
102
+ case SyntaxKind.EnumDeclaration:
103
+ case SyntaxKind.ModuleDeclaration:
104
+ case SyntaxKind.ShorthandPropertyAssignment:
105
+ case SyntaxKind.AsExpression:
106
+ case SyntaxKind.SatisfiesExpression:
107
+ case SyntaxKind.NonNullExpression:
108
+ case SyntaxKind.TypeAssertionExpression:
109
+ case SyntaxKind.InterfaceDeclaration:
110
+ case SyntaxKind.TypeAliasDeclaration:
111
+ case SyntaxKind.JSTypeAliasDeclaration:
112
+ case SyntaxKind.NamespaceExportDeclaration:
113
+ case SyntaxKind.CallSignature:
114
+ case SyntaxKind.ConstructSignature:
115
+ case SyntaxKind.IndexSignature:
116
+ case SyntaxKind.MethodSignature:
117
+ case SyntaxKind.PropertySignature:
118
+ case SyntaxKind.TypeParameter:
119
+ return Facts.TypeScript;
120
+ case SyntaxKind.VariableStatement:
121
+ return node instanceof VariableStatement && ambient(node) ? Facts.TypeScript : Facts.None;
122
+ case SyntaxKind.VariableDeclaration:
123
+ return node instanceof VariableDeclaration && (node.exclamationToken !== undefined || node.type !== undefined)
124
+ ? Facts.TypeScript
125
+ : Facts.None;
126
+ case SyntaxKind.Parameter:
127
+ if (node instanceof ParameterDeclaration)
128
+ return (node.name instanceof Identifier && node.name.text === 'this') ||
129
+ node.questionToken !== undefined ||
130
+ node.type !== undefined
131
+ ? Facts.TypeScript
132
+ : Facts.None;
133
+ break;
134
+ case SyntaxKind.FunctionDeclaration:
135
+ if (node instanceof FunctionDeclaration)
136
+ return node.body === undefined ||
137
+ ambient(node) ||
138
+ node.typeParameters !== undefined ||
139
+ node.type !== undefined ||
140
+ node.fullSignature !== undefined
141
+ ? Facts.TypeScript
142
+ : Facts.None;
143
+ break;
144
+ case SyntaxKind.ClassDeclaration:
145
+ if (node instanceof ClassDeclaration)
146
+ return ambient(node) || node.typeParameters !== undefined ? Facts.TypeScript : Facts.None;
147
+ break;
148
+ case SyntaxKind.ClassExpression:
149
+ if (node instanceof ClassExpression)
150
+ return ambient(node) || node.typeParameters !== undefined ? Facts.TypeScript : Facts.None;
151
+ break;
152
+ case SyntaxKind.HeritageClause:
153
+ if (node instanceof HeritageClause) {
154
+ if (node.token === SyntaxKind.ImplementsKeyword) return Facts.TypeScript;
155
+ return node.token === SyntaxKind.ExtendsKeyword ? Facts.None : Facts.Final;
156
+ }
157
+ break;
158
+ case SyntaxKind.ImportEqualsDeclaration:
159
+ if (node instanceof ImportEqualsDeclaration)
160
+ return node.isTypeOnly || node.moduleReference.kind !== SyntaxKind.ExternalModuleReference
161
+ ? Facts.TypeScript
162
+ : Facts.None;
163
+ break;
164
+ case SyntaxKind.ImportSpecifier:
165
+ return node instanceof ImportSpecifier && node.isTypeOnly ? Facts.TypeScript : Facts.None;
166
+ case SyntaxKind.ImportClause:
167
+ return node instanceof ImportClause && node.phaseModifier === SyntaxKind.TypeKeyword
168
+ ? Facts.TypeScript
169
+ : Facts.None;
170
+ case SyntaxKind.ExportAssignment:
171
+ return node instanceof ExportAssignment && node.isExportEquals ? Facts.TypeScript : Facts.None;
172
+ case SyntaxKind.ExportDeclaration:
173
+ return node instanceof ExportDeclaration && node.isTypeOnly ? Facts.TypeScript : Facts.None;
174
+ case SyntaxKind.ExportSpecifier:
175
+ return node instanceof ExportSpecifier && node.isTypeOnly ? Facts.TypeScript : Facts.None;
176
+ case SyntaxKind.Constructor:
177
+ if (node instanceof ConstructorDeclaration)
178
+ return node.body === undefined ||
179
+ node.typeParameters !== undefined ||
180
+ node.type !== undefined ||
181
+ node.fullSignature !== undefined
182
+ ? Facts.TypeScript
183
+ : Facts.None;
184
+ break;
185
+ case SyntaxKind.GetAccessor:
186
+ if (node instanceof GetAccessorDeclaration)
187
+ return node.body === undefined ||
188
+ node.typeParameters !== undefined ||
189
+ node.type !== undefined ||
190
+ node.fullSignature !== undefined
191
+ ? Facts.TypeScript
192
+ : Facts.None;
193
+ break;
194
+ case SyntaxKind.SetAccessor:
195
+ if (node instanceof SetAccessorDeclaration)
196
+ return node.body === undefined ||
197
+ node.typeParameters !== undefined ||
198
+ node.type !== undefined ||
199
+ node.fullSignature !== undefined
200
+ ? Facts.TypeScript
201
+ : Facts.None;
202
+ break;
203
+ case SyntaxKind.MethodDeclaration:
204
+ if (node instanceof MethodDeclaration)
205
+ return node.body === undefined ||
206
+ node.postfixToken !== undefined ||
207
+ node.typeParameters !== undefined ||
208
+ node.type !== undefined ||
209
+ node.fullSignature !== undefined
210
+ ? Facts.TypeScript
211
+ : Facts.None;
212
+ break;
213
+ case SyntaxKind.PropertyDeclaration:
214
+ return node instanceof PropertyDeclaration && (node.postfixToken !== undefined || node.type !== undefined)
215
+ ? Facts.TypeScript
216
+ : Facts.None;
217
+ case SyntaxKind.ArrowFunction:
218
+ return node instanceof ArrowFunction &&
219
+ (node.typeParameters !== undefined || node.type !== undefined || node.fullSignature !== undefined)
220
+ ? Facts.TypeScript
221
+ : Facts.None;
222
+ case SyntaxKind.FunctionExpression:
223
+ return node instanceof FunctionExpression &&
224
+ (node.typeParameters !== undefined || node.type !== undefined || node.fullSignature !== undefined)
225
+ ? Facts.TypeScript
226
+ : Facts.None;
227
+ case SyntaxKind.CallExpression:
228
+ return node instanceof CallExpression && node.typeArguments !== undefined ? Facts.TypeScript : Facts.None;
229
+ case SyntaxKind.NewExpression:
230
+ return node instanceof NewExpression && node.typeArguments !== undefined ? Facts.TypeScript : Facts.None;
231
+ case SyntaxKind.TaggedTemplateExpression:
232
+ return node instanceof TaggedTemplateExpression && node.typeArguments !== undefined
233
+ ? Facts.TypeScript
234
+ : Facts.None;
235
+ case SyntaxKind.ExpressionWithTypeArguments:
236
+ return node instanceof ExpressionWithTypeArguments && node.typeArguments !== undefined
237
+ ? Facts.TypeScript
238
+ : Facts.None;
239
+ case SyntaxKind.JsxOpeningElement:
240
+ return node instanceof JsxOpeningElement && node.typeArguments !== undefined ? Facts.TypeScript : Facts.None;
241
+ case SyntaxKind.JsxSelfClosingElement:
242
+ return node instanceof JsxSelfClosingElement && node.typeArguments !== undefined ? Facts.TypeScript : Facts.None;
243
+ }
244
+ return Facts.None;
245
+ }
@@ -0,0 +1,353 @@
1
+ // What syntax a subtree contains, computed as tsgo's subtree facts are. Downlevel transforms
2
+ // skip subtrees without the syntax they lower.
3
+ import {
4
+ BinaryExpression,
5
+ BindingElement,
6
+ BindingPattern,
7
+ CallExpression,
8
+ CatchClause,
9
+ ForInOrOfStatement,
10
+ FunctionDeclaration,
11
+ FunctionExpression,
12
+ Identifier,
13
+ MetaProperty,
14
+ MethodDeclaration,
15
+ ModifierFlags,
16
+ type ModifierList,
17
+ type Node,
18
+ NodeFlags,
19
+ NodeVisitor,
20
+ NoSubstitutionTemplateLiteral,
21
+ PropertyAccessExpression,
22
+ TemplateHead,
23
+ TemplateMiddle,
24
+ TemplateTail,
25
+ VariableDeclarationList,
26
+ getModifiers,
27
+ getName,
28
+ } from '../ast.js';
29
+ import { isTypeNodeKind } from '../printer/utilities.js';
30
+ import { SyntaxKind } from '../syntax-kind.js';
31
+ import { TokenFlags } from '../types.js';
32
+ import { getElementsOfBindingOrAssignmentPattern, getTargetOfBindingOrAssignmentElement } from './destructuring.js';
33
+
34
+ export const enum SubtreeFacts {
35
+ None = 0,
36
+ ContainsTypeScript = 1 << 0,
37
+ ContainsJsx = 1 << 1,
38
+ ContainsUsing = 1 << 2,
39
+ ContainsLogicalAssignments = 1 << 3,
40
+ ContainsNullishCoalescing = 1 << 4,
41
+ ContainsOptionalChaining = 1 << 5,
42
+ ContainsMissingCatchClauseVariable = 1 << 6,
43
+ /** A `...` in an object literal or object pattern somewhere inside; never cleared. */
44
+ ContainsESObjectRestOrSpread = 1 << 7,
45
+ ContainsForAwaitOrAsyncGenerator = 1 << 8,
46
+ ContainsAnyAwait = 1 << 9,
47
+ ContainsExponentiationOperator = 1 << 10,
48
+ ContainsLexicalThis = 1 << 11,
49
+ ContainsLexicalSuper = 1 << 12,
50
+ /** A `...` anywhere; cleared when leaving a binding pattern. */
51
+ ContainsRestOrSpread = 1 << 13,
52
+ /** A `{ ...x }`; cleared when leaving most scopes. */
53
+ ContainsObjectRestOrSpread = 1 << 14,
54
+ ContainsAwait = 1 << 15,
55
+ ContainsDynamicImport = 1 << 16,
56
+ ContainsClassFields = 1 << 17,
57
+ ContainsDecorators = 1 << 18,
58
+ ContainsIdentifier = 1 << 19,
59
+ ContainsPrivateIdentifierInExpression = 1 << 20,
60
+ ContainsInvalidTemplateEscape = 1 << 21,
61
+
62
+ ContainsLexicalThisOrSuper = ContainsLexicalThis | ContainsLexicalSuper,
63
+ }
64
+
65
+ // Facts that don't propagate out of a node to its parent.
66
+ const enum Exclusions {
67
+ None = 0,
68
+ ArrowFunction = SubtreeFacts.ContainsAwait | SubtreeFacts.ContainsObjectRestOrSpread,
69
+ Function = SubtreeFacts.ContainsLexicalThisOrSuper |
70
+ SubtreeFacts.ContainsAwait |
71
+ SubtreeFacts.ContainsObjectRestOrSpread,
72
+ Property = SubtreeFacts.ContainsLexicalThisOrSuper,
73
+ Module = SubtreeFacts.ContainsLexicalThisOrSuper,
74
+ ObjectRestOrSpread = SubtreeFacts.ContainsObjectRestOrSpread,
75
+ BindingPattern = SubtreeFacts.ContainsRestOrSpread,
76
+ }
77
+
78
+ /** Memoized subtree facts for one emit; synthesized nodes get theirs on first use. */
79
+ export class SyntaxFacts extends NodeVisitor {
80
+ private readonly cache: Map<Node, SubtreeFacts>;
81
+ private collected: SubtreeFacts;
82
+
83
+ constructor() {
84
+ super();
85
+ this.cache = new Map<Node, SubtreeFacts>();
86
+ this.collected = SubtreeFacts.None;
87
+ }
88
+
89
+ of(node: Node): SubtreeFacts {
90
+ const cached = this.cache.get(node);
91
+ if (cached !== undefined) return cached;
92
+ const facts = this.compute(node);
93
+ this.cache.set(node, facts);
94
+ return facts;
95
+ }
96
+
97
+ has(node: Node, facts: SubtreeFacts): boolean {
98
+ return (this.of(node) & facts) !== 0;
99
+ }
100
+
101
+ /** Whether the subtree has a `...` in a pattern or literal. */
102
+ hasRestOrSpread(node: Node): boolean {
103
+ return this.has(node, SubtreeFacts.ContainsRestOrSpread | SubtreeFacts.ContainsObjectRestOrSpread);
104
+ }
105
+
106
+ /** Whether the subtree has a `{ ...x }` in a pattern or literal, outside nested scopes. */
107
+ hasObjectRestOrSpread(node: Node): boolean {
108
+ return this.has(node, SubtreeFacts.ContainsObjectRestOrSpread);
109
+ }
110
+
111
+ /** The facts `node` contributes to its parent. */
112
+ propagate(node: Node | undefined): SubtreeFacts {
113
+ if (node === undefined) return SubtreeFacts.None;
114
+ const kind = node.kind;
115
+ if (isTypeNodeKind(kind) && kind !== SyntaxKind.ExpressionWithTypeArguments) return SubtreeFacts.ContainsTypeScript;
116
+ const facts = this.of(node);
117
+ switch (kind) {
118
+ case SyntaxKind.ArrowFunction:
119
+ return facts & ~Exclusions.ArrowFunction;
120
+ case SyntaxKind.FunctionDeclaration:
121
+ case SyntaxKind.FunctionExpression:
122
+ case SyntaxKind.Constructor:
123
+ return facts & ~Exclusions.Function;
124
+ case SyntaxKind.MethodDeclaration:
125
+ case SyntaxKind.GetAccessor:
126
+ case SyntaxKind.SetAccessor:
127
+ return (facts & ~Exclusions.Function) | this.propagate(getName(node));
128
+ case SyntaxKind.PropertyDeclaration:
129
+ return (facts & ~Exclusions.Property) | this.propagate(getName(node));
130
+ case SyntaxKind.ModuleDeclaration:
131
+ return facts & ~Exclusions.Module;
132
+ case SyntaxKind.ObjectLiteralExpression:
133
+ case SyntaxKind.VariableDeclarationList:
134
+ case SyntaxKind.CatchClause:
135
+ return facts & ~Exclusions.ObjectRestOrSpread;
136
+ case SyntaxKind.ObjectBindingPattern:
137
+ case SyntaxKind.ArrayBindingPattern:
138
+ return facts & ~Exclusions.BindingPattern;
139
+ }
140
+ return facts;
141
+ }
142
+
143
+ visitNode(node: Node): boolean {
144
+ this.collected |= this.propagate(node);
145
+ return false;
146
+ }
147
+
148
+ private children(node: Node): SubtreeFacts {
149
+ const saved = this.collected;
150
+ this.collected = SubtreeFacts.None;
151
+ node.forEachChild(this);
152
+ const facts = this.collected;
153
+ this.collected = saved;
154
+ return facts;
155
+ }
156
+
157
+ private compute(node: Node): SubtreeFacts {
158
+ switch (node.kind) {
159
+ case SyntaxKind.UsingKeyword:
160
+ return SubtreeFacts.ContainsUsing;
161
+ case SyntaxKind.AccessorKeyword:
162
+ case SyntaxKind.PrivateIdentifier:
163
+ return SubtreeFacts.ContainsClassFields;
164
+ case SyntaxKind.AsyncKeyword:
165
+ return SubtreeFacts.ContainsAnyAwait;
166
+ case SyntaxKind.SuperKeyword:
167
+ return SubtreeFacts.ContainsLexicalSuper;
168
+ case SyntaxKind.ThisKeyword:
169
+ return SubtreeFacts.ContainsLexicalThis;
170
+ case SyntaxKind.AsteriskAsteriskToken:
171
+ case SyntaxKind.AsteriskAsteriskEqualsToken:
172
+ return SubtreeFacts.ContainsExponentiationOperator;
173
+ case SyntaxKind.QuestionQuestionToken:
174
+ return SubtreeFacts.ContainsNullishCoalescing;
175
+ case SyntaxKind.QuestionDotToken:
176
+ return SubtreeFacts.ContainsOptionalChaining;
177
+ case SyntaxKind.QuestionQuestionEqualsToken:
178
+ case SyntaxKind.BarBarEqualsToken:
179
+ case SyntaxKind.AmpersandAmpersandEqualsToken:
180
+ return SubtreeFacts.ContainsLogicalAssignments;
181
+ case SyntaxKind.Identifier:
182
+ return SubtreeFacts.ContainsIdentifier;
183
+ case SyntaxKind.NoSubstitutionTemplateLiteral:
184
+ return node instanceof NoSubstitutionTemplateLiteral && invalidEscape(node.templateFlags)
185
+ ? SubtreeFacts.ContainsInvalidTemplateEscape
186
+ : SubtreeFacts.None;
187
+ case SyntaxKind.TemplateHead:
188
+ return node instanceof TemplateHead && invalidEscape(node.templateFlags)
189
+ ? SubtreeFacts.ContainsInvalidTemplateEscape
190
+ : SubtreeFacts.None;
191
+ case SyntaxKind.TemplateMiddle:
192
+ return node instanceof TemplateMiddle && invalidEscape(node.templateFlags)
193
+ ? SubtreeFacts.ContainsInvalidTemplateEscape
194
+ : SubtreeFacts.None;
195
+ case SyntaxKind.TemplateTail:
196
+ return node instanceof TemplateTail && invalidEscape(node.templateFlags)
197
+ ? SubtreeFacts.ContainsInvalidTemplateEscape
198
+ : SubtreeFacts.None;
199
+ case SyntaxKind.Decorator:
200
+ return this.children(node) | SubtreeFacts.ContainsTypeScript | SubtreeFacts.ContainsDecorators;
201
+ case SyntaxKind.ForInStatement:
202
+ case SyntaxKind.ForOfStatement:
203
+ return (
204
+ this.children(node) |
205
+ (node instanceof ForInOrOfStatement && node.awaitModifier !== undefined
206
+ ? SubtreeFacts.ContainsForAwaitOrAsyncGenerator
207
+ : SubtreeFacts.None)
208
+ );
209
+ case SyntaxKind.ReturnStatement:
210
+ case SyntaxKind.YieldExpression:
211
+ // Returns and yields in an ES2018 async generator are awaited.
212
+ return this.children(node) | SubtreeFacts.ContainsForAwaitOrAsyncGenerator;
213
+ case SyntaxKind.AwaitExpression:
214
+ return (
215
+ this.children(node) |
216
+ SubtreeFacts.ContainsAwait |
217
+ SubtreeFacts.ContainsAnyAwait |
218
+ SubtreeFacts.ContainsForAwaitOrAsyncGenerator
219
+ );
220
+ case SyntaxKind.CatchClause:
221
+ return (
222
+ this.children(node) |
223
+ (node instanceof CatchClause && node.variableDeclaration === undefined
224
+ ? SubtreeFacts.ContainsMissingCatchClauseVariable
225
+ : SubtreeFacts.None)
226
+ );
227
+ case SyntaxKind.VariableDeclarationList:
228
+ return (
229
+ this.children(node) |
230
+ (node instanceof VariableDeclarationList && (node.flags & NodeFlags.Using) !== 0
231
+ ? SubtreeFacts.ContainsUsing
232
+ : SubtreeFacts.None)
233
+ );
234
+ case SyntaxKind.ObjectBindingPattern:
235
+ case SyntaxKind.ArrayBindingPattern:
236
+ return this.bindingPattern(node as BindingPattern);
237
+ case SyntaxKind.BindingElement:
238
+ return (
239
+ this.children(node) |
240
+ (node instanceof BindingElement && node.dotDotDotToken !== undefined
241
+ ? SubtreeFacts.ContainsRestOrSpread
242
+ : SubtreeFacts.None)
243
+ );
244
+ case SyntaxKind.FunctionDeclaration:
245
+ return this.children(node) | asyncFacts(node, (node as FunctionDeclaration).asteriskToken !== undefined);
246
+ case SyntaxKind.FunctionExpression:
247
+ return this.children(node) | asyncFacts(node, (node as FunctionExpression).asteriskToken !== undefined);
248
+ case SyntaxKind.MethodDeclaration:
249
+ return this.children(node) | asyncFacts(node, (node as MethodDeclaration).asteriskToken !== undefined);
250
+ case SyntaxKind.ArrowFunction:
251
+ return this.children(node) | asyncFacts(node, false);
252
+ case SyntaxKind.PropertyDeclaration:
253
+ case SyntaxKind.ClassStaticBlockDeclaration:
254
+ return this.children(node) | SubtreeFacts.ContainsClassFields;
255
+ case SyntaxKind.BinaryExpression:
256
+ return this.children(node) | this.binaryFacts(node as BinaryExpression);
257
+ case SyntaxKind.PropertyAccessExpression:
258
+ return (
259
+ this.children(node) |
260
+ (node instanceof PropertyAccessExpression && !(node.name instanceof Identifier)
261
+ ? SubtreeFacts.ContainsPrivateIdentifierInExpression
262
+ : SubtreeFacts.None)
263
+ );
264
+ case SyntaxKind.CallExpression:
265
+ return (
266
+ this.children(node) |
267
+ (node instanceof CallExpression && node.expression.kind === SyntaxKind.ImportKeyword
268
+ ? SubtreeFacts.ContainsDynamicImport
269
+ : SubtreeFacts.None)
270
+ );
271
+ case SyntaxKind.MetaProperty:
272
+ return node instanceof MetaProperty ? this.propagate(node.name) & ~SubtreeFacts.ContainsIdentifier : 0;
273
+ case SyntaxKind.SpreadElement:
274
+ return this.children(node) | SubtreeFacts.ContainsRestOrSpread;
275
+ case SyntaxKind.SpreadAssignment:
276
+ return (
277
+ this.children(node) | SubtreeFacts.ContainsESObjectRestOrSpread | SubtreeFacts.ContainsObjectRestOrSpread
278
+ );
279
+ case SyntaxKind.JsxElement:
280
+ case SyntaxKind.JsxAttributes:
281
+ case SyntaxKind.JsxNamespacedName:
282
+ case SyntaxKind.JsxOpeningElement:
283
+ case SyntaxKind.JsxSelfClosingElement:
284
+ case SyntaxKind.JsxFragment:
285
+ case SyntaxKind.JsxOpeningFragment:
286
+ case SyntaxKind.JsxClosingFragment:
287
+ case SyntaxKind.JsxAttribute:
288
+ case SyntaxKind.JsxSpreadAttribute:
289
+ case SyntaxKind.JsxClosingElement:
290
+ case SyntaxKind.JsxExpression:
291
+ case SyntaxKind.JsxText:
292
+ return this.children(node) | SubtreeFacts.ContainsJsx;
293
+ }
294
+ return this.children(node);
295
+ }
296
+
297
+ private bindingPattern(node: BindingPattern): SubtreeFacts {
298
+ const elements = node.elements.nodes;
299
+ const object = node.kind === SyntaxKind.ObjectBindingPattern;
300
+ let facts = SubtreeFacts.None;
301
+ for (const child of elements) {
302
+ let element = this.propagate(child);
303
+ if ((element & SubtreeFacts.ContainsRestOrSpread) !== 0) {
304
+ element &= ~SubtreeFacts.ContainsRestOrSpread;
305
+ if (object) element |= SubtreeFacts.ContainsObjectRestOrSpread | SubtreeFacts.ContainsESObjectRestOrSpread;
306
+ }
307
+ facts |= element;
308
+ }
309
+ return facts;
310
+ }
311
+
312
+ private binaryFacts(node: BinaryExpression): SubtreeFacts {
313
+ const operator = node.operatorToken.kind;
314
+ if (operator === SyntaxKind.InKeyword && node.left.kind === SyntaxKind.PrivateIdentifier)
315
+ return SubtreeFacts.ContainsClassFields | SubtreeFacts.ContainsPrivateIdentifierInExpression;
316
+ if (
317
+ operator === SyntaxKind.EqualsToken &&
318
+ (node.left.kind === SyntaxKind.ObjectLiteralExpression || node.left.kind === SyntaxKind.ArrayLiteralExpression) &&
319
+ this.containsObjectRestOrSpread(node.left)
320
+ )
321
+ return SubtreeFacts.ContainsObjectRestOrSpread;
322
+ return SubtreeFacts.None;
323
+ }
324
+
325
+ /** Whether a pattern has an object rest element, at any depth of nested assignment patterns. */
326
+ containsObjectRestOrSpread(node: Node): boolean {
327
+ const facts = this.of(node);
328
+ if ((facts & SubtreeFacts.ContainsObjectRestOrSpread) !== 0) return true;
329
+ if ((facts & SubtreeFacts.ContainsESObjectRestOrSpread) === 0) return false;
330
+ // Nested spreads, as in `{ x: { a, ...b } = foo } = c`.
331
+ const elements = getElementsOfBindingOrAssignmentPattern(node);
332
+ for (const element of elements) {
333
+ const target = getTargetOfBindingOrAssignmentElement(element);
334
+ if (
335
+ target !== undefined &&
336
+ (target.kind === SyntaxKind.ObjectLiteralExpression || target.kind === SyntaxKind.ArrayLiteralExpression) &&
337
+ this.containsObjectRestOrSpread(target)
338
+ )
339
+ return true;
340
+ }
341
+ return false;
342
+ }
343
+ }
344
+
345
+ function invalidEscape(flags: TokenFlags): boolean {
346
+ return (flags & TokenFlags.ContainsInvalidEscape) !== 0;
347
+ }
348
+
349
+ function asyncFacts(node: Node, generator: boolean): SubtreeFacts {
350
+ const modifiers: ModifierList | undefined = getModifiers(node);
351
+ if (modifiers === undefined || (modifiers.modifierFlags & ModifierFlags.Async) === 0) return SubtreeFacts.None;
352
+ return generator ? SubtreeFacts.ContainsForAwaitOrAsyncGenerator : SubtreeFacts.ContainsAnyAwait;
353
+ }