typescript 6.0.3 → 7.0.2

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 (550) hide show
  1. package/{ThirdPartyNoticeText.txt → NOTICE.txt} +249 -6
  2. package/README.md +49 -50
  3. package/bin/tsc +1 -1
  4. package/dist/api/async/api.d.ts +529 -0
  5. package/dist/api/async/api.d.ts.map +1 -0
  6. package/dist/api/async/api.js +1657 -0
  7. package/dist/api/async/api.js.map +1 -0
  8. package/dist/api/async/client.d.ts +39 -0
  9. package/dist/api/async/client.d.ts.map +1 -0
  10. package/dist/api/async/client.js +211 -0
  11. package/dist/api/async/client.js.map +1 -0
  12. package/dist/api/async/types.d.ts +310 -0
  13. package/dist/api/async/types.d.ts.map +1 -0
  14. package/dist/api/async/types.js +2 -0
  15. package/dist/api/async/types.js.map +1 -0
  16. package/dist/api/compilerOptions.d.ts +109 -0
  17. package/dist/api/compilerOptions.d.ts.map +1 -0
  18. package/dist/api/compilerOptions.js +2 -0
  19. package/dist/api/compilerOptions.js.map +1 -0
  20. package/dist/api/fs.d.ts +23 -0
  21. package/dist/api/fs.d.ts.map +1 -0
  22. package/dist/api/fs.js +109 -0
  23. package/dist/api/fs.js.map +1 -0
  24. package/dist/api/node/encoder.d.ts +15 -0
  25. package/dist/api/node/encoder.d.ts.map +1 -0
  26. package/dist/api/node/encoder.generated.d.ts +5 -0
  27. package/dist/api/node/encoder.generated.d.ts.map +1 -0
  28. package/dist/api/node/encoder.generated.js +74 -0
  29. package/dist/api/node/encoder.generated.js.map +1 -0
  30. package/dist/api/node/encoder.js +287 -0
  31. package/dist/api/node/encoder.js.map +1 -0
  32. package/dist/api/node/msgpack.d.ts +32 -0
  33. package/dist/api/node/msgpack.d.ts.map +1 -0
  34. package/dist/api/node/msgpack.js +213 -0
  35. package/dist/api/node/msgpack.js.map +1 -0
  36. package/dist/api/node/node.d.ts +76 -0
  37. package/dist/api/node/node.d.ts.map +1 -0
  38. package/dist/api/node/node.generated.d.ts +182 -0
  39. package/dist/api/node/node.generated.d.ts.map +1 -0
  40. package/dist/api/node/node.generated.js +835 -0
  41. package/dist/api/node/node.generated.js.map +1 -0
  42. package/dist/api/node/node.infrastructure.d.ts +62 -0
  43. package/dist/api/node/node.infrastructure.d.ts.map +1 -0
  44. package/dist/api/node/node.infrastructure.js +122 -0
  45. package/dist/api/node/node.infrastructure.js.map +1 -0
  46. package/dist/api/node/node.js +298 -0
  47. package/dist/api/node/node.js.map +1 -0
  48. package/dist/api/node/protocol.d.ts +29 -0
  49. package/dist/api/node/protocol.d.ts.map +1 -0
  50. package/dist/api/node/protocol.generated.d.ts +4 -0
  51. package/dist/api/node/protocol.generated.d.ts.map +1 -0
  52. package/dist/api/node/protocol.generated.js +241 -0
  53. package/dist/api/node/protocol.generated.js.map +1 -0
  54. package/dist/api/node/protocol.js +30 -0
  55. package/dist/api/node/protocol.js.map +1 -0
  56. package/dist/api/node/wtf8.d.ts +6 -0
  57. package/dist/api/node/wtf8.d.ts.map +1 -0
  58. package/dist/api/node/wtf8.js +61 -0
  59. package/dist/api/node/wtf8.js.map +1 -0
  60. package/dist/api/options.d.ts +32 -0
  61. package/dist/api/options.d.ts.map +1 -0
  62. package/dist/api/options.js +11 -0
  63. package/dist/api/options.js.map +1 -0
  64. package/dist/api/path.d.ts +110 -0
  65. package/dist/api/path.d.ts.map +1 -0
  66. package/dist/api/path.js +508 -0
  67. package/dist/api/path.js.map +1 -0
  68. package/dist/api/proto.d.ts +239 -0
  69. package/dist/api/proto.d.ts.map +1 -0
  70. package/dist/api/proto.js +37 -0
  71. package/dist/api/proto.js.map +1 -0
  72. package/dist/api/sourceFileCache.d.ts +79 -0
  73. package/dist/api/sourceFileCache.d.ts.map +1 -0
  74. package/dist/api/sourceFileCache.js +169 -0
  75. package/dist/api/sourceFileCache.js.map +1 -0
  76. package/dist/api/sync/api.d.ts +529 -0
  77. package/dist/api/sync/api.d.ts.map +1 -0
  78. package/dist/api/sync/api.js +1665 -0
  79. package/dist/api/sync/api.js.map +1 -0
  80. package/dist/api/sync/client.d.ts +30 -0
  81. package/dist/api/sync/client.d.ts.map +1 -0
  82. package/dist/api/sync/client.js +124 -0
  83. package/dist/api/sync/client.js.map +1 -0
  84. package/dist/api/sync/types.d.ts +310 -0
  85. package/dist/api/sync/types.d.ts.map +1 -0
  86. package/dist/api/sync/types.js +2 -0
  87. package/dist/api/sync/types.js.map +1 -0
  88. package/dist/api/syncChannel.d.ts +114 -0
  89. package/dist/api/syncChannel.d.ts.map +1 -0
  90. package/dist/api/syncChannel.js +508 -0
  91. package/dist/api/syncChannel.js.map +1 -0
  92. package/dist/api/timing.d.ts +175 -0
  93. package/dist/api/timing.d.ts.map +1 -0
  94. package/dist/api/timing.js +149 -0
  95. package/dist/api/timing.js.map +1 -0
  96. package/dist/ast/ast.d.ts +100 -0
  97. package/dist/ast/ast.d.ts.map +1 -0
  98. package/dist/ast/ast.generated.d.ts +1161 -0
  99. package/dist/ast/ast.generated.d.ts.map +1 -0
  100. package/dist/ast/ast.generated.js +4 -0
  101. package/dist/ast/ast.generated.js.map +1 -0
  102. package/dist/ast/ast.js +7 -0
  103. package/dist/ast/ast.js.map +1 -0
  104. package/dist/ast/astnav.d.ts +19 -0
  105. package/dist/ast/astnav.d.ts.map +1 -0
  106. package/dist/ast/astnav.js +596 -0
  107. package/dist/ast/astnav.js.map +1 -0
  108. package/dist/ast/clone.d.ts +16 -0
  109. package/dist/ast/clone.d.ts.map +1 -0
  110. package/dist/ast/clone.js +104 -0
  111. package/dist/ast/clone.js.map +1 -0
  112. package/dist/ast/factory.generated.d.ts +520 -0
  113. package/dist/ast/factory.generated.d.ts.map +1 -0
  114. package/dist/ast/factory.generated.js +3057 -0
  115. package/dist/ast/factory.generated.js.map +1 -0
  116. package/dist/ast/index.d.ts +20 -0
  117. package/dist/ast/index.d.ts.map +1 -0
  118. package/dist/ast/index.js +20 -0
  119. package/dist/ast/index.js.map +1 -0
  120. package/dist/ast/is.d.ts +35 -0
  121. package/dist/ast/is.d.ts.map +1 -0
  122. package/dist/ast/is.generated.d.ts +329 -0
  123. package/dist/ast/is.generated.d.ts.map +1 -0
  124. package/dist/ast/is.generated.js +1103 -0
  125. package/dist/ast/is.generated.js.map +1 -0
  126. package/dist/ast/is.js +233 -0
  127. package/dist/ast/is.js.map +1 -0
  128. package/dist/ast/jsdoc.d.ts +11 -0
  129. package/dist/ast/jsdoc.d.ts.map +1 -0
  130. package/dist/ast/jsdoc.js +202 -0
  131. package/dist/ast/jsdoc.js.map +1 -0
  132. package/dist/ast/scanner.d.ts +97 -0
  133. package/dist/ast/scanner.d.ts.map +1 -0
  134. package/dist/ast/scanner.js +2230 -0
  135. package/dist/ast/scanner.js.map +1 -0
  136. package/dist/ast/utils.d.ts +17 -0
  137. package/dist/ast/utils.d.ts.map +1 -0
  138. package/dist/ast/utils.js +67 -0
  139. package/dist/ast/utils.js.map +1 -0
  140. package/dist/ast/visitor.d.ts +14 -0
  141. package/dist/ast/visitor.d.ts.map +1 -0
  142. package/dist/ast/visitor.generated.d.ts +50 -0
  143. package/dist/ast/visitor.generated.d.ts.map +1 -0
  144. package/dist/ast/visitor.generated.js +978 -0
  145. package/dist/ast/visitor.generated.js.map +1 -0
  146. package/dist/ast/visitor.js +47 -0
  147. package/dist/ast/visitor.js.map +1 -0
  148. package/dist/enums/characterCodes.d.ts +2 -0
  149. package/dist/enums/characterCodes.d.ts.map +1 -0
  150. package/dist/enums/characterCodes.enum.d.ts +129 -0
  151. package/dist/enums/characterCodes.enum.d.ts.map +1 -0
  152. package/dist/enums/characterCodes.enum.js +132 -0
  153. package/dist/enums/characterCodes.enum.js.map +1 -0
  154. package/dist/enums/characterCodes.js +130 -0
  155. package/dist/enums/characterCodes.js.map +1 -0
  156. package/dist/enums/commentDirectiveType.d.ts +2 -0
  157. package/dist/enums/commentDirectiveType.d.ts.map +1 -0
  158. package/dist/enums/commentDirectiveType.enum.d.ts +5 -0
  159. package/dist/enums/commentDirectiveType.enum.d.ts.map +1 -0
  160. package/dist/enums/commentDirectiveType.enum.js +6 -0
  161. package/dist/enums/commentDirectiveType.enum.js.map +1 -0
  162. package/dist/enums/commentDirectiveType.js +6 -0
  163. package/dist/enums/commentDirectiveType.js.map +1 -0
  164. package/dist/enums/completionItemKind.d.ts +2 -0
  165. package/dist/enums/completionItemKind.d.ts.map +1 -0
  166. package/dist/enums/completionItemKind.enum.d.ts +28 -0
  167. package/dist/enums/completionItemKind.enum.d.ts.map +1 -0
  168. package/dist/enums/completionItemKind.enum.js +30 -0
  169. package/dist/enums/completionItemKind.enum.js.map +1 -0
  170. package/dist/enums/completionItemKind.js +30 -0
  171. package/dist/enums/completionItemKind.js.map +1 -0
  172. package/dist/enums/diagnosticCategory.d.ts +2 -0
  173. package/dist/enums/diagnosticCategory.d.ts.map +1 -0
  174. package/dist/enums/diagnosticCategory.enum.d.ts +7 -0
  175. package/dist/enums/diagnosticCategory.enum.d.ts.map +1 -0
  176. package/dist/enums/diagnosticCategory.enum.js +9 -0
  177. package/dist/enums/diagnosticCategory.enum.js.map +1 -0
  178. package/dist/enums/diagnosticCategory.js +9 -0
  179. package/dist/enums/diagnosticCategory.js.map +1 -0
  180. package/dist/enums/elementFlags.d.ts +2 -0
  181. package/dist/enums/elementFlags.d.ts.map +1 -0
  182. package/dist/enums/elementFlags.enum.d.ts +12 -0
  183. package/dist/enums/elementFlags.enum.d.ts.map +1 -0
  184. package/dist/enums/elementFlags.enum.js +14 -0
  185. package/dist/enums/elementFlags.enum.js.map +1 -0
  186. package/dist/enums/elementFlags.js +14 -0
  187. package/dist/enums/elementFlags.js.map +1 -0
  188. package/dist/enums/internalSymbolName.d.ts +2 -0
  189. package/dist/enums/internalSymbolName.d.ts.map +1 -0
  190. package/dist/enums/internalSymbolName.enum.d.ts +23 -0
  191. package/dist/enums/internalSymbolName.enum.d.ts.map +1 -0
  192. package/dist/enums/internalSymbolName.enum.js +25 -0
  193. package/dist/enums/internalSymbolName.enum.js.map +1 -0
  194. package/dist/enums/internalSymbolName.js +25 -0
  195. package/dist/enums/internalSymbolName.js.map +1 -0
  196. package/dist/enums/jsxEmit.d.ts +2 -0
  197. package/dist/enums/jsxEmit.d.ts.map +1 -0
  198. package/dist/enums/jsxEmit.enum.d.ts +9 -0
  199. package/dist/enums/jsxEmit.enum.d.ts.map +1 -0
  200. package/dist/enums/jsxEmit.enum.js +11 -0
  201. package/dist/enums/jsxEmit.enum.js.map +1 -0
  202. package/dist/enums/jsxEmit.js +11 -0
  203. package/dist/enums/jsxEmit.js.map +1 -0
  204. package/dist/enums/languageVariant.d.ts +2 -0
  205. package/dist/enums/languageVariant.d.ts.map +1 -0
  206. package/dist/enums/languageVariant.enum.d.ts +5 -0
  207. package/dist/enums/languageVariant.enum.d.ts.map +1 -0
  208. package/dist/enums/languageVariant.enum.js +6 -0
  209. package/dist/enums/languageVariant.enum.js.map +1 -0
  210. package/dist/enums/languageVariant.js +6 -0
  211. package/dist/enums/languageVariant.js.map +1 -0
  212. package/dist/enums/modifierFlags.d.ts +2 -0
  213. package/dist/enums/modifierFlags.d.ts.map +1 -0
  214. package/dist/enums/modifierFlags.enum.d.ts +42 -0
  215. package/dist/enums/modifierFlags.enum.d.ts.map +1 -0
  216. package/dist/enums/modifierFlags.enum.js +44 -0
  217. package/dist/enums/modifierFlags.enum.js.map +1 -0
  218. package/dist/enums/modifierFlags.js +44 -0
  219. package/dist/enums/modifierFlags.js.map +1 -0
  220. package/dist/enums/moduleDetectionKind.d.ts +2 -0
  221. package/dist/enums/moduleDetectionKind.d.ts.map +1 -0
  222. package/dist/enums/moduleDetectionKind.enum.d.ts +7 -0
  223. package/dist/enums/moduleDetectionKind.enum.d.ts.map +1 -0
  224. package/dist/enums/moduleDetectionKind.enum.js +9 -0
  225. package/dist/enums/moduleDetectionKind.enum.js.map +1 -0
  226. package/dist/enums/moduleDetectionKind.js +9 -0
  227. package/dist/enums/moduleDetectionKind.js.map +1 -0
  228. package/dist/enums/moduleKind.d.ts +2 -0
  229. package/dist/enums/moduleKind.d.ts.map +1 -0
  230. package/dist/enums/moduleKind.enum.d.ts +17 -0
  231. package/dist/enums/moduleKind.enum.d.ts.map +1 -0
  232. package/dist/enums/moduleKind.enum.js +19 -0
  233. package/dist/enums/moduleKind.enum.js.map +1 -0
  234. package/dist/enums/moduleKind.js +19 -0
  235. package/dist/enums/moduleKind.js.map +1 -0
  236. package/dist/enums/moduleResolutionKind.d.ts +2 -0
  237. package/dist/enums/moduleResolutionKind.d.ts.map +1 -0
  238. package/dist/enums/moduleResolutionKind.enum.d.ts +9 -0
  239. package/dist/enums/moduleResolutionKind.enum.d.ts.map +1 -0
  240. package/dist/enums/moduleResolutionKind.enum.js +11 -0
  241. package/dist/enums/moduleResolutionKind.enum.js.map +1 -0
  242. package/dist/enums/moduleResolutionKind.js +11 -0
  243. package/dist/enums/moduleResolutionKind.js.map +1 -0
  244. package/dist/enums/newLineKind.d.ts +2 -0
  245. package/dist/enums/newLineKind.d.ts.map +1 -0
  246. package/dist/enums/newLineKind.enum.d.ts +6 -0
  247. package/dist/enums/newLineKind.enum.d.ts.map +1 -0
  248. package/dist/enums/newLineKind.enum.js +8 -0
  249. package/dist/enums/newLineKind.enum.js.map +1 -0
  250. package/dist/enums/newLineKind.js +8 -0
  251. package/dist/enums/newLineKind.js.map +1 -0
  252. package/dist/enums/nodeBuilderFlags.d.ts +2 -0
  253. package/dist/enums/nodeBuilderFlags.d.ts.map +1 -0
  254. package/dist/enums/nodeBuilderFlags.enum.d.ts +36 -0
  255. package/dist/enums/nodeBuilderFlags.enum.d.ts.map +1 -0
  256. package/dist/enums/nodeBuilderFlags.enum.js +38 -0
  257. package/dist/enums/nodeBuilderFlags.enum.js.map +1 -0
  258. package/dist/enums/nodeBuilderFlags.js +38 -0
  259. package/dist/enums/nodeBuilderFlags.js.map +1 -0
  260. package/dist/enums/nodeFlags.d.ts +2 -0
  261. package/dist/enums/nodeFlags.d.ts.map +1 -0
  262. package/dist/enums/nodeFlags.enum.d.ts +44 -0
  263. package/dist/enums/nodeFlags.enum.d.ts.map +1 -0
  264. package/dist/enums/nodeFlags.enum.js +46 -0
  265. package/dist/enums/nodeFlags.enum.js.map +1 -0
  266. package/dist/enums/nodeFlags.js +46 -0
  267. package/dist/enums/nodeFlags.js.map +1 -0
  268. package/dist/enums/objectFlags.d.ts +2 -0
  269. package/dist/enums/objectFlags.d.ts.map +1 -0
  270. package/dist/enums/objectFlags.enum.d.ts +50 -0
  271. package/dist/enums/objectFlags.enum.d.ts.map +1 -0
  272. package/dist/enums/objectFlags.enum.js +52 -0
  273. package/dist/enums/objectFlags.enum.js.map +1 -0
  274. package/dist/enums/objectFlags.js +52 -0
  275. package/dist/enums/objectFlags.js.map +1 -0
  276. package/dist/enums/outerExpressionKinds.d.ts +2 -0
  277. package/dist/enums/outerExpressionKinds.d.ts.map +1 -0
  278. package/dist/enums/outerExpressionKinds.enum.d.ts +16 -0
  279. package/dist/enums/outerExpressionKinds.enum.d.ts.map +1 -0
  280. package/dist/enums/outerExpressionKinds.enum.js +18 -0
  281. package/dist/enums/outerExpressionKinds.enum.js.map +1 -0
  282. package/dist/enums/outerExpressionKinds.js +18 -0
  283. package/dist/enums/outerExpressionKinds.js.map +1 -0
  284. package/dist/enums/regularExpressionFlags.d.ts +2 -0
  285. package/dist/enums/regularExpressionFlags.d.ts.map +1 -0
  286. package/dist/enums/regularExpressionFlags.enum.d.ts +13 -0
  287. package/dist/enums/regularExpressionFlags.enum.d.ts.map +1 -0
  288. package/dist/enums/regularExpressionFlags.enum.js +14 -0
  289. package/dist/enums/regularExpressionFlags.enum.js.map +1 -0
  290. package/dist/enums/regularExpressionFlags.js +14 -0
  291. package/dist/enums/regularExpressionFlags.js.map +1 -0
  292. package/dist/enums/scriptKind.d.ts +2 -0
  293. package/dist/enums/scriptKind.d.ts.map +1 -0
  294. package/dist/enums/scriptKind.enum.d.ts +11 -0
  295. package/dist/enums/scriptKind.enum.d.ts.map +1 -0
  296. package/dist/enums/scriptKind.enum.js +12 -0
  297. package/dist/enums/scriptKind.enum.js.map +1 -0
  298. package/dist/enums/scriptKind.js +12 -0
  299. package/dist/enums/scriptKind.js.map +1 -0
  300. package/dist/enums/scriptTarget.d.ts +2 -0
  301. package/dist/enums/scriptTarget.d.ts.map +1 -0
  302. package/dist/enums/scriptTarget.enum.d.ts +17 -0
  303. package/dist/enums/scriptTarget.enum.d.ts.map +1 -0
  304. package/dist/enums/scriptTarget.enum.js +18 -0
  305. package/dist/enums/scriptTarget.enum.js.map +1 -0
  306. package/dist/enums/scriptTarget.js +18 -0
  307. package/dist/enums/scriptTarget.js.map +1 -0
  308. package/dist/enums/signatureFlags.d.ts +2 -0
  309. package/dist/enums/signatureFlags.d.ts.map +1 -0
  310. package/dist/enums/signatureFlags.enum.d.ts +15 -0
  311. package/dist/enums/signatureFlags.enum.d.ts.map +1 -0
  312. package/dist/enums/signatureFlags.enum.js +17 -0
  313. package/dist/enums/signatureFlags.enum.js.map +1 -0
  314. package/dist/enums/signatureFlags.js +17 -0
  315. package/dist/enums/signatureFlags.js.map +1 -0
  316. package/dist/enums/signatureKind.d.ts +2 -0
  317. package/dist/enums/signatureKind.d.ts.map +1 -0
  318. package/dist/enums/signatureKind.enum.d.ts +5 -0
  319. package/dist/enums/signatureKind.enum.d.ts.map +1 -0
  320. package/dist/enums/signatureKind.enum.js +7 -0
  321. package/dist/enums/signatureKind.enum.js.map +1 -0
  322. package/dist/enums/signatureKind.js +7 -0
  323. package/dist/enums/signatureKind.js.map +1 -0
  324. package/dist/enums/symbolFlags.d.ts +2 -0
  325. package/dist/enums/symbolFlags.d.ts.map +1 -0
  326. package/dist/enums/symbolFlags.enum.d.ts +71 -0
  327. package/dist/enums/symbolFlags.enum.d.ts.map +1 -0
  328. package/dist/enums/symbolFlags.enum.js +73 -0
  329. package/dist/enums/symbolFlags.enum.js.map +1 -0
  330. package/dist/enums/symbolFlags.js +73 -0
  331. package/dist/enums/symbolFlags.js.map +1 -0
  332. package/dist/enums/syntaxKind.d.ts +2 -0
  333. package/dist/enums/syntaxKind.d.ts.map +1 -0
  334. package/dist/enums/syntaxKind.enum.d.ts +389 -0
  335. package/dist/enums/syntaxKind.enum.d.ts.map +1 -0
  336. package/dist/enums/syntaxKind.enum.js +391 -0
  337. package/dist/enums/syntaxKind.enum.js.map +1 -0
  338. package/dist/enums/syntaxKind.js +391 -0
  339. package/dist/enums/syntaxKind.js.map +1 -0
  340. package/dist/enums/tokenFlags.d.ts +2 -0
  341. package/dist/enums/tokenFlags.d.ts.map +1 -0
  342. package/dist/enums/tokenFlags.enum.d.ts +30 -0
  343. package/dist/enums/tokenFlags.enum.d.ts.map +1 -0
  344. package/dist/enums/tokenFlags.enum.js +32 -0
  345. package/dist/enums/tokenFlags.enum.js.map +1 -0
  346. package/dist/enums/tokenFlags.js +32 -0
  347. package/dist/enums/tokenFlags.js.map +1 -0
  348. package/dist/enums/typeFlags.d.ts +2 -0
  349. package/dist/enums/typeFlags.d.ts.map +1 -0
  350. package/dist/enums/typeFlags.enum.d.ts +76 -0
  351. package/dist/enums/typeFlags.enum.d.ts.map +1 -0
  352. package/dist/enums/typeFlags.enum.js +78 -0
  353. package/dist/enums/typeFlags.enum.js.map +1 -0
  354. package/dist/enums/typeFlags.js +78 -0
  355. package/dist/enums/typeFlags.js.map +1 -0
  356. package/dist/enums/typePredicateKind.d.ts +2 -0
  357. package/dist/enums/typePredicateKind.d.ts.map +1 -0
  358. package/dist/enums/typePredicateKind.enum.d.ts +7 -0
  359. package/dist/enums/typePredicateKind.enum.d.ts.map +1 -0
  360. package/dist/enums/typePredicateKind.enum.js +9 -0
  361. package/dist/enums/typePredicateKind.enum.js.map +1 -0
  362. package/dist/enums/typePredicateKind.js +9 -0
  363. package/dist/enums/typePredicateKind.js.map +1 -0
  364. package/dist/internal/utils.d.ts +23 -0
  365. package/dist/internal/utils.d.ts.map +1 -0
  366. package/dist/internal/utils.js +25 -0
  367. package/dist/internal/utils.js.map +1 -0
  368. package/lib/getExePath.d.ts +2 -0
  369. package/lib/getExePath.js +70 -0
  370. package/lib/tsc.js +28 -8
  371. package/lib/version.cjs +3 -0
  372. package/lib/version.d.cts +2 -0
  373. package/package.json +58 -89
  374. package/vendor/vscode-jsonrpc/License.txt +11 -0
  375. package/vendor/vscode-jsonrpc/README.md +54 -0
  376. package/vendor/vscode-jsonrpc/lib/browser/main.d.ts +17 -0
  377. package/vendor/vscode-jsonrpc/lib/browser/main.js +83 -0
  378. package/vendor/vscode-jsonrpc/lib/browser/ril.d.ts +22 -0
  379. package/vendor/vscode-jsonrpc/lib/browser/ril.js +210 -0
  380. package/vendor/vscode-jsonrpc/lib/common/api.d.ts +14 -0
  381. package/vendor/vscode-jsonrpc/lib/common/api.js +87 -0
  382. package/vendor/vscode-jsonrpc/lib/common/cancellation.d.ts +32 -0
  383. package/vendor/vscode-jsonrpc/lib/common/cancellation.js +132 -0
  384. package/vendor/vscode-jsonrpc/lib/common/connection.d.ts +367 -0
  385. package/vendor/vscode-jsonrpc/lib/common/connection.js +1271 -0
  386. package/vendor/vscode-jsonrpc/lib/common/disposable.d.ts +9 -0
  387. package/vendor/vscode-jsonrpc/lib/common/disposable.js +16 -0
  388. package/vendor/vscode-jsonrpc/lib/common/encoding.d.ts +52 -0
  389. package/vendor/vscode-jsonrpc/lib/common/encoding.js +70 -0
  390. package/vendor/vscode-jsonrpc/lib/common/events.d.ts +39 -0
  391. package/vendor/vscode-jsonrpc/lib/common/events.js +135 -0
  392. package/vendor/vscode-jsonrpc/lib/common/is.d.ts +7 -0
  393. package/vendor/vscode-jsonrpc/lib/common/is.js +34 -0
  394. package/vendor/vscode-jsonrpc/lib/common/linkedMap.d.ts +55 -0
  395. package/vendor/vscode-jsonrpc/lib/common/linkedMap.js +412 -0
  396. package/vendor/vscode-jsonrpc/lib/common/messageBuffer.d.ts +18 -0
  397. package/vendor/vscode-jsonrpc/lib/common/messageBuffer.js +155 -0
  398. package/vendor/vscode-jsonrpc/lib/common/messageReader.d.ts +77 -0
  399. package/vendor/vscode-jsonrpc/lib/common/messageReader.js +246 -0
  400. package/vendor/vscode-jsonrpc/lib/common/messageWriter.d.ts +60 -0
  401. package/vendor/vscode-jsonrpc/lib/common/messageWriter.js +157 -0
  402. package/vendor/vscode-jsonrpc/lib/common/messages.d.ts +369 -0
  403. package/vendor/vscode-jsonrpc/lib/common/messages.js +436 -0
  404. package/vendor/vscode-jsonrpc/lib/common/ral.d.ts +74 -0
  405. package/vendor/vscode-jsonrpc/lib/common/ral.js +23 -0
  406. package/vendor/vscode-jsonrpc/lib/common/semaphore.d.ts +10 -0
  407. package/vendor/vscode-jsonrpc/lib/common/semaphore.js +74 -0
  408. package/vendor/vscode-jsonrpc/lib/common/sharedArrayCancellation.d.ts +15 -0
  409. package/vendor/vscode-jsonrpc/lib/common/sharedArrayCancellation.js +77 -0
  410. package/vendor/vscode-jsonrpc/lib/node/main.d.ts +58 -0
  411. package/vendor/vscode-jsonrpc/lib/node/main.js +289 -0
  412. package/vendor/vscode-jsonrpc/lib/node/ril.d.ts +12 -0
  413. package/vendor/vscode-jsonrpc/lib/node/ril.js +163 -0
  414. package/vendor/vscode-jsonrpc/package.json +54 -0
  415. package/vendor/vscode-jsonrpc/typings/thenable.d.ts +5 -0
  416. package/SECURITY.md +0 -39
  417. package/bin/tsserver +0 -2
  418. package/lib/_tsc.js +0 -134465
  419. package/lib/_tsserver.js +0 -659
  420. package/lib/_typingsInstaller.js +0 -222
  421. package/lib/cs/diagnosticMessages.generated.json +0 -2129
  422. package/lib/de/diagnosticMessages.generated.json +0 -2125
  423. package/lib/es/diagnosticMessages.generated.json +0 -2129
  424. package/lib/fr/diagnosticMessages.generated.json +0 -2129
  425. package/lib/it/diagnosticMessages.generated.json +0 -2125
  426. package/lib/ja/diagnosticMessages.generated.json +0 -2129
  427. package/lib/ko/diagnosticMessages.generated.json +0 -2129
  428. package/lib/lib.d.ts +0 -20
  429. package/lib/lib.decorators.d.ts +0 -382
  430. package/lib/lib.decorators.legacy.d.ts +0 -20
  431. package/lib/lib.dom.asynciterable.d.ts +0 -18
  432. package/lib/lib.dom.d.ts +0 -45125
  433. package/lib/lib.dom.iterable.d.ts +0 -18
  434. package/lib/lib.es2015.collection.d.ts +0 -150
  435. package/lib/lib.es2015.core.d.ts +0 -595
  436. package/lib/lib.es2015.d.ts +0 -26
  437. package/lib/lib.es2015.generator.d.ts +0 -75
  438. package/lib/lib.es2015.iterable.d.ts +0 -603
  439. package/lib/lib.es2015.promise.d.ts +0 -79
  440. package/lib/lib.es2015.proxy.d.ts +0 -126
  441. package/lib/lib.es2015.reflect.d.ts +0 -142
  442. package/lib/lib.es2015.symbol.d.ts +0 -44
  443. package/lib/lib.es2015.symbol.wellknown.d.ts +0 -324
  444. package/lib/lib.es2016.array.include.d.ts +0 -114
  445. package/lib/lib.es2016.d.ts +0 -19
  446. package/lib/lib.es2016.full.d.ts +0 -21
  447. package/lib/lib.es2016.intl.d.ts +0 -29
  448. package/lib/lib.es2017.arraybuffer.d.ts +0 -19
  449. package/lib/lib.es2017.d.ts +0 -24
  450. package/lib/lib.es2017.date.d.ts +0 -29
  451. package/lib/lib.es2017.full.d.ts +0 -21
  452. package/lib/lib.es2017.intl.d.ts +0 -42
  453. package/lib/lib.es2017.object.d.ts +0 -47
  454. package/lib/lib.es2017.sharedmemory.d.ts +0 -133
  455. package/lib/lib.es2017.string.d.ts +0 -43
  456. package/lib/lib.es2017.typedarrays.d.ts +0 -51
  457. package/lib/lib.es2018.asyncgenerator.d.ts +0 -75
  458. package/lib/lib.es2018.asynciterable.d.ts +0 -51
  459. package/lib/lib.es2018.d.ts +0 -22
  460. package/lib/lib.es2018.full.d.ts +0 -22
  461. package/lib/lib.es2018.intl.d.ts +0 -81
  462. package/lib/lib.es2018.promise.d.ts +0 -28
  463. package/lib/lib.es2018.regexp.d.ts +0 -35
  464. package/lib/lib.es2019.array.d.ts +0 -77
  465. package/lib/lib.es2019.d.ts +0 -22
  466. package/lib/lib.es2019.full.d.ts +0 -22
  467. package/lib/lib.es2019.intl.d.ts +0 -21
  468. package/lib/lib.es2019.object.d.ts +0 -31
  469. package/lib/lib.es2019.string.d.ts +0 -35
  470. package/lib/lib.es2019.symbol.d.ts +0 -22
  471. package/lib/lib.es2020.bigint.d.ts +0 -763
  472. package/lib/lib.es2020.d.ts +0 -25
  473. package/lib/lib.es2020.date.d.ts +0 -40
  474. package/lib/lib.es2020.full.d.ts +0 -22
  475. package/lib/lib.es2020.intl.d.ts +0 -472
  476. package/lib/lib.es2020.number.d.ts +0 -26
  477. package/lib/lib.es2020.promise.d.ts +0 -45
  478. package/lib/lib.es2020.sharedmemory.d.ts +0 -97
  479. package/lib/lib.es2020.string.d.ts +0 -42
  480. package/lib/lib.es2020.symbol.wellknown.d.ts +0 -39
  481. package/lib/lib.es2021.d.ts +0 -21
  482. package/lib/lib.es2021.full.d.ts +0 -22
  483. package/lib/lib.es2021.intl.d.ts +0 -164
  484. package/lib/lib.es2021.promise.d.ts +0 -46
  485. package/lib/lib.es2021.string.d.ts +0 -31
  486. package/lib/lib.es2021.weakref.d.ts +0 -76
  487. package/lib/lib.es2022.array.d.ts +0 -119
  488. package/lib/lib.es2022.d.ts +0 -23
  489. package/lib/lib.es2022.error.d.ts +0 -73
  490. package/lib/lib.es2022.full.d.ts +0 -22
  491. package/lib/lib.es2022.intl.d.ts +0 -143
  492. package/lib/lib.es2022.object.d.ts +0 -24
  493. package/lib/lib.es2022.regexp.d.ts +0 -37
  494. package/lib/lib.es2022.string.d.ts +0 -23
  495. package/lib/lib.es2023.array.d.ts +0 -922
  496. package/lib/lib.es2023.collection.d.ts +0 -19
  497. package/lib/lib.es2023.d.ts +0 -20
  498. package/lib/lib.es2023.full.d.ts +0 -22
  499. package/lib/lib.es2023.intl.d.ts +0 -62
  500. package/lib/lib.es2024.arraybuffer.d.ts +0 -63
  501. package/lib/lib.es2024.collection.d.ts +0 -27
  502. package/lib/lib.es2024.d.ts +0 -24
  503. package/lib/lib.es2024.full.d.ts +0 -22
  504. package/lib/lib.es2024.object.d.ts +0 -27
  505. package/lib/lib.es2024.promise.d.ts +0 -33
  506. package/lib/lib.es2024.regexp.d.ts +0 -23
  507. package/lib/lib.es2024.sharedmemory.d.ts +0 -66
  508. package/lib/lib.es2024.string.d.ts +0 -27
  509. package/lib/lib.es2025.collection.d.ts +0 -94
  510. package/lib/lib.es2025.d.ts +0 -23
  511. package/lib/lib.es2025.float16.d.ts +0 -443
  512. package/lib/lib.es2025.full.d.ts +0 -22
  513. package/lib/lib.es2025.intl.d.ts +0 -200
  514. package/lib/lib.es2025.iterator.d.ts +0 -146
  515. package/lib/lib.es2025.promise.d.ts +0 -32
  516. package/lib/lib.es2025.regexp.d.ts +0 -30
  517. package/lib/lib.es5.d.ts +0 -4599
  518. package/lib/lib.es6.d.ts +0 -21
  519. package/lib/lib.esnext.array.d.ts +0 -33
  520. package/lib/lib.esnext.collection.d.ts +0 -47
  521. package/lib/lib.esnext.d.ts +0 -27
  522. package/lib/lib.esnext.date.d.ts +0 -21
  523. package/lib/lib.esnext.decorators.d.ts +0 -26
  524. package/lib/lib.esnext.disposable.d.ts +0 -191
  525. package/lib/lib.esnext.error.d.ts +0 -22
  526. package/lib/lib.esnext.full.d.ts +0 -22
  527. package/lib/lib.esnext.intl.d.ts +0 -107
  528. package/lib/lib.esnext.sharedmemory.d.ts +0 -23
  529. package/lib/lib.esnext.temporal.d.ts +0 -485
  530. package/lib/lib.esnext.typedarrays.d.ts +0 -90
  531. package/lib/lib.scripthost.d.ts +0 -320
  532. package/lib/lib.webworker.asynciterable.d.ts +0 -18
  533. package/lib/lib.webworker.d.ts +0 -15606
  534. package/lib/lib.webworker.importscripts.d.ts +0 -21
  535. package/lib/lib.webworker.iterable.d.ts +0 -18
  536. package/lib/pl/diagnosticMessages.generated.json +0 -2129
  537. package/lib/pt-br/diagnosticMessages.generated.json +0 -2129
  538. package/lib/ru/diagnosticMessages.generated.json +0 -2125
  539. package/lib/tr/diagnosticMessages.generated.json +0 -2129
  540. package/lib/tsserver.js +0 -8
  541. package/lib/tsserverlibrary.d.ts +0 -17
  542. package/lib/tsserverlibrary.js +0 -21
  543. package/lib/typesMap.json +0 -497
  544. package/lib/typescript.d.ts +0 -11448
  545. package/lib/typescript.js +0 -201039
  546. package/lib/typingsInstaller.js +0 -8
  547. package/lib/watchGuard.js +0 -53
  548. package/lib/zh-cn/diagnosticMessages.generated.json +0 -2129
  549. package/lib/zh-tw/diagnosticMessages.generated.json +0 -2125
  550. /package/{LICENSE.txt → LICENSE} +0 -0
