phecda-server 4.0.1 → 4.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/dist/{chunk-PIRUVYEF.mjs → chunk-AJ2HYENF.mjs} +10 -4
  2. package/dist/{chunk-PIRUVYEF.mjs.map → chunk-AJ2HYENF.mjs.map} +1 -1
  3. package/dist/{chunk-7E4FZ7TC.js → chunk-D3VS53JQ.js} +24 -26
  4. package/dist/chunk-D3VS53JQ.js.map +1 -0
  5. package/dist/{chunk-JGSJIKGN.js → chunk-FAHHXHL5.js} +3 -3
  6. package/dist/{chunk-HY6T4ZWQ.mjs → chunk-JQPX546Z.mjs} +2 -2
  7. package/dist/{chunk-PU3LWJ2C.js → chunk-LZAU5FUS.js} +12 -6
  8. package/dist/chunk-LZAU5FUS.js.map +1 -0
  9. package/dist/{chunk-O2H7ERZR.mjs → chunk-Q6T7HNEO.mjs} +4 -6
  10. package/dist/{chunk-O2H7ERZR.mjs.map → chunk-Q6T7HNEO.mjs.map} +1 -1
  11. package/dist/{chunk-KVUJ3VJZ.mjs → chunk-WRMLZ7NU.mjs} +3 -5
  12. package/dist/{chunk-KVUJ3VJZ.mjs.map → chunk-WRMLZ7NU.mjs.map} +1 -1
  13. package/dist/{chunk-B22W7BG7.js → chunk-YU7ROHTO.js} +43 -45
  14. package/dist/chunk-YU7ROHTO.js.map +1 -0
  15. package/dist/index.d.ts +16 -10
  16. package/dist/index.js +57 -43
  17. package/dist/index.js.map +1 -1
  18. package/dist/index.mjs +21 -7
  19. package/dist/index.mjs.map +1 -1
  20. package/dist/rpc/rabbitmq/index.js +9 -11
  21. package/dist/rpc/rabbitmq/index.js.map +1 -1
  22. package/dist/rpc/rabbitmq/index.mjs +3 -5
  23. package/dist/rpc/rabbitmq/index.mjs.map +1 -1
  24. package/dist/rpc/redis/index.js +9 -11
  25. package/dist/rpc/redis/index.js.map +1 -1
  26. package/dist/rpc/redis/index.mjs +3 -5
  27. package/dist/rpc/redis/index.mjs.map +1 -1
  28. package/dist/server/express/index.js +23 -25
  29. package/dist/server/express/index.js.map +1 -1
  30. package/dist/server/express/index.mjs +4 -6
  31. package/dist/server/express/index.mjs.map +1 -1
  32. package/dist/server/fastify/index.js +20 -22
  33. package/dist/server/fastify/index.js.map +1 -1
  34. package/dist/server/fastify/index.mjs +4 -6
  35. package/dist/server/fastify/index.mjs.map +1 -1
  36. package/dist/server/h3/index.js +23 -25
  37. package/dist/server/h3/index.js.map +1 -1
  38. package/dist/server/h3/index.mjs +4 -6
  39. package/dist/server/h3/index.mjs.map +1 -1
  40. package/dist/server/koa/index.d.ts +22 -0
  41. package/dist/server/koa/index.js +193 -0
  42. package/dist/server/koa/index.js.map +1 -0
  43. package/dist/server/koa/index.mjs +193 -0
  44. package/dist/server/koa/index.mjs.map +1 -0
  45. package/dist/test.js +7 -9
  46. package/dist/test.js.map +1 -1
  47. package/dist/test.mjs +4 -6
  48. package/dist/test.mjs.map +1 -1
  49. package/package.json +10 -2
  50. package/register/index.mjs +1 -1
  51. package/dist/chunk-7E4FZ7TC.js.map +0 -1
  52. package/dist/chunk-B22W7BG7.js.map +0 -1
  53. package/dist/chunk-IIGNGFDC.js +0 -47
  54. package/dist/chunk-IIGNGFDC.js.map +0 -1
  55. package/dist/chunk-PU3LWJ2C.js.map +0 -1
  56. package/dist/chunk-Q4FA4TAV.mjs +0 -47
  57. package/dist/chunk-Q4FA4TAV.mjs.map +0 -1
  58. package/dist/supertest-G6LTYS5C.js +0 -21969
  59. package/dist/supertest-G6LTYS5C.js.map +0 -1
  60. package/dist/supertest-NLMK5OIC.mjs +0 -21969
  61. package/dist/supertest-NLMK5OIC.mjs.map +0 -1
  62. /package/dist/{chunk-JGSJIKGN.js.map → chunk-FAHHXHL5.js.map} +0 -0
  63. /package/dist/{chunk-HY6T4ZWQ.mjs.map → chunk-JQPX546Z.mjs.map} +0 -0
@@ -1,6 +1,10 @@
1
- import {
2
- __name
3
- } from "./chunk-Q4FA4TAV.mjs";
1
+ var __defProp = Object.defineProperty;
2
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
4
+ var __publicField = (obj, key, value) => {
5
+ __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
6
+ return value;
7
+ };
4
8
 
5
9
  // src/common.ts
6
10
  var MERGE_SYMBOL = "__PS_MERGE__";
