UNPKG

@dolittle/sdk.projections

Version:

Dolittle is a decentralized, distributed, event-driven microservice platform built to harness the power of events.

62 lines 6 kB
"use strict"; // Copyright (c) Dolittle. All rights reserved. // Licensed under the MIT license. See LICENSE file in the project root for full license information. Object.defineProperty(exports, "__esModule", { value: true }); exports.ProjectionsModelBuilder = void 0; const mongodb_1 = require("mongodb"); require("@dolittle/sdk.resources"); const ProjectionProcessor_1 = require("../Internal/ProjectionProcessor"); const ProjectionReadModelTypes_1 = require("../Store/ProjectionReadModelTypes"); const ProjectionBuilder_1 = require("./ProjectionBuilder"); const ProjectionClassBuilder_1 = require("./ProjectionClassBuilder"); const ProjectionModelId_1 = require("../ProjectionModelId"); const IProjectionStore_1 = require("../Store/IProjectionStore"); const IProjectionOf_1 = require("../Store/IProjectionOf"); /** * Represents a builder that can build {@link ProjectionProcessor} from an {@link IModel}. */ class ProjectionsModelBuilder { /** * Initialises a new instance of the {@link ProjectionsModelBuilder} class. * @param {IModel} _model - The built application model. * @param {IClientBuildResults} _buildResults - For keeping track of build results. * @param {IEventTypes} _eventTypes - For event types resolution. * @param {IServiceProviderBuilder} _bindings - For registering the bindings for {@link IProjectionOf} types. */ constructor(_model, _buildResults, _eventTypes, _bindings) { this._model = _model; this._buildResults = _buildResults; this._eventTypes = _eventTypes; this._bindings = _bindings; } /** * Builds all projections created with the builder. * @returns {[ProjectionProcessor[], IProjectionReadModelTypes]} The built projection processors and read model types. */ build() { const builders = this._model.getProcessorBuilderBindings(ProjectionBuilder_1.ProjectionBuilder, ProjectionClassBuilder_1.ProjectionClassBuilder); const processors = []; for (const { processorBuilder } of builders) { const projection = processorBuilder.build(this._eventTypes, this._buildResults); if (projection !== undefined) { processors.push(new ProjectionProcessor_1.ProjectionProcessor(projection, this._eventTypes)); if (projection.copies.mongoDB.shouldCopyToMongoDB && projection.readModelType !== undefined) { this._bindings.addTenantServices(binder => { binder.bind(mongodb_1.Collection.forReadModel(projection.readModelType)).toFactory(services => services.get(mongodb_1.Db).collection(projection.copies.mongoDB.collectionName.value)); }); } } } const identifiers = this._model.getTypeBindings(ProjectionModelId_1.isProjectionModelId); const readModelTypes = new ProjectionReadModelTypes_1.ProjectionReadModelTypes(); for (const { identifier, type } of identifiers) { readModelTypes.associate(type, identifier.id, identifier.scope); this._bindings.addTenantServices(binder => { binder.bind(IProjectionOf_1.IProjectionOf.for(type)).toFactory(services => services.get(IProjectionStore_1.IProjectionStore).of(type, identifier.id, identifier.scope)); }); } return [processors, readModelTypes]; } } exports.ProjectionsModelBuilder = ProjectionsModelBuilder; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUHJvamVjdGlvbnNNb2RlbEJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiLi4vIiwic291cmNlcyI6WyJCdWlsZGVycy9Qcm9qZWN0aW9uc01vZGVsQnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0NBQStDO0FBQy9DLHFHQUFxRzs7O0FBRXJHLHFDQUF5QztBQUt6QyxtQ0FBaUM7QUFFakMseUVBQXNFO0FBRXRFLGdGQUE2RTtBQUM3RSwyREFBd0Q7QUFDeEQscUVBQWtFO0FBQ2xFLDREQUEyRDtBQUMzRCxnRUFBNkQ7QUFDN0QsMERBQXVEO0FBRXZEOztHQUVHO0FBQ0gsTUFBYSx1QkFBdUI7SUFDaEM7Ozs7OztPQU1HO0lBQ0gsWUFDcUIsTUFBYyxFQUNkLGFBQWtDLEVBQ2xDLFdBQXdCLEVBQ3hCLFNBQWtDO1FBSGxDLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxrQkFBYSxHQUFiLGFBQWEsQ0FBcUI7UUFDbEMsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsY0FBUyxHQUFULFNBQVMsQ0FBeUI7SUFDcEQsQ0FBQztJQUVKOzs7T0FHRztJQUNILEtBQUs7UUFDRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLDJCQUEyQixDQUFDLHFDQUFpQixFQUFFLCtDQUFzQixDQUFDLENBQUM7UUFDcEcsTUFBTSxVQUFVLEdBQStCLEVBQUUsQ0FBQztRQUVsRCxLQUFLLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLFFBQVEsRUFBRTtZQUN6QyxNQUFNLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDaEYsSUFBSSxVQUFVLEtBQUssU0FBUyxFQUFFO2dCQUMxQixVQUFVLENBQUMsSUFBSSxDQUFDLElBQUkseUNBQW1CLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO2dCQUV2RSxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLG1CQUFtQixJQUFJLFVBQVUsQ0FBQyxhQUFhLEtBQUssU0FBUyxFQUFFO29CQUN6RixJQUFJLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxFQUFFO3dCQUN0QyxNQUFNLENBQUMsSUFBSSxDQUFDLG9CQUFVLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxhQUFjLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsWUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO29CQUN2SyxDQUFDLENBQUMsQ0FBQztpQkFDTjthQUNKO1NBQ0o7UUFFRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyx1Q0FBbUIsQ0FBQyxDQUFDO1FBQ3JFLE1BQU0sY0FBYyxHQUFHLElBQUksbURBQXdCLEVBQUUsQ0FBQztRQUN0RCxLQUFLLE1BQU0sRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLElBQUksV0FBVyxFQUFFO1lBQzVDLGNBQWMsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2hFLElBQUksQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQ3RDLE1BQU0sQ0FBQyxJQUFJLENBQUMsNkJBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLG1DQUFnQixDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ3pJLENBQUMsQ0FBQyxDQUFDO1NBQ047UUFDRCxPQUFPLENBQUMsVUFBVSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7Q0FDSjtBQTlDRCwwREE4Q0MifQ==