yasui
Version:
Lightweight Express-based framework for REST and web APIs
41 lines • 3.52 kB
JavaScript
import { Injectable } from './injectable.decorator.js';
import { ReflectMetadata, defineMetadata, getMetadata } from '../utils/reflect.js';
export const PipeTransform = Injectable;
export function UsePipes(...pipes) {
return function (target, propertyKey, descriptor) {
if (propertyKey && descriptor) {
defineMetadata(ReflectMetadata.PIPES, pipes, target, propertyKey);
}
else {
defineMetadata(ReflectMetadata.PIPES, pipes, target.prototype);
}
};
}
export function createPipeMiddleware(route, target, pipes) {
return async (req, res, next) => {
const routeParams = getMetadata(ReflectMetadata.PARAMS, target.prototype, route.methodName) || [];
for (const param of routeParams) {
const [, paramType, propertyName] = param.path;
const source = req[paramType];
const metadata = {
type: paramType,
metatype: param.type,
name: propertyName || ''
};
let paramValue = propertyName
? source?.[propertyName]
: source;
for (const pipe of pipes) {
paramValue = await pipe.transform(paramValue, metadata);
}
if (propertyName) {
source[propertyName] = paramValue;
}
else {
req[paramType] = paramValue;
}
}
next();
};
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZXMuZGVjb3JhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RlY29yYXRvcnMvcGlwZXMuZGVjb3JhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUd2RCxPQUFPLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUtuRixNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsVUFBVSxDQUFDO0FBR3hDLE1BQU0sVUFBVSxRQUFRLENBQUMsR0FBRyxLQUFzQztJQUNoRSxPQUFPLFVBQ0wsTUFBeUIsRUFDekIsV0FBNkIsRUFDN0IsVUFBK0I7UUFFL0IsSUFBSSxXQUFXLElBQUksVUFBVSxFQUFFLENBQUM7WUFDOUIsY0FBYyxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztRQUNwRSxDQUFDO2FBQU0sQ0FBQztZQUNOLGNBQWMsQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBYSxNQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDN0UsQ0FBQztJQUNILENBQUMsQ0FBQztBQUNKLENBQUM7QUFHRCxNQUFNLFVBQVUsb0JBQW9CLENBQ2xDLEtBQXVCLEVBQ3ZCLE1BQWdCLEVBQ2hCLEtBQXVCO0lBRXZCLE9BQU8sS0FBSyxFQUNWLEdBQVksRUFDWixHQUFhLEVBQ2IsSUFBa0IsRUFDSCxFQUFFO1FBQ2pCLE1BQU0sV0FBVyxHQUFHLFdBQVcsQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUVsRyxLQUFLLE1BQU0sS0FBSyxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQ2hDLE1BQU0sQ0FBQyxFQUFFLFNBQVMsRUFBRSxZQUFZLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO1lBQy9DLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBeUIsU0FBUyxDQUFDLENBQUM7WUFDdEQsTUFBTSxRQUFRLEdBQW1CO2dCQUMvQixJQUFJLEVBQUUsU0FBbUM7Z0JBQ3pDLFFBQVEsRUFBRSxLQUFLLENBQUMsSUFBSTtnQkFDcEIsSUFBSSxFQUFFLFlBQVksSUFBSSxFQUFFO2FBQ3pCLENBQUM7WUFFRixJQUFJLFVBQVUsR0FBRyxZQUFZO2dCQUMzQixDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsWUFBWSxDQUFDO2dCQUN4QixDQUFDLENBQUMsTUFBTSxDQUFDO1lBRVgsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDekIsVUFBVSxHQUFHLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDMUQsQ0FBQztZQUNELElBQUksWUFBWSxFQUFFLENBQUM7Z0JBQ2pCLE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxVQUFVLENBQUM7WUFDcEMsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLEdBQUcsQ0FBeUIsU0FBUyxDQUFDLEdBQUcsVUFBVSxDQUFDO1lBQ3RELENBQUM7UUFDSCxDQUFDO1FBQ0QsSUFBSSxFQUFFLENBQUM7SUFDVCxDQUFDLENBQUM7QUFDSixDQUFDIn0=