tsc-ts 0.0.3 → 0.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (596) hide show
  1. package/README.md +46 -0
  2. package/dist/api/compiler/ast-utilities.d.ts +82 -0
  3. package/dist/api/compiler/ast-utilities.js +462 -0
  4. package/dist/api/compiler/ast.d.ts +2350 -0
  5. package/dist/api/compiler/ast.js +11206 -0
  6. package/dist/api/compiler/astnav.d.ts +37 -0
  7. package/dist/api/compiler/astnav.js +767 -0
  8. package/dist/api/compiler/binder-utilities.d.ts +182 -0
  9. package/dist/api/compiler/binder-utilities.js +1240 -0
  10. package/dist/api/compiler/binder.d.ts +33 -0
  11. package/dist/api/compiler/binder.js +2358 -0
  12. package/dist/api/compiler/character-codes.d.ts +161 -0
  13. package/dist/api/compiler/character-codes.js +160 -0
  14. package/dist/api/compiler/checker-calls.d.ts +46 -0
  15. package/dist/api/compiler/checker-calls.js +1640 -0
  16. package/dist/api/compiler/checker-classes.d.ts +30 -0
  17. package/dist/api/compiler/checker-classes.js +582 -0
  18. package/dist/api/compiler/checker-contextual.d.ts +77 -0
  19. package/dist/api/compiler/checker-contextual.js +1136 -0
  20. package/dist/api/compiler/checker-declaration-order.d.ts +12 -0
  21. package/dist/api/compiler/checker-declaration-order.js +356 -0
  22. package/dist/api/compiler/checker-declarations.d.ts +33 -0
  23. package/dist/api/compiler/checker-declarations.js +888 -0
  24. package/dist/api/compiler/checker-declared-types.d.ts +48 -0
  25. package/dist/api/compiler/checker-declared-types.js +787 -0
  26. package/dist/api/compiler/checker-decorators.d.ts +26 -0
  27. package/dist/api/compiler/checker-decorators.js +562 -0
  28. package/dist/api/compiler/checker-deprecation.d.ts +33 -0
  29. package/dist/api/compiler/checker-deprecation.js +315 -0
  30. package/dist/api/compiler/checker-destructuring.d.ts +34 -0
  31. package/dist/api/compiler/checker-destructuring.js +584 -0
  32. package/dist/api/compiler/checker-elaboration.d.ts +15 -0
  33. package/dist/api/compiler/checker-elaboration.js +290 -0
  34. package/dist/api/compiler/checker-emit-helpers.d.ts +58 -0
  35. package/dist/api/compiler/checker-emit-helpers.js +154 -0
  36. package/dist/api/compiler/checker-emit-resolver.d.ts +75 -0
  37. package/dist/api/compiler/checker-emit-resolver.js +579 -0
  38. package/dist/api/compiler/checker-evaluator.d.ts +27 -0
  39. package/dist/api/compiler/checker-evaluator.js +188 -0
  40. package/dist/api/compiler/checker-expressions.d.ts +67 -0
  41. package/dist/api/compiler/checker-expressions.js +1351 -0
  42. package/dist/api/compiler/checker-features.d.ts +6 -0
  43. package/dist/api/compiler/checker-features.js +354 -0
  44. package/dist/api/compiler/checker-flow.d.ts +86 -0
  45. package/dist/api/compiler/checker-flow.js +169 -0
  46. package/dist/api/compiler/checker-functions.d.ts +43 -0
  47. package/dist/api/compiler/checker-functions.js +1002 -0
  48. package/dist/api/compiler/checker-generated-code.d.ts +25 -0
  49. package/dist/api/compiler/checker-generated-code.js +168 -0
  50. package/dist/api/compiler/checker-globals.d.ts +14 -0
  51. package/dist/api/compiler/checker-globals.js +37 -0
  52. package/dist/api/compiler/checker-grammar.d.ts +35 -0
  53. package/dist/api/compiler/checker-grammar.js +2573 -0
  54. package/dist/api/compiler/checker-heritage.d.ts +28 -0
  55. package/dist/api/compiler/checker-heritage.js +900 -0
  56. package/dist/api/compiler/checker-inference.d.ts +179 -0
  57. package/dist/api/compiler/checker-inference.js +2105 -0
  58. package/dist/api/compiler/checker-iteration.d.ts +115 -0
  59. package/dist/api/compiler/checker-iteration.js +857 -0
  60. package/dist/api/compiler/checker-javascript.d.ts +42 -0
  61. package/dist/api/compiler/checker-javascript.js +441 -0
  62. package/dist/api/compiler/checker-jsdoc.d.ts +30 -0
  63. package/dist/api/compiler/checker-jsdoc.js +320 -0
  64. package/dist/api/compiler/checker-jsx.d.ts +94 -0
  65. package/dist/api/compiler/checker-jsx.js +1433 -0
  66. package/dist/api/compiler/checker-literals.d.ts +6 -0
  67. package/dist/api/compiler/checker-literals.js +43 -0
  68. package/dist/api/compiler/checker-members.d.ts +198 -0
  69. package/dist/api/compiler/checker-members.js +2126 -0
  70. package/dist/api/compiler/checker-modules.d.ts +85 -0
  71. package/dist/api/compiler/checker-modules.js +2141 -0
  72. package/dist/api/compiler/checker-narrowing.d.ts +120 -0
  73. package/dist/api/compiler/checker-narrowing.js +2797 -0
  74. package/dist/api/compiler/checker-object-literals.d.ts +14 -0
  75. package/dist/api/compiler/checker-object-literals.js +479 -0
  76. package/dist/api/compiler/checker-operators.d.ts +33 -0
  77. package/dist/api/compiler/checker-operators.js +1040 -0
  78. package/dist/api/compiler/checker-overloads.d.ts +7 -0
  79. package/dist/api/compiler/checker-overloads.js +270 -0
  80. package/dist/api/compiler/checker-property-access.d.ts +34 -0
  81. package/dist/api/compiler/checker-property-access.js +672 -0
  82. package/dist/api/compiler/checker-services.d.ts +49 -0
  83. package/dist/api/compiler/checker-services.js +995 -0
  84. package/dist/api/compiler/checker-signatures.d.ts +55 -0
  85. package/dist/api/compiler/checker-signatures.js +788 -0
  86. package/dist/api/compiler/checker-source-file.d.ts +27 -0
  87. package/dist/api/compiler/checker-source-file.js +619 -0
  88. package/dist/api/compiler/checker-statements.d.ts +18 -0
  89. package/dist/api/compiler/checker-statements.js +226 -0
  90. package/dist/api/compiler/checker-super.d.ts +13 -0
  91. package/dist/api/compiler/checker-super.js +241 -0
  92. package/dist/api/compiler/checker-symbol-types.d.ts +67 -0
  93. package/dist/api/compiler/checker-symbol-types.js +1885 -0
  94. package/dist/api/compiler/checker-symbols.d.ts +181 -0
  95. package/dist/api/compiler/checker-symbols.js +1782 -0
  96. package/dist/api/compiler/checker-type-factory.d.ts +142 -0
  97. package/dist/api/compiler/checker-type-factory.js +2501 -0
  98. package/dist/api/compiler/checker-type-nodes.d.ts +26 -0
  99. package/dist/api/compiler/checker-type-nodes.js +828 -0
  100. package/dist/api/compiler/checker-type-operators.d.ts +109 -0
  101. package/dist/api/compiler/checker-type-operators.js +1842 -0
  102. package/dist/api/compiler/checker-types.d.ts +1027 -0
  103. package/dist/api/compiler/checker-types.js +1697 -0
  104. package/dist/api/compiler/checker-unused.d.ts +19 -0
  105. package/dist/api/compiler/checker-unused.js +524 -0
  106. package/dist/api/compiler/checker-utilities.d.ts +33 -0
  107. package/dist/api/compiler/checker-utilities.js +141 -0
  108. package/dist/api/compiler/checker.d.ts +491 -0
  109. package/dist/api/compiler/checker.js +912 -0
  110. package/dist/api/compiler/command-line.d.ts +32 -0
  111. package/dist/api/compiler/command-line.js +383 -0
  112. package/dist/api/compiler/compile-program.d.ts +118 -0
  113. package/dist/api/compiler/compile-program.js +384 -0
  114. package/dist/api/compiler/diagnostic-locales.d.ts +22 -0
  115. package/dist/api/compiler/diagnostic-locales.js +64 -0
  116. package/dist/api/compiler/diagnostic-messages.d.ts +2166 -0
  117. package/dist/api/compiler/diagnostic-messages.js +184 -0
  118. package/dist/api/compiler/diagnostics.d.ts +167 -0
  119. package/dist/api/compiler/diagnostics.js +820 -0
  120. package/dist/api/compiler/emitter.d.ts +71 -0
  121. package/dist/api/compiler/emitter.js +327 -0
  122. package/dist/api/compiler/file-include.d.ts +117 -0
  123. package/dist/api/compiler/file-include.js +536 -0
  124. package/dist/api/compiler/file-loader.d.ts +261 -0
  125. package/dist/api/compiler/file-loader.js +1257 -0
  126. package/dist/api/compiler/file-system.d.ts +51 -0
  127. package/dist/api/compiler/file-system.js +132 -0
  128. package/dist/api/compiler/flow.d.ts +60 -0
  129. package/dist/api/compiler/flow.js +45 -0
  130. package/dist/api/compiler/instantiation.d.ts +74 -0
  131. package/dist/api/compiler/instantiation.js +799 -0
  132. package/dist/api/compiler/jsdoc.d.ts +75 -0
  133. package/dist/api/compiler/jsdoc.js +1229 -0
  134. package/dist/api/compiler/link-tables.d.ts +36 -0
  135. package/dist/api/compiler/link-tables.js +83 -0
  136. package/dist/api/compiler/locale-data.d.ts +24 -0
  137. package/dist/api/compiler/locale-data.js +183 -0
  138. package/dist/api/compiler/locale.d.ts +4 -0
  139. package/dist/api/compiler/locale.js +317 -0
  140. package/dist/api/compiler/locales/cs-CZ.d.ts +2 -0
  141. package/dist/api/compiler/locales/cs-CZ.js +3 -0
  142. package/dist/api/compiler/locales/de-DE.d.ts +2 -0
  143. package/dist/api/compiler/locales/de-DE.js +3 -0
  144. package/dist/api/compiler/locales/es-ES.d.ts +2 -0
  145. package/dist/api/compiler/locales/es-ES.js +3 -0
  146. package/dist/api/compiler/locales/fr-FR.d.ts +2 -0
  147. package/dist/api/compiler/locales/fr-FR.js +3 -0
  148. package/dist/api/compiler/locales/it-IT.d.ts +2 -0
  149. package/dist/api/compiler/locales/it-IT.js +3 -0
  150. package/dist/api/compiler/locales/ja-JP.d.ts +2 -0
  151. package/dist/api/compiler/locales/ja-JP.js +3 -0
  152. package/dist/api/compiler/locales/ko-KR.d.ts +2 -0
  153. package/dist/api/compiler/locales/ko-KR.js +3 -0
  154. package/dist/api/compiler/locales/pl-PL.d.ts +2 -0
  155. package/dist/api/compiler/locales/pl-PL.js +3 -0
  156. package/dist/api/compiler/locales/pt-BR.d.ts +2 -0
  157. package/dist/api/compiler/locales/pt-BR.js +3 -0
  158. package/dist/api/compiler/locales/ru-RU.d.ts +2 -0
  159. package/dist/api/compiler/locales/ru-RU.js +3 -0
  160. package/dist/api/compiler/locales/tr-TR.d.ts +2 -0
  161. package/dist/api/compiler/locales/tr-TR.js +3 -0
  162. package/dist/api/compiler/locales/zh-CN.d.ts +2 -0
  163. package/dist/api/compiler/locales/zh-CN.js +3 -0
  164. package/dist/api/compiler/locales/zh-TW.d.ts +2 -0
  165. package/dist/api/compiler/locales/zh-TW.js +3 -0
  166. package/dist/api/compiler/module-resolution-types.d.ts +83 -0
  167. package/dist/api/compiler/module-resolution-types.js +176 -0
  168. package/dist/api/compiler/module-resolution.d.ts +71 -0
  169. package/dist/api/compiler/module-resolution.js +1598 -0
  170. package/dist/api/compiler/module-specifiers.d.ts +64 -0
  171. package/dist/api/compiler/module-specifiers.js +1101 -0
  172. package/dist/api/compiler/name-resolver.d.ts +43 -0
  173. package/dist/api/compiler/name-resolver.js +509 -0
  174. package/dist/api/compiler/node-builder-names.d.ts +32 -0
  175. package/dist/api/compiler/node-builder-names.js +854 -0
  176. package/dist/api/compiler/node-builder-pseudo.d.ts +36 -0
  177. package/dist/api/compiler/node-builder-pseudo.js +744 -0
  178. package/dist/api/compiler/node-builder-reuse.d.ts +4 -0
  179. package/dist/api/compiler/node-builder-reuse.js +647 -0
  180. package/dist/api/compiler/node-builder.d.ts +270 -0
  181. package/dist/api/compiler/node-builder.js +2645 -0
  182. package/dist/api/compiler/option-declarations.d.ts +90 -0
  183. package/dist/api/compiler/option-declarations.js +1460 -0
  184. package/dist/api/compiler/options.d.ts +289 -0
  185. package/dist/api/compiler/options.js +1197 -0
  186. package/dist/api/compiler/output-paths.d.ts +42 -0
  187. package/dist/api/compiler/output-paths.js +195 -0
  188. package/dist/api/compiler/package-json.d.ts +175 -0
  189. package/dist/api/compiler/package-json.js +1015 -0
  190. package/dist/api/compiler/parallel-parse.d.ts +219 -0
  191. package/dist/api/compiler/parallel-parse.js +537 -0
  192. package/dist/api/compiler/parser.d.ts +587 -0
  193. package/dist/api/compiler/parser.js +6407 -0
  194. package/dist/api/compiler/path.d.ts +91 -0
  195. package/dist/api/compiler/path.js +705 -0
  196. package/dist/api/compiler/printer/async-helpers.d.ts +22 -0
  197. package/dist/api/compiler/printer/async-helpers.js +91 -0
  198. package/dist/api/compiler/printer/auto-generate.d.ts +13 -0
  199. package/dist/api/compiler/printer/auto-generate.js +20 -0
  200. package/dist/api/compiler/printer/decorator-helpers.d.ts +24 -0
  201. package/dist/api/compiler/printer/decorator-helpers.js +118 -0
  202. package/dist/api/compiler/printer/emit-context.d.ts +154 -0
  203. package/dist/api/compiler/printer/emit-context.js +576 -0
  204. package/dist/api/compiler/printer/emit-flags.d.ts +60 -0
  205. package/dist/api/compiler/printer/emit-flags.js +2 -0
  206. package/dist/api/compiler/printer/factory-base.d.ts +171 -0
  207. package/dist/api/compiler/printer/factory-base.js +1505 -0
  208. package/dist/api/compiler/printer/factory.d.ts +147 -0
  209. package/dist/api/compiler/printer/factory.js +542 -0
  210. package/dist/api/compiler/printer/helpers.d.ts +27 -0
  211. package/dist/api/compiler/printer/helpers.js +164 -0
  212. package/dist/api/compiler/printer/name-generator.d.ts +41 -0
  213. package/dist/api/compiler/printer/name-generator.js +283 -0
  214. package/dist/api/compiler/printer/printer.d.ts +411 -0
  215. package/dist/api/compiler/printer/printer.js +4517 -0
  216. package/dist/api/compiler/printer/text-writer.d.ts +46 -0
  217. package/dist/api/compiler/printer/text-writer.js +172 -0
  218. package/dist/api/compiler/printer/utilities.d.ts +82 -0
  219. package/dist/api/compiler/printer/utilities.js +817 -0
  220. package/dist/api/compiler/program-checker.d.ts +156 -0
  221. package/dist/api/compiler/program-checker.js +526 -0
  222. package/dist/api/compiler/program-utilities.d.ts +52 -0
  223. package/dist/api/compiler/program-utilities.js +365 -0
  224. package/dist/api/compiler/program.d.ts +180 -0
  225. package/dist/api/compiler/program.js +1011 -0
  226. package/dist/api/compiler/pseudo-bigint.d.ts +5 -0
  227. package/dist/api/compiler/pseudo-bigint.js +61 -0
  228. package/dist/api/compiler/regexp-checker.d.ts +38 -0
  229. package/dist/api/compiler/regexp-checker.js +942 -0
  230. package/dist/api/compiler/relations.d.ts +263 -0
  231. package/dist/api/compiler/relations.js +4002 -0
  232. package/dist/api/compiler/reparser.d.ts +48 -0
  233. package/dist/api/compiler/reparser.js +1323 -0
  234. package/dist/api/compiler/scanner.d.ts +256 -0
  235. package/dist/api/compiler/scanner.js +2853 -0
  236. package/dist/api/compiler/side-state.d.ts +16 -0
  237. package/dist/api/compiler/side-state.js +89 -0
  238. package/dist/api/compiler/sourcemap.d.ts +55 -0
  239. package/dist/api/compiler/sourcemap.js +340 -0
  240. package/dist/api/compiler/spelling.d.ts +14 -0
  241. package/dist/api/compiler/spelling.js +128 -0
  242. package/dist/api/compiler/symbol-accessibility.d.ts +57 -0
  243. package/dist/api/compiler/symbol-accessibility.js +894 -0
  244. package/dist/api/compiler/symbol.d.ts +240 -0
  245. package/dist/api/compiler/symbol.js +228 -0
  246. package/dist/api/compiler/symlinks.d.ts +32 -0
  247. package/dist/api/compiler/symlinks.js +114 -0
  248. package/dist/api/compiler/syntax-kind.d.ts +389 -0
  249. package/dist/api/compiler/syntax-kind.js +2 -0
  250. package/dist/api/compiler/timeline.d.ts +9 -0
  251. package/dist/api/compiler/timeline.js +54 -0
  252. package/dist/api/compiler/transformers/alias-references.d.ts +39 -0
  253. package/dist/api/compiler/transformers/alias-references.js +676 -0
  254. package/dist/api/compiler/transformers/async-utilities.d.ts +51 -0
  255. package/dist/api/compiler/transformers/async-utilities.js +260 -0
  256. package/dist/api/compiler/transformers/async.d.ts +53 -0
  257. package/dist/api/compiler/transformers/async.js +645 -0
  258. package/dist/api/compiler/transformers/class-fields.d.ts +206 -0
  259. package/dist/api/compiler/transformers/class-fields.js +2418 -0
  260. package/dist/api/compiler/transformers/class-utilities.d.ts +46 -0
  261. package/dist/api/compiler/transformers/class-utilities.js +261 -0
  262. package/dist/api/compiler/transformers/commonjs-module.d.ts +103 -0
  263. package/dist/api/compiler/transformers/commonjs-module.js +1180 -0
  264. package/dist/api/compiler/transformers/const-enum-inliner.d.ts +11 -0
  265. package/dist/api/compiler/transformers/const-enum-inliner.js +36 -0
  266. package/dist/api/compiler/transformers/declarations-diagnostics.d.ts +52 -0
  267. package/dist/api/compiler/transformers/declarations-diagnostics.js +538 -0
  268. package/dist/api/compiler/transformers/declarations-pseudo.d.ts +160 -0
  269. package/dist/api/compiler/transformers/declarations-pseudo.js +797 -0
  270. package/dist/api/compiler/transformers/declarations-resolver.d.ts +152 -0
  271. package/dist/api/compiler/transformers/declarations-resolver.js +35 -0
  272. package/dist/api/compiler/transformers/declarations-syntactic.d.ts +119 -0
  273. package/dist/api/compiler/transformers/declarations-syntactic.js +1582 -0
  274. package/dist/api/compiler/transformers/declarations-tracker.d.ts +46 -0
  275. package/dist/api/compiler/transformers/declarations-tracker.js +197 -0
  276. package/dist/api/compiler/transformers/declarations.d.ts +175 -0
  277. package/dist/api/compiler/transformers/declarations.js +2380 -0
  278. package/dist/api/compiler/transformers/decorator-metadata.d.ts +54 -0
  279. package/dist/api/compiler/transformers/decorator-metadata.js +554 -0
  280. package/dist/api/compiler/transformers/decorator-utilities.d.ts +38 -0
  281. package/dist/api/compiler/transformers/decorator-utilities.js +238 -0
  282. package/dist/api/compiler/transformers/destructuring.d.ts +25 -0
  283. package/dist/api/compiler/transformers/destructuring.js +626 -0
  284. package/dist/api/compiler/transformers/downlevel.d.ts +6 -0
  285. package/dist/api/compiler/transformers/downlevel.js +45 -0
  286. package/dist/api/compiler/transformers/emit-resolver.d.ts +61 -0
  287. package/dist/api/compiler/transformers/emit-resolver.js +197 -0
  288. package/dist/api/compiler/transformers/es-decorators.d.ts +118 -0
  289. package/dist/api/compiler/transformers/es-decorators.js +1901 -0
  290. package/dist/api/compiler/transformers/exponentiation.d.ts +11 -0
  291. package/dist/api/compiler/transformers/exponentiation.js +76 -0
  292. package/dist/api/compiler/transformers/external-module-info.d.ts +35 -0
  293. package/dist/api/compiler/transformers/external-module-info.js +351 -0
  294. package/dist/api/compiler/transformers/for-await.d.ts +43 -0
  295. package/dist/api/compiler/transformers/for-await.js +469 -0
  296. package/dist/api/compiler/transformers/import-elision.d.ts +16 -0
  297. package/dist/api/compiler/transformers/import-elision.js +124 -0
  298. package/dist/api/compiler/transformers/jsx-entities.d.ts +1 -0
  299. package/dist/api/compiler/transformers/jsx-entities.js +256 -0
  300. package/dist/api/compiler/transformers/jsx.d.ts +71 -0
  301. package/dist/api/compiler/transformers/jsx.js +700 -0
  302. package/dist/api/compiler/transformers/legacy-decorators.d.ts +56 -0
  303. package/dist/api/compiler/transformers/legacy-decorators.js +564 -0
  304. package/dist/api/compiler/transformers/logical-assignment.d.ts +14 -0
  305. package/dist/api/compiler/transformers/logical-assignment.js +62 -0
  306. package/dist/api/compiler/transformers/module-utilities.d.ts +9 -0
  307. package/dist/api/compiler/transformers/module-utilities.js +36 -0
  308. package/dist/api/compiler/transformers/module.d.ts +49 -0
  309. package/dist/api/compiler/transformers/module.js +296 -0
  310. package/dist/api/compiler/transformers/named-evaluation.d.ts +26 -0
  311. package/dist/api/compiler/transformers/named-evaluation.js +266 -0
  312. package/dist/api/compiler/transformers/nullish-coalescing.d.ts +9 -0
  313. package/dist/api/compiler/transformers/nullish-coalescing.js +26 -0
  314. package/dist/api/compiler/transformers/object-rest-spread.d.ts +34 -0
  315. package/dist/api/compiler/transformers/object-rest-spread.js +411 -0
  316. package/dist/api/compiler/transformers/optional-catch.d.ts +9 -0
  317. package/dist/api/compiler/transformers/optional-catch.js +20 -0
  318. package/dist/api/compiler/transformers/optional-chain.d.ts +14 -0
  319. package/dist/api/compiler/transformers/optional-chain.js +188 -0
  320. package/dist/api/compiler/transformers/reference-resolver.d.ts +128 -0
  321. package/dist/api/compiler/transformers/reference-resolver.js +1155 -0
  322. package/dist/api/compiler/transformers/runtime-syntax.d.ts +71 -0
  323. package/dist/api/compiler/transformers/runtime-syntax.js +753 -0
  324. package/dist/api/compiler/transformers/subtree-facts.d.ts +9 -0
  325. package/dist/api/compiler/transformers/subtree-facts.js +203 -0
  326. package/dist/api/compiler/transformers/syntax-facts.d.ts +51 -0
  327. package/dist/api/compiler/transformers/syntax-facts.js +254 -0
  328. package/dist/api/compiler/transformers/tagged-template.d.ts +17 -0
  329. package/dist/api/compiler/transformers/tagged-template.js +148 -0
  330. package/dist/api/compiler/transformers/transformer.d.ts +17 -0
  331. package/dist/api/compiler/transformers/transformer.js +54 -0
  332. package/dist/api/compiler/transformers/type-eraser.d.ts +21 -0
  333. package/dist/api/compiler/transformers/type-eraser.js +346 -0
  334. package/dist/api/compiler/transformers/type-serialization.d.ts +20 -0
  335. package/dist/api/compiler/transformers/type-serialization.js +347 -0
  336. package/dist/api/compiler/transformers/using.d.ts +56 -0
  337. package/dist/api/compiler/transformers/using.js +453 -0
  338. package/dist/api/compiler/transformers/utilities.d.ts +50 -0
  339. package/dist/api/compiler/transformers/utilities.js +347 -0
  340. package/dist/api/compiler/transformers/visitor-base.d.ts +6 -0
  341. package/dist/api/compiler/transformers/visitor-base.js +817 -0
  342. package/dist/api/compiler/transformers/visitor-hooks.d.ts +29 -0
  343. package/dist/api/compiler/transformers/visitor-hooks.js +189 -0
  344. package/dist/api/compiler/tsconfig.d.ts +177 -0
  345. package/dist/api/compiler/tsconfig.js +1311 -0
  346. package/dist/api/compiler/type-printer.d.ts +15 -0
  347. package/dist/api/compiler/type-printer.js +74 -0
  348. package/dist/api/compiler/types.d.ts +87 -0
  349. package/dist/api/compiler/types.js +23 -0
  350. package/dist/api/compiler/unicode-identifiers.d.ts +2 -0
  351. package/dist/api/compiler/unicode-identifiers.js +209 -0
  352. package/dist/api/compiler/unicode-properties.d.ts +8 -0
  353. package/dist/api/compiler/unicode-properties.js +531 -0
  354. package/dist/api/compiler/vfs-match.d.ts +24 -0
  355. package/dist/api/compiler/vfs-match.js +587 -0
  356. package/dist/api/library/ast.d.ts +74 -0
  357. package/dist/api/library/ast.generated.d.ts +1145 -0
  358. package/dist/api/library/ast.generated.js +3 -0
  359. package/dist/api/library/ast.js +5 -0
  360. package/dist/api/library/checker.d.ts +51 -0
  361. package/dist/api/library/checker.js +318 -0
  362. package/dist/api/library/compiler-options.generated.d.ts +108 -0
  363. package/dist/api/library/compiler-options.generated.js +3 -0
  364. package/dist/api/library/diagnostics.d.ts +13 -0
  365. package/dist/api/library/diagnostics.js +50 -0
  366. package/dist/api/library/disk.d.ts +13 -0
  367. package/dist/api/library/disk.js +66 -0
  368. package/dist/api/library/enums.generated.d.ts +891 -0
  369. package/dist/api/library/enums.generated.js +916 -0
  370. package/dist/api/library/errors.d.ts +13 -0
  371. package/dist/api/library/errors.js +24 -0
  372. package/dist/api/library/host.d.ts +24 -0
  373. package/dist/api/library/host.js +52 -0
  374. package/dist/api/library/index.d.ts +14 -0
  375. package/dist/api/library/index.js +15 -0
  376. package/dist/api/library/nodes.d.ts +51 -0
  377. package/dist/api/library/nodes.js +196 -0
  378. package/dist/api/library/options.d.ts +144 -0
  379. package/dist/api/library/options.js +308 -0
  380. package/dist/api/library/parse.d.ts +19 -0
  381. package/dist/api/library/parse.js +41 -0
  382. package/dist/api/library/program.d.ts +21 -0
  383. package/dist/api/library/program.js +234 -0
  384. package/dist/api/library/symbols.d.ts +8 -0
  385. package/dist/api/library/symbols.js +11 -0
  386. package/dist/api/library/types.d.ts +313 -0
  387. package/dist/api/library/types.js +6 -0
  388. package/package.json +22 -8
  389. package/src/compiler/ast-utilities.ts +548 -0
  390. package/src/compiler/ast.ts +12862 -0
  391. package/src/compiler/astnav.ts +799 -0
  392. package/src/compiler/binder-utilities.ts +1392 -0
  393. package/src/compiler/binder.ts +2703 -0
  394. package/src/compiler/build-info.ts +1197 -0
  395. package/src/compiler/character-codes.ts +323 -0
  396. package/src/compiler/checker-calls.ts +2155 -0
  397. package/src/compiler/checker-classes.ts +706 -0
  398. package/src/compiler/checker-contextual.ts +1457 -0
  399. package/src/compiler/checker-declaration-order.ts +438 -0
  400. package/src/compiler/checker-declarations.ts +1194 -0
  401. package/src/compiler/checker-declared-types.ts +919 -0
  402. package/src/compiler/checker-decorators.ts +694 -0
  403. package/src/compiler/checker-deprecation.ts +359 -0
  404. package/src/compiler/checker-destructuring.ts +805 -0
  405. package/src/compiler/checker-elaboration.ts +477 -0
  406. package/src/compiler/checker-emit-helpers.ts +224 -0
  407. package/src/compiler/checker-emit-resolver.ts +769 -0
  408. package/src/compiler/checker-evaluator.ts +243 -0
  409. package/src/compiler/checker-expressions.ts +1831 -0
  410. package/src/compiler/checker-features.ts +361 -0
  411. package/src/compiler/checker-flow.ts +394 -0
  412. package/src/compiler/checker-functions.ts +1296 -0
  413. package/src/compiler/checker-generated-code.ts +227 -0
  414. package/src/compiler/checker-globals.ts +52 -0
  415. package/src/compiler/checker-grammar.ts +3584 -0
  416. package/src/compiler/checker-heritage.ts +1233 -0
  417. package/src/compiler/checker-inference.ts +2576 -0
  418. package/src/compiler/checker-iteration.ts +1206 -0
  419. package/src/compiler/checker-javascript.ts +502 -0
  420. package/src/compiler/checker-jsdoc.ts +360 -0
  421. package/src/compiler/checker-jsx.ts +1924 -0
  422. package/src/compiler/checker-literals.ts +61 -0
  423. package/src/compiler/checker-members.ts +2436 -0
  424. package/src/compiler/checker-modules.ts +2886 -0
  425. package/src/compiler/checker-narrowing.ts +3230 -0
  426. package/src/compiler/checker-object-literals.ts +575 -0
  427. package/src/compiler/checker-operators.ts +1422 -0
  428. package/src/compiler/checker-overloads.ts +328 -0
  429. package/src/compiler/checker-property-access.ts +906 -0
  430. package/src/compiler/checker-services.ts +1149 -0
  431. package/src/compiler/checker-signatures.ts +1032 -0
  432. package/src/compiler/checker-source-file.ts +732 -0
  433. package/src/compiler/checker-statements.ts +292 -0
  434. package/src/compiler/checker-super.ts +261 -0
  435. package/src/compiler/checker-symbol-types.ts +2107 -0
  436. package/src/compiler/checker-symbols.ts +2150 -0
  437. package/src/compiler/checker-type-factory.ts +2579 -0
  438. package/src/compiler/checker-type-nodes.ts +1033 -0
  439. package/src/compiler/checker-type-operators.ts +2502 -0
  440. package/src/compiler/checker-types.ts +2340 -0
  441. package/src/compiler/checker-unused.ts +642 -0
  442. package/src/compiler/checker-utilities.ts +161 -0
  443. package/src/compiler/checker.ts +1116 -0
  444. package/src/compiler/command-line.ts +436 -0
  445. package/src/compiler/compile-program.ts +439 -0
  446. package/src/compiler/decoder.ts +1209 -0
  447. package/src/compiler/diagnostic-locales.ts +86 -0
  448. package/src/compiler/diagnostic-messages.ts +2349 -0
  449. package/src/compiler/diagnostics.ts +897 -0
  450. package/src/compiler/emitter.ts +434 -0
  451. package/src/compiler/encoder.ts +1945 -0
  452. package/src/compiler/file-include.ts +673 -0
  453. package/src/compiler/file-loader.ts +1528 -0
  454. package/src/compiler/file-system.ts +143 -0
  455. package/src/compiler/flow.ts +89 -0
  456. package/src/compiler/help.ts +473 -0
  457. package/src/compiler/incremental.ts +2784 -0
  458. package/src/compiler/init.ts +141 -0
  459. package/src/compiler/instantiation.ts +894 -0
  460. package/src/compiler/jsdoc.ts +1386 -0
  461. package/src/compiler/link-tables.ts +98 -0
  462. package/src/compiler/locale-data.ts +203 -0
  463. package/src/compiler/locale.ts +307 -0
  464. package/src/compiler/locales/cs-CZ.ts +5 -0
  465. package/src/compiler/locales/de-DE.ts +5 -0
  466. package/src/compiler/locales/es-ES.ts +5 -0
  467. package/src/compiler/locales/fr-FR.ts +5 -0
  468. package/src/compiler/locales/it-IT.ts +5 -0
  469. package/src/compiler/locales/ja-JP.ts +5 -0
  470. package/src/compiler/locales/ko-KR.ts +5 -0
  471. package/src/compiler/locales/pl-PL.ts +5 -0
  472. package/src/compiler/locales/pt-BR.ts +5 -0
  473. package/src/compiler/locales/ru-RU.ts +5 -0
  474. package/src/compiler/locales/tr-TR.ts +5 -0
  475. package/src/compiler/locales/zh-CN.ts +5 -0
  476. package/src/compiler/locales/zh-TW.ts +5 -0
  477. package/src/compiler/module-resolution-types.ts +243 -0
  478. package/src/compiler/module-resolution.ts +2072 -0
  479. package/src/compiler/module-specifiers.ts +1491 -0
  480. package/src/compiler/name-resolver.ts +646 -0
  481. package/src/compiler/node-builder-names.ts +1069 -0
  482. package/src/compiler/node-builder-pseudo.ts +892 -0
  483. package/src/compiler/node-builder-reuse.ts +764 -0
  484. package/src/compiler/node-builder.ts +3425 -0
  485. package/src/compiler/option-declarations.ts +1560 -0
  486. package/src/compiler/options.ts +1576 -0
  487. package/src/compiler/output-paths.ts +334 -0
  488. package/src/compiler/package-json.ts +1083 -0
  489. package/src/compiler/parallel-check.ts +1951 -0
  490. package/src/compiler/parallel-parse.ts +590 -0
  491. package/src/compiler/parse-thread.ts +140 -0
  492. package/src/compiler/parser.ts +7716 -0
  493. package/src/compiler/path.ts +717 -0
  494. package/src/compiler/printer/async-helpers.ts +183 -0
  495. package/src/compiler/printer/auto-generate.ts +27 -0
  496. package/src/compiler/printer/decorator-helpers.ts +218 -0
  497. package/src/compiler/printer/emit-context.ts +679 -0
  498. package/src/compiler/printer/emit-flags.ts +64 -0
  499. package/src/compiler/printer/factory-base.ts +2577 -0
  500. package/src/compiler/printer/factory.ts +764 -0
  501. package/src/compiler/printer/helpers.ts +291 -0
  502. package/src/compiler/printer/name-generator.ts +372 -0
  503. package/src/compiler/printer/printer.ts +5072 -0
  504. package/src/compiler/printer/text-writer.ts +183 -0
  505. package/src/compiler/printer/utilities.ts +884 -0
  506. package/src/compiler/program-checker.ts +592 -0
  507. package/src/compiler/program-utilities.ts +435 -0
  508. package/src/compiler/program.ts +1419 -0
  509. package/src/compiler/pseudo-bigint.ts +62 -0
  510. package/src/compiler/regexp-checker.ts +1142 -0
  511. package/src/compiler/relations.ts +5149 -0
  512. package/src/compiler/reparser.ts +1566 -0
  513. package/src/compiler/scanner.ts +2951 -0
  514. package/src/compiler/show-config.ts +239 -0
  515. package/src/compiler/side-state.ts +125 -0
  516. package/src/compiler/sourcemap.ts +366 -0
  517. package/src/compiler/spelling.ts +122 -0
  518. package/src/compiler/symbol-accessibility.ts +1071 -0
  519. package/src/compiler/symbol.ts +439 -0
  520. package/src/compiler/symlinks.ts +137 -0
  521. package/src/compiler/syntax-kind.ts +391 -0
  522. package/src/compiler/thread-entry.ts +191 -0
  523. package/src/compiler/timeline.ts +53 -0
  524. package/src/compiler/transformers/alias-references.ts +757 -0
  525. package/src/compiler/transformers/async-utilities.ts +335 -0
  526. package/src/compiler/transformers/async.ts +838 -0
  527. package/src/compiler/transformers/class-fields.ts +2967 -0
  528. package/src/compiler/transformers/class-utilities.ts +324 -0
  529. package/src/compiler/transformers/commonjs-module.ts +1621 -0
  530. package/src/compiler/transformers/const-enum-inliner.ts +50 -0
  531. package/src/compiler/transformers/declarations-diagnostics.ts +832 -0
  532. package/src/compiler/transformers/declarations-pseudo.ts +966 -0
  533. package/src/compiler/transformers/declarations-resolver.ts +249 -0
  534. package/src/compiler/transformers/declarations-syntactic.ts +1859 -0
  535. package/src/compiler/transformers/declarations-tracker.ts +269 -0
  536. package/src/compiler/transformers/declarations.ts +3120 -0
  537. package/src/compiler/transformers/decorator-metadata.ts +697 -0
  538. package/src/compiler/transformers/decorator-utilities.ts +283 -0
  539. package/src/compiler/transformers/destructuring.ts +708 -0
  540. package/src/compiler/transformers/downlevel.ts +50 -0
  541. package/src/compiler/transformers/emit-resolver.ts +258 -0
  542. package/src/compiler/transformers/es-decorators.ts +2682 -0
  543. package/src/compiler/transformers/exponentiation.ts +80 -0
  544. package/src/compiler/transformers/external-module-info.ts +412 -0
  545. package/src/compiler/transformers/for-await.ts +687 -0
  546. package/src/compiler/transformers/import-elision.ts +152 -0
  547. package/src/compiler/transformers/jsx-entities.ts +256 -0
  548. package/src/compiler/transformers/jsx.ts +824 -0
  549. package/src/compiler/transformers/legacy-decorators.ts +726 -0
  550. package/src/compiler/transformers/logical-assignment.ts +75 -0
  551. package/src/compiler/transformers/module-utilities.ts +42 -0
  552. package/src/compiler/transformers/module.ts +474 -0
  553. package/src/compiler/transformers/named-evaluation.ts +389 -0
  554. package/src/compiler/transformers/nullish-coalescing.ts +35 -0
  555. package/src/compiler/transformers/object-rest-spread.ts +577 -0
  556. package/src/compiler/transformers/optional-catch.ts +29 -0
  557. package/src/compiler/transformers/optional-chain.ts +246 -0
  558. package/src/compiler/transformers/reference-resolver.ts +1201 -0
  559. package/src/compiler/transformers/runtime-syntax.ts +942 -0
  560. package/src/compiler/transformers/subtree-facts.ts +245 -0
  561. package/src/compiler/transformers/syntax-facts.ts +353 -0
  562. package/src/compiler/transformers/tagged-template.ts +167 -0
  563. package/src/compiler/transformers/transformer.ts +56 -0
  564. package/src/compiler/transformers/type-eraser.ts +520 -0
  565. package/src/compiler/transformers/type-serialization.ts +374 -0
  566. package/src/compiler/transformers/using.ts +613 -0
  567. package/src/compiler/transformers/utilities.ts +419 -0
  568. package/src/compiler/transformers/visitor-base.ts +1601 -0
  569. package/src/compiler/transformers/visitor-hooks.ts +252 -0
  570. package/src/compiler/tsc-build.ts +1418 -0
  571. package/src/compiler/tsc-cli.ts +666 -0
  572. package/src/compiler/tsc-compile.ts +437 -0
  573. package/src/compiler/tsc-watch.ts +854 -0
  574. package/src/compiler/tsconfig.ts +1574 -0
  575. package/src/compiler/type-printer.ts +110 -0
  576. package/src/compiler/types.ts +115 -0
  577. package/src/compiler/unicode-identifiers.ts +212 -0
  578. package/src/compiler/unicode-properties.ts +537 -0
  579. package/src/compiler/vfs-match.ts +597 -0
  580. package/src/compiler/xxh3.ts +650 -0
  581. package/src/library/ast.generated.ts +1685 -0
  582. package/src/library/ast.ts +104 -0
  583. package/src/library/checker.ts +384 -0
  584. package/src/library/compiler-options.generated.ts +114 -0
  585. package/src/library/diagnostics.ts +72 -0
  586. package/src/library/disk.ts +73 -0
  587. package/src/library/enums.generated.ts +1024 -0
  588. package/src/library/errors.ts +26 -0
  589. package/src/library/host.ts +63 -0
  590. package/src/library/index.ts +71 -0
  591. package/src/library/nodes.ts +232 -0
  592. package/src/library/options.ts +449 -0
  593. package/src/library/parse.ts +63 -0
  594. package/src/library/program.ts +293 -0
  595. package/src/library/symbols.ts +15 -0
  596. package/src/library/types.ts +359 -0
