tsc-ts 0.0.9 → 0.1.0

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 (373) hide show
  1. package/README.md +2 -2
  2. package/bin/tsc-ts.js +70 -1
  3. package/dist/api/compiler/ast-utilities.d.ts +19 -1
  4. package/dist/api/compiler/ast-utilities.js +180 -95
  5. package/dist/api/compiler/ast.d.ts +22 -15
  6. package/dist/api/compiler/ast.js +1026 -995
  7. package/dist/api/compiler/astnav.js +15 -15
  8. package/dist/api/compiler/binder-utilities.js +186 -186
  9. package/dist/api/compiler/binder.js +290 -263
  10. package/dist/api/compiler/character-codes.js +2 -2
  11. package/dist/api/compiler/checker-calls.js +178 -124
  12. package/dist/api/compiler/checker-classes.d.ts +14 -3
  13. package/dist/api/compiler/checker-classes.js +134 -90
  14. package/dist/api/compiler/checker-contextual.js +64 -61
  15. package/dist/api/compiler/checker-declaration-order.js +79 -79
  16. package/dist/api/compiler/checker-declarations.d.ts +1 -0
  17. package/dist/api/compiler/checker-declarations.js +160 -136
  18. package/dist/api/compiler/checker-declared-types.js +67 -65
  19. package/dist/api/compiler/checker-decorators.js +77 -77
  20. package/dist/api/compiler/checker-deprecation.d.ts +8 -3
  21. package/dist/api/compiler/checker-deprecation.js +76 -55
  22. package/dist/api/compiler/checker-destructuring.js +47 -45
  23. package/dist/api/compiler/checker-elaboration.js +24 -24
  24. package/dist/api/compiler/checker-emit-helpers.js +4 -4
  25. package/dist/api/compiler/checker-emit-resolver.d.ts +4 -2
  26. package/dist/api/compiler/checker-emit-resolver.js +25 -13
  27. package/dist/api/compiler/checker-evaluator.js +9 -9
  28. package/dist/api/compiler/checker-expressions.js +244 -211
  29. package/dist/api/compiler/checker-functions.js +113 -107
  30. package/dist/api/compiler/checker-generated-code.d.ts +0 -11
  31. package/dist/api/compiler/checker-generated-code.js +28 -52
  32. package/dist/api/compiler/checker-grammar.d.ts +1 -0
  33. package/dist/api/compiler/checker-grammar.js +472 -440
  34. package/dist/api/compiler/checker-heritage.js +91 -93
  35. package/dist/api/compiler/checker-inference.d.ts +77 -5
  36. package/dist/api/compiler/checker-inference.js +487 -107
  37. package/dist/api/compiler/checker-iteration.d.ts +0 -10
  38. package/dist/api/compiler/checker-iteration.js +35 -52
  39. package/dist/api/compiler/checker-javascript.js +14 -14
  40. package/dist/api/compiler/checker-jsdoc.d.ts +8 -10
  41. package/dist/api/compiler/checker-jsdoc.js +67 -58
  42. package/dist/api/compiler/checker-jsx.js +105 -88
  43. package/dist/api/compiler/checker-members.d.ts +9 -2
  44. package/dist/api/compiler/checker-members.js +212 -75
  45. package/dist/api/compiler/checker-modules.d.ts +15 -6
  46. package/dist/api/compiler/checker-modules.js +469 -309
  47. package/dist/api/compiler/checker-narrowing.js +273 -189
  48. package/dist/api/compiler/checker-object-literals.js +25 -22
  49. package/dist/api/compiler/checker-operators.js +126 -118
  50. package/dist/api/compiler/checker-overloads.js +27 -27
  51. package/dist/api/compiler/checker-property-access.js +59 -55
  52. package/dist/api/compiler/checker-services.d.ts +1 -0
  53. package/dist/api/compiler/checker-services.js +222 -210
  54. package/dist/api/compiler/checker-signatures.js +65 -49
  55. package/dist/api/compiler/checker-source-file.d.ts +5 -0
  56. package/dist/api/compiler/checker-source-file.js +154 -130
  57. package/dist/api/compiler/checker-statements.js +33 -32
  58. package/dist/api/compiler/checker-super.js +50 -50
  59. package/dist/api/compiler/checker-symbol-types.js +109 -93
  60. package/dist/api/compiler/checker-symbols.d.ts +13 -1
  61. package/dist/api/compiler/checker-symbols.js +264 -149
  62. package/dist/api/compiler/checker-type-factory.d.ts +5 -0
  63. package/dist/api/compiler/checker-type-factory.js +145 -36
  64. package/dist/api/compiler/checker-type-nodes.d.ts +1 -0
  65. package/dist/api/compiler/checker-type-nodes.js +179 -141
  66. package/dist/api/compiler/checker-type-operators.d.ts +2 -0
  67. package/dist/api/compiler/checker-type-operators.js +110 -63
  68. package/dist/api/compiler/checker-types.d.ts +80 -3
  69. package/dist/api/compiler/checker-types.js +121 -2
  70. package/dist/api/compiler/checker-unused.js +114 -118
  71. package/dist/api/compiler/checker-utilities.js +11 -11
  72. package/dist/api/compiler/checker.d.ts +104 -31
  73. package/dist/api/compiler/checker.js +181 -33
  74. package/dist/api/compiler/command-line.d.ts +1 -3
  75. package/dist/api/compiler/command-line.js +47 -44
  76. package/dist/api/compiler/compile-program.d.ts +42 -3
  77. package/dist/api/compiler/compile-program.js +139 -27
  78. package/dist/api/compiler/diagnostic-messages.d.ts +1849 -1774
  79. package/dist/api/compiler/diagnostic-messages.js +128 -122
  80. package/dist/api/compiler/diagnostics.d.ts +22 -0
  81. package/dist/api/compiler/diagnostics.js +93 -11
  82. package/dist/api/compiler/emitter.d.ts +7 -1
  83. package/dist/api/compiler/emitter.js +53 -11
  84. package/dist/api/compiler/file-include.d.ts +2 -1
  85. package/dist/api/compiler/file-include.js +11 -7
  86. package/dist/api/compiler/file-loader.d.ts +21 -1
  87. package/dist/api/compiler/file-loader.js +201 -48
  88. package/dist/api/compiler/instantiation.d.ts +7 -0
  89. package/dist/api/compiler/instantiation.js +101 -49
  90. package/dist/api/compiler/jsdoc.js +23 -23
  91. package/dist/api/compiler/link-tables.d.ts +48 -18
  92. package/dist/api/compiler/link-tables.js +80 -37
  93. package/dist/api/compiler/locales/cs-CZ.d.ts +1 -1
  94. package/dist/api/compiler/locales/cs-CZ.js +1 -1
  95. package/dist/api/compiler/locales/de-DE.d.ts +1 -1
  96. package/dist/api/compiler/locales/de-DE.js +1 -1
  97. package/dist/api/compiler/locales/es-ES.d.ts +1 -1
  98. package/dist/api/compiler/locales/es-ES.js +1 -1
  99. package/dist/api/compiler/locales/fr-FR.d.ts +1 -1
  100. package/dist/api/compiler/locales/fr-FR.js +1 -1
  101. package/dist/api/compiler/locales/it-IT.d.ts +1 -1
  102. package/dist/api/compiler/locales/it-IT.js +1 -1
  103. package/dist/api/compiler/locales/ja-JP.d.ts +1 -1
  104. package/dist/api/compiler/locales/ja-JP.js +1 -1
  105. package/dist/api/compiler/locales/ko-KR.d.ts +1 -1
  106. package/dist/api/compiler/locales/ko-KR.js +1 -1
  107. package/dist/api/compiler/locales/pl-PL.d.ts +1 -1
  108. package/dist/api/compiler/locales/pl-PL.js +1 -1
  109. package/dist/api/compiler/locales/pt-BR.d.ts +1 -1
  110. package/dist/api/compiler/locales/pt-BR.js +1 -1
  111. package/dist/api/compiler/locales/ru-RU.d.ts +1 -1
  112. package/dist/api/compiler/locales/ru-RU.js +1 -1
  113. package/dist/api/compiler/locales/tr-TR.d.ts +1 -1
  114. package/dist/api/compiler/locales/tr-TR.js +1 -1
  115. package/dist/api/compiler/locales/zh-CN.d.ts +1 -1
  116. package/dist/api/compiler/locales/zh-CN.js +1 -1
  117. package/dist/api/compiler/locales/zh-TW.d.ts +1 -1
  118. package/dist/api/compiler/locales/zh-TW.js +1 -1
  119. package/dist/api/compiler/module-resolution-types.js +6 -6
  120. package/dist/api/compiler/module-resolution.d.ts +10 -1
  121. package/dist/api/compiler/module-resolution.js +115 -84
  122. package/dist/api/compiler/module-specifiers.d.ts +15 -0
  123. package/dist/api/compiler/module-specifiers.js +24 -18
  124. package/dist/api/compiler/name-resolver.js +74 -65
  125. package/dist/api/compiler/node-builder-names.d.ts +11 -3
  126. package/dist/api/compiler/node-builder-names.js +210 -90
  127. package/dist/api/compiler/node-builder-pseudo.js +29 -31
  128. package/dist/api/compiler/node-builder-reuse.js +23 -22
  129. package/dist/api/compiler/node-builder.d.ts +18 -1
  130. package/dist/api/compiler/node-builder.js +191 -102
  131. package/dist/api/compiler/option-declarations.d.ts +2 -6
  132. package/dist/api/compiler/option-declarations.js +315 -375
  133. package/dist/api/compiler/options.d.ts +15 -33
  134. package/dist/api/compiler/options.js +21 -54
  135. package/dist/api/compiler/output-paths.d.ts +4 -1
  136. package/dist/api/compiler/output-paths.js +6 -11
  137. package/dist/api/compiler/package-json.d.ts +3 -3
  138. package/dist/api/compiler/package-json.js +11 -10
  139. package/dist/api/compiler/parallel-parse.d.ts +3 -2
  140. package/dist/api/compiler/parallel-parse.js +17 -5
  141. package/dist/api/compiler/parser.d.ts +40 -19
  142. package/dist/api/compiler/parser.js +308 -216
  143. package/dist/api/compiler/path.d.ts +9 -0
  144. package/dist/api/compiler/path.js +20 -3
  145. package/dist/api/compiler/printer/emit-context.d.ts +5 -1
  146. package/dist/api/compiler/printer/emit-context.js +20 -1
  147. package/dist/api/compiler/printer/factory-base.d.ts +2 -2
  148. package/dist/api/compiler/printer/factory-base.js +7 -3
  149. package/dist/api/compiler/printer/factory.js +3 -1
  150. package/dist/api/compiler/printer/helpers.js +10 -1
  151. package/dist/api/compiler/printer/name-generator.d.ts +1 -1
  152. package/dist/api/compiler/printer/name-generator.js +35 -16
  153. package/dist/api/compiler/printer/printer.d.ts +49 -2
  154. package/dist/api/compiler/printer/printer.js +539 -293
  155. package/dist/api/compiler/printer/utilities.js +149 -147
  156. package/dist/api/compiler/program-checker.d.ts +12 -2
  157. package/dist/api/compiler/program-checker.js +88 -34
  158. package/dist/api/compiler/program-utilities.d.ts +3 -1
  159. package/dist/api/compiler/program-utilities.js +28 -15
  160. package/dist/api/compiler/program.d.ts +4 -6
  161. package/dist/api/compiler/program.js +74 -87
  162. package/dist/api/compiler/pseudo-bigint.d.ts +2 -0
  163. package/dist/api/compiler/pseudo-bigint.js +18 -0
  164. package/dist/api/compiler/regexp-checker.d.ts +1 -1
  165. package/dist/api/compiler/regexp-checker.js +93 -76
  166. package/dist/api/compiler/relations.d.ts +27 -4
  167. package/dist/api/compiler/relations.js +347 -180
  168. package/dist/api/compiler/reparser.js +60 -56
  169. package/dist/api/compiler/scanner.d.ts +19 -2
  170. package/dist/api/compiler/scanner.js +123 -108
  171. package/dist/api/compiler/shared-results.d.ts +463 -0
  172. package/dist/api/compiler/shared-results.js +2128 -0
  173. package/dist/api/compiler/sourcemap.js +2 -2
  174. package/dist/api/compiler/symbol-accessibility.js +87 -74
  175. package/dist/api/compiler/symbol.d.ts +23 -14
  176. package/dist/api/compiler/symbol.js +23 -11
  177. package/dist/api/compiler/syntax-kind.d.ts +198 -197
  178. package/dist/api/compiler/transformers/alias-references.js +247 -139
  179. package/dist/api/compiler/transformers/async-utilities.js +25 -25
  180. package/dist/api/compiler/transformers/async.d.ts +0 -1
  181. package/dist/api/compiler/transformers/async.js +64 -77
  182. package/dist/api/compiler/transformers/class-fields.d.ts +1 -0
  183. package/dist/api/compiler/transformers/class-fields.js +81 -78
  184. package/dist/api/compiler/transformers/commonjs-module.js +18 -15
  185. package/dist/api/compiler/transformers/const-enum-inliner.js +1 -1
  186. package/dist/api/compiler/transformers/declarations-diagnostics.js +247 -244
  187. package/dist/api/compiler/transformers/declarations-pseudo.js +100 -100
  188. package/dist/api/compiler/transformers/declarations-resolver.d.ts +0 -3
  189. package/dist/api/compiler/transformers/declarations-syntactic.d.ts +1 -2
  190. package/dist/api/compiler/transformers/declarations-syntactic.js +134 -156
  191. package/dist/api/compiler/transformers/declarations-tracker.js +18 -18
  192. package/dist/api/compiler/transformers/declarations.d.ts +4 -1
  193. package/dist/api/compiler/transformers/declarations.js +305 -238
  194. package/dist/api/compiler/transformers/decorator-metadata.d.ts +1 -1
  195. package/dist/api/compiler/transformers/decorator-metadata.js +53 -45
  196. package/dist/api/compiler/transformers/decorator-utilities.js +24 -24
  197. package/dist/api/compiler/transformers/destructuring.js +19 -18
  198. package/dist/api/compiler/transformers/emit-resolver.js +1 -1
  199. package/dist/api/compiler/transformers/es-decorators.js +55 -55
  200. package/dist/api/compiler/transformers/external-module-info.js +3 -3
  201. package/dist/api/compiler/transformers/for-await.js +25 -25
  202. package/dist/api/compiler/transformers/import-elision.js +14 -14
  203. package/dist/api/compiler/transformers/jsx.js +12 -12
  204. package/dist/api/compiler/transformers/legacy-decorators.js +17 -17
  205. package/dist/api/compiler/transformers/module.js +8 -8
  206. package/dist/api/compiler/transformers/named-evaluation.js +4 -4
  207. package/dist/api/compiler/transformers/object-rest-spread.js +20 -20
  208. package/dist/api/compiler/transformers/optional-chain.js +10 -10
  209. package/dist/api/compiler/transformers/reference-resolver.d.ts +12 -1
  210. package/dist/api/compiler/transformers/reference-resolver.js +131 -69
  211. package/dist/api/compiler/transformers/runtime-syntax.js +35 -31
  212. package/dist/api/compiler/transformers/subtree-facts.js +47 -47
  213. package/dist/api/compiler/transformers/syntax-facts.js +56 -58
  214. package/dist/api/compiler/transformers/type-eraser.js +73 -66
  215. package/dist/api/compiler/transformers/type-serialization.js +24 -24
  216. package/dist/api/compiler/transformers/using.js +12 -12
  217. package/dist/api/compiler/transformers/utilities.js +77 -77
  218. package/dist/api/compiler/transformers/visitor-base.js +172 -172
  219. package/dist/api/compiler/transformers/visitor-hooks.js +6 -2
  220. package/dist/api/compiler/tsconfig.d.ts +10 -2
  221. package/dist/api/compiler/tsconfig.js +136 -48
  222. package/dist/api/compiler/type-printer.js +40 -3
  223. package/dist/api/compiler/types.d.ts +2 -1
  224. package/dist/api/library/ast.generated.d.ts +42 -39
  225. package/dist/api/library/ast.generated.js +1 -1
  226. package/dist/api/library/compiler-options.generated.d.ts +111 -100
  227. package/dist/api/library/compiler-options.generated.js +1 -1
  228. package/dist/api/library/disk.js +12 -1
  229. package/dist/api/library/enums.generated.d.ts +206 -206
  230. package/dist/api/library/enums.generated.js +206 -206
  231. package/dist/api/library/nodes.js +26 -26
  232. package/package.json +9 -9
  233. package/src/compiler/ast-utilities.ts +99 -7
  234. package/src/compiler/ast.ts +58 -26
  235. package/src/compiler/binder.ts +39 -4
  236. package/src/compiler/character-codes.ts +2 -2
  237. package/src/compiler/checker-calls.ts +79 -9
  238. package/src/compiler/checker-classes.ts +78 -24
  239. package/src/compiler/checker-contextual.ts +6 -1
  240. package/src/compiler/checker-declarations.ts +31 -4
  241. package/src/compiler/checker-declared-types.ts +8 -5
  242. package/src/compiler/checker-decorators.ts +1 -1
  243. package/src/compiler/checker-deprecation.ts +29 -8
  244. package/src/compiler/checker-destructuring.ts +10 -3
  245. package/src/compiler/checker-emit-helpers.ts +1 -0
  246. package/src/compiler/checker-emit-resolver.ts +16 -6
  247. package/src/compiler/checker-expressions.ts +79 -46
  248. package/src/compiler/checker-functions.ts +21 -6
  249. package/src/compiler/checker-generated-code.ts +2 -22
  250. package/src/compiler/checker-grammar.ts +136 -62
  251. package/src/compiler/checker-heritage.ts +22 -21
  252. package/src/compiler/checker-inference.ts +514 -82
  253. package/src/compiler/checker-iteration.ts +18 -31
  254. package/src/compiler/checker-javascript.ts +1 -1
  255. package/src/compiler/checker-jsdoc.ts +50 -27
  256. package/src/compiler/checker-jsx.ts +26 -4
  257. package/src/compiler/checker-members.ts +200 -56
  258. package/src/compiler/checker-modules.ts +332 -65
  259. package/src/compiler/checker-narrowing.ts +98 -19
  260. package/src/compiler/checker-object-literals.ts +3 -0
  261. package/src/compiler/checker-operators.ts +11 -4
  262. package/src/compiler/checker-property-access.ts +7 -2
  263. package/src/compiler/checker-services.ts +39 -12
  264. package/src/compiler/checker-signatures.ts +15 -1
  265. package/src/compiler/checker-source-file.ts +39 -13
  266. package/src/compiler/checker-statements.ts +3 -2
  267. package/src/compiler/checker-symbol-types.ts +29 -6
  268. package/src/compiler/checker-symbols.ts +158 -15
  269. package/src/compiler/checker-type-factory.ts +124 -23
  270. package/src/compiler/checker-type-nodes.ts +46 -3
  271. package/src/compiler/checker-type-operators.ts +83 -26
  272. package/src/compiler/checker-types.ts +147 -4
  273. package/src/compiler/checker-unused.ts +9 -14
  274. package/src/compiler/checker.ts +203 -39
  275. package/src/compiler/command-line.ts +28 -28
  276. package/src/compiler/compile-program.ts +167 -27
  277. package/src/compiler/decoder.ts +13 -4
  278. package/src/compiler/diagnostic-messages.ts +1973 -1892
  279. package/src/compiler/diagnostics.ts +84 -3
  280. package/src/compiler/emitter.ts +57 -8
  281. package/src/compiler/encoder.ts +23 -8
  282. package/src/compiler/file-include.ts +9 -3
  283. package/src/compiler/file-loader.ts +197 -38
  284. package/src/compiler/help.ts +10 -14
  285. package/src/compiler/incremental.ts +165 -30
  286. package/src/compiler/init.ts +2 -7
  287. package/src/compiler/instantiation.ts +77 -22
  288. package/src/compiler/jsdoc.ts +3 -1
  289. package/src/compiler/link-tables.ts +82 -37
  290. package/src/compiler/locales/cs-CZ.ts +1 -1
  291. package/src/compiler/locales/de-DE.ts +1 -1
  292. package/src/compiler/locales/es-ES.ts +1 -1
  293. package/src/compiler/locales/fr-FR.ts +1 -1
  294. package/src/compiler/locales/it-IT.ts +1 -1
  295. package/src/compiler/locales/ja-JP.ts +1 -1
  296. package/src/compiler/locales/ko-KR.ts +1 -1
  297. package/src/compiler/locales/pl-PL.ts +1 -1
  298. package/src/compiler/locales/pt-BR.ts +1 -1
  299. package/src/compiler/locales/ru-RU.ts +1 -1
  300. package/src/compiler/locales/tr-TR.ts +1 -1
  301. package/src/compiler/locales/zh-CN.ts +1 -1
  302. package/src/compiler/locales/zh-TW.ts +1 -1
  303. package/src/compiler/module-resolution.ts +44 -8
  304. package/src/compiler/module-specifiers.ts +62 -20
  305. package/src/compiler/name-resolver.ts +9 -1
  306. package/src/compiler/node-builder-names.ts +236 -54
  307. package/src/compiler/node-builder-pseudo.ts +4 -7
  308. package/src/compiler/node-builder-reuse.ts +5 -4
  309. package/src/compiler/node-builder.ts +130 -31
  310. package/src/compiler/option-declarations.ts +33 -103
  311. package/src/compiler/options.ts +23 -62
  312. package/src/compiler/output-paths.ts +5 -18
  313. package/src/compiler/package-entrypoints.ts +345 -0
  314. package/src/compiler/package-json.ts +4 -4
  315. package/src/compiler/parallel-check.ts +326 -52
  316. package/src/compiler/parallel-emit.ts +320 -0
  317. package/src/compiler/parallel-parse.ts +16 -5
  318. package/src/compiler/parse-thread.ts +3 -0
  319. package/src/compiler/parser.ts +156 -39
  320. package/src/compiler/path.ts +22 -2
  321. package/src/compiler/printer/emit-context.ts +21 -0
  322. package/src/compiler/printer/factory-base.ts +10 -3
  323. package/src/compiler/printer/factory.ts +4 -1
  324. package/src/compiler/printer/helpers.ts +10 -1
  325. package/src/compiler/printer/name-generator.ts +24 -2
  326. package/src/compiler/printer/printer.ts +266 -30
  327. package/src/compiler/printer/utilities.ts +8 -2
  328. package/src/compiler/program-checker.ts +57 -5
  329. package/src/compiler/program-utilities.ts +23 -10
  330. package/src/compiler/program.ts +18 -26
  331. package/src/compiler/pseudo-bigint.ts +17 -0
  332. package/src/compiler/regexp-checker.ts +63 -30
  333. package/src/compiler/relations.ts +240 -77
  334. package/src/compiler/reparser.ts +7 -2
  335. package/src/compiler/scanner.ts +109 -79
  336. package/src/compiler/shared-results.ts +2414 -0
  337. package/src/compiler/show-config.ts +18 -1
  338. package/src/compiler/sourcemap.ts +2 -2
  339. package/src/compiler/symbol-accessibility.ts +26 -3
  340. package/src/compiler/symbol.ts +46 -24
  341. package/src/compiler/syntax-kind.ts +188 -187
  342. package/src/compiler/thread-entry.ts +64 -4
  343. package/src/compiler/transformers/alias-references.ts +123 -4
  344. package/src/compiler/transformers/async.ts +2 -17
  345. package/src/compiler/transformers/class-fields.ts +13 -12
  346. package/src/compiler/transformers/commonjs-module.ts +11 -7
  347. package/src/compiler/transformers/declarations-diagnostics.ts +5 -3
  348. package/src/compiler/transformers/declarations-pseudo.ts +2 -4
  349. package/src/compiler/transformers/declarations-resolver.ts +0 -3
  350. package/src/compiler/transformers/declarations-syntactic.ts +1 -21
  351. package/src/compiler/transformers/declarations.ts +134 -48
  352. package/src/compiler/transformers/decorator-metadata.ts +9 -1
  353. package/src/compiler/transformers/destructuring.ts +4 -3
  354. package/src/compiler/transformers/external-module-info.ts +1 -1
  355. package/src/compiler/transformers/jsx.ts +2 -1
  356. package/src/compiler/transformers/reference-resolver.ts +83 -19
  357. package/src/compiler/transformers/runtime-syntax.ts +6 -1
  358. package/src/compiler/transformers/syntax-facts.ts +2 -7
  359. package/src/compiler/transformers/type-eraser.ts +10 -1
  360. package/src/compiler/transformers/type-serialization.ts +3 -2
  361. package/src/compiler/transformers/visitor-base.ts +2 -1
  362. package/src/compiler/transformers/visitor-hooks.ts +9 -4
  363. package/src/compiler/tsc-build.ts +66 -9
  364. package/src/compiler/tsc-cli.ts +7 -0
  365. package/src/compiler/tsc-compile.ts +284 -4
  366. package/src/compiler/tsc-watch.ts +74 -45
  367. package/src/compiler/tsconfig.ts +176 -19
  368. package/src/compiler/type-printer.ts +36 -2
  369. package/src/compiler/types.ts +2 -1
  370. package/src/library/ast.generated.ts +57 -41
  371. package/src/library/compiler-options.generated.ts +117 -103
  372. package/src/library/disk.ts +10 -1
  373. package/src/library/enums.generated.ts +196 -196
