@eclipse-emfcloud/modelserver-theia
Version:
## Typescript Client API
172 lines • 8.26 kB
JavaScript
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.ModelServerSubscriptionClientV2 = exports.ModelServerSubscriptionClient = exports.ModelServerSubscriptionServiceV2 = exports.ModelServerSubscriptionService = void 0;
/********************************************************************************
* Copyright (c) 2019-2022 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
* https://www.eclipse.org/legal/epl-2.0, or the MIT License which is
* available at https://opensource.org/licenses/MIT.
*
* SPDX-License-Identifier: EPL-2.0 OR MIT
*******************************************************************************/
const modelserver_client_1 = require("@eclipse-emfcloud/modelserver-client");
const core_1 = require("@theia/core");
const inversify_1 = require("@theia/core/shared/inversify");
const fast_json_patch_1 = require("fast-json-patch");
exports.ModelServerSubscriptionService = Symbol('ModelServerSubscriptionService');
exports.ModelServerSubscriptionServiceV2 = Symbol('ModelServerSubscriptionServiceV2');
let ModelServerSubscriptionClient = class ModelServerSubscriptionClient {
constructor() {
this.onOpenEmitter = new core_1.Emitter();
this.onClosedEmitter = new core_1.Emitter();
this.onErrorEmitter = new core_1.Emitter();
this.onDirtyStateEmitter = new core_1.Emitter();
this.onIncrementalUpdateEmitter = new core_1.Emitter();
this.onFullUpdateEmitter = new core_1.Emitter();
this.onSuccessEmitter = new core_1.Emitter();
this.onUnknownMessageEmitter = new core_1.Emitter();
this.onValidationResultEmitter = new core_1.Emitter();
}
onOpen(modeluri, _event) {
this.onOpenEmitter.fire({ modeluri, type: modelserver_client_1.MessageType.open });
}
onClose(modeluri, event) {
this.onClosedEmitter.fire({ modeluri, code: event.code, reason: event.reason, type: modelserver_client_1.MessageType.close });
}
onError(modeluri, event) {
this.onErrorEmitter.fire({ modeluri, error: event.error, type: modelserver_client_1.MessageType.error });
}
onMessage(modeluri, event) {
const message = JSON.parse(event.data.toString());
if (modelserver_client_1.ModelServerMessage.is(message)) {
const type = modelserver_client_1.MessageType.asMessageType(message.type);
switch (type) {
case modelserver_client_1.MessageType.dirtyState: {
this.onDirtyStateEmitter.fire({ modeluri, isDirty: modelserver_client_1.MessageDataMapper.asBoolean(message), type });
break;
}
case modelserver_client_1.MessageType.keepAlive:
case modelserver_client_1.MessageType.success: {
this.onSuccessEmitter.fire({ modeluri, type });
break;
}
case modelserver_client_1.MessageType.error: {
this.onErrorEmitter.fire({ modeluri, error: modelserver_client_1.MessageDataMapper.asString(message), type });
break;
}
case modelserver_client_1.MessageType.incrementalUpdate: {
let result;
try {
result = modelserver_client_1.MessageDataMapper.as(message, modelserver_client_1.CommandExecutionResult.is);
}
catch (error) {
result = modelserver_client_1.MessageDataMapper.asString(message);
}
this.onIncrementalUpdateEmitter.fire({
modeluri,
result,
type
});
break;
}
case modelserver_client_1.MessageType.fullUpdate: {
let model;
try {
model = modelserver_client_1.MessageDataMapper.asObject(message);
}
catch (error) {
model = modelserver_client_1.MessageDataMapper.asString(message);
}
this.onFullUpdateEmitter.fire({ modeluri, model, type });
break;
}
case modelserver_client_1.MessageType.validationResult: {
this.onValidationResultEmitter.fire({ modeluri, diagnostic: modelserver_client_1.MessageDataMapper.as(message, modelserver_client_1.Diagnostic.is), type });
break;
}
default: {
this.onUnknownMessageEmitter.fire(Object.assign(Object.assign({}, message), { modeluri }));
}
}
}
}
get onOpenListener() {
return this.onOpenEmitter.event;
}
get onClosedListener() {
return this.onClosedEmitter.event;
}
get onErrorListener() {
return this.onErrorEmitter.event;
}
get onDirtyStateListener() {
return this.onDirtyStateEmitter.event;
}
get onIncrementalUpdateListener() {
return this.onIncrementalUpdateEmitter.event;
}
get onFullUpdateListener() {
return this.onFullUpdateEmitter.event;
}
get onSuccessListener() {
return this.onSuccessEmitter.event;
}
get onUnknownMessageListener() {
return this.onUnknownMessageEmitter.event;
}
get onValidationResultListener() {
return this.onValidationResultEmitter.event;
}
};
ModelServerSubscriptionClient = __decorate([
(0, inversify_1.injectable)()
], ModelServerSubscriptionClient);
exports.ModelServerSubscriptionClient = ModelServerSubscriptionClient;
/**
* Implementation of {@link ModelServerSubscriptionClient} compatible with API V2 Notifications,
* supporting Json Patch for incremental updates.
*/
let ModelServerSubscriptionClientV2 = class ModelServerSubscriptionClientV2 extends ModelServerSubscriptionClient {
constructor() {
super(...arguments);
this.onIncrementalUpdateEmitterV2 = new core_1.Emitter();
}
get onIncrementalUpdateListenerV2() {
return this.onIncrementalUpdateEmitterV2.event;
}
onMessage(modeluri, event) {
const message = JSON.parse(event.data.toString());
if (modelserver_client_1.ModelServerMessage.is(message)) {
const type = modelserver_client_1.MessageType.asMessageType(message.type);
switch (type) {
case modelserver_client_1.MessageType.incrementalUpdate: {
const patch = modelserver_client_1.MessageDataMapper.as(message, modelserver_client_1.Operations.isPatch);
this.onIncrementalUpdateEmitterV2.fire({
type,
modeluri,
patch,
patchModel: (model, copy) => {
const modelToPatch = copy ? (0, fast_json_patch_1.deepClone)(model) : model;
return (0, fast_json_patch_1.applyPatch)(modelToPatch, patch).newDocument;
}
});
break;
}
}
}
super.onMessage(modeluri, event);
}
};
ModelServerSubscriptionClientV2 = __decorate([
(0, inversify_1.injectable)()
], ModelServerSubscriptionClientV2);
exports.ModelServerSubscriptionClientV2 = ModelServerSubscriptionClientV2;
//# sourceMappingURL=model-server-subscription-client.js.map