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
@@ -5,7 +5,7 @@ import { FunctionTypeNode, GetAccessorDeclaration, Identifier, KeywordTypeNode,
5
5
  import { isFunctionLike } from './ast-utilities.js';
6
6
  import { getSourceFileOfNode, isEntityNameExpression } from './binder-utilities.js';
7
7
  import { getContextualType, instantiateContextualType } from './checker-contextual.js';
8
- import { checkExpressionCached, isConstContext, isLiteralOfContextualType } from './checker-expressions.js';
8
+ import { getTypeOfExpression, isConstContext, isLiteralOfContextualType } from './checker-expressions.js';
9
9
  import { getTypeWithFacts } from './checker-flow.js';
10
10
  import { getPropertiesOfType, getPropertyOfType } from './checker-members.js';
11
11
  import { getReturnTypeOfSignature, getSignatureFromDeclaration, getSingleCallSignature, getTypePredicateOfSignature, } from './checker-signatures.js';
@@ -31,7 +31,7 @@ export function newPseudoChecker(c) {
31
31
  return new PseudoChecker(c.strictNullChecks, new Map(), new NoNames(c.compilerOptions));
32
32
  }
33
33
  function isDeclaration(node) {
34
- if (node.kind === 169 /* SyntaxKind.TypeParameter */)
34
+ if (node.kind === 170 /* SyntaxKind.TypeParameter */)
35
35
  return node.parent !== undefined;
36
36
  return isDeclarationNode(node);
37
37
  }
@@ -54,7 +54,8 @@ export function getRegularTypeOfExpression(c, node) {
54
54
  if ((parent instanceof QualifiedName && parent.right === node) ||
55
55
  (parent instanceof PropertyAccessExpression && parent.name === node))
56
56
  expr = parent;
57
- return getRegularTypeOfLiteralType(c, checkExpressionCached(c, expr));
57
+ // Rechecks the expression, as tsgo does, unless its type needed control flow analysis.
58
+ return getRegularTypeOfLiteralType(c, getTypeOfExpression(c, expr));
58
59
  }
59
60
  function keyword(b, kind) {
60
61
  return b.created(new KeywordTypeNode(kind));
@@ -110,17 +111,17 @@ export function pseudoTypeToNode(b, t) {
110
111
  return b.serializeReturnTypeForSignatureEx(getSignatureFromDeclaration(c, node), false);
111
112
  const parent = node.parent;
112
113
  // The declaration's type is widened as the checker widens it.
113
- if (parent.kind === 254 /* SyntaxKind.ReturnStatement */) {
114
+ if (parent.kind === 255 /* SyntaxKind.ReturnStatement */) {
114
115
  const enclosing = getContainingFunction(node);
115
116
  if (isAccessorKind(enclosing))
116
117
  return b.serializeTypeForDeclaration(enclosing, undefined, undefined, false);
117
118
  return b.serializeReturnTypeForSignatureEx(getSignatureFromDeclaration(c, enclosing), false);
118
119
  }
119
- if (parent.kind === 220 /* SyntaxKind.ArrowFunction */ && getBody(parent) === node)
120
+ if (parent.kind === 221 /* SyntaxKind.ArrowFunction */ && getBody(parent) === node)
120
121
  return b.serializeReturnTypeForSignatureEx(getSignatureFromDeclaration(c, parent), false);
121
122
  if (isDeclaration(parent))
122
123
  return b.serializeTypeForDeclaration(parent, undefined, undefined, false);
123
- return b.typeToTypeNode(getTypeOfExpressionForPseudo(c, node));
124
+ return b.typeToTypeNode(getTypeOfExpression(c, node));
124
125
  }
125
126
  case 2 /* PseudoTypeKind.NoResult */: {
126
127
  const node = t.declaration;
@@ -309,7 +310,7 @@ function pseudoParameterToNode(b, p) {
309
310
  const parameter = b.created(new ParameterDeclaration(undefined, p.rest ? b.token(25 /* SyntaxKind.DotDotDotToken */) : undefined,
310
311
  // Parameter names are always written from scratch.
311
312
  b.parameterToParameterDeclarationName(getSymbol(original), original), p.optional ? b.token(57 /* SyntaxKind.QuestionToken */) : undefined, pseudoTypeToNode(b, p.type), undefined));
312
- if (original.kind === 170 /* SyntaxKind.Parameter */)
313
+ if (original.kind === 171 /* SyntaxKind.Parameter */)
313
314
  b.setCommentRange(parameter, original);
314
315
  return parameter;
315
316
  }
@@ -605,7 +606,7 @@ export function pseudoReturnTypeMatchesPredicate(b, rt, predicate) {
605
606
  const predicateIsAsserts = predicate.kind === 2 /* TypePredicateKind.AssertsThis */ || predicate.kind === 3 /* TypePredicateKind.AssertsIdentifier */;
606
607
  if (isAsserts !== predicateIsAsserts)
607
608
  return false;
608
- const isThis = node.parameterName.kind === 198 /* SyntaxKind.ThisType */;
609
+ const isThis = node.parameterName.kind === 199 /* SyntaxKind.ThisType */;
609
610
  const predicateIsThis = predicate.kind === 0 /* TypePredicateKind.This */ || predicate.kind === 2 /* TypePredicateKind.AssertsThis */;
610
611
  if (isThis !== predicateIsThis)
611
612
  return false;
@@ -622,9 +623,6 @@ export function pseudoReturnTypeMatchesPredicate(b, rt, predicate) {
622
623
  return false;
623
624
  return true;
624
625
  }
625
- function getTypeOfExpressionForPseudo(c, node) {
626
- return checkExpressionCached(c, node);
627
- }
628
626
  /** The type a pseudo-type denotes, for the kinds that map to one directly. */
629
627
  export function pseudoTypeToType(b, t) {
630
628
  const c = b.c;
@@ -695,9 +693,9 @@ export function requiresAddingImplicitUndefinedForDeclaration(c, declaration, sy
695
693
  if ((declaration.flags & 16 /* NodeFlags.Synthesized */) !== 0)
696
694
  return false;
697
695
  switch (declaration.kind) {
698
- case 173 /* SyntaxKind.PropertyDeclaration */:
699
- case 172 /* SyntaxKind.PropertySignature */:
700
- case 340 /* SyntaxKind.JSDocPropertyTag */: {
696
+ case 174 /* SyntaxKind.PropertyDeclaration */:
697
+ case 173 /* SyntaxKind.PropertySignature */:
698
+ case 341 /* SyntaxKind.JSDocPropertyTag */: {
701
699
  const symbol = symbolIn ?? getSymbolOfDeclaration(c, declaration);
702
700
  if (symbol === undefined)
703
701
  return false;
@@ -705,11 +703,11 @@ export function requiresAddingImplicitUndefinedForDeclaration(c, declaration, sy
705
703
  return ((symbol.flags & 4 /* SymbolFlags.Property */) !== 0 &&
706
704
  (symbol.flags & 16777216 /* SymbolFlags.Optional */) !== 0 &&
707
705
  hasQuestionToken(declaration) &&
708
- (symbol.checkFlags & 8192 /* CheckFlags.ReverseMapped */) !== 0 &&
706
+ (symbol.checkFlags & 65536 /* CheckFlags.ReverseMapped */) !== 0 &&
709
707
  c.symbolLinks(symbol).reverseMappedMappedType !== undefined &&
710
708
  containsNonMissingUndefinedType(c, t));
711
709
  }
712
- case 170 /* SyntaxKind.Parameter */:
710
+ case 171 /* SyntaxKind.Parameter */:
713
711
  return requiresAddingImplicitUndefined(c, declaration, enclosingDeclaration);
714
712
  }
715
713
  return false;
@@ -717,26 +715,26 @@ export function requiresAddingImplicitUndefinedForDeclaration(c, declaration, sy
717
715
  /** Declarations whose type the builder writes from the declaration, as tsgo's `HasInferredType`. */
718
716
  export function hasInferredTypeKind(node) {
719
717
  switch (node.kind) {
720
- case 170 /* SyntaxKind.Parameter */:
721
- case 172 /* SyntaxKind.PropertySignature */:
722
- case 173 /* SyntaxKind.PropertyDeclaration */:
723
- case 209 /* SyntaxKind.BindingElement */:
724
- case 212 /* SyntaxKind.PropertyAccessExpression */:
725
- case 213 /* SyntaxKind.ElementAccessExpression */:
726
- case 227 /* SyntaxKind.BinaryExpression */:
727
- case 214 /* SyntaxKind.CallExpression */:
728
- case 261 /* SyntaxKind.VariableDeclaration */:
729
- case 278 /* SyntaxKind.ExportAssignment */:
730
- case 303 /* SyntaxKind.PropertyAssignment */:
731
- case 304 /* SyntaxKind.ShorthandPropertyAssignment */:
732
- case 333 /* SyntaxKind.JSDocParameterTag */:
733
- case 340 /* SyntaxKind.JSDocPropertyTag */:
718
+ case 171 /* SyntaxKind.Parameter */:
719
+ case 173 /* SyntaxKind.PropertySignature */:
720
+ case 174 /* SyntaxKind.PropertyDeclaration */:
721
+ case 210 /* SyntaxKind.BindingElement */:
722
+ case 213 /* SyntaxKind.PropertyAccessExpression */:
723
+ case 214 /* SyntaxKind.ElementAccessExpression */:
724
+ case 228 /* SyntaxKind.BinaryExpression */:
725
+ case 215 /* SyntaxKind.CallExpression */:
726
+ case 262 /* SyntaxKind.VariableDeclaration */:
727
+ case 279 /* SyntaxKind.ExportAssignment */:
728
+ case 304 /* SyntaxKind.PropertyAssignment */:
729
+ case 305 /* SyntaxKind.ShorthandPropertyAssignment */:
730
+ case 334 /* SyntaxKind.JSDocParameterTag */:
731
+ case 341 /* SyntaxKind.JSDocPropertyTag */:
734
732
  return true;
735
733
  }
736
734
  return false;
737
735
  }
738
736
  export function isAccessorKind(node) {
739
- return node.kind === 178 /* SyntaxKind.GetAccessor */ || node.kind === 179 /* SyntaxKind.SetAccessor */;
737
+ return node.kind === 179 /* SyntaxKind.GetAccessor */ || node.kind === 180 /* SyntaxKind.SetAccessor */;
740
738
  }
741
739
  /** Whether a declaration is marked optional with `?`, as tsgo's `HasQuestionToken`. */
742
740
  export function hasQuestionToken(node) {
@@ -16,6 +16,7 @@ import { BuilderTracker, TrackedSymbol, canReuseExistingJSTypeNode } from './nod
16
16
  import { getSpecifierForModuleSymbol, lookupSymbolChain, symbolToTypeNode } from './node-builder-names.js';
17
17
  import { getExternalModuleFileFromDeclaration } from './checker-modules.js';
18
18
  import { getResolutionModeOverride } from './program-utilities.js';
19
+ import { getMappedType } from './checker-types.js';
19
20
  /** Errors and names tracked while reusing a node, replayed only if the reuse succeeds. */
20
21
  class RecoveryBoundary {
21
22
  hadError = false;
@@ -162,7 +163,7 @@ class ExistingNodeReuser extends VisitorBase {
162
163
  if (result !== undefined)
163
164
  result = b.setTextRange(result, node);
164
165
  if (bound.hadError) {
165
- if (isTypeNode(node) && node.kind !== 183 /* SyntaxKind.TypePredicate */) {
166
+ if (isTypeNode(node) && node.kind !== 184 /* SyntaxKind.TypePredicate */) {
166
167
  bound.hadError = hadError;
167
168
  b.trackedSymbols.length = trackedTop;
168
169
  bound.deferredReports.length = reportsTop;
@@ -178,7 +179,7 @@ class ExistingNodeReuser extends VisitorBase {
178
179
  const b = this.b;
179
180
  if (node instanceof JSDocTypeExpression)
180
181
  return this.visitNode(node.type);
181
- if (node.kind === 310 /* SyntaxKind.JSDocAllType */)
182
+ if (node.kind === 311 /* SyntaxKind.JSDocAllType */)
182
183
  return b.keyword(132 /* SyntaxKind.AnyKeyword */);
183
184
  if (node instanceof JSDocNullableType)
184
185
  return b.created(new UnionTypeNode(b.list([
@@ -196,12 +197,12 @@ class ExistingNodeReuser extends VisitorBase {
196
197
  for (const t of node.jsdocPropertyTags ?? []) {
197
198
  if (!(t instanceof JSDocParameterOrPropertyTag))
198
199
  continue;
199
- if (t.kind !== 340 /* SyntaxKind.JSDocPropertyTag */ && t.kind !== 333 /* SyntaxKind.JSDocParameterTag */)
200
+ if (t.kind !== 341 /* SyntaxKind.JSDocPropertyTag */ && t.kind !== 334 /* SyntaxKind.JSDocParameterTag */)
200
201
  continue;
201
202
  const n = t.name;
202
203
  const targetName = n instanceof QualifiedName ? n.right : n;
203
204
  const name = this.visitNode(targetName);
204
- const optional = t.isBracketed || (t.typeExpression !== undefined && t.typeExpression.kind === 313 /* SyntaxKind.JSDocOptionalType */);
205
+ const optional = t.isBracketed || (t.typeExpression !== undefined && t.typeExpression.kind === 314 /* SyntaxKind.JSDocOptionalType */);
205
206
  const type = t.typeExpression === undefined ? undefined : this.visitNode(t.typeExpression);
206
207
  members.push(b.created(new PropertySignatureDeclaration(undefined, name, optional ? b.token(57 /* SyntaxKind.QuestionToken */) : undefined, type, undefined)));
207
208
  }
@@ -273,7 +274,7 @@ class ExistingNodeReuser extends VisitorBase {
273
274
  if ((sym.flags & 1 /* SymbolFlags.FunctionScopedVariable */) !== 0 &&
274
275
  sym.valueDeclaration !== undefined &&
275
276
  (isPartOfParameterDeclaration(sym.valueDeclaration) ||
276
- sym.valueDeclaration.kind === 333 /* SyntaxKind.JSDocParameterTag */))
277
+ sym.valueDeclaration.kind === 334 /* SyntaxKind.JSDocParameterTag */))
277
278
  return new TrackedName(false, this.attachSymbolToLeftmostIdentifier(leftmost, node, sym));
278
279
  let introducesError = false;
279
280
  if ((sym.flags & 262144 /* SymbolFlags.TypeParameter */) === 0 &&
@@ -331,7 +332,7 @@ class ExistingNodeReuser extends VisitorBase {
331
332
  if ((symbol.flags & 262144 /* SymbolFlags.TypeParameter */) !== 0) {
332
333
  const declaredType = getDeclaredTypeOfSymbol(b.c, symbol);
333
334
  // A type parameter remapped by the scope.
334
- if (b.mapper !== undefined && b.mapper.map(declaredType) !== declaredType)
335
+ if (b.mapper !== undefined && getMappedType(declaredType, b.mapper) !== declaredType)
335
336
  return undefined;
336
337
  }
337
338
  if (!canReuseExistingJSTypeNode(b, node, b.getTypeFromTypeNode(node, false)))
@@ -368,7 +369,7 @@ class ExistingNodeReuser extends VisitorBase {
368
369
  return replacement;
369
370
  }
370
371
  // `this` types are copied as they are.
371
- if (node.kind === 198 /* SyntaxKind.ThisType */)
372
+ if (node.kind === 199 /* SyntaxKind.ThisType */)
372
373
  return node;
373
374
  if (node instanceof TypeParameterDeclaration) {
374
375
  const name = this.trackExistingEntityName(node.name);
@@ -438,15 +439,15 @@ class ExistingNodeReuser extends VisitorBase {
438
439
  return factory.updateImportTypeNode(node, node.isTypeOf, argument, node.attributes === undefined ? undefined : asImportAttributes(this.visitNode(node.attributes)), this.visitNode(node.qualifier), this.visitNodes(node.typeArguments));
439
440
  }
440
441
  const name = getName(node);
441
- if (name !== undefined && name.kind === 168 /* SyntaxKind.ComputedPropertyName */ && !hasLateBindableName(b.c, node)) {
442
+ if (name !== undefined && name.kind === 169 /* SyntaxKind.ComputedPropertyName */ && !hasLateBindableName(b.c, node)) {
442
443
  if (!hasDynamicName(node))
443
444
  return this.visitEachChild(node);
444
445
  return undefined;
445
446
  }
446
447
  if ((isFunctionLike(node) && getType(node) === undefined) ||
447
- ((node.kind === 173 /* SyntaxKind.PropertyDeclaration */ ||
448
- node.kind === 172 /* SyntaxKind.PropertySignature */ ||
449
- node.kind === 170 /* SyntaxKind.Parameter */) &&
448
+ ((node.kind === 174 /* SyntaxKind.PropertyDeclaration */ ||
449
+ node.kind === 173 /* SyntaxKind.PropertySignature */ ||
450
+ node.kind === 171 /* SyntaxKind.Parameter */) &&
450
451
  getType(node) === undefined &&
451
452
  getInitializer(node) === undefined)) {
452
453
  // Untyped declarations get `any`.
@@ -485,9 +486,9 @@ class ExistingNodeReuser extends VisitorBase {
485
486
  return factory.updateConditionalTypeNode(node, checkType, extendsType, trueType, falseType);
486
487
  }
487
488
  // Tuples, type literals and mapped types are written on one line.
488
- if (node.kind === 190 /* SyntaxKind.TupleType */ ||
489
- ((b.flags & 1024 /* NodeBuilderFlags.MultilineObjectLiterals */) === 0 && node.kind === 188 /* SyntaxKind.TypeLiteral */) ||
490
- node.kind === 201 /* SyntaxKind.MappedType */) {
489
+ if (node.kind === 191 /* SyntaxKind.TupleType */ ||
490
+ ((b.flags & 1024 /* NodeBuilderFlags.MultilineObjectLiterals */) === 0 && node.kind === 189 /* SyntaxKind.TypeLiteral */) ||
491
+ node.kind === 202 /* SyntaxKind.MappedType */) {
491
492
  let result = this.visitEachChild(node);
492
493
  if (result === node)
493
494
  result = b.setTextRange(node.deepClone(), node);
@@ -593,11 +594,11 @@ function getModuleSpecifierOverride(b, parent, literal) {
593
594
  ? lookupSymbolChain(b, nodeSymbol, meaning, true)[0]
594
595
  : undefined;
595
596
  if (parentSymbol !== undefined && isExternalModuleSymbol(parentSymbol))
596
- name = getSpecifierForModuleSymbol(b, parentSymbol, mode);
597
+ name = getSpecifierForModuleSymbol(b, parentSymbol, mode).specifier;
597
598
  else {
598
599
  const targetFile = getExternalModuleFileFromDeclaration(c, parent);
599
600
  if (targetFile !== undefined && targetFile.symbol !== undefined)
600
- name = getSpecifierForModuleSymbol(b, targetFile.symbol, mode);
601
+ name = getSpecifierForModuleSymbol(b, targetFile.symbol, mode).specifier;
601
602
  }
602
603
  if (name.includes('/node_modules/')) {
603
604
  b.encounteredError = true;
@@ -606,7 +607,7 @@ function getModuleSpecifierOverride(b, parent, literal) {
606
607
  return name !== originalName ? name : '';
607
608
  }
608
609
  function isExternalModuleSymbol(symbol) {
609
- return (symbol.flags & 1536 /* SymbolFlags.Module */) !== 0 && symbol.name.startsWith('"');
610
+ return symbol.isExternalModule();
610
611
  }
611
612
  function isLiteralImportType(node) {
612
613
  return node.argument instanceof LiteralTypeNode && node.argument.literal.kind === 10 /* SyntaxKind.StringLiteral */;
@@ -614,7 +615,7 @@ function isLiteralImportType(node) {
614
615
  function isEntityNameExpressionNode(node) {
615
616
  if (node.kind === 79 /* SyntaxKind.Identifier */)
616
617
  return true;
617
- if (node.kind === 212 /* SyntaxKind.PropertyAccessExpression */) {
618
+ if (node.kind === 213 /* SyntaxKind.PropertyAccessExpression */) {
618
619
  const name = getName(node);
619
620
  return (name !== undefined &&
620
621
  name.kind === 79 /* SyntaxKind.Identifier */ &&
@@ -625,12 +626,12 @@ function isEntityNameExpressionNode(node) {
625
626
  function isDeclarationName(node) {
626
627
  const parent = node.parent;
627
628
  return (parent !== undefined &&
628
- node.kind !== 307 /* SyntaxKind.SourceFile */ &&
629
+ node.kind !== 308 /* SyntaxKind.SourceFile */ &&
629
630
  getName(parent) === node &&
630
- parent.kind !== 184 /* SyntaxKind.TypeReference */);
631
+ parent.kind !== 185 /* SyntaxKind.TypeReference */);
631
632
  }
632
633
  function isTypeNode(node) {
633
- return ((node.kind >= 183 /* SyntaxKind.FirstTypeNode */ && node.kind <= 206 /* SyntaxKind.LastTypeNode */) ||
634
+ return ((node.kind >= 184 /* SyntaxKind.FirstTypeNode */ && node.kind <= 207 /* SyntaxKind.LastTypeNode */) ||
634
635
  node.kind === 132 /* SyntaxKind.AnyKeyword */ ||
635
636
  node.kind === 159 /* SyntaxKind.UnknownKeyword */ ||
636
637
  node.kind === 150 /* SyntaxKind.NumberKeyword */ ||
@@ -643,5 +644,5 @@ function isTypeNode(node) {
643
644
  node.kind === 157 /* SyntaxKind.UndefinedKeyword */ ||
644
645
  node.kind === 146 /* SyntaxKind.NeverKeyword */ ||
645
646
  node.kind === 141 /* SyntaxKind.IntrinsicKeyword */ ||
646
- node.kind === 234 /* SyntaxKind.ExpressionWithTypeArguments */);
647
+ node.kind === 235 /* SyntaxKind.ExpressionWithTypeArguments */);
647
648
  }
@@ -14,6 +14,15 @@ export declare class TrackedSymbol {
14
14
  readonly meaning: SymbolFlags;
15
15
  constructor(symbol: Symbol, enclosingDeclaration: Node | undefined, meaning: SymbolFlags);
16
16
  }
17
+ /**
18
+ * The caches of tsgo's node builder that outlive one request: an emit resolver keeps one node builder, so the types
19
+ * serialized for one declaration are reused, as copies without positions, by the next ones in the file.
20
+ */
21
+ export declare class NodeBuilderCaches {
22
+ readonly serializedTypes: Map<number, Map<string, SerializedTypeEntry>>;
23
+ readonly fakeScopes: Map<Node, string>;
24
+ constructor();
25
+ }
17
26
  declare class SerializedTypeEntry {
18
27
  readonly node: Node;
19
28
  readonly truncating: boolean;
@@ -100,6 +109,8 @@ export declare class NodeBuilder {
100
109
  pseudo: PseudoChecker | undefined;
101
110
  /** Set for declaration emit, which writes unions in an order that doesn't depend on the checker's history. */
102
111
  declarationOrder: boolean;
112
+ /** When set, the symbol each identifier naming a symbol refers to. */
113
+ idToSymbol: Map<Node, Symbol> | undefined;
103
114
  constructor(c: Checker, enclosingDeclaration: Node | undefined, flags: NodeBuilderFlags, internalFlags: NodeBuilderInternalFlags, tracker: SymbolTracker | undefined, context?: EmitContext | undefined);
104
115
  get reportedDiagnostic(): boolean;
105
116
  set reportedDiagnostic(value: boolean);
@@ -116,6 +127,8 @@ export declare class NodeBuilder {
116
127
  get serializedTypes(): Map<number, Map<string, SerializedTypeEntry>>;
117
128
  /** The kind of fake scope a block stands for: `params` or `typeParams`. */
118
129
  get fakeScopes(): Map<Node, string>;
130
+ /** Uses `caches` for the types this builder serializes and its fake scopes, sharing them with other builders. */
131
+ useCaches(caches: NodeBuilderCaches): void;
119
132
  /** `result`, or undefined if serialization failed. */
120
133
  finish<T>(result: T | undefined): T | undefined;
121
134
  /** Reports a symbol the builder names; without a location it's only recorded. */
@@ -127,6 +140,8 @@ export declare class NodeBuilder {
127
140
  keyword(kind: SyntaxKind): Node;
128
141
  token(kind: SyntaxKind): Token;
129
142
  identifier(text: string): Identifier;
143
+ /** An identifier naming `symbol`, recorded in `idToSymbol`. */
144
+ symbolIdentifier(text: string, symbol: Symbol): Identifier;
130
145
  stringLiteral(text: string, isSingleQuote: boolean): StringLiteral;
131
146
  typeReference(name: Node, typeArguments: NodeList | undefined): Node;
132
147
  /** `...`, or `any /*elided*\/` without truncation. */
@@ -157,6 +172,8 @@ export declare class NodeBuilder {
157
172
  /** Writes `t` with `transform`, eliding its circular references; cached per enclosing declaration. */
158
173
  visitAndTransformType(t: Type, transform: TransformKind): Node | undefined;
159
174
  private typeToTypeNodeOrCircularityElision;
175
+ /** The placeholder for a circular reference; outside of display, it is an error. */
176
+ private createCyclicStructurePlaceholder;
160
177
  private conditionalTypeToTypeNode;
161
178
  private getParentSymbolOfTypeParameter;
162
179
  private typeReferenceToTypeNode;
@@ -249,7 +266,7 @@ export declare function getTupleElementLabel(c: Checker, flags: ElementFlags, la
249
266
  * The type node TypeScript would write for `type`. As in tsgo, the builder has a pseudochecker, so types
250
267
  * of declarations are written from what the source wrote where that denotes the type.
251
268
  */
252
- export declare function typeToTypeNode(c: Checker, type: Type, enclosingDeclaration: Node | undefined, flags: number, internalFlags?: NodeBuilderInternalFlags, tracker?: SymbolTracker | undefined): Node | undefined;
269
+ export declare function typeToTypeNode(c: Checker, type: Type, enclosingDeclaration: Node | undefined, flags: number, internalFlags?: NodeBuilderInternalFlags, tracker?: SymbolTracker | undefined, idToSymbol?: Map<Node, Symbol> | undefined): Node | undefined;
253
270
  /** The declaration of kind `kind` TypeScript would write for `signature`, with a pseudochecker as `typeToTypeNode`. */
254
271
  export declare function signatureToSignatureDeclaration(c: Checker, signature: Signature, kind: SyntaxKind, enclosingDeclaration: Node | undefined, flags: number, internalFlags?: NodeBuilderInternalFlags, tracker?: SymbolTracker | undefined): Node | undefined;
255
272
  /**