@@ -0,0 +1,1011 @@
1
+ /**
2
+ * A program: the files of a compilation and the diagnostics found building it, before binding and checking.
3
+ *
4
+ * ```ts
5
+ * const program = new Program(config, new CompilerHost(fs, cwd, libDirectory));
6
+ * for (const file of program.getSourceFiles()) console.log(file.fileName);
7
+ * ```
8
+ */
9
+ import { ArrayLiteralExpression, Decorator, getText, NodeVisitor, ObjectLiteralExpression, ParameterDeclaration, } from './ast.js';
10
+ import { compareDiagnostics, createCompilerDiagnostic, Diagnostic, equalDiagnostics, equalDiagnosticsNoRelatedInfo, useThreadTextCaches, } from './diagnostics.js';
11
+ import { canReplaceFile, FileLoader, jsxRuntimeImportOf, modeAwareKey, needsImportHelpersImportSpecifier, withReplacedFile, } from './file-loader.js';
12
+ import { PackageJsonLookup } from './package-json.js';
13
+ import { ProcessingDiagnostic } from './file-include.js';
14
+ import { getTypesPackageName, moduleResolutionKindName } from './module-resolution-types.js';
15
+ import { getAllowJS, getEmitDeclarations, getEmitModuleKind, getEmitScriptTarget, getModuleResolutionKind, getStrictOptionValue, JsxEmit, ModuleKind, ModuleResolutionKind, ScriptTarget, } from './options.js';
16
+ import { getCommonSourceDirectory, getComputedCommonSourceDirectory, getOutputPathsFor, getSourceFilePathInNewDirWorker, } from './output-paths.js';
17
+ import { parseIsolatedEntityName } from './parser.js';
18
+ import { combinePaths, comparePaths, containsPath, getBaseFileName, getCanonicalFileName, getDirectoryPath, getNormalizedAbsolutePath, getPathComponentsRelativeTo, getPathFromPathComponents, getRelativePathFromFile, getRootLength, pathIsAbsolute, pathIsRelative, toFileNameLowerCase, toPath, } from './path.js';
19
+ import { getDefaultResolutionModeForFile, getImpliedNodeFormatForEmit, getModeForUsageLocation, isCheckJsEnabledForFile, isSourceFileJS, jsxEmitName, moduleKindName, libFileMetadata, } from './program-utilities.js';
20
+ import { isIdentifierText } from './scanner.js';
21
+ import { diagnosticAtNode, findPropertyAssignment, getTsConfigObjectLiteral, } from './tsconfig.js';
22
+ import { KnownSymlinks } from './symlinks.js';
23
+ import { mark } from './timeline.js';
24
+ // The symlink caches and packages maps of programs shared with other threads (`prepareForSharing`),
25
+ // as this thread computed them.
26
+ const threadSymlinkCaches = new Map();
27
+ const threadPackagesMaps = new Map();
28
+ export class Program {
29
+ commandLine;
30
+ host;
31
+ options;
32
+ currentDirectory;
33
+ useCaseSensitiveFileNames;
34
+ includeProcessor;
35
+ processed;
36
+ programDiagnosticsList = [];
37
+ emitBlockingPaths = new Set();
38
+ commonSourceDirectoryValue = undefined;
39
+ packagesMap = undefined;
40
+ symlinks = undefined;
41
+ /** Set by `prepareForSharing`: the program is immutable from then on. */
42
+ shared = false;
43
+ /** The globals and module augmentations as the main thread's checker merged them, for checker threads. */
44
+ mergedGlobals = undefined;
45
+ /** What emit resolvers index for all files, built by the main thread for checker threads. */
46
+ emitIndexes = undefined;
47
+ /**
48
+ * `loader`, if given, is a FileLoader of `host` and `commandLine` that has not loaded yet. With `previous`
49
+ * and `processed` (`updateFile`), the program takes `processed` as its files and the option diagnostics of
50
+ * `previous`.
51
+ */
52
+ constructor(commandLine, host, loader, previous, processed) {
53
+ this.commandLine = commandLine;
54
+ this.host = host;
55
+ this.options = commandLine.options;
56
+ this.currentDirectory = host.currentDirectory;
57
+ this.useCaseSensitiveFileNames = host.fs.useCaseSensitiveFileNames;
58
+ if (previous !== undefined && processed !== undefined) {
59
+ this.processed = processed;
60
+ this.includeProcessor = processed.includeProcessor;
61
+ for (const diagnostic of previous.programDiagnosticsList)
62
+ this.programDiagnosticsList.push(diagnostic);
63
+ for (const path of previous.emitBlockingPaths)
64
+ this.emitBlockingPaths.add(path);
65
+ this.symlinks = previous.symlinks;
66
+ }
67
+ else {
68
+ this.processed = (loader ?? new FileLoader(host, commandLine)).load();
69
+ this.includeProcessor = this.processed.includeProcessor;
70
+ this.verifyCompilerOptions();
71
+ }
72
+ }
73
+ /**
74
+ * The program with the file at `path` read again from `host` and everything else taken from this program,
75
+ * as tsgo's UpdateProgram makes it: `undefined` when the file is not in the program, belongs to a package
76
+ * that is installed more than once, or no longer imports, references or needs the same modules
77
+ * (`canReplaceFile`, and the tslib and JSX runtime imports the program kept for the file), so the program
78
+ * must be loaded again.
79
+ */
80
+ updateFile(path, host) {
81
+ const processed = this.processed;
82
+ const file = processed.filesByPath.get(path);
83
+ if (file === undefined)
84
+ return undefined;
85
+ const next = host.getSourceFile(file.fileName, file.path, file.externalModuleIndicatorOptions);
86
+ if (next === undefined)
87
+ return undefined;
88
+ if (processed.redirectFilesByPath.has(path) || processed.redirectTargets.has(path))
89
+ return undefined;
90
+ if (!canReplaceFile(file, next, (f, specifier) => this.getModeForUsageLocation(f, specifier)))
91
+ return undefined;
92
+ const options = processed.projectReferenceMapper.getCompilerOptionsForFile(next.path, next.fileName);
93
+ if (processed.importHelpersImportSpecifiers.has(path) !== needsImportHelpersImportSpecifier(next, options))
94
+ return undefined;
95
+ const jsxImport = processed.jsxRuntimeImports.get(path);
96
+ if ((jsxImport === undefined ? '' : jsxImport.moduleReference) !== jsxRuntimeImportOf(next, options))
97
+ return undefined;
98
+ return new Program(this.commandLine, host, undefined, this, withReplacedFile(processed, next));
99
+ }
100
+ /** Libraries first, then the other files in the order they were found. */
101
+ getSourceFiles() {
102
+ return this.processed.files;
103
+ }
104
+ getSourceFileByPath(path) {
105
+ return this.processed.filesByPath.get(path);
106
+ }
107
+ getSourceFile(fileName) {
108
+ return this.getSourceFileByPath(this.toPath(fileName));
109
+ }
110
+ /** Files that were referenced but could not be read. */
111
+ missingFiles() {
112
+ return this.processed.missingFiles;
113
+ }
114
+ toPath(fileName) {
115
+ return toPath(fileName, this.currentDirectory, this.useCaseSensitiveFileNames);
116
+ }
117
+ emitScriptTarget() {
118
+ return getEmitScriptTarget(this.options);
119
+ }
120
+ /** `fileName` as given, or relative to the current directory. */
121
+ displayFileName(fileName, relative) {
122
+ if (!relative)
123
+ return fileName;
124
+ return getPathFromPathComponents(getPathComponentsRelativeTo(this.currentDirectory, fileName, this.useCaseSensitiveFileNames, this.currentDirectory));
125
+ }
126
+ // ---- Files
127
+ isSourceFileFromExternalLibrary(file) {
128
+ return this.processed.sourceFilesFoundSearchingNodeModules.has(file.path);
129
+ }
130
+ isSourceFileDefaultLibrary(path) {
131
+ return this.processed.libFiles.has(path);
132
+ }
133
+ /** The bundled library loaded as `path`, if any. */
134
+ getDefaultLibFile(path) {
135
+ return this.processed.libFiles.get(path);
136
+ }
137
+ /** The declaration output loaded instead of a source of a referenced project, or `''`. */
138
+ getParseFileRedirect(fileName) {
139
+ return this.processed.projectReferenceMapper.getParseFileRedirect(this.toPath(fileName));
140
+ }
141
+ /** Files the type reference directives of a file resolved to. */
142
+ getResolvedTypeReferenceDirectiveFiles(path) {
143
+ const result = [];
144
+ const resolutions = this.processed.typeResolutionsInFile.get(path);
145
+ if (resolutions !== undefined) {
146
+ for (const resolved of resolutions.values()) {
147
+ if (resolved.resolvedFileName !== '')
148
+ result.push(resolved.resolvedFileName);
149
+ }
150
+ }
151
+ return result;
152
+ }
153
+ /**
154
+ * Whether `packageJsonLookups` has every lookup of the program's module resolution: not where it
155
+ * took resolutions from parse threads whose lookups may miss some (`preparedPackageJsonLookups`).
156
+ */
157
+ hasAllPackageJsonLookups() {
158
+ return this.processed.preparedPackageJsons !== undefined;
159
+ }
160
+ /**
161
+ * The `package.json` lookups of module resolution: this program's, and those of the parse threads
162
+ * whose resolutions it took. A directory can be among both.
163
+ */
164
+ packageJsonLookups() {
165
+ const result = [];
166
+ for (const info of this.processed.resolver.packageJsonInfoCache.infos())
167
+ result.push(new PackageJsonLookup(info.packageDirectory, info.contents !== undefined, info.directoryExists));
168
+ const prepared = this.processed.preparedPackageJsons;
169
+ if (prepared !== undefined)
170
+ for (const lookup of prepared)
171
+ result.push(lookup);
172
+ return result;
173
+ }
174
+ /** The typings cache of automatic type acquisition, or `''`. */
175
+ getGlobalTypingsCacheLocation() {
176
+ return this.processed.resolver.typingsLocation;
177
+ }
178
+ /** Files of the same package version that redirect to the file at `path`. */
179
+ getRedirectTargets(path) {
180
+ return this.processed.redirectTargets.get(path) ?? [];
181
+ }
182
+ /** The directory of the nearest `package.json` at or above `directory`, or `''`. */
183
+ getNearestAncestorDirectoryWithPackageJson(directory) {
184
+ const scope = this.processed.resolver.getPackageScopeForPath(directory);
185
+ return scope !== undefined && scope.contents !== undefined ? scope.packageDirectory : '';
186
+ }
187
+ /** The `package.json` at `packageJsonPath`, if it exists and is the scope of its directory. */
188
+ getPackageJsonInfo(packageJsonPath) {
189
+ const directory = getDirectoryPath(packageJsonPath);
190
+ const scope = this.processed.resolver.getPackageScopeForPath(directory);
191
+ return scope !== undefined && scope.contents !== undefined && scope.packageDirectory === directory
192
+ ? scope
193
+ : undefined;
194
+ }
195
+ /**
196
+ * Directory symlinks seen by module resolution, and those of the runtime dependencies of the
197
+ * packages that contain emitted files.
198
+ */
199
+ getSymlinkCache() {
200
+ let symlinks = this.symlinks ?? (this.shared ? threadSymlinkCaches.get(this) : undefined);
201
+ if (symlinks !== undefined)
202
+ return symlinks;
203
+ symlinks = this.computeSymlinkCache();
204
+ if (this.shared)
205
+ threadSymlinkCaches.set(this, symlinks);
206
+ else
207
+ this.symlinks = symlinks;
208
+ return symlinks;
209
+ }
210
+ computeSymlinkCache() {
211
+ const symlinks = new KnownSymlinks(this.currentDirectory, this.useCaseSensitiveFileNames);
212
+ // Resolutions record the symlink path they were found through.
213
+ for (const resolutions of this.processed.resolvedModules.values())
214
+ if (resolutions !== undefined)
215
+ for (const resolved of resolutions.values())
216
+ symlinks.processResolution(resolved.originalPath, resolved.resolvedFileName);
217
+ for (const resolutions of this.processed.typeResolutionsInFile.values())
218
+ if (resolutions !== undefined)
219
+ for (const resolved of resolutions.values())
220
+ symlinks.processResolution(resolved.originalPath, resolved.resolvedFileName);
221
+ const seenPackageJsons = new Set();
222
+ // Directories as spelled, once one of their files got past the checks below: every file of a
223
+ // package names its directory the same, and its path need not be computed again.
224
+ const seenDirectories = new Set();
225
+ const resolver = this.processed.resolver;
226
+ for (const [path, metadata] of this.processed.sourceFileMetadata) {
227
+ const directory = metadata.packageJsonDirectory;
228
+ if (directory === '' || seenDirectories.has(directory))
229
+ continue;
230
+ const file = this.getSourceFileByPath(path);
231
+ if (file === undefined || !this.sourceFileMayBeEmitted(file, false))
232
+ continue;
233
+ const directoryPath = this.toPath(directory);
234
+ seenDirectories.add(directory);
235
+ if (seenPackageJsons.has(directoryPath))
236
+ continue;
237
+ seenPackageJsons.add(directoryPath);
238
+ const packageJsonName = combinePaths(directory, 'package.json');
239
+ const contents = this.getPackageJsonInfo(packageJsonName)?.contents;
240
+ if (contents === undefined)
241
+ continue;
242
+ for (const dependency of contents.getRuntimeDependencyNames()) {
243
+ // Usually the symlink next to the package.json is already known.
244
+ if (symlinks.hasDirectory(this.toPath(combinePaths(combinePaths(directory, 'node_modules'), dependency))))
245
+ continue;
246
+ if (!dependency.startsWith('@types') &&
247
+ symlinks.hasDirectory(this.toPath(combinePaths(combinePaths(directory, 'node_modules'), getTypesPackageName(dependency)))))
248
+ continue;
249
+ const resolved = resolver.resolvePackageDirectory(dependency, packageJsonName, ModuleKind.CommonJS);
250
+ if (resolved !== undefined && resolved.resolvedFileName !== '')
251
+ symlinks.processResolution(combinePaths(resolved.originalPath, 'package.json'), combinePaths(resolved.resolvedFileName, 'package.json'));
252
+ }
253
+ }
254
+ return symlinks;
255
+ }
256
+ sourceFileMetadata(path) {
257
+ return this.processed.sourceFileMetadata.get(path) ?? libFileMetadata;
258
+ }
259
+ redirectFile(path) {
260
+ return this.processed.redirectFilesByPath.get(path);
261
+ }
262
+ /** The source of a referenced project whose declaration output was loaded as `path`, else `fileName`. */
263
+ getSourceOfProjectReferenceIfOutputIncluded(path, fileName) {
264
+ return this.processed.outputFileToProjectReferenceSource.get(path) ?? fileName;
265
+ }
266
+ getProjectReferenceFromSource(path) {
267
+ return this.processed.projectReferenceMapper.sourceToProjectReference.get(path);
268
+ }
269
+ /** The configs of the project's references; `undefined` for those that couldn't be read. */
270
+ getResolvedProjectReferences() {
271
+ return this.processed.projectReferenceMapper.resolvedProjectReferences();
272
+ }
273
+ getCompilerOptionsForFile(file) {
274
+ return this.processed.projectReferenceMapper.getCompilerOptionsForFile(file.path, file.fileName);
275
+ }
276
+ importHelpersImportSpecifier(path) {
277
+ return this.processed.importHelpersImportSpecifiers.get(path);
278
+ }
279
+ getModeForUsageLocation(file, location) {
280
+ return getModeForUsageLocation(file.fileName, this.sourceFileMetadata(file.path), location, this.getCompilerOptionsForFile(file));
281
+ }
282
+ getImpliedNodeFormatForEmit(file) {
283
+ return getImpliedNodeFormatForEmit(file.fileName, getEmitModuleKind(this.getCompilerOptionsForFile(file)), this.sourceFileMetadata(file.path));
284
+ }
285
+ getDefaultResolutionModeForFile(file) {
286
+ return getDefaultResolutionModeForFile(file.fileName, this.sourceFileMetadata(file.path), this.getCompilerOptionsForFile(file));
287
+ }
288
+ /** The program file for a resolved file name, or the source file a referenced project's output redirects to. */
289
+ getSourceFileForResolvedModule(fileName) {
290
+ const file = this.getSourceFile(fileName);
291
+ if (file !== undefined)
292
+ return file;
293
+ const redirect = this.getParseFileRedirect(fileName);
294
+ return redirect !== '' ? this.getSourceFile(redirect) : undefined;
295
+ }
296
+ /** Packages that modules resolved into, by name: whether any resolution into them was a declaration file. */
297
+ getPackagesMap() {
298
+ let map = this.packagesMap ?? (this.shared ? threadPackagesMaps.get(this) : undefined);
299
+ if (map !== undefined)
300
+ return map;
301
+ map = new Map();
302
+ for (const resolutions of this.processed.resolvedModules.values()) {
303
+ if (resolutions === undefined)
304
+ continue;
305
+ for (const resolved of resolutions.values()) {
306
+ const name = resolved.packageId?.name ?? '';
307
+ if (name !== '')
308
+ map.set(name, map.get(name) === true || resolved.extension === '.d.ts');
309
+ }
310
+ }
311
+ if (this.shared)
312
+ threadPackagesMaps.set(this, map);
313
+ else
314
+ this.packagesMap = map;
315
+ return map;
316
+ }
317
+ getResolvedModule(file, moduleName, mode) {
318
+ return this.processed.resolvedModules.get(file.path)?.get(modeAwareKey(moduleName, mode));
319
+ }
320
+ /** The program files that the imports and type reference directives of `file` resolved to. */
321
+ /**
322
+ * The files `file` imports and references through type directives. `byFileName`, the program's
323
+ * files by file name, finds a file without computing its path when it is resolved by that name.
324
+ */
325
+ getResolvedFilesOf(file, byFileName) {
326
+ const result = [];
327
+ const modules = this.processed.resolvedModules.get(file.path);
328
+ if (modules !== undefined)
329
+ for (const resolved of modules.values()) {
330
+ const name = resolved.resolvedFileName;
331
+ if (name === '')
332
+ continue;
333
+ const target = byFileName?.get(name) ?? this.getSourceFileForResolvedModule(name);
334
+ if (target !== undefined)
335
+ result.push(target);
336
+ }
337
+ const types = this.processed.typeResolutionsInFile.get(file.path);
338
+ if (types !== undefined)
339
+ for (const resolved of types.values()) {
340
+ const name = resolved.resolvedFileName;
341
+ if (name === '')
342
+ continue;
343
+ const target = byFileName?.get(name) ?? this.getSourceFile(name);
344
+ if (target !== undefined)
345
+ result.push(target);
346
+ }
347
+ return result;
348
+ }
349
+ /** The specifier of the implicit JSX runtime import of `file`, if any. */
350
+ jsxRuntimeImportSpecifier(path) {
351
+ return this.processed.jsxRuntimeImports.get(path)?.specifier;
352
+ }
353
+ getResolvedModuleFromModuleSpecifier(file, specifier) {
354
+ const text = specifierText(specifier);
355
+ return this.getResolvedModule(file, text, this.getModeForUsageLocation(file, specifier));
356
+ }
357
+ /** Whether emit writes outputs for `file`. */
358
+ sourceFileMayBeEmitted(file, forceDtsEmit) {
359
+ const options = this.options;
360
+ if (options.noEmitForJsFiles === true && isSourceFileJS(file))
361
+ return false;
362
+ if (file.isDeclarationFile)
363
+ return false;
364
+ if (this.isSourceFileFromExternalLibrary(file))
365
+ return false;
366
+ if (forceDtsEmit)
367
+ return true;
368
+ if (this.getProjectReferenceFromSource(file.path) !== undefined)
369
+ return false;
370
+ if (file.scriptKind !== 6 /* ScriptKind.JSON */)
371
+ return true;
372
+ if (options.outDir === undefined)
373
+ return false;
374
+ if (options.rootDir !== undefined || options.configFilePath !== undefined) {
375
+ const commonDirectory = getNormalizedAbsolutePath(getCommonSourceDirectory(options, () => [], this.currentDirectory, this.useCaseSensitiveFileNames, undefined), this.currentDirectory);
376
+ const outputPath = getSourceFilePathInNewDirWorker(file.fileName, options.outDir, this.currentDirectory, commonDirectory, this.useCaseSensitiveFileNames);
377
+ if (comparePaths(file.fileName, outputPath, this.useCaseSensitiveFileNames, this.currentDirectory) === 0) {
378
+ return false;
379
+ }
380
+ }
381
+ return true;
382
+ }
383
+ /** The directory outputs are laid out relative to, with a trailing `/`. */
384
+ commonSourceDirectory() {
385
+ if (this.commonSourceDirectoryValue === undefined) {
386
+ this.commonSourceDirectoryValue = getCommonSourceDirectory(this.options, () => this.emittedNonDeclarationFiles(), this.currentDirectory, this.useCaseSensitiveFileNames, (files, root) => this.checkSourceFilesBelongToPath(files, root));
387
+ }
388
+ return this.commonSourceDirectoryValue;
389
+ }
390
+ emittedNonDeclarationFiles() {
391
+ const files = [];
392
+ for (const file of this.processed.files) {
393
+ if (this.sourceFileMayBeEmitted(file, false) && !file.isDeclarationFile)
394
+ files.push(file.fileName);
395
+ }
396
+ return files;
397
+ }
398
+ checkSourceFilesBelongToPath(files, root) {
399
+ for (const file of files) {
400
+ if (containsPath(root, file, this.useCaseSensitiveFileNames, this.currentDirectory))
401
+ continue;
402
+ const absolute = getCanonicalFileName(getNormalizedAbsolutePath(file, this.currentDirectory), this.useCaseSensitiveFileNames);
403
+ this.includeProcessor.addProcessingDiagnostic(ProcessingDiagnostic.explainingFileInclude(absolute, undefined, 1234 /* Diagnostics.File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files */, [file, root]));
404
+ }
405
+ }
406
+ /**
407
+ * Computes what checking, reporting and emit would otherwise compute on first use, so that they
408
+ * never write to the program: a program shared with other threads (parallel-check.ts) is
409
+ * immutable. Neither adds diagnostics. File inclusion diagnostics are fixed first, as tsgo fixes
410
+ * them on first use: computing the common source directory checks that files are under `rootDir`
411
+ * (or the config file's directory), which reports only when options compute it while the program
412
+ * is created (verifyCompilerOptions), not when emit or declaration diagnostics compute it later.
413
+ */
414
+ /**
415
+ * Whether the program was prepared for sharing (`prepareForSharing`): its objects are immutable, so what is
416
+ * computed on first use after that is not kept in them.
417
+ */
418
+ isShared() {
419
+ return this.shared;
420
+ }
421
+ prepareForSharing() {
422
+ // Each thread computes the symlink cache and the packages map on first use (module specifiers,
423
+ // and the hint of a missing declaration file): checking rarely needs them.
424
+ this.shared = true;
425
+ this.includeProcessor.diagnostics(this);
426
+ mark('include diagnostics');
427
+ this.commonSourceDirectory();
428
+ // File system and resolution lookups that checking and declaration emit add later (module
429
+ // specifiers probe files and `package.json` scopes) go to tables of each thread.
430
+ this.host.fs.prepareForSharing();
431
+ this.processed.resolver.prepareForSharing();
432
+ // So do the line starts and UTF-8 offsets of declaration files, which the parser leaves out.
433
+ useThreadTextCaches();
434
+ }
435
+ isEmitBlocked(fileName) {
436
+ return this.emitBlockingPaths.has(this.toPath(fileName));
437
+ }
438
+ // ---- Diagnostics
439
+ /** Diagnostics of reading the config file. */
440
+ getConfigFileParsingDiagnostics() {
441
+ return this.commandLine.configFileParsingDiagnostics();
442
+ }
443
+ /** Parse errors of `file`, or of every file, sorted. */
444
+ getSyntacticDiagnostics(file) {
445
+ const result = [];
446
+ for (const f of file === undefined ? this.processed.files : [file]) {
447
+ for (const diagnostic of f.diagnostics)
448
+ result.push(diagnostic);
449
+ for (const diagnostic of f.jsDiagnostics)
450
+ result.push(diagnostic);
451
+ // Unchecked JavaScript still gets option-dependent syntax errors.
452
+ if (isSourceFileJS(f) && !isCheckJsEnabledForFile(f, this.options)) {
453
+ for (const diagnostic of getAdditionalJSSyntacticDiagnostics(f, this.options))
454
+ result.push(diagnostic);
455
+ }
456
+ }
457
+ return sortAndDeduplicateDiagnostics(result);
458
+ }
459
+ /** Option errors and file inclusion errors without a location in a source file. */
460
+ getProgramDiagnostics() {
461
+ const result = [...this.programDiagnosticsList];
462
+ for (const diagnostic of this.includeProcessor.diagnostics(this)) {
463
+ if (diagnostic.file === undefined)
464
+ result.push(diagnostic);
465
+ }
466
+ return sortAndDeduplicateDiagnostics(result);
467
+ }
468
+ /** File inclusion errors located in `file`, reported with its semantic diagnostics. */
469
+ getIncludeProcessorDiagnostics(file) {
470
+ const result = [];
471
+ for (const diagnostic of this.includeProcessor.diagnostics(this)) {
472
+ if (diagnostic.file !== undefined && diagnostic.file.fileName === file.fileName)
473
+ result.push(diagnostic);
474
+ }
475
+ return result.sort(compareDiagnostics);
476
+ }
477
+ /** Diagnostics of module and type reference resolution. */
478
+ resolutionDiagnostics() {
479
+ const result = [];
480
+ for (const resolutions of this.processed.resolvedModules.values()) {
481
+ if (resolutions === undefined)
482
+ continue;
483
+ for (const resolved of resolutions.values())
484
+ for (const diagnostic of resolved.resolutionDiagnostics)
485
+ result.push(diagnostic);
486
+ }
487
+ for (const resolutions of this.processed.typeResolutionsInFile.values()) {
488
+ if (resolutions === undefined)
489
+ continue;
490
+ for (const resolved of resolutions.values())
491
+ for (const diagnostic of resolved.resolutionDiagnostics)
492
+ result.push(diagnostic);
493
+ }
494
+ return result;
495
+ }
496
+ /** What `--explainFiles` prints: each file and why it is in the program. */
497
+ explainFiles(locale) {
498
+ let out = '';
499
+ let explained = 0;
500
+ const explain = (fileName, path) => {
501
+ out += this.displayFileName(fileName, true) + '\n';
502
+ for (const reason of this.includeProcessor.reasonsOf(path)) {
503
+ out += ' ' + reason.toDiagnostic(this, true).localize(locale) + '\n';
504
+ }
505
+ for (const diagnostic of this.includeProcessor.explainRedirectAndImpliedFormat(this, path, true)) {
506
+ out += ' ' + diagnostic.localize(locale) + '\n';
507
+ }
508
+ explained++;
509
+ };
510
+ const redirects = [...this.processed.redirectFilesByPath.values()].sort((a, b) => a.index - b.index);
511
+ const files = this.processed.files;
512
+ let fileIndex = 0;
513
+ for (const redirect of redirects) {
514
+ while (explained < redirect.index) {
515
+ const file = files[fileIndex++];
516
+ explain(file.fileName, file.path);
517
+ }
518
+ explain(redirect.fileName, redirect.path);
519
+ }
520
+ while (explained < files.length + redirects.length) {
521
+ const file = files[fileIndex++];
522
+ explain(file.fileName, file.path);
523
+ }
524
+ return out;
525
+ }
526
+ // ---- Option checks
527
+ configSourceFile() {
528
+ return this.commandLine.configFile?.sourceFile;
529
+ }
530
+ compilerOptionsProperty() {
531
+ return findPropertyAssignment(getTsConfigObjectLiteral(this.configSourceFile()), 'compilerOptions');
532
+ }
533
+ compilerOptionsObject() {
534
+ const initializer = this.compilerOptionsProperty()?.initializer;
535
+ // `as`: scriptc loses instanceof narrowing in conversions to optional types.
536
+ return initializer instanceof ObjectLiteralExpression ? initializer : undefined;
537
+ }
538
+ addProgramDiagnostic(diagnostic) {
539
+ this.programDiagnosticsList.push(diagnostic);
540
+ return diagnostic;
541
+ }
542
+ /** At `key1` (or `key2`) of `object`, on the key or the value; `undefined` if neither is there. */
543
+ optionDiagnosticInObject(object, onKey, key1, key2, message, args) {
544
+ const property = findPropertyAssignment(object, key1, key2);
545
+ if (property === undefined)
546
+ return undefined;
547
+ return this.addProgramDiagnostic(diagnosticAtNode(this.configSourceFile(), onKey ? property.name : property.initializer, message, ...args));
548
+ }
549
+ /** At `compilerOptions` of the config, or without a location. */
550
+ compilerOptionsDiagnostic(message, args) {
551
+ const property = this.compilerOptionsProperty();
552
+ return this.addProgramDiagnostic(property !== undefined
553
+ ? diagnosticAtNode(this.configSourceFile(), property.name, message, ...args)
554
+ : createCompilerDiagnostic(message, ...args));
555
+ }
556
+ optionDiagnostic(onKey, option1, option2, message, args) {
557
+ return (this.optionDiagnosticInObject(this.compilerOptionsObject(), onKey, option1, option2, message, args) ??
558
+ this.compilerOptionsDiagnostic(message, args));
559
+ }
560
+ /** At the name of `option1` (or `option2`), with both names as the first arguments. */
561
+ optionNameDiagnostic(message, option1, option2, ...args) {
562
+ this.optionDiagnostic(true, option1, option2, message, [option1, option2, ...args]);
563
+ }
564
+ optionValueDiagnostic(option, message, ...args) {
565
+ this.optionDiagnostic(false, option, '', message, args);
566
+ }
567
+ removedOptionDiagnostic(name, value, useInstead) {
568
+ const diagnostic = value === ''
569
+ ? this.optionDiagnostic(true, name, '', 1174 /* Diagnostics.Option_0_has_been_removed_Please_remove_it_from_your_configuration */, [name])
570
+ : this.optionDiagnostic(false, name, '', 1180 /* Diagnostics.Option_0_1_has_been_removed_Please_remove_it_from_your_configuration */, [name, value]);
571
+ if (useInstead !== '')
572
+ diagnostic.addMessageChain(createCompilerDiagnostic(1178 /* Diagnostics.Use_0_instead */, useInstead));
573
+ }
574
+ pathsDiagnostic(onKey, key, message, args) {
575
+ const paths = findPropertyAssignment(this.compilerOptionsObject(), 'paths');
576
+ const object = paths?.initializer;
577
+ const diagnostic = object instanceof ObjectLiteralExpression
578
+ ? this.optionDiagnosticInObject(object, onKey, key, '', message, args)
579
+ : undefined;
580
+ if (diagnostic === undefined)
581
+ this.compilerOptionsDiagnostic(message, args);
582
+ }
583
+ pathsValueDiagnostic(key, index, message, args) {
584
+ const paths = findPropertyAssignment(this.compilerOptionsObject(), 'paths');
585
+ const object = paths?.initializer;
586
+ if (object instanceof ObjectLiteralExpression) {
587
+ const array = findPropertyAssignment(object, key)?.initializer;
588
+ if (array instanceof ArrayLiteralExpression && array.elements.nodes.length > index) {
589
+ this.addProgramDiagnostic(diagnosticAtNode(this.configSourceFile(), array.elements.nodes[index], message, ...args));
590
+ return;
591
+ }
592
+ }
593
+ this.compilerOptionsDiagnostic(message, args);
594
+ }
595
+ verifyCompilerOptions() {
596
+ const options = this.options;
597
+ const configFilePath = this.configSourceFile()?.fileName ?? '';
598
+ // Removed in TypeScript 7.
599
+ if (options.baseUrl !== undefined) {
600
+ let useInstead = '';
601
+ if (configFilePath !== '') {
602
+ let relative = getRelativePathFromFile(configFilePath, options.baseUrl, this.useCaseSensitiveFileNames);
603
+ if (!relative.startsWith('./') && !relative.startsWith('../'))
604
+ relative = './' + relative;
605
+ useInstead = '"paths": {"*": [' + JSON.stringify(combinePaths(relative, '*')) + ']}';
606
+ }
607
+ this.removedOptionDiagnostic('baseUrl', '', useInstead);
608
+ }
609
+ if (options.outFile !== undefined)
610
+ this.removedOptionDiagnostic('outFile', '', '');
611
+ if (options.target === ScriptTarget.ES5)
612
+ this.removedOptionDiagnostic('target', 'ES5', '');
613
+ if (options.module === ModuleKind.AMD)
614
+ this.removedOptionDiagnostic('module', 'AMD', '');
615
+ if (options.module === ModuleKind.System)
616
+ this.removedOptionDiagnostic('module', 'System', '');
617
+ if (options.module === ModuleKind.UMD)
618
+ this.removedOptionDiagnostic('module', 'UMD', '');
619
+ if (options.moduleResolution === ModuleResolutionKind.Classic)
620
+ this.removedOptionDiagnostic('moduleResolution', 'Classic', '');
621
+ if (options.alwaysStrict === false)
622
+ this.removedOptionDiagnostic('alwaysStrict', 'false', '');
623
+ if (options.esModuleInterop === false)
624
+ this.removedOptionDiagnostic('esModuleInterop', 'false', '');
625
+ if (options.allowSyntheticDefaultImports === false) {
626
+ this.removedOptionDiagnostic('allowSyntheticDefaultImports', 'false', '');
627
+ }
628
+ if (options.moduleResolution === ModuleResolutionKind.Node10)
629
+ this.removedOptionDiagnostic('moduleResolution', 'node10', '');
630
+ if (options.downlevelIteration !== undefined)
631
+ this.removedOptionDiagnostic('downlevelIteration', '', '');
632
+ const strictNullChecks = getStrictOptionValue(options, options.strictNullChecks);
633
+ if (options.strictPropertyInitialization === true && !strictNullChecks) {
634
+ this.optionNameDiagnostic(1128 /* Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1 */, 'strictPropertyInitialization', 'strictNullChecks');
635
+ }
636
+ if (options.exactOptionalPropertyTypes === true && !strictNullChecks) {
637
+ this.optionNameDiagnostic(1128 /* Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1 */, 'exactOptionalPropertyTypes', 'strictNullChecks');
638
+ }
639
+ if (options.isolatedDeclarations === true) {
640
+ if (getAllowJS(options)) {
641
+ this.optionNameDiagnostic(1129 /* Diagnostics.Option_0_cannot_be_specified_with_option_1 */, 'allowJs', 'isolatedDeclarations');
642
+ }
643
+ if (!getEmitDeclarations(options)) {
644
+ this.optionNameDiagnostic(1144 /* Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1_or_option_2 */, 'isolatedDeclarations', 'declaration', 'composite');
645
+ }
646
+ }
647
+ if (options.inlineSourceMap === true) {
648
+ if (options.sourceMap === true) {
649
+ this.optionNameDiagnostic(1129 /* Diagnostics.Option_0_cannot_be_specified_with_option_1 */, 'sourceMap', 'inlineSourceMap');
650
+ }
651
+ if (options.mapRoot !== undefined) {
652
+ this.optionNameDiagnostic(1129 /* Diagnostics.Option_0_cannot_be_specified_with_option_1 */, 'mapRoot', 'inlineSourceMap');
653
+ }
654
+ }
655
+ if (options.composite === true) {
656
+ if (options.declaration === false) {
657
+ this.optionNameDiagnostic(1443 /* Diagnostics.Composite_projects_may_not_disable_declaration_emit */, 'declaration', '');
658
+ }
659
+ if (options.incremental === false) {
660
+ this.optionNameDiagnostic(1469 /* Diagnostics.Composite_projects_may_not_disable_incremental_compilation */, 'declaration', '');
661
+ }
662
+ }
663
+ if (options.tsBuildInfoFile === undefined && options.incremental === true && options.configFilePath === undefined) {
664
+ this.compilerOptionsDiagnostic(1149 /* Diagnostics.Option_incremental_is_only_valid_with_a_known_configuration_file_like_tsconfig_json_or_when_tsBuildInfoFile_is_explicitly_provided */, []);
665
+ }
666
+ this.verifyProjectReferences();
667
+ if (options.composite === true) {
668
+ const rootPaths = new Set();
669
+ for (const fileName of this.commandLine.fileNames)
670
+ rootPaths.add(this.toPath(fileName));
671
+ for (const file of this.processed.files) {
672
+ if (this.sourceFileMayBeEmitted(file, false) && !rootPaths.has(file.path)) {
673
+ this.includeProcessor.addProcessingDiagnostic(ProcessingDiagnostic.explainingFileInclude(file.path, undefined, 1446 /* Diagnostics.File_0_is_not_listed_within_the_file_list_of_project_1_Projects_must_list_all_files_or_use_an_include_pattern */, [file.fileName, configFilePath]));
674
+ }
675
+ }
676
+ }
677
+ if (options.paths !== undefined) {
678
+ for (const [key, value] of options.paths) {
679
+ if (!hasZeroOrOneAsterisk(key)) {
680
+ this.pathsDiagnostic(true, key, 1136 /* Diagnostics.Pattern_0_can_have_at_most_one_Asterisk_character */, [key]);
681
+ }
682
+ if (value === undefined) {
683
+ this.pathsDiagnostic(false, key, 1138 /* Diagnostics.Substitutions_for_pattern_0_should_be_an_array */, [key]);
684
+ }
685
+ else if (value.length === 0) {
686
+ this.pathsDiagnostic(false, key, 1141 /* Diagnostics.Substitutions_for_pattern_0_shouldn_t_be_an_empty_array */, [key]);
687
+ }
688
+ if (value === undefined)
689
+ continue;
690
+ for (let i = 0; i < value.length; i++) {
691
+ const substitution = value[i];
692
+ if (!hasZeroOrOneAsterisk(substitution)) {
693
+ this.pathsValueDiagnostic(key, i, 1137 /* Diagnostics.Substitution_0_in_pattern_1_can_have_at_most_one_Asterisk_character */, [substitution, key]);
694
+ }
695
+ if (!pathIsRelative(substitution) && !pathIsAbsolute(substitution)) {
696
+ this.pathsValueDiagnostic(key, i, 1164 /* Diagnostics.Non_relative_paths_are_not_allowed_Did_you_forget_a_leading_Slash */, []);
697
+ }
698
+ }
699
+ }
700
+ }
701
+ if (options.sourceMap !== true && options.inlineSourceMap !== true) {
702
+ if (options.inlineSources === true) {
703
+ this.optionNameDiagnostic(1127 /* Diagnostics.Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided */, 'inlineSources', '');
704
+ }
705
+ if (options.sourceRoot !== undefined) {
706
+ this.optionNameDiagnostic(1127 /* Diagnostics.Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided */, 'sourceRoot', '');
707
+ }
708
+ }
709
+ if (options.mapRoot !== undefined && !(options.sourceMap === true || options.declarationMap === true)) {
710
+ this.optionNameDiagnostic(1144 /* Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1_or_option_2 */, 'mapRoot', 'sourceMap', 'declarationMap');
711
+ }
712
+ if (options.declarationDir !== undefined && !getEmitDeclarations(options)) {
713
+ this.optionNameDiagnostic(1144 /* Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1_or_option_2 */, 'declarationDir', 'declaration', 'composite');
714
+ }
715
+ if (options.declarationMap === true && !getEmitDeclarations(options)) {
716
+ this.optionNameDiagnostic(1144 /* Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1_or_option_2 */, 'declarationMap', 'declaration', 'composite');
717
+ }
718
+ if (options.lib !== undefined && options.noLib === true) {
719
+ this.optionNameDiagnostic(1129 /* Diagnostics.Option_0_cannot_be_specified_with_option_1 */, 'lib', 'noLib');
720
+ }
721
+ if ((options.isolatedModules === true || options.verbatimModuleSyntax === true) &&
722
+ options.preserveConstEnums === false) {
723
+ this.optionNameDiagnostic(1165 /* Diagnostics.Option_preserveConstEnums_cannot_be_disabled_when_0_is_enabled */, options.verbatimModuleSyntax === true ? 'verbatimModuleSyntax' : 'isolatedModules', 'preserveConstEnums');
724
+ }
725
+ if (options.outDir !== undefined ||
726
+ options.rootDir !== undefined ||
727
+ options.sourceRoot !== undefined ||
728
+ options.mapRoot !== undefined ||
729
+ (getEmitDeclarations(options) && options.declarationDir !== undefined)) {
730
+ const directory = this.commonSourceDirectory();
731
+ if (options.outDir !== undefined && directory === '') {
732
+ let rooted = false;
733
+ for (const file of this.processed.files)
734
+ if (getRootLength(file.fileName) > 1)
735
+ rooted = true;
736
+ if (rooted)
737
+ this.optionNameDiagnostic(1117 /* Diagnostics.Cannot_find_the_common_subdirectory_path_for_the_input_files */, 'outDir', '');
738
+ }
739
+ }
740
+ if (options.noEmit !== true &&
741
+ options.composite !== true &&
742
+ options.rootDir === undefined &&
743
+ options.configFilePath !== undefined &&
744
+ (options.outDir !== undefined ||
745
+ (getEmitDeclarations(options) && options.declarationDir !== undefined) ||
746
+ options.outFile !== undefined)) {
747
+ // The rootDir default changed in TypeScript 6; report layouts that would change.
748
+ const directory = this.commonSourceDirectory();
749
+ const emittedFiles = [];
750
+ for (const file of this.processed.files) {
751
+ if (!file.isDeclarationFile && this.sourceFileMayBeEmitted(file, false))
752
+ emittedFiles.push(file.fileName);
753
+ }
754
+ const computed = getComputedCommonSourceDirectory(emittedFiles, this.currentDirectory, this.useCaseSensitiveFileNames);
755
+ if (computed !== '' &&
756
+ getCanonicalFileName(directory, this.useCaseSensitiveFileNames) !==
757
+ getCanonicalFileName(computed, this.useCaseSensitiveFileNames)) {
758
+ const option1 = options.outFile !== undefined ? 'outFile' : options.outDir !== undefined ? 'outDir' : 'declarationDir';
759
+ const option2 = options.outFile === undefined && options.outDir !== undefined ? 'declarationDir' : '';
760
+ const diagnostic = this.optionDiagnostic(true, option1, option2, 1119 /* Diagnostics.The_common_source_directory_of_0_is_1_The_rootDir_setting_must_be_explicitly_set_to_this_or_another_path_to_adjust_your_output_s_file_layout */, [
761
+ getBaseFileName(options.configFilePath),
762
+ getRelativePathFromFile(options.configFilePath, computed, this.useCaseSensitiveFileNames),
763
+ ]);
764
+ diagnostic.addMessageChain(createCompilerDiagnostic(1183 /* Diagnostics.Visit_https_Colon_Slash_Slashaka_ms_Slashts6_for_migration_information */));
765
+ }
766
+ }
767
+ if (options.checkJs === true && !getAllowJS(options)) {
768
+ this.optionNameDiagnostic(1128 /* Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1 */, 'checkJs', 'allowJs');
769
+ }
770
+ if (options.emitDeclarationOnly === true && !getEmitDeclarations(options)) {
771
+ this.optionNameDiagnostic(1144 /* Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1_or_option_2 */, 'emitDeclarationOnly', 'declaration', 'composite');
772
+ }
773
+ if (options.emitDecoratorMetadata === true && options.experimentalDecorators !== true) {
774
+ this.optionNameDiagnostic(1128 /* Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1 */, 'emitDecoratorMetadata', 'experimentalDecorators');
775
+ }
776
+ const jsx = options.jsx;
777
+ const automaticJsx = jsx === JsxEmit.ReactJSX || jsx === JsxEmit.ReactJSXDev;
778
+ if (options.jsxFactory !== undefined) {
779
+ if (options.reactNamespace !== undefined) {
780
+ this.optionNameDiagnostic(1129 /* Diagnostics.Option_0_cannot_be_specified_with_option_1 */, 'reactNamespace', 'jsxFactory');
781
+ }
782
+ if (automaticJsx && jsx !== undefined) {
783
+ this.optionNameDiagnostic(1163 /* Diagnostics.Option_0_cannot_be_specified_when_option_jsx_is_1 */, 'jsxFactory', jsxEmitName(jsx));
784
+ }
785
+ if (parseIsolatedEntityName(options.jsxFactory) === undefined) {
786
+ this.optionValueDiagnostic('jsxFactory', 1142 /* Diagnostics.Invalid_value_for_jsxFactory_0_is_not_a_valid_identifier_or_qualified_name */, options.jsxFactory);
787
+ }
788
+ }
789
+ else if (options.reactNamespace !== undefined &&
790
+ !isIdentifierText(options.reactNamespace, 0 /* LanguageVariant.Standard */)) {
791
+ this.optionValueDiagnostic('reactNamespace', 1135 /* Diagnostics.Invalid_value_for_reactNamespace_0_is_not_a_valid_identifier */, options.reactNamespace);
792
+ }
793
+ if (options.jsxFragmentFactory !== undefined) {
794
+ if (options.jsxFactory === undefined) {
795
+ this.optionNameDiagnostic(1128 /* Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1 */, 'jsxFragmentFactory', 'jsxFactory');
796
+ }
797
+ if (automaticJsx && jsx !== undefined) {
798
+ this.optionNameDiagnostic(1163 /* Diagnostics.Option_0_cannot_be_specified_when_option_jsx_is_1 */, 'jsxFragmentFactory', jsxEmitName(jsx));
799
+ }
800
+ if (parseIsolatedEntityName(options.jsxFragmentFactory) === undefined) {
801
+ this.optionValueDiagnostic('jsxFragmentFactory', 1852 /* Diagnostics.Invalid_value_for_jsxFragmentFactory_0_is_not_a_valid_identifier_or_qualified_name */, options.jsxFragmentFactory);
802
+ }
803
+ }
804
+ if (options.reactNamespace !== undefined && automaticJsx && jsx !== undefined) {
805
+ this.optionNameDiagnostic(1163 /* Diagnostics.Option_0_cannot_be_specified_when_option_jsx_is_1 */, 'reactNamespace', jsxEmitName(jsx));
806
+ }
807
+ if (options.jsxImportSource !== undefined && jsx === JsxEmit.React) {
808
+ this.optionNameDiagnostic(1163 /* Diagnostics.Option_0_cannot_be_specified_when_option_jsx_is_1 */, 'jsxImportSource', jsxEmitName(jsx));
809
+ }
810
+ const moduleKind = getEmitModuleKind(options);
811
+ if (options.allowImportingTsExtensions === true &&
812
+ !(options.noEmit === true ||
813
+ options.emitDeclarationOnly === true ||
814
+ options.rewriteRelativeImportExtensions === true)) {
815
+ this.optionValueDiagnostic('allowImportingTsExtensions', 1170 /* Diagnostics.Option_allowImportingTsExtensions_can_only_be_used_when_one_of_noEmit_emitDeclarationOnly_or_rewriteRelativeImportExtensions_is_set */);
816
+ }
817
+ const moduleResolution = getModuleResolutionKind(options);
818
+ const supportsExportsAndImports = (moduleResolution >= ModuleResolutionKind.Node16 && moduleResolution <= ModuleResolutionKind.NodeNext) ||
819
+ moduleResolution === ModuleResolutionKind.Bundler;
820
+ if (options.resolvePackageJsonExports === true && !supportsExportsAndImports) {
821
+ this.optionNameDiagnostic(1172 /* Diagnostics.Option_0_can_only_be_used_when_moduleResolution_is_set_to_node16_nodenext_or_bundler */, 'resolvePackageJsonExports', '');
822
+ }
823
+ if (options.resolvePackageJsonImports === true && !supportsExportsAndImports) {
824
+ this.optionNameDiagnostic(1172 /* Diagnostics.Option_0_can_only_be_used_when_moduleResolution_is_set_to_node16_nodenext_or_bundler */, 'resolvePackageJsonImports', '');
825
+ }
826
+ if (options.customConditions !== undefined && !supportsExportsAndImports) {
827
+ this.optionNameDiagnostic(1172 /* Diagnostics.Option_0_can_only_be_used_when_moduleResolution_is_set_to_node16_nodenext_or_bundler */, 'customConditions', '');
828
+ }
829
+ const isNonNodeESM = moduleKind >= ModuleKind.ES2015 && moduleKind <= ModuleKind.ESNext;
830
+ if (moduleResolution === ModuleResolutionKind.Bundler &&
831
+ !isNonNodeESM &&
832
+ moduleKind !== ModuleKind.Preserve &&
833
+ moduleKind !== ModuleKind.CommonJS) {
834
+ this.optionValueDiagnostic('moduleResolution', 1169 /* Diagnostics.Option_0_can_only_be_used_when_module_is_set_to_preserve_commonjs_or_es2015_or_later */, 'bundler');
835
+ }
836
+ const isNodeModule = ModuleKind.Node16 <= moduleKind && moduleKind <= ModuleKind.NodeNext;
837
+ const isNodeResolution = ModuleResolutionKind.Node16 <= moduleResolution && moduleResolution <= ModuleResolutionKind.NodeNext;
838
+ if (isNodeModule && !isNodeResolution) {
839
+ const resolutionName = moduleKind === ModuleKind.NodeNext ? 'NodeNext' : 'Node16';
840
+ this.optionValueDiagnostic('moduleResolution', 1181 /* Diagnostics.Option_moduleResolution_must_be_set_to_0_or_left_unspecified_when_option_module_is_set_to_1 */, resolutionName, moduleKindName(moduleKind));
841
+ }
842
+ else if (isNodeResolution && !isNodeModule) {
843
+ const name = moduleResolutionKindName(moduleResolution);
844
+ this.optionValueDiagnostic('module', 1182 /* Diagnostics.Option_module_must_be_set_to_0_when_option_moduleResolution_is_set_to_1 */, name, name);
845
+ }
846
+ // Outputs must be unique and must not overwrite inputs.
847
+ if (options.noEmit !== true && options.suppressOutputPathCheck !== true) {
848
+ const seen = new Set();
849
+ for (const file of this.processed.files) {
850
+ if (!this.sourceFileMayBeEmitted(file, false))
851
+ continue;
852
+ const paths = getOutputPathsFor(file.fileName, file.scriptKind === 6 /* ScriptKind.JSON */, options, this, false);
853
+ this.verifyEmitFilePath(paths.jsFilePath, seen, configFilePath);
854
+ this.verifyEmitFilePath(paths.sourceMapFilePath, seen, configFilePath);
855
+ this.verifyEmitFilePath(paths.declarationFilePath, seen, configFilePath);
856
+ this.verifyEmitFilePath(paths.declarationMapPath, seen, configFilePath);
857
+ }
858
+ this.verifyEmitFilePath(this.commandLine.buildInfoFileName(), seen, configFilePath);
859
+ }
860
+ }
861
+ verifyEmitFilePath(fileName, seen, configFilePath) {
862
+ if (fileName === '')
863
+ return;
864
+ const path = this.toPath(fileName);
865
+ if (this.processed.filesByPath.has(path)) {
866
+ const diagnostic = createCompilerDiagnostic(1131 /* Diagnostics.Cannot_write_file_0_because_it_would_overwrite_input_file */, fileName);
867
+ if (configFilePath === '') {
868
+ diagnostic.addMessageChain(createCompilerDiagnostic(1143 /* Diagnostics.Adding_a_tsconfig_json_file_will_help_organize_projects_that_contain_both_TypeScript_and_JavaScript_files_Learn_more_at_https_Colon_Slash_Slashaka_ms_Slashtsconfig */));
869
+ }
870
+ this.blockEmittingOfFile(fileName, diagnostic);
871
+ }
872
+ const key = this.useCaseSensitiveFileNames ? path : toFileNameLowerCase(path);
873
+ if (seen.has(key)) {
874
+ this.blockEmittingOfFile(fileName, createCompilerDiagnostic(1132 /* Diagnostics.Cannot_write_file_0_because_it_would_be_overwritten_by_multiple_input_files */, fileName));
875
+ }
876
+ else {
877
+ seen.add(key);
878
+ }
879
+ }
880
+ blockEmittingOfFile(fileName, diagnostic) {
881
+ this.emitBlockingPaths.add(this.toPath(fileName));
882
+ this.programDiagnosticsList.push(diagnostic);
883
+ }
884
+ verifyProjectReferences() {
885
+ const buildInfoFileName = this.options.suppressOutputPathCheck !== true ? this.commandLine.buildInfoFileName() : '';
886
+ const configFile = this.commandLine.configFile;
887
+ if (configFile === undefined)
888
+ return;
889
+ const mapper = this.processed.projectReferenceMapper;
890
+ const seen = new Set([configFile.sourceFile.path]);
891
+ const visit = (references, parent) => {
892
+ for (let index = 0; index < references.length; index++) {
893
+ const path = references[index];
894
+ if (seen.has(path))
895
+ continue;
896
+ seen.add(path);
897
+ const config = mapper.configToProjectReference.get(path);
898
+ if (parent !== undefined)
899
+ this.verifyProjectReference(config, parent, index, buildInfoFileName);
900
+ visit(mapper.referencesInConfigFile.get(path) ?? [], config);
901
+ }
902
+ };
903
+ visit(mapper.referencesInConfigFile.get(configFile.sourceFile.path) ?? [], this.commandLine);
904
+ }
905
+ verifyProjectReference(config, parent, index, buildInfoFileName) {
906
+ const reference = parent.projectReferences[index];
907
+ if (config === undefined) {
908
+ this.referenceDiagnostic(parent, index, 1229 /* Diagnostics.File_0_not_found */, [reference.path]);
909
+ return;
910
+ }
911
+ const options = config.options;
912
+ if ((options.composite !== true || options.noEmit === true) && parent.fileNames.length > 0) {
913
+ if (options.composite !== true) {
914
+ this.referenceDiagnostic(parent, index, 1445 /* Diagnostics.Referenced_project_0_must_have_setting_composite_Colon_true */, [reference.path]);
915
+ }
916
+ if (options.noEmit === true) {
917
+ this.referenceDiagnostic(parent, index, 1447 /* Diagnostics.Referenced_project_0_may_not_disable_emit */, [
918
+ reference.path,
919
+ ]);
920
+ }
921
+ }
922
+ if (buildInfoFileName !== '' && buildInfoFileName === config.buildInfoFileName()) {
923
+ this.referenceDiagnostic(parent, index, 1468 /* Diagnostics.Cannot_write_file_0_because_it_will_overwrite_tsbuildinfo_file_generated_by_referenced_project_1 */, [buildInfoFileName, reference.path]);
924
+ this.emitBlockingPaths.add(this.toPath(buildInfoFileName));
925
+ }
926
+ }
927
+ /** At the reference's entry of `references` in the parent config. */
928
+ referenceDiagnostic(parent, index, message, args) {
929
+ const file = parent.configFile?.sourceFile;
930
+ const references = findPropertyAssignment(getTsConfigObjectLiteral(file), 'references')?.initializer;
931
+ if (references instanceof ArrayLiteralExpression && references.elements.nodes.length > index) {
932
+ this.programDiagnosticsList.push(diagnosticAtNode(file, references.elements.nodes[index], message, ...args));
933
+ }
934
+ else {
935
+ this.programDiagnosticsList.push(createCompilerDiagnostic(message, ...args));
936
+ }
937
+ }
938
+ }
939
+ function hasZeroOrOneAsterisk(text) {
940
+ const first = text.indexOf('*');
941
+ return first === -1 || text.indexOf('*', first + 1) === -1;
942
+ }
943
+ function specifierText(node) {
944
+ if (node.kind === 10 /* SyntaxKind.StringLiteral */ || node.kind === 14 /* SyntaxKind.NoSubstitutionTemplateLiteral */) {
945
+ return getText(node);
946
+ }
947
+ throw new Error('module specifier must be a string literal');
948
+ }
949
+ /** Parameter decorators in JavaScript without `experimentalDecorators`, which the checker would report. */
950
+ function getAdditionalJSSyntacticDiagnostics(file, options) {
951
+ const diagnostics = [];
952
+ // Decorators need an `@`.
953
+ if (options.experimentalDecorators === true || !file.text.includes('@'))
954
+ return diagnostics;
955
+ // Walked with a stack: expression trees can be too deep to recurse.
956
+ const pending = new NodeCollector();
957
+ file.forEachChild(pending);
958
+ for (let node = pending.nodes.pop(); node !== undefined; node = pending.nodes.pop()) {
959
+ if (node instanceof ParameterDeclaration && node.modifiers !== undefined) {
960
+ for (const modifier of node.modifiers.nodes) {
961
+ if (!(modifier instanceof Decorator))
962
+ continue;
963
+ diagnostics.push(new Diagnostic(file.diagnosticFile(), modifier.pos, modifier.end, 160 /* Diagnostics.Decorators_are_not_valid_here */));
964
+ break;
965
+ }
966
+ }
967
+ node.forEachChild(pending);
968
+ }
969
+ return diagnostics;
970
+ }
971
+ /** Collects the children it visits. */
972
+ class NodeCollector extends NodeVisitor {
973
+ nodes = [];
974
+ visitNode(node) {
975
+ this.nodes.push(node);
976
+ return false;
977
+ }
978
+ }
979
+ /** Sorts diagnostics and merges duplicates, combining their related information. */
980
+ export function sortAndDeduplicateDiagnostics(diagnostics) {
981
+ const sorted = [...diagnostics].sort(compareDiagnostics);
982
+ if (sorted.length < 2)
983
+ return sorted;
984
+ const result = [];
985
+ let i = 0;
986
+ while (i < sorted.length) {
987
+ let diagnostic = sorted[i];
988
+ let n = 1;
989
+ while (i + n < sorted.length && equalDiagnosticsNoRelatedInfo(diagnostic, sorted[i + n]))
990
+ n++;
991
+ if (n > 1) {
992
+ const related = [];
993
+ for (let k = 0; k < n; k++)
994
+ for (const info of sorted[i + k].relatedInformation)
995
+ related.push(info);
996
+ if (related.length > 0) {
997
+ related.sort(compareDiagnostics);
998
+ const compacted = [];
999
+ for (const info of related) {
1000
+ if (compacted.length === 0 || !equalDiagnostics(compacted[compacted.length - 1], info))
1001
+ compacted.push(info);
1002
+ }
1003
+ diagnostic = diagnostic.clone();
1004
+ diagnostic.relatedInformation = compacted;
1005
+ }
1006
+ }
1007
+ result.push(diagnostic);
1008
+ i += n;
1009
+ }
1010
+ return result;
1011
+ }