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/{axios-d8ab1187.d.ts → axios-95842cc3.d.ts} +30 -19
- package/dist/client/index.d.ts +1 -1
- package/dist/client/index.js.map +1 -1
- package/dist/client/index.mjs.map +1 -1
- package/dist/index.d.ts +55 -26
- package/dist/index.js +138 -25
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +127 -24
- package/dist/index.mjs.map +1 -1
- package/package.json +4 -3
- package/template/jwt.guard.art +0 -0
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
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.
|
|
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[
|
|
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
|
|
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.
|
|
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
|
|
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.
|
|
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
|
|
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,
|