@hestjs/core
Version:
HestJS Core Framework - A TypeScript framework built on Hono with dependency injection and decorators
97 lines • 3.11 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Context = exports.Res = exports.Req = exports.Header = exports.Query = exports.Param = exports.Body = exports.Patch = exports.Delete = exports.Put = exports.Post = exports.Get = void 0;
require("reflect-metadata");
const constants_1 = require("../utils/constants");
/**
* 创建路由装饰器
*/
function createRouteDecorator(method) {
return (path = '') => {
return (target, propertyKey, descriptor) => {
const metadata = {
method,
path: path.startsWith('/') ? path : `/${path}`,
methodName: String(propertyKey),
};
const existingRoutes = Reflect.getMetadata(constants_1.METADATA_KEYS.ROUTE, target.constructor) || [];
existingRoutes.push(metadata);
Reflect.defineMetadata(constants_1.METADATA_KEYS.ROUTE, existingRoutes, target.constructor);
return descriptor || {
value: target[propertyKey],
writable: true,
enumerable: true,
configurable: true,
};
};
};
}
/**
* GET 请求装饰器
*/
exports.Get = createRouteDecorator(constants_1.HttpMethod.GET);
/**
* POST 请求装饰器
*/
exports.Post = createRouteDecorator(constants_1.HttpMethod.POST);
/**
* PUT 请求装饰器
*/
exports.Put = createRouteDecorator(constants_1.HttpMethod.PUT);
/**
* DELETE 请求装饰器
*/
exports.Delete = createRouteDecorator(constants_1.HttpMethod.DELETE);
/**
* PATCH 请求装饰器
*/
exports.Patch = createRouteDecorator(constants_1.HttpMethod.PATCH);
/**
* 创建参数装饰器
*/
function createParamDecorator(type) {
return (key) => {
return (target, propertyKey, parameterIndex) => {
if (!propertyKey)
return;
const metadata = {
index: parameterIndex,
type,
key,
};
const paramKey = `${constants_1.METADATA_KEYS.PARAM.toString()}_${String(propertyKey)}`;
const existingParams = Reflect.getMetadata(paramKey, target.constructor) || [];
existingParams.push(metadata);
Reflect.defineMetadata(paramKey, existingParams, target.constructor);
};
};
}
/**
* 请求体参数装饰器
*/
exports.Body = createParamDecorator(constants_1.ParamType.BODY);
/**
* 路径参数装饰器
*/
exports.Param = createParamDecorator(constants_1.ParamType.PARAM);
/**
* 查询参数装饰器
*/
exports.Query = createParamDecorator(constants_1.ParamType.QUERY);
/**
* 请求头参数装饰器
*/
exports.Header = createParamDecorator(constants_1.ParamType.HEADER);
/**
* 完整请求对象装饰器
*/
exports.Req = createParamDecorator(constants_1.ParamType.REQUEST);
/**
* 响应对象装饰器
*/
exports.Res = createParamDecorator(constants_1.ParamType.RESPONSE);
/**
* 上下文装饰器 - 获取完整的 Hono Context
*/
exports.Context = createParamDecorator(constants_1.ParamType.CONTEXT);
//# sourceMappingURL=route.js.map