@@ -474,14 +474,6 @@ class Watcher {
474
474
 
475
475
  start(): void {
476
476
  const sys = this.sys;
477
- if (this.config.options.incremental === true || this.config.options.composite === true) {
478
- this.snapshot = readBuildInfoProgram(
479
- this.config,
480
- new FileBuildInfoReader(new SystemFileSystem(sys)),
481
- sys.defaultLibraryPath,
482
- sys.currentDirectory,
483
- );
484
- }
485
477
  this.status.report(
486
478
  watchRestart.resumed
487
479
  ? Diagnostics.File_change_detected_Starting_incremental_compilation
@@ -491,59 +483,86 @@ class Watcher {
491
483
  watchRestart.firstBuildDone();
492
484
  this.changes.watch([this.stamps, this.configStamps]);
493
485
  };
494
- // A program shared with checker threads is never written: symbols get their ids when created.
495
486
  const options = this.config.options;
496
- if (parallelParse.spawn !== undefined && checkerThreads(options.checkers, options.singleThreaded) > 1)
487
+ if (parallelParse.spawn !== undefined && options.singleThreaded !== true) {
488
+ // Parse threads load the first program, as they load a compile's (`parsesAhead`, tsc-cli.ts), and
489
+ // it is shared with them: its symbols get their ids when they are created.
497
490
  assignSymbolIdsAtCreation();
498
- const threads = this.firstBuildThreads();
499
- if (threads > 1) this.buildOnThreads(threads, watchChanges);
500
- else this.build(watchChanges);
501
- }
502
-
503
- /**
504
- * The checker threads of the first build: those of a compile (`compileThreads`), or 1 to build on this
505
- * thread. A first build without old state checks every file, as a compile does; rebuilds check what a
506
- * change affects (`rebuildThreads`). With build info (`--incremental`), the first build stays here.
507
- */
508
- private firstBuildThreads(): number {
509
- const options = this.config.options;
510
- if (this.snapshot !== undefined || isIncremental(options) || parallelParse.spawn === undefined) return 1;
511
- return checkerThreads(options.checkers, options.singleThreaded);
491
+ this.buildOnThreads(watchChanges);
492
+ return;
493
+ }
494
+ if (isIncremental(options))
495
+ this.snapshot = readBuildInfoProgram(
496
+ this.config,
497
+ new FileBuildInfoReader(new SystemFileSystem(sys)),
498
+ sys.defaultLibraryPath,
499
+ sys.currentDirectory,
500
+ );
501
+ this.build(watchChanges);
512
502
  }
513
503
 
514
504
  /**
515
- * Builds the first program as a compile does: parse threads load its files, and checker threads check
516
- * it (parallel-check.ts) unless it checks little. The program is shared with them, so it gets its own
517
- * copy of the config and a host of its own. Its files go to the watch's file maps for rebuilds to take,
518
- * and are never written again: rebuilds check them with the checker's side tables. Calls `done` once
519
- * the build is reported.
505
+ * Builds the first program as a compile does: parse threads load its files while this thread reads the
506
+ * build info (`--incremental`), and checker threads check it (parallel-check.ts) unless it checks little.
507
+ * Without old state, every file is checked, as a compile does; with build info, the files the changes
508
+ * since affect are, as a rebuild checks them (`recheckOnThreads`). The program is shared with the
509
+ * threads, so it gets its own copy of the config and a host of its own. Its files go to the watch's
510
+ * file maps for rebuilds to take, and are never written again: rebuilds check them with the checker's
511
+ * side tables. Calls `done` once the build is reported.
520
512
  */
521
- private buildOnThreads(threads: number, done: () => void): void {
513
+ private buildOnThreads(done: () => void): void {
522
514
  releaseProgramCaches();
523
515
  const sys = this.sys;
524
516
  const config = copyCommandLine(this.config);
525
517
  const options = config.options;
518
+ const incremental = isIncremental(options);
526
519
  const session = new ParseSession(
527
- parseThreads(threads),
520
+ parseThreads(checkerThreads(options.checkers, options.singleThreaded)),
528
521
  options,
529
522
  sys.currentDirectory,
530
523
  config.configName,
531
524
  config.fileNames.length > 0,
532
525
  );
533
- const host = new WatchCompilerHost(
534
- sys,
535
- new CachedFileSystem(new SystemFileSystem(sys)),
536
- this.locale,
537
- new WatchSourceFiles(),
538
- );
526
+ const fs = new CachedFileSystem(new SystemFileSystem(sys));
527
+ const host = new WatchCompilerHost(sys, fs, this.locale, new WatchSourceFiles());
539
528
  const loader = new FileLoader(host, config);
540
529
  let rootFilesAdded = false;
530
+ // The build info lists the real paths of the `package.json` files module resolution looked up, as
531
+ // a compile's does (tsc-cli.ts): those of the threads' lookups are resolved into the file system's cache.
532
+ const resolvesPackageJsons = incremental && config.configName !== '' && config.buildInfoFileName() !== '';
541
533
  session.onIdle = (batch) => {
542
534
  if (!rootFilesAdded) rootFilesAdded = loader.addRootFiles(rootFilesPerChunk);
543
535
  loader.walkAhead(batch.files);
536
+ if (resolvesPackageJsons) {
537
+ const lookups = batch.packageJsons;
538
+ for (let k = 0; k < lookups.directories.length; k++)
539
+ if (lookups.exists[k]! || lookups.directoryExists[k]!)
540
+ fs.realpath(combinePaths(lookups.directories[k]!, 'package.json'));
541
+ }
542
+ };
543
+ // The build info is read while the threads parse, as a compile reads it, or here if they are done first.
544
+ let buildInfoRead = !incremental;
545
+ const readBuildInfo = (): void => {
546
+ if (buildInfoRead) return;
547
+ buildInfoRead = true;
548
+ this.snapshot = readBuildInfoProgram(
549
+ config,
550
+ new FileBuildInfoReader(new SystemFileSystem(sys)),
551
+ sys.defaultLibraryPath,
552
+ sys.currentDirectory,
553
+ );
554
+ mark('build info read');
544
555
  };
545
556
  session.start(config.fileNames, () => {
546
- const program = new Program(config, host, loader);
557
+ readBuildInfo();
558
+ let program = new Program(config, host, loader);
559
+ // Where the threads' lookups may miss some `package.json` files of the build info, the program is
560
+ // loaded again, resolving every file's imports and references itself, as a compile does.
561
+ if (incremental && !program.hasAllPackageJsonLookups()) {
562
+ const own = new FileLoader(host, config);
563
+ own.takesPreparedResolutions = false;
564
+ program = new Program(config, host, own);
565
+ }
547
566
  // The session's callbacks keep the loader: its tasks go once checking has started.
548
567
  releaseLater(loader);
549
568
  this.files = this.files.next();
@@ -552,16 +571,25 @@ class Watcher {
552
571
  this.files.current.set(watchFileKey(file.fileName, file.path, indicator), file);
553
572
  }
554
573
  const checked = new CheckedProgram(program);
574
+ // The incremental program `finishBuild` makes after checking keeps the globals found checking a file
575
+ // with the file.
576
+ checked.globalsInFileDiagnostics = true;
555
577
  const finish = (): void => {
556
- this.finishBuild(checked);
557
578
  // Rebuilds parse what changed themselves.
558
579
  clearPreparedFiles();
559
580
  done();
560
581
  };
561
- const count = checkerThreads(options.checkers, options.singleThreaded, program);
562
- if (count > 1) startParallelCheck(checked, count, finish);
563
- else finish();
582
+ const threads = checkerThreads(options.checkers, options.singleThreaded, program);
583
+ if (this.snapshot !== undefined && threads > 1) return this.recheckOnThreads(checked, threads, new Map(), finish);
584
+ const report = (): void => {
585
+ this.finishBuild(checked);
586
+ finish();
587
+ };
588
+ if (this.snapshot === undefined && threads > 1) startParallelCheck(checked, threads, report);
589
+ else report();
564
590
  });
591
+ if (incremental && sys.fileExists(config.buildInfoFileName())) session.queueAhead();
592
+ readBuildInfo();
565
593
  }
566
594
 
567
595
  private configFiles(): string[] {
@@ -650,6 +678,7 @@ class Watcher {
650
678
  computeLastSignatures(this.snapshot, this.lastChecked, this.files.parsed);
651
679
  this.lastChecked = undefined;
652
680
  const checked = new CheckedProgram(program);
681
+ checked.globalsInFileDiagnostics = true;
653
682
  const signatures = new Map<string, string>();
654
683
  const threads = this.rebuildThreads(checked, signatures);
655
684
  // A new checker for checker threads: `rebuildThreads` may have emitted declarations with this one.
@@ -690,9 +719,9 @@ class Watcher {
690
719
  * affects the global scope. A changed file whose declaration file keeps the signature of the last
691
720
  * build affects only itself (`getFilesAffectedBy`); its signature is computed with `checked`'s checker
692
721
  * and added to `signatures`. That is what the change affects at most; `recheckOnThreads` then takes
693
- * what it does affect. A watch whose first config kept it on one thread gave its symbols no ids at
694
- * creation (`start`), so its rebuilds, which take the unchanged files of earlier builds, stay on this
695
- * thread after a config edit turns checker threads on.
722
+ * what it does affect. A watch that started without parse threads (`--singleThreaded`) gave its symbols
723
+ * no ids at creation (`start`), so its rebuilds, which take the unchanged files of earlier builds, stay on
724
+ * this thread after a config edit turns checker threads on.
696
725
  */
697
726
  private rebuildThreads(checked: CheckedProgram, signatures: Map<string, string>): number {
698
727
  const program = checked.program;
@@ -38,6 +38,7 @@ import { ModuleResolutionHost, resolveConfig } from './module-resolution.js';
38
38
  import {
39
39
  compilerOptionsByName,
40
40
  OptionNameMap,
41
+ optionsForCompiler,
41
42
  typeAcquisitionDeclarations,
42
43
  type OptionDeclaration,
43
44
  } from './option-declarations.js';
@@ -45,6 +46,7 @@ import {
45
46
  getAllowJS,
46
47
  getResolveJsonModule,
47
48
  mergeCompilerOptions,
49
+ PluginImport,
48
50
  setCompilerOption,
49
51
  setTypeAcquisitionOption,
50
52
  type CompilerOptions,
@@ -72,6 +74,7 @@ import {
72
74
  getPathFromPathComponents,
73
75
  hasJSFileExtension,
74
76
  isDeclarationFileName,
77
+ isNetworkPathValue,
75
78
  isRootedDiskPath,
76
79
  normalizePath,
77
80
  normalizeSlashes,
@@ -223,6 +226,11 @@ export class ParsedCommandLine implements OutputPathsHost {
223
226
  private outputDtsToReference: Map<string, SourceOutputAndProjectReference> | undefined = undefined;
224
227
  private commonSourceDirectoryValue: string | undefined = undefined;
225
228
  private referencePaths: string[] | undefined = undefined;
229
+ /**
230
+ * The config file's JSON, with what the configs it extends add to `files`, `include`, `exclude` and
231
+ * `compileOnSave`; `undefined` without a config file.
232
+ */
233
+ raw: JsonValue | undefined = undefined;
226
234
 
227
235
  constructor(
228
236
  readonly options: CompilerOptions,
@@ -452,6 +460,33 @@ export function findPropertyAssignment(
452
460
  return undefined;
453
461
  }
454
462
 
463
+ /**
464
+ * A diagnostic at property `propertyName` of the `index`th project reference: at its value, else at the
465
+ * reference, else a compiler diagnostic. As in tsgo, `index` counts the references the JSON value kept.
466
+ */
467
+ function diagnosticAtProjectReferenceProperty(
468
+ file: SourceFile | undefined,
469
+ index: number,
470
+ propertyName: string,
471
+ message: DiagnosticMessage,
472
+ ...args: string[]
473
+ ): Diagnostic {
474
+ let node: Node | undefined;
475
+ const root = getTsConfigObjectLiteral(file);
476
+ if (root !== undefined)
477
+ for (const property of root.properties.nodes) {
478
+ if (!(property instanceof PropertyAssignment) || propertyNameText(property.name) !== 'references') continue;
479
+ const initializer = (property as PropertyAssignment).initializer;
480
+ if (!(initializer instanceof ArrayLiteralExpression)) continue;
481
+ const elements = initializer.elements.nodes;
482
+ if (index >= elements.length || !(elements[index] instanceof ObjectLiteralExpression)) continue;
483
+ const element = elements[index] as ObjectLiteralExpression;
484
+ node = findPropertyAssignment(element, propertyName)?.initializer ?? element;
485
+ break;
486
+ }
487
+ return diagnosticAtNode(file, node, message, ...args);
488
+ }
489
+
455
490
  /** The string literal `value` in the array of the root property `key`. */
456
491
  export function findTsConfigArrayElement(
457
492
  file: SourceFile | undefined,
@@ -490,8 +525,17 @@ export function propertyNameText(name: Node): string | undefined {
490
525
 
491
526
  // ---- Spec validation
492
527
 
493
- /** Rejects specs ending in `**` (for `include`) and `..` after a `**`. */
494
- export function specToDiagnostic(spec: string, disallowTrailingRecursion: boolean): DiagnosticMessage | undefined {
528
+ /**
529
+ * Rejects specs that resolve to a network root (`basePath` given), specs ending in `**` (for `include`) and `..`
530
+ * after a `**`. `?` is a wildcard in specs, so only UNC and device roots name a network path there.
531
+ */
532
+ export function specToDiagnostic(
533
+ spec: string,
534
+ disallowTrailingRecursion: boolean,
535
+ basePath?: string,
536
+ ): DiagnosticMessage | undefined {
537
+ if (basePath !== undefined && getNormalizedAbsolutePath(spec, basePath).startsWith('//'))
538
+ return Diagnostics.Network_path_0_is_not_supported;
495
539
  if (disallowTrailingRecursion) {
496
540
  const trimmed = spec.endsWith('/') ? spec.slice(0, -1) : spec;
497
541
  if (trimmed === '**' || trimmed.endsWith('/**')) {
@@ -509,6 +553,7 @@ export function specToDiagnostic(spec: string, disallowTrailingRecursion: boolea
509
553
  function validateSpecs(
510
554
  specs: readonly JsonValue[],
511
555
  disallowTrailingRecursion: boolean,
556
+ basePath: string,
512
557
  file: SourceFile,
513
558
  key: string,
514
559
  errors: Diagnostic[],
@@ -516,7 +561,7 @@ function validateSpecs(
516
561
  const result: string[] = [];
517
562
  for (const spec of specs) {
518
563
  if (typeof spec !== 'string') continue;
519
- const message = specToDiagnostic(spec, disallowTrailingRecursion);
564
+ const message = specToDiagnostic(spec, disallowTrailingRecursion, basePath);
520
565
  if (message === undefined) result.push(spec);
521
566
  else errors.push(diagnosticAtNode(file, findTsConfigArrayElement(file, key, spec), message, spec));
522
567
  }
@@ -763,6 +808,8 @@ class ConfigFileConverter {
763
808
  readonly options: CompilerOptions;
764
809
  readonly typeAcquisition: TypeAcquisition = {};
765
810
  extendedConfigPaths: string[] | undefined = undefined;
811
+ /** Names of compiler options written at the root instead of in `compilerOptions`. */
812
+ readonly rootCompilerOptions: Node[] = [];
766
813
 
767
814
  constructor(
768
815
  private readonly parser: ConfigParser,
@@ -797,7 +844,9 @@ class ConfigFileConverter {
797
844
  }
798
845
  }
799
846
  const name = getBaseFileName(this.file.fileName) === 'jsconfig.json' ? 'jsconfig.json' : 'tsconfig.json';
800
- this.errors.push(createCompilerDiagnostic(Diagnostics.The_root_value_of_a_0_file_must_be_an_object, name));
847
+ this.errors.push(
848
+ diagnosticAtNode(this.file, root, Diagnostics.The_root_value_of_a_0_file_must_be_an_object, name),
849
+ );
801
850
  return new JsonObject();
802
851
  }
803
852
  return this.convertObject(root, rootDeclaration);
@@ -932,10 +981,16 @@ class ConfigFileConverter {
932
981
  this.file,
933
982
  this.errors,
934
983
  );
935
- } else if (option === undefined && key === 'excludes') {
936
- this.errors.push(
937
- diagnosticAtNode(this.file, property.name, Diagnostics.Unknown_option_excludes_Did_you_mean_exclude),
938
- );
984
+ } else if (option === undefined) {
985
+ if (key === 'excludes')
986
+ this.errors.push(
987
+ diagnosticAtNode(this.file, property.name, Diagnostics.Unknown_option_excludes_Did_you_mean_exclude),
988
+ );
989
+ for (const compilerOption of optionsForCompiler)
990
+ if (compilerOption.name === key) {
991
+ this.rootCompilerOptions.push(property.name);
992
+ break;
993
+ }
939
994
  }
940
995
  }
941
996
  }
@@ -949,6 +1004,14 @@ function setCompilerOptionFromJson(options: CompilerOptions, option: OptionDecla
949
1004
  options.paths = paths;
950
1005
  return;
951
1006
  }
1007
+ if (option.name === 'plugins') {
1008
+ if (!(value instanceof JsonArray)) return;
1009
+ options.plugins = value.items.map((item) => {
1010
+ const name = item instanceof JsonObject ? item.entries.get('name') : undefined;
1011
+ return new PluginImport(typeof name === 'string' ? name : '');
1012
+ });
1013
+ return;
1014
+ }
952
1015
  setCompilerOption(options, option.name, toOptionValue(option, value));
953
1016
  }
954
1017
 
@@ -1063,20 +1126,41 @@ export class ConfigParser {
1063
1126
  let validatedIncludeBeforeSubstitution: string[] = [];
1064
1127
  let validatedInclude: string[] = [];
1065
1128
  if (include.items !== undefined) {
1066
- validatedIncludeBeforeSubstitution = validateSpecs(include.items, true, file.sourceFile, 'include', errors);
1129
+ validatedIncludeBeforeSubstitution = validateSpecs(
1130
+ include.items,
1131
+ true,
1132
+ basePathForFileNames,
1133
+ file.sourceFile,
1134
+ 'include',
1135
+ errors,
1136
+ );
1067
1137
  validatedInclude =
1068
1138
  substituteConfigDirInList(validatedIncludeBeforeSubstitution, basePathForFileNames) ??
1069
1139
  validatedIncludeBeforeSubstitution;
1070
1140
  }
1071
1141
  let validatedExclude: string[] = [];
1072
1142
  if (exclude.items !== undefined) {
1073
- validatedExclude = validateSpecs(exclude.items, false, file.sourceFile, 'exclude', errors);
1143
+ validatedExclude = validateSpecs(exclude.items, false, basePathForFileNames, file.sourceFile, 'exclude', errors);
1074
1144
  validatedExclude = substituteConfigDirInList(validatedExclude, basePathForFileNames) ?? validatedExclude;
1075
1145
  }
1076
1146
  let validatedFilesBeforeSubstitution: string[] = [];
1077
1147
  let validatedFiles: string[] = [];
1078
1148
  if (files.items !== undefined) {
1079
- for (const spec of files.items) if (typeof spec === 'string') validatedFilesBeforeSubstitution.push(spec);
1149
+ for (const spec of files.items) {
1150
+ if (typeof spec !== 'string') continue;
1151
+ if (isNetworkPathValue(spec, basePathForFileNames)) {
1152
+ errors.push(
1153
+ diagnosticAtNode(
1154
+ file.sourceFile,
1155
+ findTsConfigArrayElement(file.sourceFile, 'files', spec),
1156
+ Diagnostics.Network_path_0_is_not_supported,
1157
+ spec,
1158
+ ),
1159
+ );
1160
+ continue;
1161
+ }
1162
+ validatedFilesBeforeSubstitution.push(spec);
1163
+ }
1080
1164
  validatedFiles =
1081
1165
  substituteConfigDirInList(validatedFilesBeforeSubstitution, basePathForFileNames) ??
1082
1166
  validatedFilesBeforeSubstitution;
@@ -1118,18 +1202,67 @@ export class ConfigParser {
1118
1202
 
1119
1203
  const projectReferences: ProjectReference[] = [];
1120
1204
  if (references.items !== undefined) {
1121
- for (const reference of references.items) {
1205
+ const items = references.items;
1206
+ for (let index = 0; index < items.length; index++) {
1207
+ const reference = items[index];
1122
1208
  if (!(reference instanceof JsonObject)) continue;
1123
1209
  const path = reference.entries.get('path');
1210
+ if (typeof path !== 'string') {
1211
+ errors.push(
1212
+ diagnosticAtProjectReferenceProperty(
1213
+ file.sourceFile,
1214
+ index,
1215
+ 'path',
1216
+ Diagnostics.Compiler_option_0_requires_a_value_of_type_1,
1217
+ 'reference.path',
1218
+ 'string',
1219
+ ),
1220
+ );
1221
+ continue;
1222
+ }
1223
+ if (path === '') {
1224
+ errors.push(
1225
+ diagnosticAtProjectReferenceProperty(
1226
+ file.sourceFile,
1227
+ index,
1228
+ 'path',
1229
+ Diagnostics.Compiler_option_0_cannot_be_given_an_empty_string,
1230
+ 'reference.path',
1231
+ ),
1232
+ );
1233
+ continue;
1234
+ }
1235
+ if (isNetworkPathValue(path, basePathForFileNames)) {
1236
+ errors.push(
1237
+ diagnosticAtProjectReferenceProperty(
1238
+ file.sourceFile,
1239
+ index,
1240
+ 'path',
1241
+ Diagnostics.Network_path_0_is_not_supported,
1242
+ path,
1243
+ ),
1244
+ );
1245
+ continue;
1246
+ }
1124
1247
  const circular = reference.entries.get('circular');
1125
- if (typeof path !== 'string' || path === '') continue;
1248
+ if (circular !== undefined && typeof circular !== 'boolean')
1249
+ errors.push(
1250
+ diagnosticAtProjectReferenceProperty(
1251
+ file.sourceFile,
1252
+ index,
1253
+ 'circular',
1254
+ Diagnostics.Compiler_option_0_requires_a_value_of_type_1,
1255
+ 'reference.circular',
1256
+ 'boolean',
1257
+ ),
1258
+ );
1126
1259
  projectReferences.push(
1127
1260
  new ProjectReference(getNormalizedAbsolutePath(path, basePathForFileNames), path, circular === true),
1128
1261
  );
1129
1262
  }
1130
1263
  }
1131
1264
 
1132
- return new ParsedCommandLine(
1265
+ const parsedCommandLine = new ParsedCommandLine(
1133
1266
  options,
1134
1267
  parsed.typeAcquisition,
1135
1268
  fileNames,
@@ -1140,6 +1273,8 @@ export class ConfigParser {
1140
1273
  cs,
1141
1274
  literalFiles.size,
1142
1275
  );
1276
+ parsedCommandLine.raw = raw;
1277
+ return parsedCommandLine;
1143
1278
  }
1144
1279
 
1145
1280
  /** A config file's options with what it extends applied. */
@@ -1159,6 +1294,17 @@ export class ConfigParser {
1159
1294
 
1160
1295
  const converter = new ConfigFileConverter(this, file.sourceFile, basePath, configFileName, errors);
1161
1296
  const raw = converter.convertRoot();
1297
+ // A compiler option at the root is reported once, unless there's a `compilerOptions` too.
1298
+ const rootOption = converter.rootCompilerOptions.length > 0 ? converter.rootCompilerOptions[0] : undefined;
1299
+ if (rootOption !== undefined && raw instanceof JsonObject && !raw.entries.has('compilerOptions'))
1300
+ errors.push(
1301
+ diagnosticAtNode(
1302
+ file.sourceFile,
1303
+ rootOption,
1304
+ Diagnostics.X_0_should_be_set_inside_the_compilerOptions_object_of_the_config_json_file,
1305
+ propertyNameText(rootOption) ?? '',
1306
+ ),
1307
+ );
1162
1308
  const own = new OwnConfig(raw, converter.options, converter.typeAcquisition, converter.extendedConfigPaths);
1163
1309
  const ownOptions = converter.options;
1164
1310
  // `paths` may be inherited, so remember which directory it is relative to.
@@ -1303,6 +1449,10 @@ export class ConfigParser {
1303
1449
  }
1304
1450
  const validated = validateOptionValue(option, value, valueExpression, file, errors);
1305
1451
  if (validated === null || option.isFilePath !== true || typeof validated !== 'string') return validated;
1452
+ if (isNetworkPathValue(validated, basePath)) {
1453
+ errors.push(diagnosticAtNode(file, valueExpression, Diagnostics.Network_path_0_is_not_supported, validated));
1454
+ return null;
1455
+ }
1306
1456
  let path = normalizeSlashes(validated);
1307
1457
  if (!startsWithConfigDirTemplate(path)) path = getNormalizedAbsolutePath(path, basePath);
1308
1458
  return path === '' ? '.' : path;
@@ -1375,6 +1525,10 @@ export class ConfigParser {
1375
1525
  errors: Diagnostic[],
1376
1526
  ): string {
1377
1527
  extendedConfig = normalizeSlashes(extendedConfig);
1528
+ if (isNetworkPathValue(extendedConfig, basePath)) {
1529
+ errors.push(diagnosticAtNode(file, valueExpression, Diagnostics.Network_path_0_is_not_supported, extendedConfig));
1530
+ return '';
1531
+ }
1378
1532
  if (isRootedDiskPath(extendedConfig) || extendedConfig.startsWith('./') || extendedConfig.startsWith('../')) {
1379
1533
  let path = getNormalizedAbsolutePath(extendedConfig, basePath);
1380
1534
  if (!this.fs.fileExists(path) && !path.endsWith('.json')) {
@@ -1415,25 +1569,28 @@ export class ConfigParser {
1415
1569
  const wildcardJsonFiles = new Map<string, string>();
1416
1570
  const supportedExtensions = getSupportedExtensions(options);
1417
1571
  const extensionsWithJson = getSupportedExtensionsWithJsonIfResolveJsonModule(options);
1418
- // Keys of literal files are the specs as written, as in tsgo.
1572
+ // Literal files are keyed by path, so `a.ts` and `./a.ts` are one file, also when `include` matches it.
1419
1573
  for (const fileName of specs.validatedFilesSpec) {
1420
- literalFiles.set(getCanonicalFileName(fileName, cs), getNormalizedAbsolutePath(fileName, basePath));
1574
+ const file = getNormalizedAbsolutePath(fileName, basePath);
1575
+ literalFiles.set(getCanonicalFileName(file, cs), file);
1421
1576
  }
1422
1577
  if (onRootFile !== undefined) for (const fileName of literalFiles.values()) onRootFile(fileName);
1423
1578
 
1424
1579
  const includes = specs.validatedIncludeSpecs;
1425
1580
  if (includes.length > 0) {
1426
- // Matches go to `onRootFile` a directory at a time, without those that a file of the same name
1427
- // with a higher priority extension leaves out below.
1581
+ // Matches go to `onRootFile` a directory at a time, without the literal files, which it has, and those that a
1582
+ // file of the same name with a higher priority extension leaves out below.
1428
1583
  let directory = '';
1429
1584
  let pending: string[] = [];
1430
1585
  const flush = (): void => {
1431
1586
  if (onRootFile === undefined || pending.length === 0) return;
1432
1587
  const siblings = new Map<string, string>();
1433
1588
  for (const file of pending) siblings.set(getCanonicalFileName(file, cs), file);
1434
- for (const file of pending)
1589
+ for (const file of pending) {
1590
+ if (literalFiles.has(getCanonicalFileName(file, cs))) continue;
1435
1591
  if (!hasFileWithHigherPriorityExtension(file, supportedExtensions, literalFiles, siblings, cs))
1436
1592
  onRootFile(file);
1593
+ }
1437
1594
  pending = [];
1438
1595
  };
1439
1596
  const onMatch =
@@ -29,7 +29,26 @@ export function typeToString(c: Checker, t: Type, enclosingDeclaration?: Node, f
29
29
  // Without explicit flags, unique symbols print as such and aliases from other scopes are used.
30
30
  const formatFlags =
31
31
  flags ?? NodeBuilderFlags.AllowUniqueESSymbolType | NodeBuilderFlags.UseAliasDefinedOutsideCurrentScope;
32
- return typeToStringFromTypeNode(c, t, enclosingDeclaration, formatFlags) ?? '';
32
+ // Prints nested in a serialization depend on its depth (typeToStringFromTypeNode), so only the others are kept.
33
+ if (c.serializationLevel !== 0) return typeToStringFromTypeNode(c, t, enclosingDeclaration, formatFlags) ?? '';
34
+ // The variance check in progress names the marker types (`sub-T`, `super-T`) after its type parameter.
35
+ const variance = c.varianceTypeParameter;
36
+ const key =
37
+ String(t.id) +
38
+ ',' +
39
+ String(enclosingDeclaration === undefined ? 0 : enclosingDeclaration.id) +
40
+ ',' +
41
+ String(formatFlags) +
42
+ ',' +
43
+ String(variance === undefined ? 0 : variance.id);
44
+ const cached = c.typeStrings.get(key);
45
+ if (cached !== undefined) return cached;
46
+ // A print that creates no types reads only types that exist and settled state, so printing again gives the same
47
+ // text and creates nothing; prints that create types run each time, as in tsgo, so type ids stay in tsgo's order.
48
+ const typeCount = c.typeCount;
49
+ const text = typeToStringFromTypeNode(c, t, enclosingDeclaration, formatFlags) ?? '';
50
+ if (c.typeCount === typeCount) c.typeStrings.set(key, text);
51
+ return text;
33
52
  }
34
53
 
35
54
  /** `symbol` as text: the expression naming it, as seen from `enclosingDeclaration` if given. */
@@ -39,12 +58,27 @@ export function symbolToString(
39
58
  enclosingDeclaration?: Node,
40
59
  internalFlags: NodeBuilderInternalFlags = NodeBuilderInternalFlags.None,
41
60
  ): string {
61
+ // Kept as typeToString keeps type prints: outside serializations, when printing created no types.
62
+ const key = String(enclosingDeclaration === undefined ? 0 : enclosingDeclaration.id) + ',' + String(internalFlags);
63
+ const kept = c.serializationLevel === 0 ? c.symbolStrings.get(symbol) : undefined;
64
+ const cached = kept?.get(key);
65
+ if (cached !== undefined) return cached;
66
+ const typeCount = c.typeCount;
42
67
  const b = new NodeBuilder(c, enclosingDeclaration, NodeBuilderFlags.IgnoreErrors, internalFlags, undefined);
43
- return printSingleLine(
68
+ const text = printSingleLine(
44
69
  b,
45
70
  symbolToExpression(b, symbol, SymbolFlags.All),
46
71
  enclosingDeclaration !== undefined && enclosingDeclaration.kind === SyntaxKind.SourceFile,
47
72
  );
73
+ if (c.serializationLevel === 0 && c.typeCount === typeCount) {
74
+ let byKey = kept;
75
+ if (byKey === undefined) {
76
+ byKey = new Map<string, string>();
77
+ c.symbolStrings.set(symbol, byKey);
78
+ }
79
+ byKey.set(key, text);
80
+ }
81
+ return text;
48
82
  }
49
83
 
50
84
  /** `signature` as text: a call or construct signature without its trailing semicolon. */
@@ -70,10 +70,11 @@ export const enum ScriptTarget {
70
70
  ES2023 = 10,
71
71
  ES2024 = 11,
72
72
  ES2025 = 12,
73
+ ES2026 = 13,
73
74
  ESNext = 99,
74
75
  JSON = 100,
75
76
  Latest = ESNext,
76
- LatestStandard = ES2025,
77
+ LatestStandard = ES2026,
77
78
  }
78
79
 
79
80
  export const enum LanguageVariant {