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,265 @@
1
+ import { JSONRPC_VERSION, makeRequest, makeNotification, isId, } from './protocol.js';
2
+ import { LspError, LspErrorCode, toLspError, isCancellationError } from './error.js';
3
+ export class LspTransport {
4
+ sender;
5
+ receiver;
6
+ defaultTimeoutMs;
7
+ nextId = 1;
8
+ nextTokenId = 1;
9
+ disposables = new Set();
10
+ // Fire-and-forget requests handled by withHandlers()
11
+ pending = new Map();
12
+ // Async bookkeeping
13
+ timeouts = new Map();
14
+ rejectors = new Map();
15
+ // Central dispatcher: subscribers + per-id waiters (for sendAsync)
16
+ subs = new Set();
17
+ waiters = new Map();
18
+ // Progress tracking (both work done progress and partial results use $/progress)
19
+ progressCallbacks = new Map();
20
+ /** Construct a binding over a sender/receiver transport */
21
+ constructor(sender, receiver, defaultTimeoutMs = 15_000) {
22
+ this.sender = sender;
23
+ this.receiver = receiver;
24
+ this.defaultTimeoutMs = defaultTimeoutMs;
25
+ // One receiver to rule them all — handles single or batch frames.
26
+ const unbind = this.receiver((raw) => this.ingest(raw));
27
+ this.disposables.add(unbind);
28
+ }
29
+ // ---------------- Constructors ----------------
30
+ /** Create a binding from a Worker-like endpoint */
31
+ static fromWorker(worker) {
32
+ const sender = (message) => worker.postMessage(message);
33
+ const receiver = (cb) => {
34
+ const handler = (e) => cb(e.data);
35
+ worker.addEventListener('message', handler);
36
+ return () => worker.removeEventListener('message', handler);
37
+ };
38
+ return new LspTransport(sender, receiver);
39
+ }
40
+ /** Infer a binding from either a worker or an existing binding */
41
+ static infer(endpoint) {
42
+ return endpoint instanceof LspTransport ? endpoint : LspTransport.fromWorker(endpoint);
43
+ }
44
+ // -------- Helpers
45
+ /** Track a Monaco disposable for cleanup */
46
+ addDisposable(d) {
47
+ this.disposables.add(() => d.dispose());
48
+ return this;
49
+ }
50
+ /** Listen for error responses and forward normalized errors */
51
+ onError(cb) {
52
+ const onMessage = (res) => {
53
+ if (res?.jsonrpc !== JSONRPC_VERSION)
54
+ return;
55
+ if (res?.error)
56
+ cb(toLspError(res.error));
57
+ };
58
+ this.disposables.add(this.subscribe(onMessage));
59
+ return this;
60
+ }
61
+ /** Register a progress callback for a specific token */
62
+ onProgress(token, callback) {
63
+ this.progressCallbacks.set(token, callback);
64
+ return () => this.progressCallbacks.delete(token);
65
+ }
66
+ /** Register a callback for all $/progress notifications */
67
+ onProgressNotification(callback) {
68
+ const onMessage = (msg) => {
69
+ if (msg?.jsonrpc !== JSONRPC_VERSION || msg?.method !== '$/progress')
70
+ return;
71
+ if (msg.params)
72
+ callback(msg.params);
73
+ };
74
+ this.disposables.add(this.subscribe(onMessage));
75
+ return this;
76
+ }
77
+ /** Listen for a specific server notification method */
78
+ onServerNotification(method, cb) {
79
+ const onMessage = (msg) => {
80
+ if (msg?.jsonrpc !== JSONRPC_VERSION || msg?.method !== method)
81
+ return;
82
+ cb(msg.params);
83
+ };
84
+ this.disposables.add(this.subscribe(onMessage));
85
+ return this;
86
+ }
87
+ /** Dispose all resources and reject in-flight requests */
88
+ dispose() {
89
+ for (const rej of this.rejectors.values()) {
90
+ try {
91
+ rej(new LspError({ code: LspErrorCode.Disposed, message: 'Binding disposed before response' }));
92
+ }
93
+ catch { }
94
+ }
95
+ this.rejectors.clear();
96
+ for (const t of this.timeouts.values())
97
+ clearTimeout(t);
98
+ this.timeouts.clear();
99
+ this.disposables.forEach((d) => d());
100
+ this.disposables.clear();
101
+ this.pending.clear();
102
+ this.waiters.clear();
103
+ this.subs.clear();
104
+ this.progressCallbacks.clear();
105
+ }
106
+ // -------- Core API
107
+ /** Send a client-to-server notification (no response expected) */
108
+ sendNotification(method, params) {
109
+ this.sender(makeNotification(method, params));
110
+ return this;
111
+ }
112
+ /** Send an async request with timeout, cancellation and progress support */
113
+ sendRequest(method, params, opts) {
114
+ const id = this.nextId++;
115
+ // Generate tokens if callbacks provided but tokens not specified
116
+ const workDoneToken = opts?.workDoneToken ?? (opts?.onProgress ? `work-${this.nextTokenId++}` : undefined);
117
+ const partialResultToken = opts?.partialResultToken ?? (opts?.onPartialResult ? `partial-${this.nextTokenId++}` : undefined);
118
+ // Augment params with tokens if provided
119
+ const augmentedParams = { ...params };
120
+ if (workDoneToken !== undefined) {
121
+ augmentedParams.workDoneToken = workDoneToken;
122
+ }
123
+ if (partialResultToken !== undefined) {
124
+ augmentedParams.partialResultToken = partialResultToken;
125
+ }
126
+ const m = makeRequest(id, method, augmentedParams);
127
+ if (opts?.signal?.aborted) {
128
+ return Promise.resolve({ cancelled: true, code: LspErrorCode.RequestCancelled });
129
+ }
130
+ // Register progress callbacks if provided
131
+ // Both work done progress and partial results use $/progress notifications
132
+ if (workDoneToken !== undefined && opts?.onProgress) {
133
+ this.progressCallbacks.set(workDoneToken, opts.onProgress);
134
+ }
135
+ if (partialResultToken !== undefined && opts?.onPartialResult) {
136
+ this.progressCallbacks.set(partialResultToken, opts.onPartialResult);
137
+ }
138
+ this.sender(m);
139
+ return new Promise((resolve, reject) => {
140
+ const resolveCancelled = (code) => {
141
+ cleanup();
142
+ resolve({ cancelled: true, code });
143
+ };
144
+ const rejectAs = (err) => {
145
+ cleanup();
146
+ reject(err);
147
+ };
148
+ const onResponse = (res) => {
149
+ if (res?.id !== id)
150
+ return;
151
+ if (res.error) {
152
+ const err = toLspError(res.error);
153
+ if (isCancellationError(err))
154
+ return resolveCancelled(err.code);
155
+ return rejectAs(err);
156
+ }
157
+ cleanup();
158
+ resolve({ cancelled: false, result: res.result });
159
+ };
160
+ // route by id via central dispatcher
161
+ this.waiters.set(id, onResponse);
162
+ const cleanup = () => {
163
+ this.waiters.delete(id);
164
+ const t = this.timeouts.get(id);
165
+ if (t)
166
+ clearTimeout(t);
167
+ this.timeouts.delete(id);
168
+ this.rejectors.delete(id);
169
+ // Clean up progress callbacks (on completion, cancellation, or error)
170
+ // Per LSP spec: workDoneToken is only valid until response/cancellation
171
+ if (workDoneToken !== undefined) {
172
+ this.progressCallbacks.delete(workDoneToken);
173
+ }
174
+ if (partialResultToken !== undefined) {
175
+ this.progressCallbacks.delete(partialResultToken);
176
+ }
177
+ if (abortCleanup)
178
+ opts?.signal?.removeEventListener('abort', abortCleanup);
179
+ };
180
+ // Timeout
181
+ const timeoutMs = opts?.timeoutMs ?? this.defaultTimeoutMs;
182
+ if (timeoutMs > 0 && Number.isFinite(timeoutMs)) {
183
+ const t = setTimeout(() => {
184
+ rejectAs(new LspError({
185
+ code: LspErrorCode.Timeout,
186
+ message: `Request timed out: ${String(method)} (${id}) after ${timeoutMs}ms`,
187
+ }));
188
+ }, timeoutMs);
189
+ this.timeouts.set(id, t);
190
+ }
191
+ // Allow dispose() to reject in-flight requests
192
+ this.rejectors.set(id, rejectAs);
193
+ // AbortSignal → send $/cancelRequest and resolve immediately (eager cancel)
194
+ // Don't wait for server response - some servers don't echo promptly
195
+ let abortCleanup;
196
+ if (opts?.signal) {
197
+ const onAbort = () => {
198
+ // Notify server of cancellation (best effort)
199
+ this.sendNotification('$/cancelRequest', { id });
200
+ // Resolve immediately for better UX (don't wait for server acknowledgement)
201
+ resolveCancelled(LspErrorCode.RequestCancelled);
202
+ };
203
+ opts.signal.addEventListener('abort', onAbort, { once: true });
204
+ abortCleanup = () => opts.signal?.removeEventListener('abort', onAbort);
205
+ }
206
+ });
207
+ }
208
+ /** Subscribe to all inbound JSON-RPC messages */
209
+ subscribe(cb) {
210
+ this.subs.add(cb);
211
+ return () => this.subs.delete(cb);
212
+ }
213
+ /** Ingest an incoming frame and dispatch to listeners/waiters */
214
+ ingest = (raw) => {
215
+ // Batch: process each frame independently
216
+ if (Array.isArray(raw)) {
217
+ for (const frame of raw)
218
+ this.ingest(frame);
219
+ return;
220
+ }
221
+ // Early drop anything that isn't a proper JSON-RPC 2.0 message
222
+ if (!raw || typeof raw !== 'object' || raw.jsonrpc !== JSONRPC_VERSION)
223
+ return;
224
+ // Handle $/progress notifications
225
+ if (raw.method === '$/progress' && raw.params) {
226
+ const params = raw.params;
227
+ const callback = this.progressCallbacks.get(params.token);
228
+ if (callback) {
229
+ try {
230
+ callback(params.value);
231
+ }
232
+ catch { }
233
+ // Auto-remove workDoneToken callbacks when receiving WorkDoneProgressEnd
234
+ if (params.value && typeof params.value === 'object' && params.value.kind === 'end') {
235
+ this.progressCallbacks.delete(params.token);
236
+ }
237
+ }
238
+ // Still fan out to subscribers for withProgress handlers
239
+ }
240
+ // If it's a response with an id and a waiting promise, resolve that first
241
+ if (Object.prototype.hasOwnProperty.call(raw, 'id')) {
242
+ const id = raw.id;
243
+ if (isId(id)) {
244
+ const waiter = this.waiters.get(id);
245
+ if (waiter) {
246
+ // Claim and stop propagation to generic handlers
247
+ this.waiters.delete(id);
248
+ try {
249
+ waiter(raw);
250
+ }
251
+ catch { }
252
+ return;
253
+ }
254
+ }
255
+ }
256
+ // Fan-out to generic subscribers (e.g. withHandlers / withError / withProgress)
257
+ for (const cb of Array.from(this.subs)) {
258
+ try {
259
+ cb(raw);
260
+ }
261
+ catch { }
262
+ }
263
+ };
264
+ }
265
+ //# 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,252 @@
1
+ /** Store original LSP item on Monaco completion item */
2
+ const LSP_ITEM_KEY = Symbol.for('__lsp_completion_item__');
3
+ /** Convert LSP CompletionItem to Monaco and stash original */
4
+ export const toMonacoCompletionItem = (monacoApi, item) => {
5
+ const insertText = getInsertText(item);
6
+ const range = toMonacoRange(item.textEdit);
7
+ // Determine insert text format (snippet vs plain)
8
+ const insertTextFormat = item.insertTextFormat ?? 1; // 1 = PlainText, 2 = Snippet
9
+ const isSnippet = insertTextFormat === 2;
10
+ const result = {
11
+ label: item.label,
12
+ insertText,
13
+ kind: item.kind ?? 0,
14
+ detail: item.detail,
15
+ documentation: typeof item.documentation === 'string' ? item.documentation : item.documentation?.value,
16
+ sortText: item.sortText,
17
+ filterText: item.filterText,
18
+ commitCharacters: item.commitCharacters,
19
+ additionalTextEdits: item.additionalTextEdits?.map(toMonacoTextEdit),
20
+ // Insert as snippet when requested
21
+ insertTextRules: isSnippet ? monacoApi.languages.CompletionItemInsertTextRule.InsertAsSnippet : undefined, // 4 = InsertAsSnippet
22
+ };
23
+ // Set explicit range only when provided by LSP
24
+ if (range !== undefined) {
25
+ result.range = range;
26
+ }
27
+ // Keep original for resolve
28
+ result[LSP_ITEM_KEY] = item;
29
+ return result;
30
+ };
31
+ /** Convert Monaco CompletionItem to LSP, preferring original */
32
+ export const toLspCompletionItem = (item) => {
33
+ // Try to retrieve the original LSP item
34
+ const originalItem = item[LSP_ITEM_KEY];
35
+ if (originalItem) {
36
+ // Use original to preserve LSP fields
37
+ return originalItem;
38
+ }
39
+ // Fallback: convert Monaco item to LSP format
40
+ const result = {
41
+ label: typeof item.label === 'string' ? item.label : item.label.label,
42
+ kind: item.kind,
43
+ detail: item.detail,
44
+ documentation: typeof item.documentation === 'string' ? item.documentation : item.documentation?.value,
45
+ sortText: item.sortText,
46
+ filterText: item.filterText,
47
+ insertText: typeof item.insertText === 'string' ? item.insertText : undefined,
48
+ commitCharacters: item.commitCharacters,
49
+ };
50
+ return result;
51
+ };
52
+ /** Merge resolved LSP fields into Monaco item */
53
+ export const mergeResolvedCompletionItem = (monacoItem, resolvedLspItem) => {
54
+ // Merge fields that may be resolved
55
+ const merged = {
56
+ ...monacoItem,
57
+ detail: resolvedLspItem.detail ?? monacoItem.detail,
58
+ documentation: resolvedLspItem.documentation !== undefined
59
+ ? typeof resolvedLspItem.documentation === 'string'
60
+ ? resolvedLspItem.documentation
61
+ : resolvedLspItem.documentation?.value
62
+ : monacoItem.documentation,
63
+ additionalTextEdits: resolvedLspItem.additionalTextEdits?.map(toMonacoTextEdit) ?? monacoItem.additionalTextEdits,
64
+ command: resolvedLspItem.command
65
+ ? {
66
+ id: resolvedLspItem.command.command,
67
+ title: resolvedLspItem.command.title,
68
+ arguments: resolvedLspItem.command.arguments,
69
+ }
70
+ : monacoItem.command,
71
+ };
72
+ // Update insert text/range when textEdit provided
73
+ if (resolvedLspItem.textEdit) {
74
+ const insertText = getInsertText(resolvedLspItem);
75
+ const range = toMonacoRange(resolvedLspItem.textEdit);
76
+ merged.insertText = insertText;
77
+ if (range !== undefined) {
78
+ merged.range = range;
79
+ }
80
+ }
81
+ else if (resolvedLspItem.insertText !== undefined) {
82
+ // Handle resolve without textEdit
83
+ merged.insertText = resolvedLspItem.insertText;
84
+ }
85
+ // Update snippet rule if format changed
86
+ if (resolvedLspItem.insertTextFormat !== undefined) {
87
+ const isSnippet = resolvedLspItem.insertTextFormat === 2;
88
+ merged.insertTextRules = isSnippet ? 4 : undefined; // 4 = InsertAsSnippet
89
+ }
90
+ // Store updated LSP item
91
+ ;
92
+ merged[LSP_ITEM_KEY] = resolvedLspItem;
93
+ return merged;
94
+ };
95
+ /** Extract insert text: textEdit.newText → insertText → label */
96
+ const getInsertText = (item) => {
97
+ if (item.textEdit && 'newText' in item.textEdit) {
98
+ return item.textEdit.newText;
99
+ }
100
+ return item.insertText ?? item.label;
101
+ };
102
+ /** Convert LSP TextEdit to Monaco */
103
+ const toMonacoTextEdit = (edit) => {
104
+ return {
105
+ range: toMonacoIRange(edit.range),
106
+ text: edit.newText,
107
+ };
108
+ };
109
+ /** Convert LSP TextEdit/InsertReplaceEdit to Monaco range */
110
+ const toMonacoRange = (edit) => {
111
+ if (!edit)
112
+ return undefined;
113
+ if ('range' in edit) {
114
+ return toMonacoIRange(edit.range);
115
+ }
116
+ return {
117
+ insert: toMonacoIRange(edit.insert),
118
+ replace: toMonacoIRange(edit.replace),
119
+ };
120
+ };
121
+ /** Convert LSP Range to Monaco IRange (0-based → 1-based) */
122
+ const toMonacoIRange = (range) => {
123
+ return {
124
+ startLineNumber: range.start.line + 1,
125
+ startColumn: range.start.character + 1,
126
+ endLineNumber: range.end.line + 1,
127
+ endColumn: range.end.character + 1,
128
+ };
129
+ };
130
+ /** Convert Monaco IRange to LSP Range (1-based → 0-based) */
131
+ export const toLspRange = (range) => {
132
+ return {
133
+ start: {
134
+ line: range.startLineNumber - 1,
135
+ character: range.startColumn - 1,
136
+ },
137
+ end: {
138
+ line: range.endLineNumber - 1,
139
+ character: range.endColumn - 1,
140
+ },
141
+ };
142
+ };
143
+ /** Convert LSP Position to Monaco IPosition */
144
+ export const toMonacoPosition = (position) => {
145
+ return {
146
+ lineNumber: position.line + 1,
147
+ column: position.character + 1,
148
+ };
149
+ };
150
+ /** Convert Monaco IPosition to LSP Position */
151
+ export const toLspPosition = (position) => {
152
+ return {
153
+ line: position.lineNumber - 1,
154
+ character: position.column - 1,
155
+ };
156
+ };
157
+ /** Map LSP diagnostics to Monaco markers */
158
+ export const toMonacoMarkers = (monacoApi, diagnostics) => {
159
+ const toSeverity = (s) => {
160
+ switch (s) {
161
+ case 1:
162
+ return monacoApi.MarkerSeverity.Error;
163
+ case 2:
164
+ return monacoApi.MarkerSeverity.Warning;
165
+ case 3:
166
+ return monacoApi.MarkerSeverity.Info;
167
+ case 4:
168
+ return monacoApi.MarkerSeverity.Hint;
169
+ default:
170
+ return monacoApi.MarkerSeverity.Info;
171
+ }
172
+ };
173
+ const toTags = (tags) => {
174
+ if (!tags || tags.length === 0)
175
+ return undefined;
176
+ const mapped = [];
177
+ for (const t of tags) {
178
+ if (t === 1)
179
+ mapped.push(monacoApi.MarkerTag.Unnecessary);
180
+ if (t === 2)
181
+ mapped.push(monacoApi.MarkerTag.Deprecated);
182
+ }
183
+ return mapped.length ? mapped : undefined;
184
+ };
185
+ const toRelated = (infos) => {
186
+ if (!infos || infos.length === 0)
187
+ return undefined;
188
+ return infos.map((ri) => ({
189
+ resource: monacoApi.Uri.parse(ri.location.uri),
190
+ message: ri.message,
191
+ startLineNumber: ri.location.range.start.line + 1,
192
+ startColumn: ri.location.range.start.character + 1,
193
+ endLineNumber: ri.location.range.end.line + 1,
194
+ endColumn: ri.location.range.end.character + 1,
195
+ }));
196
+ };
197
+ return diagnostics.map((d) => ({
198
+ severity: toSeverity(d.severity),
199
+ message: d.message,
200
+ code: typeof d.code === 'string' ? d.code : typeof d.code === 'number' ? String(d.code) : undefined,
201
+ source: d.source,
202
+ tags: toTags(d.tags),
203
+ relatedInformation: toRelated(d.relatedInformation),
204
+ startLineNumber: d.range.start.line + 1,
205
+ startColumn: d.range.start.character + 1,
206
+ endLineNumber: d.range.end.line + 1,
207
+ endColumn: d.range.end.character + 1,
208
+ }));
209
+ };
210
+ /** Map LSP TextEdits to Monaco edits */
211
+ export const toMonacoTextEdits = (edits) => {
212
+ return edits.map((e) => ({
213
+ range: toMonacoIRange(e.range),
214
+ text: e.newText,
215
+ }));
216
+ };
217
+ /** Convert LSP Hover to Monaco Hover */
218
+ export const lspHoverToMonaco = (hover) => {
219
+ const contents = [];
220
+ const pushString = (value) => contents.push({ value });
221
+ const pushMarked = (m) => {
222
+ if (typeof m === 'string') {
223
+ pushString(m);
224
+ return;
225
+ }
226
+ // { language, value } → markdown code block
227
+ const fenced = '```' + (m.language || '') + '\n' + m.value + '\n```';
228
+ pushString(fenced);
229
+ };
230
+ const pushMarkup = (mc) => {
231
+ // kind: 'markdown' | 'plaintext'. For plaintext, keep as-is.
232
+ pushString(mc.value);
233
+ };
234
+ const c = hover.contents;
235
+ if (Array.isArray(c)) {
236
+ for (const item of c)
237
+ pushMarked(item);
238
+ }
239
+ else if (typeof c === 'string' || (c && typeof c === 'object' && 'language' in c)) {
240
+ pushMarked(c);
241
+ }
242
+ else if (c && typeof c === 'object' && 'kind' in c) {
243
+ pushMarkup(c);
244
+ }
245
+ const result = {
246
+ contents,
247
+ };
248
+ if (hover.range)
249
+ result.range = toMonacoIRange(hover.range);
250
+ return result;
251
+ };
252
+ //# 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,26 @@
1
+ export declare enum LspErrorCode {
2
+ ParseError = -32700,
3
+ InvalidRequest = -32600,
4
+ MethodNotFound = -32601,
5
+ InvalidParams = -32602,
6
+ InternalError = -32603,
7
+ ServerErrorBase = -32000,
8
+ RequestCancelled = -32800,
9
+ ContentModified = -32801,
10
+ ServerCancelled = -32802,
11
+ Timeout = 1001,
12
+ Disposed = 1002
13
+ }
14
+ export type LspErrorShape = {
15
+ code: number;
16
+ message: string;
17
+ data?: unknown;
18
+ };
19
+ export declare class LspError extends Error {
20
+ code: number;
21
+ data?: unknown;
22
+ constructor(shape: LspErrorShape);
23
+ }
24
+ export declare const isCancellationError: (e: unknown) => boolean;
25
+ export declare const toLspError: (e: any) => LspError;
26
+ //# sourceMappingURL=error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../../src/error.ts"],"names":[],"mappings":"AAAA,oBAAY,YAAY;IAEtB,UAAU,SAAS;IACnB,cAAc,SAAS;IACvB,cAAc,SAAS;IACvB,aAAa,SAAS;IACtB,aAAa,SAAS;IAGtB,eAAe,SAAS;IAGxB,gBAAgB,SAAS;IACzB,eAAe,SAAS;IACxB,eAAe,SAAS;IAGxB,OAAO,OAAO;IACd,QAAQ,OAAO;CAChB;AAED,MAAM,MAAM,aAAa,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,CAAA;AAE7E,qBAAa,QAAS,SAAQ,KAAK;IACjC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,OAAO,CAAA;gBACF,KAAK,EAAE,aAAa;CAMjC;AAED,eAAO,MAAM,mBAAmB,GAAI,GAAG,OAAO,YAI2D,CAAA;AAEzG,eAAO,MAAM,UAAU,GAAI,GAAG,GAAG,KAAG,QAO5B,CAAA"}
@@ -0,0 +1,78 @@
1
+ import type { InitializeResult, InitializeParams } from 'vscode-languageserver-protocol';
2
+ import type * as monaco from 'monaco-editor';
3
+ import { Transport } from './transport.js';
4
+ import { ProgressPayload } from './protocol.js';
5
+ import type { LspError } from './error.js';
6
+ export type * from './protocol.js';
7
+ export * from './transport.js';
8
+ type Monaco = typeof monaco;
9
+ export type ClientEvent = {
10
+ type: 'initialized';
11
+ capabilities: InitializeResult['capabilities'];
12
+ } | {
13
+ type: 'error';
14
+ error: LspError;
15
+ } | {
16
+ type: 'workDoneProgress';
17
+ params: ProgressPayload;
18
+ } | {
19
+ type: 'logMessage';
20
+ method: string;
21
+ params: any;
22
+ } | {
23
+ type: 'shutdownError';
24
+ error: unknown;
25
+ };
26
+ export type ClientEventHandler = (event: ClientEvent) => void;
27
+ export type MonacoLspClientOptions = {
28
+ languageSelector: monaco.languages.LanguageSelector;
29
+ /** Send shutdown/exit on dispose when server is dedicated */
30
+ dedicatedServer?: boolean;
31
+ initialParams?: InitializeParams;
32
+ };
33
+ export declare class LspMonacoClient {
34
+ private options;
35
+ static CLIENT_NAME: string;
36
+ static CLIENT_VERSION: string;
37
+ private editor;
38
+ private monaco;
39
+ private binding;
40
+ private endpoint;
41
+ private openDocuments;
42
+ private initialized;
43
+ private eventHandlers;
44
+ private syncKind;
45
+ private readonly MARKER_OWNER;
46
+ /** Construct a Monaco LSP client bound to an endpoint */
47
+ constructor(endpoint: Transport, options: MonacoLspClientOptions);
48
+ /** Register an event handler for client events */
49
+ onEvent(handler: ClientEventHandler): () => void;
50
+ /** Emit an event to all registered handlers */
51
+ private emit;
52
+ /** Register Monaco editor instance and initialize LSP wiring */
53
+ connect(monaco: Monaco, editor: monaco.editor.ICodeEditor): void;
54
+ /** Initialize the LSP server connection and capabilities */
55
+ private initialize;
56
+ /** Dispose the client, closing docs and optionally shutting down server */
57
+ dispose(): Promise<void>;
58
+ /** Register Monaco features based on server-reported capabilities */
59
+ private applyServerCapabilities;
60
+ /** Register hover provider backed by the LSP server */
61
+ private registerHoverProvider;
62
+ /** Register Monaco completion provider backed by the LSP server */
63
+ private registerCompletionProvider;
64
+ /** Register document formatting provider backed by the LSP server */
65
+ private registerFormattingProvider;
66
+ /** Register range formatting provider backed by the LSP server */
67
+ private registerRangeFormattingProvider;
68
+ /** Register on-type formatting provider backed by the LSP server */
69
+ private registerOnTypeFormattingProvider;
70
+ /** Send textDocument/didChange according to server sync kind */
71
+ private handleContentChange;
72
+ /** Handle model open/close and send didOpen/didClose notifications */
73
+ private handleModelChange;
74
+ /** Listen for publishDiagnostics and update Monaco markers */
75
+ private wireDiagnostics;
76
+ private static CAPABILITIES;
77
+ }
78
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAGhB,gBAAgB,EAEjB,MAAM,gCAAgC,CAAA;AAEvC,OAAO,KAAK,KAAK,MAAM,MAAM,eAAe,CAAA;AAY5C,OAAO,EAAgB,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAExD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAC/C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAE1C,mBAAmB,eAAe,CAAA;AAClC,cAAc,gBAAgB,CAAA;AAE9B,KAAK,MAAM,GAAG,OAAO,MAAM,CAAA;AAG3B,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,YAAY,EAAE,gBAAgB,CAAC,cAAc,CAAC,CAAA;CAAE,GACvE;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,QAAQ,CAAA;CAAE,GAClC;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,MAAM,EAAE,eAAe,CAAA;CAAE,GACrD;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,GAAG,CAAA;CAAE,GACnD;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAAA;AAE7C,MAAM,MAAM,kBAAkB,GAAG,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAA;AAE7D,MAAM,MAAM,sBAAsB,GAAG;IACnC,gBAAgB,EAAE,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAA;IACnD,6DAA6D;IAC7D,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,aAAa,CAAC,EAAE,gBAAgB,CAAA;CACjC,CAAA;AAED,qBAAa,eAAe;IAiBxB,OAAO,CAAC,OAAO;IAhBjB,MAAM,CAAC,WAAW,SAAsB;IACxC,MAAM,CAAC,cAAc,SAAU;IAE/B,OAAO,CAAC,MAAM,CAAyC;IACvD,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,aAAa,CAAoB;IACzC,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,aAAa,CAAgC;IACrD,OAAO,CAAC,QAAQ,CAAY;IAC5B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAoB;IAEjD,yDAAyD;gBAEvD,QAAQ,EAAE,SAAS,EACX,OAAO,EAAE,sBAAsB;IAMzC,kDAAkD;IAClD,OAAO,CAAC,OAAO,EAAE,kBAAkB,GAAG,MAAM,IAAI;IAKhD,+CAA+C;IAC/C,OAAO,CAAC,IAAI;IAWZ,gEAAgE;IAChE,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,WAAW;IAsBzD,4DAA4D;YAC9C,UAAU;IA0BxB,2EAA2E;IACrE,OAAO;IAqCb,qEAAqE;IACrE,OAAO,CAAC,uBAAuB;IAoC/B,uDAAuD;IACvD,OAAO,CAAC,qBAAqB;IAuB7B,mEAAmE;IACnE,OAAO,CAAC,0BAA0B;IAgDlC,qEAAqE;IACrE,OAAO,CAAC,0BAA0B;IAuBlC,kEAAkE;IAClE,OAAO,CAAC,+BAA+B;IAwBvC,oEAAoE;IACpE,OAAO,CAAC,gCAAgC;IA4BxC,gEAAgE;IAChE,OAAO,CAAC,mBAAmB;IA0B3B,sEAAsE;IACtE,OAAO,CAAC,iBAAiB;IAmDzB,8DAA8D;IAC9D,OAAO,CAAC,eAAe;IAsBvB,OAAO,CAAC,MAAM,CAAC,YAAY,CA8N1B;CACF"}