phecda-server 1.1.0 → 1.1.1

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.
@@ -1,30 +1,9 @@
1
- import { AxiosInstance, AxiosRequestConfig, AxiosResponse } from 'axios';
2
- import { R as RequestType, c as PRes, b as ResOrErr, a as PError } from '../types-acc60391.js';
1
+ export { $ as $S, g as RequestMethod, i as createMergeReq, h as createReq, j as isError, m as merge, t as toReq } from '../server-d482bc0d.js';
2
+ import 'axios';
3
3
  import 'express';
4
4
  import 'amqplib';
5
+ import 'phecda-core';
5
6
 
6
- interface RequestArgs {
7
- body: Record<string, any>;
8
- query: Record<string, string>;
9
- params: Record<string, string>;
10
- realParam: string;
11
- method: RequestType;
12
- url: string;
13
- tag: string;
14
- }
15
- type MergedReqArg = Pick<RequestArgs, 'body' | 'query' | 'params' | 'tag'>;
16
- declare function toReq(arg: RequestArgs): {
17
- method: RequestType;
18
- url: string;
19
- body: Record<string, any>;
20
- query: string;
21
- params: string;
22
- };
23
- declare const merge: (...args: RequestArgs[]) => MergedReqArg[];
24
- type RequestMethod = <F extends (...args: any[]) => any>(fn: F, args: Parameters<F>) => Promise<ReturnType<F>>;
25
- declare function createReq(instance: AxiosInstance): <R>(arg: R, config?: AxiosRequestConfig) => Promise<AxiosResponse<PRes<Awaited<R>>>>;
26
- declare function createMergeReq(instance: AxiosInstance, key?: string): <R extends unknown[]>(args: R, config?: AxiosRequestConfig) => Promise<AxiosResponse<ResOrErr<PRes<R>>>>;
27
- declare function isError<T = any>(data: T | PError): data is PError;
28
- declare function $S(index: number, key?: string): any;
7
+ declare function createBeacon(baseUrl: string): (arg: any) => void;
29
8
 
30
- export { $S, RequestMethod, createMergeReq, createReq, isError, merge, toReq };
9
+ export { createBeacon };
@@ -22,6 +22,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
22
22
  var client_exports = {};
