cds-routing-handlers
Version:
Package to route and implement CDS handlers via a class based approach in Typescript.
267 lines • 8.72 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.MetadataArgsStorage = void 0;
/**
* Metadata arguments storage.
*
* @export
* @class MetadataArgsStorage
*/
var MetadataArgsStorage = /** @class */ (function () {
function MetadataArgsStorage() {
/**
* Handler metadata arguments.
*
* @private
* @type {IHandlerMetadataArgs[]}
* @memberof MetadataArgsStorage
*/
this.handler = [];
/**
* Middleware metadata arguments.
*
* @private
* @type {IMiddlewareMetadataArgs[]}
* @memberof MetadataArgsStorage
*/
this.middlewares = [];
/**
* Registerd middleware usage metadata args.
*
* @private
* @type {IUseMetadataArgs[]}
* @memberof MetadataArgsStorage
*/
this.uses = [];
/**
* Action metadata arguments.
*
* @private
* @type {IActionMetadataArgs[]}
* @memberof MetadataArgsStorage
*/
this.actions = [];
/**
* Reject metadata arguments.
*
* @private
* @type {IRejectMetadataArgs[]}
* @memberof MetadataArgsStorage
*/
this.rejects = [];
/**
* Parameter metadata arguments.
*
* @private
* @type {IParamMetadataArgs[]}
* @memberof MetadataArgsStorage
*/
this.params = [];
/**
* User checker metadata arguments.
*
* @private
* @type {IUserCheckerMetadataArgs}
* @memberof MetadataArgsStorage
*/
this.userChecker = [];
}
Object.defineProperty(MetadataArgsStorage.prototype, "handlerMetadata", {
/**
* Handler metadata.
*
* @readonly
* @type {IHandlerMetadataArgs[]}
* @memberof MetadataArgsStorage
*/
get: function () {
return this.handler;
},
enumerable: false,
configurable: true
});
Object.defineProperty(MetadataArgsStorage.prototype, "middlewareMetadata", {
/**
* Middleware metadata.
*
* @readonly
* @type {IMiddlewareMetadataArgs[]}
* @memberof MetadataArgsStorage
*/
get: function () {
return this.middlewares;
},
enumerable: false,
configurable: true
});
/**
* Adds handler metadata.
*
* @param {IHandlerMetadataArgs} metadata Metadata arguments
* @memberof MetadataArgsStorage
*/
MetadataArgsStorage.prototype.addHandlerMetadata = function (metadata) {
this.handler.push(metadata);
};
/**
* Adds middleware metadata.
*
* @param {IMiddlewareMetadataArgs} metadata Metadata arguments
* @memberof MetadataArgsStorage
*/
MetadataArgsStorage.prototype.addMiddlewareMetadata = function (metadata) {
this.middlewares.push(metadata);
};
/**
* Adds a middleware usage metadata.
*
* @param {IUseMetadataArgs} metadata Metadata arguments
* @memberof MetadataArgsStorage
*/
MetadataArgsStorage.prototype.addUseMetadata = function (metadata) {
this.uses.push(metadata);
};
/**
* Adds action metadata.
*
* @param {IActionMetadataArgs} metadata Metadata arguments
* @memberof MetadataArgsStorage
*/
MetadataArgsStorage.prototype.addActionMetadata = function (metadata) {
this.actions.push(metadata);
};
/**
* Adds reject metadata.
*
* @param {IRejectMetadataArgs} metadata Metadata arguements
* @memberof MetadataArgsStorage
*/
MetadataArgsStorage.prototype.addRejectMetadata = function (metadata) {
if (this.filterRejectWithTargetAndMethod(metadata.target, metadata.method) === undefined) {
this.rejects.push(metadata);
}
else {
console.warn("Only one OnReject can be registerd per action (".concat(metadata.target.name, "::").concat(metadata.method, ")"));
}
};
/**
* Adds parameter metadata.
*
* @param {IParamMetadataArgs} metadata Metadata arguments
* @memberof MetadataArgsStorage
*/
MetadataArgsStorage.prototype.addParamMetadata = function (metadata) {
this.params.push(metadata);
};
/**
* Adds user checker metadata.
*
* @param {IUserCheckerMetadataArgs} metadata Metadata arguments
* @memberof MetadataArgsStorage
*/
MetadataArgsStorage.prototype.addUserCheckerMetadata = function (metadata) {
this.userChecker.push(metadata);
};
/**
* Filters handler metadata for given classes.
*
* @param {Function[]} classes Handler classes
* @returns {IHandlerMetadataArgs[]} Filtered handler metadata
* @memberof MetadataArgsStorage
*/
MetadataArgsStorage.prototype.filterHandlerMetadataForClasses = function (classes) {
return this.handler.filter(function (ctrl) {
return classes.filter(function (cls) { return ctrl.target === cls; }).length > 0;
});
};
/**
* Filters middleware metadata for given classes.
*
* @param {Function} classes Middleware classes
* @returns {IMiddlewareMetadataArgs[]} Filtered middleware metadata
* @memberof MetadataArgsStorage
*/
MetadataArgsStorage.prototype.filterMiddlewareMetadataForClasses = function (classes) {
var _this = this;
var middlewares = classes.map(function (cls) { return _this.middlewares.find(function (mid) { return mid.target === cls; }); });
return middlewares.filter(function (midd) { return midd !== undefined; });
};
/**
* Filters registerd middleware usages for a given middleware.
*
* @param {Function} middleware Middleware to filter for
* @returns {IUseMetadataArgs[]} Filterd usage metadata
* @memberof MetadataArgsStorage
*/
MetadataArgsStorage.prototype.filterUsesWithMiddleware = function (middleware) {
return this.uses.filter(function (use) {
return use.middleware === middleware;
});
};
/**
* Filters action metadata for given target.
*
* @param {Function} target Target of the action
* @returns {IActionMetadataArgs[]} Filtered action metadata
* @memberof MetadataArgsStorage
*/
MetadataArgsStorage.prototype.filterActionsWithTarget = function (target) {
return this.actions.filter(function (action) { return action.target === target; });
};
/**
* Filters reject metadata for given target and method.
*
* @param {Function} target Target of the reject
* @param {string} method Method of the reject
* @returns {IRejectMetadataArgs}
* @memberof MetadataArgsStorage
*/
MetadataArgsStorage.prototype.filterRejectWithTargetAndMethod = function (target, method) {
var result;
var rejects = this.rejects.filter(function (reject) { return reject.target === target && reject.method === method; });
if (rejects.length === 1) {
result = rejects[0];
}
return result;
};
/**
* Filters parameter metadata for a given target and method.
*
* @param {Function} target Target of the parameter
* @param {string} method Method of the parameter
* @returns {IParamMetadataArgs[]}
* @memberof MetadataArgsStorage
*/
MetadataArgsStorage.prototype.filterParamsWithTargetAndMethod = function (target, method) {
return this.params.filter(function (param) { return param.object.constructor === target && param.method === method; });
};
/**
* Finds a user checker for a given target.
*
* @param {Function} target Target to find for
* @returns {(IUserCheckerMetadataArgs | undefined)} Found user checker
* @memberof MetadataArgsStorage
*/
MetadataArgsStorage.prototype.findUserCheckerWithTarget = function (target) {
if (target) {
return this.userChecker.find(function (uc) { return uc.target === target; });
}
};
/**
* Resets the storage.
*
* @memberof MetadataArgsStorage
*/
MetadataArgsStorage.prototype.reset = function () {
this.handler = [];
this.middlewares = [];
this.uses = [];
this.actions = [];
this.rejects = [];
this.params = [];
this.userChecker = [];
};
return MetadataArgsStorage;
}());
exports.MetadataArgsStorage = MetadataArgsStorage;
//# sourceMappingURL=MetadataArgsStorage.js.map