@tsclean/core
Version:
Plugin for API Rest Full development, based on Clean Architecture, IoC and Dependency Injection.
23 lines • 5.45 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.createParamDecorator = createParamDecorator;
const uuid_1 = require("uuid");
const helpers_1 = require("../helpers");
const utils_1 = require("../utils");
function createParamDecorator(factory, enhancers = []) {
const paramType = (0, uuid_1.v4)();
return (data, ...pipes) => (target, key, index) => {
const args = Reflect.getMetadata(helpers_1.ROUTE_ARGS_METADATA, target.constructor, key) || {};
const isHandler = (handler) => handler &&
(((0, utils_1.isFunction)(handler) &&
handler.prototype &&
(0, utils_1.isFunction)(handler.prototype.transform)) ||
(0, utils_1.isFunction)(handler.transform));
const hasParamData = (0, utils_1.isNil)(data) || !isHandler(data);
const paramData = hasParamData ? data : undefined;
const paramPipes = hasParamData ? pipes : [data, ...pipes];
Reflect.defineMetadata(helpers_1.ROUTE_ARGS_METADATA, (0, utils_1.assignCustomParameterMetadata)(args, paramType, index, factory, paramData, ...paramPipes), target.constructor, key);
enhancers.forEach(fn => fn(target, key, index));
};
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXJvdXRlLXBhcmFtLW1ldGFkYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RlY29yYXRvcnMvY3JlYXRlLXJvdXRlLXBhcmFtLW1ldGFkYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBU0Esb0RBbUNDO0FBNUNELCtCQUFnQztBQUVoQyx3Q0FBK0M7QUFHL0Msb0NBQTBFO0FBSTFFLFNBQWdCLG9CQUFvQixDQUNoQyxPQUF3QyxFQUN4QyxZQUFzQyxFQUFFO0lBR3hDLE1BQU0sU0FBUyxHQUFHLElBQUEsU0FBSSxHQUFFLENBQUM7SUFDekIsT0FBTyxDQUFDLElBQUssRUFBRSxHQUFHLEtBQXdELEVBQXNCLEVBQUUsQ0FDOUYsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFO1FBQ25CLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsNkJBQW1CLEVBQUUsTUFBTSxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFckYsTUFBTSxTQUFTLEdBQUcsQ0FBQyxPQUFZLEVBQUUsRUFBRSxDQUFDLE9BQU87WUFDdkMsQ0FBQyxDQUFDLElBQUEsa0JBQVUsRUFBQyxPQUFPLENBQUM7Z0JBQ2IsT0FBTyxDQUFDLFNBQVM7Z0JBQ2pCLElBQUEsa0JBQVUsRUFBQyxPQUFPLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUM1QyxJQUFBLGtCQUFVLEVBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFFdkMsTUFBTSxZQUFZLEdBQUcsSUFBQSxhQUFLLEVBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckQsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBRSxJQUFZLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUMzRCxNQUFNLFVBQVUsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQztRQUUzRCxPQUFPLENBQUMsY0FBYyxDQUNsQiw2QkFBbUIsRUFDbkIsSUFBQSxxQ0FBNkIsRUFDekIsSUFBSSxFQUNKLFNBQVMsRUFDVCxLQUFLLEVBQ0wsT0FBTyxFQUNQLFNBQVMsRUFDVCxHQUFJLFVBQWlDLENBQ3hDLEVBQ0QsTUFBTSxDQUFDLFdBQVcsRUFDbEIsR0FBRyxDQUNOLENBQUM7UUFDRixTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNwRCxDQUFDLENBQUM7QUFDVixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHt2NCBhcyB1dWlkfSBmcm9tICd1dWlkJztcblxuaW1wb3J0IHtST1VURV9BUkdTX01FVEFEQVRBfSBmcm9tICcuLi9oZWxwZXJzJztcbmltcG9ydCB7Q3VzdG9tUGFyYW1GYWN0b3J5VHlwZX0gZnJvbSBcIi4uL3R5cGVzXCI7XG5pbXBvcnQge1R5cGUsIEhhbmRsZXJUcmFuc2Zvcm19IGZyb20gJy4uL2NvbnRyYWN0cyc7XG5pbXBvcnQge2Fzc2lnbkN1c3RvbVBhcmFtZXRlck1ldGFkYXRhLCBpc0Z1bmN0aW9uLCBpc05pbH0gZnJvbSAnLi4vdXRpbHMnO1xuXG5leHBvcnQgdHlwZSBQYXJhbURlY29yYXRvckVuaGFuY2VyID0gUGFyYW1ldGVyRGVjb3JhdG9yO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUGFyYW1EZWNvcmF0b3I8VCA9IGFueSwgSSA9IGFueSwgTyA9IGFueT4oXG4gICAgZmFjdG9yeTogQ3VzdG9tUGFyYW1GYWN0b3J5VHlwZTxULCBJLCBPPixcbiAgICBlbmhhbmNlcnM6IFBhcmFtRGVjb3JhdG9yRW5oYW5jZXJbXSA9IFtdKTogKFxuICAgIC4uLmRhdGFPclBpcGVzOiAoVHlwZTxIYW5kbGVyVHJhbnNmb3JtPiB8IEhhbmRsZXJUcmFuc2Zvcm0gfCBUKVtdXG4pID0+IFBhcmFtZXRlckRlY29yYXRvciB7XG4gICAgY29uc3QgcGFyYW1UeXBlID0gdXVpZCgpO1xuICAgIHJldHVybiAoZGF0YT8sIC4uLnBpcGVzOiAoVHlwZTxIYW5kbGVyVHJhbnNmb3JtPiB8IEhhbmRsZXJUcmFuc2Zvcm0gfCBUKVtdKTogUGFyYW1ldGVyRGVjb3JhdG9yID0+XG4gICAgICAgICh0YXJnZXQsIGtleSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFyZ3MgPSBSZWZsZWN0LmdldE1ldGFkYXRhKFJPVVRFX0FSR1NfTUVUQURBVEEsIHRhcmdldC5jb25zdHJ1Y3Rvciwga2V5KSB8fCB7fTtcblxuICAgICAgICAgICAgY29uc3QgaXNIYW5kbGVyID0gKGhhbmRsZXI6IGFueSkgPT4gaGFuZGxlciAmJlxuICAgICAgICAgICAgICAgICgoaXNGdW5jdGlvbihoYW5kbGVyKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlci5wcm90b3R5cGUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzRnVuY3Rpb24oaGFuZGxlci5wcm90b3R5cGUudHJhbnNmb3JtKSkgfHxcbiAgICAgICAgICAgICAgICAgICAgaXNGdW5jdGlvbihoYW5kbGVyLnRyYW5zZm9ybSkpO1xuXG4gICAgICAgICAgICBjb25zdCBoYXNQYXJhbURhdGEgPSBpc05pbChkYXRhKSB8fCAhaXNIYW5kbGVyKGRhdGEpO1xuICAgICAgICAgICAgY29uc3QgcGFyYW1EYXRhID0gaGFzUGFyYW1EYXRhID8gKGRhdGEgYXMgYW55KSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtUGlwZXMgPSBoYXNQYXJhbURhdGEgPyBwaXBlcyA6IFtkYXRhLCAuLi5waXBlc107XG5cbiAgICAgICAgICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGEoXG4gICAgICAgICAgICAgICAgUk9VVEVfQVJHU19NRVRBREFUQSxcbiAgICAgICAgICAgICAgICBhc3NpZ25DdXN0b21QYXJhbWV0ZXJNZXRhZGF0YShcbiAgICAgICAgICAgICAgICAgICAgYXJncyxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1UeXBlLFxuICAgICAgICAgICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgICAgICAgICAgZmFjdG9yeSxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1EYXRhLFxuICAgICAgICAgICAgICAgICAgICAuLi4ocGFyYW1QaXBlcyBhcyBIYW5kbGVyVHJhbnNmb3JtW10pLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgdGFyZ2V0LmNvbnN0cnVjdG9yLFxuICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBlbmhhbmNlcnMuZm9yRWFjaChmbiA9PiBmbih0YXJnZXQsIGtleSwgaW5kZXgpKTtcbiAgICAgICAgfTtcbn1cbiJdfQ==