phecda-server 1.3.0 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/pipe.ts","../src/exception/base.ts","../src/exception/validate.ts","../src/exception/undefine.ts","../src/exception/forbidden.ts","../src/exception/bad-request.ts","../src/exception/wrong-meta.ts","../src/exception/not-found.ts","../src/filter.ts","../src/history.ts","../src/context/base.ts","../src/context/server.ts","../src/context/micro.ts","../src/compiler.ts","../src/utils.ts","../src/common.ts","../src/server/express.ts","../src/core.ts","../src/meta.ts","../src/decorators/index.ts","../src/decorators/param.ts","../src/decorators/route.ts","../src/decorators/micro.ts","../src/config.ts","../src/micro-services/rabbitmq.ts","../src/client/axios.ts","../src/client/server.ts"],"sourcesContent":["export * from './context'\nexport * from './types'\nexport * from './compiler'\nexport * from './server/express'\nexport * from './core'\nexport * from './decorators'\nexport * from './exception'\nexport * from './pipe'\nexport * from './meta'\nexport * from 'phecda-core'\nexport * from './micro-services/rabbitmq'\nexport * from './client/server'\n","import { isPhecda, plainToClass } from 'phecda-core'\nimport { ValidateException } from './exception/validate'\n\nexport interface ValidatePipe {\n transform(args: { arg: any; validate?: boolean }[], reflect: any[]): Promise<any[]>\n}\n\nexport const defaultPipe = {\n async transform(args: { arg: any; validate: boolean }[], reflect: any[]) {\n for (const i in args) {\n const { validate, arg } = args[i]\n if (validate === false)\n continue\n\n if (isPhecda(reflect[i])) {\n const ret = await plainToClass(reflect[i], arg, { transform: true })\n if (ret.err.length > 0)\n throw new ValidateException(ret.err[0])\n args[i].arg = ret.data\n }\n else {\n args[i].arg = reflect[i](arg)\n if (reflect[i] === Number && Object.is(args[i].arg, NaN))\n throw new ValidateException(`parameter ${Number(i) + 1} should be a number`)\n }\n }\n return args.map(item => item.arg)\n },\n} as ValidatePipe\n","export class HttpException extends Error {\n constructor(public message: string, public status: number, public description = 'Http exception') {\n super(message)\n }\n\n get data() {\n return { message: this.message, description: this.description, status: this.status, error: true }\n }\n}\n\n// export class BaseException extends Error {\n// constructor(public message: string, public description = 'Base exception') {\n// super(message)\n// }\n\n// get data() {\n// return { message: this.message, description: this.description, status: this.status, error: true }\n// }\n// }\n","import { HttpException } from './base'\n\nexport class ValidateException extends HttpException {\n constructor(message: string) {\n super(message, 400, 'Validate exception')\n }\n}\n","import { HttpException } from './base'\n\nexport class UndefinedException extends HttpException {\n constructor(message: string) {\n super(message, 500, 'Undefined error')\n }\n}\n","import { HttpException } from './base'\n\nexport class ForbiddenException extends HttpException {\n constructor(message: string) {\n super(message, 403, 'Forbidden resource')\n }\n}\n","import { HttpException } from './base'\n\nexport class BadRequestException extends HttpException {\n constructor(message: string) {\n super(message, 400, 'Bad Request')\n }\n}\n","import { HttpException } from './base'\n\nexport class WrongMetaException extends HttpException {\n constructor(message: string) {\n super(message, 500, 'Meta is not correct')\n }\n}\n","import { HttpException } from './base'\n\nexport class NotFoundException extends HttpException {\n constructor(message: string) {\n super(message, 404, 'Not Found')\n }\n}\n","import { HttpException, UndefinedException } from './exception'\nexport type ErrorFilter<E extends HttpException = any> = (err: E | Error, contextData: any) => any\n\nexport const serverFilter: ErrorFilter = (e: any) => {\n if (!(e instanceof HttpException))\n e = new UndefinedException(e.message || e)\n return e.data\n}\n\nexport const rabbitMqFilter: ErrorFilter = (e: any, data) => {\n const { channel, message } = data\n channel!.reject(message!, true)\n}\n","export class Phistroy {\n guard: string[] = []\n interceptor: string[] = []\n record(name: string, type: 'guard' | 'interceptor') {\n if (!this[type].includes(name)) {\n this[type].push(name)\n return true\n }\n return false\n }\n}\n","import { WrongMetaException } from '../exception/wrong-meta'\nimport { Phistroy } from '../history'\nimport { ForbiddenException } from '../exception'\n\nimport type { Pmeta } from '../meta'\n\nexport abstract class Pcontext {\n method: string\n params: string[]\n\n static metaRecord: Record<string, Pmeta> = {}\n static metaDataRecord: Record<string, ReturnType<typeof parseMeta>> = {}\n static instanceRecord: Record<string, any> = {}\n static guardsRecord: Record<string, (req: any, isMerge: boolean) => boolean> = {}\n static interceptorsRecord: Record<string, (req: any, isMerge: boolean) => any > = {}\n // static serverRecord: Record<string, Pcontext> = {}\n post: ((...params: any) => any)[]\n history = new Phistroy()\n constructor(public key: string, public data: any) {\n }\n\n static registerGuard(key: string, handler: any) {\n Pcontext.guardsRecord[key] = handler\n }\n\n static registerInterceptor(key: string, handler: any) {\n Pcontext.interceptorsRecord[key] = handler\n }\n\n async useGuard(guards: string[], isMerge = false) {\n for (const guard of guards) {\n if (this.history.record(guard, 'guard')) {\n if (!(guard in Pcontext.guardsRecord))\n throw new WrongMetaException(`can't find guard named ${guard}`)\n if (!await Pcontext.guardsRecord[guard](this.data, isMerge))\n throw new ForbiddenException(`Guard exception--${guard}`)\n }\n }\n }\n\n async useInterceptor(interceptors: string[], isMerge = false) {\n const ret = []\n for (const interceptor of interceptors) {\n if (this.history.record(interceptor, 'interceptor')) {\n if (!(interceptor in Pcontext.interceptorsRecord))\n throw new WrongMetaException(`can't find guard named ${interceptor}`)\n const post = await Pcontext.interceptorsRecord[interceptor](this.data, isMerge)\n if (post)\n ret.push(post)\n }\n }\n this.post = ret\n }\n\n async usePost(data: any) {\n if (!this.post)\n return data\n for (const cb of this.post)\n data = (await cb(data)) | data\n\n return data\n }\n}\n\nexport function addGuard(key: string, handler: (contextData: any, isMerge: boolean) => Promise<boolean> | boolean) {\n Pcontext.registerGuard(key, handler)\n}\n\nexport function addInterceptor(key: string, handler: (contextData: any, isMerge: boolean) => any) {\n Pcontext.registerInterceptor(key, handler)\n}\nexport function getInstance(tag: string) {\n return Pcontext.instanceRecord[tag]\n}\n\nexport function parseMeta(meta: Pmeta) {\n const { data: { params, guards, interceptors, middlewares }, reflect } = meta\n return {\n guards,\n reflect,\n interceptors,\n middlewares,\n params: params.map((param) => {\n const { type, key, validate } = param\n return { type, key, validate }\n }),\n }\n}\n","import type { ValidatePipe } from '../pipe'\nimport { defaultPipe } from '../pipe'\nimport type { ErrorFilter } from '../filter'\nimport { serverFilter } from '../filter'\nimport { WrongMetaException } from '../exception/wrong-meta'\nimport { Pcontext } from './base'\n\nexport class ServerContext extends Pcontext {\n static pipe = defaultPipe\n static filter = serverFilter\n static middlewareRecord: Record<string, (...params: any) => any> = {}\n static useMiddleware(middlewares: string[]) {\n return middlewares.map((m) => {\n if (!(m in ServerContext.middlewareRecord))\n throw new WrongMetaException(`can't find middleware named ${m}`)\n return ServerContext.middlewareRecord[m]\n })\n }\n\n async usePipe(args: { arg: any; validate?: boolean }[], reflect: any[]) {\n return ServerContext.pipe.transform?.(args, reflect)\n }\n\n useFilter(arg: any) {\n return ServerContext.filter(arg, this.data)\n }\n}\n\nexport function addMiddleware(key: string, handler: (...params: any) => any) {\n ServerContext.middlewareRecord[key] = handler\n}\n\nexport function useServerPipe(pipe: ValidatePipe) {\n ServerContext.pipe = pipe\n}\nexport function useServerFilter(filter: ErrorFilter) {\n ServerContext.filter = filter\n}\n","import type { ValidatePipe } from '../pipe'\nimport { defaultPipe } from '../pipe'\nimport type { ErrorFilter } from '../filter'\nimport { rabbitMqFilter } from '../filter'\nimport { WrongMetaException } from '../exception/wrong-meta'\nimport { Pcontext } from './base'\n\nexport class RabbitMqContext extends Pcontext {\n static pipe = defaultPipe\n static filter = rabbitMqFilter\n static middlewareRecord: Record<string, (...params: any) => boolean> = {}\n static useMiddleware(middlewares: string[]) {\n return middlewares.map((m) => {\n if (!(m in RabbitMqContext.middlewareRecord))\n throw new WrongMetaException(`can't find middleware named ${m}`)\n return RabbitMqContext.middlewareRecord[m]\n })\n }\n\n async usePipe(args: { arg: any; validate?: boolean }[], reflect: any[]) {\n return RabbitMqContext.pipe.transform?.(args, reflect)\n }\n\n useFilter(arg: any) {\n return RabbitMqContext.filter(arg, this.data)\n }\n}\nexport function useMqPipe(pipe: ValidatePipe) {\n RabbitMqContext.pipe = pipe\n}\nexport function useMqFilter(filter: ErrorFilter) {\n RabbitMqContext.filter = filter\n}\n","import type { ServerMeta } from './types'\n\nexport class Pcompiler {\n content = ''\n classMap: Record<string, { [key: string]: string }> = {}\n constructor() { }\n\n getContent() {\n let content = ''\n\n for (const name in this.classMap) {\n content += `\n export class ${name}{\n ${Object.values(this.classMap[name]).reduce((p, c) => p + c)}\n }`\n }\n return content\n }\n\n addMethod(args: ServerMeta) {\n const {\n route: {\n route = '/',\n type = 'get',\n } = {}, name, method, params, tag,\n } = args\n const url = route.replace(/\\/\\:([^\\/]*)/g, '')\n if (!this.classMap[name])\n this.classMap[name] = {}\n this.classMap[name][method] = `\n ${method}(${genParams(params)}){\nconst ret={tag:\"${tag}-${method}\",body:{},query:{},params:{},realParam:'',method:\"${type}\",url:\"${url}\"}\n${params.filter(item => item.key).reduce((p, c, i) => `${p}ret.${c.type}.${c.key}=arg${i}\\n${c.type === 'params' ? `ret.realParam+='/'+arg${i}\\n` : ''}`, '')}\nreturn ret\n }\n `\n }\n\n// addMqMethod(className: string, methodName: string, tag: string, exchange = '', routeKey = '', queue = '', params: { type: string; key: string; index: number }[] = []) {\n// if (!this.classMap[className])\n// this.classMap[className] = {}\n// this.classMap[className][methodName] = `\n// ${methodName}(${genParams(params)}){\n// const ret={tag:\"${tag}-${methodName}\",exchange:\"${exchange}\",routeKey:\"${routeKey}\",queue:\"${queue}\",args:{}}\n// ${params.reduce((p, c, i) => `${p}ret.args.${c.key}=arg${i}\\n`, '')}\n// return ret\n// }\n// `\n// }\n}\n\nfunction genParams(decorators: any[]) {\n return decorators.map((_, i) => {\n return `${`arg${i}`}`\n }).join(',')\n}\n","export const isUndefined = (obj: any): obj is undefined =>\n typeof obj === 'undefined'\nexport const isNil = (obj: any): obj is null | undefined =>\n isUndefined(obj) || obj === null\n\nexport const isObject = (fn: any): fn is object =>\n !isNil(fn) && typeof fn === 'object'\n\nexport function resolveDep(ret: any, key: string) {\n if (key)\n return ret?.[key]\n return ret\n}\n\n/**\n * @experiment\n */\nexport class Wrap<F, T> {\n constructor(public v1: F,\n public V2: T) {\n\n }\n\n get value() {\n return this.V2\n }\n}\n","export const SERIES_SYMBOL = '__symbol_series__'\nexport const REQ_SYMBOL = '__symbol_req__'\n","import type { Express } from 'express'\nimport { Pcontext, ServerContext, parseMeta } from '../context'\nimport { isObject, resolveDep } from '../utils'\nimport { REQ_SYMBOL, SERIES_SYMBOL } from '../common'\nimport type { Factory } from '../core'\nimport { NotFoundException } from '../exception/not-found'\n\nexport interface Options {\n/**\n * 专用路由的值,默认为/__PHECDA_SERVER__,处理phecda-client发出的合并请求\n */\n route?: string\n /**\n * 全局守卫\n */\n globalGuards?: string[]\n /**\n * 全局拦截器\n */\n globalInterceptors?: string[]\n /**\n * 专用路由的中间件,全局中间件请在bindApp以外设置\n */\n middlewares?: string[]\n}\n\nexport function bindApp(app: Express, { meta, moduleMap }: Awaited<ReturnType<typeof Factory>>, options: Options = {}) {\n const { globalGuards, globalInterceptors, route, middlewares: proMiddle } = { route: '/__PHECDA_SERVER__', globalGuards: [], globalInterceptors: [], middlewares: [], ...options } as Required<Options>\n const methodMap = {} as Record<string, (...args: any[]) => any>\n for (const i of meta) {\n const { name, method, route, header, tag } = i.data\n const instance = moduleMap.get(tag)!\n const methodTag = `${tag}-${method}`\n\n Pcontext.metaRecord[methodTag] = i\n let {\n guards,\n reflect,\n interceptors,\n params,\n middlewares,\n } = Pcontext.metaDataRecord[methodTag] ? Pcontext.metaDataRecord[methodTag] : (Pcontext.metaDataRecord[methodTag] = parseMeta(i))\n\n guards = [...globalGuards!, ...guards]\n interceptors = [...globalInterceptors!, ...interceptors]\n\n const handler = instance[method].bind(instance)\n methodMap[methodTag] = handler\n Pcontext.instanceRecord[name] = instance\n if (route) {\n app[route.type](route.route, ...ServerContext.useMiddleware(middlewares), async (req, res) => {\n const contextData = {\n request: req,\n methodTag,\n response: res,\n }\n const context = new ServerContext(methodTag, contextData)\n\n try {\n for (const name in header)\n res.set(name, header[name])\n await context.useGuard(guards)\n await context.useInterceptor(interceptors)\n const args = await context.usePipe(params.map(({ type, key, validate }) => {\n return { arg: resolveDep((req as any)[type], key), validate }\n }), reflect)\n instance.meta = contextData\n\n const ret = await context.usePost(await handler(...args))\n if (isObject(ret))\n res.json(ret)\n else\n res.send(String(ret))\n }\n catch (e: any) {\n i.handlers.forEach(handler => handler.error?.(e))\n const err = await context.useFilter(e)\n res.status(err.status).json(err)\n }\n })\n }\n }\n\n app.post(route, (req, _res, next) => {\n (req as any)[REQ_SYMBOL] = true\n next()\n }, ...ServerContext.useMiddleware(proMiddle), async (req, res) => {\n const contextData = {\n request: req,\n response: res,\n }\n const context = new ServerContext(route, contextData)\n const ret = [] as any[]\n\n const { body: { category, data } } = req\n if (category === 'series') {\n for (const item of data) {\n const { tag } = item\n const [name] = tag.split('-')\n const {\n guards,\n reflect,\n interceptors,\n params,\n } = Pcontext.metaDataRecord[tag]\n const instance = moduleMap.get(name)\n\n try {\n if (!params)\n throw new NotFoundException(`\"${tag}\" doesn't exist`)\n\n await context.useGuard(guards, true)\n await context.useInterceptor(interceptors, true)\n const args = await context.usePipe(params.map(({ type, key, validate }) => {\n const arg = resolveDep(item[type], key)\n if (typeof arg === 'string' && arg.startsWith(SERIES_SYMBOL)) {\n const [, index, argKey] = arg.split('@')\n return { arg: resolveDep(ret[Number(index)], argKey || key), validate }\n }\n\n return { arg, validate }\n }), reflect) as any\n instance.meta = contextData\n\n ret.push(await context.usePost(await methodMap[tag](...args)))\n }\n catch (e: any) {\n const m = Pcontext.metaRecord[tag]\n m.handlers.forEach(handler => handler.error?.(e))\n ret.push(await context.useFilter(e))\n }\n }\n return res.json(ret)\n }\n if (category === 'parallel') {\n return Promise.all(data.map((item: any) => {\n // eslint-disable-next-line no-async-promise-executor\n return new Promise(async (resolve) => {\n const { tag } = item\n const [name] = tag.split('-')\n const {\n guards,\n reflect,\n interceptors,\n params,\n } = Pcontext.metaDataRecord[tag]\n const instance = moduleMap.get(name)\n\n try {\n if (!params)\n throw new NotFoundException(`\"${tag}\" doesn't exist`)\n\n await context.useGuard(guards, true)\n await context.useInterceptor(interceptors, true)\n const args = await context.usePipe(params.map(({ type, key, validate }) => {\n const arg = resolveDep(item[type], key)\n return { arg, validate }\n }), reflect) as any\n instance.meta = contextData\n resolve(await context.usePost(await methodMap[tag](...args)))\n }\n catch (e: any) {\n const m = Pcontext.metaRecord[tag]\n m.handlers.forEach(handler => handler.error?.(e))\n resolve(await context.useFilter(e))\n }\n })\n })).then((ret) => {\n res.json(ret)\n })\n }\n\n res.json(await context.useFilter(new NotFoundException('category should be \\'parallel\\' or \\'series\\'')))\n })\n}\n","import 'reflect-metadata'\nimport EventEmitter from 'events'\nimport fs from 'fs'\nimport type { Phecda } from 'phecda-core'\nimport { getExposeKey, getHandler, getState, injectProperty, registerAsync } from 'phecda-core'\nimport type { Construct, PhecdaEmitter, ServerMeta } from './types'\nimport { Pmeta } from './meta'\n// TODO: support both phecda-emitter types and origin emitter type in future\nexport const emitter: PhecdaEmitter = new EventEmitter() as any\n\nexport async function Factory(Modules: (new (...args: any) => any)[]) {\n const moduleMap = new Map<string, InstanceType<Construct>>()\n const meta: Pmeta[] = []\n injectProperty('watcher', ({ eventName, instance, key, options }: { eventName: string; instance: any; key: string; options?: { once: boolean } }) => {\n const fn = typeof instance[key] === 'function' ? instance[key].bind(instance) : (v: any) => instance[key] = v\n\n if (options?.once)\n (emitter as any).once(eventName, fn)\n\n else\n (emitter as any).on(eventName, fn)\n })\n\n for (const Module of Modules)\n await buildNestModule(Module, moduleMap, meta)\n\n return { moduleMap, meta, output: (p = 'pmeta.js') => fs.writeFileSync(p, JSON.stringify(meta.map(item => item.data))) }\n}\n\nasync function buildNestModule(Module: Construct, map: Map<string, InstanceType<Construct>>, meta: Pmeta[]) {\n const paramtypes = getParamtypes(Module) as Construct[]\n let instance: InstanceType<Construct>\n const tag = Module.prototype?.__TAG__ || Module.name\n if (map.has(tag)) {\n instance = map.get(tag)\n if (!instance)\n throw new Error(`exist Circular Module dep--${Module}`)\n\n return instance\n }\n map.set(tag, undefined)\n if (paramtypes) {\n const paramtypesInstances = [] as any[]\n for (const i in paramtypes)\n paramtypesInstances[i] = await buildNestModule(paramtypes[i], map, meta)\n\n instance = new Module(...paramtypesInstances)\n }\n else {\n instance = new Module()\n }\n meta.push(...getMetaFromInstance(instance, Module.name, tag))\n await registerAsync(instance)\n map.set(tag, instance)\n\n return instance\n}\n\nfunction getMetaFromInstance(instance: Phecda, name: string, tag: string) {\n const vars = getExposeKey(instance).filter(item => item !== '__CLASS')\n const baseState = (getState(instance, '__CLASS') || {}) as ServerMeta\n initState(baseState)\n return vars.map((i) => {\n const state = (getState(instance, i) || {}) as ServerMeta\n if (baseState.route && state.route)\n state.route.route = baseState.route.route + state.route.route\n state.name = name\n state.tag = tag\n state.method = i\n const params = [] as any[]\n for (const i of state.params || []) {\n params.unshift(i)\n if (i.index === 0)\n break\n }\n state.params = params\n initState(state)\n state.header = Object.assign({}, baseState.header, state.header)\n state.middlewares = [...new Set([...baseState.middlewares, ...state.middlewares])]\n state.guards = [...new Set([...baseState.guards, ...state.guards])]\n state.interceptors = [...new Set([...baseState.interceptors, ...state.interceptors])]\n\n return new Pmeta(state as unknown as ServerMeta, getHandler(instance, i), getParamtypes(instance, i) || [])\n })\n}\n\nfunction getParamtypes(Module: any, key?: string | symbol) {\n return Reflect.getMetadata('design:paramtypes', Module, key!)\n}\n\nfunction initState(state: any) {\n if (!state.header)\n state.header = {}\n if (!state.middlewares)\n state.middlewares = []\n if (!state.guards)\n state.guards = []\n if (!state.interceptors)\n state.interceptors = []\n}\n","import type { PHandler, ServerMeta } from './types'\n\nexport class Pmeta {\n constructor(public data: ServerMeta, public handlers: PHandler[], public reflect: any[]) {\n\n }\n}\n","import { mergeState, setModalVar } from 'phecda-core'\n\nexport function Inject(_target: any) { }\n\nexport function Header(name: string, value: string) {\n return (target: any, k: PropertyKey) => {\n setModalVar(target, k)\n mergeState(target, k, {\n header: { name, value },\n })\n }\n}\n\nexport * from './param'\nexport * from './route'\n\nexport * from './micro'\n","import { mergeState, setModalVar } from 'phecda-core'\n\nexport function BaseParam(type: string, key: string, validate?: boolean): any {\n return (target: any, k: PropertyKey, index: number) => {\n setModalVar(target, k)\n mergeState(target, k, {\n params: [{ type, key, index, validate }],\n })\n }\n}\n\nexport function Body(key = '', validate?: boolean) {\n return BaseParam('body', key, validate)\n}\nexport function Query(key: string, validate?: boolean) {\n return BaseParam('query', key, validate)\n}\nexport function Param(key: string, validate?: boolean) {\n return BaseParam('params', key, validate)\n}\n","import { mergeState, setModalVar } from 'phecda-core'\n\nexport function Route(route: string, type?: string): any {\n return (target: any, key?: PropertyKey) => {\n if (key) {\n setModalVar(target, key)\n mergeState(target, key, {\n route: {\n route,\n type,\n },\n })\n }\n else {\n setModalVar(target.prototype, '__CLASS')\n mergeState(target.prototype, '__CLASS', {\n route: {\n route,\n type,\n },\n })\n }\n }\n}\n\nexport function Get(route: string) {\n return Route(route, 'get')\n}\n\nexport function Post(route: string) {\n return Route(route, 'post')\n}\nexport function Put(route: string) {\n return Route(route, 'put')\n}\n\nexport function Delete(route: string) {\n return Route(route, 'delete')\n}\n\nexport function Controller(route: string) {\n return Route(route)\n}\n\nexport function Guard(...guards: string[]): any {\n return (target: any, key?: PropertyKey) => {\n if (key) {\n setModalVar(target, key)\n mergeState(target, key, {\n guards: [...guards],\n })\n }\n else {\n setModalVar(target.prototype, '__CLASS')\n mergeState(target.prototype, '__CLASS', {\n guards: [...guards],\n })\n }\n }\n}\n\nexport function Middle(...middlewares: string[]): any {\n return (target: any, key?: PropertyKey) => {\n if (key) {\n setModalVar(target, key)\n mergeState(target, key, {\n middlewares: [...middlewares],\n })\n }\n else {\n setModalVar(target.prototype, '__CLASS')\n mergeState(target.prototype, '__CLASS', {\n middlewares: [...middlewares],\n })\n }\n }\n}\n\nexport function Interceptor(...interceptors: string[]): any {\n return (target: any, key?: PropertyKey) => {\n if (key) {\n setModalVar(target, key)\n mergeState(target, key, {\n interceptors: [...interceptors],\n })\n }\n else {\n setModalVar(target.prototype, '__CLASS')\n mergeState(target.prototype, '__CLASS', {\n interceptors: [...interceptors],\n })\n }\n }\n}\n","import { mergeState, setModalVar } from 'phecda-core'\nimport type amqplib from 'amqplib'\nexport function MQ(queue: string, routeKey: string, options?: amqplib.Options.Consume) {\n return (target: any, k: PropertyKey) => {\n setModalVar(target, k)\n mergeState(target, k, {\n mq: {\n queue,\n routeKey,\n options,\n },\n })\n }\n}\n","export const Pconfig = {\n rabbitmq: {\n guard: false,\n interceptor: false,\n },\n}\n","import type amqplib from 'amqplib'\n\nimport { Pcontext, RabbitMqContext, parseMeta } from '../context'\nimport { resolveDep } from '../utils'\nimport { Pconfig } from '../config'\nimport type { Factory } from '../core'\nexport async function bindMQ(ch: amqplib.Channel, { meta, moduleMap }: Awaited<ReturnType<typeof Factory>>) {\n for (const item of meta) {\n const { route, name, method, mq: { routeKey, queue: queueName, options } = {} } = item.data\n const tag = `${name}-${method}`\n Pcontext.metaRecord[tag] = item\n\n const {\n guards,\n reflect,\n interceptors,\n params,\n } = Pcontext.metaDataRecord[tag] ? Pcontext.metaDataRecord[tag] : (Pcontext.metaDataRecord[tag] = parseMeta(item))\n const instance = moduleMap.get(name)!\n const handler = instance[method].bind(instance)\n\n Pcontext.instanceRecord[name] = instance\n\n if (route) {\n const { queue } = await ch.assertQueue(route.route)\n if (queueName && routeKey)\n await ch.bindQueue(queue, queueName, routeKey)\n\n ch.consume(route.route, async (msg) => {\n if (msg !== null) {\n const content = msg.content.toString()\n\n const data = params.length > 0 ? JSON.parse(content) : content\n const contextMeta = {\n message: msg,\n content,\n channel: ch,\n\n }\n const context = new RabbitMqContext(tag, contextMeta)\n\n try {\n if (Pconfig.rabbitmq.guard)\n await context.useGuard(guards)\n if (Pconfig.rabbitmq.interceptor)\n await context.useInterceptor(interceptors)\n\n const args = await context.usePipe(params.map(({ key, validate }) => {\n return { arg: resolveDep(data, key), validate }\n }), reflect)\n\n instance.meta = contextMeta\n\n await context.usePost(await handler(...args))\n ch.ack(msg)\n }\n catch (e) {\n item.handlers.forEach(handler => handler.error?.(e))\n context.useFilter(e)\n }\n }\n else {\n // console.log('Consumer cancelled by server')\n }\n }, options)\n }\n }\n}\n\ntype MqMethod<T> = (arg: T) => void\n\n/**\n * @experiment\n */\nexport async function createPub<T extends (...args: any[]) => any>(ch: amqplib.Channel, method: T, type?: string): Promise<MqMethod<Parameters<T>>> {\n const { exchange, routeKey, queue } = method()\n if (exchange)\n await ch.assertExchange(exchange, type!)\n\n else\n await ch.assertQueue(queue)\n\n return async (arg: Parameters<T>) => {\n const { args } = method(arg)\n const msg = Buffer.from(JSON.stringify(args))\n if (exchange)\n await ch.publish(exchange, routeKey, msg)\n\n else\n await ch.sendToQueue(queue, msg)\n }\n}\n","import type { AxiosInstance, AxiosRequestConfig, AxiosResponse } from 'axios'\nimport type { PError, PRes, RequestType, ResOrErr } from '../types'\nimport { SERIES_SYMBOL } from '../common'\ninterface RequestArgs {\n body: Record<string, any>\n query: Record<string, string>\n params: Record<string, string>\n realParam: string\n method: RequestType\n url: string\n tag: string\n}\ntype MergedReqArg = Pick<RequestArgs, 'body' | 'query' | 'params' | 'tag' >\nexport function toReq(arg: RequestArgs) {\n const { body, query, realParam, method, url } = arg\n return { method, url, body, query: Object.keys(query).length > 0 ? `?${Object.entries(query).map(([k, v]) => `${k}=${v}`).join('&')}` : '', params: realParam }\n}\n\nexport const merge = (...args: RequestArgs[]) => {\n const ret = [] as MergedReqArg[]\n for (const i of args) {\n const { body, query, params, tag } = i\n ret.push({ tag, body, query, params })\n }\n\n return ret\n}\n\nexport type RequestMethod = <F extends (...args: any[]) => any >(fn: F, args: Parameters<F>) => Promise<ReturnType<F>>\n\nexport function createReq(instance: AxiosInstance): <R>(arg: R, config?: AxiosRequestConfig) => Promise<AxiosResponse<PRes<Awaited<R>>> > {\n // @ts-expect-error methods without route decorator won't send request\n return (arg: any, config?: AxiosRequestConfig) => {\n const { url, params, query, body, method } = toReq(arg as RequestArgs)\n if (!method) {\n console.warn('methods without route decorator won\\'t send request')\n return\n }\n\n const ret = [`${url}${params}${query}`] as any[]\n body && ret.push(body)\n config && ret.push(config)\n // @ts-expect-error misdirction\n return instance[method](...ret)\n }\n}\n\nexport function createSeriesReq(instance: AxiosInstance, key = '/__PHECDA_SERVER__'): < R extends unknown[]>(args: R, config?: AxiosRequestConfig) => Promise<AxiosResponse<ResOrErr<PRes<R>>>> {\n // @ts-expect-error misdirction\n return (args: RequestArgs[], config?: AxiosRequestConfig) => {\n return instance.post(key, {\n category: 'series',\n data: merge(...args),\n }, config)\n }\n}\n\nexport function createParallelReq(instance: AxiosInstance, key = '/__PHECDA_SERVER__'): < R extends unknown[]>(args: R, config?: AxiosRequestConfig) => Promise<AxiosResponse<ResOrErr<PRes<R>>>> {\n // @ts-expect-error misdirction\n return (args: RequestArgs[], config?: AxiosRequestConfig) => {\n return instance.post(key, {\n category: 'parallel',\n data: merge(...args),\n }, config)\n }\n}\n\nexport function isError<T = any>(data: T | PError): data is PError {\n return typeof data === 'object' && (data as any).error\n}\n\nexport function $S(index: number, key = ''): any {\n return `${SERIES_SYMBOL}@${index}@${key}`\n}\n","import type amqplib from 'amqplib'\nexport * from './axios'\n\nexport function createMqReq(channel: amqplib.Channel): <R>(arg: R) => Promise<void> {\n return async (arg: any) => {\n const { url, body } = arg\n await channel.assertQueue(url)\n await channel.sendToQueue(url, Buffer.from(JSON.stringify(body)))\n }\n}\n"],"mappings":"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","names":["HttpException","Error","message","status","description","constructor","data","error","ValidateException","HttpException","constructor","message","defaultPipe","transform","args","reflect","i","validate","arg","isPhecda","ret","plainToClass","err","length","ValidateException","data","Number","Object","is","NaN","map","item","UndefinedException","HttpException","constructor","message","ForbiddenException","HttpException","constructor","message","BadRequestException","HttpException","constructor","message","WrongMetaException","HttpException","constructor","message","NotFoundException","HttpException","constructor","message","serverFilter","e","HttpException","UndefinedException","message","data","rabbitMqFilter","channel","reject","Phistroy","guard","interceptor","record","name","type","includes","push","Pcontext","key","data","method","params","post","history","constructor","Phistroy","registerGuard","handler","guardsRecord","registerInterceptor","interceptorsRecord","useGuard","guards","isMerge","guard","record","WrongMetaException","ForbiddenException","useInterceptor","interceptors","ret","interceptor","push","usePost","cb","metaRecord","metaDataRecord","instanceRecord","addGuard","addInterceptor","getInstance","tag","parseMeta","meta","middlewares","reflect","map","param","type","validate","ServerContext","Pcontext","useMiddleware","middlewares","map","m","middlewareRecord","WrongMetaException","usePipe","args","reflect","pipe","transform","useFilter","arg","filter","data","defaultPipe","serverFilter","addMiddleware","key","handler","useServerPipe","useServerFilter","RabbitMqContext","Pcontext","useMiddleware","middlewares","map","m","middlewareRecord","WrongMetaException","usePipe","args","reflect","pipe","transform","useFilter","arg","filter","data","defaultPipe","rabbitMqFilter","useMqPipe","useMqFilter","Pcompiler","content","classMap","constructor","getContent","name","Object","values","reduce","p","c","addMethod","args","route","type","method","params","tag","url","replace","genParams","filter","item","key","i","decorators","map","_","join","isUndefined","obj","isNil","isObject","fn","resolveDep","ret","key","SERIES_SYMBOL","REQ_SYMBOL","bindApp","app","meta","moduleMap","options","globalGuards","globalInterceptors","route","middlewares","proMiddle","methodMap","i","name","method","header","tag","data","instance","get","methodTag","Pcontext","metaRecord","guards","reflect","interceptors","params","metaDataRecord","parseMeta","handler","bind","instanceRecord","type","ServerContext","useMiddleware","req","res","contextData","request","response","context","set","useGuard","useInterceptor","args","usePipe","map","key","validate","arg","resolveDep","ret","usePost","isObject","json","send","String","e","handlers","forEach","error","err","useFilter","status","post","_res","next","REQ_SYMBOL","body","category","item","split","NotFoundException","startsWith","SERIES_SYMBOL","index","argKey","Number","push","m","Promise","all","resolve","then","import_phecda_core","Pmeta","data","handlers","reflect","constructor","emitter","EventEmitter","Factory","Modules","moduleMap","Map","meta","injectProperty","eventName","instance","key","options","fn","bind","v","once","on","Module","buildNestModule","output","p","fs","writeFileSync","JSON","stringify","map","item","data","paramtypes","getParamtypes","tag","prototype","__TAG__","name","has","get","Error","set","undefined","paramtypesInstances","i","push","getMetaFromInstance","registerAsync","vars","getExposeKey","filter","baseState","getState","initState","state","route","method","params","unshift","index","header","Object","assign","middlewares","Set","guards","interceptors","Pmeta","getHandler","Reflect","getMetadata","import_phecda_core","import_phecda_core","BaseParam","type","key","validate","target","k","index","setModalVar","mergeState","params","Body","Query","Param","import_phecda_core","Route","route","type","target","key","setModalVar","mergeState","prototype","Get","Post","Put","Delete","Controller","Guard","guards","Middle","middlewares","Interceptor","interceptors","import_phecda_core","MQ","queue","routeKey","options","target","k","setModalVar","mergeState","mq","Inject","_target","Header","name","value","target","k","setModalVar","mergeState","header","Pconfig","rabbitmq","guard","interceptor","bindMQ","ch","meta","moduleMap","item","route","name","method","mq","routeKey","queue","queueName","options","data","tag","Pcontext","metaRecord","guards","reflect","interceptors","params","metaDataRecord","parseMeta","instance","get","handler","bind","instanceRecord","assertQueue","bindQueue","consume","msg","content","toString","length","JSON","parse","contextMeta","message","channel","context","RabbitMqContext","Pconfig","rabbitmq","guard","useGuard","interceptor","useInterceptor","args","usePipe","map","key","validate","arg","resolveDep","usePost","ack","e","handlers","forEach","error","useFilter","createPub","type","exchange","assertExchange","Buffer","from","stringify","publish","sendToQueue","toReq","arg","body","query","realParam","method","url","Object","keys","length","entries","map","k","v","join","params","merge","args","ret","i","tag","push","createReq","instance","config","console","warn","createSeriesReq","key","post","category","data","createParallelReq","isError","error","$S","index","SERIES_SYMBOL","createMqReq","channel","arg","url","body","assertQueue","sendToQueue","Buffer","from","JSON","stringify"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/pipe.ts","../src/exception/base.ts","../src/exception/validate.ts","../src/exception/undefine.ts","../src/exception/forbidden.ts","../src/exception/bad-request.ts","../src/exception/not-found.ts","../src/exception/conflict.ts","../src/exception/bad-gateway.ts","../src/exception/invalid-input.ts","../src/exception/media-type.ts","../src/exception/payload-large.ts","../src/exception/timeout.ts","../src/exception/unauthorized.ts","../src/exception/unavailable-service.ts","../src/exception/framework.ts","../src/filter.ts","../src/history.ts","../src/context/base.ts","../src/context/server.ts","../src/context/micro.ts","../src/types.ts","../src/compiler.ts","../src/utils.ts","../src/common.ts","../src/server/express.ts","../src/core.ts","../src/meta.ts","../src/decorators/index.ts","../src/decorators/param.ts","../src/decorators/route.ts","../src/decorators/micro.ts","../src/config.ts","../src/micro-services/rabbitmq.ts","../src/client/axios.ts","../src/client/server.ts"],"sourcesContent":["export * from './context'\nexport * from './types'\nexport * from './compiler'\nexport * from './server/express'\nexport * from './core'\nexport * from './decorators'\nexport * from './exception'\nexport * from './pipe'\nexport * from './meta'\nexport * from 'phecda-core'\nexport * from './micro-services/rabbitmq'\nexport * from './client/server'\n","import { isPhecda, plainToClass } from 'phecda-core'\nimport { ValidateException } from './exception/validate'\n\nexport interface ValidatePipe {\n transform(args: { arg: any; validate?: boolean }[], reflect: any[]): Promise<any[]>\n}\n\nexport const defaultPipe = {\n async transform(args: { arg: any; validate: boolean }[], reflect: any[]) {\n for (const i in args) {\n const { validate, arg } = args[i]\n if (validate === false)\n continue\n\n if (isPhecda(reflect[i])) {\n const ret = await plainToClass(reflect[i], arg, { transform: true })\n if (ret.err.length > 0)\n throw new ValidateException(ret.err[0])\n args[i].arg = ret.data\n }\n else {\n args[i].arg = reflect[i](arg)\n if (reflect[i] === Number && Object.is(args[i].arg, NaN))\n throw new ValidateException(`parameter ${Number(i) + 1} should be a number`)\n }\n }\n return args.map(item => item.arg)\n },\n} as ValidatePipe\n","export class HttpException extends Error {\n constructor(public message: string, public status: number, public description = 'Http exception') {\n super(message)\n }\n\n get data() {\n return { message: this.message, description: this.description, status: this.status, error: true }\n }\n}\n","import { HttpException } from './base'\n\nexport class ValidateException extends HttpException {\n constructor(message: string) {\n super(message, 400, 'Validate exception')\n }\n}\n","import { HttpException } from './base'\n\nexport class UndefinedException extends HttpException {\n constructor(message: string) {\n super(message, 500, 'Undefined error')\n }\n}\n","import { HttpException } from './base'\n\nexport class ForbiddenException extends HttpException {\n constructor(message: string) {\n super(message, 403, 'Forbidden resource')\n }\n}\n","import { HttpException } from './base'\n\nexport class BadRequestException extends HttpException {\n constructor(message: string) {\n super(message, 400, 'Bad Request')\n }\n}\n","import { HttpException } from './base'\n\nexport class NotFoundException extends HttpException {\n constructor(message: string) {\n super(message, 404, 'Not Found')\n }\n}\n","import { HttpException } from './base'\n\nexport class ConflictException extends HttpException {\n constructor(message: string) {\n super(message, 409, 'Conflict')\n }\n}\n","import { HttpException } from './base'\n\nexport class BadGatewayException extends HttpException {\n constructor(message: string) {\n super(message, 400, 'Bad Gatrway')\n }\n}\n","import { HttpException } from './base'\n\nexport class InvalidInputException extends HttpException {\n constructor(message: string) {\n super(message, 502, 'Invalid Input')\n }\n}\n","import { HttpException } from './base'\n\nexport class UnsupportedMediaTypeException extends HttpException {\n constructor(message: string) {\n super(message, 415, 'Unsupported Media Type')\n }\n}\n","import { HttpException } from './base'\n\nexport class PayloadLargeException extends HttpException {\n constructor(message: string) {\n super(message, 413, 'Payload Too Large')\n }\n}\n","import { HttpException } from './base'\n\nexport class TimeoutException extends HttpException {\n constructor(message: string) {\n super(message, 408, 'Request Timeout',\n )\n }\n}\n","import { HttpException } from './base'\n\nexport class UnauthorizedException extends HttpException {\n constructor(message: string) {\n super(message, 401, 'Unauthorized')\n }\n}\n","import { HttpException } from './base'\n\nexport class ServiceUnavailableException extends HttpException {\n constructor(message: string) {\n super(message, 503, 'Service Unavailable')\n }\n}\n","import { HttpException } from './base'\n\nexport class FrameworkException extends HttpException {\n constructor(message: string) {\n super(`[phecda-server] ${message}`, 500, 'Framework Error')\n }\n}\n","import { HttpException, UndefinedException } from './exception'\nimport type { ServerCtx, ServerMergeCtx } from './types'\nexport type ServerFilter<E extends HttpException = any> = (err: E | Error, contextData: ServerMergeCtx | ServerCtx) => any\nexport type MQFilter<E extends HttpException = any> = (err: E | Error, contextData: any) => any\n\nexport const serverFilter: ServerFilter = (e: any) => {\n if (!(e instanceof HttpException))\n e = new UndefinedException(e.message || e)\n return e.data\n}\n\nexport const rabbitMqFilter: MQFilter = (e: any, data) => {\n const { channel, message } = data\n channel!.reject(message!, true)\n}\n","export class Phistroy {\n guard: string[] = []\n interceptor: string[] = []\n record(name: string, type: 'guard' | 'interceptor') {\n if (!this[type].includes(name)) {\n this[type].push(name)\n return true\n }\n return false\n }\n}\n","import { ForbiddenException, FrameworkException } from '../exception'\nimport { Phistroy } from '../history'\n\nimport type { Pmeta } from '../meta'\nimport type { Pguard, Pinterceptor } from '../types'\n\nexport abstract class Pcontext<Data = any> {\n method: string\n params: string[]\n\n static metaRecord: Record<string, Pmeta> = {}\n static metaDataRecord: Record<string, ReturnType<typeof parseMeta>> = {}\n static instanceRecord: Record<string, any> = {}\n static guardsRecord: Record<string, (req: any, isMerge: boolean) => boolean> = {}\n static interceptorsRecord: Record<string, (req: any, isMerge: boolean) => any > = {}\n // static serverRecord: Record<string, Pcontext> = {}\n post: ((...params: any) => any)[]\n history = new Phistroy()\n\n constructor(public key: string, public data: Data) {\n }\n\n static registerGuard(key: string, handler: any) {\n Pcontext.guardsRecord[key] = handler\n }\n\n static registerInterceptor(key: string, handler: any) {\n Pcontext.interceptorsRecord[key] = handler\n }\n\n async useGuard(guards: string[], isMerge = false) {\n for (const guard of guards) {\n if (this.history.record(guard, 'guard')) {\n if (!(guard in Pcontext.guardsRecord))\n throw new FrameworkException(`can't find guard named ${guard}`)\n if (!await Pcontext.guardsRecord[guard](this.data, isMerge))\n throw new ForbiddenException(`Guard exception--${guard}`)\n }\n }\n }\n\n async useInterceptor(interceptors: string[], isMerge = false) {\n const ret = []\n for (const interceptor of interceptors) {\n if (this.history.record(interceptor, 'interceptor')) {\n if (!(interceptor in Pcontext.interceptorsRecord))\n throw new FrameworkException(`can't find guard named ${interceptor}`)\n const post = await Pcontext.interceptorsRecord[interceptor](this.data, isMerge)\n if (post)\n ret.push(post)\n }\n }\n this.post = ret\n }\n\n async usePost(data: any) {\n if (!this.post)\n return data\n for (const cb of this.post)\n data = (await cb(data)) | data\n\n return data\n }\n}\n\nexport function addGuard(key: string, handler: Pguard) {\n Pcontext.registerGuard(key, handler)\n}\n\nexport function addInterceptor(key: string, handler: Pinterceptor) {\n Pcontext.registerInterceptor(key, handler)\n}\nexport function getInstance(tag: string) {\n return Pcontext.instanceRecord[tag]\n}\n\nexport function parseMeta(meta: Pmeta) {\n const { data: { params, guards, interceptors, middlewares }, reflect } = meta\n return {\n guards,\n reflect,\n interceptors,\n middlewares,\n params: params.map((param) => {\n const { type, key, validate } = param\n return { type, key, validate }\n }),\n }\n}\n","import type { RequestHandler } from 'express'\nimport type { ValidatePipe } from '../pipe'\nimport { defaultPipe } from '../pipe'\nimport type { ServerFilter } from '../filter'\nimport { serverFilter } from '../filter'\nimport { FrameworkException } from '../exception'\nimport type { ServerCtx, ServerMergeCtx } from '../types'\nimport { Pcontext } from './base'\n\nexport class ServerContext extends Pcontext< ServerCtx | ServerMergeCtx > {\n static pipe = defaultPipe\n static filter = serverFilter\n static middlewareRecord: Record<string, (...params: any) => any> = {}\n static useMiddleware(middlewares: string[]) {\n return middlewares.map((m) => {\n if (!(m in ServerContext.middlewareRecord))\n throw new FrameworkException(`can't find middleware named ${m}`)\n return ServerContext.middlewareRecord[m]\n })\n }\n\n async usePipe(args: { arg: any; validate?: boolean }[], reflect: any[]) {\n return ServerContext.pipe.transform?.(args, reflect)\n }\n\n static useFilter(arg: any, data: ServerCtx | ServerMergeCtx) {\n return ServerContext.filter(arg, data)\n }\n\n useFilter(arg: any) {\n return ServerContext.filter(arg, this.data)\n }\n}\n\nexport function addMiddleware(key: string, handler: RequestHandler) {\n ServerContext.middlewareRecord[key] = handler\n}\n\nexport function useServerPipe(pipe: ValidatePipe) {\n ServerContext.pipe = pipe\n}\nexport function useServerFilter(filter: ServerFilter) {\n ServerContext.filter = filter\n}\n","import type { ValidatePipe } from '../pipe'\nimport { defaultPipe } from '../pipe'\nimport type { MQFilter } from '../filter'\nimport { rabbitMqFilter } from '../filter'\nimport { FrameworkException } from '../exception'\nimport { Pcontext } from './base'\n\nexport class RabbitMqContext extends Pcontext {\n static pipe = defaultPipe\n static filter = rabbitMqFilter\n static middlewareRecord: Record<string, (...params: any) => boolean> = {}\n static useMiddleware(middlewares: string[]) {\n return middlewares.map((m) => {\n if (!(m in RabbitMqContext.middlewareRecord))\n throw new FrameworkException(`can't find middleware named ${m}`)\n return RabbitMqContext.middlewareRecord[m]\n })\n }\n\n async usePipe(args: { arg: any; validate?: boolean }[], reflect: any[]) {\n return RabbitMqContext.pipe.transform?.(args, reflect)\n }\n\n static useFilter(arg: any, data: MQFilter) {\n return RabbitMqContext.filter(arg, data)\n }\n\n useFilter(arg: any) {\n return RabbitMqContext.filter(arg, this.data)\n }\n}\nexport function useMqPipe(pipe: ValidatePipe) {\n RabbitMqContext.pipe = pipe\n}\nexport function useMqFilter(filter: MQFilter) {\n RabbitMqContext.filter = filter\n}\n","import type { Request, Response } from 'express'\nimport type amqplib from 'amqplib'\nimport type { Events } from 'phecda-core'\nimport type { Pmeta } from './meta'\nexport type Construct<T = any> = new (...args: any[]) => T\n\nexport interface Emitter {\n on<N extends keyof Events>(eventName: N, cb: (args: Events[N]) => void): void\n once<N extends keyof Events>(eventName: N, cb: (args: Events[N]) => void): void\n off<N extends keyof Events>(eventName: N, cb: (args: Events[N]) => void): void\n removeAllListeners<N extends keyof Events>(eventName: N): void\n emit<N extends keyof Events>(eventName: N, param: Events[N]): void\n}\nexport interface PHandler {\n error?: (arg: any) => void\n}\nexport interface ServerMeta {\n route?: {\n type: RequestType\n route: string\n }\n mq?: {\n queue: string\n routeKey: string\n options: amqplib.Options.Consume\n\n }\n meta?: any\n header: Record<string, string>\n params: { type: string; index: number; key: string; validate?: boolean }[]\n guards: string[]\n interceptors: string[]\n middlewares: string[]\n method: string\n name: string\n tag: string\n}\n\nexport type RequestType = 'get' | 'post' | 'put' | 'delete' | 'patch' | 'options' | 'head'\n\nexport type MergeType = <R extends Promise<any>[]> (...args: R) => { [K in keyof R]: Awaited<R[K]> }\n\nexport interface BaseError {\n error: true\n status: number\n}\n\nexport interface PError extends BaseError { message: string; description: string}\n\nexport type ResOrErr<R > = { [K in keyof R]: Awaited<R[K]> | PError }\n\nexport type PRes<T> = T\n\nexport interface ServerContextData {\n request?: Request<any, any, any, any, Record<string, any>>\n response?: Response<any, Record<string, any>>\n\n}\n\nexport interface MqContextData {\n content?: string\n message?: any\n channel?: amqplib.Channel\n}\n\nexport interface ServerMergeCtx {\n request: Request\n response: Response\n meta: Record<string, Pmeta>\n tags?: string[]\n}\n\nexport interface ServerCtx {\n request: Request\n response: Response\n meta: Pmeta\n}\nexport class Base {\n context: ServerMergeCtx | ServerCtx\n}\n\nexport type Pguard = ((contextData: ServerCtx, isMerge?: false) => Promise<boolean> | boolean) | ((contextData: ServerMergeCtx, isMerge?: true) => Promise<boolean> | boolean)\n\nexport type Pinterceptor = ((contextData: ServerCtx, isMerge?: false) => any) | ((contextData: ServerMergeCtx, isMerge?: true) => any)\n","import type { ServerMeta } from './types'\n\nexport class Pcompiler {\n content = ''\n classMap: Record<string, { [key: string]: string }> = {}\n constructor() { }\n\n getContent() {\n let content = ''\n\n for (const name in this.classMap) {\n content += `\n export class ${name}{\n ${Object.values(this.classMap[name]).reduce((p, c) => p + c)}\n }`\n }\n return content\n }\n\n addMethod(args: ServerMeta) {\n const {\n route: {\n route = '/',\n type = 'get',\n } = {}, name, method, params, tag,\n } = args\n const url = route.replace(/\\/\\:([^\\/]*)/g, '')\n if (!this.classMap[name])\n this.classMap[name] = {}\n this.classMap[name][method] = `\n ${method}(${genParams(params)}){\nconst ret={tag:\"${tag}-${method}\",body:{},query:{},params:{},realParam:'',method:\"${type}\",url:\"${url}\"}\n${params.filter(item => item.key).reduce((p, c, i) => `${p}ret.${c.type}.${c.key}=arg${i}\\n${c.type === 'params' ? `ret.realParam+='/'+arg${i}\\n` : ''}`, '')}\nreturn ret\n }\n `\n }\n\n// addMqMethod(className: string, methodName: string, tag: string, exchange = '', routeKey = '', queue = '', params: { type: string; key: string; index: number }[] = []) {\n// if (!this.classMap[className])\n// this.classMap[className] = {}\n// this.classMap[className][methodName] = `\n// ${methodName}(${genParams(params)}){\n// const ret={tag:\"${tag}-${methodName}\",exchange:\"${exchange}\",routeKey:\"${routeKey}\",queue:\"${queue}\",args:{}}\n// ${params.reduce((p, c, i) => `${p}ret.args.${c.key}=arg${i}\\n`, '')}\n// return ret\n// }\n// `\n// }\n}\n\nfunction genParams(decorators: any[]) {\n return decorators.map((_, i) => {\n return `${`arg${i}`}`\n }).join(',')\n}\n","export const isUndefined = (obj: any): obj is undefined =>\n typeof obj === 'undefined'\nexport const isNil = (obj: any): obj is null | undefined =>\n isUndefined(obj) || obj === null\n\nexport const isObject = (fn: any): fn is object =>\n !isNil(fn) && typeof fn === 'object'\n\nexport function resolveDep(ret: any, key: string) {\n if (key)\n return ret?.[key]\n return ret\n}\n","export const SERIES_SYMBOL = '__symbol_series__'\nexport const MERGE_SYMBOL = '__symbol_req__'\n","import type { Express } from 'express'\nimport { Pcontext, ServerContext, parseMeta } from '../context'\nimport { isObject, resolveDep } from '../utils'\nimport { MERGE_SYMBOL, SERIES_SYMBOL } from '../common'\nimport type { Factory } from '../core'\nimport { BadRequestException } from '../exception'\nimport type { Pmeta } from '../meta'\nimport type { ServerMergeCtx } from '../types'\n\nexport interface Options {\n/**\n * 专用路由的值,默认为/__PHECDA_SERVER__,处理phecda-client发出的合并请求\n */\n route?: string\n /**\n * 全局守卫\n */\n globalGuards?: string[]\n /**\n * 全局拦截器\n */\n globalInterceptors?: string[]\n /**\n * 专用路由的中间件,全局中间件请在bindApp以外设置\n */\n middlewares?: string[]\n}\n\nexport function bindApp(app: Express, { meta, moduleMap }: Awaited<ReturnType<typeof Factory>>, options: Options = {}) {\n const { globalGuards, globalInterceptors, route, middlewares: proMiddle } = { route: '/__PHECDA_SERVER__', globalGuards: [], globalInterceptors: [], middlewares: [], ...options } as Required<Options>\n const methodMap = {} as Record<string, (...args: any[]) => any>\n const contextMeta = {} as Record<string, Pmeta>\n for (const i of meta) {\n const { name, method, route, header, tag } = i.data\n const instance = moduleMap.get(tag)!\n const methodTag = `${tag}-${method}`\n contextMeta[methodTag] = i\n Pcontext.metaRecord[methodTag] = i\n let {\n guards,\n reflect,\n interceptors,\n params,\n middlewares,\n } = Pcontext.metaDataRecord[methodTag] ? Pcontext.metaDataRecord[methodTag] : (Pcontext.metaDataRecord[methodTag] = parseMeta(i))\n\n guards = [...globalGuards!, ...guards]\n interceptors = [...globalInterceptors!, ...interceptors]\n\n const handler = instance[method].bind(instance)\n methodMap[methodTag] = handler\n Pcontext.instanceRecord[name] = instance\n if (route) {\n app[route.type](route.route, ...ServerContext.useMiddleware(middlewares), async (req, res) => {\n const contextData = {\n request: req,\n meta: i,\n response: res,\n }\n const context = new ServerContext(methodTag, contextData)\n\n try {\n for (const name in header)\n res.set(name, header[name])\n await context.useGuard(guards)\n await context.useInterceptor(interceptors)\n const args = await context.usePipe(params.map(({ type, key, validate }) => {\n return { arg: resolveDep((req as any)[type], key), validate }\n }), reflect)\n instance.context = contextData\n\n const ret = await context.usePost(await handler(...args))\n if (isObject(ret))\n res.json(ret)\n else\n res.send(String(ret))\n }\n catch (e: any) {\n i.handlers.forEach(handler => handler.error?.(e))\n const err = await context.useFilter(e)\n res.status(err.status).json(err)\n }\n })\n }\n }\n\n app.post(route, (req, _res, next) => {\n (req as any)[MERGE_SYMBOL] = true\n next()\n }, ...ServerContext.useMiddleware(proMiddle), async (req, res) => {\n const { body: { category, data } } = req\n\n const contextData = {\n request: req,\n response: res,\n meta: contextMeta,\n } as unknown as ServerMergeCtx\n\n if (!Array.isArray(data))\n return res.json(await ServerContext.useFilter(new BadRequestException('data format should be an array'), contextData))\n\n contextData.tags = data.map((item: any) => item.tag)\n\n const context = new ServerContext(route, contextData)\n const ret = [] as any[]\n\n if (category === 'series') {\n for (const item of data) {\n const { tag } = item\n const [name] = tag.split('-')\n const {\n guards,\n reflect,\n interceptors,\n params,\n } = Pcontext.metaDataRecord[tag]\n const instance = moduleMap.get(name)\n\n try {\n if (!params)\n throw new BadRequestException(`\"${tag}\" doesn't exist`)\n\n await context.useGuard(guards, true)\n await context.useInterceptor(interceptors, true)\n const args = await context.usePipe(params.map(({ type, key, validate }) => {\n const arg = resolveDep(item[type], key)\n if (typeof arg === 'string' && arg.startsWith(SERIES_SYMBOL)) {\n const [, index, argKey] = arg.split('@')\n return { arg: resolveDep(ret[Number(index)], argKey || key), validate }\n }\n\n return { arg, validate }\n }), reflect) as any\n instance.context = contextData\n\n ret.push(await context.usePost(await methodMap[tag](...args)))\n }\n catch (e: any) {\n const m = Pcontext.metaRecord[tag]\n m.handlers.forEach(handler => handler.error?.(e))\n ret.push(await context.useFilter(e))\n }\n }\n return res.json(ret)\n }\n if (category === 'parallel') {\n return Promise.all(data.map((item: any) => {\n // eslint-disable-next-line no-async-promise-executor\n return new Promise(async (resolve) => {\n const { tag } = item\n const [name] = tag.split('-')\n const {\n guards,\n reflect,\n interceptors,\n params,\n } = Pcontext.metaDataRecord[tag]\n const instance = moduleMap.get(name)\n\n try {\n if (!params)\n throw new BadRequestException(`\"${tag}\" doesn't exist`)\n\n await context.useGuard(guards, true)\n await context.useInterceptor(interceptors, true)\n const args = await context.usePipe(params.map(({ type, key, validate }) => {\n const arg = resolveDep(item[type], key)\n return { arg, validate }\n }), reflect) as any\n instance.context = contextData\n resolve(await context.usePost(await methodMap[tag](...args)))\n }\n catch (e: any) {\n const m = Pcontext.metaRecord[tag]\n m.handlers.forEach(handler => handler.error?.(e))\n resolve(await context.useFilter(e))\n }\n })\n })).then((ret) => {\n res.json(ret)\n })\n }\n\n res.json(await context.useFilter(new BadRequestException('category should be \\'parallel\\' or \\'series\\'')))\n })\n}\n","import 'reflect-metadata'\nimport EventEmitter from 'events'\nimport fs from 'fs'\nimport type { Phecda } from 'phecda-core'\nimport { getExposeKey, getHandler, getState, injectProperty, registerAsync } from 'phecda-core'\nimport type { Construct, Emitter, ServerMeta } from './types'\nimport { Pmeta } from './meta'\n// TODO: support both phecda-emitter types and origin emitter type in future\nexport const emitter: Emitter = new EventEmitter() as any\n\nexport async function Factory(Modules: (new (...args: any) => any)[]) {\n const moduleMap = new Map<string, InstanceType<Construct>>()\n const meta: Pmeta[] = []\n injectProperty('watcher', ({ eventName, instance, key, options }: { eventName: string; instance: any; key: string; options?: { once: boolean } }) => {\n const fn = typeof instance[key] === 'function' ? instance[key].bind(instance) : (v: any) => instance[key] = v\n\n if (options?.once)\n (emitter as any).once(eventName, fn)\n\n else\n (emitter as any).on(eventName, fn)\n })\n\n for (const Module of Modules)\n await buildNestModule(Module, moduleMap, meta)\n\n return { moduleMap, meta, output: (p = 'pmeta.js') => fs.writeFileSync(p, JSON.stringify(meta.map(item => item.data))) }\n}\n\nasync function buildNestModule(Module: Construct, map: Map<string, InstanceType<Construct>>, meta: Pmeta[]) {\n const paramtypes = getParamtypes(Module) as Construct[]\n let instance: InstanceType<Construct>\n const tag = Module.prototype?.__TAG__ || Module.name\n if (map.has(tag)) {\n instance = map.get(tag)\n if (!instance)\n throw new Error(`exist Circular Module dep--${Module}`)\n\n return instance\n }\n map.set(tag, undefined)\n if (paramtypes) {\n const paramtypesInstances = [] as any[]\n for (const i in paramtypes)\n paramtypesInstances[i] = await buildNestModule(paramtypes[i], map, meta)\n\n instance = new Module(...paramtypesInstances)\n }\n else {\n instance = new Module()\n }\n meta.push(...getMetaFromInstance(instance, Module.name, tag))\n await registerAsync(instance)\n map.set(tag, instance)\n\n return instance\n}\n\nfunction getMetaFromInstance(instance: Phecda, name: string, tag: string) {\n const vars = getExposeKey(instance).filter(item => item !== '__CLASS')\n const baseState = (getState(instance, '__CLASS') || {}) as ServerMeta\n initState(baseState)\n return vars.map((i) => {\n const state = (getState(instance, i) || {}) as ServerMeta\n if (baseState.route && state.route)\n state.route.route = baseState.route.route + state.route.route\n state.name = name\n state.tag = tag\n state.method = i\n const params = [] as any[]\n for (const i of state.params || []) {\n params.unshift(i)\n if (i.index === 0)\n break\n }\n state.params = params\n initState(state)\n state.header = Object.assign({}, baseState.header, state.header)\n state.middlewares = [...new Set([...baseState.middlewares, ...state.middlewares])]\n state.guards = [...new Set([...baseState.guards, ...state.guards])]\n state.interceptors = [...new Set([...baseState.interceptors, ...state.interceptors])]\n\n return new Pmeta(state as unknown as ServerMeta, getHandler(instance, i), getParamtypes(instance, i) || [])\n })\n}\n\nfunction getParamtypes(Module: any, key?: string | symbol) {\n return Reflect.getMetadata('design:paramtypes', Module, key!)\n}\n\nfunction initState(state: any) {\n if (!state.header)\n state.header = {}\n if (!state.middlewares)\n state.middlewares = []\n if (!state.guards)\n state.guards = []\n if (!state.interceptors)\n state.interceptors = []\n}\n","import type { PHandler, ServerMeta } from './types'\n\nexport class Pmeta {\n constructor(public data: ServerMeta, public handlers: PHandler[], public reflect: any[]) {\n\n }\n}\n","import { mergeState, setModalVar } from 'phecda-core'\n\nexport function Inject(_target: any) { }\n\nexport function Header(name: string, value: string) {\n return (target: any, k: PropertyKey) => {\n setModalVar(target, k)\n mergeState(target, k, {\n header: { name, value },\n })\n }\n}\n\nexport function Meta(key: string, value: any) {\n return (target: any, k: PropertyKey) => {\n setModalVar(target, k)\n mergeState(target, k, {\n meta: { [key]: value },\n })\n }\n}\n\nexport * from './param'\nexport * from './route'\n\nexport * from './micro'\n","import { mergeState, setModalVar } from 'phecda-core'\n\nexport function BaseParam(type: string, key: string, validate?: boolean): any {\n return (target: any, k: PropertyKey, index: number) => {\n setModalVar(target, k)\n mergeState(target, k, {\n params: [{ type, key, index, validate }],\n })\n }\n}\n\nexport function Body(key = '', validate?: boolean) {\n return BaseParam('body', key, validate)\n}\nexport function Query(key: string, validate?: boolean) {\n return BaseParam('query', key, validate)\n}\nexport function Param(key: string, validate?: boolean) {\n return BaseParam('params', key, validate)\n}\n","import { mergeState, setModalVar } from 'phecda-core'\n\nexport function Route(route: string, type?: string): any {\n return (target: any, key?: PropertyKey) => {\n if (key) {\n setModalVar(target, key)\n mergeState(target, key, {\n route: {\n route,\n type,\n },\n })\n }\n else {\n setModalVar(target.prototype, '__CLASS')\n mergeState(target.prototype, '__CLASS', {\n route: {\n route,\n type,\n },\n })\n }\n }\n}\n\nexport function Get(route: string) {\n return Route(route, 'get')\n}\n\nexport function Post(route: string) {\n return Route(route, 'post')\n}\nexport function Put(route: string) {\n return Route(route, 'put')\n}\n\nexport function Delete(route: string) {\n return Route(route, 'delete')\n}\n\nexport function Controller(route: string) {\n return Route(route)\n}\n\nexport function Guard(...guards: string[]): any {\n return (target: any, key?: PropertyKey) => {\n if (key) {\n setModalVar(target, key)\n mergeState(target, key, {\n guards: [...guards],\n })\n }\n else {\n setModalVar(target.prototype, '__CLASS')\n mergeState(target.prototype, '__CLASS', {\n guards: [...guards],\n })\n }\n }\n}\n\nexport function Middle(...middlewares: string[]): any {\n return (target: any, key?: PropertyKey) => {\n if (key) {\n setModalVar(target, key)\n mergeState(target, key, {\n middlewares: [...middlewares],\n })\n }\n else {\n setModalVar(target.prototype, '__CLASS')\n mergeState(target.prototype, '__CLASS', {\n middlewares: [...middlewares],\n })\n }\n }\n}\n\nexport function Interceptor(...interceptors: string[]): any {\n return (target: any, key?: PropertyKey) => {\n if (key) {\n setModalVar(target, key)\n mergeState(target, key, {\n interceptors: [...interceptors],\n })\n }\n else {\n setModalVar(target.prototype, '__CLASS')\n mergeState(target.prototype, '__CLASS', {\n interceptors: [...interceptors],\n })\n }\n }\n}\n","import { mergeState, setModalVar } from 'phecda-core'\nimport type amqplib from 'amqplib'\nexport function MQ(queue: string, routeKey: string, options?: amqplib.Options.Consume) {\n return (target: any, k: PropertyKey) => {\n setModalVar(target, k)\n mergeState(target, k, {\n mq: {\n queue,\n routeKey,\n options,\n },\n })\n }\n}\n","export const Pconfig = {\n rabbitmq: {\n guard: false,\n interceptor: false,\n },\n}\n","import type amqplib from 'amqplib'\n\nimport { Pcontext, RabbitMqContext, parseMeta } from '../context'\nimport { resolveDep } from '../utils'\nimport { Pconfig } from '../config'\nimport type { Factory } from '../core'\nexport async function bindMQ(ch: amqplib.Channel, { meta, moduleMap }: Awaited<ReturnType<typeof Factory>>) {\n for (const item of meta) {\n const { route, name, method, mq: { routeKey, queue: queueName, options } = {} } = item.data\n const tag = `${name}-${method}`\n Pcontext.metaRecord[tag] = item\n\n const {\n guards,\n reflect,\n interceptors,\n params,\n } = Pcontext.metaDataRecord[tag] ? Pcontext.metaDataRecord[tag] : (Pcontext.metaDataRecord[tag] = parseMeta(item))\n const instance = moduleMap.get(name)!\n const handler = instance[method].bind(instance)\n\n Pcontext.instanceRecord[name] = instance\n\n if (route) {\n const { queue } = await ch.assertQueue(route.route)\n if (queueName && routeKey)\n await ch.bindQueue(queue, queueName, routeKey)\n\n ch.consume(route.route, async (msg) => {\n if (msg !== null) {\n const content = msg.content.toString()\n\n const data = params.length > 0 ? JSON.parse(content) : content\n const contextMeta = {\n message: msg,\n content,\n channel: ch,\n\n }\n const context = new RabbitMqContext(tag, contextMeta)\n\n try {\n if (Pconfig.rabbitmq.guard)\n await context.useGuard(guards)\n if (Pconfig.rabbitmq.interceptor)\n await context.useInterceptor(interceptors)\n\n const args = await context.usePipe(params.map(({ key, validate }) => {\n return { arg: resolveDep(data, key), validate }\n }), reflect)\n\n instance.meta = contextMeta\n\n await context.usePost(await handler(...args))\n ch.ack(msg)\n }\n catch (e) {\n item.handlers.forEach(handler => handler.error?.(e))\n context.useFilter(e)\n }\n }\n else {\n // console.log('Consumer cancelled by server')\n }\n }, options)\n }\n }\n}\n\ntype MqMethod<T> = (arg: T) => void\n\n/**\n * @experiment\n */\nexport async function createPub<T extends (...args: any[]) => any>(ch: amqplib.Channel, method: T, type?: string): Promise<MqMethod<Parameters<T>>> {\n const { exchange, routeKey, queue } = method()\n if (exchange)\n await ch.assertExchange(exchange, type!)\n\n else\n await ch.assertQueue(queue)\n\n return async (arg: Parameters<T>) => {\n const { args } = method(arg)\n const msg = Buffer.from(JSON.stringify(args))\n if (exchange)\n await ch.publish(exchange, routeKey, msg)\n\n else\n await ch.sendToQueue(queue, msg)\n }\n}\n","import type { AxiosInstance, AxiosRequestConfig, AxiosResponse } from 'axios'\nimport type { PError, PRes, RequestType, ResOrErr } from '../types'\nimport { SERIES_SYMBOL } from '../common'\ninterface RequestArgs {\n body: Record<string, any>\n query: Record<string, string>\n params: Record<string, string>\n realParam: string\n method: RequestType\n url: string\n tag: string\n}\ntype MergedReqArg = Pick<RequestArgs, 'body' | 'query' | 'params' | 'tag' >\nexport function toReq(arg: RequestArgs) {\n const { body, query, realParam, method, url } = arg\n return { method, url, body, query: Object.keys(query).length > 0 ? `?${Object.entries(query).map(([k, v]) => `${k}=${v}`).join('&')}` : '', params: realParam }\n}\n\nexport const merge = (...args: RequestArgs[]) => {\n const ret = [] as MergedReqArg[]\n for (const i of args) {\n const { body, query, params, tag } = i\n ret.push({ tag, body, query, params })\n }\n\n return ret\n}\n\nexport type RequestMethod = <F extends (...args: any[]) => any >(fn: F, args: Parameters<F>) => Promise<ReturnType<F>>\n\nexport function createReq(instance: AxiosInstance): <R>(arg: R, config?: AxiosRequestConfig) => Promise<AxiosResponse<PRes<Awaited<R>>> > {\n // @ts-expect-error methods without route decorator won't send request\n return (arg: any, config?: AxiosRequestConfig) => {\n const { url, params, query, body, method } = toReq(arg as RequestArgs)\n if (!method) {\n console.warn('methods without route decorator won\\'t send request')\n return\n }\n\n const ret = [`${url}${params}${query}`] as any[]\n body && ret.push(body)\n config && ret.push(config)\n // @ts-expect-error misdirction\n return instance[method](...ret)\n }\n}\n\nexport function createSeriesReq(instance: AxiosInstance, key = '/__PHECDA_SERVER__'): < R extends unknown[]>(args: R, config?: AxiosRequestConfig) => Promise<AxiosResponse<ResOrErr<PRes<R>>>> {\n // @ts-expect-error misdirction\n return (args: RequestArgs[], config?: AxiosRequestConfig) => {\n return instance.post(key, {\n category: 'series',\n data: merge(...args),\n }, config)\n }\n}\n\nexport function createParallelReq(instance: AxiosInstance, key = '/__PHECDA_SERVER__'): < R extends unknown[]>(args: R, config?: AxiosRequestConfig) => Promise<AxiosResponse<ResOrErr<PRes<R>>>> {\n // @ts-expect-error misdirction\n return (args: RequestArgs[], config?: AxiosRequestConfig) => {\n return instance.post(key, {\n category: 'parallel',\n data: merge(...args),\n }, config)\n }\n}\n\nexport function isError<T = any>(data: T | PError): data is PError {\n return typeof data === 'object' && (data as any).error\n}\n\nexport function $S(index: number, key = ''): any {\n return `${SERIES_SYMBOL}@${index}@${key}`\n}\n","import type amqplib from 'amqplib'\nexport * from './axios'\n\nexport function createMqReq(channel: amqplib.Channel): <R>(arg: R) => Promise<void> {\n return async (arg: any) => {\n const { url, body } = arg\n await channel.assertQueue(url)\n await channel.sendToQueue(url, Buffer.from(JSON.stringify(body)))\n }\n}\n"],"mappings":"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","names":["HttpException","Error","message","status","description","constructor","data","error","ValidateException","HttpException","constructor","message","defaultPipe","transform","args","reflect","i","validate","arg","isPhecda","ret","plainToClass","err","length","ValidateException","data","Number","Object","is","NaN","map","item","UndefinedException","HttpException","constructor","message","ForbiddenException","HttpException","constructor","message","BadRequestException","HttpException","constructor","message","NotFoundException","HttpException","constructor","message","ConflictException","HttpException","constructor","message","BadGatewayException","HttpException","constructor","message","InvalidInputException","HttpException","constructor","message","UnsupportedMediaTypeException","HttpException","constructor","message","PayloadLargeException","HttpException","constructor","message","TimeoutException","HttpException","constructor","message","UnauthorizedException","HttpException","constructor","message","ServiceUnavailableException","HttpException","constructor","message","FrameworkException","HttpException","constructor","message","serverFilter","e","HttpException","UndefinedException","message","data","rabbitMqFilter","channel","reject","Phistroy","guard","interceptor","record","name","type","includes","push","Pcontext","key","data","method","params","post","history","constructor","Phistroy","registerGuard","handler","guardsRecord","registerInterceptor","interceptorsRecord","useGuard","guards","isMerge","guard","record","FrameworkException","ForbiddenException","useInterceptor","interceptors","ret","interceptor","push","usePost","cb","metaRecord","metaDataRecord","instanceRecord","addGuard","addInterceptor","getInstance","tag","parseMeta","meta","middlewares","reflect","map","param","type","validate","ServerContext","Pcontext","useMiddleware","middlewares","map","m","middlewareRecord","FrameworkException","usePipe","args","reflect","pipe","transform","useFilter","arg","data","filter","defaultPipe","serverFilter","addMiddleware","key","handler","useServerPipe","useServerFilter","RabbitMqContext","Pcontext","useMiddleware","middlewares","map","m","middlewareRecord","FrameworkException","usePipe","args","reflect","pipe","transform","useFilter","arg","data","filter","defaultPipe","rabbitMqFilter","useMqPipe","useMqFilter","Base","context","Pcompiler","content","classMap","constructor","getContent","name","Object","values","reduce","p","c","addMethod","args","route","type","method","params","tag","url","replace","genParams","filter","item","key","i","decorators","map","_","join","isUndefined","obj","isNil","isObject","fn","resolveDep","ret","key","SERIES_SYMBOL","MERGE_SYMBOL","bindApp","app","meta","moduleMap","options","globalGuards","globalInterceptors","route","middlewares","proMiddle","methodMap","contextMeta","i","name","method","header","tag","data","instance","get","methodTag","Pcontext","metaRecord","guards","reflect","interceptors","params","metaDataRecord","parseMeta","handler","bind","instanceRecord","type","ServerContext","useMiddleware","req","res","contextData","request","response","context","set","useGuard","useInterceptor","args","usePipe","map","key","validate","arg","resolveDep","ret","usePost","isObject","json","send","String","e","handlers","forEach","error","err","useFilter","status","post","_res","next","MERGE_SYMBOL","body","category","Array","isArray","BadRequestException","tags","item","split","startsWith","SERIES_SYMBOL","index","argKey","Number","push","m","Promise","all","resolve","then","import_phecda_core","Pmeta","data","handlers","reflect","constructor","emitter","EventEmitter","Factory","Modules","moduleMap","Map","meta","injectProperty","eventName","instance","key","options","fn","bind","v","once","on","Module","buildNestModule","output","p","fs","writeFileSync","JSON","stringify","map","item","data","paramtypes","getParamtypes","tag","prototype","__TAG__","name","has","get","Error","set","undefined","paramtypesInstances","i","push","getMetaFromInstance","registerAsync","vars","getExposeKey","filter","baseState","getState","initState","state","route","method","params","unshift","index","header","Object","assign","middlewares","Set","guards","interceptors","Pmeta","getHandler","Reflect","getMetadata","import_phecda_core","import_phecda_core","BaseParam","type","key","validate","target","k","index","setModalVar","mergeState","params","Body","Query","Param","import_phecda_core","Route","route","type","target","key","setModalVar","mergeState","prototype","Get","Post","Put","Delete","Controller","Guard","guards","Middle","middlewares","Interceptor","interceptors","import_phecda_core","MQ","queue","routeKey","options","target","k","setModalVar","mergeState","mq","Inject","_target","Header","name","value","target","k","setModalVar","mergeState","header","Meta","key","meta","Pconfig","rabbitmq","guard","interceptor","bindMQ","ch","meta","moduleMap","item","route","name","method","mq","routeKey","queue","queueName","options","data","tag","Pcontext","metaRecord","guards","reflect","interceptors","params","metaDataRecord","parseMeta","instance","get","handler","bind","instanceRecord","assertQueue","bindQueue","consume","msg","content","toString","length","JSON","parse","contextMeta","message","channel","context","RabbitMqContext","Pconfig","rabbitmq","guard","useGuard","interceptor","useInterceptor","args","usePipe","map","key","validate","arg","resolveDep","usePost","ack","e","handlers","forEach","error","useFilter","createPub","type","exchange","assertExchange","Buffer","from","stringify","publish","sendToQueue","toReq","arg","body","query","realParam","method","url","Object","keys","length","entries","map","k","v","join","params","merge","args","ret","i","tag","push","createReq","instance","config","console","warn","createSeriesReq","key","post","category","data","createParallelReq","isError","error","$S","index","SERIES_SYMBOL","createMqReq","channel","arg","url","body","assertQueue","sendToQueue","Buffer","from","JSON","stringify"]}
package/dist/index.mjs CHANGED
@@ -87,14 +87,6 @@ var BadRequestException = class extends HttpException {
87
87
  };
