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,253 @@
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 { ClusteredIntLinkTable } from '../link-tables.js';
37
+ import { isTypeNodeKind } from '../printer/utilities.js';
38
+ import { SyntaxKind } from '../syntax-kind.js';
39
+
40
+ const enum Facts {
41
+ None = 0,
42
+ TypeScript = 1,
43
+ /** The node's own syntax decides; children aren't consulted. */
44
+ Final = 2,
45
+ }
46
+
47
+ /** The answers `TypeScriptFacts.cache` stores; zero is unknown. */
48
+ const enum Answer {
49
+ No = 1,
50
+ Yes = 2,
51
+ }
52
+
53
+ /** Memoized `containsTypeScript` answers for one emit. */
54
+ export class TypeScriptFacts extends NodeVisitor {
55
+ /** The answer for each node, by node id. */
56
+ private readonly cache: ClusteredIntLinkTable;
57
+ private found: boolean;
58
+
59
+ constructor() {
60
+ super();
61
+ this.cache = new ClusteredIntLinkTable();
62
+ this.found = false;
63
+ }
64
+
65
+ containsTypeScript(node: Node): boolean {
66
+ const cached = this.cache.get(node.id);
67
+ if (cached !== 0) return cached === Answer.Yes;
68
+ const own = ownFacts(node);
69
+ let result = (own & Facts.TypeScript) !== 0;
70
+ if (!result && (own & Facts.Final) === 0) {
71
+ const saved = this.found;
72
+ this.found = false;
73
+ node.forEachChild(this);
74
+ result = this.found;
75
+ this.found = saved;
76
+ }
77
+ this.cache.set(node.id, result ? Answer.Yes : Answer.No);
78
+ return result;
79
+ }
80
+
81
+ visitNode(node: Node): boolean {
82
+ if (this.containsTypeScript(node)) this.found = true;
83
+ return this.found;
84
+ }
85
+ }
86
+
87
+ function ambient(node: Node): boolean {
88
+ const modifiers = getModifiers(node);
89
+ return modifiers !== undefined && (modifiers.modifierFlags & ModifierFlags.Ambient) !== 0;
90
+ }
91
+
92
+ /** TypeScript syntax of the node itself, beyond what its children contribute. */
93
+ function ownFacts(node: Node): Facts {
94
+ const kind = node.kind;
95
+ if (isTypeNodeKind(kind) && kind !== SyntaxKind.ExpressionWithTypeArguments) return Facts.TypeScript;
96
+ switch (kind) {
97
+ case SyntaxKind.PublicKeyword:
98
+ case SyntaxKind.PrivateKeyword:
99
+ case SyntaxKind.ProtectedKeyword:
100
+ case SyntaxKind.ReadonlyKeyword:
101
+ case SyntaxKind.AbstractKeyword:
102
+ case SyntaxKind.DeclareKeyword:
103
+ case SyntaxKind.ConstKeyword:
104
+ case SyntaxKind.InKeyword:
105
+ case SyntaxKind.OutKeyword:
106
+ case SyntaxKind.OverrideKeyword:
107
+ case SyntaxKind.ExportKeyword:
108
+ case SyntaxKind.Decorator:
109
+ case SyntaxKind.EnumMember:
110
+ case SyntaxKind.EnumDeclaration:
111
+ case SyntaxKind.ModuleDeclaration:
112
+ case SyntaxKind.ShorthandPropertyAssignment:
113
+ case SyntaxKind.AsExpression:
114
+ case SyntaxKind.SatisfiesExpression:
115
+ case SyntaxKind.NonNullExpression:
116
+ case SyntaxKind.TypeAssertionExpression:
117
+ case SyntaxKind.InterfaceDeclaration:
118
+ case SyntaxKind.TypeAliasDeclaration:
119
+ case SyntaxKind.JSTypeAliasDeclaration:
120
+ case SyntaxKind.NamespaceExportDeclaration:
121
+ case SyntaxKind.CallSignature:
122
+ case SyntaxKind.ConstructSignature:
123
+ case SyntaxKind.IndexSignature:
124
+ case SyntaxKind.MethodSignature:
125
+ case SyntaxKind.PropertySignature:
126
+ case SyntaxKind.TypeParameter:
127
+ return Facts.TypeScript;
128
+ case SyntaxKind.VariableStatement:
129
+ return node instanceof VariableStatement && ambient(node) ? Facts.TypeScript : Facts.None;
130
+ case SyntaxKind.VariableDeclaration:
131
+ return node instanceof VariableDeclaration && (node.exclamationToken !== undefined || node.type !== undefined)
132
+ ? Facts.TypeScript
133
+ : Facts.None;
134
+ case SyntaxKind.Parameter:
135
+ if (node instanceof ParameterDeclaration)
136
+ return (node.name instanceof Identifier && node.name.text === 'this') ||
137
+ node.questionToken !== undefined ||
138
+ node.type !== undefined
139
+ ? Facts.TypeScript
140
+ : Facts.None;
141
+ break;
142
+ case SyntaxKind.FunctionDeclaration:
143
+ if (node instanceof FunctionDeclaration)
144
+ return node.body === undefined ||
145
+ ambient(node) ||
146
+ node.typeParameters !== undefined ||
147
+ node.type !== undefined ||
148
+ node.fullSignature !== undefined
149
+ ? Facts.TypeScript
150
+ : Facts.None;
151
+ break;
152
+ case SyntaxKind.ClassDeclaration:
153
+ if (node instanceof ClassDeclaration)
154
+ return ambient(node) || node.typeParameters !== undefined ? Facts.TypeScript : Facts.None;
155
+ break;
156
+ case SyntaxKind.ClassExpression:
157
+ if (node instanceof ClassExpression)
158
+ return ambient(node) || node.typeParameters !== undefined ? Facts.TypeScript : Facts.None;
159
+ break;
160
+ case SyntaxKind.HeritageClause:
161
+ if (node instanceof HeritageClause) {
162
+ if (node.token === SyntaxKind.ImplementsKeyword) return Facts.TypeScript;
163
+ return node.token === SyntaxKind.ExtendsKeyword ? Facts.None : Facts.Final;
164
+ }
165
+ break;
166
+ case SyntaxKind.ImportEqualsDeclaration:
167
+ if (node instanceof ImportEqualsDeclaration)
168
+ return node.isTypeOnly || node.moduleReference.kind !== SyntaxKind.ExternalModuleReference
169
+ ? Facts.TypeScript
170
+ : Facts.None;
171
+ break;
172
+ case SyntaxKind.ImportSpecifier:
173
+ return node instanceof ImportSpecifier && node.isTypeOnly ? Facts.TypeScript : Facts.None;
174
+ case SyntaxKind.ImportClause:
175
+ return node instanceof ImportClause && node.phaseModifier === SyntaxKind.TypeKeyword
176
+ ? Facts.TypeScript
177
+ : Facts.None;
178
+ case SyntaxKind.ExportAssignment:
179
+ return node instanceof ExportAssignment && node.isExportEquals ? Facts.TypeScript : Facts.None;
180
+ case SyntaxKind.ExportDeclaration:
181
+ return node instanceof ExportDeclaration && node.isTypeOnly ? Facts.TypeScript : Facts.None;
182
+ case SyntaxKind.ExportSpecifier:
183
+ return node instanceof ExportSpecifier && node.isTypeOnly ? Facts.TypeScript : Facts.None;
184
+ case SyntaxKind.Constructor:
185
+ if (node instanceof ConstructorDeclaration)
186
+ return node.body === undefined ||
187
+ node.typeParameters !== undefined ||
188
+ node.type !== undefined ||
189
+ node.fullSignature !== undefined
190
+ ? Facts.TypeScript
191
+ : Facts.None;
192
+ break;
193
+ case SyntaxKind.GetAccessor:
194
+ if (node instanceof GetAccessorDeclaration)
195
+ return node.body === undefined ||
196
+ node.typeParameters !== undefined ||
197
+ node.type !== undefined ||
198
+ node.fullSignature !== undefined
199
+ ? Facts.TypeScript
200
+ : Facts.None;
201
+ break;
202
+ case SyntaxKind.SetAccessor:
203
+ if (node instanceof SetAccessorDeclaration)
204
+ return node.body === undefined ||
205
+ node.typeParameters !== undefined ||
206
+ node.type !== undefined ||
207
+ node.fullSignature !== undefined
208
+ ? Facts.TypeScript
209
+ : Facts.None;
210
+ break;
211
+ case SyntaxKind.MethodDeclaration:
212
+ if (node instanceof MethodDeclaration)
213
+ return node.body === undefined ||
214
+ node.postfixToken !== undefined ||
215
+ node.typeParameters !== undefined ||
216
+ node.type !== undefined ||
217
+ node.fullSignature !== undefined
218
+ ? Facts.TypeScript
219
+ : Facts.None;
220
+ break;
221
+ case SyntaxKind.PropertyDeclaration:
222
+ return node instanceof PropertyDeclaration && (node.postfixToken !== undefined || node.type !== undefined)
223
+ ? Facts.TypeScript
224
+ : Facts.None;
225
+ case SyntaxKind.ArrowFunction:
226
+ return node instanceof ArrowFunction &&
227
+ (node.typeParameters !== undefined || node.type !== undefined || node.fullSignature !== undefined)
228
+ ? Facts.TypeScript
229
+ : Facts.None;
230
+ case SyntaxKind.FunctionExpression:
231
+ return node instanceof FunctionExpression &&
232
+ (node.typeParameters !== undefined || node.type !== undefined || node.fullSignature !== undefined)
233
+ ? Facts.TypeScript
234
+ : Facts.None;
235
+ case SyntaxKind.CallExpression:
236
+ return node instanceof CallExpression && node.typeArguments !== undefined ? Facts.TypeScript : Facts.None;
237
+ case SyntaxKind.NewExpression:
238
+ return node instanceof NewExpression && node.typeArguments !== undefined ? Facts.TypeScript : Facts.None;
239
+ case SyntaxKind.TaggedTemplateExpression:
240
+ return node instanceof TaggedTemplateExpression && node.typeArguments !== undefined
241
+ ? Facts.TypeScript
242
+ : Facts.None;
243
+ case SyntaxKind.ExpressionWithTypeArguments:
244
+ return node instanceof ExpressionWithTypeArguments && node.typeArguments !== undefined
245
+ ? Facts.TypeScript
246
+ : Facts.None;
247
+ case SyntaxKind.JsxOpeningElement:
248
+ return node instanceof JsxOpeningElement && node.typeArguments !== undefined ? Facts.TypeScript : Facts.None;
249
+ case SyntaxKind.JsxSelfClosingElement:
250
+ return node instanceof JsxSelfClosingElement && node.typeArguments !== undefined ? Facts.TypeScript : Facts.None;
251
+ }
252
+ return Facts.None;
253
+ }
@@ -0,0 +1,358 @@
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 { ClusteredIntLinkTable } from '../link-tables.js';
30
+ import { isTypeNodeKind } from '../printer/utilities.js';
31
+ import { SyntaxKind } from '../syntax-kind.js';
32
+ import { TokenFlags } from '../types.js';
33
+ import { getElementsOfBindingOrAssignmentPattern, getTargetOfBindingOrAssignmentElement } from './destructuring.js';
34
+
35
+ export const enum SubtreeFacts {
36
+ None = 0,
37
+ ContainsTypeScript = 1 << 0,
38
+ ContainsJsx = 1 << 1,
39
+ ContainsUsing = 1 << 2,
40
+ ContainsLogicalAssignments = 1 << 3,
41
+ ContainsNullishCoalescing = 1 << 4,
42
+ ContainsOptionalChaining = 1 << 5,
43
+ ContainsMissingCatchClauseVariable = 1 << 6,
44
+ /** A `...` in an object literal or object pattern somewhere inside; never cleared. */
45
+ ContainsESObjectRestOrSpread = 1 << 7,
46
+ ContainsForAwaitOrAsyncGenerator = 1 << 8,
47
+ ContainsAnyAwait = 1 << 9,
48
+ ContainsExponentiationOperator = 1 << 10,
49
+ ContainsLexicalThis = 1 << 11,
50
+ ContainsLexicalSuper = 1 << 12,
51
+ /** A `...` anywhere; cleared when leaving a binding pattern. */
52
+ ContainsRestOrSpread = 1 << 13,
53
+ /** A `{ ...x }`; cleared when leaving most scopes. */
54
+ ContainsObjectRestOrSpread = 1 << 14,
55
+ ContainsAwait = 1 << 15,
56
+ ContainsDynamicImport = 1 << 16,
57
+ ContainsClassFields = 1 << 17,
58
+ ContainsDecorators = 1 << 18,
59
+ ContainsIdentifier = 1 << 19,
60
+ ContainsPrivateIdentifierInExpression = 1 << 20,
61
+ ContainsInvalidTemplateEscape = 1 << 21,
62
+
63
+ ContainsLexicalThisOrSuper = ContainsLexicalThis | ContainsLexicalSuper,
64
+ }
65
+
66
+ // Facts that don't propagate out of a node to its parent.
67
+ const enum Exclusions {
68
+ None = 0,
69
+ ArrowFunction = SubtreeFacts.ContainsAwait | SubtreeFacts.ContainsObjectRestOrSpread,
70
+ Function = SubtreeFacts.ContainsLexicalThisOrSuper |
71
+ SubtreeFacts.ContainsAwait |
72
+ SubtreeFacts.ContainsObjectRestOrSpread,
73
+ Property = SubtreeFacts.ContainsLexicalThisOrSuper,
74
+ Module = SubtreeFacts.ContainsLexicalThisOrSuper,
75
+ ObjectRestOrSpread = SubtreeFacts.ContainsObjectRestOrSpread,
76
+ BindingPattern = SubtreeFacts.ContainsRestOrSpread,
77
+ }
78
+
79
+ /** Marks a computed entry of `SyntaxFacts.cache`, whose facts may be `None`. */
80
+ const computedFacts = 1 << 30;
81
+
82
+ /** Memoized subtree facts for one emit; synthesized nodes get theirs on first use. */
83
+ export class SyntaxFacts extends NodeVisitor {
84
+ /** The facts of each node, by node id, with `computedFacts` set. */
85
+ private readonly cache: ClusteredIntLinkTable;
86
+ private collected: SubtreeFacts;
87
+
88
+ constructor() {
89
+ super();
90
+ this.cache = new ClusteredIntLinkTable();
91
+ this.collected = SubtreeFacts.None;
92
+ }
93
+
94
+ of(node: Node): SubtreeFacts {
95
+ const cached = this.cache.get(node.id);
96
+ if (cached !== 0) return cached & ~computedFacts;
97
+ const facts = this.compute(node);
98
+ this.cache.set(node.id, facts | computedFacts);
99
+ return facts;
100
+ }
101
+
102
+ has(node: Node, facts: SubtreeFacts): boolean {
103
+ return (this.of(node) & facts) !== 0;
104
+ }
105
+
106
+ /** Whether the subtree has a `...` in a pattern or literal. */
107
+ hasRestOrSpread(node: Node): boolean {
108
+ return this.has(node, SubtreeFacts.ContainsRestOrSpread | SubtreeFacts.ContainsObjectRestOrSpread);
109
+ }
110
+
111
+ /** Whether the subtree has a `{ ...x }` in a pattern or literal, outside nested scopes. */
112
+ hasObjectRestOrSpread(node: Node): boolean {
113
+ return this.has(node, SubtreeFacts.ContainsObjectRestOrSpread);
114
+ }
115
+
116
+ /** The facts `node` contributes to its parent. */
117
+ propagate(node: Node | undefined): SubtreeFacts {
118
+ if (node === undefined) return SubtreeFacts.None;
119
+ const kind = node.kind;
120
+ if (isTypeNodeKind(kind) && kind !== SyntaxKind.ExpressionWithTypeArguments) return SubtreeFacts.ContainsTypeScript;
121
+ const facts = this.of(node);
122
+ switch (kind) {
123
+ case SyntaxKind.ArrowFunction:
124
+ return facts & ~Exclusions.ArrowFunction;
125
+ case SyntaxKind.FunctionDeclaration:
126
+ case SyntaxKind.FunctionExpression:
127
+ case SyntaxKind.Constructor:
128
+ return facts & ~Exclusions.Function;
129
+ case SyntaxKind.MethodDeclaration:
130
+ case SyntaxKind.GetAccessor:
131
+ case SyntaxKind.SetAccessor:
132
+ return (facts & ~Exclusions.Function) | this.propagate(getName(node));
133
+ case SyntaxKind.PropertyDeclaration:
134
+ return (facts & ~Exclusions.Property) | this.propagate(getName(node));
135
+ case SyntaxKind.ModuleDeclaration:
136
+ return facts & ~Exclusions.Module;
137
+ case SyntaxKind.ObjectLiteralExpression:
138
+ case SyntaxKind.VariableDeclarationList:
139
+ case SyntaxKind.CatchClause:
140
+ return facts & ~Exclusions.ObjectRestOrSpread;
141
+ case SyntaxKind.ObjectBindingPattern:
142
+ case SyntaxKind.ArrayBindingPattern:
143
+ return facts & ~Exclusions.BindingPattern;
144
+ }
145
+ return facts;
146
+ }
147
+
148
+ visitNode(node: Node): boolean {
149
+ this.collected |= this.propagate(node);
150
+ return false;
151
+ }
152
+
153
+ private children(node: Node): SubtreeFacts {
154
+ const saved = this.collected;
155
+ this.collected = SubtreeFacts.None;
156
+ node.forEachChild(this);
157
+ const facts = this.collected;
158
+ this.collected = saved;
159
+ return facts;
160
+ }
161
+
162
+ private compute(node: Node): SubtreeFacts {
163
+ switch (node.kind) {
164
+ case SyntaxKind.UsingKeyword:
165
+ return SubtreeFacts.ContainsUsing;
166
+ case SyntaxKind.AccessorKeyword:
167
+ case SyntaxKind.PrivateIdentifier:
168
+ return SubtreeFacts.ContainsClassFields;
169
+ case SyntaxKind.AsyncKeyword:
170
+ return SubtreeFacts.ContainsAnyAwait;
171
+ case SyntaxKind.SuperKeyword:
172
+ return SubtreeFacts.ContainsLexicalSuper;
173
+ case SyntaxKind.ThisKeyword:
174
+ return SubtreeFacts.ContainsLexicalThis;
175
+ case SyntaxKind.AsteriskAsteriskToken:
176
+ case SyntaxKind.AsteriskAsteriskEqualsToken:
177
+ return SubtreeFacts.ContainsExponentiationOperator;
178
+ case SyntaxKind.QuestionQuestionToken:
179
+ return SubtreeFacts.ContainsNullishCoalescing;
180
+ case SyntaxKind.QuestionDotToken:
181
+ return SubtreeFacts.ContainsOptionalChaining;
182
+ case SyntaxKind.QuestionQuestionEqualsToken:
183
+ case SyntaxKind.BarBarEqualsToken:
184
+ case SyntaxKind.AmpersandAmpersandEqualsToken:
185
+ return SubtreeFacts.ContainsLogicalAssignments;
186
+ case SyntaxKind.Identifier:
187
+ return SubtreeFacts.ContainsIdentifier;
188
+ case SyntaxKind.NoSubstitutionTemplateLiteral:
189
+ return node instanceof NoSubstitutionTemplateLiteral && invalidEscape(node.templateFlags)
190
+ ? SubtreeFacts.ContainsInvalidTemplateEscape
191
+ : SubtreeFacts.None;
192
+ case SyntaxKind.TemplateHead:
193
+ return node instanceof TemplateHead && invalidEscape(node.templateFlags)
194
+ ? SubtreeFacts.ContainsInvalidTemplateEscape
195
+ : SubtreeFacts.None;
196
+ case SyntaxKind.TemplateMiddle:
197
+ return node instanceof TemplateMiddle && invalidEscape(node.templateFlags)
198
+ ? SubtreeFacts.ContainsInvalidTemplateEscape
199
+ : SubtreeFacts.None;
200
+ case SyntaxKind.TemplateTail:
201
+ return node instanceof TemplateTail && invalidEscape(node.templateFlags)
202
+ ? SubtreeFacts.ContainsInvalidTemplateEscape
203
+ : SubtreeFacts.None;
204
+ case SyntaxKind.Decorator:
205
+ return this.children(node) | SubtreeFacts.ContainsTypeScript | SubtreeFacts.ContainsDecorators;
206
+ case SyntaxKind.ForInStatement:
207
+ case SyntaxKind.ForOfStatement:
208
+ return (
209
+ this.children(node) |
210
+ (node instanceof ForInOrOfStatement && node.awaitModifier !== undefined
211
+ ? SubtreeFacts.ContainsForAwaitOrAsyncGenerator
212
+ : SubtreeFacts.None)
213
+ );
214
+ case SyntaxKind.ReturnStatement:
215
+ case SyntaxKind.YieldExpression:
216
+ // Returns and yields in an ES2018 async generator are awaited.
217
+ return this.children(node) | SubtreeFacts.ContainsForAwaitOrAsyncGenerator;
218
+ case SyntaxKind.AwaitExpression:
219
+ return (
220
+ this.children(node) |
221
+ SubtreeFacts.ContainsAwait |
222
+ SubtreeFacts.ContainsAnyAwait |
223
+ SubtreeFacts.ContainsForAwaitOrAsyncGenerator
224
+ );
225
+ case SyntaxKind.CatchClause:
226
+ return (
227
+ this.children(node) |
228
+ (node instanceof CatchClause && node.variableDeclaration === undefined
229
+ ? SubtreeFacts.ContainsMissingCatchClauseVariable
230
+ : SubtreeFacts.None)
231
+ );
232
+ case SyntaxKind.VariableDeclarationList:
233
+ return (
234
+ this.children(node) |
235
+ (node instanceof VariableDeclarationList && (node.flags & NodeFlags.Using) !== 0
236
+ ? SubtreeFacts.ContainsUsing
237
+ : SubtreeFacts.None)
238
+ );
239
+ case SyntaxKind.ObjectBindingPattern:
240
+ case SyntaxKind.ArrayBindingPattern:
241
+ return this.bindingPattern(node as BindingPattern);
242
+ case SyntaxKind.BindingElement:
243
+ return (
244
+ this.children(node) |
245
+ (node instanceof BindingElement && node.dotDotDotToken !== undefined
246
+ ? SubtreeFacts.ContainsRestOrSpread
247
+ : SubtreeFacts.None)
248
+ );
249
+ case SyntaxKind.FunctionDeclaration:
250
+ return this.children(node) | asyncFacts(node, (node as FunctionDeclaration).asteriskToken !== undefined);
251
+ case SyntaxKind.FunctionExpression:
252
+ return this.children(node) | asyncFacts(node, (node as FunctionExpression).asteriskToken !== undefined);
253
+ case SyntaxKind.MethodDeclaration:
254
+ return this.children(node) | asyncFacts(node, (node as MethodDeclaration).asteriskToken !== undefined);
255
+ case SyntaxKind.ArrowFunction:
256
+ return this.children(node) | asyncFacts(node, false);
257
+ case SyntaxKind.PropertyDeclaration:
258
+ case SyntaxKind.ClassStaticBlockDeclaration:
259
+ return this.children(node) | SubtreeFacts.ContainsClassFields;
260
+ case SyntaxKind.BinaryExpression:
261
+ return this.children(node) | this.binaryFacts(node as BinaryExpression);
262
+ case SyntaxKind.PropertyAccessExpression:
263
+ return (
264
+ this.children(node) |
265
+ (node instanceof PropertyAccessExpression && !(node.name instanceof Identifier)
266
+ ? SubtreeFacts.ContainsPrivateIdentifierInExpression
267
+ : SubtreeFacts.None)
268
+ );
269
+ case SyntaxKind.CallExpression:
270
+ return (
271
+ this.children(node) |
272
+ (node instanceof CallExpression && node.expression.kind === SyntaxKind.ImportKeyword
273
+ ? SubtreeFacts.ContainsDynamicImport
274
+ : SubtreeFacts.None)
275
+ );
276
+ case SyntaxKind.MetaProperty:
277
+ return node instanceof MetaProperty ? this.propagate(node.name) & ~SubtreeFacts.ContainsIdentifier : 0;
278
+ case SyntaxKind.SpreadElement:
279
+ return this.children(node) | SubtreeFacts.ContainsRestOrSpread;
280
+ case SyntaxKind.SpreadAssignment:
281
+ return (
282
+ this.children(node) | SubtreeFacts.ContainsESObjectRestOrSpread | SubtreeFacts.ContainsObjectRestOrSpread
283
+ );
284
+ case SyntaxKind.JsxElement:
285
+ case SyntaxKind.JsxAttributes:
286
+ case SyntaxKind.JsxNamespacedName:
287
+ case SyntaxKind.JsxOpeningElement:
288
+ case SyntaxKind.JsxSelfClosingElement:
289
+ case SyntaxKind.JsxFragment:
290
+ case SyntaxKind.JsxOpeningFragment:
291
+ case SyntaxKind.JsxClosingFragment:
292
+ case SyntaxKind.JsxAttribute:
293
+ case SyntaxKind.JsxSpreadAttribute:
294
+ case SyntaxKind.JsxClosingElement:
295
+ case SyntaxKind.JsxExpression:
296
+ case SyntaxKind.JsxText:
297
+ return this.children(node) | SubtreeFacts.ContainsJsx;
298
+ }
299
+ return this.children(node);
300
+ }
301
+
302
+ private bindingPattern(node: BindingPattern): SubtreeFacts {
303
+ const elements = node.elements.nodes;
304
+ const object = node.kind === SyntaxKind.ObjectBindingPattern;
305
+ let facts = SubtreeFacts.None;
306
+ for (const child of elements) {
307
+ let element = this.propagate(child);
308
+ if ((element & SubtreeFacts.ContainsRestOrSpread) !== 0) {
309
+ element &= ~SubtreeFacts.ContainsRestOrSpread;
310
+ if (object) element |= SubtreeFacts.ContainsObjectRestOrSpread | SubtreeFacts.ContainsESObjectRestOrSpread;
311
+ }
312
+ facts |= element;
313
+ }
314
+ return facts;
315
+ }
316
+
317
+ private binaryFacts(node: BinaryExpression): SubtreeFacts {
318
+ const operator = node.operatorToken.kind;
319
+ if (operator === SyntaxKind.InKeyword && node.left.kind === SyntaxKind.PrivateIdentifier)
320
+ return SubtreeFacts.ContainsClassFields | SubtreeFacts.ContainsPrivateIdentifierInExpression;
321
+ if (
322
+ operator === SyntaxKind.EqualsToken &&
323
+ (node.left.kind === SyntaxKind.ObjectLiteralExpression || node.left.kind === SyntaxKind.ArrayLiteralExpression) &&
324
+ this.containsObjectRestOrSpread(node.left)
325
+ )
326
+ return SubtreeFacts.ContainsObjectRestOrSpread;
327
+ return SubtreeFacts.None;
328
+ }
329
+
330
+ /** Whether a pattern has an object rest element, at any depth of nested assignment patterns. */
331
+ containsObjectRestOrSpread(node: Node): boolean {
332
+ const facts = this.of(node);
333
+ if ((facts & SubtreeFacts.ContainsObjectRestOrSpread) !== 0) return true;
334
+ if ((facts & SubtreeFacts.ContainsESObjectRestOrSpread) === 0) return false;
335
+ // Nested spreads, as in `{ x: { a, ...b } = foo } = c`.
336
+ const elements = getElementsOfBindingOrAssignmentPattern(node);
337
+ for (const element of elements) {
338
+ const target = getTargetOfBindingOrAssignmentElement(element);
339
+ if (
340
+ target !== undefined &&
341
+ (target.kind === SyntaxKind.ObjectLiteralExpression || target.kind === SyntaxKind.ArrayLiteralExpression) &&
342
+ this.containsObjectRestOrSpread(target)
343
+ )
344
+ return true;
345
+ }
346
+ return false;
347
+ }
348
+ }
349
+
350
+ function invalidEscape(flags: TokenFlags): boolean {
351
+ return (flags & TokenFlags.ContainsInvalidEscape) !== 0;
352
+ }
353
+
354
+ function asyncFacts(node: Node, generator: boolean): SubtreeFacts {
355
+ const modifiers: ModifierList | undefined = getModifiers(node);
356
+ if (modifiers === undefined || (modifiers.modifierFlags & ModifierFlags.Async) === 0) return SubtreeFacts.None;
357
+ return generator ? SubtreeFacts.ContainsForAwaitOrAsyncGenerator : SubtreeFacts.ContainsAnyAwait;
358
+ }