@typescript/native-preview 7.0.0-dev.20260422.1 → 7.0.0-dev.20260423.1

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 (327) hide show
  1. package/dist/api/async/api.d.ts +241 -0
  2. package/dist/api/async/api.d.ts.map +1 -0
  3. package/dist/api/async/api.js +810 -0
  4. package/dist/api/async/api.js.map +1 -0
  5. package/dist/api/async/client.d.ts +22 -0
  6. package/dist/api/async/client.d.ts.map +1 -0
  7. package/dist/api/async/client.js +140 -0
  8. package/dist/api/async/client.js.map +1 -0
  9. package/dist/api/async/types.d.ts +179 -0
  10. package/dist/api/async/types.d.ts.map +1 -0
  11. package/dist/api/async/types.js +2 -0
  12. package/dist/api/async/types.js.map +1 -0
  13. package/dist/api/fs.d.ts +23 -0
  14. package/dist/api/fs.d.ts.map +1 -0
  15. package/dist/api/fs.js +109 -0
  16. package/dist/api/fs.js.map +1 -0
  17. package/dist/api/node/encoder.d.ts +15 -0
  18. package/dist/api/node/encoder.d.ts.map +1 -0
  19. package/dist/api/node/encoder.generated.d.ts +5 -0
  20. package/dist/api/node/encoder.generated.d.ts.map +1 -0
  21. package/dist/api/node/encoder.generated.js +74 -0
  22. package/dist/api/node/encoder.generated.js.map +1 -0
  23. package/dist/api/node/encoder.js +304 -0
  24. package/dist/api/node/encoder.js.map +1 -0
  25. package/dist/api/node/msgpack.d.ts +32 -0
  26. package/dist/api/node/msgpack.d.ts.map +1 -0
  27. package/dist/api/node/msgpack.js +212 -0
  28. package/dist/api/node/msgpack.js.map +1 -0
  29. package/dist/api/node/node.d.ts +63 -0
  30. package/dist/api/node/node.d.ts.map +1 -0
  31. package/dist/api/node/node.generated.d.ts +172 -0
  32. package/dist/api/node/node.generated.d.ts.map +1 -0
  33. package/dist/api/node/node.generated.js +817 -0
  34. package/dist/api/node/node.generated.js.map +1 -0
  35. package/dist/api/node/node.infrastructure.d.ts +51 -0
  36. package/dist/api/node/node.infrastructure.d.ts.map +1 -0
  37. package/dist/api/node/node.infrastructure.js +122 -0
  38. package/dist/api/node/node.infrastructure.js.map +1 -0
  39. package/dist/api/node/node.js +201 -0
  40. package/dist/api/node/node.js.map +1 -0
  41. package/dist/api/node/protocol.d.ts +29 -0
  42. package/dist/api/node/protocol.d.ts.map +1 -0
  43. package/dist/api/node/protocol.generated.d.ts +4 -0
  44. package/dist/api/node/protocol.generated.d.ts.map +1 -0
  45. package/dist/api/node/protocol.generated.js +241 -0
  46. package/dist/api/node/protocol.generated.js.map +1 -0
  47. package/dist/api/node/protocol.js +30 -0
  48. package/dist/api/node/protocol.js.map +1 -0
  49. package/dist/api/objectRegistry.d.ts +38 -0
  50. package/dist/api/objectRegistry.d.ts.map +1 -0
  51. package/dist/api/objectRegistry.js +55 -0
  52. package/dist/api/objectRegistry.js.map +1 -0
  53. package/dist/api/options.d.ts +24 -0
  54. package/dist/api/options.d.ts.map +1 -0
  55. package/dist/api/options.js +11 -0
  56. package/dist/api/options.js.map +1 -0
  57. package/dist/api/path.d.ts +110 -0
  58. package/dist/api/path.d.ts.map +1 -0
  59. package/dist/api/path.js +508 -0
  60. package/dist/api/path.js.map +1 -0
  61. package/dist/api/proto.d.ts +152 -0
  62. package/dist/api/proto.d.ts.map +1 -0
  63. package/dist/api/proto.js +22 -0
  64. package/dist/api/proto.js.map +1 -0
  65. package/dist/api/sourceFileCache.d.ts +79 -0
  66. package/dist/api/sourceFileCache.d.ts.map +1 -0
  67. package/dist/api/sourceFileCache.js +169 -0
  68. package/dist/api/sourceFileCache.js.map +1 -0
  69. package/dist/api/sync/api.d.ts +241 -0
  70. package/dist/api/sync/api.d.ts.map +1 -0
  71. package/dist/api/sync/api.js +818 -0
  72. package/dist/api/sync/api.js.map +1 -0
  73. package/dist/api/sync/client.d.ts +13 -0
  74. package/dist/api/sync/client.d.ts.map +1 -0
  75. package/dist/api/sync/client.js +72 -0
  76. package/dist/api/sync/client.js.map +1 -0
  77. package/dist/api/sync/types.d.ts +179 -0
  78. package/dist/api/sync/types.d.ts.map +1 -0
  79. package/dist/api/sync/types.js +2 -0
  80. package/dist/api/sync/types.js.map +1 -0
  81. package/dist/api/syncChannel.d.ts +111 -0
  82. package/dist/api/syncChannel.d.ts.map +1 -0
  83. package/dist/api/syncChannel.js +488 -0
  84. package/dist/api/syncChannel.js.map +1 -0
  85. package/dist/ast/ast.d.ts +66 -0
  86. package/dist/ast/ast.d.ts.map +1 -0
  87. package/dist/ast/ast.generated.d.ts +1160 -0
  88. package/dist/ast/ast.generated.d.ts.map +1 -0
  89. package/dist/ast/ast.generated.js +4 -0
  90. package/dist/ast/ast.generated.js.map +1 -0
  91. package/dist/ast/ast.js +7 -0
  92. package/dist/ast/ast.js.map +1 -0
  93. package/dist/ast/astnav.d.ts +19 -0
  94. package/dist/ast/astnav.d.ts.map +1 -0
  95. package/dist/ast/astnav.js +596 -0
  96. package/dist/ast/astnav.js.map +1 -0
  97. package/dist/ast/clone.d.ts +16 -0
  98. package/dist/ast/clone.d.ts.map +1 -0
  99. package/dist/ast/clone.js +104 -0
  100. package/dist/ast/clone.js.map +1 -0
  101. package/dist/ast/factory.generated.d.ts +513 -0
  102. package/dist/ast/factory.generated.d.ts.map +1 -0
  103. package/dist/ast/factory.generated.js +3026 -0
  104. package/dist/ast/factory.generated.js.map +1 -0
  105. package/dist/ast/index.d.ts +18 -0
  106. package/dist/ast/index.d.ts.map +1 -0
  107. package/dist/ast/index.js +18 -0
  108. package/dist/ast/index.js.map +1 -0
  109. package/dist/ast/is.d.ts +34 -0
  110. package/dist/ast/is.d.ts.map +1 -0
  111. package/dist/ast/is.generated.d.ts +328 -0
  112. package/dist/ast/is.generated.d.ts.map +1 -0
  113. package/dist/ast/is.generated.js +1101 -0
  114. package/dist/ast/is.generated.js.map +1 -0
  115. package/dist/ast/is.js +226 -0
  116. package/dist/ast/is.js.map +1 -0
  117. package/dist/ast/scanner.d.ts +97 -0
  118. package/dist/ast/scanner.d.ts.map +1 -0
  119. package/dist/ast/scanner.js +2230 -0
  120. package/dist/ast/scanner.js.map +1 -0
  121. package/dist/ast/utils.d.ts +5 -0
  122. package/dist/ast/utils.d.ts.map +1 -0
  123. package/dist/ast/utils.js +27 -0
  124. package/dist/ast/utils.js.map +1 -0
  125. package/dist/ast/visitor.d.ts +14 -0
  126. package/dist/ast/visitor.d.ts.map +1 -0
  127. package/dist/ast/visitor.generated.d.ts +50 -0
  128. package/dist/ast/visitor.generated.d.ts.map +1 -0
  129. package/dist/ast/visitor.generated.js +978 -0
  130. package/dist/ast/visitor.generated.js.map +1 -0
  131. package/dist/ast/visitor.js +47 -0
  132. package/dist/ast/visitor.js.map +1 -0
  133. package/dist/enums/characterCodes.d.ts +2 -0
  134. package/dist/enums/characterCodes.d.ts.map +1 -0
  135. package/dist/enums/characterCodes.enum.d.ts +129 -0
  136. package/dist/enums/characterCodes.enum.d.ts.map +1 -0
  137. package/dist/enums/characterCodes.enum.js +132 -0
  138. package/dist/enums/characterCodes.enum.js.map +1 -0
  139. package/dist/enums/characterCodes.js +130 -0
  140. package/dist/enums/characterCodes.js.map +1 -0
  141. package/dist/enums/commentDirectiveType.d.ts +2 -0
  142. package/dist/enums/commentDirectiveType.d.ts.map +1 -0
  143. package/dist/enums/commentDirectiveType.enum.d.ts +5 -0
  144. package/dist/enums/commentDirectiveType.enum.d.ts.map +1 -0
  145. package/dist/enums/commentDirectiveType.enum.js +6 -0
  146. package/dist/enums/commentDirectiveType.enum.js.map +1 -0
  147. package/dist/enums/commentDirectiveType.js +6 -0
  148. package/dist/enums/commentDirectiveType.js.map +1 -0
  149. package/dist/enums/diagnosticCategory.d.ts +2 -0
  150. package/dist/enums/diagnosticCategory.d.ts.map +1 -0
  151. package/dist/enums/diagnosticCategory.enum.d.ts +7 -0
  152. package/dist/enums/diagnosticCategory.enum.d.ts.map +1 -0
  153. package/dist/enums/diagnosticCategory.enum.js +9 -0
  154. package/dist/enums/diagnosticCategory.enum.js.map +1 -0
  155. package/dist/enums/diagnosticCategory.js +9 -0
  156. package/dist/enums/diagnosticCategory.js.map +1 -0
  157. package/dist/enums/elementFlags.d.ts +2 -0
  158. package/dist/enums/elementFlags.d.ts.map +1 -0
  159. package/dist/enums/elementFlags.enum.d.ts +12 -0
  160. package/dist/enums/elementFlags.enum.d.ts.map +1 -0
  161. package/dist/enums/elementFlags.enum.js +14 -0
  162. package/dist/enums/elementFlags.enum.js.map +1 -0
  163. package/dist/enums/elementFlags.js +14 -0
  164. package/dist/enums/elementFlags.js.map +1 -0
  165. package/dist/enums/languageVariant.d.ts +2 -0
  166. package/dist/enums/languageVariant.d.ts.map +1 -0
  167. package/dist/enums/languageVariant.enum.d.ts +5 -0
  168. package/dist/enums/languageVariant.enum.d.ts.map +1 -0
  169. package/dist/enums/languageVariant.enum.js +6 -0
  170. package/dist/enums/languageVariant.enum.js.map +1 -0
  171. package/dist/enums/languageVariant.js +6 -0
  172. package/dist/enums/languageVariant.js.map +1 -0
  173. package/dist/enums/modifierFlags.d.ts +2 -0
  174. package/dist/enums/modifierFlags.d.ts.map +1 -0
  175. package/dist/enums/modifierFlags.enum.d.ts +42 -0
  176. package/dist/enums/modifierFlags.enum.d.ts.map +1 -0
  177. package/dist/enums/modifierFlags.enum.js +44 -0
  178. package/dist/enums/modifierFlags.enum.js.map +1 -0
  179. package/dist/enums/modifierFlags.js +44 -0
  180. package/dist/enums/modifierFlags.js.map +1 -0
  181. package/dist/enums/nodeFlags.d.ts +2 -0
  182. package/dist/enums/nodeFlags.d.ts.map +1 -0
  183. package/dist/enums/nodeFlags.enum.d.ts +41 -0
  184. package/dist/enums/nodeFlags.enum.d.ts.map +1 -0
  185. package/dist/enums/nodeFlags.enum.js +43 -0
  186. package/dist/enums/nodeFlags.enum.js.map +1 -0
  187. package/dist/enums/nodeFlags.js +43 -0
  188. package/dist/enums/nodeFlags.js.map +1 -0
  189. package/dist/enums/objectFlags.d.ts +2 -0
  190. package/dist/enums/objectFlags.d.ts.map +1 -0
  191. package/dist/enums/objectFlags.enum.d.ts +50 -0
  192. package/dist/enums/objectFlags.enum.d.ts.map +1 -0
  193. package/dist/enums/objectFlags.enum.js +52 -0
  194. package/dist/enums/objectFlags.enum.js.map +1 -0
  195. package/dist/enums/objectFlags.js +52 -0
  196. package/dist/enums/objectFlags.js.map +1 -0
  197. package/dist/enums/outerExpressionKinds.d.ts +2 -0
  198. package/dist/enums/outerExpressionKinds.d.ts.map +1 -0
  199. package/dist/enums/outerExpressionKinds.enum.d.ts +12 -0
  200. package/dist/enums/outerExpressionKinds.enum.d.ts.map +1 -0
  201. package/dist/enums/outerExpressionKinds.enum.js +14 -0
  202. package/dist/enums/outerExpressionKinds.enum.js.map +1 -0
  203. package/dist/enums/outerExpressionKinds.js +14 -0
  204. package/dist/enums/outerExpressionKinds.js.map +1 -0
  205. package/dist/enums/regularExpressionFlags.d.ts +2 -0
  206. package/dist/enums/regularExpressionFlags.d.ts.map +1 -0
  207. package/dist/enums/regularExpressionFlags.enum.d.ts +13 -0
  208. package/dist/enums/regularExpressionFlags.enum.d.ts.map +1 -0
  209. package/dist/enums/regularExpressionFlags.enum.js +14 -0
  210. package/dist/enums/regularExpressionFlags.enum.js.map +1 -0
  211. package/dist/enums/regularExpressionFlags.js +14 -0
  212. package/dist/enums/regularExpressionFlags.js.map +1 -0
  213. package/dist/enums/scriptKind.d.ts +2 -0
  214. package/dist/enums/scriptKind.d.ts.map +1 -0
  215. package/dist/enums/scriptKind.enum.d.ts +11 -0
  216. package/dist/enums/scriptKind.enum.d.ts.map +1 -0
  217. package/dist/enums/scriptKind.enum.js +12 -0
  218. package/dist/enums/scriptKind.enum.js.map +1 -0
  219. package/dist/enums/scriptKind.js +12 -0
  220. package/dist/enums/scriptKind.js.map +1 -0
  221. package/dist/enums/scriptTarget.d.ts +2 -0
  222. package/dist/enums/scriptTarget.d.ts.map +1 -0
  223. package/dist/enums/scriptTarget.enum.d.ts +17 -0
  224. package/dist/enums/scriptTarget.enum.d.ts.map +1 -0
  225. package/dist/enums/scriptTarget.enum.js +18 -0
  226. package/dist/enums/scriptTarget.enum.js.map +1 -0
  227. package/dist/enums/scriptTarget.js +18 -0
  228. package/dist/enums/scriptTarget.js.map +1 -0
  229. package/dist/enums/signatureFlags.d.ts +2 -0
  230. package/dist/enums/signatureFlags.d.ts.map +1 -0
  231. package/dist/enums/signatureFlags.enum.d.ts +15 -0
  232. package/dist/enums/signatureFlags.enum.d.ts.map +1 -0
  233. package/dist/enums/signatureFlags.enum.js +17 -0
  234. package/dist/enums/signatureFlags.enum.js.map +1 -0
  235. package/dist/enums/signatureFlags.js +17 -0
  236. package/dist/enums/signatureFlags.js.map +1 -0
  237. package/dist/enums/signatureKind.d.ts +2 -0
  238. package/dist/enums/signatureKind.d.ts.map +1 -0
  239. package/dist/enums/signatureKind.enum.d.ts +5 -0
  240. package/dist/enums/signatureKind.enum.d.ts.map +1 -0
  241. package/dist/enums/signatureKind.enum.js +7 -0
  242. package/dist/enums/signatureKind.enum.js.map +1 -0
  243. package/dist/enums/signatureKind.js +7 -0
  244. package/dist/enums/signatureKind.js.map +1 -0
  245. package/dist/enums/symbolFlags.d.ts +2 -0
  246. package/dist/enums/symbolFlags.d.ts.map +1 -0
  247. package/dist/enums/symbolFlags.enum.d.ts +71 -0
  248. package/dist/enums/symbolFlags.enum.d.ts.map +1 -0
  249. package/dist/enums/symbolFlags.enum.js +73 -0
  250. package/dist/enums/symbolFlags.enum.js.map +1 -0
  251. package/dist/enums/symbolFlags.js +73 -0
  252. package/dist/enums/symbolFlags.js.map +1 -0
  253. package/dist/enums/syntaxKind.d.ts +2 -0
  254. package/dist/enums/syntaxKind.d.ts.map +1 -0
  255. package/dist/enums/syntaxKind.enum.d.ts +389 -0
  256. package/dist/enums/syntaxKind.enum.d.ts.map +1 -0
  257. package/dist/enums/syntaxKind.enum.js +391 -0
  258. package/dist/enums/syntaxKind.enum.js.map +1 -0
  259. package/dist/enums/syntaxKind.js +391 -0
  260. package/dist/enums/syntaxKind.js.map +1 -0
  261. package/dist/enums/tokenFlags.d.ts +2 -0
  262. package/dist/enums/tokenFlags.d.ts.map +1 -0
  263. package/dist/enums/tokenFlags.enum.d.ts +30 -0
  264. package/dist/enums/tokenFlags.enum.d.ts.map +1 -0
  265. package/dist/enums/tokenFlags.enum.js +32 -0
  266. package/dist/enums/tokenFlags.enum.js.map +1 -0
  267. package/dist/enums/tokenFlags.js +32 -0
  268. package/dist/enums/tokenFlags.js.map +1 -0
  269. package/dist/enums/typeFlags.d.ts +2 -0
  270. package/dist/enums/typeFlags.d.ts.map +1 -0
  271. package/dist/enums/typeFlags.enum.d.ts +76 -0
  272. package/dist/enums/typeFlags.enum.d.ts.map +1 -0
  273. package/dist/enums/typeFlags.enum.js +78 -0
  274. package/dist/enums/typeFlags.enum.js.map +1 -0
  275. package/dist/enums/typeFlags.js +78 -0
  276. package/dist/enums/typeFlags.js.map +1 -0
  277. package/dist/enums/typePredicateKind.d.ts +2 -0
  278. package/dist/enums/typePredicateKind.d.ts.map +1 -0
  279. package/dist/enums/typePredicateKind.enum.d.ts +7 -0
  280. package/dist/enums/typePredicateKind.enum.d.ts.map +1 -0
  281. package/dist/enums/typePredicateKind.enum.js +9 -0
  282. package/dist/enums/typePredicateKind.enum.js.map +1 -0
  283. package/dist/enums/typePredicateKind.js +9 -0
  284. package/dist/enums/typePredicateKind.js.map +1 -0
  285. package/lib/getExePath.d.ts +2 -0
  286. package/package.json +57 -12
  287. package/vendor/vscode-jsonrpc/README.md +69 -0
  288. package/vendor/vscode-jsonrpc/lib/browser/main.d.ts +17 -0
  289. package/vendor/vscode-jsonrpc/lib/browser/main.js +83 -0
  290. package/vendor/vscode-jsonrpc/lib/browser/ril.d.ts +22 -0
  291. package/vendor/vscode-jsonrpc/lib/browser/ril.js +203 -0
  292. package/vendor/vscode-jsonrpc/lib/common/api.d.ts +14 -0
  293. package/vendor/vscode-jsonrpc/lib/common/api.js +87 -0
  294. package/vendor/vscode-jsonrpc/lib/common/cancellation.d.ts +32 -0
  295. package/vendor/vscode-jsonrpc/lib/common/cancellation.js +132 -0
  296. package/vendor/vscode-jsonrpc/lib/common/connection.d.ts +367 -0
  297. package/vendor/vscode-jsonrpc/lib/common/connection.js +1272 -0
  298. package/vendor/vscode-jsonrpc/lib/common/disposable.d.ts +9 -0
  299. package/vendor/vscode-jsonrpc/lib/common/disposable.js +16 -0
  300. package/vendor/vscode-jsonrpc/lib/common/encoding.d.ts +52 -0
  301. package/vendor/vscode-jsonrpc/lib/common/encoding.js +70 -0
  302. package/vendor/vscode-jsonrpc/lib/common/events.d.ts +39 -0
  303. package/vendor/vscode-jsonrpc/lib/common/events.js +136 -0
  304. package/vendor/vscode-jsonrpc/lib/common/is.d.ts +7 -0
  305. package/vendor/vscode-jsonrpc/lib/common/is.js +34 -0
  306. package/vendor/vscode-jsonrpc/lib/common/linkedMap.d.ts +55 -0
  307. package/vendor/vscode-jsonrpc/lib/common/linkedMap.js +412 -0
  308. package/vendor/vscode-jsonrpc/lib/common/messageBuffer.d.ts +18 -0
  309. package/vendor/vscode-jsonrpc/lib/common/messageBuffer.js +155 -0
  310. package/vendor/vscode-jsonrpc/lib/common/messageReader.d.ts +77 -0
  311. package/vendor/vscode-jsonrpc/lib/common/messageReader.js +246 -0
  312. package/vendor/vscode-jsonrpc/lib/common/messageWriter.d.ts +60 -0
  313. package/vendor/vscode-jsonrpc/lib/common/messageWriter.js +157 -0
  314. package/vendor/vscode-jsonrpc/lib/common/messages.d.ts +369 -0
  315. package/vendor/vscode-jsonrpc/lib/common/messages.js +436 -0
  316. package/vendor/vscode-jsonrpc/lib/common/ral.d.ts +74 -0
  317. package/vendor/vscode-jsonrpc/lib/common/ral.js +23 -0
  318. package/vendor/vscode-jsonrpc/lib/common/semaphore.d.ts +10 -0
  319. package/vendor/vscode-jsonrpc/lib/common/semaphore.js +74 -0
  320. package/vendor/vscode-jsonrpc/lib/common/sharedArrayCancellation.d.ts +15 -0
  321. package/vendor/vscode-jsonrpc/lib/common/sharedArrayCancellation.js +77 -0
  322. package/vendor/vscode-jsonrpc/lib/node/main.d.ts +58 -0
  323. package/vendor/vscode-jsonrpc/lib/node/main.js +289 -0
  324. package/vendor/vscode-jsonrpc/lib/node/ril.d.ts +12 -0
  325. package/vendor/vscode-jsonrpc/lib/node/ril.js +163 -0
  326. package/vendor/vscode-jsonrpc/package.json +54 -0
  327. package/vendor/vscode-jsonrpc/typings/thenable.d.ts +5 -0
