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.
@@ -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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"}
@@ -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":"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"}
@@ -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"}