phecda-server 1.4.0 → 1.5.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-646333e3.d.ts +136 -0
- 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 +24 -45
- package/dist/index.js +55 -46
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +52 -43
- package/dist/index.mjs.map +1 -1
- package/dist/unplugin/esbuild.js +24 -8
- package/dist/unplugin/esbuild.js.map +1 -1
- package/dist/unplugin/esbuild.mjs +24 -8
- package/dist/unplugin/esbuild.mjs.map +1 -1
- package/dist/unplugin/unplugin.js +24 -8
- package/dist/unplugin/unplugin.js.map +1 -1
- package/dist/unplugin/unplugin.mjs +24 -8
- package/dist/unplugin/unplugin.mjs.map +1 -1
- package/dist/unplugin/vite.js +24 -8
- package/dist/unplugin/vite.js.map +1 -1
- package/dist/unplugin/vite.mjs +24 -8
- package/dist/unplugin/vite.mjs.map +1 -1
- package/dist/unplugin/webpack.js +24 -8
- package/dist/unplugin/webpack.js.map +1 -1
- package/dist/unplugin/webpack.mjs +24 -8
- package/dist/unplugin/webpack.mjs.map +1 -1
- package/package.json +2 -2
- package/template/[name].controller.art +0 -0
- package/dist/axios-95842cc3.d.ts +0 -116
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/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"]}
|
|
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\nimport type { P } from './types'\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 P.Pipe\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, 502, '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 { MQFilter, ServerFilter } from './types'\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 { Meta } from '../meta'\nimport type { P } from '../types'\n\nexport abstract class Context<Data = any> {\n method: string\n params: string[]\n\n static metaRecord: Record<string, Meta> = {}\n static metaDataRecord: Record<string, ReturnType<typeof parseMeta>> = {}\n static instanceRecord: Record<string, any> = {}\n static guardsRecord: Record<string, any> = {}\n static interceptorsRecord: Record<string, any > = {}\n // static serverRecord: Record<string, Context> = {}\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 Context.guardsRecord[key] = handler\n }\n\n static registerInterceptor(key: string, handler: any) {\n Context.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 Context.guardsRecord))\n throw new FrameworkException(`can't find guard named ${guard}`)\n if (!await Context.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 Context.interceptorsRecord))\n throw new FrameworkException(`can't find guard named ${interceptor}`)\n const post = await Context.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: P.Guard) {\n Context.registerGuard(key, handler)\n}\n\nexport function addInterceptor(key: string, handler: P.Interceptor) {\n Context.registerInterceptor(key, handler)\n}\nexport function getInstance(tag: string) {\n return Context.instanceRecord[tag]\n}\n\nexport function parseMeta(meta: Meta) {\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 { defaultPipe } from '../pipe'\nimport { serverFilter } from '../filter'\nimport { FrameworkException } from '../exception'\nimport type { P, ServerCtx, ServerFilter, ServerMergeCtx } from '../types'\nimport { Context } from './base'\n\nexport class ServerContext extends Context<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: P.Pipe) {\n ServerContext.pipe = pipe\n}\nexport function useServerFilter(filter: ServerFilter) {\n ServerContext.filter = filter\n}\n","import type { MQFilter, P } from '../types'\nimport { defaultPipe } from '../pipe'\nimport { rabbitMqFilter } from '../filter'\nimport { FrameworkException } from '../exception'\nimport { Context } from './base'\n\nexport class RabbitMqContext extends Context {\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: P.Pipe) {\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 { Meta } from './meta'\nimport type { HttpException } from './exception'\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}\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 MqCtx {\n content?: string\n message?: any\n channel?: amqplib.Channel\n}\nexport interface ServerMergeCtx {\n request: Request\n response: Response\n meta: Record<string, Meta>\n isMerge: true\n tags?: string[]\n}\n\nexport interface ServerCtx {\n request: Request\n response: Response\n meta: Meta\n}\nexport interface BaseError {\n error: true\n status: number\n}\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 class Base {\n context: ServerMergeCtx | ServerCtx\n}\n\nexport namespace P{\n export interface Error extends BaseError { message: string; description: string}\n\n export type ResOrErr<R > = { [K in keyof R]: Awaited<R[K]> | Error }\n\n export type Res<T> = T\n export type Guard = ((contextData: ServerCtx, isMerge?: false) => Promise<boolean> | boolean) | ((contextData: ServerMergeCtx, isMerge?: true) => Promise<boolean> | boolean)\n export type Interceptor = ((contextData: ServerCtx, isMerge?: false) => any) | ((contextData: ServerMergeCtx, isMerge?: true) => any)\n export interface Handler {\n error?: (arg: any) => void\n }\n export interface Meta {\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 define?: 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 export interface Pipe {\n transform(args: { arg: any; validate?: boolean }[], reflect: any[]): Promise<any[]>\n }\n\n}\n","import type { P } from './types'\n\nexport class Compiler {\n classMap: Record<string, { [key: string]: string }> = {}\n name: 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 createRequest() {\n let content = 'import {useC} from \\'phecda-server\\'\\n'\n for (const name in this.classMap)\n content += `export const {${Object.keys(this.classMap[name]).join(',')}}=useC(${name})\\n`\n return content\n }\n\n addMethod(args: P.Meta) {\n const {\n route: {\n route = '/',\n type = 'get',\n } = {}, name, method, params, tag,\n } = args\n const url = route.replace(/\\/\\:([^\\/]*)/g, '')\n this.name = name\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\nfunction genParams(decorators: any[]) {\n return decorators.map((_, i) => {\n return `${`arg${i}`}`\n }).join(',')\n}\n","import type { ServerCtx, ServerMergeCtx } from './types'\n\nexport 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\nexport function isMerge(data: ServerCtx | ServerMergeCtx): data is ServerMergeCtx {\n return !!(data as ServerMergeCtx).isMerge\n}\n","export const SERIES_SYMBOL = '__symbol_series__'\nexport const MERGE_SYMBOL = '__symbol_req__'\n","import type { Express } from 'express'\nimport { Context, 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 { Meta } 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, Meta>\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 Context.metaRecord[methodTag] = i\n let {\n guards,\n reflect,\n interceptors,\n params,\n middlewares,\n } = Context.metaDataRecord[methodTag] ? Context.metaDataRecord[methodTag] : (Context.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 Context.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 isMerge: true,\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 } = Context.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 = Context.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 } = Context.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 = Context.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, P } from './types'\nimport { Meta } 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: Meta[] = []\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: Meta[]) {\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 P.Meta\n initState(baseState)\n return vars.map((i) => {\n const state = (getState(instance, i) || {}) as P.Meta\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 Meta(state as unknown as P.Meta, 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 { P } from './types'\n\nexport class Meta {\n constructor(public data: P.Meta, public handlers: P.Handler[], 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 Define(key: string, value: any) {\n return (target: any, k: PropertyKey) => {\n setModalVar(target, k)\n mergeState(target, k, {\n define: { [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 { Context, 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 Context.metaRecord[tag] = item\n\n const {\n guards,\n reflect,\n interceptors,\n params,\n } = Context.metaDataRecord[tag] ? Context.metaDataRecord[tag] : (Context.metaDataRecord[tag] = parseMeta(item))\n const instance = moduleMap.get(name)!\n const handler = instance[method].bind(instance)\n\n Context.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 { P, RequestType } 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<P.Res<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<P.ResOrErr<P.Res<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<P.ResOrErr<P.Res<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 | P.Error): data is P.Error {\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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACAA,yBAAuC;;;ACAhC,IAAMA,gBAAN,cAA4BC,MAAAA;EACdC;EAAwBC;EAAuBC;EAAlEC,YAAmBH,SAAwBC,QAAuBC,cAAc,kBAAkB;AAChG,UAAMF,OAAAA;mBADWA;kBAAwBC;uBAAuBC;EAElE;EAEA,IAAIE,OAAO;AACT,WAAO;MAAEJ,SAAS,KAAKA;MAASE,aAAa,KAAKA;MAAaD,QAAQ,KAAKA;MAAQI,OAAO;IAAK;EAClG;AACF;AARaP;;;ACEN,IAAMQ,oBAAN,cAAgCC,cAAAA;EACrCC,YAAYC,SAAiB;AAC3B,UAAMA,SAAS,KAAK,oBAAA;EACtB;AACF;AAJaH;;;AFGN,IAAMI,cAAc;EACzB,MAAMC,UAAUC,MAAyCC,SAAgB;AACvE,eAAWC,KAAKF,MAAM;AACpB,YAAM,EAAEG,UAAUC,IAAG,IAAKJ,KAAKE;AAC/B,UAAIC,aAAa;AACf;AAEF,cAAIE,6BAASJ,QAAQC,EAAE,GAAG;AACxB,cAAMI,MAAM,UAAMC,iCAAaN,QAAQC,IAAIE,KAAK;UAAEL,WAAW;QAAK,CAAA;AAClE,YAAIO,IAAIE,IAAIC,SAAS;AACnB,gBAAM,IAAIC,kBAAkBJ,IAAIE,IAAI,EAAE;AACxCR,aAAKE,GAAGE,MAAME,IAAIK;MACpB,OACK;AACHX,aAAKE,GAAGE,MAAMH,QAAQC,GAAGE,GAAAA;AACzB,YAAIH,QAAQC,OAAOU,UAAUC,OAAOC,GAAGd,KAAKE,GAAGE,KAAKW,GAAAA;AAClD,gBAAM,IAAIL,kBAAkB,aAAaE,OAAOV,CAAAA,IAAK,sBAAsB;MAC/E;IACF;AACA,WAAOF,KAAKgB,IAAIC,CAAAA,SAAQA,KAAKb,GAAG;EAClC;AACF;;;AGxBO,IAAMc,qBAAN,cAAiCC,cAAAA;EACtCC,YAAYC,SAAiB;AAC3B,UAAMA,SAAS,KAAK,iBAAA;EACtB;AACF;AAJaH;;;ACAN,IAAMI,qBAAN,cAAiCC,cAAAA;EACtCC,YAAYC,SAAiB;AAC3B,UAAMA,SAAS,KAAK,oBAAA;EACtB;AACF;AAJaH;;;ACAN,IAAMI,sBAAN,cAAkCC,cAAAA;EACvCC,YAAYC,SAAiB;AAC3B,UAAMA,SAAS,KAAK,aAAA;EACtB;AACF;AAJaH;;;ACAN,IAAMI,oBAAN,cAAgCC,cAAAA;EACrCC,YAAYC,SAAiB;AAC3B,UAAMA,SAAS,KAAK,WAAA;EACtB;AACF;AAJaH;;;ACAN,IAAMI,oBAAN,cAAgCC,cAAAA;EACrCC,YAAYC,SAAiB;AAC3B,UAAMA,SAAS,KAAK,UAAA;EACtB;AACF;AAJaH;;;ACAN,IAAMI,sBAAN,cAAkCC,cAAAA;EACvCC,YAAYC,SAAiB;AAC3B,UAAMA,SAAS,KAAK,aAAA;EACtB;AACF;AAJaH;;;ACAN,IAAMI,wBAAN,cAAoCC,cAAAA;EACzCC,YAAYC,SAAiB;AAC3B,UAAMA,SAAS,KAAK,eAAA;EACtB;AACF;AAJaH;;;ACAN,IAAMI,gCAAN,cAA4CC,cAAAA;EACjDC,YAAYC,SAAiB;AAC3B,UAAMA,SAAS,KAAK,wBAAA;EACtB;AACF;AAJaH;;;ACAN,IAAMI,wBAAN,cAAoCC,cAAAA;EACzCC,YAAYC,SAAiB;AAC3B,UAAMA,SAAS,KAAK,mBAAA;EACtB;AACF;AAJaH;;;ACAN,IAAMI,mBAAN,cAA+BC,cAAAA;EACpCC,YAAYC,SAAiB;AAC3B,UAAMA,SAAS,KAAK,iBAAA;EAEtB;AACF;AALaH;;;ACAN,IAAMI,wBAAN,cAAoCC,cAAAA;EACzCC,YAAYC,SAAiB;AAC3B,UAAMA,SAAS,KAAK,cAAA;EACtB;AACF;AAJaH;;;ACAN,IAAMI,8BAAN,cAA0CC,cAAAA;EAC/CC,YAAYC,SAAiB;AAC3B,UAAMA,SAAS,KAAK,qBAAA;EACtB;AACF;AAJaH;;;ACAN,IAAMI,qBAAN,cAAiCC,cAAAA;EACtCC,YAAYC,SAAiB;AAC3B,UAAM,mBAAmBA,WAAW,KAAK,iBAAA;EAC3C;AACF;AAJaH;;;ACCN,IAAMI,eAA6B,wBAACC,MAAW;AACpD,MAAI,EAAEA,aAAaC;AACjBD,QAAI,IAAIE,mBAAmBF,EAAEG,WAAWH,CAAAA;AAC1C,SAAOA,EAAEI;AACX,GAJ0C;AAMnC,IAAMC,iBAA2B,wBAACL,GAAQI,SAAS;AACxD,QAAM,EAAEE,SAASH,QAAO,IAAKC;AAC7BE,UAASC,OAAOJ,SAAU,IAAI;AAChC,GAHwC;;;ACTjC,IAAMK,WAAN,MAAMA;EACXC,QAAkB,CAAA;EAClBC,cAAwB,CAAA;EACxBC,OAAOC,MAAcC,MAA+B;AAClD,QAAI,CAAC,KAAKA,MAAMC,SAASF,IAAAA,GAAO;AAC9B,WAAKC,MAAME,KAAKH,IAAAA;AAChB,aAAO;IACT;AACA,WAAO;EACT;AACF;AAVaJ;;;ACMN,IAAeQ,WAAf,MAAeA;EAaDC;EAAoBC;EAZvCC;EACAC;EAQAC;EACAC;EAEAC,YAAmBN,KAAoBC,MAAY;eAAhCD;gBAAoBC;SAFvCI,UAAU,IAAIE,SAAAA;EAGd;EAEA,OAAOC,cAAcR,KAAaS,SAAc;AAC9CV,aAAQW,aAAaV,OAAOS;EAC9B;EAEA,OAAOE,oBAAoBX,KAAaS,SAAc;AACpDV,aAAQa,mBAAmBZ,OAAOS;EACpC;EAEA,MAAMI,SAASC,QAAkBC,UAAU,OAAO;AAChD,eAAWC,SAASF,QAAQ;AAC1B,UAAI,KAAKT,QAAQY,OAAOD,OAAO,OAAA,GAAU;AACvC,YAAI,EAAEA,SAASjB,SAAQW;AACrB,gBAAM,IAAIQ,mBAAmB,0BAA0BF,OAAO;AAChE,YAAI,CAAC,MAAMjB,SAAQW,aAAaM,OAAO,KAAKf,MAAMc,OAAAA;AAChD,gBAAM,IAAII,mBAAmB,oBAAoBH,OAAO;MAC5D;IACF;EACF;EAEA,MAAMI,eAAeC,cAAwBN,UAAU,OAAO;AAC5D,UAAMO,MAAM,CAAA;AACZ,eAAWC,eAAeF,cAAc;AACtC,UAAI,KAAKhB,QAAQY,OAAOM,aAAa,aAAA,GAAgB;AACnD,YAAI,EAAEA,eAAexB,SAAQa;AAC3B,gBAAM,IAAIM,mBAAmB,0BAA0BK,aAAa;AACtE,cAAMnB,OAAO,MAAML,SAAQa,mBAAmBW,aAAa,KAAKtB,MAAMc,OAAAA;AACtE,YAAIX;AACFkB,cAAIE,KAAKpB,IAAAA;MACb;IACF;AACA,SAAKA,OAAOkB;EACd;EAEA,MAAMG,QAAQxB,MAAW;AACvB,QAAI,CAAC,KAAKG;AACR,aAAOH;AACT,eAAWyB,MAAM,KAAKtB;AACpBH,aAAQ,MAAMyB,GAAGzB,IAAAA,IAASA;AAE5B,WAAOA;EACT;AACF;AAzDO,IAAeF,UAAf;AAAeA;AAIpB,cAJoBA,SAIb4B,cAAmC,CAAC;AAC3C,cALoB5B,SAKb6B,kBAA+D,CAAC;AACvE,cANoB7B,SAMb8B,kBAAsC,CAAC;AAC9C,cAPoB9B,SAObW,gBAAoC,CAAC;AAC5C,cARoBX,SAQba,sBAA2C,CAAC;AAmD9C,SAASkB,SAAS9B,KAAaS,SAAkB;AACtDV,UAAQS,cAAcR,KAAKS,OAAAA;AAC7B;AAFgBqB;AAIT,SAASC,eAAe/B,KAAaS,SAAwB;AAClEV,UAAQY,oBAAoBX,KAAKS,OAAAA;AACnC;AAFgBsB;AAGT,SAASC,YAAYC,KAAa;AACvC,SAAOlC,QAAQ8B,eAAeI;AAChC;AAFgBD;AAIT,SAASE,UAAUC,MAAY;AACpC,QAAM,EAAElC,MAAM,EAAEE,QAAQW,QAAQO,cAAce,YAAW,GAAIC,QAAO,IAAKF;AACzE,SAAO;IACLrB;IACAuB;IACAhB;IACAe;IACAjC,QAAQA,OAAOmC,IAAI,CAACC,UAAU;AAC5B,YAAM,EAAEC,MAAMxC,KAAKyC,SAAQ,IAAKF;AAChC,aAAO;QAAEC;QAAMxC;QAAKyC;MAAS;IAC/B,CAAA;EACF;AACF;AAZgBP;;;ACrET,IAAMQ,iBAAN,cAA4BC,QAAAA;EAIjC,OAAOC,cAAcC,aAAuB;AAC1C,WAAOA,YAAYC,IAAI,CAACC,MAAM;AAC5B,UAAI,EAAEA,KAAKL,eAAcM;AACvB,cAAM,IAAIC,mBAAmB,+BAA+BF,GAAG;AACjE,aAAOL,eAAcM,iBAAiBD;IACxC,CAAA;EACF;EAEA,MAAMG,QAAQC,MAA0CC,SAAgB;AACtE,WAAOV,eAAcW,KAAKC,YAAYH,MAAMC,OAAAA;EAC9C;EAEA,OAAOG,UAAUC,KAAUC,MAAkC;AAC3D,WAAOf,eAAcgB,OAAOF,KAAKC,IAAAA;EACnC;EAEAF,UAAUC,KAAU;AAClB,WAAOd,eAAcgB,OAAOF,KAAK,KAAKC,IAAI;EAC5C;AACF;AAvBO,IAAMf,gBAAN;AAAMA;AACX,cADWA,eACJW,QAAOM;AACd,cAFWjB,eAEJgB,UAASE;AAChB,cAHWlB,eAGJM,oBAA4D,CAAC;AAsB/D,SAASa,cAAcC,KAAaC,SAAyB;AAClErB,gBAAcM,iBAAiBc,OAAOC;AACxC;AAFgBF;AAIT,SAASG,cAAcX,MAAc;AAC1CX,gBAAcW,OAAOA;AACvB;AAFgBW;AAGT,SAASC,gBAAgBP,QAAsB;AACpDhB,gBAAcgB,SAASA;AACzB;AAFgBO;;;ACjCT,IAAMC,mBAAN,cAA8BC,QAAAA;EAInC,OAAOC,cAAcC,aAAuB;AAC1C,WAAOA,YAAYC,IAAI,CAACC,MAAM;AAC5B,UAAI,EAAEA,KAAKL,iBAAgBM;AACzB,cAAM,IAAIC,mBAAmB,+BAA+BF,GAAG;AACjE,aAAOL,iBAAgBM,iBAAiBD;IAC1C,CAAA;EACF;EAEA,MAAMG,QAAQC,MAA0CC,SAAgB;AACtE,WAAOV,iBAAgBW,KAAKC,YAAYH,MAAMC,OAAAA;EAChD;EAEA,OAAOG,UAAUC,KAAUC,MAAgB;AACzC,WAAOf,iBAAgBgB,OAAOF,KAAKC,IAAAA;EACrC;EAEAF,UAAUC,KAAU;AAClB,WAAOd,iBAAgBgB,OAAOF,KAAK,KAAKC,IAAI;EAC9C;AACF;AAvBO,IAAMf,kBAAN;AAAMA;AACX,cADWA,iBACJW,QAAOM;AACd,cAFWjB,iBAEJgB,UAASE;AAChB,cAHWlB,iBAGJM,oBAAgE,CAAC;AAqBnE,SAASa,UAAUR,MAAc;AACtCX,kBAAgBW,OAAOA;AACzB;AAFgBQ;AAGT,SAASC,YAAYJ,QAAkB;AAC5ChB,kBAAgBgB,SAASA;AAC3B;AAFgBI;;;ACWT,IAAMC,OAAN,MAAMA;EACXC;AACF;AAFaD;;;AC1CN,IAAME,WAAN,MAAMA;EACXC,WAAsD,CAAC;EACvDC;EACAC,cAAc;EAAE;EAEhBC,aAAa;AACX,QAAIC,UAAU;AAEd,eAAWH,QAAQ,KAAKD,UAAU;AAChCI,iBAAW;uBACMH;cACTI,OAAOC,OAAO,KAAKN,SAASC,KAAK,EAAEM,OAAO,CAACC,GAAGC,MAAMD,IAAIC,CAAAA;;IAElE;AACA,WAAOL;EACT;EAEAM,gBAAgB;AACd,QAAIN,UAAU;AACd,eAAWH,QAAQ,KAAKD;AACtBI,iBAAW,iBAAiBC,OAAOM,KAAK,KAAKX,SAASC,KAAK,EAAEW,KAAK,GAAA,WAAcX;;AAClF,WAAOG;EACT;EAEAS,UAAUC,MAAc;AACtB,UAAM,EACJC,OAAO,EACLA,QAAQ,KACRC,OAAO,MAAK,IACV,CAAC,GAAGf,MAAMgB,QAAQC,QAAQC,IAAG,IAC/BL;AACJ,UAAMM,MAAML,MAAMM,QAAQ,iBAAiB,EAAA;AAC3C,SAAKpB,OAAOA;AACZ,QAAI,CAAC,KAAKD,SAASC;AACjB,WAAKD,SAASC,QAAQ,CAAC;AACzB,SAAKD,SAASC,MAAMgB,UAAU;MAC5BA,UAAUK,UAAUJ,MAAAA;kBACRC,OAAOF,2DAA2DD,cAAcI;EAChGF,OAAOK,OAAOC,CAAAA,SAAQA,KAAKC,GAAG,EAAElB,OAAO,CAACC,GAAGC,GAAGiB,MAAM,GAAGlB,QAAQC,EAAEO,QAAQP,EAAEgB,UAAUC;EAAMjB,EAAEO,SAAS,WAAW,yBAAyBU;IAAQ,MAAM,EAAA;;;;EAIxJ;AACF;AA3Ca3B;AA6Cb,SAASuB,UAAUK,YAAmB;AACpC,SAAOA,WAAWC,IAAI,CAACC,GAAGH,MAAM;AAC9B,WAAO,GAAG,MAAMA;EAClB,CAAA,EAAGd,KAAK,GAAA;AACV;AAJSU;;;AC7CF,IAAMQ,cAAc,wBAACC,QAC1B,OAAOA,QAAQ,aADU;AAEpB,IAAMC,QAAQ,wBAACD,QACpBD,YAAYC,GAAAA,KAAQA,QAAQ,MADT;AAGd,IAAME,WAAW,wBAACC,OACvB,CAACF,MAAME,EAAAA,KAAO,OAAOA,OAAO,UADN;AAGjB,SAASC,WAAWC,KAAUC,KAAa;AAChD,MAAIA;AACF,WAAOD,MAAMC;AACf,SAAOD;AACT;AAJgBD;;;ACVT,IAAMG,gBAAgB;AACtB,IAAMC,eAAe;;;AC2BrB,SAASC,QAAQC,KAAc,EAAEC,MAAMC,UAAS,GAAyCC,UAAmB,CAAC,GAAG;AACrH,QAAM,EAAEC,cAAcC,oBAAoBC,OAAOC,aAAaC,UAAS,IAAK;IAAEF,OAAO;IAAsBF,cAAc,CAAA;IAAIC,oBAAoB,CAAA;IAAIE,aAAa,CAAA;IAAI,GAAGJ;EAAQ;AACjL,QAAMM,YAAY,CAAC;AACnB,QAAMC,cAAc,CAAC;AACrB,aAAWC,KAAKV,MAAM;AACpB,UAAM,EAAEW,MAAMC,QAAQP,OAAAA,QAAOQ,QAAQC,IAAG,IAAKJ,EAAEK;AAC/C,UAAMC,WAAWf,UAAUgB,IAAIH,GAAAA;AAC/B,UAAMI,YAAY,GAAGJ,OAAOF;AAC5BH,gBAAYS,aAAaR;AACzBS,YAAQC,WAAWF,aAAaR;AAChC,QAAI,EACFW,QACAC,SACAC,cACAC,QACAlB,YAAW,IACTa,QAAQM,eAAeP,aAAaC,QAAQM,eAAeP,aAAcC,QAAQM,eAAeP,aAAaQ,UAAUhB,CAAAA;AAE3HW,aAAS;SAAIlB;SAAkBkB;;AAC/BE,mBAAe;SAAInB;SAAwBmB;;AAE3C,UAAMI,UAAUX,SAASJ,QAAQgB,KAAKZ,QAAAA;AACtCR,cAAUU,aAAaS;AACvBR,YAAQU,eAAelB,QAAQK;AAC/B,QAAIX,QAAO;AACTN,UAAIM,OAAMyB,MAAMzB,OAAMA,OAAK,GAAK0B,cAAcC,cAAc1B,WAAAA,GAAc,OAAO2B,KAAKC,QAAQ;AAC5F,cAAMC,cAAc;UAClBC,SAASH;UACTjC,MAAMU;UACN2B,UAAUH;QACZ;AACA,cAAMI,UAAU,IAAIP,cAAcb,WAAWiB,WAAAA;AAE7C,YAAI;AACF,qBAAWxB,SAAQE;AACjBqB,gBAAIK,IAAI5B,OAAME,OAAOF,MAAK;AAC5B,gBAAM2B,QAAQE,SAASnB,MAAAA;AACvB,gBAAMiB,QAAQG,eAAelB,YAAAA;AAC7B,gBAAMmB,OAAO,MAAMJ,QAAQK,QAAQnB,OAAOoB,IAAI,CAAC,EAAEd,MAAMe,KAAKC,SAAQ,MAAO;AACzE,mBAAO;cAAEC,KAAKC,WAAYf,IAAYH,OAAOe,GAAAA;cAAMC;YAAS;UAC9D,CAAA,GAAIxB,OAAAA;AACJN,mBAASsB,UAAUH;AAEnB,gBAAMc,MAAM,MAAMX,QAAQY,QAAQ,MAAMvB,QAAAA,GAAWe,IAAAA,CAAAA;AACnD,cAAIS,SAASF,GAAAA;AACXf,gBAAIkB,KAAKH,GAAAA;;AAETf,gBAAImB,KAAKC,OAAOL,GAAAA,CAAAA;QACpB,SACOM,GAAP;AACE7C,YAAE8C,SAASC,QAAQ9B,CAAAA,aAAWA,SAAQ+B,QAAQH,CAAAA,CAAAA;AAC9C,gBAAMI,MAAM,MAAMrB,QAAQsB,UAAUL,CAAAA;AACpCrB,cAAI2B,OAAOF,IAAIE,MAAM,EAAET,KAAKO,GAAAA;QAC9B;MACF,CAAA;IACF;EACF;AAEA5D,MAAI+D,KAAKzD,OAAO,CAAC4B,KAAK8B,MAAMC,SAAS;AAClC/B,QAAYgC,gBAAgB;AAC7BD,SAAAA;EACF,GAAA,GAAMjC,cAAcC,cAAczB,SAAAA,GAAY,OAAO0B,KAAKC,QAAQ;AAChE,UAAM,EAAEgC,MAAM,EAAEC,UAAUpD,KAAI,EAAE,IAAKkB;AAErC,UAAME,cAAc;MAClBC,SAASH;MACTI,UAAUH;MACVlC,MAAMS;MACN2D,SAAS;IACX;AAEA,QAAI,CAACC,MAAMC,QAAQvD,IAAAA;AACjB,aAAOmB,IAAIkB,KAAK,MAAMrB,cAAc6B,UAAU,IAAIW,oBAAoB,gCAAA,GAAmCpC,WAAAA,CAAAA;AAE3GA,gBAAYqC,OAAOzD,KAAK6B,IAAI,CAAC6B,SAAcA,KAAK3D,GAAG;AAEnD,UAAMwB,UAAU,IAAIP,cAAc1B,OAAO8B,WAAAA;AACzC,UAAMc,MAAM,CAAA;AAEZ,QAAIkB,aAAa,UAAU;AACzB,iBAAWM,QAAQ1D,MAAM;AACvB,cAAM,EAAED,IAAG,IAAK2D;AAChB,cAAM,CAAC9D,IAAAA,IAAQG,IAAI4D,MAAM,GAAA;AACzB,cAAM,EACJrD,QACAC,SACAC,cACAC,OAAM,IACJL,QAAQM,eAAeX;AAC3B,cAAME,WAAWf,UAAUgB,IAAIN,IAAAA;AAE/B,YAAI;AACF,cAAI,CAACa;AACH,kBAAM,IAAI+C,oBAAoB,IAAIzD,oBAAoB;AAExD,gBAAMwB,QAAQE,SAASnB,QAAQ,IAAI;AACnC,gBAAMiB,QAAQG,eAAelB,cAAc,IAAI;AAC/C,gBAAMmB,OAAO,MAAMJ,QAAQK,QAAQnB,OAAOoB,IAAI,CAAC,EAAEd,MAAMe,KAAKC,SAAQ,MAAO;AACzE,kBAAMC,MAAMC,WAAWyB,KAAK3C,OAAOe,GAAAA;AACnC,gBAAI,OAAOE,QAAQ,YAAYA,IAAI4B,WAAWC,aAAAA,GAAgB;AAC5D,oBAAM,CAAA,EAAGC,OAAOC,MAAAA,IAAU/B,IAAI2B,MAAM,GAAA;AACpC,qBAAO;gBAAE3B,KAAKC,WAAWC,IAAI8B,OAAOF,KAAAA,IAASC,UAAUjC,GAAAA;gBAAMC;cAAS;YACxE;AAEA,mBAAO;cAAEC;cAAKD;YAAS;UACzB,CAAA,GAAIxB,OAAAA;AACJN,mBAASsB,UAAUH;AAEnBc,cAAI+B,KAAK,MAAM1C,QAAQY,QAAQ,MAAM1C,UAAUM,KAAI,GAAI4B,IAAAA,CAAAA,CAAAA;QACzD,SACOa,GAAP;AACE,gBAAM0B,IAAI9D,QAAQC,WAAWN;AAC7BmE,YAAEzB,SAASC,QAAQ9B,CAAAA,YAAWA,QAAQ+B,QAAQH,CAAAA,CAAAA;AAC9CN,cAAI+B,KAAK,MAAM1C,QAAQsB,UAAUL,CAAAA,CAAAA;QACnC;MACF;AACA,aAAOrB,IAAIkB,KAAKH,GAAAA;IAClB;AACA,QAAIkB,aAAa,YAAY;AAC3B,aAAOe,QAAQC,IAAIpE,KAAK6B,IAAI,CAAC6B,SAAc;AAEzC,eAAO,IAAIS,QAAQ,OAAOE,YAAY;AACpC,gBAAM,EAAEtE,IAAG,IAAK2D;AAChB,gBAAM,CAAC9D,IAAAA,IAAQG,IAAI4D,MAAM,GAAA;AACzB,gBAAM,EACJrD,QACAC,SACAC,cACAC,OAAM,IACJL,QAAQM,eAAeX;AAC3B,gBAAME,WAAWf,UAAUgB,IAAIN,IAAAA;AAE/B,cAAI;AACF,gBAAI,CAACa;AACH,oBAAM,IAAI+C,oBAAoB,IAAIzD,oBAAoB;AAExD,kBAAMwB,QAAQE,SAASnB,QAAQ,IAAI;AACnC,kBAAMiB,QAAQG,eAAelB,cAAc,IAAI;AAC/C,kBAAMmB,OAAO,MAAMJ,QAAQK,QAAQnB,OAAOoB,IAAI,CAAC,EAAEd,MAAMe,KAAKC,SAAQ,MAAO;AACzE,oBAAMC,MAAMC,WAAWyB,KAAK3C,OAAOe,GAAAA;AACnC,qBAAO;gBAAEE;gBAAKD;cAAS;YACzB,CAAA,GAAIxB,OAAAA;AACJN,qBAASsB,UAAUH;AACnBiD,oBAAQ,MAAM9C,QAAQY,QAAQ,MAAM1C,UAAUM,KAAI,GAAI4B,IAAAA,CAAAA,CAAAA;UACxD,SACOa,GAAP;AACE,kBAAM0B,IAAI9D,QAAQC,WAAWN;AAC7BmE,cAAEzB,SAASC,QAAQ9B,CAAAA,YAAWA,QAAQ+B,QAAQH,CAAAA,CAAAA;AAC9C6B,oBAAQ,MAAM9C,QAAQsB,UAAUL,CAAAA,CAAAA;UAClC;QACF,CAAA;MACF,CAAA,CAAA,EAAI8B,KAAK,CAACpC,SAAQ;AAChBf,YAAIkB,KAAKH,IAAAA;MACX,CAAA;IACF;AAEAf,QAAIkB,KAAK,MAAMd,QAAQsB,UAAU,IAAIW,oBAAoB,2CAAA,CAAA,CAAA;EAC3D,CAAA;AACF;AA9JgBzE;;;AC5BhB,8BAAO;AACP,oBAAyB;AACzB,gBAAe;AAEf,IAAAwF,sBAAkF;;;ACF3E,IAAMC,OAAN,MAAMA;EACQC;EAAqBC;EAA8BC;EAAtEC,YAAmBH,MAAqBC,UAA8BC,SAAgB;gBAAnEF;oBAAqBC;mBAA8BC;EAEtE;AACF;AAJaH;;;ADMN,IAAMK,UAAmB,IAAIC,cAAAA,QAAAA;AAEpC,eAAsBC,QAAQC,SAAwC;AACpE,QAAMC,YAAY,oBAAIC,IAAAA;AACtB,QAAMC,OAAe,CAAA;AACrBC,0CAAe,WAAW,CAAC,EAAEC,WAAWC,UAAUC,KAAKC,QAAO,MAAuF;AACnJ,UAAMC,KAAK,OAAOH,SAASC,SAAS,aAAaD,SAASC,KAAKG,KAAKJ,QAAAA,IAAY,CAACK,MAAWL,SAASC,OAAOI;AAE5G,QAAIH,SAASI;AACVf,cAAgBe,KAAKP,WAAWI,EAAAA;;AAGhCZ,cAAgBgB,GAAGR,WAAWI,EAAAA;EACnC,CAAA;AAEA,aAAWK,UAAUd;AACnB,UAAMe,gBAAgBD,QAAQb,WAAWE,IAAAA;AAE3C,SAAO;IAAEF;IAAWE;IAAMa,QAAQ,CAACC,IAAI,eAAeC,UAAAA,QAAGC,cAAcF,GAAGG,KAAKC,UAAUlB,KAAKmB,IAAIC,CAAAA,SAAQA,KAAKC,IAAI,CAAA,CAAA;EAAI;AACzH;AAjBsBzB;AAmBtB,eAAegB,gBAAgBD,QAAmBQ,KAA2CnB,MAAc;AACzG,QAAMsB,aAAaC,cAAcZ,MAAAA;AACjC,MAAIR;AACJ,QAAMqB,MAAMb,OAAOc,WAAWC,WAAWf,OAAOgB;AAChD,MAAIR,IAAIS,IAAIJ,GAAAA,GAAM;AAChBrB,eAAWgB,IAAIU,IAAIL,GAAAA;AACnB,QAAI,CAACrB;AACH,YAAM,IAAI2B,MAAM,8BAA8BnB,QAAQ;AAExD,WAAOR;EACT;AACAgB,MAAIY,IAAIP,KAAKQ,MAAAA;AACb,MAAIV,YAAY;AACd,UAAMW,sBAAsB,CAAA;AAC5B,eAAWC,KAAKZ;AACdW,0BAAoBC,KAAK,MAAMtB,gBAAgBU,WAAWY,IAAIf,KAAKnB,IAAAA;AAErEG,eAAW,IAAIQ,OAAAA,GAAUsB,mBAAAA;EAC3B,OACK;AACH9B,eAAW,IAAIQ,OAAAA;EACjB;AACAX,OAAKmC,KAAI,GAAIC,oBAAoBjC,UAAUQ,OAAOgB,MAAMH,GAAAA,CAAAA;AACxD,YAAMa,mCAAclC,QAAAA;AACpBgB,MAAIY,IAAIP,KAAKrB,QAAAA;AAEb,SAAOA;AACT;AA3BeS;AA6Bf,SAASwB,oBAAoBjC,UAAkBwB,MAAcH,KAAa;AACxE,QAAMc,WAAOC,kCAAapC,QAAAA,EAAUqC,OAAOpB,CAAAA,SAAQA,SAAS,SAAA;AAC5D,QAAMqB,gBAAaC,8BAASvC,UAAU,SAAA,KAAc,CAAC;AACrDwC,YAAUF,SAAAA;AACV,SAAOH,KAAKnB,IAAI,CAACe,MAAM;AACrB,UAAMU,YAASF,8BAASvC,UAAU+B,CAAAA,KAAM,CAAC;AACzC,QAAIO,UAAUI,SAASD,MAAMC;AAC3BD,YAAMC,MAAMA,QAAQJ,UAAUI,MAAMA,QAAQD,MAAMC,MAAMA;AAC1DD,UAAMjB,OAAOA;AACbiB,UAAMpB,MAAMA;AACZoB,UAAME,SAASZ;AACf,UAAMa,SAAS,CAAA;AACf,eAAWb,MAAKU,MAAMG,UAAU,CAAA,GAAI;AAClCA,aAAOC,QAAQd,EAAAA;AACf,UAAIA,GAAEe,UAAU;AACd;IACJ;AACAL,UAAMG,SAASA;AACfJ,cAAUC,KAAAA;AACVA,UAAMM,SAASC,OAAOC,OAAO,CAAC,GAAGX,UAAUS,QAAQN,MAAMM,MAAM;AAC/DN,UAAMS,cAAc;SAAI,oBAAIC,IAAI;WAAIb,UAAUY;WAAgBT,MAAMS;OAAY;;AAChFT,UAAMW,SAAS;SAAI,oBAAID,IAAI;WAAIb,UAAUc;WAAWX,MAAMW;OAAO;;AACjEX,UAAMY,eAAe;SAAI,oBAAIF,IAAI;WAAIb,UAAUe;WAAiBZ,MAAMY;OAAa;;AAEnF,WAAO,IAAIC,KAAKb,WAA4Bc,gCAAWvD,UAAU+B,CAAAA,GAAIX,cAAcpB,UAAU+B,CAAAA,KAAM,CAAA,CAAE;EACvG,CAAA;AACF;AA1BSE;AA4BT,SAASb,cAAcZ,QAAaP,KAAuB;AACzD,SAAOuD,QAAQC,YAAY,qBAAqBjD,QAAQP,GAAAA;AAC1D;AAFSmB;AAIT,SAASoB,UAAUC,OAAY;AAC7B,MAAI,CAACA,MAAMM;AACTN,UAAMM,SAAS,CAAC;AAClB,MAAI,CAACN,MAAMS;AACTT,UAAMS,cAAc,CAAA;AACtB,MAAI,CAACT,MAAMW;AACTX,UAAMW,SAAS,CAAA;AACjB,MAAI,CAACX,MAAMY;AACTZ,UAAMY,eAAe,CAAA;AACzB;AATSb;;;AE1FT,IAAAkB,sBAAwC;;;ACAxC,IAAAC,sBAAwC;AAEjC,SAASC,UAAUC,MAAcC,KAAaC,UAAyB;AAC5E,SAAO,CAACC,QAAaC,GAAgBC,UAAkB;AACrDC,yCAAYH,QAAQC,CAAAA;AACpBG,wCAAWJ,QAAQC,GAAG;MACpBI,QAAQ;QAAC;UAAER;UAAMC;UAAKI;UAAOH;QAAS;;IACxC,CAAA;EACF;AACF;AAPgBH;AAST,SAASU,KAAKR,MAAM,IAAIC,UAAoB;AACjD,SAAOH,UAAU,QAAQE,KAAKC,QAAAA;AAChC;AAFgBO;AAGT,SAASC,MAAMT,KAAaC,UAAoB;AACrD,SAAOH,UAAU,SAASE,KAAKC,QAAAA;AACjC;AAFgBQ;AAGT,SAASC,MAAMV,KAAaC,UAAoB;AACrD,SAAOH,UAAU,UAAUE,KAAKC,QAAAA;AAClC;AAFgBS;;;ACjBhB,IAAAC,sBAAwC;AAEjC,SAASC,MAAMC,OAAeC,MAAoB;AACvD,SAAO,CAACC,QAAaC,QAAsB;AACzC,QAAIA,KAAK;AACPC,2CAAYF,QAAQC,GAAAA;AACpBE,0CAAWH,QAAQC,KAAK;QACtBH,OAAO;UACLA;UACAC;QACF;MACF,CAAA;IACF,OACK;AACHG,2CAAYF,OAAOI,WAAW,SAAA;AAC9BD,0CAAWH,OAAOI,WAAW,WAAW;QACtCN,OAAO;UACLA;UACAC;QACF;MACF,CAAA;IACF;EACF;AACF;AArBgBF;AAuBT,SAASQ,IAAIP,OAAe;AACjC,SAAOD,MAAMC,OAAO,KAAA;AACtB;AAFgBO;AAIT,SAASC,KAAKR,OAAe;AAClC,SAAOD,MAAMC,OAAO,MAAA;AACtB;AAFgBQ;AAGT,SAASC,IAAIT,OAAe;AACjC,SAAOD,MAAMC,OAAO,KAAA;AACtB;AAFgBS;AAIT,SAASC,OAAOV,OAAe;AACpC,SAAOD,MAAMC,OAAO,QAAA;AACtB;AAFgBU;AAIT,SAASC,WAAWX,OAAe;AACxC,SAAOD,MAAMC,KAAAA;AACf;AAFgBW;AAIT,SAASC,SAASC,QAAuB;AAC9C,SAAO,CAACX,QAAaC,QAAsB;AACzC,QAAIA,KAAK;AACPC,2CAAYF,QAAQC,GAAAA;AACpBE,0CAAWH,QAAQC,KAAK;QACtBU,QAAQ;aAAIA;;MACd,CAAA;IACF,OACK;AACHT,2CAAYF,OAAOI,WAAW,SAAA;AAC9BD,0CAAWH,OAAOI,WAAW,WAAW;QACtCO,QAAQ;aAAIA;;MACd,CAAA;IACF;EACF;AACF;AAfgBD;AAiBT,SAASE,UAAUC,aAA4B;AACpD,SAAO,CAACb,QAAaC,QAAsB;AACzC,QAAIA,KAAK;AACPC,2CAAYF,QAAQC,GAAAA;AACpBE,0CAAWH,QAAQC,KAAK;QACtBY,aAAa;aAAIA;;MACnB,CAAA;IACF,OACK;AACHX,2CAAYF,OAAOI,WAAW,SAAA;AAC9BD,0CAAWH,OAAOI,WAAW,WAAW;QACtCS,aAAa;aAAIA;;MACnB,CAAA;IACF;EACF;AACF;AAfgBD;AAiBT,SAASE,eAAeC,cAA6B;AAC1D,SAAO,CAACf,QAAaC,QAAsB;AACzC,QAAIA,KAAK;AACPC,2CAAYF,QAAQC,GAAAA;AACpBE,0CAAWH,QAAQC,KAAK;QACtBc,cAAc;aAAIA;;MACpB,CAAA;IACF,OACK;AACHb,2CAAYF,OAAOI,WAAW,SAAA;AAC9BD,0CAAWH,OAAOI,WAAW,WAAW;QACtCW,cAAc;aAAIA;;MACpB,CAAA;IACF;EACF;AACF;AAfgBD;;;AC9EhB,IAAAE,sBAAwC;AAEjC,SAASC,GAAGC,OAAeC,UAAkBC,SAAmC;AACrF,SAAO,CAACC,QAAaC,MAAmB;AACtCC,yCAAYF,QAAQC,CAAAA;AACpBE,wCAAWH,QAAQC,GAAG;MACpBG,IAAI;QACFP;QACAC;QACAC;MACF;IACF,CAAA;EACF;AACF;AAXgBH;;;AHAT,SAASS,OAAOC,SAAc;AAAE;AAAvBD;AAET,SAASE,OAAOC,MAAcC,OAAe;AAClD,SAAO,CAACC,QAAaC,MAAmB;AACtCC,yCAAYF,QAAQC,CAAAA;AACpBE,wCAAWH,QAAQC,GAAG;MACpBG,QAAQ;QAAEN;QAAMC;MAAM;IACxB,CAAA;EACF;AACF;AAPgBF;AAST,SAASQ,OAAOC,KAAaP,OAAY;AAC9C,SAAO,CAACC,QAAaC,MAAmB;AACtCC,yCAAYF,QAAQC,CAAAA;AACpBE,wCAAWH,QAAQC,GAAG;MACpBM,QAAQ;QAAE,CAACD,MAAMP;MAAM;IACzB,CAAA;EACF;AACF;AAPgBM;;;A7BJhB,wBAAc,wBATd;;;AiCAO,IAAMG,UAAU;EACrBC,UAAU;IACRC,OAAO;IACPC,aAAa;EACf;AACF;;;ACCA,eAAsBC,OAAOC,IAAqB,EAAEC,MAAMC,UAAS,GAAyC;AAC1G,aAAWC,QAAQF,MAAM;AACvB,UAAM,EAAEG,OAAOC,MAAMC,QAAQC,IAAI,EAAEC,UAAUC,OAAOC,WAAWC,QAAO,IAAK,CAAC,EAAC,IAAKR,KAAKS;AACvF,UAAMC,MAAM,GAAGR,QAAQC;AACvBQ,YAAQC,WAAWF,OAAOV;AAE1B,UAAM,EACJa,QACAC,SACAC,cACAC,OAAM,IACJL,QAAQM,eAAeP,OAAOC,QAAQM,eAAeP,OAAQC,QAAQM,eAAeP,OAAOQ,UAAUlB,IAAAA;AACzG,UAAMmB,WAAWpB,UAAUqB,IAAIlB,IAAAA;AAC/B,UAAMmB,UAAUF,SAAShB,QAAQmB,KAAKH,QAAAA;AAEtCR,YAAQY,eAAerB,QAAQiB;AAE/B,QAAIlB,OAAO;AACT,YAAM,EAAEK,MAAK,IAAK,MAAMT,GAAG2B,YAAYvB,MAAMA,KAAK;AAClD,UAAIM,aAAaF;AACf,cAAMR,GAAG4B,UAAUnB,OAAOC,WAAWF,QAAAA;AAEvCR,SAAG6B,QAAQzB,MAAMA,OAAO,OAAO0B,QAAQ;AACrC,YAAIA,QAAQ,MAAM;AAChB,gBAAMC,UAAUD,IAAIC,QAAQC,SAAQ;AAEpC,gBAAMpB,OAAOO,OAAOc,SAAS,IAAIC,KAAKC,MAAMJ,OAAAA,IAAWA;AACvD,gBAAMK,cAAc;YAClBC,SAASP;YACTC;YACAO,SAAStC;UAEX;AACA,gBAAMuC,UAAU,IAAIC,gBAAgB3B,KAAKuB,WAAAA;AAEzC,cAAI;AACF,gBAAIK,QAAQC,SAASC;AACnB,oBAAMJ,QAAQK,SAAS5B,MAAAA;AACzB,gBAAIyB,QAAQC,SAASG;AACnB,oBAAMN,QAAQO,eAAe5B,YAAAA;AAE/B,kBAAM6B,OAAO,MAAMR,QAAQS,QAAQ7B,OAAO8B,IAAI,CAAC,EAAEC,KAAKC,SAAQ,MAAO;AACnE,qBAAO;gBAAEC,KAAKC,WAAWzC,MAAMsC,GAAAA;gBAAMC;cAAS;YAChD,CAAA,GAAIlC,OAAAA;AAEJK,qBAASrB,OAAOmC;AAEhB,kBAAMG,QAAQe,QAAQ,MAAM9B,QAAAA,GAAWuB,IAAAA,CAAAA;AACvC/C,eAAGuD,IAAIzB,GAAAA;UACT,SACO0B,GAAP;AACErD,iBAAKsD,SAASC,QAAQlC,CAAAA,aAAWA,SAAQmC,QAAQH,CAAAA,CAAAA;AACjDjB,oBAAQqB,UAAUJ,CAAAA;UACpB;QACF,OACK;QAEL;MACF,GAAG7C,OAAAA;IACL;EACF;AACF;AA7DsBZ;AAoEtB,eAAsB8D,UAA6C7D,IAAqBM,QAAWwD,MAAiD;AAClJ,QAAM,EAAEC,UAAUvD,UAAUC,MAAK,IAAKH,OAAAA;AACtC,MAAIyD;AACF,UAAM/D,GAAGgE,eAAeD,UAAUD,IAAAA;;AAGlC,UAAM9D,GAAG2B,YAAYlB,KAAAA;AAEvB,SAAO,OAAO2C,QAAuB;AACnC,UAAM,EAAEL,KAAI,IAAKzC,OAAO8C,GAAAA;AACxB,UAAMtB,MAAMmC,OAAOC,KAAKhC,KAAKiC,UAAUpB,IAAAA,CAAAA;AACvC,QAAIgB;AACF,YAAM/D,GAAGoE,QAAQL,UAAUvD,UAAUsB,GAAAA;;AAGrC,YAAM9B,GAAGqE,YAAY5D,OAAOqB,GAAAA;EAChC;AACF;AAjBsB+B;;;AC7Df,SAASS,MAAMC,KAAkB;AACtC,QAAM,EAAEC,MAAMC,OAAOC,WAAWC,QAAQC,IAAG,IAAKL;AAChD,SAAO;IAAEI;IAAQC;IAAKJ;IAAMC,OAAOI,OAAOC,KAAKL,KAAAA,EAAOM,SAAS,IAAI,IAAIF,OAAOG,QAAQP,KAAAA,EAAOQ,IAAI,CAAC,CAACC,GAAGC,CAAAA,MAAO,GAAGD,KAAKC,GAAG,EAAEC,KAAK,GAAA,MAAS;IAAIC,QAAQX;EAAU;AAChK;AAHgBJ;AAKT,IAAMgB,QAAQ,2BAAIC,SAAwB;AAC/C,QAAMC,MAAM,CAAA;AACZ,aAAWC,KAAKF,MAAM;AACpB,UAAM,EAAEf,MAAMC,OAAOY,QAAQK,IAAG,IAAKD;AACrCD,QAAIG,KAAK;MAAED;MAAKlB;MAAMC;MAAOY;IAAO,CAAA;EACtC;AAEA,SAAOG;AACT,GARqB;AAYd,SAASI,UAAUC,UAAiH;AAEzI,SAAO,CAACtB,KAAUuB,WAAgC;AAChD,UAAM,EAAElB,KAAKS,QAAQZ,OAAOD,MAAMG,OAAM,IAAKL,MAAMC,GAAAA;AACnD,QAAI,CAACI,QAAQ;AACXoB,cAAQC,KAAK,oDAAA;AACb;IACF;AAEA,UAAMR,MAAM;MAAC,GAAGZ,MAAMS,SAASZ;;AAC/BD,YAAQgB,IAAIG,KAAKnB,IAAAA;AACjBsB,cAAUN,IAAIG,KAAKG,MAAAA;AAEnB,WAAOD,SAASlB,QAAO,GAAIa,GAAAA;EAC7B;AACF;AAfgBI;AAiBT,SAASK,gBAAgBJ,UAAyBK,MAAM,sBAAoI;AAEjM,SAAO,CAACX,MAAqBO,WAAgC;AAC3D,WAAOD,SAASM,KAAKD,KAAK;MACxBE,UAAU;MACVC,MAAMf,MAAAA,GAASC,IAAAA;IACjB,GAAGO,MAAAA;EACL;AACF;AARgBG;AAUT,SAASK,kBAAkBT,UAAyBK,MAAM,sBAAoI;AAEnM,SAAO,CAACX,MAAqBO,WAAgC;AAC3D,WAAOD,SAASM,KAAKD,KAAK;MACxBE,UAAU;MACVC,MAAMf,MAAAA,GAASC,IAAAA;IACjB,GAAGO,MAAAA;EACL;AACF;AARgBQ;AAUT,SAASC,QAAiBF,MAAoC;AACnE,SAAO,OAAOA,SAAS,YAAaA,KAAaG;AACnD;AAFgBD;AAIT,SAASE,GAAGC,OAAeR,MAAM,IAAS;AAC/C,SAAO,GAAGS,iBAAiBD,SAASR;AACtC;AAFgBO;;;ACpET,SAASG,YAAYC,SAAwD;AAClF,SAAO,OAAOC,QAAa;AACzB,UAAM,EAAEC,KAAKC,KAAI,IAAKF;AACtB,UAAMD,QAAQI,YAAYF,GAAAA;AAC1B,UAAMF,QAAQK,YAAYH,KAAKI,OAAOC,KAAKC,KAAKC,UAAUN,IAAAA,CAAAA,CAAAA;EAC5D;AACF;AANgBJ;","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","Context","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","Context","useMiddleware","middlewares","map","m","middlewareRecord","FrameworkException","usePipe","args","reflect","pipe","transform","useFilter","arg","data","filter","defaultPipe","serverFilter","addMiddleware","key","handler","useServerPipe","useServerFilter","RabbitMqContext","Context","useMiddleware","middlewares","map","m","middlewareRecord","FrameworkException","usePipe","args","reflect","pipe","transform","useFilter","arg","data","filter","defaultPipe","rabbitMqFilter","useMqPipe","useMqFilter","Base","context","Compiler","classMap","name","constructor","getContent","content","Object","values","reduce","p","c","createRequest","keys","join","addMethod","args","route","type","method","params","tag","url","replace","genParams","filter","item","key","i","decorators","map","_","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","Context","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","isMerge","Array","isArray","BadRequestException","tags","item","split","startsWith","SERIES_SYMBOL","index","argKey","Number","push","m","Promise","all","resolve","then","import_phecda_core","Meta","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","Meta","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","Define","key","define","Pconfig","rabbitmq","guard","interceptor","bindMQ","ch","meta","moduleMap","item","route","name","method","mq","routeKey","queue","queueName","options","data","tag","Context","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
|
@@ -106,7 +106,7 @@ __name(ConflictException, "ConflictException");
|
|
|
106
106
|
// src/exception/bad-gateway.ts
|
|
107
107
|
var BadGatewayException = class extends HttpException {
|
|
108
108
|
constructor(message) {
|
|
109
|
-
super(message,
|
|
109
|
+
super(message, 502, "Bad Gatrway");
|
|
110
110
|
}
|
|
111
111
|
};
|
|
112
112
|
__name(BadGatewayException, "BadGatewayException");
|
|
@@ -193,7 +193,7 @@ var Phistroy = class {
|
|
|
193
193
|
__name(Phistroy, "Phistroy");
|
|
194
194
|
|
|
195
195
|
// src/context/base.ts
|
|
196
|
-
var
|
|
196
|
+
var _Context = class {
|
|
197
197
|
key;
|
|
198
198
|
data;
|
|
199
199
|
method;
|
|
@@ -206,17 +206,17 @@ var _Pcontext = class {
|
|
|
206
206
|
this.history = new Phistroy();
|
|
207
207
|
}
|
|
208
208
|
static registerGuard(key, handler) {
|
|
209
|
-
|
|
209
|
+
_Context.guardsRecord[key] = handler;
|
|
210
210
|
}
|
|
211
211
|
static registerInterceptor(key, handler) {
|
|
212
|
-
|
|
212
|
+
_Context.interceptorsRecord[key] = handler;
|
|
213
213
|
}
|
|
214
214
|
async useGuard(guards, isMerge = false) {
|
|
215
215
|
for (const guard of guards) {
|
|
216
216
|
if (this.history.record(guard, "guard")) {
|
|
217
|
-
if (!(guard in
|
|
217
|
+
if (!(guard in _Context.guardsRecord))
|
|
218
218
|
throw new FrameworkException(`can't find guard named ${guard}`);
|
|
219
|
-
if (!await
|
|
219
|
+
if (!await _Context.guardsRecord[guard](this.data, isMerge))
|
|
220
220
|
throw new ForbiddenException(`Guard exception--${guard}`);
|
|
221
221
|
}
|
|
222
222
|
}
|
|
@@ -225,9 +225,9 @@ var _Pcontext = class {
|
|
|
225
225
|
const ret = [];
|
|
226
226
|
for (const interceptor of interceptors) {
|
|
227
227
|
if (this.history.record(interceptor, "interceptor")) {
|
|
228
|
-
if (!(interceptor in
|
|
228
|
+
if (!(interceptor in _Context.interceptorsRecord))
|
|
229
229
|
throw new FrameworkException(`can't find guard named ${interceptor}`);
|
|
230
|
-
const post = await
|
|
230
|
+
const post = await _Context.interceptorsRecord[interceptor](this.data, isMerge);
|
|
231
231
|
if (post)
|
|
232
232
|
ret.push(post);
|
|
233
233
|
}
|
|
@@ -242,23 +242,23 @@ var _Pcontext = class {
|
|
|
242
242
|
return data;
|
|
243
243
|
}
|
|
244
244
|
};
|
|
245
|
-
var
|
|
246
|
-
__name(
|
|
247
|
-
__publicField(
|
|
248
|
-
__publicField(
|
|
249
|
-
__publicField(
|
|
250
|
-
__publicField(
|
|
251
|
-
__publicField(
|
|
245
|
+
var Context = _Context;
|
|
246
|
+
__name(Context, "Context");
|
|
247
|
+
__publicField(Context, "metaRecord", {});
|
|
248
|
+
__publicField(Context, "metaDataRecord", {});
|
|
249
|
+
__publicField(Context, "instanceRecord", {});
|
|
250
|
+
__publicField(Context, "guardsRecord", {});
|
|
251
|
+
__publicField(Context, "interceptorsRecord", {});
|
|
252
252
|
function addGuard(key, handler) {
|
|
253
|
-
|
|
253
|
+
Context.registerGuard(key, handler);
|
|
254
254
|
}
|
|
255
255
|
__name(addGuard, "addGuard");
|
|
256
256
|
function addInterceptor(key, handler) {
|
|
257
|
-
|
|
257
|
+
Context.registerInterceptor(key, handler);
|
|
258
258
|
}
|
|
259
259
|
__name(addInterceptor, "addInterceptor");
|
|
260
260
|
function getInstance(tag) {
|
|
261
|
-
return
|
|
261
|
+
return Context.instanceRecord[tag];
|
|
262
262
|
}
|
|
263
263
|
__name(getInstance, "getInstance");
|
|
264
264
|
function parseMeta(meta) {
|
|
@@ -281,7 +281,7 @@ function parseMeta(meta) {
|
|
|
281
281
|
__name(parseMeta, "parseMeta");
|
|
282
282
|
|
|
283
283
|
// src/context/server.ts
|
|
284
|
-
var _ServerContext = class extends
|
|
284
|
+
var _ServerContext = class extends Context {
|
|
285
285
|
static useMiddleware(middlewares) {
|
|
286
286
|
return middlewares.map((m) => {
|
|
287
287
|
if (!(m in _ServerContext.middlewareRecord))
|
|
@@ -318,7 +318,7 @@ function useServerFilter(filter) {
|
|
|
318
318
|
__name(useServerFilter, "useServerFilter");
|
|
319
319
|
|
|
320
320
|
// src/context/micro.ts
|
|
321
|
-
var _RabbitMqContext = class extends
|
|
321
|
+
var _RabbitMqContext = class extends Context {
|
|
322
322
|
static useMiddleware(middlewares) {
|
|
323
323
|
return middlewares.map((m) => {
|
|
324
324
|
if (!(m in _RabbitMqContext.middlewareRecord))
|
|
@@ -357,9 +357,9 @@ var Base = class {
|
|
|
357
357
|
__name(Base, "Base");
|
|
358
358
|
|
|
359
359
|
// src/compiler.ts
|
|
360
|
-
var
|
|
361
|
-
content = "";
|
|
360
|
+
var Compiler = class {
|
|
362
361
|
classMap = {};
|
|
362
|
+
name;
|
|
363
363
|
constructor() {
|
|
364
364
|
}
|
|
365
365
|
getContent() {
|
|
@@ -372,9 +372,17 @@ var Pcompiler = class {
|
|
|
372
372
|
}
|
|
373
373
|
return content;
|
|
374
374
|
}
|
|
375
|
+
createRequest() {
|
|
376
|
+
let content = "import {useC} from 'phecda-server'\n";
|
|
377
|
+
for (const name in this.classMap)
|
|
378
|
+
content += `export const {${Object.keys(this.classMap[name]).join(",")}}=useC(${name})
|
|
379
|
+
`;
|
|
380
|
+
return content;
|
|
381
|
+
}
|
|
375
382
|
addMethod(args) {
|
|
376
383
|
const { route: { route = "/", type = "get" } = {}, name, method, params, tag } = args;
|
|
377
384
|
const url = route.replace(/\/\:([^\/]*)/g, "");
|
|
385
|
+
this.name = name;
|
|
378
386
|
if (!this.classMap[name])
|
|
379
387
|
this.classMap[name] = {};
|
|
380
388
|
this.classMap[name][method] = `
|
|
@@ -388,7 +396,7 @@ return ret
|
|
|
388
396
|
`;
|
|
389
397
|
}
|
|
390
398
|
};
|
|
391
|
-
__name(
|
|
399
|
+
__name(Compiler, "Compiler");
|
|
392
400
|
function genParams(decorators) {
|
|
393
401
|
return decorators.map((_, i) => {
|
|
394
402
|
return `${`arg${i}`}`;
|
|
@@ -427,8 +435,8 @@ function bindApp(app, { meta, moduleMap }, options = {}) {
|
|
|
427
435
|
const instance = moduleMap.get(tag);
|
|
428
436
|
const methodTag = `${tag}-${method}`;
|
|
429
437
|
contextMeta[methodTag] = i;
|
|
430
|
-
|
|
431
|
-
let { guards, reflect, interceptors, params, middlewares } =
|
|
438
|
+
Context.metaRecord[methodTag] = i;
|
|
439
|
+
let { guards, reflect, interceptors, params, middlewares } = Context.metaDataRecord[methodTag] ? Context.metaDataRecord[methodTag] : Context.metaDataRecord[methodTag] = parseMeta(i);
|
|
432
440
|
guards = [
|
|
433
441
|
...globalGuards,
|
|
434
442
|
...guards
|
|
@@ -439,7 +447,7 @@ function bindApp(app, { meta, moduleMap }, options = {}) {
|
|
|
439
447
|
];
|
|
440
448
|
const handler = instance[method].bind(instance);
|
|
441
449
|
methodMap[methodTag] = handler;
|
|
442
|
-
|
|
450
|
+
Context.instanceRecord[name] = instance;
|
|
443
451
|
if (route2) {
|
|
444
452
|
app[route2.type](route2.route, ...ServerContext.useMiddleware(middlewares), async (req, res) => {
|
|
445
453
|
const contextData = {
|
|
@@ -481,7 +489,8 @@ function bindApp(app, { meta, moduleMap }, options = {}) {
|
|
|
481
489
|
const contextData = {
|
|
482
490
|
request: req,
|
|
483
491
|
response: res,
|
|
484
|
-
meta: contextMeta
|
|
492
|
+
meta: contextMeta,
|
|
493
|
+
isMerge: true
|
|
485
494
|
};
|
|
486
495
|
if (!Array.isArray(data))
|
|
487
496
|
return res.json(await ServerContext.useFilter(new BadRequestException("data format should be an array"), contextData));
|
|
@@ -492,7 +501,7 @@ function bindApp(app, { meta, moduleMap }, options = {}) {
|
|
|
492
501
|
for (const item of data) {
|
|
493
502
|
const { tag } = item;
|
|
494
503
|
const [name] = tag.split("-");
|
|
495
|
-
const { guards, reflect, interceptors, params } =
|
|
504
|
+
const { guards, reflect, interceptors, params } = Context.metaDataRecord[tag];
|
|
496
505
|
const instance = moduleMap.get(name);
|
|
497
506
|
try {
|
|
498
507
|
if (!params)
|
|
@@ -516,7 +525,7 @@ function bindApp(app, { meta, moduleMap }, options = {}) {
|
|
|
516
525
|
instance.context = contextData;
|
|
517
526
|
ret.push(await context.usePost(await methodMap[tag](...args)));
|
|
518
527
|
} catch (e) {
|
|
519
|
-
const m =
|
|
528
|
+
const m = Context.metaRecord[tag];
|
|
520
529
|
m.handlers.forEach((handler) => handler.error?.(e));
|
|
521
530
|
ret.push(await context.useFilter(e));
|
|
522
531
|
}
|
|
@@ -528,7 +537,7 @@ function bindApp(app, { meta, moduleMap }, options = {}) {
|
|
|
528
537
|
return new Promise(async (resolve) => {
|
|
529
538
|
const { tag } = item;
|
|
530
539
|
const [name] = tag.split("-");
|
|
531
|
-
const { guards, reflect, interceptors, params } =
|
|
540
|
+
const { guards, reflect, interceptors, params } = Context.metaDataRecord[tag];
|
|
532
541
|
const instance = moduleMap.get(name);
|
|
533
542
|
try {
|
|
534
543
|
if (!params)
|
|
@@ -545,7 +554,7 @@ function bindApp(app, { meta, moduleMap }, options = {}) {
|
|
|
545
554
|
instance.context = contextData;
|
|
546
555
|
resolve(await context.usePost(await methodMap[tag](...args)));
|
|
547
556
|
} catch (e) {
|
|
548
|
-
const m =
|
|
557
|
+
const m = Context.metaRecord[tag];
|
|
549
558
|
m.handlers.forEach((handler) => handler.error?.(e));
|
|
550
559
|
resolve(await context.useFilter(e));
|
|
551
560
|
}
|
|
@@ -566,7 +575,7 @@ import fs from "fs";
|
|
|
566
575
|
import { getExposeKey, getHandler, getState, injectProperty, registerAsync } from "phecda-core";
|
|
567
576
|
|
|
568
577
|
// src/meta.ts
|
|
569
|
-
var
|
|
578
|
+
var Meta = class {
|
|
570
579
|
data;
|
|
571
580
|
handlers;
|
|
572
581
|
reflect;
|
|
@@ -576,7 +585,7 @@ var Pmeta = class {
|
|
|
576
585
|
this.reflect = reflect;
|
|
577
586
|
}
|
|
578
587
|
};
|
|
579
|
-
__name(
|
|
588
|
+
__name(Meta, "Meta");
|
|
580
589
|
|
|
581
590
|
// src/core.ts
|
|
582
591
|
var emitter = new EventEmitter();
|
|
@@ -662,7 +671,7 @@ function getMetaFromInstance(instance, name, tag) {
|
|
|
662
671
|
...state.interceptors
|
|
663
672
|
])
|
|
664
673
|
];
|
|
665
|
-
return new
|
|
674
|
+
return new Meta(state, getHandler(instance, i), getParamtypes(instance, i) || []);
|
|
666
675
|
});
|
|
667
676
|
}
|
|
668
677
|
__name(getMetaFromInstance, "getMetaFromInstance");
|
|
@@ -853,17 +862,17 @@ function Header(name, value) {
|
|
|
853
862
|
};
|
|
854
863
|
}
|
|
855
864
|
__name(Header, "Header");
|
|
856
|
-
function
|
|
865
|
+
function Define(key, value) {
|
|
857
866
|
return (target, k) => {
|
|
858
867
|
setModalVar4(target, k);
|
|
859
868
|
mergeState4(target, k, {
|
|
860
|
-
|
|
869
|
+
define: {
|
|
861
870
|
[key]: value
|
|
862
871
|
}
|
|
863
872
|
});
|
|
864
873
|
};
|
|
865
874
|
}
|
|
866
|
-
__name(
|
|
875
|
+
__name(Define, "Define");
|
|
867
876
|
|
|
868
877
|
// src/index.ts
|
|
869
878
|
export * from "phecda-core";
|
|
@@ -881,11 +890,11 @@ async function bindMQ(ch, { meta, moduleMap }) {
|
|
|
881
890
|
for (const item of meta) {
|
|
882
891
|
const { route, name, method, mq: { routeKey, queue: queueName, options } = {} } = item.data;
|
|
883
892
|
const tag = `${name}-${method}`;
|
|
884
|
-
|
|
885
|
-
const { guards, reflect, interceptors, params } =
|
|
893
|
+
Context.metaRecord[tag] = item;
|
|
894
|
+
const { guards, reflect, interceptors, params } = Context.metaDataRecord[tag] ? Context.metaDataRecord[tag] : Context.metaDataRecord[tag] = parseMeta(item);
|
|
886
895
|
const instance = moduleMap.get(name);
|
|
887
896
|
const handler = instance[method].bind(instance);
|
|
888
|
-
|
|
897
|
+
Context.instanceRecord[name] = instance;
|
|
889
898
|
if (route) {
|
|
890
899
|
const { queue } = await ch.assertQueue(route.route);
|
|
891
900
|
if (queueName && routeKey)
|
|
@@ -1026,8 +1035,11 @@ export {
|
|
|
1026
1035
|
Base,
|
|
1027
1036
|
BaseParam,
|
|
1028
1037
|
Body,
|
|
1038
|
+
Compiler,
|
|
1029
1039
|
ConflictException,
|
|
1040
|
+
Context,
|
|
1030
1041
|
Controller,
|
|
1042
|
+
Define,
|
|
1031
1043
|
Delete,
|
|
1032
1044
|
Factory,
|
|
1033
1045
|
ForbiddenException,
|
|
@@ -1045,9 +1057,6 @@ export {
|
|
|
1045
1057
|
NotFoundException,
|
|
1046
1058
|
Param,
|
|
1047
1059
|
PayloadLargeException,
|
|
1048
|
-
Pcompiler,
|
|
1049
|
-
Pcontext,
|
|
1050
|
-
Pmeta,
|
|
1051
1060
|
Post,
|
|
1052
1061
|
Put,
|
|
1053
1062
|
Query,
|