UNPKG

@eclipse-emfcloud/modelserver-theia

Version:
172 lines 8.26 kB
"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