@tunnel-cast/nestjs
Version:
## About This is a Tunnel-Cast - NestJS integration package, wrap the `cast` application into the `NestJS` building blocks.
43 lines • 1.94 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.CastParameterDecorator = exports.CastParameterDecoratorFactory = void 0;
const common_1 = require("@nestjs/common");
const constants_1 = require("../constants");
const extract_value_1 = require("../utils/extract-value");
const pipes_1 = require("../pipes");
function CastParameterDecoratorFactory(extractionPath, payloadType) {
return (model) => {
const decorator = exports.CastParameterDecorator(extractionPath, payloadType);
if (model != undefined) {
return decorator(pipes_1.CastPipeFactory(model));
}
else {
return decorator(pipes_1.CastPipe);
}
};
}
exports.CastParameterDecoratorFactory = CastParameterDecoratorFactory;
exports.CastParameterDecorator = (extractionPath, payloadType) => {
const enhancers = payloadType ? [assignHttpDataTypeMetadataEnhancer(payloadType)] : [];
const decorator = common_1.createParamDecorator((data, ctx) => {
const target = {
req: ctx.switchToHttp().getRequest(),
res: ctx.switchToHttp().getResponse()
};
const extractedValue = extract_value_1.extractValue(target, extractionPath);
return { extractedValue, path: extractionPath };
}, enhancers);
return decorator;
};
function assignHttpDataTypeMetadataEnhancer(payloadType) {
return function (target, key, index) {
if (Reflect.hasMetadata(constants_1.CAST_HTTP_PAYLOAD_TYPE_LIST, target, key)) {
const payloadTypeList = Reflect.getMetadata(constants_1.CAST_HTTP_PAYLOAD_TYPE_LIST, target, key);
payloadTypeList.push({ payloadType, argumentIndex: index });
}
else {
Reflect.defineMetadata(constants_1.CAST_HTTP_PAYLOAD_TYPE_LIST, [{ payloadType, argumentIndex: index }], target, key);
}
};
}
//# sourceMappingURL=cast-parameter-decorator.factory.js.map