@dolittle/sdk.projections
Version:
Dolittle is a decentralized, distributed, event-driven microservice platform built to harness the power of events.
57 lines • 4.48 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.Projection = void 0;
const EventSelector_1 = require("./EventSelector");
const IProjection_1 = require("./IProjection");
const MissingOnMethodForType_1 = require("./MissingOnMethodForType");
/**
* Represents an implementation of {@link IProjection<T>}.
* @template T The type of the projection read model.
*/
class Projection extends IProjection_1.IProjection {
/**
* Initializes a new instance of {@link Projection}.
* @param {ProjectionId} projectionId - The unique identifier for the projection.
* @param {Constructor<T>|T} readModelTypeOrInstance - The read model type or instance produced by the projection.
* @param {ScopeId} scopeId - The identifier of the scope the projection is in.
* @param {EventTypeMap<[ProjectionCallback<any>, KeySelector]>} _eventMap - The events with respective callbacks and keyselectors used by the projection.
* @param {ProjectionCopies} copies - The read model copies specification for the projection.
* @param {ProjectionAlias | undefined} alias - The optional projection alias.
*/
constructor(projectionId, readModelTypeOrInstance, scopeId, _eventMap, copies, alias = undefined) {
super();
this.projectionId = projectionId;
this.readModelTypeOrInstance = readModelTypeOrInstance;
this.scopeId = scopeId;
this._eventMap = _eventMap;
this.copies = copies;
this.alias = alias;
if (readModelTypeOrInstance instanceof Function) {
this.readModelType = readModelTypeOrInstance;
this.initialState = new readModelTypeOrInstance();
}
else {
this.initialState = readModelTypeOrInstance;
}
const eventSelectors = [];
for (const [eventType, [, keySelector]] of this._eventMap.entries()) {
eventSelectors.push(new EventSelector_1.EventSelector(eventType, keySelector));
}
this.events = eventSelectors;
this.hasAlias = alias !== undefined;
}
/** @inheritdoc */
async on(readModel, event, eventType, context) {
if (this._eventMap.has(eventType)) {
const [method] = this._eventMap.get(eventType);
return method(readModel, event, context);
}
else {
throw new MissingOnMethodForType_1.MissingOnMethodForType(this.projectionId, eventType);
}
}
}
exports.Projection = Projection;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUHJvamVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIuLi8iLCJzb3VyY2VzIjpbIlByb2plY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLCtDQUErQztBQUMvQyxxR0FBcUc7OztBQU9yRyxtREFBZ0Q7QUFDaEQsK0NBQTRDO0FBRTVDLHFFQUFrRTtBQU1sRTs7O0dBR0c7QUFDSCxNQUFhLFVBQWMsU0FBUSx5QkFBYztJQWE3Qzs7Ozs7Ozs7T0FRRztJQUNILFlBQ2EsWUFBMEIsRUFDMUIsdUJBQTJDLEVBQzNDLE9BQWdCLEVBQ1IsU0FBK0QsRUFDdkUsTUFBd0IsRUFDeEIsUUFBcUMsU0FBUztRQUV2RCxLQUFLLEVBQUUsQ0FBQztRQVBDLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLDRCQUF1QixHQUF2Qix1QkFBdUIsQ0FBb0I7UUFDM0MsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUNSLGNBQVMsR0FBVCxTQUFTLENBQXNEO1FBQ3ZFLFdBQU0sR0FBTixNQUFNLENBQWtCO1FBQ3hCLFVBQUssR0FBTCxLQUFLLENBQXlDO1FBSXZELElBQUksdUJBQXVCLFlBQVksUUFBUSxFQUFFO1lBQzdDLElBQUksQ0FBQyxhQUFhLEdBQUcsdUJBQXVCLENBQUM7WUFDN0MsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLHVCQUF1QixFQUFFLENBQUM7U0FDckQ7YUFBTTtZQUNILElBQUksQ0FBQyxZQUFZLEdBQUcsdUJBQXVCLENBQUM7U0FDL0M7UUFFRCxNQUFNLGNBQWMsR0FBb0IsRUFBRSxDQUFDO1FBQzNDLEtBQUssTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ2pFLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSw2QkFBYSxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO1NBQ2xFO1FBQ0QsSUFBSSxDQUFDLE1BQU0sR0FBRyxjQUFjLENBQUM7UUFFN0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLEtBQUssU0FBUyxDQUFDO0lBQ3hDLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsS0FBSyxDQUFDLEVBQUUsQ0FBQyxTQUFZLEVBQUUsS0FBVSxFQUFFLFNBQW9CLEVBQUUsT0FBMEI7UUFDL0UsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUMvQixNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFFLENBQUM7WUFDaEQsT0FBTyxNQUFNLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztTQUM1QzthQUFNO1lBQ0gsTUFBTSxJQUFJLCtDQUFzQixDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsU0FBUyxDQUFDLENBQUM7U0FDbEU7SUFDTCxDQUFDO0NBQ0o7QUF6REQsZ0NBeURDIn0=