@dolittle/sdk.projections
Version:
Dolittle is a decentralized, distributed, event-driven microservice platform built to harness the power of events.
43 lines • 3.77 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.getDecoratedProjectionType = exports.isDecoratedProjectionType = exports.projection = void 0;
const sdk_common_1 = require("@dolittle/sdk.common");
const sdk_events_1 = require("@dolittle/sdk.events");
const ProjectionId_1 = require("../ProjectionId");
const ProjectionDecoratedType_1 = require("./ProjectionDecoratedType");
const ProjectionAlias_1 = require("../ProjectionAlias");
const [decorator, getMetadata] = sdk_common_1.Decorators.createMetadataDecorator('projection', 'projection', sdk_common_1.Decorators.DecoratorTarget.Class);
/**
* Decorator to mark a class as an Projection.
* @param {ProjectionId | Guid | string} projectionId - The id to associate with this Projection.
* @param {ProjectionOptions} [options={}] - Options to give to the Projection.
* @returns {Decorators.Decorator} The decorator.
*/
function projection(projectionId, options = {}) {
return decorator((target, type) => {
var _a;
return new ProjectionDecoratedType_1.ProjectionDecoratedType(ProjectionId_1.ProjectionId.from(projectionId), options.inScope ? sdk_events_1.ScopeId.from(options.inScope) : sdk_events_1.ScopeId.default, ProjectionAlias_1.ProjectionAlias.from((_a = options.alias) !== null && _a !== void 0 ? _a : type.name), type);
});
}
exports.projection = projection;
/**
* Checks whether the specified class is decorated with an projection type.
* @param {Constructor<any>} type - The class to check the decorated projection type for.
* @returns {boolean} True if the decorator is applied, false if not.
*/
function isDecoratedProjectionType(type) {
return getMetadata(type, false, false) !== undefined;
}
exports.isDecoratedProjectionType = isDecoratedProjectionType;
/**
* Gets the {@link ProjectionDecoratedType} of the specified class.
* @param {Constructor<any>} type - The class to get the decorated projection type for.
* @returns {ProjectionDecoratedType} The decorated projection type.
*/
function getDecoratedProjectionType(type) {
return getMetadata(type, true, 'Classes used as projections must be decorated');
}
exports.getDecoratedProjectionType = getDecoratedProjectionType;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvamVjdGlvbkRlY29yYXRvci5qcyIsInNvdXJjZVJvb3QiOiIuLi8iLCJzb3VyY2VzIjpbIkJ1aWxkZXJzL3Byb2plY3Rpb25EZWNvcmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLCtDQUErQztBQUMvQyxxR0FBcUc7OztBQUtyRyxxREFBa0Q7QUFDbEQscURBQStDO0FBRS9DLGtEQUErQztBQUMvQyx1RUFBb0U7QUFFcEUsd0RBQXFEO0FBRXJELE1BQU0sQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLEdBQUcsdUJBQVUsQ0FBQyx1QkFBdUIsQ0FBMEIsWUFBWSxFQUFFLFlBQVksRUFBRSx1QkFBVSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUUzSjs7Ozs7R0FLRztBQUNILFNBQWdCLFVBQVUsQ0FBQyxZQUEwQyxFQUFFLFVBQTZCLEVBQUU7SUFDbEcsT0FBTyxTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUU7O1FBQzlCLE9BQU8sSUFBSSxpREFBdUIsQ0FDOUIsMkJBQVksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQy9CLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLG9CQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsb0JBQU8sQ0FBQyxPQUFPLEVBQ2pFLGlDQUFlLENBQUMsSUFBSSxDQUFDLE1BQUEsT0FBTyxDQUFDLEtBQUssbUNBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxFQUNoRCxJQUFJLENBQUMsQ0FBQztJQUNkLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQVJELGdDQVFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQWdCLHlCQUF5QixDQUFDLElBQXNCO0lBQzVELE9BQU8sV0FBVyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssU0FBUyxDQUFDO0FBQ3pELENBQUM7QUFGRCw4REFFQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQiwwQkFBMEIsQ0FBQyxJQUFzQjtJQUM3RCxPQUFPLFdBQVcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLCtDQUErQyxDQUFDLENBQUM7QUFDcEYsQ0FBQztBQUZELGdFQUVDIn0=