23
23
  __export(client_exports, {
24
24
  $S: () => $S,
25
+ createBeacon: () => createBeacon,
25
26
  createMergeReq: () => createMergeReq,
26
27
  createReq: () => createReq,
27
28
  isError: () => isError,
@@ -33,7 +34,7 @@ module.exports = __toCommonJS(client_exports);
33
34
  // src/common.ts
34
35
  var SERIES_SYMBOL = "__symbol_series__";
35
36
 
36
- // src/client/index.ts
37
+ // src/client/server.ts
37
38
  function toReq(arg) {
38
39
  const { body, query, realParam, method, url } = arg;
39
40
  return {
@@ -88,9 +89,19 @@ function $S(index, key = "") {
88
89
  return `${SERIES_SYMBOL}@${index}@${key}`;
89
90
  }
90
91
  __name($S, "$S");
92
+
93
+ // src/client/index.ts
94
+ function createBeacon(baseUrl) {
95
+ return (arg) => {
96
+ const { url, params, query, body } = toReq(arg);
97
+ navigator.sendBeacon(`${baseUrl}${url}${params}${query}`, JSON.stringify(body));
98
+ };
99
+ }
100
+ __name(createBeacon, "createBeacon");
91
101
  // Annotate the CommonJS export names for ESM import in node:
92
102
  0 && (module.exports = {
93
103
  $S,
104
+ createBeacon,
94
105
  createMergeReq,
95
106
  createReq,
96
107
  isError,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/client/index.ts","../../src/common.ts"],"sourcesContent":["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 createMergeReq(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, merge(...args), 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","export const SERIES_SYMBOL = '__symbol_series__'\nexport const REQ_SYMBOL = '__symbol_req__'\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAEA;;;;;;;;;;;;ACFO,IAAMA,gBAAgB;;;ADatB,SAASC,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,eAAeJ,UAAyBK,MAAM,sBAAiI;AAE7L,SAAO,CAACX,MAAqBO,WAAgC;AAC3D,WAAOD,SAASM,KAAKD,KAAKZ,MAAAA,GAASC,IAAAA,GAAOO,MAAAA;EAC5C;AACF;AALgBG;AAOT,SAASG,QAAiBC,MAAkC;AACjE,SAAO,OAAOA,SAAS,YAAaA,KAAaC;AACnD;AAFgBF;AAIT,SAASG,GAAGC,OAAeN,MAAM,IAAS;AAC/C,SAAO,GAAGO,iBAAiBD,SAASN;AACtC;AAFgBK;","names":["SERIES_SYMBOL","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","createMergeReq","key","post","isError","data","error","$S","index","SERIES_SYMBOL"]}
1
+ {"version":3,"sources":["../../src/client/index.ts","../../src/common.ts","../../src/client/server.ts"],"sourcesContent":["import { toReq } from './server'\nexport * from './server'\n\nexport function createBeacon(baseUrl: string) {\n return (arg: any) => {\n const { url, params, query, body } = toReq(arg as any)\n\n navigator.sendBeacon(`${baseUrl}${url}${params}${query}`, JSON.stringify(body))\n }\n}\n","export const SERIES_SYMBOL = '__symbol_series__'\nexport const REQ_SYMBOL = '__symbol_req__'\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 createMergeReq(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, merge(...args), 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"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;;;;;ACAO,IAAMA,gBAAgB;;;ACatB,SAASC,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,eAAeJ,UAAyBK,MAAM,sBAAiI;AAE7L,SAAO,CAACX,MAAqBO,WAAgC;AAC3D,WAAOD,SAASM,KAAKD,KAAKZ,MAAAA,GAASC,IAAAA,GAAOO,MAAAA;EAC5C;AACF;AALgBG;AAOT,SAASG,QAAiBC,MAAkC;AACjE,SAAO,OAAOA,SAAS,YAAaA,KAAaC;AACnD;AAFgBF;AAIT,SAASG,GAAGC,OAAeN,MAAM,IAAS;AAC/C,SAAO,GAAGO,iBAAiBD,SAASN;AACtC;AAFgBK;;;AFvDT,SAASG,aAAaC,SAAiB;AAC5C,SAAO,CAACC,QAAa;AACnB,UAAM,EAAEC,KAAKC,QAAQC,OAAOC,KAAI,IAAKC,MAAML,GAAAA;AAE3CM,cAAUC,WAAW,GAAGR,UAAUE,MAAMC,SAASC,SAASK,KAAKC,UAAUL,IAAAA,CAAAA;EAC3E;AACF;AANgBN;","names":["SERIES_SYMBOL","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","createMergeReq","key","post","isError","data","error","$S","index","SERIES_SYMBOL","createBeacon","baseUrl","arg","url","params","query","body","toReq","navigator","sendBeacon","JSON","stringify"]}
@@ -4,7 +4,7 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
4
4
  // src/common.ts
5
5
  var SERIES_SYMBOL = "__symbol_series__";
6
6
 
7
- // src/client/index.ts
7
+ // src/client/server.ts
8
8
  function toReq(arg) {
9
9
  const { body, query, realParam, method, url } = arg;
10
10
  return {
@@ -59,8 +59,18 @@ function $S(index, key = "") {
59
59
  return `${SERIES_SYMBOL}@${index}@${key}`;
60
60
  }
61
61
  __name($S, "$S");
62
+
63
+ // src/client/index.ts
64
+ function createBeacon(baseUrl) {
65
+ return (arg) => {
66
+ const { url, params, query, body } = toReq(arg);
67
+ navigator.sendBeacon(`${baseUrl}${url}${params}${query}`, JSON.stringify(body));
68
+ };
69
+ }
70
+ __name(createBeacon, "createBeacon");
62
71
  export {
63
72
  $S,
73
+ createBeacon,
64
74
  createMergeReq,
65
75
  createReq,
66
76
  isError,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/common.ts","../../src/client/index.ts"],"sourcesContent":["export const SERIES_SYMBOL = '__symbol_series__'\nexport const REQ_SYMBOL = '__symbol_req__'\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 createMergeReq(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, merge(...args), 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"],"mappings":";;;;AAAO,IAAMA,gBAAgB;;;ACatB,SAASC,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,eAAeJ,UAAyBK,MAAM,sBAAiI;AAE7L,SAAO,CAACX,MAAqBO,WAAgC;AAC3D,WAAOD,SAASM,KAAKD,KAAKZ,MAAAA,GAASC,IAAAA,GAAOO,MAAAA;EAC5C;AACF;AALgBG;AAOT,SAASG,QAAiBC,MAAkC;AACjE,SAAO,OAAOA,SAAS,YAAaA,KAAaC;AACnD;AAFgBF;AAIT,SAASG,GAAGC,OAAeN,MAAM,IAAS;AAC/C,SAAO,GAAGO,iBAAiBD,SAASN;AACtC;AAFgBK;","names":["SERIES_SYMBOL","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","createMergeReq","key","post","isError","data","error","$S","index","SERIES_SYMBOL"]}
1
+ {"version":3,"sources":["../../src/common.ts","../../src/client/server.ts","../../src/client/index.ts"],"sourcesContent":["export const SERIES_SYMBOL = '__symbol_series__'\nexport const REQ_SYMBOL = '__symbol_req__'\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 createMergeReq(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, merge(...args), 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 { toReq } from './server'\nexport * from './server'\n\nexport function createBeacon(baseUrl: string) {\n return (arg: any) => {\n const { url, params, query, body } = toReq(arg as any)\n\n navigator.sendBeacon(`${baseUrl}${url}${params}${query}`, JSON.stringify(body))\n }\n}\n"],"mappings":";;;;AAAO,IAAMA,gBAAgB;;;ACatB,SAASC,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,eAAeJ,UAAyBK,MAAM,sBAAiI;AAE7L,SAAO,CAACX,MAAqBO,WAAgC;AAC3D,WAAOD,SAASM,KAAKD,KAAKZ,MAAAA,GAASC,IAAAA,GAAOO,MAAAA;EAC5C;AACF;AALgBG;AAOT,SAASG,QAAiBC,MAAkC;AACjE,SAAO,OAAOA,SAAS,YAAaA,KAAaC;AACnD;AAFgBF;AAIT,SAASG,GAAGC,OAAeN,MAAM,IAAS;AAC/C,SAAO,GAAGO,iBAAiBD,SAASN;AACtC;AAFgBK;;;ACvDT,SAASG,aAAaC,SAAiB;AAC5C,SAAO,CAACC,QAAa;AACnB,UAAM,EAAEC,KAAKC,QAAQC,OAAOC,KAAI,IAAKC,MAAML,GAAAA;AAE3CM,cAAUC,WAAW,GAAGR,UAAUE,MAAMC,SAASC,SAASK,KAAKC,UAAUL,IAAAA,CAAAA;EAC3E;AACF;AANgBN;","names":["SERIES_SYMBOL","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","createMergeReq","key","post","isError","data","error","$S","index","SERIES_SYMBOL","createBeacon","baseUrl","arg","url","params","query","body","toReq","navigator","sendBeacon","JSON","stringify"]}
package/dist/index.d.ts CHANGED
@@ -1,9 +1,10 @@
1
- import { S as ServerMeta, P as PHandler, R as RequestType, C as Construct } from './types-acc60391.js';
2
- export { B as BaseError, M as MergeType, e as MqContextData, a as PError, c as PRes, b as ResOrErr, d as ServerContextData, T as Transform, U as UnWrap } from './types-acc60391.js';
1
+ import { S as ServerMeta, P as PHandler, R as RequestType, a as PhecdaEmitter, C as Construct } from './server-d482bc0d.js';
2
+ export { $ as $S, B as BaseError, M as MergeType, f as MqContextData, b as PError, d as PRes, g as RequestMethod, c as ResOrErr, e as ServerContextData, T as Transform, U as UnWrap, i as createMergeReq, h as createReq, j as isError, m as merge, t as toReq } from './server-d482bc0d.js';
3
3
  import { Express } from 'express';
4
4
  import { PluginOption } from 'vite';
5
5
  export * from 'phecda-core';
6
6
  import amqplib from 'amqplib';
7
+ import 'axios';
7
8
 
8
9
  interface ValidatePipe {
9
10
  transform(args: {
@@ -138,21 +139,19 @@ declare class Pcompiler {
138
139
  }[]): void;
139
140
  }
140
141
 
142
+ declare const emitter: PhecdaEmitter;
143
+ declare function Factory<T>(Modules: Construct<T>[]): Promise<{
144
+ moduleMap: Map<string, any>;
145
+ meta: Pmeta[];
146
+ }>;
147
+
141
148
  interface Options {
142
149
  route?: string;
143
150
  globalGuards?: string[];
144
151
  globalInterceptors?: string[];
145
152
  middlewares?: string[];
146
153
  }
147
- declare function bindApp(app: Express, { meta, moduleMap }: {
148
- meta: Pmeta[];
149
- moduleMap: any;
150
- }, options?: Options): void;
151
-
152
- declare function Factory<T>(Modules: Construct<T>[]): Promise<{
153
- moduleMap: Map<string, any>;
154
- meta: Pmeta[];
155
- }>;
154
+ declare function bindApp(app: Express, { meta, moduleMap }: Awaited<ReturnType<typeof Factory>>, options?: Options): void;
156
155
 
157
156
  declare function BaseParam(type: string, key: string, validate?: boolean): any;
158
157
  declare function Body(key?: string, validate?: boolean): any;
@@ -175,11 +174,8 @@ declare function Header(name: string, value: string): (target: any, k: PropertyK
175
174
 
176
175
  declare function Server(localPath: string): PluginOption;
177
176
 
178
- declare function bindMQ(ch: amqplib.Channel, { meta, moduleMap }: {
179
- meta: Pmeta[];
180
- moduleMap: any;
181
- }): Promise<void>;
177
+ declare function bindMQ(ch: amqplib.Channel, { meta, moduleMap }: Awaited<ReturnType<typeof Factory>>): Promise<void>;
182
178
  type MqMethod<T> = (arg: T) => void;
183
179
  declare function createPub<T extends (...args: any[]) => any>(ch: amqplib.Channel, method: T, type?: string): Promise<MqMethod<Parameters<T>>>;
184
180
 
185
- export { BadRequestException, BaseParam, Body, Construct, Controller, Delete, Factory, ForbiddenException, Get, Guard, Header, HttpException, Inject, Interceptor, MQ, Options, PHandler, Param, Pcompiler, Pcontext, Pmeta, Post, Put, Query, RabbitMqContext, RequestType, Route, Server, ServerContext, ServerMeta, UndefinedException, ValidateException, ValidatePipe, addGuard, addInterceptor, bindApp, bindMQ, createPub, defaultPipe, getInstance, parseMeta, useMqFilter, useMqPipe, useServerFilter, useServerPipe };
181
+ 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, createPub, defaultPipe, emitter, getInstance, parseMeta, useMqFilter, useMqPipe, useServerFilter, useServerPipe };
package/dist/index.js CHANGED
@@ -1,7 +1,9 @@
1
1
  "use strict";
2
+ var __create = Object.create;
2
3
  var __defProp = Object.defineProperty;
3
4
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
5
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
5
7
  var __hasOwnProp = Object.prototype.hasOwnProperty;
6
8
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
7
9
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
@@ -18,6 +20,10 @@ var __copyProps = (to, from, except, desc) => {
18
20
  return to;
19
21
  };
20
22
  var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
23
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
24
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
+ mod
26
+ ));
21
27
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
22
28
  var __publicField = (obj, key, value) => {
23
29
  __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
@@ -27,6 +33,7 @@ var __publicField = (obj, key, value) => {
27
33
  // src/index.ts
28
34
  var src_exports = {};
29
35
  __export(src_exports, {
36
+ $S: () => $S,
30
37
  BadRequestException: () => BadRequestException,
31
38
  BaseParam: () => BaseParam,
32
39
  Body: () => Body,
@@ -58,10 +65,16 @@ __export(src_exports, {
58
65
  addInterceptor: () => addInterceptor,
59
66
  bindApp: () => bindApp,
60
67
  bindMQ: () => bindMQ,
68
+ createMergeReq: () => createMergeReq,
61
69
  createPub: () => createPub,
70
+ createReq: () => createReq,
62
71
  defaultPipe: () => defaultPipe,
72
+ emitter: () => emitter,
63
73
  getInstance: () => getInstance,
74
+ isError: () => isError,
75
+ merge: () => merge,
64
76
  parseMeta: () => parseMeta,
77
+ toReq: () => toReq,
65
78
  useMqFilter: () => useMqFilter,
66
79
  useMqPipe: () => useMqPipe,
67
80
  useServerFilter: () => useServerFilter,
@@ -393,6 +406,10 @@ function resolveDep(ret, key) {
393
406
  }
394
407
  __name(resolveDep, "resolveDep");
395
408
 
409
+ // src/common.ts
410
+ var SERIES_SYMBOL = "__symbol_series__";
411
+ var REQ_SYMBOL = "__symbol_req__";
412
+
396
413
  // src/exception/not-found.ts
397
414
  var NotFoundException = class extends HttpException {
398
415
  constructor(message) {
@@ -401,10 +418,6 @@ var NotFoundException = class extends HttpException {
401
418
  };
402
419
  __name(NotFoundException, "NotFoundException");
403
420
 
404
- // src/common.ts
405
- var SERIES_SYMBOL = "__symbol_series__";
406
- var REQ_SYMBOL = "__symbol_req__";
407
-
408
421
  // src/server/express.ts
409
422
  function bindApp(app, { meta, moduleMap }, options = {}) {
410
423
  const { globalGuards, globalInterceptors, route, middlewares: proMiddle } = {
@@ -515,6 +528,7 @@ __name(bindApp, "bindApp");
515
528
 
516
529
  // src/core.ts
517
530
  var import_reflect_metadata = require("reflect-metadata");
531
+ var import_events = __toESM(require("events"));
518
532
  var import_phecda_core2 = require("phecda-core");
519
533
 
520
534
  // src/meta.ts
@@ -531,9 +545,17 @@ var Pmeta = class {
531
545
  __name(Pmeta, "Pmeta");
532
546
 
533
547
  // src/core.ts
548
+ var emitter = new import_events.default();
534
549
  async function Factory(Modules) {
535
550
  const moduleMap = /* @__PURE__ */ new Map();
536
551
  const meta = [];
552
+ (0, import_phecda_core2.injectProperty)("watcher", ({ eventName, instance, key, options }) => {
553
+ const fn = typeof instance[key] === "function" ? instance[key].bind(instance) : (v) => instance[key] = v;
554
+ if (options?.once)
555
+ emitter.once(eventName, fn);
556
+ else
557
+ emitter.on(eventName, fn);
558
+ });
537
559
  for (const Module of Modules)
538
560
  await buildNestModule(Module, moduleMap, meta);
539
561
  return {
@@ -883,8 +905,65 @@ async function createPub(ch, method, type) {
883
905
  };
884
906
  }
885
907
  __name(createPub, "createPub");
908
+
909
+ // src/client/server.ts
910
+ function toReq(arg) {
911
+ const { body, query, realParam, method, url } = arg;
912
+ return {
913
+ method,
914
+ url,
915
+ body,
916
+ query: Object.keys(query).length > 0 ? `?${Object.entries(query).map(([k, v]) => `${k}=${v}`).join("&")}` : "",
917
+ params: realParam
918
+ };
919
+ }
920
+ __name(toReq, "toReq");
921
+ var merge = /* @__PURE__ */ __name((...args) => {
922
+ const ret = [];
923
+ for (const i of args) {
924
+ const { body, query, params, tag } = i;
925
+ ret.push({
926
+ tag,
927
+ body,
928
+ query,
929
+ params
930
+ });
931
+ }
932
+ return ret;
933
+ }, "merge");
934
+ function createReq(instance) {
935
+ return (arg, config) => {
936
+ const { url, params, query, body, method } = toReq(arg);
937
+ if (!method) {
938
+ console.warn("methods without route decorator won't send request");
939
+ return;
940
+ }
941
+ const ret = [
942
+ `${url}${params}${query}`
943
+ ];
944
+ body && ret.push(body);
945
+ config && ret.push(config);
946
+ return instance[method](...ret);
947
+ };
948
+ }
949
+ __name(createReq, "createReq");
950
+ function createMergeReq(instance, key = "/__PHECDA_SERVER__") {
951
+ return (args, config) => {
952
+ return instance.post(key, merge(...args), config);
953
+ };
954
+ }
955
+ __name(createMergeReq, "createMergeReq");
956
+ function isError(data) {
957
+ return typeof data === "object" && data.error;
958
+ }
959
+ __name(isError, "isError");
960
+ function $S(index, key = "") {
961
+ return `${SERIES_SYMBOL}@${index}@${key}`;
962
+ }
963
+ __name($S, "$S");
886
964
  // Annotate the CommonJS export names for ESM import in node:
887
965
  0 && (module.exports = {
966
+ $S,
888
967
  BadRequestException,
889
968
  BaseParam,
890
969
  Body,
@@ -916,10 +995,16 @@ __name(createPub, "createPub");
916
995
  addInterceptor,
917
996
  bindApp,
918
997
  bindMQ,
998
+ createMergeReq,
919
999
  createPub,
1000
+ createReq,
920
1001
  defaultPipe,
1002
+ emitter,
921
1003
  getInstance,
1004
+ isError,
1005
+ merge,
922
1006
  parseMeta,
1007
+ toReq,
923
1008
  useMqFilter,
924
1009
  useMqPipe,
925
1010
  useServerFilter,
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/exception/not-found.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"],"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'\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","import { HttpException } from './base'\n\nexport class NotFoundException extends HttpException {\n constructor(message: string) {\n super(message, 404, 'Not Found')\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 type { Pmeta } from '../meta'\nimport { NotFoundException } from '../exception/not-found'\nimport { REQ_SYMBOL, SERIES_SYMBOL } from '../common'\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 }: { meta: Pmeta[]; moduleMap: any }, 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 } = req\n\n for (const i in body) {\n const { tag } = body[i]\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(body[i][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\n res.json(ret)\n })\n}\n","import 'reflect-metadata'\nimport type { Phecda } from 'phecda-core'\nimport { getExposeKey, getHandler, getState, registerAsync } from 'phecda-core'\n\nimport type { Construct, ServerMeta } from './types'\nimport { Pmeta } from './meta'\n\nexport async function Factory<T>(Modules: Construct<T>[]) {\n const moduleMap = new Map<string, InstanceType<Construct>>()\n const meta: Pmeta[] = []\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 type { Pmeta } from '../meta'\nimport { Pcontext, RabbitMqContext, parseMeta } from '../context'\nimport { resolveDep } from '../utils'\nimport { Pconfig } from '../config'\n\nexport async function bindMQ(ch: amqplib.Channel, { meta, moduleMap }: { meta: Pmeta[]; moduleMap: any }) {\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"],"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","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","NotFoundException","HttpException","constructor","message","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","split","NotFoundException","startsWith","SERIES_SYMBOL","index","argKey","Number","push","m","import_phecda_core","Pmeta","data","handlers","reflect","constructor","Factory","Modules","moduleMap","Map","meta","Module","buildNestModule","map","paramtypes","getParamtypes","instance","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","key","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"]}
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/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 } = req\n\n for (const i in body) {\n const { tag } = body[i]\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(body[i][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\n res.json(ret)\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 createMergeReq(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, merge(...args), 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"],"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","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","split","NotFoundException","startsWith","SERIES_SYMBOL","index","argKey","Number","push","m","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","createMergeReq","key","post","isError","data","error","$S","index","SERIES_SYMBOL"]}
package/dist/index.mjs CHANGED
@@ -330,6 +330,10 @@ function resolveDep(ret, key) {
330
330
  }
331
331
  __name(resolveDep, "resolveDep");
332
332
 
333
+ // src/common.ts
334
+ var SERIES_SYMBOL = "__symbol_series__";
335
+ var REQ_SYMBOL = "__symbol_req__";
336
+
333
337
  // src/exception/not-found.ts
334
338
  var NotFoundException = class extends HttpException {
335
339
  constructor(message) {
@@ -338,10 +342,6 @@ var NotFoundException = class extends HttpException {
338
342
  };
339
343
  __name(NotFoundException, "NotFoundException");
340
344
 
341
- // src/common.ts
342
- var SERIES_SYMBOL = "__symbol_series__";
343
- var REQ_SYMBOL = "__symbol_req__";
344
-
345
345
  // src/server/express.ts
346
346
  function bindApp(app, { meta, moduleMap }, options = {}) {
347
347
  const { globalGuards, globalInterceptors, route, middlewares: proMiddle } = {
@@ -452,7 +452,8 @@ __name(bindApp, "bindApp");
452
452
 
453
453
  // src/core.ts
454
454
  import "reflect-metadata";
455
- import { getExposeKey, getHandler, getState, registerAsync } from "phecda-core";
455
+ import EventEmitter from "events";
456
+ import { getExposeKey, getHandler, getState, injectProperty, registerAsync } from "phecda-core";
456
457
 
457
458
  // src/meta.ts
458
459
  var Pmeta = class {
@@ -468,9 +469,17 @@ var Pmeta = class {
468
469
  __name(Pmeta, "Pmeta");
469
470
 
470
471
  // src/core.ts
472
+ var emitter = new EventEmitter();
471
473
  async function Factory(Modules) {
472
474
  const moduleMap = /* @__PURE__ */ new Map();
473
475
  const meta = [];
476
+ injectProperty("watcher", ({ eventName, instance, key, options }) => {
477
+ const fn = typeof instance[key] === "function" ? instance[key].bind(instance) : (v) => instance[key] = v;
478
+ if (options?.once)
479
+ emitter.once(eventName, fn);
480
+ else
481
+ emitter.on(eventName, fn);
482
+ });
474
483
  for (const Module of Modules)
475
484
  await buildNestModule(Module, moduleMap, meta);
476
485
  return {
@@ -820,7 +829,64 @@ async function createPub(ch, method, type) {
820
829
  };
821
830
  }
822
831
  __name(createPub, "createPub");
832
+
833
+ // src/client/server.ts
834
+ function toReq(arg) {
835
+ const { body, query, realParam, method, url } = arg;
836
+ return {
837
+ method,
838
+ url,
839
+ body,
840
+ query: Object.keys(query).length > 0 ? `?${Object.entries(query).map(([k, v]) => `${k}=${v}`).join("&")}` : "",
841
+ params: realParam
842
+ };
843
+ }
844
+ __name(toReq, "toReq");
845
+ var merge = /* @__PURE__ */ __name((...args) => {
846
+ const ret = [];
847
+ for (const i of args) {
848
+ const { body, query, params, tag } = i;
849
+ ret.push({
850
+ tag,
851
+ body,
852
+ query,
853
+ params
854
+ });
855
+ }
856
+ return ret;
857
+ }, "merge");
858
+ function createReq(instance) {
859
+ return (arg, config) => {
860
+ const { url, params, query, body, method } = toReq(arg);
861
+ if (!method) {
862
+ console.warn("methods without route decorator won't send request");
863
+ return;
864
+ }
865
+ const ret = [
866
+ `${url}${params}${query}`
867
+ ];
868
+ body && ret.push(body);
869
+ config && ret.push(config);
870
+ return instance[method](...ret);
871
+ };
872
+ }
873
+ __name(createReq, "createReq");
874
+ function createMergeReq(instance, key = "/__PHECDA_SERVER__") {
875
+ return (args, config) => {
876
+ return instance.post(key, merge(...args), config);
877
+ };
878
+ }
879
+ __name(createMergeReq, "createMergeReq");
880
+ function isError(data) {
881
+ return typeof data === "object" && data.error;
882
+ }
883
+ __name(isError, "isError");
884
+ function $S(index, key = "") {
885
+ return `${SERIES_SYMBOL}@${index}@${key}`;
886
+ }
887
+ __name($S, "$S");
823
888
  export {
889
+ $S,
824
890
  BadRequestException,
825
891
  BaseParam,
826
892
  Body,
@@ -852,10 +918,16 @@ export {
852
918
  addInterceptor,
853
919
  bindApp,
854
920
  bindMQ,
921
+ createMergeReq,
855
922
  createPub,
923
+ createReq,
856
924
  defaultPipe,
925
+ emitter,
857
926
  getInstance,
927
+ isError,
928
+ merge,
858
929
  parseMeta,
930
+ toReq,
859
931
  useMqFilter,
860
932
  useMqPipe,
861
933
  useServerFilter,
@@ -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/exception/not-found.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"],"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","import { HttpException } from './base'\n\nexport class NotFoundException extends HttpException {\n constructor(message: string) {\n super(message, 404, 'Not Found')\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 type { Pmeta } from '../meta'\nimport { NotFoundException } from '../exception/not-found'\nimport { REQ_SYMBOL, SERIES_SYMBOL } from '../common'\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 }: { meta: Pmeta[]; moduleMap: any }, 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 } = req\n\n for (const i in body) {\n const { tag } = body[i]\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(body[i][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\n res.json(ret)\n })\n}\n","import 'reflect-metadata'\nimport type { Phecda } from 'phecda-core'\nimport { getExposeKey, getHandler, getState, registerAsync } from 'phecda-core'\n\nimport type { Construct, ServerMeta } from './types'\nimport { Pmeta } from './meta'\n\nexport async function Factory<T>(Modules: Construct<T>[]) {\n const moduleMap = new Map<string, InstanceType<Construct>>()\n const meta: Pmeta[] = []\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'\n","export const Pconfig = {\n rabbitmq: {\n guard: false,\n interceptor: false,\n },\n}\n","import type amqplib from 'amqplib'\n\nimport type { Pmeta } from '../meta'\nimport { Pcontext, RabbitMqContext, parseMeta } from '../context'\nimport { resolveDep } from '../utils'\nimport { Pconfig } from '../config'\n\nexport async function bindMQ(ch: amqplib.Channel, { meta, moduleMap }: { meta: Pmeta[]; moduleMap: any }) {\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"],"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","NotFoundException","HttpException","constructor","message","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","split","NotFoundException","startsWith","SERIES_SYMBOL","index","argKey","Number","push","m","getExposeKey","getHandler","getState","registerAsync","Pmeta","data","handlers","reflect","constructor","Factory","Modules","moduleMap","Map","meta","Module","buildNestModule","map","paramtypes","getParamtypes","instance","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","key","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"]}
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/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 } = req\n\n for (const i in body) {\n const { tag } = body[i]\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(body[i][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\n res.json(ret)\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 createMergeReq(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, merge(...args), 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"],"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","split","NotFoundException","startsWith","SERIES_SYMBOL","index","argKey","Number","push","m","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","createMergeReq","key","post","isError","data","error","$S","index","SERIES_SYMBOL"]}
@@ -0,0 +1,103 @@
1
+ import { AxiosInstance, AxiosRequestConfig, AxiosResponse } from 'axios';
2
+ import { Request, Response } from 'express';
3
+ import amqplib from 'amqplib';
4
+ import { PhecdaEvents } from 'phecda-core';
5
+
6
+ declare class Wrap<F, T> {
7
+ v1: F;
8
+ V2: T;
9
+ constructor(v1: F, V2: T);
10
+ get value(): T;
11
+ }
12
+
13
+ type Construct<T = any> = new (...args: any[]) => T;
14
+ interface PhecdaEmitter {
15
+ on<N extends keyof PhecdaEvents>(eventName: N, cb: (args: PhecdaEvents[N]) => void): void;
16
+ once<N extends keyof PhecdaEvents>(eventName: N, cb: (args: PhecdaEvents[N]) => void): void;
17
+ off<N extends keyof PhecdaEvents>(eventName: N, cb: (args: PhecdaEvents[N]) => void): void;
18
+ removeAllListeners<N extends keyof PhecdaEvents>(eventName: N): void;
19
+ emit<N extends keyof PhecdaEvents>(eventName: N, param: PhecdaEvents[N]): void;
20
+ }
21
+ interface PHandler {
22
+ error?: (arg: any) => void;
23
+ }
24
+ interface ServerMeta {
25
+ route?: {
26
+ type: RequestType;
27
+ route: string;
28
+ };
29
+ mq?: {
30
+ queue: string;
31
+ routeKey: string;
32
+ options: amqplib.Options.Consume;
33
+ };
34
+ header: Record<string, string>;
35
+ params: {
36
+ type: string;
37
+ index: number;
38
+ key: string;
39
+ validate?: boolean;
40
+ }[];
41
+ guards: string[];
42
+ interceptors: string[];
43
+ middlewares: string[];
44
+ method: string;
45
+ name: string;
46
+ }
47
+ type RequestType = 'get' | 'post' | 'put' | 'delete' | 'patch' | 'options' | 'head';
48
+ type MergeType = <R extends Promise<any>[]>(...args: R) => {
49
+ [K in keyof R]: Awaited<R[K]>;
50
+ };
51
+ interface BaseError {
52
+ error: true;
53
+ status: number;
54
+ }
55
+ interface PError extends BaseError {
56
+ message: string;
57
+ description: string;
58
+ }
59
+ type ResOrErr<R> = {
60
+ [K in keyof R]: Awaited<R[K]> | PError;
61
+ };
62
+ type PRes<T> = T;
63
+ type UnWrap<T extends any[]> = {
64
+ [K in keyof T]: T[K] extends Wrap<infer F, infer _> ? F : T[K];
65
+ };
66
+ type Transform<A> = {
67
+ [K in keyof A]: A[K] extends (...args: infer P) => infer R ? (...args: UnWrap<P> extends unknown[] ? UnWrap<P> : unknown[]) => R : never;
68
+ };
69
+ interface ServerContextData {
70
+ request?: Request<any, any, any, any, Record<string, any>>;
71
+ response?: Response<any, Record<string, any>>;
72
+ }
73
+ interface MqContextData {
74
+ content?: string;
75
+ message?: any;
76
+ channel?: amqplib.Channel;
77
+ }
78
+
79
+ interface RequestArgs {
80
+ body: Record<string, any>;
81
+ query: Record<string, string>;
82
+ params: Record<string, string>;
83
+ realParam: string;
84
+ method: RequestType;
85
+ url: string;
86
+ tag: string;
87
+ }
88
+ type MergedReqArg = Pick<RequestArgs, 'body' | 'query' | 'params' | 'tag'>;
89
+ declare function toReq(arg: RequestArgs): {
90
+ method: RequestType;
91
+ url: string;
92
+ body: Record<string, any>;
93
+ query: string;
94
+ params: string;
95
+ };
96
+ declare const merge: (...args: RequestArgs[]) => MergedReqArg[];
97
+ type RequestMethod = <F extends (...args: any[]) => any>(fn: F, args: Parameters<F>) => Promise<ReturnType<F>>;
98
+ declare function createReq(instance: AxiosInstance): <R>(arg: R, config?: AxiosRequestConfig) => Promise<AxiosResponse<PRes<Awaited<R>>>>;
99
+ declare function createMergeReq(instance: AxiosInstance, key?: string): <R extends unknown[]>(args: R, config?: AxiosRequestConfig) => Promise<AxiosResponse<ResOrErr<PRes<R>>>>;
100
+ declare function isError<T = any>(data: T | PError): data is PError;
101
+ declare function $S(index: number, key?: string): any;
102
+
103
+ export { $S as $, BaseError as B, Construct as C, MergeType as M, PHandler as P, RequestType as R, ServerMeta as S, Transform as T, UnWrap as U, PhecdaEmitter as a, PError as b, ResOrErr as c, PRes as d, ServerContextData as e, MqContextData as f, RequestMethod as g, createReq as h, createMergeReq as i, isError as j, merge as m, toReq as t };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "phecda-server",
3
- "version": "1.1.0",
3
+ "version": "1.1.1",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",
@@ -39,9 +39,10 @@
39
39
  "@types/amqplib": "^0.10.1",
40
40
  "amqplib": "^0.10.3",
41
41
  "axios": "^1.3.5",
42
+ "eventemitter3": "^5.0.0",
42
43
  "reflect-metadata": "^0.1.13",
43
44
  "vite": "^4.0.0",
44
- "phecda-core": "1.1.0"
45
+ "phecda-core": "1.1.1"
45
46
  },
46
47
  "scripts": {
47
48
  "dev": "tsup --watch",
@@ -1,70 +0,0 @@
1
- import { Request, Response } from 'express';
2
- import amqplib from 'amqplib';
3
-
4
- declare class Wrap<F, T> {
5
- v1: F;
6
- V2: T;
7
- constructor(v1: F, V2: T);
8
- get value(): T;
9
- }
10
-
11
- type Construct<T = any> = new (...args: any[]) => T;
12
- interface PHandler {
13
- error?: (arg: any) => void;
14
- }
15
- interface ServerMeta {
16
- route?: {
17
- type: RequestType;
18
- route: string;
19
- };
20
- mq?: {
21
- queue: string;
22
- routeKey: string;
23
- options: amqplib.Options.Consume;
24
- };
25
- header: Record<string, string>;
26
- params: {
27
- type: string;
28
- index: number;
29
- key: string;
30
- validate?: boolean;
31
- }[];
32
- guards: string[];
33
- interceptors: string[];
34
- middlewares: string[];
35
- method: string;
36
- name: string;
37
- }
38
- type RequestType = 'get' | 'post' | 'put' | 'delete' | 'patch' | 'options' | 'head';
39
- type MergeType = <R extends Promise<any>[]>(...args: R) => {
40
- [K in keyof R]: Awaited<R[K]>;
41
- };
42
- interface BaseError {
43
- error: true;
44
- status: number;
45
- }
46
- interface PError extends BaseError {
47
- message: string;
48
- description: string;
49
- }
50
- type ResOrErr<R> = {
51
- [K in keyof R]: Awaited<R[K]> | PError;
52
- };
53
- type PRes<T> = T;
54
- type UnWrap<T extends any[]> = {
55
- [K in keyof T]: T[K] extends Wrap<infer F, infer _> ? F : T[K];
56
- };
57
- type Transform<A> = {
58
- [K in keyof A]: A[K] extends (...args: infer P) => infer R ? (...args: UnWrap<P> extends unknown[] ? UnWrap<P> : unknown[]) => R : never;
59
- };
60
- interface ServerContextData {
61
- request?: Request<any, any, any, any, Record<string, any>>;
62
- response?: Response<any, Record<string, any>>;
63
- }
64
- interface MqContextData {
65
- content?: string;
66
- message?: any;
67
- channel?: amqplib.Channel;
68
- }
69
-
70
- export { BaseError as B, Construct as C, MergeType as M, PHandler as P, RequestType as R, ServerMeta as S, Transform as T, UnWrap as U, PError as a, ResOrErr as b, PRes as c, ServerContextData as d, MqContextData as e };