88
88
  __name(BadRequestException, "BadRequestException");
89
89
 
90
- // src/exception/wrong-meta.ts
91
- var WrongMetaException = class extends HttpException {
92
- constructor(message) {
93
- super(message, 500, "Meta is not correct");
94
- }
95
- };
96
- __name(WrongMetaException, "WrongMetaException");
97
-
98
90
  // src/exception/not-found.ts
99
91
  var NotFoundException = class extends HttpException {
100
92
  constructor(message) {
@@ -103,6 +95,78 @@ var NotFoundException = class extends HttpException {
103
95
  };
104
96
  __name(NotFoundException, "NotFoundException");
105
97
 
98
+ // src/exception/conflict.ts
99
+ var ConflictException = class extends HttpException {
100
+ constructor(message) {
101
+ super(message, 409, "Conflict");
102
+ }
103
+ };
104
+ __name(ConflictException, "ConflictException");
105
+
106
+ // src/exception/bad-gateway.ts
107
+ var BadGatewayException = class extends HttpException {
108
+ constructor(message) {
109
+ super(message, 400, "Bad Gatrway");
110
+ }
111
+ };
112
+ __name(BadGatewayException, "BadGatewayException");
113
+
114
+ // src/exception/invalid-input.ts
115
+ var InvalidInputException = class extends HttpException {
116
+ constructor(message) {
117
+ super(message, 502, "Invalid Input");
118
+ }
119
+ };
120
+ __name(InvalidInputException, "InvalidInputException");
121
+
122
+ // src/exception/media-type.ts
123
+ var UnsupportedMediaTypeException = class extends HttpException {
124
+ constructor(message) {
125
+ super(message, 415, "Unsupported Media Type");
126
+ }
127
+ };
128
+ __name(UnsupportedMediaTypeException, "UnsupportedMediaTypeException");
129
+
130
+ // src/exception/payload-large.ts
131
+ var PayloadLargeException = class extends HttpException {
132
+ constructor(message) {
133
+ super(message, 413, "Payload Too Large");
134
+ }
135
+ };
136
+ __name(PayloadLargeException, "PayloadLargeException");
137
+
138
+ // src/exception/timeout.ts
139
+ var TimeoutException = class extends HttpException {
140
+ constructor(message) {
141
+ super(message, 408, "Request Timeout");
142
+ }
143
+ };
144
+ __name(TimeoutException, "TimeoutException");
145
+
146
+ // src/exception/unauthorized.ts
147
+ var UnauthorizedException = class extends HttpException {
148
+ constructor(message) {
149
+ super(message, 401, "Unauthorized");
150
+ }
151
+ };
152
+ __name(UnauthorizedException, "UnauthorizedException");
153
+
154
+ // src/exception/unavailable-service.ts
155
+ var ServiceUnavailableException = class extends HttpException {
156
+ constructor(message) {
157
+ super(message, 503, "Service Unavailable");
158
+ }
159
+ };
160
+ __name(ServiceUnavailableException, "ServiceUnavailableException");
161
+
162
+ // src/exception/framework.ts
163
+ var FrameworkException = class extends HttpException {
164
+ constructor(message) {
165
+ super(`[phecda-server] ${message}`, 500, "Framework Error");
166
+ }
167
+ };
168
+ __name(FrameworkException, "FrameworkException");
169
+
106
170
  // src/filter.ts
107
171
  var serverFilter = /* @__PURE__ */ __name((e) => {
108
172
  if (!(e instanceof HttpException))
@@ -151,7 +215,7 @@ var _Pcontext = class {
151
215
  for (const guard of guards) {
152
216
  if (this.history.record(guard, "guard")) {
153
217
  if (!(guard in _Pcontext.guardsRecord))
154
- throw new WrongMetaException(`can't find guard named ${guard}`);
218
+ throw new FrameworkException(`can't find guard named ${guard}`);
155
219
  if (!await _Pcontext.guardsRecord[guard](this.data, isMerge))
156
220
  throw new ForbiddenException(`Guard exception--${guard}`);
157
221
  }
@@ -162,7 +226,7 @@ var _Pcontext = class {
162
226
  for (const interceptor of interceptors) {
163
227
  if (this.history.record(interceptor, "interceptor")) {
164
228
  if (!(interceptor in _Pcontext.interceptorsRecord))
165
- throw new WrongMetaException(`can't find guard named ${interceptor}`);
229
+ throw new FrameworkException(`can't find guard named ${interceptor}`);
166
230
  const post = await _Pcontext.interceptorsRecord[interceptor](this.data, isMerge);
167
231
  if (post)
168
232
  ret.push(post);
@@ -221,13 +285,16 @@ var _ServerContext = class extends Pcontext {
221
285
  static useMiddleware(middlewares) {
222
286
  return middlewares.map((m) => {
223
287
  if (!(m in _ServerContext.middlewareRecord))
224
- throw new WrongMetaException(`can't find middleware named ${m}`);
288
+ throw new FrameworkException(`can't find middleware named ${m}`);
225
289
  return _ServerContext.middlewareRecord[m];
226
290
  });
227
291
  }
228
292
  async usePipe(args, reflect) {
229
293
  return _ServerContext.pipe.transform?.(args, reflect);
230
294
  }
295
+ static useFilter(arg, data) {
296
+ return _ServerContext.filter(arg, data);
297
+ }
231
298
  useFilter(arg) {
232
299
  return _ServerContext.filter(arg, this.data);
233
300
  }
@@ -255,13 +322,16 @@ var _RabbitMqContext = class extends Pcontext {
255
322
  static useMiddleware(middlewares) {
256
323
  return middlewares.map((m) => {
257
324
  if (!(m in _RabbitMqContext.middlewareRecord))
258
- throw new WrongMetaException(`can't find middleware named ${m}`);
325
+ throw new FrameworkException(`can't find middleware named ${m}`);
259
326
  return _RabbitMqContext.middlewareRecord[m];
260
327
  });
261
328
  }
262
329
  async usePipe(args, reflect) {
263
330
  return _RabbitMqContext.pipe.transform?.(args, reflect);
264
331
  }
332
+ static useFilter(arg, data) {
333
+ return _RabbitMqContext.filter(arg, data);
334
+ }
265
335
  useFilter(arg) {
266
336
  return _RabbitMqContext.filter(arg, this.data);
267
337
  }
@@ -280,6 +350,12 @@ function useMqFilter(filter) {
280
350
  }
281
351
  __name(useMqFilter, "useMqFilter");
282
352
 
353
+ // src/types.ts
354
+ var Base = class {
355
+ context;
356
+ };
357
+ __name(Base, "Base");
358
+
283
359
  // src/compiler.ts
284
360
  var Pcompiler = class {
285
361
  content = "";
@@ -333,7 +409,7 @@ __name(resolveDep, "resolveDep");
333
409
 
334
410
  // src/common.ts
335
411
  var SERIES_SYMBOL = "__symbol_series__";
336
- var REQ_SYMBOL = "__symbol_req__";
412
+ var MERGE_SYMBOL = "__symbol_req__";
337
413
 
338
414
  // src/server/express.ts
339
415
  function bindApp(app, { meta, moduleMap }, options = {}) {
@@ -345,10 +421,12 @@ function bindApp(app, { meta, moduleMap }, options = {}) {
345
421
  ...options
346
422
  };
347
423
  const methodMap = {};
424
+ const contextMeta = {};
348
425
  for (const i of meta) {
349
426
  const { name, method, route: route2, header, tag } = i.data;
350
427
  const instance = moduleMap.get(tag);
351
428
  const methodTag = `${tag}-${method}`;
429
+ contextMeta[methodTag] = i;
352
430
  Pcontext.metaRecord[methodTag] = i;
353
431
  let { guards, reflect, interceptors, params, middlewares } = Pcontext.metaDataRecord[methodTag] ? Pcontext.metaDataRecord[methodTag] : Pcontext.metaDataRecord[methodTag] = parseMeta(i);
354
432
  guards = [
@@ -366,7 +444,7 @@ function bindApp(app, { meta, moduleMap }, options = {}) {
366
444
  app[route2.type](route2.route, ...ServerContext.useMiddleware(middlewares), async (req, res) => {
367
445
  const contextData = {
368
446
  request: req,
369
- methodTag,
447
+ meta: i,
370
448
  response: res
371
449
  };
372
450
  const context = new ServerContext(methodTag, contextData);
@@ -381,7 +459,7 @@ function bindApp(app, { meta, moduleMap }, options = {}) {
381
459
  validate
382
460
  };
383
461
  }), reflect);
384
- instance.meta = contextData;
462
+ instance.context = contextData;
385
463
  const ret = await context.usePost(await handler(...args));
386
464
  if (isObject(ret))
387
465
  res.json(ret);
@@ -396,16 +474,20 @@ function bindApp(app, { meta, moduleMap }, options = {}) {
396
474
  }
397
475
  }
398
476
  app.post(route, (req, _res, next) => {
399
- req[REQ_SYMBOL] = true;
477
+ req[MERGE_SYMBOL] = true;
400
478
  next();
401
479
  }, ...ServerContext.useMiddleware(proMiddle), async (req, res) => {
480
+ const { body: { category, data } } = req;
402
481
  const contextData = {
403
482
  request: req,
404
- response: res
483
+ response: res,
484
+ meta: contextMeta
405
485
  };
486
+ if (!Array.isArray(data))
487
+ return res.json(await ServerContext.useFilter(new BadRequestException("data format should be an array"), contextData));
488
+ contextData.tags = data.map((item) => item.tag);
406
489
  const context = new ServerContext(route, contextData);
407
490
  const ret = [];
408
- const { body: { category, data } } = req;
409
491
  if (category === "series") {
410
492
  for (const item of data) {
411
493
  const { tag } = item;
@@ -414,7 +496,7 @@ function bindApp(app, { meta, moduleMap }, options = {}) {
414
496
  const instance = moduleMap.get(name);
415
497
  try {
416
498
  if (!params)
417
- throw new NotFoundException(`"${tag}" doesn't exist`);
499
+ throw new BadRequestException(`"${tag}" doesn't exist`);
418
500
  await context.useGuard(guards, true);
419
501
  await context.useInterceptor(interceptors, true);
420
502
  const args = await context.usePipe(params.map(({ type, key, validate }) => {
@@ -431,7 +513,7 @@ function bindApp(app, { meta, moduleMap }, options = {}) {
431
513
  validate
432
514
  };
433
515
  }), reflect);
434
- instance.meta = contextData;
516
+ instance.context = contextData;
435
517
  ret.push(await context.usePost(await methodMap[tag](...args)));
436
518
  } catch (e) {
437
519
  const m = Pcontext.metaRecord[tag];
@@ -450,7 +532,7 @@ function bindApp(app, { meta, moduleMap }, options = {}) {
450
532
  const instance = moduleMap.get(name);
451
533
  try {
452
534
  if (!params)
453
- throw new NotFoundException(`"${tag}" doesn't exist`);
535
+ throw new BadRequestException(`"${tag}" doesn't exist`);
454
536
  await context.useGuard(guards, true);
455
537
  await context.useInterceptor(interceptors, true);
456
538
  const args = await context.usePipe(params.map(({ type, key, validate }) => {
@@ -460,7 +542,7 @@ function bindApp(app, { meta, moduleMap }, options = {}) {
460
542
  validate
461
543
  };
462
544
  }), reflect);
463
- instance.meta = contextData;
545
+ instance.context = contextData;
464
546
  resolve(await context.usePost(await methodMap[tag](...args)));
465
547
  } catch (e) {
466
548
  const m = Pcontext.metaRecord[tag];
@@ -472,7 +554,7 @@ function bindApp(app, { meta, moduleMap }, options = {}) {
472
554
  res.json(ret2);
473
555
  });
474
556
  }
475
- res.json(await context.useFilter(new NotFoundException("category should be 'parallel' or 'series'")));
557
+ res.json(await context.useFilter(new BadRequestException("category should be 'parallel' or 'series'")));
476
558
  });
477
559
  }
478
560
  __name(bindApp, "bindApp");
@@ -771,6 +853,17 @@ function Header(name, value) {
771
853
  };
772
854
  }
773
855
  __name(Header, "Header");
856
+ function Meta(key, value) {
857
+ return (target, k) => {
858
+ setModalVar4(target, k);
859
+ mergeState4(target, k, {
860
+ meta: {
861
+ [key]: value
862
+ }
863
+ });
864
+ };
865
+ }
866
+ __name(Meta, "Meta");
774
867
 
775
868
  // src/index.ts
776
869
  export * from "phecda-core";
@@ -928,23 +1021,30 @@ function createMqReq(channel) {
928
1021
  __name(createMqReq, "createMqReq");
929
1022
  export {
930
1023
  $S,
1024
+ BadGatewayException,
931
1025
  BadRequestException,
1026
+ Base,
932
1027
  BaseParam,
933
1028
  Body,
1029
+ ConflictException,
934
1030
  Controller,
935
1031
  Delete,
936
1032
  Factory,
937
1033
  ForbiddenException,
1034
+ FrameworkException,
938
1035
  Get,
939
1036
  Guard,
940
1037
  Header,
941
1038
  HttpException,
942
1039
  Inject,
943
1040
  Interceptor,
1041
+ InvalidInputException,
944
1042
  MQ,
1043
+ Meta,
945
1044
  Middle,
946
1045
  NotFoundException,
947
1046
  Param,
1047
+ PayloadLargeException,
948
1048
  Pcompiler,
949
1049
  Pcontext,
950
1050
  Pmeta,
@@ -954,9 +1054,12 @@ export {
954
1054
  RabbitMqContext,
955
1055
  Route,
956
1056
  ServerContext,
1057
+ ServiceUnavailableException,
1058
+ TimeoutException,
1059
+ UnauthorizedException,
957
1060
  UndefinedException,
1061
+ UnsupportedMediaTypeException,
958
1062
  ValidateException,
959
- WrongMetaException,
960
1063
  addGuard,
961
1064
  addInterceptor,
962
1065
  addMiddleware,