tsc-ts 0.0.10 → 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 (367) hide show
  1. package/README.md +1 -1
  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 +20 -15
  6. package/dist/api/compiler/ast.js +1023 -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 +173 -123
  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 +469 -438
  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 -113
  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 +210 -74
  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 +137 -34
  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 +93 -31
  73. package/dist/api/compiler/checker.js +143 -35
  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 +19 -4
  77. package/dist/api/compiler/compile-program.js +45 -26
  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.js +7 -7
  81. package/dist/api/compiler/emitter.d.ts +7 -1
  82. package/dist/api/compiler/emitter.js +53 -11
  83. package/dist/api/compiler/file-include.d.ts +2 -1
  84. package/dist/api/compiler/file-include.js +11 -7
  85. package/dist/api/compiler/file-loader.d.ts +10 -0
  86. package/dist/api/compiler/file-loader.js +138 -41
  87. package/dist/api/compiler/instantiation.d.ts +7 -0
  88. package/dist/api/compiler/instantiation.js +101 -49
  89. package/dist/api/compiler/jsdoc.js +23 -23
  90. package/dist/api/compiler/link-tables.d.ts +48 -18
  91. package/dist/api/compiler/link-tables.js +80 -37
  92. package/dist/api/compiler/locales/cs-CZ.d.ts +1 -1
  93. package/dist/api/compiler/locales/cs-CZ.js +1 -1
  94. package/dist/api/compiler/locales/de-DE.d.ts +1 -1
  95. package/dist/api/compiler/locales/de-DE.js +1 -1
  96. package/dist/api/compiler/locales/es-ES.d.ts +1 -1
  97. package/dist/api/compiler/locales/es-ES.js +1 -1
  98. package/dist/api/compiler/locales/fr-FR.d.ts +1 -1
  99. package/dist/api/compiler/locales/fr-FR.js +1 -1
  100. package/dist/api/compiler/locales/it-IT.d.ts +1 -1
  101. package/dist/api/compiler/locales/it-IT.js +1 -1
  102. package/dist/api/compiler/locales/ja-JP.d.ts +1 -1
  103. package/dist/api/compiler/locales/ja-JP.js +1 -1
  104. package/dist/api/compiler/locales/ko-KR.d.ts +1 -1
  105. package/dist/api/compiler/locales/ko-KR.js +1 -1
  106. package/dist/api/compiler/locales/pl-PL.d.ts +1 -1
  107. package/dist/api/compiler/locales/pl-PL.js +1 -1
  108. package/dist/api/compiler/locales/pt-BR.d.ts +1 -1
  109. package/dist/api/compiler/locales/pt-BR.js +1 -1
  110. package/dist/api/compiler/locales/ru-RU.d.ts +1 -1
  111. package/dist/api/compiler/locales/ru-RU.js +1 -1
  112. package/dist/api/compiler/locales/tr-TR.d.ts +1 -1
  113. package/dist/api/compiler/locales/tr-TR.js +1 -1
  114. package/dist/api/compiler/locales/zh-CN.d.ts +1 -1
  115. package/dist/api/compiler/locales/zh-CN.js +1 -1
  116. package/dist/api/compiler/locales/zh-TW.d.ts +1 -1
  117. package/dist/api/compiler/locales/zh-TW.js +1 -1
  118. package/dist/api/compiler/module-resolution-types.js +6 -6
  119. package/dist/api/compiler/module-resolution.d.ts +10 -1
  120. package/dist/api/compiler/module-resolution.js +115 -84
  121. package/dist/api/compiler/module-specifiers.d.ts +15 -0
  122. package/dist/api/compiler/module-specifiers.js +24 -18
  123. package/dist/api/compiler/name-resolver.js +74 -65
  124. package/dist/api/compiler/node-builder-names.d.ts +11 -3
  125. package/dist/api/compiler/node-builder-names.js +210 -90
  126. package/dist/api/compiler/node-builder-pseudo.js +29 -31
  127. package/dist/api/compiler/node-builder-reuse.js +23 -22
  128. package/dist/api/compiler/node-builder.d.ts +18 -1
  129. package/dist/api/compiler/node-builder.js +191 -102
  130. package/dist/api/compiler/option-declarations.d.ts +2 -6
  131. package/dist/api/compiler/option-declarations.js +315 -375
  132. package/dist/api/compiler/options.d.ts +15 -33
  133. package/dist/api/compiler/options.js +21 -54
  134. package/dist/api/compiler/output-paths.d.ts +4 -1
  135. package/dist/api/compiler/output-paths.js +6 -11
  136. package/dist/api/compiler/package-json.d.ts +3 -3
  137. package/dist/api/compiler/package-json.js +11 -10
  138. package/dist/api/compiler/parser.d.ts +40 -19
  139. package/dist/api/compiler/parser.js +308 -216
  140. package/dist/api/compiler/path.d.ts +9 -0
  141. package/dist/api/compiler/path.js +20 -3
  142. package/dist/api/compiler/printer/emit-context.d.ts +3 -1
  143. package/dist/api/compiler/printer/emit-context.js +16 -1
  144. package/dist/api/compiler/printer/factory-base.d.ts +2 -2
  145. package/dist/api/compiler/printer/factory-base.js +7 -3
  146. package/dist/api/compiler/printer/factory.js +3 -1
  147. package/dist/api/compiler/printer/helpers.js +10 -1
  148. package/dist/api/compiler/printer/name-generator.d.ts +1 -1
  149. package/dist/api/compiler/printer/name-generator.js +35 -16
  150. package/dist/api/compiler/printer/printer.d.ts +1 -0
  151. package/dist/api/compiler/printer/printer.js +303 -281
  152. package/dist/api/compiler/printer/utilities.js +149 -147
  153. package/dist/api/compiler/program-checker.d.ts +8 -2
  154. package/dist/api/compiler/program-checker.js +84 -34
  155. package/dist/api/compiler/program-utilities.d.ts +3 -1
  156. package/dist/api/compiler/program-utilities.js +28 -15
  157. package/dist/api/compiler/program.d.ts +2 -0
  158. package/dist/api/compiler/program.js +69 -57
  159. package/dist/api/compiler/pseudo-bigint.d.ts +2 -0
  160. package/dist/api/compiler/pseudo-bigint.js +18 -0
  161. package/dist/api/compiler/regexp-checker.d.ts +1 -1
  162. package/dist/api/compiler/regexp-checker.js +93 -76
  163. package/dist/api/compiler/relations.d.ts +27 -4
  164. package/dist/api/compiler/relations.js +337 -180
  165. package/dist/api/compiler/reparser.js +60 -56
  166. package/dist/api/compiler/scanner.d.ts +19 -2
  167. package/dist/api/compiler/scanner.js +123 -108
  168. package/dist/api/compiler/shared-results.d.ts +463 -0
  169. package/dist/api/compiler/shared-results.js +2128 -0
  170. package/dist/api/compiler/sourcemap.js +2 -2
  171. package/dist/api/compiler/symbol-accessibility.js +87 -74
  172. package/dist/api/compiler/symbol.d.ts +22 -13
  173. package/dist/api/compiler/symbol.js +15 -1
  174. package/dist/api/compiler/syntax-kind.d.ts +198 -197
  175. package/dist/api/compiler/transformers/alias-references.js +247 -139
  176. package/dist/api/compiler/transformers/async-utilities.js +25 -25
  177. package/dist/api/compiler/transformers/async.d.ts +0 -1
  178. package/dist/api/compiler/transformers/async.js +64 -77
  179. package/dist/api/compiler/transformers/class-fields.d.ts +1 -0
  180. package/dist/api/compiler/transformers/class-fields.js +81 -78
  181. package/dist/api/compiler/transformers/commonjs-module.js +18 -15
  182. package/dist/api/compiler/transformers/const-enum-inliner.js +1 -1
  183. package/dist/api/compiler/transformers/declarations-diagnostics.js +247 -244
  184. package/dist/api/compiler/transformers/declarations-pseudo.js +100 -100
  185. package/dist/api/compiler/transformers/declarations-resolver.d.ts +0 -3
  186. package/dist/api/compiler/transformers/declarations-syntactic.d.ts +1 -2
  187. package/dist/api/compiler/transformers/declarations-syntactic.js +134 -156
  188. package/dist/api/compiler/transformers/declarations-tracker.js +18 -18
  189. package/dist/api/compiler/transformers/declarations.d.ts +4 -1
  190. package/dist/api/compiler/transformers/declarations.js +305 -238
  191. package/dist/api/compiler/transformers/decorator-metadata.d.ts +1 -1
  192. package/dist/api/compiler/transformers/decorator-metadata.js +53 -45
  193. package/dist/api/compiler/transformers/decorator-utilities.js +24 -24
  194. package/dist/api/compiler/transformers/destructuring.js +19 -18
  195. package/dist/api/compiler/transformers/emit-resolver.js +1 -1
  196. package/dist/api/compiler/transformers/es-decorators.js +55 -55
  197. package/dist/api/compiler/transformers/external-module-info.js +3 -3
  198. package/dist/api/compiler/transformers/for-await.js +25 -25
  199. package/dist/api/compiler/transformers/import-elision.js +14 -14
  200. package/dist/api/compiler/transformers/jsx.js +12 -12
  201. package/dist/api/compiler/transformers/legacy-decorators.js +17 -17
  202. package/dist/api/compiler/transformers/module.js +8 -8
  203. package/dist/api/compiler/transformers/named-evaluation.js +4 -4
  204. package/dist/api/compiler/transformers/object-rest-spread.js +20 -20
  205. package/dist/api/compiler/transformers/optional-chain.js +10 -10
  206. package/dist/api/compiler/transformers/reference-resolver.d.ts +12 -1
  207. package/dist/api/compiler/transformers/reference-resolver.js +131 -69
  208. package/dist/api/compiler/transformers/runtime-syntax.js +35 -31
  209. package/dist/api/compiler/transformers/subtree-facts.js +47 -47
  210. package/dist/api/compiler/transformers/syntax-facts.js +56 -58
  211. package/dist/api/compiler/transformers/type-eraser.js +73 -66
  212. package/dist/api/compiler/transformers/type-serialization.js +24 -24
  213. package/dist/api/compiler/transformers/using.js +12 -12
  214. package/dist/api/compiler/transformers/utilities.js +77 -77
  215. package/dist/api/compiler/transformers/visitor-base.js +172 -172
  216. package/dist/api/compiler/transformers/visitor-hooks.js +6 -2
  217. package/dist/api/compiler/tsconfig.d.ts +10 -2
  218. package/dist/api/compiler/tsconfig.js +136 -48
  219. package/dist/api/compiler/type-printer.js +40 -3
  220. package/dist/api/compiler/types.d.ts +2 -1
  221. package/dist/api/library/ast.generated.d.ts +42 -39
  222. package/dist/api/library/ast.generated.js +1 -1
  223. package/dist/api/library/compiler-options.generated.d.ts +111 -100
  224. package/dist/api/library/compiler-options.generated.js +1 -1
  225. package/dist/api/library/disk.js +12 -1
  226. package/dist/api/library/enums.generated.d.ts +206 -206
  227. package/dist/api/library/enums.generated.js +206 -206
  228. package/dist/api/library/nodes.js +26 -26
  229. package/package.json +9 -9
  230. package/src/compiler/ast-utilities.ts +99 -7
  231. package/src/compiler/ast.ts +55 -26
  232. package/src/compiler/binder.ts +39 -4
  233. package/src/compiler/character-codes.ts +2 -2
  234. package/src/compiler/checker-calls.ts +76 -8
  235. package/src/compiler/checker-classes.ts +78 -24
  236. package/src/compiler/checker-contextual.ts +6 -1
  237. package/src/compiler/checker-declarations.ts +31 -4
  238. package/src/compiler/checker-declared-types.ts +8 -5
  239. package/src/compiler/checker-decorators.ts +1 -1
  240. package/src/compiler/checker-deprecation.ts +29 -8
  241. package/src/compiler/checker-destructuring.ts +10 -3
  242. package/src/compiler/checker-emit-helpers.ts +1 -0
  243. package/src/compiler/checker-emit-resolver.ts +16 -6
  244. package/src/compiler/checker-expressions.ts +79 -46
  245. package/src/compiler/checker-functions.ts +21 -6
  246. package/src/compiler/checker-generated-code.ts +2 -22
  247. package/src/compiler/checker-grammar.ts +133 -60
  248. package/src/compiler/checker-heritage.ts +22 -21
  249. package/src/compiler/checker-inference.ts +514 -87
  250. package/src/compiler/checker-iteration.ts +18 -31
  251. package/src/compiler/checker-javascript.ts +1 -1
  252. package/src/compiler/checker-jsdoc.ts +50 -27
  253. package/src/compiler/checker-jsx.ts +26 -4
  254. package/src/compiler/checker-members.ts +197 -55
  255. package/src/compiler/checker-modules.ts +332 -65
  256. package/src/compiler/checker-narrowing.ts +98 -19
  257. package/src/compiler/checker-object-literals.ts +3 -0
  258. package/src/compiler/checker-operators.ts +11 -4
  259. package/src/compiler/checker-property-access.ts +7 -2
  260. package/src/compiler/checker-services.ts +39 -12
  261. package/src/compiler/checker-signatures.ts +15 -1
  262. package/src/compiler/checker-source-file.ts +39 -13
  263. package/src/compiler/checker-statements.ts +3 -2
  264. package/src/compiler/checker-symbol-types.ts +29 -6
  265. package/src/compiler/checker-symbols.ts +158 -15
  266. package/src/compiler/checker-type-factory.ts +120 -21
  267. package/src/compiler/checker-type-nodes.ts +46 -3
  268. package/src/compiler/checker-type-operators.ts +83 -26
  269. package/src/compiler/checker-types.ts +147 -4
  270. package/src/compiler/checker-unused.ts +9 -14
  271. package/src/compiler/checker.ts +168 -41
  272. package/src/compiler/command-line.ts +28 -28
  273. package/src/compiler/compile-program.ts +51 -25
  274. package/src/compiler/decoder.ts +13 -4
  275. package/src/compiler/diagnostic-messages.ts +1973 -1892
  276. package/src/compiler/emitter.ts +57 -8
  277. package/src/compiler/encoder.ts +23 -8
  278. package/src/compiler/file-include.ts +9 -3
  279. package/src/compiler/file-loader.ts +139 -32
  280. package/src/compiler/help.ts +10 -14
  281. package/src/compiler/incremental.ts +86 -18
  282. package/src/compiler/init.ts +2 -7
  283. package/src/compiler/instantiation.ts +77 -22
  284. package/src/compiler/jsdoc.ts +3 -1
  285. package/src/compiler/link-tables.ts +82 -37
  286. package/src/compiler/locales/cs-CZ.ts +1 -1
  287. package/src/compiler/locales/de-DE.ts +1 -1
  288. package/src/compiler/locales/es-ES.ts +1 -1
  289. package/src/compiler/locales/fr-FR.ts +1 -1
  290. package/src/compiler/locales/it-IT.ts +1 -1
  291. package/src/compiler/locales/ja-JP.ts +1 -1
  292. package/src/compiler/locales/ko-KR.ts +1 -1
  293. package/src/compiler/locales/pl-PL.ts +1 -1
  294. package/src/compiler/locales/pt-BR.ts +1 -1
  295. package/src/compiler/locales/ru-RU.ts +1 -1
  296. package/src/compiler/locales/tr-TR.ts +1 -1
  297. package/src/compiler/locales/zh-CN.ts +1 -1
  298. package/src/compiler/locales/zh-TW.ts +1 -1
  299. package/src/compiler/module-resolution.ts +44 -8
  300. package/src/compiler/module-specifiers.ts +62 -20
  301. package/src/compiler/name-resolver.ts +9 -1
  302. package/src/compiler/node-builder-names.ts +236 -54
  303. package/src/compiler/node-builder-pseudo.ts +4 -7
  304. package/src/compiler/node-builder-reuse.ts +5 -4
  305. package/src/compiler/node-builder.ts +130 -31
  306. package/src/compiler/option-declarations.ts +33 -103
  307. package/src/compiler/options.ts +23 -62
  308. package/src/compiler/output-paths.ts +5 -18
  309. package/src/compiler/package-entrypoints.ts +345 -0
  310. package/src/compiler/package-json.ts +4 -4
  311. package/src/compiler/parallel-check.ts +197 -8
  312. package/src/compiler/parallel-emit.ts +1 -1
  313. package/src/compiler/parser.ts +156 -39
  314. package/src/compiler/path.ts +22 -2
  315. package/src/compiler/printer/emit-context.ts +16 -0
  316. package/src/compiler/printer/factory-base.ts +10 -3
  317. package/src/compiler/printer/factory.ts +4 -1
  318. package/src/compiler/printer/helpers.ts +10 -1
  319. package/src/compiler/printer/name-generator.ts +24 -2
  320. package/src/compiler/printer/printer.ts +35 -14
  321. package/src/compiler/printer/utilities.ts +8 -2
  322. package/src/compiler/program-checker.ts +53 -5
  323. package/src/compiler/program-utilities.ts +23 -10
  324. package/src/compiler/program.ts +13 -1
  325. package/src/compiler/pseudo-bigint.ts +17 -0
  326. package/src/compiler/regexp-checker.ts +63 -30
  327. package/src/compiler/relations.ts +233 -77
  328. package/src/compiler/reparser.ts +7 -2
  329. package/src/compiler/scanner.ts +109 -79
  330. package/src/compiler/shared-results.ts +2414 -0
  331. package/src/compiler/show-config.ts +18 -1
  332. package/src/compiler/sourcemap.ts +2 -2
  333. package/src/compiler/symbol-accessibility.ts +26 -3
  334. package/src/compiler/symbol.ts +31 -14
  335. package/src/compiler/syntax-kind.ts +188 -187
  336. package/src/compiler/thread-entry.ts +19 -2
  337. package/src/compiler/transformers/alias-references.ts +123 -4
  338. package/src/compiler/transformers/async.ts +2 -17
  339. package/src/compiler/transformers/class-fields.ts +13 -12
  340. package/src/compiler/transformers/commonjs-module.ts +11 -7
  341. package/src/compiler/transformers/declarations-diagnostics.ts +5 -3
  342. package/src/compiler/transformers/declarations-pseudo.ts +2 -4
  343. package/src/compiler/transformers/declarations-resolver.ts +0 -3
  344. package/src/compiler/transformers/declarations-syntactic.ts +1 -21
  345. package/src/compiler/transformers/declarations.ts +134 -48
  346. package/src/compiler/transformers/decorator-metadata.ts +9 -1
  347. package/src/compiler/transformers/destructuring.ts +4 -3
  348. package/src/compiler/transformers/external-module-info.ts +1 -1
  349. package/src/compiler/transformers/jsx.ts +2 -1
  350. package/src/compiler/transformers/reference-resolver.ts +83 -19
  351. package/src/compiler/transformers/runtime-syntax.ts +6 -1
  352. package/src/compiler/transformers/syntax-facts.ts +2 -7
  353. package/src/compiler/transformers/type-eraser.ts +10 -1
  354. package/src/compiler/transformers/type-serialization.ts +3 -2
  355. package/src/compiler/transformers/visitor-base.ts +2 -1
  356. package/src/compiler/transformers/visitor-hooks.ts +9 -4
  357. package/src/compiler/tsc-build.ts +3 -0
  358. package/src/compiler/tsc-cli.ts +2 -0
  359. package/src/compiler/tsc-compile.ts +7 -2
  360. package/src/compiler/tsc-watch.ts +74 -45
  361. package/src/compiler/tsconfig.ts +176 -19
  362. package/src/compiler/type-printer.ts +36 -2
  363. package/src/compiler/types.ts +2 -1
  364. package/src/library/ast.generated.ts +57 -41
  365. package/src/library/compiler-options.generated.ts +117 -103
  366. package/src/library/disk.ts +10 -1
  367. package/src/library/enums.generated.ts +196 -196
