@platformos/codemirror-language-client 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/README.md +91 -0
  3. package/dist/esm/CodeMirrorLanguageClient.d.ts +60 -0
  4. package/dist/esm/CodeMirrorLanguageClient.js +80 -0
  5. package/dist/esm/CodeMirrorLanguageClient.js.map +1 -0
  6. package/dist/esm/LanguageClient.d.ts +112 -0
  7. package/dist/esm/LanguageClient.js +187 -0
  8. package/dist/esm/LanguageClient.js.map +1 -0
  9. package/dist/esm/extensions/client.d.ts +6 -0
  10. package/dist/esm/extensions/client.js +12 -0
  11. package/dist/esm/extensions/client.js.map +1 -0
  12. package/dist/esm/extensions/complete.d.ts +17 -0
  13. package/dist/esm/extensions/complete.js +202 -0
  14. package/dist/esm/extensions/complete.js.map +1 -0
  15. package/dist/esm/extensions/complete.spec.d.ts +1 -0
  16. package/dist/esm/extensions/complete.spec.js +189 -0
  17. package/dist/esm/extensions/complete.spec.js.map +1 -0
  18. package/dist/esm/extensions/documentHighlights.d.ts +14 -0
  19. package/dist/esm/extensions/documentHighlights.js +78 -0
  20. package/dist/esm/extensions/documentHighlights.js.map +1 -0
  21. package/dist/esm/extensions/documentHighlights.spec.d.ts +1 -0
  22. package/dist/esm/extensions/documentHighlights.spec.js +99 -0
  23. package/dist/esm/extensions/documentHighlights.spec.js.map +1 -0
  24. package/dist/esm/extensions/hover.d.ts +16 -0
  25. package/dist/esm/extensions/hover.js +49 -0
  26. package/dist/esm/extensions/hover.js.map +1 -0
  27. package/dist/esm/extensions/hover.spec.d.ts +1 -0
  28. package/dist/esm/extensions/hover.spec.js +59 -0
  29. package/dist/esm/extensions/hover.spec.js.map +1 -0
  30. package/dist/esm/extensions/index.d.ts +6 -0
  31. package/dist/esm/extensions/index.js +7 -0
  32. package/dist/esm/extensions/index.js.map +1 -0
  33. package/dist/esm/extensions/lspLinter.d.ts +23 -0
  34. package/dist/esm/extensions/lspLinter.js +104 -0
  35. package/dist/esm/extensions/lspLinter.js.map +1 -0
  36. package/dist/esm/extensions/lspLinter.spec.d.ts +1 -0
  37. package/dist/esm/extensions/lspLinter.spec.js +141 -0
  38. package/dist/esm/extensions/lspLinter.spec.js.map +1 -0
  39. package/dist/esm/extensions/snippet.d.ts +19 -0
  40. package/dist/esm/extensions/snippet.js +25 -0
  41. package/dist/esm/extensions/snippet.js.map +1 -0
  42. package/dist/esm/extensions/snippet.spec.d.ts +1 -0
  43. package/dist/esm/extensions/snippet.spec.js +23 -0
  44. package/dist/esm/extensions/snippet.spec.js.map +1 -0
  45. package/dist/esm/extensions/textDocumentSync.d.ts +4 -0
  46. package/dist/esm/extensions/textDocumentSync.js +109 -0
  47. package/dist/esm/extensions/textDocumentSync.js.map +1 -0
  48. package/dist/esm/extensions/textDocumentSync.spec.d.ts +1 -0
  49. package/dist/esm/extensions/textDocumentSync.spec.js +163 -0
  50. package/dist/esm/extensions/textDocumentSync.spec.js.map +1 -0
  51. package/dist/esm/index.d.ts +2 -0
  52. package/dist/esm/index.js +3 -0
  53. package/dist/esm/index.js.map +1 -0
  54. package/dist/esm/test/MockClient.d.ts +18 -0
  55. package/dist/esm/test/MockClient.js +63 -0
  56. package/dist/esm/test/MockClient.js.map +1 -0
  57. package/dist/esm/tsconfig.tsbuildInfo +1 -0
  58. package/dist/esm/utils/simpleStateField.d.ts +3 -0
  59. package/dist/esm/utils/simpleStateField.js +17 -0
  60. package/dist/esm/utils/simpleStateField.js.map +1 -0
  61. package/dist/umd/CodeMirrorLanguageClient.d.ts +60 -0
  62. package/dist/umd/CodeMirrorLanguageClient.js +94 -0
  63. package/dist/umd/CodeMirrorLanguageClient.js.map +1 -0
  64. package/dist/umd/LanguageClient.d.ts +112 -0
  65. package/dist/umd/LanguageClient.js +202 -0
  66. package/dist/umd/LanguageClient.js.map +1 -0
  67. package/dist/umd/extensions/client.d.ts +6 -0
  68. package/dist/umd/extensions/client.js +25 -0
  69. package/dist/umd/extensions/client.js.map +1 -0
  70. package/dist/umd/extensions/complete.d.ts +17 -0
  71. package/dist/umd/extensions/complete.js +217 -0
  72. package/dist/umd/extensions/complete.js.map +1 -0
  73. package/dist/umd/extensions/documentHighlights.d.ts +14 -0
  74. package/dist/umd/extensions/documentHighlights.js +93 -0
  75. package/dist/umd/extensions/documentHighlights.js.map +1 -0
  76. package/dist/umd/extensions/hover.d.ts +16 -0
  77. package/dist/umd/extensions/hover.js +64 -0
  78. package/dist/umd/extensions/hover.js.map +1 -0
  79. package/dist/umd/extensions/index.d.ts +6 -0
  80. package/dist/umd/extensions/index.js +36 -0
  81. package/dist/umd/extensions/index.js.map +1 -0
  82. package/dist/umd/extensions/lspLinter.d.ts +23 -0
  83. package/dist/umd/extensions/lspLinter.js +119 -0
  84. package/dist/umd/extensions/lspLinter.js.map +1 -0
  85. package/dist/umd/extensions/snippet.d.ts +19 -0
  86. package/dist/umd/extensions/snippet.js +38 -0
  87. package/dist/umd/extensions/snippet.js.map +1 -0
  88. package/dist/umd/extensions/textDocumentSync.d.ts +4 -0
  89. package/dist/umd/extensions/textDocumentSync.js +122 -0
  90. package/dist/umd/extensions/textDocumentSync.js.map +1 -0
  91. package/dist/umd/index.d.ts +2 -0
  92. package/dist/umd/index.js +29 -0
  93. package/dist/umd/index.js.map +1 -0
  94. package/dist/umd/test/MockClient.d.ts +18 -0
  95. package/dist/umd/test/MockClient.js +77 -0
  96. package/dist/umd/test/MockClient.js.map +1 -0
  97. package/dist/umd/tsconfig.tsbuildInfo +1 -0
  98. package/dist/umd/utils/simpleStateField.d.ts +3 -0
  99. package/dist/umd/utils/simpleStateField.js +30 -0
  100. package/dist/umd/utils/simpleStateField.js.map +1 -0
  101. package/package.json +67 -0
  102. package/playground/src/index.html +10 -0
  103. package/playground/src/language-server-worker.ts +82 -0
  104. package/playground/src/playground.ts +251 -0
  105. package/playground/tsconfig.json +26 -0
  106. package/playground/webpack.config.js +85 -0
  107. package/src/CodeMirrorLanguageClient.ts +179 -0
  108. package/src/LanguageClient.ts +329 -0
  109. package/src/extensions/client.ts +17 -0
  110. package/src/extensions/complete.spec.ts +200 -0
  111. package/src/extensions/complete.ts +274 -0
  112. package/src/extensions/documentHighlights.spec.ts +111 -0
  113. package/src/extensions/documentHighlights.ts +91 -0
  114. package/src/extensions/hover.spec.ts +68 -0
  115. package/src/extensions/hover.ts +66 -0
  116. package/src/extensions/index.ts +19 -0
  117. package/src/extensions/lspLinter.spec.ts +156 -0
  118. package/src/extensions/lspLinter.ts +154 -0
  119. package/src/extensions/snippet.spec.ts +31 -0
  120. package/src/extensions/snippet.ts +42 -0
  121. package/src/extensions/textDocumentSync.spec.ts +188 -0
  122. package/src/extensions/textDocumentSync.ts +138 -0
  123. package/src/index.ts +2 -0
  124. package/src/test/MockClient.ts +96 -0
  125. package/src/utils/simpleStateField.ts +22 -0
  126. package/tsconfig.json +18 -0
  127. package/tsconfig.umd.json +9 -0
