@dolittle/sdk.projections
Version:
Dolittle is a decentralized, distributed, event-driven microservice platform built to harness the power of events.
46 lines • 3.9 kB
JavaScript
;
// 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.ProjectionsBuilder = void 0;
const ProjectionId_1 = require("../ProjectionId");
const ProjectionBuilder_1 = require("./ProjectionBuilder");
const ProjectionClassBuilder_1 = require("./ProjectionClassBuilder");
const projectionDecorator_1 = require("./projectionDecorator");
const IProjectionsBuilder_1 = require("./IProjectionsBuilder");
const ProjectionModelId_1 = require("../ProjectionModelId");
/**
* Represents an implementation of {@link IProjectionsBuilder}.
*/
class ProjectionsBuilder extends IProjectionsBuilder_1.IProjectionsBuilder {
/**
* Initialises a new instance of the {@link ProjectionsBuilder} class.
* @param {IModelBuilder} _modelBuilder - For binding projections to identifiers.
* @param {IClientBuildResults} _buildResults - For keeping track of build results.
*/
constructor(_modelBuilder, _buildResults) {
super();
this._modelBuilder = _modelBuilder;
this._buildResults = _buildResults;
}
/** @inheritdoc */
create(projectionId) {
const identifier = ProjectionId_1.ProjectionId.from(projectionId);
return new ProjectionBuilder_1.ProjectionBuilder(identifier, this._modelBuilder);
}
/** @inheritdoc */
register(type) {
if (!(0, projectionDecorator_1.isDecoratedProjectionType)(type)) {
this._buildResults.addFailure(`The projection class ${type.name} is not decorated as an projection`, `Add the @${projectionDecorator_1.projection.name} decorator to the class`);
return this;
}
const projectionType = (0, projectionDecorator_1.getDecoratedProjectionType)(type);
const identifier = new ProjectionModelId_1.ProjectionModelId(projectionType.projectionId, projectionType.scopeId);
const builder = new ProjectionClassBuilder_1.ProjectionClassBuilder(projectionType);
this._modelBuilder.bindIdentifierToType(identifier, type);
this._modelBuilder.bindIdentifierToProcessorBuilder(identifier, builder);
return this;
}
}
exports.ProjectionsBuilder = ProjectionsBuilder;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUHJvamVjdGlvbnNCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6Ii4uLyIsInNvdXJjZXMiOlsiQnVpbGRlcnMvUHJvamVjdGlvbnNCdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSwrQ0FBK0M7QUFDL0MscUdBQXFHOzs7QUFPckcsa0RBQStDO0FBQy9DLDJEQUF3RDtBQUN4RCxxRUFBa0U7QUFDbEUsK0RBQWlJO0FBQ2pJLCtEQUE0RDtBQUU1RCw0REFBeUQ7QUFFekQ7O0dBRUc7QUFDSCxNQUFhLGtCQUFtQixTQUFRLHlDQUFtQjtJQUN2RDs7OztPQUlHO0lBQ0gsWUFDcUIsYUFBNEIsRUFDNUIsYUFBa0M7UUFFbkQsS0FBSyxFQUFFLENBQUM7UUFIUyxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixrQkFBYSxHQUFiLGFBQWEsQ0FBcUI7SUFHdkQsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixNQUFNLENBQUMsWUFBMEM7UUFDN0MsTUFBTSxVQUFVLEdBQUcsMkJBQVksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDbkQsT0FBTyxJQUFJLHFDQUFpQixDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixRQUFRLENBQVUsSUFBb0I7UUFDbEMsSUFBSSxDQUFDLElBQUEsK0NBQXlCLEVBQUMsSUFBSSxDQUFDLEVBQUU7WUFDbEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsd0JBQXdCLElBQUksQ0FBQyxJQUFJLG9DQUFvQyxFQUFDLFlBQVksZ0NBQW1CLENBQUMsSUFBSSx5QkFBeUIsQ0FBQyxDQUFDO1lBQ25LLE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFFRCxNQUFNLGNBQWMsR0FBRyxJQUFBLGdEQUEwQixFQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hELE1BQU0sVUFBVSxHQUFHLElBQUkscUNBQWlCLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDOUYsTUFBTSxPQUFPLEdBQUcsSUFBSSwrQ0FBc0IsQ0FBSSxjQUFjLENBQUMsQ0FBQztRQUM5RCxJQUFJLENBQUMsYUFBYSxDQUFDLG9CQUFvQixDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsYUFBYSxDQUFDLGdDQUFnQyxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUN6RSxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0NBQ0o7QUFqQ0QsZ0RBaUNDIn0=