phecda-server 3.0.2 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +19 -8
- package/dist/index.js +63 -47
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +63 -47
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -94,6 +94,7 @@ interface ServerMergeCtx {
|
|
|
94
94
|
request: Request;
|
|
95
95
|
response: Response;
|
|
96
96
|
meta: Record<string, Meta>;
|
|
97
|
+
moduleMap: Record<string, any>;
|
|
97
98
|
isMerge: true;
|
|
98
99
|
tags?: string[];
|
|
99
100
|
}
|
|
@@ -101,6 +102,7 @@ interface ServerCtx {
|
|
|
101
102
|
request: Request;
|
|
102
103
|
response: Response;
|
|
103
104
|
meta: Meta;
|
|
105
|
+
moduleMap: Record<string, any>;
|
|
104
106
|
}
|
|
105
107
|
interface BaseError {
|
|
106
108
|
error: true;
|
|
@@ -135,7 +137,7 @@ declare namespace P {
|
|
|
135
137
|
type: string;
|
|
136
138
|
index: number;
|
|
137
139
|
key: string;
|
|
138
|
-
|
|
140
|
+
option?: any;
|
|
139
141
|
}[];
|
|
140
142
|
guards: string[];
|
|
141
143
|
interceptors: string[];
|
|
@@ -147,8 +149,12 @@ declare namespace P {
|
|
|
147
149
|
interface Pipe {
|
|
148
150
|
transform(args: {
|
|
149
151
|
arg: any;
|
|
150
|
-
|
|
151
|
-
|
|
152
|
+
option?: boolean;
|
|
153
|
+
key: string;
|
|
154
|
+
type: string;
|
|
155
|
+
index: number;
|
|
156
|
+
reflect: any;
|
|
157
|
+
}[], tag: string, ctx: ServerCtx | ServerMergeCtx): Promise<any[]>;
|
|
152
158
|
}
|
|
153
159
|
}
|
|
154
160
|
|
|
@@ -188,8 +194,9 @@ declare function parseMeta(meta: Meta): {
|
|
|
188
194
|
handlers: P.Handler[];
|
|
189
195
|
params: {
|
|
190
196
|
type: string;
|
|
197
|
+
index: number;
|
|
191
198
|
key: string;
|
|
192
|
-
|
|
199
|
+
option?: any;
|
|
193
200
|
}[];
|
|
194
201
|
};
|
|
195
202
|
|
|
@@ -200,8 +207,12 @@ declare class ServerContext extends Context<ServerCtx | ServerMergeCtx> {
|
|
|
200
207
|
static useMiddleware(middlewares: string[]): ((...params: any) => any)[];
|
|
201
208
|
usePipe(args: {
|
|
202
209
|
arg: any;
|
|
203
|
-
|
|
204
|
-
|
|
210
|
+
option?: any;
|
|
211
|
+
type: string;
|
|
212
|
+
key: string;
|
|
213
|
+
index: number;
|
|
214
|
+
reflect: any;
|
|
215
|
+
}[], tag: string): Promise<any[]>;
|
|
205
216
|
static useFilter(arg: any, data: ServerCtx | ServerMergeCtx): any;
|
|
206
217
|
useFilter(arg: any): any;
|
|
207
218
|
}
|
|
@@ -210,12 +221,12 @@ declare function useServerPipe(pipe: P.Pipe): void;
|
|
|
210
221
|
declare function useServerFilter(filter: ServerFilter): void;
|
|
211
222
|
|
|
212
223
|
declare const emitter: Emitter;
|
|
224
|
+
declare const constructorMap: Map<any, any>;
|
|
213
225
|
declare function Factory(Modules: (new (...args: any) => any)[]): Promise<{
|
|
214
226
|
moduleMap: Map<string, any>;
|
|
215
227
|
meta: Meta[];
|
|
216
228
|
output: (p?: string) => void;
|
|
217
229
|
}>;
|
|
218
|
-
declare const constructorMap: Map<any, any>;
|
|
219
230
|
|
|
220
231
|
interface Options {
|
|
221
232
|
route?: string;
|
|
@@ -225,7 +236,7 @@ interface Options {
|
|
|
225
236
|
}
|
|
226
237
|
declare function bindApp(app: Express | Router, { meta, moduleMap }: Awaited<ReturnType<typeof Factory>>, options?: Options): void;
|
|
227
238
|
|
|
228
|
-
declare function BaseParam(type: string, key: string,
|
|
239
|
+
declare function BaseParam(type: string, key: string, option?: any): any;
|
|
229
240
|
declare function Body(key?: string, pipeOpts?: any): any;
|
|
230
241
|
declare function Query(key?: string, pipeOpts?: any): any;
|
|
231
242
|
declare function Param(key: string, pipeOpts?: any): any;
|
package/dist/index.js
CHANGED
|
@@ -122,18 +122,18 @@ __name(ValidateException, "ValidateException");
|
|
|
122
122
|
|
|
123
123
|
// src/pipe.ts
|
|
124
124
|
var defaultPipe = {
|
|
125
|
-
async transform(args
|
|
125
|
+
async transform(args) {
|
|
126
126
|
for (const i in args) {
|
|
127
|
-
const {
|
|
128
|
-
if (
|
|
127
|
+
const { option, arg, reflect } = args[i];
|
|
128
|
+
if (option === false)
|
|
129
129
|
continue;
|
|
130
|
-
if (!reflect
|
|
131
|
-
if (
|
|
132
|
-
args[i].arg =
|
|
130
|
+
if (!reflect) {
|
|
131
|
+
if (option && arg)
|
|
132
|
+
args[i].arg = option(arg);
|
|
133
133
|
continue;
|
|
134
134
|
}
|
|
135
|
-
if ((0, import_phecda_core.isPhecda)(reflect
|
|
136
|
-
const ret = await (0, import_phecda_core.plainToClass)(reflect
|
|
135
|
+
if ((0, import_phecda_core.isPhecda)(reflect)) {
|
|
136
|
+
const ret = await (0, import_phecda_core.plainToClass)(reflect, arg, {
|
|
137
137
|
transform: true
|
|
138
138
|
});
|
|
139
139
|
if (ret.err.length > 0)
|
|
@@ -143,9 +143,9 @@ var defaultPipe = {
|
|
|
143
143
|
if ([
|
|
144
144
|
Number,
|
|
145
145
|
Boolean
|
|
146
|
-
].includes(reflect
|
|
147
|
-
args[i].arg = reflect
|
|
148
|
-
if (reflect
|
|
146
|
+
].includes(reflect)) {
|
|
147
|
+
args[i].arg = reflect(arg);
|
|
148
|
+
if (reflect === Number && Object.is(args[i].arg, NaN))
|
|
149
149
|
throw new ValidateException(`parameter ${Number(i) + 1} should be a number`);
|
|
150
150
|
}
|
|
151
151
|
}
|
|
@@ -283,6 +283,16 @@ var Phistroy = class {
|
|
|
283
283
|
};
|
|
284
284
|
__name(Phistroy, "Phistroy");
|
|
285
285
|
|
|
286
|
+
// src/utils.ts
|
|
287
|
+
var import_picocolors = __toESM(require("picocolors"));
|
|
288
|
+
var isUndefined = /* @__PURE__ */ __name((obj) => typeof obj === "undefined", "isUndefined");
|
|
289
|
+
var isNil = /* @__PURE__ */ __name((obj) => isUndefined(obj) || obj === null, "isNil");
|
|
290
|
+
var isObject = /* @__PURE__ */ __name((fn) => !isNil(fn) && typeof fn === "object", "isObject");
|
|
291
|
+
function warn(msg, color = "yellow") {
|
|
292
|
+
console.warn(`${import_picocolors.default.magenta("[phecda-server]")} ${import_picocolors.default[color](msg)}`);
|
|
293
|
+
}
|
|
294
|
+
__name(warn, "warn");
|
|
295
|
+
|
|
286
296
|
// src/context/base.ts
|
|
287
297
|
var _Context = class {
|
|
288
298
|
key;
|
|
@@ -354,20 +364,17 @@ function getInstance(tag) {
|
|
|
354
364
|
__name(getInstance, "getInstance");
|
|
355
365
|
function parseMeta(meta) {
|
|
356
366
|
const { data: { params, guards, interceptors, middlewares }, reflect, handlers } = meta;
|
|
367
|
+
params.forEach(({ index, key }, i) => {
|
|
368
|
+
if (index !== i)
|
|
369
|
+
warn(`the ${i + 1}th argument on the method '${key}' require decorator`);
|
|
370
|
+
});
|
|
357
371
|
return {
|
|
358
372
|
guards,
|
|
359
373
|
reflect,
|
|
360
374
|
interceptors,
|
|
361
375
|
middlewares,
|
|
362
376
|
handlers,
|
|
363
|
-
params
|
|
364
|
-
const { type, key, validate } = param;
|
|
365
|
-
return {
|
|
366
|
-
type,
|
|
367
|
-
key,
|
|
368
|
-
validate
|
|
369
|
-
};
|
|
370
|
-
})
|
|
377
|
+
params
|
|
371
378
|
};
|
|
372
379
|
}
|
|
373
380
|
__name(parseMeta, "parseMeta");
|
|
@@ -381,8 +388,8 @@ var _ServerContext = class extends Context {
|
|
|
381
388
|
return _ServerContext.middlewareRecord[m];
|
|
382
389
|
});
|
|
383
390
|
}
|
|
384
|
-
async usePipe(args,
|
|
385
|
-
return _ServerContext.pipe.transform?.(args,
|
|
391
|
+
async usePipe(args, tag) {
|
|
392
|
+
return _ServerContext.pipe.transform?.(args, tag, this.data);
|
|
386
393
|
}
|
|
387
394
|
static useFilter(arg, data) {
|
|
388
395
|
return _ServerContext.filter(arg, data);
|
|
@@ -415,16 +422,6 @@ var Base = class {
|
|
|
415
422
|
};
|
|
416
423
|
__name(Base, "Base");
|
|
417
424
|
|
|
418
|
-
// src/utils.ts
|
|
419
|
-
var import_picocolors = __toESM(require("picocolors"));
|
|
420
|
-
var isUndefined = /* @__PURE__ */ __name((obj) => typeof obj === "undefined", "isUndefined");
|
|
421
|
-
var isNil = /* @__PURE__ */ __name((obj) => isUndefined(obj) || obj === null, "isNil");
|
|
422
|
-
var isObject = /* @__PURE__ */ __name((fn) => !isNil(fn) && typeof fn === "object", "isObject");
|
|
423
|
-
function warn(msg) {
|
|
424
|
-
console.warn(`${import_picocolors.default.magenta("[phecda-server]")} ${import_picocolors.default.yellow(msg)}`);
|
|
425
|
-
}
|
|
426
|
-
__name(warn, "warn");
|
|
427
|
-
|
|
428
425
|
// src/helper.ts
|
|
429
426
|
function isMerge(data) {
|
|
430
427
|
return !!data.isMerge;
|
|
@@ -461,6 +458,7 @@ function bindApp(app, { meta, moduleMap }, options = {}) {
|
|
|
461
458
|
request: req,
|
|
462
459
|
response: res,
|
|
463
460
|
meta: contextMeta,
|
|
461
|
+
moduleMap,
|
|
464
462
|
isMerge: true
|
|
465
463
|
};
|
|
466
464
|
if (!Array.isArray(data))
|
|
@@ -497,20 +495,28 @@ function bindApp(app, { meta, moduleMap }, options = {}) {
|
|
|
497
495
|
try {
|
|
498
496
|
if (!params)
|
|
499
497
|
throw new BadRequestException(`"${tag}" doesn't exist`);
|
|
500
|
-
const args = await context.usePipe(params.map(({ type, key,
|
|
498
|
+
const args = await context.usePipe(params.map(({ type, key, option, index }) => {
|
|
501
499
|
const arg = resolveDep(item[type], key);
|
|
502
500
|
if (typeof arg === "string" && arg.startsWith(SERIES_SYMBOL)) {
|
|
503
|
-
const [,
|
|
501
|
+
const [, argIndex, argKey] = arg.split("@");
|
|
504
502
|
return {
|
|
505
|
-
arg: resolveDep(ret[Number(
|
|
506
|
-
|
|
503
|
+
arg: resolveDep(ret[Number(argIndex)], argKey || key),
|
|
504
|
+
option,
|
|
505
|
+
index,
|
|
506
|
+
type,
|
|
507
|
+
key,
|
|
508
|
+
reflect: reflect[index]
|
|
507
509
|
};
|
|
508
510
|
}
|
|
509
511
|
return {
|
|
510
512
|
arg,
|
|
511
|
-
|
|
513
|
+
option,
|
|
514
|
+
index,
|
|
515
|
+
type,
|
|
516
|
+
key,
|
|
517
|
+
reflect: reflect[index]
|
|
512
518
|
};
|
|
513
|
-
}),
|
|
519
|
+
}), tag);
|
|
514
520
|
instance.context = contextData;
|
|
515
521
|
ret.push(await methodMap[tag](...args));
|
|
516
522
|
} catch (e) {
|
|
@@ -531,13 +537,17 @@ function bindApp(app, { meta, moduleMap }, options = {}) {
|
|
|
531
537
|
try {
|
|
532
538
|
if (!params)
|
|
533
539
|
throw new BadRequestException(`"${tag}" doesn't exist`);
|
|
534
|
-
const args = await context.usePipe(params.map(({ type, key,
|
|
540
|
+
const args = await context.usePipe(params.map(({ type, key, option, index }) => {
|
|
535
541
|
const arg = resolveDep(item[type], key);
|
|
536
542
|
return {
|
|
537
543
|
arg,
|
|
538
|
-
|
|
544
|
+
type,
|
|
545
|
+
key,
|
|
546
|
+
option,
|
|
547
|
+
index,
|
|
548
|
+
reflect: reflect[index]
|
|
539
549
|
};
|
|
540
|
-
}),
|
|
550
|
+
}), tag);
|
|
541
551
|
instance.context = contextData;
|
|
542
552
|
resolve(await methodMap[tag](...args));
|
|
543
553
|
} catch (e) {
|
|
@@ -577,7 +587,8 @@ function bindApp(app, { meta, moduleMap }, options = {}) {
|
|
|
577
587
|
const contextData = {
|
|
578
588
|
request: req,
|
|
579
589
|
meta: i,
|
|
580
|
-
response: res
|
|
590
|
+
response: res,
|
|
591
|
+
moduleMap
|
|
581
592
|
};
|
|
582
593
|
const context = new ServerContext(methodTag, contextData);
|
|
583
594
|
try {
|
|
@@ -585,12 +596,16 @@ function bindApp(app, { meta, moduleMap }, options = {}) {
|
|
|
585
596
|
res.set(name2, header[name2]);
|
|
586
597
|
await context.useGuard(guards);
|
|
587
598
|
await context.useInterceptor(interceptors);
|
|
588
|
-
const args = await context.usePipe(params.map(({ type, key,
|
|
599
|
+
const args = await context.usePipe(params.map(({ type, key, option, index }) => {
|
|
589
600
|
return {
|
|
590
601
|
arg: resolveDep(req[type], key),
|
|
591
|
-
|
|
602
|
+
option,
|
|
603
|
+
key,
|
|
604
|
+
type,
|
|
605
|
+
index,
|
|
606
|
+
reflect: reflect[index]
|
|
592
607
|
};
|
|
593
|
-
}),
|
|
608
|
+
}), methodTag);
|
|
594
609
|
instance.context = contextData;
|
|
595
610
|
const ret = await context.usePost(await handler(...args));
|
|
596
611
|
if (isObject(ret))
|
|
@@ -629,6 +644,7 @@ __name(Meta, "Meta");
|
|
|
629
644
|
|
|
630
645
|
// src/core.ts
|
|
631
646
|
var emitter = new import_node_events.default();
|
|
647
|
+
var constructorMap = /* @__PURE__ */ new Map();
|
|
632
648
|
async function Factory(Modules) {
|
|
633
649
|
const moduleMap = /* @__PURE__ */ new Map();
|
|
634
650
|
const meta = [];
|
|
@@ -641,6 +657,7 @@ async function Factory(Modules) {
|
|
|
641
657
|
});
|
|
642
658
|
for (const Module of Modules)
|
|
643
659
|
await buildNestModule(Module, moduleMap, meta);
|
|
660
|
+
constructorMap.clear();
|
|
644
661
|
return {
|
|
645
662
|
moduleMap,
|
|
646
663
|
meta,
|
|
@@ -648,7 +665,6 @@ async function Factory(Modules) {
|
|
|
648
665
|
};
|
|
649
666
|
}
|
|
650
667
|
__name(Factory, "Factory");
|
|
651
|
-
var constructorMap = /* @__PURE__ */ new Map();
|
|
652
668
|
async function buildNestModule(Module, map, meta) {
|
|
653
669
|
const paramtypes = getParamtypes(Module);
|
|
654
670
|
let instance;
|
|
@@ -754,7 +770,7 @@ var import_phecda_core5 = require("phecda-core");
|
|
|
754
770
|
|
|
755
771
|
// src/decorators/param.ts
|
|
756
772
|
var import_phecda_core3 = require("phecda-core");
|
|
757
|
-
function BaseParam(type, key,
|
|
773
|
+
function BaseParam(type, key, option) {
|
|
758
774
|
return (target, k, index) => {
|
|
759
775
|
(0, import_phecda_core3.setModelVar)(target, k);
|
|
760
776
|
const state = target._namespace.__STATE_NAMESPACE__.get(k) || {};
|
|
@@ -764,7 +780,7 @@ function BaseParam(type, key, validate) {
|
|
|
764
780
|
type,
|
|
765
781
|
key,
|
|
766
782
|
index,
|
|
767
|
-
|
|
783
|
+
option
|
|
768
784
|
});
|
|
769
785
|
(0, import_phecda_core3.setState)(target, k, state);
|
|
770
786
|
};
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/pipe.ts","../src/exception/base.ts","../src/exception/validate.ts","../src/exception/undefine.ts","../src/exception/forbidden.ts","../src/exception/bad-request.ts","../src/exception/not-found.ts","../src/exception/conflict.ts","../src/exception/bad-gateway.ts","../src/exception/invalid-input.ts","../src/exception/media-type.ts","../src/exception/payload-large.ts","../src/exception/timeout.ts","../src/exception/unauthorized.ts","../src/exception/unavailable-service.ts","../src/exception/framework.ts","../src/filter.ts","../src/history.ts","../src/context/base.ts","../src/context/server.ts","../src/types.ts","../src/utils.ts","../src/helper.ts","../src/common.ts","../src/server/express.ts","../src/core.ts","../src/meta.ts","../src/decorators/index.ts","../src/decorators/param.ts","../src/decorators/route.ts"],"sourcesContent":["export * from './context'\nexport * from './types'\nexport * from './server/express'\nexport * from './core'\nexport * from './decorators'\nexport * from './exception'\nexport * from './pipe'\nexport * from './meta'\nexport * from 'phecda-core'\nexport * from './helper'\nexport * from './common'\n","import { isPhecda, plainToClass } from 'phecda-core'\nimport { ValidateException } from './exception/validate'\n\nimport type { P } from './types'\n\nexport const defaultPipe = {\n // todo: add more params\n async transform(args: { arg: any; validate: any }[], reflect: any[]) {\n for (const i in args) {\n const { validate, arg } = args[i]\n if (validate === false)\n continue\n if (!reflect[i]) {\n if (validate && arg)\n args[i].arg = validate(arg)\n\n continue\n }\n\n if (isPhecda(reflect[i])) {\n const ret = await plainToClass(reflect[i], arg, { transform: true })\n if (ret.err.length > 0)\n throw new ValidateException(ret.err[0])\n args[i].arg = ret.data\n }\n else {\n if ([Number, Boolean].includes(reflect[i])) {\n args[i].arg = reflect[i](arg)\n\n if (reflect[i] === Number && Object.is(args[i].arg, NaN))\n throw new ValidateException(`parameter ${Number(i) + 1} should be a number`)\n }\n }\n }\n return args.map(item => item.arg)\n },\n} as P.Pipe\n","export class HttpException extends Error {\n constructor(public message: string, public status: number, public description = 'Http exception') {\n super(message)\n }\n\n get data() {\n return { message: this.message, description: this.description, status: this.status, error: true }\n }\n}\n","import { HttpException } from './base'\n\nexport class ValidateException extends HttpException {\n constructor(message: string) {\n super(message, 400, 'Validate exception')\n }\n}\n","import { HttpException } from './base'\n\nexport class UndefinedException extends HttpException {\n constructor(message: string) {\n super(message, 500, 'Undefined error')\n }\n}\n","import { HttpException } from './base'\n\nexport class ForbiddenException extends HttpException {\n constructor(message: string) {\n super(message, 403, 'Forbidden resource')\n }\n}\n","import { HttpException } from './base'\n\nexport class BadRequestException extends HttpException {\n constructor(message: string) {\n super(message, 400, 'Bad Request')\n }\n}\n","import { HttpException } from './base'\n\nexport class NotFoundException extends HttpException {\n constructor(message: string) {\n super(message, 404, 'Not Found')\n }\n}\n","import { HttpException } from './base'\n\nexport class ConflictException extends HttpException {\n constructor(message: string) {\n super(message, 409, 'Conflict')\n }\n}\n","import { HttpException } from './base'\n\nexport class BadGatewayException extends HttpException {\n constructor(message: string) {\n super(message, 502, 'Bad Gatrway')\n }\n}\n","import { HttpException } from './base'\n\nexport class InvalidInputException extends HttpException {\n constructor(message: string) {\n super(message, 502, 'Invalid Input')\n }\n}\n","import { HttpException } from './base'\n\nexport class UnsupportedMediaTypeException extends HttpException {\n constructor(message: string) {\n super(message, 415, 'Unsupported Media Type')\n }\n}\n","import { HttpException } from './base'\n\nexport class PayloadLargeException extends HttpException {\n constructor(message: string) {\n super(message, 413, 'Payload Too Large')\n }\n}\n","import { HttpException } from './base'\n\nexport class TimeoutException extends HttpException {\n constructor(message: string) {\n super(message, 408, 'Request Timeout',\n )\n }\n}\n","import { HttpException } from './base'\n\nexport class UnauthorizedException extends HttpException {\n constructor(message: string) {\n super(message, 401, 'Unauthorized')\n }\n}\n","import { HttpException } from './base'\n\nexport class ServiceUnavailableException extends HttpException {\n constructor(message: string) {\n super(message, 503, 'Service Unavailable')\n }\n}\n","import { HttpException } from './base'\n\nexport class FrameworkException extends HttpException {\n constructor(message: string) {\n super(`[phecda-server] ${message}`, 500, 'Framework Error')\n }\n}\n","import { HttpException, UndefinedException } from './exception'\nimport type { ServerFilter } from './types'\n\nexport const serverFilter: ServerFilter = (e: any) => {\n if (!(e instanceof HttpException)) {\n console.error(e.stack)\n e = new UndefinedException(e.message || e)\n }\n else {\n console.error(e.message)\n }\n\n return e.data\n}\n","export class Phistroy {\n guard: string[] = []\n interceptor: string[] = []\n record(name: string, type: 'guard' | 'interceptor') {\n if (!this[type].includes(name)) {\n this[type].push(name)\n return true\n }\n return false\n }\n}\n","import { ForbiddenException, FrameworkException } from '../exception'\nimport { Phistroy } from '../history'\n\nimport type { Meta } from '../meta'\nimport type { P } from '../types'\n\nexport abstract class Context<Data = any> {\n method: string\n params: string[]\n\n static metaRecord: Record<string, Meta> = {}\n static metaDataRecord: Record<string, ReturnType<typeof parseMeta>> = {}\n static instanceRecord: Record<string, any> = {}\n static guardsRecord: Record<string, any> = {}\n static interceptorsRecord: Record<string, any > = {}\n // static serverRecord: Record<string, Context> = {}\n post: ((...params: any) => any)[]\n history = new Phistroy()\n\n constructor(public key: string, public data: Data) {\n }\n\n static registerGuard(key: string, handler: any) {\n Context.guardsRecord[key] = handler\n }\n\n static registerInterceptor(key: string, handler: any) {\n Context.interceptorsRecord[key] = handler\n }\n\n async useGuard(guards: string[], isMerge = false) {\n for (const guard of guards) {\n if (this.history.record(guard, 'guard')) {\n if (!(guard in Context.guardsRecord))\n throw new FrameworkException(`can't find guard named ${guard}`)\n if (!await Context.guardsRecord[guard](this.data, isMerge))\n throw new ForbiddenException(`Guard exception--${guard}`)\n }\n }\n }\n\n async useInterceptor(interceptors: string[], isMerge = false) {\n const ret = []\n for (const interceptor of interceptors) {\n if (this.history.record(interceptor, 'interceptor')) {\n if (!(interceptor in Context.interceptorsRecord))\n throw new FrameworkException(`can't find interceptor named ${interceptor}`)\n const post = await Context.interceptorsRecord[interceptor](this.data, isMerge)\n if (post)\n ret.push(post)\n }\n }\n this.post = ret\n }\n\n async usePost(data: any) {\n if (!this.post)\n return data\n for (const cb of this.post)\n data = (await cb(data)) | data\n\n return data\n }\n}\n\nexport function addGuard(key: string, handler: P.Guard) {\n Context.registerGuard(key, handler)\n}\n\nexport function addInterceptor(key: string, handler: P.Interceptor) {\n Context.registerInterceptor(key, handler)\n}\nexport function getInstance(tag: string) {\n return Context.instanceRecord[tag]\n}\n\nexport function parseMeta(meta: Meta) {\n const { data: { params, guards, interceptors, middlewares }, reflect, handlers } = meta\n return {\n guards,\n reflect,\n interceptors,\n middlewares,\n handlers,\n params: params.map((param) => {\n const { type, key, validate } = param\n return { type, key, validate }\n }),\n }\n}\n","import type { RequestHandler } from 'express'\nimport { defaultPipe } from '../pipe'\nimport { serverFilter } from '../filter'\nimport { FrameworkException } from '../exception'\nimport type { P, ServerCtx, ServerFilter, ServerMergeCtx } from '../types'\nimport { Context } from './base'\n\nexport class ServerContext extends Context<ServerCtx | ServerMergeCtx > {\n static pipe = defaultPipe\n static filter = serverFilter\n static middlewareRecord: Record<string, (...params: any) => any> = {}\n static useMiddleware(middlewares: string[]) {\n return middlewares.map((m) => {\n if (!(m in ServerContext.middlewareRecord))\n throw new FrameworkException(`can't find middleware named ${m}`)\n return ServerContext.middlewareRecord[m]\n })\n }\n\n async usePipe(args: { arg: any; validate?: boolean }[], reflect: any[]) {\n return ServerContext.pipe.transform?.(args, reflect, this.data)\n }\n\n static useFilter(arg: any, data: ServerCtx | ServerMergeCtx) {\n return ServerContext.filter(arg, data)\n }\n\n useFilter(arg: any) {\n return ServerContext.filter(arg, this.data)\n }\n}\n\nexport function addMiddleware(key: string, handler: RequestHandler) {\n ServerContext.middlewareRecord[key] = handler\n}\n\nexport function useServerPipe(pipe: P.Pipe) {\n ServerContext.pipe = pipe\n}\nexport function useServerFilter(filter: ServerFilter) {\n ServerContext.filter = filter\n}\n","import type { Request, Response } from 'express'\nimport type { Events } from 'phecda-core'\nimport type { Meta } from './meta'\nimport type { HttpException } from './exception'\nexport type Construct<T = any> = new (...args: any[]) => T\n\nexport interface Emitter {\n on<N extends keyof Events>(eventName: N, cb: (args: Events[N]) => void): void\n once<N extends keyof Events>(eventName: N, cb: (args: Events[N]) => void): void\n off<N extends keyof Events>(eventName: N, cb: (args: Events[N]) => void): void\n removeAllListeners<N extends keyof Events>(eventName: N): void\n emit<N extends keyof Events>(eventName: N, param: Events[N]): void\n}\n\nexport type RequestType = 'get' | 'post' | 'put' | 'delete' | 'patch' | 'options' | 'head'\n\nexport type MergeType = <R extends Promise<any>[]> (...args: R) => { [K in keyof R]: Awaited<R[K]> }\n\nexport interface ServerMergeCtx {\n request: Request\n response: Response\n meta: Record<string, Meta>\n isMerge: true\n tags?: string[]\n}\n\nexport interface ServerCtx {\n request: Request\n response: Response\n meta: Meta\n}\nexport interface BaseError {\n error: true\n status: number\n}\nexport type ServerFilter<E extends HttpException = any> = (err: E | Error, ctx: ServerMergeCtx | ServerCtx) => any\n\nexport class Base {\n context: ServerMergeCtx | ServerCtx\n}\n\nexport namespace P{\n export interface Error extends BaseError { message: string; description: string}\n\n export type ResOrErr<R > = { [K in keyof R]: Awaited<R[K]> | Error }\n\n export type Res<T> = T\n export type Guard = ((ctx: ServerCtx, isMerge?: false) => Promise<boolean> | boolean) | ((ctx: ServerMergeCtx, isMerge?: true) => Promise<boolean> | boolean)\n export type Interceptor = ((ctx: ServerCtx, isMerge?: false) => any) | ((ctx: ServerMergeCtx, isMerge?: true) => any)\n export interface Handler {\n error?: (arg: any) => void\n }\n export interface Meta {\n route?: {\n type: RequestType\n route: string\n }\n // mq?: {\n // queue: string\n // routeKey: string\n // options: amqplib.Options.Consume\n\n // }\n define?: any\n header: Record<string, string>\n params: { type: string; index: number; key: string; validate?: boolean }[]\n guards: string[]\n interceptors: string[]\n middlewares: string[]\n method: string\n name: string\n tag: string\n }\n export interface Pipe {\n transform(args: { arg: any; validate?: boolean }[], reflect: any[], ctx: ServerCtx | ServerMergeCtx): Promise<any[]>\n }\n\n}\n","import pc from 'picocolors'\nexport const isUndefined = (obj: any): obj is undefined =>\n typeof obj === 'undefined'\nexport const isNil = (obj: any): obj is null | undefined =>\n isUndefined(obj) || obj === null\n\nexport const isObject = (fn: any): fn is object =>\n !isNil(fn) && typeof fn === 'object'\n\nexport function warn(msg: string) {\n console.warn(`${pc.magenta('[phecda-server]')} ${pc.yellow(msg)}`)\n}\n","import type { ServerCtx, ServerMergeCtx } from './types'\n\nexport function isMerge(data: ServerCtx | ServerMergeCtx): data is ServerMergeCtx {\n return !!(data as ServerMergeCtx).isMerge\n}\n\nexport function resolveDep(ret: any, key: string) {\n if (key)\n return ret?.[key]\n return ret\n}\n","export const SERIES_SYMBOL = '__symbol_series__'\nexport const MERGE_SYMBOL = '__symbol_req__'\n","import type { Express, Router } from 'express'\nimport { Context, ServerContext, parseMeta } from '../context'\nimport { isObject } from '../utils'\nimport { resolveDep } from '../helper'\nimport { MERGE_SYMBOL, SERIES_SYMBOL } from '../common'\nimport type { Factory } from '../core'\nimport { BadRequestException } from '../exception'\nimport type { Meta } from '../meta'\nimport type { ServerMergeCtx } from '../types'\n\nexport interface Options {\n/**\n * 专用路由的值,默认为/__PHECDA_SERVER__,处理phecda-client发出的合并请求\n */\n route?: string\n /**\n * 全局守卫\n */\n globalGuards?: string[]\n /**\n * 全局拦截器\n */\n globalInterceptors?: string[]\n /**\n * 专用路由的中间件(work for merge request),全局中间件请在bindApp以外设置\n */\n middlewares?: string[]\n}\n\nexport function bindApp(app: Express | Router, { meta, moduleMap }: Awaited<ReturnType<typeof Factory>>, options: Options = {}) {\n const { globalGuards, globalInterceptors, route, middlewares: proMiddle } = { route: '/__PHECDA_SERVER__', globalGuards: [], globalInterceptors: [], middlewares: [], ...options } as Required<Options>\n const methodMap = {} as Record<string, (...args: any[]) => any>\n const contextMeta = {} as Record<string, Meta>\n (app as Express).post(route, (req, _res, next) => {\n (req as any)[MERGE_SYMBOL] = true\n next()\n }, ...ServerContext.useMiddleware(proMiddle), async (req, res) => {\n const { body: { category, data } } = req\n\n const contextData = {\n request: req,\n response: res,\n meta: contextMeta,\n isMerge: true,\n } as unknown as ServerMergeCtx\n\n if (!Array.isArray(data))\n return res.json(await ServerContext.useFilter(new BadRequestException('data format should be an array'), contextData))\n\n if (category !== 'series' && category !== 'parallel')\n return res.json(await ServerContext.useFilter(new BadRequestException('category should be \\'parallel\\' or \\'series\\''), contextData))\n\n contextData.tags = data.map((item: any) => item.tag)\n\n const context = new ServerContext(route, contextData)\n const ret = [] as any[]\n try {\n const mergeGuards = new Set([...globalGuards])\n const mergeInterceptors = new Set([...globalInterceptors])\n\n data.forEach(({ tag }) => {\n const {\n guards,\n interceptors,\n } = Context.metaDataRecord[tag]\n guards.forEach(guard => mergeGuards.add(guard))\n interceptors.forEach(intercept => mergeInterceptors.add(intercept))\n })\n await context.useGuard([...mergeGuards], true)\n await context.useInterceptor([...mergeInterceptors], true)\n\n if (category === 'series') {\n for (const item of data) {\n const { tag } = item\n const [name] = tag.split('-')\n const {\n reflect,\n params,\n } = Context.metaDataRecord[tag]\n const instance = moduleMap.get(name)\n\n try {\n if (!params)\n throw new BadRequestException(`\"${tag}\" doesn't exist`)\n const args = await context.usePipe(params.map(({ type, key, validate }) => {\n const arg = resolveDep(item[type], key)\n if (typeof arg === 'string' && arg.startsWith(SERIES_SYMBOL)) {\n const [, index, argKey] = arg.split('@')\n return { arg: resolveDep(ret[Number(index)], argKey || key), validate }\n }\n\n return { arg, validate }\n }), reflect) as any\n instance.context = contextData\n\n ret.push(await methodMap[tag](...args))\n }\n catch (e: any) {\n const m = Context.metaRecord[tag]\n m.handlers.forEach(handler => handler.error?.(e))\n ret.push(await context.useFilter(e))\n }\n }\n return res.json(await context.usePost(ret))\n }\n if (category === 'parallel') {\n return Promise.all(data.map((item: any) => {\n // eslint-disable-next-line no-async-promise-executor\n return new Promise(async (resolve) => {\n const { tag } = item\n const [name] = tag.split('-')\n const {\n reflect,\n params,\n handlers,\n } = Context.metaDataRecord[tag]\n\n const instance = moduleMap.get(name)\n\n try {\n if (!params)\n throw new BadRequestException(`\"${tag}\" doesn't exist`)\n\n const args = await context.usePipe(params.map(({ type, key, validate }) => {\n const arg = resolveDep(item[type], key)\n return { arg, validate }\n }), reflect) as any\n instance.context = contextData\n resolve(await methodMap[tag](...args))\n }\n catch (e: any) {\n handlers.forEach(handler => handler.error?.(e))\n resolve(await context.useFilter(e))\n }\n })\n })).then(async (ret) => {\n res.json(await context.usePost(ret))\n })\n }\n }\n catch (e) {\n const err = await context.useFilter(e)\n res.status(err.status).json(err)\n }\n })\n for (const i of meta) {\n const { name, method, route, header, tag } = i.data\n const instance = moduleMap.get(tag)!\n const methodTag = `${tag}-${method}`\n contextMeta[methodTag] = i\n Context.metaRecord[methodTag] = i\n let {\n guards,\n reflect,\n interceptors,\n params,\n handlers,\n middlewares,\n } = Context.metaDataRecord[methodTag] ? Context.metaDataRecord[methodTag] : (Context.metaDataRecord[methodTag] = parseMeta(i))\n\n guards = [...globalGuards!, ...guards]\n interceptors = [...globalInterceptors!, ...interceptors]\n\n const handler = instance[method].bind(instance)\n methodMap[methodTag] = handler\n Context.instanceRecord[name] = instance\n if (route) {\n (app as Express)[route.type](route.route, ...ServerContext.useMiddleware(middlewares), async (req, res) => {\n const contextData = {\n request: req,\n meta: i,\n response: res,\n }\n const context = new ServerContext(methodTag, contextData)\n\n try {\n for (const name in header)\n res.set(name, header[name])\n await context.useGuard(guards)\n await context.useInterceptor(interceptors)\n const args = await context.usePipe(params.map(({ type, key, validate }) => {\n return { arg: resolveDep((req as any)[type], key), validate }\n }), reflect)\n instance.context = contextData\n\n const ret = await context.usePost(await handler(...args))\n if (isObject(ret))\n res.json(ret)\n else\n res.send(String(ret))\n }\n catch (e: any) {\n handlers.forEach(handler => handler.error?.(e))\n const err = await context.useFilter(e)\n res.status(err.status).json(err)\n }\n })\n }\n }\n}\n","import 'reflect-metadata'\nimport fs from 'fs'\nimport EventEmitter from 'node:events'\nimport type { Phecda } from 'phecda-core'\nimport { getExposeKey, getHandler, getState, injectProperty, registerAsync } from 'phecda-core'\nimport type { Construct, Emitter, P } from './types'\nimport { Meta } from './meta'\nimport { warn } from './utils'\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)[]) {\n const moduleMap = new Map<string, InstanceType<Construct>>()\n const meta: Meta[] = []\n injectProperty('watcher', ({ eventName, instance, key, options }: { eventName: string; instance: any; key: string; options?: { once: boolean } }) => {\n const fn = typeof instance[key] === 'function' ? instance[key].bind(instance) : (v: any) => instance[key] = v\n\n if (options?.once)\n (emitter as any).once(eventName, fn)\n\n else\n (emitter as any).on(eventName, fn)\n })\n\n for (const Module of Modules)\n await buildNestModule(Module, moduleMap, meta)\n\n return { moduleMap, meta, output: (p = 'pmeta.js') => fs.writeFileSync(p, JSON.stringify(meta.map(item => item.data))) }\n}\n\nexport const constructorMap = new Map() // just for warn\n\nasync function buildNestModule(Module: Construct, map: Map<string, InstanceType<Construct>>, meta: Meta[]) {\n const paramtypes = getParamtypes(Module) as Construct[]\n let instance: InstanceType<Construct>\n const tag = Module.prototype?.__TAG__ || Module.name\n\n if (map.has(tag)) {\n instance = map.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)\n warn(`Synonym module: Module taged \"${tag}\" has been loaded before, so phecda-server won't load Module \"${Module.name}\"`)\n\n return instance\n }\n map.set(tag, undefined)\n if (paramtypes) {\n const paramtypesInstances = [] as any[]\n for (const i in paramtypes)\n paramtypesInstances[i] = await buildNestModule(paramtypes[i], map, meta)\n\n instance = new Module(...paramtypesInstances)\n }\n else {\n instance = new Module()\n }\n meta.push(...getMetaFromInstance(instance, Module.name, tag))\n await registerAsync(instance)\n map.set(tag, instance)\n constructorMap.set(tag, Module)\n return instance\n}\n\nfunction getMetaFromInstance(instance: Phecda, name: string, tag: string) {\n const vars = getExposeKey(instance).filter(item => item !== '__CLASS')\n const baseState = (getState(instance, '__CLASS') || {}) as P.Meta\n initState(baseState)\n\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.route) {\n meta.route = {\n route: (baseState.route?.route || '') + (state.route.route),\n type: state.route.type,\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 meta.params = params\n meta.define = { ...baseState.define, ...state.define }\n meta.header = { ...baseState.header, ...state.header }\n meta.middlewares = [...new Set([...baseState.middlewares, ...state.middlewares])]\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.middlewares)\n state.middlewares = []\n if (!state.guards)\n state.guards = []\n if (!state.interceptors)\n state.interceptors = []\n}\n","import type { P } from './types'\n\nexport class Meta {\n constructor(public data: P.Meta, public handlers: P.Handler[], public reflect: any[]) {\n\n }\n}\n","import { setModelVar, setState } from 'phecda-core'\n\nexport function Header(name: string, value: string) {\n return (target: any, k: PropertyKey) => {\n setModelVar(target, k)\n const state = target._namespace.__STATE_NAMESPACE__.get(k) || {}\n if (!state.header)\n state.header = {}\n\n state.header[name] = value\n setState(target, k, state)\n }\n}\n\nexport function Define(key: string, value: any) {\n return (target: any, k?: PropertyKey) => {\n if (!k) {\n k = '__CLASS'\n target = target.prototype\n }\n\n setModelVar(target, k)\n const state = target._namespace.__STATE_NAMESPACE__.get(k) || {}\n if (!state.define)\n state.define = {}\n\n state.define[key] = value\n setState(target, k, state)\n }\n}\n\nexport * from './param'\nexport * from './route'\n","import { setModelVar, setState } from 'phecda-core'\n\nexport function BaseParam(type: string, key: string, validate?: any): any {\n return (target: any, k: PropertyKey, index: number) => {\n setModelVar(target, k)\n\n const state = target._namespace.__STATE_NAMESPACE__.get(k) || {}\n if (!state.params)\n state.params = []\n\n state.params.push({ type, key, index, validate })\n setState(target, k, state)\n }\n}\n\nexport function Body(key = '', pipeOpts?: any) {\n return BaseParam('body', key, pipeOpts)\n}\nexport function Query(key = '', pipeOpts?: any) {\n return BaseParam('query', key, pipeOpts)\n}\nexport function Param(key: string, pipeOpts?: any) {\n return BaseParam('params', key, pipeOpts)\n}\n","import { setModelVar, setState } from 'phecda-core'\n\nexport function Route(route: string, type?: string): any {\n return (target: any, key?: PropertyKey) => {\n if (!key)\n key = '__CLASS'\n target = key === '__CLASS' ? target.prototype : target\n\n setModelVar(target, key)\n\n const state = target._namespace.__STATE_NAMESPACE__.get(key) || {}\n state.route = {\n route,\n type,\n }\n setState(target, key, state)\n }\n}\n\nexport function Get(route: string) {\n return Route(route, 'get')\n}\n\nexport function Post(route: string) {\n return Route(route, 'post')\n}\nexport function Put(route: string) {\n return Route(route, 'put')\n}\n\nexport function Patch(route: string) {\n return Route(route, 'patch')\n}\nexport function Delete(route: string) {\n return Route(route, 'delete')\n}\n\nexport function Controller(route: string) {\n return Route(route)\n}\n\nexport function Guard(...guards: string[]): any {\n return (target: any, key?: PropertyKey) => {\n if (!key)\n key = '__CLASS'\n target = key === '__CLASS' ? target.prototype : target\n\n setModelVar(target, key)\n\n const state = target._namespace.__STATE_NAMESPACE__.get(key) || {}\n if (!state.guards)\n state.guards = []\n state.guards.push(...guards)\n setState(target, key, state)\n }\n}\n\nexport function Middle(...middlewares: string[]): any {\n return (target: any, key?: PropertyKey) => {\n if (!key)\n key = '__CLASS'\n target = key === '__CLASS' ? target.prototype : target\n\n setModelVar(target, key)\n\n const state = target._namespace.__STATE_NAMESPACE__.get(key) || {}\n if (!state.middlewares)\n state.middlewares = []\n state.middlewares.push(...middlewares)\n setState(target, key, state)\n }\n}\n\nexport function Interceptor(...interceptors: string[]): any {\n return (target: any, key?: PropertyKey) => {\n if (!key)\n key = '__CLASS'\n target = key === '__CLASS' ? target.prototype : target\n\n setModelVar(target, key)\n\n const state = target._namespace.__STATE_NAMESPACE__.get(key) || {}\n if (!state.interceptors)\n state.interceptors = []\n state.interceptors.push(...interceptors)\n setState(target, key, state)\n }\n}\n"],"mappings":"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","names":["HttpException","Error","message","status","description","constructor","data","error","ValidateException","HttpException","constructor","message","defaultPipe","transform","args","reflect","i","validate","arg","isPhecda","ret","plainToClass","err","length","ValidateException","data","Number","Boolean","includes","Object","is","NaN","map","item","UndefinedException","HttpException","constructor","message","ForbiddenException","HttpException","constructor","message","BadRequestException","HttpException","constructor","message","NotFoundException","HttpException","constructor","message","ConflictException","HttpException","constructor","message","BadGatewayException","HttpException","constructor","message","InvalidInputException","HttpException","constructor","message","UnsupportedMediaTypeException","HttpException","constructor","message","PayloadLargeException","HttpException","constructor","message","TimeoutException","HttpException","constructor","message","UnauthorizedException","HttpException","constructor","message","ServiceUnavailableException","HttpException","constructor","message","FrameworkException","HttpException","constructor","message","serverFilter","e","HttpException","console","error","stack","UndefinedException","message","data","Phistroy","guard","interceptor","record","name","type","includes","push","Context","key","data","method","params","post","history","constructor","Phistroy","registerGuard","handler","guardsRecord","registerInterceptor","interceptorsRecord","useGuard","guards","isMerge","guard","record","FrameworkException","ForbiddenException","useInterceptor","interceptors","ret","interceptor","push","usePost","cb","metaRecord","metaDataRecord","instanceRecord","addGuard","addInterceptor","getInstance","tag","parseMeta","meta","middlewares","reflect","handlers","map","param","type","validate","ServerContext","Context","useMiddleware","middlewares","map","m","middlewareRecord","FrameworkException","usePipe","args","reflect","pipe","transform","data","useFilter","arg","filter","defaultPipe","serverFilter","addMiddleware","key","handler","useServerPipe","useServerFilter","Base","context","isUndefined","obj","isNil","isObject","fn","warn","msg","console","pc","magenta","yellow","isMerge","data","resolveDep","ret","key","SERIES_SYMBOL","MERGE_SYMBOL","bindApp","app","meta","moduleMap","options","globalGuards","globalInterceptors","route","middlewares","proMiddle","methodMap","contextMeta","post","req","_res","next","MERGE_SYMBOL","ServerContext","useMiddleware","res","body","category","data","contextData","request","response","isMerge","Array","isArray","json","useFilter","BadRequestException","tags","map","item","tag","context","ret","mergeGuards","Set","mergeInterceptors","forEach","guards","interceptors","Context","metaDataRecord","guard","add","intercept","useGuard","useInterceptor","name","split","reflect","params","instance","get","args","usePipe","type","key","validate","arg","resolveDep","startsWith","SERIES_SYMBOL","index","argKey","Number","push","e","m","metaRecord","handlers","handler","error","usePost","Promise","all","resolve","then","err","status","i","method","header","methodTag","parseMeta","bind","instanceRecord","set","isObject","send","String","import_phecda_core","Meta","data","handlers","reflect","constructor","emitter","EventEmitter","Factory","Modules","moduleMap","Map","meta","injectProperty","eventName","instance","key","options","fn","bind","v","once","on","Module","buildNestModule","output","p","fs","writeFileSync","JSON","stringify","map","item","data","constructorMap","paramtypes","getParamtypes","tag","prototype","__TAG__","name","has","get","Error","warn","set","undefined","paramtypesInstances","i","push","getMetaFromInstance","registerAsync","vars","getExposeKey","filter","baseState","getState","initState","state","route","type","method","params","unshift","index","define","header","middlewares","Set","guards","interceptors","Meta","getHandler","Reflect","getMetadata","import_phecda_core","import_phecda_core","BaseParam","type","key","validate","target","k","index","setModelVar","state","_namespace","__STATE_NAMESPACE__","get","params","push","setState","Body","pipeOpts","Query","Param","import_phecda_core","Route","route","type","target","key","prototype","setModelVar","state","_namespace","__STATE_NAMESPACE__","get","setState","Get","Post","Put","Patch","Delete","Controller","Guard","guards","push","Middle","middlewares","Interceptor","interceptors","Header","name","value","target","k","setModelVar","state","_namespace","__STATE_NAMESPACE__","get","header","setState","Define","key","prototype","define"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/pipe.ts","../src/exception/base.ts","../src/exception/validate.ts","../src/exception/undefine.ts","../src/exception/forbidden.ts","../src/exception/bad-request.ts","../src/exception/not-found.ts","../src/exception/conflict.ts","../src/exception/bad-gateway.ts","../src/exception/invalid-input.ts","../src/exception/media-type.ts","../src/exception/payload-large.ts","../src/exception/timeout.ts","../src/exception/unauthorized.ts","../src/exception/unavailable-service.ts","../src/exception/framework.ts","../src/filter.ts","../src/history.ts","../src/utils.ts","../src/context/base.ts","../src/context/server.ts","../src/types.ts","../src/helper.ts","../src/common.ts","../src/server/express.ts","../src/core.ts","../src/meta.ts","../src/decorators/index.ts","../src/decorators/param.ts","../src/decorators/route.ts"],"sourcesContent":["export * from './context'\nexport * from './types'\nexport * from './server/express'\nexport * from './core'\nexport * from './decorators'\nexport * from './exception'\nexport * from './pipe'\nexport * from './meta'\nexport * from 'phecda-core'\nexport * from './helper'\nexport * from './common'\n","import { isPhecda, plainToClass } from 'phecda-core'\nimport { ValidateException } from './exception/validate'\n\nimport type { P } from './types'\n\nexport const defaultPipe = {\n // todo: add more params\n async transform(args: any[]) {\n for (const i in args) {\n const { option, arg, reflect } = args[i]\n if (option === false)\n continue\n if (!reflect) {\n if (option && arg)\n args[i].arg = option(arg)\n\n continue\n }\n\n if (isPhecda(reflect)) {\n const ret = await plainToClass(reflect, arg, { transform: true })\n if (ret.err.length > 0)\n throw new ValidateException(ret.err[0])\n args[i].arg = ret.data\n }\n else {\n if ([Number, Boolean].includes(reflect)) {\n args[i].arg = reflect(arg)\n\n if (reflect === Number && Object.is(args[i].arg, NaN))\n throw new ValidateException(`parameter ${Number(i) + 1} should be a number`)\n }\n }\n }\n return args.map(item => item.arg)\n },\n} as P.Pipe\n","export class HttpException extends Error {\n constructor(public message: string, public status: number, public description = 'Http exception') {\n super(message)\n }\n\n get data() {\n return { message: this.message, description: this.description, status: this.status, error: true }\n }\n}\n","import { HttpException } from './base'\n\nexport class ValidateException extends HttpException {\n constructor(message: string) {\n super(message, 400, 'Validate exception')\n }\n}\n","import { HttpException } from './base'\n\nexport class UndefinedException extends HttpException {\n constructor(message: string) {\n super(message, 500, 'Undefined error')\n }\n}\n","import { HttpException } from './base'\n\nexport class ForbiddenException extends HttpException {\n constructor(message: string) {\n super(message, 403, 'Forbidden resource')\n }\n}\n","import { HttpException } from './base'\n\nexport class BadRequestException extends HttpException {\n constructor(message: string) {\n super(message, 400, 'Bad Request')\n }\n}\n","import { HttpException } from './base'\n\nexport class NotFoundException extends HttpException {\n constructor(message: string) {\n super(message, 404, 'Not Found')\n }\n}\n","import { HttpException } from './base'\n\nexport class ConflictException extends HttpException {\n constructor(message: string) {\n super(message, 409, 'Conflict')\n }\n}\n","import { HttpException } from './base'\n\nexport class BadGatewayException extends HttpException {\n constructor(message: string) {\n super(message, 502, 'Bad Gatrway')\n }\n}\n","import { HttpException } from './base'\n\nexport class InvalidInputException extends HttpException {\n constructor(message: string) {\n super(message, 502, 'Invalid Input')\n }\n}\n","import { HttpException } from './base'\n\nexport class UnsupportedMediaTypeException extends HttpException {\n constructor(message: string) {\n super(message, 415, 'Unsupported Media Type')\n }\n}\n","import { HttpException } from './base'\n\nexport class PayloadLargeException extends HttpException {\n constructor(message: string) {\n super(message, 413, 'Payload Too Large')\n }\n}\n","import { HttpException } from './base'\n\nexport class TimeoutException extends HttpException {\n constructor(message: string) {\n super(message, 408, 'Request Timeout',\n )\n }\n}\n","import { HttpException } from './base'\n\nexport class UnauthorizedException extends HttpException {\n constructor(message: string) {\n super(message, 401, 'Unauthorized')\n }\n}\n","import { HttpException } from './base'\n\nexport class ServiceUnavailableException extends HttpException {\n constructor(message: string) {\n super(message, 503, 'Service Unavailable')\n }\n}\n","import { HttpException } from './base'\n\nexport class FrameworkException extends HttpException {\n constructor(message: string) {\n super(`[phecda-server] ${message}`, 500, 'Framework Error')\n }\n}\n","import { HttpException, UndefinedException } from './exception'\nimport type { ServerFilter } from './types'\n\nexport const serverFilter: ServerFilter = (e: any) => {\n if (!(e instanceof HttpException)) {\n console.error(e.stack)\n e = new UndefinedException(e.message || e)\n }\n else {\n console.error(e.message)\n }\n\n return e.data\n}\n","export class Phistroy {\n guard: string[] = []\n interceptor: string[] = []\n record(name: string, type: 'guard' | 'interceptor') {\n if (!this[type].includes(name)) {\n this[type].push(name)\n return true\n }\n return false\n }\n}\n","import pc from 'picocolors'\nexport const isUndefined = (obj: any): obj is undefined =>\n typeof obj === 'undefined'\nexport const isNil = (obj: any): obj is null | undefined =>\n isUndefined(obj) || obj === null\n\nexport const isObject = (fn: any): fn is object =>\n !isNil(fn) && typeof fn === 'object'\n\nexport function warn(msg: string, color = 'yellow') {\n // @ts-expect-error type error\n console.warn(`${pc.magenta('[phecda-server]')} ${pc[color](msg)}`)\n}\n","import { ForbiddenException, FrameworkException } from '../exception'\nimport { Phistroy } from '../history'\n\nimport type { Meta } from '../meta'\nimport type { P } from '../types'\nimport { warn } from '../utils'\n\nexport abstract class Context<Data = any> {\n method: string\n params: string[]\n\n static metaRecord: Record<string, Meta> = {}\n static metaDataRecord: Record<string, ReturnType<typeof parseMeta>> = {}\n static instanceRecord: Record<string, any> = {}\n static guardsRecord: Record<string, any> = {}\n static interceptorsRecord: Record<string, any > = {}\n // static serverRecord: Record<string, Context> = {}\n post: ((...params: any) => any)[]\n history = new Phistroy()\n\n constructor(public key: string, public data: Data) {\n }\n\n static registerGuard(key: string, handler: any) {\n Context.guardsRecord[key] = handler\n }\n\n static registerInterceptor(key: string, handler: any) {\n Context.interceptorsRecord[key] = handler\n }\n\n async useGuard(guards: string[], isMerge = false) {\n for (const guard of guards) {\n if (this.history.record(guard, 'guard')) {\n if (!(guard in Context.guardsRecord))\n throw new FrameworkException(`can't find guard named ${guard}`)\n if (!await Context.guardsRecord[guard](this.data, isMerge))\n throw new ForbiddenException(`Guard exception--${guard}`)\n }\n }\n }\n\n async useInterceptor(interceptors: string[], isMerge = false) {\n const ret = []\n for (const interceptor of interceptors) {\n if (this.history.record(interceptor, 'interceptor')) {\n if (!(interceptor in Context.interceptorsRecord))\n throw new FrameworkException(`can't find interceptor named ${interceptor}`)\n const post = await Context.interceptorsRecord[interceptor](this.data, isMerge)\n if (post)\n ret.push(post)\n }\n }\n this.post = ret\n }\n\n async usePost(data: any) {\n if (!this.post)\n return data\n for (const cb of this.post)\n data = (await cb(data)) | data\n\n return data\n }\n}\n\nexport function addGuard(key: string, handler: P.Guard) {\n Context.registerGuard(key, handler)\n}\n\nexport function addInterceptor(key: string, handler: P.Interceptor) {\n Context.registerInterceptor(key, handler)\n}\nexport function getInstance(tag: string) {\n return Context.instanceRecord[tag]\n}\n\nexport function parseMeta(meta: Meta) {\n const { data: { params, guards, interceptors, middlewares }, reflect, handlers } = meta\n\n params.forEach(({ index, key }, i) => {\n if (index !== i)\n warn(`the ${i + 1}th argument on the method '${key}' require decorator`)\n })\n return {\n guards,\n reflect,\n interceptors,\n middlewares,\n handlers,\n params,\n }\n}\n","import type { RequestHandler } from 'express'\nimport { defaultPipe } from '../pipe'\nimport { serverFilter } from '../filter'\nimport { FrameworkException } from '../exception'\nimport type { P, ServerCtx, ServerFilter, ServerMergeCtx } from '../types'\nimport { Context } from './base'\n\nexport class ServerContext extends Context<ServerCtx | ServerMergeCtx > {\n static pipe = defaultPipe\n static filter = serverFilter\n static middlewareRecord: Record<string, (...params: any) => any> = {}\n static useMiddleware(middlewares: string[]) {\n return middlewares.map((m) => {\n if (!(m in ServerContext.middlewareRecord))\n throw new FrameworkException(`can't find middleware named ${m}`)\n return ServerContext.middlewareRecord[m]\n })\n }\n\n async usePipe(args: { arg: any; option?: any; type: string;key: string;index: number; reflect: any }[], tag: string) {\n return ServerContext.pipe.transform?.(args, tag, this.data)\n }\n\n static useFilter(arg: any, data: ServerCtx | ServerMergeCtx) {\n return ServerContext.filter(arg, data)\n }\n\n useFilter(arg: any) {\n return ServerContext.filter(arg, this.data)\n }\n}\n\nexport function addMiddleware(key: string, handler: RequestHandler) {\n ServerContext.middlewareRecord[key] = handler\n}\n\nexport function useServerPipe(pipe: P.Pipe) {\n ServerContext.pipe = pipe\n}\nexport function useServerFilter(filter: ServerFilter) {\n ServerContext.filter = filter\n}\n","import type { Request, Response } from 'express'\nimport type { Events } from 'phecda-core'\nimport type { Meta } from './meta'\nimport type { HttpException } from './exception'\nexport type Construct<T = any> = new (...args: any[]) => T\n\nexport interface Emitter {\n on<N extends keyof Events>(eventName: N, cb: (args: Events[N]) => void): void\n once<N extends keyof Events>(eventName: N, cb: (args: Events[N]) => void): void\n off<N extends keyof Events>(eventName: N, cb: (args: Events[N]) => void): void\n removeAllListeners<N extends keyof Events>(eventName: N): void\n emit<N extends keyof Events>(eventName: N, param: Events[N]): void\n}\n\nexport type RequestType = 'get' | 'post' | 'put' | 'delete' | 'patch' | 'options' | 'head'\n\nexport type MergeType = <R extends Promise<any>[]> (...args: R) => { [K in keyof R]: Awaited<R[K]> }\n\nexport interface ServerMergeCtx {\n request: Request\n response: Response\n meta: Record<string, Meta>\n moduleMap: Record<string, any>\n isMerge: true\n tags?: string[]\n}\n\nexport interface ServerCtx {\n request: Request\n response: Response\n meta: Meta\n moduleMap: Record<string, any>\n}\nexport interface BaseError {\n error: true\n status: number\n}\nexport type ServerFilter<E extends HttpException = any> = (err: E | Error, ctx: ServerMergeCtx | ServerCtx) => any\n\nexport class Base {\n context: ServerMergeCtx | ServerCtx\n}\n\nexport namespace P{\n export interface Error extends BaseError { message: string; description: string}\n\n export type ResOrErr<R > = { [K in keyof R]: Awaited<R[K]> | Error }\n\n export type Res<T> = T\n export type Guard = ((ctx: ServerCtx, isMerge?: false) => Promise<boolean> | boolean) | ((ctx: ServerMergeCtx, isMerge?: true) => Promise<boolean> | boolean)\n export type Interceptor = ((ctx: ServerCtx, isMerge?: false) => any) | ((ctx: ServerMergeCtx, isMerge?: true) => any)\n export interface Handler {\n error?: (arg: any) => void\n }\n export interface Meta {\n route?: {\n type: RequestType\n route: string\n }\n\n define?: any\n header: Record<string, string>\n params: { type: string; index: number; key: string; option?: any }[]\n guards: string[]\n interceptors: string[]\n middlewares: string[]\n method: string\n name: string\n tag: string\n }\n export interface Pipe {\n transform(args: { arg: any; option?: boolean; key: string; type: string; index: number; reflect: any }[], tag: string, ctx: ServerCtx | ServerMergeCtx): Promise<any[]>\n }\n\n}\n","import type { ServerCtx, ServerMergeCtx } from './types'\n\nexport function isMerge(data: ServerCtx | ServerMergeCtx): data is ServerMergeCtx {\n return !!(data as ServerMergeCtx).isMerge\n}\n\nexport function resolveDep(ret: any, key: string) {\n if (key)\n return ret?.[key]\n return ret\n}\n","export const SERIES_SYMBOL = '__symbol_series__'\nexport const MERGE_SYMBOL = '__symbol_req__'\n","import type { Express, Router } from 'express'\nimport { Context, ServerContext, parseMeta } from '../context'\nimport { isObject } from '../utils'\nimport { resolveDep } from '../helper'\nimport { MERGE_SYMBOL, SERIES_SYMBOL } from '../common'\nimport type { Factory } from '../core'\nimport { BadRequestException } from '../exception'\nimport type { Meta } from '../meta'\nimport type { ServerMergeCtx } from '../types'\n\nexport interface Options {\n/**\n * 专用路由的值,默认为/__PHECDA_SERVER__,处理phecda-client发出的合并请求\n */\n route?: string\n /**\n * 全局守卫\n */\n globalGuards?: string[]\n /**\n * 全局拦截器\n */\n globalInterceptors?: string[]\n /**\n * 专用路由的中间件(work for merge request),全局中间件请在bindApp以外设置\n */\n middlewares?: string[]\n}\n\nexport function bindApp(app: Express | Router, { meta, moduleMap }: Awaited<ReturnType<typeof Factory>>, options: Options = {}) {\n const { globalGuards, globalInterceptors, route, middlewares: proMiddle } = { route: '/__PHECDA_SERVER__', globalGuards: [], globalInterceptors: [], middlewares: [], ...options } as Required<Options>\n const methodMap = {} as Record<string, (...args: any[]) => any>\n const contextMeta = {} as Record<string, Meta>\n (app as Express).post(route, (req, _res, next) => {\n (req as any)[MERGE_SYMBOL] = true\n next()\n }, ...ServerContext.useMiddleware(proMiddle), async (req, res) => {\n const { body: { category, data } } = req\n\n const contextData = {\n request: req,\n response: res,\n meta: contextMeta,\n moduleMap,\n isMerge: true,\n } as unknown as ServerMergeCtx\n\n if (!Array.isArray(data))\n return res.json(await ServerContext.useFilter(new BadRequestException('data format should be an array'), contextData))\n\n if (category !== 'series' && category !== 'parallel')\n return res.json(await ServerContext.useFilter(new BadRequestException('category should be \\'parallel\\' or \\'series\\''), contextData))\n\n contextData.tags = data.map((item: any) => item.tag)\n\n const context = new ServerContext(route, contextData)\n const ret = [] as any[]\n try {\n const mergeGuards = new Set([...globalGuards])\n const mergeInterceptors = new Set([...globalInterceptors])\n\n data.forEach(({ tag }) => {\n const {\n guards,\n interceptors,\n } = Context.metaDataRecord[tag]\n guards.forEach(guard => mergeGuards.add(guard))\n interceptors.forEach(intercept => mergeInterceptors.add(intercept))\n })\n await context.useGuard([...mergeGuards], true)\n await context.useInterceptor([...mergeInterceptors], true)\n\n if (category === 'series') {\n for (const item of data) {\n const { tag } = item\n const [name] = tag.split('-')\n const {\n reflect,\n params,\n } = Context.metaDataRecord[tag]\n const instance = moduleMap.get(name)\n\n try {\n if (!params)\n throw new BadRequestException(`\"${tag}\" doesn't exist`)\n const args = await context.usePipe(params.map(({ type, key, option, index }) => {\n const arg = resolveDep(item[type], key)\n if (typeof arg === 'string' && arg.startsWith(SERIES_SYMBOL)) {\n const [, argIndex, argKey] = arg.split('@')\n return { arg: resolveDep(ret[Number(argIndex)], argKey || key), option, index, type, key, reflect: reflect[index] }\n }\n\n return { arg, option, index, type, key, reflect: reflect[index] }\n }), tag) as any\n instance.context = contextData\n\n ret.push(await methodMap[tag](...args))\n }\n catch (e: any) {\n const m = Context.metaRecord[tag]\n m.handlers.forEach(handler => handler.error?.(e))\n ret.push(await context.useFilter(e))\n }\n }\n return res.json(await context.usePost(ret))\n }\n if (category === 'parallel') {\n return Promise.all(data.map((item: any) => {\n // eslint-disable-next-line no-async-promise-executor\n return new Promise(async (resolve) => {\n const { tag } = item\n const [name] = tag.split('-')\n const {\n reflect,\n params,\n handlers,\n } = Context.metaDataRecord[tag]\n\n const instance = moduleMap.get(name)\n\n try {\n if (!params)\n throw new BadRequestException(`\"${tag}\" doesn't exist`)\n\n const args = await context.usePipe(params.map(({ type, key, option, index }) => {\n const arg = resolveDep(item[type], key)\n return { arg, type, key, option, index, reflect: reflect[index] }\n }), tag) as any\n instance.context = contextData\n resolve(await methodMap[tag](...args))\n }\n catch (e: any) {\n handlers.forEach(handler => handler.error?.(e))\n resolve(await context.useFilter(e))\n }\n })\n })).then(async (ret) => {\n res.json(await context.usePost(ret))\n })\n }\n }\n catch (e) {\n const err = await context.useFilter(e)\n res.status(err.status).json(err)\n }\n })\n for (const i of meta) {\n const { name, method, route, header, tag } = i.data\n const instance = moduleMap.get(tag)!\n const methodTag = `${tag}-${method}`\n contextMeta[methodTag] = i\n Context.metaRecord[methodTag] = i\n let {\n guards,\n reflect,\n interceptors,\n params,\n handlers,\n middlewares,\n } = Context.metaDataRecord[methodTag] ? Context.metaDataRecord[methodTag] : (Context.metaDataRecord[methodTag] = parseMeta(i))\n\n guards = [...globalGuards!, ...guards]\n interceptors = [...globalInterceptors!, ...interceptors]\n\n const handler = instance[method].bind(instance)\n methodMap[methodTag] = handler\n Context.instanceRecord[name] = instance\n if (route) {\n (app as Express)[route.type](route.route, ...ServerContext.useMiddleware(middlewares), async (req, res) => {\n const contextData = {\n request: req,\n meta: i,\n response: res,\n moduleMap,\n }\n const context = new ServerContext(methodTag, contextData)\n\n try {\n for (const name in header)\n res.set(name, header[name])\n await context.useGuard(guards)\n await context.useInterceptor(interceptors)\n const args = await context.usePipe(params.map(({ type, key, option, index }) => {\n return { arg: resolveDep((req as any)[type], key), option, key, type, index, reflect: reflect[index] }\n }), methodTag)\n instance.context = contextData\n\n const ret = await context.usePost(await handler(...args))\n if (isObject(ret))\n res.json(ret)\n else\n res.send(String(ret))\n }\n catch (e: any) {\n handlers.forEach(handler => handler.error?.(e))\n const err = await context.useFilter(e)\n res.status(err.status).json(err)\n }\n })\n }\n }\n}\n","import 'reflect-metadata'\nimport fs from 'fs'\nimport EventEmitter from 'node:events'\nimport type { Phecda } from 'phecda-core'\nimport { getExposeKey, getHandler, getState, injectProperty, registerAsync } from 'phecda-core'\nimport type { Construct, Emitter, P } from './types'\nimport { Meta } from './meta'\nimport { warn } from './utils'\n// TODO: support both emitter types and origin emitter type in future\nexport const emitter: Emitter = new EventEmitter() as any\nexport const constructorMap = new Map() // just for warn\n\nexport async function Factory(Modules: (new (...args: any) => any)[]) {\n const moduleMap = new Map<string, InstanceType<Construct>>()\n const meta: Meta[] = []\n injectProperty('watcher', ({ eventName, instance, key, options }: { eventName: string; instance: any; key: string; options?: { once: boolean } }) => {\n const fn = typeof instance[key] === 'function' ? instance[key].bind(instance) : (v: any) => instance[key] = v\n\n if (options?.once)\n (emitter as any).once(eventName, fn)\n\n else\n (emitter as any).on(eventName, fn)\n })\n\n for (const Module of Modules)\n await buildNestModule(Module, moduleMap, meta)\n\n constructorMap.clear()\n return { moduleMap, meta, output: (p = 'pmeta.js') => fs.writeFileSync(p, JSON.stringify(meta.map(item => item.data))) }\n}\n\nasync function buildNestModule(Module: Construct, map: Map<string, InstanceType<Construct>>, meta: Meta[]) {\n const paramtypes = getParamtypes(Module) as Construct[]\n let instance: InstanceType<Construct>\n const tag = Module.prototype?.__TAG__ || Module.name\n\n if (map.has(tag)) {\n instance = map.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)\n warn(`Synonym module: Module taged \"${tag}\" has been loaded before, so phecda-server won't load Module \"${Module.name}\"`)\n\n return instance\n }\n map.set(tag, undefined)\n if (paramtypes) {\n const paramtypesInstances = [] as any[]\n for (const i in paramtypes)\n paramtypesInstances[i] = await buildNestModule(paramtypes[i], map, meta)\n\n instance = new Module(...paramtypesInstances)\n }\n else {\n instance = new Module()\n }\n meta.push(...getMetaFromInstance(instance, Module.name, tag))\n await registerAsync(instance)\n map.set(tag, instance)\n constructorMap.set(tag, Module)\n return instance\n}\n\nfunction getMetaFromInstance(instance: Phecda, name: string, tag: string) {\n const vars = getExposeKey(instance).filter(item => item !== '__CLASS')\n const baseState = (getState(instance, '__CLASS') || {}) as P.Meta\n initState(baseState)\n\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.route) {\n meta.route = {\n route: (baseState.route?.route || '') + (state.route.route),\n type: state.route.type,\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 meta.params = params\n meta.define = { ...baseState.define, ...state.define }\n meta.header = { ...baseState.header, ...state.header }\n meta.middlewares = [...new Set([...baseState.middlewares, ...state.middlewares])]\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.middlewares)\n state.middlewares = []\n if (!state.guards)\n state.guards = []\n if (!state.interceptors)\n state.interceptors = []\n}\n","import type { P } from './types'\n\nexport class Meta {\n constructor(public data: P.Meta, public handlers: P.Handler[], public reflect: any[]) {\n\n }\n}\n","import { setModelVar, setState } from 'phecda-core'\n\nexport function Header(name: string, value: string) {\n return (target: any, k: PropertyKey) => {\n setModelVar(target, k)\n const state = target._namespace.__STATE_NAMESPACE__.get(k) || {}\n if (!state.header)\n state.header = {}\n\n state.header[name] = value\n setState(target, k, state)\n }\n}\n\nexport function Define(key: string, value: any) {\n return (target: any, k?: PropertyKey) => {\n if (!k) {\n k = '__CLASS'\n target = target.prototype\n }\n\n setModelVar(target, k)\n const state = target._namespace.__STATE_NAMESPACE__.get(k) || {}\n if (!state.define)\n state.define = {}\n\n state.define[key] = value\n setState(target, k, state)\n }\n}\n\nexport * from './param'\nexport * from './route'\n","import { setModelVar, setState } from 'phecda-core'\n\nexport function BaseParam(type: string, key: string, option?: any): any {\n return (target: any, k: PropertyKey, index: number) => {\n setModelVar(target, k)\n\n const state = target._namespace.__STATE_NAMESPACE__.get(k) || {}\n if (!state.params)\n state.params = []\n\n state.params.push({ type, key, index, option })\n setState(target, k, state)\n }\n}\n\nexport function Body(key = '', pipeOpts?: any) {\n return BaseParam('body', key, pipeOpts)\n}\nexport function Query(key = '', pipeOpts?: any) {\n return BaseParam('query', key, pipeOpts)\n}\nexport function Param(key: string, pipeOpts?: any) {\n return BaseParam('params', key, pipeOpts)\n}\n","import { setModelVar, setState } from 'phecda-core'\n\nexport function Route(route: string, type?: string): any {\n return (target: any, key?: PropertyKey) => {\n if (!key)\n key = '__CLASS'\n target = key === '__CLASS' ? target.prototype : target\n\n setModelVar(target, key)\n\n const state = target._namespace.__STATE_NAMESPACE__.get(key) || {}\n state.route = {\n route,\n type,\n }\n setState(target, key, state)\n }\n}\n\nexport function Get(route: string) {\n return Route(route, 'get')\n}\n\nexport function Post(route: string) {\n return Route(route, 'post')\n}\nexport function Put(route: string) {\n return Route(route, 'put')\n}\n\nexport function Patch(route: string) {\n return Route(route, 'patch')\n}\nexport function Delete(route: string) {\n return Route(route, 'delete')\n}\n\nexport function Controller(route: string) {\n return Route(route)\n}\n\nexport function Guard(...guards: string[]): any {\n return (target: any, key?: PropertyKey) => {\n if (!key)\n key = '__CLASS'\n target = key === '__CLASS' ? target.prototype : target\n\n setModelVar(target, key)\n\n const state = target._namespace.__STATE_NAMESPACE__.get(key) || {}\n if (!state.guards)\n state.guards = []\n state.guards.push(...guards)\n setState(target, key, state)\n }\n}\n\nexport function Middle(...middlewares: string[]): any {\n return (target: any, key?: PropertyKey) => {\n if (!key)\n key = '__CLASS'\n target = key === '__CLASS' ? target.prototype : target\n\n setModelVar(target, key)\n\n const state = target._namespace.__STATE_NAMESPACE__.get(key) || {}\n if (!state.middlewares)\n state.middlewares = []\n state.middlewares.push(...middlewares)\n setState(target, key, state)\n }\n}\n\nexport function Interceptor(...interceptors: string[]): any {\n return (target: any, key?: PropertyKey) => {\n if (!key)\n key = '__CLASS'\n target = key === '__CLASS' ? target.prototype : target\n\n setModelVar(target, key)\n\n const state = target._namespace.__STATE_NAMESPACE__.get(key) || {}\n if (!state.interceptors)\n state.interceptors = []\n state.interceptors.push(...interceptors)\n setState(target, key, state)\n }\n}\n"],"mappings":"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","names":["HttpException","Error","message","status","description","constructor","data","error","ValidateException","HttpException","constructor","message","defaultPipe","transform","args","i","option","arg","reflect","isPhecda","ret","plainToClass","err","length","ValidateException","data","Number","Boolean","includes","Object","is","NaN","map","item","UndefinedException","HttpException","constructor","message","ForbiddenException","HttpException","constructor","message","BadRequestException","HttpException","constructor","message","NotFoundException","HttpException","constructor","message","ConflictException","HttpException","constructor","message","BadGatewayException","HttpException","constructor","message","InvalidInputException","HttpException","constructor","message","UnsupportedMediaTypeException","HttpException","constructor","message","PayloadLargeException","HttpException","constructor","message","TimeoutException","HttpException","constructor","message","UnauthorizedException","HttpException","constructor","message","ServiceUnavailableException","HttpException","constructor","message","FrameworkException","HttpException","constructor","message","serverFilter","e","HttpException","console","error","stack","UndefinedException","message","data","Phistroy","guard","interceptor","record","name","type","includes","push","isUndefined","obj","isNil","isObject","fn","warn","msg","color","console","pc","magenta","Context","key","data","method","params","post","history","constructor","Phistroy","registerGuard","handler","guardsRecord","registerInterceptor","interceptorsRecord","useGuard","guards","isMerge","guard","record","FrameworkException","ForbiddenException","useInterceptor","interceptors","ret","interceptor","push","usePost","cb","metaRecord","metaDataRecord","instanceRecord","addGuard","addInterceptor","getInstance","tag","parseMeta","meta","middlewares","reflect","handlers","forEach","index","i","warn","ServerContext","Context","useMiddleware","middlewares","map","m","middlewareRecord","FrameworkException","usePipe","args","tag","pipe","transform","data","useFilter","arg","filter","defaultPipe","serverFilter","addMiddleware","key","handler","useServerPipe","useServerFilter","Base","context","isMerge","data","resolveDep","ret","key","SERIES_SYMBOL","MERGE_SYMBOL","bindApp","app","meta","moduleMap","options","globalGuards","globalInterceptors","route","middlewares","proMiddle","methodMap","contextMeta","post","req","_res","next","MERGE_SYMBOL","ServerContext","useMiddleware","res","body","category","data","contextData","request","response","isMerge","Array","isArray","json","useFilter","BadRequestException","tags","map","item","tag","context","ret","mergeGuards","Set","mergeInterceptors","forEach","guards","interceptors","Context","metaDataRecord","guard","add","intercept","useGuard","useInterceptor","name","split","reflect","params","instance","get","args","usePipe","type","key","option","index","arg","resolveDep","startsWith","SERIES_SYMBOL","argIndex","argKey","Number","push","e","m","metaRecord","handlers","handler","error","usePost","Promise","all","resolve","then","err","status","i","method","header","methodTag","parseMeta","bind","instanceRecord","set","isObject","send","String","import_phecda_core","Meta","data","handlers","reflect","constructor","emitter","EventEmitter","constructorMap","Map","Factory","Modules","moduleMap","meta","injectProperty","eventName","instance","key","options","fn","bind","v","once","on","Module","buildNestModule","clear","output","p","fs","writeFileSync","JSON","stringify","map","item","data","paramtypes","getParamtypes","tag","prototype","__TAG__","name","has","get","Error","warn","set","undefined","paramtypesInstances","i","push","getMetaFromInstance","registerAsync","vars","getExposeKey","filter","baseState","getState","initState","state","route","type","method","params","unshift","index","define","header","middlewares","Set","guards","interceptors","Meta","getHandler","Reflect","getMetadata","import_phecda_core","import_phecda_core","BaseParam","type","key","option","target","k","index","setModelVar","state","_namespace","__STATE_NAMESPACE__","get","params","push","setState","Body","pipeOpts","Query","Param","import_phecda_core","Route","route","type","target","key","prototype","setModelVar","state","_namespace","__STATE_NAMESPACE__","get","setState","Get","Post","Put","Patch","Delete","Controller","Guard","guards","push","Middle","middlewares","Interceptor","interceptors","Header","name","value","target","k","setModelVar","state","_namespace","__STATE_NAMESPACE__","get","header","setState","Define","key","prototype","define"]}
|
package/dist/index.mjs
CHANGED
|
@@ -41,18 +41,18 @@ __name(ValidateException, "ValidateException");
|
|
|
41
41
|
|
|
42
42
|
// src/pipe.ts
|
|
43
43
|
var defaultPipe = {
|
|
44
|
-
async transform(args
|
|
44
|
+
async transform(args) {
|
|
45
45
|
for (const i in args) {
|
|
46
|
-
const {
|
|
47
|
-
if (
|
|
46
|
+
const { option, arg, reflect } = args[i];
|
|
47
|
+
if (option === false)
|
|
48
48
|
continue;
|
|
49
|
-
if (!reflect
|
|
50
|
-
if (
|
|
51
|
-
args[i].arg =
|
|
49
|
+
if (!reflect) {
|
|
50
|
+
if (option && arg)
|
|
51
|
+
args[i].arg = option(arg);
|
|
52
52
|
continue;
|
|
53
53
|
}
|
|
54
|
-
if (isPhecda(reflect
|
|
55
|
-
const ret = await plainToClass(reflect
|
|
54
|
+
if (isPhecda(reflect)) {
|
|
55
|
+
const ret = await plainToClass(reflect, arg, {
|
|
56
56
|
transform: true
|
|
57
57
|
});
|
|
58
58
|
if (ret.err.length > 0)
|
|
@@ -62,9 +62,9 @@ var defaultPipe = {
|
|
|
62
62
|
if ([
|
|
63
63
|
Number,
|
|
64
64
|
Boolean
|
|
65
|
-
].includes(reflect
|
|
66
|
-
args[i].arg = reflect
|
|
67
|
-
if (reflect
|
|
65
|
+
].includes(reflect)) {
|
|
66
|
+
args[i].arg = reflect(arg);
|
|
67
|
+
if (reflect === Number && Object.is(args[i].arg, NaN))
|
|
68
68
|
throw new ValidateException(`parameter ${Number(i) + 1} should be a number`);
|
|
69
69
|
}
|
|
70
70
|
}
|
|
@@ -202,6 +202,16 @@ var Phistroy = class {
|
|
|
202
202
|
};
|
|
203
203
|
__name(Phistroy, "Phistroy");
|
|
204
204
|
|
|
205
|
+
// src/utils.ts
|
|
206
|
+
import pc from "picocolors";
|
|
207
|
+
var isUndefined = /* @__PURE__ */ __name((obj) => typeof obj === "undefined", "isUndefined");
|
|
208
|
+
var isNil = /* @__PURE__ */ __name((obj) => isUndefined(obj) || obj === null, "isNil");
|
|
209
|
+
var isObject = /* @__PURE__ */ __name((fn) => !isNil(fn) && typeof fn === "object", "isObject");
|
|
210
|
+
function warn(msg, color = "yellow") {
|
|
211
|
+
console.warn(`${pc.magenta("[phecda-server]")} ${pc[color](msg)}`);
|
|
212
|
+
}
|
|
213
|
+
__name(warn, "warn");
|
|
214
|
+
|
|
205
215
|
// src/context/base.ts
|
|
206
216
|
var _Context = class {
|
|
207
217
|
key;
|
|
@@ -273,20 +283,17 @@ function getInstance(tag) {
|
|
|
273
283
|
__name(getInstance, "getInstance");
|
|
274
284
|
function parseMeta(meta) {
|
|
275
285
|
const { data: { params, guards, interceptors, middlewares }, reflect, handlers } = meta;
|
|
286
|
+
params.forEach(({ index, key }, i) => {
|
|
287
|
+
if (index !== i)
|
|
288
|
+
warn(`the ${i + 1}th argument on the method '${key}' require decorator`);
|
|
289
|
+
});
|
|
276
290
|
return {
|
|
277
291
|
guards,
|
|
278
292
|
reflect,
|
|
279
293
|
interceptors,
|
|
280
294
|
middlewares,
|
|
281
295
|
handlers,
|
|
282
|
-
params
|
|
283
|
-
const { type, key, validate } = param;
|
|
284
|
-
return {
|
|
285
|
-
type,
|
|
286
|
-
key,
|
|
287
|
-
validate
|
|
288
|
-
};
|
|
289
|
-
})
|
|
296
|
+
params
|
|
290
297
|
};
|
|
291
298
|
}
|
|
292
299
|
__name(parseMeta, "parseMeta");
|
|
@@ -300,8 +307,8 @@ var _ServerContext = class extends Context {
|
|
|
300
307
|
return _ServerContext.middlewareRecord[m];
|
|
301
308
|
});
|
|
302
309
|
}
|
|
303
|
-
async usePipe(args,
|
|
304
|
-
return _ServerContext.pipe.transform?.(args,
|
|
310
|
+
async usePipe(args, tag) {
|
|
311
|
+
return _ServerContext.pipe.transform?.(args, tag, this.data);
|
|
305
312
|
}
|
|
306
313
|
static useFilter(arg, data) {
|
|
307
314
|
return _ServerContext.filter(arg, data);
|
|
@@ -334,16 +341,6 @@ var Base = class {
|
|
|
334
341
|
};
|
|
335
342
|
__name(Base, "Base");
|
|
336
343
|
|
|
337
|
-
// src/utils.ts
|
|
338
|
-
import pc from "picocolors";
|
|
339
|
-
var isUndefined = /* @__PURE__ */ __name((obj) => typeof obj === "undefined", "isUndefined");
|
|
340
|
-
var isNil = /* @__PURE__ */ __name((obj) => isUndefined(obj) || obj === null, "isNil");
|
|
341
|
-
var isObject = /* @__PURE__ */ __name((fn) => !isNil(fn) && typeof fn === "object", "isObject");
|
|
342
|
-
function warn(msg) {
|
|
343
|
-
console.warn(`${pc.magenta("[phecda-server]")} ${pc.yellow(msg)}`);
|
|
344
|
-
}
|
|
345
|
-
__name(warn, "warn");
|
|
346
|
-
|
|
347
344
|
// src/helper.ts
|
|
348
345
|
function isMerge(data) {
|
|
349
346
|
return !!data.isMerge;
|
|
@@ -380,6 +377,7 @@ function bindApp(app, { meta, moduleMap }, options = {}) {
|
|
|
380
377
|
request: req,
|
|
381
378
|
response: res,
|
|
382
379
|
meta: contextMeta,
|
|
380
|
+
moduleMap,
|
|
383
381
|
isMerge: true
|
|
384
382
|
};
|
|
385
383
|
if (!Array.isArray(data))
|
|
@@ -416,20 +414,28 @@ function bindApp(app, { meta, moduleMap }, options = {}) {
|
|
|
416
414
|
try {
|
|
417
415
|
if (!params)
|
|
418
416
|
throw new BadRequestException(`"${tag}" doesn't exist`);
|
|
419
|
-
const args = await context.usePipe(params.map(({ type, key,
|
|
417
|
+
const args = await context.usePipe(params.map(({ type, key, option, index }) => {
|
|
420
418
|
const arg = resolveDep(item[type], key);
|
|
421
419
|
if (typeof arg === "string" && arg.startsWith(SERIES_SYMBOL)) {
|
|
422
|
-
const [,
|
|
420
|
+
const [, argIndex, argKey] = arg.split("@");
|
|
423
421
|
return {
|
|
424
|
-
arg: resolveDep(ret[Number(
|
|
425
|
-
|
|
422
|
+
arg: resolveDep(ret[Number(argIndex)], argKey || key),
|
|
423
|
+
option,
|
|
424
|
+
index,
|
|
425
|
+
type,
|
|
426
|
+
key,
|
|
427
|
+
reflect: reflect[index]
|
|
426
428
|
};
|
|
427
429
|
}
|
|
428
430
|
return {
|
|
429
431
|
arg,
|
|
430
|
-
|
|
432
|
+
option,
|
|
433
|
+
index,
|
|
434
|
+
type,
|
|
435
|
+
key,
|
|
436
|
+
reflect: reflect[index]
|
|
431
437
|
};
|
|
432
|
-
}),
|
|
438
|
+
}), tag);
|
|
433
439
|
instance.context = contextData;
|
|
434
440
|
ret.push(await methodMap[tag](...args));
|
|
435
441
|
} catch (e) {
|
|
@@ -450,13 +456,17 @@ function bindApp(app, { meta, moduleMap }, options = {}) {
|
|
|
450
456
|
try {
|
|
451
457
|
if (!params)
|
|
452
458
|
throw new BadRequestException(`"${tag}" doesn't exist`);
|
|
453
|
-
const args = await context.usePipe(params.map(({ type, key,
|
|
459
|
+
const args = await context.usePipe(params.map(({ type, key, option, index }) => {
|
|
454
460
|
const arg = resolveDep(item[type], key);
|
|
455
461
|
return {
|
|
456
462
|
arg,
|
|
457
|
-
|
|
463
|
+
type,
|
|
464
|
+
key,
|
|
465
|
+
option,
|
|
466
|
+
index,
|
|
467
|
+
reflect: reflect[index]
|
|
458
468
|
};
|
|
459
|
-
}),
|
|
469
|
+
}), tag);
|
|
460
470
|
instance.context = contextData;
|
|
461
471
|
resolve(await methodMap[tag](...args));
|
|
462
472
|
} catch (e) {
|
|
@@ -496,7 +506,8 @@ function bindApp(app, { meta, moduleMap }, options = {}) {
|
|
|
496
506
|
const contextData = {
|
|
497
507
|
request: req,
|
|
498
508
|
meta: i,
|
|
499
|
-
response: res
|
|
509
|
+
response: res,
|
|
510
|
+
moduleMap
|
|
500
511
|
};
|
|
501
512
|
const context = new ServerContext(methodTag, contextData);
|
|
502
513
|
try {
|
|
@@ -504,12 +515,16 @@ function bindApp(app, { meta, moduleMap }, options = {}) {
|
|
|
504
515
|
res.set(name2, header[name2]);
|
|
505
516
|
await context.useGuard(guards);
|
|
506
517
|
await context.useInterceptor(interceptors);
|
|
507
|
-
const args = await context.usePipe(params.map(({ type, key,
|
|
518
|
+
const args = await context.usePipe(params.map(({ type, key, option, index }) => {
|
|
508
519
|
return {
|
|
509
520
|
arg: resolveDep(req[type], key),
|
|
510
|
-
|
|
521
|
+
option,
|
|
522
|
+
key,
|
|
523
|
+
type,
|
|
524
|
+
index,
|
|
525
|
+
reflect: reflect[index]
|
|
511
526
|
};
|
|
512
|
-
}),
|
|
527
|
+
}), methodTag);
|
|
513
528
|
instance.context = contextData;
|
|
514
529
|
const ret = await context.usePost(await handler(...args));
|
|
515
530
|
if (isObject(ret))
|
|
@@ -548,6 +563,7 @@ __name(Meta, "Meta");
|
|
|
548
563
|
|
|
549
564
|
// src/core.ts
|
|
550
565
|
var emitter = new EventEmitter();
|
|
566
|
+
var constructorMap = /* @__PURE__ */ new Map();
|
|
551
567
|
async function Factory(Modules) {
|
|
552
568
|
const moduleMap = /* @__PURE__ */ new Map();
|
|
553
569
|
const meta = [];
|
|
@@ -560,6 +576,7 @@ async function Factory(Modules) {
|
|
|
560
576
|
});
|
|
561
577
|
for (const Module of Modules)
|
|
562
578
|
await buildNestModule(Module, moduleMap, meta);
|
|
579
|
+
constructorMap.clear();
|
|
563
580
|
return {
|
|
564
581
|
moduleMap,
|
|
565
582
|
meta,
|
|
@@ -567,7 +584,6 @@ async function Factory(Modules) {
|
|
|
567
584
|
};
|
|
568
585
|
}
|
|
569
586
|
__name(Factory, "Factory");
|
|
570
|
-
var constructorMap = /* @__PURE__ */ new Map();
|
|
571
587
|
async function buildNestModule(Module, map, meta) {
|
|
572
588
|
const paramtypes = getParamtypes(Module);
|
|
573
589
|
let instance;
|
|
@@ -673,7 +689,7 @@ import { setModelVar as setModelVar3, setState as setState3 } from "phecda-core"
|
|
|
673
689
|
|
|
674
690
|
// src/decorators/param.ts
|
|
675
691
|
import { setModelVar, setState } from "phecda-core";
|
|
676
|
-
function BaseParam(type, key,
|
|
692
|
+
function BaseParam(type, key, option) {
|
|
677
693
|
return (target, k, index) => {
|
|
678
694
|
setModelVar(target, k);
|
|
679
695
|
const state = target._namespace.__STATE_NAMESPACE__.get(k) || {};
|
|
@@ -683,7 +699,7 @@ function BaseParam(type, key, validate) {
|
|
|
683
699
|
type,
|
|
684
700
|
key,
|
|
685
701
|
index,
|
|
686
|
-
|
|
702
|
+
option
|
|
687
703
|
});
|
|
688
704
|
setState(target, k, state);
|
|
689
705
|
};
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/pipe.ts","../src/exception/base.ts","../src/exception/validate.ts","../src/exception/undefine.ts","../src/exception/forbidden.ts","../src/exception/bad-request.ts","../src/exception/not-found.ts","../src/exception/conflict.ts","../src/exception/bad-gateway.ts","../src/exception/invalid-input.ts","../src/exception/media-type.ts","../src/exception/payload-large.ts","../src/exception/timeout.ts","../src/exception/unauthorized.ts","../src/exception/unavailable-service.ts","../src/exception/framework.ts","../src/filter.ts","../src/history.ts","../src/context/base.ts","../src/context/server.ts","../src/types.ts","../src/utils.ts","../src/helper.ts","../src/common.ts","../src/server/express.ts","../src/core.ts","../src/meta.ts","../src/decorators/index.ts","../src/decorators/param.ts","../src/decorators/route.ts","../src/index.ts"],"sourcesContent":["import { isPhecda, plainToClass } from 'phecda-core'\nimport { ValidateException } from './exception/validate'\n\nimport type { P } from './types'\n\nexport const defaultPipe = {\n // todo: add more params\n async transform(args: { arg: any; validate: any }[], reflect: any[]) {\n for (const i in args) {\n const { validate, arg } = args[i]\n if (validate === false)\n continue\n if (!reflect[i]) {\n if (validate && arg)\n args[i].arg = validate(arg)\n\n continue\n }\n\n if (isPhecda(reflect[i])) {\n const ret = await plainToClass(reflect[i], arg, { transform: true })\n if (ret.err.length > 0)\n throw new ValidateException(ret.err[0])\n args[i].arg = ret.data\n }\n else {\n if ([Number, Boolean].includes(reflect[i])) {\n args[i].arg = reflect[i](arg)\n\n if (reflect[i] === Number && Object.is(args[i].arg, NaN))\n throw new ValidateException(`parameter ${Number(i) + 1} should be a number`)\n }\n }\n }\n return args.map(item => item.arg)\n },\n} as P.Pipe\n","export class HttpException extends Error {\n constructor(public message: string, public status: number, public description = 'Http exception') {\n super(message)\n }\n\n get data() {\n return { message: this.message, description: this.description, status: this.status, error: true }\n }\n}\n","import { HttpException } from './base'\n\nexport class ValidateException extends HttpException {\n constructor(message: string) {\n super(message, 400, 'Validate exception')\n }\n}\n","import { HttpException } from './base'\n\nexport class UndefinedException extends HttpException {\n constructor(message: string) {\n super(message, 500, 'Undefined error')\n }\n}\n","import { HttpException } from './base'\n\nexport class ForbiddenException extends HttpException {\n constructor(message: string) {\n super(message, 403, 'Forbidden resource')\n }\n}\n","import { HttpException } from './base'\n\nexport class BadRequestException extends HttpException {\n constructor(message: string) {\n super(message, 400, 'Bad Request')\n }\n}\n","import { HttpException } from './base'\n\nexport class NotFoundException extends HttpException {\n constructor(message: string) {\n super(message, 404, 'Not Found')\n }\n}\n","import { HttpException } from './base'\n\nexport class ConflictException extends HttpException {\n constructor(message: string) {\n super(message, 409, 'Conflict')\n }\n}\n","import { HttpException } from './base'\n\nexport class BadGatewayException extends HttpException {\n constructor(message: string) {\n super(message, 502, 'Bad Gatrway')\n }\n}\n","import { HttpException } from './base'\n\nexport class InvalidInputException extends HttpException {\n constructor(message: string) {\n super(message, 502, 'Invalid Input')\n }\n}\n","import { HttpException } from './base'\n\nexport class UnsupportedMediaTypeException extends HttpException {\n constructor(message: string) {\n super(message, 415, 'Unsupported Media Type')\n }\n}\n","import { HttpException } from './base'\n\nexport class PayloadLargeException extends HttpException {\n constructor(message: string) {\n super(message, 413, 'Payload Too Large')\n }\n}\n","import { HttpException } from './base'\n\nexport class TimeoutException extends HttpException {\n constructor(message: string) {\n super(message, 408, 'Request Timeout',\n )\n }\n}\n","import { HttpException } from './base'\n\nexport class UnauthorizedException extends HttpException {\n constructor(message: string) {\n super(message, 401, 'Unauthorized')\n }\n}\n","import { HttpException } from './base'\n\nexport class ServiceUnavailableException extends HttpException {\n constructor(message: string) {\n super(message, 503, 'Service Unavailable')\n }\n}\n","import { HttpException } from './base'\n\nexport class FrameworkException extends HttpException {\n constructor(message: string) {\n super(`[phecda-server] ${message}`, 500, 'Framework Error')\n }\n}\n","import { HttpException, UndefinedException } from './exception'\nimport type { ServerFilter } from './types'\n\nexport const serverFilter: ServerFilter = (e: any) => {\n if (!(e instanceof HttpException)) {\n console.error(e.stack)\n e = new UndefinedException(e.message || e)\n }\n else {\n console.error(e.message)\n }\n\n return e.data\n}\n","export class Phistroy {\n guard: string[] = []\n interceptor: string[] = []\n record(name: string, type: 'guard' | 'interceptor') {\n if (!this[type].includes(name)) {\n this[type].push(name)\n return true\n }\n return false\n }\n}\n","import { ForbiddenException, FrameworkException } from '../exception'\nimport { Phistroy } from '../history'\n\nimport type { Meta } from '../meta'\nimport type { P } from '../types'\n\nexport abstract class Context<Data = any> {\n method: string\n params: string[]\n\n static metaRecord: Record<string, Meta> = {}\n static metaDataRecord: Record<string, ReturnType<typeof parseMeta>> = {}\n static instanceRecord: Record<string, any> = {}\n static guardsRecord: Record<string, any> = {}\n static interceptorsRecord: Record<string, any > = {}\n // static serverRecord: Record<string, Context> = {}\n post: ((...params: any) => any)[]\n history = new Phistroy()\n\n constructor(public key: string, public data: Data) {\n }\n\n static registerGuard(key: string, handler: any) {\n Context.guardsRecord[key] = handler\n }\n\n static registerInterceptor(key: string, handler: any) {\n Context.interceptorsRecord[key] = handler\n }\n\n async useGuard(guards: string[], isMerge = false) {\n for (const guard of guards) {\n if (this.history.record(guard, 'guard')) {\n if (!(guard in Context.guardsRecord))\n throw new FrameworkException(`can't find guard named ${guard}`)\n if (!await Context.guardsRecord[guard](this.data, isMerge))\n throw new ForbiddenException(`Guard exception--${guard}`)\n }\n }\n }\n\n async useInterceptor(interceptors: string[], isMerge = false) {\n const ret = []\n for (const interceptor of interceptors) {\n if (this.history.record(interceptor, 'interceptor')) {\n if (!(interceptor in Context.interceptorsRecord))\n throw new FrameworkException(`can't find interceptor named ${interceptor}`)\n const post = await Context.interceptorsRecord[interceptor](this.data, isMerge)\n if (post)\n ret.push(post)\n }\n }\n this.post = ret\n }\n\n async usePost(data: any) {\n if (!this.post)\n return data\n for (const cb of this.post)\n data = (await cb(data)) | data\n\n return data\n }\n}\n\nexport function addGuard(key: string, handler: P.Guard) {\n Context.registerGuard(key, handler)\n}\n\nexport function addInterceptor(key: string, handler: P.Interceptor) {\n Context.registerInterceptor(key, handler)\n}\nexport function getInstance(tag: string) {\n return Context.instanceRecord[tag]\n}\n\nexport function parseMeta(meta: Meta) {\n const { data: { params, guards, interceptors, middlewares }, reflect, handlers } = meta\n return {\n guards,\n reflect,\n interceptors,\n middlewares,\n handlers,\n params: params.map((param) => {\n const { type, key, validate } = param\n return { type, key, validate }\n }),\n }\n}\n","import type { RequestHandler } from 'express'\nimport { defaultPipe } from '../pipe'\nimport { serverFilter } from '../filter'\nimport { FrameworkException } from '../exception'\nimport type { P, ServerCtx, ServerFilter, ServerMergeCtx } from '../types'\nimport { Context } from './base'\n\nexport class ServerContext extends Context<ServerCtx | ServerMergeCtx > {\n static pipe = defaultPipe\n static filter = serverFilter\n static middlewareRecord: Record<string, (...params: any) => any> = {}\n static useMiddleware(middlewares: string[]) {\n return middlewares.map((m) => {\n if (!(m in ServerContext.middlewareRecord))\n throw new FrameworkException(`can't find middleware named ${m}`)\n return ServerContext.middlewareRecord[m]\n })\n }\n\n async usePipe(args: { arg: any; validate?: boolean }[], reflect: any[]) {\n return ServerContext.pipe.transform?.(args, reflect, this.data)\n }\n\n static useFilter(arg: any, data: ServerCtx | ServerMergeCtx) {\n return ServerContext.filter(arg, data)\n }\n\n useFilter(arg: any) {\n return ServerContext.filter(arg, this.data)\n }\n}\n\nexport function addMiddleware(key: string, handler: RequestHandler) {\n ServerContext.middlewareRecord[key] = handler\n}\n\nexport function useServerPipe(pipe: P.Pipe) {\n ServerContext.pipe = pipe\n}\nexport function useServerFilter(filter: ServerFilter) {\n ServerContext.filter = filter\n}\n","import type { Request, Response } from 'express'\nimport type { Events } from 'phecda-core'\nimport type { Meta } from './meta'\nimport type { HttpException } from './exception'\nexport type Construct<T = any> = new (...args: any[]) => T\n\nexport interface Emitter {\n on<N extends keyof Events>(eventName: N, cb: (args: Events[N]) => void): void\n once<N extends keyof Events>(eventName: N, cb: (args: Events[N]) => void): void\n off<N extends keyof Events>(eventName: N, cb: (args: Events[N]) => void): void\n removeAllListeners<N extends keyof Events>(eventName: N): void\n emit<N extends keyof Events>(eventName: N, param: Events[N]): void\n}\n\nexport type RequestType = 'get' | 'post' | 'put' | 'delete' | 'patch' | 'options' | 'head'\n\nexport type MergeType = <R extends Promise<any>[]> (...args: R) => { [K in keyof R]: Awaited<R[K]> }\n\nexport interface ServerMergeCtx {\n request: Request\n response: Response\n meta: Record<string, Meta>\n isMerge: true\n tags?: string[]\n}\n\nexport interface ServerCtx {\n request: Request\n response: Response\n meta: Meta\n}\nexport interface BaseError {\n error: true\n status: number\n}\nexport type ServerFilter<E extends HttpException = any> = (err: E | Error, ctx: ServerMergeCtx | ServerCtx) => any\n\nexport class Base {\n context: ServerMergeCtx | ServerCtx\n}\n\nexport namespace P{\n export interface Error extends BaseError { message: string; description: string}\n\n export type ResOrErr<R > = { [K in keyof R]: Awaited<R[K]> | Error }\n\n export type Res<T> = T\n export type Guard = ((ctx: ServerCtx, isMerge?: false) => Promise<boolean> | boolean) | ((ctx: ServerMergeCtx, isMerge?: true) => Promise<boolean> | boolean)\n export type Interceptor = ((ctx: ServerCtx, isMerge?: false) => any) | ((ctx: ServerMergeCtx, isMerge?: true) => any)\n export interface Handler {\n error?: (arg: any) => void\n }\n export interface Meta {\n route?: {\n type: RequestType\n route: string\n }\n // mq?: {\n // queue: string\n // routeKey: string\n // options: amqplib.Options.Consume\n\n // }\n define?: any\n header: Record<string, string>\n params: { type: string; index: number; key: string; validate?: boolean }[]\n guards: string[]\n interceptors: string[]\n middlewares: string[]\n method: string\n name: string\n tag: string\n }\n export interface Pipe {\n transform(args: { arg: any; validate?: boolean }[], reflect: any[], ctx: ServerCtx | ServerMergeCtx): Promise<any[]>\n }\n\n}\n","import pc from 'picocolors'\nexport const isUndefined = (obj: any): obj is undefined =>\n typeof obj === 'undefined'\nexport const isNil = (obj: any): obj is null | undefined =>\n isUndefined(obj) || obj === null\n\nexport const isObject = (fn: any): fn is object =>\n !isNil(fn) && typeof fn === 'object'\n\nexport function warn(msg: string) {\n console.warn(`${pc.magenta('[phecda-server]')} ${pc.yellow(msg)}`)\n}\n","import type { ServerCtx, ServerMergeCtx } from './types'\n\nexport function isMerge(data: ServerCtx | ServerMergeCtx): data is ServerMergeCtx {\n return !!(data as ServerMergeCtx).isMerge\n}\n\nexport function resolveDep(ret: any, key: string) {\n if (key)\n return ret?.[key]\n return ret\n}\n","export const SERIES_SYMBOL = '__symbol_series__'\nexport const MERGE_SYMBOL = '__symbol_req__'\n","import type { Express, Router } from 'express'\nimport { Context, ServerContext, parseMeta } from '../context'\nimport { isObject } from '../utils'\nimport { resolveDep } from '../helper'\nimport { MERGE_SYMBOL, SERIES_SYMBOL } from '../common'\nimport type { Factory } from '../core'\nimport { BadRequestException } from '../exception'\nimport type { Meta } from '../meta'\nimport type { ServerMergeCtx } from '../types'\n\nexport interface Options {\n/**\n * 专用路由的值,默认为/__PHECDA_SERVER__,处理phecda-client发出的合并请求\n */\n route?: string\n /**\n * 全局守卫\n */\n globalGuards?: string[]\n /**\n * 全局拦截器\n */\n globalInterceptors?: string[]\n /**\n * 专用路由的中间件(work for merge request),全局中间件请在bindApp以外设置\n */\n middlewares?: string[]\n}\n\nexport function bindApp(app: Express | Router, { meta, moduleMap }: Awaited<ReturnType<typeof Factory>>, options: Options = {}) {\n const { globalGuards, globalInterceptors, route, middlewares: proMiddle } = { route: '/__PHECDA_SERVER__', globalGuards: [], globalInterceptors: [], middlewares: [], ...options } as Required<Options>\n const methodMap = {} as Record<string, (...args: any[]) => any>\n const contextMeta = {} as Record<string, Meta>\n (app as Express).post(route, (req, _res, next) => {\n (req as any)[MERGE_SYMBOL] = true\n next()\n }, ...ServerContext.useMiddleware(proMiddle), async (req, res) => {\n const { body: { category, data } } = req\n\n const contextData = {\n request: req,\n response: res,\n meta: contextMeta,\n isMerge: true,\n } as unknown as ServerMergeCtx\n\n if (!Array.isArray(data))\n return res.json(await ServerContext.useFilter(new BadRequestException('data format should be an array'), contextData))\n\n if (category !== 'series' && category !== 'parallel')\n return res.json(await ServerContext.useFilter(new BadRequestException('category should be \\'parallel\\' or \\'series\\''), contextData))\n\n contextData.tags = data.map((item: any) => item.tag)\n\n const context = new ServerContext(route, contextData)\n const ret = [] as any[]\n try {\n const mergeGuards = new Set([...globalGuards])\n const mergeInterceptors = new Set([...globalInterceptors])\n\n data.forEach(({ tag }) => {\n const {\n guards,\n interceptors,\n } = Context.metaDataRecord[tag]\n guards.forEach(guard => mergeGuards.add(guard))\n interceptors.forEach(intercept => mergeInterceptors.add(intercept))\n })\n await context.useGuard([...mergeGuards], true)\n await context.useInterceptor([...mergeInterceptors], true)\n\n if (category === 'series') {\n for (const item of data) {\n const { tag } = item\n const [name] = tag.split('-')\n const {\n reflect,\n params,\n } = Context.metaDataRecord[tag]\n const instance = moduleMap.get(name)\n\n try {\n if (!params)\n throw new BadRequestException(`\"${tag}\" doesn't exist`)\n const args = await context.usePipe(params.map(({ type, key, validate }) => {\n const arg = resolveDep(item[type], key)\n if (typeof arg === 'string' && arg.startsWith(SERIES_SYMBOL)) {\n const [, index, argKey] = arg.split('@')\n return { arg: resolveDep(ret[Number(index)], argKey || key), validate }\n }\n\n return { arg, validate }\n }), reflect) as any\n instance.context = contextData\n\n ret.push(await methodMap[tag](...args))\n }\n catch (e: any) {\n const m = Context.metaRecord[tag]\n m.handlers.forEach(handler => handler.error?.(e))\n ret.push(await context.useFilter(e))\n }\n }\n return res.json(await context.usePost(ret))\n }\n if (category === 'parallel') {\n return Promise.all(data.map((item: any) => {\n // eslint-disable-next-line no-async-promise-executor\n return new Promise(async (resolve) => {\n const { tag } = item\n const [name] = tag.split('-')\n const {\n reflect,\n params,\n handlers,\n } = Context.metaDataRecord[tag]\n\n const instance = moduleMap.get(name)\n\n try {\n if (!params)\n throw new BadRequestException(`\"${tag}\" doesn't exist`)\n\n const args = await context.usePipe(params.map(({ type, key, validate }) => {\n const arg = resolveDep(item[type], key)\n return { arg, validate }\n }), reflect) as any\n instance.context = contextData\n resolve(await methodMap[tag](...args))\n }\n catch (e: any) {\n handlers.forEach(handler => handler.error?.(e))\n resolve(await context.useFilter(e))\n }\n })\n })).then(async (ret) => {\n res.json(await context.usePost(ret))\n })\n }\n }\n catch (e) {\n const err = await context.useFilter(e)\n res.status(err.status).json(err)\n }\n })\n for (const i of meta) {\n const { name, method, route, header, tag } = i.data\n const instance = moduleMap.get(tag)!\n const methodTag = `${tag}-${method}`\n contextMeta[methodTag] = i\n Context.metaRecord[methodTag] = i\n let {\n guards,\n reflect,\n interceptors,\n params,\n handlers,\n middlewares,\n } = Context.metaDataRecord[methodTag] ? Context.metaDataRecord[methodTag] : (Context.metaDataRecord[methodTag] = parseMeta(i))\n\n guards = [...globalGuards!, ...guards]\n interceptors = [...globalInterceptors!, ...interceptors]\n\n const handler = instance[method].bind(instance)\n methodMap[methodTag] = handler\n Context.instanceRecord[name] = instance\n if (route) {\n (app as Express)[route.type](route.route, ...ServerContext.useMiddleware(middlewares), async (req, res) => {\n const contextData = {\n request: req,\n meta: i,\n response: res,\n }\n const context = new ServerContext(methodTag, contextData)\n\n try {\n for (const name in header)\n res.set(name, header[name])\n await context.useGuard(guards)\n await context.useInterceptor(interceptors)\n const args = await context.usePipe(params.map(({ type, key, validate }) => {\n return { arg: resolveDep((req as any)[type], key), validate }\n }), reflect)\n instance.context = contextData\n\n const ret = await context.usePost(await handler(...args))\n if (isObject(ret))\n res.json(ret)\n else\n res.send(String(ret))\n }\n catch (e: any) {\n handlers.forEach(handler => handler.error?.(e))\n const err = await context.useFilter(e)\n res.status(err.status).json(err)\n }\n })\n }\n }\n}\n","import 'reflect-metadata'\nimport fs from 'fs'\nimport EventEmitter from 'node:events'\nimport type { Phecda } from 'phecda-core'\nimport { getExposeKey, getHandler, getState, injectProperty, registerAsync } from 'phecda-core'\nimport type { Construct, Emitter, P } from './types'\nimport { Meta } from './meta'\nimport { warn } from './utils'\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)[]) {\n const moduleMap = new Map<string, InstanceType<Construct>>()\n const meta: Meta[] = []\n injectProperty('watcher', ({ eventName, instance, key, options }: { eventName: string; instance: any; key: string; options?: { once: boolean } }) => {\n const fn = typeof instance[key] === 'function' ? instance[key].bind(instance) : (v: any) => instance[key] = v\n\n if (options?.once)\n (emitter as any).once(eventName, fn)\n\n else\n (emitter as any).on(eventName, fn)\n })\n\n for (const Module of Modules)\n await buildNestModule(Module, moduleMap, meta)\n\n return { moduleMap, meta, output: (p = 'pmeta.js') => fs.writeFileSync(p, JSON.stringify(meta.map(item => item.data))) }\n}\n\nexport const constructorMap = new Map() // just for warn\n\nasync function buildNestModule(Module: Construct, map: Map<string, InstanceType<Construct>>, meta: Meta[]) {\n const paramtypes = getParamtypes(Module) as Construct[]\n let instance: InstanceType<Construct>\n const tag = Module.prototype?.__TAG__ || Module.name\n\n if (map.has(tag)) {\n instance = map.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)\n warn(`Synonym module: Module taged \"${tag}\" has been loaded before, so phecda-server won't load Module \"${Module.name}\"`)\n\n return instance\n }\n map.set(tag, undefined)\n if (paramtypes) {\n const paramtypesInstances = [] as any[]\n for (const i in paramtypes)\n paramtypesInstances[i] = await buildNestModule(paramtypes[i], map, meta)\n\n instance = new Module(...paramtypesInstances)\n }\n else {\n instance = new Module()\n }\n meta.push(...getMetaFromInstance(instance, Module.name, tag))\n await registerAsync(instance)\n map.set(tag, instance)\n constructorMap.set(tag, Module)\n return instance\n}\n\nfunction getMetaFromInstance(instance: Phecda, name: string, tag: string) {\n const vars = getExposeKey(instance).filter(item => item !== '__CLASS')\n const baseState = (getState(instance, '__CLASS') || {}) as P.Meta\n initState(baseState)\n\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.route) {\n meta.route = {\n route: (baseState.route?.route || '') + (state.route.route),\n type: state.route.type,\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 meta.params = params\n meta.define = { ...baseState.define, ...state.define }\n meta.header = { ...baseState.header, ...state.header }\n meta.middlewares = [...new Set([...baseState.middlewares, ...state.middlewares])]\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.middlewares)\n state.middlewares = []\n if (!state.guards)\n state.guards = []\n if (!state.interceptors)\n state.interceptors = []\n}\n","import type { P } from './types'\n\nexport class Meta {\n constructor(public data: P.Meta, public handlers: P.Handler[], public reflect: any[]) {\n\n }\n}\n","import { setModelVar, setState } from 'phecda-core'\n\nexport function Header(name: string, value: string) {\n return (target: any, k: PropertyKey) => {\n setModelVar(target, k)\n const state = target._namespace.__STATE_NAMESPACE__.get(k) || {}\n if (!state.header)\n state.header = {}\n\n state.header[name] = value\n setState(target, k, state)\n }\n}\n\nexport function Define(key: string, value: any) {\n return (target: any, k?: PropertyKey) => {\n if (!k) {\n k = '__CLASS'\n target = target.prototype\n }\n\n setModelVar(target, k)\n const state = target._namespace.__STATE_NAMESPACE__.get(k) || {}\n if (!state.define)\n state.define = {}\n\n state.define[key] = value\n setState(target, k, state)\n }\n}\n\nexport * from './param'\nexport * from './route'\n","import { setModelVar, setState } from 'phecda-core'\n\nexport function BaseParam(type: string, key: string, validate?: any): any {\n return (target: any, k: PropertyKey, index: number) => {\n setModelVar(target, k)\n\n const state = target._namespace.__STATE_NAMESPACE__.get(k) || {}\n if (!state.params)\n state.params = []\n\n state.params.push({ type, key, index, validate })\n setState(target, k, state)\n }\n}\n\nexport function Body(key = '', pipeOpts?: any) {\n return BaseParam('body', key, pipeOpts)\n}\nexport function Query(key = '', pipeOpts?: any) {\n return BaseParam('query', key, pipeOpts)\n}\nexport function Param(key: string, pipeOpts?: any) {\n return BaseParam('params', key, pipeOpts)\n}\n","import { setModelVar, setState } from 'phecda-core'\n\nexport function Route(route: string, type?: string): any {\n return (target: any, key?: PropertyKey) => {\n if (!key)\n key = '__CLASS'\n target = key === '__CLASS' ? target.prototype : target\n\n setModelVar(target, key)\n\n const state = target._namespace.__STATE_NAMESPACE__.get(key) || {}\n state.route = {\n route,\n type,\n }\n setState(target, key, state)\n }\n}\n\nexport function Get(route: string) {\n return Route(route, 'get')\n}\n\nexport function Post(route: string) {\n return Route(route, 'post')\n}\nexport function Put(route: string) {\n return Route(route, 'put')\n}\n\nexport function Patch(route: string) {\n return Route(route, 'patch')\n}\nexport function Delete(route: string) {\n return Route(route, 'delete')\n}\n\nexport function Controller(route: string) {\n return Route(route)\n}\n\nexport function Guard(...guards: string[]): any {\n return (target: any, key?: PropertyKey) => {\n if (!key)\n key = '__CLASS'\n target = key === '__CLASS' ? target.prototype : target\n\n setModelVar(target, key)\n\n const state = target._namespace.__STATE_NAMESPACE__.get(key) || {}\n if (!state.guards)\n state.guards = []\n state.guards.push(...guards)\n setState(target, key, state)\n }\n}\n\nexport function Middle(...middlewares: string[]): any {\n return (target: any, key?: PropertyKey) => {\n if (!key)\n key = '__CLASS'\n target = key === '__CLASS' ? target.prototype : target\n\n setModelVar(target, key)\n\n const state = target._namespace.__STATE_NAMESPACE__.get(key) || {}\n if (!state.middlewares)\n state.middlewares = []\n state.middlewares.push(...middlewares)\n setState(target, key, state)\n }\n}\n\nexport function Interceptor(...interceptors: string[]): any {\n return (target: any, key?: PropertyKey) => {\n if (!key)\n key = '__CLASS'\n target = key === '__CLASS' ? target.prototype : target\n\n setModelVar(target, key)\n\n const state = target._namespace.__STATE_NAMESPACE__.get(key) || {}\n if (!state.interceptors)\n state.interceptors = []\n state.interceptors.push(...interceptors)\n setState(target, key, state)\n }\n}\n","export * from './context'\nexport * from './types'\nexport * from './server/express'\nexport * from './core'\nexport * from './decorators'\nexport * from './exception'\nexport * from './pipe'\nexport * from './meta'\nexport * from 'phecda-core'\nexport * from './helper'\nexport * from './common'\n"],"mappings":"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","names":["isPhecda","plainToClass","HttpException","Error","message","status","description","constructor","data","error","ValidateException","HttpException","constructor","message","defaultPipe","transform","args","reflect","i","validate","arg","isPhecda","ret","plainToClass","err","length","ValidateException","data","Number","Boolean","includes","Object","is","NaN","map","item","UndefinedException","HttpException","constructor","message","ForbiddenException","HttpException","constructor","message","BadRequestException","HttpException","constructor","message","NotFoundException","HttpException","constructor","message","ConflictException","HttpException","constructor","message","BadGatewayException","HttpException","constructor","message","InvalidInputException","HttpException","constructor","message","UnsupportedMediaTypeException","HttpException","constructor","message","PayloadLargeException","HttpException","constructor","message","TimeoutException","HttpException","constructor","message","UnauthorizedException","HttpException","constructor","message","ServiceUnavailableException","HttpException","constructor","message","FrameworkException","HttpException","constructor","message","serverFilter","e","HttpException","console","error","stack","UndefinedException","message","data","Phistroy","guard","interceptor","record","name","type","includes","push","Context","key","data","method","params","post","history","constructor","Phistroy","registerGuard","handler","guardsRecord","registerInterceptor","interceptorsRecord","useGuard","guards","isMerge","guard","record","FrameworkException","ForbiddenException","useInterceptor","interceptors","ret","interceptor","push","usePost","cb","metaRecord","metaDataRecord","instanceRecord","addGuard","addInterceptor","getInstance","tag","parseMeta","meta","middlewares","reflect","handlers","map","param","type","validate","ServerContext","Context","useMiddleware","middlewares","map","m","middlewareRecord","FrameworkException","usePipe","args","reflect","pipe","transform","data","useFilter","arg","filter","defaultPipe","serverFilter","addMiddleware","key","handler","useServerPipe","useServerFilter","Base","context","pc","isUndefined","obj","isNil","isObject","fn","warn","msg","console","pc","magenta","yellow","isMerge","data","resolveDep","ret","key","SERIES_SYMBOL","MERGE_SYMBOL","bindApp","app","meta","moduleMap","options","globalGuards","globalInterceptors","route","middlewares","proMiddle","methodMap","contextMeta","post","req","_res","next","MERGE_SYMBOL","ServerContext","useMiddleware","res","body","category","data","contextData","request","response","isMerge","Array","isArray","json","useFilter","BadRequestException","tags","map","item","tag","context","ret","mergeGuards","Set","mergeInterceptors","forEach","guards","interceptors","Context","metaDataRecord","guard","add","intercept","useGuard","useInterceptor","name","split","reflect","params","instance","get","args","usePipe","type","key","validate","arg","resolveDep","startsWith","SERIES_SYMBOL","index","argKey","Number","push","e","m","metaRecord","handlers","handler","error","usePost","Promise","all","resolve","then","err","status","i","method","header","methodTag","parseMeta","bind","instanceRecord","set","isObject","send","String","fs","EventEmitter","getExposeKey","getHandler","getState","injectProperty","registerAsync","Meta","data","handlers","reflect","constructor","emitter","EventEmitter","Factory","Modules","moduleMap","Map","meta","injectProperty","eventName","instance","key","options","fn","bind","v","once","on","Module","buildNestModule","output","p","fs","writeFileSync","JSON","stringify","map","item","data","constructorMap","paramtypes","getParamtypes","tag","prototype","__TAG__","name","has","get","Error","warn","set","undefined","paramtypesInstances","i","push","getMetaFromInstance","registerAsync","vars","getExposeKey","filter","baseState","getState","initState","state","route","type","method","params","unshift","index","define","header","middlewares","Set","guards","interceptors","Meta","getHandler","Reflect","getMetadata","setModelVar","setState","setModelVar","setState","BaseParam","type","key","validate","target","k","index","setModelVar","state","_namespace","__STATE_NAMESPACE__","get","params","push","setState","Body","pipeOpts","Query","Param","setModelVar","setState","Route","route","type","target","key","prototype","setModelVar","state","_namespace","__STATE_NAMESPACE__","get","setState","Get","Post","Put","Patch","Delete","Controller","Guard","guards","push","Middle","middlewares","Interceptor","interceptors","Header","name","value","target","k","setModelVar","state","_namespace","__STATE_NAMESPACE__","get","header","setState","Define","key","prototype","define"]}
|
|
1
|
+
{"version":3,"sources":["../src/pipe.ts","../src/exception/base.ts","../src/exception/validate.ts","../src/exception/undefine.ts","../src/exception/forbidden.ts","../src/exception/bad-request.ts","../src/exception/not-found.ts","../src/exception/conflict.ts","../src/exception/bad-gateway.ts","../src/exception/invalid-input.ts","../src/exception/media-type.ts","../src/exception/payload-large.ts","../src/exception/timeout.ts","../src/exception/unauthorized.ts","../src/exception/unavailable-service.ts","../src/exception/framework.ts","../src/filter.ts","../src/history.ts","../src/utils.ts","../src/context/base.ts","../src/context/server.ts","../src/types.ts","../src/helper.ts","../src/common.ts","../src/server/express.ts","../src/core.ts","../src/meta.ts","../src/decorators/index.ts","../src/decorators/param.ts","../src/decorators/route.ts","../src/index.ts"],"sourcesContent":["import { isPhecda, plainToClass } from 'phecda-core'\nimport { ValidateException } from './exception/validate'\n\nimport type { P } from './types'\n\nexport const defaultPipe = {\n // todo: add more params\n async transform(args: any[]) {\n for (const i in args) {\n const { option, arg, reflect } = args[i]\n if (option === false)\n continue\n if (!reflect) {\n if (option && arg)\n args[i].arg = option(arg)\n\n continue\n }\n\n if (isPhecda(reflect)) {\n const ret = await plainToClass(reflect, arg, { transform: true })\n if (ret.err.length > 0)\n throw new ValidateException(ret.err[0])\n args[i].arg = ret.data\n }\n else {\n if ([Number, Boolean].includes(reflect)) {\n args[i].arg = reflect(arg)\n\n if (reflect === Number && Object.is(args[i].arg, NaN))\n throw new ValidateException(`parameter ${Number(i) + 1} should be a number`)\n }\n }\n }\n return args.map(item => item.arg)\n },\n} as P.Pipe\n","export class HttpException extends Error {\n constructor(public message: string, public status: number, public description = 'Http exception') {\n super(message)\n }\n\n get data() {\n return { message: this.message, description: this.description, status: this.status, error: true }\n }\n}\n","import { HttpException } from './base'\n\nexport class ValidateException extends HttpException {\n constructor(message: string) {\n super(message, 400, 'Validate exception')\n }\n}\n","import { HttpException } from './base'\n\nexport class UndefinedException extends HttpException {\n constructor(message: string) {\n super(message, 500, 'Undefined error')\n }\n}\n","import { HttpException } from './base'\n\nexport class ForbiddenException extends HttpException {\n constructor(message: string) {\n super(message, 403, 'Forbidden resource')\n }\n}\n","import { HttpException } from './base'\n\nexport class BadRequestException extends HttpException {\n constructor(message: string) {\n super(message, 400, 'Bad Request')\n }\n}\n","import { HttpException } from './base'\n\nexport class NotFoundException extends HttpException {\n constructor(message: string) {\n super(message, 404, 'Not Found')\n }\n}\n","import { HttpException } from './base'\n\nexport class ConflictException extends HttpException {\n constructor(message: string) {\n super(message, 409, 'Conflict')\n }\n}\n","import { HttpException } from './base'\n\nexport class BadGatewayException extends HttpException {\n constructor(message: string) {\n super(message, 502, 'Bad Gatrway')\n }\n}\n","import { HttpException } from './base'\n\nexport class InvalidInputException extends HttpException {\n constructor(message: string) {\n super(message, 502, 'Invalid Input')\n }\n}\n","import { HttpException } from './base'\n\nexport class UnsupportedMediaTypeException extends HttpException {\n constructor(message: string) {\n super(message, 415, 'Unsupported Media Type')\n }\n}\n","import { HttpException } from './base'\n\nexport class PayloadLargeException extends HttpException {\n constructor(message: string) {\n super(message, 413, 'Payload Too Large')\n }\n}\n","import { HttpException } from './base'\n\nexport class TimeoutException extends HttpException {\n constructor(message: string) {\n super(message, 408, 'Request Timeout',\n )\n }\n}\n","import { HttpException } from './base'\n\nexport class UnauthorizedException extends HttpException {\n constructor(message: string) {\n super(message, 401, 'Unauthorized')\n }\n}\n","import { HttpException } from './base'\n\nexport class ServiceUnavailableException extends HttpException {\n constructor(message: string) {\n super(message, 503, 'Service Unavailable')\n }\n}\n","import { HttpException } from './base'\n\nexport class FrameworkException extends HttpException {\n constructor(message: string) {\n super(`[phecda-server] ${message}`, 500, 'Framework Error')\n }\n}\n","import { HttpException, UndefinedException } from './exception'\nimport type { ServerFilter } from './types'\n\nexport const serverFilter: ServerFilter = (e: any) => {\n if (!(e instanceof HttpException)) {\n console.error(e.stack)\n e = new UndefinedException(e.message || e)\n }\n else {\n console.error(e.message)\n }\n\n return e.data\n}\n","export class Phistroy {\n guard: string[] = []\n interceptor: string[] = []\n record(name: string, type: 'guard' | 'interceptor') {\n if (!this[type].includes(name)) {\n this[type].push(name)\n return true\n }\n return false\n }\n}\n","import pc from 'picocolors'\nexport const isUndefined = (obj: any): obj is undefined =>\n typeof obj === 'undefined'\nexport const isNil = (obj: any): obj is null | undefined =>\n isUndefined(obj) || obj === null\n\nexport const isObject = (fn: any): fn is object =>\n !isNil(fn) && typeof fn === 'object'\n\nexport function warn(msg: string, color = 'yellow') {\n // @ts-expect-error type error\n console.warn(`${pc.magenta('[phecda-server]')} ${pc[color](msg)}`)\n}\n","import { ForbiddenException, FrameworkException } from '../exception'\nimport { Phistroy } from '../history'\n\nimport type { Meta } from '../meta'\nimport type { P } from '../types'\nimport { warn } from '../utils'\n\nexport abstract class Context<Data = any> {\n method: string\n params: string[]\n\n static metaRecord: Record<string, Meta> = {}\n static metaDataRecord: Record<string, ReturnType<typeof parseMeta>> = {}\n static instanceRecord: Record<string, any> = {}\n static guardsRecord: Record<string, any> = {}\n static interceptorsRecord: Record<string, any > = {}\n // static serverRecord: Record<string, Context> = {}\n post: ((...params: any) => any)[]\n history = new Phistroy()\n\n constructor(public key: string, public data: Data) {\n }\n\n static registerGuard(key: string, handler: any) {\n Context.guardsRecord[key] = handler\n }\n\n static registerInterceptor(key: string, handler: any) {\n Context.interceptorsRecord[key] = handler\n }\n\n async useGuard(guards: string[], isMerge = false) {\n for (const guard of guards) {\n if (this.history.record(guard, 'guard')) {\n if (!(guard in Context.guardsRecord))\n throw new FrameworkException(`can't find guard named ${guard}`)\n if (!await Context.guardsRecord[guard](this.data, isMerge))\n throw new ForbiddenException(`Guard exception--${guard}`)\n }\n }\n }\n\n async useInterceptor(interceptors: string[], isMerge = false) {\n const ret = []\n for (const interceptor of interceptors) {\n if (this.history.record(interceptor, 'interceptor')) {\n if (!(interceptor in Context.interceptorsRecord))\n throw new FrameworkException(`can't find interceptor named ${interceptor}`)\n const post = await Context.interceptorsRecord[interceptor](this.data, isMerge)\n if (post)\n ret.push(post)\n }\n }\n this.post = ret\n }\n\n async usePost(data: any) {\n if (!this.post)\n return data\n for (const cb of this.post)\n data = (await cb(data)) | data\n\n return data\n }\n}\n\nexport function addGuard(key: string, handler: P.Guard) {\n Context.registerGuard(key, handler)\n}\n\nexport function addInterceptor(key: string, handler: P.Interceptor) {\n Context.registerInterceptor(key, handler)\n}\nexport function getInstance(tag: string) {\n return Context.instanceRecord[tag]\n}\n\nexport function parseMeta(meta: Meta) {\n const { data: { params, guards, interceptors, middlewares }, reflect, handlers } = meta\n\n params.forEach(({ index, key }, i) => {\n if (index !== i)\n warn(`the ${i + 1}th argument on the method '${key}' require decorator`)\n })\n return {\n guards,\n reflect,\n interceptors,\n middlewares,\n handlers,\n params,\n }\n}\n","import type { RequestHandler } from 'express'\nimport { defaultPipe } from '../pipe'\nimport { serverFilter } from '../filter'\nimport { FrameworkException } from '../exception'\nimport type { P, ServerCtx, ServerFilter, ServerMergeCtx } from '../types'\nimport { Context } from './base'\n\nexport class ServerContext extends Context<ServerCtx | ServerMergeCtx > {\n static pipe = defaultPipe\n static filter = serverFilter\n static middlewareRecord: Record<string, (...params: any) => any> = {}\n static useMiddleware(middlewares: string[]) {\n return middlewares.map((m) => {\n if (!(m in ServerContext.middlewareRecord))\n throw new FrameworkException(`can't find middleware named ${m}`)\n return ServerContext.middlewareRecord[m]\n })\n }\n\n async usePipe(args: { arg: any; option?: any; type: string;key: string;index: number; reflect: any }[], tag: string) {\n return ServerContext.pipe.transform?.(args, tag, this.data)\n }\n\n static useFilter(arg: any, data: ServerCtx | ServerMergeCtx) {\n return ServerContext.filter(arg, data)\n }\n\n useFilter(arg: any) {\n return ServerContext.filter(arg, this.data)\n }\n}\n\nexport function addMiddleware(key: string, handler: RequestHandler) {\n ServerContext.middlewareRecord[key] = handler\n}\n\nexport function useServerPipe(pipe: P.Pipe) {\n ServerContext.pipe = pipe\n}\nexport function useServerFilter(filter: ServerFilter) {\n ServerContext.filter = filter\n}\n","import type { Request, Response } from 'express'\nimport type { Events } from 'phecda-core'\nimport type { Meta } from './meta'\nimport type { HttpException } from './exception'\nexport type Construct<T = any> = new (...args: any[]) => T\n\nexport interface Emitter {\n on<N extends keyof Events>(eventName: N, cb: (args: Events[N]) => void): void\n once<N extends keyof Events>(eventName: N, cb: (args: Events[N]) => void): void\n off<N extends keyof Events>(eventName: N, cb: (args: Events[N]) => void): void\n removeAllListeners<N extends keyof Events>(eventName: N): void\n emit<N extends keyof Events>(eventName: N, param: Events[N]): void\n}\n\nexport type RequestType = 'get' | 'post' | 'put' | 'delete' | 'patch' | 'options' | 'head'\n\nexport type MergeType = <R extends Promise<any>[]> (...args: R) => { [K in keyof R]: Awaited<R[K]> }\n\nexport interface ServerMergeCtx {\n request: Request\n response: Response\n meta: Record<string, Meta>\n moduleMap: Record<string, any>\n isMerge: true\n tags?: string[]\n}\n\nexport interface ServerCtx {\n request: Request\n response: Response\n meta: Meta\n moduleMap: Record<string, any>\n}\nexport interface BaseError {\n error: true\n status: number\n}\nexport type ServerFilter<E extends HttpException = any> = (err: E | Error, ctx: ServerMergeCtx | ServerCtx) => any\n\nexport class Base {\n context: ServerMergeCtx | ServerCtx\n}\n\nexport namespace P{\n export interface Error extends BaseError { message: string; description: string}\n\n export type ResOrErr<R > = { [K in keyof R]: Awaited<R[K]> | Error }\n\n export type Res<T> = T\n export type Guard = ((ctx: ServerCtx, isMerge?: false) => Promise<boolean> | boolean) | ((ctx: ServerMergeCtx, isMerge?: true) => Promise<boolean> | boolean)\n export type Interceptor = ((ctx: ServerCtx, isMerge?: false) => any) | ((ctx: ServerMergeCtx, isMerge?: true) => any)\n export interface Handler {\n error?: (arg: any) => void\n }\n export interface Meta {\n route?: {\n type: RequestType\n route: string\n }\n\n define?: any\n header: Record<string, string>\n params: { type: string; index: number; key: string; option?: any }[]\n guards: string[]\n interceptors: string[]\n middlewares: string[]\n method: string\n name: string\n tag: string\n }\n export interface Pipe {\n transform(args: { arg: any; option?: boolean; key: string; type: string; index: number; reflect: any }[], tag: string, ctx: ServerCtx | ServerMergeCtx): Promise<any[]>\n }\n\n}\n","import type { ServerCtx, ServerMergeCtx } from './types'\n\nexport function isMerge(data: ServerCtx | ServerMergeCtx): data is ServerMergeCtx {\n return !!(data as ServerMergeCtx).isMerge\n}\n\nexport function resolveDep(ret: any, key: string) {\n if (key)\n return ret?.[key]\n return ret\n}\n","export const SERIES_SYMBOL = '__symbol_series__'\nexport const MERGE_SYMBOL = '__symbol_req__'\n","import type { Express, Router } from 'express'\nimport { Context, ServerContext, parseMeta } from '../context'\nimport { isObject } from '../utils'\nimport { resolveDep } from '../helper'\nimport { MERGE_SYMBOL, SERIES_SYMBOL } from '../common'\nimport type { Factory } from '../core'\nimport { BadRequestException } from '../exception'\nimport type { Meta } from '../meta'\nimport type { ServerMergeCtx } from '../types'\n\nexport interface Options {\n/**\n * 专用路由的值,默认为/__PHECDA_SERVER__,处理phecda-client发出的合并请求\n */\n route?: string\n /**\n * 全局守卫\n */\n globalGuards?: string[]\n /**\n * 全局拦截器\n */\n globalInterceptors?: string[]\n /**\n * 专用路由的中间件(work for merge request),全局中间件请在bindApp以外设置\n */\n middlewares?: string[]\n}\n\nexport function bindApp(app: Express | Router, { meta, moduleMap }: Awaited<ReturnType<typeof Factory>>, options: Options = {}) {\n const { globalGuards, globalInterceptors, route, middlewares: proMiddle } = { route: '/__PHECDA_SERVER__', globalGuards: [], globalInterceptors: [], middlewares: [], ...options } as Required<Options>\n const methodMap = {} as Record<string, (...args: any[]) => any>\n const contextMeta = {} as Record<string, Meta>\n (app as Express).post(route, (req, _res, next) => {\n (req as any)[MERGE_SYMBOL] = true\n next()\n }, ...ServerContext.useMiddleware(proMiddle), async (req, res) => {\n const { body: { category, data } } = req\n\n const contextData = {\n request: req,\n response: res,\n meta: contextMeta,\n moduleMap,\n isMerge: true,\n } as unknown as ServerMergeCtx\n\n if (!Array.isArray(data))\n return res.json(await ServerContext.useFilter(new BadRequestException('data format should be an array'), contextData))\n\n if (category !== 'series' && category !== 'parallel')\n return res.json(await ServerContext.useFilter(new BadRequestException('category should be \\'parallel\\' or \\'series\\''), contextData))\n\n contextData.tags = data.map((item: any) => item.tag)\n\n const context = new ServerContext(route, contextData)\n const ret = [] as any[]\n try {\n const mergeGuards = new Set([...globalGuards])\n const mergeInterceptors = new Set([...globalInterceptors])\n\n data.forEach(({ tag }) => {\n const {\n guards,\n interceptors,\n } = Context.metaDataRecord[tag]\n guards.forEach(guard => mergeGuards.add(guard))\n interceptors.forEach(intercept => mergeInterceptors.add(intercept))\n })\n await context.useGuard([...mergeGuards], true)\n await context.useInterceptor([...mergeInterceptors], true)\n\n if (category === 'series') {\n for (const item of data) {\n const { tag } = item\n const [name] = tag.split('-')\n const {\n reflect,\n params,\n } = Context.metaDataRecord[tag]\n const instance = moduleMap.get(name)\n\n try {\n if (!params)\n throw new BadRequestException(`\"${tag}\" doesn't exist`)\n const args = await context.usePipe(params.map(({ type, key, option, index }) => {\n const arg = resolveDep(item[type], key)\n if (typeof arg === 'string' && arg.startsWith(SERIES_SYMBOL)) {\n const [, argIndex, argKey] = arg.split('@')\n return { arg: resolveDep(ret[Number(argIndex)], argKey || key), option, index, type, key, reflect: reflect[index] }\n }\n\n return { arg, option, index, type, key, reflect: reflect[index] }\n }), tag) as any\n instance.context = contextData\n\n ret.push(await methodMap[tag](...args))\n }\n catch (e: any) {\n const m = Context.metaRecord[tag]\n m.handlers.forEach(handler => handler.error?.(e))\n ret.push(await context.useFilter(e))\n }\n }\n return res.json(await context.usePost(ret))\n }\n if (category === 'parallel') {\n return Promise.all(data.map((item: any) => {\n // eslint-disable-next-line no-async-promise-executor\n return new Promise(async (resolve) => {\n const { tag } = item\n const [name] = tag.split('-')\n const {\n reflect,\n params,\n handlers,\n } = Context.metaDataRecord[tag]\n\n const instance = moduleMap.get(name)\n\n try {\n if (!params)\n throw new BadRequestException(`\"${tag}\" doesn't exist`)\n\n const args = await context.usePipe(params.map(({ type, key, option, index }) => {\n const arg = resolveDep(item[type], key)\n return { arg, type, key, option, index, reflect: reflect[index] }\n }), tag) as any\n instance.context = contextData\n resolve(await methodMap[tag](...args))\n }\n catch (e: any) {\n handlers.forEach(handler => handler.error?.(e))\n resolve(await context.useFilter(e))\n }\n })\n })).then(async (ret) => {\n res.json(await context.usePost(ret))\n })\n }\n }\n catch (e) {\n const err = await context.useFilter(e)\n res.status(err.status).json(err)\n }\n })\n for (const i of meta) {\n const { name, method, route, header, tag } = i.data\n const instance = moduleMap.get(tag)!\n const methodTag = `${tag}-${method}`\n contextMeta[methodTag] = i\n Context.metaRecord[methodTag] = i\n let {\n guards,\n reflect,\n interceptors,\n params,\n handlers,\n middlewares,\n } = Context.metaDataRecord[methodTag] ? Context.metaDataRecord[methodTag] : (Context.metaDataRecord[methodTag] = parseMeta(i))\n\n guards = [...globalGuards!, ...guards]\n interceptors = [...globalInterceptors!, ...interceptors]\n\n const handler = instance[method].bind(instance)\n methodMap[methodTag] = handler\n Context.instanceRecord[name] = instance\n if (route) {\n (app as Express)[route.type](route.route, ...ServerContext.useMiddleware(middlewares), async (req, res) => {\n const contextData = {\n request: req,\n meta: i,\n response: res,\n moduleMap,\n }\n const context = new ServerContext(methodTag, contextData)\n\n try {\n for (const name in header)\n res.set(name, header[name])\n await context.useGuard(guards)\n await context.useInterceptor(interceptors)\n const args = await context.usePipe(params.map(({ type, key, option, index }) => {\n return { arg: resolveDep((req as any)[type], key), option, key, type, index, reflect: reflect[index] }\n }), methodTag)\n instance.context = contextData\n\n const ret = await context.usePost(await handler(...args))\n if (isObject(ret))\n res.json(ret)\n else\n res.send(String(ret))\n }\n catch (e: any) {\n handlers.forEach(handler => handler.error?.(e))\n const err = await context.useFilter(e)\n res.status(err.status).json(err)\n }\n })\n }\n }\n}\n","import 'reflect-metadata'\nimport fs from 'fs'\nimport EventEmitter from 'node:events'\nimport type { Phecda } from 'phecda-core'\nimport { getExposeKey, getHandler, getState, injectProperty, registerAsync } from 'phecda-core'\nimport type { Construct, Emitter, P } from './types'\nimport { Meta } from './meta'\nimport { warn } from './utils'\n// TODO: support both emitter types and origin emitter type in future\nexport const emitter: Emitter = new EventEmitter() as any\nexport const constructorMap = new Map() // just for warn\n\nexport async function Factory(Modules: (new (...args: any) => any)[]) {\n const moduleMap = new Map<string, InstanceType<Construct>>()\n const meta: Meta[] = []\n injectProperty('watcher', ({ eventName, instance, key, options }: { eventName: string; instance: any; key: string; options?: { once: boolean } }) => {\n const fn = typeof instance[key] === 'function' ? instance[key].bind(instance) : (v: any) => instance[key] = v\n\n if (options?.once)\n (emitter as any).once(eventName, fn)\n\n else\n (emitter as any).on(eventName, fn)\n })\n\n for (const Module of Modules)\n await buildNestModule(Module, moduleMap, meta)\n\n constructorMap.clear()\n return { moduleMap, meta, output: (p = 'pmeta.js') => fs.writeFileSync(p, JSON.stringify(meta.map(item => item.data))) }\n}\n\nasync function buildNestModule(Module: Construct, map: Map<string, InstanceType<Construct>>, meta: Meta[]) {\n const paramtypes = getParamtypes(Module) as Construct[]\n let instance: InstanceType<Construct>\n const tag = Module.prototype?.__TAG__ || Module.name\n\n if (map.has(tag)) {\n instance = map.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)\n warn(`Synonym module: Module taged \"${tag}\" has been loaded before, so phecda-server won't load Module \"${Module.name}\"`)\n\n return instance\n }\n map.set(tag, undefined)\n if (paramtypes) {\n const paramtypesInstances = [] as any[]\n for (const i in paramtypes)\n paramtypesInstances[i] = await buildNestModule(paramtypes[i], map, meta)\n\n instance = new Module(...paramtypesInstances)\n }\n else {\n instance = new Module()\n }\n meta.push(...getMetaFromInstance(instance, Module.name, tag))\n await registerAsync(instance)\n map.set(tag, instance)\n constructorMap.set(tag, Module)\n return instance\n}\n\nfunction getMetaFromInstance(instance: Phecda, name: string, tag: string) {\n const vars = getExposeKey(instance).filter(item => item !== '__CLASS')\n const baseState = (getState(instance, '__CLASS') || {}) as P.Meta\n initState(baseState)\n\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.route) {\n meta.route = {\n route: (baseState.route?.route || '') + (state.route.route),\n type: state.route.type,\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 meta.params = params\n meta.define = { ...baseState.define, ...state.define }\n meta.header = { ...baseState.header, ...state.header }\n meta.middlewares = [...new Set([...baseState.middlewares, ...state.middlewares])]\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.middlewares)\n state.middlewares = []\n if (!state.guards)\n state.guards = []\n if (!state.interceptors)\n state.interceptors = []\n}\n","import type { P } from './types'\n\nexport class Meta {\n constructor(public data: P.Meta, public handlers: P.Handler[], public reflect: any[]) {\n\n }\n}\n","import { setModelVar, setState } from 'phecda-core'\n\nexport function Header(name: string, value: string) {\n return (target: any, k: PropertyKey) => {\n setModelVar(target, k)\n const state = target._namespace.__STATE_NAMESPACE__.get(k) || {}\n if (!state.header)\n state.header = {}\n\n state.header[name] = value\n setState(target, k, state)\n }\n}\n\nexport function Define(key: string, value: any) {\n return (target: any, k?: PropertyKey) => {\n if (!k) {\n k = '__CLASS'\n target = target.prototype\n }\n\n setModelVar(target, k)\n const state = target._namespace.__STATE_NAMESPACE__.get(k) || {}\n if (!state.define)\n state.define = {}\n\n state.define[key] = value\n setState(target, k, state)\n }\n}\n\nexport * from './param'\nexport * from './route'\n","import { setModelVar, setState } from 'phecda-core'\n\nexport function BaseParam(type: string, key: string, option?: any): any {\n return (target: any, k: PropertyKey, index: number) => {\n setModelVar(target, k)\n\n const state = target._namespace.__STATE_NAMESPACE__.get(k) || {}\n if (!state.params)\n state.params = []\n\n state.params.push({ type, key, index, option })\n setState(target, k, state)\n }\n}\n\nexport function Body(key = '', pipeOpts?: any) {\n return BaseParam('body', key, pipeOpts)\n}\nexport function Query(key = '', pipeOpts?: any) {\n return BaseParam('query', key, pipeOpts)\n}\nexport function Param(key: string, pipeOpts?: any) {\n return BaseParam('params', key, pipeOpts)\n}\n","import { setModelVar, setState } from 'phecda-core'\n\nexport function Route(route: string, type?: string): any {\n return (target: any, key?: PropertyKey) => {\n if (!key)\n key = '__CLASS'\n target = key === '__CLASS' ? target.prototype : target\n\n setModelVar(target, key)\n\n const state = target._namespace.__STATE_NAMESPACE__.get(key) || {}\n state.route = {\n route,\n type,\n }\n setState(target, key, state)\n }\n}\n\nexport function Get(route: string) {\n return Route(route, 'get')\n}\n\nexport function Post(route: string) {\n return Route(route, 'post')\n}\nexport function Put(route: string) {\n return Route(route, 'put')\n}\n\nexport function Patch(route: string) {\n return Route(route, 'patch')\n}\nexport function Delete(route: string) {\n return Route(route, 'delete')\n}\n\nexport function Controller(route: string) {\n return Route(route)\n}\n\nexport function Guard(...guards: string[]): any {\n return (target: any, key?: PropertyKey) => {\n if (!key)\n key = '__CLASS'\n target = key === '__CLASS' ? target.prototype : target\n\n setModelVar(target, key)\n\n const state = target._namespace.__STATE_NAMESPACE__.get(key) || {}\n if (!state.guards)\n state.guards = []\n state.guards.push(...guards)\n setState(target, key, state)\n }\n}\n\nexport function Middle(...middlewares: string[]): any {\n return (target: any, key?: PropertyKey) => {\n if (!key)\n key = '__CLASS'\n target = key === '__CLASS' ? target.prototype : target\n\n setModelVar(target, key)\n\n const state = target._namespace.__STATE_NAMESPACE__.get(key) || {}\n if (!state.middlewares)\n state.middlewares = []\n state.middlewares.push(...middlewares)\n setState(target, key, state)\n }\n}\n\nexport function Interceptor(...interceptors: string[]): any {\n return (target: any, key?: PropertyKey) => {\n if (!key)\n key = '__CLASS'\n target = key === '__CLASS' ? target.prototype : target\n\n setModelVar(target, key)\n\n const state = target._namespace.__STATE_NAMESPACE__.get(key) || {}\n if (!state.interceptors)\n state.interceptors = []\n state.interceptors.push(...interceptors)\n setState(target, key, state)\n }\n}\n","export * from './context'\nexport * from './types'\nexport * from './server/express'\nexport * from './core'\nexport * from './decorators'\nexport * from './exception'\nexport * from './pipe'\nexport * from './meta'\nexport * from 'phecda-core'\nexport * from './helper'\nexport * from './common'\n"],"mappings":"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","names":["isPhecda","plainToClass","HttpException","Error","message","status","description","constructor","data","error","ValidateException","HttpException","constructor","message","defaultPipe","transform","args","i","option","arg","reflect","isPhecda","ret","plainToClass","err","length","ValidateException","data","Number","Boolean","includes","Object","is","NaN","map","item","UndefinedException","HttpException","constructor","message","ForbiddenException","HttpException","constructor","message","BadRequestException","HttpException","constructor","message","NotFoundException","HttpException","constructor","message","ConflictException","HttpException","constructor","message","BadGatewayException","HttpException","constructor","message","InvalidInputException","HttpException","constructor","message","UnsupportedMediaTypeException","HttpException","constructor","message","PayloadLargeException","HttpException","constructor","message","TimeoutException","HttpException","constructor","message","UnauthorizedException","HttpException","constructor","message","ServiceUnavailableException","HttpException","constructor","message","FrameworkException","HttpException","constructor","message","serverFilter","e","HttpException","console","error","stack","UndefinedException","message","data","Phistroy","guard","interceptor","record","name","type","includes","push","pc","isUndefined","obj","isNil","isObject","fn","warn","msg","color","console","pc","magenta","Context","key","data","method","params","post","history","constructor","Phistroy","registerGuard","handler","guardsRecord","registerInterceptor","interceptorsRecord","useGuard","guards","isMerge","guard","record","FrameworkException","ForbiddenException","useInterceptor","interceptors","ret","interceptor","push","usePost","cb","metaRecord","metaDataRecord","instanceRecord","addGuard","addInterceptor","getInstance","tag","parseMeta","meta","middlewares","reflect","handlers","forEach","index","i","warn","ServerContext","Context","useMiddleware","middlewares","map","m","middlewareRecord","FrameworkException","usePipe","args","tag","pipe","transform","data","useFilter","arg","filter","defaultPipe","serverFilter","addMiddleware","key","handler","useServerPipe","useServerFilter","Base","context","isMerge","data","resolveDep","ret","key","SERIES_SYMBOL","MERGE_SYMBOL","bindApp","app","meta","moduleMap","options","globalGuards","globalInterceptors","route","middlewares","proMiddle","methodMap","contextMeta","post","req","_res","next","MERGE_SYMBOL","ServerContext","useMiddleware","res","body","category","data","contextData","request","response","isMerge","Array","isArray","json","useFilter","BadRequestException","tags","map","item","tag","context","ret","mergeGuards","Set","mergeInterceptors","forEach","guards","interceptors","Context","metaDataRecord","guard","add","intercept","useGuard","useInterceptor","name","split","reflect","params","instance","get","args","usePipe","type","key","option","index","arg","resolveDep","startsWith","SERIES_SYMBOL","argIndex","argKey","Number","push","e","m","metaRecord","handlers","handler","error","usePost","Promise","all","resolve","then","err","status","i","method","header","methodTag","parseMeta","bind","instanceRecord","set","isObject","send","String","fs","EventEmitter","getExposeKey","getHandler","getState","injectProperty","registerAsync","Meta","data","handlers","reflect","constructor","emitter","EventEmitter","constructorMap","Map","Factory","Modules","moduleMap","meta","injectProperty","eventName","instance","key","options","fn","bind","v","once","on","Module","buildNestModule","clear","output","p","fs","writeFileSync","JSON","stringify","map","item","data","paramtypes","getParamtypes","tag","prototype","__TAG__","name","has","get","Error","warn","set","undefined","paramtypesInstances","i","push","getMetaFromInstance","registerAsync","vars","getExposeKey","filter","baseState","getState","initState","state","route","type","method","params","unshift","index","define","header","middlewares","Set","guards","interceptors","Meta","getHandler","Reflect","getMetadata","setModelVar","setState","setModelVar","setState","BaseParam","type","key","option","target","k","index","setModelVar","state","_namespace","__STATE_NAMESPACE__","get","params","push","setState","Body","pipeOpts","Query","Param","setModelVar","setState","Route","route","type","target","key","prototype","setModelVar","state","_namespace","__STATE_NAMESPACE__","get","setState","Get","Post","Put","Patch","Delete","Controller","Guard","guards","push","Middle","middlewares","Interceptor","interceptors","Header","name","value","target","k","setModelVar","state","_namespace","__STATE_NAMESPACE__","get","header","setState","Define","key","prototype","define"]}
|