monaco-lsp-bridge 0.0.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.
- package/LICENSE +21 -0
- package/README.md +61 -0
- package/lib/cjs/error.js +46 -0
- package/lib/cjs/error.js.map +1 -0
- package/lib/cjs/index.js +594 -0
- package/lib/cjs/index.js.map +1 -0
- package/lib/cjs/protocol.js +21 -0
- package/lib/cjs/protocol.js.map +1 -0
- package/lib/cjs/transport.js +269 -0
- package/lib/cjs/transport.js.map +1 -0
- package/lib/cjs/util.js +264 -0
- package/lib/cjs/util.js.map +1 -0
- package/lib/esm/error.js +40 -0
- package/lib/esm/error.js.map +1 -0
- package/lib/esm/index.js +576 -0
- package/lib/esm/index.js.map +1 -0
- package/lib/esm/protocol.js +15 -0
- package/lib/esm/protocol.js.map +1 -0
- package/lib/esm/transport.js +265 -0
- package/lib/esm/transport.js.map +1 -0
- package/lib/esm/util.js +252 -0
- package/lib/esm/util.js.map +1 -0
- package/lib/ts/error.d.ts +26 -0
- package/lib/ts/error.d.ts.map +1 -0
- package/lib/ts/index.d.ts +78 -0
- package/lib/ts/index.d.ts.map +1 -0
- package/lib/ts/protocol.d.ts +80 -0
- package/lib/ts/protocol.d.ts.map +1 -0
- package/lib/ts/transport.d.ts +74 -0
- package/lib/ts/transport.d.ts.map +1 -0
- package/lib/ts/util.d.ts +21 -0
- package/lib/ts/util.d.ts.map +1 -0
- package/package.json +68 -0
- package/src/error.ts +48 -0
- package/src/index.ts +709 -0
- package/src/protocol.ts +129 -0
- package/src/transport.ts +337 -0
- package/src/util.ts +300 -0
- package/tsconfig.json +49 -0
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LspTransport = void 0;
|
|
4
|
+
const protocol_js_1 = require("./protocol.js");
|
|
5
|
+
const error_js_1 = require("./error.js");
|
|
6
|
+
class LspTransport {
|
|
7
|
+
sender;
|
|
8
|
+
receiver;
|
|
9
|
+
defaultTimeoutMs;
|
|
10
|
+
nextId = 1;
|
|
11
|
+
nextTokenId = 1;
|
|
12
|
+
disposables = new Set();
|
|
13
|
+
// Fire-and-forget requests handled by withHandlers()
|
|
14
|
+
pending = new Map();
|
|
15
|
+
// Async bookkeeping
|
|
16
|
+
timeouts = new Map();
|
|
17
|
+
rejectors = new Map();
|
|
18
|
+
// Central dispatcher: subscribers + per-id waiters (for sendAsync)
|
|
19
|
+
subs = new Set();
|
|
20
|
+
waiters = new Map();
|
|
21
|
+
// Progress tracking (both work done progress and partial results use $/progress)
|
|
22
|
+
progressCallbacks = new Map();
|
|
23
|
+
/** Construct a binding over a sender/receiver transport */
|
|
24
|
+
constructor(sender, receiver, defaultTimeoutMs = 15_000) {
|
|
25
|
+
this.sender = sender;
|
|
26
|
+
this.receiver = receiver;
|
|
27
|
+
this.defaultTimeoutMs = defaultTimeoutMs;
|
|
28
|
+
// One receiver to rule them all — handles single or batch frames.
|
|
29
|
+
const unbind = this.receiver((raw) => this.ingest(raw));
|
|
30
|
+
this.disposables.add(unbind);
|
|
31
|
+
}
|
|
32
|
+
// ---------------- Constructors ----------------
|
|
33
|
+
/** Create a binding from a Worker-like endpoint */
|
|
34
|
+
static fromWorker(worker) {
|
|
35
|
+
const sender = (message) => worker.postMessage(message);
|
|
36
|
+
const receiver = (cb) => {
|
|
37
|
+
const handler = (e) => cb(e.data);
|
|
38
|
+
worker.addEventListener('message', handler);
|
|
39
|
+
return () => worker.removeEventListener('message', handler);
|
|
40
|
+
};
|
|
41
|
+
return new LspTransport(sender, receiver);
|
|
42
|
+
}
|
|
43
|
+
/** Infer a binding from either a worker or an existing binding */
|
|
44
|
+
static infer(endpoint) {
|
|
45
|
+
return endpoint instanceof LspTransport ? endpoint : LspTransport.fromWorker(endpoint);
|
|
46
|
+
}
|
|
47
|
+
// -------- Helpers
|
|
48
|
+
/** Track a Monaco disposable for cleanup */
|
|
49
|
+
addDisposable(d) {
|
|
50
|
+
this.disposables.add(() => d.dispose());
|
|
51
|
+
return this;
|
|
52
|
+
}
|
|
53
|
+
/** Listen for error responses and forward normalized errors */
|
|
54
|
+
onError(cb) {
|
|
55
|
+
const onMessage = (res) => {
|
|
56
|
+
if (res?.jsonrpc !== protocol_js_1.JSONRPC_VERSION)
|
|
57
|
+
return;
|
|
58
|
+
if (res?.error)
|
|
59
|
+
cb((0, error_js_1.toLspError)(res.error));
|
|
60
|
+
};
|
|
61
|
+
this.disposables.add(this.subscribe(onMessage));
|
|
62
|
+
return this;
|
|
63
|
+
}
|
|
64
|
+
/** Register a progress callback for a specific token */
|
|
65
|
+
onProgress(token, callback) {
|
|
66
|
+
this.progressCallbacks.set(token, callback);
|
|
67
|
+
return () => this.progressCallbacks.delete(token);
|
|
68
|
+
}
|
|
69
|
+
/** Register a callback for all $/progress notifications */
|
|
70
|
+
onProgressNotification(callback) {
|
|
71
|
+
const onMessage = (msg) => {
|
|
72
|
+
if (msg?.jsonrpc !== protocol_js_1.JSONRPC_VERSION || msg?.method !== '$/progress')
|
|
73
|
+
return;
|
|
74
|
+
if (msg.params)
|
|
75
|
+
callback(msg.params);
|
|
76
|
+
};
|
|
77
|
+
this.disposables.add(this.subscribe(onMessage));
|
|
78
|
+
return this;
|
|
79
|
+
}
|
|
80
|
+
/** Listen for a specific server notification method */
|
|
81
|
+
onServerNotification(method, cb) {
|
|
82
|
+
const onMessage = (msg) => {
|
|
83
|
+
if (msg?.jsonrpc !== protocol_js_1.JSONRPC_VERSION || msg?.method !== method)
|
|
84
|
+
return;
|
|
85
|
+
cb(msg.params);
|
|
86
|
+
};
|
|
87
|
+
this.disposables.add(this.subscribe(onMessage));
|
|
88
|
+
return this;
|
|
89
|
+
}
|
|
90
|
+
/** Dispose all resources and reject in-flight requests */
|
|
91
|
+
dispose() {
|
|
92
|
+
for (const rej of this.rejectors.values()) {
|
|
93
|
+
try {
|
|
94
|
+
rej(new error_js_1.LspError({ code: error_js_1.LspErrorCode.Disposed, message: 'Binding disposed before response' }));
|
|
95
|
+
}
|
|
96
|
+
catch { }
|
|
97
|
+
}
|
|
98
|
+
this.rejectors.clear();
|
|
99
|
+
for (const t of this.timeouts.values())
|
|
100
|
+
clearTimeout(t);
|
|
101
|
+
this.timeouts.clear();
|
|
102
|
+
this.disposables.forEach((d) => d());
|
|
103
|
+
this.disposables.clear();
|
|
104
|
+
this.pending.clear();
|
|
105
|
+
this.waiters.clear();
|
|
106
|
+
this.subs.clear();
|
|
107
|
+
this.progressCallbacks.clear();
|
|
108
|
+
}
|
|
109
|
+
// -------- Core API
|
|
110
|
+
/** Send a client-to-server notification (no response expected) */
|
|
111
|
+
sendNotification(method, params) {
|
|
112
|
+
this.sender((0, protocol_js_1.makeNotification)(method, params));
|
|
113
|
+
return this;
|
|
114
|
+
}
|
|
115
|
+
/** Send an async request with timeout, cancellation and progress support */
|
|
116
|
+
sendRequest(method, params, opts) {
|
|
117
|
+
const id = this.nextId++;
|
|
118
|
+
// Generate tokens if callbacks provided but tokens not specified
|
|
119
|
+
const workDoneToken = opts?.workDoneToken ?? (opts?.onProgress ? `work-${this.nextTokenId++}` : undefined);
|
|
120
|
+
const partialResultToken = opts?.partialResultToken ?? (opts?.onPartialResult ? `partial-${this.nextTokenId++}` : undefined);
|
|
121
|
+
// Augment params with tokens if provided
|
|
122
|
+
const augmentedParams = { ...params };
|
|
123
|
+
if (workDoneToken !== undefined) {
|
|
124
|
+
augmentedParams.workDoneToken = workDoneToken;
|
|
125
|
+
}
|
|
126
|
+
if (partialResultToken !== undefined) {
|
|
127
|
+
augmentedParams.partialResultToken = partialResultToken;
|
|
128
|
+
}
|
|
129
|
+
const m = (0, protocol_js_1.makeRequest)(id, method, augmentedParams);
|
|
130
|
+
if (opts?.signal?.aborted) {
|
|
131
|
+
return Promise.resolve({ cancelled: true, code: error_js_1.LspErrorCode.RequestCancelled });
|
|
132
|
+
}
|
|
133
|
+
// Register progress callbacks if provided
|
|
134
|
+
// Both work done progress and partial results use $/progress notifications
|
|
135
|
+
if (workDoneToken !== undefined && opts?.onProgress) {
|
|
136
|
+
this.progressCallbacks.set(workDoneToken, opts.onProgress);
|
|
137
|
+
}
|
|
138
|
+
if (partialResultToken !== undefined && opts?.onPartialResult) {
|
|
139
|
+
this.progressCallbacks.set(partialResultToken, opts.onPartialResult);
|
|
140
|
+
}
|
|
141
|
+
this.sender(m);
|
|
142
|
+
return new Promise((resolve, reject) => {
|
|
143
|
+
const resolveCancelled = (code) => {
|
|
144
|
+
cleanup();
|
|
145
|
+
resolve({ cancelled: true, code });
|
|
146
|
+
};
|
|
147
|
+
const rejectAs = (err) => {
|
|
148
|
+
cleanup();
|
|
149
|
+
reject(err);
|
|
150
|
+
};
|
|
151
|
+
const onResponse = (res) => {
|
|
152
|
+
if (res?.id !== id)
|
|
153
|
+
return;
|
|
154
|
+
if (res.error) {
|
|
155
|
+
const err = (0, error_js_1.toLspError)(res.error);
|
|
156
|
+
if ((0, error_js_1.isCancellationError)(err))
|
|
157
|
+
return resolveCancelled(err.code);
|
|
158
|
+
return rejectAs(err);
|
|
159
|
+
}
|
|
160
|
+
cleanup();
|
|
161
|
+
resolve({ cancelled: false, result: res.result });
|
|
162
|
+
};
|
|
163
|
+
// route by id via central dispatcher
|
|
164
|
+
this.waiters.set(id, onResponse);
|
|
165
|
+
const cleanup = () => {
|
|
166
|
+
this.waiters.delete(id);
|
|
167
|
+
const t = this.timeouts.get(id);
|
|
168
|
+
if (t)
|
|
169
|
+
clearTimeout(t);
|
|
170
|
+
this.timeouts.delete(id);
|
|
171
|
+
this.rejectors.delete(id);
|
|
172
|
+
// Clean up progress callbacks (on completion, cancellation, or error)
|
|
173
|
+
// Per LSP spec: workDoneToken is only valid until response/cancellation
|
|
174
|
+
if (workDoneToken !== undefined) {
|
|
175
|
+
this.progressCallbacks.delete(workDoneToken);
|
|
176
|
+
}
|
|
177
|
+
if (partialResultToken !== undefined) {
|
|
178
|
+
this.progressCallbacks.delete(partialResultToken);
|
|
179
|
+
}
|
|
180
|
+
if (abortCleanup)
|
|
181
|
+
opts?.signal?.removeEventListener('abort', abortCleanup);
|
|
182
|
+
};
|
|
183
|
+
// Timeout
|
|
184
|
+
const timeoutMs = opts?.timeoutMs ?? this.defaultTimeoutMs;
|
|
185
|
+
if (timeoutMs > 0 && Number.isFinite(timeoutMs)) {
|
|
186
|
+
const t = setTimeout(() => {
|
|
187
|
+
rejectAs(new error_js_1.LspError({
|
|
188
|
+
code: error_js_1.LspErrorCode.Timeout,
|
|
189
|
+
message: `Request timed out: ${String(method)} (${id}) after ${timeoutMs}ms`,
|
|
190
|
+
}));
|
|
191
|
+
}, timeoutMs);
|
|
192
|
+
this.timeouts.set(id, t);
|
|
193
|
+
}
|
|
194
|
+
// Allow dispose() to reject in-flight requests
|
|
195
|
+
this.rejectors.set(id, rejectAs);
|
|
196
|
+
// AbortSignal → send $/cancelRequest and resolve immediately (eager cancel)
|
|
197
|
+
// Don't wait for server response - some servers don't echo promptly
|
|
198
|
+
let abortCleanup;
|
|
199
|
+
if (opts?.signal) {
|
|
200
|
+
const onAbort = () => {
|
|
201
|
+
// Notify server of cancellation (best effort)
|
|
202
|
+
this.sendNotification('$/cancelRequest', { id });
|
|
203
|
+
// Resolve immediately for better UX (don't wait for server acknowledgement)
|
|
204
|
+
resolveCancelled(error_js_1.LspErrorCode.RequestCancelled);
|
|
205
|
+
};
|
|
206
|
+
opts.signal.addEventListener('abort', onAbort, { once: true });
|
|
207
|
+
abortCleanup = () => opts.signal?.removeEventListener('abort', onAbort);
|
|
208
|
+
}
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
/** Subscribe to all inbound JSON-RPC messages */
|
|
212
|
+
subscribe(cb) {
|
|
213
|
+
this.subs.add(cb);
|
|
214
|
+
return () => this.subs.delete(cb);
|
|
215
|
+
}
|
|
216
|
+
/** Ingest an incoming frame and dispatch to listeners/waiters */
|
|
217
|
+
ingest = (raw) => {
|
|
218
|
+
// Batch: process each frame independently
|
|
219
|
+
if (Array.isArray(raw)) {
|
|
220
|
+
for (const frame of raw)
|
|
221
|
+
this.ingest(frame);
|
|
222
|
+
return;
|
|
223
|
+
}
|
|
224
|
+
// Early drop anything that isn't a proper JSON-RPC 2.0 message
|
|
225
|
+
if (!raw || typeof raw !== 'object' || raw.jsonrpc !== protocol_js_1.JSONRPC_VERSION)
|
|
226
|
+
return;
|
|
227
|
+
// Handle $/progress notifications
|
|
228
|
+
if (raw.method === '$/progress' && raw.params) {
|
|
229
|
+
const params = raw.params;
|
|
230
|
+
const callback = this.progressCallbacks.get(params.token);
|
|
231
|
+
if (callback) {
|
|
232
|
+
try {
|
|
233
|
+
callback(params.value);
|
|
234
|
+
}
|
|
235
|
+
catch { }
|
|
236
|
+
// Auto-remove workDoneToken callbacks when receiving WorkDoneProgressEnd
|
|
237
|
+
if (params.value && typeof params.value === 'object' && params.value.kind === 'end') {
|
|
238
|
+
this.progressCallbacks.delete(params.token);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
// Still fan out to subscribers for withProgress handlers
|
|
242
|
+
}
|
|
243
|
+
// If it's a response with an id and a waiting promise, resolve that first
|
|
244
|
+
if (Object.prototype.hasOwnProperty.call(raw, 'id')) {
|
|
245
|
+
const id = raw.id;
|
|
246
|
+
if ((0, protocol_js_1.isId)(id)) {
|
|
247
|
+
const waiter = this.waiters.get(id);
|
|
248
|
+
if (waiter) {
|
|
249
|
+
// Claim and stop propagation to generic handlers
|
|
250
|
+
this.waiters.delete(id);
|
|
251
|
+
try {
|
|
252
|
+
waiter(raw);
|
|
253
|
+
}
|
|
254
|
+
catch { }
|
|
255
|
+
return;
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
// Fan-out to generic subscribers (e.g. withHandlers / withError / withProgress)
|
|
260
|
+
for (const cb of Array.from(this.subs)) {
|
|
261
|
+
try {
|
|
262
|
+
cb(raw);
|
|
263
|
+
}
|
|
264
|
+
catch { }
|
|
265
|
+
}
|
|
266
|
+
};
|
|
267
|
+
}
|
|
268
|
+
exports.LspTransport = LspTransport;
|
|
269
|
+
//# sourceMappingURL=transport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../../src/transport.ts"],"names":[],"mappings":"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"}
|
package/lib/cjs/util.js
ADDED
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.lspHoverToMonaco = exports.toMonacoTextEdits = exports.toMonacoMarkers = exports.toLspPosition = exports.toMonacoPosition = exports.toLspRange = exports.mergeResolvedCompletionItem = exports.toLspCompletionItem = exports.toMonacoCompletionItem = void 0;
|
|
4
|
+
/** Store original LSP item on Monaco completion item */
|
|
5
|
+
const LSP_ITEM_KEY = Symbol.for('__lsp_completion_item__');
|
|
6
|
+
/** Convert LSP CompletionItem to Monaco and stash original */
|
|
7
|
+
const toMonacoCompletionItem = (monacoApi, item) => {
|
|
8
|
+
const insertText = getInsertText(item);
|
|
9
|
+
const range = toMonacoRange(item.textEdit);
|
|
10
|
+
// Determine insert text format (snippet vs plain)
|
|
11
|
+
const insertTextFormat = item.insertTextFormat ?? 1; // 1 = PlainText, 2 = Snippet
|
|
12
|
+
const isSnippet = insertTextFormat === 2;
|
|
13
|
+
const result = {
|
|
14
|
+
label: item.label,
|
|
15
|
+
insertText,
|
|
16
|
+
kind: item.kind ?? 0,
|
|
17
|
+
detail: item.detail,
|
|
18
|
+
documentation: typeof item.documentation === 'string' ? item.documentation : item.documentation?.value,
|
|
19
|
+
sortText: item.sortText,
|
|
20
|
+
filterText: item.filterText,
|
|
21
|
+
commitCharacters: item.commitCharacters,
|
|
22
|
+
additionalTextEdits: item.additionalTextEdits?.map(toMonacoTextEdit),
|
|
23
|
+
// Insert as snippet when requested
|
|
24
|
+
insertTextRules: isSnippet ? monacoApi.languages.CompletionItemInsertTextRule.InsertAsSnippet : undefined, // 4 = InsertAsSnippet
|
|
25
|
+
};
|
|
26
|
+
// Set explicit range only when provided by LSP
|
|
27
|
+
if (range !== undefined) {
|
|
28
|
+
result.range = range;
|
|
29
|
+
}
|
|
30
|
+
// Keep original for resolve
|
|
31
|
+
result[LSP_ITEM_KEY] = item;
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
exports.toMonacoCompletionItem = toMonacoCompletionItem;
|
|
35
|
+
/** Convert Monaco CompletionItem to LSP, preferring original */
|
|
36
|
+
const toLspCompletionItem = (item) => {
|
|
37
|
+
// Try to retrieve the original LSP item
|
|
38
|
+
const originalItem = item[LSP_ITEM_KEY];
|
|
39
|
+
if (originalItem) {
|
|
40
|
+
// Use original to preserve LSP fields
|
|
41
|
+
return originalItem;
|
|
42
|
+
}
|
|
43
|
+
// Fallback: convert Monaco item to LSP format
|
|
44
|
+
const result = {
|
|
45
|
+
label: typeof item.label === 'string' ? item.label : item.label.label,
|
|
46
|
+
kind: item.kind,
|
|
47
|
+
detail: item.detail,
|
|
48
|
+
documentation: typeof item.documentation === 'string' ? item.documentation : item.documentation?.value,
|
|
49
|
+
sortText: item.sortText,
|
|
50
|
+
filterText: item.filterText,
|
|
51
|
+
insertText: typeof item.insertText === 'string' ? item.insertText : undefined,
|
|
52
|
+
commitCharacters: item.commitCharacters,
|
|
53
|
+
};
|
|
54
|
+
return result;
|
|
55
|
+
};
|
|
56
|
+
exports.toLspCompletionItem = toLspCompletionItem;
|
|
57
|
+
/** Merge resolved LSP fields into Monaco item */
|
|
58
|
+
const mergeResolvedCompletionItem = (monacoItem, resolvedLspItem) => {
|
|
59
|
+
// Merge fields that may be resolved
|
|
60
|
+
const merged = {
|
|
61
|
+
...monacoItem,
|
|
62
|
+
detail: resolvedLspItem.detail ?? monacoItem.detail,
|
|
63
|
+
documentation: resolvedLspItem.documentation !== undefined
|
|
64
|
+
? typeof resolvedLspItem.documentation === 'string'
|
|
65
|
+
? resolvedLspItem.documentation
|
|
66
|
+
: resolvedLspItem.documentation?.value
|
|
67
|
+
: monacoItem.documentation,
|
|
68
|
+
additionalTextEdits: resolvedLspItem.additionalTextEdits?.map(toMonacoTextEdit) ?? monacoItem.additionalTextEdits,
|
|
69
|
+
command: resolvedLspItem.command
|
|
70
|
+
? {
|
|
71
|
+
id: resolvedLspItem.command.command,
|
|
72
|
+
title: resolvedLspItem.command.title,
|
|
73
|
+
arguments: resolvedLspItem.command.arguments,
|
|
74
|
+
}
|
|
75
|
+
: monacoItem.command,
|
|
76
|
+
};
|
|
77
|
+
// Update insert text/range when textEdit provided
|
|
78
|
+
if (resolvedLspItem.textEdit) {
|
|
79
|
+
const insertText = getInsertText(resolvedLspItem);
|
|
80
|
+
const range = toMonacoRange(resolvedLspItem.textEdit);
|
|
81
|
+
merged.insertText = insertText;
|
|
82
|
+
if (range !== undefined) {
|
|
83
|
+
merged.range = range;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
else if (resolvedLspItem.insertText !== undefined) {
|
|
87
|
+
// Handle resolve without textEdit
|
|
88
|
+
merged.insertText = resolvedLspItem.insertText;
|
|
89
|
+
}
|
|
90
|
+
// Update snippet rule if format changed
|
|
91
|
+
if (resolvedLspItem.insertTextFormat !== undefined) {
|
|
92
|
+
const isSnippet = resolvedLspItem.insertTextFormat === 2;
|
|
93
|
+
merged.insertTextRules = isSnippet ? 4 : undefined; // 4 = InsertAsSnippet
|
|
94
|
+
}
|
|
95
|
+
// Store updated LSP item
|
|
96
|
+
;
|
|
97
|
+
merged[LSP_ITEM_KEY] = resolvedLspItem;
|
|
98
|
+
return merged;
|
|
99
|
+
};
|
|
100
|
+
exports.mergeResolvedCompletionItem = mergeResolvedCompletionItem;
|
|
101
|
+
/** Extract insert text: textEdit.newText → insertText → label */
|
|
102
|
+
const getInsertText = (item) => {
|
|
103
|
+
if (item.textEdit && 'newText' in item.textEdit) {
|
|
104
|
+
return item.textEdit.newText;
|
|
105
|
+
}
|
|
106
|
+
return item.insertText ?? item.label;
|
|
107
|
+
};
|
|
108
|
+
/** Convert LSP TextEdit to Monaco */
|
|
109
|
+
const toMonacoTextEdit = (edit) => {
|
|
110
|
+
return {
|
|
111
|
+
range: toMonacoIRange(edit.range),
|
|
112
|
+
text: edit.newText,
|
|
113
|
+
};
|
|
114
|
+
};
|
|
115
|
+
/** Convert LSP TextEdit/InsertReplaceEdit to Monaco range */
|
|
116
|
+
const toMonacoRange = (edit) => {
|
|
117
|
+
if (!edit)
|
|
118
|
+
return undefined;
|
|
119
|
+
if ('range' in edit) {
|
|
120
|
+
return toMonacoIRange(edit.range);
|
|
121
|
+
}
|
|
122
|
+
return {
|
|
123
|
+
insert: toMonacoIRange(edit.insert),
|
|
124
|
+
replace: toMonacoIRange(edit.replace),
|
|
125
|
+
};
|
|
126
|
+
};
|
|
127
|
+
/** Convert LSP Range to Monaco IRange (0-based → 1-based) */
|
|
128
|
+
const toMonacoIRange = (range) => {
|
|
129
|
+
return {
|
|
130
|
+
startLineNumber: range.start.line + 1,
|
|
131
|
+
startColumn: range.start.character + 1,
|
|
132
|
+
endLineNumber: range.end.line + 1,
|
|
133
|
+
endColumn: range.end.character + 1,
|
|
134
|
+
};
|
|
135
|
+
};
|
|
136
|
+
/** Convert Monaco IRange to LSP Range (1-based → 0-based) */
|
|
137
|
+
const toLspRange = (range) => {
|
|
138
|
+
return {
|
|
139
|
+
start: {
|
|
140
|
+
line: range.startLineNumber - 1,
|
|
141
|
+
character: range.startColumn - 1,
|
|
142
|
+
},
|
|
143
|
+
end: {
|
|
144
|
+
line: range.endLineNumber - 1,
|
|
145
|
+
character: range.endColumn - 1,
|
|
146
|
+
},
|
|
147
|
+
};
|
|
148
|
+
};
|
|
149
|
+
exports.toLspRange = toLspRange;
|
|
150
|
+
/** Convert LSP Position to Monaco IPosition */
|
|
151
|
+
const toMonacoPosition = (position) => {
|
|
152
|
+
return {
|
|
153
|
+
lineNumber: position.line + 1,
|
|
154
|
+
column: position.character + 1,
|
|
155
|
+
};
|
|
156
|
+
};
|
|
157
|
+
exports.toMonacoPosition = toMonacoPosition;
|
|
158
|
+
/** Convert Monaco IPosition to LSP Position */
|
|
159
|
+
const toLspPosition = (position) => {
|
|
160
|
+
return {
|
|
161
|
+
line: position.lineNumber - 1,
|
|
162
|
+
character: position.column - 1,
|
|
163
|
+
};
|
|
164
|
+
};
|
|
165
|
+
exports.toLspPosition = toLspPosition;
|
|
166
|
+
/** Map LSP diagnostics to Monaco markers */
|
|
167
|
+
const toMonacoMarkers = (monacoApi, diagnostics) => {
|
|
168
|
+
const toSeverity = (s) => {
|
|
169
|
+
switch (s) {
|
|
170
|
+
case 1:
|
|
171
|
+
return monacoApi.MarkerSeverity.Error;
|
|
172
|
+
case 2:
|
|
173
|
+
return monacoApi.MarkerSeverity.Warning;
|
|
174
|
+
case 3:
|
|
175
|
+
return monacoApi.MarkerSeverity.Info;
|
|
176
|
+
case 4:
|
|
177
|
+
return monacoApi.MarkerSeverity.Hint;
|
|
178
|
+
default:
|
|
179
|
+
return monacoApi.MarkerSeverity.Info;
|
|
180
|
+
}
|
|
181
|
+
};
|
|
182
|
+
const toTags = (tags) => {
|
|
183
|
+
if (!tags || tags.length === 0)
|
|
184
|
+
return undefined;
|
|
185
|
+
const mapped = [];
|
|
186
|
+
for (const t of tags) {
|
|
187
|
+
if (t === 1)
|
|
188
|
+
mapped.push(monacoApi.MarkerTag.Unnecessary);
|
|
189
|
+
if (t === 2)
|
|
190
|
+
mapped.push(monacoApi.MarkerTag.Deprecated);
|
|
191
|
+
}
|
|
192
|
+
return mapped.length ? mapped : undefined;
|
|
193
|
+
};
|
|
194
|
+
const toRelated = (infos) => {
|
|
195
|
+
if (!infos || infos.length === 0)
|
|
196
|
+
return undefined;
|
|
197
|
+
return infos.map((ri) => ({
|
|
198
|
+
resource: monacoApi.Uri.parse(ri.location.uri),
|
|
199
|
+
message: ri.message,
|
|
200
|
+
startLineNumber: ri.location.range.start.line + 1,
|
|
201
|
+
startColumn: ri.location.range.start.character + 1,
|
|
202
|
+
endLineNumber: ri.location.range.end.line + 1,
|
|
203
|
+
endColumn: ri.location.range.end.character + 1,
|
|
204
|
+
}));
|
|
205
|
+
};
|
|
206
|
+
return diagnostics.map((d) => ({
|
|
207
|
+
severity: toSeverity(d.severity),
|
|
208
|
+
message: d.message,
|
|
209
|
+
code: typeof d.code === 'string' ? d.code : typeof d.code === 'number' ? String(d.code) : undefined,
|
|
210
|
+
source: d.source,
|
|
211
|
+
tags: toTags(d.tags),
|
|
212
|
+
relatedInformation: toRelated(d.relatedInformation),
|
|
213
|
+
startLineNumber: d.range.start.line + 1,
|
|
214
|
+
startColumn: d.range.start.character + 1,
|
|
215
|
+
endLineNumber: d.range.end.line + 1,
|
|
216
|
+
endColumn: d.range.end.character + 1,
|
|
217
|
+
}));
|
|
218
|
+
};
|
|
219
|
+
exports.toMonacoMarkers = toMonacoMarkers;
|
|
220
|
+
/** Map LSP TextEdits to Monaco edits */
|
|
221
|
+
const toMonacoTextEdits = (edits) => {
|
|
222
|
+
return edits.map((e) => ({
|
|
223
|
+
range: toMonacoIRange(e.range),
|
|
224
|
+
text: e.newText,
|
|
225
|
+
}));
|
|
226
|
+
};
|
|
227
|
+
exports.toMonacoTextEdits = toMonacoTextEdits;
|
|
228
|
+
/** Convert LSP Hover to Monaco Hover */
|
|
229
|
+
const lspHoverToMonaco = (hover) => {
|
|
230
|
+
const contents = [];
|
|
231
|
+
const pushString = (value) => contents.push({ value });
|
|
232
|
+
const pushMarked = (m) => {
|
|
233
|
+
if (typeof m === 'string') {
|
|
234
|
+
pushString(m);
|
|
235
|
+
return;
|
|
236
|
+
}
|
|
237
|
+
// { language, value } → markdown code block
|
|
238
|
+
const fenced = '```' + (m.language || '') + '\n' + m.value + '\n```';
|
|
239
|
+
pushString(fenced);
|
|
240
|
+
};
|
|
241
|
+
const pushMarkup = (mc) => {
|
|
242
|
+
// kind: 'markdown' | 'plaintext'. For plaintext, keep as-is.
|
|
243
|
+
pushString(mc.value);
|
|
244
|
+
};
|
|
245
|
+
const c = hover.contents;
|
|
246
|
+
if (Array.isArray(c)) {
|
|
247
|
+
for (const item of c)
|
|
248
|
+
pushMarked(item);
|
|
249
|
+
}
|
|
250
|
+
else if (typeof c === 'string' || (c && typeof c === 'object' && 'language' in c)) {
|
|
251
|
+
pushMarked(c);
|
|
252
|
+
}
|
|
253
|
+
else if (c && typeof c === 'object' && 'kind' in c) {
|
|
254
|
+
pushMarkup(c);
|
|
255
|
+
}
|
|
256
|
+
const result = {
|
|
257
|
+
contents,
|
|
258
|
+
};
|
|
259
|
+
if (hover.range)
|
|
260
|
+
result.range = toMonacoIRange(hover.range);
|
|
261
|
+
return result;
|
|
262
|
+
};
|
|
263
|
+
exports.lspHoverToMonaco = lspHoverToMonaco;
|
|
264
|
+
//# sourceMappingURL=util.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":";;;AAcA,wDAAwD;AACxD,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAA;AAE1D,8DAA8D;AACvD,MAAM,sBAAsB,GAAG,CACpC,SAAwB,EACxB,IAAoB,EACa,EAAE;IACnC,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,CAAA;IACtC,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IAE1C,kDAAkD;IAClD,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,IAAI,CAAC,CAAA,CAAC,6BAA6B;IACjF,MAAM,SAAS,GAAG,gBAAgB,KAAK,CAAC,CAAA;IAExC,MAAM,MAAM,GAAQ;QAClB,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,UAAU;QACV,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC;QACpB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,aAAa,EAAE,OAAO,IAAI,CAAC,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK;QACtG,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;QACvC,mBAAmB,EAAE,IAAI,CAAC,mBAAmB,EAAE,GAAG,CAAC,gBAAgB,CAAC;QACpE,mCAAmC;QACnC,eAAe,EAAE,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,4BAA4B,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,EAAE,sBAAsB;KAClI,CAAA;IAED,+CAA+C;IAC/C,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,MAAM,CAAC,KAAK,GAAG,KAAK,CAAA;IACtB,CAAC;IAED,4BAA4B;IAC5B,MAAM,CAAC,YAAY,CAAC,GAAG,IAAI,CAAA;IAE3B,OAAO,MAAyC,CAAA;AAClD,CAAC,CAAA;AAlCY,QAAA,sBAAsB,0BAkClC;AAED,gEAAgE;AACzD,MAAM,mBAAmB,GAAG,CAAC,IAAqC,EAAkB,EAAE;IAC3F,wCAAwC;IACxC,MAAM,YAAY,GAAI,IAAY,CAAC,YAAY,CAA+B,CAAA;IAE9E,IAAI,YAAY,EAAE,CAAC;QACjB,sCAAsC;QACtC,OAAO,YAAY,CAAA;IACrB,CAAC;IAED,8CAA8C;IAC9C,MAAM,MAAM,GAAmB;QAC7B,KAAK,EAAE,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK;QACrE,IAAI,EAAE,IAAI,CAAC,IAAW;QACtB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,aAAa,EAAE,OAAO,IAAI,CAAC,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK;QACtG,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,UAAU,EAAE,OAAO,IAAI,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;QAC7E,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;KACxC,CAAA;IAED,OAAO,MAAM,CAAA;AACf,CAAC,CAAA;AAtBY,QAAA,mBAAmB,uBAsB/B;AAED,iDAAiD;AAC1C,MAAM,2BAA2B,GAAG,CACzC,UAA2C,EAC3C,eAA+B,EACE,EAAE;IACnC,oCAAoC;IACpC,MAAM,MAAM,GAAoC;QAC9C,GAAG,UAAU;QACb,MAAM,EAAE,eAAe,CAAC,MAAM,IAAI,UAAU,CAAC,MAAM;QACnD,aAAa,EACX,eAAe,CAAC,aAAa,KAAK,SAAS;YACzC,CAAC,CAAC,OAAO,eAAe,CAAC,aAAa,KAAK,QAAQ;gBACjD,CAAC,CAAC,eAAe,CAAC,aAAa;gBAC/B,CAAC,CAAC,eAAe,CAAC,aAAa,EAAE,KAAK;YACxC,CAAC,CAAC,UAAU,CAAC,aAAa;QAC9B,mBAAmB,EAAE,eAAe,CAAC,mBAAmB,EAAE,GAAG,CAAC,gBAAgB,CAAC,IAAI,UAAU,CAAC,mBAAmB;QACjH,OAAO,EAAE,eAAe,CAAC,OAAO;YAC9B,CAAC,CAAC;gBACE,EAAE,EAAE,eAAe,CAAC,OAAO,CAAC,OAAO;gBACnC,KAAK,EAAE,eAAe,CAAC,OAAO,CAAC,KAAK;gBACpC,SAAS,EAAE,eAAe,CAAC,OAAO,CAAC,SAAS;aAC7C;YACH,CAAC,CAAC,UAAU,CAAC,OAAO;KACvB,CAAA;IAED,kDAAkD;IAClD,IAAI,eAAe,CAAC,QAAQ,EAAE,CAAC;QAC7B,MAAM,UAAU,GAAG,aAAa,CAAC,eAAe,CAAC,CAAA;QACjD,MAAM,KAAK,GAAG,aAAa,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAA;QACrD,MAAM,CAAC,UAAU,GAAG,UAAU,CAAA;QAC9B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,MAAM,CAAC,KAAK,GAAG,KAAK,CAAA;QACtB,CAAC;IACH,CAAC;SAAM,IAAI,eAAe,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QACpD,kCAAkC;QAClC,MAAM,CAAC,UAAU,GAAG,eAAe,CAAC,UAAU,CAAA;IAChD,CAAC;IAED,wCAAwC;IACxC,IAAI,eAAe,CAAC,gBAAgB,KAAK,SAAS,EAAE,CAAC;QACnD,MAAM,SAAS,GAAG,eAAe,CAAC,gBAAgB,KAAK,CAAC,CAAA;QACxD,MAAM,CAAC,eAAe,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA,CAAC,sBAAsB;IAC3E,CAAC;IAED,yBAAyB;IACzB,CAAC;IAAC,MAAc,CAAC,YAAY,CAAC,GAAG,eAAe,CAAA;IAEhD,OAAO,MAAM,CAAA;AACf,CAAC,CAAA;AA/CY,QAAA,2BAA2B,+BA+CvC;AAED,iEAAiE;AACjE,MAAM,aAAa,GAAG,CAAC,IAAoB,EAAU,EAAE;IACrD,IAAI,IAAI,CAAC,QAAQ,IAAI,SAAS,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAChD,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAA;IAC9B,CAAC;IACD,OAAO,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,KAAK,CAAA;AACtC,CAAC,CAAA;AAED,qCAAqC;AACrC,MAAM,gBAAgB,GAAG,CAAC,IAAc,EAA6B,EAAE;IACrE,OAAO;QACL,KAAK,EAAE,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;QACjC,IAAI,EAAE,IAAI,CAAC,OAAO;KACnB,CAAA;AACH,CAAC,CAAA;AAED,6DAA6D;AAC7D,MAAM,aAAa,GAAG,CACpB,IAA8C,EACiC,EAAE;IACjF,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAA;IAE3B,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;QACpB,OAAO,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACnC,CAAC;IAED,OAAO;QACL,MAAM,EAAE,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC;QACnC,OAAO,EAAE,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC;KACtC,CAAA;AACH,CAAC,CAAA;AAED,6DAA6D;AAC7D,MAAM,cAAc,GAAG,CAAC,KAAY,EAAiB,EAAE;IACrD,OAAO;QACL,eAAe,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC;QACrC,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC;QACtC,aAAa,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC;QACjC,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,SAAS,GAAG,CAAC;KACnC,CAAA;AACH,CAAC,CAAA;AAED,6DAA6D;AACtD,MAAM,UAAU,GAAG,CAAC,KAAoB,EAAS,EAAE;IACxD,OAAO;QACL,KAAK,EAAE;YACL,IAAI,EAAE,KAAK,CAAC,eAAe,GAAG,CAAC;YAC/B,SAAS,EAAE,KAAK,CAAC,WAAW,GAAG,CAAC;SACjC;QACD,GAAG,EAAE;YACH,IAAI,EAAE,KAAK,CAAC,aAAa,GAAG,CAAC;YAC7B,SAAS,EAAE,KAAK,CAAC,SAAS,GAAG,CAAC;SAC/B;KACF,CAAA;AACH,CAAC,CAAA;AAXY,QAAA,UAAU,cAWtB;AAED,+CAA+C;AACxC,MAAM,gBAAgB,GAAG,CAAC,QAAkB,EAAoB,EAAE;IACvE,OAAO;QACL,UAAU,EAAE,QAAQ,CAAC,IAAI,GAAG,CAAC;QAC7B,MAAM,EAAE,QAAQ,CAAC,SAAS,GAAG,CAAC;KAC/B,CAAA;AACH,CAAC,CAAA;AALY,QAAA,gBAAgB,oBAK5B;AAED,+CAA+C;AACxC,MAAM,aAAa,GAAG,CAAC,QAA0B,EAAY,EAAE;IACpE,OAAO;QACL,IAAI,EAAE,QAAQ,CAAC,UAAU,GAAG,CAAC;QAC7B,SAAS,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC;KAC/B,CAAA;AACH,CAAC,CAAA;AALY,QAAA,aAAa,iBAKzB;AAED,4CAA4C;AACrC,MAAM,eAAe,GAAG,CAAC,SAAwB,EAAE,WAAyB,EAA+B,EAAE;IAClH,MAAM,UAAU,GAAG,CAAC,CAAqB,EAAyB,EAAE;QAClE,QAAQ,CAAC,EAAE,CAAC;YACV,KAAK,CAAC;gBACJ,OAAO,SAAS,CAAC,cAAc,CAAC,KAAK,CAAA;YACvC,KAAK,CAAC;gBACJ,OAAO,SAAS,CAAC,cAAc,CAAC,OAAO,CAAA;YACzC,KAAK,CAAC;gBACJ,OAAO,SAAS,CAAC,cAAc,CAAC,IAAI,CAAA;YACtC,KAAK,CAAC;gBACJ,OAAO,SAAS,CAAC,cAAc,CAAC,IAAI,CAAA;YACtC;gBACE,OAAO,SAAS,CAAC,cAAc,CAAC,IAAI,CAAA;QACxC,CAAC;IACH,CAAC,CAAA;IAED,MAAM,MAAM,GAAG,CAAC,IAAmC,EAAkC,EAAE;QACrF,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,SAAS,CAAA;QAChD,MAAM,MAAM,GAAuB,EAAE,CAAA;QACrC,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;YACrB,IAAI,CAAC,KAAK,CAAC;gBAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,CAAA;YACzD,IAAI,CAAC,KAAK,CAAC;gBAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,UAAU,CAAC,CAAA;QAC1D,CAAC;QACD,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAA;IAC3C,CAAC,CAAA;IAED,MAAM,SAAS,GAAG,CAChB,KAA0D,EACT,EAAE;QACnD,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,SAAS,CAAA;QAClD,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACxB,QAAQ,EAAE,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC;YAC9C,OAAO,EAAE,EAAE,CAAC,OAAO;YACnB,eAAe,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC;YACjD,WAAW,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC;YAClD,aAAa,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC;YAC7C,SAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,GAAG,CAAC;SAC/C,CAAC,CAAC,CAAA;IACL,CAAC,CAAA;IAED,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC7B,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC;QAChC,OAAO,EAAE,CAAC,CAAC,OAAO;QAClB,IAAI,EAAE,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;QACnG,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;QACpB,kBAAkB,EAAE,SAAS,CAAC,CAAC,CAAC,kBAAkB,CAAC;QACnD,eAAe,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC;QACvC,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC;QACxC,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC;QACnC,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,GAAG,CAAC;KACrC,CAAC,CAAC,CAAA;AACL,CAAC,CAAA;AApDY,QAAA,eAAe,mBAoD3B;AAED,wCAAwC;AACjC,MAAM,iBAAiB,GAAG,CAAC,KAAiB,EAA+B,EAAE;IAClF,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACvB,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC;QAC9B,IAAI,EAAE,CAAC,CAAC,OAAO;KAChB,CAAC,CAAC,CAAA;AACL,CAAC,CAAA;AALY,QAAA,iBAAiB,qBAK7B;AAED,wCAAwC;AACjC,MAAM,gBAAgB,GAAG,CAAC,KAAY,EAA0B,EAAE;IACvE,MAAM,QAAQ,GAA6B,EAAE,CAAA;IAE7C,MAAM,UAAU,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAA;IAE9D,MAAM,UAAU,GAAG,CAAC,CAAe,EAAQ,EAAE;QAC3C,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;YAC1B,UAAU,CAAC,CAAC,CAAC,CAAA;YACb,OAAM;QACR,CAAC;QACD,4CAA4C;QAC5C,MAAM,MAAM,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,GAAG,OAAO,CAAA;QACpE,UAAU,CAAC,MAAM,CAAC,CAAA;IACpB,CAAC,CAAA;IAED,MAAM,UAAU,GAAG,CAAC,EAAiB,EAAE,EAAE;QACvC,6DAA6D;QAC7D,UAAU,CAAC,EAAE,CAAC,KAAK,CAAC,CAAA;IACtB,CAAC,CAAA;IAED,MAAM,CAAC,GAAG,KAAK,CAAC,QAAe,CAAA;IAC/B,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QACrB,KAAK,MAAM,IAAI,IAAI,CAAC;YAAE,UAAU,CAAC,IAAoB,CAAC,CAAA;IACxD,CAAC;SAAM,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,UAAU,IAAI,CAAC,CAAC,EAAE,CAAC;QACpF,UAAU,CAAC,CAAiB,CAAC,CAAA;IAC/B,CAAC;SAAM,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC;QACrD,UAAU,CAAC,CAAkB,CAAC,CAAA;IAChC,CAAC;IAED,MAAM,MAAM,GAA2B;QACrC,QAAQ;KACT,CAAA;IACD,IAAI,KAAK,CAAC,KAAK;QAAE,MAAM,CAAC,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IAC3D,OAAO,MAAM,CAAA;AACf,CAAC,CAAA;AAlCY,QAAA,gBAAgB,oBAkC5B"}
|
package/lib/esm/error.js
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
export var LspErrorCode;
|
|
2
|
+
(function (LspErrorCode) {
|
|
3
|
+
// JSON-RPC predefined errors (-32700 to -32600)
|
|
4
|
+
LspErrorCode[LspErrorCode["ParseError"] = -32700] = "ParseError";
|
|
5
|
+
LspErrorCode[LspErrorCode["InvalidRequest"] = -32600] = "InvalidRequest";
|
|
6
|
+
LspErrorCode[LspErrorCode["MethodNotFound"] = -32601] = "MethodNotFound";
|
|
7
|
+
LspErrorCode[LspErrorCode["InvalidParams"] = -32602] = "InvalidParams";
|
|
8
|
+
LspErrorCode[LspErrorCode["InternalError"] = -32603] = "InternalError";
|
|
9
|
+
// JSON-RPC reserved server error range (-32000 to -32099)
|
|
10
|
+
LspErrorCode[LspErrorCode["ServerErrorBase"] = -32000] = "ServerErrorBase";
|
|
11
|
+
// LSP-specific errors (-32900 to -32800)
|
|
12
|
+
LspErrorCode[LspErrorCode["RequestCancelled"] = -32800] = "RequestCancelled";
|
|
13
|
+
LspErrorCode[LspErrorCode["ContentModified"] = -32801] = "ContentModified";
|
|
14
|
+
LspErrorCode[LspErrorCode["ServerCancelled"] = -32802] = "ServerCancelled";
|
|
15
|
+
// Client-local errors (positive codes to avoid reserved range conflicts)
|
|
16
|
+
LspErrorCode[LspErrorCode["Timeout"] = 1001] = "Timeout";
|
|
17
|
+
LspErrorCode[LspErrorCode["Disposed"] = 1002] = "Disposed";
|
|
18
|
+
})(LspErrorCode || (LspErrorCode = {}));
|
|
19
|
+
export class LspError extends Error {
|
|
20
|
+
code;
|
|
21
|
+
data;
|
|
22
|
+
constructor(shape) {
|
|
23
|
+
super(shape.message);
|
|
24
|
+
this.code = shape.code;
|
|
25
|
+
this.data = shape.data;
|
|
26
|
+
this.name = 'LspError';
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
export const isCancellationError = (e) => typeof e === 'object' &&
|
|
30
|
+
e !== null &&
|
|
31
|
+
'code' in e &&
|
|
32
|
+
(e.code === LspErrorCode.RequestCancelled || e.code === LspErrorCode.ServerCancelled);
|
|
33
|
+
export const toLspError = (e) => e instanceof LspError
|
|
34
|
+
? e
|
|
35
|
+
: new LspError({
|
|
36
|
+
code: Number(e?.code ?? LspErrorCode.InternalError),
|
|
37
|
+
message: String(e?.message ?? 'Error'),
|
|
38
|
+
data: e?.data,
|
|
39
|
+
});
|
|
40
|
+
//# sourceMappingURL=error.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error.js","sourceRoot":"","sources":["../../src/error.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,YAmBX;AAnBD,WAAY,YAAY;IACtB,gDAAgD;IAChD,gEAAmB,CAAA;IACnB,wEAAuB,CAAA;IACvB,wEAAuB,CAAA;IACvB,sEAAsB,CAAA;IACtB,sEAAsB,CAAA;IAEtB,0DAA0D;IAC1D,0EAAwB,CAAA;IAExB,yCAAyC;IACzC,4EAAyB,CAAA;IACzB,0EAAwB,CAAA;IACxB,0EAAwB,CAAA;IAExB,yEAAyE;IACzE,wDAAc,CAAA;IACd,0DAAe,CAAA;AACjB,CAAC,EAnBW,YAAY,KAAZ,YAAY,QAmBvB;AAID,MAAM,OAAO,QAAS,SAAQ,KAAK;IACjC,IAAI,CAAQ;IACZ,IAAI,CAAU;IACd,YAAY,KAAoB;QAC9B,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QACpB,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAA;QACtB,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAA;QACtB,IAAI,CAAC,IAAI,GAAG,UAAU,CAAA;IACxB,CAAC;CACF;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAU,EAAE,EAAE,CAChD,OAAO,CAAC,KAAK,QAAQ;IACrB,CAAC,KAAK,IAAI;IACV,MAAM,IAAK,CAAS;IACpB,CAAE,CAAS,CAAC,IAAI,KAAK,YAAY,CAAC,gBAAgB,IAAK,CAAS,CAAC,IAAI,KAAK,YAAY,CAAC,eAAe,CAAC,CAAA;AAEzG,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAM,EAAY,EAAE,CAC7C,CAAC,YAAY,QAAQ;IACnB,CAAC,CAAC,CAAC;IACH,CAAC,CAAC,IAAI,QAAQ,CAAC;QACX,IAAI,EAAE,MAAM,CAAC,CAAC,EAAE,IAAI,IAAI,YAAY,CAAC,aAAa,CAAC;QACnD,OAAO,EAAE,MAAM,CAAC,CAAC,EAAE,OAAO,IAAI,OAAO,CAAC;QACtC,IAAI,EAAE,CAAC,EAAE,IAAI;KACd,CAAC,CAAA"}
|