@@ -0,0 +1,1657 @@
1
+ /// <reference path="../node/node.ts" preserve="true" />
2
+ import { CompletionItemKind } from "#enums/completionItemKind";
3
+ import { DiagnosticCategory } from "#enums/diagnosticCategory";
4
+ import { ElementFlags } from "#enums/elementFlags";
5
+ import { ModuleKind } from "#enums/moduleKind";
6
+ import { NodeBuilderFlags } from "#enums/nodeBuilderFlags";
7
+ import { ObjectFlags } from "#enums/objectFlags";
8
+ import { SignatureFlags } from "#enums/signatureFlags";
9
+ import { SignatureKind } from "#enums/signatureKind";
10
+ import { SymbolFlags } from "#enums/symbolFlags";
11
+ import { TypeFlags } from "#enums/typeFlags";
12
+ import { TypePredicateKind } from "#enums/typePredicateKind";
13
+ import { ModifierFlags, unescapeLeadingUnderscores, } from "../../ast/index.js";
14
+ import { encodeNode, uint8ArrayToBase64, } from "../node/encoder.js";
15
+ import { decodeNode, getNodeId, parseNodeHandle, readParseOptionsKey, readSourceFileHash, RemoteSourceFile, } from "../node/node.js";
16
+ import { Wtf8Decoder } from "../node/wtf8.js";
17
+ import { createGetCanonicalFileName, toPath, } from "../path.js";
18
+ import { resolveFileName, toUpdateSnapshotRequest, } from "../proto.js";
19
+ import { SourceFileCache } from "../sourceFileCache.js";
20
+ import { Client, } from "./client.js";
21
+ export { documentURIToFileName, fileNameToDocumentURI } from "../path.js";
22
+ export { CompletionItemKind, DiagnosticCategory, ElementFlags, ModifierFlags, ModuleKind, NodeBuilderFlags, ObjectFlags, SignatureFlags, SignatureKind, SymbolFlags, TypeFlags, TypePredicateKind };
23
+ export class API {
24
+ client;
25
+ sourceFileCache;
26
+ toPath;
27
+ initialized = false;
28
+ activeSnapshots = new Set();
29
+ latestSnapshot;
30
+ internal;
31
+ constructor(options = {}) {
32
+ this.client = new Client(options);
33
+ this.sourceFileCache = new SourceFileCache();
34
+ this.internal = new InternalAPI(this.client, () => this.ensureInitialized());
35
+ }
36
+ /**
37
+ * Create an API instance from an existing LSP connection's API session.
38
+ * Use this when connecting to an API pipe provided by an LSP server via custom/initializeAPISession.
39
+ */
40
+ static async fromLSPConnection(options) {
41
+ const api = new API(options);
42
+ await api.ensureInitialized();
43
+ return api;
44
+ }
45
+ async ensureInitialized() {
46
+ if (!this.initialized) {
47
+ const response = await this.client.apiRequest("initialize", null);
48
+ const getCanonicalFileName = createGetCanonicalFileName(response.useCaseSensitiveFileNames);
49
+ const currentDirectory = response.currentDirectory;
50
+ this.toPath = (fileName) => toPath(fileName, currentDirectory, getCanonicalFileName);
51
+ this.initialized = true;
52
+ }
53
+ }
54
+ async parseConfigFile(file) {
55
+ await this.ensureInitialized();
56
+ return this.client.apiRequest("parseConfigFile", { file });
57
+ }
58
+ async updateSnapshot(params) {
59
+ await this.ensureInitialized();
60
+ const requestParams = toUpdateSnapshotRequest(params);
61
+ const data = await this.client.apiRequest("updateSnapshot", requestParams);
62
+ // Retain cached source files from previous snapshot for unchanged files
63
+ if (this.latestSnapshot) {
64
+ this.sourceFileCache.retainForSnapshot(data.snapshot, this.latestSnapshot.id, data.changes);
65
+ if (this.latestSnapshot.isDisposed()) {
66
+ this.sourceFileCache.releaseSnapshot(this.latestSnapshot.id);
67
+ }
68
+ }
69
+ const snapshot = new Snapshot(data, this.client, this.sourceFileCache, this.toPath, () => {
70
+ this.activeSnapshots.delete(snapshot);
71
+ if (snapshot !== this.latestSnapshot) {
72
+ this.sourceFileCache.releaseSnapshot(snapshot.id);
73
+ }
74
+ });
75
+ this.latestSnapshot = snapshot;
76
+ this.activeSnapshots.add(snapshot);
77
+ return snapshot;
78
+ }
79
+ async close() {
80
+ // Dispose all active snapshots
81
+ for (const snapshot of [...this.activeSnapshots]) {
82
+ await snapshot.dispose();
83
+ }
84
+ // Release the latest snapshot's cache refs if still held
85
+ if (this.latestSnapshot) {
86
+ this.sourceFileCache.releaseSnapshot(this.latestSnapshot.id);
87
+ this.latestSnapshot = undefined;
88
+ }
89
+ await this.client.close();
90
+ this.sourceFileCache.clear();
91
+ }
92
+ clearSourceFileCache() {
93
+ this.sourceFileCache.clear();
94
+ }
95
+ /**
96
+ * Returns a snapshot of collected timing information for requests made
97
+ * through this API instance: client-measured round-trip latency and bytes
98
+ * transferred, folded together with the server's own per-request processing
99
+ * time and an estimated transport overhead (round-trip minus server time).
100
+ *
101
+ * Fetching the snapshot issues a lightweight request to the server to
102
+ * retrieve its timing collection. Collection must be enabled via the
103
+ * `collectTiming` option; when it is not, the returned snapshot has
104
+ * `enabled: false` and zeroed totals.
105
+ */
106
+ getTimingInfo() {
107
+ return this.client.getTimingInfo();
108
+ }
109
+ /** Clears all accumulated timing totals and recent-request history, on both the client and the server. */
110
+ resetTimingInfo() {
111
+ return this.client.resetTimingInfo();
112
+ }
113
+ }
114
+ export class InternalAPI {
115
+ client;
116
+ ensureInitialized;
117
+ /** @internal */
118
+ constructor(client, ensureInitialized) {
119
+ this.client = client;
120
+ this.ensureInitialized = ensureInitialized;
121
+ }
122
+ async startCPUProfile(dir) {
123
+ await this.ensureInitialized();
124
+ await this.client.apiRequest("startCPUProfile", { dir });
125
+ }
126
+ async stopCPUProfile() {
127
+ await this.ensureInitialized();
128
+ const result = await this.client.apiRequest("stopCPUProfile", null);
129
+ return result.file;
130
+ }
131
+ async saveHeapProfile(dir) {
132
+ await this.ensureInitialized();
133
+ const result = await this.client.apiRequest("saveHeapProfile", { dir });
134
+ return result.file;
135
+ }
136
+ }
137
+ export class Snapshot {
138
+ id;
139
+ projectMap;
140
+ toPath;
141
+ client;
142
+ disposed = false;
143
+ onDispose;
144
+ snapshotRegistry;
145
+ constructor(data, client, sourceFileCache, toPath, onDispose) {
146
+ this.id = data.snapshot;
147
+ this.client = client;
148
+ this.toPath = toPath;
149
+ this.onDispose = onDispose;
150
+ this.projectMap = new Map();
151
+ this.snapshotRegistry = new SnapshotObjectRegistry(client, this.id, projectId => this.projectMap.get(projectId));
152
+ for (const projData of data.projects) {
153
+ const project = new Project(projData, this.id, client, sourceFileCache, toPath, this.snapshotRegistry);
154
+ this.projectMap.set(toPath(projData.configFileName), project);
155
+ }
156
+ }
157
+ getProjects() {
158
+ this.ensureNotDisposed();
159
+ return [...this.projectMap.values()];
160
+ }
161
+ getProject(configFileName) {
162
+ this.ensureNotDisposed();
163
+ return this.projectMap.get(this.toPath(configFileName));
164
+ }
165
+ async getDefaultProjectForFile(file) {
166
+ this.ensureNotDisposed();
167
+ const data = await this.client.apiRequest("getDefaultProjectForFile", {
168
+ snapshot: this.id,
169
+ file,
170
+ });
171
+ if (!data)
172
+ return undefined;
173
+ return this.projectMap.get(this.toPath(data.configFileName));
174
+ }
175
+ [globalThis.Symbol.dispose]() {
176
+ this.dispose();
177
+ }
178
+ async dispose() {
179
+ if (this.disposed)
180
+ return;
181
+ this.disposed = true;
182
+ for (const project of this.projectMap.values()) {
183
+ project.dispose();
184
+ }
185
+ this.projectMap.clear();
186
+ this.snapshotRegistry.clear();
187
+ this.onDispose();
188
+ await this.client.apiRequest("release", { snapshot: this.id });
189
+ }
190
+ isDisposed() {
191
+ return this.disposed;
192
+ }
193
+ ensureNotDisposed() {
194
+ if (this.disposed) {
195
+ throw new Error("Snapshot is disposed");
196
+ }
197
+ }
198
+ }
199
+ class SnapshotObjectRegistry {
200
+ symbols = new Map();
201
+ client;
202
+ snapshotId;
203
+ resolveProject;
204
+ constructor(client, snapshotId, resolveProject) {
205
+ this.client = client;
206
+ this.snapshotId = snapshotId;
207
+ this.resolveProject = resolveProject;
208
+ }
209
+ /** Resolve a project id (a config file path) to its Project within this snapshot. */
210
+ getProject(projectId) {
211
+ return this.resolveProject(projectId);
212
+ }
213
+ getOrCreateSymbol(data) {
214
+ let symbol = this.symbols.get(data.id);
215
+ if (!symbol) {
216
+ symbol = new Symbol(data, this);
217
+ this.symbols.set(data.id, symbol);
218
+ }
219
+ return symbol;
220
+ }
221
+ getSymbol(id) {
222
+ return this.symbols.get(id);
223
+ }
224
+ clear() {
225
+ this.symbols.clear();
226
+ }
227
+ async fetchSymbol(source, method, handle, projectId) {
228
+ if (!handle)
229
+ return undefined;
230
+ const cached = this.getSymbol(handle);
231
+ if (cached)
232
+ return cached;
233
+ const data = await this.client.apiRequest(method, {
234
+ snapshot: this.snapshotId,
235
+ project: projectId,
236
+ objectId: source.id,
237
+ });
238
+ if (!data)
239
+ throw new Error(`${method} returned null symbol for ${source.constructor.name} ${source.id}`);
240
+ return this.getOrCreateSymbol(data);
241
+ }
242
+ async fetchSymbols(source, method, handles, projectId) {
243
+ if (handles) {
244
+ const result = new Array(handles.length);
245
+ let allCached = true;
246
+ for (let i = 0; i < handles.length; i++) {
247
+ const cached = this.getSymbol(handles[i]);
248
+ if (!cached) {
249
+ allCached = false;
250
+ break;
251
+ }
252
+ result[i] = cached;
253
+ }
254
+ if (allCached)
255
+ return result;
256
+ }
257
+ const symbolData = await this.client.apiRequest(method, {
258
+ snapshot: this.snapshotId,
259
+ project: projectId,
260
+ objectId: source.id,
261
+ });
262
+ if (symbolData == null)
263
+ return [];
264
+ else
265
+ return symbolData.map(data => this.getOrCreateSymbol(data));
266
+ }
267
+ }
268
+ class ProjectObjectRegistry {
269
+ client;
270
+ snapshotId;
271
+ project;
272
+ snapshotRegistry;
273
+ types = new Map();
274
+ signatures = new Map();
275
+ constructor(client, snapshotId, project, snapshotRegistry) {
276
+ this.client = client;
277
+ this.snapshotId = snapshotId;
278
+ this.project = project;
279
+ this.snapshotRegistry = snapshotRegistry;
280
+ }
281
+ getOrCreateSymbol(data) {
282
+ return this.snapshotRegistry.getOrCreateSymbol(data);
283
+ }
284
+ getSymbol(id) {
285
+ return this.snapshotRegistry.getSymbol(id);
286
+ }
287
+ getOrCreateType(data) {
288
+ let type = this.types.get(data.id);
289
+ if (!type) {
290
+ type = new TypeObject(data, this);
291
+ this.types.set(data.id, type);
292
+ }
293
+ return type;
294
+ }
295
+ getType(id) {
296
+ return this.types.get(id);
297
+ }
298
+ getOrCreateSignature(data) {
299
+ let sig = this.signatures.get(data.id);
300
+ if (!sig) {
301
+ sig = new Signature(data, this.project, this);
302
+ this.signatures.set(data.id, sig);
303
+ }
304
+ return sig;
305
+ }
306
+ getSignature(id) {
307
+ return this.signatures.get(id);
308
+ }
309
+ clear() {
310
+ this.types.clear();
311
+ this.signatures.clear();
312
+ }
313
+ async fetchType(source, method, handle) {
314
+ if (handle !== false) {
315
+ if (!handle)
316
+ return undefined;
317
+ const cached = this.getType(handle);
318
+ if (cached)
319
+ return cached;
320
+ }
321
+ const data = await this.client.apiRequest(method, {
322
+ snapshot: this.snapshotId,
323
+ project: this.project.id,
324
+ objectId: source.id,
325
+ });
326
+ if (!data)
327
+ throw new Error(`${method} returned null type for ${source.constructor.name} ${source.id}`);
328
+ return this.getOrCreateType(data);
329
+ }
330
+ async fetchSymbol(source, method, handle) {
331
+ return this.snapshotRegistry.fetchSymbol(source, method, handle, this.project.id);
332
+ }
333
+ async fetchSignature(source, method, handle) {
334
+ if (!handle)
335
+ return undefined;
336
+ const cached = this.getSignature(handle);
337
+ if (cached)
338
+ return cached;
339
+ const data = await this.client.apiRequest(method, {
340
+ snapshot: this.snapshotId,
341
+ project: this.project.id,
342
+ objectId: source.id,
343
+ });
344
+ if (!data)
345
+ throw new Error(`${method} returned null signature for ${source.constructor.name} ${source.id}`);
346
+ return this.getOrCreateSignature(data);
347
+ }
348
+ async fetchTypes(source, method, handles) {
349
+ if (handles) {
350
+ const result = new Array(handles.length);
351
+ let allCached = true;
352
+ for (let i = 0; i < handles.length; i++) {
353
+ const cached = this.getType(handles[i]);
354
+ if (!cached) {
355
+ allCached = false;
356
+ break;
357
+ }
358
+ result[i] = cached;
359
+ }
360
+ if (allCached)
361
+ return result;
362
+ }
363
+ const typesData = await this.client.apiRequest(method, {
364
+ snapshot: this.snapshotId,
365
+ project: this.project.id,
366
+ objectId: source.id,
367
+ });
368
+ if (typesData == null)
369
+ return [];
370
+ else
371
+ return typesData.map(data => this.getOrCreateType(data));
372
+ }
373
+ async fetchSymbols(source, method, handles) {
374
+ return this.snapshotRegistry.fetchSymbols(source, method, handles, this.project.id);
375
+ }
376
+ // getBaseTypes is a checker-level endpoint keyed by `type` (not `objectId`),
377
+ // so it cannot go through fetchTypes. This helper reuses that server method.
378
+ async fetchBaseTypes(source) {
379
+ const typesData = await this.client.apiRequest("getBaseTypes", {
380
+ snapshot: this.snapshotId,
381
+ project: this.project.id,
382
+ type: source.id,
383
+ });
384
+ if (typesData == null)
385
+ return [];
386
+ return typesData.map(data => this.getOrCreateType(data));
387
+ }
388
+ }
389
+ export class Project {
390
+ id;
391
+ configFileName;
392
+ compilerOptions;
393
+ rootFiles;
394
+ program;
395
+ checker;
396
+ emitter;
397
+ client;
398
+ constructor(data, snapshotId, client, sourceFileCache, toPath, snapshotRegistry) {
399
+ this.id = data.id;
400
+ this.configFileName = data.configFileName;
401
+ this.compilerOptions = data.compilerOptions;
402
+ this.rootFiles = data.rootFiles;
403
+ this.client = client;
404
+ this.program = new Program(snapshotId, this, client, sourceFileCache, toPath);
405
+ const objectRegistry = new ProjectObjectRegistry(client, snapshotId, this, snapshotRegistry);
406
+ this.checker = new Checker(snapshotId, this, client, objectRegistry);
407
+ this.emitter = new Emitter(client);
408
+ }
409
+ dispose() {
410
+ this.checker.dispose();
411
+ }
412
+ }
413
+ export class Program {
414
+ snapshotId;
415
+ project;
416
+ client;
417
+ sourceFileCache;
418
+ toPath;
419
+ decoder = new Wtf8Decoder();
420
+ sourceFileMetadataCache = new Map();
421
+ constructor(snapshotId, project, client, sourceFileCache, toPath) {
422
+ this.snapshotId = snapshotId;
423
+ this.project = project;
424
+ this.client = client;
425
+ this.sourceFileCache = sourceFileCache;
426
+ this.toPath = toPath;
427
+ }
428
+ getCompilerOptions() {
429
+ return this.project.compilerOptions;
430
+ }
431
+ async getSourceFile(file) {
432
+ const fileName = resolveFileName(file);
433
+ const path = this.toPath(fileName);
434
+ // Check if we already have a retained cache entry for this (snapshot, project) pair
435
+ const retained = this.sourceFileCache.getRetained(path, this.snapshotId, this.project.id);
436
+ if (retained) {
437
+ return retained;
438
+ }
439
+ // Fetch from server
440
+ const binaryData = await this.client.apiRequestBinary("getSourceFile", {
441
+ snapshot: this.snapshotId,
442
+ project: this.project.id,
443
+ file,
444
+ });
445
+ if (!binaryData) {
446
+ return undefined;
447
+ }
448
+ const view = new DataView(binaryData.buffer, binaryData.byteOffset, binaryData.byteLength);
449
+ const contentHash = readSourceFileHash(view);
450
+ const parseOptionsKey = readParseOptionsKey(view);
451
+ // Create a new RemoteSourceFile and cache it (set returns existing if hash matches)
452
+ const sourceFile = new RemoteSourceFile(binaryData, this.decoder, this.client.getTimingCollector());
453
+ return this.sourceFileCache.set(path, sourceFile, parseOptionsKey, contentHash, this.snapshotId, this.project.id);
454
+ }
455
+ async getSourceFileNames() {
456
+ const data = await this.client.apiRequest("getSourceFileNames", {
457
+ snapshot: this.snapshotId,
458
+ project: this.project.id,
459
+ });
460
+ return data ?? [];
461
+ }
462
+ /**
463
+ * Returns program-stored metadata for the given source file, or `undefined` if the file
464
+ * is not part of the program. Metadata is fetched lazily per file and cached on this
465
+ * `Program` instance.
466
+ */
467
+ getSourceFileMetadata(fileName) {
468
+ return this.getSourceFileMetadataByPath(this.toPath(fileName));
469
+ }
470
+ /**
471
+ * Returns program-stored metadata for the source file at the given path, or `undefined`
472
+ * if the file is not part of the program. Like {@link getSourceFileMetadata}, but skips
473
+ * the file name to path conversion. Metadata is fetched lazily per file and cached on
474
+ * this `Program` instance.
475
+ */
476
+ getSourceFileMetadataByPath(path) {
477
+ let metadata = this.sourceFileMetadataCache.get(path);
478
+ if (metadata === undefined) {
479
+ metadata = this.fetchSourceFileMetadata(path);
480
+ this.sourceFileMetadataCache.set(path, metadata);
481
+ }
482
+ return metadata;
483
+ }
484
+ async fetchSourceFileMetadata(path) {
485
+ const data = await this.client.apiRequest("getSourceFileMetadata", {
486
+ snapshot: this.snapshotId,
487
+ project: this.project.id,
488
+ file: path,
489
+ });
490
+ return data ?? undefined;
491
+ }
492
+ /**
493
+ * Returns whether the given source file was loaded as part of an external library
494
+ * (e.g. a dependency resolved from `node_modules`). The underlying program metadata is
495
+ * fetched lazily per file and cached on this `Program` instance.
496
+ */
497
+ async isSourceFileFromExternalLibrary(file) {
498
+ const metadata = await this.getSourceFileMetadataByPath(file.path);
499
+ return metadata?.isFromExternalLibrary ?? false;
500
+ }
501
+ /**
502
+ * Returns whether the given source file is a default library file (e.g. `lib.d.ts`).
503
+ * The underlying program metadata is fetched lazily per file and cached on this
504
+ * `Program` instance.
505
+ */
506
+ async isSourceFileDefaultLibrary(file) {
507
+ const metadata = await this.getSourceFileMetadataByPath(file.path);
508
+ return metadata?.isDefaultLibrary ?? false;
509
+ }
510
+ /**
511
+ * Get syntactic (parse) diagnostics for a specific file or all files.
512
+ * @param file - Optional file to get diagnostics for. If omitted, returns diagnostics for all files.
513
+ */
514
+ async getSyntacticDiagnostics(file) {
515
+ const data = await this.client.apiRequest("getSyntacticDiagnostics", {
516
+ snapshot: this.snapshotId,
517
+ project: this.project.id,
518
+ ...(file !== undefined ? { file } : {}),
519
+ });
520
+ return data ?? [];
521
+ }
522
+ /**
523
+ * Get binder diagnostics for a specific file or all files.
524
+ * @param file - Optional file to get diagnostics for. If omitted, returns diagnostics for all files.
525
+ */
526
+ async getBindDiagnostics(file) {
527
+ const data = await this.client.apiRequest("getBindDiagnostics", {
528
+ snapshot: this.snapshotId,
529
+ project: this.project.id,
530
+ ...(file !== undefined ? { file } : {}),
531
+ });
532
+ return data ?? [];
533
+ }
534
+ /**
535
+ * Get semantic (type-check) diagnostics for a specific file or all files.
536
+ * @param file - Optional file to get diagnostics for. If omitted, returns diagnostics for all files.
537
+ */
538
+ async getSemanticDiagnostics(file) {
539
+ const data = await this.client.apiRequest("getSemanticDiagnostics", {
540
+ snapshot: this.snapshotId,
541
+ project: this.project.id,
542
+ ...(file !== undefined ? { file } : {}),
543
+ });
544
+ return data ?? [];
545
+ }
546
+ /**
547
+ * Get suggestion diagnostics for a specific file or all files.
548
+ * @param file - Optional file to get diagnostics for. If omitted, returns diagnostics for all files.
549
+ */
550
+ async getSuggestionDiagnostics(file) {
551
+ const data = await this.client.apiRequest("getSuggestionDiagnostics", {
552
+ snapshot: this.snapshotId,
553
+ project: this.project.id,
554
+ ...(file !== undefined ? { file } : {}),
555
+ });
556
+ return data ?? [];
557
+ }
558
+ /**
559
+ * Get declaration emit diagnostics for a specific file or all files.
560
+ * @param file - Optional file to get diagnostics for. If omitted, returns diagnostics for all files.
561
+ */
562
+ async getDeclarationDiagnostics(file) {
563
+ const data = await this.client.apiRequest("getDeclarationDiagnostics", {
564
+ snapshot: this.snapshotId,
565
+ project: this.project.id,
566
+ ...(file !== undefined ? { file } : {}),
567
+ });
568
+ return data ?? [];
569
+ }
570
+ /**
571
+ * Get program-wide diagnostics for the project, including compiler options diagnostics.
572
+ */
573
+ async getProgramDiagnostics() {
574
+ const data = await this.client.apiRequest("getProgramDiagnostics", {
575
+ snapshot: this.snapshotId,
576
+ project: this.project.id,
577
+ });
578
+ return data ?? [];
579
+ }
580
+ /**
581
+ * Get global (non-file-specific) semantic diagnostics for the project.
582
+ */
583
+ async getGlobalDiagnostics() {
584
+ const data = await this.client.apiRequest("getGlobalDiagnostics", {
585
+ snapshot: this.snapshotId,
586
+ project: this.project.id,
587
+ });
588
+ return data ?? [];
589
+ }
590
+ /**
591
+ * Get config file parsing diagnostics for the project.
592
+ */
593
+ async getConfigFileParsingDiagnostics() {
594
+ const data = await this.client.apiRequest("getConfigFileParsingDiagnostics", {
595
+ snapshot: this.snapshotId,
596
+ project: this.project.id,
597
+ });
598
+ return data ?? [];
599
+ }
600
+ }
601
+ export class Checker {
602
+ snapshotId;
603
+ project;
604
+ client;
605
+ objectRegistry;
606
+ wellKnownSymbols;
607
+ constructor(snapshotId, project, client, objectRegistry) {
608
+ this.snapshotId = snapshotId;
609
+ this.project = project;
610
+ this.client = client;
611
+ this.objectRegistry = objectRegistry;
612
+ }
613
+ dispose() {
614
+ this.objectRegistry.clear();
615
+ }
616
+ async getSymbolAtLocation(nodeOrNodes) {
617
+ if (Array.isArray(nodeOrNodes)) {
618
+ const data = await this.client.apiRequest("getSymbolsAtLocations", {
619
+ snapshot: this.snapshotId,
620
+ project: this.project.id,
621
+ locations: nodeOrNodes.map(node => getNodeId(node)),
622
+ });
623
+ return data.map(d => d ? this.objectRegistry.getOrCreateSymbol(d) : undefined);
624
+ }
625
+ const data = await this.client.apiRequest("getSymbolAtLocation", {
626
+ snapshot: this.snapshotId,
627
+ project: this.project.id,
628
+ location: getNodeId(nodeOrNodes),
629
+ });
630
+ return data ? this.objectRegistry.getOrCreateSymbol(data) : undefined;
631
+ }
632
+ async getSymbolAtPosition(file, positionOrPositions) {
633
+ if (typeof positionOrPositions === "number") {
634
+ const data = await this.client.apiRequest("getSymbolAtPosition", {
635
+ snapshot: this.snapshotId,
636
+ project: this.project.id,
637
+ file,
638
+ position: positionOrPositions,
639
+ });
640
+ return data ? this.objectRegistry.getOrCreateSymbol(data) : undefined;
641
+ }
642
+ const data = await this.client.apiRequest("getSymbolsAtPositions", {
643
+ snapshot: this.snapshotId,
644
+ project: this.project.id,
645
+ file,
646
+ positions: positionOrPositions,
647
+ });
648
+ return data.map(d => d ? this.objectRegistry.getOrCreateSymbol(d) : undefined);
649
+ }
650
+ async getTypeOfSymbol(symbolOrSymbols) {
651
+ if (Array.isArray(symbolOrSymbols)) {
652
+ const data = await this.client.apiRequest("getTypesOfSymbols", {
653
+ snapshot: this.snapshotId,
654
+ project: this.project.id,
655
+ symbols: symbolOrSymbols.map(s => s.id),
656
+ });
657
+ return data.map(d => d ? this.objectRegistry.getOrCreateType(d) : undefined);
658
+ }
659
+ const data = await this.client.apiRequest("getTypeOfSymbol", {
660
+ snapshot: this.snapshotId,
661
+ project: this.project.id,
662
+ symbol: symbolOrSymbols.id,
663
+ });
664
+ return data ? this.objectRegistry.getOrCreateType(data) : undefined;
665
+ }
666
+ /**
667
+ * Get the declared type of a symbol. Always returns a type; for symbols whose
668
+ * declared type cannot be determined the checker yields the error type (use
669
+ * {@link Type.isErrorType} to detect it).
670
+ */
671
+ async getDeclaredTypeOfSymbol(symbol) {
672
+ const data = await this.client.apiRequest("getDeclaredTypeOfSymbol", {
673
+ snapshot: this.snapshotId,
674
+ project: this.project.id,
675
+ symbol: symbol.id,
676
+ });
677
+ if (!data)
678
+ throw new Error(`getDeclaredTypeOfSymbol returned no type for symbol ${symbol.id}`);
679
+ return this.objectRegistry.getOrCreateType(data);
680
+ }
681
+ async getReferencesToSymbolInFile(file, symbol) {
682
+ const data = await this.client.apiRequest("getReferencesToSymbolInFile", {
683
+ snapshot: this.snapshotId,
684
+ project: this.project.id,
685
+ file,
686
+ symbol: symbol.id,
687
+ });
688
+ return (data ?? []).map(h => new NodeHandle(h, this.project));
689
+ }
690
+ async getReferencedSymbolsForNode(node, position) {
691
+ const data = await this.client.apiRequest("getReferencedSymbolsForNode", {
692
+ snapshot: this.snapshotId,
693
+ project: this.project.id,
694
+ node: getNodeId(node),
695
+ position,
696
+ });
697
+ return (data ?? []).map(entry => ({
698
+ definition: new NodeHandle(entry.definition, this.project),
699
+ symbol: entry.symbol ? this.objectRegistry.getOrCreateSymbol(entry.symbol) : undefined,
700
+ references: (entry.references ?? []).map(h => new NodeHandle(h, this.project)),
701
+ }));
702
+ }
703
+ async getSignatureUsage(signatureDecl) {
704
+ const data = await this.client.apiRequest("getSignatureUsages", {
705
+ snapshot: this.snapshotId,
706
+ project: this.project.id,
707
+ signatureDecl: getNodeId(signatureDecl),
708
+ });
709
+ return (data ?? []).map(entry => ({
710
+ name: new NodeHandle(entry.name, this.project),
711
+ call: entry.call ? new NodeHandle(entry.call, this.project) : undefined,
712
+ }));
713
+ }
714
+ async getCompletionsAtPosition(document, position, options) {
715
+ const data = await this.client.apiRequest("getCompletionsAtPosition", {
716
+ snapshot: this.snapshotId,
717
+ project: this.project.id,
718
+ file: document,
719
+ position,
720
+ triggerCharacter: options?.triggerCharacter,
721
+ includeSymbol: options?.includeSymbol,
722
+ });
723
+ if (!data)
724
+ return undefined;
725
+ return {
726
+ isIncomplete: data.isIncomplete,
727
+ entries: data.entries.map(e => ({
728
+ ...e,
729
+ symbol: e.symbol ? this.objectRegistry.getOrCreateSymbol(e.symbol) : undefined,
730
+ })),
731
+ };
732
+ }
733
+ async getTypeAtLocation(nodeOrNodes) {
734
+ if (Array.isArray(nodeOrNodes)) {
735
+ const data = await this.client.apiRequest("getTypeAtLocations", {
736
+ snapshot: this.snapshotId,
737
+ project: this.project.id,
738
+ locations: nodeOrNodes.map(node => getNodeId(node)),
739
+ });
740
+ return data.map(d => d ? this.objectRegistry.getOrCreateType(d) : undefined);
741
+ }
742
+ const data = await this.client.apiRequest("getTypeAtLocation", {
743
+ snapshot: this.snapshotId,
744
+ project: this.project.id,
745
+ location: getNodeId(nodeOrNodes),
746
+ });
747
+ return data ? this.objectRegistry.getOrCreateType(data) : undefined;
748
+ }
749
+ async getSignaturesOfType(type, kind) {
750
+ const data = await this.client.apiRequest("getSignaturesOfType", {
751
+ snapshot: this.snapshotId,
752
+ project: this.project.id,
753
+ type: type.id,
754
+ kind,
755
+ });
756
+ return data.map(d => this.objectRegistry.getOrCreateSignature(d));
757
+ }
758
+ async getResolvedSignature(node) {
759
+ const data = await this.client.apiRequest("getResolvedSignature", {
760
+ snapshot: this.snapshotId,
761
+ project: this.project.id,
762
+ location: getNodeId(node),
763
+ });
764
+ return data ? this.objectRegistry.getOrCreateSignature(data) : undefined;
765
+ }
766
+ async getTypeAtPosition(file, positionOrPositions) {
767
+ if (typeof positionOrPositions === "number") {
768
+ const data = await this.client.apiRequest("getTypeAtPosition", {
769
+ snapshot: this.snapshotId,
770
+ project: this.project.id,
771
+ file,
772
+ position: positionOrPositions,
773
+ });
774
+ return data ? this.objectRegistry.getOrCreateType(data) : undefined;
775
+ }
776
+ const data = await this.client.apiRequest("getTypesAtPositions", {
777
+ snapshot: this.snapshotId,
778
+ project: this.project.id,
779
+ file,
780
+ positions: positionOrPositions,
781
+ });
782
+ return data.map(d => d ? this.objectRegistry.getOrCreateType(d) : undefined);
783
+ }
784
+ async resolveName(name, meaning, location, excludeGlobals) {
785
+ // Distinguish Node (has `kind`) from DocumentPosition (has `document` and `position`)
786
+ const isNode = location && "kind" in location;
787
+ const data = await this.client.apiRequest("resolveName", {
788
+ snapshot: this.snapshotId,
789
+ project: this.project.id,
790
+ name,
791
+ meaning,
792
+ location: isNode ? getNodeId(location) : undefined,
793
+ file: !isNode && location ? location.document : undefined,
794
+ position: !isNode && location ? location.position : undefined,
795
+ excludeGlobals,
796
+ });
797
+ return data ? this.objectRegistry.getOrCreateSymbol(data) : undefined;
798
+ }
799
+ async getResolvedSymbol(node) {
800
+ const text = node.text;
801
+ if (!text)
802
+ return undefined;
803
+ return this.resolveName(text, SymbolFlags.Value | SymbolFlags.ExportValue, node);
804
+ }
805
+ async getContextualType(node) {
806
+ const data = await this.client.apiRequest("getContextualType", {
807
+ snapshot: this.snapshotId,
808
+ project: this.project.id,
809
+ location: getNodeId(node),
810
+ });
811
+ return data ? this.objectRegistry.getOrCreateType(data) : undefined;
812
+ }
813
+ async getBaseTypeOfLiteralType(type) {
814
+ const data = await this.client.apiRequest("getBaseTypeOfLiteralType", {
815
+ snapshot: this.snapshotId,
816
+ project: this.project.id,
817
+ type: type.id,
818
+ });
819
+ return data ? this.objectRegistry.getOrCreateType(data) : undefined;
820
+ }
821
+ async getNonNullableType(type) {
822
+ const data = await this.client.apiRequest("getNonNullableType", {
823
+ snapshot: this.snapshotId,
824
+ project: this.project.id,
825
+ type: type.id,
826
+ });
827
+ return data ? this.objectRegistry.getOrCreateType(data) : undefined;
828
+ }
829
+ async getTypeFromTypeNode(node) {
830
+ const data = await this.client.apiRequest("getTypeFromTypeNode", {
831
+ snapshot: this.snapshotId,
832
+ project: this.project.id,
833
+ location: getNodeId(node),
834
+ });
835
+ return data ? this.objectRegistry.getOrCreateType(data) : undefined;
836
+ }
837
+ async getWidenedType(type) {
838
+ const data = await this.client.apiRequest("getWidenedType", {
839
+ snapshot: this.snapshotId,
840
+ project: this.project.id,
841
+ type: type.id,
842
+ });
843
+ return data ? this.objectRegistry.getOrCreateType(data) : undefined;
844
+ }
845
+ async getParameterType(signature, index) {
846
+ const data = await this.client.apiRequest("getParameterType", {
847
+ snapshot: this.snapshotId,
848
+ project: this.project.id,
849
+ signature: signature.id,
850
+ index,
851
+ });
852
+ return data ? this.objectRegistry.getOrCreateType(data) : undefined;
853
+ }
854
+ async isArrayLikeType(type) {
855
+ return this.client.apiRequest("isArrayLikeType", {
856
+ snapshot: this.snapshotId,
857
+ project: this.project.id,
858
+ type: type.id,
859
+ });
860
+ }
861
+ async isTypeAssignableTo(source, target) {
862
+ return this.client.apiRequest("isTypeAssignableTo", {
863
+ snapshot: this.snapshotId,
864
+ project: this.project.id,
865
+ source: source.id,
866
+ target: target.id,
867
+ });
868
+ }
869
+ async getShorthandAssignmentValueSymbol(node) {
870
+ const data = await this.client.apiRequest("getShorthandAssignmentValueSymbol", {
871
+ snapshot: this.snapshotId,
872
+ project: this.project.id,
873
+ location: getNodeId(node),
874
+ });
875
+ return data ? this.objectRegistry.getOrCreateSymbol(data) : undefined;
876
+ }
877
+ /**
878
+ * Get the type of a symbol as narrowed at a specific location. Always returns
879
+ * a type; for symbols whose type cannot be determined the checker yields the
880
+ * error type (use {@link Type.isErrorType} to detect it).
881
+ */
882
+ async getTypeOfSymbolAtLocation(symbol, location) {
883
+ const data = await this.client.apiRequest("getTypeOfSymbolAtLocation", {
884
+ snapshot: this.snapshotId,
885
+ project: this.project.id,
886
+ symbol: symbol.id,
887
+ location: getNodeId(location),
888
+ });
889
+ if (!data)
890
+ throw new Error(`getTypeOfSymbolAtLocation returned no type for symbol ${symbol.id}`);
891
+ return this.objectRegistry.getOrCreateType(data);
892
+ }
893
+ async getIntrinsicType(method) {
894
+ const data = await this.client.apiRequest(method, {
895
+ snapshot: this.snapshotId,
896
+ project: this.project.id,
897
+ });
898
+ return this.objectRegistry.getOrCreateType(data);
899
+ }
900
+ async getAnyType() {
901
+ return this.getIntrinsicType("getAnyType");
902
+ }
903
+ async getStringType() {
904
+ return this.getIntrinsicType("getStringType");
905
+ }
906
+ async getNumberType() {
907
+ return this.getIntrinsicType("getNumberType");
908
+ }
909
+ async getBooleanType() {
910
+ return this.getIntrinsicType("getBooleanType");
911
+ }
912
+ async getVoidType() {
913
+ return this.getIntrinsicType("getVoidType");
914
+ }
915
+ async getUndefinedType() {
916
+ return this.getIntrinsicType("getUndefinedType");
917
+ }
918
+ async getNullType() {
919
+ return this.getIntrinsicType("getNullType");
920
+ }
921
+ async getNeverType() {
922
+ return this.getIntrinsicType("getNeverType");
923
+ }
924
+ async getUnknownType() {
925
+ return this.getIntrinsicType("getUnknownType");
926
+ }
927
+ async getBigIntType() {
928
+ return this.getIntrinsicType("getBigIntType");
929
+ }
930
+ async getESSymbolType() {
931
+ return this.getIntrinsicType("getESSymbolType");
932
+ }
933
+ async typeToTypeNode(type, enclosingDeclaration, flags) {
934
+ const binaryData = await this.client.apiRequestBinary("typeToTypeNode", {
935
+ snapshot: this.snapshotId,
936
+ project: this.project.id,
937
+ type: type.id,
938
+ location: enclosingDeclaration ? getNodeId(enclosingDeclaration) : undefined,
939
+ flags,
940
+ });
941
+ if (!binaryData)
942
+ return undefined;
943
+ return decodeNode(binaryData);
944
+ }
945
+ async signatureToSignatureDeclaration(signature, kind, enclosingDeclaration, flags) {
946
+ const binaryData = await this.client.apiRequestBinary("signatureToSignatureDeclaration", {
947
+ snapshot: this.snapshotId,
948
+ project: this.project.id,
949
+ signature: signature.id,
950
+ kind,
951
+ location: enclosingDeclaration ? getNodeId(enclosingDeclaration) : undefined,
952
+ flags,
953
+ });
954
+ if (!binaryData)
955
+ return undefined;
956
+ return decodeNode(binaryData);
957
+ }
958
+ async typeToString(type, enclosingDeclaration, flags) {
959
+ return this.client.apiRequest("typeToString", {
960
+ snapshot: this.snapshotId,
961
+ project: this.project.id,
962
+ type: type.id,
963
+ location: enclosingDeclaration ? getNodeId(enclosingDeclaration) : undefined,
964
+ flags,
965
+ });
966
+ }
967
+ async isContextSensitive(node) {
968
+ return this.client.apiRequest("isContextSensitive", {
969
+ snapshot: this.snapshotId,
970
+ project: this.project.id,
971
+ location: getNodeId(node),
972
+ });
973
+ }
974
+ async isArrayType(type) {
975
+ return this.client.apiRequest("isArrayType", {
976
+ snapshot: this.snapshotId,
977
+ project: this.project.id,
978
+ type: type.id,
979
+ });
980
+ }
981
+ async isTupleType(type) {
982
+ return this.client.apiRequest("isTupleType", {
983
+ snapshot: this.snapshotId,
984
+ project: this.project.id,
985
+ type: type.id,
986
+ });
987
+ }
988
+ async getReturnTypeOfSignature(signature) {
989
+ const data = await this.client.apiRequest("getReturnTypeOfSignature", {
990
+ snapshot: this.snapshotId,
991
+ project: this.project.id,
992
+ signature: signature.id,
993
+ });
994
+ return data ? this.objectRegistry.getOrCreateType(data) : undefined;
995
+ }
996
+ async getRestTypeOfSignature(signature) {
997
+ const data = await this.client.apiRequest("getRestTypeOfSignature", {
998
+ snapshot: this.snapshotId,
999
+ project: this.project.id,
1000
+ signature: signature.id,
1001
+ });
1002
+ return data ? this.objectRegistry.getOrCreateType(data) : undefined;
1003
+ }
1004
+ async getTypePredicateOfSignature(signature) {
1005
+ const data = await this.client.apiRequest("getTypePredicateOfSignature", {
1006
+ snapshot: this.snapshotId,
1007
+ project: this.project.id,
1008
+ signature: signature.id,
1009
+ });
1010
+ if (!data)
1011
+ return undefined;
1012
+ return {
1013
+ kind: data.kind,
1014
+ parameterIndex: data.parameterIndex,
1015
+ parameterName: data.parameterName,
1016
+ type: data.type ? this.objectRegistry.getOrCreateType(data.type) : undefined,
1017
+ };
1018
+ }
1019
+ /**
1020
+ * Get the base types of a class or interface type. A type with no base types
1021
+ * yields an empty array.
1022
+ */
1023
+ async getBaseTypes(type) {
1024
+ const data = await this.client.apiRequest("getBaseTypes", {
1025
+ snapshot: this.snapshotId,
1026
+ project: this.project.id,
1027
+ type: type.id,
1028
+ });
1029
+ return data ? data.map(d => this.objectRegistry.getOrCreateType(d)) : [];
1030
+ }
1031
+ async getApparentType(type) {
1032
+ const data = await this.client.apiRequest("getApparentType", {
1033
+ snapshot: this.snapshotId,
1034
+ project: this.project.id,
1035
+ type: type.id,
1036
+ });
1037
+ return data ? this.objectRegistry.getOrCreateType(data) : undefined;
1038
+ }
1039
+ async getPropertiesOfType(type) {
1040
+ const data = await this.client.apiRequest("getPropertiesOfType", {
1041
+ snapshot: this.snapshotId,
1042
+ project: this.project.id,
1043
+ type: type.id,
1044
+ });
1045
+ return data ? data.map(d => this.objectRegistry.getOrCreateSymbol(d)) : [];
1046
+ }
1047
+ async getIndexInfosOfType(type) {
1048
+ const data = await this.client.apiRequest("getIndexInfosOfType", {
1049
+ snapshot: this.snapshotId,
1050
+ project: this.project.id,
1051
+ type: type.id,
1052
+ });
1053
+ if (!data)
1054
+ return [];
1055
+ return data.map(d => ({
1056
+ keyType: this.objectRegistry.getOrCreateType(d.keyType),
1057
+ valueType: this.objectRegistry.getOrCreateType(d.valueType),
1058
+ isReadonly: d.isReadonly ?? false,
1059
+ declaration: d.declaration ? new NodeHandle(d.declaration, this.project) : undefined,
1060
+ }));
1061
+ }
1062
+ /**
1063
+ * Get the constraint of a type parameter (the `T` in `<U extends T>`), or
1064
+ * undefined if it has none.
1065
+ */
1066
+ async getConstraintOfTypeParameter(type) {
1067
+ const data = await this.client.apiRequest("getConstraintOfTypeParameter", {
1068
+ snapshot: this.snapshotId,
1069
+ project: this.project.id,
1070
+ type: type.id,
1071
+ });
1072
+ return data ? this.objectRegistry.getOrCreateType(data) : undefined;
1073
+ }
1074
+ async getBaseConstraintOfType(type) {
1075
+ const data = await this.client.apiRequest("getBaseConstraintOfType", {
1076
+ snapshot: this.snapshotId,
1077
+ project: this.project.id,
1078
+ type: type.id,
1079
+ });
1080
+ return data ? this.objectRegistry.getOrCreateType(data) : undefined;
1081
+ }
1082
+ async getPropertyOfType(type, name) {
1083
+ const data = await this.client.apiRequest("getPropertyOfType", {
1084
+ snapshot: this.snapshotId,
1085
+ project: this.project.id,
1086
+ type: type.id,
1087
+ name,
1088
+ });
1089
+ return data ? this.objectRegistry.getOrCreateSymbol(data) : undefined;
1090
+ }
1091
+ async getConstantValue(node) {
1092
+ const data = await this.client.apiRequest("getConstantValue", {
1093
+ snapshot: this.snapshotId,
1094
+ project: this.project.id,
1095
+ location: getNodeId(node),
1096
+ });
1097
+ return data ?? undefined;
1098
+ }
1099
+ async getSignatureFromDeclaration(node) {
1100
+ const data = await this.client.apiRequest("getSignatureFromDeclaration", {
1101
+ snapshot: this.snapshotId,
1102
+ project: this.project.id,
1103
+ location: getNodeId(node),
1104
+ });
1105
+ return data ? this.objectRegistry.getOrCreateSignature(data) : undefined;
1106
+ }
1107
+ async getExportSpecifierLocalTargetSymbol(node) {
1108
+ const data = await this.client.apiRequest("getExportSpecifierLocalTargetSymbol", {
1109
+ snapshot: this.snapshotId,
1110
+ project: this.project.id,
1111
+ location: getNodeId(node),
1112
+ });
1113
+ return data ? this.objectRegistry.getOrCreateSymbol(data) : undefined;
1114
+ }
1115
+ /**
1116
+ * Follow all aliases to get the original symbol. Always returns a symbol; for
1117
+ * an unresolved alias the checker yields the unknown symbol (use
1118
+ * {@link Checker.isUnknownSymbol} to detect it).
1119
+ */
1120
+ async getAliasedSymbol(symbol) {
1121
+ const data = await this.client.apiRequest("getAliasedSymbol", {
1122
+ snapshot: this.snapshotId,
1123
+ project: this.project.id,
1124
+ symbol: symbol.id,
1125
+ });
1126
+ if (!data)
1127
+ throw new Error(`getAliasedSymbol returned no symbol for symbol ${symbol.id}`);
1128
+ return this.objectRegistry.getOrCreateSymbol(data);
1129
+ }
1130
+ async getImmediateAliasedSymbol(symbol) {
1131
+ const data = await this.client.apiRequest("getImmediateAliasedSymbol", {
1132
+ snapshot: this.snapshotId,
1133
+ project: this.project.id,
1134
+ symbol: symbol.id,
1135
+ });
1136
+ return data ? this.objectRegistry.getOrCreateSymbol(data) : undefined;
1137
+ }
1138
+ /**
1139
+ * Fetch (once, then cache) the handle ids of the per-checker singleton
1140
+ * symbols (unknown, undefined, arguments). These ids are stable for the life
1141
+ * of the project's checker, so identity checks against them are local after
1142
+ * the first call.
1143
+ */
1144
+ getWellKnownSymbols() {
1145
+ return this.wellKnownSymbols ??= this.client.apiRequest("getWellKnownSymbols", {
1146
+ snapshot: this.snapshotId,
1147
+ project: this.project.id,
1148
+ });
1149
+ }
1150
+ /**
1151
+ * Returns `true` if the symbol is the checker's "unknown" symbol (e.g. the
1152
+ * result of {@link Checker.getAliasedSymbol} on an unresolved alias).
1153
+ */
1154
+ async isUnknownSymbol(symbol) {
1155
+ return symbol.id === (await this.getWellKnownSymbols()).unknown;
1156
+ }
1157
+ /**
1158
+ * Returns `true` if the symbol is the checker's "undefined" symbol.
1159
+ */
1160
+ async isUndefinedSymbol(symbol) {
1161
+ return symbol.id === (await this.getWellKnownSymbols()).undefined;
1162
+ }
1163
+ /**
1164
+ * Returns `true` if the symbol is the checker's "arguments" symbol.
1165
+ */
1166
+ async isArgumentsSymbol(symbol) {
1167
+ return symbol.id === (await this.getWellKnownSymbols()).arguments;
1168
+ }
1169
+ async getExportsOfModule(symbol) {
1170
+ const data = await this.client.apiRequest("getExportsOfModule", {
1171
+ snapshot: this.snapshotId,
1172
+ project: this.project.id,
1173
+ symbol: symbol.id,
1174
+ });
1175
+ return data ? data.map(d => this.objectRegistry.getOrCreateSymbol(d)) : [];
1176
+ }
1177
+ async getMemberInModuleExports(symbol, name) {
1178
+ const data = await this.client.apiRequest("getMemberInModuleExports", {
1179
+ snapshot: this.snapshotId,
1180
+ project: this.project.id,
1181
+ symbol: symbol.id,
1182
+ name,
1183
+ });
1184
+ return data ? this.objectRegistry.getOrCreateSymbol(data) : undefined;
1185
+ }
1186
+ async getJsDocTagsOfSymbol(symbol) {
1187
+ const data = await this.client.apiRequest("getJsDocTags", {
1188
+ snapshot: this.snapshotId,
1189
+ project: this.project.id,
1190
+ symbol: symbol.id,
1191
+ });
1192
+ return data ?? [];
1193
+ }
1194
+ async getDocumentationCommentOfSymbol(symbol) {
1195
+ return this.client.apiRequest("getDocumentationComment", {
1196
+ snapshot: this.snapshotId,
1197
+ project: this.project.id,
1198
+ symbol: symbol.id,
1199
+ });
1200
+ }
1201
+ /**
1202
+ * Get the type arguments of a type reference (e.g. the `string` in `Array<string>`).
1203
+ */
1204
+ async getTypeArguments(type) {
1205
+ const data = await this.client.apiRequest("getTypeArguments", {
1206
+ snapshot: this.snapshotId,
1207
+ project: this.project.id,
1208
+ type: type.id,
1209
+ });
1210
+ return data ? data.map(d => this.objectRegistry.getOrCreateType(d)) : [];
1211
+ }
1212
+ }
1213
+ export class Emitter {
1214
+ client;
1215
+ constructor(client) {
1216
+ this.client = client;
1217
+ }
1218
+ async printNode(node, options = {}) {
1219
+ const encoded = encodeNode(node);
1220
+ const base64 = uint8ArrayToBase64(encoded);
1221
+ return this.client.apiRequest("printNode", {
1222
+ data: base64,
1223
+ ...options,
1224
+ });
1225
+ }
1226
+ }
1227
+ export class NodeHandle {
1228
+ /**
1229
+ * The project this handle was produced in, used as the default for {@link resolve}.
1230
+ * Node handles are only meaningful within a project's program, so the producing project
1231
+ * is remembered so callers don't have to pass it explicitly.
1232
+ */
1233
+ canonicalProject;
1234
+ index;
1235
+ kind;
1236
+ path;
1237
+ constructor(handle, canonicalProject) {
1238
+ const parsed = parseNodeHandle(handle);
1239
+ this.index = parsed.index;
1240
+ this.kind = parsed.kind;
1241
+ this.path = parsed.path;
1242
+ this.canonicalProject = canonicalProject;
1243
+ }
1244
+ /**
1245
+ * Resolve this handle to the actual AST node by fetching the source file from a project
1246
+ * and looking up the node by index. If no project is passed, the project that produced
1247
+ * the handle is used.
1248
+ */
1249
+ async resolve(project = this.canonicalProject) {
1250
+ const sourceFile = await project.program.getSourceFile(this.path);
1251
+ if (!sourceFile) {
1252
+ return undefined;
1253
+ }
1254
+ return sourceFile.getOrCreateNodeAtIndex(this.index);
1255
+ }
1256
+ }
1257
+ export class Symbol {
1258
+ objectRegistry;
1259
+ /**
1260
+ * The project this symbol was first observed in, used as the default project for
1261
+ * lookups that need a project context (members/exports/parent). Symbols are shared
1262
+ * snapshot-wide, so these lookups can otherwise be ambiguous about which project to use.
1263
+ */
1264
+ canonicalProject;
1265
+ id;
1266
+ /** The escaped (`__String`) name, used as the key in member/export tables. */
1267
+ escapedName;
1268
+ /** The display name (escaped underscores removed). */
1269
+ name;
1270
+ flags;
1271
+ checkFlags;
1272
+ declarations;
1273
+ valueDeclaration;
1274
+ parent;
1275
+ exportSymbol;
1276
+ membersCache;
1277
+ exportsCache;
1278
+ constructor(data, objectRegistry) {
1279
+ this.objectRegistry = objectRegistry;
1280
+ this.id = data.id;
1281
+ this.escapedName = data.name;
1282
+ this.name = unescapeLeadingUnderscores(data.name);
1283
+ this.flags = data.flags;
1284
+ this.checkFlags = data.checkFlags;
1285
+ const canonicalProject = objectRegistry.getProject(data.project);
1286
+ if (!canonicalProject) {
1287
+ throw new Error(`Symbol ${data.id} references unknown canonical project '${data.project}'`);
1288
+ }
1289
+ this.canonicalProject = canonicalProject;
1290
+ this.declarations = (data.declarations ?? []).map(d => new NodeHandle(d, canonicalProject));
1291
+ this.valueDeclaration = data.valueDeclaration ? new NodeHandle(data.valueDeclaration, canonicalProject) : undefined;
1292
+ if (data.parent !== undefined)
1293
+ this.parent = data.parent;
1294
+ if (data.exportSymbol !== undefined)
1295
+ this.exportSymbol = data.exportSymbol;
1296
+ }
1297
+ async getParent() {
1298
+ return this.objectRegistry.fetchSymbol(this, "getParentOfSymbol", this.parent, this.canonicalProject.id);
1299
+ }
1300
+ /**
1301
+ * Get this symbol's members keyed by escaped name. The result is cached on
1302
+ * the symbol, so repeated calls do not round-trip to the server.
1303
+ */
1304
+ getMembers() {
1305
+ return this.membersCache ??= this.fetchSymbolTable("getMembersOfSymbol");
1306
+ }
1307
+ /**
1308
+ * Get this symbol's exports keyed by escaped name. The result is cached on
1309
+ * the symbol, so repeated calls do not round-trip to the server.
1310
+ */
1311
+ getExports() {
1312
+ return this.exportsCache ??= this.fetchSymbolTable("getExportsOfSymbol");
1313
+ }
1314
+ async fetchSymbolTable(method) {
1315
+ const symbols = await this.objectRegistry.fetchSymbols(this, method, undefined, this.canonicalProject.id);
1316
+ const table = new Map();
1317
+ for (const symbol of symbols) {
1318
+ table.set(symbol.escapedName, symbol);
1319
+ }
1320
+ return table;
1321
+ }
1322
+ async getExportSymbol() {
1323
+ if (!this.exportSymbol)
1324
+ return this;
1325
+ return this.objectRegistry.fetchSymbol(this, "getExportSymbolOfSymbol", this.exportSymbol, this.canonicalProject.id);
1326
+ }
1327
+ async getJsDocTags(checker) {
1328
+ return checker.getJsDocTagsOfSymbol(this);
1329
+ }
1330
+ async getDocumentationComment(checker) {
1331
+ return checker.getDocumentationCommentOfSymbol(this);
1332
+ }
1333
+ }
1334
+ class TypeObject {
1335
+ objectRegistry;
1336
+ id;
1337
+ flags;
1338
+ objectFlags;
1339
+ symbol;
1340
+ value;
1341
+ intrinsicName;
1342
+ isThisType;
1343
+ freshType;
1344
+ regularType;
1345
+ target;
1346
+ typeParameters;
1347
+ outerTypeParameters;
1348
+ localTypeParameters;
1349
+ aliasTypeArguments;
1350
+ aliasSymbol;
1351
+ elementFlags;
1352
+ fixedLength;
1353
+ readonly;
1354
+ texts;
1355
+ objectType;
1356
+ indexType;
1357
+ checkType;
1358
+ extendsType;
1359
+ baseType;
1360
+ substConstraint;
1361
+ trueType; // false if not yet loaded
1362
+ falseType; // false if not yet loaded
1363
+ constructor(data, objectRegistry) {
1364
+ this.objectRegistry = objectRegistry;
1365
+ this.id = data.id;
1366
+ this.flags = data.flags;
1367
+ if (data.objectFlags !== undefined)
1368
+ this.objectFlags = data.objectFlags;
1369
+ if (data.symbol !== undefined)
1370
+ this.symbol = data.symbol;
1371
+ if (data.value != null) {
1372
+ // BigInt literal values are serialized as decimal strings (e.g. "-123") because
1373
+ // JSON cannot represent bigint. Decode them back into a real bigint here.
1374
+ this.value = (data.flags & TypeFlags.BigIntLiteral) ? BigInt(data.value) : data.value;
1375
+ }
1376
+ if (data.intrinsicName !== undefined)
1377
+ this.intrinsicName = data.intrinsicName;
1378
+ if (data.isThisType !== undefined)
1379
+ this.isThisType = data.isThisType;
1380
+ if (data.freshType !== undefined)
1381
+ this.freshType = data.freshType;
1382
+ if (data.regularType !== undefined)
1383
+ this.regularType = data.regularType;
1384
+ if (data.target !== undefined)
1385
+ this.target = data.target;
1386
+ this.typeParameters = data.typeParameters ?? [];
1387
+ this.outerTypeParameters = data.outerTypeParameters ?? [];
1388
+ this.localTypeParameters = data.localTypeParameters ?? [];
1389
+ this.aliasTypeArguments = data.aliasTypeArguments ?? [];
1390
+ if (data.aliasSymbol !== undefined)
1391
+ this.aliasSymbol = data.aliasSymbol;
1392
+ if (data.elementFlags !== undefined)
1393
+ this.elementFlags = data.elementFlags;
1394
+ if (data.fixedLength !== undefined)
1395
+ this.fixedLength = data.fixedLength;
1396
+ if (data.readonly !== undefined)
1397
+ this.readonly = data.readonly;
1398
+ if (data.texts !== undefined)
1399
+ this.texts = data.texts;
1400
+ if (data.objectType !== undefined)
1401
+ this.objectType = data.objectType;
1402
+ if (data.indexType !== undefined)
1403
+ this.indexType = data.indexType;
1404
+ if (data.checkType !== undefined)
1405
+ this.checkType = data.checkType;
1406
+ if (data.extendsType !== undefined)
1407
+ this.extendsType = data.extendsType;
1408
+ if (data.baseType !== undefined)
1409
+ this.baseType = data.baseType;
1410
+ if (data.substConstraint !== undefined)
1411
+ this.substConstraint = data.substConstraint;
1412
+ this.trueType = false;
1413
+ this.falseType = false;
1414
+ }
1415
+ async getSymbol() {
1416
+ return this.objectRegistry.fetchSymbol(this, "getSymbolOfType", this.symbol);
1417
+ }
1418
+ async getAliasSymbol() {
1419
+ return this.objectRegistry.fetchSymbol(this, "getAliasSymbolOfType", this.aliasSymbol);
1420
+ }
1421
+ async getTarget() {
1422
+ return this.objectRegistry.fetchType(this, "getTargetOfType", this.target);
1423
+ }
1424
+ async getFreshType() {
1425
+ return this.objectRegistry.fetchType(this, "getFreshTypeOfType", this.freshType);
1426
+ }
1427
+ async getRegularType() {
1428
+ return this.objectRegistry.fetchType(this, "getRegularTypeOfType", this.regularType);
1429
+ }
1430
+ async getTypes() {
1431
+ // Only union, intersection, and template literal types have constituent
1432
+ // types; any other kind has none, so return undefined rather than sending
1433
+ // a request the server cannot satisfy.
1434
+ if (!(this.flags & (TypeFlags.UnionOrIntersection | TypeFlags.TemplateLiteral))) {
1435
+ return undefined;
1436
+ }
1437
+ return this.objectRegistry.fetchTypes(this, "getTypesOfType");
1438
+ }
1439
+ async getTypeParameters() {
1440
+ return this.objectRegistry.fetchTypes(this, "getTypeParametersOfType", this.typeParameters);
1441
+ }
1442
+ async getOuterTypeParameters() {
1443
+ return this.objectRegistry.fetchTypes(this, "getOuterTypeParametersOfType", this.outerTypeParameters);
1444
+ }
1445
+ async getLocalTypeParameters() {
1446
+ return this.objectRegistry.fetchTypes(this, "getLocalTypeParametersOfType", this.localTypeParameters);
1447
+ }
1448
+ async getAliasTypeArguments() {
1449
+ return this.objectRegistry.fetchTypes(this, "getAliasTypeArgumentsOfType", this.aliasTypeArguments);
1450
+ }
1451
+ async getObjectType() {
1452
+ return this.objectRegistry.fetchType(this, "getObjectTypeOfType", this.objectType);
1453
+ }
1454
+ async getIndexType() {
1455
+ return this.objectRegistry.fetchType(this, "getIndexTypeOfType", this.indexType);
1456
+ }
1457
+ async getCheckType() {
1458
+ return this.objectRegistry.fetchType(this, "getCheckTypeOfType", this.checkType);
1459
+ }
1460
+ async getExtendsType() {
1461
+ return this.objectRegistry.fetchType(this, "getExtendsTypeOfType", this.extendsType);
1462
+ }
1463
+ async getBaseType() {
1464
+ return this.objectRegistry.fetchType(this, "getBaseTypeOfType", this.baseType);
1465
+ }
1466
+ async getConstraint() {
1467
+ return this.objectRegistry.fetchType(this, "getConstraintOfType", this.substConstraint);
1468
+ }
1469
+ async getTrueType() {
1470
+ const result = await this.objectRegistry.fetchType(this, "getTrueTypeOfConditionalType", this.trueType);
1471
+ this.trueType = result.id;
1472
+ return result;
1473
+ }
1474
+ async getFalseType() {
1475
+ const result = await this.objectRegistry.fetchType(this, "getFalseTypeOfConditionalType", this.falseType);
1476
+ this.falseType = result.id;
1477
+ return result;
1478
+ }
1479
+ /**
1480
+ * Get the base types of this type. Returns `undefined` for any type that is
1481
+ * not a class or interface.
1482
+ */
1483
+ async getBaseTypes() {
1484
+ if (!this.isClassOrInterface()) {
1485
+ return undefined;
1486
+ }
1487
+ return this.objectRegistry.fetchBaseTypes(this);
1488
+ }
1489
+ isClassOrInterface() {
1490
+ return isClassOrInterfaceType(this);
1491
+ }
1492
+ isUnionType() {
1493
+ return isUnionType(this);
1494
+ }
1495
+ isIntersectionType() {
1496
+ return isIntersectionType(this);
1497
+ }
1498
+ isObjectType() {
1499
+ return isObjectType(this);
1500
+ }
1501
+ isIntrinsicType() {
1502
+ return isIntrinsicType(this);
1503
+ }
1504
+ isErrorType() {
1505
+ return isErrorType(this);
1506
+ }
1507
+ isLiteralType() {
1508
+ return isLiteralType(this);
1509
+ }
1510
+ isStringLiteralType() {
1511
+ return isStringLiteralType(this);
1512
+ }
1513
+ isNumberLiteralType() {
1514
+ return isNumberLiteralType(this);
1515
+ }
1516
+ isBigIntLiteralType() {
1517
+ return isBigIntLiteralType(this);
1518
+ }
1519
+ isBooleanLiteralType() {
1520
+ return isBooleanLiteralType(this);
1521
+ }
1522
+ isTypeReference() {
1523
+ return isTypeReference(this);
1524
+ }
1525
+ isTupleType() {
1526
+ return isTupleType(this);
1527
+ }
1528
+ isIndexType() {
1529
+ return isIndexType(this);
1530
+ }
1531
+ isIndexedAccessType() {
1532
+ return isIndexedAccessType(this);
1533
+ }
1534
+ isConditionalType() {
1535
+ return isConditionalType(this);
1536
+ }
1537
+ isSubstitutionType() {
1538
+ return isSubstitutionType(this);
1539
+ }
1540
+ isTemplateLiteralType() {
1541
+ return isTemplateLiteralType(this);
1542
+ }
1543
+ isStringMappingType() {
1544
+ return isStringMappingType(this);
1545
+ }
1546
+ isTypeParameter() {
1547
+ return isTypeParameter(this);
1548
+ }
1549
+ }
1550
+ export function isUnionType(type) {
1551
+ return (type.flags & TypeFlags.Union) !== 0;
1552
+ }
1553
+ export function isIntersectionType(type) {
1554
+ return (type.flags & TypeFlags.Intersection) !== 0;
1555
+ }
1556
+ export function isObjectType(type) {
1557
+ return (type.flags & TypeFlags.Object) !== 0;
1558
+ }
1559
+ export function isClassOrInterfaceType(type) {
1560
+ return isObjectType(type) && (type.objectFlags & ObjectFlags.ClassOrInterface) !== 0;
1561
+ }
1562
+ export function isIntrinsicType(type) {
1563
+ return (type.flags & TypeFlags.Intrinsic) !== 0;
1564
+ }
1565
+ /**
1566
+ * Whether this is the error type — the placeholder the checker produces when a
1567
+ * type cannot be determined (e.g. an unresolved reference). It is an intrinsic
1568
+ * type named `"error"` (this covers both the singleton error type and the
1569
+ * per-alias error types manufactured for unresolved type alias references).
1570
+ */
1571
+ export function isErrorType(type) {
1572
+ return isIntrinsicType(type) && type.intrinsicName === "error";
1573
+ }
1574
+ export function isLiteralType(type) {
1575
+ return (type.flags & TypeFlags.Literal) !== 0;
1576
+ }
1577
+ export function isStringLiteralType(type) {
1578
+ return (type.flags & TypeFlags.StringLiteral) !== 0;
1579
+ }
1580
+ export function isNumberLiteralType(type) {
1581
+ return (type.flags & TypeFlags.NumberLiteral) !== 0;
1582
+ }
1583
+ export function isBigIntLiteralType(type) {
1584
+ return (type.flags & TypeFlags.BigIntLiteral) !== 0;
1585
+ }
1586
+ export function isBooleanLiteralType(type) {
1587
+ return (type.flags & TypeFlags.BooleanLiteral) !== 0;
1588
+ }
1589
+ export function isTypeReference(type) {
1590
+ return isObjectType(type) && (type.objectFlags & ObjectFlags.Reference) !== 0;
1591
+ }
1592
+ export function isTupleType(type) {
1593
+ return isObjectType(type) && (type.objectFlags & ObjectFlags.Tuple) !== 0;
1594
+ }
1595
+ export function isIndexType(type) {
1596
+ return (type.flags & TypeFlags.Index) !== 0;
1597
+ }
1598
+ export function isIndexedAccessType(type) {
1599
+ return (type.flags & TypeFlags.IndexedAccess) !== 0;
1600
+ }
1601
+ export function isConditionalType(type) {
1602
+ return (type.flags & TypeFlags.Conditional) !== 0;
1603
+ }
1604
+ export function isSubstitutionType(type) {
1605
+ return (type.flags & TypeFlags.Substitution) !== 0;
1606
+ }
1607
+ export function isTemplateLiteralType(type) {
1608
+ return (type.flags & TypeFlags.TemplateLiteral) !== 0;
1609
+ }
1610
+ export function isStringMappingType(type) {
1611
+ return (type.flags & TypeFlags.StringMapping) !== 0;
1612
+ }
1613
+ export function isTypeParameter(type) {
1614
+ return (type.flags & TypeFlags.TypeParameter) !== 0;
1615
+ }
1616
+ export class Signature {
1617
+ flags;
1618
+ objectRegistry;
1619
+ id;
1620
+ declaration;
1621
+ typeParameters;
1622
+ parameters;
1623
+ thisParameter;
1624
+ target;
1625
+ constructor(data, project, objectRegistry) {
1626
+ this.id = data.id;
1627
+ this.flags = data.flags;
1628
+ this.objectRegistry = objectRegistry;
1629
+ this.declaration = data.declaration ? new NodeHandle(data.declaration, project) : undefined;
1630
+ this.typeParameters = data.typeParameters ?? [];
1631
+ this.parameters = data.parameters ?? [];
1632
+ this.thisParameter = data.thisParameter;
1633
+ this.target = data.target;
1634
+ }
1635
+ async getTypeParameters() {
1636
+ return this.objectRegistry.fetchTypes(this, "getTypeParametersOfSignature", this.typeParameters);
1637
+ }
1638
+ async getParameters() {
1639
+ return this.objectRegistry.fetchSymbols(this, "getParametersOfSignature", this.parameters);
1640
+ }
1641
+ async getThisParameter() {
1642
+ return this.objectRegistry.fetchSymbol(this, "getThisParameterOfSignature", this.thisParameter);
1643
+ }
1644
+ async getTarget() {
1645
+ return this.objectRegistry.fetchSignature(this, "getTargetOfSignature", this.target);
1646
+ }
1647
+ get hasRestParameter() {
1648
+ return (this.flags & SignatureFlags.HasRestParameter) !== 0;
1649
+ }
1650
+ get isConstruct() {
1651
+ return (this.flags & SignatureFlags.Construct) !== 0;
1652
+ }
1653
+ get isAbstract() {
1654
+ return (this.flags & SignatureFlags.Abstract) !== 0;
1655
+ }
1656
+ }
1657
+ //# sourceMappingURL=api.js.map