UNPKG

@dolittle/sdk.projections

Version:

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

61 lines 4.53 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.ProjectionBuilder = void 0; const sdk_events_1 = require("@dolittle/sdk.events"); const IProjectionBuilder_1 = require("./IProjectionBuilder"); const ProjectionBuilderForReadModel_1 = require("./ProjectionBuilderForReadModel"); const ReadModelAlreadyDefinedForProjection_1 = require("./ReadModelAlreadyDefinedForProjection"); /** * Represents an implementation of {@link IProjectionBuilder}. */ class ProjectionBuilder extends IProjectionBuilder_1.IProjectionBuilder { /** * Initializes a new instance of {@link ProjectionBuilder}. * @param {ProjectionId} _projectionId - The unique identifier of the projection to build for. * @param {IModelBuilder} _modelBuilder - For binding this projection builder and read model to its identifier. */ constructor(_projectionId, _modelBuilder) { super(); this._projectionId = _projectionId; this._modelBuilder = _modelBuilder; this._scopeId = sdk_events_1.ScopeId.default; } /** @inheritdoc */ inScope(scopeId) { this._scopeId = sdk_events_1.ScopeId.from(scopeId); if (this._builder !== undefined) { this._builder.inScope(scopeId); } return this; } /** @inheritdoc */ forReadModel(typeOrInstance) { if (this._readModelTypeOrInstance !== undefined) { throw new ReadModelAlreadyDefinedForProjection_1.ReadModelAlreadyDefinedForProjection(this._projectionId, typeOrInstance, this._readModelTypeOrInstance); } this._readModelTypeOrInstance = typeOrInstance; this._builder = new ProjectionBuilderForReadModel_1.ProjectionBuilderForReadModel(this._projectionId, typeOrInstance, this._scopeId, this._modelBuilder, this); return this._builder; } /** @inheritdoc */ equals(other) { return this === other; } /** * Builds the projection. * @param {IEventTypes} eventTypes - For event types resolution. * @param {IClientBuildResults} results - For keeping track of build results. * @returns {IProjection | undefined} The built projection if successful. */ build(eventTypes, results) { if (!this._builder) { results.addFailure(`Failed to build projection ${this._projectionId}. No read model defined for projection.`); return; } return this._builder.build(eventTypes, results); } } exports.ProjectionBuilder = ProjectionBuilder; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUHJvamVjdGlvbkJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiLi4vIiwic291cmNlcyI6WyJCdWlsZGVycy9Qcm9qZWN0aW9uQnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0NBQStDO0FBQy9DLHFHQUFxRzs7O0FBTXJHLHFEQUE0RDtBQUk1RCw2REFBMEQ7QUFFMUQsbUZBQWdGO0FBQ2hGLGlHQUE4RjtBQUU5Rjs7R0FFRztBQUNILE1BQWEsaUJBQWtCLFNBQVEsdUNBQWtCO0lBS3JEOzs7O09BSUc7SUFDSCxZQUNxQixhQUEyQixFQUMzQixhQUE0QjtRQUU3QyxLQUFLLEVBQUUsQ0FBQztRQUhTLGtCQUFhLEdBQWIsYUFBYSxDQUFjO1FBQzNCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBWHpDLGFBQVEsR0FBWSxvQkFBTyxDQUFDLE9BQU8sQ0FBQztJQWM1QyxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLE9BQU8sQ0FBQyxPQUFnQztRQUNwQyxJQUFJLENBQUMsUUFBUSxHQUFHLG9CQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3RDLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxTQUFTLEVBQUU7WUFDN0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDbEM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLFlBQVksQ0FBSSxjQUFrQztRQUM5QyxJQUFJLElBQUksQ0FBQyx3QkFBd0IsS0FBSyxTQUFTLEVBQUU7WUFDN0MsTUFBTSxJQUFJLDJFQUFvQyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsY0FBYyxFQUFFLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1NBQ3JIO1FBRUQsSUFBSSxDQUFDLHdCQUF3QixHQUFHLGNBQWMsQ0FBQztRQUMvQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksNkRBQTZCLENBQzdDLElBQUksQ0FBQyxhQUFhLEVBQ2xCLGNBQWMsRUFDZCxJQUFJLENBQUMsUUFBUSxFQUNiLElBQUksQ0FBQyxhQUFhLEVBQ2xCLElBQUksQ0FBQyxDQUFDO1FBRVYsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsTUFBTSxDQUFDLEtBQVU7UUFDYixPQUFPLElBQUksS0FBSyxLQUFLLENBQUM7SUFDMUIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLFVBQXVCLEVBQUUsT0FBNEI7UUFDdkQsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDaEIsT0FBTyxDQUFDLFVBQVUsQ0FBQyw4QkFBOEIsSUFBSSxDQUFDLGFBQWEseUNBQXlDLENBQUMsQ0FBQztZQUM5RyxPQUFPO1NBQ1Y7UUFDRCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNwRCxDQUFDO0NBQ0o7QUE3REQsOENBNkRDIn0=