@eclipse-glsp/vscode-integration
Version:
Glue code to integrate GLSP diagrams in VSCode extensions (extension part)
81 lines • 3.15 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.BaseGlspVscodeServer = void 0;
/********************************************************************************
* Copyright (c) 2023 EclipseSource and others.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* This Source Code may also be made available under the following Secondary
* Licenses when the conditions for such availability set forth in the Eclipse
* Public License v. 2.0 are satisfied: GNU General Public License, version 2
* with the GNU Classpath Exception which is available at
* https://www.gnu.org/software/classpath/license.html.
*
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
********************************************************************************/
const protocol_1 = require("@eclipse-glsp/protocol");
const vscode = require("vscode");
/**
* Reusable base class for {@link GlspVscodeServer} implementations
*/
class BaseGlspVscodeServer {
get onServerMessage() {
return this.onServerSendEmitter.event;
}
constructor(options) {
this.options = options;
this.onSendToServerEmitter = new vscode.EventEmitter();
this.onServerSendEmitter = new vscode.EventEmitter();
this.readyDeferred = new protocol_1.Deferred();
this.toDispose = new protocol_1.DisposableCollection();
this.onSendToServerEmitter.event(message => {
this.onReady.then(() => {
if (protocol_1.ActionMessage.is(message)) {
this._glspClient.sendActionMessage(message);
}
});
});
this.toDispose.push(this.onSendToServerEmitter, this.onServerSendEmitter);
}
async start() {
try {
this._glspClient = await this.createGLSPClient();
await this._glspClient.start();
const parameters = await this.createInitializeParameters();
this._initializeResult = await this._glspClient.initializeServer(parameters);
this._glspClient.onActionMessage(message => {
this.onServerSendEmitter.fire(message);
});
this.readyDeferred.resolve();
}
catch (error) {
this.readyDeferred.reject(error);
}
}
async createInitializeParameters() {
return {
applicationId: protocol_1.ApplicationIdProvider.get(),
protocolVersion: protocol_1.GLSPClient.protocolVersion
};
}
get onReady() {
return this.readyDeferred.promise;
}
get initializeResult() {
return this.onReady.then(() => this._initializeResult);
}
get glspClient() {
return this.onReady.then(() => this._glspClient);
}
dispose() {
this.toDispose.dispose();
if (this._glspClient) {
this._glspClient.stop();
}
}
}
exports.BaseGlspVscodeServer = BaseGlspVscodeServer;
//# sourceMappingURL=base-glsp-vscode-server.js.map