UNPKG

yasui

Version:

Lightweight Express-based framework for REST and web APIs

41 lines 3.52 kB
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=