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,884 @@
1
+ // Node predicates, literal text and line helpers shared by the printer and transforms.
2
+ import {
3
+ BigIntLiteral,
4
+ BinaryExpression,
5
+ CallExpression,
6
+ ConditionalExpression,
7
+ ElementAccessExpression,
8
+ InferTypeNode,
9
+ NewExpression,
10
+ type Node,
11
+ NodeFlags,
12
+ NoSubstitutionTemplateLiteral,
13
+ NonNullExpression,
14
+ NumericLiteral,
15
+ ParenthesizedExpression,
16
+ PartiallyEmittedExpression,
17
+ PostfixUnaryExpression,
18
+ PrefixUnaryExpression,
19
+ PropertyAccessExpression,
20
+ RegularExpressionLiteral,
21
+ AsExpression,
22
+ SatisfiesExpression,
23
+ SourceFile,
24
+ StringLiteral,
25
+ TaggedTemplateExpression,
26
+ TemplateHead,
27
+ TemplateMiddle,
28
+ TemplateTail,
29
+ ExpressionStatement,
30
+ Identifier,
31
+ PrivateIdentifier,
32
+ getExpression,
33
+ } from '../ast.js';
34
+ import { OperatorPrecedence, getBinaryOperatorPrecedence } from '../ast-utilities.js';
35
+ import {
36
+ CharacterCodes,
37
+ isDigit,
38
+ isLineBreak,
39
+ isUnicodeWhiteSpace,
40
+ isWhiteSpaceLike,
41
+ isWhiteSpaceSingleLine,
42
+ } from '../character-codes.js';
43
+ import { computeLineOfPosition, skipTrivia } from '../scanner.js';
44
+ import { SyntaxKind } from '../syntax-kind.js';
45
+ import { type CommentRange, TokenFlags } from '../types.js';
46
+ import { getBaseFileName } from '../path.js';
47
+
48
+ // Nodes
49
+
50
+ export function positionIsSynthesized(pos: number): boolean {
51
+ return pos < 0;
52
+ }
53
+
54
+ export function nodeIsSynthesized(node: Node): boolean {
55
+ return node.pos < 0 || node.end < 0;
56
+ }
57
+
58
+ /** Whether the parser (not a transform) created the node. */
59
+ export function isParseTreeNode(node: Node): boolean {
60
+ return (node.flags & NodeFlags.Synthesized) === 0;
61
+ }
62
+
63
+ export function getSourceFileOfNode(node: Node | undefined): SourceFile | undefined {
64
+ while (node !== undefined) {
65
+ if (node instanceof SourceFile) return node;
66
+ node = node.parent;
67
+ }
68
+ return undefined;
69
+ }
70
+
71
+ export function isPrologueDirective(node: Node): boolean {
72
+ return (
73
+ node instanceof ExpressionStatement && (node as ExpressionStatement).expression.kind === SyntaxKind.StringLiteral
74
+ );
75
+ }
76
+
77
+ export function isKeywordKind(kind: SyntaxKind): boolean {
78
+ return kind >= SyntaxKind.FirstKeyword && kind <= SyntaxKind.LastKeyword;
79
+ }
80
+
81
+ export function isPunctuationKind(kind: SyntaxKind): boolean {
82
+ return kind >= SyntaxKind.FirstPunctuation && kind <= SyntaxKind.LastPunctuation;
83
+ }
84
+
85
+ export function isLiteralKind(kind: SyntaxKind): boolean {
86
+ return kind >= SyntaxKind.FirstLiteralToken && kind <= SyntaxKind.LastLiteralToken;
87
+ }
88
+
89
+ export function isJSDocKind(kind: SyntaxKind): boolean {
90
+ return kind >= SyntaxKind.JSDocTypeExpression && kind <= SyntaxKind.JSDocImportTag;
91
+ }
92
+
93
+ export function isMemberName(node: Node): boolean {
94
+ return node.kind === SyntaxKind.Identifier || node.kind === SyntaxKind.PrivateIdentifier;
95
+ }
96
+
97
+ export function isModifier(node: Node): boolean {
98
+ switch (node.kind) {
99
+ case SyntaxKind.AbstractKeyword:
100
+ case SyntaxKind.AccessorKeyword:
101
+ case SyntaxKind.AsyncKeyword:
102
+ case SyntaxKind.ConstKeyword:
103
+ case SyntaxKind.DeclareKeyword:
104
+ case SyntaxKind.DefaultKeyword:
105
+ case SyntaxKind.ExportKeyword:
106
+ case SyntaxKind.InKeyword:
107
+ case SyntaxKind.PrivateKeyword:
108
+ case SyntaxKind.ProtectedKeyword:
109
+ case SyntaxKind.PublicKeyword:
110
+ case SyntaxKind.ReadonlyKeyword:
111
+ case SyntaxKind.OutKeyword:
112
+ case SyntaxKind.OverrideKeyword:
113
+ case SyntaxKind.StaticKeyword:
114
+ return true;
115
+ }
116
+ return false;
117
+ }
118
+
119
+ export function isOptionalChain(node: Node): boolean {
120
+ if ((node.flags & NodeFlags.OptionalChain) === 0) return false;
121
+ switch (node.kind) {
122
+ case SyntaxKind.PropertyAccessExpression:
123
+ case SyntaxKind.ElementAccessExpression:
124
+ case SyntaxKind.CallExpression:
125
+ case SyntaxKind.NonNullExpression:
126
+ return true;
127
+ }
128
+ return false;
129
+ }
130
+
131
+ export function isUnterminatedLiteral(node: Node): boolean {
132
+ if (node instanceof StringLiteral) return (node.tokenFlags & TokenFlags.Unterminated) !== 0;
133
+ if (node instanceof NumericLiteral) return (node.tokenFlags & TokenFlags.Unterminated) !== 0;
134
+ if (node instanceof BigIntLiteral) return (node.tokenFlags & TokenFlags.Unterminated) !== 0;
135
+ if (node instanceof RegularExpressionLiteral) return (node.tokenFlags & TokenFlags.Unterminated) !== 0;
136
+ if (node instanceof NoSubstitutionTemplateLiteral) return (node.templateFlags & TokenFlags.Unterminated) !== 0;
137
+ if (node instanceof TemplateHead) return (node.templateFlags & TokenFlags.Unterminated) !== 0;
138
+ if (node instanceof TemplateMiddle) return (node.templateFlags & TokenFlags.Unterminated) !== 0;
139
+ if (node instanceof TemplateTail) return (node.templateFlags & TokenFlags.Unterminated) !== 0;
140
+ return false;
141
+ }
142
+
143
+ export function skipPartiallyEmittedExpressions(node: Node): Node {
144
+ while (node instanceof PartiallyEmittedExpression) node = node.expression;
145
+ return node;
146
+ }
147
+
148
+ /** Whether a variable declaration list declares `let`, `const`, `using` or `await using`, as `NodeFlags.BlockScoped`. */
149
+ export function blockScopeFlags(node: Node): NodeFlags {
150
+ let flags = node.flags;
151
+ const parent = node.parent;
152
+ if (parent !== undefined && parent.kind === SyntaxKind.VariableStatement) flags |= parent.flags;
153
+ return flags & NodeFlags.BlockScoped;
154
+ }
155
+
156
+ function isLeftHandSideExpressionKind(kind: SyntaxKind): boolean {
157
+ switch (kind) {
158
+ case SyntaxKind.PropertyAccessExpression:
159
+ case SyntaxKind.ElementAccessExpression:
160
+ case SyntaxKind.NewExpression:
161
+ case SyntaxKind.CallExpression:
162
+ case SyntaxKind.JsxElement:
163
+ case SyntaxKind.JsxSelfClosingElement:
164
+ case SyntaxKind.JsxFragment:
165
+ case SyntaxKind.TaggedTemplateExpression:
166
+ case SyntaxKind.ArrayLiteralExpression:
167
+ case SyntaxKind.ParenthesizedExpression:
168
+ case SyntaxKind.ObjectLiteralExpression:
169
+ case SyntaxKind.ClassExpression:
170
+ case SyntaxKind.FunctionExpression:
171
+ case SyntaxKind.Identifier:
172
+ case SyntaxKind.PrivateIdentifier:
173
+ case SyntaxKind.RegularExpressionLiteral:
174
+ case SyntaxKind.NumericLiteral:
175
+ case SyntaxKind.BigIntLiteral:
176
+ case SyntaxKind.StringLiteral:
177
+ case SyntaxKind.NoSubstitutionTemplateLiteral:
178
+ case SyntaxKind.TemplateExpression:
179
+ case SyntaxKind.FalseKeyword:
180
+ case SyntaxKind.NullKeyword:
181
+ case SyntaxKind.ThisKeyword:
182
+ case SyntaxKind.TrueKeyword:
183
+ case SyntaxKind.SuperKeyword:
184
+ case SyntaxKind.NonNullExpression:
185
+ case SyntaxKind.ExpressionWithTypeArguments:
186
+ case SyntaxKind.MetaProperty:
187
+ case SyntaxKind.ImportKeyword:
188
+ case SyntaxKind.MissingDeclaration:
189
+ return true;
190
+ }
191
+ return false;
192
+ }
193
+
194
+ function isUnaryExpressionKind(kind: SyntaxKind): boolean {
195
+ switch (kind) {
196
+ case SyntaxKind.PrefixUnaryExpression:
197
+ case SyntaxKind.PostfixUnaryExpression:
198
+ case SyntaxKind.DeleteExpression:
199
+ case SyntaxKind.TypeOfExpression:
200
+ case SyntaxKind.VoidExpression:
201
+ case SyntaxKind.AwaitExpression:
202
+ case SyntaxKind.TypeAssertionExpression:
203
+ return true;
204
+ }
205
+ return isLeftHandSideExpressionKind(kind);
206
+ }
207
+
208
+ export function isExpressionKind(kind: SyntaxKind): boolean {
209
+ switch (kind) {
210
+ case SyntaxKind.ConditionalExpression:
211
+ case SyntaxKind.YieldExpression:
212
+ case SyntaxKind.ArrowFunction:
213
+ case SyntaxKind.BinaryExpression:
214
+ case SyntaxKind.SpreadElement:
215
+ case SyntaxKind.AsExpression:
216
+ case SyntaxKind.OmittedExpression:
217
+ case SyntaxKind.PartiallyEmittedExpression:
218
+ case SyntaxKind.SatisfiesExpression:
219
+ return true;
220
+ }
221
+ return isUnaryExpressionKind(kind);
222
+ }
223
+
224
+ export function isExpression(node: Node): boolean {
225
+ return isExpressionKind(skipPartiallyEmittedExpressions(node).kind);
226
+ }
227
+
228
+ export function isTypeNodeKind(kind: SyntaxKind): boolean {
229
+ switch (kind) {
230
+ case SyntaxKind.AnyKeyword:
231
+ case SyntaxKind.UnknownKeyword:
232
+ case SyntaxKind.NumberKeyword:
233
+ case SyntaxKind.BigIntKeyword:
234
+ case SyntaxKind.ObjectKeyword:
235
+ case SyntaxKind.BooleanKeyword:
236
+ case SyntaxKind.StringKeyword:
237
+ case SyntaxKind.SymbolKeyword:
238
+ case SyntaxKind.VoidKeyword:
239
+ case SyntaxKind.UndefinedKeyword:
240
+ case SyntaxKind.NeverKeyword:
241
+ case SyntaxKind.IntrinsicKeyword:
242
+ case SyntaxKind.ExpressionWithTypeArguments:
243
+ case SyntaxKind.JSDocAllType:
244
+ case SyntaxKind.JSDocNullableType:
245
+ case SyntaxKind.JSDocNonNullableType:
246
+ case SyntaxKind.JSDocOptionalType:
247
+ case SyntaxKind.JSDocVariadicType:
248
+ return true;
249
+ }
250
+ return kind >= SyntaxKind.FirstTypeNode && kind <= SyntaxKind.LastTypeNode;
251
+ }
252
+
253
+ function isDeclarationStatementKind(kind: SyntaxKind): boolean {
254
+ switch (kind) {
255
+ case SyntaxKind.FunctionDeclaration:
256
+ case SyntaxKind.MissingDeclaration:
257
+ case SyntaxKind.ClassDeclaration:
258
+ case SyntaxKind.InterfaceDeclaration:
259
+ case SyntaxKind.TypeAliasDeclaration:
260
+ case SyntaxKind.JSTypeAliasDeclaration:
261
+ case SyntaxKind.EnumDeclaration:
262
+ case SyntaxKind.ModuleDeclaration:
263
+ case SyntaxKind.ImportDeclaration:
264
+ case SyntaxKind.JSImportDeclaration:
265
+ case SyntaxKind.ImportEqualsDeclaration:
266
+ case SyntaxKind.ExportDeclaration:
267
+ case SyntaxKind.ExportAssignment:
268
+ case SyntaxKind.NamespaceExportDeclaration:
269
+ return true;
270
+ }
271
+ return false;
272
+ }
273
+
274
+ function isStatementKindButNotDeclarationKind(kind: SyntaxKind): boolean {
275
+ switch (kind) {
276
+ case SyntaxKind.BreakStatement:
277
+ case SyntaxKind.ContinueStatement:
278
+ case SyntaxKind.DebuggerStatement:
279
+ case SyntaxKind.DoStatement:
280
+ case SyntaxKind.ExpressionStatement:
281
+ case SyntaxKind.EmptyStatement:
282
+ case SyntaxKind.ForInStatement:
283
+ case SyntaxKind.ForOfStatement:
284
+ case SyntaxKind.ForStatement:
285
+ case SyntaxKind.IfStatement:
286
+ case SyntaxKind.LabeledStatement:
287
+ case SyntaxKind.ReturnStatement:
288
+ case SyntaxKind.SwitchStatement:
289
+ case SyntaxKind.ThrowStatement:
290
+ case SyntaxKind.TryStatement:
291
+ case SyntaxKind.VariableStatement:
292
+ case SyntaxKind.WhileStatement:
293
+ case SyntaxKind.WithStatement:
294
+ case SyntaxKind.NotEmittedStatement:
295
+ return true;
296
+ }
297
+ return false;
298
+ }
299
+
300
+ export function isFunctionLikeKind(kind: SyntaxKind): boolean {
301
+ switch (kind) {
302
+ case SyntaxKind.FunctionDeclaration:
303
+ case SyntaxKind.MethodDeclaration:
304
+ case SyntaxKind.Constructor:
305
+ case SyntaxKind.GetAccessor:
306
+ case SyntaxKind.SetAccessor:
307
+ case SyntaxKind.FunctionExpression:
308
+ case SyntaxKind.ArrowFunction:
309
+ case SyntaxKind.MethodSignature:
310
+ case SyntaxKind.CallSignature:
311
+ case SyntaxKind.JSDocSignature:
312
+ case SyntaxKind.ConstructSignature:
313
+ case SyntaxKind.IndexSignature:
314
+ case SyntaxKind.FunctionType:
315
+ case SyntaxKind.ConstructorType:
316
+ return true;
317
+ }
318
+ return false;
319
+ }
320
+
321
+ export function isStatement(node: Node): boolean {
322
+ const kind = node.kind;
323
+ if (isStatementKindButNotDeclarationKind(kind) || isDeclarationStatementKind(kind)) return true;
324
+ if (kind !== SyntaxKind.Block) return false;
325
+ const parent = node.parent;
326
+ if (parent === undefined) return true;
327
+ return (
328
+ parent.kind !== SyntaxKind.TryStatement &&
329
+ parent.kind !== SyntaxKind.CatchClause &&
330
+ !isFunctionLikeKind(parent.kind)
331
+ );
332
+ }
333
+
334
+ // Precedence
335
+
336
+ export function getExpressionPrecedence(expression: Node): OperatorPrecedence {
337
+ switch (expression.kind) {
338
+ case SyntaxKind.SpreadElement:
339
+ return OperatorPrecedence.Spread;
340
+ case SyntaxKind.YieldExpression:
341
+ return OperatorPrecedence.Yield;
342
+ case SyntaxKind.ArrowFunction:
343
+ return OperatorPrecedence.Assignment;
344
+ case SyntaxKind.ConditionalExpression:
345
+ return OperatorPrecedence.Conditional;
346
+ case SyntaxKind.BinaryExpression:
347
+ if (expression instanceof BinaryExpression) {
348
+ const operator = expression.operatorToken.kind;
349
+ if (operator === SyntaxKind.CommaToken) return OperatorPrecedence.Comma;
350
+ if (operator >= SyntaxKind.FirstAssignment && operator <= SyntaxKind.LastAssignment)
351
+ return OperatorPrecedence.Assignment;
352
+ return getBinaryOperatorPrecedence(operator);
353
+ }
354
+ return OperatorPrecedence.Invalid;
355
+ case SyntaxKind.TypeAssertionExpression:
356
+ case SyntaxKind.NonNullExpression:
357
+ case SyntaxKind.PrefixUnaryExpression:
358
+ case SyntaxKind.TypeOfExpression:
359
+ case SyntaxKind.VoidExpression:
360
+ case SyntaxKind.DeleteExpression:
361
+ case SyntaxKind.AwaitExpression:
362
+ return OperatorPrecedence.Unary;
363
+ case SyntaxKind.PostfixUnaryExpression:
364
+ return OperatorPrecedence.Update;
365
+ case SyntaxKind.PropertyAccessExpression:
366
+ case SyntaxKind.ElementAccessExpression:
367
+ case SyntaxKind.CallExpression:
368
+ return isOptionalChain(expression) ? OperatorPrecedence.OptionalChain : OperatorPrecedence.Member;
369
+ case SyntaxKind.NewExpression:
370
+ return expression instanceof NewExpression && expression.arguments === undefined
371
+ ? OperatorPrecedence.LeftHandSide
372
+ : OperatorPrecedence.Member;
373
+ case SyntaxKind.TaggedTemplateExpression:
374
+ case SyntaxKind.MetaProperty:
375
+ case SyntaxKind.ExpressionWithTypeArguments:
376
+ return OperatorPrecedence.Member;
377
+ case SyntaxKind.AsExpression:
378
+ case SyntaxKind.SatisfiesExpression:
379
+ return OperatorPrecedence.Relational;
380
+ case SyntaxKind.ThisKeyword:
381
+ case SyntaxKind.SuperKeyword:
382
+ case SyntaxKind.ImportKeyword:
383
+ case SyntaxKind.Identifier:
384
+ case SyntaxKind.PrivateIdentifier:
385
+ case SyntaxKind.NullKeyword:
386
+ case SyntaxKind.TrueKeyword:
387
+ case SyntaxKind.FalseKeyword:
388
+ case SyntaxKind.NumericLiteral:
389
+ case SyntaxKind.BigIntLiteral:
390
+ case SyntaxKind.StringLiteral:
391
+ case SyntaxKind.ArrayLiteralExpression:
392
+ case SyntaxKind.ObjectLiteralExpression:
393
+ case SyntaxKind.FunctionExpression:
394
+ case SyntaxKind.ClassExpression:
395
+ case SyntaxKind.RegularExpressionLiteral:
396
+ case SyntaxKind.NoSubstitutionTemplateLiteral:
397
+ case SyntaxKind.TemplateExpression:
398
+ case SyntaxKind.OmittedExpression:
399
+ case SyntaxKind.JsxElement:
400
+ case SyntaxKind.JsxSelfClosingElement:
401
+ case SyntaxKind.JsxFragment:
402
+ case SyntaxKind.MissingDeclaration:
403
+ return OperatorPrecedence.Primary;
404
+ case SyntaxKind.ParenthesizedExpression:
405
+ return OperatorPrecedence.Parentheses;
406
+ }
407
+ return OperatorPrecedence.Invalid;
408
+ }
409
+
410
+ export const enum TypePrecedence {
411
+ Conditional = 0,
412
+ JSDoc = 1,
413
+ Function = 2,
414
+ Union = 3,
415
+ Intersection = 4,
416
+ TypeOperator = 5,
417
+ Postfix = 6,
418
+ NonArray = 7,
419
+ Lowest = Conditional,
420
+ Highest = NonArray,
421
+ }
422
+
423
+ export function getTypeNodePrecedence(node: Node): TypePrecedence {
424
+ switch (node.kind) {
425
+ case SyntaxKind.ConditionalType:
426
+ return TypePrecedence.Conditional;
427
+ case SyntaxKind.JSDocOptionalType:
428
+ case SyntaxKind.JSDocVariadicType:
429
+ return TypePrecedence.JSDoc;
430
+ case SyntaxKind.FunctionType:
431
+ case SyntaxKind.ConstructorType:
432
+ return TypePrecedence.Function;
433
+ case SyntaxKind.UnionType:
434
+ return TypePrecedence.Union;
435
+ case SyntaxKind.IntersectionType:
436
+ return TypePrecedence.Intersection;
437
+ case SyntaxKind.TypeOperator:
438
+ case SyntaxKind.TypeQuery:
439
+ return TypePrecedence.TypeOperator;
440
+ case SyntaxKind.InferType:
441
+ return node instanceof InferTypeNode && node.typeParameter.constraint !== undefined
442
+ ? TypePrecedence.Function
443
+ : TypePrecedence.TypeOperator;
444
+ case SyntaxKind.IndexedAccessType:
445
+ case SyntaxKind.ArrayType:
446
+ case SyntaxKind.OptionalType:
447
+ return TypePrecedence.Postfix;
448
+ }
449
+ return TypePrecedence.NonArray;
450
+ }
451
+
452
+ /** The leftmost operand of an expression, e.g. `a` in `a.b + c`. */
453
+ export function getLeftmostExpression(node: Node, stopAtCallExpressions: boolean): Node {
454
+ for (;;) {
455
+ if (node instanceof PostfixUnaryExpression) node = node.operand;
456
+ else if (node instanceof BinaryExpression) node = node.left;
457
+ else if (node instanceof ConditionalExpression) node = node.condition;
458
+ else if (node instanceof TaggedTemplateExpression) node = node.tag;
459
+ else if (node instanceof PartiallyEmittedExpression) node = node.expression;
460
+ else if (node instanceof CallExpression) {
461
+ if (stopAtCallExpressions) return node;
462
+ node = node.expression;
463
+ } else if (
464
+ node instanceof AsExpression ||
465
+ node instanceof ElementAccessExpression ||
466
+ node instanceof PropertyAccessExpression ||
467
+ node instanceof NonNullExpression ||
468
+ node instanceof PartiallyEmittedExpression ||
469
+ node instanceof SatisfiesExpression
470
+ ) {
471
+ const expression = getExpression(node);
472
+ if (expression === undefined) return node;
473
+ node = expression;
474
+ } else return node;
475
+ }
476
+ }
477
+
478
+ export function skipSynthesizedParentheses(node: Node): Node {
479
+ while (node instanceof ParenthesizedExpression && nodeIsSynthesized(node)) node = node.expression;
480
+ return node;
481
+ }
482
+
483
+ export function isNewExpressionWithoutArguments(node: Node): boolean {
484
+ return node instanceof NewExpression && node.arguments === undefined;
485
+ }
486
+
487
+ export function isBinaryOperation(node: Node, token: SyntaxKind): boolean {
488
+ node = skipPartiallyEmittedExpressions(node);
489
+ return node instanceof BinaryExpression && node.operatorToken.kind === token;
490
+ }
491
+
492
+ export function mixingBinaryOperatorsRequiresParentheses(a: SyntaxKind, b: SyntaxKind): boolean {
493
+ if (a === SyntaxKind.QuestionQuestionToken)
494
+ return b === SyntaxKind.AmpersandAmpersandToken || b === SyntaxKind.BarBarToken;
495
+ if (b === SyntaxKind.QuestionQuestionToken)
496
+ return a === SyntaxKind.AmpersandAmpersandToken || a === SyntaxKind.BarBarToken;
497
+ return false;
498
+ }
499
+
500
+ export function isImmediatelyInvokedFunctionExpressionOrArrowFunction(node: Node): boolean {
501
+ node = skipPartiallyEmittedExpressions(node);
502
+ if (!(node instanceof CallExpression)) return false;
503
+ const callee = skipPartiallyEmittedExpressions(node.expression);
504
+ return callee.kind === SyntaxKind.FunctionExpression || callee.kind === SyntaxKind.ArrowFunction;
505
+ }
506
+
507
+ export function getOperatorOfPrefixOperand(node: Node): SyntaxKind {
508
+ return node instanceof PrefixUnaryExpression ? node.operator : SyntaxKind.Unknown;
509
+ }
510
+
511
+ // Literal text
512
+
513
+ export const enum LiteralTextFlags {
514
+ None = 0,
515
+ NeverAsciiEscape = 1 << 0,
516
+ JsxAttributeEscape = 1 << 1,
517
+ TerminateUnterminatedLiterals = 1 << 2,
518
+ AllowNumericSeparator = 1 << 3,
519
+ }
520
+
521
+ const hexDigits = '0123456789ABCDEF';
522
+
523
+ function hex(code: number): string {
524
+ let s = '';
525
+ do {
526
+ s = hexDigits.charAt(code & 15) + s;
527
+ code = code >>> 4;
528
+ } while (code > 0);
529
+ return s;
530
+ }
531
+
532
+ function utf16Escape(code: number): string {
533
+ const digits = hex(code);
534
+ return '\\u' + '0000'.substring(digits.length) + digits;
535
+ }
536
+
537
+ function escapedChar(ch: number): string {
538
+ switch (ch) {
539
+ case CharacterCodes.tab:
540
+ return '\\t';
541
+ case CharacterCodes.verticalTab:
542
+ return '\\v';
543
+ case CharacterCodes.formFeed:
544
+ return '\\f';
545
+ case CharacterCodes.backspace:
546
+ return '\\b';
547
+ case CharacterCodes.carriageReturn:
548
+ return '\\r';
549
+ case CharacterCodes.lineFeed:
550
+ return '\\n';
551
+ case CharacterCodes.backslash:
552
+ return '\\\\';
553
+ case CharacterCodes.doubleQuote:
554
+ return '\\"';
555
+ case CharacterCodes.singleQuote:
556
+ return "\\'";
557
+ case CharacterCodes.backtick:
558
+ return '\\`';
559
+ case CharacterCodes.$:
560
+ return '\\$';
561
+ case CharacterCodes.lineSeparator:
562
+ return '\\u2028';
563
+ case CharacterCodes.paragraphSeparator:
564
+ return '\\u2029';
565
+ case CharacterCodes.nextLine:
566
+ return '\\u0085';
567
+ }
568
+ return utf16Escape(ch);
569
+ }
570
+
571
+ /**
572
+ * Escapes `s` for a literal quoted with `quote`, as ECMA-262's QuoteJSONString plus LS, PS
573
+ * and NEL; non-ASCII characters too unless `NeverAsciiEscape` is set. Doesn't add quotes.
574
+ */
575
+ export function escapeString(s: string, quote: number, flags: LiteralTextFlags): string {
576
+ let out = '';
577
+ let start = 0;
578
+ const length = s.length;
579
+ for (let i = 0; i < length;) {
580
+ let ch = s.charCodeAt(i);
581
+ let size = 1;
582
+ if (ch >= 0xd800 && ch <= 0xdbff && i + 1 < length) {
583
+ const low = s.charCodeAt(i + 1);
584
+ if (low >= 0xdc00 && low <= 0xdfff) {
585
+ ch = (ch - 0xd800) * 0x400 + (low - 0xdc00) + 0x10000;
586
+ size = 2;
587
+ }
588
+ }
589
+ let escape = ch >= 0xd800 && ch <= 0xdfff;
590
+ switch (ch) {
591
+ case CharacterCodes.backslash:
592
+ if ((flags & LiteralTextFlags.JsxAttributeEscape) === 0) escape = true;
593
+ break;
594
+ case CharacterCodes.$:
595
+ if (quote === CharacterCodes.backtick && i + 1 < length && s.charCodeAt(i + 1) === CharacterCodes.openBrace)
596
+ escape = true;
597
+ break;
598
+ case CharacterCodes.lineSeparator:
599
+ case CharacterCodes.paragraphSeparator:
600
+ case CharacterCodes.nextLine:
601
+ case CharacterCodes.carriageReturn:
602
+ escape = true;
603
+ break;
604
+ case CharacterCodes.lineFeed:
605
+ if (quote !== CharacterCodes.backtick) escape = true;
606
+ break;
607
+ default:
608
+ if (ch === quote || ch <= 0x1f || ((flags & LiteralTextFlags.NeverAsciiEscape) === 0 && ch > 0x7f))
609
+ escape = true;
610
+ }
611
+ if (escape) {
612
+ if (start < i) out += s.substring(start, i);
613
+ if ((flags & LiteralTextFlags.JsxAttributeEscape) !== 0) {
614
+ if (ch === 0) out += '&#0;';
615
+ else if (ch === CharacterCodes.doubleQuote) out += '&quot;';
616
+ else if (ch === CharacterCodes.singleQuote) out += '&apos;';
617
+ else out += '&#x' + hex(ch) + ';';
618
+ } else if (
619
+ ch === CharacterCodes.carriageReturn &&
620
+ quote === CharacterCodes.backtick &&
621
+ i + 1 < length &&
622
+ s.charCodeAt(i + 1) === CharacterCodes.lineFeed
623
+ ) {
624
+ size++;
625
+ out += '\\r\\n';
626
+ } else if (ch > 0xffff) {
627
+ const c = ch - 0x10000;
628
+ out += utf16Escape((c >> 10) + 0xd800) + utf16Escape((c & 0x3ff) + 0xdc00);
629
+ } else if (ch === 0) {
630
+ out += i + 1 < length && isDigit(s.charCodeAt(i + 1)) ? '\\x00' : '\\0';
631
+ } else out += escapedChar(ch);
632
+ start = i + size;
633
+ }
634
+ i += size;
635
+ }
636
+ if (start === 0) return s;
637
+ if (start < length) out += s.substring(start);
638
+ return out;
639
+ }
640
+
641
+ function canUseOriginalText(node: Node, flags: LiteralTextFlags): boolean {
642
+ if (
643
+ nodeIsSynthesized(node) ||
644
+ node.parent === undefined ||
645
+ ((flags & LiteralTextFlags.TerminateUnterminatedLiterals) !== 0 && isUnterminatedLiteral(node))
646
+ )
647
+ return false;
648
+ if (node instanceof NumericLiteral) {
649
+ if ((node.tokenFlags & TokenFlags.IsInvalid) !== 0) return false;
650
+ if ((node.tokenFlags & TokenFlags.ContainsSeparator) !== 0)
651
+ return (flags & LiteralTextFlags.AllowNumericSeparator) !== 0;
652
+ }
653
+ return node.kind !== SyntaxKind.BigIntLiteral;
654
+ }
655
+
656
+ function templateText(open: string, text: string, rawText: string, close: string, flags: LiteralTextFlags): string {
657
+ if (rawText.length > 0 || text.length === 0) return open + rawText + close;
658
+ return open + escapeString(text, CharacterCodes.backtick, flags) + close;
659
+ }
660
+
661
+ /** The text of a literal as written, or its canonical (escaped, quoted) form for synthesized literals. */
662
+ export function getLiteralText(node: Node, sourceText: string | undefined, flags: LiteralTextFlags): string {
663
+ if (sourceText !== undefined && canUseOriginalText(node, flags)) return getSourceTextOfNode(sourceText, node);
664
+ if (node instanceof StringLiteral) {
665
+ const quote =
666
+ (node.tokenFlags & TokenFlags.SingleQuote) !== 0 ? CharacterCodes.singleQuote : CharacterCodes.doubleQuote;
667
+ const q = quote === CharacterCodes.singleQuote ? "'" : '"';
668
+ return q + escapeString(node.text, quote, flags) + q;
669
+ }
670
+ if (node instanceof NoSubstitutionTemplateLiteral) return templateText('`', node.text, '', '`', flags);
671
+ if (node instanceof TemplateHead) return templateText('`', node.text, node.rawText, '${', flags);
672
+ if (node instanceof TemplateMiddle) return templateText('}', node.text, node.rawText, '${', flags);
673
+ if (node instanceof TemplateTail) return templateText('}', node.text, node.rawText, '`', flags);
674
+ if (node instanceof NumericLiteral) return node.text;
675
+ if (node instanceof BigIntLiteral) return node.text;
676
+ if (node instanceof RegularExpressionLiteral) {
677
+ const text = node.text;
678
+ if ((flags & LiteralTextFlags.TerminateUnterminatedLiterals) !== 0 && isUnterminatedLiteral(node))
679
+ return text.length > 0 && text.charCodeAt(text.length - 1) === CharacterCodes.backslash
680
+ ? text + ' /'
681
+ : text + '/';
682
+ return text;
683
+ }
684
+ throw new Error('Unsupported literal');
685
+ }
686
+
687
+ /** The source text of a node without leading trivia, as tsgo's GetSourceTextOfNodeFromSourceFile. */
688
+ export function getSourceTextOfNode(sourceText: string, node: Node): string {
689
+ if (node.pos === node.end && node.pos >= 0 && node.kind !== SyntaxKind.EndOfFile) return '';
690
+ const text = sourceText.substring(skipTrivia(sourceText, node.pos), node.end);
691
+ if ((node.flags & NodeFlags.ReparserTransformedLiteral) !== 0) {
692
+ if (node instanceof StringLiteral)
693
+ return (node.tokenFlags & TokenFlags.SingleQuote) !== 0 ? "'" + text + "'" : '"' + text + '"';
694
+ return getTextOfIdentifierLike(node);
695
+ }
696
+ return text;
697
+ }
698
+
699
+ function getTextOfIdentifierLike(node: Node): string {
700
+ if (node instanceof Identifier) return node.text;
701
+ if (node instanceof PrivateIdentifier) return node.text;
702
+ throw new Error('Unexpected reparser-transformed node kind');
703
+ }
704
+
705
+ // Lines
706
+
707
+ /** Go's `strings.TrimSpace`: trims Unicode White_Space. */
708
+ export function trimUnicodeSpace(text: string, start: number, end: number): string {
709
+ while (start < end && isUnicodeWhiteSpace(text.charCodeAt(start))) start++;
710
+ while (end > start && isUnicodeWhiteSpace(text.charCodeAt(end - 1))) end--;
711
+ return text.substring(start, end);
712
+ }
713
+
714
+ /** The zero-based line of `pos`, searching from line `low`. */
715
+ function lineOfPosition(lineStarts: readonly number[], pos: number, low: number): number {
716
+ let high = lineStarts.length - 1;
717
+ while (low <= high) {
718
+ const middle = low + ((high - low) >> 1);
719
+ const value = lineStarts[middle] | 0;
720
+ if (value < pos) low = middle + 1;
721
+ else if (value > pos) high = middle - 1;
722
+ else return middle;
723
+ }
724
+ return low - 1;
725
+ }
726
+
727
+ export function getLinesBetweenPositions(lineStarts: readonly number[], pos1: number, pos2: number): number {
728
+ if (pos1 === pos2) return 0;
729
+ const negative = pos2 < pos1;
730
+ const lower = negative ? pos2 : pos1;
731
+ const upper = negative ? pos1 : pos2;
732
+ const lowerLine = computeLineOfPosition(lineStarts, lower);
733
+ const upperLine = lineOfPosition(lineStarts, upper, lowerLine < 0 ? 0 : lowerLine);
734
+ return negative ? lowerLine - upperLine : upperLine - lowerLine;
735
+ }
736
+
737
+ export function getStartPositionOfRange(text: string, pos: number, includeComments: boolean): number {
738
+ if (pos < 0) return -1;
739
+ return skipTrivia(text, pos, false, includeComments);
740
+ }
741
+
742
+ export function getPreviousNonWhitespacePosition(text: string, pos: number, stopPos: number): number {
743
+ for (; pos >= stopPos; pos--) if (!isWhiteSpaceLike(text.charCodeAt(pos))) return pos;
744
+ return -1;
745
+ }
746
+
747
+ /** Columns of leading whitespace in `text[pos:end]`, with tabs to the next multiple of 4. */
748
+ export function calculateIndent(text: string, pos: number, end: number): number {
749
+ let indent = 0;
750
+ for (; pos < end; pos++) {
751
+ const ch = text.charCodeAt(pos);
752
+ if (!isWhiteSpaceSingleLine(ch)) break;
753
+ if (ch === CharacterCodes.tab) indent += 4 - (indent & 3);
754
+ else indent++;
755
+ }
756
+ return indent;
757
+ }
758
+
759
+ export function isLineBreakChar(ch: number): boolean {
760
+ return isLineBreak(ch);
761
+ }
762
+
763
+ // Comments
764
+
765
+ export function isJSDocLikeText(text: string, comment: CommentRange): boolean {
766
+ return (
767
+ comment.kind === SyntaxKind.MultiLineCommentTrivia &&
768
+ comment.end - comment.pos >= 5 &&
769
+ text.charCodeAt(comment.pos + 2) === CharacterCodes.asterisk &&
770
+ text.charCodeAt(comment.pos + 3) !== CharacterCodes.slash
771
+ );
772
+ }
773
+
774
+ export function isPinnedComment(text: string, comment: CommentRange): boolean {
775
+ return (
776
+ comment.kind === SyntaxKind.MultiLineCommentTrivia &&
777
+ comment.end - comment.pos > 5 &&
778
+ text.charCodeAt(comment.pos + 2) === CharacterCodes.exclamation
779
+ );
780
+ }
781
+
782
+ function skipWhiteSpaceSingleLine(text: string, pos: number): number {
783
+ while (pos < text.length && isWhiteSpaceSingleLine(text.charCodeAt(pos))) pos++;
784
+ return pos;
785
+ }
786
+
787
+ function skipQuotedString(text: string, pos: number): number {
788
+ const quote = text.charCodeAt(pos);
789
+ if (quote !== CharacterCodes.singleQuote && quote !== CharacterCodes.doubleQuote) return -1;
790
+ const close = text.indexOf(quote === CharacterCodes.singleQuote ? "'" : '"', pos + 1);
791
+ return close < 0 ? -1 : close + 1;
792
+ }
793
+
794
+ function skipAttribute(text: string, pos: number, names: readonly string[]): number {
795
+ const next = skipWhiteSpaceSingleLine(text, pos);
796
+ if (next === pos) return -1;
797
+ pos = next;
798
+ let matched = false;
799
+ for (const name of names) {
800
+ if (text.startsWith(name, pos)) {
801
+ pos += name.length;
802
+ matched = true;
803
+ break;
804
+ }
805
+ }
806
+ if (!matched) return -1;
807
+ pos = skipWhiteSpaceSingleLine(text, pos);
808
+ if (text.charCodeAt(pos) !== CharacterCodes.equals) return -1;
809
+ return skipQuotedString(text, skipWhiteSpaceSingleLine(text, pos + 1));
810
+ }
811
+
812
+ const referenceAttributes: readonly string[] = ['path', 'types', 'lib', 'no-default-lib'];
813
+ const amdDependencyAttributes: readonly string[] = ['path'];
814
+
815
+ /** `/// <reference …/>`, `/// <amd-dependency path="…"/>` and `/// <amd-module/>` comments. */
816
+ export function isRecognizedTripleSlashComment(sourceText: string, comment: CommentRange): boolean {
817
+ if (
818
+ comment.kind !== SyntaxKind.SingleLineCommentTrivia ||
819
+ comment.end - comment.pos <= 2 ||
820
+ sourceText.charCodeAt(comment.pos + 1) !== CharacterCodes.slash ||
821
+ sourceText.charCodeAt(comment.pos + 2) !== CharacterCodes.slash
822
+ )
823
+ return false;
824
+ const text = sourceText.substring(comment.pos + 3, comment.end);
825
+ let pos = skipWhiteSpaceSingleLine(text, 0);
826
+ if (text.charCodeAt(pos) !== CharacterCodes.lessThan) return false;
827
+ pos++;
828
+ if (text.startsWith('reference', pos)) pos = skipAttribute(text, pos + 9, referenceAttributes);
829
+ else if (text.startsWith('amd-dependency', pos)) pos = skipAttribute(text, pos + 14, amdDependencyAttributes);
830
+ else if (text.startsWith('amd-module', pos)) pos = skipWhiteSpaceSingleLine(text, pos + 10);
831
+ else return false;
832
+ return pos >= 0 && text.indexOf('/>', pos) >= 0;
833
+ }
834
+
835
+ // Names
836
+
837
+ export function formatGeneratedName(privateName: boolean, prefix: string, base: string, suffix: string): string {
838
+ const name = removeLeadingHash(prefix) + removeLeadingHash(base) + removeLeadingHash(suffix);
839
+ return privateName ? ensureLeadingHash(name) : name;
840
+ }
841
+
842
+ export function removeLeadingHash(text: string): string {
843
+ return text.length > 0 && text.charCodeAt(0) === CharacterCodes.hash ? text.substring(1) : text;
844
+ }
845
+
846
+ export function ensureLeadingHash(text: string): string {
847
+ return text.length > 0 && text.charCodeAt(0) === CharacterCodes.hash ? text : '#' + text;
848
+ }
849
+
850
+ function isASCIIWordCharacter(ch: number): boolean {
851
+ return (
852
+ (ch >= CharacterCodes.a && ch <= CharacterCodes.z) ||
853
+ (ch >= CharacterCodes.A && ch <= CharacterCodes.Z) ||
854
+ isDigit(ch) ||
855
+ ch === CharacterCodes._
856
+ );
857
+ }
858
+
859
+ /** An identifier for a module's base name, e.g. `foo_bar` for `./foo-bar`; one `_` per UTF-8 byte of other characters. */
860
+ export function makeIdentifierFromModuleName(moduleName: string): string {
861
+ moduleName = getBaseFileName(moduleName);
862
+ let out = '';
863
+ let start = 0;
864
+ for (let pos = 0; pos < moduleName.length; pos++) {
865
+ const ch = moduleName.charCodeAt(pos);
866
+ if (pos === 0 && isDigit(ch)) out += '_';
867
+ else if (!isASCIIWordCharacter(ch)) {
868
+ if (start < pos) out += moduleName.substring(start, pos);
869
+ if (ch < 0x80) out += '_';
870
+ else if (ch < 0x800) out += '__';
871
+ else if (ch >= 0xd800 && ch <= 0xdbff && pos + 1 < moduleName.length) {
872
+ out += '____';
873
+ pos++;
874
+ } else out += '___';
875
+ start = pos + 1;
876
+ }
877
+ }
878
+ if (start < moduleName.length) out += moduleName.substring(start);
879
+ return out;
880
+ }
881
+
882
+ export function lineOf(lineStarts: readonly number[], pos: number): number {
883
+ return computeLineOfPosition(lineStarts, pos);
884
+ }