yasui
Version:
Lightweight Express-based framework for REST and web APIs
45 lines • 4.63 kB
JavaScript
import { RouteRequestParamTypes, RouteParamTypes } from '../enums/index.js';
import { ReflectMetadata, getMetadata, defineMetadata } from '../utils/reflect.js';
function routeParamDecorator(source) {
return function () {
return extractParam(source);
};
}
export function routeRequestParamDecorator(reqProperty) {
return function (varName, items) {
return extractParam(RouteParamTypes.REQ, reqProperty, varName, items ? items[0] : undefined);
};
}
function extractParam(source, reqProperty, varName, itemsType) {
return function (target, propertyKey, parameterIndex) {
if (!propertyKey) {
return;
}
const path = [source];
for (const node of [reqProperty, varName]) {
if (node) {
path.push(node);
}
}
const paramTypes = getMetadata(ReflectMetadata.DESIGN_PARAM_TYPES, target, propertyKey) || [];
const paramType = paramTypes[parameterIndex];
const methodName = String(propertyKey);
const routeParam = {
index: parameterIndex,
type: paramType,
itemsType,
path,
};
const routeParams = getMetadata(ReflectMetadata.PARAMS, target, methodName) || [];
defineMetadata(ReflectMetadata.PARAMS, [...routeParams, routeParam], target, methodName);
};
}
export const Req = routeParamDecorator(RouteParamTypes.REQ);
export const Res = routeParamDecorator(RouteParamTypes.RES);
export const Next = routeParamDecorator(RouteParamTypes.NEXT);
export const Header = routeRequestParamDecorator(RouteRequestParamTypes.HEADER);
export const Param = routeRequestParamDecorator(RouteRequestParamTypes.PARAM);
export const Query = routeRequestParamDecorator(RouteRequestParamTypes.QUERY);
export const Body = routeRequestParamDecorator(RouteRequestParamTypes.BODY);
export const Logger = routeRequestParamDecorator(RouteRequestParamTypes.LOGGER);
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYW1zLmRlY29yYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kZWNvcmF0b3JzL3BhcmFtcy5kZWNvcmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHNCQUFzQixFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzVFLE9BQU8sRUFBRSxlQUFlLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBVW5GLFNBQVMsbUJBQW1CLENBQUMsTUFBdUI7SUFDbEQsT0FBTztRQUNMLE9BQU8sWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzlCLENBQUMsQ0FBQztBQUNKLENBQUM7QUFTRCxNQUFNLFVBQVUsMEJBQTBCLENBQUMsV0FBbUI7SUFDNUQsT0FBTyxVQUNMLE9BQWdCLEVBQ2hCLEtBQW1CO1FBRW5CLE9BQU8sWUFBWSxDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDL0YsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUlELFNBQVMsWUFBWSxDQUNuQixNQUF1QixFQUN2QixXQUFvQixFQUNwQixPQUFnQixFQUNoQixTQUFxQjtJQUVyQixPQUFPLFVBQ0wsTUFBYyxFQUNkLFdBQXdDLEVBQ3hDLGNBQXNCO1FBRXRCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNqQixPQUFPO1FBQ1QsQ0FBQztRQUdELE1BQU0sSUFBSSxHQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDaEMsS0FBSyxNQUFNLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQzFDLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQ1QsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNsQixDQUFDO1FBQ0gsQ0FBQztRQUVELE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQyxlQUFlLENBQUMsa0JBQWtCLEVBQUUsTUFBTSxFQUFFLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM5RixNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDN0MsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sVUFBVSxHQUFnQjtZQUM5QixLQUFLLEVBQUUsY0FBYztZQUNyQixJQUFJLEVBQUUsU0FBUztZQUNmLFNBQVM7WUFDVCxJQUFJO1NBQ0wsQ0FBQztRQUdGLE1BQU0sV0FBVyxHQUFHLFdBQVcsQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbEYsY0FBYyxDQUNaLGVBQWUsQ0FBQyxNQUFNLEVBQ3RCLENBQUMsR0FBRyxXQUFXLEVBQUUsVUFBVSxDQUFDLEVBQzVCLE1BQU0sRUFDTixVQUFVLENBQ1gsQ0FBQztJQUNKLENBQUMsQ0FBQztBQUNKLENBQUM7QUFHRCxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQXdCLG1CQUFtQixDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUVqRixNQUFNLENBQUMsTUFBTSxHQUFHLEdBQXdCLG1CQUFtQixDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUVqRixNQUFNLENBQUMsTUFBTSxJQUFJLEdBQXdCLG1CQUFtQixDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUluRixNQUFNLENBQUMsTUFBTSxNQUFNLEdBQTJCLDBCQUEwQixDQUFDLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBR3hHLE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBMkIsMEJBQTBCLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDLENBQUM7QUFHdEcsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUEyQiwwQkFBMEIsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUV0RyxNQUFNLENBQUMsTUFBTSxJQUFJLEdBQTJCLDBCQUEwQixDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxDQUFDO0FBRXBHLE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBMkIsMEJBQTBCLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLENBQUMifQ==