UNPKG

@5minds/processcube_engine

Version:

The ProcessCube Engine. Stores and executes BPMNs.

70 lines 2.62 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Bootstrapper = void 0; const Constants_1 = require("../Contracts/InternalDataModels/Constants"); class Bootstrapper { container; extensionInstances = []; constructor(container) { if (!container) { throw new Error('IoC container is required.'); } this.container = container; } async start() { await this.startExtensionsAndInitialize(); } async stop() { await this.stopExtensions(); await this.disposeServices(); } async startExtensionsAndInitialize() { const initializableComponents = this.container.getAll(Constants_1.initializableComponentTag); for (const initializableComponent of initializableComponents) { await initializableComponent.initialize(); } const extensions = await this.discoverExtensions(); await Promise.all(extensions.map((extension) => this.startExtension(extension))); } async startExtension(instance) { await this.invoke(instance.start, instance); this.extensionInstances.push(instance); } async stopExtensions() { for (const extensionInstance of this.extensionInstances) { await this.stopExtension(extensionInstance); } } async stopExtension(instance) { await this.invoke(instance.stop, instance); } async disposeServices() { try { const discoveredDisposableBinding = this.container.getAll(Constants_1.disposableDiscoveryTag); for (const disposableBinding of discoveredDisposableBinding) { await this.invoke(disposableBinding.dispose, disposableBinding); } } catch (error) { // Occurs, if nothing disposable is stored in the container, in which case there's nothing to do here. } } async discoverExtensions() { try { return await this.container.getAllAsync(Constants_1.extensionDiscoveryTag); } catch { // Occurs, if no extensions are stored in the container, in which case there's nothing to do here. return []; } } async invoke(functionToInvoke, invocationContext, invocationParameter) { const isValidFunction = typeof functionToInvoke === 'function'; if (!isValidFunction) { return Promise.resolve(); } return functionToInvoke.call(invocationContext, invocationParameter); } } exports.Bootstrapper = Bootstrapper; //# sourceMappingURL=Bootstrapper.js.map