phecda-server 1.2.0 → 1.2.2

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/README.md CHANGED
@@ -1,7 +1,9 @@
1
1
  # phecda-server
2
- types share between server and client, like `nestjs`
2
+ types share between server and client, `nestjs` format
3
3
 
4
4
  ## express
5
+
6
+ actually, it works as a set of middlewares
5
7
  ### server side
6
8
  ```ts
7
9
  // in test.controller.ts
package/dist/index.d.ts CHANGED
@@ -43,6 +43,14 @@ declare class BadRequestException extends HttpException {
43
43
  constructor(message: string);
44
44
  }
45
45
 
46
+ declare class WrongMetaException extends HttpException {
47
+ constructor(message: string);
48
+ }
49
+
50
+ declare class NotFoundException extends HttpException {
51
+ constructor(message: string);
52
+ }
53
+
46
54
  type ErrorFilter<E extends HttpException = any> = (err: E | Error, contextData: any) => any;
47
55
 
48
56
  declare class Phistroy {
@@ -95,14 +103,15 @@ declare function parseMeta(meta: Pmeta): {
95
103
  declare class ServerContext extends Pcontext {
96
104
  static pipe: ValidatePipe;
97
105
  static filter: ErrorFilter<any>;
98
- static middlewareRecord: Record<string, (...params: any) => boolean>;
99
- static useMiddleware(middlewares: string[]): ((...params: any) => boolean)[];
106
+ static middlewareRecord: Record<string, (...params: any) => any>;
107
+ static useMiddleware(middlewares: string[]): ((...params: any) => any)[];
100
108
  usePipe(args: {
101
109
  arg: any;
102
110
  validate?: boolean;
103
111
  }[], reflect: any[]): Promise<any[]>;
104
112
  useFilter(arg: any): any;
105
113
  }
114
+ declare function addMiddleware(key: string, handler: (...params: any) => any): void;
106
115
  declare function useServerPipe(pipe: ValidatePipe): void;
107
116
  declare function useServerFilter(filter: ErrorFilter): void;
108
117
 
@@ -164,8 +173,9 @@ declare function Post(route: string): any;
164
173
  declare function Put(route: string): any;
165
174
  declare function Delete(route: string): any;
166
175
  declare function Controller(route: string): any;
167
- declare function Guard(guardKey: string): any;
168
- declare function Interceptor(interceptorKey: string): any;
176
+ declare function Guard(...guards: string[]): any;
177
+ declare function Middle(...middlewares: string[]): any;
178
+ declare function Interceptor(...interceptors: string[]): any;
169
179
 
170
180
  declare function MQ(queue: string, routeKey: string, options?: amqplib.Options.Consume): (target: any, k: PropertyKey) => void;
171
181
 
@@ -180,4 +190,4 @@ declare function createPub<T extends (...args: any[]) => any>(ch: amqplib.Channe
180
190
 
181
191
  declare function createMqReq(channel: amqplib.Channel): <R>(arg: R) => Promise<void>;
182
192
 
183
- export { BadRequestException, BaseParam, Body, Construct, Controller, Delete, Factory, ForbiddenException, Get, Guard, Header, HttpException, Inject, Interceptor, MQ, Options, PHandler, Param, Pcompiler, Pcontext, PhecdaEmitter, Pmeta, Post, Put, Query, RabbitMqContext, RequestType, Route, Server, ServerContext, ServerMeta, UndefinedException, ValidateException, ValidatePipe, addGuard, addInterceptor, bindApp, bindMQ, createMqReq, createPub, defaultPipe, emitter, getInstance, parseMeta, useMqFilter, useMqPipe, useServerFilter, useServerPipe };
193
+ export { BadRequestException, BaseParam, Body, Construct, Controller, Delete, Factory, ForbiddenException, Get, Guard, Header, HttpException, Inject, Interceptor, MQ, Middle, NotFoundException, Options, PHandler, Param, Pcompiler, Pcontext, PhecdaEmitter, Pmeta, Post, Put, Query, RabbitMqContext, RequestType, Route, Server, ServerContext, ServerMeta, UndefinedException, ValidateException, ValidatePipe, WrongMetaException, addGuard, addInterceptor, addMiddleware, bindApp, bindMQ, createMqReq, createPub, defaultPipe, emitter, getInstance, parseMeta, useMqFilter, useMqPipe, useServerFilter, useServerPipe };
package/dist/index.js CHANGED
@@ -48,6 +48,8 @@ __export(src_exports, {
48
48
  Inject: () => Inject,
49
49
  Interceptor: () => Interceptor,
50
50
  MQ: () => MQ,
51
+ Middle: () => Middle,
52
+ NotFoundException: () => NotFoundException,
51
53
  Param: () => Param,
52
54
  Pcompiler: () => Pcompiler,
53
55
  Pcontext: () => Pcontext,
@@ -61,8 +63,10 @@ __export(src_exports, {
61
63
  ServerContext: () => ServerContext,
62
64
  UndefinedException: () => UndefinedException,
63
65
  ValidateException: () => ValidateException,
66
+ WrongMetaException: () => WrongMetaException,
64
67
  addGuard: () => addGuard,
65
68
  addInterceptor: () => addInterceptor,
69
+ addMiddleware: () => addMiddleware,
66
70
  bindApp: () => bindApp,
67
71
  bindMQ: () => bindMQ,
68
72
  createMqReq: () => createMqReq,
@@ -164,6 +168,22 @@ var BadRequestException = class extends HttpException {
164
168
  };
165
169
  __name(BadRequestException, "BadRequestException");
166
170
 
171
+ // src/exception/wrong-meta.ts
172
+ var WrongMetaException = class extends HttpException {
173
+ constructor(message) {
174
+ super(message, 500, "Meta is not correct");
175
+ }
176
+ };
177
+ __name(WrongMetaException, "WrongMetaException");
178
+
179
+ // src/exception/not-found.ts
180
+ var NotFoundException = class extends HttpException {
181
+ constructor(message) {
182
+ super(message, 404, "Not Found");
183
+ }
184
+ };
185
+ __name(NotFoundException, "NotFoundException");
186
+
167
187
  // src/filter.ts
168
188
  var serverFilter = /* @__PURE__ */ __name((e) => {
169
189
  if (!(e instanceof HttpException))
@@ -175,14 +195,6 @@ var rabbitMqFilter = /* @__PURE__ */ __name((e, data) => {
175
195
  channel.reject(message, true);
176
196
  }, "rabbitMqFilter");
177
197
 
178
- // src/exception/wrong-meta.ts
179
- var WrongMetaException = class extends HttpException {
180
- constructor(message) {
181
- super(message, 500, "Meta is not correct");
182
- }
183
- };
184
- __name(WrongMetaException, "WrongMetaException");
185
-
186
198
  // src/history.ts
187
199
  var Phistroy = class {
188
200
  guard = [];
@@ -306,6 +318,10 @@ __name(ServerContext, "ServerContext");
306
318
  __publicField(ServerContext, "pipe", defaultPipe);
307
319
  __publicField(ServerContext, "filter", serverFilter);
308
320
  __publicField(ServerContext, "middlewareRecord", {});
321
+ function addMiddleware(key, handler) {
322
+ ServerContext.middlewareRecord[key] = handler;
323
+ }
324
+ __name(addMiddleware, "addMiddleware");
309
325
  function useServerPipe(pipe) {
310
326
  ServerContext.pipe = pipe;
311
327
  }
@@ -412,14 +428,6 @@ __name(resolveDep, "resolveDep");
412
428
  var SERIES_SYMBOL = "__symbol_series__";
413
429
  var REQ_SYMBOL = "__symbol_req__";
414
430
 
415
- // src/exception/not-found.ts
416
- var NotFoundException = class extends HttpException {
417
- constructor(message) {
418
- super(message, 404, "Not Found");
419
- }
420
- };
421
- __name(NotFoundException, "NotFoundException");
422
-
423
431
  // src/server/express.ts
424
432
  function bindApp(app, { meta, moduleMap }, options = {}) {
425
433
  const { globalGuards, globalInterceptors, route, middlewares: proMiddle } = {
@@ -603,7 +611,7 @@ __name(Factory, "Factory");
603
611
  async function buildNestModule(Module, map, meta) {
604
612
  const paramtypes = getParamtypes(Module);
605
613
  let instance;
606
- const name = Module.name;
614
+ const name = Module.prototype._namespace?.__TAG__ || Module.name;
607
615
  if (map.has(name)) {
608
616
  instance = map.get(name);
609
617
  if (!instance)
@@ -759,40 +767,60 @@ function Controller(route) {
759
767
  return Route(route);
760
768
  }
761
769
  __name(Controller, "Controller");
762
- function Guard(guardKey) {
770
+ function Guard(...guards) {
763
771
  return (target, key) => {
764
772
  if (key) {
765
773
  (0, import_phecda_core4.setModalVar)(target, key);
766
774
  (0, import_phecda_core4.mergeState)(target, key, {
767
775
  guards: [
768
- guardKey
776
+ ...guards
769
777
  ]
770
778
  });
771
779
  } else {
772
780
  (0, import_phecda_core4.setModalVar)(target.prototype, "__CLASS");
773
781
  (0, import_phecda_core4.mergeState)(target.prototype, "__CLASS", {
774
782
  guards: [
775
- guardKey
783
+ ...guards
776
784
  ]
777
785
  });
778
786
  }
779
787
  };
780
788
  }
781
789
  __name(Guard, "Guard");
782
- function Interceptor(interceptorKey) {
790
+ function Middle(...middlewares) {
791
+ return (target, key) => {
792
+ if (key) {
793
+ (0, import_phecda_core4.setModalVar)(target, key);
794
+ (0, import_phecda_core4.mergeState)(target, key, {
795
+ middlewares: [
796
+ ...middlewares
797
+ ]
798
+ });
799
+ } else {
800
+ (0, import_phecda_core4.setModalVar)(target.prototype, "__CLASS");
801
+ (0, import_phecda_core4.mergeState)(target.prototype, "__CLASS", {
802
+ middlewares: [
803
+ ...middlewares
804
+ ]
805
+ });
806
+ }
807
+ };
808
+ }
809
+ __name(Middle, "Middle");
810
+ function Interceptor(...interceptors) {
783
811
  return (target, key) => {
784
812
  if (key) {
785
813
  (0, import_phecda_core4.setModalVar)(target, key);
786
814
  (0, import_phecda_core4.mergeState)(target, key, {
787
815
  interceptors: [
788
- interceptorKey
816
+ ...interceptors
789
817
  ]
790
818
  });
791
819
  } else {
792
820
  (0, import_phecda_core4.setModalVar)(target.prototype, "__CLASS");
793
821
  (0, import_phecda_core4.mergeState)(target.prototype, "__CLASS", {
794
822
  interceptors: [
795
- interceptorKey
823
+ ...interceptors
796
824
  ]
797
825
  });
798
826
  }
@@ -1036,6 +1064,8 @@ __name(createMqReq, "createMqReq");
1036
1064
  Inject,
1037
1065
  Interceptor,
1038
1066
  MQ,
1067
+ Middle,
1068
+ NotFoundException,
1039
1069
  Param,
1040
1070
  Pcompiler,
1041
1071
  Pcontext,
@@ -1049,8 +1079,10 @@ __name(createMqReq, "createMqReq");
1049
1079
  ServerContext,
1050
1080
  UndefinedException,
1051
1081
  ValidateException,
1082
+ WrongMetaException,
1052
1083
  addGuard,
1053
1084
  addInterceptor,
1085
+ addMiddleware,
1054
1086
  bindApp,
1055
1087
  bindMQ,
1056
1088
  createMqReq,
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/filter.ts","../src/exception/wrong-meta.ts","../src/history.ts","../src/context/base.ts","../src/context/server.ts","../src/context/micro.ts","../src/compiler.ts","../src/utils.ts","../src/common.ts","../src/exception/not-found.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/vite/index.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 './vite'\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 if (validate && !(arg?.constructor === reflect[i])) {\n throw new ValidateException(`${arg} is not ${reflect[i].name}`)\n }\n else {\n if (isPhecda(reflect[i])) {\n const ret = await plainToClass(reflect[i], arg, { transform: false })\n if (ret.err.length > 0)\n throw new ValidateException(ret.err[0])\n }\n }\n }\n return args.map(item => item.arg)\n },\n} as ValidatePipe\n","export class HttpException extends Error {\n constructor(public message: string, public status: number, public description = 'Http exception') {\n super(message)\n }\n\n get data() {\n return { message: this.message, description: this.description, status: this.status, error: true }\n }\n}\n\n// export class BaseException extends Error {\n// constructor(public message: string, public description = 'Base exception') {\n// super(message)\n// }\n\n// get data() {\n// return { message: this.message, description: this.description, status: this.status, error: true }\n// }\n// }\n","import { HttpException } from './base'\n\nexport class ValidateException extends HttpException {\n constructor(message: string) {\n super(message, 400, 'Validate exception')\n }\n}\n","import { HttpException } from './base'\n\nexport class UndefinedException extends HttpException {\n constructor(message: string) {\n super(message, 500, 'Undefined error')\n }\n}\n","import { HttpException } from './base'\n\nexport class ForbiddenException extends HttpException {\n constructor(message: string) {\n super(message, 403, 'Forbidden resource')\n }\n}\n","import { HttpException } from './base'\n\nexport class BadRequestException extends HttpException {\n constructor(message: string) {\n super(message, 400, 'Bad Request')\n }\n}\n","import { HttpException, UndefinedException } from './exception'\nexport type ErrorFilter<E extends HttpException = any> = (err: E | Error, contextData: any) => any\n\nexport const serverFilter: ErrorFilter = (e: any) => {\n if (!(e instanceof HttpException))\n e = new UndefinedException(e.message || e)\n return e.data\n}\n\nexport const rabbitMqFilter: ErrorFilter = (e: any, data) => {\n const { channel, message } = data\n channel!.reject(message!, true)\n}\n","import { HttpException } from './base'\n\nexport class WrongMetaException extends HttpException {\n constructor(message: string) {\n super(message, 500, 'Meta is not correct')\n }\n}\n","export class Phistroy {\n guard: string[] = []\n interceptor: string[] = []\n record(name: string, type: 'guard' | 'interceptor') {\n if (!this[type].includes(name)) {\n this[type].push(name)\n return true\n }\n return false\n }\n}\n","import { WrongMetaException } from '../exception/wrong-meta'\nimport { Phistroy } from '../history'\nimport { ForbiddenException } from '../exception'\n\nimport type { Pmeta } from '../meta'\n\nexport abstract class Pcontext {\n method: string\n params: string[]\n\n static metaRecord: Record<string, Pmeta> = {}\n static metaDataRecord: Record<string, ReturnType<typeof parseMeta>> = {}\n static instanceRecord: Record<string, any> = {}\n static guardsRecord: Record<string, (req: any, isMerge: boolean) => boolean> = {}\n static interceptorsRecord: Record<string, (req: any, isMerge: boolean) => any > = {}\n // static serverRecord: Record<string, Pcontext> = {}\n post: ((...params: any) => any)[]\n history = new Phistroy()\n constructor(public key: string, public data: any) {\n }\n\n static registerGuard(key: string, handler: any) {\n Pcontext.guardsRecord[key] = handler\n }\n\n static registerInterceptor(key: string, handler: any) {\n Pcontext.interceptorsRecord[key] = handler\n }\n\n async useGuard(guards: string[], isMerge = false) {\n for (const guard of guards) {\n if (this.history.record(guard, 'guard')) {\n if (!(guard in Pcontext.guardsRecord))\n throw new WrongMetaException(`can't find guard named ${guard}`)\n if (!await Pcontext.guardsRecord[guard](this.data, isMerge))\n throw new ForbiddenException(`Guard exception--${guard}`)\n }\n }\n }\n\n async useInterceptor(interceptors: string[], isMerge = false) {\n const ret = []\n for (const interceptor of interceptors) {\n if (this.history.record(interceptor, 'interceptor')) {\n if (!(interceptor in Pcontext.interceptorsRecord))\n throw new WrongMetaException(`can't find guard named ${interceptor}`)\n const post = await Pcontext.interceptorsRecord[interceptor](this.data, isMerge)\n if (post)\n ret.push(post)\n }\n }\n this.post = ret\n }\n\n async usePost(data: any) {\n if (!this.post)\n return data\n for (const cb of this.post)\n data = (await cb(data)) | data\n\n return data\n }\n}\n\nexport function addGuard(key: string, handler: (contextData: any, isMerge: boolean) => boolean) {\n Pcontext.registerGuard(key, handler)\n}\n\nexport function addInterceptor(key: string, handler: (contextData: any, isMerge: boolean) => any) {\n Pcontext.registerInterceptor(key, handler)\n}\nexport function getInstance(tag: string) {\n return Pcontext.instanceRecord[tag]\n}\n\nexport function parseMeta(meta: Pmeta) {\n const { data: { params, guards, interceptors, middlewares }, reflect } = meta\n return {\n guards,\n reflect,\n interceptors,\n middlewares,\n params: params.map((param) => {\n const { type, key, validate } = param\n return { type, key, validate }\n }),\n }\n}\n","import type { ValidatePipe } from '../pipe'\nimport { defaultPipe } from '../pipe'\nimport type { ErrorFilter } from '../filter'\nimport { serverFilter } from '../filter'\nimport { WrongMetaException } from '../exception/wrong-meta'\nimport { Pcontext } from './base'\n\nexport class ServerContext extends Pcontext {\n static pipe = defaultPipe\n static filter = serverFilter\n static middlewareRecord: Record<string, (...params: any) => boolean> = {}\n static useMiddleware(middlewares: string[]) {\n return middlewares.map((m) => {\n if (!(m in ServerContext.middlewareRecord))\n throw new WrongMetaException(`can't find middleware named ${m}`)\n return ServerContext.middlewareRecord[m]\n })\n }\n\n async usePipe(args: { arg: any; validate?: boolean }[], reflect: any[]) {\n return ServerContext.pipe.transform?.(args, reflect)\n }\n\n useFilter(arg: any) {\n return ServerContext.filter(arg, this.data)\n }\n}\nexport function useServerPipe(pipe: ValidatePipe) {\n ServerContext.pipe = pipe\n}\nexport function useServerFilter(filter: ErrorFilter) {\n ServerContext.filter = filter\n}\n","import type { ValidatePipe } from '../pipe'\nimport { defaultPipe } from '../pipe'\nimport type { ErrorFilter } from '../filter'\nimport { rabbitMqFilter } from '../filter'\nimport { WrongMetaException } from '../exception/wrong-meta'\nimport { Pcontext } from './base'\n\nexport class RabbitMqContext extends Pcontext {\n static pipe = defaultPipe\n static filter = rabbitMqFilter\n static middlewareRecord: Record<string, (...params: any) => boolean> = {}\n static useMiddleware(middlewares: string[]) {\n return middlewares.map((m) => {\n if (!(m in RabbitMqContext.middlewareRecord))\n throw new WrongMetaException(`can't find middleware named ${m}`)\n return RabbitMqContext.middlewareRecord[m]\n })\n }\n\n async usePipe(args: { arg: any; validate?: boolean }[], reflect: any[]) {\n return RabbitMqContext.pipe.transform?.(args, reflect)\n }\n\n useFilter(arg: any) {\n return RabbitMqContext.filter(arg, this.data)\n }\n}\nexport function useMqPipe(pipe: ValidatePipe) {\n RabbitMqContext.pipe = pipe\n}\nexport function useMqFilter(filter: ErrorFilter) {\n RabbitMqContext.filter = filter\n}\n","import type { RequestType } 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(className: string, methodName: string, route = '', requestType: RequestType | '' = '', params: { type: string; key: string; index: number }[] = []) {\n const url = route.replace(/\\/\\:([^\\/]*)/g, '')\n if (!this.classMap[className])\n this.classMap[className] = {}\n this.classMap[className][methodName] = `\n ${methodName}(${genParams(params)}){\nconst ret={tag:\"${className}-${methodName}\",body:{},query:{},params:{},realParam:'',method:\"${requestType}\",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, 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)}){\nconst ret={tag:\"${className}-${methodName}\",exchange:\"${exchange}\",routeKey:\"${routeKey}\",queue:\"${queue}\",args:{}}\n${params.reduce((p, c, i) => `${p}ret.args.${c.key}=arg${i}\\n`, '')}\nreturn ret\n }\n `\n }\n}\n\nfunction genParams(decorators: any[]) {\n let index = 0\n return decorators.reduce((p) => {\n return `${`${p}arg${index++}`},`\n }, '')\n}\n","export const isUndefined = (obj: any): obj is undefined =>\n typeof obj === 'undefined'\nexport const isNil = (obj: any): obj is null | undefined =>\n isUndefined(obj) || obj === null\n\nexport const isObject = (fn: any): fn is object =>\n !isNil(fn) && typeof fn === 'object'\n\nexport function resolveDep(ret: any, key: string) {\n if (key)\n return ret?.[key]\n return ret\n}\n\n/**\n * @experiment\n */\nexport class Wrap<F, T> {\n constructor(public v1: F,\n public V2: T) {\n\n }\n\n get value() {\n return this.V2\n }\n}\n","export const SERIES_SYMBOL = '__symbol_series__'\nexport const REQ_SYMBOL = '__symbol_req__'\n","import { HttpException } from './base'\n\nexport class NotFoundException extends HttpException {\n constructor(message: string) {\n super(message, 404, 'Not Found')\n }\n}\n","import type { Express } from 'express'\nimport { Pcontext, ServerContext, parseMeta } from '../context'\nimport { isObject, resolveDep } from '../utils'\nimport { REQ_SYMBOL, SERIES_SYMBOL } from '../common'\nimport type { Factory } from '../core'\nimport { NotFoundException } from '../exception/not-found'\n\nexport interface Options {\n/**\n * 专用路由的值,默认为/__PHECDA_SERVER__,处理phecda-client发出的合并请求\n */\n route?: string\n /**\n * 全局守卫\n */\n globalGuards?: string[]\n /**\n * 全局拦截器\n */\n globalInterceptors?: string[]\n /**\n * 专用路由的中间件,全局中间件请在bindApp以外设置\n */\n middlewares?: string[]\n}\n\nexport function bindApp(app: Express, { meta, moduleMap }: Awaited<ReturnType<typeof Factory>>, options: Options = {}) {\n const { globalGuards, globalInterceptors, route, middlewares: proMiddle } = { route: '/__PHECDA_SERVER__', globalGuards: [], globalInterceptors: [], middlewares: [], ...options } as Required<Options>\n const methodMap = {} as Record<string, (...args: any[]) => any>\n for (const i of meta) {\n const { name, method, route, header } = i.data\n const instance = moduleMap.get(name)!\n const tag = `${name}-${method}`\n\n Pcontext.metaRecord[tag] = i\n let {\n guards,\n reflect,\n interceptors,\n params,\n middlewares,\n } = Pcontext.metaDataRecord[tag] ? Pcontext.metaDataRecord[tag] : (Pcontext.metaDataRecord[tag] = parseMeta(i))\n\n guards = [...globalGuards!, ...guards]\n interceptors = [...globalInterceptors!, ...interceptors]\n\n const handler = instance[method].bind(instance)\n methodMap[tag] = 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 tag,\n response: res,\n }\n const context = new ServerContext(tag, contextData)\n\n try {\n for (const name in header)\n res.set(name, header[name])\n await context.useGuard(guards)\n await context.useInterceptor(interceptors)\n const args = await context.usePipe(params.map(({ type, key, validate }) => {\n return { arg: resolveDep((req as any)[type], key), validate }\n }), reflect)\n instance.meta = contextData\n\n const ret = await context.usePost(await handler(...args))\n if (isObject(ret))\n res.json(ret)\n else\n res.send(String(ret))\n }\n catch (e: any) {\n i.handlers.forEach(handler => handler.error?.(e))\n const err = await context.useFilter(e)\n res.status(err.status).json(err)\n }\n })\n }\n }\n\n app.post(route, (req, _res, next) => {\n (req as any)[REQ_SYMBOL] = true\n next()\n }, ...ServerContext.useMiddleware(proMiddle), async (req, res) => {\n const contextData = {\n request: req,\n response: res,\n }\n const context = new ServerContext(route, contextData)\n const ret = [] as any[]\n\n const { body: { category, data } } = req\n if (category === 'series') {\n for (const item of data) {\n const { tag } = item\n const [name] = tag.split('-')\n const {\n guards,\n reflect,\n interceptors,\n params,\n } = Pcontext.metaDataRecord[tag]\n const instance = moduleMap.get(name)\n\n try {\n if (!params)\n throw new NotFoundException(`\"${tag}\" doesn't exist`)\n\n await context.useGuard(guards, true)\n await context.useInterceptor(interceptors, true)\n const args = await context.usePipe(params.map(({ type, key, validate }) => {\n const arg = resolveDep(item[type], key)\n if (typeof arg === 'string' && arg.startsWith(SERIES_SYMBOL)) {\n const [, index, argKey] = arg.split('@')\n return { arg: resolveDep(ret[Number(index)], argKey || key), validate }\n }\n\n return { arg, validate }\n }), reflect) as any\n instance.meta = contextData\n\n ret.push(await context.usePost(await methodMap[tag](...args)))\n }\n catch (e: any) {\n const m = Pcontext.metaRecord[tag]\n m.handlers.forEach(handler => handler.error?.(e))\n ret.push(await context.useFilter(e))\n }\n }\n return res.json(ret)\n }\n if (category === 'parallel') {\n return Promise.all(data.map((item: any) => {\n // eslint-disable-next-line no-async-promise-executor\n return new Promise(async (resolve) => {\n const { tag } = item\n const [name] = tag.split('-')\n const {\n guards,\n reflect,\n interceptors,\n params,\n } = Pcontext.metaDataRecord[tag]\n const instance = moduleMap.get(name)\n\n try {\n if (!params)\n throw new NotFoundException(`\"${tag}\" doesn't exist`)\n\n await context.useGuard(guards, true)\n await context.useInterceptor(interceptors, true)\n const args = await context.usePipe(params.map(({ type, key, validate }) => {\n const arg = resolveDep(item[type], key)\n return { arg, validate }\n }), reflect) as any\n instance.meta = contextData\n resolve(await context.usePost(await methodMap[tag](...args)))\n }\n catch (e: any) {\n const m = Pcontext.metaRecord[tag]\n m.handlers.forEach(handler => handler.error?.(e))\n resolve(await context.useFilter(e))\n }\n })\n })).then((ret) => {\n res.json(ret)\n })\n }\n\n res.json(await context.useFilter(new NotFoundException('category should be \\'parallel\\' or \\'series\\'')))\n })\n}\n","import 'reflect-metadata'\nimport EventEmitter from 'events'\nimport type { Phecda } from 'phecda-core'\nimport { getExposeKey, getHandler, getState, injectProperty, registerAsync } from 'phecda-core'\nimport type { Construct, PhecdaEmitter, ServerMeta } from './types'\nimport { Pmeta } from './meta'\n\n// TODO: support both phecda-emitter types and origin emitter type in future\nexport const emitter: PhecdaEmitter = new EventEmitter() as any\n\nexport async function Factory<T>(Modules: Construct<T>[]) {\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) as InstanceType<Construct<T>>\n\n return { moduleMap, meta }\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 name = Module.name\n if (map.has(name)) {\n instance = map.get(name)\n if (!instance)\n throw new Error(`exist Circular Module dep--${Module}`)\n\n return instance\n }\n map.set(name, undefined)\n if (paramtypes) {\n for (const i in paramtypes)\n paramtypes[i] = await buildNestModule(paramtypes[i], map, meta)\n\n instance = new Module(...paramtypes)\n }\n else {\n instance = new Module()\n }\n meta.push(...getMetaFromInstance(instance, name))\n await registerAsync(instance)\n map.set(name, instance)\n\n return instance\n}\n\nfunction getMetaFromInstance(instance: Phecda, name: 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.method = i\n const params = [] as any[]\n for (const i of state.params || []) {\n params.unshift(i)\n if (i.index === 0)\n break\n }\n state.params = params\n initState(state)\n state.header = Object.assign({}, baseState.header, state.header)\n state.middlewares = [...new Set([...baseState.middlewares, ...state.middlewares])]\n state.guards = [...new Set([...baseState.guards, ...state.guards])]\n state.interceptors = [...new Set([...baseState.interceptors, ...state.interceptors])]\n\n return new Pmeta(state as unknown as ServerMeta, getHandler(instance, i), getParamtypes(instance, i) || [])\n })\n}\n\nfunction getParamtypes(Module: any, key?: string | symbol) {\n return Reflect.getMetadata('design:paramtypes', Module, key!)\n}\n\nfunction initState(state: any) {\n if (!state.header)\n state.header = {}\n if (!state.middlewares)\n state.middlewares = []\n if (!state.guards)\n state.guards = []\n if (!state.interceptors)\n state.interceptors = []\n}\n","import type { PHandler, ServerMeta } from './types'\n\nexport class Pmeta {\n constructor(public data: ServerMeta, public handlers: PHandler[], public reflect: any[]) {\n\n }\n}\n","import { mergeState, setModalVar } from 'phecda-core'\n\nexport function Inject(_target: any) { }\n\nexport function Header(name: string, value: string) {\n return (target: any, k: PropertyKey) => {\n setModalVar(target, k)\n mergeState(target, k, {\n header: { name, value },\n })\n }\n}\n\nexport * from './param'\nexport * from './route'\n\nexport * from './micro'\n","import { mergeState, setModalVar } from 'phecda-core'\n\nexport function BaseParam(type: string, key: string, validate?: boolean): any {\n return (target: any, k: PropertyKey, index: number) => {\n setModalVar(target, k)\n mergeState(target, k, {\n params: [{ type, key, index, validate }],\n })\n }\n}\n\nexport function Body(key = '', validate?: boolean) {\n return BaseParam('body', key, validate)\n}\nexport function Query(key: string, validate?: boolean) {\n return BaseParam('query', key, validate)\n}\nexport function Param(key: string, validate?: boolean) {\n return BaseParam('params', key, validate)\n}\n","import { mergeState, setModalVar } from 'phecda-core'\n\nexport function Route(route: string, type?: string): any {\n return (target: any, key?: PropertyKey) => {\n if (key) {\n setModalVar(target, key)\n mergeState(target, key, {\n route: {\n route,\n type,\n },\n })\n }\n else {\n setModalVar(target.prototype, '__CLASS')\n mergeState(target.prototype, '__CLASS', {\n route: {\n route,\n type,\n },\n })\n }\n }\n}\n\nexport function Get(route: string) {\n return Route(route, 'get')\n}\n\nexport function Post(route: string) {\n return Route(route, 'post')\n}\nexport function Put(route: string) {\n return Route(route, 'put')\n}\n\nexport function Delete(route: string) {\n return Route(route, 'delete')\n}\n\nexport function Controller(route: string) {\n return Route(route)\n}\n\nexport function Guard(guardKey: string): any {\n return (target: any, key?: PropertyKey) => {\n if (key) {\n setModalVar(target, key)\n mergeState(target, key, {\n guards: [guardKey],\n })\n }\n else {\n setModalVar(target.prototype, '__CLASS')\n mergeState(target.prototype, '__CLASS', {\n guards: [guardKey],\n })\n }\n }\n}\n\nexport function Interceptor(interceptorKey: string): any {\n return (target: any, key?: PropertyKey) => {\n if (key) {\n setModalVar(target, key)\n mergeState(target, key, {\n interceptors: [interceptorKey],\n })\n }\n else {\n setModalVar(target.prototype, '__CLASS')\n mergeState(target.prototype, '__CLASS', {\n interceptors: [interceptorKey],\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","import { resolve } from 'path'\nimport type { PluginOption } from 'vite'\nimport { normalizePath } from 'vite'\nimport { Pcompiler } from '../compiler'\nimport type { ServerMeta } from '../types'\nexport function Server(localPath: string): PluginOption {\n let root: string\n let metaPath: string\n return {\n name: 'phecda-server-vite:client',\n enforce: 'pre',\n configResolved(config) {\n root = config.root || process.cwd()\n metaPath = normalizePath(resolve(root, localPath))\n },\n resolveId(id) {\n if (id.endsWith('.controller'))\n return metaPath\n },\n transform(code, id) {\n if (id === metaPath) {\n const meta = JSON.parse(code) as ServerMeta[]\n const compiler = new Pcompiler()\n\n for (const i of meta)\n compiler.addMethod(i.name, i.method, i.route?.route, i.route?.type, i.params)\n return {\n code: compiler.getContent(),\n }\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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;;AFKN,IAAMI,cAAc;EACzB,MAAMC,UAAUC,MAAyCC,SAAgB;AACvE,eAAWC,KAAKF,MAAM;AACpB,YAAM,EAAEG,UAAUC,IAAG,IAAKJ,KAAKE;AAC/B,UAAIC,aAAa;AACf;AACF,UAAIA,YAAY,EAAEC,KAAKC,gBAAgBJ,QAAQC,KAAK;AAClD,cAAM,IAAII,kBAAkB,GAAGF,cAAcH,QAAQC,GAAGK,MAAM;MAChE,OACK;AACH,gBAAIC,6BAASP,QAAQC,EAAE,GAAG;AACxB,gBAAMO,MAAM,UAAMC,iCAAaT,QAAQC,IAAIE,KAAK;YAAEL,WAAW;UAAM,CAAA;AACnE,cAAIU,IAAIE,IAAIC,SAAS;AACnB,kBAAM,IAAIN,kBAAkBG,IAAIE,IAAI,EAAE;QAC1C;MACF;IACF;AACA,WAAOX,KAAKa,IAAIC,CAAAA,SAAQA,KAAKV,GAAG;EAClC;AACF;;;AGxBO,IAAMW,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;;;ACCN,IAAMI,eAA4B,wBAACC,MAAW;AACnD,MAAI,EAAEA,aAAaC;AACjBD,QAAI,IAAIE,mBAAmBF,EAAEG,WAAWH,CAAAA;AAC1C,SAAOA,EAAEI;AACX,GAJyC;AAMlC,IAAMC,iBAA8B,wBAACL,GAAQI,SAAS;AAC3D,QAAM,EAAEE,SAASH,QAAO,IAAKC;AAC7BE,UAASC,OAAOJ,SAAU,IAAI;AAChC,GAH2C;;;ACPpC,IAAMK,qBAAN,cAAiCC,cAAAA;EACtCC,YAAYC,SAAiB;AAC3B,UAAMA,SAAS,KAAK,qBAAA;EACtB;AACF;AAJaH;;;ACFN,IAAMI,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,YAAf,MAAeA;EAYDC;EAAoBC;EAXvCC;EACAC;EAQAC;EACAC;EACAC,YAAmBN,KAAoBC,MAAW;eAA/BD;gBAAoBC;SADvCI,UAAU,IAAIE,SAAAA;EAEd;EAEA,OAAOC,cAAcR,KAAaS,SAAc;AAC9CV,cAASW,aAAaV,OAAOS;EAC/B;EAEA,OAAOE,oBAAoBX,KAAaS,SAAc;AACpDV,cAASa,mBAAmBZ,OAAOS;EACrC;EAEA,MAAMI,SAASC,QAAkBC,UAAU,OAAO;AAChD,eAAWC,SAASF,QAAQ;AAC1B,UAAI,KAAKT,QAAQY,OAAOD,OAAO,OAAA,GAAU;AACvC,YAAI,EAAEA,SAASjB,UAASW;AACtB,gBAAM,IAAIQ,mBAAmB,0BAA0BF,OAAO;AAChE,YAAI,CAAC,MAAMjB,UAASW,aAAaM,OAAO,KAAKf,MAAMc,OAAAA;AACjD,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,UAASa;AAC5B,gBAAM,IAAIM,mBAAmB,0BAA0BK,aAAa;AACtE,cAAMnB,OAAO,MAAML,UAASa,mBAAmBW,aAAa,KAAKtB,MAAMc,OAAAA;AACvE,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;AAxDO,IAAeF,WAAf;AAAeA;AAIpB,cAJoBA,UAIb4B,cAAoC,CAAC;AAC5C,cALoB5B,UAKb6B,kBAA+D,CAAC;AACvE,cANoB7B,UAMb8B,kBAAsC,CAAC;AAC9C,cAPoB9B,UAObW,gBAAwE,CAAC;AAChF,cARoBX,UAQba,sBAA2E,CAAC;AAkD9E,SAASkB,SAAS9B,KAAaS,SAA0D;AAC9FV,WAASS,cAAcR,KAAKS,OAAAA;AAC9B;AAFgBqB;AAIT,SAASC,eAAe/B,KAAaS,SAAsD;AAChGV,WAASY,oBAAoBX,KAAKS,OAAAA;AACpC;AAFgBsB;AAGT,SAASC,YAAYC,KAAa;AACvC,SAAOlC,SAAS8B,eAAeI;AACjC;AAFgBD;AAIT,SAASE,UAAUC,MAAa;AACrC,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;;;ACpET,IAAMQ,iBAAN,cAA4BC,SAAAA;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;EAEAG,UAAUC,KAAU;AAClB,WAAOd,eAAce,OAAOD,KAAK,KAAKE,IAAI;EAC5C;AACF;AAnBO,IAAMhB,gBAAN;AAAMA;AACX,cADWA,eACJW,QAAOM;AACd,cAFWjB,eAEJe,UAASG;AAChB,cAHWlB,eAGJM,oBAAgE,CAAC;AAiBnE,SAASa,cAAcR,MAAoB;AAChDX,gBAAcW,OAAOA;AACvB;AAFgBQ;AAGT,SAASC,gBAAgBL,QAAqB;AACnDf,gBAAce,SAASA;AACzB;AAFgBK;;;ACvBT,IAAMC,mBAAN,cAA8BC,SAAAA;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;EAEAG,UAAUC,KAAU;AAClB,WAAOd,iBAAgBe,OAAOD,KAAK,KAAKE,IAAI;EAC9C;AACF;AAnBO,IAAMhB,kBAAN;AAAMA;AACX,cADWA,iBACJW,QAAOM;AACd,cAFWjB,iBAEJe,UAASG;AAChB,cAHWlB,iBAGJM,oBAAgE,CAAC;AAiBnE,SAASa,UAAUR,MAAoB;AAC5CX,kBAAgBW,OAAOA;AACzB;AAFgBQ;AAGT,SAASC,YAAYL,QAAqB;AAC/Cf,kBAAgBe,SAASA;AAC3B;AAFgBK;;;AC5BT,IAAMC,YAAN,MAAMA;EACXC,UAAU;EACVC,WAAsD,CAAC;EACvDC,cAAc;EAAE;EAEhBC,aAAa;AACX,QAAIH,UAAU;AAEd,eAAWI,QAAQ,KAAKH,UAAU;AAChCD,iBAAW;uBACMI;cACTC,OAAOC,OAAO,KAAKL,SAASG,KAAK,EAAEG,OAAO,CAACC,GAAGC,MAAMD,IAAIC,CAAAA;;IAElE;AACA,WAAOT;EACT;EAEAU,UAAUC,WAAmBC,YAAoBC,QAAQ,IAAIC,cAAgC,IAAIC,SAAyD,CAAA,GAAI;AAC5J,UAAMC,MAAMH,MAAMI,QAAQ,iBAAiB,EAAA;AAC3C,QAAI,CAAC,KAAKhB,SAASU;AACjB,WAAKV,SAASU,aAAa,CAAC;AAC9B,SAAKV,SAASU,WAAWC,cAAc;MACrCA,cAAcM,UAAUH,MAAAA;kBACZJ,aAAaC,+DAA+DE,qBAAqBE;EACjHD,OAAOI,OAAOC,CAAAA,SAAQA,KAAKC,GAAG,EAAEd,OAAO,CAACC,GAAGC,GAAGa,MAAM,GAAGd,QAAQC,EAAEc,QAAQd,EAAEY,UAAUC;EAAMb,EAAEc,SAAS,WAAW,yBAAyBD;IAAQ,MAAM,EAAA;;;;EAIxJ;EAEAE,YAAYb,WAAmBC,YAAoBa,WAAW,IAAIC,WAAW,IAAIC,QAAQ,IAAIZ,SAAyD,CAAA,GAAI;AACxJ,QAAI,CAAC,KAAKd,SAASU;AACjB,WAAKV,SAASU,aAAa,CAAC;AAC9B,SAAKV,SAASU,WAAWC,cAAc;MACrCA,cAAcM,UAAUH,MAAAA;kBACZJ,aAAaC,yBAAyBa,uBAAuBC,oBAAoBC;EACjGZ,OAAOR,OAAO,CAACC,GAAGC,GAAGa,MAAM,GAAGd,aAAaC,EAAEY,UAAUC;GAAO,EAAA;;;;EAI9D;AACF;AAzCavB;AA2Cb,SAASmB,UAAUU,YAAmB;AACpC,MAAIC,QAAQ;AACZ,SAAOD,WAAWrB,OAAO,CAACC,MAAM;AAC9B,WAAO,GAAG,GAAGA,OAAOqB;EACtB,GAAG,EAAA;AACL;AALSX;;;AC7CF,IAAMY,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;;;ACRT,IAAMG,gBAAgB;AACtB,IAAMC,aAAa;;;ACCnB,IAAMC,oBAAN,cAAgCC,cAAAA;EACrCC,YAAYC,SAAiB;AAC3B,UAAMA,SAAS,KAAK,WAAA;EACtB;AACF;AAJaH;;;ACwBN,SAASI,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,aAAWC,KAAKT,MAAM;AACpB,UAAM,EAAEU,MAAMC,QAAQN,OAAAA,QAAOO,OAAM,IAAKH,EAAEI;AAC1C,UAAMC,WAAWb,UAAUc,IAAIL,IAAAA;AAC/B,UAAMM,MAAM,GAAGN,QAAQC;AAEvBM,aAASC,WAAWF,OAAOP;AAC3B,QAAI,EACFU,QACAC,SACAC,cACAC,QACAhB,YAAW,IACTW,SAASM,eAAeP,OAAOC,SAASM,eAAeP,OAAQC,SAASM,eAAeP,OAAOQ,UAAUf,CAAAA;AAE5GU,aAAS;SAAIhB;SAAkBgB;;AAC/BE,mBAAe;SAAIjB;SAAwBiB;;AAE3C,UAAMI,UAAUX,SAASH,QAAQe,KAAKZ,QAAAA;AACtCN,cAAUQ,OAAOS;AACjBR,aAASU,eAAejB,QAAQI;AAChC,QAAIT,QAAO;AACTN,UAAIM,OAAMuB,MAAMvB,OAAMA,OAAK,GAAKwB,cAAcC,cAAcxB,WAAAA,GAAc,OAAOyB,KAAKC,QAAQ;AAC5F,cAAMC,cAAc;UAClBC,SAASH;UACTf;UACAmB,UAAUH;QACZ;AACA,cAAMI,UAAU,IAAIP,cAAcb,KAAKiB,WAAAA;AAEvC,YAAI;AACF,qBAAWvB,SAAQE;AACjBoB,gBAAIK,IAAI3B,OAAME,OAAOF,MAAK;AAC5B,gBAAM0B,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,mBAASd,OAAOiC;AAEhB,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;AACE5C,YAAE6C,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;AAEA1D,MAAI6D,KAAKvD,OAAO,CAAC0B,KAAK8B,MAAMC,SAAS;AAClC/B,QAAYgC,cAAc;AAC3BD,SAAAA;EACF,GAAA,GAAMjC,cAAcC,cAAcvB,SAAAA,GAAY,OAAOwB,KAAKC,QAAQ;AAChE,UAAMC,cAAc;MAClBC,SAASH;MACTI,UAAUH;IACZ;AACA,UAAMI,UAAU,IAAIP,cAAcxB,OAAO4B,WAAAA;AACzC,UAAMc,MAAM,CAAA;AAEZ,UAAM,EAAEiB,MAAM,EAAEC,UAAUpD,KAAI,EAAE,IAAKkB;AACrC,QAAIkC,aAAa,UAAU;AACzB,iBAAWC,QAAQrD,MAAM;AACvB,cAAM,EAAEG,IAAG,IAAKkD;AAChB,cAAM,CAACxD,IAAAA,IAAQM,IAAImD,MAAM,GAAA;AACzB,cAAM,EACJhD,QACAC,SACAC,cACAC,OAAM,IACJL,SAASM,eAAeP;AAC5B,cAAMF,WAAWb,UAAUc,IAAIL,IAAAA;AAE/B,YAAI;AACF,cAAI,CAACY;AACH,kBAAM,IAAI8C,kBAAkB,IAAIpD,oBAAoB;AAEtD,gBAAMoB,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,WAAWoB,KAAKtC,OAAOe,GAAAA;AACnC,gBAAI,OAAOE,QAAQ,YAAYA,IAAIwB,WAAWC,aAAAA,GAAgB;AAC5D,oBAAM,CAAA,EAAGC,OAAOC,MAAAA,IAAU3B,IAAIsB,MAAM,GAAA;AACpC,qBAAO;gBAAEtB,KAAKC,WAAWC,IAAI0B,OAAOF,KAAAA,IAASC,UAAU7B,GAAAA;gBAAMC;cAAS;YACxE;AAEA,mBAAO;cAAEC;cAAKD;YAAS;UACzB,CAAA,GAAIxB,OAAAA;AACJN,mBAASd,OAAOiC;AAEhBc,cAAI2B,KAAK,MAAMtC,QAAQY,QAAQ,MAAMxC,UAAUQ,KAAI,GAAIwB,IAAAA,CAAAA,CAAAA;QACzD,SACOa,GAAP;AACE,gBAAMsB,IAAI1D,SAASC,WAAWF;AAC9B2D,YAAErB,SAASC,QAAQ9B,CAAAA,YAAWA,QAAQ+B,QAAQH,CAAAA,CAAAA;AAC9CN,cAAI2B,KAAK,MAAMtC,QAAQsB,UAAUL,CAAAA,CAAAA;QACnC;MACF;AACA,aAAOrB,IAAIkB,KAAKH,GAAAA;IAClB;AACA,QAAIkB,aAAa,YAAY;AAC3B,aAAOW,QAAQC,IAAIhE,KAAK6B,IAAI,CAACwB,SAAc;AAEzC,eAAO,IAAIU,QAAQ,OAAOE,aAAY;AACpC,gBAAM,EAAE9D,IAAG,IAAKkD;AAChB,gBAAM,CAACxD,IAAAA,IAAQM,IAAImD,MAAM,GAAA;AACzB,gBAAM,EACJhD,QACAC,SACAC,cACAC,OAAM,IACJL,SAASM,eAAeP;AAC5B,gBAAMF,WAAWb,UAAUc,IAAIL,IAAAA;AAE/B,cAAI;AACF,gBAAI,CAACY;AACH,oBAAM,IAAI8C,kBAAkB,IAAIpD,oBAAoB;AAEtD,kBAAMoB,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,WAAWoB,KAAKtC,OAAOe,GAAAA;AACnC,qBAAO;gBAAEE;gBAAKD;cAAS;YACzB,CAAA,GAAIxB,OAAAA;AACJN,qBAASd,OAAOiC;AAChB6C,YAAAA,SAAQ,MAAM1C,QAAQY,QAAQ,MAAMxC,UAAUQ,KAAI,GAAIwB,IAAAA,CAAAA,CAAAA;UACxD,SACOa,GAAP;AACE,kBAAMsB,IAAI1D,SAASC,WAAWF;AAC9B2D,cAAErB,SAASC,QAAQ9B,CAAAA,YAAWA,QAAQ+B,QAAQH,CAAAA,CAAAA;AAC9CyB,YAAAA,SAAQ,MAAM1C,QAAQsB,UAAUL,CAAAA,CAAAA;UAClC;QACF,CAAA;MACF,CAAA,CAAA,EAAI0B,KAAK,CAAChC,SAAQ;AAChBf,YAAIkB,KAAKH,IAAAA;MACX,CAAA;IACF;AAEAf,QAAIkB,KAAK,MAAMd,QAAQsB,UAAU,IAAIU,kBAAkB,2CAAA,CAAA,CAAA;EACzD,CAAA;AACF;AApJgBtE;;;AC1BhB,8BAAO;AACP,oBAAyB;AAEzB,IAAAkF,sBAAkF;;;ACD3E,IAAMC,QAAN,MAAMA;EACQC;EAAyBC;EAA6BC;EAAzEC,YAAmBH,MAAyBC,UAA6BC,SAAgB;gBAAtEF;oBAAyBC;mBAA6BC;EAEzE;AACF;AAJaH;;;ADMN,IAAMK,UAAyB,IAAIC,cAAAA,QAAAA;AAE1C,eAAsBC,QAAWC,SAAyB;AACxD,QAAMC,YAAY,oBAAIC,IAAAA;AACtB,QAAMC,OAAgB,CAAA;AACtBC,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;EAAK;AAC3B;AAjBsBJ;AAmBtB,eAAegB,gBAAgBD,QAAmBE,KAA2Cb,MAAe;AAC1G,QAAMc,aAAaC,cAAcJ,MAAAA;AACjC,MAAIR;AACJ,QAAMa,OAAOL,OAAOK;AACpB,MAAIH,IAAII,IAAID,IAAAA,GAAO;AACjBb,eAAWU,IAAIK,IAAIF,IAAAA;AACnB,QAAI,CAACb;AACH,YAAM,IAAIgB,MAAM,8BAA8BR,QAAQ;AAExD,WAAOR;EACT;AACAU,MAAIO,IAAIJ,MAAMK,MAAAA;AACd,MAAIP,YAAY;AACd,eAAWQ,KAAKR;AACdA,iBAAWQ,KAAK,MAAMV,gBAAgBE,WAAWQ,IAAIT,KAAKb,IAAAA;AAE5DG,eAAW,IAAIQ,OAAAA,GAAUG,UAAAA;EAC3B,OACK;AACHX,eAAW,IAAIQ,OAAAA;EACjB;AACAX,OAAKuB,KAAI,GAAIC,oBAAoBrB,UAAUa,IAAAA,CAAAA;AAC3C,YAAMS,mCAActB,QAAAA;AACpBU,MAAIO,IAAIJ,MAAMb,QAAAA;AAEd,SAAOA;AACT;AA1BeS;AA4Bf,SAASY,oBAAoBrB,UAAkBa,MAAc;AAC3D,QAAMU,WAAOC,kCAAaxB,QAAAA,EAAUyB,OAAOC,CAAAA,SAAQA,SAAS,SAAA;AAC5D,QAAMC,gBAAaC,8BAAS5B,UAAU,SAAA,KAAc,CAAC;AACrD6B,YAAUF,SAAAA;AACV,SAAOJ,KAAKb,IAAI,CAACS,MAAM;AACrB,UAAMW,YAASF,8BAAS5B,UAAUmB,CAAAA,KAAM,CAAC;AACzC,QAAIQ,UAAUI,SAASD,MAAMC;AAC3BD,YAAMC,MAAMA,QAAQJ,UAAUI,MAAMA,QAAQD,MAAMC,MAAMA;AAC1DD,UAAMjB,OAAOA;AACbiB,UAAME,SAASb;AACf,UAAMc,SAAS,CAAA;AACf,eAAWd,MAAKW,MAAMG,UAAU,CAAA,GAAI;AAClCA,aAAOC,QAAQf,EAAAA;AACf,UAAIA,GAAEgB,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,MAAMb,WAAgCc,gCAAW5C,UAAUmB,CAAAA,GAAIP,cAAcZ,UAAUmB,CAAAA,KAAM,CAAA,CAAE;EAC5G,CAAA;AACF;AAzBSE;AA2BT,SAAST,cAAcJ,QAAaP,KAAuB;AACzD,SAAO4C,QAAQC,YAAY,qBAAqBtC,QAAQP,GAAAA;AAC1D;AAFSW;AAIT,SAASiB,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;;;AExFT,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,MAAMC,UAAuB;AAC3C,SAAO,CAACX,QAAaC,QAAsB;AACzC,QAAIA,KAAK;AACPC,2CAAYF,QAAQC,GAAAA;AACpBE,0CAAWH,QAAQC,KAAK;QACtBW,QAAQ;UAACD;;MACX,CAAA;IACF,OACK;AACHT,2CAAYF,OAAOI,WAAW,SAAA;AAC9BD,0CAAWH,OAAOI,WAAW,WAAW;QACtCQ,QAAQ;UAACD;;MACX,CAAA;IACF;EACF;AACF;AAfgBD;AAiBT,SAASG,YAAYC,gBAA6B;AACvD,SAAO,CAACd,QAAaC,QAAsB;AACzC,QAAIA,KAAK;AACPC,2CAAYF,QAAQC,GAAAA;AACpBE,0CAAWH,QAAQC,KAAK;QACtBc,cAAc;UAACD;;MACjB,CAAA;IACF,OACK;AACHZ,2CAAYF,OAAOI,WAAW,SAAA;AAC9BD,0CAAWH,OAAOI,WAAW,WAAW;QACtCW,cAAc;UAACD;;MACjB,CAAA;IACF;EACF;AACF;AAfgBD;;;AC7DhB,IAAAG,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;;;AIJhB,kBAAwB;AAExB,kBAA8B;AAGvB,SAASQ,OAAOC,WAAiC;AACtD,MAAIC;AACJ,MAAIC;AACJ,SAAO;IACLC,MAAM;IACNC,SAAS;IACTC,eAAeC,QAAQ;AACrBL,aAAOK,OAAOL,QAAQM,QAAQC,IAAG;AACjCN,qBAAWO,+BAAcC,qBAAQT,MAAMD,SAAAA,CAAAA;IACzC;IACAW,UAAUC,IAAI;AACZ,UAAIA,GAAGC,SAAS,aAAA;AACd,eAAOX;IACX;IACAY,UAAUC,MAAMH,IAAI;AAClB,UAAIA,OAAOV,UAAU;AACnB,cAAMc,OAAOC,KAAKC,MAAMH,IAAAA;AACxB,cAAMI,WAAW,IAAIC,UAAAA;AAErB,mBAAWC,KAAKL;AACdG,mBAASG,UAAUD,EAAElB,MAAMkB,EAAEE,QAAQF,EAAEG,OAAOA,OAAOH,EAAEG,OAAOC,MAAMJ,EAAEK,MAAM;AAC9E,eAAO;UACLX,MAAMI,SAASQ,WAAU;QAC3B;MACF;IACF;EACF;AACF;AA3BgB5B;;;AxBKhB,wBAAc,wBAVd;;;AyBAO,IAAM6B,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,aAASC,WAAWF,OAAOV;AAE3B,UAAM,EACJa,QACAC,SACAC,cACAC,OAAM,IACJL,SAASM,eAAeP,OAAOC,SAASM,eAAeP,OAAQC,SAASM,eAAeP,OAAOQ,UAAUlB,IAAAA;AAC5G,UAAMmB,WAAWpB,UAAUqB,IAAIlB,IAAAA;AAC/B,UAAMmB,UAAUF,SAAShB,QAAQmB,KAAKH,QAAAA;AAEtCR,aAASY,eAAerB,QAAQiB;AAEhC,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,UAAgH;AAExI,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,sBAAiI;AAE9L,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,sBAAiI;AAEhM,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,MAAkC;AACjE,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","constructor","ValidateException","name","isPhecda","ret","plainToClass","err","length","map","item","UndefinedException","HttpException","constructor","message","ForbiddenException","HttpException","constructor","message","BadRequestException","HttpException","constructor","message","serverFilter","e","HttpException","UndefinedException","message","data","rabbitMqFilter","channel","reject","WrongMetaException","HttpException","constructor","message","Phistroy","guard","interceptor","record","name","type","includes","push","Pcontext","key","data","method","params","post","history","constructor","Phistroy","registerGuard","handler","guardsRecord","registerInterceptor","interceptorsRecord","useGuard","guards","isMerge","guard","record","WrongMetaException","ForbiddenException","useInterceptor","interceptors","ret","interceptor","push","usePost","cb","metaRecord","metaDataRecord","instanceRecord","addGuard","addInterceptor","getInstance","tag","parseMeta","meta","middlewares","reflect","map","param","type","validate","ServerContext","Pcontext","useMiddleware","middlewares","map","m","middlewareRecord","WrongMetaException","usePipe","args","reflect","pipe","transform","useFilter","arg","filter","data","defaultPipe","serverFilter","useServerPipe","useServerFilter","RabbitMqContext","Pcontext","useMiddleware","middlewares","map","m","middlewareRecord","WrongMetaException","usePipe","args","reflect","pipe","transform","useFilter","arg","filter","data","defaultPipe","rabbitMqFilter","useMqPipe","useMqFilter","Pcompiler","content","classMap","constructor","getContent","name","Object","values","reduce","p","c","addMethod","className","methodName","route","requestType","params","url","replace","genParams","filter","item","key","i","type","addMqMethod","exchange","routeKey","queue","decorators","index","isUndefined","obj","isNil","isObject","fn","resolveDep","ret","key","SERIES_SYMBOL","REQ_SYMBOL","NotFoundException","HttpException","constructor","message","bindApp","app","meta","moduleMap","options","globalGuards","globalInterceptors","route","middlewares","proMiddle","methodMap","i","name","method","header","data","instance","get","tag","Pcontext","metaRecord","guards","reflect","interceptors","params","metaDataRecord","parseMeta","handler","bind","instanceRecord","type","ServerContext","useMiddleware","req","res","contextData","request","response","context","set","useGuard","useInterceptor","args","usePipe","map","key","validate","arg","resolveDep","ret","usePost","isObject","json","send","String","e","handlers","forEach","error","err","useFilter","status","post","_res","next","REQ_SYMBOL","body","category","item","split","NotFoundException","startsWith","SERIES_SYMBOL","index","argKey","Number","push","m","Promise","all","resolve","then","import_phecda_core","Pmeta","data","handlers","reflect","constructor","emitter","EventEmitter","Factory","Modules","moduleMap","Map","meta","injectProperty","eventName","instance","key","options","fn","bind","v","once","on","Module","buildNestModule","map","paramtypes","getParamtypes","name","has","get","Error","set","undefined","i","push","getMetaFromInstance","registerAsync","vars","getExposeKey","filter","item","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","guardKey","guards","Interceptor","interceptorKey","interceptors","import_phecda_core","MQ","queue","routeKey","options","target","k","setModalVar","mergeState","mq","Inject","_target","Header","name","value","target","k","setModalVar","mergeState","header","Server","localPath","root","metaPath","name","enforce","configResolved","config","process","cwd","normalizePath","resolve","resolveId","id","endsWith","transform","code","meta","JSON","parse","compiler","Pcompiler","i","addMethod","method","route","type","params","getContent","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/wrong-meta.ts","../src/exception/not-found.ts","../src/filter.ts","../src/history.ts","../src/context/base.ts","../src/context/server.ts","../src/context/micro.ts","../src/compiler.ts","../src/utils.ts","../src/common.ts","../src/server/express.ts","../src/core.ts","../src/meta.ts","../src/decorators/index.ts","../src/decorators/param.ts","../src/decorators/route.ts","../src/decorators/micro.ts","../src/vite/index.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 './vite'\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 if (validate && !(arg?.constructor === reflect[i])) {\n throw new ValidateException(`${arg} is not ${reflect[i].name}`)\n }\n else {\n if (isPhecda(reflect[i])) {\n const ret = await plainToClass(reflect[i], arg, { transform: false })\n if (ret.err.length > 0)\n throw new ValidateException(ret.err[0])\n }\n }\n }\n return args.map(item => item.arg)\n },\n} as ValidatePipe\n","export class HttpException extends Error {\n constructor(public message: string, public status: number, public description = 'Http exception') {\n super(message)\n }\n\n get data() {\n return { message: this.message, description: this.description, status: this.status, error: true }\n }\n}\n\n// export class BaseException extends Error {\n// constructor(public message: string, public description = 'Base exception') {\n// super(message)\n// }\n\n// get data() {\n// return { message: this.message, description: this.description, status: this.status, error: true }\n// }\n// }\n","import { HttpException } from './base'\n\nexport class ValidateException extends HttpException {\n constructor(message: string) {\n super(message, 400, 'Validate exception')\n }\n}\n","import { HttpException } from './base'\n\nexport class UndefinedException extends HttpException {\n constructor(message: string) {\n super(message, 500, 'Undefined error')\n }\n}\n","import { HttpException } from './base'\n\nexport class ForbiddenException extends HttpException {\n constructor(message: string) {\n super(message, 403, 'Forbidden resource')\n }\n}\n","import { HttpException } from './base'\n\nexport class BadRequestException extends HttpException {\n constructor(message: string) {\n super(message, 400, 'Bad Request')\n }\n}\n","import { HttpException } from './base'\n\nexport class WrongMetaException extends HttpException {\n constructor(message: string) {\n super(message, 500, 'Meta is not correct')\n }\n}\n","import { HttpException } from './base'\n\nexport class NotFoundException extends HttpException {\n constructor(message: string) {\n super(message, 404, 'Not Found')\n }\n}\n","import { HttpException, UndefinedException } from './exception'\nexport type ErrorFilter<E extends HttpException = any> = (err: E | Error, contextData: any) => any\n\nexport const serverFilter: ErrorFilter = (e: any) => {\n if (!(e instanceof HttpException))\n e = new UndefinedException(e.message || e)\n return e.data\n}\n\nexport const rabbitMqFilter: ErrorFilter = (e: any, data) => {\n const { channel, message } = data\n channel!.reject(message!, true)\n}\n","export class Phistroy {\n guard: string[] = []\n interceptor: string[] = []\n record(name: string, type: 'guard' | 'interceptor') {\n if (!this[type].includes(name)) {\n this[type].push(name)\n return true\n }\n return false\n }\n}\n","import { WrongMetaException } from '../exception/wrong-meta'\nimport { Phistroy } from '../history'\nimport { ForbiddenException } from '../exception'\n\nimport type { Pmeta } from '../meta'\n\nexport abstract class Pcontext {\n method: string\n params: string[]\n\n static metaRecord: Record<string, Pmeta> = {}\n static metaDataRecord: Record<string, ReturnType<typeof parseMeta>> = {}\n static instanceRecord: Record<string, any> = {}\n static guardsRecord: Record<string, (req: any, isMerge: boolean) => boolean> = {}\n static interceptorsRecord: Record<string, (req: any, isMerge: boolean) => any > = {}\n // static serverRecord: Record<string, Pcontext> = {}\n post: ((...params: any) => any)[]\n history = new Phistroy()\n constructor(public key: string, public data: any) {\n }\n\n static registerGuard(key: string, handler: any) {\n Pcontext.guardsRecord[key] = handler\n }\n\n static registerInterceptor(key: string, handler: any) {\n Pcontext.interceptorsRecord[key] = handler\n }\n\n async useGuard(guards: string[], isMerge = false) {\n for (const guard of guards) {\n if (this.history.record(guard, 'guard')) {\n if (!(guard in Pcontext.guardsRecord))\n throw new WrongMetaException(`can't find guard named ${guard}`)\n if (!await Pcontext.guardsRecord[guard](this.data, isMerge))\n throw new ForbiddenException(`Guard exception--${guard}`)\n }\n }\n }\n\n async useInterceptor(interceptors: string[], isMerge = false) {\n const ret = []\n for (const interceptor of interceptors) {\n if (this.history.record(interceptor, 'interceptor')) {\n if (!(interceptor in Pcontext.interceptorsRecord))\n throw new WrongMetaException(`can't find guard named ${interceptor}`)\n const post = await Pcontext.interceptorsRecord[interceptor](this.data, isMerge)\n if (post)\n ret.push(post)\n }\n }\n this.post = ret\n }\n\n async usePost(data: any) {\n if (!this.post)\n return data\n for (const cb of this.post)\n data = (await cb(data)) | data\n\n return data\n }\n}\n\nexport function addGuard(key: string, handler: (contextData: any, isMerge: boolean) => boolean) {\n Pcontext.registerGuard(key, handler)\n}\n\nexport function addInterceptor(key: string, handler: (contextData: any, isMerge: boolean) => any) {\n Pcontext.registerInterceptor(key, handler)\n}\nexport function getInstance(tag: string) {\n return Pcontext.instanceRecord[tag]\n}\n\nexport function parseMeta(meta: Pmeta) {\n const { data: { params, guards, interceptors, middlewares }, reflect } = meta\n return {\n guards,\n reflect,\n interceptors,\n middlewares,\n params: params.map((param) => {\n const { type, key, validate } = param\n return { type, key, validate }\n }),\n }\n}\n","import type { ValidatePipe } from '../pipe'\nimport { defaultPipe } from '../pipe'\nimport type { ErrorFilter } from '../filter'\nimport { serverFilter } from '../filter'\nimport { WrongMetaException } from '../exception/wrong-meta'\nimport { Pcontext } from './base'\n\nexport class ServerContext extends Pcontext {\n static pipe = defaultPipe\n static filter = serverFilter\n static middlewareRecord: Record<string, (...params: any) => any> = {}\n static useMiddleware(middlewares: string[]) {\n return middlewares.map((m) => {\n if (!(m in ServerContext.middlewareRecord))\n throw new WrongMetaException(`can't find middleware named ${m}`)\n return ServerContext.middlewareRecord[m]\n })\n }\n\n async usePipe(args: { arg: any; validate?: boolean }[], reflect: any[]) {\n return ServerContext.pipe.transform?.(args, reflect)\n }\n\n useFilter(arg: any) {\n return ServerContext.filter(arg, this.data)\n }\n}\n\nexport function addMiddleware(key: string, handler: (...params: any) => any) {\n ServerContext.middlewareRecord[key] = handler\n}\n\nexport function useServerPipe(pipe: ValidatePipe) {\n ServerContext.pipe = pipe\n}\nexport function useServerFilter(filter: ErrorFilter) {\n ServerContext.filter = filter\n}\n","import type { ValidatePipe } from '../pipe'\nimport { defaultPipe } from '../pipe'\nimport type { ErrorFilter } from '../filter'\nimport { rabbitMqFilter } from '../filter'\nimport { WrongMetaException } from '../exception/wrong-meta'\nimport { Pcontext } from './base'\n\nexport class RabbitMqContext extends Pcontext {\n static pipe = defaultPipe\n static filter = rabbitMqFilter\n static middlewareRecord: Record<string, (...params: any) => boolean> = {}\n static useMiddleware(middlewares: string[]) {\n return middlewares.map((m) => {\n if (!(m in RabbitMqContext.middlewareRecord))\n throw new WrongMetaException(`can't find middleware named ${m}`)\n return RabbitMqContext.middlewareRecord[m]\n })\n }\n\n async usePipe(args: { arg: any; validate?: boolean }[], reflect: any[]) {\n return RabbitMqContext.pipe.transform?.(args, reflect)\n }\n\n useFilter(arg: any) {\n return RabbitMqContext.filter(arg, this.data)\n }\n}\nexport function useMqPipe(pipe: ValidatePipe) {\n RabbitMqContext.pipe = pipe\n}\nexport function useMqFilter(filter: ErrorFilter) {\n RabbitMqContext.filter = filter\n}\n","import type { RequestType } 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(className: string, methodName: string, route = '', requestType: RequestType | '' = '', params: { type: string; key: string; index: number }[] = []) {\n const url = route.replace(/\\/\\:([^\\/]*)/g, '')\n if (!this.classMap[className])\n this.classMap[className] = {}\n this.classMap[className][methodName] = `\n ${methodName}(${genParams(params)}){\nconst ret={tag:\"${className}-${methodName}\",body:{},query:{},params:{},realParam:'',method:\"${requestType}\",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, 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)}){\nconst ret={tag:\"${className}-${methodName}\",exchange:\"${exchange}\",routeKey:\"${routeKey}\",queue:\"${queue}\",args:{}}\n${params.reduce((p, c, i) => `${p}ret.args.${c.key}=arg${i}\\n`, '')}\nreturn ret\n }\n `\n }\n}\n\nfunction genParams(decorators: any[]) {\n let index = 0\n return decorators.reduce((p) => {\n return `${`${p}arg${index++}`},`\n }, '')\n}\n","export const isUndefined = (obj: any): obj is undefined =>\n typeof obj === 'undefined'\nexport const isNil = (obj: any): obj is null | undefined =>\n isUndefined(obj) || obj === null\n\nexport const isObject = (fn: any): fn is object =>\n !isNil(fn) && typeof fn === 'object'\n\nexport function resolveDep(ret: any, key: string) {\n if (key)\n return ret?.[key]\n return ret\n}\n\n/**\n * @experiment\n */\nexport class Wrap<F, T> {\n constructor(public v1: F,\n public V2: T) {\n\n }\n\n get value() {\n return this.V2\n }\n}\n","export const SERIES_SYMBOL = '__symbol_series__'\nexport const REQ_SYMBOL = '__symbol_req__'\n","import type { Express } from 'express'\nimport { Pcontext, ServerContext, parseMeta } from '../context'\nimport { isObject, resolveDep } from '../utils'\nimport { REQ_SYMBOL, SERIES_SYMBOL } from '../common'\nimport type { Factory } from '../core'\nimport { NotFoundException } from '../exception/not-found'\n\nexport interface Options {\n/**\n * 专用路由的值,默认为/__PHECDA_SERVER__,处理phecda-client发出的合并请求\n */\n route?: string\n /**\n * 全局守卫\n */\n globalGuards?: string[]\n /**\n * 全局拦截器\n */\n globalInterceptors?: string[]\n /**\n * 专用路由的中间件,全局中间件请在bindApp以外设置\n */\n middlewares?: string[]\n}\n\nexport function bindApp(app: Express, { meta, moduleMap }: Awaited<ReturnType<typeof Factory>>, options: Options = {}) {\n const { globalGuards, globalInterceptors, route, middlewares: proMiddle } = { route: '/__PHECDA_SERVER__', globalGuards: [], globalInterceptors: [], middlewares: [], ...options } as Required<Options>\n const methodMap = {} as Record<string, (...args: any[]) => any>\n for (const i of meta) {\n const { name, method, route, header } = i.data\n const instance = moduleMap.get(name)!\n const tag = `${name}-${method}`\n\n Pcontext.metaRecord[tag] = i\n let {\n guards,\n reflect,\n interceptors,\n params,\n middlewares,\n } = Pcontext.metaDataRecord[tag] ? Pcontext.metaDataRecord[tag] : (Pcontext.metaDataRecord[tag] = parseMeta(i))\n\n guards = [...globalGuards!, ...guards]\n interceptors = [...globalInterceptors!, ...interceptors]\n\n const handler = instance[method].bind(instance)\n methodMap[tag] = 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 tag,\n response: res,\n }\n const context = new ServerContext(tag, contextData)\n\n try {\n for (const name in header)\n res.set(name, header[name])\n await context.useGuard(guards)\n await context.useInterceptor(interceptors)\n const args = await context.usePipe(params.map(({ type, key, validate }) => {\n return { arg: resolveDep((req as any)[type], key), validate }\n }), reflect)\n instance.meta = contextData\n\n const ret = await context.usePost(await handler(...args))\n if (isObject(ret))\n res.json(ret)\n else\n res.send(String(ret))\n }\n catch (e: any) {\n i.handlers.forEach(handler => handler.error?.(e))\n const err = await context.useFilter(e)\n res.status(err.status).json(err)\n }\n })\n }\n }\n\n app.post(route, (req, _res, next) => {\n (req as any)[REQ_SYMBOL] = true\n next()\n }, ...ServerContext.useMiddleware(proMiddle), async (req, res) => {\n const contextData = {\n request: req,\n response: res,\n }\n const context = new ServerContext(route, contextData)\n const ret = [] as any[]\n\n const { body: { category, data } } = req\n if (category === 'series') {\n for (const item of data) {\n const { tag } = item\n const [name] = tag.split('-')\n const {\n guards,\n reflect,\n interceptors,\n params,\n } = Pcontext.metaDataRecord[tag]\n const instance = moduleMap.get(name)\n\n try {\n if (!params)\n throw new NotFoundException(`\"${tag}\" doesn't exist`)\n\n await context.useGuard(guards, true)\n await context.useInterceptor(interceptors, true)\n const args = await context.usePipe(params.map(({ type, key, validate }) => {\n const arg = resolveDep(item[type], key)\n if (typeof arg === 'string' && arg.startsWith(SERIES_SYMBOL)) {\n const [, index, argKey] = arg.split('@')\n return { arg: resolveDep(ret[Number(index)], argKey || key), validate }\n }\n\n return { arg, validate }\n }), reflect) as any\n instance.meta = contextData\n\n ret.push(await context.usePost(await methodMap[tag](...args)))\n }\n catch (e: any) {\n const m = Pcontext.metaRecord[tag]\n m.handlers.forEach(handler => handler.error?.(e))\n ret.push(await context.useFilter(e))\n }\n }\n return res.json(ret)\n }\n if (category === 'parallel') {\n return Promise.all(data.map((item: any) => {\n // eslint-disable-next-line no-async-promise-executor\n return new Promise(async (resolve) => {\n const { tag } = item\n const [name] = tag.split('-')\n const {\n guards,\n reflect,\n interceptors,\n params,\n } = Pcontext.metaDataRecord[tag]\n const instance = moduleMap.get(name)\n\n try {\n if (!params)\n throw new NotFoundException(`\"${tag}\" doesn't exist`)\n\n await context.useGuard(guards, true)\n await context.useInterceptor(interceptors, true)\n const args = await context.usePipe(params.map(({ type, key, validate }) => {\n const arg = resolveDep(item[type], key)\n return { arg, validate }\n }), reflect) as any\n instance.meta = contextData\n resolve(await context.usePost(await methodMap[tag](...args)))\n }\n catch (e: any) {\n const m = Pcontext.metaRecord[tag]\n m.handlers.forEach(handler => handler.error?.(e))\n resolve(await context.useFilter(e))\n }\n })\n })).then((ret) => {\n res.json(ret)\n })\n }\n\n res.json(await context.useFilter(new NotFoundException('category should be \\'parallel\\' or \\'series\\'')))\n })\n}\n","import 'reflect-metadata'\nimport EventEmitter from 'events'\nimport type { Phecda } from 'phecda-core'\nimport { getExposeKey, getHandler, getState, injectProperty, registerAsync } from 'phecda-core'\nimport type { Construct, PhecdaEmitter, ServerMeta } from './types'\nimport { Pmeta } from './meta'\n\n// TODO: support both phecda-emitter types and origin emitter type in future\nexport const emitter: PhecdaEmitter = new EventEmitter() as any\n\nexport async function Factory<T>(Modules: Construct<T>[]) {\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) as InstanceType<Construct<T>>\n\n return { moduleMap, meta }\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 name = Module.prototype._namespace?.__TAG__ || Module.name\n if (map.has(name)) {\n instance = map.get(name)\n if (!instance)\n throw new Error(`exist Circular Module dep--${Module}`)\n\n return instance\n }\n map.set(name, undefined)\n if (paramtypes) {\n for (const i in paramtypes)\n paramtypes[i] = await buildNestModule(paramtypes[i], map, meta)\n\n instance = new Module(...paramtypes)\n }\n else {\n instance = new Module()\n }\n meta.push(...getMetaFromInstance(instance, name))\n await registerAsync(instance)\n map.set(name, instance)\n\n return instance\n}\n\nfunction getMetaFromInstance(instance: Phecda, name: 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.method = i\n const params = [] as any[]\n for (const i of state.params || []) {\n params.unshift(i)\n if (i.index === 0)\n break\n }\n state.params = params\n initState(state)\n state.header = Object.assign({}, baseState.header, state.header)\n state.middlewares = [...new Set([...baseState.middlewares, ...state.middlewares])]\n state.guards = [...new Set([...baseState.guards, ...state.guards])]\n state.interceptors = [...new Set([...baseState.interceptors, ...state.interceptors])]\n\n return new Pmeta(state as unknown as ServerMeta, getHandler(instance, i), getParamtypes(instance, i) || [])\n })\n}\n\nfunction getParamtypes(Module: any, key?: string | symbol) {\n return Reflect.getMetadata('design:paramtypes', Module, key!)\n}\n\nfunction initState(state: any) {\n if (!state.header)\n state.header = {}\n if (!state.middlewares)\n state.middlewares = []\n if (!state.guards)\n state.guards = []\n if (!state.interceptors)\n state.interceptors = []\n}\n","import type { PHandler, ServerMeta } from './types'\n\nexport class Pmeta {\n constructor(public data: ServerMeta, public handlers: PHandler[], public reflect: any[]) {\n\n }\n}\n","import { mergeState, setModalVar } from 'phecda-core'\n\nexport function Inject(_target: any) { }\n\nexport function Header(name: string, value: string) {\n return (target: any, k: PropertyKey) => {\n setModalVar(target, k)\n mergeState(target, k, {\n header: { name, value },\n })\n }\n}\n\nexport * from './param'\nexport * from './route'\n\nexport * from './micro'\n","import { mergeState, setModalVar } from 'phecda-core'\n\nexport function BaseParam(type: string, key: string, validate?: boolean): any {\n return (target: any, k: PropertyKey, index: number) => {\n setModalVar(target, k)\n mergeState(target, k, {\n params: [{ type, key, index, validate }],\n })\n }\n}\n\nexport function Body(key = '', validate?: boolean) {\n return BaseParam('body', key, validate)\n}\nexport function Query(key: string, validate?: boolean) {\n return BaseParam('query', key, validate)\n}\nexport function Param(key: string, validate?: boolean) {\n return BaseParam('params', key, validate)\n}\n","import { mergeState, setModalVar } from 'phecda-core'\n\nexport function Route(route: string, type?: string): any {\n return (target: any, key?: PropertyKey) => {\n if (key) {\n setModalVar(target, key)\n mergeState(target, key, {\n route: {\n route,\n type,\n },\n })\n }\n else {\n setModalVar(target.prototype, '__CLASS')\n mergeState(target.prototype, '__CLASS', {\n route: {\n route,\n type,\n },\n })\n }\n }\n}\n\nexport function Get(route: string) {\n return Route(route, 'get')\n}\n\nexport function Post(route: string) {\n return Route(route, 'post')\n}\nexport function Put(route: string) {\n return Route(route, 'put')\n}\n\nexport function Delete(route: string) {\n return Route(route, 'delete')\n}\n\nexport function Controller(route: string) {\n return Route(route)\n}\n\nexport function Guard(...guards: string[]): any {\n return (target: any, key?: PropertyKey) => {\n if (key) {\n setModalVar(target, key)\n mergeState(target, key, {\n guards: [...guards],\n })\n }\n else {\n setModalVar(target.prototype, '__CLASS')\n mergeState(target.prototype, '__CLASS', {\n guards: [...guards],\n })\n }\n }\n}\n\nexport function Middle(...middlewares: string[]): any {\n return (target: any, key?: PropertyKey) => {\n if (key) {\n setModalVar(target, key)\n mergeState(target, key, {\n middlewares: [...middlewares],\n })\n }\n else {\n setModalVar(target.prototype, '__CLASS')\n mergeState(target.prototype, '__CLASS', {\n middlewares: [...middlewares],\n })\n }\n }\n}\n\nexport function Interceptor(...interceptors: string[]): any {\n return (target: any, key?: PropertyKey) => {\n if (key) {\n setModalVar(target, key)\n mergeState(target, key, {\n interceptors: [...interceptors],\n })\n }\n else {\n setModalVar(target.prototype, '__CLASS')\n mergeState(target.prototype, '__CLASS', {\n interceptors: [...interceptors],\n })\n }\n }\n}\n","import { mergeState, setModalVar } from 'phecda-core'\nimport type amqplib from 'amqplib'\nexport function MQ(queue: string, routeKey: string, options?: amqplib.Options.Consume) {\n return (target: any, k: PropertyKey) => {\n setModalVar(target, k)\n mergeState(target, k, {\n mq: {\n queue,\n routeKey,\n options,\n },\n })\n }\n}\n","import { resolve } from 'path'\nimport type { PluginOption } from 'vite'\nimport { normalizePath } from 'vite'\nimport { Pcompiler } from '../compiler'\nimport type { ServerMeta } from '../types'\nexport function Server(localPath: string): PluginOption {\n let root: string\n let metaPath: string\n return {\n name: 'phecda-server-vite:client',\n enforce: 'pre',\n configResolved(config) {\n root = config.root || process.cwd()\n metaPath = normalizePath(resolve(root, localPath))\n },\n resolveId(id) {\n if (id.endsWith('.controller'))\n return metaPath\n },\n transform(code, id) {\n if (id === metaPath) {\n const meta = JSON.parse(code) as ServerMeta[]\n const compiler = new Pcompiler()\n\n for (const i of meta)\n compiler.addMethod(i.name, i.method, i.route?.route, i.route?.type, i.params)\n return {\n code: compiler.getContent(),\n }\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","constructor","ValidateException","name","isPhecda","ret","plainToClass","err","length","map","item","UndefinedException","HttpException","constructor","message","ForbiddenException","HttpException","constructor","message","BadRequestException","HttpException","constructor","message","WrongMetaException","HttpException","constructor","message","NotFoundException","HttpException","constructor","message","serverFilter","e","HttpException","UndefinedException","message","data","rabbitMqFilter","channel","reject","Phistroy","guard","interceptor","record","name","type","includes","push","Pcontext","key","data","method","params","post","history","constructor","Phistroy","registerGuard","handler","guardsRecord","registerInterceptor","interceptorsRecord","useGuard","guards","isMerge","guard","record","WrongMetaException","ForbiddenException","useInterceptor","interceptors","ret","interceptor","push","usePost","cb","metaRecord","metaDataRecord","instanceRecord","addGuard","addInterceptor","getInstance","tag","parseMeta","meta","middlewares","reflect","map","param","type","validate","ServerContext","Pcontext","useMiddleware","middlewares","map","m","middlewareRecord","WrongMetaException","usePipe","args","reflect","pipe","transform","useFilter","arg","filter","data","defaultPipe","serverFilter","addMiddleware","key","handler","useServerPipe","useServerFilter","RabbitMqContext","Pcontext","useMiddleware","middlewares","map","m","middlewareRecord","WrongMetaException","usePipe","args","reflect","pipe","transform","useFilter","arg","filter","data","defaultPipe","rabbitMqFilter","useMqPipe","useMqFilter","Pcompiler","content","classMap","constructor","getContent","name","Object","values","reduce","p","c","addMethod","className","methodName","route","requestType","params","url","replace","genParams","filter","item","key","i","type","addMqMethod","exchange","routeKey","queue","decorators","index","isUndefined","obj","isNil","isObject","fn","resolveDep","ret","key","SERIES_SYMBOL","REQ_SYMBOL","bindApp","app","meta","moduleMap","options","globalGuards","globalInterceptors","route","middlewares","proMiddle","methodMap","i","name","method","header","data","instance","get","tag","Pcontext","metaRecord","guards","reflect","interceptors","params","metaDataRecord","parseMeta","handler","bind","instanceRecord","type","ServerContext","useMiddleware","req","res","contextData","request","response","context","set","useGuard","useInterceptor","args","usePipe","map","key","validate","arg","resolveDep","ret","usePost","isObject","json","send","String","e","handlers","forEach","error","err","useFilter","status","post","_res","next","REQ_SYMBOL","body","category","item","split","NotFoundException","startsWith","SERIES_SYMBOL","index","argKey","Number","push","m","Promise","all","resolve","then","import_phecda_core","Pmeta","data","handlers","reflect","constructor","emitter","EventEmitter","Factory","Modules","moduleMap","Map","meta","injectProperty","eventName","instance","key","options","fn","bind","v","once","on","Module","buildNestModule","map","paramtypes","getParamtypes","name","prototype","_namespace","__TAG__","has","get","Error","set","undefined","i","push","getMetaFromInstance","registerAsync","vars","getExposeKey","filter","item","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","Server","localPath","root","metaPath","name","enforce","configResolved","config","process","cwd","normalizePath","resolve","resolveId","id","endsWith","transform","code","meta","JSON","parse","compiler","Pcompiler","i","addMethod","method","route","type","params","getContent","Pconfig","rabbitmq","guard","interceptor","bindMQ","ch","meta","moduleMap","item","route","name","method","mq","routeKey","queue","queueName","options","data","tag","Pcontext","metaRecord","guards","reflect","interceptors","params","metaDataRecord","parseMeta","instance","get","handler","bind","instanceRecord","assertQueue","bindQueue","consume","msg","content","toString","length","JSON","parse","contextMeta","message","channel","context","RabbitMqContext","Pconfig","rabbitmq","guard","useGuard","interceptor","useInterceptor","args","usePipe","map","key","validate","arg","resolveDep","usePost","ack","e","handlers","forEach","error","useFilter","createPub","type","exchange","assertExchange","Buffer","from","stringify","publish","sendToQueue","toReq","arg","body","query","realParam","method","url","Object","keys","length","entries","map","k","v","join","params","merge","args","ret","i","tag","push","createReq","instance","config","console","warn","createSeriesReq","key","post","category","data","createParallelReq","isError","error","$S","index","SERIES_SYMBOL","createMqReq","channel","arg","url","body","assertQueue","sendToQueue","Buffer","from","JSON","stringify"]}
package/dist/index.mjs CHANGED
@@ -86,6 +86,22 @@ var BadRequestException = class extends HttpException {
86
86
  };
