phecda-server 5.1.0 → 5.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.
Files changed (153) hide show
  1. package/README.md +10 -10
  2. package/bin/cli.mjs +189 -189
  3. package/bin/schema.json +55 -55
  4. package/dist/{chunk-OTHER3YM.mjs → chunk-2HKQPZDT.mjs} +1 -2
  5. package/dist/{chunk-GHOKWS5V.js → chunk-3BV2GRS7.js} +38 -39
  6. package/dist/{chunk-BZP6GKM6.mjs → chunk-665MB62T.mjs} +1 -2
  7. package/dist/{chunk-QG4X6H5Y.js → chunk-FSBD5R22.js} +65 -66
  8. package/dist/{chunk-423JPSEB.js → chunk-HMPTPTFL.js} +17 -18
  9. package/dist/{chunk-6MQP6OHU.mjs → chunk-UU6RHGRF.mjs} +2 -3
  10. package/dist/{chunk-4YVAW3L4.mjs → chunk-VLV3AO3H.mjs} +0 -1
  11. package/dist/{chunk-Z4YJHEXT.js → chunk-ZP7HNASU.js} +0 -1
  12. package/dist/index.js +39 -40
  13. package/dist/index.mjs +4 -5
  14. package/dist/rpc/bullmq/index.js +12 -13
  15. package/dist/rpc/bullmq/index.mjs +2 -3
  16. package/dist/rpc/kafka/index.js +10 -11
  17. package/dist/rpc/kafka/index.mjs +2 -3
  18. package/dist/rpc/nats/index.js +11 -12
  19. package/dist/rpc/nats/index.mjs +2 -3
  20. package/dist/rpc/rabbitmq/index.js +13 -14
  21. package/dist/rpc/rabbitmq/index.mjs +2 -3
  22. package/dist/rpc/redis/index.js +11 -12
  23. package/dist/rpc/redis/index.mjs +2 -3
  24. package/dist/server/elysia/index.js +20 -21
  25. package/dist/server/elysia/index.mjs +3 -4
  26. package/dist/server/express/index.js +18 -19
  27. package/dist/server/express/index.mjs +2 -3
  28. package/dist/server/fastify/index.js +19 -20
  29. package/dist/server/fastify/index.mjs +3 -4
  30. package/dist/server/h3/index.js +16 -17
  31. package/dist/server/h3/index.mjs +2 -3
  32. package/dist/server/hono/index.js +17 -18
  33. package/dist/server/hono/index.mjs +2 -3
  34. package/dist/server/hyper-express/index.js +17 -18
  35. package/dist/server/hyper-express/index.mjs +2 -3
  36. package/dist/server/koa/index.js +18 -19
  37. package/dist/server/koa/index.mjs +2 -3
  38. package/dist/test.js +6 -7
  39. package/dist/test.mjs +2 -3
  40. package/package.json +2 -2
  41. package/register/index.mjs +40 -40
  42. package/register/loader.mjs +354 -341
  43. package/register/utils.mjs +81 -81
  44. package/dist/chunk-423JPSEB.js.map +0 -1
  45. package/dist/chunk-4R55T3HG.js +0 -253
  46. package/dist/chunk-4R55T3HG.js.map +0 -1
  47. package/dist/chunk-4YVAW3L4.mjs.map +0 -1
  48. package/dist/chunk-5DOVDDO7.mjs +0 -295
  49. package/dist/chunk-5DOVDDO7.mjs.map +0 -1
  50. package/dist/chunk-5WQ2SMIK.js +0 -295
  51. package/dist/chunk-5WQ2SMIK.js.map +0 -1
  52. package/dist/chunk-6MQP6OHU.mjs.map +0 -1
  53. package/dist/chunk-6Q2PCC3A.mjs +0 -295
  54. package/dist/chunk-6Q2PCC3A.mjs.map +0 -1
  55. package/dist/chunk-6UQYEBAN.js +0 -253
  56. package/dist/chunk-6UQYEBAN.js.map +0 -1
  57. package/dist/chunk-6W7CGOZC.mjs +0 -565
  58. package/dist/chunk-6W7CGOZC.mjs.map +0 -1
  59. package/dist/chunk-7Y37NSBM.js +0 -88
  60. package/dist/chunk-7Y37NSBM.js.map +0 -1
  61. package/dist/chunk-BQBSVGMG.mjs +0 -253
  62. package/dist/chunk-BQBSVGMG.mjs.map +0 -1
  63. package/dist/chunk-BZP6GKM6.mjs.map +0 -1
  64. package/dist/chunk-C5JAHCS2.mjs +0 -88
  65. package/dist/chunk-C5JAHCS2.mjs.map +0 -1
  66. package/dist/chunk-DTBKDALR.mjs +0 -295
  67. package/dist/chunk-DTBKDALR.mjs.map +0 -1
  68. package/dist/chunk-GHOKWS5V.js.map +0 -1
  69. package/dist/chunk-H4N6SHNG.mjs +0 -76
  70. package/dist/chunk-H4N6SHNG.mjs.map +0 -1
  71. package/dist/chunk-ICYHM4UM.js +0 -565
  72. package/dist/chunk-ICYHM4UM.js.map +0 -1
  73. package/dist/chunk-LOLXPM4J.mjs +0 -529
  74. package/dist/chunk-LOLXPM4J.mjs.map +0 -1
  75. package/dist/chunk-MSS6A2TU.js +0 -585
  76. package/dist/chunk-MSS6A2TU.js.map +0 -1
  77. package/dist/chunk-NEM3FY7C.mjs +0 -537
  78. package/dist/chunk-NEM3FY7C.mjs.map +0 -1
  79. package/dist/chunk-OTHER3YM.mjs.map +0 -1
  80. package/dist/chunk-Q2FYFIEY.js +0 -295
  81. package/dist/chunk-Q2FYFIEY.js.map +0 -1
  82. package/dist/chunk-QG4X6H5Y.js.map +0 -1
  83. package/dist/chunk-QIEZ6YTG.mjs +0 -295
  84. package/dist/chunk-QIEZ6YTG.mjs.map +0 -1
  85. package/dist/chunk-QOAKHCM7.js +0 -295
  86. package/dist/chunk-QOAKHCM7.js.map +0 -1
  87. package/dist/chunk-QVUD6L5X.js +0 -565
  88. package/dist/chunk-QVUD6L5X.js.map +0 -1
  89. package/dist/chunk-RGLTGKAU.js +0 -537
  90. package/dist/chunk-RGLTGKAU.js.map +0 -1
  91. package/dist/chunk-SHRK3TVB.js +0 -295
  92. package/dist/chunk-SHRK3TVB.js.map +0 -1
  93. package/dist/chunk-TCH6S42Z.js +0 -529
  94. package/dist/chunk-TCH6S42Z.js.map +0 -1
  95. package/dist/chunk-UCGRFVHC.mjs +0 -253
  96. package/dist/chunk-UCGRFVHC.mjs.map +0 -1
  97. package/dist/chunk-VOISXWVF.mjs +0 -295
  98. package/dist/chunk-VOISXWVF.mjs.map +0 -1
  99. package/dist/chunk-W6BC5INO.mjs +0 -295
  100. package/dist/chunk-W6BC5INO.mjs.map +0 -1
  101. package/dist/chunk-X5WQRO4R.js +0 -295
  102. package/dist/chunk-X5WQRO4R.js.map +0 -1
  103. package/dist/chunk-XDMCVVD3.mjs +0 -585
  104. package/dist/chunk-XDMCVVD3.mjs.map +0 -1
  105. package/dist/chunk-XNTMYLK6.js +0 -76
  106. package/dist/chunk-XNTMYLK6.js.map +0 -1
  107. package/dist/chunk-Y6LI4FDO.js +0 -537
  108. package/dist/chunk-Y6LI4FDO.js.map +0 -1
  109. package/dist/chunk-YZ2AQ6IL.mjs +0 -537
  110. package/dist/chunk-YZ2AQ6IL.mjs.map +0 -1
  111. package/dist/chunk-Z4YJHEXT.js.map +0 -1
  112. package/dist/chunk-ZE336SKZ.js +0 -295
  113. package/dist/chunk-ZE336SKZ.js.map +0 -1
  114. package/dist/chunk-ZJD235TO.mjs +0 -565
  115. package/dist/chunk-ZJD235TO.mjs.map +0 -1
  116. package/dist/core-930ea883.d.ts +0 -131
  117. package/dist/core-eb646fe5.d.ts +0 -139
  118. package/dist/core-fd134ffa.d.ts +0 -130
  119. package/dist/helper-06d25b37.d.ts +0 -19
  120. package/dist/helper-48454c0b.d.ts +0 -20
  121. package/dist/helper-73e8d2f0.d.ts +0 -18
  122. package/dist/helper-867a598d.d.ts +0 -18
  123. package/dist/helper-88b19c66.d.ts +0 -12
  124. package/dist/helper-9e206c66.d.ts +0 -12
  125. package/dist/helper-f29f082f.d.ts +0 -19
  126. package/dist/index.js.map +0 -1
  127. package/dist/index.mjs.map +0 -1
  128. package/dist/rpc/bullmq/index.js.map +0 -1
  129. package/dist/rpc/bullmq/index.mjs.map +0 -1
  130. package/dist/rpc/kafka/index.js.map +0 -1
  131. package/dist/rpc/kafka/index.mjs.map +0 -1
  132. package/dist/rpc/nats/index.js.map +0 -1
  133. package/dist/rpc/nats/index.mjs.map +0 -1
  134. package/dist/rpc/rabbitmq/index.js.map +0 -1
  135. package/dist/rpc/rabbitmq/index.mjs.map +0 -1
  136. package/dist/rpc/redis/index.js.map +0 -1
  137. package/dist/rpc/redis/index.mjs.map +0 -1
  138. package/dist/server/elysia/index.js.map +0 -1
  139. package/dist/server/elysia/index.mjs.map +0 -1
  140. package/dist/server/express/index.js.map +0 -1
  141. package/dist/server/express/index.mjs.map +0 -1
  142. package/dist/server/fastify/index.js.map +0 -1
  143. package/dist/server/fastify/index.mjs.map +0 -1
  144. package/dist/server/h3/index.js.map +0 -1
  145. package/dist/server/h3/index.mjs.map +0 -1
  146. package/dist/server/hono/index.js.map +0 -1
  147. package/dist/server/hono/index.mjs.map +0 -1
  148. package/dist/server/hyper-express/index.js.map +0 -1
  149. package/dist/server/hyper-express/index.mjs.map +0 -1
  150. package/dist/server/koa/index.js.map +0 -1
  151. package/dist/server/koa/index.mjs.map +0 -1
  152. package/dist/test.js.map +0 -1
  153. package/dist/test.mjs.map +0 -1