@@ -0,0 +1,1272 @@
1
+ "use strict";
2
+ /* --------------------------------------------------------------------------------------------
3
+ * Copyright (c) Microsoft Corporation. All rights reserved.
4
+ * Licensed under the MIT License. See License.txt in the project root for license information.
5
+ * ------------------------------------------------------------------------------------------ */
6
+ /// <reference path="../../typings/thenable.d.ts" preserve="true"/>
7
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
8
+ if (k2 === undefined) k2 = k;
9
+ var desc = Object.getOwnPropertyDescriptor(m, k);
10
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
11
+ desc = { enumerable: true, get: function() { return m[k]; } };
12
+ }
13
+ Object.defineProperty(o, k2, desc);
14
+ }) : (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ o[k2] = m[k];
17
+ }));
18
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
19
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
20
+ }) : function(o, v) {
21
+ o["default"] = v;
22
+ });
23
+ var __importStar = (this && this.__importStar) || (function () {
24
+ var ownKeys = function(o) {
25
+ ownKeys = Object.getOwnPropertyNames || function (o) {
26
+ var ar = [];
27
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
28
+ return ar;
29
+ };
30
+ return ownKeys(o);
31
+ };
32
+ return function (mod) {
33
+ if (mod && mod.__esModule) return mod;
34
+ var result = {};
35
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
36
+ __setModuleDefault(result, mod);
37
+ return result;
38
+ };
39
+ })();
40
+ var __importDefault = (this && this.__importDefault) || function (mod) {
41
+ return (mod && mod.__esModule) ? mod : { "default": mod };
42
+ };
43
+ Object.defineProperty(exports, "__esModule", { value: true });
44
+ exports.ConnectionOptions = exports.MessageStrategy = exports.CancellationStrategy = exports.CancellationSenderStrategy = exports.CancellationReceiverStrategy = exports.RequestCancellationReceiverStrategy = exports.IdCancellationReceiverStrategy = exports.ConnectionStrategy = exports.ConnectionError = exports.ConnectionErrors = exports.LogTraceNotification = exports.SetTraceNotification = exports.TraceFormat = exports.TraceValues = exports.TraceValue = exports.Trace = exports.NullLogger = exports.ProgressType = exports.ProgressToken = void 0;
45
+ exports.createMessageConnection = createMessageConnection;
46
+ const ral_1 = __importDefault(require("./ral"));
47
+ const Is = __importStar(require("./is"));
48
+ const messages_1 = require("./messages");
49
+ const linkedMap_1 = require("./linkedMap");
50
+ const events_1 = require("./events");
51
+ const cancellation_1 = require("./cancellation");
52
+ var CancelNotification;
53
+ (function (CancelNotification) {
54
+ CancelNotification.type = new messages_1.NotificationType('$/cancelRequest');
55
+ })(CancelNotification || (CancelNotification = {}));
56
+ var ProgressToken;
57
+ (function (ProgressToken) {
58
+ function is(value) {
59
+ return typeof value === 'string' || typeof value === 'number';
60
+ }
61
+ ProgressToken.is = is;
62
+ })(ProgressToken || (exports.ProgressToken = ProgressToken = {}));
63
+ var ProgressNotification;
64
+ (function (ProgressNotification) {
65
+ ProgressNotification.type = new messages_1.NotificationType('$/progress');
66
+ })(ProgressNotification || (ProgressNotification = {}));
67
+ class ProgressType {
68
+ /**
69
+ * Clients must not use these properties. They are here to ensure correct typing.
70
+ * in TypeScript
71
+ */
72
+ __;
73
+ _pr;
74
+ constructor() {
75
+ }
76
+ }
77
+ exports.ProgressType = ProgressType;
78
+ var StarRequestHandler;
79
+ (function (StarRequestHandler) {
80
+ function is(value) {
81
+ return Is.func(value);
82
+ }
83
+ StarRequestHandler.is = is;
84
+ })(StarRequestHandler || (StarRequestHandler = {}));
85
+ exports.NullLogger = Object.freeze({
86
+ error: () => { },
87
+ warn: () => { },
88
+ info: () => { },
89
+ log: () => { }
90
+ });
91
+ var Trace;
92
+ (function (Trace) {
93
+ Trace[Trace["Off"] = 0] = "Off";
94
+ Trace[Trace["Messages"] = 1] = "Messages";
95
+ Trace[Trace["Compact"] = 2] = "Compact";
96
+ Trace[Trace["Verbose"] = 3] = "Verbose";
97
+ })(Trace || (exports.Trace = Trace = {}));
98
+ var TraceValue;
99
+ (function (TraceValue) {
100
+ /**
101
+ * Turn tracing off.
102
+ */
103
+ TraceValue.Off = 'off';
104
+ /**
105
+ * Trace messages only.
106
+ */
107
+ TraceValue.Messages = 'messages';
108
+ /**
109
+ * Compact message tracing.
110
+ */
111
+ TraceValue.Compact = 'compact';
112
+ /**
113
+ * Verbose message tracing.
114
+ */
115
+ TraceValue.Verbose = 'verbose';
116
+ })(TraceValue || (exports.TraceValue = TraceValue = {}));
117
+ /**
118
+ * @deprecated Use TraceValue instead
119
+ */
120
+ exports.TraceValues = TraceValue;
121
+ (function (Trace) {
122
+ function fromString(value) {
123
+ if (!Is.string(value)) {
124
+ return Trace.Off;
125
+ }
126
+ value = value.toLowerCase();
127
+ switch (value) {
128
+ case 'off':
129
+ return Trace.Off;
130
+ case 'messages':
131
+ return Trace.Messages;
132
+ case 'compact':
133
+ return Trace.Compact;
134
+ case 'verbose':
135
+ return Trace.Verbose;
136
+ default:
137
+ return Trace.Off;
138
+ }
139
+ }
140
+ Trace.fromString = fromString;
141
+ function toString(value) {
142
+ switch (value) {
143
+ case Trace.Off:
144
+ return 'off';
145
+ case Trace.Messages:
146
+ return 'messages';
147
+ case Trace.Compact:
148
+ return 'compact';
149
+ case Trace.Verbose:
150
+ return 'verbose';
151
+ default:
152
+ return 'off';
153
+ }
154
+ }
155
+ Trace.toString = toString;
156
+ })(Trace || (exports.Trace = Trace = {}));
157
+ var TraceFormat;
158
+ (function (TraceFormat) {
159
+ TraceFormat["Text"] = "text";
160
+ TraceFormat["JSON"] = "json";
161
+ })(TraceFormat || (exports.TraceFormat = TraceFormat = {}));
162
+ (function (TraceFormat) {
163
+ function fromString(value) {
164
+ if (!Is.string(value)) {
165
+ return TraceFormat.Text;
166
+ }
167
+ value = value.toLowerCase();
168
+ if (value === 'json') {
169
+ return TraceFormat.JSON;
170
+ }
171
+ else {
172
+ return TraceFormat.Text;
173
+ }
174
+ }
175
+ TraceFormat.fromString = fromString;
176
+ })(TraceFormat || (exports.TraceFormat = TraceFormat = {}));
177
+ var SetTraceNotification;
178
+ (function (SetTraceNotification) {
179
+ SetTraceNotification.type = new messages_1.NotificationType('$/setTrace');
180
+ })(SetTraceNotification || (exports.SetTraceNotification = SetTraceNotification = {}));
181
+ var LogTraceNotification;
182
+ (function (LogTraceNotification) {
183
+ LogTraceNotification.type = new messages_1.NotificationType('$/logTrace');
184
+ })(LogTraceNotification || (exports.LogTraceNotification = LogTraceNotification = {}));
185
+ var ConnectionErrors;
186
+ (function (ConnectionErrors) {
187
+ /**
188
+ * The connection is closed.
189
+ */
190
+ ConnectionErrors[ConnectionErrors["Closed"] = 1] = "Closed";
191
+ /**
192
+ * The connection got disposed.
193
+ */
194
+ ConnectionErrors[ConnectionErrors["Disposed"] = 2] = "Disposed";
195
+ /**
196
+ * The connection is already in listening mode.
197
+ */
198
+ ConnectionErrors[ConnectionErrors["AlreadyListening"] = 3] = "AlreadyListening";
199
+ })(ConnectionErrors || (exports.ConnectionErrors = ConnectionErrors = {}));
200
+ class ConnectionError extends Error {
201
+ code;
202
+ constructor(code, message) {
203
+ super(message);
204
+ this.code = code;
205
+ Object.setPrototypeOf(this, ConnectionError.prototype);
206
+ }
207
+ }
208
+ exports.ConnectionError = ConnectionError;
209
+ var ConnectionStrategy;
210
+ (function (ConnectionStrategy) {
211
+ function is(value) {
212
+ const candidate = value;
213
+ return candidate && Is.func(candidate.cancelUndispatched);
214
+ }
215
+ ConnectionStrategy.is = is;
216
+ })(ConnectionStrategy || (exports.ConnectionStrategy = ConnectionStrategy = {}));
217
+ var IdCancellationReceiverStrategy;
218
+ (function (IdCancellationReceiverStrategy) {
219
+ function is(value) {
220
+ const candidate = value;
221
+ return candidate && (candidate.kind === undefined || candidate.kind === 'id') && Is.func(candidate.createCancellationTokenSource) && (candidate.dispose === undefined || Is.func(candidate.dispose));
222
+ }
223
+ IdCancellationReceiverStrategy.is = is;
224
+ })(IdCancellationReceiverStrategy || (exports.IdCancellationReceiverStrategy = IdCancellationReceiverStrategy = {}));
225
+ var RequestCancellationReceiverStrategy;
226
+ (function (RequestCancellationReceiverStrategy) {
227
+ function is(value) {
228
+ const candidate = value;
229
+ return candidate && candidate.kind === 'request' && Is.func(candidate.createCancellationTokenSource) && (candidate.dispose === undefined || Is.func(candidate.dispose));
230
+ }
231
+ RequestCancellationReceiverStrategy.is = is;
232
+ })(RequestCancellationReceiverStrategy || (exports.RequestCancellationReceiverStrategy = RequestCancellationReceiverStrategy = {}));
233
+ var CancellationReceiverStrategy;
234
+ (function (CancellationReceiverStrategy) {
235
+ CancellationReceiverStrategy.Message = Object.freeze({
236
+ createCancellationTokenSource(_) {
237
+ return new cancellation_1.CancellationTokenSource();
238
+ }
239
+ });
240
+ function is(value) {
241
+ return IdCancellationReceiverStrategy.is(value) || RequestCancellationReceiverStrategy.is(value);
242
+ }
243
+ CancellationReceiverStrategy.is = is;
244
+ })(CancellationReceiverStrategy || (exports.CancellationReceiverStrategy = CancellationReceiverStrategy = {}));
245
+ var CancellationSenderStrategy;
246
+ (function (CancellationSenderStrategy) {
247
+ CancellationSenderStrategy.Message = Object.freeze({
248
+ sendCancellation(conn, id) {
249
+ return conn.sendNotification(CancelNotification.type, { id });
250
+ },
251
+ cleanup(_) { }
252
+ });
253
+ function is(value) {
254
+ const candidate = value;
255
+ return candidate && Is.func(candidate.sendCancellation) && Is.func(candidate.cleanup);
256
+ }
257
+ CancellationSenderStrategy.is = is;
258
+ })(CancellationSenderStrategy || (exports.CancellationSenderStrategy = CancellationSenderStrategy = {}));
259
+ var CancellationStrategy;
260
+ (function (CancellationStrategy) {
261
+ CancellationStrategy.Message = Object.freeze({
262
+ receiver: CancellationReceiverStrategy.Message,
263
+ sender: CancellationSenderStrategy.Message
264
+ });
265
+ function is(value) {
266
+ const candidate = value;
267
+ return candidate && CancellationReceiverStrategy.is(candidate.receiver) && CancellationSenderStrategy.is(candidate.sender);
268
+ }
269
+ CancellationStrategy.is = is;
270
+ })(CancellationStrategy || (exports.CancellationStrategy = CancellationStrategy = {}));
271
+ var MessageStrategy;
272
+ (function (MessageStrategy) {
273
+ function is(value) {
274
+ const candidate = value;
275
+ return candidate && Is.func(candidate.handleMessage);
276
+ }
277
+ MessageStrategy.is = is;
278
+ })(MessageStrategy || (exports.MessageStrategy = MessageStrategy = {}));
279
+ var ConnectionOptions;
280
+ (function (ConnectionOptions) {
281
+ function is(value) {
282
+ const candidate = value;
283
+ return candidate
284
+ && (CancellationStrategy.is(candidate.cancellationStrategy) || ConnectionStrategy.is(candidate.connectionStrategy) || MessageStrategy.is(candidate.messageStrategy) || Is.number(candidate.maxParallelism));
285
+ }
286
+ ConnectionOptions.is = is;
287
+ })(ConnectionOptions || (exports.ConnectionOptions = ConnectionOptions = {}));
288
+ var ConnectionState;
289
+ (function (ConnectionState) {
290
+ ConnectionState[ConnectionState["New"] = 1] = "New";
291
+ ConnectionState[ConnectionState["Listening"] = 2] = "Listening";
292
+ ConnectionState[ConnectionState["Closed"] = 3] = "Closed";
293
+ ConnectionState[ConnectionState["Disposed"] = 4] = "Disposed";
294
+ })(ConnectionState || (ConnectionState = {}));
295
+ function createMessageConnection(messageReader, messageWriter, _logger, options) {
296
+ const logger = _logger !== undefined ? _logger : exports.NullLogger;
297
+ let sequenceNumber = 0;
298
+ let notificationSequenceNumber = 0;
299
+ let unknownResponseSequenceNumber = 0;
300
+ const version = '2.0';
301
+ const maxParallelism = options?.maxParallelism ?? -1;
302
+ let inFlight = 0;
303
+ let starRequestHandler = undefined;
304
+ const requestHandlers = new Map();
305
+ let starNotificationHandler = undefined;
306
+ const notificationHandlers = new Map();
307
+ const progressHandlers = new Map();
308
+ let timer;
309
+ let messageQueue = new linkedMap_1.LinkedMap();
310
+ let responsePromises = new Map();
311
+ let knownCanceledRequests = new Set();
312
+ let requestTokens = new Map();
313
+ let trace = Trace.Off;
314
+ let traceFormat = TraceFormat.Text;
315
+ let tracer;
316
+ let state = ConnectionState.New;
317
+ const errorEmitter = new events_1.Emitter();
318
+ const closeEmitter = new events_1.Emitter();
319
+ const unhandledNotificationEmitter = new events_1.Emitter();
320
+ const unhandledProgressEmitter = new events_1.Emitter();
321
+ const disposeEmitter = new events_1.Emitter();
322
+ const cancellationStrategy = (options && options.cancellationStrategy) ? options.cancellationStrategy : CancellationStrategy.Message;
323
+ function cancelUndispatched(_message) {
324
+ return undefined;
325
+ }
326
+ function isListening() {
327
+ return state === ConnectionState.Listening;
328
+ }
329
+ function isClosed() {
330
+ return state === ConnectionState.Closed;
331
+ }
332
+ function isDisposed() {
333
+ return state === ConnectionState.Disposed;
334
+ }
335
+ function closeHandler() {
336
+ if (state === ConnectionState.New || state === ConnectionState.Listening) {
337
+ state = ConnectionState.Closed;
338
+ closeEmitter.fire(undefined);
339
+ }
340
+ // If the connection is disposed don't sent close events.
341
+ }
342
+ function readErrorHandler(error) {
343
+ errorEmitter.fire([error, undefined, undefined]);
344
+ }
345
+ function writeErrorHandler(data) {
346
+ errorEmitter.fire(data);
347
+ }
348
+ messageReader.onClose(closeHandler);
349
+ messageReader.onError(readErrorHandler);
350
+ messageWriter.onClose(closeHandler);
351
+ messageWriter.onError(writeErrorHandler);
352
+ function createRequestQueueKey(id) {
353
+ if (id === null) {
354
+ throw new Error(`Can't send requests with id null since the response can't be correlated.`);
355
+ }
356
+ return 'req-' + id.toString();
357
+ }
358
+ function createResponseQueueKey(id) {
359
+ if (id === null) {
360
+ return 'res-unknown-' + (++unknownResponseSequenceNumber).toString();
361
+ }
362
+ else {
363
+ return 'res-' + id.toString();
364
+ }
365
+ }
366
+ function createNotificationQueueKey() {
367
+ return 'not-' + (++notificationSequenceNumber).toString();
368
+ }
369
+ function addMessageToQueue(queue, message) {
370
+ if (messages_1.Message.isRequest(message)) {
371
+ queue.set(createRequestQueueKey(message.id), message);
372
+ }
373
+ else if (messages_1.Message.isResponse(message)) {
374
+ // If we have unlimited parallelism we queue the response to keep
375
+ // the previous semantics.
376
+ if (maxParallelism === -1) {
377
+ queue.set(createResponseQueueKey(message.id), message);
378
+ }
379
+ else {
380
+ // If we have limited parallelism we resolve responses to avoid
381
+ // dead locks.
382
+ handleResponse(message);
383
+ }
384
+ }
385
+ else {
386
+ queue.set(createNotificationQueueKey(), message);
387
+ }
388
+ }
389
+ function triggerMessageQueue() {
390
+ if (timer || messageQueue.size === 0) {
391
+ return;
392
+ }
393
+ if (maxParallelism !== -1 && inFlight >= maxParallelism) {
394
+ return;
395
+ }
396
+ timer = (0, ral_1.default)().timer.setImmediate(async () => {
397
+ timer = undefined;
398
+ if (messageQueue.size === 0) {
399
+ return;
400
+ }
401
+ if (maxParallelism !== -1 && inFlight >= maxParallelism) {
402
+ return;
403
+ }
404
+ const message = messageQueue.shift();
405
+ let result;
406
+ try {
407
+ inFlight++;
408
+ const messageStrategy = options?.messageStrategy;
409
+ if (MessageStrategy.is(messageStrategy)) {
410
+ result = messageStrategy.handleMessage(message, handleMessage);
411
+ }
412
+ else {
413
+ result = handleMessage(message);
414
+ }
415
+ }
416
+ catch (error) {
417
+ logger.error(`Processing message queue failed: ${error.toString()}`);
418
+ }
419
+ finally {
420
+ if (result instanceof Promise) {
421
+ result.then(() => {
422
+ inFlight--;
423
+ triggerMessageQueue();
424
+ }).catch((error) => {
425
+ logger.error(`Processing message queue failed: ${error.toString()}`);
426
+ });
427
+ }
428
+ else {
429
+ inFlight--;
430
+ }
431
+ triggerMessageQueue();
432
+ }
433
+ });
434
+ }
435
+ async function handleMessage(message) {
436
+ if (messages_1.Message.isRequest(message)) {
437
+ return handleRequest(message);
438
+ }
439
+ else if (messages_1.Message.isNotification(message)) {
440
+ return handleNotification(message);
441
+ }
442
+ else if (messages_1.Message.isResponse(message)) {
443
+ return handleResponse(message);
444
+ }
445
+ else {
446
+ return handleInvalidMessage(message);
447
+ }
448
+ }
449
+ const callback = (message) => {
450
+ try {
451
+ // We have received a cancellation message. Check if the message is still in the queue
452
+ // and cancel it if allowed to do so.
453
+ if (messages_1.Message.isNotification(message) && message.method === CancelNotification.type.method) {
454
+ const cancelId = message.params.id;
455
+ const key = createRequestQueueKey(cancelId);
456
+ const toCancel = messageQueue.get(key);
457
+ if (messages_1.Message.isRequest(toCancel)) {
458
+ const strategy = options?.connectionStrategy;
459
+ const response = (strategy && strategy.cancelUndispatched) ? strategy.cancelUndispatched(toCancel, cancelUndispatched) : cancelUndispatched(toCancel);
460
+ if (response && (response.error !== undefined || response.result !== undefined)) {
461
+ messageQueue.delete(key);
462
+ requestTokens.delete(cancelId);
463
+ response.id = toCancel.id;
464
+ traceSendingResponse(response, message.method, Date.now());
465
+ messageWriter.write(response).catch(() => logger.error(`Sending response for canceled message failed.`));
466
+ return;
467
+ }
468
+ }
469
+ const cancellationToken = requestTokens.get(cancelId);
470
+ // The request is already running. Cancel the token
471
+ if (cancellationToken !== undefined) {
472
+ cancellationToken.cancel();
473
+ traceReceivedNotification(message);
474
+ return;
475
+ }
476
+ else {
477
+ // Remember the cancel but still queue the message to
478
+ // clean up state in process message.
479
+ knownCanceledRequests.add(cancelId);
480
+ }
481
+ }
482
+ addMessageToQueue(messageQueue, message);
483
+ }
484
+ finally {
485
+ triggerMessageQueue();
486
+ }
487
+ };
488
+ async function handleRequest(requestMessage) {
489
+ if (isDisposed()) {
490
+ // we return here silently since we fired an event when the
491
+ // connection got disposed.
492
+ return Promise.resolve();
493
+ }
494
+ function reply(resultOrError, method, startTime) {
495
+ const message = {
496
+ jsonrpc: version,
497
+ id: requestMessage.id
498
+ };
499
+ if (resultOrError instanceof messages_1.ResponseError) {
500
+ message.error = resultOrError.toJson();
501
+ }
502
+ else {
503
+ message.result = resultOrError === undefined ? null : resultOrError;
504
+ }
505
+ traceSendingResponse(message, method, startTime);
506
+ return messageWriter.write(message);
507
+ }
508
+ function replyError(error, method, startTime) {
509
+ const message = {
510
+ jsonrpc: version,
511
+ id: requestMessage.id,
512
+ error: error.toJson()
513
+ };
514
+ traceSendingResponse(message, method, startTime);
515
+ return messageWriter.write(message);
516
+ }
517
+ traceReceivedRequest(requestMessage);
518
+ const element = requestHandlers.get(requestMessage.method);
519
+ let type;
520
+ let requestHandler;
521
+ if (element) {
522
+ type = element.type;
523
+ requestHandler = element.handler;
524
+ }
525
+ const startTime = Date.now();
526
+ if (requestHandler || starRequestHandler) {
527
+ const tokenKey = requestMessage.id ?? String(Date.now()); //
528
+ const cancellationSource = IdCancellationReceiverStrategy.is(cancellationStrategy.receiver)
529
+ ? cancellationStrategy.receiver.createCancellationTokenSource(tokenKey)
530
+ : cancellationStrategy.receiver.createCancellationTokenSource(requestMessage);
531
+ if (requestMessage.id !== null && knownCanceledRequests.has(requestMessage.id)) {
532
+ cancellationSource.cancel();
533
+ }
534
+ if (requestMessage.id !== null) {
535
+ requestTokens.set(tokenKey, cancellationSource);
536
+ }
537
+ try {
538
+ let handlerResult;
539
+ if (requestHandler) {
540
+ if (requestMessage.params === undefined) {
541
+ if (type !== undefined && type.numberOfParams !== 0) {
542
+ return replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InvalidParams, `Request ${requestMessage.method} defines ${type.numberOfParams} params but received none.`), requestMessage.method, startTime);
543
+ }
544
+ handlerResult = requestHandler(cancellationSource.token);
545
+ }
546
+ else if (Array.isArray(requestMessage.params)) {
547
+ if (type !== undefined && type.parameterStructures === messages_1.ParameterStructures.byName) {
548
+ return replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InvalidParams, `Request ${requestMessage.method} defines parameters by name but received parameters by position`), requestMessage.method, startTime);
549
+ }
550
+ handlerResult = requestHandler(...requestMessage.params, cancellationSource.token);
551
+ }
552
+ else {
553
+ if (type !== undefined && type.parameterStructures === messages_1.ParameterStructures.byPosition) {
554
+ return replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InvalidParams, `Request ${requestMessage.method} defines parameters by position but received parameters by name`), requestMessage.method, startTime);
555
+ }
556
+ handlerResult = requestHandler(requestMessage.params, cancellationSource.token);
557
+ }
558
+ }
559
+ else if (starRequestHandler) {
560
+ handlerResult = starRequestHandler(requestMessage.method, requestMessage.params, cancellationSource.token);
561
+ }
562
+ const resultOrError = await handlerResult;
563
+ await reply(resultOrError, requestMessage.method, startTime);
564
+ }
565
+ catch (error) {
566
+ if (error instanceof messages_1.ResponseError) {
567
+ await reply(error, requestMessage.method, startTime);
568
+ }
569
+ else if (error && Is.string(error.message)) {
570
+ await replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InternalError, `Request ${requestMessage.method} failed with message: ${error.message}`), requestMessage.method, startTime);
571
+ }
572
+ else {
573
+ await replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InternalError, `Request ${requestMessage.method} failed unexpectedly without providing any details.`), requestMessage.method, startTime);
574
+ }
575
+ }
576
+ finally {
577
+ requestTokens.delete(tokenKey);
578
+ }
579
+ }
580
+ else {
581
+ await replyError(new messages_1.ResponseError(messages_1.ErrorCodes.MethodNotFound, `Unhandled method ${requestMessage.method}`), requestMessage.method, startTime);
582
+ }
583
+ }
584
+ function handleResponse(responseMessage) {
585
+ if (isDisposed()) {
586
+ // See handle request.
587
+ return;
588
+ }
589
+ if (responseMessage.id === null) {
590
+ if (responseMessage.error) {
591
+ logger.error(`Received response message without id: Error is: \n${JSON.stringify(responseMessage.error, undefined, 4)}`);
592
+ }
593
+ else {
594
+ logger.error(`Received response message without id. No further error information provided.`);
595
+ }
596
+ }
597
+ else {
598
+ const key = responseMessage.id;
599
+ const responsePromise = responsePromises.get(key);
600
+ traceReceivedResponse(responseMessage, responsePromise);
601
+ if (responsePromise !== undefined) {
602
+ responsePromises.delete(key);
603
+ try {
604
+ if (responseMessage.error) {
605
+ const error = responseMessage.error;
606
+ responsePromise.reject(new messages_1.ResponseError(error.code, error.message, error.data));
607
+ }
608
+ else if (responseMessage.result !== undefined) {
609
+ responsePromise.resolve(responseMessage.result);
610
+ }
611
+ else {
612
+ throw new Error('Should never happen.');
613
+ }
614
+ }
615
+ catch (error) {
616
+ if (error.message) {
617
+ logger.error(`Response handler '${responsePromise.method}' failed with message: ${error.message}`);
618
+ }
619
+ else {
620
+ logger.error(`Response handler '${responsePromise.method}' failed unexpectedly.`);
621
+ }
622
+ }
623
+ }
624
+ }
625
+ }
626
+ async function handleNotification(message) {
627
+ if (isDisposed()) {
628
+ // See handle request.
629
+ return;
630
+ }
631
+ let type = undefined;
632
+ let notificationHandler;
633
+ if (message.method === CancelNotification.type.method) {
634
+ const cancelId = message.params.id;
635
+ knownCanceledRequests.delete(cancelId);
636
+ traceReceivedNotification(message);
637
+ return;
638
+ }
639
+ else {
640
+ const element = notificationHandlers.get(message.method);
641
+ if (element) {
642
+ notificationHandler = element.handler;
643
+ type = element.type;
644
+ }
645
+ }
646
+ if (notificationHandler || starNotificationHandler) {
647
+ try {
648
+ traceReceivedNotification(message);
649
+ if (notificationHandler) {
650
+ if (message.params === undefined) {
651
+ if (type !== undefined) {
652
+ if (type.numberOfParams !== 0 && type.parameterStructures !== messages_1.ParameterStructures.byName) {
653
+ logger.error(`Notification ${message.method} defines ${type.numberOfParams} params but received none.`);
654
+ }
655
+ }
656
+ await notificationHandler();
657
+ }
658
+ else if (Array.isArray(message.params)) {
659
+ // There are JSON-RPC libraries that send progress message as positional params although
660
+ // specified as named. So convert them if this is the case.
661
+ const params = message.params;
662
+ if (message.method === ProgressNotification.type.method && params.length === 2 && ProgressToken.is(params[0])) {
663
+ await notificationHandler({ token: params[0], value: params[1] });
664
+ }
665
+ else {
666
+ if (type !== undefined) {
667
+ if (type.parameterStructures === messages_1.ParameterStructures.byName) {
668
+ logger.error(`Notification ${message.method} defines parameters by name but received parameters by position`);
669
+ }
670
+ if (type.numberOfParams !== message.params.length) {
671
+ logger.error(`Notification ${message.method} defines ${type.numberOfParams} params but received ${params.length} arguments`);
672
+ }
673
+ }
674
+ await notificationHandler(...params);
675
+ }
676
+ }
677
+ else {
678
+ if (type !== undefined && type.parameterStructures === messages_1.ParameterStructures.byPosition) {
679
+ logger.error(`Notification ${message.method} defines parameters by position but received parameters by name`);
680
+ }
681
+ await notificationHandler(message.params);
682
+ }
683
+ }
684
+ else if (starNotificationHandler) {
685
+ await starNotificationHandler(message.method, message.params);
686
+ }
687
+ }
688
+ catch (error) {
689
+ if (error.message) {
690
+ logger.error(`Notification handler '${message.method}' failed with message: ${error.message}`);
691
+ }
692
+ else {
693
+ logger.error(`Notification handler '${message.method}' failed unexpectedly.`);
694
+ }
695
+ }
696
+ }
697
+ else {
698
+ unhandledNotificationEmitter.fire(message);
699
+ }
700
+ }
701
+ function handleInvalidMessage(message) {
702
+ if (!message) {
703
+ logger.error('Received empty message.');
704
+ return;
705
+ }
706
+ logger.error(`Received message which is neither a response nor a notification message:\n${JSON.stringify(message, null, 4)}`);
707
+ // Test whether we find an id to reject the promise
708
+ const responseMessage = message;
709
+ if (Is.string(responseMessage.id) || Is.number(responseMessage.id)) {
710
+ const key = responseMessage.id;
711
+ const responseHandler = responsePromises.get(key);
712
+ if (responseHandler) {
713
+ responseHandler.reject(new Error('The received response has neither a result nor an error property.'));
714
+ }
715
+ }
716
+ }
717
+ function stringifyTrace(params) {
718
+ if (params === undefined || params === null) {
719
+ return undefined;
720
+ }
721
+ switch (trace) {
722
+ case Trace.Verbose:
723
+ return JSON.stringify(params, null, 4);
724
+ case Trace.Compact:
725
+ return JSON.stringify(params);
726
+ default:
727
+ return undefined;
728
+ }
729
+ }
730
+ function traceSendingRequest(message) {
731
+ if (trace === Trace.Off || !tracer) {
732
+ return;
733
+ }
734
+ if (traceFormat === TraceFormat.Text) {
735
+ let data = undefined;
736
+ if ((trace === Trace.Verbose || trace === Trace.Compact) && message.params) {
737
+ data = `Params: ${stringifyTrace(message.params)}`;
738
+ }
739
+ tracer.log(`Sending request '${message.method} - (${message.id})'.`, data);
740
+ }
741
+ else {
742
+ logLSPMessage('send-request', message);
743
+ }
744
+ }
745
+ function traceSendingNotification(message) {
746
+ if (trace === Trace.Off || !tracer) {
747
+ return;
748
+ }
749
+ if (traceFormat === TraceFormat.Text) {
750
+ let data = undefined;
751
+ if (trace === Trace.Verbose || trace === Trace.Compact) {
752
+ if (message.params) {
753
+ data = `Params: ${stringifyTrace(message.params)}`;
754
+ }
755
+ else {
756
+ data = 'No parameters provided.';
757
+ }
758
+ }
759
+ tracer.log(`Sending notification '${message.method}'.`, data);
760
+ }
761
+ else {
762
+ logLSPMessage('send-notification', message);
763
+ }
764
+ }
765
+ function traceSendingResponse(message, method, startTime) {
766
+ if (trace === Trace.Off || !tracer) {
767
+ return;
768
+ }
769
+ if (traceFormat === TraceFormat.Text) {
770
+ let data = undefined;
771
+ if (trace === Trace.Verbose || trace === Trace.Compact) {
772
+ if (message.error && message.error.data) {
773
+ data = `Error data: ${stringifyTrace(message.error.data)}`;
774
+ }
775
+ else {
776
+ if (message.result) {
777
+ data = `Result: ${stringifyTrace(message.result)}`;
778
+ }
779
+ else if (message.error === undefined) {
780
+ data = 'No result returned.';
781
+ }
782
+ }
783
+ }
784
+ tracer.log(`Sending response '${method} - (${message.id})'. Processing request took ${Date.now() - startTime}ms`, data);
785
+ }
786
+ else {
787
+ logLSPMessage('send-response', message);
788
+ }
789
+ }
790
+ function traceReceivedRequest(message) {
791
+ if (trace === Trace.Off || !tracer) {
792
+ return;
793
+ }
794
+ if (traceFormat === TraceFormat.Text) {
795
+ let data = undefined;
796
+ if ((trace === Trace.Verbose || trace === Trace.Compact) && message.params) {
797
+ data = `Params: ${stringifyTrace(message.params)}`;
798
+ }
799
+ tracer.log(`Received request '${message.method} - (${message.id})'.`, data);
800
+ }
801
+ else {
802
+ logLSPMessage('receive-request', message);
803
+ }
804
+ }
805
+ function traceReceivedNotification(message) {
806
+ if (trace === Trace.Off || !tracer || message.method === LogTraceNotification.type.method) {
807
+ return;
808
+ }
809
+ if (traceFormat === TraceFormat.Text) {
810
+ let data = undefined;
811
+ if (trace === Trace.Verbose || trace === Trace.Compact) {
812
+ if (message.params) {
813
+ data = `Params: ${stringifyTrace(message.params)}`;
814
+ }
815
+ else {
816
+ data = 'No parameters provided.';
817
+ }
818
+ }
819
+ tracer.log(`Received notification '${message.method}'.`, data);
820
+ }
821
+ else {
822
+ logLSPMessage('receive-notification', message);
823
+ }
824
+ }
825
+ function traceReceivedResponse(message, responsePromise) {
826
+ if (trace === Trace.Off || !tracer) {
827
+ return;
828
+ }
829
+ if (traceFormat === TraceFormat.Text) {
830
+ let data = undefined;
831
+ if (trace === Trace.Verbose || trace === Trace.Compact) {
832
+ if (message.error && message.error.data) {
833
+ data = `Error data: ${stringifyTrace(message.error.data)}`;
834
+ }
835
+ else {
836
+ if (message.result) {
837
+ data = `Result: ${stringifyTrace(message.result)}`;
838
+ }
839
+ else if (message.error === undefined) {
840
+ data = 'No result returned.';
841
+ }
842
+ }
843
+ }
844
+ if (responsePromise) {
845
+ const error = message.error ? ` Request failed: ${message.error.message} (${message.error.code}).` : '';
846
+ tracer.log(`Received response '${responsePromise.method} - (${message.id})' in ${Date.now() - responsePromise.timerStart}ms.${error}`, data);
847
+ }
848
+ else {
849
+ tracer.log(`Received response ${message.id} without active response promise.`, data);
850
+ }
851
+ }
852
+ else {
853
+ logLSPMessage('receive-response', message);
854
+ }
855
+ }
856
+ function logLSPMessage(type, message) {
857
+ if (!tracer || trace === Trace.Off) {
858
+ return;
859
+ }
860
+ const lspMessage = {
861
+ isLSPMessage: true,
862
+ type,
863
+ message,
864
+ timestamp: Date.now()
865
+ };
866
+ tracer.log(lspMessage);
867
+ }
868
+ function throwIfClosedOrDisposed() {
869
+ if (isClosed()) {
870
+ throw new ConnectionError(ConnectionErrors.Closed, 'Connection is closed.');
871
+ }
872
+ if (isDisposed()) {
873
+ throw new ConnectionError(ConnectionErrors.Disposed, 'Connection is disposed.');
874
+ }
875
+ }
876
+ function throwIfListening() {
877
+ if (isListening()) {
878
+ throw new ConnectionError(ConnectionErrors.AlreadyListening, 'Connection is already listening');
879
+ }
880
+ }
881
+ function throwIfNotListening() {
882
+ if (!isListening()) {
883
+ throw new Error('Call listen() first.');
884
+ }
885
+ }
886
+ function undefinedToNull(param) {
887
+ if (param === undefined) {
888
+ return null;
889
+ }
890
+ else {
891
+ return param;
892
+ }
893
+ }
894
+ function nullToUndefined(param) {
895
+ if (param === null) {
896
+ return undefined;
897
+ }
898
+ else {
899
+ return param;
900
+ }
901
+ }
902
+ function isNamedParam(param) {
903
+ return param !== undefined && param !== null && !Array.isArray(param) && typeof param === 'object';
904
+ }
905
+ function computeSingleParam(parameterStructures, param) {
906
+ switch (parameterStructures) {
907
+ case messages_1.ParameterStructures.auto:
908
+ if (isNamedParam(param)) {
909
+ return nullToUndefined(param);
910
+ }
911
+ else {
912
+ return [undefinedToNull(param)];
913
+ }
914
+ case messages_1.ParameterStructures.byName:
915
+ if (!isNamedParam(param)) {
916
+ throw new Error(`Received parameters by name but param is not an object literal.`);
917
+ }
918
+ return nullToUndefined(param);
919
+ case messages_1.ParameterStructures.byPosition:
920
+ return [undefinedToNull(param)];
921
+ default:
922
+ throw new Error(`Unknown parameter structure ${parameterStructures.toString()}`);
923
+ }
924
+ }
925
+ function computeMessageParams(type, params) {
926
+ let result;
927
+ const numberOfParams = type.numberOfParams;
928
+ switch (numberOfParams) {
929
+ case 0:
930
+ result = undefined;
931
+ break;
932
+ case 1:
933
+ result = computeSingleParam(type.parameterStructures, params[0]);
934
+ break;
935
+ default:
936
+ result = [];
937
+ for (let i = 0; i < params.length && i < numberOfParams; i++) {
938
+ result.push(undefinedToNull(params[i]));
939
+ }
940
+ if (params.length < numberOfParams) {
941
+ for (let i = params.length; i < numberOfParams; i++) {
942
+ result.push(null);
943
+ }
944
+ }
945
+ break;
946
+ }
947
+ return result;
948
+ }
949
+ const connection = {
950
+ sendNotification: (type, ...args) => {
951
+ throwIfClosedOrDisposed();
952
+ let method;
953
+ let messageParams;
954
+ if (Is.string(type)) {
955
+ method = type;
956
+ const first = args[0];
957
+ let paramStart = 0;
958
+ let parameterStructures = messages_1.ParameterStructures.auto;
959
+ if (messages_1.ParameterStructures.is(first)) {
960
+ paramStart = 1;
961
+ parameterStructures = first;
962
+ }
963
+ const paramEnd = args.length;
964
+ const numberOfParams = paramEnd - paramStart;
965
+ switch (numberOfParams) {
966
+ case 0:
967
+ messageParams = undefined;
968
+ break;
969
+ case 1:
970
+ messageParams = computeSingleParam(parameterStructures, args[paramStart]);
971
+ break;
972
+ default:
973
+ if (parameterStructures === messages_1.ParameterStructures.byName) {
974
+ throw new Error(`Received ${numberOfParams} parameters for 'by Name' notification parameter structure.`);
975
+ }
976
+ messageParams = args.slice(paramStart, paramEnd).map(value => undefinedToNull(value));
977
+ break;
978
+ }
979
+ }
980
+ else {
981
+ const params = args;
982
+ method = type.method;
983
+ messageParams = computeMessageParams(type, params);
984
+ }
985
+ const notificationMessage = {
986
+ jsonrpc: version,
987
+ method: method,
988
+ params: messageParams
989
+ };
990
+ traceSendingNotification(notificationMessage);
991
+ return messageWriter.write(notificationMessage).catch((error) => {
992
+ logger.error(`Sending notification failed.`);
993
+ throw error;
994
+ });
995
+ },
996
+ onNotification: (type, handler) => {
997
+ throwIfClosedOrDisposed();
998
+ let method;
999
+ if (Is.func(type)) {
1000
+ starNotificationHandler = type;
1001
+ }
1002
+ else if (handler) {
1003
+ if (Is.string(type)) {
1004
+ method = type;
1005
+ notificationHandlers.set(type, { type: undefined, handler });
1006
+ }
1007
+ else {
1008
+ method = type.method;
1009
+ notificationHandlers.set(type.method, { type, handler });
1010
+ }
1011
+ }
1012
+ return {
1013
+ dispose: () => {
1014
+ if (method !== undefined) {
1015
+ if (notificationHandlers.get(method)?.handler === handler) {
1016
+ notificationHandlers.delete(method);
1017
+ }
1018
+ }
1019
+ else if (starNotificationHandler === type) {
1020
+ starNotificationHandler = undefined;
1021
+ }
1022
+ }
1023
+ };
1024
+ },
1025
+ onProgress: (_type, token, handler) => {
1026
+ if (progressHandlers.has(token)) {
1027
+ throw new Error(`Progress handler for token ${token} already registered`);
1028
+ }
1029
+ progressHandlers.set(token, handler);
1030
+ return {
1031
+ dispose: () => {
1032
+ if (progressHandlers.get(token) === handler) {
1033
+ progressHandlers.delete(token);
1034
+ }
1035
+ }
1036
+ };
1037
+ },
1038
+ sendProgress: (_type, token, value) => {
1039
+ // This should not await but simple return to ensure that we don't have another
1040
+ // async scheduling. Otherwise one send could overtake another send.
1041
+ return connection.sendNotification(ProgressNotification.type, { token, value });
1042
+ },
1043
+ onUnhandledProgress: unhandledProgressEmitter.event,
1044
+ sendRequest: (type, ...args) => {
1045
+ throwIfClosedOrDisposed();
1046
+ throwIfNotListening();
1047
+ function sendCancellation(connection, id) {
1048
+ const p = cancellationStrategy.sender.sendCancellation(connection, id);
1049
+ if (p === undefined) {
1050
+ logger.log(`Received no promise from cancellation strategy when cancelling id ${id}`);
1051
+ }
1052
+ else {
1053
+ p.catch(() => {
1054
+ logger.log(`Sending cancellation messages for id ${id} failed.`);
1055
+ });
1056
+ }
1057
+ }
1058
+ let method;
1059
+ let messageParams;
1060
+ let token = undefined;
1061
+ if (Is.string(type)) {
1062
+ method = type;
1063
+ const first = args[0];
1064
+ const last = args[args.length - 1];
1065
+ let paramStart = 0;
1066
+ let parameterStructures = messages_1.ParameterStructures.auto;
1067
+ if (messages_1.ParameterStructures.is(first)) {
1068
+ paramStart = 1;
1069
+ parameterStructures = first;
1070
+ }
1071
+ let paramEnd = args.length;
1072
+ if (cancellation_1.CancellationToken.is(last)) {
1073
+ paramEnd = paramEnd - 1;
1074
+ token = last;
1075
+ }
1076
+ const numberOfParams = paramEnd - paramStart;
1077
+ switch (numberOfParams) {
1078
+ case 0:
1079
+ messageParams = undefined;
1080
+ break;
1081
+ case 1:
1082
+ messageParams = computeSingleParam(parameterStructures, args[paramStart]);
1083
+ break;
1084
+ default:
1085
+ if (parameterStructures === messages_1.ParameterStructures.byName) {
1086
+ throw new Error(`Received ${numberOfParams} parameters for 'by Name' request parameter structure.`);
1087
+ }
1088
+ messageParams = args.slice(paramStart, paramEnd).map(value => undefinedToNull(value));
1089
+ break;
1090
+ }
1091
+ }
1092
+ else {
1093
+ const params = args;
1094
+ method = type.method;
1095
+ messageParams = computeMessageParams(type, params);
1096
+ const numberOfParams = type.numberOfParams;
1097
+ token = cancellation_1.CancellationToken.is(params[numberOfParams]) ? params[numberOfParams] : undefined;
1098
+ }
1099
+ const id = sequenceNumber++;
1100
+ let disposable;
1101
+ let tokenWasCancelled = false;
1102
+ if (token !== undefined) {
1103
+ if (token.isCancellationRequested) {
1104
+ tokenWasCancelled = true;
1105
+ }
1106
+ else {
1107
+ disposable = token.onCancellationRequested(() => {
1108
+ sendCancellation(connection, id);
1109
+ });
1110
+ }
1111
+ }
1112
+ const requestMessage = {
1113
+ jsonrpc: version,
1114
+ id: id,
1115
+ method: method,
1116
+ params: messageParams
1117
+ };
1118
+ traceSendingRequest(requestMessage);
1119
+ if (typeof cancellationStrategy.sender.enableCancellation === 'function') {
1120
+ cancellationStrategy.sender.enableCancellation(requestMessage);
1121
+ }
1122
+ // eslint-disable-next-line no-async-promise-executor
1123
+ return new Promise(async (resolve, reject) => {
1124
+ const resolveWithCleanup = (r) => {
1125
+ resolve(r);
1126
+ cancellationStrategy.sender.cleanup(id);
1127
+ disposable?.dispose();
1128
+ };
1129
+ const rejectWithCleanup = (r) => {
1130
+ reject(r);
1131
+ cancellationStrategy.sender.cleanup(id);
1132
+ disposable?.dispose();
1133
+ };
1134
+ const responsePromise = { method: method, timerStart: Date.now(), resolve: resolveWithCleanup, reject: rejectWithCleanup };
1135
+ try {
1136
+ responsePromises.set(id, responsePromise);
1137
+ await messageWriter.write(requestMessage);
1138
+ if (tokenWasCancelled) {
1139
+ sendCancellation(connection, id);
1140
+ }
1141
+ }
1142
+ catch (error) {
1143
+ // Writing the message failed. So we need to delete it from the response promises and
1144
+ // reject it.
1145
+ responsePromises.delete(id);
1146
+ responsePromise.reject(new messages_1.ResponseError(messages_1.ErrorCodes.MessageWriteError, error.message ? error.message : 'Unknown reason'));
1147
+ logger.error(`Sending request failed.`);
1148
+ throw error;
1149
+ }
1150
+ });
1151
+ },
1152
+ onRequest: (type, handler) => {
1153
+ throwIfClosedOrDisposed();
1154
+ let method = null;
1155
+ if (StarRequestHandler.is(type)) {
1156
+ method = undefined;
1157
+ starRequestHandler = type;
1158
+ }
1159
+ else if (Is.string(type)) {
1160
+ method = null;
1161
+ if (handler !== undefined) {
1162
+ method = type;
1163
+ requestHandlers.set(type, { handler: handler, type: undefined });
1164
+ }
1165
+ }
1166
+ else {
1167
+ if (handler !== undefined) {
1168
+ method = type.method;
1169
+ requestHandlers.set(type.method, { type, handler });
1170
+ }
1171
+ }
1172
+ return {
1173
+ dispose: () => {
1174
+ if (method === null) {
1175
+ return;
1176
+ }
1177
+ if (method !== undefined) {
1178
+ if (requestHandlers.get(method)?.handler === handler) {
1179
+ requestHandlers.delete(method);
1180
+ }
1181
+ }
1182
+ else if (starRequestHandler === type) {
1183
+ starRequestHandler = undefined;
1184
+ }
1185
+ }
1186
+ };
1187
+ },
1188
+ hasPendingResponse: () => {
1189
+ return responsePromises.size > 0;
1190
+ },
1191
+ trace: async (_value, _tracer, sendNotificationOrTraceOptions) => {
1192
+ let _sendNotification = false;
1193
+ let _traceFormat = TraceFormat.Text;
1194
+ if (sendNotificationOrTraceOptions !== undefined) {
1195
+ if (Is.boolean(sendNotificationOrTraceOptions)) {
1196
+ _sendNotification = sendNotificationOrTraceOptions;
1197
+ }
1198
+ else {
1199
+ _sendNotification = sendNotificationOrTraceOptions.sendNotification || false;
1200
+ _traceFormat = sendNotificationOrTraceOptions.traceFormat || TraceFormat.Text;
1201
+ }
1202
+ }
1203
+ trace = _value;
1204
+ traceFormat = _traceFormat;
1205
+ if (trace === Trace.Off) {
1206
+ tracer = undefined;
1207
+ }
1208
+ else {
1209
+ tracer = _tracer;
1210
+ }
1211
+ if (_sendNotification && !isClosed() && !isDisposed()) {
1212
+ await connection.sendNotification(SetTraceNotification.type, { value: Trace.toString(_value) });
1213
+ }
1214
+ },
1215
+ onError: errorEmitter.event,
1216
+ onClose: closeEmitter.event,
1217
+ onUnhandledNotification: unhandledNotificationEmitter.event,
1218
+ onDispose: disposeEmitter.event,
1219
+ end: () => {
1220
+ messageWriter.end();
1221
+ },
1222
+ dispose: () => {
1223
+ if (isDisposed()) {
1224
+ return;
1225
+ }
1226
+ state = ConnectionState.Disposed;
1227
+ disposeEmitter.fire(undefined);
1228
+ const error = new messages_1.ResponseError(messages_1.ErrorCodes.PendingResponseRejected, 'Pending response rejected since connection got disposed');
1229
+ for (const promise of responsePromises.values()) {
1230
+ promise.reject(error);
1231
+ }
1232
+ responsePromises = new Map();
1233
+ requestTokens = new Map();
1234
+ knownCanceledRequests = new Set();
1235
+ messageQueue = new linkedMap_1.LinkedMap();
1236
+ // Test for backwards compatibility
1237
+ if (Is.func(messageWriter.dispose)) {
1238
+ messageWriter.dispose();
1239
+ }
1240
+ if (Is.func(messageReader.dispose)) {
1241
+ messageReader.dispose();
1242
+ }
1243
+ },
1244
+ listen: () => {
1245
+ throwIfClosedOrDisposed();
1246
+ throwIfListening();
1247
+ state = ConnectionState.Listening;
1248
+ messageReader.listen(callback);
1249
+ },
1250
+ inspect: () => {
1251
+ // eslint-disable-next-line no-console
1252
+ (0, ral_1.default)().console.log('inspect');
1253
+ }
1254
+ };
1255
+ connection.onNotification(LogTraceNotification.type, (params) => {
1256
+ if (trace === Trace.Off || !tracer) {
1257
+ return;
1258
+ }
1259
+ const verbose = trace === Trace.Verbose || trace === Trace.Compact;
1260
+ tracer.log(params.message, verbose ? params.verbose : undefined);
1261
+ });
1262
+ connection.onNotification(ProgressNotification.type, async (params) => {
1263
+ const handler = progressHandlers.get(params.token);
1264
+ if (handler) {
1265
+ await handler(params.value);
1266
+ }
1267
+ else {
1268
+ unhandledProgressEmitter.fire(params);
1269
+ }
1270
+ });
1271
+ return connection;
1272
+ }