87
87
  __name(BadRequestException, "BadRequestException");
88
88
 
89
+ // src/exception/wrong-meta.ts
90
+ var WrongMetaException = class extends HttpException {
91
+ constructor(message) {
92
+ super(message, 500, "Meta is not correct");
93
+ }
94
+ };
95
+ __name(WrongMetaException, "WrongMetaException");
96
+
97
+ // src/exception/not-found.ts
98
+ var NotFoundException = class extends HttpException {
99
+ constructor(message) {
100
+ super(message, 404, "Not Found");
101
+ }
102
+ };
103
+ __name(NotFoundException, "NotFoundException");
104
+
89
105
  // src/filter.ts
90
106
  var serverFilter = /* @__PURE__ */ __name((e) => {
91
107
  if (!(e instanceof HttpException))
@@ -97,14 +113,6 @@ var rabbitMqFilter = /* @__PURE__ */ __name((e, data) => {
97
113
  channel.reject(message, true);
98
114
  }, "rabbitMqFilter");
99
115
 
100
- // src/exception/wrong-meta.ts
101
- var WrongMetaException = class extends HttpException {
102
- constructor(message) {
103
- super(message, 500, "Meta is not correct");
104
- }
105
- };
106
- __name(WrongMetaException, "WrongMetaException");
107
-
108
116
  // src/history.ts
109
117
  var Phistroy = class {
110
118
  guard = [];
@@ -228,6 +236,10 @@ __name(ServerContext, "ServerContext");
228
236
  __publicField(ServerContext, "pipe", defaultPipe);
229
237
  __publicField(ServerContext, "filter", serverFilter);
230
238
  __publicField(ServerContext, "middlewareRecord", {});
239
+ function addMiddleware(key, handler) {
240
+ ServerContext.middlewareRecord[key] = handler;
241
+ }
242
+ __name(addMiddleware, "addMiddleware");
231
243
  function useServerPipe(pipe) {
232
244
  ServerContext.pipe = pipe;
233
245
  }
@@ -334,14 +346,6 @@ __name(resolveDep, "resolveDep");
334
346
  var SERIES_SYMBOL = "__symbol_series__";
335
347
  var REQ_SYMBOL = "__symbol_req__";
336
348
 
337
- // src/exception/not-found.ts
338
- var NotFoundException = class extends HttpException {
339
- constructor(message) {
340
- super(message, 404, "Not Found");
341
- }
342
- };
343
- __name(NotFoundException, "NotFoundException");
344
-
345
349
  // src/server/express.ts
346
350
  function bindApp(app, { meta, moduleMap }, options = {}) {
347
351
  const { globalGuards, globalInterceptors, route, middlewares: proMiddle } = {
@@ -525,7 +529,7 @@ __name(Factory, "Factory");
525
529
  async function buildNestModule(Module, map, meta) {
526
530
  const paramtypes = getParamtypes(Module);
527
531
  let instance;
528
- const name = Module.name;
532
+ const name = Module.prototype._namespace?.__TAG__ || Module.name;
529
533
  if (map.has(name)) {
530
534
  instance = map.get(name);
531
535
  if (!instance)
@@ -681,40 +685,60 @@ function Controller(route) {
681
685
  return Route(route);
682
686
  }
683
687
  __name(Controller, "Controller");
684
- function Guard(guardKey) {
688
+ function Guard(...guards) {
685
689
  return (target, key) => {
686
690
  if (key) {
687
691
  setModalVar2(target, key);
688
692
  mergeState2(target, key, {
689
693
  guards: [
690
- guardKey
694
+ ...guards
691
695
  ]
692
696
  });
693
697
  } else {
694
698
  setModalVar2(target.prototype, "__CLASS");
695
699
  mergeState2(target.prototype, "__CLASS", {
696
700
  guards: [
697
- guardKey
701
+ ...guards
698
702
  ]
699
703
  });
700
704
  }
701
705
  };
702
706
  }
703
707
  __name(Guard, "Guard");
704
- function Interceptor(interceptorKey) {
708
+ function Middle(...middlewares) {
709
+ return (target, key) => {
710
+ if (key) {
711
+ setModalVar2(target, key);
712
+ mergeState2(target, key, {
713
+ middlewares: [
714
+ ...middlewares
715
+ ]
716
+ });
717
+ } else {
718
+ setModalVar2(target.prototype, "__CLASS");
719
+ mergeState2(target.prototype, "__CLASS", {
720
+ middlewares: [
721
+ ...middlewares
722
+ ]
723
+ });
724
+ }
725
+ };
726
+ }
727
+ __name(Middle, "Middle");
728
+ function Interceptor(...interceptors) {
705
729
  return (target, key) => {
706
730
  if (key) {
707
731
  setModalVar2(target, key);
708
732
  mergeState2(target, key, {
709
733
  interceptors: [
710
- interceptorKey
734
+ ...interceptors
711
735
  ]
712
736
  });
713
737
  } else {
714
738
  setModalVar2(target.prototype, "__CLASS");
715
739
  mergeState2(target.prototype, "__CLASS", {
716
740
  interceptors: [
717
- interceptorKey
741
+ ...interceptors
718
742
  ]
719
743
  });
720
744
  }
@@ -957,6 +981,8 @@ export {
957
981
  Inject,
958
982
  Interceptor,
959
983
  MQ,
984
+ Middle,
985
+ NotFoundException,
960
986
  Param,
961
987
  Pcompiler,
962
988
  Pcontext,
@@ -970,8 +996,10 @@ export {
970
996
  ServerContext,
971
997
  UndefinedException,
972
998
  ValidateException,
999
+ WrongMetaException,
973
1000
  addGuard,
974
1001
  addInterceptor,
1002
+ addMiddleware,
975
1003
  bindApp,
976
1004
  bindMQ,
977
1005
  createMqReq,
@@ -1 +1 @@
1
- {"version":3,"sources":["../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/filter.ts","../src/exception/wrong-meta.ts","../src/history.ts","../src/context/base.ts","../src/context/server.ts","../src/context/micro.ts","../src/compiler.ts","../src/utils.ts","../src/common.ts","../src/exception/not-found.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/vite/index.ts","../src/index.ts","../src/config.ts","../src/micro-services/rabbitmq.ts","../src/client/axios.ts","../src/client/server.ts"],"sourcesContent":["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 if (validate && !(arg?.constructor === reflect[i])) {\n throw new ValidateException(`${arg} is not ${reflect[i].name}`)\n }\n else {\n if (isPhecda(reflect[i])) {\n const ret = await plainToClass(reflect[i], arg, { transform: false })\n if (ret.err.length > 0)\n throw new ValidateException(ret.err[0])\n }\n }\n }\n return args.map(item => item.arg)\n },\n} as ValidatePipe\n","export class HttpException extends Error {\n constructor(public message: string, public status: number, public description = 'Http exception') {\n super(message)\n }\n\n get data() {\n return { message: this.message, description: this.description, status: this.status, error: true }\n }\n}\n\n// export class BaseException extends Error {\n// constructor(public message: string, public description = 'Base exception') {\n// super(message)\n// }\n\n// get data() {\n// return { message: this.message, description: this.description, status: this.status, error: true }\n// }\n// }\n","import { HttpException } from './base'\n\nexport class ValidateException extends HttpException {\n constructor(message: string) {\n super(message, 400, 'Validate exception')\n }\n}\n","import { HttpException } from './base'\n\nexport class UndefinedException extends HttpException {\n constructor(message: string) {\n super(message, 500, 'Undefined error')\n }\n}\n","import { HttpException } from './base'\n\nexport class ForbiddenException extends HttpException {\n constructor(message: string) {\n super(message, 403, 'Forbidden resource')\n }\n}\n","import { HttpException } from './base'\n\nexport class BadRequestException extends HttpException {\n constructor(message: string) {\n super(message, 400, 'Bad Request')\n }\n}\n","import { HttpException, UndefinedException } from './exception'\nexport type ErrorFilter<E extends HttpException = any> = (err: E | Error, contextData: any) => any\n\nexport const serverFilter: ErrorFilter = (e: any) => {\n if (!(e instanceof HttpException))\n e = new UndefinedException(e.message || e)\n return e.data\n}\n\nexport const rabbitMqFilter: ErrorFilter = (e: any, data) => {\n const { channel, message } = data\n channel!.reject(message!, true)\n}\n","import { HttpException } from './base'\n\nexport class WrongMetaException extends HttpException {\n constructor(message: string) {\n super(message, 500, 'Meta is not correct')\n }\n}\n","export class Phistroy {\n guard: string[] = []\n interceptor: string[] = []\n record(name: string, type: 'guard' | 'interceptor') {\n if (!this[type].includes(name)) {\n this[type].push(name)\n return true\n }\n return false\n }\n}\n","import { WrongMetaException } from '../exception/wrong-meta'\nimport { Phistroy } from '../history'\nimport { ForbiddenException } from '../exception'\n\nimport type { Pmeta } from '../meta'\n\nexport abstract class Pcontext {\n method: string\n params: string[]\n\n static metaRecord: Record<string, Pmeta> = {}\n static metaDataRecord: Record<string, ReturnType<typeof parseMeta>> = {}\n static instanceRecord: Record<string, any> = {}\n static guardsRecord: Record<string, (req: any, isMerge: boolean) => boolean> = {}\n static interceptorsRecord: Record<string, (req: any, isMerge: boolean) => any > = {}\n // static serverRecord: Record<string, Pcontext> = {}\n post: ((...params: any) => any)[]\n history = new Phistroy()\n constructor(public key: string, public data: any) {\n }\n\n static registerGuard(key: string, handler: any) {\n Pcontext.guardsRecord[key] = handler\n }\n\n static registerInterceptor(key: string, handler: any) {\n Pcontext.interceptorsRecord[key] = handler\n }\n\n async useGuard(guards: string[], isMerge = false) {\n for (const guard of guards) {\n if (this.history.record(guard, 'guard')) {\n if (!(guard in Pcontext.guardsRecord))\n throw new WrongMetaException(`can't find guard named ${guard}`)\n if (!await Pcontext.guardsRecord[guard](this.data, isMerge))\n throw new ForbiddenException(`Guard exception--${guard}`)\n }\n }\n }\n\n async useInterceptor(interceptors: string[], isMerge = false) {\n const ret = []\n for (const interceptor of interceptors) {\n if (this.history.record(interceptor, 'interceptor')) {\n if (!(interceptor in Pcontext.interceptorsRecord))\n throw new WrongMetaException(`can't find guard named ${interceptor}`)\n const post = await Pcontext.interceptorsRecord[interceptor](this.data, isMerge)\n if (post)\n ret.push(post)\n }\n }\n this.post = ret\n }\n\n async usePost(data: any) {\n if (!this.post)\n return data\n for (const cb of this.post)\n data = (await cb(data)) | data\n\n return data\n }\n}\n\nexport function addGuard(key: string, handler: (contextData: any, isMerge: boolean) => boolean) {\n Pcontext.registerGuard(key, handler)\n}\n\nexport function addInterceptor(key: string, handler: (contextData: any, isMerge: boolean) => any) {\n Pcontext.registerInterceptor(key, handler)\n}\nexport function getInstance(tag: string) {\n return Pcontext.instanceRecord[tag]\n}\n\nexport function parseMeta(meta: Pmeta) {\n const { data: { params, guards, interceptors, middlewares }, reflect } = meta\n return {\n guards,\n reflect,\n interceptors,\n middlewares,\n params: params.map((param) => {\n const { type, key, validate } = param\n return { type, key, validate }\n }),\n }\n}\n","import type { ValidatePipe } from '../pipe'\nimport { defaultPipe } from '../pipe'\nimport type { ErrorFilter } from '../filter'\nimport { serverFilter } from '../filter'\nimport { WrongMetaException } from '../exception/wrong-meta'\nimport { Pcontext } from './base'\n\nexport class ServerContext extends Pcontext {\n static pipe = defaultPipe\n static filter = serverFilter\n static middlewareRecord: Record<string, (...params: any) => boolean> = {}\n static useMiddleware(middlewares: string[]) {\n return middlewares.map((m) => {\n if (!(m in ServerContext.middlewareRecord))\n throw new WrongMetaException(`can't find middleware named ${m}`)\n return ServerContext.middlewareRecord[m]\n })\n }\n\n async usePipe(args: { arg: any; validate?: boolean }[], reflect: any[]) {\n return ServerContext.pipe.transform?.(args, reflect)\n }\n\n useFilter(arg: any) {\n return ServerContext.filter(arg, this.data)\n }\n}\nexport function useServerPipe(pipe: ValidatePipe) {\n ServerContext.pipe = pipe\n}\nexport function useServerFilter(filter: ErrorFilter) {\n ServerContext.filter = filter\n}\n","import type { ValidatePipe } from '../pipe'\nimport { defaultPipe } from '../pipe'\nimport type { ErrorFilter } from '../filter'\nimport { rabbitMqFilter } from '../filter'\nimport { WrongMetaException } from '../exception/wrong-meta'\nimport { Pcontext } from './base'\n\nexport class RabbitMqContext extends Pcontext {\n static pipe = defaultPipe\n static filter = rabbitMqFilter\n static middlewareRecord: Record<string, (...params: any) => boolean> = {}\n static useMiddleware(middlewares: string[]) {\n return middlewares.map((m) => {\n if (!(m in RabbitMqContext.middlewareRecord))\n throw new WrongMetaException(`can't find middleware named ${m}`)\n return RabbitMqContext.middlewareRecord[m]\n })\n }\n\n async usePipe(args: { arg: any; validate?: boolean }[], reflect: any[]) {\n return RabbitMqContext.pipe.transform?.(args, reflect)\n }\n\n useFilter(arg: any) {\n return RabbitMqContext.filter(arg, this.data)\n }\n}\nexport function useMqPipe(pipe: ValidatePipe) {\n RabbitMqContext.pipe = pipe\n}\nexport function useMqFilter(filter: ErrorFilter) {\n RabbitMqContext.filter = filter\n}\n","import type { RequestType } 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(className: string, methodName: string, route = '', requestType: RequestType | '' = '', params: { type: string; key: string; index: number }[] = []) {\n const url = route.replace(/\\/\\:([^\\/]*)/g, '')\n if (!this.classMap[className])\n this.classMap[className] = {}\n this.classMap[className][methodName] = `\n ${methodName}(${genParams(params)}){\nconst ret={tag:\"${className}-${methodName}\",body:{},query:{},params:{},realParam:'',method:\"${requestType}\",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, 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)}){\nconst ret={tag:\"${className}-${methodName}\",exchange:\"${exchange}\",routeKey:\"${routeKey}\",queue:\"${queue}\",args:{}}\n${params.reduce((p, c, i) => `${p}ret.args.${c.key}=arg${i}\\n`, '')}\nreturn ret\n }\n `\n }\n}\n\nfunction genParams(decorators: any[]) {\n let index = 0\n return decorators.reduce((p) => {\n return `${`${p}arg${index++}`},`\n }, '')\n}\n","export const isUndefined = (obj: any): obj is undefined =>\n typeof obj === 'undefined'\nexport const isNil = (obj: any): obj is null | undefined =>\n isUndefined(obj) || obj === null\n\nexport const isObject = (fn: any): fn is object =>\n !isNil(fn) && typeof fn === 'object'\n\nexport function resolveDep(ret: any, key: string) {\n if (key)\n return ret?.[key]\n return ret\n}\n\n/**\n * @experiment\n */\nexport class Wrap<F, T> {\n constructor(public v1: F,\n public V2: T) {\n\n }\n\n get value() {\n return this.V2\n }\n}\n","export const SERIES_SYMBOL = '__symbol_series__'\nexport const REQ_SYMBOL = '__symbol_req__'\n","import { HttpException } from './base'\n\nexport class NotFoundException extends HttpException {\n constructor(message: string) {\n super(message, 404, 'Not Found')\n }\n}\n","import type { Express } from 'express'\nimport { Pcontext, ServerContext, parseMeta } from '../context'\nimport { isObject, resolveDep } from '../utils'\nimport { REQ_SYMBOL, SERIES_SYMBOL } from '../common'\nimport type { Factory } from '../core'\nimport { NotFoundException } from '../exception/not-found'\n\nexport interface Options {\n/**\n * 专用路由的值,默认为/__PHECDA_SERVER__,处理phecda-client发出的合并请求\n */\n route?: string\n /**\n * 全局守卫\n */\n globalGuards?: string[]\n /**\n * 全局拦截器\n */\n globalInterceptors?: string[]\n /**\n * 专用路由的中间件,全局中间件请在bindApp以外设置\n */\n middlewares?: string[]\n}\n\nexport function bindApp(app: Express, { meta, moduleMap }: Awaited<ReturnType<typeof Factory>>, options: Options = {}) {\n const { globalGuards, globalInterceptors, route, middlewares: proMiddle } = { route: '/__PHECDA_SERVER__', globalGuards: [], globalInterceptors: [], middlewares: [], ...options } as Required<Options>\n const methodMap = {} as Record<string, (...args: any[]) => any>\n for (const i of meta) {\n const { name, method, route, header } = i.data\n const instance = moduleMap.get(name)!\n const tag = `${name}-${method}`\n\n Pcontext.metaRecord[tag] = i\n let {\n guards,\n reflect,\n interceptors,\n params,\n middlewares,\n } = Pcontext.metaDataRecord[tag] ? Pcontext.metaDataRecord[tag] : (Pcontext.metaDataRecord[tag] = parseMeta(i))\n\n guards = [...globalGuards!, ...guards]\n interceptors = [...globalInterceptors!, ...interceptors]\n\n const handler = instance[method].bind(instance)\n methodMap[tag] = 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 tag,\n response: res,\n }\n const context = new ServerContext(tag, contextData)\n\n try {\n for (const name in header)\n res.set(name, header[name])\n await context.useGuard(guards)\n await context.useInterceptor(interceptors)\n const args = await context.usePipe(params.map(({ type, key, validate }) => {\n return { arg: resolveDep((req as any)[type], key), validate }\n }), reflect)\n instance.meta = contextData\n\n const ret = await context.usePost(await handler(...args))\n if (isObject(ret))\n res.json(ret)\n else\n res.send(String(ret))\n }\n catch (e: any) {\n i.handlers.forEach(handler => handler.error?.(e))\n const err = await context.useFilter(e)\n res.status(err.status).json(err)\n }\n })\n }\n }\n\n app.post(route, (req, _res, next) => {\n (req as any)[REQ_SYMBOL] = true\n next()\n }, ...ServerContext.useMiddleware(proMiddle), async (req, res) => {\n const contextData = {\n request: req,\n response: res,\n }\n const context = new ServerContext(route, contextData)\n const ret = [] as any[]\n\n const { body: { category, data } } = req\n if (category === 'series') {\n for (const item of data) {\n const { tag } = item\n const [name] = tag.split('-')\n const {\n guards,\n reflect,\n interceptors,\n params,\n } = Pcontext.metaDataRecord[tag]\n const instance = moduleMap.get(name)\n\n try {\n if (!params)\n throw new NotFoundException(`\"${tag}\" doesn't exist`)\n\n await context.useGuard(guards, true)\n await context.useInterceptor(interceptors, true)\n const args = await context.usePipe(params.map(({ type, key, validate }) => {\n const arg = resolveDep(item[type], key)\n if (typeof arg === 'string' && arg.startsWith(SERIES_SYMBOL)) {\n const [, index, argKey] = arg.split('@')\n return { arg: resolveDep(ret[Number(index)], argKey || key), validate }\n }\n\n return { arg, validate }\n }), reflect) as any\n instance.meta = contextData\n\n ret.push(await context.usePost(await methodMap[tag](...args)))\n }\n catch (e: any) {\n const m = Pcontext.metaRecord[tag]\n m.handlers.forEach(handler => handler.error?.(e))\n ret.push(await context.useFilter(e))\n }\n }\n return res.json(ret)\n }\n if (category === 'parallel') {\n return Promise.all(data.map((item: any) => {\n // eslint-disable-next-line no-async-promise-executor\n return new Promise(async (resolve) => {\n const { tag } = item\n const [name] = tag.split('-')\n const {\n guards,\n reflect,\n interceptors,\n params,\n } = Pcontext.metaDataRecord[tag]\n const instance = moduleMap.get(name)\n\n try {\n if (!params)\n throw new NotFoundException(`\"${tag}\" doesn't exist`)\n\n await context.useGuard(guards, true)\n await context.useInterceptor(interceptors, true)\n const args = await context.usePipe(params.map(({ type, key, validate }) => {\n const arg = resolveDep(item[type], key)\n return { arg, validate }\n }), reflect) as any\n instance.meta = contextData\n resolve(await context.usePost(await methodMap[tag](...args)))\n }\n catch (e: any) {\n const m = Pcontext.metaRecord[tag]\n m.handlers.forEach(handler => handler.error?.(e))\n resolve(await context.useFilter(e))\n }\n })\n })).then((ret) => {\n res.json(ret)\n })\n }\n\n res.json(await context.useFilter(new NotFoundException('category should be \\'parallel\\' or \\'series\\'')))\n })\n}\n","import 'reflect-metadata'\nimport EventEmitter from 'events'\nimport type { Phecda } from 'phecda-core'\nimport { getExposeKey, getHandler, getState, injectProperty, registerAsync } from 'phecda-core'\nimport type { Construct, PhecdaEmitter, ServerMeta } from './types'\nimport { Pmeta } from './meta'\n\n// TODO: support both phecda-emitter types and origin emitter type in future\nexport const emitter: PhecdaEmitter = new EventEmitter() as any\n\nexport async function Factory<T>(Modules: Construct<T>[]) {\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) as InstanceType<Construct<T>>\n\n return { moduleMap, meta }\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 name = Module.name\n if (map.has(name)) {\n instance = map.get(name)\n if (!instance)\n throw new Error(`exist Circular Module dep--${Module}`)\n\n return instance\n }\n map.set(name, undefined)\n if (paramtypes) {\n for (const i in paramtypes)\n paramtypes[i] = await buildNestModule(paramtypes[i], map, meta)\n\n instance = new Module(...paramtypes)\n }\n else {\n instance = new Module()\n }\n meta.push(...getMetaFromInstance(instance, name))\n await registerAsync(instance)\n map.set(name, instance)\n\n return instance\n}\n\nfunction getMetaFromInstance(instance: Phecda, name: 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.method = i\n const params = [] as any[]\n for (const i of state.params || []) {\n params.unshift(i)\n if (i.index === 0)\n break\n }\n state.params = params\n initState(state)\n state.header = Object.assign({}, baseState.header, state.header)\n state.middlewares = [...new Set([...baseState.middlewares, ...state.middlewares])]\n state.guards = [...new Set([...baseState.guards, ...state.guards])]\n state.interceptors = [...new Set([...baseState.interceptors, ...state.interceptors])]\n\n return new Pmeta(state as unknown as ServerMeta, getHandler(instance, i), getParamtypes(instance, i) || [])\n })\n}\n\nfunction getParamtypes(Module: any, key?: string | symbol) {\n return Reflect.getMetadata('design:paramtypes', Module, key!)\n}\n\nfunction initState(state: any) {\n if (!state.header)\n state.header = {}\n if (!state.middlewares)\n state.middlewares = []\n if (!state.guards)\n state.guards = []\n if (!state.interceptors)\n state.interceptors = []\n}\n","import type { PHandler, ServerMeta } from './types'\n\nexport class Pmeta {\n constructor(public data: ServerMeta, public handlers: PHandler[], public reflect: any[]) {\n\n }\n}\n","import { mergeState, setModalVar } from 'phecda-core'\n\nexport function Inject(_target: any) { }\n\nexport function Header(name: string, value: string) {\n return (target: any, k: PropertyKey) => {\n setModalVar(target, k)\n mergeState(target, k, {\n header: { name, value },\n })\n }\n}\n\nexport * from './param'\nexport * from './route'\n\nexport * from './micro'\n","import { mergeState, setModalVar } from 'phecda-core'\n\nexport function BaseParam(type: string, key: string, validate?: boolean): any {\n return (target: any, k: PropertyKey, index: number) => {\n setModalVar(target, k)\n mergeState(target, k, {\n params: [{ type, key, index, validate }],\n })\n }\n}\n\nexport function Body(key = '', validate?: boolean) {\n return BaseParam('body', key, validate)\n}\nexport function Query(key: string, validate?: boolean) {\n return BaseParam('query', key, validate)\n}\nexport function Param(key: string, validate?: boolean) {\n return BaseParam('params', key, validate)\n}\n","import { mergeState, setModalVar } from 'phecda-core'\n\nexport function Route(route: string, type?: string): any {\n return (target: any, key?: PropertyKey) => {\n if (key) {\n setModalVar(target, key)\n mergeState(target, key, {\n route: {\n route,\n type,\n },\n })\n }\n else {\n setModalVar(target.prototype, '__CLASS')\n mergeState(target.prototype, '__CLASS', {\n route: {\n route,\n type,\n },\n })\n }\n }\n}\n\nexport function Get(route: string) {\n return Route(route, 'get')\n}\n\nexport function Post(route: string) {\n return Route(route, 'post')\n}\nexport function Put(route: string) {\n return Route(route, 'put')\n}\n\nexport function Delete(route: string) {\n return Route(route, 'delete')\n}\n\nexport function Controller(route: string) {\n return Route(route)\n}\n\nexport function Guard(guardKey: string): any {\n return (target: any, key?: PropertyKey) => {\n if (key) {\n setModalVar(target, key)\n mergeState(target, key, {\n guards: [guardKey],\n })\n }\n else {\n setModalVar(target.prototype, '__CLASS')\n mergeState(target.prototype, '__CLASS', {\n guards: [guardKey],\n })\n }\n }\n}\n\nexport function Interceptor(interceptorKey: string): any {\n return (target: any, key?: PropertyKey) => {\n if (key) {\n setModalVar(target, key)\n mergeState(target, key, {\n interceptors: [interceptorKey],\n })\n }\n else {\n setModalVar(target.prototype, '__CLASS')\n mergeState(target.prototype, '__CLASS', {\n interceptors: [interceptorKey],\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","import { resolve } from 'path'\nimport type { PluginOption } from 'vite'\nimport { normalizePath } from 'vite'\nimport { Pcompiler } from '../compiler'\nimport type { ServerMeta } from '../types'\nexport function Server(localPath: string): PluginOption {\n let root: string\n let metaPath: string\n return {\n name: 'phecda-server-vite:client',\n enforce: 'pre',\n configResolved(config) {\n root = config.root || process.cwd()\n metaPath = normalizePath(resolve(root, localPath))\n },\n resolveId(id) {\n if (id.endsWith('.controller'))\n return metaPath\n },\n transform(code, id) {\n if (id === metaPath) {\n const meta = JSON.parse(code) as ServerMeta[]\n const compiler = new Pcompiler()\n\n for (const i of meta)\n compiler.addMethod(i.name, i.method, i.route?.route, i.route?.type, i.params)\n return {\n code: compiler.getContent(),\n }\n }\n },\n }\n}\n","export * from './context'\nexport * from './types'\nexport * from './compiler'\nexport * from './server/express'\nexport * from './core'\nexport * from './decorators'\nexport * from './vite'\nexport * from './exception'\nexport * from './pipe'\nexport * from './meta'\nexport * from 'phecda-core'\nexport * from './micro-services/rabbitmq'\nexport * from './client/server'\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":["isPhecda","plainToClass","HttpException","Error","message","status","description","constructor","data","error","ValidateException","HttpException","constructor","message","defaultPipe","transform","args","reflect","i","validate","arg","constructor","ValidateException","name","isPhecda","ret","plainToClass","err","length","map","item","UndefinedException","HttpException","constructor","message","ForbiddenException","HttpException","constructor","message","BadRequestException","HttpException","constructor","message","serverFilter","e","HttpException","UndefinedException","message","data","rabbitMqFilter","channel","reject","WrongMetaException","HttpException","constructor","message","Phistroy","guard","interceptor","record","name","type","includes","push","Pcontext","key","data","method","params","post","history","constructor","Phistroy","registerGuard","handler","guardsRecord","registerInterceptor","interceptorsRecord","useGuard","guards","isMerge","guard","record","WrongMetaException","ForbiddenException","useInterceptor","interceptors","ret","interceptor","push","usePost","cb","metaRecord","metaDataRecord","instanceRecord","addGuard","addInterceptor","getInstance","tag","parseMeta","meta","middlewares","reflect","map","param","type","validate","ServerContext","Pcontext","useMiddleware","middlewares","map","m","middlewareRecord","WrongMetaException","usePipe","args","reflect","pipe","transform","useFilter","arg","filter","data","defaultPipe","serverFilter","useServerPipe","useServerFilter","RabbitMqContext","Pcontext","useMiddleware","middlewares","map","m","middlewareRecord","WrongMetaException","usePipe","args","reflect","pipe","transform","useFilter","arg","filter","data","defaultPipe","rabbitMqFilter","useMqPipe","useMqFilter","Pcompiler","content","classMap","constructor","getContent","name","Object","values","reduce","p","c","addMethod","className","methodName","route","requestType","params","url","replace","genParams","filter","item","key","i","type","addMqMethod","exchange","routeKey","queue","decorators","index","isUndefined","obj","isNil","isObject","fn","resolveDep","ret","key","SERIES_SYMBOL","REQ_SYMBOL","NotFoundException","HttpException","constructor","message","bindApp","app","meta","moduleMap","options","globalGuards","globalInterceptors","route","middlewares","proMiddle","methodMap","i","name","method","header","data","instance","get","tag","Pcontext","metaRecord","guards","reflect","interceptors","params","metaDataRecord","parseMeta","handler","bind","instanceRecord","type","ServerContext","useMiddleware","req","res","contextData","request","response","context","set","useGuard","useInterceptor","args","usePipe","map","key","validate","arg","resolveDep","ret","usePost","isObject","json","send","String","e","handlers","forEach","error","err","useFilter","status","post","_res","next","REQ_SYMBOL","body","category","item","split","NotFoundException","startsWith","SERIES_SYMBOL","index","argKey","Number","push","m","Promise","all","resolve","then","EventEmitter","getExposeKey","getHandler","getState","injectProperty","registerAsync","Pmeta","data","handlers","reflect","constructor","emitter","EventEmitter","Factory","Modules","moduleMap","Map","meta","injectProperty","eventName","instance","key","options","fn","bind","v","once","on","Module","buildNestModule","map","paramtypes","getParamtypes","name","has","get","Error","set","undefined","i","push","getMetaFromInstance","registerAsync","vars","getExposeKey","filter","item","baseState","getState","initState","state","route","method","params","unshift","index","header","Object","assign","middlewares","Set","guards","interceptors","Pmeta","getHandler","Reflect","getMetadata","mergeState","setModalVar","mergeState","setModalVar","BaseParam","type","key","validate","target","k","index","setModalVar","mergeState","params","Body","Query","Param","mergeState","setModalVar","Route","route","type","target","key","setModalVar","mergeState","prototype","Get","Post","Put","Delete","Controller","Guard","guardKey","guards","Interceptor","interceptorKey","interceptors","mergeState","setModalVar","MQ","queue","routeKey","options","target","k","setModalVar","mergeState","mq","Inject","_target","Header","name","value","target","k","setModalVar","mergeState","header","resolve","normalizePath","Server","localPath","root","metaPath","name","enforce","configResolved","config","process","cwd","normalizePath","resolve","resolveId","id","endsWith","transform","code","meta","JSON","parse","compiler","Pcompiler","i","addMethod","method","route","type","params","getContent","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/pipe.ts","../src/exception/base.ts","../src/exception/validate.ts","../src/exception/undefine.ts","../src/exception/forbidden.ts","../src/exception/bad-request.ts","../src/exception/wrong-meta.ts","../src/exception/not-found.ts","../src/filter.ts","../src/history.ts","../src/context/base.ts","../src/context/server.ts","../src/context/micro.ts","../src/compiler.ts","../src/utils.ts","../src/common.ts","../src/server/express.ts","../src/core.ts","../src/meta.ts","../src/decorators/index.ts","../src/decorators/param.ts","../src/decorators/route.ts","../src/decorators/micro.ts","../src/vite/index.ts","../src/index.ts","../src/config.ts","../src/micro-services/rabbitmq.ts","../src/client/axios.ts","../src/client/server.ts"],"sourcesContent":["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 if (validate && !(arg?.constructor === reflect[i])) {\n throw new ValidateException(`${arg} is not ${reflect[i].name}`)\n }\n else {\n if (isPhecda(reflect[i])) {\n const ret = await plainToClass(reflect[i], arg, { transform: false })\n if (ret.err.length > 0)\n throw new ValidateException(ret.err[0])\n }\n }\n }\n return args.map(item => item.arg)\n },\n} as ValidatePipe\n","export class HttpException extends Error {\n constructor(public message: string, public status: number, public description = 'Http exception') {\n super(message)\n }\n\n get data() {\n return { message: this.message, description: this.description, status: this.status, error: true }\n }\n}\n\n// export class BaseException extends Error {\n// constructor(public message: string, public description = 'Base exception') {\n// super(message)\n// }\n\n// get data() {\n// return { message: this.message, description: this.description, status: this.status, error: true }\n// }\n// }\n","import { HttpException } from './base'\n\nexport class ValidateException extends HttpException {\n constructor(message: string) {\n super(message, 400, 'Validate exception')\n }\n}\n","import { HttpException } from './base'\n\nexport class UndefinedException extends HttpException {\n constructor(message: string) {\n super(message, 500, 'Undefined error')\n }\n}\n","import { HttpException } from './base'\n\nexport class ForbiddenException extends HttpException {\n constructor(message: string) {\n super(message, 403, 'Forbidden resource')\n }\n}\n","import { HttpException } from './base'\n\nexport class BadRequestException extends HttpException {\n constructor(message: string) {\n super(message, 400, 'Bad Request')\n }\n}\n","import { HttpException } from './base'\n\nexport class WrongMetaException extends HttpException {\n constructor(message: string) {\n super(message, 500, 'Meta is not correct')\n }\n}\n","import { HttpException } from './base'\n\nexport class NotFoundException extends HttpException {\n constructor(message: string) {\n super(message, 404, 'Not Found')\n }\n}\n","import { HttpException, UndefinedException } from './exception'\nexport type ErrorFilter<E extends HttpException = any> = (err: E | Error, contextData: any) => any\n\nexport const serverFilter: ErrorFilter = (e: any) => {\n if (!(e instanceof HttpException))\n e = new UndefinedException(e.message || e)\n return e.data\n}\n\nexport const rabbitMqFilter: ErrorFilter = (e: any, data) => {\n const { channel, message } = data\n channel!.reject(message!, true)\n}\n","export class Phistroy {\n guard: string[] = []\n interceptor: string[] = []\n record(name: string, type: 'guard' | 'interceptor') {\n if (!this[type].includes(name)) {\n this[type].push(name)\n return true\n }\n return false\n }\n}\n","import { WrongMetaException } from '../exception/wrong-meta'\nimport { Phistroy } from '../history'\nimport { ForbiddenException } from '../exception'\n\nimport type { Pmeta } from '../meta'\n\nexport abstract class Pcontext {\n method: string\n params: string[]\n\n static metaRecord: Record<string, Pmeta> = {}\n static metaDataRecord: Record<string, ReturnType<typeof parseMeta>> = {}\n static instanceRecord: Record<string, any> = {}\n static guardsRecord: Record<string, (req: any, isMerge: boolean) => boolean> = {}\n static interceptorsRecord: Record<string, (req: any, isMerge: boolean) => any > = {}\n // static serverRecord: Record<string, Pcontext> = {}\n post: ((...params: any) => any)[]\n history = new Phistroy()\n constructor(public key: string, public data: any) {\n }\n\n static registerGuard(key: string, handler: any) {\n Pcontext.guardsRecord[key] = handler\n }\n\n static registerInterceptor(key: string, handler: any) {\n Pcontext.interceptorsRecord[key] = handler\n }\n\n async useGuard(guards: string[], isMerge = false) {\n for (const guard of guards) {\n if (this.history.record(guard, 'guard')) {\n if (!(guard in Pcontext.guardsRecord))\n throw new WrongMetaException(`can't find guard named ${guard}`)\n if (!await Pcontext.guardsRecord[guard](this.data, isMerge))\n throw new ForbiddenException(`Guard exception--${guard}`)\n }\n }\n }\n\n async useInterceptor(interceptors: string[], isMerge = false) {\n const ret = []\n for (const interceptor of interceptors) {\n if (this.history.record(interceptor, 'interceptor')) {\n if (!(interceptor in Pcontext.interceptorsRecord))\n throw new WrongMetaException(`can't find guard named ${interceptor}`)\n const post = await Pcontext.interceptorsRecord[interceptor](this.data, isMerge)\n if (post)\n ret.push(post)\n }\n }\n this.post = ret\n }\n\n async usePost(data: any) {\n if (!this.post)\n return data\n for (const cb of this.post)\n data = (await cb(data)) | data\n\n return data\n }\n}\n\nexport function addGuard(key: string, handler: (contextData: any, isMerge: boolean) => boolean) {\n Pcontext.registerGuard(key, handler)\n}\n\nexport function addInterceptor(key: string, handler: (contextData: any, isMerge: boolean) => any) {\n Pcontext.registerInterceptor(key, handler)\n}\nexport function getInstance(tag: string) {\n return Pcontext.instanceRecord[tag]\n}\n\nexport function parseMeta(meta: Pmeta) {\n const { data: { params, guards, interceptors, middlewares }, reflect } = meta\n return {\n guards,\n reflect,\n interceptors,\n middlewares,\n params: params.map((param) => {\n const { type, key, validate } = param\n return { type, key, validate }\n }),\n }\n}\n","import type { ValidatePipe } from '../pipe'\nimport { defaultPipe } from '../pipe'\nimport type { ErrorFilter } from '../filter'\nimport { serverFilter } from '../filter'\nimport { WrongMetaException } from '../exception/wrong-meta'\nimport { Pcontext } from './base'\n\nexport class ServerContext extends Pcontext {\n static pipe = defaultPipe\n static filter = serverFilter\n static middlewareRecord: Record<string, (...params: any) => any> = {}\n static useMiddleware(middlewares: string[]) {\n return middlewares.map((m) => {\n if (!(m in ServerContext.middlewareRecord))\n throw new WrongMetaException(`can't find middleware named ${m}`)\n return ServerContext.middlewareRecord[m]\n })\n }\n\n async usePipe(args: { arg: any; validate?: boolean }[], reflect: any[]) {\n return ServerContext.pipe.transform?.(args, reflect)\n }\n\n useFilter(arg: any) {\n return ServerContext.filter(arg, this.data)\n }\n}\n\nexport function addMiddleware(key: string, handler: (...params: any) => any) {\n ServerContext.middlewareRecord[key] = handler\n}\n\nexport function useServerPipe(pipe: ValidatePipe) {\n ServerContext.pipe = pipe\n}\nexport function useServerFilter(filter: ErrorFilter) {\n ServerContext.filter = filter\n}\n","import type { ValidatePipe } from '../pipe'\nimport { defaultPipe } from '../pipe'\nimport type { ErrorFilter } from '../filter'\nimport { rabbitMqFilter } from '../filter'\nimport { WrongMetaException } from '../exception/wrong-meta'\nimport { Pcontext } from './base'\n\nexport class RabbitMqContext extends Pcontext {\n static pipe = defaultPipe\n static filter = rabbitMqFilter\n static middlewareRecord: Record<string, (...params: any) => boolean> = {}\n static useMiddleware(middlewares: string[]) {\n return middlewares.map((m) => {\n if (!(m in RabbitMqContext.middlewareRecord))\n throw new WrongMetaException(`can't find middleware named ${m}`)\n return RabbitMqContext.middlewareRecord[m]\n })\n }\n\n async usePipe(args: { arg: any; validate?: boolean }[], reflect: any[]) {\n return RabbitMqContext.pipe.transform?.(args, reflect)\n }\n\n useFilter(arg: any) {\n return RabbitMqContext.filter(arg, this.data)\n }\n}\nexport function useMqPipe(pipe: ValidatePipe) {\n RabbitMqContext.pipe = pipe\n}\nexport function useMqFilter(filter: ErrorFilter) {\n RabbitMqContext.filter = filter\n}\n","import type { RequestType } 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(className: string, methodName: string, route = '', requestType: RequestType | '' = '', params: { type: string; key: string; index: number }[] = []) {\n const url = route.replace(/\\/\\:([^\\/]*)/g, '')\n if (!this.classMap[className])\n this.classMap[className] = {}\n this.classMap[className][methodName] = `\n ${methodName}(${genParams(params)}){\nconst ret={tag:\"${className}-${methodName}\",body:{},query:{},params:{},realParam:'',method:\"${requestType}\",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, 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)}){\nconst ret={tag:\"${className}-${methodName}\",exchange:\"${exchange}\",routeKey:\"${routeKey}\",queue:\"${queue}\",args:{}}\n${params.reduce((p, c, i) => `${p}ret.args.${c.key}=arg${i}\\n`, '')}\nreturn ret\n }\n `\n }\n}\n\nfunction genParams(decorators: any[]) {\n let index = 0\n return decorators.reduce((p) => {\n return `${`${p}arg${index++}`},`\n }, '')\n}\n","export const isUndefined = (obj: any): obj is undefined =>\n typeof obj === 'undefined'\nexport const isNil = (obj: any): obj is null | undefined =>\n isUndefined(obj) || obj === null\n\nexport const isObject = (fn: any): fn is object =>\n !isNil(fn) && typeof fn === 'object'\n\nexport function resolveDep(ret: any, key: string) {\n if (key)\n return ret?.[key]\n return ret\n}\n\n/**\n * @experiment\n */\nexport class Wrap<F, T> {\n constructor(public v1: F,\n public V2: T) {\n\n }\n\n get value() {\n return this.V2\n }\n}\n","export const SERIES_SYMBOL = '__symbol_series__'\nexport const REQ_SYMBOL = '__symbol_req__'\n","import type { Express } from 'express'\nimport { Pcontext, ServerContext, parseMeta } from '../context'\nimport { isObject, resolveDep } from '../utils'\nimport { REQ_SYMBOL, SERIES_SYMBOL } from '../common'\nimport type { Factory } from '../core'\nimport { NotFoundException } from '../exception/not-found'\n\nexport interface Options {\n/**\n * 专用路由的值,默认为/__PHECDA_SERVER__,处理phecda-client发出的合并请求\n */\n route?: string\n /**\n * 全局守卫\n */\n globalGuards?: string[]\n /**\n * 全局拦截器\n */\n globalInterceptors?: string[]\n /**\n * 专用路由的中间件,全局中间件请在bindApp以外设置\n */\n middlewares?: string[]\n}\n\nexport function bindApp(app: Express, { meta, moduleMap }: Awaited<ReturnType<typeof Factory>>, options: Options = {}) {\n const { globalGuards, globalInterceptors, route, middlewares: proMiddle } = { route: '/__PHECDA_SERVER__', globalGuards: [], globalInterceptors: [], middlewares: [], ...options } as Required<Options>\n const methodMap = {} as Record<string, (...args: any[]) => any>\n for (const i of meta) {\n const { name, method, route, header } = i.data\n const instance = moduleMap.get(name)!\n const tag = `${name}-${method}`\n\n Pcontext.metaRecord[tag] = i\n let {\n guards,\n reflect,\n interceptors,\n params,\n middlewares,\n } = Pcontext.metaDataRecord[tag] ? Pcontext.metaDataRecord[tag] : (Pcontext.metaDataRecord[tag] = parseMeta(i))\n\n guards = [...globalGuards!, ...guards]\n interceptors = [...globalInterceptors!, ...interceptors]\n\n const handler = instance[method].bind(instance)\n methodMap[tag] = 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 tag,\n response: res,\n }\n const context = new ServerContext(tag, contextData)\n\n try {\n for (const name in header)\n res.set(name, header[name])\n await context.useGuard(guards)\n await context.useInterceptor(interceptors)\n const args = await context.usePipe(params.map(({ type, key, validate }) => {\n return { arg: resolveDep((req as any)[type], key), validate }\n }), reflect)\n instance.meta = contextData\n\n const ret = await context.usePost(await handler(...args))\n if (isObject(ret))\n res.json(ret)\n else\n res.send(String(ret))\n }\n catch (e: any) {\n i.handlers.forEach(handler => handler.error?.(e))\n const err = await context.useFilter(e)\n res.status(err.status).json(err)\n }\n })\n }\n }\n\n app.post(route, (req, _res, next) => {\n (req as any)[REQ_SYMBOL] = true\n next()\n }, ...ServerContext.useMiddleware(proMiddle), async (req, res) => {\n const contextData = {\n request: req,\n response: res,\n }\n const context = new ServerContext(route, contextData)\n const ret = [] as any[]\n\n const { body: { category, data } } = req\n if (category === 'series') {\n for (const item of data) {\n const { tag } = item\n const [name] = tag.split('-')\n const {\n guards,\n reflect,\n interceptors,\n params,\n } = Pcontext.metaDataRecord[tag]\n const instance = moduleMap.get(name)\n\n try {\n if (!params)\n throw new NotFoundException(`\"${tag}\" doesn't exist`)\n\n await context.useGuard(guards, true)\n await context.useInterceptor(interceptors, true)\n const args = await context.usePipe(params.map(({ type, key, validate }) => {\n const arg = resolveDep(item[type], key)\n if (typeof arg === 'string' && arg.startsWith(SERIES_SYMBOL)) {\n const [, index, argKey] = arg.split('@')\n return { arg: resolveDep(ret[Number(index)], argKey || key), validate }\n }\n\n return { arg, validate }\n }), reflect) as any\n instance.meta = contextData\n\n ret.push(await context.usePost(await methodMap[tag](...args)))\n }\n catch (e: any) {\n const m = Pcontext.metaRecord[tag]\n m.handlers.forEach(handler => handler.error?.(e))\n ret.push(await context.useFilter(e))\n }\n }\n return res.json(ret)\n }\n if (category === 'parallel') {\n return Promise.all(data.map((item: any) => {\n // eslint-disable-next-line no-async-promise-executor\n return new Promise(async (resolve) => {\n const { tag } = item\n const [name] = tag.split('-')\n const {\n guards,\n reflect,\n interceptors,\n params,\n } = Pcontext.metaDataRecord[tag]\n const instance = moduleMap.get(name)\n\n try {\n if (!params)\n throw new NotFoundException(`\"${tag}\" doesn't exist`)\n\n await context.useGuard(guards, true)\n await context.useInterceptor(interceptors, true)\n const args = await context.usePipe(params.map(({ type, key, validate }) => {\n const arg = resolveDep(item[type], key)\n return { arg, validate }\n }), reflect) as any\n instance.meta = contextData\n resolve(await context.usePost(await methodMap[tag](...args)))\n }\n catch (e: any) {\n const m = Pcontext.metaRecord[tag]\n m.handlers.forEach(handler => handler.error?.(e))\n resolve(await context.useFilter(e))\n }\n })\n })).then((ret) => {\n res.json(ret)\n })\n }\n\n res.json(await context.useFilter(new NotFoundException('category should be \\'parallel\\' or \\'series\\'')))\n })\n}\n","import 'reflect-metadata'\nimport EventEmitter from 'events'\nimport type { Phecda } from 'phecda-core'\nimport { getExposeKey, getHandler, getState, injectProperty, registerAsync } from 'phecda-core'\nimport type { Construct, PhecdaEmitter, ServerMeta } from './types'\nimport { Pmeta } from './meta'\n\n// TODO: support both phecda-emitter types and origin emitter type in future\nexport const emitter: PhecdaEmitter = new EventEmitter() as any\n\nexport async function Factory<T>(Modules: Construct<T>[]) {\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) as InstanceType<Construct<T>>\n\n return { moduleMap, meta }\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 name = Module.prototype._namespace?.__TAG__ || Module.name\n if (map.has(name)) {\n instance = map.get(name)\n if (!instance)\n throw new Error(`exist Circular Module dep--${Module}`)\n\n return instance\n }\n map.set(name, undefined)\n if (paramtypes) {\n for (const i in paramtypes)\n paramtypes[i] = await buildNestModule(paramtypes[i], map, meta)\n\n instance = new Module(...paramtypes)\n }\n else {\n instance = new Module()\n }\n meta.push(...getMetaFromInstance(instance, name))\n await registerAsync(instance)\n map.set(name, instance)\n\n return instance\n}\n\nfunction getMetaFromInstance(instance: Phecda, name: 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.method = i\n const params = [] as any[]\n for (const i of state.params || []) {\n params.unshift(i)\n if (i.index === 0)\n break\n }\n state.params = params\n initState(state)\n state.header = Object.assign({}, baseState.header, state.header)\n state.middlewares = [...new Set([...baseState.middlewares, ...state.middlewares])]\n state.guards = [...new Set([...baseState.guards, ...state.guards])]\n state.interceptors = [...new Set([...baseState.interceptors, ...state.interceptors])]\n\n return new Pmeta(state as unknown as ServerMeta, getHandler(instance, i), getParamtypes(instance, i) || [])\n })\n}\n\nfunction getParamtypes(Module: any, key?: string | symbol) {\n return Reflect.getMetadata('design:paramtypes', Module, key!)\n}\n\nfunction initState(state: any) {\n if (!state.header)\n state.header = {}\n if (!state.middlewares)\n state.middlewares = []\n if (!state.guards)\n state.guards = []\n if (!state.interceptors)\n state.interceptors = []\n}\n","import type { PHandler, ServerMeta } from './types'\n\nexport class Pmeta {\n constructor(public data: ServerMeta, public handlers: PHandler[], public reflect: any[]) {\n\n }\n}\n","import { mergeState, setModalVar } from 'phecda-core'\n\nexport function Inject(_target: any) { }\n\nexport function Header(name: string, value: string) {\n return (target: any, k: PropertyKey) => {\n setModalVar(target, k)\n mergeState(target, k, {\n header: { name, value },\n })\n }\n}\n\nexport * from './param'\nexport * from './route'\n\nexport * from './micro'\n","import { mergeState, setModalVar } from 'phecda-core'\n\nexport function BaseParam(type: string, key: string, validate?: boolean): any {\n return (target: any, k: PropertyKey, index: number) => {\n setModalVar(target, k)\n mergeState(target, k, {\n params: [{ type, key, index, validate }],\n })\n }\n}\n\nexport function Body(key = '', validate?: boolean) {\n return BaseParam('body', key, validate)\n}\nexport function Query(key: string, validate?: boolean) {\n return BaseParam('query', key, validate)\n}\nexport function Param(key: string, validate?: boolean) {\n return BaseParam('params', key, validate)\n}\n","import { mergeState, setModalVar } from 'phecda-core'\n\nexport function Route(route: string, type?: string): any {\n return (target: any, key?: PropertyKey) => {\n if (key) {\n setModalVar(target, key)\n mergeState(target, key, {\n route: {\n route,\n type,\n },\n })\n }\n else {\n setModalVar(target.prototype, '__CLASS')\n mergeState(target.prototype, '__CLASS', {\n route: {\n route,\n type,\n },\n })\n }\n }\n}\n\nexport function Get(route: string) {\n return Route(route, 'get')\n}\n\nexport function Post(route: string) {\n return Route(route, 'post')\n}\nexport function Put(route: string) {\n return Route(route, 'put')\n}\n\nexport function Delete(route: string) {\n return Route(route, 'delete')\n}\n\nexport function Controller(route: string) {\n return Route(route)\n}\n\nexport function Guard(...guards: string[]): any {\n return (target: any, key?: PropertyKey) => {\n if (key) {\n setModalVar(target, key)\n mergeState(target, key, {\n guards: [...guards],\n })\n }\n else {\n setModalVar(target.prototype, '__CLASS')\n mergeState(target.prototype, '__CLASS', {\n guards: [...guards],\n })\n }\n }\n}\n\nexport function Middle(...middlewares: string[]): any {\n return (target: any, key?: PropertyKey) => {\n if (key) {\n setModalVar(target, key)\n mergeState(target, key, {\n middlewares: [...middlewares],\n })\n }\n else {\n setModalVar(target.prototype, '__CLASS')\n mergeState(target.prototype, '__CLASS', {\n middlewares: [...middlewares],\n })\n }\n }\n}\n\nexport function Interceptor(...interceptors: string[]): any {\n return (target: any, key?: PropertyKey) => {\n if (key) {\n setModalVar(target, key)\n mergeState(target, key, {\n interceptors: [...interceptors],\n })\n }\n else {\n setModalVar(target.prototype, '__CLASS')\n mergeState(target.prototype, '__CLASS', {\n interceptors: [...interceptors],\n })\n }\n }\n}\n","import { mergeState, setModalVar } from 'phecda-core'\nimport type amqplib from 'amqplib'\nexport function MQ(queue: string, routeKey: string, options?: amqplib.Options.Consume) {\n return (target: any, k: PropertyKey) => {\n setModalVar(target, k)\n mergeState(target, k, {\n mq: {\n queue,\n routeKey,\n options,\n },\n })\n }\n}\n","import { resolve } from 'path'\nimport type { PluginOption } from 'vite'\nimport { normalizePath } from 'vite'\nimport { Pcompiler } from '../compiler'\nimport type { ServerMeta } from '../types'\nexport function Server(localPath: string): PluginOption {\n let root: string\n let metaPath: string\n return {\n name: 'phecda-server-vite:client',\n enforce: 'pre',\n configResolved(config) {\n root = config.root || process.cwd()\n metaPath = normalizePath(resolve(root, localPath))\n },\n resolveId(id) {\n if (id.endsWith('.controller'))\n return metaPath\n },\n transform(code, id) {\n if (id === metaPath) {\n const meta = JSON.parse(code) as ServerMeta[]\n const compiler = new Pcompiler()\n\n for (const i of meta)\n compiler.addMethod(i.name, i.method, i.route?.route, i.route?.type, i.params)\n return {\n code: compiler.getContent(),\n }\n }\n },\n }\n}\n","export * from './context'\nexport * from './types'\nexport * from './compiler'\nexport * from './server/express'\nexport * from './core'\nexport * from './decorators'\nexport * from './vite'\nexport * from './exception'\nexport * from './pipe'\nexport * from './meta'\nexport * from 'phecda-core'\nexport * from './micro-services/rabbitmq'\nexport * from './client/server'\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":["isPhecda","plainToClass","HttpException","Error","message","status","description","constructor","data","error","ValidateException","HttpException","constructor","message","defaultPipe","transform","args","reflect","i","validate","arg","constructor","ValidateException","name","isPhecda","ret","plainToClass","err","length","map","item","UndefinedException","HttpException","constructor","message","ForbiddenException","HttpException","constructor","message","BadRequestException","HttpException","constructor","message","WrongMetaException","HttpException","constructor","message","NotFoundException","HttpException","constructor","message","serverFilter","e","HttpException","UndefinedException","message","data","rabbitMqFilter","channel","reject","Phistroy","guard","interceptor","record","name","type","includes","push","Pcontext","key","data","method","params","post","history","constructor","Phistroy","registerGuard","handler","guardsRecord","registerInterceptor","interceptorsRecord","useGuard","guards","isMerge","guard","record","WrongMetaException","ForbiddenException","useInterceptor","interceptors","ret","interceptor","push","usePost","cb","metaRecord","metaDataRecord","instanceRecord","addGuard","addInterceptor","getInstance","tag","parseMeta","meta","middlewares","reflect","map","param","type","validate","ServerContext","Pcontext","useMiddleware","middlewares","map","m","middlewareRecord","WrongMetaException","usePipe","args","reflect","pipe","transform","useFilter","arg","filter","data","defaultPipe","serverFilter","addMiddleware","key","handler","useServerPipe","useServerFilter","RabbitMqContext","Pcontext","useMiddleware","middlewares","map","m","middlewareRecord","WrongMetaException","usePipe","args","reflect","pipe","transform","useFilter","arg","filter","data","defaultPipe","rabbitMqFilter","useMqPipe","useMqFilter","Pcompiler","content","classMap","constructor","getContent","name","Object","values","reduce","p","c","addMethod","className","methodName","route","requestType","params","url","replace","genParams","filter","item","key","i","type","addMqMethod","exchange","routeKey","queue","decorators","index","isUndefined","obj","isNil","isObject","fn","resolveDep","ret","key","SERIES_SYMBOL","REQ_SYMBOL","bindApp","app","meta","moduleMap","options","globalGuards","globalInterceptors","route","middlewares","proMiddle","methodMap","i","name","method","header","data","instance","get","tag","Pcontext","metaRecord","guards","reflect","interceptors","params","metaDataRecord","parseMeta","handler","bind","instanceRecord","type","ServerContext","useMiddleware","req","res","contextData","request","response","context","set","useGuard","useInterceptor","args","usePipe","map","key","validate","arg","resolveDep","ret","usePost","isObject","json","send","String","e","handlers","forEach","error","err","useFilter","status","post","_res","next","REQ_SYMBOL","body","category","item","split","NotFoundException","startsWith","SERIES_SYMBOL","index","argKey","Number","push","m","Promise","all","resolve","then","EventEmitter","getExposeKey","getHandler","getState","injectProperty","registerAsync","Pmeta","data","handlers","reflect","constructor","emitter","EventEmitter","Factory","Modules","moduleMap","Map","meta","injectProperty","eventName","instance","key","options","fn","bind","v","once","on","Module","buildNestModule","map","paramtypes","getParamtypes","name","prototype","_namespace","__TAG__","has","get","Error","set","undefined","i","push","getMetaFromInstance","registerAsync","vars","getExposeKey","filter","item","baseState","getState","initState","state","route","method","params","unshift","index","header","Object","assign","middlewares","Set","guards","interceptors","Pmeta","getHandler","Reflect","getMetadata","mergeState","setModalVar","mergeState","setModalVar","BaseParam","type","key","validate","target","k","index","setModalVar","mergeState","params","Body","Query","Param","mergeState","setModalVar","Route","route","type","target","key","setModalVar","mergeState","prototype","Get","Post","Put","Delete","Controller","Guard","guards","Middle","middlewares","Interceptor","interceptors","mergeState","setModalVar","MQ","queue","routeKey","options","target","k","setModalVar","mergeState","mq","Inject","_target","Header","name","value","target","k","setModalVar","mergeState","header","resolve","normalizePath","Server","localPath","root","metaPath","name","enforce","configResolved","config","process","cwd","normalizePath","resolve","resolveId","id","endsWith","transform","code","meta","JSON","parse","compiler","Pcompiler","i","addMethod","method","route","type","params","getContent","Pconfig","rabbitmq","guard","interceptor","bindMQ","ch","meta","moduleMap","item","route","name","method","mq","routeKey","queue","queueName","options","data","tag","Pcontext","metaRecord","guards","reflect","interceptors","params","metaDataRecord","parseMeta","instance","get","handler","bind","instanceRecord","assertQueue","bindQueue","consume","msg","content","toString","length","JSON","parse","contextMeta","message","channel","context","RabbitMqContext","Pconfig","rabbitmq","guard","useGuard","interceptor","useInterceptor","args","usePipe","map","key","validate","arg","resolveDep","usePost","ack","e","handlers","forEach","error","useFilter","createPub","type","exchange","assertExchange","Buffer","from","stringify","publish","sendToQueue","toReq","arg","body","query","realParam","method","url","Object","keys","length","entries","map","k","v","join","params","merge","args","ret","i","tag","push","createReq","instance","config","console","warn","createSeriesReq","key","post","category","data","createParallelReq","isError","error","$S","index","SERIES_SYMBOL","createMqReq","channel","arg","url","body","assertQueue","sendToQueue","Buffer","from","JSON","stringify"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "phecda-server",
3
- "version": "1.2.0",
4
- "description": "",
3
+ "version": "1.2.2",
4
+ "description": "types share between server and client,`nestjs` format",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",
7
7
  "types": "dist/index.d.ts",
@@ -22,7 +22,13 @@
22
22
  ]
23
23
  }
24
24
  },
25
- "keywords": [],
25
+ "keywords": [
26
+ "server",
27
+ "express",
28
+ "rabbitmq",
29
+ "types-share",
30
+ "fullstack"
31
+ ],
26
32
  "author": "",
27
33
  "files": [
28
34
  "dist"
@@ -42,7 +48,7 @@
42
48
  "eventemitter3": "^5.0.0",
43
49
  "reflect-metadata": "^0.1.13",
44
50
  "vite": "^4.0.0",
45
- "phecda-core": "1.1.1"
51
+ "phecda-core": "1.2.0"
46
52
  },
47
53
  "scripts": {
48
54
  "dev": "tsup --watch",