@@ -1,537 +0,0 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 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; } var _class;
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
- var _chunk7Y37NSBMjs = require('./chunk-7Y37NSBM.js');
10
-
11
- // src/exception/base.ts
12
- var Exception = class extends Error {
13
-
14
-
15
-
16
- constructor(message, status = 0, description = "Exception") {
17
- super(message);
18
- this.message = message;
19
- this.status = status;
20
- this.description = description;
21
- }
22
- get data() {
23
- return {
24
- message: this.message,
25
- description: this.description,
26
- status: this.status,
27
- [_chunk7Y37NSBMjs.ERROR_SYMBOL]: true
28
- };
29
- }
30
- };
31
- _chunk7Y37NSBMjs.__name.call(void 0, Exception, "Exception");
32
-
33
- // src/exception/validate.ts
34
- var ValidateException = class extends Exception {
35
- constructor(message) {
36
- super(message, 400, "Validate exception");
37
- }
38
- };
39
- _chunk7Y37NSBMjs.__name.call(void 0, ValidateException, "ValidateException");
40
-
41
- // src/pipe.ts
42
- var _phecdacore = require('phecda-core');
43
- var defaultPipe = /* @__PURE__ */ _chunk7Y37NSBMjs.__name.call(void 0, ({ arg, reflect, index }) => {
44
- if (_phecdacore.isPhecda.call(void 0, reflect)) {
45
- const instance = _phecdacore.plainToClass.call(void 0, reflect, arg);
46
- const err = _phecdacore.transformInstance.call(void 0, instance);
47
- if (err.length > 0)
48
- throw new ValidateException(err[0]);
49
- arg = instance;
50
- } else {
51
- if (arg === void 0 && !reflect)
52
- return void 0;
53
- if ([
54
- Number,
55
- Boolean
56
- ].includes(reflect)) {
57
- arg = reflect(arg);
58
- if (reflect === Number && Object.is(arg, NaN))
59
- throw new ValidateException(`parameter ${Number(index) + 1} should be a number`);
60
- }
61
- }
62
- return arg;
63
- }, "defaultPipe");
64
-
65
- // src/exception/undefine.ts
66
- var UndefinedException = class extends Exception {
67
- constructor(message) {
68
- super(message, 500, "Undefined error");
69
- }
70
- };
71
- _chunk7Y37NSBMjs.__name.call(void 0, UndefinedException, "UndefinedException");
72
-
73
- // src/exception/forbidden.ts
74
- var ForbiddenException = class extends Exception {
75
- constructor(message) {
76
- super(message, 403, "Forbidden resource");
77
- }
78
- };
79
- _chunk7Y37NSBMjs.__name.call(void 0, ForbiddenException, "ForbiddenException");
80
-
81
- // src/exception/bad-request.ts
82
- var BadRequestException = class extends Exception {
83
- constructor(message) {
84
- super(message, 400, "Bad Request");
85
- }
86
- };
87
- _chunk7Y37NSBMjs.__name.call(void 0, BadRequestException, "BadRequestException");
88
-
89
- // src/exception/not-found.ts
90
- var NotFoundException = class extends Exception {
91
- constructor(message) {
92
- super(message, 404, "Not Found");
93
- }
94
- };
95
- _chunk7Y37NSBMjs.__name.call(void 0, NotFoundException, "NotFoundException");
96
-
97
- // src/exception/conflict.ts
98
- var ConflictException = class extends Exception {
99
- constructor(message) {
100
- super(message, 409, "Conflict");
101
- }
102
- };
103
- _chunk7Y37NSBMjs.__name.call(void 0, ConflictException, "ConflictException");
104
-
105
- // src/exception/bad-gateway.ts
106
- var BadGatewayException = class extends Exception {
107
- constructor(message) {
108
- super(message, 502, "Bad Gatrway");
109
- }
110
- };
111
- _chunk7Y37NSBMjs.__name.call(void 0, BadGatewayException, "BadGatewayException");
112
-
113
- // src/exception/invalid-input.ts
114
- var InvalidInputException = class extends Exception {
115
- constructor(message) {
116
- super(message, 502, "Invalid Input");
117
- }
118
- };
119
- _chunk7Y37NSBMjs.__name.call(void 0, InvalidInputException, "InvalidInputException");
120
-
121
- // src/exception/media-type.ts
122
- var UnsupportedMediaTypeException = class extends Exception {
123
- constructor(message) {
124
- super(message, 415, "Unsupported Media Type");
125
- }
126
- };
127
- _chunk7Y37NSBMjs.__name.call(void 0, UnsupportedMediaTypeException, "UnsupportedMediaTypeException");
128
-
129
- // src/exception/payload-large.ts
130
- var PayloadLargeException = class extends Exception {
131
- constructor(message) {
132
- super(message, 413, "Payload Too Large");
133
- }
134
- };
135
- _chunk7Y37NSBMjs.__name.call(void 0, PayloadLargeException, "PayloadLargeException");
136
-
137
- // src/exception/timeout.ts
138
- var TimeoutException = class extends Exception {
139
- constructor(message) {
140
- super(message, 408, "Request Timeout");
141
- }
142
- };
143
- _chunk7Y37NSBMjs.__name.call(void 0, TimeoutException, "TimeoutException");
144
-
145
- // src/exception/unauthorized.ts
146
- var UnauthorizedException = class extends Exception {
147
- constructor(message) {
148
- super(message, 401, "Unauthorized");
149
- }
150
- };
151
- _chunk7Y37NSBMjs.__name.call(void 0, UnauthorizedException, "UnauthorizedException");
152
-
153
- // src/exception/unavailable-service.ts
154
- var ServiceUnavailableException = class extends Exception {
155
- constructor(message) {
156
- super(message, 503, "Service Unavailable");
157
- }
158
- };
159
- _chunk7Y37NSBMjs.__name.call(void 0, ServiceUnavailableException, "ServiceUnavailableException");
160
-
161
- // src/exception/framework.ts
162
- var FrameworkException = class extends Exception {
163
- constructor(message) {
164
- super(`[phecda-server] ${message}`, 500, "Framework Error");
165
- }
166
- };
167
- _chunk7Y37NSBMjs.__name.call(void 0, FrameworkException, "FrameworkException");
168
-
169
- // src/exception/timer.ts
170
- var TimerException = class extends Exception {
171
- constructor(message) {
172
- super(message, 0, "Timer Error");
173
- }
174
- };
175
- _chunk7Y37NSBMjs.__name.call(void 0, TimerException, "TimerException");
176
-
177
- // src/exception/worker.ts
178
- var WorkerException = class extends Exception {
179
- constructor(message) {
180
- super(message, 0, "Worker Error");
181
- }
182
- };
183
- _chunk7Y37NSBMjs.__name.call(void 0, WorkerException, "WorkerException");
184
-
185
- // src/hmr.ts
186
- function HMR(cb) {
187
- if (_chunk7Y37NSBMjs.IS_HMR)
188
- _optionalChain([globalThis, 'access', _ => _.__PS_HMR__, 'optionalAccess', _2 => _2.push, 'call', _3 => _3(cb)]);
189
- }
190
- _chunk7Y37NSBMjs.__name.call(void 0, HMR, "HMR");
191
-
192
- // src/server/helper.ts
193
- function resolveDep(ret, key) {
194
- if (key)
195
- return _optionalChain([ret, 'optionalAccess', _4 => _4[key]]);
196
- return ret;
197
- }
198
- _chunk7Y37NSBMjs.__name.call(void 0, resolveDep, "resolveDep");
199
- function argToReq(params, args, headers) {
200
- const req = {
201
- body: {},
202
- query: {},
203
- params: {},
204
- headers
205
- };
206
- params.forEach((param) => {
207
- if (param.key)
208
- req[param.type][param.key] = args[param.index];
209
- else
210
- req[param.type] = args[param.index];
211
- });
212
- return req;
213
- }
214
- _chunk7Y37NSBMjs.__name.call(void 0, argToReq, "argToReq");
215
-
216
- // src/rpc/helper.ts
217
- var _os = require('os');
218
- function genClientQueue(key) {
219
- return `PS-${key ? `${key}-` : ""}${_os.hostname.call(void 0, )}-${process.pid}`;
220
- }
221
- _chunk7Y37NSBMjs.__name.call(void 0, genClientQueue, "genClientQueue");
222
-
223
- // src/decorators/helper.ts
224
- function shallowClone(obj) {
225
- return {
226
- ...obj
227
- };
228
- }
229
- _chunk7Y37NSBMjs.__name.call(void 0, shallowClone, "shallowClone");
230
- function mergeObject(...args) {
231
- return Object.assign({}, ...args);
232
- }
233
- _chunk7Y37NSBMjs.__name.call(void 0, mergeObject, "mergeObject");
234
- function mergeArray(...args) {
235
- return args.filter((item) => !!item).flat();
236
- }
237
- _chunk7Y37NSBMjs.__name.call(void 0, mergeArray, "mergeArray");
238
-
239
- // src/context.ts
240
- var _picocolors = require('picocolors'); var _picocolors2 = _interopRequireDefault(_picocolors);
241
- var _debug = require('debug'); var _debug2 = _interopRequireDefault(_debug);
242
-
243
- // src/filter.ts
244
- var defaultFilter = /* @__PURE__ */ _chunk7Y37NSBMjs.__name.call(void 0, (e) => {
245
- if (!(e instanceof Exception)) {
246
- _chunk7Y37NSBMjs.log.call(void 0, e.message, "error");
247
- if (_chunk7Y37NSBMjs.LOG_LEVEL <= 0)
248
- console.error(e.stack);
249
- e = new UndefinedException(e.message || e);
250
- } else {
251
- _chunk7Y37NSBMjs.log.call(void 0, `[${e.constructor.name}] ${e.message}`, "error");
252
- if (_chunk7Y37NSBMjs.LOG_LEVEL <= 0)
253
- console.error(e.stack);
254
- }
255
- return e.data;
256
- }, "defaultFilter");
257
-
258
- // src/history.ts
259
- var Histroy = (_class = class {constructor() { _class.prototype.__init.call(this);_class.prototype.__init2.call(this); }
260
- __init() {this.guard = []}
261
- __init2() {this.interceptor = []}
262
- record(name, type) {
263
- if (!this[type].includes(name)) {
264
- this[type].push(name);
265
- return true;
266
- }
267
- return false;
268
- }
269
- }, _class);
270
- _chunk7Y37NSBMjs.__name.call(void 0, Histroy, "Histroy");
271
-
272
- // src/context.ts
273
- var debug = _debug2.default.call(void 0, "phecda-server(Context)");
274
- var _Context = class {
275
-
276
-
277
-
278
-
279
-
280
- constructor(data) {
281
- this.data = data;
282
- this.history = new Histroy();
283
- if (_chunk7Y37NSBMjs.IS_HMR)
284
- data._context = this;
285
- }
286
- async run(opts, successCb, failCb) {
287
- const { meta, moduleMap } = this.data;
288
- const { globalGuards = [], globalFilter, globalInterceptors = [], globalPipe } = opts;
289
- const { paramsType, data: { guards, interceptors, params, tag, func, ctx, filter } } = meta;
290
- try {
291
- await this.useGuard([
292
- ...globalGuards,
293
- ...guards
294
- ]);
295
- const i1 = await this.useInterceptor([
296
- ...globalInterceptors,
297
- ...interceptors
298
- ]);
299
- if (i1 !== void 0)
300
- return successCb(i1);
301
- const args = await this.usePipe(params.map((param) => {
302
- return {
303
- arg: resolveDep(this.data[param.type], param.key),
304
- reflect: paramsType[param.index],
305
- ...param,
306
- pipe: param.pipe || globalPipe
307
- };
308
- }));
309
- const instance = moduleMap.get(tag);
310
- if (ctx)
311
- instance[ctx] = this.data;
312
- const returnData = await instance[func](...args);
313
- const i2 = await this.usePostInterceptor(returnData);
314
- if (i2 !== void 0)
315
- return successCb(i2);
316
- return successCb(returnData);
317
- } catch (e) {
318
- const err = await this.useFilter(e, filter || globalFilter);
319
- return failCb(err);
320
- }
321
- }
322
- usePipe(args) {
323
- return Promise.all(args.map((item) => {
324
- if (item.pipe && !_Context.pipeRecord[item.pipe]) {
325
- if (_chunk7Y37NSBMjs.IS_STRICT) {
326
- throw new FrameworkException(`can't find pipe named '${item.pipe}'`);
327
- } else {
328
- debug(`Can't find pipe named "${item.pipe}" when handling the ${item.index + 1}th argument of the func "${this.data.func}" on module "${this.data.tag}",use default pipe instead`);
329
- return _Context.pipeRecord.default(item, this.data);
330
- }
331
- }
332
- return _Context.pipeRecord[item.pipe || "default"](item, this.data);
333
- }));
334
- }
335
- useFilter(arg, filter = "default") {
336
- if (!_Context.filterRecord[filter]) {
337
- if (_chunk7Y37NSBMjs.IS_STRICT) {
338
- throw new FrameworkException(`can't find filter named "${filter}"`);
339
- } else {
340
- debug(`Can't find filter named "${filter}" when handling func "${this.data.func}" on module "${this.data.tag}",use default filter instead`);
341
- return _Context.filterRecord.default(arg, this.data);
342
- }
343
- }
344
- return _Context.filterRecord[filter](arg, this.data);
345
- }
346
- async useGuard(guards) {
347
- for (const guard of guards) {
348
- if (this.history.record(guard, "guard")) {
349
- if (!(guard in _Context.guardRecord)) {
350
- if (_chunk7Y37NSBMjs.IS_STRICT)
351
- throw new FrameworkException(`Can't find guard named "${guard}"`);
352
- else
353
- debug(`Can't find guard named "${guard}" when handling func "${this.data.func}" on module "${this.data.tag}",skip it`);
354
- continue;
355
- }
356
- if (!await _Context.guardRecord[guard](this.data))
357
- throw new ForbiddenException(`Guard exception--[${guard}]`);
358
- }
359
- }
360
- }
361
- async usePostInterceptor(data) {
362
- for (const cb of this.postInterceptors) {
363
- const ret = await cb(data);
364
- if (ret !== void 0)
365
- return ret;
366
- }
367
- }
368
- async useInterceptor(interceptors) {
369
- const cb = [];
370
- for (const interceptor of interceptors) {
371
- if (this.history.record(interceptor, "interceptor")) {
372
- if (!(interceptor in _Context.interceptorRecord)) {
373
- if (_chunk7Y37NSBMjs.IS_STRICT)
374
- throw new FrameworkException(`can't find interceptor named "${interceptor}"`);
375
- else
376
- debug(`Can't find interceptor named "${interceptor}" when handling func "${this.data.func}" on module "${this.data.tag}",skip it`);
377
- continue;
378
- }
379
- const interceptRet = await _Context.interceptorRecord[interceptor](this.data);
380
- if (interceptRet !== void 0) {
381
- if (typeof interceptRet === "function")
382
- cb.push(interceptRet);
383
- else
384
- return interceptRet;
385
- }
386
- }
387
- }
388
- this.postInterceptors = cb;
389
- }
390
- static usePlugin(plugins) {
391
- const ret = [];
392
- for (const m of plugins) {
393
- if (!(m in _Context.pluginRecord)) {
394
- if (_chunk7Y37NSBMjs.IS_STRICT)
395
- throw new FrameworkException(`can't find middleware named '${m}'`);
396
- continue;
397
- }
398
- ret.push(_Context.pluginRecord[m]);
399
- }
400
- return ret;
401
- }
402
- };
403
- var Context = _Context;
404
- _chunk7Y37NSBMjs.__name.call(void 0, Context, "Context");
405
- _chunk7Y37NSBMjs.__publicField.call(void 0, Context, "filterRecord", {
406
- default: defaultFilter
407
- });
408
- _chunk7Y37NSBMjs.__publicField.call(void 0, Context, "pipeRecord", {
409
- default: defaultPipe
410
- });
411
- _chunk7Y37NSBMjs.__publicField.call(void 0, Context, "guardRecord", {});
412
- _chunk7Y37NSBMjs.__publicField.call(void 0, Context, "interceptorRecord", {});
413
- _chunk7Y37NSBMjs.__publicField.call(void 0, Context, "pluginRecord", {});
414
- function addPlugin(key, handler) {
415
- if (Context.pluginRecord[key] && Context.pluginRecord[key] !== handler)
416
- _chunk7Y37NSBMjs.log.call(void 0, `overwrite Plugin "${String(key)}"`, "warn");
417
- Context.pluginRecord[key] = handler;
418
- }
419
- _chunk7Y37NSBMjs.__name.call(void 0, addPlugin, "addPlugin");
420
- function addPipe(key, handler) {
421
- if (Context.pipeRecord[key] && Context.pipeRecord[key] !== handler)
422
- _chunk7Y37NSBMjs.log.call(void 0, `overwrite Pipe "${String(key)}"`, "warn");
423
- Context.pipeRecord[key] = handler;
424
- }
425
- _chunk7Y37NSBMjs.__name.call(void 0, addPipe, "addPipe");
426
- function addFilter(key, handler) {
427
- if (Context.filterRecord[key] && Context.filterRecord[key] !== handler)
428
- _chunk7Y37NSBMjs.log.call(void 0, `overwrite Filter "${String(key)}"`, "warn");
429
- Context.filterRecord[key] = handler;
430
- }
431
- _chunk7Y37NSBMjs.__name.call(void 0, addFilter, "addFilter");
432
- function addGuard(key, handler) {
433
- if (Context.guardRecord[key] && Context.guardRecord[key] !== handler)
434
- _chunk7Y37NSBMjs.log.call(void 0, `overwrite Guard "${String(key)}"`, "warn");
435
- Context.guardRecord[key] = handler;
436
- }
437
- _chunk7Y37NSBMjs.__name.call(void 0, addGuard, "addGuard");
438
- function addInterceptor(key, handler) {
439
- if (Context.interceptorRecord[key] && Context.interceptorRecord[key] !== handler)
440
- _chunk7Y37NSBMjs.log.call(void 0, `overwrite Interceptor "${String(key)}"`, "warn");
441
- Context.interceptorRecord[key] = handler;
442
- }
443
- _chunk7Y37NSBMjs.__name.call(void 0, addInterceptor, "addInterceptor");
444
- function detectAopDep(meta, { guards, interceptors, plugins } = {}, controller = "http") {
445
- const pluginSet = new Set(plugins);
446
- const guardSet = new Set(guards);
447
- const interceptorSet = new Set(interceptors);
448
- const pipeSet = /* @__PURE__ */ new Set();
449
- const filterSet = /* @__PURE__ */ new Set();
450
- const warningSet = /* @__PURE__ */ new Set();
451
- meta.forEach(({ data }) => {
452
- if (data.controller !== controller) {
453
- if (data[controller])
454
- warningSet.add(`Module "${data.tag === data.name ? data.name : `${data.name}(${data.tag})`}" should use ${controller} controller to decorate class or remove ${controller} decorator on method "${data.func}"`);
455
- return;
456
- }
457
- if (data.filter)
458
- filterSet.add(data.filter);
459
- data.interceptors.forEach((i) => interceptorSet.add(i));
460
- data.guards.forEach((i) => guardSet.add(i));
461
- data.plugins.forEach((i) => pluginSet.add(i));
462
- data.params.forEach((i) => {
463
- if (i.pipe)
464
- pipeSet.add(i.pipe);
465
- });
466
- });
467
- const missPlugins = [
468
- ...pluginSet
469
- ].filter((i) => !Context.pluginRecord[i]);
470
- const missGuards = [
471
- ...guardSet
472
- ].filter((i) => !Context.guardRecord[i]);
473
- const missInterceptors = [
474
- ...interceptorSet
475
- ].filter((i) => !Context.interceptorRecord[i]);
476
- const missPipes = [
477
- ...pipeSet
478
- ].filter((i) => !Context.pipeRecord[i]);
479
- const missFilters = [
480
- ...filterSet
481
- ].filter((i) => !Context.filterRecord[i]);
482
- if (missPlugins.length)
483
- _chunk7Y37NSBMjs.log.call(void 0, `${_picocolors2.default.white(`Plugin [${missPlugins.join(",")}]`)} doesn't exist`, "warn");
484
- if (missGuards.length)
485
- _chunk7Y37NSBMjs.log.call(void 0, `${_picocolors2.default.magenta(`Guard [${missGuards.join(",")}]`)} doesn't exist`, "warn");
486
- if (missInterceptors.length)
487
- _chunk7Y37NSBMjs.log.call(void 0, `${_picocolors2.default.cyan(`Interceptor [${missInterceptors.join(",")}]`)} doesn't exist`, "warn");
488
- if (missPipes.length)
489
- _chunk7Y37NSBMjs.log.call(void 0, `${_picocolors2.default.blue(`Pipe [${missPipes.join(",")}]`)} doesn't exist`, "warn");
490
- if (missFilters.length)
491
- _chunk7Y37NSBMjs.log.call(void 0, `${_picocolors2.default.red(`Filter [${missFilters.join(",")}]`)} doesn't exist`, "warn");
492
- warningSet.forEach((warn) => _chunk7Y37NSBMjs.log.call(void 0, warn, "warn"));
493
- return {
494
- missPlugins,
495
- missGuards,
496
- missInterceptors,
497
- missPipes,
498
- missFilters
499
- };
500
- }
501
- _chunk7Y37NSBMjs.__name.call(void 0, detectAopDep, "detectAopDep");
502
-
503
-
504
-
505
-
506
-
507
-
508
-
509
-
510
-
511
-
512
-
513
-
514
-
515
-
516
-
517
-
518
-
519
-
520
-
521
-
522
-
523
-
524
-
525
-
526
-
527
-
528
-
529
-
530
-
531
-
532
-
533
-
534
-
535
-
536
- exports.Exception = Exception; exports.ValidateException = ValidateException; exports.defaultPipe = defaultPipe; exports.UndefinedException = UndefinedException; exports.ForbiddenException = ForbiddenException; exports.BadRequestException = BadRequestException; exports.NotFoundException = NotFoundException; exports.ConflictException = ConflictException; exports.BadGatewayException = BadGatewayException; exports.InvalidInputException = InvalidInputException; exports.UnsupportedMediaTypeException = UnsupportedMediaTypeException; exports.PayloadLargeException = PayloadLargeException; exports.TimeoutException = TimeoutException; exports.UnauthorizedException = UnauthorizedException; exports.ServiceUnavailableException = ServiceUnavailableException; exports.FrameworkException = FrameworkException; exports.TimerException = TimerException; exports.WorkerException = WorkerException; exports.HMR = HMR; exports.resolveDep = resolveDep; exports.argToReq = argToReq; exports.genClientQueue = genClientQueue; exports.shallowClone = shallowClone; exports.mergeObject = mergeObject; exports.mergeArray = mergeArray; exports.Context = Context; exports.addPlugin = addPlugin; exports.addPipe = addPipe; exports.addFilter = addFilter; exports.addGuard = addGuard; exports.addInterceptor = addInterceptor; exports.detectAopDep = detectAopDep;
537
- //# sourceMappingURL=chunk-RGLTGKAU.js.map
@@ -1 +0,0 @@
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/exception/timer.ts","../src/exception/worker.ts","../src/hmr.ts","../src/server/helper.ts","../src/rpc/helper.ts","../src/decorators/helper.ts","../src/context.ts","../src/filter.ts","../src/history.ts"],"names":["Exception","Error","message","status","description","constructor","data","ERROR_SYMBOL","ValidateException","isPhecda","plainToClass","transformInstance","defaultPipe","arg","reflect","index","instance","err","length","undefined","Number","Boolean","includes","Object","is","NaN","UndefinedException","ForbiddenException","BadRequestException","NotFoundException","ConflictException","BadGatewayException","InvalidInputException","UnsupportedMediaTypeException","PayloadLargeException","TimeoutException","UnauthorizedException","ServiceUnavailableException","FrameworkException","TimerException","WorkerException","HMR","cb","IS_HMR","globalThis","__PS_HMR__","push","resolveDep","ret","key","argToReq","params","args","headers","req","body","query","forEach","param","type","hostname","genClientQueue","process","pid","shallowClone","obj","mergeObject","assign","mergeArray","filter","item","flat","pc","Debug","defaultFilter","e","log","LOG_LEVEL","console","error","stack","name","Histroy","guard","interceptor","record","debug","Context","method","history","postInterceptors","_context","run","opts","successCb","failCb","meta","moduleMap","globalGuards","globalFilter","globalInterceptors","globalPipe","paramsType","guards","interceptors","tag","func","ctx","useGuard","i1","useInterceptor","usePipe","map","pipe","get","returnData","i2","usePostInterceptor","useFilter","Promise","all","pipeRecord","IS_STRICT","default","filterRecord","guardRecord","interceptorRecord","interceptRet","usePlugin","plugins","m","pluginRecord","addPlugin","handler","String","addPipe","addFilter","addGuard","addInterceptor","detectAopDep","controller","pluginSet","Set","guardSet","interceptorSet","pipeSet","filterSet","warningSet","add","i","missPlugins","missGuards","missInterceptors","missPipes","missFilters","white","join","magenta","cyan","blue","red","warn"],"mappings":"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","sourcesContent":["import { ERROR_SYMBOL } from '../common'\r\n\r\nexport class Exception extends Error {\r\n constructor(public message: string, public status = 0, public description = 'Exception') {\r\n super(message)\r\n }\r\n\r\n get data() {\r\n return { message: this.message, description: this.description, status: this.status, [ERROR_SYMBOL]: true }\r\n }\r\n}\r\n","import { Exception } from './base'\r\n\r\nexport class ValidateException extends Exception {\r\n constructor(message: string) {\r\n super(message, 400, 'Validate exception')\r\n }\r\n}\r\n","import { isPhecda, plainToClass, transformInstance } from 'phecda-core'\r\nimport { ValidateException } from './exception/validate'\r\n\r\nimport type { PipeType } from './context'\r\n\r\nexport const defaultPipe: PipeType = ({ arg, reflect, index }) => {\r\n if (isPhecda(reflect)) {\r\n const instance = plainToClass(reflect, arg)\r\n const err = transformInstance(instance)\r\n if (err.length > 0)\r\n throw new ValidateException(err[0])\r\n\r\n arg = instance\r\n }\r\n else {\r\n if (arg === undefined && !reflect)\r\n return undefined\r\n\r\n if ([Number, Boolean].includes(reflect)) {\r\n arg = reflect(arg)\r\n\r\n if (reflect === Number && Object.is(arg, NaN))\r\n throw new ValidateException(`parameter ${Number(index) + 1} should be a number`)\r\n }\r\n }\r\n return arg\r\n}\r\n","import { Exception } from './base'\r\n\r\nexport class UndefinedException extends Exception {\r\n constructor(message: string) {\r\n super(message, 500, 'Undefined error')\r\n }\r\n}\r\n","import { Exception } from './base'\r\n\r\nexport class ForbiddenException extends Exception {\r\n constructor(message: string) {\r\n super(message, 403, 'Forbidden resource')\r\n }\r\n}\r\n","import { Exception } from './base'\r\n\r\nexport class BadRequestException extends Exception {\r\n constructor(message: string) {\r\n super(message, 400, 'Bad Request')\r\n }\r\n}\r\n","import { Exception } from './base'\r\n\r\nexport class NotFoundException extends Exception {\r\n constructor(message: string) {\r\n super(message, 404, 'Not Found')\r\n }\r\n}\r\n","import { Exception } from './base'\r\n\r\nexport class ConflictException extends Exception {\r\n constructor(message: string) {\r\n super(message, 409, 'Conflict')\r\n }\r\n}\r\n","import { Exception } from './base'\r\n\r\nexport class BadGatewayException extends Exception {\r\n constructor(message: string) {\r\n super(message, 502, 'Bad Gatrway')\r\n }\r\n}\r\n","import { Exception } from './base'\r\n\r\nexport class InvalidInputException extends Exception {\r\n constructor(message: string) {\r\n super(message, 502, 'Invalid Input')\r\n }\r\n}\r\n","import { Exception } from './base'\r\n\r\nexport class UnsupportedMediaTypeException extends Exception {\r\n constructor(message: string) {\r\n super(message, 415, 'Unsupported Media Type')\r\n }\r\n}\r\n","import { Exception } from './base'\r\n\r\nexport class PayloadLargeException extends Exception {\r\n constructor(message: string) {\r\n super(message, 413, 'Payload Too Large')\r\n }\r\n}\r\n","import { Exception } from './base'\r\n\r\nexport class TimeoutException extends Exception {\r\n constructor(message: string) {\r\n super(message, 408, 'Request Timeout',\r\n )\r\n }\r\n}\r\n","import { Exception } from './base'\r\n\r\nexport class UnauthorizedException extends Exception {\r\n constructor(message: string) {\r\n super(message, 401, 'Unauthorized')\r\n }\r\n}\r\n","import { Exception } from './base'\r\n\r\nexport class ServiceUnavailableException extends Exception {\r\n constructor(message: string) {\r\n super(message, 503, 'Service Unavailable')\r\n }\r\n}\r\n","import { Exception } from './base'\r\n\r\nexport class FrameworkException extends Exception {\r\n constructor(message: string) {\r\n super(`[phecda-server] ${message}`, 500, 'Framework Error')\r\n }\r\n}\r\n","import { Exception } from './base'\r\nexport class TimerException extends Exception {\r\n constructor(message: string) {\r\n super(message, 0, 'Timer Error')\r\n }\r\n}\r\n","import { Exception } from './base'\r\nexport class WorkerException extends Exception {\r\n constructor(message: string) {\r\n super(message, 0, 'Worker Error')\r\n }\r\n}\r\n","import { IS_HMR } from './common'\r\nexport function HMR(cb: (...args: any) => any) {\r\n if (IS_HMR)\r\n globalThis.__PS_HMR__?.push(cb)\r\n}\r\n","import { IncomingHttpHeaders } from 'node:http'\r\nimport { BaseContext, DefaultOptions } from '../types'\r\nimport type { ControllerMetaData } from '../meta'\r\n\r\nexport function resolveDep(ret: any, key: string) {\r\n if (key)\r\n return ret?.[key]\r\n return ret\r\n}\r\n\r\nexport interface HttpOptions extends DefaultOptions {\r\n\r\n /**\r\n * 专用路由的值,默认为/__PHECDA_SERVER__,处理phecda-client发出的合并请求\r\n */\r\n route?: string\r\n\r\n /**\r\n * 专用路由的插件(work for merge request),\r\n */\r\n plugins?: string[]\r\n\r\n}\r\n\r\nexport interface HttpContext extends BaseContext {\r\n parallel?: true\r\n index?: number\r\n query: Record<string, any>\r\n params: Record<string, string>\r\n body: Record<string, any>\r\n headers: IncomingHttpHeaders\r\n // redirect:(url:string)=>void\r\n\r\n}\r\nexport function argToReq(params: ControllerMetaData['params'], args: any[], headers: Record<string, any>) {\r\n const req = {\r\n body: {},\r\n query: {},\r\n params: {},\r\n headers,\r\n } as any\r\n\r\n params.forEach((param) => {\r\n if (param.key)\r\n req[param.type][param.key] = args[param.index]\r\n\r\n else\r\n req[param.type] = args[param.index]\r\n })\r\n\r\n return req\r\n}\r\n","import { hostname } from 'os'\r\nimport { BaseContext, DefaultOptions } from '../types'\r\n\r\nexport function genClientQueue(key?: string) {\r\n return `PS-${key ? `${key}-` : ''}${hostname()}-${process.pid}`\r\n}\r\n\r\nexport interface RpcServerOptions extends DefaultOptions {\r\n\r\n}\r\n\r\nexport interface RpcClientOptions {\r\n // add to clientQueue\r\n key?: string\r\n timeout?: number\r\n max?: number\r\n}\r\nexport interface RpcContext extends BaseContext {\r\n args: any[]\r\n id: string\r\n queue: string\r\n isEvent?: boolean\r\n}\r\n","export function shallowClone(obj: any) {\r\n return { ...obj }\r\n}\r\nexport function mergeObject(...args: any[]) {\r\n return Object.assign({}, ...args)\r\n}\r\nexport function mergeArray(...args: any[]) {\r\n return args.filter(item => !!item).flat()\r\n}\r\n","import pc from 'picocolors'\r\nimport Debug from 'debug'\r\nimport { defaultPipe } from './pipe'\r\nimport { ForbiddenException, FrameworkException } from './exception'\r\nimport { defaultFilter } from './filter'\r\nimport { Histroy } from './history'\r\nimport type { BaseContext, DefaultOptions } from './types'\r\nimport { IS_HMR, IS_STRICT } from './common'\r\nimport type { ControllerMeta, Meta } from './meta'\r\nimport { log } from './utils'\r\nimport type { Exception } from './exception'\r\nimport { resolveDep } from './helper'\r\n\r\nconst debug = Debug('phecda-server(Context)')\r\n\r\nexport interface PipeArg { arg: any; pipe?: string; key: string; type: string; index: number; reflect: any; define: Record<string, any> }\r\nexport type GuardType<C extends BaseContext = any> = ((ctx: C) => Promise<boolean> | boolean)\r\nexport type InterceptorType<C extends BaseContext = any> = (ctx: C) => (any | ((ret: any) => any))\r\nexport type PipeType<C extends BaseContext = any> = (arg: PipeArg, ctx: C) => Promise<any>\r\nexport type FilterType<C extends BaseContext = any, E extends Exception = any> = (err: E | Error, ctx?: C) => Error | any\r\n\r\nexport class Context<Data extends BaseContext> {\r\n method: string\r\n params: string[]\r\n history = new Histroy()\r\n\r\n static filterRecord: Record<PropertyKey, FilterType> = {\r\n default: defaultFilter,\r\n }\r\n\r\n static pipeRecord: Record<PropertyKey, PipeType> = {\r\n default: defaultPipe,\r\n }\r\n\r\n static guardRecord: Record<PropertyKey, GuardType> = {}\r\n static interceptorRecord: Record<PropertyKey, InterceptorType> = {}\r\n\r\n static pluginRecord: Record<PropertyKey, any> = {}\r\n private postInterceptors: Function[]\r\n\r\n constructor(public data: Data) {\r\n if (IS_HMR)\r\n // @ts-expect-error work for debug\r\n data._context = this\r\n }\r\n\r\n public async run<ReturnData = any, ReturnErr = any>(opts: DefaultOptions, successCb: (data: any) => ReturnData, failCb: (err: any) => ReturnErr) {\r\n const { meta, moduleMap } = this.data\r\n const { globalGuards = [], globalFilter, globalInterceptors = [], globalPipe } = opts\r\n const {\r\n paramsType,\r\n data: {\r\n guards, interceptors, params,\r\n tag, func, ctx, filter,\r\n\r\n },\r\n } = meta\r\n\r\n try {\r\n await this.useGuard([...globalGuards, ...guards])\r\n const i1 = await this.useInterceptor([...globalInterceptors, ...interceptors])\r\n if (i1 !== undefined)\r\n return successCb(i1)\r\n\r\n const args = await this.usePipe(params.map((param) => {\r\n return { arg: resolveDep(this.data[param.type], param.key), reflect: paramsType[param.index], ...param, pipe: param.pipe || globalPipe }\r\n }))\r\n const instance = moduleMap.get(tag)!\r\n if (ctx)\r\n instance[ctx] = this.data\r\n const returnData = await instance[func](...args)\r\n const i2 = await this.usePostInterceptor(returnData)\r\n if (i2 !== undefined)\r\n return successCb(i2)\r\n\r\n return successCb(returnData)\r\n }\r\n catch (e) {\r\n const err = await this.useFilter(e, filter || globalFilter)\r\n return failCb(err)\r\n }\r\n }\r\n\r\n private usePipe(args: PipeArg[]) {\r\n return Promise.all(args.map((item) => {\r\n if (item.pipe && !Context.pipeRecord[item.pipe]) {\r\n if (IS_STRICT) {\r\n throw new FrameworkException(`can't find pipe named '${item.pipe}'`)\r\n }\r\n\r\n else {\r\n debug(`Can't find pipe named \"${item.pipe}\" when handling the ${item.index + 1}th argument of the func \"${this.data.func}\" on module \"${this.data.tag}\",use default pipe instead`)\r\n\r\n return Context.pipeRecord.default(item, this.data)\r\n }\r\n }\r\n\r\n return Context.pipeRecord[item.pipe || 'default'](item, this.data)\r\n }))\r\n }\r\n\r\n private useFilter(arg: any, filter = 'default') {\r\n if (!Context.filterRecord[filter]) {\r\n if (IS_STRICT) {\r\n throw new FrameworkException(`can't find filter named \"${filter}\"`)\r\n }\r\n else {\r\n debug(`Can't find filter named \"${filter}\" when handling func \"${this.data.func}\" on module \"${this.data.tag}\",use default filter instead`)\r\n\r\n return Context.filterRecord.default(arg, this.data)\r\n }\r\n }\r\n\r\n return Context.filterRecord[filter](arg, this.data)\r\n }\r\n\r\n private async useGuard(guards: string[]) {\r\n for (const guard of guards) {\r\n if (this.history.record(guard, 'guard')) {\r\n if (!(guard in Context.guardRecord)) {\r\n if (IS_STRICT)\r\n throw new FrameworkException(`Can't find guard named \"${guard}\"`)\r\n else debug(`Can't find guard named \"${guard}\" when handling func \"${this.data.func}\" on module \"${this.data.tag}\",skip it`)\r\n continue\r\n }\r\n if (!await Context.guardRecord[guard](this.data))\r\n throw new ForbiddenException(`Guard exception--[${guard}]`)\r\n }\r\n }\r\n }\r\n\r\n private async usePostInterceptor(data: any) {\r\n for (const cb of this.postInterceptors) {\r\n const ret = await cb(data)\r\n if (ret !== undefined)\r\n return ret\r\n }\r\n }\r\n\r\n private async useInterceptor(interceptors: string[]) {\r\n const cb = []\r\n for (const interceptor of interceptors) {\r\n if (this.history.record(interceptor, 'interceptor')) {\r\n if (!(interceptor in Context.interceptorRecord)) {\r\n if (IS_STRICT)\r\n throw new FrameworkException(`can't find interceptor named \"${interceptor}\"`)\r\n else debug(`Can't find interceptor named \"${interceptor}\" when handling func \"${this.data.func}\" on module \"${this.data.tag}\",skip it`)\r\n\r\n continue\r\n }\r\n const interceptRet = await Context.interceptorRecord[interceptor](this.data)\r\n if (interceptRet !== undefined) {\r\n if (typeof interceptRet === 'function')\r\n cb.push(interceptRet)\r\n\r\n else\r\n return interceptRet\r\n }\r\n }\r\n }\r\n this.postInterceptors = cb\r\n }\r\n\r\n static usePlugin(plugins: string[]) {\r\n const ret = []\r\n for (const m of plugins) {\r\n if (!(m in Context.pluginRecord)) {\r\n if (IS_STRICT)\r\n throw new FrameworkException(`can't find middleware named '${m}'`)\r\n\r\n continue\r\n }\r\n ret.push(Context.pluginRecord[m])\r\n }\r\n return ret as any[]\r\n }\r\n}\r\n\r\nexport function addPlugin<T>(key: PropertyKey, handler: T) {\r\n if (Context.pluginRecord[key] && Context.pluginRecord[key] !== handler)\r\n log(`overwrite Plugin \"${String(key)}\"`, 'warn')\r\n\r\n Context.pluginRecord[key] = handler\r\n}\r\n\r\nexport function addPipe<C extends BaseContext>(key: PropertyKey, handler: PipeType<C>) {\r\n if (Context.pipeRecord[key] && Context.pipeRecord[key] !== handler)\r\n log(`overwrite Pipe \"${String(key)}\"`, 'warn')\r\n Context.pipeRecord[key] = handler\r\n}\r\n\r\nexport function addFilter<C extends BaseContext>(key: PropertyKey, handler: FilterType<C>) {\r\n if (Context.filterRecord[key] && Context.filterRecord[key] !== handler)\r\n log(`overwrite Filter \"${String(key)}\"`, 'warn')\r\n Context.filterRecord[key] = handler\r\n}\r\n\r\nexport function addGuard<C extends BaseContext>(key: PropertyKey, handler: GuardType<C>) {\r\n if (Context.guardRecord[key] && Context.guardRecord[key] !== handler)\r\n log(`overwrite Guard \"${String(key)}\"`, 'warn')\r\n Context.guardRecord[key] = handler\r\n}\r\n\r\nexport function addInterceptor<C extends BaseContext>(key: PropertyKey, handler: InterceptorType<C>) {\r\n if (Context.interceptorRecord[key] && Context.interceptorRecord[key] !== handler)\r\n log(`overwrite Interceptor \"${String(key)}\"`, 'warn')\r\n Context.interceptorRecord[key] = handler\r\n}\r\n\r\n// detect whether plugin/filter/pipe/guard/intercept is injected\r\nexport function detectAopDep(meta: Meta[], { guards, interceptors, plugins }: {\r\n guards?: string[]\r\n interceptors?: string[]\r\n plugins?: string[]\r\n} = {}, controller: string = 'http') {\r\n const pluginSet = new Set<string>(plugins)\r\n\r\n const guardSet = new Set<string>(guards)\r\n const interceptorSet = new Set<string>(interceptors)\r\n const pipeSet = new Set<string>()\r\n const filterSet = new Set<string>()\r\n const warningSet = new Set<string>();\r\n\r\n (meta as ControllerMeta[]).forEach(({ data }) => {\r\n if (data.controller !== controller) {\r\n if (data[controller])\r\n warningSet.add(`Module \"${data.tag === data.name ? data.name : `${data.name}(${data.tag})`}\" should use ${controller} controller to decorate class or remove ${controller} decorator on method \"${data.func}\"`)\r\n\r\n return\r\n }\r\n if (data.filter)\r\n filterSet.add(data.filter)\r\n\r\n data.interceptors.forEach(i => interceptorSet.add(i))\r\n data.guards.forEach(i => guardSet.add(i))\r\n data.plugins.forEach(i => pluginSet.add(i))\r\n data.params.forEach((i) => {\r\n if (i.pipe)\r\n pipeSet.add(i.pipe)\r\n })\r\n })\r\n\r\n const missPlugins = [...pluginSet].filter(i => !Context.pluginRecord[i])\r\n const missGuards = [...guardSet].filter(i => !Context.guardRecord[i])\r\n const missInterceptors = [...interceptorSet].filter(i => !Context.interceptorRecord[i])\r\n const missPipes = [...pipeSet].filter(i => !Context.pipeRecord[i])\r\n const missFilters = [...filterSet].filter(i => !Context.filterRecord[i])\r\n\r\n if (missPlugins.length)\r\n log(`${pc.white(`Plugin [${missPlugins.join(',')}]`)} doesn't exist`, 'warn')\r\n if (missGuards.length)\r\n log(`${pc.magenta(`Guard [${missGuards.join(',')}]`)} doesn't exist`, 'warn')\r\n\r\n if (missInterceptors.length)\r\n log(`${pc.cyan(`Interceptor [${missInterceptors.join(',')}]`)} doesn't exist`, 'warn')\r\n\r\n if (missPipes.length)\r\n log(`${pc.blue(`Pipe [${missPipes.join(',')}]`)} doesn't exist`, 'warn')\r\n\r\n if (missFilters.length)\r\n log(`${pc.red(`Filter [${missFilters.join(',')}]`)} doesn't exist`, 'warn')\r\n\r\n warningSet.forEach(warn => log(warn, 'warn'))\r\n\r\n return {\r\n missPlugins,\r\n missGuards,\r\n missInterceptors,\r\n missPipes,\r\n missFilters,\r\n }\r\n}\r\n","import { LOG_LEVEL } from './common'\r\nimport { Exception, UndefinedException } from './exception'\r\nimport { log } from './utils'\r\nimport type { FilterType } from './context'\r\n\r\nexport const defaultFilter: FilterType = (e) => {\r\n if (!(e instanceof Exception)) {\r\n log(e.message, 'error')\r\n if (LOG_LEVEL <= 0)\r\n console.error(e.stack)\r\n\r\n e = new UndefinedException(e.message || e)\r\n }\r\n else {\r\n log(`[${e.constructor.name}] ${e.message}`, 'error')\r\n if (LOG_LEVEL <= 0)\r\n console.error(e.stack)\r\n }\r\n\r\n return e.data\r\n}\r\n","export class Histroy {\r\n guard: string[] = []\r\n interceptor: string[] = []\r\n record(name: string, type: 'guard' | 'interceptor') {\r\n if (!this[type].includes(name)) {\r\n this[type].push(name)\r\n return true\r\n }\r\n return false\r\n }\r\n}\r\n"]}