@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
JavaScript
"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=