@mrclrchtr/supi-lsp 1.11.1 → 1.11.3
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.
- package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/package.json +1 -1
- package/node_modules/@mrclrchtr/supi-code-runtime/package.json +2 -2
- package/node_modules/@mrclrchtr/supi-core/package.json +1 -1
- package/node_modules/vscode-jsonrpc/README.md +2 -17
- package/node_modules/vscode-jsonrpc/eslint.config.js +12 -0
- package/node_modules/vscode-jsonrpc/lib/browser/main.js +10 -3
- package/node_modules/vscode-jsonrpc/lib/browser/ril.d.ts +11 -1
- package/node_modules/vscode-jsonrpc/lib/browser/ril.js +58 -4
- package/node_modules/vscode-jsonrpc/lib/common/api.d.ts +3 -3
- package/node_modules/vscode-jsonrpc/lib/common/api.js +10 -4
- package/node_modules/vscode-jsonrpc/lib/common/cancellation.js +41 -5
- package/node_modules/vscode-jsonrpc/lib/common/connection.d.ts +76 -67
- package/node_modules/vscode-jsonrpc/lib/common/connection.js +217 -160
- package/node_modules/vscode-jsonrpc/lib/common/events.js +10 -3
- package/node_modules/vscode-jsonrpc/lib/common/is.js +7 -8
- package/node_modules/vscode-jsonrpc/lib/common/linkedMap.d.ts +3 -1
- package/node_modules/vscode-jsonrpc/lib/common/linkedMap.js +17 -3
- package/node_modules/vscode-jsonrpc/lib/common/messageBuffer.js +5 -2
- package/node_modules/vscode-jsonrpc/lib/common/messageReader.js +52 -3
- package/node_modules/vscode-jsonrpc/lib/common/messageWriter.js +45 -3
- package/node_modules/vscode-jsonrpc/lib/common/messages.js +147 -17
- package/node_modules/vscode-jsonrpc/lib/common/semaphore.js +8 -2
- package/node_modules/vscode-jsonrpc/lib/common/sharedArrayCancellation.js +4 -3
- package/node_modules/vscode-jsonrpc/lib/node/main.d.ts +0 -5
- package/node_modules/vscode-jsonrpc/lib/node/main.js +56 -24
- package/node_modules/vscode-jsonrpc/lib/node/ril.d.ts +0 -1
- package/node_modules/vscode-jsonrpc/lib/node/ril.js +3 -1
- package/node_modules/vscode-jsonrpc/package.json +20 -11
- package/node_modules/vscode-jsonrpc/tsconfig.tsbuildinfo +1 -0
- package/node_modules/vscode-languageserver-protocol/README.md +3 -3
- package/node_modules/vscode-languageserver-protocol/eslint.config.js +13 -0
- package/node_modules/vscode-languageserver-protocol/lib/browser/main.js +1 -2
- package/node_modules/vscode-languageserver-protocol/lib/common/api.d.ts +1 -1
- package/node_modules/vscode-languageserver-protocol/lib/common/api.js +1 -1
- package/node_modules/vscode-languageserver-protocol/lib/common/connection.d.ts +13 -13
- package/node_modules/vscode-languageserver-protocol/lib/common/connection.js +1 -2
- package/node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts +7 -0
- package/node_modules/vscode-languageserver-protocol/lib/common/messages.js +38 -1
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.callHierarchy.d.ts +5 -2
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.callHierarchy.js +3 -0
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.colorProvider.d.ts +5 -3
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.colorProvider.js +3 -1
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.configuration.d.ts +2 -1
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.configuration.js +1 -0
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts +735 -361
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.declaration.d.ts +3 -2
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.declaration.js +1 -0
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.diagnostic.d.ts +12 -3
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.diagnostic.js +37 -1
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.fileOperations.d.ts +8 -2
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.fileOperations.js +6 -0
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.foldingRange.d.ts +34 -25
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.foldingRange.js +4 -1
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.implementation.d.ts +3 -2
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.implementation.js +1 -0
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.inlayHint.d.ts +15 -8
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.inlayHint.js +3 -0
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.inlineCompletion.d.ts +3 -7
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.inlineCompletion.js +1 -1
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.inlineValue.d.ts +7 -6
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.inlineValue.js +2 -0
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.js +97 -9
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.linkedEditingRange.d.ts +3 -2
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.linkedEditingRange.js +1 -0
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.moniker.d.ts +3 -2
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.moniker.js +1 -0
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.notebook.d.ts +91 -63
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.notebook.js +34 -1
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.progress.d.ts +2 -1
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.progress.js +1 -0
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.selectionRange.d.ts +3 -2
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.selectionRange.js +1 -0
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.semanticTokens.d.ts +44 -26
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.semanticTokens.js +4 -0
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.showDocument.d.ts +4 -3
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.showDocument.js +1 -0
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.textDocumentContent.d.ts +93 -0
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.textDocumentContent.js +33 -0
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.typeDefinition.d.ts +3 -2
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.typeDefinition.js +2 -1
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.typeHierarchy.d.ts +3 -2
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.typeHierarchy.js +1 -0
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.workspaceFolder.d.ts +3 -1
- package/node_modules/vscode-languageserver-protocol/lib/common/protocol.workspaceFolder.js +2 -0
- package/node_modules/vscode-languageserver-protocol/lib/common/utils/is.js +9 -10
- package/node_modules/vscode-languageserver-protocol/lib/node/main.d.ts +0 -1
- package/node_modules/vscode-languageserver-protocol/lib/node/main.js +1 -2
- package/node_modules/vscode-languageserver-protocol/metaModel.schema.json +84 -3
- package/node_modules/vscode-languageserver-protocol/package.json +21 -12
- package/node_modules/vscode-languageserver-types/README.md +1 -1
- package/node_modules/vscode-languageserver-types/eslint.config.js +13 -0
- package/node_modules/vscode-languageserver-types/lib/esm/main.d.ts +483 -107
- package/node_modules/vscode-languageserver-types/lib/esm/main.js +255 -62
- package/node_modules/vscode-languageserver-types/lib/umd/main.d.ts +483 -107
- package/node_modules/vscode-languageserver-types/lib/umd/main.js +201 -8
- package/node_modules/vscode-languageserver-types/package.json +9 -8
- package/package.json +4 -4
- package/src/config/types.ts +3 -0
- package/src/diagnostics/diagnostic-context.ts +2 -1
- package/src/diagnostics/diagnostic-display.ts +2 -1
- package/src/diagnostics/diagnostics.ts +2 -1
- package/src/diagnostics/stale-diagnostics.ts +3 -1
- package/src/diagnostics/suppression-diagnostics.ts +3 -1
- package/src/format.ts +30 -3
- package/src/ui/ui.ts +3 -1
- package/node_modules/vscode-jsonrpc/browser.d.ts +0 -6
- package/node_modules/vscode-jsonrpc/browser.js +0 -7
- package/node_modules/vscode-jsonrpc/node.cmd +0 -5
- package/node_modules/vscode-jsonrpc/node.d.ts +0 -6
- package/node_modules/vscode-jsonrpc/node.js +0 -7
- package/node_modules/vscode-languageserver-protocol/browser.d.ts +0 -6
- package/node_modules/vscode-languageserver-protocol/browser.js +0 -7
- package/node_modules/vscode-languageserver-protocol/node.cmd +0 -5
- package/node_modules/vscode-languageserver-protocol/node.d.ts +0 -6
- package/node_modules/vscode-languageserver-protocol/node.js +0 -7
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/License.txt +0 -11
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/README.md +0 -69
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/browser.d.ts +0 -6
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/browser.js +0 -7
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/browser/main.d.ts +0 -17
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/browser/main.js +0 -76
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/browser/ril.d.ts +0 -12
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/browser/ril.js +0 -156
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/api.d.ts +0 -14
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/api.js +0 -81
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/cancellation.d.ts +0 -32
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/cancellation.js +0 -96
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/connection.d.ts +0 -358
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/connection.js +0 -1212
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/disposable.d.ts +0 -9
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/disposable.js +0 -16
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/encoding.d.ts +0 -52
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/encoding.js +0 -70
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/events.d.ts +0 -39
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/events.js +0 -128
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/is.d.ts +0 -7
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/is.js +0 -35
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/linkedMap.d.ts +0 -53
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/linkedMap.js +0 -398
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/messageBuffer.d.ts +0 -18
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/messageBuffer.js +0 -152
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/messageReader.d.ts +0 -77
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/messageReader.js +0 -197
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/messageWriter.d.ts +0 -60
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/messageWriter.js +0 -115
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/messages.d.ts +0 -369
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/messages.js +0 -306
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/ral.d.ts +0 -74
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/ral.js +0 -23
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/semaphore.d.ts +0 -10
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/semaphore.js +0 -68
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/sharedArrayCancellation.d.ts +0 -15
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/common/sharedArrayCancellation.js +0 -76
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/node/main.d.ts +0 -63
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/node/main.js +0 -257
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/node/ril.d.ts +0 -13
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/lib/node/ril.js +0 -161
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/node.cmd +0 -5
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/node.d.ts +0 -6
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/node.js +0 -7
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/package.json +0 -45
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/thirdpartynotices.txt +0 -16
- package/node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc/typings/thenable.d.ts +0 -5
|
@@ -3,10 +3,48 @@
|
|
|
3
3
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
4
4
|
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
5
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
|
+
};
|
|
6
43
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.
|
|
8
|
-
|
|
9
|
-
const
|
|
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"));
|
|
10
48
|
const messages_1 = require("./messages");
|
|
11
49
|
const linkedMap_1 = require("./linkedMap");
|
|
12
50
|
const events_1 = require("./events");
|
|
@@ -27,6 +65,12 @@ var ProgressNotification;
|
|
|
27
65
|
ProgressNotification.type = new messages_1.NotificationType('$/progress');
|
|
28
66
|
})(ProgressNotification || (ProgressNotification = {}));
|
|
29
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;
|
|
30
74
|
constructor() {
|
|
31
75
|
}
|
|
32
76
|
}
|
|
@@ -51,25 +95,29 @@ var Trace;
|
|
|
51
95
|
Trace[Trace["Compact"] = 2] = "Compact";
|
|
52
96
|
Trace[Trace["Verbose"] = 3] = "Verbose";
|
|
53
97
|
})(Trace || (exports.Trace = Trace = {}));
|
|
54
|
-
var
|
|
55
|
-
(function (
|
|
98
|
+
var TraceValue;
|
|
99
|
+
(function (TraceValue) {
|
|
56
100
|
/**
|
|
57
101
|
* Turn tracing off.
|
|
58
102
|
*/
|
|
59
|
-
|
|
103
|
+
TraceValue.Off = 'off';
|
|
60
104
|
/**
|
|
61
105
|
* Trace messages only.
|
|
62
106
|
*/
|
|
63
|
-
|
|
107
|
+
TraceValue.Messages = 'messages';
|
|
64
108
|
/**
|
|
65
109
|
* Compact message tracing.
|
|
66
110
|
*/
|
|
67
|
-
|
|
111
|
+
TraceValue.Compact = 'compact';
|
|
68
112
|
/**
|
|
69
113
|
* Verbose message tracing.
|
|
70
114
|
*/
|
|
71
|
-
|
|
72
|
-
})(
|
|
115
|
+
TraceValue.Verbose = 'verbose';
|
|
116
|
+
})(TraceValue || (exports.TraceValue = TraceValue = {}));
|
|
117
|
+
/**
|
|
118
|
+
* @deprecated Use TraceValue instead
|
|
119
|
+
*/
|
|
120
|
+
exports.TraceValues = TraceValue;
|
|
73
121
|
(function (Trace) {
|
|
74
122
|
function fromString(value) {
|
|
75
123
|
if (!Is.string(value)) {
|
|
@@ -150,6 +198,7 @@ var ConnectionErrors;
|
|
|
150
198
|
ConnectionErrors[ConnectionErrors["AlreadyListening"] = 3] = "AlreadyListening";
|
|
151
199
|
})(ConnectionErrors || (exports.ConnectionErrors = ConnectionErrors = {}));
|
|
152
200
|
class ConnectionError extends Error {
|
|
201
|
+
code;
|
|
153
202
|
constructor(code, message) {
|
|
154
203
|
super(message);
|
|
155
204
|
this.code = code;
|
|
@@ -231,7 +280,8 @@ var ConnectionOptions;
|
|
|
231
280
|
(function (ConnectionOptions) {
|
|
232
281
|
function is(value) {
|
|
233
282
|
const candidate = value;
|
|
234
|
-
return candidate
|
|
283
|
+
return candidate
|
|
284
|
+
&& (CancellationStrategy.is(candidate.cancellationStrategy) || ConnectionStrategy.is(candidate.connectionStrategy) || MessageStrategy.is(candidate.messageStrategy) || Is.number(candidate.maxParallelism));
|
|
235
285
|
}
|
|
236
286
|
ConnectionOptions.is = is;
|
|
237
287
|
})(ConnectionOptions || (exports.ConnectionOptions = ConnectionOptions = {}));
|
|
@@ -248,6 +298,8 @@ function createMessageConnection(messageReader, messageWriter, _logger, options)
|
|
|
248
298
|
let notificationSequenceNumber = 0;
|
|
249
299
|
let unknownResponseSequenceNumber = 0;
|
|
250
300
|
const version = '2.0';
|
|
301
|
+
const maxParallelism = options?.maxParallelism ?? -1;
|
|
302
|
+
let inFlight = 0;
|
|
251
303
|
let starRequestHandler = undefined;
|
|
252
304
|
const requestHandlers = new Map();
|
|
253
305
|
let starNotificationHandler = undefined;
|
|
@@ -268,34 +320,6 @@ function createMessageConnection(messageReader, messageWriter, _logger, options)
|
|
|
268
320
|
const unhandledProgressEmitter = new events_1.Emitter();
|
|
269
321
|
const disposeEmitter = new events_1.Emitter();
|
|
270
322
|
const cancellationStrategy = (options && options.cancellationStrategy) ? options.cancellationStrategy : CancellationStrategy.Message;
|
|
271
|
-
function createRequestQueueKey(id) {
|
|
272
|
-
if (id === null) {
|
|
273
|
-
throw new Error(`Can't send requests with id null since the response can't be correlated.`);
|
|
274
|
-
}
|
|
275
|
-
return 'req-' + id.toString();
|
|
276
|
-
}
|
|
277
|
-
function createResponseQueueKey(id) {
|
|
278
|
-
if (id === null) {
|
|
279
|
-
return 'res-unknown-' + (++unknownResponseSequenceNumber).toString();
|
|
280
|
-
}
|
|
281
|
-
else {
|
|
282
|
-
return 'res-' + id.toString();
|
|
283
|
-
}
|
|
284
|
-
}
|
|
285
|
-
function createNotificationQueueKey() {
|
|
286
|
-
return 'not-' + (++notificationSequenceNumber).toString();
|
|
287
|
-
}
|
|
288
|
-
function addMessageToQueue(queue, message) {
|
|
289
|
-
if (messages_1.Message.isRequest(message)) {
|
|
290
|
-
queue.set(createRequestQueueKey(message.id), message);
|
|
291
|
-
}
|
|
292
|
-
else if (messages_1.Message.isResponse(message)) {
|
|
293
|
-
queue.set(createResponseQueueKey(message.id), message);
|
|
294
|
-
}
|
|
295
|
-
else {
|
|
296
|
-
queue.set(createNotificationQueueKey(), message);
|
|
297
|
-
}
|
|
298
|
-
}
|
|
299
323
|
function cancelUndispatched(_message) {
|
|
300
324
|
return undefined;
|
|
301
325
|
}
|
|
@@ -325,45 +349,101 @@ function createMessageConnection(messageReader, messageWriter, _logger, options)
|
|
|
325
349
|
messageReader.onError(readErrorHandler);
|
|
326
350
|
messageWriter.onClose(closeHandler);
|
|
327
351
|
messageWriter.onError(writeErrorHandler);
|
|
328
|
-
function
|
|
329
|
-
if (
|
|
330
|
-
|
|
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.`);
|
|
331
355
|
}
|
|
332
|
-
|
|
333
|
-
timer = undefined;
|
|
334
|
-
processMessageQueue();
|
|
335
|
-
});
|
|
356
|
+
return 'req-' + id.toString();
|
|
336
357
|
}
|
|
337
|
-
function
|
|
338
|
-
if (
|
|
339
|
-
|
|
358
|
+
function createResponseQueueKey(id) {
|
|
359
|
+
if (id === null) {
|
|
360
|
+
return 'res-unknown-' + (++unknownResponseSequenceNumber).toString();
|
|
340
361
|
}
|
|
341
|
-
else
|
|
342
|
-
|
|
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);
|
|
343
372
|
}
|
|
344
373
|
else if (messages_1.Message.isResponse(message)) {
|
|
345
|
-
|
|
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
|
+
}
|
|
346
384
|
}
|
|
347
385
|
else {
|
|
348
|
-
|
|
386
|
+
queue.set(createNotificationQueueKey(), message);
|
|
349
387
|
}
|
|
350
388
|
}
|
|
351
|
-
function
|
|
352
|
-
if (messageQueue.size === 0) {
|
|
389
|
+
function triggerMessageQueue() {
|
|
390
|
+
if (timer || messageQueue.size === 0) {
|
|
353
391
|
return;
|
|
354
392
|
}
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
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;
|
|
360
400
|
}
|
|
361
|
-
|
|
362
|
-
|
|
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();
|
|
363
432
|
}
|
|
433
|
+
});
|
|
434
|
+
}
|
|
435
|
+
async function handleMessage(message) {
|
|
436
|
+
if (messages_1.Message.isRequest(message)) {
|
|
437
|
+
return handleRequest(message);
|
|
364
438
|
}
|
|
365
|
-
|
|
366
|
-
|
|
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);
|
|
367
447
|
}
|
|
368
448
|
}
|
|
369
449
|
const callback = (message) => {
|
|
@@ -405,11 +485,11 @@ function createMessageConnection(messageReader, messageWriter, _logger, options)
|
|
|
405
485
|
triggerMessageQueue();
|
|
406
486
|
}
|
|
407
487
|
};
|
|
408
|
-
function handleRequest(requestMessage) {
|
|
488
|
+
async function handleRequest(requestMessage) {
|
|
409
489
|
if (isDisposed()) {
|
|
410
490
|
// we return here silently since we fired an event when the
|
|
411
491
|
// connection got disposed.
|
|
412
|
-
return;
|
|
492
|
+
return Promise.resolve();
|
|
413
493
|
}
|
|
414
494
|
function reply(resultOrError, method, startTime) {
|
|
415
495
|
const message = {
|
|
@@ -423,7 +503,7 @@ function createMessageConnection(messageReader, messageWriter, _logger, options)
|
|
|
423
503
|
message.result = resultOrError === undefined ? null : resultOrError;
|
|
424
504
|
}
|
|
425
505
|
traceSendingResponse(message, method, startTime);
|
|
426
|
-
messageWriter.write(message)
|
|
506
|
+
return messageWriter.write(message);
|
|
427
507
|
}
|
|
428
508
|
function replyError(error, method, startTime) {
|
|
429
509
|
const message = {
|
|
@@ -432,21 +512,7 @@ function createMessageConnection(messageReader, messageWriter, _logger, options)
|
|
|
432
512
|
error: error.toJson()
|
|
433
513
|
};
|
|
434
514
|
traceSendingResponse(message, method, startTime);
|
|
435
|
-
messageWriter.write(message)
|
|
436
|
-
}
|
|
437
|
-
function replySuccess(result, method, startTime) {
|
|
438
|
-
// The JSON RPC defines that a response must either have a result or an error
|
|
439
|
-
// So we can't treat undefined as a valid response result.
|
|
440
|
-
if (result === undefined) {
|
|
441
|
-
result = null;
|
|
442
|
-
}
|
|
443
|
-
const message = {
|
|
444
|
-
jsonrpc: version,
|
|
445
|
-
id: requestMessage.id,
|
|
446
|
-
result: result
|
|
447
|
-
};
|
|
448
|
-
traceSendingResponse(message, method, startTime);
|
|
449
|
-
messageWriter.write(message).catch(() => logger.error(`Sending response failed.`));
|
|
515
|
+
return messageWriter.write(message);
|
|
450
516
|
}
|
|
451
517
|
traceReceivedRequest(requestMessage);
|
|
452
518
|
const element = requestHandlers.get(requestMessage.method);
|
|
@@ -473,22 +539,19 @@ function createMessageConnection(messageReader, messageWriter, _logger, options)
|
|
|
473
539
|
if (requestHandler) {
|
|
474
540
|
if (requestMessage.params === undefined) {
|
|
475
541
|
if (type !== undefined && type.numberOfParams !== 0) {
|
|
476
|
-
replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InvalidParams, `Request ${requestMessage.method} defines ${type.numberOfParams} params but received none.`), requestMessage.method, startTime);
|
|
477
|
-
return;
|
|
542
|
+
return replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InvalidParams, `Request ${requestMessage.method} defines ${type.numberOfParams} params but received none.`), requestMessage.method, startTime);
|
|
478
543
|
}
|
|
479
544
|
handlerResult = requestHandler(cancellationSource.token);
|
|
480
545
|
}
|
|
481
546
|
else if (Array.isArray(requestMessage.params)) {
|
|
482
547
|
if (type !== undefined && type.parameterStructures === messages_1.ParameterStructures.byName) {
|
|
483
|
-
replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InvalidParams, `Request ${requestMessage.method} defines parameters by name but received parameters by position`), requestMessage.method, startTime);
|
|
484
|
-
return;
|
|
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);
|
|
485
549
|
}
|
|
486
550
|
handlerResult = requestHandler(...requestMessage.params, cancellationSource.token);
|
|
487
551
|
}
|
|
488
552
|
else {
|
|
489
553
|
if (type !== undefined && type.parameterStructures === messages_1.ParameterStructures.byPosition) {
|
|
490
|
-
replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InvalidParams, `Request ${requestMessage.method} defines parameters by position but received parameters by name`), requestMessage.method, startTime);
|
|
491
|
-
return;
|
|
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);
|
|
492
555
|
}
|
|
493
556
|
handlerResult = requestHandler(requestMessage.params, cancellationSource.token);
|
|
494
557
|
}
|
|
@@ -496,48 +559,26 @@ function createMessageConnection(messageReader, messageWriter, _logger, options)
|
|
|
496
559
|
else if (starRequestHandler) {
|
|
497
560
|
handlerResult = starRequestHandler(requestMessage.method, requestMessage.params, cancellationSource.token);
|
|
498
561
|
}
|
|
499
|
-
const
|
|
500
|
-
|
|
501
|
-
requestTokens.delete(tokenKey);
|
|
502
|
-
replySuccess(handlerResult, requestMessage.method, startTime);
|
|
503
|
-
}
|
|
504
|
-
else if (promise.then) {
|
|
505
|
-
promise.then((resultOrError) => {
|
|
506
|
-
requestTokens.delete(tokenKey);
|
|
507
|
-
reply(resultOrError, requestMessage.method, startTime);
|
|
508
|
-
}, error => {
|
|
509
|
-
requestTokens.delete(tokenKey);
|
|
510
|
-
if (error instanceof messages_1.ResponseError) {
|
|
511
|
-
replyError(error, requestMessage.method, startTime);
|
|
512
|
-
}
|
|
513
|
-
else if (error && Is.string(error.message)) {
|
|
514
|
-
replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InternalError, `Request ${requestMessage.method} failed with message: ${error.message}`), requestMessage.method, startTime);
|
|
515
|
-
}
|
|
516
|
-
else {
|
|
517
|
-
replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InternalError, `Request ${requestMessage.method} failed unexpectedly without providing any details.`), requestMessage.method, startTime);
|
|
518
|
-
}
|
|
519
|
-
});
|
|
520
|
-
}
|
|
521
|
-
else {
|
|
522
|
-
requestTokens.delete(tokenKey);
|
|
523
|
-
reply(handlerResult, requestMessage.method, startTime);
|
|
524
|
-
}
|
|
562
|
+
const resultOrError = await handlerResult;
|
|
563
|
+
await reply(resultOrError, requestMessage.method, startTime);
|
|
525
564
|
}
|
|
526
565
|
catch (error) {
|
|
527
|
-
requestTokens.delete(tokenKey);
|
|
528
566
|
if (error instanceof messages_1.ResponseError) {
|
|
529
|
-
reply(error, requestMessage.method, startTime);
|
|
567
|
+
await reply(error, requestMessage.method, startTime);
|
|
530
568
|
}
|
|
531
569
|
else if (error && Is.string(error.message)) {
|
|
532
|
-
replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InternalError, `Request ${requestMessage.method} failed with message: ${error.message}`), requestMessage.method, startTime);
|
|
570
|
+
await replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InternalError, `Request ${requestMessage.method} failed with message: ${error.message}`), requestMessage.method, startTime);
|
|
533
571
|
}
|
|
534
572
|
else {
|
|
535
|
-
replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InternalError, `Request ${requestMessage.method} failed unexpectedly without providing any details.`), requestMessage.method, startTime);
|
|
573
|
+
await replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InternalError, `Request ${requestMessage.method} failed unexpectedly without providing any details.`), requestMessage.method, startTime);
|
|
536
574
|
}
|
|
537
575
|
}
|
|
576
|
+
finally {
|
|
577
|
+
requestTokens.delete(tokenKey);
|
|
578
|
+
}
|
|
538
579
|
}
|
|
539
580
|
else {
|
|
540
|
-
replyError(new messages_1.ResponseError(messages_1.ErrorCodes.MethodNotFound, `Unhandled method ${requestMessage.method}`), requestMessage.method, startTime);
|
|
581
|
+
await replyError(new messages_1.ResponseError(messages_1.ErrorCodes.MethodNotFound, `Unhandled method ${requestMessage.method}`), requestMessage.method, startTime);
|
|
541
582
|
}
|
|
542
583
|
}
|
|
543
584
|
function handleResponse(responseMessage) {
|
|
@@ -582,7 +623,7 @@ function createMessageConnection(messageReader, messageWriter, _logger, options)
|
|
|
582
623
|
}
|
|
583
624
|
}
|
|
584
625
|
}
|
|
585
|
-
function handleNotification(message) {
|
|
626
|
+
async function handleNotification(message) {
|
|
586
627
|
if (isDisposed()) {
|
|
587
628
|
// See handle request.
|
|
588
629
|
return;
|
|
@@ -612,14 +653,14 @@ function createMessageConnection(messageReader, messageWriter, _logger, options)
|
|
|
612
653
|
logger.error(`Notification ${message.method} defines ${type.numberOfParams} params but received none.`);
|
|
613
654
|
}
|
|
614
655
|
}
|
|
615
|
-
notificationHandler();
|
|
656
|
+
await notificationHandler();
|
|
616
657
|
}
|
|
617
658
|
else if (Array.isArray(message.params)) {
|
|
618
659
|
// There are JSON-RPC libraries that send progress message as positional params although
|
|
619
660
|
// specified as named. So convert them if this is the case.
|
|
620
661
|
const params = message.params;
|
|
621
662
|
if (message.method === ProgressNotification.type.method && params.length === 2 && ProgressToken.is(params[0])) {
|
|
622
|
-
notificationHandler({ token: params[0], value: params[1] });
|
|
663
|
+
await notificationHandler({ token: params[0], value: params[1] });
|
|
623
664
|
}
|
|
624
665
|
else {
|
|
625
666
|
if (type !== undefined) {
|
|
@@ -630,18 +671,18 @@ function createMessageConnection(messageReader, messageWriter, _logger, options)
|
|
|
630
671
|
logger.error(`Notification ${message.method} defines ${type.numberOfParams} params but received ${params.length} arguments`);
|
|
631
672
|
}
|
|
632
673
|
}
|
|
633
|
-
notificationHandler(...params);
|
|
674
|
+
await notificationHandler(...params);
|
|
634
675
|
}
|
|
635
676
|
}
|
|
636
677
|
else {
|
|
637
678
|
if (type !== undefined && type.parameterStructures === messages_1.ParameterStructures.byPosition) {
|
|
638
679
|
logger.error(`Notification ${message.method} defines parameters by position but received parameters by name`);
|
|
639
680
|
}
|
|
640
|
-
notificationHandler(message.params);
|
|
681
|
+
await notificationHandler(message.params);
|
|
641
682
|
}
|
|
642
683
|
}
|
|
643
684
|
else if (starNotificationHandler) {
|
|
644
|
-
starNotificationHandler(message.method, message.params);
|
|
685
|
+
await starNotificationHandler(message.method, message.params);
|
|
645
686
|
}
|
|
646
687
|
}
|
|
647
688
|
catch (error) {
|
|
@@ -693,7 +734,7 @@ function createMessageConnection(messageReader, messageWriter, _logger, options)
|
|
|
693
734
|
if (traceFormat === TraceFormat.Text) {
|
|
694
735
|
let data = undefined;
|
|
695
736
|
if ((trace === Trace.Verbose || trace === Trace.Compact) && message.params) {
|
|
696
|
-
data = `Params: ${stringifyTrace(message.params)}
|
|
737
|
+
data = `Params: ${stringifyTrace(message.params)}`;
|
|
697
738
|
}
|
|
698
739
|
tracer.log(`Sending request '${message.method} - (${message.id})'.`, data);
|
|
699
740
|
}
|
|
@@ -709,10 +750,10 @@ function createMessageConnection(messageReader, messageWriter, _logger, options)
|
|
|
709
750
|
let data = undefined;
|
|
710
751
|
if (trace === Trace.Verbose || trace === Trace.Compact) {
|
|
711
752
|
if (message.params) {
|
|
712
|
-
data = `Params: ${stringifyTrace(message.params)}
|
|
753
|
+
data = `Params: ${stringifyTrace(message.params)}`;
|
|
713
754
|
}
|
|
714
755
|
else {
|
|
715
|
-
data = 'No parameters provided
|
|
756
|
+
data = 'No parameters provided.';
|
|
716
757
|
}
|
|
717
758
|
}
|
|
718
759
|
tracer.log(`Sending notification '${message.method}'.`, data);
|
|
@@ -729,14 +770,14 @@ function createMessageConnection(messageReader, messageWriter, _logger, options)
|
|
|
729
770
|
let data = undefined;
|
|
730
771
|
if (trace === Trace.Verbose || trace === Trace.Compact) {
|
|
731
772
|
if (message.error && message.error.data) {
|
|
732
|
-
data = `Error data: ${stringifyTrace(message.error.data)}
|
|
773
|
+
data = `Error data: ${stringifyTrace(message.error.data)}`;
|
|
733
774
|
}
|
|
734
775
|
else {
|
|
735
776
|
if (message.result) {
|
|
736
|
-
data = `Result: ${stringifyTrace(message.result)}
|
|
777
|
+
data = `Result: ${stringifyTrace(message.result)}`;
|
|
737
778
|
}
|
|
738
779
|
else if (message.error === undefined) {
|
|
739
|
-
data = 'No result returned
|
|
780
|
+
data = 'No result returned.';
|
|
740
781
|
}
|
|
741
782
|
}
|
|
742
783
|
}
|
|
@@ -753,7 +794,7 @@ function createMessageConnection(messageReader, messageWriter, _logger, options)
|
|
|
753
794
|
if (traceFormat === TraceFormat.Text) {
|
|
754
795
|
let data = undefined;
|
|
755
796
|
if ((trace === Trace.Verbose || trace === Trace.Compact) && message.params) {
|
|
756
|
-
data = `Params: ${stringifyTrace(message.params)}
|
|
797
|
+
data = `Params: ${stringifyTrace(message.params)}`;
|
|
757
798
|
}
|
|
758
799
|
tracer.log(`Received request '${message.method} - (${message.id})'.`, data);
|
|
759
800
|
}
|
|
@@ -769,10 +810,10 @@ function createMessageConnection(messageReader, messageWriter, _logger, options)
|
|
|
769
810
|
let data = undefined;
|
|
770
811
|
if (trace === Trace.Verbose || trace === Trace.Compact) {
|
|
771
812
|
if (message.params) {
|
|
772
|
-
data = `Params: ${stringifyTrace(message.params)}
|
|
813
|
+
data = `Params: ${stringifyTrace(message.params)}`;
|
|
773
814
|
}
|
|
774
815
|
else {
|
|
775
|
-
data = 'No parameters provided
|
|
816
|
+
data = 'No parameters provided.';
|
|
776
817
|
}
|
|
777
818
|
}
|
|
778
819
|
tracer.log(`Received notification '${message.method}'.`, data);
|
|
@@ -789,14 +830,14 @@ function createMessageConnection(messageReader, messageWriter, _logger, options)
|
|
|
789
830
|
let data = undefined;
|
|
790
831
|
if (trace === Trace.Verbose || trace === Trace.Compact) {
|
|
791
832
|
if (message.error && message.error.data) {
|
|
792
|
-
data = `Error data: ${stringifyTrace(message.error.data)}
|
|
833
|
+
data = `Error data: ${stringifyTrace(message.error.data)}`;
|
|
793
834
|
}
|
|
794
835
|
else {
|
|
795
836
|
if (message.result) {
|
|
796
|
-
data = `Result: ${stringifyTrace(message.result)}
|
|
837
|
+
data = `Result: ${stringifyTrace(message.result)}`;
|
|
797
838
|
}
|
|
798
839
|
else if (message.error === undefined) {
|
|
799
|
-
data = 'No result returned
|
|
840
|
+
data = 'No result returned.';
|
|
800
841
|
}
|
|
801
842
|
}
|
|
802
843
|
}
|
|
@@ -919,7 +960,7 @@ function createMessageConnection(messageReader, messageWriter, _logger, options)
|
|
|
919
960
|
paramStart = 1;
|
|
920
961
|
parameterStructures = first;
|
|
921
962
|
}
|
|
922
|
-
|
|
963
|
+
const paramEnd = args.length;
|
|
923
964
|
const numberOfParams = paramEnd - paramStart;
|
|
924
965
|
switch (numberOfParams) {
|
|
925
966
|
case 0:
|
|
@@ -971,9 +1012,11 @@ function createMessageConnection(messageReader, messageWriter, _logger, options)
|
|
|
971
1012
|
return {
|
|
972
1013
|
dispose: () => {
|
|
973
1014
|
if (method !== undefined) {
|
|
974
|
-
notificationHandlers.
|
|
1015
|
+
if (notificationHandlers.get(method)?.handler === handler) {
|
|
1016
|
+
notificationHandlers.delete(method);
|
|
1017
|
+
}
|
|
975
1018
|
}
|
|
976
|
-
else {
|
|
1019
|
+
else if (starNotificationHandler === type) {
|
|
977
1020
|
starNotificationHandler = undefined;
|
|
978
1021
|
}
|
|
979
1022
|
}
|
|
@@ -986,7 +1029,9 @@ function createMessageConnection(messageReader, messageWriter, _logger, options)
|
|
|
986
1029
|
progressHandlers.set(token, handler);
|
|
987
1030
|
return {
|
|
988
1031
|
dispose: () => {
|
|
989
|
-
progressHandlers.
|
|
1032
|
+
if (progressHandlers.get(token) === handler) {
|
|
1033
|
+
progressHandlers.delete(token);
|
|
1034
|
+
}
|
|
990
1035
|
}
|
|
991
1036
|
};
|
|
992
1037
|
},
|
|
@@ -999,6 +1044,17 @@ function createMessageConnection(messageReader, messageWriter, _logger, options)
|
|
|
999
1044
|
sendRequest: (type, ...args) => {
|
|
1000
1045
|
throwIfClosedOrDisposed();
|
|
1001
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
|
+
}
|
|
1002
1058
|
let method;
|
|
1003
1059
|
let messageParams;
|
|
1004
1060
|
let token = undefined;
|
|
@@ -1042,19 +1098,16 @@ function createMessageConnection(messageReader, messageWriter, _logger, options)
|
|
|
1042
1098
|
}
|
|
1043
1099
|
const id = sequenceNumber++;
|
|
1044
1100
|
let disposable;
|
|
1045
|
-
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
|
|
1049
|
-
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
});
|
|
1056
|
-
}
|
|
1057
|
-
});
|
|
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
|
+
}
|
|
1058
1111
|
}
|
|
1059
1112
|
const requestMessage = {
|
|
1060
1113
|
jsonrpc: version,
|
|
@@ -1066,6 +1119,7 @@ function createMessageConnection(messageReader, messageWriter, _logger, options)
|
|
|
1066
1119
|
if (typeof cancellationStrategy.sender.enableCancellation === 'function') {
|
|
1067
1120
|
cancellationStrategy.sender.enableCancellation(requestMessage);
|
|
1068
1121
|
}
|
|
1122
|
+
// eslint-disable-next-line no-async-promise-executor
|
|
1069
1123
|
return new Promise(async (resolve, reject) => {
|
|
1070
1124
|
const resolveWithCleanup = (r) => {
|
|
1071
1125
|
resolve(r);
|
|
@@ -1081,6 +1135,9 @@ function createMessageConnection(messageReader, messageWriter, _logger, options)
|
|
|
1081
1135
|
try {
|
|
1082
1136
|
responsePromises.set(id, responsePromise);
|
|
1083
1137
|
await messageWriter.write(requestMessage);
|
|
1138
|
+
if (tokenWasCancelled) {
|
|
1139
|
+
sendCancellation(connection, id);
|
|
1140
|
+
}
|
|
1084
1141
|
}
|
|
1085
1142
|
catch (error) {
|
|
1086
1143
|
// Writing the message failed. So we need to delete it from the response promises and
|
|
@@ -1118,9 +1175,11 @@ function createMessageConnection(messageReader, messageWriter, _logger, options)
|
|
|
1118
1175
|
return;
|
|
1119
1176
|
}
|
|
1120
1177
|
if (method !== undefined) {
|
|
1121
|
-
requestHandlers.
|
|
1178
|
+
if (requestHandlers.get(method)?.handler === handler) {
|
|
1179
|
+
requestHandlers.delete(method);
|
|
1180
|
+
}
|
|
1122
1181
|
}
|
|
1123
|
-
else {
|
|
1182
|
+
else if (starRequestHandler === type) {
|
|
1124
1183
|
starRequestHandler = undefined;
|
|
1125
1184
|
}
|
|
1126
1185
|
}
|
|
@@ -1189,7 +1248,6 @@ function createMessageConnection(messageReader, messageWriter, _logger, options)
|
|
|
1189
1248
|
messageReader.listen(callback);
|
|
1190
1249
|
},
|
|
1191
1250
|
inspect: () => {
|
|
1192
|
-
// eslint-disable-next-line no-console
|
|
1193
1251
|
(0, ral_1.default)().console.log('inspect');
|
|
1194
1252
|
}
|
|
1195
1253
|
};
|
|
@@ -1200,10 +1258,10 @@ function createMessageConnection(messageReader, messageWriter, _logger, options)
|
|
|
1200
1258
|
const verbose = trace === Trace.Verbose || trace === Trace.Compact;
|
|
1201
1259
|
tracer.log(params.message, verbose ? params.verbose : undefined);
|
|
1202
1260
|
});
|
|
1203
|
-
connection.onNotification(ProgressNotification.type, (params) => {
|
|
1261
|
+
connection.onNotification(ProgressNotification.type, async (params) => {
|
|
1204
1262
|
const handler = progressHandlers.get(params.token);
|
|
1205
1263
|
if (handler) {
|
|
1206
|
-
handler(params.value);
|
|
1264
|
+
await handler(params.value);
|
|
1207
1265
|
}
|
|
1208
1266
|
else {
|
|
1209
1267
|
unhandledProgressEmitter.fire(params);
|
|
@@ -1211,4 +1269,3 @@ function createMessageConnection(messageReader, messageWriter, _logger, options)
|
|
|
1211
1269
|
});
|
|
1212
1270
|
return connection;
|
|
1213
1271
|
}
|
|
1214
|
-
exports.createMessageConnection = createMessageConnection;
|