@@ -0,0 +1,94 @@
1
+ (function (factory) {
2
+ if (typeof module === "object" && typeof module.exports === "object") {
3
+ var v = factory(require, exports);
4
+ if (v !== undefined) module.exports = v;
5
+ }
6
+ else if (typeof define === "function" && define.amd) {
7
+ define(["require", "exports", "vscode-languageserver-protocol", "./LanguageClient", "./extensions", "./extensions/hover"], factory);
8
+ }
9
+ })(function (require, exports) {
10
+ "use strict";
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.CodeMirrorLanguageClient = void 0;
13
+ const vscode_languageserver_protocol_1 = require("vscode-languageserver-protocol");
14
+ const LanguageClient_1 = require("./LanguageClient");
15
+ const extensions_1 = require("./extensions");
16
+ const hover_1 = require("./extensions/hover");
17
+ /**
18
+ * The client capabilities are how we tell the language server what
19
+ * features we support so that they have the opportunity to skip doing
20
+ * things that the client does not support. Everything is false by default,
21
+ * but we migth need to change that and this is where we'll do it.
22
+ */
23
+ const clientCapabilities = {
24
+ textDocument: {
25
+ documentHighlight: {
26
+ dynamicRegistration: false,
27
+ },
28
+ completion: {
29
+ // We send the completion context to the server
30
+ contextSupport: true,
31
+ completionItem: {
32
+ snippetSupport: true,
33
+ insertReplaceSupport: true,
34
+ documentationFormat: [vscode_languageserver_protocol_1.MarkupKind.PlainText, vscode_languageserver_protocol_1.MarkupKind.Markdown],
35
+ commitCharactersSupport: false,
36
+ },
37
+ },
38
+ },
39
+ };
40
+ const defaultLogger = console.log.bind(console);
41
+ // There is one LanguageClient
42
+ // There is one LanguageServer
43
+ // There are many CodeMirror instances
44
+ class CodeMirrorLanguageClient {
45
+ constructor(worker, { log = defaultLogger, initializationOptions } = {}, { infoRenderer, autocompleteOptions, diagnosticRenderer, linterOptions, hoverRenderer, hoverOptions, } = {}) {
46
+ this.worker = worker;
47
+ this.client = new LanguageClient_1.LanguageClient(worker, {
48
+ clientCapabilities,
49
+ initializationOptions,
50
+ log,
51
+ });
52
+ this.worker = worker;
53
+ this.infoRenderer = infoRenderer;
54
+ this.autocompleteExtension = (0, extensions_1.lspComplete)(autocompleteOptions);
55
+ this.diagnosticRenderer = diagnosticRenderer;
56
+ this.linterExtension = (0, extensions_1.lspLinter)(linterOptions);
57
+ this.hoverRenderer = hoverRenderer;
58
+ this.hoverExtension = (0, extensions_1.lspHover)(hoverOptions);
59
+ this.documentHighlightsExtension = (0, extensions_1.lspDocumentHighlights)();
60
+ }
61
+ async start() {
62
+ await this.client.start();
63
+ }
64
+ async stop() {
65
+ try {
66
+ await this.client.stop();
67
+ }
68
+ finally {
69
+ this.worker.terminate();
70
+ }
71
+ }
72
+ extension(fileUri, { shouldLint, shouldComplete, shouldHover } = {
73
+ shouldLint: true,
74
+ shouldComplete: true,
75
+ shouldHover: true,
76
+ }) {
77
+ return [
78
+ extensions_1.clientFacet.of(this.client),
79
+ extensions_1.serverCapabilitiesFacet.of(this.client.serverCapabilities),
80
+ extensions_1.fileUriFacet.of(fileUri),
81
+ extensions_1.textDocumentSync,
82
+ extensions_1.infoRendererFacet.of(this.infoRenderer),
83
+ extensions_1.diagnosticRendererFacet.of(this.diagnosticRenderer),
84
+ hover_1.hoverRendererFacet.of(this.hoverRenderer),
85
+ this.documentHighlightsExtension,
86
+ ]
87
+ .concat(shouldLint ? this.linterExtension : [])
88
+ .concat(shouldComplete ? this.autocompleteExtension : [])
89
+ .concat(shouldHover ? this.hoverExtension : []);
90
+ }
91
+ }
92
+ exports.CodeMirrorLanguageClient = CodeMirrorLanguageClient;
93
+ });
94
+ //# sourceMappingURL=CodeMirrorLanguageClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CodeMirrorLanguageClient.js","sourceRoot":"","sources":["../../src/CodeMirrorLanguageClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,112 @@
1
+ import { Disposable, NotificationHandler, ProtocolNotificationType, ProtocolRequestType, ProtocolRequestType0, RequestHandler, ProtocolNotificationType0, ServerCapabilities, ClientCapabilities } from 'vscode-languageserver-protocol';
2
+ export interface PromiseCompletion {
3
+ resolve(value: unknown): void;
4
+ reject(error: unknown): void;
5
+ }
6
+ export interface Dependencies {
7
+ clientCapabilities: ClientCapabilities;
8
+ initializationOptions?: any;
9
+ log(...args: any[]): void;
10
+ }
11
+ export interface AbstractLanguageClient {
12
+ clientCapabilities: ClientCapabilities;
13
+ serverCapabilities: ServerCapabilities | null;
14
+ serverInfo: any;
15
+ onRequest: LanguageClient['onRequest'];
16
+ onNotification: LanguageClient['onNotification'];
17
+ sendRequest: LanguageClient['sendRequest'];
18
+ sendNotification: LanguageClient['sendNotification'];
19
+ }
20
+ export declare class LanguageClient extends EventTarget implements AbstractLanguageClient {
21
+ readonly worker: Worker;
22
+ readonly clientCapabilities: ClientCapabilities;
23
+ readonly initializationOptions: any;
24
+ serverCapabilities: ServerCapabilities | null;
25
+ serverInfo: any;
26
+ private requestId;
27
+ private requests;
28
+ private dispose;
29
+ private disposables;
30
+ private log;
31
+ constructor(worker: Worker, dependencies: Dependencies);
32
+ /**
33
+ * Lifecycle method to start the server
34
+ */
35
+ start(): Promise<void>;
36
+ /**
37
+ * Lifecycle method to stop the server
38
+ */
39
+ stop(): Promise<void>;
40
+ /**
41
+ * For when you want to handle requests sent from the language server.
42
+ *
43
+ * @param {MessageSignature} type this is an export from vscode-languageserver-protocol
44
+ * @param {RequestHandler} handler a type-inferred event handler whose return value matches the MessageSignature
45
+ *
46
+ * @example
47
+ * import {ApplyWorkspaceEditRequest, ApplyWorkspaceEditResponse} from 'vscode-languageserver-protocol';
48
+ * client.onRequest(ApplyWorkspaceEditRequest.type, (params, cancellationToken) => {
49
+ * // `params` and `cancellationToken` are typed inferred
50
+ * // The return value must match the MessageSignature (ApplyWorkspaceEditResponse)
51
+ * return result as ApplyWorkspaceEditResponse;
52
+ * })
53
+ */
54
+ onRequest<P, R, PR, E, RO>(type: ProtocolRequestType<P, R, PR, E, RO>, handler: RequestHandler<P, R, E>): Disposable;
55
+ /**
56
+ * For when you want to handle notifications sent from the language server.
57
+ *
58
+ * @param {MessageSignature} type this is an export from vscode-languageserver-protocol
59
+ * @param {NotificationHandler} handler this is a type-inferred event handler
60
+ *
61
+ * @example
62
+ * import {PublishDiagnosticsNotification} from 'vscode-languageserver-protocol';
63
+ * client.onNotification(PublishDiagnosticsNotification.type, (params) => {
64
+ * // the type of `params` is inferred from the first argument
65
+ * });
66
+ */
67
+ onNotification<P, RO>(type: ProtocolNotificationType<P, RO>, handler: NotificationHandler<P>): Disposable;
68
+ /**
69
+ * Send a request to the language server and await a response.
70
+ *
71
+ * @param {MessageSignature} type this is an export from vscode-languageserver-protocol
72
+ * @param [params] its type is inferred from the first argument
73
+ * @returns {any} response, its type is inferred from the first argument
74
+ *
75
+ * @example
76
+ *
77
+ * import {CompletionRequest} from 'vscode-languageserver-protocol';
78
+ * const completions = await client.sendRequest(
79
+ * CompletionRequest.type,
80
+ * params
81
+ * );
82
+ */
83
+ sendRequest<R, PR, E, RO>(type: ProtocolRequestType0<R, PR, E, RO>): Promise<R>;
84
+ sendRequest<P, R, PR, E, RO>(type: ProtocolRequestType<P, R, PR, E, RO>, params?: P): Promise<R>;
85
+ /**
86
+ * Send a notification to the language server. Notifications are fire and forget.
87
+ *
88
+ * @param {MessageSignature} type this is an export from vscode-languageserver-protocol
89
+ * @param [params] its type is inferred from the first argument
90
+ *
91
+ * @example
92
+ *
93
+ * import {DidChangeTextDocumentNotification} from 'vscode-languageserver-protocol';
94
+ * client.sendNotification(
95
+ * DidChangeTextDocumentNotification.type,
96
+ * params
97
+ * );
98
+ */
99
+ sendNotification<RO>(type: ProtocolNotificationType0<RO>): void;
100
+ sendNotification<P, RO>(type: ProtocolNotificationType<P, RO>, params?: P): void;
101
+ private sendResponse;
102
+ private sendMessage;
103
+ /**
104
+ * Map messages to their correct destition.
105
+ * - Responses -> resolve or reject the corresponding Request
106
+ * - Notification -> emit(message.method, message)
107
+ * - Request -> emit(message.method, message)
108
+ */
109
+ private handleMessage;
110
+ private disposable;
111
+ }
112
+ export declare function disposable(dispose: () => void): Disposable;
@@ -0,0 +1,202 @@
1
+ (function (factory) {
2
+ if (typeof module === "object" && typeof module.exports === "object") {
3
+ var v = factory(require, exports);
4
+ if (v !== undefined) module.exports = v;
5
+ }
6
+ else if (typeof define === "function" && define.amd) {
7
+ define(["require", "exports", "vscode-languageserver-protocol"], factory);
8
+ }
9
+ })(function (require, exports) {
10
+ "use strict";
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.LanguageClient = void 0;
13
+ exports.disposable = disposable;
14
+ /* eslint-disable lines-between-class-members */
15
+ const vscode_languageserver_protocol_1 = require("vscode-languageserver-protocol");
16
+ const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
17
+ class LanguageClient extends EventTarget {
18
+ constructor(worker, dependencies) {
19
+ super();
20
+ this.worker = worker;
21
+ this.requests = new Map();
22
+ this.requestId = 0;
23
+ this.dispose = () => { };
24
+ this.disposables = [];
25
+ this.clientCapabilities = dependencies.clientCapabilities;
26
+ this.initializationOptions = dependencies.initializationOptions;
27
+ this.log = dependencies.log;
28
+ this.serverCapabilities = null;
29
+ this.serverInfo = null;
30
+ }
31
+ /**
32
+ * Lifecycle method to start the server
33
+ */
34
+ async start() {
35
+ /**
36
+ * Here we setup the web worker event handler.
37
+ * We route the message sent via the worker's postMessage to our event handler.
38
+ */
39
+ const handler = (ev) => this.handleMessage(ev.data);
40
+ this.worker.addEventListener('message', handler);
41
+ this.dispose = () => {
42
+ this.worker.removeEventListener('message', handler);
43
+ };
44
+ /**
45
+ * We send the `initialize` request and obtain the capabilities supported by
46
+ * the language server.
47
+ *
48
+ * https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#initialize
49
+ */
50
+ const response = await this.sendRequest(vscode_languageserver_protocol_1.InitializeRequest.type, {
51
+ capabilities: this.clientCapabilities,
52
+ initializationOptions: this.initializationOptions,
53
+ processId: 0,
54
+ rootUri: 'browser:///',
55
+ });
56
+ /**
57
+ * We unpack the response from the server and remember the capabilities.
58
+ * Those will be useful.
59
+ */
60
+ this.serverCapabilities = response.capabilities;
61
+ this.serverInfo = response.serverInfo;
62
+ /**
63
+ * Once we're ready, we send the `initialized` notification to tell the
64
+ * server that we're ready to roll!
65
+ *
66
+ * https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#initialized
67
+ */
68
+ this.sendNotification(vscode_languageserver_protocol_1.InitializedNotification.type, {});
69
+ }
70
+ /**
71
+ * Lifecycle method to stop the server
72
+ */
73
+ async stop() {
74
+ await Promise.race([this.sendRequest(vscode_languageserver_protocol_1.ShutdownRequest.type), sleep(1000)]);
75
+ this.disposables.forEach((disposable) => disposable.dispose());
76
+ this.disposables = [];
77
+ this.dispose();
78
+ this.sendNotification(vscode_languageserver_protocol_1.ExitNotification.type);
79
+ }
80
+ onRequest(type, handler) {
81
+ const method = typeof type === 'string' ? type : type.method;
82
+ const callback = async (event) => {
83
+ const { params, id } = event.detail;
84
+ const cancellationToken = new vscode_languageserver_protocol_1.CancellationTokenSource().token;
85
+ try {
86
+ const response = await handler(params, cancellationToken);
87
+ if (response && typeof response === 'object' && 'code' in response) {
88
+ this.sendResponse(id, undefined, response);
89
+ }
90
+ else {
91
+ this.sendResponse(id, response, undefined);
92
+ }
93
+ }
94
+ catch (error) {
95
+ this.sendResponse(id, undefined, new vscode_languageserver_protocol_1.ResponseError(1, error instanceof Error ? error.message : error));
96
+ }
97
+ };
98
+ this.addEventListener(method, callback);
99
+ return this.disposable(() => this.removeEventListener(method, callback));
100
+ }
101
+ onNotification(type, handler) {
102
+ const method = typeof type === 'string' ? type : type.method;
103
+ const callback = (event) => {
104
+ const { params } = event.detail;
105
+ handler(params);
106
+ };
107
+ this.addEventListener(method, callback);
108
+ return this.disposable(() => this.removeEventListener(method, callback));
109
+ }
110
+ async sendRequest(type, params) {
111
+ this.requestId += 1;
112
+ const requestId = this.requestId;
113
+ const method = typeof type === 'string' ? type : type.method;
114
+ const request = {
115
+ jsonrpc: '2.0',
116
+ id: requestId,
117
+ method,
118
+ };
119
+ if (params)
120
+ request.params = params;
121
+ this.log(`Client->Server ${request.method} request [${request.id}]`, request);
122
+ this.sendMessage(request);
123
+ return new Promise((resolve, reject) => {
124
+ this.requests.set(requestId.toString(), { resolve, reject });
125
+ });
126
+ }
127
+ sendNotification(type, params) {
128
+ const method = typeof type === 'string' ? type : type.method;
129
+ const notification = {
130
+ jsonrpc: '2.0',
131
+ method,
132
+ };
133
+ if (params)
134
+ notification.params = params;
135
+ this.log(`Client->Server ${method} notification`, notification);
136
+ this.sendMessage(notification);
137
+ }
138
+ sendResponse(id, result, error) {
139
+ const response = { jsonrpc: '2.0', id };
140
+ if (result !== undefined)
141
+ response.result = result;
142
+ if (error !== undefined)
143
+ response.error = error.toJson();
144
+ this.log(`Client->Server response [${id}]`, response);
145
+ this.sendMessage(response);
146
+ }
147
+ sendMessage(message) {
148
+ this.worker.postMessage(message);
149
+ }
150
+ /**
151
+ * Map messages to their correct destition.
152
+ * - Responses -> resolve or reject the corresponding Request
153
+ * - Notification -> emit(message.method, message)
154
+ * - Request -> emit(message.method, message)
155
+ */
156
+ handleMessage(message) {
157
+ if (isResponse(message)) {
158
+ this.log(`Server->Client response [${message.id}]`, message);
159
+ const id = message.id.toString();
160
+ if ('result' in message) {
161
+ this.requests.get(id).resolve(message.result);
162
+ }
163
+ else {
164
+ this.requests.get(id).reject(message.error);
165
+ }
166
+ this.requests.delete(id);
167
+ }
168
+ else if (isRequest(message)) {
169
+ this.log(`Server->Client ${message.method} request [${message.id}]`, message);
170
+ this.dispatchEvent(new CustomEvent(message.method, { detail: message }));
171
+ }
172
+ else if (isNotification(message)) {
173
+ this.log(`Server->Client ${message.method} notification`, message);
174
+ this.dispatchEvent(new CustomEvent(message.method, {
175
+ detail: message,
176
+ }));
177
+ }
178
+ else {
179
+ this.log('what?', message);
180
+ }
181
+ }
182
+ disposable(dispose) {
183
+ const disp = disposable(dispose);
184
+ this.disposables.push(disp);
185
+ return disp;
186
+ }
187
+ }
188
+ exports.LanguageClient = LanguageClient;
189
+ function disposable(dispose) {
190
+ return { dispose };
191
+ }
192
+ function isResponse(message) {
193
+ return 'id' in message && ('error' in message || 'result' in message);
194
+ }
195
+ function isRequest(message) {
196
+ return 'id' in message && 'method' in message;
197
+ }
198
+ function isNotification(message) {
199
+ return !('id' in message) && 'method' in message;
200
+ }
201
+ });
202
+ //# sourceMappingURL=LanguageClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LanguageClient.js","sourceRoot":"","sources":["../../src/LanguageClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { Facet } from '@codemirror/state';
2
+ import { AbstractLanguageClient } from '../LanguageClient';
3
+ import { ServerCapabilities } from 'vscode-languageserver-protocol';
4
+ export declare const clientFacet: Facet<AbstractLanguageClient, AbstractLanguageClient>;
5
+ export declare const fileUriFacet: Facet<string, string>;
6
+ export declare const serverCapabilitiesFacet: Facet<ServerCapabilities<any> | null, ServerCapabilities<any>>;
@@ -0,0 +1,25 @@
1
+ (function (factory) {
2
+ if (typeof module === "object" && typeof module.exports === "object") {
3
+ var v = factory(require, exports);
4
+ if (v !== undefined) module.exports = v;
5
+ }
6
+ else if (typeof define === "function" && define.amd) {
7
+ define(["require", "exports", "@codemirror/state"], factory);
8
+ }
9
+ })(function (require, exports) {
10
+ "use strict";
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.serverCapabilitiesFacet = exports.fileUriFacet = exports.clientFacet = void 0;
13
+ const state_1 = require("@codemirror/state");
14
+ exports.clientFacet = state_1.Facet.define({
15
+ combine: (values) => values[0],
16
+ static: true,
17
+ });
18
+ exports.fileUriFacet = state_1.Facet.define({
19
+ combine: (values) => values[0],
20
+ });
21
+ exports.serverCapabilitiesFacet = state_1.Facet.define({
22
+ combine: (values) => values[0] ?? {},
23
+ });
24
+ });
25
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/extensions/client.ts"],"names":[],"mappings":";;;;;;;;;;;;IAAA,6CAA0C;IAK7B,QAAA,WAAW,GAAG,aAAK,CAAC,MAAM,CAAiD;QACtF,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;QAC9B,MAAM,EAAE,IAAI;KACb,CAAC,CAAC;IAEU,QAAA,YAAY,GAAG,aAAK,CAAC,MAAM,CAAiB;QACvD,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;KAC/B,CAAC,CAAC;IAEU,QAAA,uBAAuB,GAAG,aAAK,CAAC,MAAM,CAAgD;QACjG,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE;KACrC,CAAC,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { autocompletion, CompletionContext, CompletionResult, CompletionInfo } from '@codemirror/autocomplete';
2
+ import { CompletionItem } from 'vscode-languageserver-protocol';
3
+ import { Facet } from '@codemirror/state';
4
+ type FirstArgType<F> = F extends (arg: infer A) => any ? A : never;
5
+ export type AutocompleteOptions = Partial<FirstArgType<typeof autocompletion>>;
6
+ export declare const lspComplete: (overrides?: AutocompleteOptions) => import("@codemirror/state").Extension;
7
+ /**
8
+ * An InfoRenderer would be equivalent to the Quick Info window in VS Code. It's the part of the completion
9
+ * window that shows you the docs about the thing that is currently selected.
10
+ *
11
+ * Takes a LSP CompletionItem as argument and returns a DOM node, optional and injected so that we can control
12
+ * how we render the info window from the rendering context.
13
+ */
14
+ export type InfoRenderer = (completion: CompletionItem) => CompletionInfo;
15
+ export declare const infoRendererFacet: Facet<InfoRenderer | undefined, InfoRenderer | undefined>;
16
+ export declare function complete(context: CompletionContext): Promise<CompletionResult | null>;
17
+ export {};