@eclipse-emfcloud/model-service-theia
Version:
Model service Theia
76 lines • 4.32 kB
JavaScript
;
// *****************************************************************************
// Copyright (C) 2023-2024 STMicroelectronics.
//
// 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: MIT License which is
// available at https://opensource.org/licenses/MIT.
//
// SPDX-License-Identifier: EPL-2.0 OR MIT
// *****************************************************************************
Object.defineProperty(exports, "__esModule", { value: true });
const model_service_1 = require("@eclipse-emfcloud/model-service");
const core_1 = require("@theia/core");
const inversify_1 = require("@theia/core/shared/inversify");
const common_1 = require("../common");
const model_hub_tracker_1 = require("../common/model-hub-tracker");
const model_accessor_bus_server_1 = require("./model-accessor-bus-server");
const model_hub_lifecycle_contribution_1 = require("./model-hub-lifecycle-contribution");
const model_hub_manager_1 = require("./model-hub-manager");
const model_hub_provider_1 = require("./model-hub-provider");
const model_hub_server_1 = require("./model-hub-server");
const model_service_contribution_1 = require("./model-service-contribution");
(0, inversify_1.decorate)((0, inversify_1.injectable)(), model_service_1.AbstractModelServiceContribution);
exports.default = new inversify_1.ContainerModule((bind) => {
bind(model_hub_manager_1.DefaultModelHubManager).toSelf().inSingletonScope();
bind(model_hub_manager_1.ModelHubManager).toService(model_hub_manager_1.DefaultModelHubManager);
bind(model_hub_tracker_1.ModelHubTracker).toService(model_hub_manager_1.DefaultModelHubManager);
bind(model_hub_manager_1.ModelServiceContributionFactory).toFactory(({ container }) => {
return () => container.isBound(model_service_contribution_1.ModelServiceContribution)
? container.getAll(model_service_contribution_1.ModelServiceContribution)
: [];
});
bind(model_hub_provider_1.ModelHubProvider).toProvider(({ container }) => {
return async (context) => {
const modelHubManager = container.get(model_hub_manager_1.ModelHubManager);
return modelHubManager.provideModelHub(context);
};
});
// This binding only works in containers (usually child containers)
// that have the required ModelHubContext binding.
// Note that this binding is not a singleton because
// - it would be hoisted to the parent container and so
// become the only hub that can ever be injected and
// - the singleton ModelHubManager already implements
// an effective singleton hub per context
bind(common_1.ModelHub).toDynamicValue(({ container }) => {
const boundContext = container.get(common_1.ModelHubContext);
const modelHubManager = container.get(model_hub_manager_1.ModelHubManager);
const modelHub = modelHubManager.getModelHub(boundContext);
modelHubManager.initializeContext(boundContext);
return modelHub;
});
bind(model_hub_server_1.ModelHubServer).toSelf().inSingletonScope();
bind(core_1.ConnectionHandler)
.toDynamicValue(({ container }) => new core_1.RpcConnectionHandler(common_1.ModelHubProtocolServicePath, (client) => {
const server = container.get(model_hub_server_1.ModelHubServer);
server.setClient(client);
return server;
}))
.inSingletonScope();
bind(model_accessor_bus_server_1.ModelAccessorBusServer).toSelf().inSingletonScope();
bind(core_1.ConnectionHandler)
.toDynamicValue(({ container }) => new core_1.RpcConnectionHandler(common_1.ModelAccessorBusProtocolServicePath, (client) => {
const server = container.get(model_accessor_bus_server_1.ModelAccessorBusServer);
server.setClient(client);
return server;
}))
.inSingletonScope();
(0, core_1.bindContributionProvider)(bind, model_hub_lifecycle_contribution_1.ModelHubLifecycleContribution);
});
//# sourceMappingURL=backend-module.js.map