@@ -25,6 +29,8 @@ function log(msg, level = "info") {
25
29
  __name(log, "log");
26
30
 
27
31
  export {
32
+ __name,
33
+ __publicField,
28
34
  log,
29
35
  MERGE_SYMBOL,
30
36
  UNMOUNT_SYMBOL,
@@ -34,4 +40,4 @@ export {
34
40
  IS_DEV,
35
41
  IS_STRICT
36
42
  };
37
- //# sourceMappingURL=chunk-PIRUVYEF.mjs.map
43
+ //# sourceMappingURL=chunk-AJ2HYENF.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/common.ts","../src/utils.ts"],"sourcesContent":["export const MERGE_SYMBOL = '__PS_MERGE__'\nexport const UNMOUNT_SYMBOL = '__PS_UNMOUNT__'\nexport const MODULE_SYMBOL = '__PS_MODULE__'\nexport const META_SYMBOL = '__PS_META__'\nexport const APP_SYMBOL = '__PS__'\nexport const IS_DEV = process.env.NODE_ENV === 'development'\nexport const IS_STRICT = !!process.env.PS_STRICT\n","import pc from 'picocolors'\n\nexport function log(msg: string, level: 'error' | 'info' | 'warn' = 'info') {\n const color = ({ error: 'red', info: 'green', warn: 'yellow' } as const)[level]\n const date = new Date()\n // eslint-disable-next-line no-console\n console.log(`${pc.magenta('[phecda-server]')} ${pc.gray(`${date.getHours()}:${date.getMinutes()}:${date.getSeconds()}`)} ${pc[color](msg)}`)\n}\n"],"mappings":";;;;;AAAO,IAAMA,eAAe;AACrB,IAAMC,iBAAiB;AACvB,IAAMC,gBAAgB;AACtB,IAAMC,cAAc;AACpB,IAAMC,aAAa;AACnB,IAAMC,SAASC,QAAQC,IAAIC,aAAa;AACxC,IAAMC,YAAY,CAAC,CAACH,QAAQC,IAAIG;;;ACNvC,OAAOC,QAAQ;AAER,SAASC,IAAIC,KAAaC,QAAmC,QAAQ;AAC1E,QAAMC,QAAS;IAAEC,OAAO;IAAOC,MAAM;IAASC,MAAM;EAAS,EAAYJ;AACzE,QAAMK,OAAO,IAAIC,KAAAA;AAEjBC,UAAQT,IAAI,GAAGU,GAAGC,QAAQ,iBAAA,KAAsBD,GAAGE,KAAK,GAAGL,KAAKM,SAAQ,KAAMN,KAAKO,WAAU,KAAMP,KAAKQ,WAAU,GAAI,KAAKL,GAAGP,OAAOF,GAAAA,GAAM;AAC7I;AALgBD;","names":["MERGE_SYMBOL","UNMOUNT_SYMBOL","MODULE_SYMBOL","META_SYMBOL","APP_SYMBOL","IS_DEV","process","env","NODE_ENV","IS_STRICT","PS_STRICT","pc","log","msg","level","color","error","info","warn","date","Date","console","pc","magenta","gray","getHours","getMinutes","getSeconds"]}
1
+ {"version":3,"sources":["../src/common.ts","../src/utils.ts"],"sourcesContent":["export const MERGE_SYMBOL = '__PS_MERGE__'\nexport const UNMOUNT_SYMBOL = '__PS_UNMOUNT__'\nexport const MODULE_SYMBOL = '__PS_MODULE__'\nexport const META_SYMBOL = '__PS_META__'\nexport const APP_SYMBOL = '__PS__'\nexport const IS_DEV = process.env.NODE_ENV === 'development'\nexport const IS_STRICT = !!process.env.PS_STRICT\n","import pc from 'picocolors'\n\nexport function log(msg: string, level: 'error' | 'info' | 'warn' = 'info') {\n const color = ({ error: 'red', info: 'green', warn: 'yellow' } as const)[level]\n const date = new Date()\n // eslint-disable-next-line no-console\n console.log(`${pc.magenta('[phecda-server]')} ${pc.gray(`${date.getHours()}:${date.getMinutes()}:${date.getSeconds()}`)} ${pc[color](msg)}`)\n}\n"],"mappings":";;;;;;;;;AAAO,IAAMA,eAAe;AACrB,IAAMC,iBAAiB;AACvB,IAAMC,gBAAgB;AACtB,IAAMC,cAAc;AACpB,IAAMC,aAAa;AACnB,IAAMC,SAASC,QAAQC,IAAIC,aAAa;AACxC,IAAMC,YAAY,CAAC,CAACH,QAAQC,IAAIG;;;ACNvC,OAAOC,QAAQ;AAER,SAASC,IAAIC,KAAaC,QAAmC,QAAQ;AAC1E,QAAMC,QAAS;IAAEC,OAAO;IAAOC,MAAM;IAASC,MAAM;EAAS,EAAYJ;AACzE,QAAMK,OAAO,IAAIC,KAAAA;AAEjBC,UAAQT,IAAI,GAAGU,GAAGC,QAAQ,iBAAA,KAAsBD,GAAGE,KAAK,GAAGL,KAAKM,SAAQ,KAAMN,KAAKO,WAAU,KAAMP,KAAKQ,WAAU,GAAI,KAAKL,GAAGP,OAAOF,GAAAA,GAAM;AAC7I;AALgBD;","names":["MERGE_SYMBOL","UNMOUNT_SYMBOL","MODULE_SYMBOL","META_SYMBOL","APP_SYMBOL","IS_DEV","process","env","NODE_ENV","IS_STRICT","PS_STRICT","pc","log","msg","level","color","error","info","warn","date","Date","console","pc","magenta","gray","getHours","getMinutes","getSeconds"]}
@@ -2,10 +2,8 @@
2
2
 
3
3
 
4
4
 
5
- var _chunkPU3LWJ2Cjs = require('./chunk-PU3LWJ2C.js');
6
5
 
7
-
8
- var _chunkIIGNGFDCjs = require('./chunk-IIGNGFDC.js');
6
+ var _chunkLZAU5FUSjs = require('./chunk-LZAU5FUS.js');
9
7
 
10
8
  // src/meta.ts
11
9
  var Meta = class {
@@ -18,10 +16,10 @@ var Meta = class {
18
16
  this.paramsType = paramsType;
19
17
  }
20
18
  };
21
- _chunkIIGNGFDCjs.__name.call(void 0, Meta, "Meta");
19
+ _chunkLZAU5FUSjs.__name.call(void 0, Meta, "Meta");
22
20
 
23
21
  // src/compiler/rpc.ts
24
- var Compiler = /* @__PURE__ */ _chunkIIGNGFDCjs.__name.call(void 0, (_class =class Compiler2 {
22
+ var Compiler = /* @__PURE__ */ _chunkLZAU5FUSjs.__name.call(void 0, (_class =class Compiler2 {
25
23
  __init() {this.classMap = {}}
26
24
  constructor() {;_class.prototype.__init.call(this);
27
25
  }
@@ -57,10 +55,10 @@ function generateRPCCode(meta) {
57
55
  compiler.addMethod(i);
58
56
  return compiler.getContent();
59
57
  }
60
- _chunkIIGNGFDCjs.__name.call(void 0, generateRPCCode, "generateRPCCode");
58
+ _chunkLZAU5FUSjs.__name.call(void 0, generateRPCCode, "generateRPCCode");
61
59
 
62
60
  // src/compiler/http.ts
63
- var Compiler3 = /* @__PURE__ */ _chunkIIGNGFDCjs.__name.call(void 0, (_class2 =class Compiler4 {
61
+ var Compiler3 = /* @__PURE__ */ _chunkLZAU5FUSjs.__name.call(void 0, (_class2 =class Compiler4 {
64
62
  __init2() {this.classMap = {}}
65
63
  constructor() {;_class2.prototype.__init2.call(this);
66
64
  }
@@ -99,7 +97,7 @@ function generateHTTPCode(meta) {
99
97
  compiler.addMethod(i);
100
98
  return compiler.getContent();
101
99
  }
102
- _chunkIIGNGFDCjs.__name.call(void 0, generateHTTPCode, "generateHTTPCode");
100
+ _chunkLZAU5FUSjs.__name.call(void 0, generateHTTPCode, "generateHTTPCode");
103
101
 
104
102
  // src/core.ts
105
103
  require('reflect-metadata');
@@ -111,7 +109,7 @@ var _picocolors = require('picocolors'); var _picocolors2 = _interopRequireDefau
111
109
  function Injectable() {
112
110
  return (target) => _phecdacore.Empty.call(void 0, target);
113
111
  }
114
- _chunkIIGNGFDCjs.__name.call(void 0, Injectable, "Injectable");
112
+ _chunkLZAU5FUSjs.__name.call(void 0, Injectable, "Injectable");
115
113
  var debug = _debug2.default.call(void 0, "phecda-server");
116
114
  var emitter = new (0, _events2.default)();
117
115
  async function Factory(Modules, opts = {}) {
@@ -123,9 +121,9 @@ async function Factory(Modules, opts = {}) {
123
121
  const { http, rpc } = opts;
124
122
  _phecdacore.injectProperty.call(void 0, "watcher", ({ eventName, instance, key, options }) => {
125
123
  const fn = typeof instance[key] === "function" ? instance[key].bind(instance) : (v) => instance[key] = v;
126
- if (!instance[_chunkPU3LWJ2Cjs.UNMOUNT_SYMBOL])
127
- instance[_chunkPU3LWJ2Cjs.UNMOUNT_SYMBOL] = [];
128
- instance[_chunkPU3LWJ2Cjs.UNMOUNT_SYMBOL].push(() => {
124
+ if (!instance[_chunkLZAU5FUSjs.UNMOUNT_SYMBOL])
125
+ instance[_chunkLZAU5FUSjs.UNMOUNT_SYMBOL] = [];
126
+ instance[_chunkLZAU5FUSjs.UNMOUNT_SYMBOL].push(() => {
129
127
  emitter.off(eventName, fn);
130
128
  });
131
129
  if (_optionalChain([options, 'optionalAccess', _2 => _2.once]))
@@ -139,11 +137,11 @@ async function Factory(Modules, opts = {}) {
139
137
  return;
140
138
  debug(`update module "${tag}"`);
141
139
  const instance = moduleMap.get(tag);
142
- if (_optionalChain([instance, 'optionalAccess', _5 => _5[_chunkPU3LWJ2Cjs.UNMOUNT_SYMBOL]])) {
143
- for (const cb of instance[_chunkPU3LWJ2Cjs.UNMOUNT_SYMBOL])
140
+ if (_optionalChain([instance, 'optionalAccess', _5 => _5[_chunkLZAU5FUSjs.UNMOUNT_SYMBOL]])) {
141
+ for (const cb of instance[_chunkLZAU5FUSjs.UNMOUNT_SYMBOL])
144
142
  await cb();
145
143
  }
146
- _chunkPU3LWJ2Cjs.log.call(void 0, `Module ${_picocolors2.default.yellow(`[${tag}]`)} unmount`);
144
+ _chunkLZAU5FUSjs.log.call(void 0, `Module ${_picocolors2.default.yellow(`[${tag}]`)} unmount`);
147
145
  moduleMap.delete(tag);
148
146
  constructorMap.delete(tag);
149
147
  for (let i = meta.length - 1; i >= 0; i--) {
@@ -164,7 +162,7 @@ async function Factory(Modules, opts = {}) {
164
162
  }
165
163
  moduleMap.set(tag, newModule);
166
164
  }
167
- _chunkIIGNGFDCjs.__name.call(void 0, update, "update");
165
+ _chunkLZAU5FUSjs.__name.call(void 0, update, "update");
168
166
  async function buildNestModule(Module) {
169
167
  const paramtypes = getParamTypes(Module);
170
168
  let instance;
@@ -175,7 +173,7 @@ async function Factory(Modules, opts = {}) {
175
173
  throw new Error(`exist Circular-Dependency or Multiple modules with the same name/tag [tag] ${tag}--[module] ${Module}`);
176
174
  if (constructorMap.get(tag) !== Module && !constructorSet.has(Module)) {
177
175
  constructorSet.add(Module);
178
- _chunkPU3LWJ2Cjs.log.call(void 0, `Synonym module: Module taged "${tag}" has been loaded before, so phecda-server won't load Module "${Module.name}"`, "warn");
176
+ _chunkLZAU5FUSjs.log.call(void 0, `Synonym module: Module taged "${tag}" has been loaded before, so phecda-server won't load Module "${Module.name}"`, "warn");
179
177
  }
180
178
  return {
181
179
  instance,
@@ -199,14 +197,14 @@ async function Factory(Modules, opts = {}) {
199
197
  meta.push(...getMetaFromInstance(instance, tag, Module.name));
200
198
  await _phecdacore.registerAsync.call(void 0, instance);
201
199
  moduleMap.set(tag, instance);
202
- _chunkPU3LWJ2Cjs.log.call(void 0, `Module ${_picocolors2.default.yellow(`[${tag}]`)} mount"`);
200
+ _chunkLZAU5FUSjs.log.call(void 0, `Module ${_picocolors2.default.yellow(`[${tag}]`)} mount"`);
203
201
  constructorMap.set(tag, Module);
204
202
  return {
205
203
  instance,
206
204
  tag
207
205
  };
208
206
  }
209
- _chunkIIGNGFDCjs.__name.call(void 0, buildNestModule, "buildNestModule");
207
+ _chunkLZAU5FUSjs.__name.call(void 0, buildNestModule, "buildNestModule");
210
208
  for (const Module of Modules)
211
209
  await buildNestModule(Module);
212
210
  function writeCode() {
@@ -214,9 +212,9 @@ async function Factory(Modules, opts = {}) {
214
212
  http && _fs2.default.promises.writeFile(http, generateHTTPCode(meta.map((item) => item.data)));
215
213
  rpc && _fs2.default.promises.writeFile(rpc, generateRPCCode(meta.map((item) => item.data)));
216
214
  }
217
- _chunkIIGNGFDCjs.__name.call(void 0, writeCode, "writeCode");
215
+ _chunkLZAU5FUSjs.__name.call(void 0, writeCode, "writeCode");
218
216
  writeCode();
219
- if (_chunkPU3LWJ2Cjs.IS_DEV) {
217
+ if (_chunkLZAU5FUSjs.IS_DEV) {
220
218
  globalThis.__PS_HMR__ = async (file) => {
221
219
  debug(`reload file ${file}`);
222
220
  const module = await Promise.resolve().then(() => require(file));
@@ -234,7 +232,7 @@ async function Factory(Modules, opts = {}) {
234
232
  update
235
233
  };
236
234
  }
237
- _chunkIIGNGFDCjs.__name.call(void 0, Factory, "Factory");
235
+ _chunkLZAU5FUSjs.__name.call(void 0, Factory, "Factory");
238
236
  function getMetaFromInstance(instance, tag, name) {
239
237
  const vars = _phecdacore.getExposeKey.call(void 0, instance).filter((item) => item !== "__CLASS");
240
238
  const baseState = _phecdacore.getState.call(void 0, instance, "__CLASS") || {};
@@ -296,11 +294,11 @@ function getMetaFromInstance(instance, tag, name) {
296
294
  return new Meta(meta, _phecdacore.getHandler.call(void 0, instance, i), getParamTypes(instance, i) || []);
297
295
  });
298
296
  }
299
- _chunkIIGNGFDCjs.__name.call(void 0, getMetaFromInstance, "getMetaFromInstance");
297
+ _chunkLZAU5FUSjs.__name.call(void 0, getMetaFromInstance, "getMetaFromInstance");
300
298
  function getParamTypes(Module, key) {
301
299
  return Reflect.getMetadata("design:paramtypes", Module, key);
302
300
  }
303
- _chunkIIGNGFDCjs.__name.call(void 0, getParamTypes, "getParamTypes");
301
+ _chunkLZAU5FUSjs.__name.call(void 0, getParamTypes, "getParamTypes");
304
302
  function initState(state) {
305
303
  if (!state.define)
306
304
  state.define = {};
@@ -313,7 +311,7 @@ function initState(state) {
313
311
  if (!state.interceptors)
314
312
  state.interceptors = [];
315
313
  }
316
- _chunkIIGNGFDCjs.__name.call(void 0, initState, "initState");
314
+ _chunkLZAU5FUSjs.__name.call(void 0, initState, "initState");
317
315
 
318
316
 
319
317
 
@@ -323,4 +321,4 @@ _chunkIIGNGFDCjs.__name.call(void 0, initState, "initState");
323
321
 
324
322
 
325
323
  exports.Meta = Meta; exports.generateRPCCode = generateRPCCode; exports.generateHTTPCode = generateHTTPCode; exports.Injectable = Injectable; exports.emitter = emitter; exports.Factory = Factory;
326
- //# sourceMappingURL=chunk-7E4FZ7TC.js.map
324
+ //# sourceMappingURL=chunk-D3VS53JQ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/meta.ts","../src/compiler/rpc.ts","../src/compiler/http.ts","../src/core.ts"],"names":["Meta","data","handlers","paramsType","constructor","Compiler","classMap","getContent","content","name","Object","values","reduce","p","c","addMethod","args","rpc","method","tag","type","isEvent","generateRPCCode","meta","compiler","i","http","params","url","route","replace","_","js","key","generateHTTPCode","fs","EventEmitter","Empty","getExposeKey","getHandler","getState","injectProperty","isPhecda","registerAsync","Debug","pc","Injectable","target","debug","emitter","Factory","Modules","opts","moduleMap","Map","constructorMap","constructorSet","WeakSet","moduleGraph","eventName","instance","options","fn","bind","v","UNMOUNT_SYMBOL","push","off","once","on","update","Module","prototype","__TAG__","has","get","cb","log","yellow","delete","length","splice","newModule","buildNestModule","forEach","module","set","paramtypes","getParamTypes","Error","add","undefined","paramtypesInstances","sub","subTag","Set","getMetaFromInstance","writeCode","promises","writeFile","map","item","IS_DEV","globalThis","__PS_HMR__","file","__PS_WRITEMETA__","vars","filter","baseState","initState","state","unshift","index","define","header","plugins","guards","interceptors","Reflect","getMetadata"],"mappings":"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","sourcesContent":["import type { P } from './types'\n\nexport class Meta {\n constructor(public data: P.Meta, public handlers: P.Handler[], public paramsType: any[]) {\n\n }\n}\n","import type { P } from '../types'\n\nclass Compiler {\n classMap: Record<string, { [key: string]: string }> = {}\n constructor() { }\n\n getContent() {\n let content = ''\n\n for (const name in this.classMap) {\n content += `\n export class ${name}{\n ${Object.values(this.classMap[name]).reduce((p, c) => p + c)}\n }`\n }\n return content\n }\n\n addMethod(args: P.Meta) {\n const {\n rpc, name, method, tag,\n } = args\n if (!rpc || !rpc.type)\n return\n if (!this.classMap[name])\n this.classMap[name] = {}\n this.classMap[name][method] = `\n ${method}(){\n return {tag:'${tag}-${method}',isEvent:${!!rpc.isEvent},rpc:[${rpc.type.reduce((p, c) => {\n return `${p}\"${c}\",`\n }, '')}]}\n\n }\n `\n }\n}\n\nexport function generateRPCCode(meta: P.Meta[]) {\n const compiler = new Compiler()\n\n for (const i of meta)\n compiler.addMethod(i)\n return compiler.getContent()\n}\n","import type { P } from '../types'\n\nclass Compiler {\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 // createRequest() {\n // let content = 'import {useC} from \\'phecda-server\\'\\n'\n // for (const name in this.classMap)\n // content += `export const {${Object.keys(this.classMap[name]).join(',')}}=useC(${name})\\n`\n // return content\n // }\n\n addMethod(args: P.Meta) {\n const {\n http, name, method, params, tag,\n } = args\n if (!http)\n return\n const url = http.route.replace(/\\/\\:([^\\/]*)/g, (_, js) => `/{{${js}}}`)\n if (!this.classMap[name])\n this.classMap[name] = {}\n this.classMap[name][method] = `\n ${method}(...args){\nconst ret={tag:\"${tag}-${method}\",body:{},headers:{},query:{},params:{},method:\"${http.type}\",url:\"${url}\",args}\n\n${params.reduce((p, c, i) => `${p}ret.${c.type}${c.key ? `['${c.key}']` : ''}=args[${i}]\\n${c.type === 'params' ? `ret.url=ret.url.replace('{{${c.key}}}',args[${i}])` : ''}\\n`, '')}\nreturn ret\n }\n `\n }\n}\n\nexport function generateHTTPCode(meta: P.Meta[]) {\n const compiler = new Compiler()\n\n for (const i of meta)\n compiler.addMethod(i)\n return compiler.getContent()\n}\n","import 'reflect-metadata'\nimport fs from 'fs'\nimport EventEmitter from 'node:events'\nimport type { Phecda } from 'phecda-core'\nimport { Empty, getExposeKey, getHandler, getState, injectProperty, isPhecda, registerAsync } from 'phecda-core'\nimport Debug from 'debug'\nimport pc from 'picocolors'\nimport type { Construct, Emitter, P } from './types'\nimport { Meta } from './meta'\nimport { log } from './utils'\nimport { IS_DEV, UNMOUNT_SYMBOL } from './common'\nimport { generateHTTPCode, generateRPCCode } from './compiler'\nexport function Injectable() {\n return (target: any) => Empty(target)\n}\nconst debug = Debug('phecda-server')\n// TODO: support both emitter types and origin emitter type in future\nexport const emitter: Emitter = new EventEmitter() as any\n\nexport async function Factory(Modules: (new (...args: any) => any)[], opts: {\n\n // HTTP generate code path\n http?: string\n // rpc generate code path\n rpc?: string\n} = {}) {\n const moduleMap = new Map<string, InstanceType<Construct>>()\n const meta: Meta[] = []\n const constructorMap = new Map()\n\n // only work for warn\n const constructorSet = new WeakSet()\n const moduleGraph = new Map<string, Set<string>>()\n const { http, rpc } = opts\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 // work for hmr\n if (!instance[UNMOUNT_SYMBOL])\n instance[UNMOUNT_SYMBOL] = []\n\n instance[UNMOUNT_SYMBOL].push(() => {\n (emitter as any).off(eventName, fn)\n })\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 async function update(Module: Construct) {\n const tag = Module.prototype?.__TAG__ || Module.name\n if (!moduleMap.has(tag))\n return\n debug(`update module \"${tag}\"`)\n\n const instance = moduleMap.get(tag)\n\n if (instance?.[UNMOUNT_SYMBOL]) {\n for (const cb of instance[UNMOUNT_SYMBOL])\n await cb()\n }\n log(`Module ${pc.yellow(`[${tag}]`)} unmount`)\n moduleMap.delete(tag)\n constructorMap.delete(tag)\n for (let i = meta.length - 1; i >= 0; i--) {\n if (meta[i].data.tag === tag)\n meta.splice(i, 1)\n }\n\n const { instance: newModule } = await buildNestModule(Module)\n if (moduleGraph.has(tag)) {\n [...moduleGraph.get(tag)!].forEach((tag) => {\n const module = moduleMap.get(tag)\n for (const key in module) {\n if (module[key] === instance)\n module[key] = newModule\n }\n })\n }\n\n moduleMap.set(tag, newModule)\n }\n async function buildNestModule(Module: Construct) {\n const paramtypes = getParamTypes(Module) as Construct[]\n let instance: InstanceType<Construct>\n const tag = Module.prototype?.__TAG__ || Module.name\n if (moduleMap.has(tag)) {\n instance = moduleMap.get(tag)\n if (!instance)\n throw new Error(`exist Circular-Dependency or Multiple modules with the same name/tag [tag] ${tag}--[module] ${Module}`)\n\n if (constructorMap.get(tag) !== Module && !constructorSet.has(Module)) {\n constructorSet.add(Module)// a module will only warn once\n log(`Synonym module: Module taged \"${tag}\" has been loaded before, so phecda-server won't load Module \"${Module.name}\"`, 'warn')\n }\n return { instance, tag }\n }\n moduleMap.set(tag, undefined)\n if (paramtypes) {\n const paramtypesInstances = [] as any[]\n for (const i in paramtypes) {\n const { instance: sub, tag: subTag } = await buildNestModule(paramtypes[i])\n paramtypesInstances[i] = sub\n if (!moduleGraph.has(subTag))\n moduleGraph.set(subTag, new Set())\n moduleGraph.get(subTag)!.add(tag)\n }\n instance = new Module(...paramtypesInstances)\n }\n else {\n instance = new Module()\n }\n meta.push(...getMetaFromInstance(instance, tag, Module.name))\n await registerAsync(instance)\n moduleMap.set(tag, instance)\n log(`Module ${pc.yellow(`[${tag}]`)} mount\"`)\n constructorMap.set(tag, Module)\n return { instance, tag }\n }\n\n for (const Module of Modules)\n await buildNestModule(Module)\n\n function writeCode() {\n debug('write code')\n\n http && fs.promises.writeFile(http, generateHTTPCode(meta.map(item => item.data)))\n rpc && fs.promises.writeFile(rpc, generateRPCCode(meta.map(item => item.data)))\n }\n\n writeCode()\n if (IS_DEV) {\n // @ts-expect-error globalThis\n globalThis.__PS_HMR__ = async (file: string) => {\n debug(`reload file ${file}`)\n const module = await import(file)\n for (const i in module) {\n if (isPhecda(module[i]))\n await update(module[i])\n }\n }\n // @ts-expect-error globalThis\n globalThis.__PS_WRITEMETA__ = writeCode\n }\n\n return {\n moduleMap,\n meta,\n constructorMap,\n update,\n }\n}\n\nfunction getMetaFromInstance(instance: Phecda, tag: string, name: string) {\n const vars = getExposeKey(instance).filter(item => item !== '__CLASS')\n const baseState = (getState(instance, '__CLASS') || {}) as P.Meta\n initState(baseState)\n\n return vars.map((i) => {\n const meta = {} as P.Meta\n const state = (getState(instance, i) || {}) as P.Meta\n initState(state)\n if (state.http) {\n meta.http = {\n route: (baseState.http?.route || '') + (state.http.route),\n type: state.http.type,\n }\n }\n if (baseState.rpc)\n meta.rpc = baseState.rpc\n if (state.rpc) {\n meta.rpc = {\n ...meta.rpc,\n ...state.rpc,\n }\n }\n\n meta.name = name\n meta.tag = tag\n meta.method = i as string\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\n meta.params = params\n meta.define = { ...baseState.define, ...state.define }\n meta.header = { ...baseState.header, ...state.header }\n meta.plugins = [...new Set([...baseState.plugins, ...state.plugins])]\n meta.guards = [...new Set([...baseState.guards, ...state.guards])]\n meta.interceptors = [...new Set([...baseState.interceptors, ...state.interceptors])]\n\n return new Meta(meta as unknown as P.Meta, getHandler(instance, i), getParamTypes(instance, i as string) || [])\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.define)\n state.define = {}\n if (!state.header)\n state.header = {}\n if (!state.plugins)\n state.plugins = []\n if (!state.guards)\n state.guards = []\n if (!state.interceptors)\n state.interceptors = []\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
2
2
 
3
- var _chunkIIGNGFDCjs = require('./chunk-IIGNGFDC.js');
3
+ var _chunkLZAU5FUSjs = require('./chunk-LZAU5FUS.js');
4
4
 
5
5
  // src/helper.ts
6
6
  function resolveDep(ret, key) {
@@ -8,9 +8,9 @@ function resolveDep(ret, key) {
8
8
  return _optionalChain([ret, 'optionalAccess', _ => _[key]]);
9
9
  return ret;
10
10
  }
11
- _chunkIIGNGFDCjs.__name.call(void 0, resolveDep, "resolveDep");
11
+ _chunkLZAU5FUSjs.__name.call(void 0, resolveDep, "resolveDep");
12
12
 
13
13
 
14
14
 
15
15
  exports.resolveDep = resolveDep;
16
- //# sourceMappingURL=chunk-JGSJIKGN.js.map
16
+ //# sourceMappingURL=chunk-FAHHXHL5.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  __name
3
- } from "./chunk-Q4FA4TAV.mjs";
3
+ } from "./chunk-AJ2HYENF.mjs";
4
4
 
5
5
  // src/helper.ts
6
6
  function resolveDep(ret, key) {
@@ -13,4 +13,4 @@ __name(resolveDep, "resolveDep");
13
13
  export {
14
14
  resolveDep
15
15
  };
16
- //# sourceMappingURL=chunk-HY6T4ZWQ.mjs.map
16
+ //# sourceMappingURL=chunk-JQPX546Z.mjs.map
@@ -1,6 +1,10 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
2
-
3
- var _chunkIIGNGFDCjs = require('./chunk-IIGNGFDC.js');
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }var __defProp = Object.defineProperty;
2
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
4
+ var __publicField = (obj, key, value) => {
5
+ __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
6
+ return value;
7
+ };
4
8
 
5
9
  // src/common.ts
6
10
  var MERGE_SYMBOL = "__PS_MERGE__";
@@ -22,7 +26,9 @@ function log(msg, level = "info") {
22
26
  const date = new Date();
23
27
  console.log(`${_picocolors2.default.magenta("[phecda-server]")} ${_picocolors2.default.gray(`${date.getHours()}:${date.getMinutes()}:${date.getSeconds()}`)} ${_picocolors2.default[color](msg)}`);
24
28
  }
25
- _chunkIIGNGFDCjs.__name.call(void 0, log, "log");
29
+ __name(log, "log");
30
+
31
+
26
32
 
27
33
 
28
34
 
@@ -33,5 +39,5 @@ _chunkIIGNGFDCjs.__name.call(void 0, log, "log");
33
39
 
34
40
 
35
41
 
36
- exports.log = log; exports.MERGE_SYMBOL = MERGE_SYMBOL; exports.UNMOUNT_SYMBOL = UNMOUNT_SYMBOL; exports.MODULE_SYMBOL = MODULE_SYMBOL; exports.META_SYMBOL = META_SYMBOL; exports.APP_SYMBOL = APP_SYMBOL; exports.IS_DEV = IS_DEV; exports.IS_STRICT = IS_STRICT;
37
- //# sourceMappingURL=chunk-PU3LWJ2C.js.map
42
+ exports.__name = __name; exports.__publicField = __publicField; exports.log = log; exports.MERGE_SYMBOL = MERGE_SYMBOL; exports.UNMOUNT_SYMBOL = UNMOUNT_SYMBOL; exports.MODULE_SYMBOL = MODULE_SYMBOL; exports.META_SYMBOL = META_SYMBOL; exports.APP_SYMBOL = APP_SYMBOL; exports.IS_DEV = IS_DEV; exports.IS_STRICT = IS_STRICT;
43
+ //# sourceMappingURL=chunk-LZAU5FUS.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/common.ts","../src/utils.ts"],"names":["MERGE_SYMBOL","UNMOUNT_SYMBOL","MODULE_SYMBOL","META_SYMBOL","APP_SYMBOL","IS_DEV","process","env","NODE_ENV","IS_STRICT","PS_STRICT","pc","log","msg","level","color","error","info","warn","date","Date","console","magenta","gray","getHours","getMinutes","getSeconds"],"mappings":";;;;;;;;;AAAO,IAAMA,eAAe;AACrB,IAAMC,iBAAiB;AACvB,IAAMC,gBAAgB;AACtB,IAAMC,cAAc;AACpB,IAAMC,aAAa;AACnB,IAAMC,SAASC,QAAQC,IAAIC,aAAa;AACxC,IAAMC,YAAY,CAAC,CAACH,QAAQC,IAAIG;;;ACNvC,OAAOC,QAAQ;AAER,SAASC,IAAIC,KAAaC,QAAmC,QAAQ;AAC1E,QAAMC,QAAS;IAAEC,OAAO;IAAOC,MAAM;IAASC,MAAM;EAAS,EAAYJ;AACzE,QAAMK,OAAO,IAAIC,KAAAA;AAEjBC,UAAQT,IAAI,GAAGD,GAAGW,QAAQ,iBAAA,KAAsBX,GAAGY,KAAK,GAAGJ,KAAKK,SAAQ,KAAML,KAAKM,WAAU,KAAMN,KAAKO,WAAU,GAAI,KAAKf,GAAGI,OAAOF,GAAAA,GAAM;AAC7I;AALgBD","sourcesContent":["export const MERGE_SYMBOL = '__PS_MERGE__'\nexport const UNMOUNT_SYMBOL = '__PS_UNMOUNT__'\nexport const MODULE_SYMBOL = '__PS_MODULE__'\nexport const META_SYMBOL = '__PS_META__'\nexport const APP_SYMBOL = '__PS__'\nexport const IS_DEV = process.env.NODE_ENV === 'development'\nexport const IS_STRICT = !!process.env.PS_STRICT\n","import pc from 'picocolors'\n\nexport function log(msg: string, level: 'error' | 'info' | 'warn' = 'info') {\n const color = ({ error: 'red', info: 'green', warn: 'yellow' } as const)[level]\n const date = new Date()\n // eslint-disable-next-line no-console\n console.log(`${pc.magenta('[phecda-server]')} ${pc.gray(`${date.getHours()}:${date.getMinutes()}:${date.getSeconds()}`)} ${pc[color](msg)}`)\n}\n"]}
@@ -1,12 +1,10 @@
1
1
  import {
2
2
  IS_DEV,
3
3
  IS_STRICT,
4
- log
5
- } from "./chunk-PIRUVYEF.mjs";
6
- import {
7
4
  __name,
8
- __publicField
9
- } from "./chunk-Q4FA4TAV.mjs";
5
+ __publicField,
6
+ log
7
+ } from "./chunk-AJ2HYENF.mjs";
10
8
 
11
9
  // src/exception/base.ts
12
10
  var Exception = class extends Error {
@@ -372,4 +370,4 @@ export {
372
370
  addInterceptor,
373
371
  isAopDepInject
374
372
  };
375
- //# sourceMappingURL=chunk-O2H7ERZR.mjs.map
373
+ //# sourceMappingURL=chunk-Q6T7HNEO.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/exception/base.ts","../src/exception/validate.ts","../src/pipe.ts","../src/exception/undefine.ts","../src/exception/forbidden.ts","../src/exception/bad-request.ts","../src/exception/not-found.ts","../src/exception/conflict.ts","../src/exception/bad-gateway.ts","../src/exception/invalid-input.ts","../src/exception/media-type.ts","../src/exception/payload-large.ts","../src/exception/timeout.ts","../src/exception/unauthorized.ts","../src/exception/unavailable-service.ts","../src/exception/framework.ts","../src/context.ts","../src/filter.ts","../src/history.ts"],"sourcesContent":["export class Exception extends Error {\n constructor(public message: string, public status: number, public description = 'Http exception') {\n super(message)\n }\n\n get data() {\n return { message: this.message, description: this.description, status: this.status, error: true }\n }\n}\n","import { Exception } from './base'\n\nexport class ValidateException extends Exception {\n constructor(message: string) {\n super(message, 400, 'Validate exception')\n }\n}\n","import { isPhecda, plainToClass, transformClass } from 'phecda-core'\nimport { ValidateException } from './exception/validate'\n\nimport type { P } from './types'\n\nexport const defaultPipe: P.Pipe = async ({ arg, reflect, index }: any) => {\n if (isPhecda(reflect)) {\n const instance = plainToClass(reflect, arg)\n const err = await transformClass(instance)\n if (err.length > 0)\n throw new ValidateException(err[0])\n\n arg = instance\n }\n else {\n if ([Number, Boolean].includes(reflect)) {\n arg = reflect(arg)\n\n if (reflect === Number && Object.is(arg, NaN))\n throw new ValidateException(`parameter ${Number(index) + 1} should be a number`)\n }\n }\n return arg\n}\n","import { Exception } from './base'\n\nexport class UndefinedException extends Exception {\n constructor(message: string) {\n super(message, 500, 'Undefined error')\n }\n}\n","import { Exception } from './base'\n\nexport class ForbiddenException extends Exception {\n constructor(message: string) {\n super(message, 403, 'Forbidden resource')\n }\n}\n","import { Exception } from './base'\n\nexport class BadRequestException extends Exception {\n constructor(message: string) {\n super(message, 400, 'Bad Request')\n }\n}\n","import { Exception } from './base'\n\nexport class NotFoundException extends Exception {\n constructor(message: string) {\n super(message, 404, 'Not Found')\n }\n}\n","import { Exception } from './base'\n\nexport class ConflictException extends Exception {\n constructor(message: string) {\n super(message, 409, 'Conflict')\n }\n}\n","import { Exception } from './base'\n\nexport class BadGatewayException extends Exception {\n constructor(message: string) {\n super(message, 502, 'Bad Gatrway')\n }\n}\n","import { Exception } from './base'\n\nexport class InvalidInputException extends Exception {\n constructor(message: string) {\n super(message, 502, 'Invalid Input')\n }\n}\n","import { Exception } from './base'\n\nexport class UnsupportedMediaTypeException extends Exception {\n constructor(message: string) {\n super(message, 415, 'Unsupported Media Type')\n }\n}\n","import { Exception } from './base'\n\nexport class PayloadLargeException extends Exception {\n constructor(message: string) {\n super(message, 413, 'Payload Too Large')\n }\n}\n","import { Exception } from './base'\n\nexport class TimeoutException extends Exception {\n constructor(message: string) {\n super(message, 408, 'Request Timeout',\n )\n }\n}\n","import { Exception } from './base'\n\nexport class UnauthorizedException extends Exception {\n constructor(message: string) {\n super(message, 401, 'Unauthorized')\n }\n}\n","import { Exception } from './base'\n\nexport class ServiceUnavailableException extends Exception {\n constructor(message: string) {\n super(message, 503, 'Service Unavailable')\n }\n}\n","import { Exception } from './base'\n\nexport class FrameworkException extends Exception {\n constructor(message: string) {\n super(`[phecda-server] ${message}`, 500, 'Framework Error')\n }\n}\n","import pc from 'picocolors'\nimport { defaultPipe } from './pipe'\nimport { ForbiddenException, FrameworkException } from './exception'\nimport { defaultFilter } from './filter'\nimport { Histroy } from './history'\nimport type { P } from './types'\nimport { IS_DEV, IS_STRICT } from './common'\nimport type { Meta } from './meta'\nimport { log } from './utils'\nexport const guardRecord = {} as Record<string, P.Guard>\n\nexport class Context<Data = any> {\n method: string\n params: string[]\n history = new Histroy()\n\n static filter: P.Filter = defaultFilter\n static pipeRecord: Record<string, P.Pipe> = {\n default: defaultPipe,\n }\n\n static guardRecord: Record<string, P.Guard> = {}\n static interceptorRecord: Record<string, P.Interceptor> = {}\n\n static pluginRecord: Record<string, any> = {}\n postInterceptors: Function[]\n\n constructor(public tag: string, public data: Data) {\n if (IS_DEV)\n // @ts-expect-error work for debug\n data._context = this\n }\n\n usePipe(args: { arg: any; pipe?: string; pipeOpts?: any; type: string; key: string; index: number; reflect: any }[]) {\n return Promise.all(args.map((item) => {\n if (item.pipe && !Context.pipeRecord[item.pipe]) {\n if (IS_STRICT)\n throw new FrameworkException(`can't find pipe named '${item.pipe}'`)\n\n else\n return Context.pipeRecord.default(item, this.tag, this.data)\n }\n\n return Context.pipeRecord[item.pipe || 'default'](item, this.tag, this.data)\n }))\n }\n\n useFilter(arg: any) {\n return Context.filter(arg, this.tag, this.data)\n }\n\n async useGuard(guards: string[]) {\n for (const guard of guards) {\n if (this.history.record(guard, 'guard')) {\n if (!(guard in Context.guardRecord)) {\n if (IS_STRICT)\n throw new FrameworkException(`can't find guard named '${guard}'`)\n continue\n }\n if (!await Context.guardRecord[guard](this.tag, this.data))\n throw new ForbiddenException(`Guard exception--${guard}`)\n }\n }\n }\n\n async usePostInterceptor(ret: any) {\n for (const cb of this.postInterceptors)\n ret = await cb(ret) || ret\n\n return ret\n }\n\n async useInterceptor(interceptors: string[]) {\n const ret = []\n for (const interceptor of interceptors) {\n if (this.history.record(interceptor, 'interceptor')) {\n if (!(interceptor in Context.interceptorRecord)) {\n if (IS_STRICT)\n throw new FrameworkException(`can't find interceptor named '${interceptor}'`)\n\n continue\n }\n const postInterceptor = await Context.interceptorRecord[interceptor](this.tag, this.data)\n if (postInterceptor !== undefined) {\n if (typeof postInterceptor === 'function')\n ret.push(postInterceptor)\n\n else\n return postInterceptor\n }\n }\n }\n this.postInterceptors = ret\n }\n\n static usePlugin(plugins: string[]) {\n const ret = []\n for (const m of plugins) {\n if (!(m in Context.pluginRecord)) {\n if (IS_STRICT)\n throw new FrameworkException(`can't find middleware named '${m}'`)\n\n continue\n }\n ret.push(Context.pluginRecord[m])\n }\n return ret as any[]\n }\n}\nexport function addPlugin<C>(key: string, handler: C) {\n Context.pluginRecord[key] = handler\n}\n\nexport function addPipe(key: string, pipe: P.Pipe) {\n Context.pipeRecord[key] = pipe\n}\n\nexport function setFilter(filter: P.Filter) {\n Context.filter = filter\n}\n\nexport function addGuard(key: string, handler: P.Guard) {\n Context.guardRecord[key] = handler\n}\n\nexport function addInterceptor(key: string, handler: P.Interceptor) {\n Context.interceptorRecord[key] = handler\n}\n\nexport function isAopDepInject(meta: Meta[], { guards, interceptors, plugins }: {\n guards?: string[]\n interceptors?: string[]\n plugins?: string[]\n} = {}) {\n const pluginSet = new Set<string>(plugins)\n\n const guardSet = new Set<string>(guards)\n const interceptorSet = new Set<string>(interceptors)\n const pipeSet = new Set<string>()\n meta.forEach(({ data }) => {\n data.interceptors.forEach(i => interceptorSet.add(i))\n data.guards.forEach(i => guardSet.add(i))\n data.plugins.forEach(i => pluginSet.add(i))\n data.params.forEach((i) => {\n if (i.pipe)\n pipeSet.add(i.pipe)\n })\n });\n\n [...pluginSet].forEach((i) => {\n if (!Context.pluginRecord[i])\n log(`${pc.white(`Plugin [${i}]`)} doesn't exist`, 'warn')\n });\n [...guardSet].forEach((i) => {\n if (!Context.guardRecord[i])\n log(`${pc.red(`Guard [${i}]`)} doesn't exist`, 'warn')\n });\n [...interceptorSet].forEach((i) => {\n if (!Context.interceptorRecord[i])\n log(`${pc.cyan(`Interceptor [${i}]`)} doesn't exist`, 'warn')\n });\n [...pipeSet].forEach((i) => {\n if (!Context.pipeRecord[i])\n log(`${pc.blue(`Pipe [${i}]`)} doesn't exist`, 'warn')\n })\n}\n","import { Exception, UndefinedException } from './exception'\nimport type { P } from './types'\nimport { log } from './utils'\n\nexport const defaultFilter: P.Filter = (e: any) => {\n if (!(e instanceof Exception)) {\n log(e.message, 'error')\n console.error(e.stack)\n e = new UndefinedException(e.message || e)\n }\n else {\n log(`[${e.constructor.name}] ${e.message}`, 'error')\n console.error(e.stack)\n }\n\n return e.data\n}\n","export class Histroy {\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"],"mappings":"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","names":["Exception","Error","message","status","description","constructor","data","error","ValidateException","Exception","constructor","message","isPhecda","plainToClass","transformClass","defaultPipe","arg","reflect","index","isPhecda","instance","plainToClass","err","transformClass","length","ValidateException","Number","Boolean","includes","Object","is","NaN","UndefinedException","Exception","constructor","message","ForbiddenException","Exception","constructor","message","BadRequestException","Exception","constructor","message","NotFoundException","Exception","constructor","message","ConflictException","Exception","constructor","message","BadGatewayException","Exception","constructor","message","InvalidInputException","Exception","constructor","message","UnsupportedMediaTypeException","Exception","constructor","message","PayloadLargeException","Exception","constructor","message","TimeoutException","Exception","constructor","message","UnauthorizedException","Exception","constructor","message","ServiceUnavailableException","Exception","constructor","message","FrameworkException","Exception","constructor","message","pc","defaultFilter","e","Exception","log","message","console","error","stack","UndefinedException","constructor","name","data","Histroy","guard","interceptor","record","name","type","includes","push","guardRecord","Context","tag","data","method","params","history","postInterceptors","constructor","Histroy","IS_DEV","_context","usePipe","args","Promise","all","map","item","pipe","pipeRecord","IS_STRICT","FrameworkException","default","useFilter","arg","filter","useGuard","guards","guard","record","ForbiddenException","usePostInterceptor","ret","cb","useInterceptor","interceptors","interceptor","interceptorRecord","postInterceptor","undefined","push","usePlugin","plugins","m","pluginRecord","defaultFilter","defaultPipe","addPlugin","key","handler","addPipe","setFilter","addGuard","addInterceptor","isAopDepInject","meta","pluginSet","Set","guardSet","interceptorSet","pipeSet","forEach","i","add","log","pc","white","red","cyan","blue"]}
1
+ {"version":3,"sources":["../src/exception/base.ts","../src/exception/validate.ts","../src/pipe.ts","../src/exception/undefine.ts","../src/exception/forbidden.ts","../src/exception/bad-request.ts","../src/exception/not-found.ts","../src/exception/conflict.ts","../src/exception/bad-gateway.ts","../src/exception/invalid-input.ts","../src/exception/media-type.ts","../src/exception/payload-large.ts","../src/exception/timeout.ts","../src/exception/unauthorized.ts","../src/exception/unavailable-service.ts","../src/exception/framework.ts","../src/context.ts","../src/filter.ts","../src/history.ts"],"sourcesContent":["export class Exception extends Error {\n constructor(public message: string, public status: number, public description = 'Http exception') {\n super(message)\n }\n\n get data() {\n return { message: this.message, description: this.description, status: this.status, error: true }\n }\n}\n","import { Exception } from './base'\n\nexport class ValidateException extends Exception {\n constructor(message: string) {\n super(message, 400, 'Validate exception')\n }\n}\n","import { isPhecda, plainToClass, transformClass } from 'phecda-core'\nimport { ValidateException } from './exception/validate'\n\nimport type { P } from './types'\n\nexport const defaultPipe: P.Pipe = async ({ arg, reflect, index }: any) => {\n if (isPhecda(reflect)) {\n const instance = plainToClass(reflect, arg)\n const err = await transformClass(instance)\n if (err.length > 0)\n throw new ValidateException(err[0])\n\n arg = instance\n }\n else {\n if ([Number, Boolean].includes(reflect)) {\n arg = reflect(arg)\n\n if (reflect === Number && Object.is(arg, NaN))\n throw new ValidateException(`parameter ${Number(index) + 1} should be a number`)\n }\n }\n return arg\n}\n","import { Exception } from './base'\n\nexport class UndefinedException extends Exception {\n constructor(message: string) {\n super(message, 500, 'Undefined error')\n }\n}\n","import { Exception } from './base'\n\nexport class ForbiddenException extends Exception {\n constructor(message: string) {\n super(message, 403, 'Forbidden resource')\n }\n}\n","import { Exception } from './base'\n\nexport class BadRequestException extends Exception {\n constructor(message: string) {\n super(message, 400, 'Bad Request')\n }\n}\n","import { Exception } from './base'\n\nexport class NotFoundException extends Exception {\n constructor(message: string) {\n super(message, 404, 'Not Found')\n }\n}\n","import { Exception } from './base'\n\nexport class ConflictException extends Exception {\n constructor(message: string) {\n super(message, 409, 'Conflict')\n }\n}\n","import { Exception } from './base'\n\nexport class BadGatewayException extends Exception {\n constructor(message: string) {\n super(message, 502, 'Bad Gatrway')\n }\n}\n","import { Exception } from './base'\n\nexport class InvalidInputException extends Exception {\n constructor(message: string) {\n super(message, 502, 'Invalid Input')\n }\n}\n","import { Exception } from './base'\n\nexport class UnsupportedMediaTypeException extends Exception {\n constructor(message: string) {\n super(message, 415, 'Unsupported Media Type')\n }\n}\n","import { Exception } from './base'\n\nexport class PayloadLargeException extends Exception {\n constructor(message: string) {\n super(message, 413, 'Payload Too Large')\n }\n}\n","import { Exception } from './base'\n\nexport class TimeoutException extends Exception {\n constructor(message: string) {\n super(message, 408, 'Request Timeout',\n )\n }\n}\n","import { Exception } from './base'\n\nexport class UnauthorizedException extends Exception {\n constructor(message: string) {\n super(message, 401, 'Unauthorized')\n }\n}\n","import { Exception } from './base'\n\nexport class ServiceUnavailableException extends Exception {\n constructor(message: string) {\n super(message, 503, 'Service Unavailable')\n }\n}\n","import { Exception } from './base'\n\nexport class FrameworkException extends Exception {\n constructor(message: string) {\n super(`[phecda-server] ${message}`, 500, 'Framework Error')\n }\n}\n","import pc from 'picocolors'\nimport { defaultPipe } from './pipe'\nimport { ForbiddenException, FrameworkException } from './exception'\nimport { defaultFilter } from './filter'\nimport { Histroy } from './history'\nimport type { P } from './types'\nimport { IS_DEV, IS_STRICT } from './common'\nimport type { Meta } from './meta'\nimport { log } from './utils'\nexport const guardRecord = {} as Record<string, P.Guard>\n\nexport class Context<Data = any> {\n method: string\n params: string[]\n history = new Histroy()\n\n static filter: P.Filter = defaultFilter\n static pipeRecord: Record<string, P.Pipe> = {\n default: defaultPipe,\n }\n\n static guardRecord: Record<string, P.Guard> = {}\n static interceptorRecord: Record<string, P.Interceptor> = {}\n\n static pluginRecord: Record<string, any> = {}\n postInterceptors: Function[]\n\n constructor(public tag: string, public data: Data) {\n if (IS_DEV)\n // @ts-expect-error work for debug\n data._context = this\n }\n\n usePipe(args: { arg: any; pipe?: string; pipeOpts?: any; type: string; key: string; index: number; reflect: any }[]) {\n return Promise.all(args.map((item) => {\n if (item.pipe && !Context.pipeRecord[item.pipe]) {\n if (IS_STRICT)\n throw new FrameworkException(`can't find pipe named '${item.pipe}'`)\n\n else\n return Context.pipeRecord.default(item, this.tag, this.data)\n }\n\n return Context.pipeRecord[item.pipe || 'default'](item, this.tag, this.data)\n }))\n }\n\n useFilter(arg: any) {\n return Context.filter(arg, this.tag, this.data)\n }\n\n async useGuard(guards: string[]) {\n for (const guard of guards) {\n if (this.history.record(guard, 'guard')) {\n if (!(guard in Context.guardRecord)) {\n if (IS_STRICT)\n throw new FrameworkException(`can't find guard named '${guard}'`)\n continue\n }\n if (!await Context.guardRecord[guard](this.tag, this.data))\n throw new ForbiddenException(`Guard exception--${guard}`)\n }\n }\n }\n\n async usePostInterceptor(ret: any) {\n for (const cb of this.postInterceptors)\n ret = await cb(ret) || ret\n\n return ret\n }\n\n async useInterceptor(interceptors: string[]) {\n const ret = []\n for (const interceptor of interceptors) {\n if (this.history.record(interceptor, 'interceptor')) {\n if (!(interceptor in Context.interceptorRecord)) {\n if (IS_STRICT)\n throw new FrameworkException(`can't find interceptor named '${interceptor}'`)\n\n continue\n }\n const postInterceptor = await Context.interceptorRecord[interceptor](this.tag, this.data)\n if (postInterceptor !== undefined) {\n if (typeof postInterceptor === 'function')\n ret.push(postInterceptor)\n\n else\n return postInterceptor\n }\n }\n }\n this.postInterceptors = ret\n }\n\n static usePlugin(plugins: string[]) {\n const ret = []\n for (const m of plugins) {\n if (!(m in Context.pluginRecord)) {\n if (IS_STRICT)\n throw new FrameworkException(`can't find middleware named '${m}'`)\n\n continue\n }\n ret.push(Context.pluginRecord[m])\n }\n return ret as any[]\n }\n}\nexport function addPlugin<C>(key: string, handler: C) {\n Context.pluginRecord[key] = handler\n}\n\nexport function addPipe(key: string, pipe: P.Pipe) {\n Context.pipeRecord[key] = pipe\n}\n\nexport function setFilter(filter: P.Filter) {\n Context.filter = filter\n}\n\nexport function addGuard(key: string, handler: P.Guard) {\n Context.guardRecord[key] = handler\n}\n\nexport function addInterceptor(key: string, handler: P.Interceptor) {\n Context.interceptorRecord[key] = handler\n}\n\nexport function isAopDepInject(meta: Meta[], { guards, interceptors, plugins }: {\n guards?: string[]\n interceptors?: string[]\n plugins?: string[]\n} = {}) {\n const pluginSet = new Set<string>(plugins)\n\n const guardSet = new Set<string>(guards)\n const interceptorSet = new Set<string>(interceptors)\n const pipeSet = new Set<string>()\n meta.forEach(({ data }) => {\n data.interceptors.forEach(i => interceptorSet.add(i))\n data.guards.forEach(i => guardSet.add(i))\n data.plugins.forEach(i => pluginSet.add(i))\n data.params.forEach((i) => {\n if (i.pipe)\n pipeSet.add(i.pipe)\n })\n });\n\n [...pluginSet].forEach((i) => {\n if (!Context.pluginRecord[i])\n log(`${pc.white(`Plugin [${i}]`)} doesn't exist`, 'warn')\n });\n [...guardSet].forEach((i) => {\n if (!Context.guardRecord[i])\n log(`${pc.red(`Guard [${i}]`)} doesn't exist`, 'warn')\n });\n [...interceptorSet].forEach((i) => {\n if (!Context.interceptorRecord[i])\n log(`${pc.cyan(`Interceptor [${i}]`)} doesn't exist`, 'warn')\n });\n [...pipeSet].forEach((i) => {\n if (!Context.pipeRecord[i])\n log(`${pc.blue(`Pipe [${i}]`)} doesn't exist`, 'warn')\n })\n}\n","import { Exception, UndefinedException } from './exception'\nimport type { P } from './types'\nimport { log } from './utils'\n\nexport const defaultFilter: P.Filter = (e: any) => {\n if (!(e instanceof Exception)) {\n log(e.message, 'error')\n console.error(e.stack)\n e = new UndefinedException(e.message || e)\n }\n else {\n log(`[${e.constructor.name}] ${e.message}`, 'error')\n console.error(e.stack)\n }\n\n return e.data\n}\n","export class Histroy {\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"],"mappings":"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","names":["Exception","Error","message","status","description","constructor","data","error","ValidateException","Exception","constructor","message","isPhecda","plainToClass","transformClass","defaultPipe","arg","reflect","index","isPhecda","instance","plainToClass","err","transformClass","length","ValidateException","Number","Boolean","includes","Object","is","NaN","UndefinedException","Exception","constructor","message","ForbiddenException","Exception","constructor","message","BadRequestException","Exception","constructor","message","NotFoundException","Exception","constructor","message","ConflictException","Exception","constructor","message","BadGatewayException","Exception","constructor","message","InvalidInputException","Exception","constructor","message","UnsupportedMediaTypeException","Exception","constructor","message","PayloadLargeException","Exception","constructor","message","TimeoutException","Exception","constructor","message","UnauthorizedException","Exception","constructor","message","ServiceUnavailableException","Exception","constructor","message","FrameworkException","Exception","constructor","message","pc","defaultFilter","e","Exception","log","message","console","error","stack","UndefinedException","constructor","name","data","Histroy","guard","interceptor","record","name","type","includes","push","guardRecord","Context","tag","data","method","params","history","postInterceptors","constructor","Histroy","IS_DEV","_context","usePipe","args","Promise","all","map","item","pipe","pipeRecord","IS_STRICT","FrameworkException","default","useFilter","arg","filter","useGuard","guards","guard","record","ForbiddenException","usePostInterceptor","ret","cb","useInterceptor","interceptors","interceptor","interceptorRecord","postInterceptor","undefined","push","usePlugin","plugins","m","pluginRecord","defaultFilter","defaultPipe","addPlugin","key","handler","addPipe","setFilter","addGuard","addInterceptor","isAopDepInject","meta","pluginSet","Set","guardSet","interceptorSet","pipeSet","forEach","i","add","log","pc","white","red","cyan","blue"]}
@@ -1,11 +1,9 @@
1
1
  import {
2
2
  IS_DEV,
3
3
  UNMOUNT_SYMBOL,
4
+ __name,
4
5
  log
5
- } from "./chunk-PIRUVYEF.mjs";
6
- import {
7
- __name
8
- } from "./chunk-Q4FA4TAV.mjs";
6
+ } from "./chunk-AJ2HYENF.mjs";
9
7
 
10
8
  // src/meta.ts
11
9
  var Meta = class {
@@ -323,4 +321,4 @@ export {
323
321
  emitter,
324
322
  Factory
325
323
  };
326
- //# sourceMappingURL=chunk-KVUJ3VJZ.mjs.map
324
+ //# sourceMappingURL=chunk-WRMLZ7NU.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/meta.ts","../src/compiler/rpc.ts","../src/compiler/http.ts","../src/core.ts"],"sourcesContent":["import type { P } from './types'\n\nexport class Meta {\n constructor(public data: P.Meta, public handlers: P.Handler[], public paramsType: any[]) {\n\n }\n}\n","import type { P } from '../types'\n\nclass Compiler {\n classMap: Record<string, { [key: string]: string }> = {}\n constructor() { }\n\n getContent() {\n let content = ''\n\n for (const name in this.classMap) {\n content += `\n export class ${name}{\n ${Object.values(this.classMap[name]).reduce((p, c) => p + c)}\n }`\n }\n return content\n }\n\n addMethod(args: P.Meta) {\n const {\n rpc, name, method, tag,\n } = args\n if (!rpc || !rpc.type)\n return\n if (!this.classMap[name])\n this.classMap[name] = {}\n this.classMap[name][method] = `\n ${method}(){\n return {tag:'${tag}-${method}',isEvent:${!!rpc.isEvent},rpc:[${rpc.type.reduce((p, c) => {\n return `${p}\"${c}\",`\n }, '')}]}\n\n }\n `\n }\n}\n\nexport function generateRPCCode(meta: P.Meta[]) {\n const compiler = new Compiler()\n\n for (const i of meta)\n compiler.addMethod(i)\n return compiler.getContent()\n}\n","import type { P } from '../types'\n\nclass Compiler {\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 // createRequest() {\n // let content = 'import {useC} from \\'phecda-server\\'\\n'\n // for (const name in this.classMap)\n // content += `export const {${Object.keys(this.classMap[name]).join(',')}}=useC(${name})\\n`\n // return content\n // }\n\n addMethod(args: P.Meta) {\n const {\n http, name, method, params, tag,\n } = args\n if (!http)\n return\n const url = http.route.replace(/\\/\\:([^\\/]*)/g, (_, js) => `/{{${js}}}`)\n if (!this.classMap[name])\n this.classMap[name] = {}\n this.classMap[name][method] = `\n ${method}(...args){\nconst ret={tag:\"${tag}-${method}\",body:{},headers:{},query:{},params:{},method:\"${http.type}\",url:\"${url}\",args}\n\n${params.reduce((p, c, i) => `${p}ret.${c.type}${c.key ? `['${c.key}']` : ''}=args[${i}]\\n${c.type === 'params' ? `ret.url=ret.url.replace('{{${c.key}}}',args[${i}])` : ''}\\n`, '')}\nreturn ret\n }\n `\n }\n}\n\nexport function generateHTTPCode(meta: P.Meta[]) {\n const compiler = new Compiler()\n\n for (const i of meta)\n compiler.addMethod(i)\n return compiler.getContent()\n}\n","import 'reflect-metadata'\nimport fs from 'fs'\nimport EventEmitter from 'node:events'\nimport type { Phecda } from 'phecda-core'\nimport { Empty, getExposeKey, getHandler, getState, injectProperty, isPhecda, registerAsync } from 'phecda-core'\nimport Debug from 'debug'\nimport pc from 'picocolors'\nimport type { Construct, Emitter, P } from './types'\nimport { Meta } from './meta'\nimport { log } from './utils'\nimport { IS_DEV, UNMOUNT_SYMBOL } from './common'\nimport { generateHTTPCode, generateRPCCode } from './compiler'\nexport function Injectable() {\n return (target: any) => Empty(target)\n}\nconst debug = Debug('phecda-server')\n// TODO: support both emitter types and origin emitter type in future\nexport const emitter: Emitter = new EventEmitter() as any\n\nexport async function Factory(Modules: (new (...args: any) => any)[], opts: {\n\n // HTTP generate code path\n http?: string\n // rpc generate code path\n rpc?: string\n} = {}) {\n const moduleMap = new Map<string, InstanceType<Construct>>()\n const meta: Meta[] = []\n const constructorMap = new Map()\n\n // only work for warn\n const constructorSet = new WeakSet()\n const moduleGraph = new Map<string, Set<string>>()\n const { http, rpc } = opts\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 // work for hmr\n if (!instance[UNMOUNT_SYMBOL])\n instance[UNMOUNT_SYMBOL] = []\n\n instance[UNMOUNT_SYMBOL].push(() => {\n (emitter as any).off(eventName, fn)\n })\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 async function update(Module: Construct) {\n const tag = Module.prototype?.__TAG__ || Module.name\n if (!moduleMap.has(tag))\n return\n debug(`update module \"${tag}\"`)\n\n const instance = moduleMap.get(tag)\n\n if (instance?.[UNMOUNT_SYMBOL]) {\n for (const cb of instance[UNMOUNT_SYMBOL])\n await cb()\n }\n log(`Module ${pc.yellow(`[${tag}]`)} unmount`)\n moduleMap.delete(tag)\n constructorMap.delete(tag)\n for (let i = meta.length - 1; i >= 0; i--) {\n if (meta[i].data.tag === tag)\n meta.splice(i, 1)\n }\n\n const { instance: newModule } = await buildNestModule(Module)\n if (moduleGraph.has(tag)) {\n [...moduleGraph.get(tag)!].forEach((tag) => {\n const module = moduleMap.get(tag)\n for (const key in module) {\n if (module[key] === instance)\n module[key] = newModule\n }\n })\n }\n\n moduleMap.set(tag, newModule)\n }\n async function buildNestModule(Module: Construct) {\n const paramtypes = getParamTypes(Module) as Construct[]\n let instance: InstanceType<Construct>\n const tag = Module.prototype?.__TAG__ || Module.name\n if (moduleMap.has(tag)) {\n instance = moduleMap.get(tag)\n if (!instance)\n throw new Error(`exist Circular-Dependency or Multiple modules with the same name/tag [tag] ${tag}--[module] ${Module}`)\n\n if (constructorMap.get(tag) !== Module && !constructorSet.has(Module)) {\n constructorSet.add(Module)// a module will only warn once\n log(`Synonym module: Module taged \"${tag}\" has been loaded before, so phecda-server won't load Module \"${Module.name}\"`, 'warn')\n }\n return { instance, tag }\n }\n moduleMap.set(tag, undefined)\n if (paramtypes) {\n const paramtypesInstances = [] as any[]\n for (const i in paramtypes) {\n const { instance: sub, tag: subTag } = await buildNestModule(paramtypes[i])\n paramtypesInstances[i] = sub\n if (!moduleGraph.has(subTag))\n moduleGraph.set(subTag, new Set())\n moduleGraph.get(subTag)!.add(tag)\n }\n instance = new Module(...paramtypesInstances)\n }\n else {\n instance = new Module()\n }\n meta.push(...getMetaFromInstance(instance, tag, Module.name))\n await registerAsync(instance)\n moduleMap.set(tag, instance)\n log(`Module ${pc.yellow(`[${tag}]`)} mount\"`)\n constructorMap.set(tag, Module)\n return { instance, tag }\n }\n\n for (const Module of Modules)\n await buildNestModule(Module)\n\n function writeCode() {\n debug('write code')\n\n http && fs.promises.writeFile(http, generateHTTPCode(meta.map(item => item.data)))\n rpc && fs.promises.writeFile(rpc, generateRPCCode(meta.map(item => item.data)))\n }\n\n writeCode()\n if (IS_DEV) {\n // @ts-expect-error globalThis\n globalThis.__PS_HMR__ = async (file: string) => {\n debug(`reload file ${file}`)\n const module = await import(file)\n for (const i in module) {\n if (isPhecda(module[i]))\n await update(module[i])\n }\n }\n // @ts-expect-error globalThis\n globalThis.__PS_WRITEMETA__ = writeCode\n }\n\n return {\n moduleMap,\n meta,\n constructorMap,\n update,\n }\n}\n\nfunction getMetaFromInstance(instance: Phecda, tag: string, name: string) {\n const vars = getExposeKey(instance).filter(item => item !== '__CLASS')\n const baseState = (getState(instance, '__CLASS') || {}) as P.Meta\n initState(baseState)\n\n return vars.map((i) => {\n const meta = {} as P.Meta\n const state = (getState(instance, i) || {}) as P.Meta\n initState(state)\n if (state.http) {\n meta.http = {\n route: (baseState.http?.route || '') + (state.http.route),\n type: state.http.type,\n }\n }\n if (baseState.rpc)\n meta.rpc = baseState.rpc\n if (state.rpc) {\n meta.rpc = {\n ...meta.rpc,\n ...state.rpc,\n }\n }\n\n meta.name = name\n meta.tag = tag\n meta.method = i as string\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\n meta.params = params\n meta.define = { ...baseState.define, ...state.define }\n meta.header = { ...baseState.header, ...state.header }\n meta.plugins = [...new Set([...baseState.plugins, ...state.plugins])]\n meta.guards = [...new Set([...baseState.guards, ...state.guards])]\n meta.interceptors = [...new Set([...baseState.interceptors, ...state.interceptors])]\n\n return new Meta(meta as unknown as P.Meta, getHandler(instance, i), getParamTypes(instance, i as string) || [])\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.define)\n state.define = {}\n if (!state.header)\n state.header = {}\n if (!state.plugins)\n state.plugins = []\n if (!state.guards)\n state.guards = []\n if (!state.interceptors)\n state.interceptors = []\n}\n"],"mappings":"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","names":["Meta","data","handlers","paramsType","constructor","Compiler","classMap","constructor","getContent","content","name","Object","values","reduce","p","c","addMethod","args","rpc","method","tag","type","isEvent","generateRPCCode","meta","compiler","i","Compiler","classMap","constructor","getContent","content","name","Object","values","reduce","p","c","addMethod","args","http","method","params","tag","url","route","replace","_","js","type","i","key","generateHTTPCode","meta","compiler","fs","EventEmitter","Empty","getExposeKey","getHandler","getState","injectProperty","isPhecda","registerAsync","Debug","pc","Injectable","target","Empty","debug","Debug","emitter","EventEmitter","Factory","Modules","opts","moduleMap","Map","meta","constructorMap","constructorSet","WeakSet","moduleGraph","http","rpc","injectProperty","eventName","instance","key","options","fn","bind","v","UNMOUNT_SYMBOL","push","off","once","on","update","Module","tag","prototype","__TAG__","name","has","get","cb","log","pc","yellow","delete","i","length","data","splice","newModule","buildNestModule","forEach","module","set","paramtypes","getParamTypes","Error","add","undefined","paramtypesInstances","sub","subTag","Set","getMetaFromInstance","registerAsync","writeCode","fs","promises","writeFile","generateHTTPCode","map","item","generateRPCCode","IS_DEV","globalThis","__PS_HMR__","file","isPhecda","__PS_WRITEMETA__","vars","getExposeKey","filter","baseState","getState","initState","state","route","type","method","params","unshift","index","define","header","plugins","guards","interceptors","Meta","getHandler","Reflect","getMetadata"]}
1
+ {"version":3,"sources":["../src/meta.ts","../src/compiler/rpc.ts","../src/compiler/http.ts","../src/core.ts"],"sourcesContent":["import type { P } from './types'\n\nexport class Meta {\n constructor(public data: P.Meta, public handlers: P.Handler[], public paramsType: any[]) {\n\n }\n}\n","import type { P } from '../types'\n\nclass Compiler {\n classMap: Record<string, { [key: string]: string }> = {}\n constructor() { }\n\n getContent() {\n let content = ''\n\n for (const name in this.classMap) {\n content += `\n export class ${name}{\n ${Object.values(this.classMap[name]).reduce((p, c) => p + c)}\n }`\n }\n return content\n }\n\n addMethod(args: P.Meta) {\n const {\n rpc, name, method, tag,\n } = args\n if (!rpc || !rpc.type)\n return\n if (!this.classMap[name])\n this.classMap[name] = {}\n this.classMap[name][method] = `\n ${method}(){\n return {tag:'${tag}-${method}',isEvent:${!!rpc.isEvent},rpc:[${rpc.type.reduce((p, c) => {\n return `${p}\"${c}\",`\n }, '')}]}\n\n }\n `\n }\n}\n\nexport function generateRPCCode(meta: P.Meta[]) {\n const compiler = new Compiler()\n\n for (const i of meta)\n compiler.addMethod(i)\n return compiler.getContent()\n}\n","import type { P } from '../types'\n\nclass Compiler {\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 // createRequest() {\n // let content = 'import {useC} from \\'phecda-server\\'\\n'\n // for (const name in this.classMap)\n // content += `export const {${Object.keys(this.classMap[name]).join(',')}}=useC(${name})\\n`\n // return content\n // }\n\n addMethod(args: P.Meta) {\n const {\n http, name, method, params, tag,\n } = args\n if (!http)\n return\n const url = http.route.replace(/\\/\\:([^\\/]*)/g, (_, js) => `/{{${js}}}`)\n if (!this.classMap[name])\n this.classMap[name] = {}\n this.classMap[name][method] = `\n ${method}(...args){\nconst ret={tag:\"${tag}-${method}\",body:{},headers:{},query:{},params:{},method:\"${http.type}\",url:\"${url}\",args}\n\n${params.reduce((p, c, i) => `${p}ret.${c.type}${c.key ? `['${c.key}']` : ''}=args[${i}]\\n${c.type === 'params' ? `ret.url=ret.url.replace('{{${c.key}}}',args[${i}])` : ''}\\n`, '')}\nreturn ret\n }\n `\n }\n}\n\nexport function generateHTTPCode(meta: P.Meta[]) {\n const compiler = new Compiler()\n\n for (const i of meta)\n compiler.addMethod(i)\n return compiler.getContent()\n}\n","import 'reflect-metadata'\nimport fs from 'fs'\nimport EventEmitter from 'node:events'\nimport type { Phecda } from 'phecda-core'\nimport { Empty, getExposeKey, getHandler, getState, injectProperty, isPhecda, registerAsync } from 'phecda-core'\nimport Debug from 'debug'\nimport pc from 'picocolors'\nimport type { Construct, Emitter, P } from './types'\nimport { Meta } from './meta'\nimport { log } from './utils'\nimport { IS_DEV, UNMOUNT_SYMBOL } from './common'\nimport { generateHTTPCode, generateRPCCode } from './compiler'\nexport function Injectable() {\n return (target: any) => Empty(target)\n}\nconst debug = Debug('phecda-server')\n// TODO: support both emitter types and origin emitter type in future\nexport const emitter: Emitter = new EventEmitter() as any\n\nexport async function Factory(Modules: (new (...args: any) => any)[], opts: {\n\n // HTTP generate code path\n http?: string\n // rpc generate code path\n rpc?: string\n} = {}) {\n const moduleMap = new Map<string, InstanceType<Construct>>()\n const meta: Meta[] = []\n const constructorMap = new Map()\n\n // only work for warn\n const constructorSet = new WeakSet()\n const moduleGraph = new Map<string, Set<string>>()\n const { http, rpc } = opts\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 // work for hmr\n if (!instance[UNMOUNT_SYMBOL])\n instance[UNMOUNT_SYMBOL] = []\n\n instance[UNMOUNT_SYMBOL].push(() => {\n (emitter as any).off(eventName, fn)\n })\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 async function update(Module: Construct) {\n const tag = Module.prototype?.__TAG__ || Module.name\n if (!moduleMap.has(tag))\n return\n debug(`update module \"${tag}\"`)\n\n const instance = moduleMap.get(tag)\n\n if (instance?.[UNMOUNT_SYMBOL]) {\n for (const cb of instance[UNMOUNT_SYMBOL])\n await cb()\n }\n log(`Module ${pc.yellow(`[${tag}]`)} unmount`)\n moduleMap.delete(tag)\n constructorMap.delete(tag)\n for (let i = meta.length - 1; i >= 0; i--) {\n if (meta[i].data.tag === tag)\n meta.splice(i, 1)\n }\n\n const { instance: newModule } = await buildNestModule(Module)\n if (moduleGraph.has(tag)) {\n [...moduleGraph.get(tag)!].forEach((tag) => {\n const module = moduleMap.get(tag)\n for (const key in module) {\n if (module[key] === instance)\n module[key] = newModule\n }\n })\n }\n\n moduleMap.set(tag, newModule)\n }\n async function buildNestModule(Module: Construct) {\n const paramtypes = getParamTypes(Module) as Construct[]\n let instance: InstanceType<Construct>\n const tag = Module.prototype?.__TAG__ || Module.name\n if (moduleMap.has(tag)) {\n instance = moduleMap.get(tag)\n if (!instance)\n throw new Error(`exist Circular-Dependency or Multiple modules with the same name/tag [tag] ${tag}--[module] ${Module}`)\n\n if (constructorMap.get(tag) !== Module && !constructorSet.has(Module)) {\n constructorSet.add(Module)// a module will only warn once\n log(`Synonym module: Module taged \"${tag}\" has been loaded before, so phecda-server won't load Module \"${Module.name}\"`, 'warn')\n }\n return { instance, tag }\n }\n moduleMap.set(tag, undefined)\n if (paramtypes) {\n const paramtypesInstances = [] as any[]\n for (const i in paramtypes) {\n const { instance: sub, tag: subTag } = await buildNestModule(paramtypes[i])\n paramtypesInstances[i] = sub\n if (!moduleGraph.has(subTag))\n moduleGraph.set(subTag, new Set())\n moduleGraph.get(subTag)!.add(tag)\n }\n instance = new Module(...paramtypesInstances)\n }\n else {\n instance = new Module()\n }\n meta.push(...getMetaFromInstance(instance, tag, Module.name))\n await registerAsync(instance)\n moduleMap.set(tag, instance)\n log(`Module ${pc.yellow(`[${tag}]`)} mount\"`)\n constructorMap.set(tag, Module)\n return { instance, tag }\n }\n\n for (const Module of Modules)\n await buildNestModule(Module)\n\n function writeCode() {\n debug('write code')\n\n http && fs.promises.writeFile(http, generateHTTPCode(meta.map(item => item.data)))\n rpc && fs.promises.writeFile(rpc, generateRPCCode(meta.map(item => item.data)))\n }\n\n writeCode()\n if (IS_DEV) {\n // @ts-expect-error globalThis\n globalThis.__PS_HMR__ = async (file: string) => {\n debug(`reload file ${file}`)\n const module = await import(file)\n for (const i in module) {\n if (isPhecda(module[i]))\n await update(module[i])\n }\n }\n // @ts-expect-error globalThis\n globalThis.__PS_WRITEMETA__ = writeCode\n }\n\n return {\n moduleMap,\n meta,\n constructorMap,\n update,\n }\n}\n\nfunction getMetaFromInstance(instance: Phecda, tag: string, name: string) {\n const vars = getExposeKey(instance).filter(item => item !== '__CLASS')\n const baseState = (getState(instance, '__CLASS') || {}) as P.Meta\n initState(baseState)\n\n return vars.map((i) => {\n const meta = {} as P.Meta\n const state = (getState(instance, i) || {}) as P.Meta\n initState(state)\n if (state.http) {\n meta.http = {\n route: (baseState.http?.route || '') + (state.http.route),\n type: state.http.type,\n }\n }\n if (baseState.rpc)\n meta.rpc = baseState.rpc\n if (state.rpc) {\n meta.rpc = {\n ...meta.rpc,\n ...state.rpc,\n }\n }\n\n meta.name = name\n meta.tag = tag\n meta.method = i as string\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\n meta.params = params\n meta.define = { ...baseState.define, ...state.define }\n meta.header = { ...baseState.header, ...state.header }\n meta.plugins = [...new Set([...baseState.plugins, ...state.plugins])]\n meta.guards = [...new Set([...baseState.guards, ...state.guards])]\n meta.interceptors = [...new Set([...baseState.interceptors, ...state.interceptors])]\n\n return new Meta(meta as unknown as P.Meta, getHandler(instance, i), getParamTypes(instance, i as string) || [])\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.define)\n state.define = {}\n if (!state.header)\n state.header = {}\n if (!state.plugins)\n state.plugins = []\n if (!state.guards)\n state.guards = []\n if (!state.interceptors)\n state.interceptors = []\n}\n"],"mappings":"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","names":["Meta","data","handlers","paramsType","constructor","Compiler","classMap","constructor","getContent","content","name","Object","values","reduce","p","c","addMethod","args","rpc","method","tag","type","isEvent","generateRPCCode","meta","compiler","i","Compiler","classMap","constructor","getContent","content","name","Object","values","reduce","p","c","addMethod","args","http","method","params","tag","url","route","replace","_","js","type","i","key","generateHTTPCode","meta","compiler","fs","EventEmitter","Empty","getExposeKey","getHandler","getState","injectProperty","isPhecda","registerAsync","Debug","pc","Injectable","target","Empty","debug","Debug","emitter","EventEmitter","Factory","Modules","opts","moduleMap","Map","meta","constructorMap","constructorSet","WeakSet","moduleGraph","http","rpc","injectProperty","eventName","instance","key","options","fn","bind","v","UNMOUNT_SYMBOL","push","off","once","on","update","Module","tag","prototype","__TAG__","name","has","get","cb","log","pc","yellow","delete","i","length","data","splice","newModule","buildNestModule","forEach","module","set","paramtypes","getParamTypes","Error","add","undefined","paramtypesInstances","sub","subTag","Set","getMetaFromInstance","registerAsync","writeCode","fs","promises","writeFile","generateHTTPCode","map","item","generateRPCCode","IS_DEV","globalThis","__PS_HMR__","file","isPhecda","__PS_WRITEMETA__","vars","getExposeKey","filter","baseState","getState","initState","state","route","type","method","params","unshift","index","define","header","plugins","guards","interceptors","Meta","getHandler","Reflect","getMetadata"]}