UNPKG

ts-api-core

Version:

Nodejs api framework core

139 lines 5.33 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.HttpBodyModel = exports.HttpBody = exports.HttpResponse = exports.HttpRequest = exports.Esn = exports.Token = exports.Headers = exports.Cookie = exports.Body = exports.Query = exports.Param = exports.GetPost = exports.Put = exports.Delete = exports.Post = exports.Get = exports.Controller = exports.getMethod = exports.getClazz = void 0; /* eslint-disable @typescript-eslint/no-unnecessary-condition */ /* eslint-disable @typescript-eslint/explicit-module-boundary-types */ /* eslint-disable @typescript-eslint/no-unsafe-call */ require("reflect-metadata"); const getClazz = (target) => { return (target.$Meta = target.$Meta || { baseUrl: "", routes: {} }); }; exports.getClazz = getClazz; const getMethod = (target, methodName) => { const meta = (0, exports.getClazz)(target); const methodMeta = meta.routes[methodName] || (meta.routes[methodName] = { subUrl: '', httpMethod: '', midwares: [], params: [], }); return methodMeta; }; exports.getMethod = getMethod; /** * Service class decorator. * * @Controller('/user') * class UserService { * } * @param baseUrl 基础路径 * @param logPackage 是否输出 api 日志 * */ function Controller(baseUrl = '/', midwares, logPackage) { return function (target) { const meta = (0, exports.getClazz)(target.prototype); meta.baseUrl = baseUrl; meta.midwares = midwares; meta.logPackage = logPackage; }; } exports.Controller = Controller; const MethodFactory = (httpMethod) => { return (url, midwares) => { return (target, methodName, descriptor) => { const meta = (0, exports.getMethod)(target, methodName); meta.subUrl = url; meta.httpMethod = httpMethod; meta.midwares = midwares; // Sort parameter by param index meta.params.sort((param1, param2) => param1.index - param2.index); }; }; }; /** * * @GET('/user/:name') * list(@PathParam('name') name:string) */ exports.Get = MethodFactory('get'); exports.Post = MethodFactory('post'); exports.Delete = MethodFactory('delete'); exports.Put = MethodFactory('put'); exports.GetPost = MethodFactory('get,post'); const ParamFactory = (paramType, dataType2, paramName2) => { return (target, methodName, paramIndex) => { var _a, _b; let dataType = dataType2; let paramName = paramName2; if (!dataType) { const paramTypes = Reflect.getMetadata('design:paramtypes', target, methodName); const item = paramTypes[paramIndex]; if (item.name === 'Number') { dataType = 'number'; } else if (item.name !== "String" && item.name !== "Boolean" && paramType !== "request" && paramType !== "response" && paramType !== "body" && paramType !== "path") { dataType = item.prototype; } } // 如果没有指定参数名,则根据参数索引,获取对应位置的参数变量名称,作为参数名 if (!paramName && paramType !== "request" && paramType !== "response" && paramType !== "body") { const ss = (_b = (_a = target[methodName]) === null || _a === void 0 ? void 0 : _a.toString()) === null || _b === void 0 ? void 0 : _b.trim(); if (ss.startsWith(methodName)) { const params = ss .substring(methodName.length + 1, ss.indexOf(")")) .split(","); if (paramIndex < params.length) { paramName = params[paramIndex].trim(); } } } const meta = (0, exports.getMethod)(target, methodName); meta.params.push({ name: paramName ? paramName : paramType, index: paramIndex, type: paramType, dataType, }); }; }; const MethodParamFactory = (paramType) => { return (paramName, dataType) => { return ParamFactory(paramType, dataType, paramName); }; }; /** * * list(@PathParam('name') name:string) * */ exports.Param = MethodParamFactory('path'); exports.Query = MethodParamFactory('query'); exports.Body = MethodParamFactory('form'); exports.Cookie = MethodParamFactory('cookie'); exports.Headers = MethodParamFactory('header'); exports.Token = (0, exports.Headers)('token'); exports.Esn = (0, exports.Headers)('esn'); const ContextParamFactory = (paramType) => { return ParamFactory(paramType); }; /** * * @GET('/get') * list(@Request request, @Response res) */ exports.HttpRequest = ContextParamFactory('request'); exports.HttpResponse = ContextParamFactory('response'); /** 参数值是原始的Http请求Body数据 */ exports.HttpBody = ContextParamFactory('body'); /** 参数值是Http请求的Body数据自动转换的Model对象, 与 Body 的区别的是,会自动合并未知字段 */ exports.HttpBodyModel = ContextParamFactory("bodyModel"); //# sourceMappingURL=express.decorator.js.map