@@ -1,4 +1,4 @@
1
- // The TypeScript/JavaScript/JSX/JSON parser, a port of TypeScript 7.0.2's (tsgo) parser with its
1
+ // The TypeScript/JavaScript/JSX/JSON parser, a port of TypeScript 7.1's (tsgo) parser with its
2
2
  // error recovery, parse diagnostics and JavaScript-specific reparsing.
3
3
  //
4
4
  // ```ts
@@ -218,6 +218,7 @@ import {
218
218
  isFunctionLike,
219
219
  isImportCall,
220
220
  isImportMeta,
221
+ isImportPhaseMetaProperty,
221
222
  isInJSFile,
222
223
  isKeyword,
223
224
  isKeywordOrPunctuation,
@@ -293,7 +294,11 @@ const enum ListElement {
293
294
  ObjectBindingElement,
294
295
  ClassElement,
295
296
  HeritageClause,
297
+ /** A heritage clause of an interface declaration. */
298
+ InterfaceHeritageClause,
296
299
  ExpressionWithTypeArguments,
300
+ /** An element of a type heritage clause: `implements` of a class, `extends` of an interface. */
301
+ TypeHeritageClauseElement,
297
302
  EnumMember,
298
303
  ImportSpecifier,
299
304
  ExportSpecifier,
@@ -340,6 +345,18 @@ export const enum JSDocScannerInfo {
340
345
 
341
346
  const noArgs: readonly string[] = [];
342
347
 
348
+ /** Whether `operator` binds before an operator of `currentPrecedence`: at equal precedence, only the right-associative `**`. */
349
+ function shouldConsumeBinaryOperator(
350
+ operator: SyntaxKind,
351
+ operatorPrecedence: OperatorPrecedence,
352
+ currentPrecedence: OperatorPrecedence,
353
+ ): boolean {
354
+ return (
355
+ operatorPrecedence > currentPrecedence ||
356
+ (operatorPrecedence === currentPrecedence && operator === SyntaxKind.AsteriskAsteriskToken)
357
+ );
358
+ }
359
+
343
360
  /** Parser state saved by `mark` for speculative parsing. */
344
361
  export class ParserState extends ScannerState {
345
362
  contextFlags: NodeFlags;
@@ -430,7 +447,7 @@ export function parseSourceFile(fileName: string, text: string, options?: ParseO
430
447
  export function parseIsolatedEntityName(text: string): EntityName | undefined {
431
448
  const p = new Parser('/', '/', text, ScriptKind.JS, new ExternalModuleIndicatorOptions(false, false));
432
449
  p.nextToken();
433
- const entityName = p.parseEntityName(true, undefined);
450
+ const entityName = p.parseEntityName(true, false, undefined);
434
451
  return p.token() === SyntaxKind.EndOfFile && p.diagnostics.length === 0 ? entityName : undefined;
435
452
  }
436
453
 
@@ -981,9 +998,13 @@ export class Parser extends ScannerErrorReporter {
981
998
  case ListElement.ClassElement:
982
999
  return this.parseClassElement();
983
1000
  case ListElement.HeritageClause:
984
- return this.parseHeritageClause();
1001
+ return this.parseHeritageClause(false);
1002
+ case ListElement.InterfaceHeritageClause:
1003
+ return this.parseHeritageClause(true);
985
1004
  case ListElement.ExpressionWithTypeArguments:
986
1005
  return this.parseExpressionWithTypeArguments();
1006
+ case ListElement.TypeHeritageClauseElement:
1007
+ return this.parseTypeHeritageClauseElement();
987
1008
  case ListElement.EnumMember:
988
1009
  return this.parseEnumMember();
989
1010
  case ListElement.ImportSpecifier:
@@ -2204,9 +2225,18 @@ export class Parser extends ScannerErrorReporter {
2204
2225
  // The name isn't parsed in an await context; the checker reports `await` names.
2205
2226
  const name = this.parseNameOfClassDeclarationOrExpression();
2206
2227
  const typeParameters = this.parseTypeParameters();
2207
- if (modifiers !== undefined && hasModifierOfKind(modifiers, SyntaxKind.ExportKeyword))
2228
+ // An exported class at the top level of a module, not one nested in a block or a namespace, has its
2229
+ // heritage clauses and members parsed in an await context.
2230
+ if (
2231
+ modifiers !== undefined &&
2232
+ (this.parsingContexts & (1 << ParsingContext.SourceElements)) !== 0 &&
2233
+ (this.parsingContexts &
2234
+ ((1 << ParsingContext.BlockStatements) | (1 << ParsingContext.SwitchClauseStatements))) ===
2235
+ 0 &&
2236
+ hasModifierOfKind(modifiers, SyntaxKind.ExportKeyword)
2237
+ )
2208
2238
  this.setContextFlags(NodeFlags.AwaitContext, true);
2209
- const heritageClauses = this.parseHeritageClauses();
2239
+ const heritageClauses = this.parseHeritageClauses(false);
2210
2240
  let members: NodeList;
2211
2241
  if (this.parseExpected(SyntaxKind.OpenBraceToken)) {
2212
2242
  members = this.parseList(ParsingContext.ClassMembers, ListElement.ClassElement);
@@ -2248,23 +2278,47 @@ export class Parser extends ScannerErrorReporter {
2248
2278
  return this.token() === SyntaxKind.ImplementsKeyword && this.lookAhead(nextTokenIsIdentifierOrKeyword);
2249
2279
  }
2250
2280
 
2251
- parseHeritageClauses(): NodeList | undefined {
2281
+ parseHeritageClauses(isInterface: boolean): NodeList | undefined {
2252
2282
  return this.isHeritageClause()
2253
- ? this.parseList(ParsingContext.HeritageClauses, ListElement.HeritageClause)
2283
+ ? this.parseList(
2284
+ ParsingContext.HeritageClauses,
2285
+ isInterface ? ListElement.InterfaceHeritageClause : ListElement.HeritageClause,
2286
+ )
2254
2287
  : undefined;
2255
2288
  }
2256
2289
 
2257
- parseHeritageClause(): Node {
2290
+ parseHeritageClause(isInterface: boolean): Node {
2258
2291
  const pos = this.nodePos();
2259
2292
  const kind = this.token();
2260
2293
  this.nextToken();
2294
+ // A class's `implements` and an interface's `extends` name types: their elements are type references.
2295
+ const isTypeClause = isInterface ? kind === SyntaxKind.ExtendsKeyword : kind === SyntaxKind.ImplementsKeyword;
2261
2296
  const types = this.parseDelimitedList(
2262
2297
  ParsingContext.HeritageClauseElement,
2263
- ListElement.ExpressionWithTypeArguments,
2298
+ isTypeClause ? ListElement.TypeHeritageClauseElement : ListElement.ExpressionWithTypeArguments,
2264
2299
  )!;
2265
2300
  return this.checkJSSyntax(this.finishNode(new HeritageClause(kind, types), pos));
2266
2301
  }
2267
2302
 
2303
+ /** A type reference when the element is an entity name with optional type arguments, otherwise the
2304
+ * `ExpressionWithTypeArguments`, which the checker reports. */
2305
+ parseTypeHeritageClauseElement(): Node {
2306
+ const pos = this.nodePos();
2307
+ const element = this.parseExpressionWithTypeArguments() as ExpressionWithTypeArguments;
2308
+ if (!isValidHeritageTypeReferenceExpression(element.expression)) return element;
2309
+ const typeName = this.convertEntityNameExpressionToEntityName(element.expression);
2310
+ return this.finishNode(new TypeReferenceNode(typeName, element.typeArguments), pos);
2311
+ }
2312
+
2313
+ /** The `QualifiedName` chain for an identifier or a chain of property accesses, spanning the same text. */
2314
+ convertEntityNameExpressionToEntityName(node: Node): Node {
2315
+ if (node instanceof Identifier) return node;
2316
+ const access = node as PropertyAccessExpression;
2317
+ // The name can be a private name, as upstream's.
2318
+ const result = new QualifiedName(this.convertEntityNameExpressionToEntityName(access.expression), access.name);
2319
+ return this.finishNodeWithEnd(result, node.pos, node.end);
2320
+ }
2321
+
2268
2322
  parseExpressionWithTypeArguments(): Node {
2269
2323
  const pos = this.nodePos();
2270
2324
  const expression = this.parseLeftHandSideExpressionOrHigher();
@@ -2556,7 +2610,7 @@ export class Parser extends ScannerErrorReporter {
2556
2610
  this.parseExpected(SyntaxKind.InterfaceKeyword);
2557
2611
  const name = this.parseIdentifier(IdentifierUse.Name);
2558
2612
  const typeParameters = this.parseTypeParameters();
2559
- const heritageClauses = this.parseHeritageClauses();
2613
+ const heritageClauses = this.parseHeritageClauses(true);
2560
2614
  const members = this.parseObjectTypeMembers();
2561
2615
  const result = this.finishWithJSDoc(
2562
2616
  new InterfaceDeclaration(modifiers, name, typeParameters, heritageClauses, members),
@@ -2650,10 +2704,15 @@ export class Parser extends ScannerErrorReporter {
2650
2704
  } else {
2651
2705
  name = this.parseLiteralExpression(true);
2652
2706
  }
2707
+ // `declare module "*.ext" with { type: "..." }`: the import attributes the module matches.
2708
+ const attributes =
2709
+ keyword === SyntaxKind.ModuleKeyword && this.parseOptional(SyntaxKind.WithKeyword)
2710
+ ? (this.parseTypeLiteral() as TypeLiteralNode)
2711
+ : undefined;
2653
2712
  let body: Node | undefined;
2654
2713
  if (this.token() === SyntaxKind.OpenBraceToken) body = this.parseModuleBlock();
2655
2714
  else this.parseSemicolon();
2656
- const result = this.finishWithJSDoc(new ModuleDeclaration(modifiers, keyword, name, body), pos, jsdoc);
2715
+ const result = this.finishWithJSDoc(new ModuleDeclaration(modifiers, keyword, name, attributes, body), pos, jsdoc);
2657
2716
  this.statementHasAwaitIdentifier = saveHasAwaitIdentifier;
2658
2717
  return result;
2659
2718
  }
@@ -2696,7 +2755,7 @@ export class Parser extends ScannerErrorReporter {
2696
2755
  } else {
2697
2756
  body = this.parseModuleBlock();
2698
2757
  }
2699
- const result = this.finishWithJSDoc(new ModuleDeclaration(modifiers, keyword, name, body), pos, jsdoc);
2758
+ const result = this.finishWithJSDoc(new ModuleDeclaration(modifiers, keyword, name, undefined, body), pos, jsdoc);
2700
2759
  this.checkJSSyntax(result);
2701
2760
  this.statementHasAwaitIdentifier = saveHasAwaitIdentifier;
2702
2761
  return result;
@@ -2711,6 +2770,7 @@ export class Parser extends ScannerErrorReporter {
2711
2770
  const afterImportPos = this.nodePos();
2712
2771
  // The identifier isn't parsed in an await context; the checker reports `await`.
2713
2772
  const saveHasAwaitIdentifier = this.statementHasAwaitIdentifier;
2773
+ const phaseModifierCandidate = this.currentImportPhaseModifier();
2714
2774
  let identifier = this.isIdentifier() ? this.parseIdentifier(IdentifierUse.Name) : undefined;
2715
2775
  let phaseModifier = SyntaxKind.Unknown;
2716
2776
  if (
@@ -2722,20 +2782,19 @@ export class Parser extends ScannerErrorReporter {
2722
2782
  ) {
2723
2783
  phaseModifier = SyntaxKind.TypeKeyword;
2724
2784
  identifier = this.isIdentifier() ? this.parseIdentifier(IdentifierUse.Name) : undefined;
2725
- } else if (identifier !== undefined && identifier.text === 'defer') {
2726
- const shouldParseAsDeferModifier =
2727
- this.token() === SyntaxKind.FromKeyword
2728
- ? !this.lookAhead(nextTokenIsTokenStringLiteral)
2729
- : this.token() !== SyntaxKind.CommaToken && this.token() !== SyntaxKind.EqualsToken;
2730
- if (shouldParseAsDeferModifier) {
2731
- phaseModifier = SyntaxKind.DeferKeyword;
2732
- identifier = this.isIdentifier() ? this.parseIdentifier(IdentifierUse.Name) : undefined;
2733
- }
2785
+ } else if (
2786
+ identifier !== undefined &&
2787
+ phaseModifierCandidate !== SyntaxKind.Unknown &&
2788
+ this.shouldParseImportPhaseModifier()
2789
+ ) {
2790
+ phaseModifier = phaseModifierCandidate;
2791
+ identifier = this.isIdentifier() ? this.parseIdentifier(IdentifierUse.Name) : undefined;
2734
2792
  }
2735
2793
  if (
2736
2794
  identifier !== undefined &&
2737
2795
  !this.tokenAfterImportedIdentifierDefinitelyProducesImportDeclaration() &&
2738
- phaseModifier !== SyntaxKind.DeferKeyword
2796
+ phaseModifier !== SyntaxKind.DeferKeyword &&
2797
+ phaseModifier !== SyntaxKind.SourceKeyword
2739
2798
  ) {
2740
2799
  const importEquals = this.checkJSSyntax(
2741
2800
  this.parseImportEqualsDeclaration(pos, jsdoc, modifiers, identifier, phaseModifier === SyntaxKind.TypeKeyword),
@@ -2763,6 +2822,30 @@ export class Parser extends ScannerErrorReporter {
2763
2822
  return this.token() === SyntaxKind.AsteriskToken || this.token() === SyntaxKind.OpenBraceToken;
2764
2823
  }
2765
2824
 
2825
+ /** In `import defer ___` or `import source ___`, whether `defer` or `source` is a phase modifier rather than the
2826
+ * default import's name. */
2827
+ shouldParseImportPhaseModifier(): boolean {
2828
+ switch (this.token()) {
2829
+ case SyntaxKind.CommaToken:
2830
+ case SyntaxKind.EqualsToken:
2831
+ return false;
2832
+ case SyntaxKind.FromKeyword:
2833
+ return !this.lookAhead(nextTokenIsTokenStringLiteral);
2834
+ }
2835
+ return true;
2836
+ }
2837
+
2838
+ /** The phase modifier the current token's text spells, written without escapes, or `Unknown`. */
2839
+ currentImportPhaseModifier(): SyntaxKind {
2840
+ switch (this.scanner.getTokenText()) {
2841
+ case 'defer':
2842
+ return SyntaxKind.DeferKeyword;
2843
+ case 'source':
2844
+ return SyntaxKind.SourceKeyword;
2845
+ }
2846
+ return SyntaxKind.Unknown;
2847
+ }
2848
+
2766
2849
  /** In `import id ___`, whether the token makes this an ImportDeclaration rather than ImportEqualsDeclaration. */
2767
2850
  tokenAfterImportedIdentifierDefinitelyProducesImportDeclaration(): boolean {
2768
2851
  return this.token() === SyntaxKind.CommaToken || this.token() === SyntaxKind.FromKeyword;
@@ -2788,7 +2871,7 @@ export class Parser extends ScannerErrorReporter {
2788
2871
  parseModuleReference(): Node {
2789
2872
  if (this.token() === SyntaxKind.RequireKeyword && this.lookAhead(nextTokenIsOpenParen))
2790
2873
  return this.parseExternalModuleReference();
2791
- return this.parseEntityName(false, undefined);
2874
+ return this.parseEntityName(false, false, undefined);
2792
2875
  }
2793
2876
 
2794
2877
  parseExternalModuleReference(): Node {
@@ -2826,6 +2909,9 @@ export class Parser extends ScannerErrorReporter {
2826
2909
  this.parseExpected(SyntaxKind.FromKeyword);
2827
2910
  return importClause;
2828
2911
  }
2912
+ // A phase modifier without bindings still makes an import clause; the checker reports it.
2913
+ if (phaseModifier === SyntaxKind.DeferKeyword || phaseModifier === SyntaxKind.SourceKeyword)
2914
+ return this.finishNode(new ImportClause(phaseModifier, undefined, undefined), pos) as ImportClause;
2829
2915
  return undefined;
2830
2916
  }
2831
2917
 
@@ -3391,12 +3477,16 @@ export class Parser extends ScannerErrorReporter {
3391
3477
  }
3392
3478
 
3393
3479
  parseEntityNameOfTypeReference(): EntityName {
3394
- return this.parseEntityName(true, Diagnostics.Type_expected);
3480
+ return this.parseEntityName(true, false, Diagnostics.Type_expected);
3395
3481
  }
3396
3482
 
3397
- /** An entity name; `use` is for its first identifier, the qualified names' right sides are names. */
3483
+ /**
3484
+ * An entity name; `use` is for its first identifier, the qualified names' right sides are names.
3485
+ * Only a type query allows private names on the right (`typeof this.#x`).
3486
+ */
3398
3487
  parseEntityName(
3399
3488
  allowReservedWords: boolean,
3489
+ allowPrivateName: boolean,
3400
3490
  diagnosticMessage: DiagnosticMessage | undefined,
3401
3491
  use: IdentifierUse = IdentifierUse.Name,
3402
3492
  ): EntityName {
@@ -3408,7 +3498,7 @@ export class Parser extends ScannerErrorReporter {
3408
3498
  // A JSDoc-style generic; the checker reports the gap between the name and the type arguments.
3409
3499
  if (this.token() === SyntaxKind.LessThanToken) break;
3410
3500
  entity = this.finishNode(
3411
- new QualifiedName(entity, this.parseRightSideOfDotIdentifier(allowReservedWords, true)),
3501
+ new QualifiedName(entity, this.parseRightSideOfDot(allowReservedWords, allowPrivateName, true)),
3412
3502
  pos,
3413
3503
  );
3414
3504
  }
@@ -3614,7 +3704,7 @@ export class Parser extends ScannerErrorReporter {
3614
3704
  parseTypeQuery(): TypeNode {
3615
3705
  const pos = this.nodePos();
3616
3706
  this.parseExpected(SyntaxKind.TypeOfKeyword);
3617
- const entityName = this.parseEntityName(true, undefined, IdentifierUse.Reference);
3707
+ const entityName = this.parseEntityName(true, true, undefined, IdentifierUse.Reference);
3618
3708
  // ASI: don't parse the next line's type arguments as part of an instantiation expression.
3619
3709
  const typeArguments = this.hasPrecedingLineBreak() ? undefined : this.parseTypeArguments();
3620
3710
  return this.finishNode(new TypeQueryNode(entityName, typeArguments), pos);
@@ -4736,15 +4826,13 @@ export class Parser extends ScannerErrorReporter {
4736
4826
  // Take a left-associative operator when its precedence is higher than the current one (so
4737
4827
  // `a - b - c` returns `b` as the right operand of the first `-`), and `**` (right
4738
4828
  // associative) when it is at least as high.
4739
- const consumeCurrentOperator =
4740
- operator === SyntaxKind.AsteriskAsteriskToken ? newPrecedence >= precedence : newPrecedence > precedence;
4741
- if (!consumeCurrentOperator) break;
4829
+ if (!shouldConsumeBinaryOperator(operator, newPrecedence, precedence)) break;
4742
4830
  if (operator === SyntaxKind.InKeyword && this.inDisallowInContext()) break;
4743
4831
  if (operator === SyntaxKind.AsKeyword || operator === SyntaxKind.SatisfiesKeyword) {
4744
4832
  // ASI applies before `as`: `var x = foo \n as (Bar)` is a declaration and a call to `as`.
4745
4833
  if (this.hasPrecedingLineBreak()) break;
4746
4834
  this.nextToken();
4747
- // In `a ## b as T`, stop at a following operator with a higher precedence than `##`: the
4835
+ // In `a ## b as T $$ c`, stop when `$$` would bind before `##` once the `as` is erased: the
4748
4836
  // `as` couldn't be erased without changing the meaning (TypeScript#63527).
4749
4837
  const lastPrecedence =
4750
4838
  lastOperand instanceof BinaryExpression
@@ -4754,7 +4842,8 @@ export class Parser extends ScannerErrorReporter {
4754
4842
  operator === SyntaxKind.SatisfiesKeyword
4755
4843
  ? this.makeSatisfiesExpression(leftOperand, this.parseType())
4756
4844
  : this.makeAsExpression(leftOperand, this.parseType());
4757
- if (getBinaryOperatorPrecedence(this.reScanGreaterThanToken()) > lastPrecedence) break;
4845
+ const nextOperator = this.reScanGreaterThanToken();
4846
+ if (shouldConsumeBinaryOperator(nextOperator, getBinaryOperatorPrecedence(nextOperator), lastPrecedence)) break;
4758
4847
  } else {
4759
4848
  leftOperand = this.makeBinaryExpression(
4760
4849
  leftOperand,
@@ -5170,8 +5259,9 @@ export class Parser extends ScannerErrorReporter {
5170
5259
  if (this.token() === SyntaxKind.EqualsToken) {
5171
5260
  if (this.scanJsxAttributeValue() === SyntaxKind.StringLiteral) return this.parseLiteralExpression(false);
5172
5261
  if (this.token() === SyntaxKind.OpenBraceToken) return this.parseJsxExpression(true);
5262
+ // An attribute value is a single element: sibling-element recovery must not wrap it in a binary expression.
5173
5263
  if (this.token() === SyntaxKind.LessThanToken)
5174
- return this.parseJsxElementOrSelfClosingElementOrFragment(true, -1, undefined, false);
5264
+ return this.parseJsxElementOrSelfClosingElementOrFragment(true, -1, undefined, true);
5175
5265
  this.parseErrorAtCurrentToken(Diagnostics.X_or_JSX_element_expected);
5176
5266
  }
5177
5267
  return undefined;
@@ -5290,9 +5380,9 @@ export class Parser extends ScannerErrorReporter {
5290
5380
  // An `import.*` meta property, such as `import.meta`.
5291
5381
  this.nextToken();
5292
5382
  this.nextToken();
5293
- const name = this.parseIdentifierName(IdentifierUse.Name);
5383
+ const name = this.parseImportMetaPropertyName();
5294
5384
  expression = this.finishNode(new MetaProperty(SyntaxKind.ImportKeyword, name), pos);
5295
- if (name.text === 'defer') {
5385
+ if (isImportPhaseMetaProperty(expression)) {
5296
5386
  if (this.token() === SyntaxKind.OpenParenToken || this.token() === SyntaxKind.LessThanToken)
5297
5387
  this.sourceFlags |= NodeFlags.PossiblyContainsDynamicImport;
5298
5388
  } else {
@@ -5310,6 +5400,16 @@ export class Parser extends ScannerErrorReporter {
5310
5400
  return this.parseCallExpressionRest(pos, expression);
5311
5401
  }
5312
5402
 
5403
+ /** The name after `import.`; `defer` and `source` written with escapes are reported. */
5404
+ parseImportMetaPropertyName(): Identifier {
5405
+ if (
5406
+ (this.token() === SyntaxKind.DeferKeyword || this.token() === SyntaxKind.SourceKeyword) &&
5407
+ this.currentImportPhaseModifier() === SyntaxKind.Unknown
5408
+ )
5409
+ this.parseErrorAtCurrentToken(Diagnostics.Keywords_cannot_contain_escape_characters);
5410
+ return this.parseIdentifierName(IdentifierUse.Name);
5411
+ }
5412
+
5313
5413
  parseSuperExpression(): Expression {
5314
5414
  const pos = this.nodePos();
5315
5415
  let expression = this.parseKeywordExpression();
@@ -5504,13 +5604,18 @@ export class Parser extends ScannerErrorReporter {
5504
5604
  ): Expression {
5505
5605
  let argumentExpression: Expression;
5506
5606
  if (this.token() === SyntaxKind.CloseBracketToken) {
5607
+ // The missing argument is created before the error, so the error marks the element access.
5608
+ argumentExpression = this.createMissingIdentifier();
5507
5609
  this.parseErrorAt(
5508
5610
  this.nodePos(),
5509
5611
  this.nodePos(),
5510
5612
  Diagnostics.An_element_access_expression_should_take_an_argument,
5511
5613
  );
5512
- argumentExpression = this.createMissingIdentifier();
5513
5614
  } else {
5615
+ // tsgo creates the missing argument first and drops it when there is one. Finishing that node takes the
5616
+ // error flag of an error before the argument (`i[01]`), so the argument doesn't get it.
5617
+ this.identifierCount++;
5618
+ this.hasParseError = false;
5514
5619
  const argument = this.parseExpressionAllowIn();
5515
5620
  if (
5516
5621
  argument.kind === SyntaxKind.StringLiteral ||
@@ -6794,7 +6899,9 @@ export class Parser extends ScannerErrorReporter {
6794
6899
  }
6795
6900
 
6796
6901
  jsonError(node: Node, message: DiagnosticMessage): void {
6797
- this.diagnostics.push(new Diagnostic(undefined, skipTrivia(this.sourceText, node.pos), node.end, message, noArgs));
6902
+ // A missing node (a property without a value) keeps its position: trivia after it isn't its own.
6903
+ const pos = nodeIsMissing(node) ? node.pos : skipTrivia(this.sourceText, node.pos);
6904
+ this.diagnostics.push(new Diagnostic(undefined, pos, node.end, message, noArgs));
6798
6905
  }
6799
6906
 
6800
6907
  validateJsonValue(sourceFile: SourceFile, value: Node): void {
@@ -7168,6 +7275,16 @@ function nextTokenIsOpenParen(p: Parser): boolean {
7168
7275
  return p.nextToken() === SyntaxKind.OpenParenToken;
7169
7276
  }
7170
7277
 
7278
+ /** An identifier or a chain of property accesses without optional chaining, each name present. */
7279
+ function isValidHeritageTypeReferenceExpression(node: Node): boolean {
7280
+ if (node instanceof Identifier) return nodeIsPresent(node);
7281
+ if (!(node instanceof PropertyAccessExpression) || (node.flags & NodeFlags.OptionalChain) !== 0) return false;
7282
+ return (
7283
+ nodeIsPresent((node as PropertyAccessExpression).name) &&
7284
+ isValidHeritageTypeReferenceExpression((node as PropertyAccessExpression).expression)
7285
+ );
7286
+ }
7287
+
7171
7288
  function nextTokenIsOpenBrace(p: Parser): boolean {
7172
7289
  return p.nextToken() === SyntaxKind.OpenBraceToken;
7173
7290
  }
@@ -7753,7 +7870,7 @@ export function isNodeCoreModule(moduleName: string): boolean {
7753
7870
  }
7754
7871
 
7755
7872
  // `require('module').builtinModules`, without and with only the `node:` prefix.
7756
- const unprefixedNodeCoreModules = new Set<string>([
7873
+ export const unprefixedNodeCoreModules = new Set<string>([
7757
7874
  'assert',
7758
7875
  'assert/strict',
7759
7876
  'async_hooks',
@@ -7810,7 +7927,7 @@ const unprefixedNodeCoreModules = new Set<string>([
7810
7927
  'zlib',
7811
7928
  ]);
7812
7929
 
7813
- const exclusivelyPrefixedNodeCoreModules = new Set<string>([
7930
+ export const exclusivelyPrefixedNodeCoreModules = new Set<string>([
7814
7931
  'node:quic',
7815
7932
  'node:sea',
7816
7933
  'node:sqlite',
@@ -139,6 +139,28 @@ export function isRootedDiskPath(path: string): boolean {
139
139
  return getEncodedRootLength(path) > 0;
140
140
  }
141
141
 
142
+ /**
143
+ * Whether Windows may resolve `path` over the network: a UNC path (`//server/share`), a Win32 device path
144
+ * (`//?/…`, `//./…`) or an NT object path (`/??/…`), with either separator. Device and object paths count even
145
+ * for local volumes, since their `UNC` and `GLOBALROOT` forms reach the network redirector. Accessing one can
146
+ * make Windows authenticate to an arbitrary host, so such paths are never accessed on any platform.
147
+ */
148
+ export function isNetworkPath(path: string): boolean {
149
+ if (path.length < 2 || !isAnyDirectorySeparator(path.charCodeAt(0))) return false;
150
+ if (isAnyDirectorySeparator(path.charCodeAt(1))) return true;
151
+ return (
152
+ path.length >= 3 &&
153
+ path.charCodeAt(1) === 0x3f &&
154
+ path.charCodeAt(2) === 0x3f &&
155
+ (path.length === 3 || isAnyDirectorySeparator(path.charCodeAt(3)))
156
+ );
157
+ }
158
+
159
+ /** Whether a path written in a config or on the command line names a network location once resolved. */
160
+ export function isNetworkPathValue(value: string, basePath: string): boolean {
161
+ return isNetworkPath(getNormalizedAbsolutePath(value, basePath));
162
+ }
163
+
142
164
  export function pathIsAbsolute(path: string): boolean {
143
165
  return getEncodedRootLength(path) !== 0;
144
166
  }
@@ -370,8 +392,6 @@ function isNonDotDotPrefix(normalized: string, rootLength: number): boolean {
370
392
  /** Removes `.`, `..` and duplicate separators, keeping a trailing separator. */
371
393
  export function normalizePath(path: string): string {
372
394
  path = normalizeSlashes(path);
373
- const simple = simpleNormalizePath(path);
374
- if (simple !== undefined) return simple;
375
395
  const normalized = getNormalizedAbsolutePath(path, '');
376
396
  return normalized !== '' && hasTrailingDirectorySeparator(path)
377
397
  ? ensureTrailingDirectorySeparator(normalized)
@@ -1,6 +1,7 @@
1
1
  // Side tables that transforms fill in and the printer reads: original nodes, emit flags,
2
2
  // comment and source map ranges, synthesized comments, generated names and emit helpers.
3
3
  import {
4
+ Block,
4
5
  ExpressionStatement,
5
6
  FunctionDeclaration,
6
7
  Identifier,
@@ -599,6 +600,21 @@ export class EmitContext extends NodeFactory {
599
600
  return node;
600
601
  }
601
602
 
603
+ /** `node` as a function body: a block as it is, an expression as `{ return node; }` with the expression's range. */
604
+ convertToFunctionBlock(node: Node, multiLine: boolean): Block {
605
+ if (node instanceof Block) return node as Block;
606
+ const factory = this.factory;
607
+ const statement = factory.createReturnStatement(node);
608
+ statement.pos = node.pos;
609
+ statement.end = node.end;
610
+ const block = factory.createBlock([statement], multiLine);
611
+ block.statements.pos = node.pos;
612
+ block.statements.end = node.end;
613
+ block.pos = node.pos;
614
+ block.end = node.end;
615
+ return block;
616
+ }
617
+
602
618
  /** Marks the current variable scope as visiting parameters; returns the previous flags. */
603
619
  enterParameters(): number {
604
620
  const scope = this.varScopes[this.varScopes.length - 1]!;
@@ -1831,10 +1831,17 @@ export abstract class NodeFactoryBase {
1831
1831
  modifiers: ModifierList | undefined,
1832
1832
  keyword: SyntaxKind,
1833
1833
  name: ModuleName,
1834
+ attributes: TypeLiteralNode | undefined,
1834
1835
  body: ModuleBody | undefined,
1835
1836
  ): ModuleDeclaration {
1836
- if (modifiers !== node.modifiers || keyword !== node.keyword || name !== node.name || body !== node.body) {
1837
- const updated = new ModuleDeclaration(modifiers, keyword, name, body);
1837
+ if (
1838
+ modifiers !== node.modifiers ||
1839
+ keyword !== node.keyword ||
1840
+ name !== node.name ||
1841
+ attributes !== node.attributes ||
1842
+ body !== node.body
1843
+ ) {
1844
+ const updated = new ModuleDeclaration(modifiers, keyword, name, attributes, body);
1838
1845
  this.finishUpdate(updated, node);
1839
1846
  return updated;
1840
1847
  }
@@ -2121,7 +2128,7 @@ export abstract class NodeFactoryBase {
2121
2128
  return node;
2122
2129
  }
2123
2130
 
2124
- updateQualifiedName(node: QualifiedName, left: EntityName, right: Identifier): QualifiedName {
2131
+ updateQualifiedName(node: QualifiedName, left: EntityName, right: MemberName): QualifiedName {
2125
2132
  if (left !== node.left || right !== node.right) {
2126
2133
  const updated = new QualifiedName(left, right);
2127
2134
  this.finishUpdate(updated, node);
@@ -318,7 +318,10 @@ export abstract class NodeFactory extends NodeFactoryBase {
318
318
  createExpressionFromEntityName(node: Node): Node {
319
319
  if (node instanceof QualifiedName) {
320
320
  const left = this.createExpressionFromEntityName(node.left);
321
- const right = this.cloneIdentifier(node.right);
321
+ const right =
322
+ node.right instanceof PrivateIdentifier
323
+ ? this.cloneNode(node.right, new PrivateIdentifier(node.right.text))
324
+ : this.cloneIdentifier(node.right as Identifier);
322
325
  right.pos = node.right.pos;
323
326
  right.end = node.right.end;
324
327
  right.parent = node.right.parent;
@@ -127,8 +127,17 @@ export const exportStarHelper = new EmitHelper(
127
127
  export const rewriteRelativeImportExtensionsHelper = new EmitHelper(
128
128
  'typescript:rewriteRelativeImportExtensions',
129
129
  false,
130
- `var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExtension) || function (path, preserveJsx) {
130
+ `var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExtension) || function (path, preserveJsx, extraExtensions, ignoreCase) {
131
131
  if (typeof path === "string" && /^\\.\\.?\\//.test(path)) {
132
+ if (extraExtensions) {
133
+ for (var extension in extraExtensions) {
134
+ var suffix = path.slice(-extension.length);
135
+ if (suffix === extension || ignoreCase && suffix.toLowerCase() === extension.toLowerCase()) {
136
+ var output = extraExtensions[extension];
137
+ return output === extension ? path : path.slice(0, -extension.length) + output;
138
+ }
139
+ }
140
+ }
132
141
  return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
133
142
  return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
134
143
  });
@@ -3,6 +3,7 @@ import {
3
3
  ClassExpression,
4
4
  ExportAssignment,
5
5
  type Node,
6
+ NodeVisitor,
6
7
  PrivateIdentifier,
7
8
  SourceFile,
8
9
  StringLiteral,
@@ -360,12 +361,33 @@ export function forgetIdentifierSets(): void {
360
361
  identifierSets.clear();
361
362
  }
362
363
 
363
- /** Whether no identifier in `file` is named `name`. */
364
+ /** Collects the texts of a file's identifiers, private names and literals: the names its generated names avoid. */
365
+ class NameTextCollector extends NodeVisitor {
366
+ readonly texts = new Set<string>();
367
+
368
+ visitNode(node: Node): boolean {
369
+ switch (node.kind) {
370
+ case SyntaxKind.Identifier:
371
+ case SyntaxKind.PrivateIdentifier:
372
+ case SyntaxKind.StringLiteral:
373
+ case SyntaxKind.NumericLiteral:
374
+ case SyntaxKind.BigIntLiteral:
375
+ case SyntaxKind.NoSubstitutionTemplateLiteral:
376
+ this.texts.add(getText(node));
377
+ }
378
+ node.forEachChild(this);
379
+ return false;
380
+ }
381
+ }
382
+
383
+ /** Whether no identifier, private name or literal in `file` has the text `name`. */
364
384
  export function isFileLevelUniqueName(file: SourceFile, name: string): boolean {
365
385
  let set = identifierSets.get(file);
366
386
  if (set === undefined) {
367
387
  if (identifierSets.size >= 16) identifierSets.clear();
368
- set = new Set<string>(file.identifierTexts);
388
+ const collector = new NameTextCollector();
389
+ file.forEachChild(collector);
390
+ set = collector.texts;
369
391
  identifierSets.set(file, set);
370
392
  }
371
393
  return !set.has(name);