phecda-server 4.0.0-alpha.10 → 4.0.0-alpha.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- import { P, a as Emitter, C as Construct } from './types-754ec28e.js';
1
+ import { P, a as Emitter, C as Construct } from './types-70714e01.js';
2
2
 
3
3
  declare class Meta {
4
4
  data: P.Meta;
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
- import { E as Exception, P } from './types-754ec28e.js';
2
- export { B as BaseError, C as Construct, a as Emitter, M as MergeType, R as RequestType, S as ServerErr, T as ToInstance } from './types-754ec28e.js';
3
- export { F as Factory, M as Meta, e as emitter } from './core-4ded7d17.js';
1
+ import { E as Exception, P } from './types-70714e01.js';
2
+ export { B as BaseError, C as Construct, a as Emitter, M as MergeType, R as RequestType, S as ServerErr, T as ToInstance } from './types-70714e01.js';
3
+ export { F as Factory, M as Meta, e as emitter } from './core-91ada79c.js';
4
4
  export * from 'phecda-core';
5
5
 
6
6
  declare class Histroy {
@@ -73,7 +73,7 @@ declare class Context<Data = any> {
73
73
  params: string[];
74
74
  history: Histroy;
75
75
  static filter: P.Filter;
76
- static pipe: P.Pipe;
76
+ static pipeRecord: Record<string, P.Pipe>;
77
77
  static guardsRecord: Record<string, P.Guard>;
78
78
  static interceptorsRecord: Record<string, P.Interceptor>;
79
79
  static middlewareRecord: Record<string, (...params: any) => any>;
@@ -81,7 +81,8 @@ declare class Context<Data = any> {
81
81
  constructor(tag: string, data: Data);
82
82
  usePipe(args: {
83
83
  arg: any;
84
- option?: any;
84
+ pipe?: string;
85
+ pipeOpts?: any;
85
86
  type: string;
86
87
  key: string;
87
88
  index: number;
@@ -94,17 +95,18 @@ declare class Context<Data = any> {
94
95
  static useMiddleware(middlewares: string[]): any[];
95
96
  }
96
97
  declare function addMiddleware(key: string, handler: (...params: any) => any): void;
97
- declare function setPipe(pipe: P.Pipe): void;
98
+ declare function addPipe(key: string, pipe: P.Pipe): void;
98
99
  declare function setFilter(filter: P.Filter): void;
99
100
  declare function addGuard(key: string, handler: P.Guard): void;
100
101
  declare function addInterceptor(key: string, handler: P.Interceptor): void;
101
102
 
102
- declare function BaseParam(type: string, key: string, option?: any): any;
103
- declare function Body(key?: string, pipeOpts?: any): any;
104
- declare function Head(key: string, pipeOpts?: any): any;
105
- declare function Query(key?: string, pipeOpts?: any): any;
106
- declare function Param(key: string, pipeOpts?: any): any;
107
- declare function Arg(pipeOpts?: any): any;
103
+ declare function BaseParam(type: string, key: string): any;
104
+ declare function Pipe(key?: string, opts?: any): (target: any, k: PropertyKey, index: number) => void;
105
+ declare function Body(key?: string): any;
106
+ declare function Head(key: string): any;
107
+ declare function Query(key?: string): any;
108
+ declare function Param(key: string): any;
109
+ declare function Arg(): any;
108
110
 
109
111
  declare function Route(route: string, type?: string): any;
110
112
  declare function Get(route: string): any;
@@ -154,7 +156,7 @@ declare abstract class PInterceptor {
154
156
  }
155
157
 
156
158
  declare abstract class PPipe {
157
- constructor();
159
+ constructor(key: string);
158
160
  abstract use<C>(args: {
159
161
  arg: any;
160
162
  option?: any;
@@ -162,11 +164,11 @@ declare abstract class PPipe {
162
164
  type: string;
163
165
  index: number;
164
166
  reflect: any;
165
- }[], tag: string, ctx: C): Promise<any[]>;
167
+ }, tag: string, ctx: C): Promise<any>;
166
168
  }
167
169
 
168
170
  declare function generateRPCCode(meta: P.Meta[]): string;
169
171
 
170
172
  declare function generateHTTPCode(meta: P.Meta[]): string;
171
173
 
172
- export { APP_SYMBOL, Arg, BadGatewayException, BadRequestException, BaseParam, Body, ConflictException, Context, Controller, Define, Delete, Dev, Event, Exception, ForbiddenException, FrameworkException, Get, Guard, Head, Header, Interceptor, InvalidInputException, MERGE_SYMBOL, META_SYMBOL, MODULE_SYMBOL, Middle, NotFoundException, P, PFilter, PGuard, PInterceptor, PPipe, Param, Patch, PayloadLargeException, Post, Put, Query, Route, Rpc, ServiceUnavailableException, TimeoutException, UNMOUNT_SYMBOL, UnauthorizedException, UndefinedException, UnsupportedMediaTypeException, ValidateException, addGuard, addInterceptor, addMiddleware, defaultPipe, generateHTTPCode, generateRPCCode, guardsRecord, resolveDep, setFilter, setPipe };
174
+ export { APP_SYMBOL, Arg, BadGatewayException, BadRequestException, BaseParam, Body, ConflictException, Context, Controller, Define, Delete, Dev, Event, Exception, ForbiddenException, FrameworkException, Get, Guard, Head, Header, Interceptor, InvalidInputException, MERGE_SYMBOL, META_SYMBOL, MODULE_SYMBOL, Middle, NotFoundException, P, PFilter, PGuard, PInterceptor, PPipe, Param, Patch, PayloadLargeException, Pipe, Post, Put, Query, Route, Rpc, ServiceUnavailableException, TimeoutException, UNMOUNT_SYMBOL, UnauthorizedException, UndefinedException, UnsupportedMediaTypeException, ValidateException, addGuard, addInterceptor, addMiddleware, addPipe, defaultPipe, generateHTTPCode, generateRPCCode, guardsRecord, resolveDep, setFilter };
package/dist/index.js CHANGED
@@ -69,6 +69,7 @@ __export(src_exports, {
69
69
  Param: () => Param,
70
70
  Patch: () => Patch,
71
71
  PayloadLargeException: () => PayloadLargeException,
72
+ Pipe: () => Pipe,
72
73
  Post: () => Post,
73
74
  Put: () => Put,
74
75
  Query: () => Query,
@@ -84,14 +85,14 @@ __export(src_exports, {
84
85
  addGuard: () => addGuard,
85
86
  addInterceptor: () => addInterceptor,
86
87
  addMiddleware: () => addMiddleware,
88
+ addPipe: () => addPipe,
87
89
  defaultPipe: () => defaultPipe,
88
90
  emitter: () => emitter,
89
91
  generateHTTPCode: () => generateHTTPCode,
90
92
  generateRPCCode: () => generateRPCCode,
91
93
  guardsRecord: () => guardsRecord,
92
94
  resolveDep: () => resolveDep,
93
- setFilter: () => setFilter,
94
- setPipe: () => setPipe
95
+ setFilter: () => setFilter
95
96
  });
96
97
  module.exports = __toCommonJS(src_exports);
97
98
 
@@ -129,34 +130,24 @@ var ValidateException = class extends Exception {
129
130
  __name(ValidateException, "ValidateException");
130
131
 
131
132
  // src/pipe.ts
132
- var defaultPipe = /* @__PURE__ */ __name(async (args) => {
133
- for (const i in args) {
134
- const { option, arg, reflect } = args[i];
135
- if (option === false)
136
- continue;
137
- if (!reflect) {
138
- if (option && arg)
139
- args[i].arg = option(arg);
140
- continue;
141
- }
142
- if ((0, import_phecda_core.isPhecda)(reflect)) {
143
- const instance = (0, import_phecda_core.plainToClass)(reflect, arg);
144
- const err = await (0, import_phecda_core.transformClass)(instance);
145
- if (err.length > 0)
146
- throw new ValidateException(err[0]);
147
- args[i].arg = instance;
148
- } else {
149
- if ([
150
- Number,
151
- Boolean
152
- ].includes(reflect)) {
153
- args[i].arg = reflect(arg);
154
- if (reflect === Number && Object.is(args[i].arg, NaN))
155
- throw new ValidateException(`parameter ${Number(i) + 1} should be a number`);
156
- }
133
+ var defaultPipe = /* @__PURE__ */ __name(async ({ arg, reflect, index }) => {
134
+ if ((0, import_phecda_core.isPhecda)(reflect)) {
135
+ const instance = (0, import_phecda_core.plainToClass)(reflect, arg);
136
+ const err = await (0, import_phecda_core.transformClass)(instance);
137
+ if (err.length > 0)
138
+ throw new ValidateException(err[0]);
139
+ arg = instance;
140
+ } else {
141
+ if ([
142
+ Number,
143
+ Boolean
144
+ ].includes(reflect)) {
145
+ arg = reflect(arg);
146
+ if (reflect === Number && Object.is(arg, NaN))
147
+ throw new ValidateException(`parameter ${Number(index) + 1} should be a number`);
157
148
  }
158
149
  }
159
- return args.map((item) => item.arg);
150
+ return arg;
160
151
  }, "defaultPipe");
161
152
 
162
153
  // src/exception/undefine.ts
@@ -305,7 +296,9 @@ var _Context = class {
305
296
  data._context = this;
306
297
  }
307
298
  usePipe(args) {
308
- return _Context.pipe(args, this.tag, this.data);
299
+ return Promise.all(args.map((item) => {
300
+ return _Context.pipeRecord[item.pipe || "default"](item, this.tag, this.data);
301
+ }));
309
302
  }
310
303
  useFilter(arg) {
311
304
  return _Context.filter(arg, this.tag, this.data);
@@ -364,7 +357,9 @@ var _Context = class {
364
357
  var Context = _Context;
365
358
  __name(Context, "Context");
366
359
  __publicField(Context, "filter", defaultFilter);
367
- __publicField(Context, "pipe", defaultPipe);
360
+ __publicField(Context, "pipeRecord", {
361
+ default: defaultPipe
362
+ });
368
363
  __publicField(Context, "guardsRecord", {});
369
364
  __publicField(Context, "interceptorsRecord", {});
370
365
  __publicField(Context, "middlewareRecord", {});
@@ -372,10 +367,10 @@ function addMiddleware(key, handler) {
372
367
  Context.middlewareRecord[key] = handler;
373
368
  }
374
369
  __name(addMiddleware, "addMiddleware");
375
- function setPipe(pipe) {
376
- Context.pipe = pipe;
370
+ function addPipe(key, pipe) {
371
+ Context.pipeRecord[key] = pipe;
377
372
  }
378
- __name(setPipe, "setPipe");
373
+ __name(addPipe, "addPipe");
379
374
  function setFilter(filter) {
380
375
  Context.filter = filter;
381
376
  }
@@ -706,40 +701,66 @@ var import_phecda_core6 = require("phecda-core");
706
701
 
707
702
  // src/decorators/param.ts
708
703
  var import_phecda_core3 = require("phecda-core");
709
- function BaseParam(type, key, option) {
704
+ function BaseParam(type, key) {
710
705
  return (target, k, index) => {
711
706
  (0, import_phecda_core3.setModelVar)(target, k);
712
707
  const state = target._namespace.__STATE_NAMESPACE__.get(k) || {};
713
708
  if (!state.params)
714
709
  state.params = [];
715
- state.params.push({
716
- type,
717
- key,
718
- index,
719
- option
720
- });
710
+ const existItem = state.params.find((item) => item.index === index);
711
+ if (existItem)
712
+ Object.assign(existItem, {
713
+ type,
714
+ key
715
+ });
716
+ else
717
+ state.params.push({
718
+ type,
719
+ key,
720
+ index
721
+ });
721
722
  (0, import_phecda_core3.setState)(target, k, state);
722
723
  };
723
724
  }
724
725
  __name(BaseParam, "BaseParam");
725
- function Body(key = "", pipeOpts) {
726
- return BaseParam("body", key, pipeOpts);
726
+ function Pipe(key, opts) {
727
+ return (target, k, index) => {
728
+ (0, import_phecda_core3.setModelVar)(target, k);
729
+ const state = target._namespace.__STATE_NAMESPACE__.get(k) || {};
730
+ const existItem = state.params.find((item) => item.index === index);
731
+ if (existItem)
732
+ Object.assign(existItem, {
733
+ pipe: key,
734
+ pipeOpts: opts
735
+ });
736
+ else
737
+ state.params.push({
738
+ pipe: key,
739
+ pipeOpts: opts,
740
+ index
741
+ });
742
+ (0, import_phecda_core3.setState)(target, k, state);
743
+ };
744
+ }
745
+ __name(Pipe, "Pipe");
746
+ function Body(key = "") {
747
+ return BaseParam("body", key);
727
748
  }
728
749
  __name(Body, "Body");
729
- function Head(key, pipeOpts) {
730
- return BaseParam("headers", key.toLowerCase(), pipeOpts);
750
+ function Head(key) {
751
+ return BaseParam("headers", key.toLowerCase());
731
752
  }
732
753
  __name(Head, "Head");
733
- function Query(key = "", pipeOpts) {
734
- return BaseParam("query", key, pipeOpts);
754
+ function Query(key = "") {
755
+ return BaseParam("query", key);
735
756
  }
736
757
  __name(Query, "Query");
737
- function Param(key, pipeOpts) {
738
- return BaseParam("params", key, pipeOpts);
758
+ function Param(key) {
759
+ return BaseParam("params", key);
739
760
  }
740
761
  __name(Param, "Param");
741
- function Arg(pipeOpts) {
742
- return BaseParam("params", "", pipeOpts);
762
+ function Arg() {
763
+ return BaseParam("params", "");
743
764
  }
744
765
  __name(Arg, "Arg");
745
766
 
@@ -932,8 +953,8 @@ __name(PInterceptor, "PInterceptor");
932
953
 
933
954
  // src/modules/pipe.ts
934
955
  var PPipe = class {
935
- constructor() {
936
- setPipe(this.use.bind(this));
956
+ constructor(key) {
957
+ addPipe(key, this.use.bind(this));
937
958
  }
938
959
  };
939
960
  __name(PPipe, "PPipe");
@@ -975,6 +996,7 @@ __name(PPipe, "PPipe");
975
996
  Param,
976
997
  Patch,
977
998
  PayloadLargeException,
999
+ Pipe,
978
1000
  Post,
979
1001
  Put,
980
1002
  Query,
@@ -990,13 +1012,13 @@ __name(PPipe, "PPipe");
990
1012
  addGuard,
991
1013
  addInterceptor,
992
1014
  addMiddleware,
1015
+ addPipe,
993
1016
  defaultPipe,
994
1017
  emitter,
995
1018
  generateHTTPCode,
996
1019
  generateRPCCode,
997
1020
  guardsRecord,
998
1021
  resolveDep,
999
- setFilter,
1000
- setPipe
1022
+ setFilter
1001
1023
  });
1002
1024
  //# sourceMappingURL=index.js.map
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.ts","../src/core.ts","../src/meta.ts","../src/utils.ts","../src/common.ts","../src/compiler/rpc.ts","../src/compiler/http.ts","../src/decorators/index.ts","../src/decorators/param.ts","../src/decorators/route.ts","../src/decorators/aop.ts","../src/helper.ts","../src/modules/dev.ts","../src/modules/filter.ts","../src/modules/guard.ts","../src/modules/interceptor.ts","../src/modules/pipe.ts"],"sourcesContent":["export * from './context'\nexport * from './types'\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'\nexport * from './modules'\nexport * from './compiler'\n","import { isPhecda, plainToClass, transformClass } from 'phecda-core'\nimport { ValidateException } from './exception/validate'\n\nimport type { P } from './types'\n\nexport const defaultPipe: P.Pipe = async (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 instance = plainToClass(reflect, arg)\n const err = await transformClass(instance)\n if (err.length > 0)\n throw new ValidateException(err[0])\n\n args[i].arg = instance\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","export class Exception extends Error {\n constructor(public message: string, public status: number, public description = 'Http exception') {\n super(message)\n }\n\n get data() {\n return { message: this.message, description: this.description, status: this.status, error: true }\n }\n}\n","import { Exception } from './base'\n\nexport class ValidateException extends Exception {\n constructor(message: string) {\n super(message, 400, 'Validate exception')\n }\n}\n","import { Exception } from './base'\n\nexport class UndefinedException extends Exception {\n constructor(message: string) {\n super(message, 500, 'Undefined error')\n }\n}\n","import { Exception } from './base'\n\nexport class ForbiddenException extends Exception {\n constructor(message: string) {\n super(message, 403, 'Forbidden resource')\n }\n}\n","import { Exception } from './base'\n\nexport class BadRequestException extends Exception {\n constructor(message: string) {\n super(message, 400, 'Bad Request')\n }\n}\n","import { Exception } from './base'\n\nexport class NotFoundException extends Exception {\n constructor(message: string) {\n super(message, 404, 'Not Found')\n }\n}\n","import { Exception } from './base'\n\nexport class ConflictException extends Exception {\n constructor(message: string) {\n super(message, 409, 'Conflict')\n }\n}\n","import { Exception } from './base'\n\nexport class BadGatewayException extends Exception {\n constructor(message: string) {\n super(message, 502, 'Bad Gatrway')\n }\n}\n","import { Exception } from './base'\n\nexport class InvalidInputException extends Exception {\n constructor(message: string) {\n super(message, 502, 'Invalid Input')\n }\n}\n","import { Exception } from './base'\n\nexport class UnsupportedMediaTypeException extends Exception {\n constructor(message: string) {\n super(message, 415, 'Unsupported Media Type')\n }\n}\n","import { Exception } from './base'\n\nexport class PayloadLargeException extends Exception {\n constructor(message: string) {\n super(message, 413, 'Payload Too Large')\n }\n}\n","import { Exception } from './base'\n\nexport class TimeoutException extends Exception {\n constructor(message: string) {\n super(message, 408, 'Request Timeout',\n )\n }\n}\n","import { Exception } from './base'\n\nexport class UnauthorizedException extends Exception {\n constructor(message: string) {\n super(message, 401, 'Unauthorized')\n }\n}\n","import { Exception } from './base'\n\nexport class ServiceUnavailableException extends Exception {\n constructor(message: string) {\n super(message, 503, 'Service Unavailable')\n }\n}\n","import { Exception } from './base'\n\nexport class FrameworkException extends Exception {\n constructor(message: string) {\n super(`[phecda-server] ${message}`, 500, 'Framework Error')\n }\n}\n","import { Exception, UndefinedException } from './exception'\nimport type { P } from './types'\n\nexport const defaultFilter: P.Filter = (e: any) => {\n if (!(e instanceof Exception)) {\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 Histroy {\n guard: string[] = []\n interceptor: string[] = []\n record(name: string, type: 'guard' | 'interceptor') {\n if (!this[type].includes(name)) {\n this[type].push(name)\n return true\n }\n return false\n }\n}\n","import { defaultPipe } from './pipe'\nimport { ForbiddenException, FrameworkException } from './exception'\nimport { defaultFilter } from './filter'\nimport { Histroy } from './history'\nimport type { P } from './types'\n\nexport const guardsRecord = {} as Record<string, P.Guard>\n\nexport class Context<Data = any> {\n method: string\n params: string[]\n history = new Histroy()\n\n static filter: P.Filter = defaultFilter\n static pipe: P.Pipe = defaultPipe\n static guardsRecord: Record<string, P.Guard> = {}\n static interceptorsRecord: Record<string, P.Interceptor> = {}\n\n static middlewareRecord: Record<string, (...params: any) => any> = {}\n postInterceptors: Function[]\n\n constructor(public tag: string, public data: Data) {\n if (process.env.NODE_ENV === 'development')\n // @ts-expect-error work for debug\n data._context = this\n }\n\n usePipe(args: { arg: any; option?: any; type: string; key: string; index: number; reflect: any }[]) {\n return Context.pipe(args, this.tag, this.data)\n }\n\n useFilter(arg: any) {\n return Context.filter(arg, this.tag, this.data)\n }\n\n async useGuard(guards: string[]) {\n for (const guard of guards) {\n if (this.history.record(guard, 'guard')) {\n if (!(guard in Context.guardsRecord)) {\n if (process.env.PS_STRICT)\n throw new FrameworkException(`can't find guard named '${guard}'`)\n continue\n }\n if (!await Context.guardsRecord[guard](this.tag, this.data))\n throw new ForbiddenException(`Guard exception--${guard}`)\n }\n }\n }\n\n async usePostInterceptor(ret: any) {\n for (const cb of this.postInterceptors)\n ret = await cb(ret) || ret\n\n return ret\n }\n\n async useInterceptor(interceptors: string[]) {\n const ret = []\n for (const interceptor of interceptors) {\n if (this.history.record(interceptor, 'interceptor')) {\n if (!(interceptor in Context.interceptorsRecord)) {\n if (process.env.PS_STRICT)\n throw new FrameworkException(`can't find interceptor named '${interceptor}'`)\n\n continue\n }\n const postInterceptor = await Context.interceptorsRecord[interceptor](this.tag, this.data)\n if (postInterceptor !== undefined) {\n if (typeof postInterceptor === 'function')\n ret.push(postInterceptor)\n\n else\n return true\n }\n }\n }\n this.postInterceptors = ret\n }\n\n static useMiddleware(middlewares: string[]) {\n const ret = []\n for (const m of middlewares) {\n if (!(m in Context.middlewareRecord)) {\n if (process.env.PS_STRICT)\n throw new FrameworkException(`can't find middleware named '${m}'`)\n\n continue\n }\n ret.push(Context.middlewareRecord[m])\n }\n return ret as any[]\n }\n}\nexport function addMiddleware(key: string, handler: (...params: any) => any) {\n Context.middlewareRecord[key] = handler\n}\n\nexport function setPipe(pipe: P.Pipe) {\n Context.pipe = pipe\n}\n\nexport function setFilter(filter: P.Filter) {\n Context.filter = filter\n}\n\nexport function addGuard(key: string, handler: P.Guard) {\n Context.guardsRecord[key] = handler\n}\n\nexport function addInterceptor(key: string, handler: P.Interceptor) {\n Context.interceptorsRecord[key] = handler\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, isPhecda, registerAsync } from 'phecda-core'\nimport Debug from 'debug'\nimport type { Construct, Emitter, P } from './types'\nimport { Meta } from './meta'\nimport { warn } from './utils'\nimport { UNMOUNT_SYMBOL } from './common'\nimport { generateHTTPCode, generateRPCCode } from './compiler'\n\nconst debug = Debug('phecda-server')\n// TODO: support both emitter types and origin emitter type in future\nexport const emitter: Emitter = new EventEmitter() as any\n\nexport async function Factory(Modules: (new (...args: any) => any)[], opts: {\n\n // HTTP generate code path\n http?: string\n // rpc generate code path\n rpc?: string\n} = {}) {\n const moduleMap = new Map<string, InstanceType<Construct>>()\n const meta: Meta[] = []\n const constructorMap = new Map()\n\n // only work for warn\n const constructorSet = new WeakSet()\n const moduleGraph = new Map<string, Set<string>>()\n const { http, rpc } = opts\n injectProperty('watcher', ({ eventName, instance, key, options }: { eventName: string; instance: any; key: string; options?: { once: boolean } }) => {\n const fn = typeof instance[key] === 'function' ? instance[key].bind(instance) : (v: any) => instance[key] = v\n\n if (options?.once)\n (emitter as any).once(eventName, fn)\n\n else\n (emitter as any).on(eventName, fn)\n })\n\n async function update(Module: Construct) {\n const tag = Module.prototype?.__TAG__ || Module.name\n if (!moduleMap.has(tag))\n return\n debug(`update module \"${tag}\"`)\n\n const instance = moduleMap.get(tag)\n\n if (instance?.[UNMOUNT_SYMBOL]) {\n for (const cb of instance[UNMOUNT_SYMBOL])\n await cb()\n }\n moduleMap.delete(tag)\n constructorMap.delete(tag)\n for (let i = meta.length - 1; i >= 0; i--) {\n if (meta[i].data.tag === tag)\n meta.splice(i, 1)\n }\n\n const { instance: newModule } = await buildNestModule(Module)\n if (moduleGraph.has(tag)) {\n [...moduleGraph.get(tag)!].forEach((tag) => {\n const module = moduleMap.get(tag)\n for (const key in module) {\n if (module[key] === instance)\n module[key] = newModule\n }\n })\n }\n\n moduleMap.set(tag, newModule)\n }\n async function buildNestModule(Module: Construct) {\n const paramtypes = getParamTypes(Module) as Construct[]\n let instance: InstanceType<Construct>\n const tag = Module.prototype?.__TAG__ || Module.name\n if (moduleMap.has(tag)) {\n instance = moduleMap.get(tag)\n if (!instance)\n throw new Error(`exist Circular-Dependency or Multiple modules with the same name/tag [tag] ${tag}--[module] ${Module}`)\n\n if (constructorMap.get(tag) !== Module && !constructorSet.has(Module)) {\n constructorSet.add(Module)// a module will only warn once\n warn(`Synonym module: Module taged \"${tag}\" has been loaded before, so phecda-server won't load Module \"${Module.name}\"`)\n }\n return { instance, tag }\n }\n moduleMap.set(tag, undefined)\n if (paramtypes) {\n const paramtypesInstances = [] as any[]\n for (const i in paramtypes) {\n const { instance: sub, tag: subTag } = await buildNestModule(paramtypes[i])\n paramtypesInstances[i] = sub\n if (!moduleGraph.has(subTag))\n moduleGraph.set(subTag, new Set())\n moduleGraph.get(subTag)!.add(tag)\n }\n instance = new Module(...paramtypesInstances)\n }\n else {\n instance = new Module()\n }\n meta.push(...getMetaFromInstance(instance, tag, Module.name))\n await registerAsync(instance)\n moduleMap.set(tag, instance)\n constructorMap.set(tag, Module)\n return { instance, tag }\n }\n\n for (const Module of Modules)\n await buildNestModule(Module)\n\n function writeMeta() {\n debug('write metadata')\n\n http && fs.promises.writeFile(http, generateHTTPCode(meta.map(item => item.data)))\n rpc && fs.promises.writeFile(rpc, generateRPCCode(meta.map(item => item.data)))\n }\n\n writeMeta()\n if (process.env.NODE_ENV === 'development') {\n // @ts-expect-error globalThis\n globalThis.__PS_HMR__ = async (file: string) => {\n debug(`reload file ${file}`)\n const module = await import(file)\n for (const i in module) {\n if (isPhecda(module[i]))\n await update(module[i])\n }\n }\n // @ts-expect-error globalThis\n globalThis.__PS_WRITEMETA__ = writeMeta\n }\n\n return {\n moduleMap,\n meta,\n constructorMap,\n update,\n }\n}\n\nfunction getMetaFromInstance(instance: Phecda, tag: string, name: string) {\n const vars = getExposeKey(instance).filter(item => item !== '__CLASS')\n const baseState = (getState(instance, '__CLASS') || {}) as P.Meta\n initState(baseState)\n\n return vars.map((i) => {\n const meta = {} as P.Meta\n const state = (getState(instance, i) || {}) as P.Meta\n initState(state)\n if (state.http) {\n meta.http = {\n route: (baseState.http?.route || '') + (state.http.route),\n type: state.http.type,\n }\n }\n if (baseState.rpc)\n meta.rpc = baseState.rpc\n if (state.rpc) {\n meta.rpc = {\n ...meta.rpc,\n ...state.rpc,\n }\n }\n\n meta.name = name\n meta.tag = tag\n meta.method = i as string\n const params = [] as any[]\n for (const i of state.params || []) {\n params.unshift(i)\n if (i.index === 0)\n break\n }\n\n meta.params = params\n meta.define = { ...baseState.define, ...state.define }\n meta.header = { ...baseState.header, ...state.header }\n meta.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 paramsType: any[]) {\n\n }\n}\n","import pc from 'picocolors'\n\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 no matter\n console.warn(`${pc.magenta('[phecda-server]')} ${pc[color](msg)}`)\n}\n","export const MERGE_SYMBOL = '__PS_MERGE__'\nexport const UNMOUNT_SYMBOL = '__PS_UNMOUNT__'\nexport const MODULE_SYMBOL = '__PS_MODULE__'\nexport const META_SYMBOL = '__PS_META__'\nexport const APP_SYMBOL = '__PS__'\n","import type { P } from '../types'\n\nclass Compiler {\n classMap: Record<string, { [key: string]: string }> = {}\n constructor() { }\n\n getContent() {\n let content = ''\n\n for (const name in this.classMap) {\n content += `\n export class ${name}{\n ${Object.values(this.classMap[name]).reduce((p, c) => p + c)}\n }`\n }\n return content\n }\n\n addMethod(args: P.Meta) {\n const {\n rpc, name, method, tag,\n } = args\n if (!rpc || !rpc.type)\n return\n if (!this.classMap[name])\n this.classMap[name] = {}\n this.classMap[name][method] = `\n ${method}(){\n return {tag:'${tag}-${method}',isEvent:${!!rpc.isEvent},rpc:[${rpc.type.reduce((p, c) => {\n return `${p}\"${c}\",`\n }, '')}]}\n\n }\n `\n }\n}\n\nexport function generateRPCCode(meta: P.Meta[]) {\n const compiler = new Compiler()\n\n for (const i of meta)\n compiler.addMethod(i)\n return compiler.getContent()\n}\n","import type { P } from '../types'\n\nclass Compiler {\n classMap: Record<string, { [key: string]: string }> = {}\n constructor() { }\n\n getContent() {\n let content = ''\n\n for (const name in this.classMap) {\n content += `\n export class ${name}{\n ${Object.values(this.classMap[name]).reduce((p, c) => p + c)}\n }`\n }\n return content\n }\n\n // createRequest() {\n // let content = 'import {useC} from \\'phecda-server\\'\\n'\n // for (const name in this.classMap)\n // content += `export const {${Object.keys(this.classMap[name]).join(',')}}=useC(${name})\\n`\n // return content\n // }\n\n addMethod(args: P.Meta) {\n const {\n http, name, method, params, tag,\n } = args\n if (!http)\n return\n const url = http.route.replace(/\\/\\:([^\\/]*)/g, (_, js) => `/{{${js}}}`)\n if (!this.classMap[name])\n this.classMap[name] = {}\n this.classMap[name][method] = `\n ${method}(...args){\nconst ret={tag:\"${tag}-${method}\",body:{},headers:{},query:{},params:{},method:\"${http.type}\",url:\"${url}\",args}\n\n${params.reduce((p, c, i) => `${p}ret.${c.type}${c.key ? `['${c.key}']` : ''}=args[${i}]\\n${c.type === 'params' ? `ret.url=ret.url.replace('{{${c.key}}}',args[${i}])` : ''}\\n`, '')}\nreturn ret\n }\n `\n }\n}\n\nexport function generateHTTPCode(meta: P.Meta[]) {\n const compiler = new Compiler()\n\n for (const i of meta)\n compiler.addMethod(i)\n return compiler.getContent()\n}\n","import { 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'\nexport * from './aop'\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}\n// req.headers\nexport function Head(key: string, pipeOpts?: any) {\n return BaseParam('headers', key.toLowerCase(), pipeOpts)\n}\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\n// work for micro service\nexport function Arg(pipeOpts?: any) {\n return BaseParam('params', '', 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.http = {\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 Rpc(...types: ('mq' | 'redis' | string)[]) {\n return (target: any, key?: PropertyKey) => {\n if (!key)\n key = '__CLASS'\n target = key === '__CLASS' ? target.prototype : target\n setModelVar(target, key)\n const state = target._namespace.__STATE_NAMESPACE__.get(key) || {}\n if (!state.rpc)\n state.rpc = {}\n\n state.rpc.type = types\n setState(target, key, state)\n }\n}\nexport function Event(isEvent = true) {\n return (target: any, key?: PropertyKey) => {\n if (!key)\n key = '__CLASS'\n target = key === '__CLASS' ? target.prototype : target\n setModelVar(target, key)\n const state = target._namespace.__STATE_NAMESPACE__.get(key) || {}\n if (!state.rpc)\n state.rpc = {}\n\n state.rpc.isEvent = isEvent\n setState(target, key, state)\n }\n}\n","import { setModelVar, setState } from 'phecda-core'\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 function resolveDep(ret: any, key: string) {\n if (key)\n return ret?.[key]\n return ret\n}\n","import { UNMOUNT_SYMBOL } from '../common'\n\nexport class Dev {\n [UNMOUNT_SYMBOL]: (() => void)[] = []\n onUnmount(cb: () => void) {\n this[UNMOUNT_SYMBOL].push(cb)\n }\n}\n","import { setFilter } from '../context'\nimport type { Exception } from '../exception'\n\nexport abstract class PFilter {\n constructor() {\n setFilter(this.use.bind(this))\n }\n\n abstract use< C, S, E extends Exception >(error: Error | E, tag?: string, ctx?: C): S\n}\n","import { addGuard } from '../context'\n\nexport abstract class PGuard {\n abstract use<C>(tag: string, ctx: C): Promise<boolean> | boolean\n\n constructor(tag: string) {\n addGuard(tag, this.use.bind(this))\n }\n}\n","import { addInterceptor } from '../context'\n\nexport abstract class PInterceptor {\n abstract use<C>(tag: string, ctx: C): ((arg: any) => any) | void\n\n constructor(tag: string) {\n addInterceptor(tag, this.use.bind(this))\n }\n}\n","import { setPipe } from '../context'\n\nexport abstract class PPipe {\n constructor() {\n setPipe(this.use.bind(this))\n }\n\n abstract use<C>(args: { arg: any; option?: any; key: string; type: string; index: number; reflect: any }[], tag: string, ctx: C): Promise<any[]>\n}\n"],"mappings":"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","names":["Exception","Error","message","status","description","constructor","data","error","ValidateException","Exception","constructor","message","defaultPipe","args","i","option","arg","reflect","isPhecda","instance","plainToClass","err","transformClass","length","ValidateException","Number","Boolean","includes","Object","is","NaN","map","item","UndefinedException","Exception","constructor","message","ForbiddenException","Exception","constructor","message","BadRequestException","Exception","constructor","message","NotFoundException","Exception","constructor","message","ConflictException","Exception","constructor","message","BadGatewayException","Exception","constructor","message","InvalidInputException","Exception","constructor","message","UnsupportedMediaTypeException","Exception","constructor","message","PayloadLargeException","Exception","constructor","message","TimeoutException","Exception","constructor","message","UnauthorizedException","Exception","constructor","message","ServiceUnavailableException","Exception","constructor","message","FrameworkException","Exception","constructor","message","defaultFilter","e","Exception","console","error","stack","UndefinedException","message","data","Histroy","guard","interceptor","record","name","type","includes","push","guardsRecord","Context","tag","data","method","params","history","postInterceptors","constructor","Histroy","process","env","NODE_ENV","_context","usePipe","args","pipe","useFilter","arg","filter","useGuard","guards","guard","record","PS_STRICT","FrameworkException","ForbiddenException","usePostInterceptor","ret","cb","useInterceptor","interceptors","interceptor","interceptorsRecord","postInterceptor","undefined","push","useMiddleware","middlewares","m","middlewareRecord","defaultFilter","defaultPipe","addMiddleware","key","handler","setPipe","setFilter","addGuard","addInterceptor","import_phecda_core","Meta","data","handlers","paramsType","constructor","warn","msg","color","console","pc","magenta","MERGE_SYMBOL","UNMOUNT_SYMBOL","MODULE_SYMBOL","META_SYMBOL","APP_SYMBOL","Compiler","classMap","constructor","getContent","content","name","Object","values","reduce","p","c","addMethod","args","rpc","method","tag","type","isEvent","generateRPCCode","meta","compiler","i","Compiler","classMap","constructor","getContent","content","name","Object","values","reduce","p","c","addMethod","args","http","method","params","tag","url","route","replace","_","js","type","i","key","generateHTTPCode","meta","compiler","debug","Debug","emitter","EventEmitter","Factory","Modules","opts","moduleMap","Map","meta","constructorMap","constructorSet","WeakSet","moduleGraph","http","rpc","injectProperty","eventName","instance","key","options","fn","bind","v","once","on","update","Module","tag","prototype","__TAG__","name","has","get","UNMOUNT_SYMBOL","cb","delete","i","length","data","splice","newModule","buildNestModule","forEach","module","set","paramtypes","getParamTypes","Error","add","warn","undefined","paramtypesInstances","sub","subTag","Set","push","getMetaFromInstance","registerAsync","writeMeta","fs","promises","writeFile","generateHTTPCode","map","item","generateRPCCode","process","env","NODE_ENV","globalThis","__PS_HMR__","file","isPhecda","__PS_WRITEMETA__","vars","getExposeKey","filter","baseState","getState","initState","state","route","type","method","params","unshift","index","define","header","middlewares","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","Head","toLowerCase","Query","Param","Arg","import_phecda_core","Route","route","type","target","key","prototype","setModelVar","state","_namespace","__STATE_NAMESPACE__","get","http","setState","Get","Post","Put","Patch","Delete","Controller","Rpc","types","rpc","Event","isEvent","import_phecda_core","Guard","guards","target","key","prototype","setModelVar","state","_namespace","__STATE_NAMESPACE__","get","push","setState","Middle","middlewares","Interceptor","interceptors","Header","name","value","target","k","setModelVar","state","_namespace","__STATE_NAMESPACE__","get","header","setState","Define","key","prototype","define","resolveDep","ret","key","Dev","UNMOUNT_SYMBOL","onUnmount","cb","push","PFilter","constructor","setFilter","use","bind","PGuard","constructor","tag","addGuard","use","bind","PInterceptor","constructor","tag","addInterceptor","use","bind","PPipe","constructor","setPipe","use","bind"]}
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.ts","../src/core.ts","../src/meta.ts","../src/utils.ts","../src/common.ts","../src/compiler/rpc.ts","../src/compiler/http.ts","../src/decorators/index.ts","../src/decorators/param.ts","../src/decorators/route.ts","../src/decorators/aop.ts","../src/helper.ts","../src/modules/dev.ts","../src/modules/filter.ts","../src/modules/guard.ts","../src/modules/interceptor.ts","../src/modules/pipe.ts"],"sourcesContent":["export * from './context'\nexport * from './types'\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'\nexport * from './modules'\nexport * from './compiler'\n","import { isPhecda, plainToClass, transformClass } from 'phecda-core'\nimport { ValidateException } from './exception/validate'\n\nimport type { P } from './types'\n\nexport const defaultPipe: P.Pipe = async ({ arg, reflect, index }: any) => {\n if (isPhecda(reflect)) {\n const instance = plainToClass(reflect, arg)\n const err = await transformClass(instance)\n if (err.length > 0)\n throw new ValidateException(err[0])\n\n arg = instance\n }\n else {\n if ([Number, Boolean].includes(reflect)) {\n arg = reflect(arg)\n\n if (reflect === Number && Object.is(arg, NaN))\n throw new ValidateException(`parameter ${Number(index) + 1} should be a number`)\n }\n }\n return arg\n}\n","export class Exception extends Error {\n constructor(public message: string, public status: number, public description = 'Http exception') {\n super(message)\n }\n\n get data() {\n return { message: this.message, description: this.description, status: this.status, error: true }\n }\n}\n","import { Exception } from './base'\n\nexport class ValidateException extends Exception {\n constructor(message: string) {\n super(message, 400, 'Validate exception')\n }\n}\n","import { Exception } from './base'\n\nexport class UndefinedException extends Exception {\n constructor(message: string) {\n super(message, 500, 'Undefined error')\n }\n}\n","import { Exception } from './base'\n\nexport class ForbiddenException extends Exception {\n constructor(message: string) {\n super(message, 403, 'Forbidden resource')\n }\n}\n","import { Exception } from './base'\n\nexport class BadRequestException extends Exception {\n constructor(message: string) {\n super(message, 400, 'Bad Request')\n }\n}\n","import { Exception } from './base'\n\nexport class NotFoundException extends Exception {\n constructor(message: string) {\n super(message, 404, 'Not Found')\n }\n}\n","import { Exception } from './base'\n\nexport class ConflictException extends Exception {\n constructor(message: string) {\n super(message, 409, 'Conflict')\n }\n}\n","import { Exception } from './base'\n\nexport class BadGatewayException extends Exception {\n constructor(message: string) {\n super(message, 502, 'Bad Gatrway')\n }\n}\n","import { Exception } from './base'\n\nexport class InvalidInputException extends Exception {\n constructor(message: string) {\n super(message, 502, 'Invalid Input')\n }\n}\n","import { Exception } from './base'\n\nexport class UnsupportedMediaTypeException extends Exception {\n constructor(message: string) {\n super(message, 415, 'Unsupported Media Type')\n }\n}\n","import { Exception } from './base'\n\nexport class PayloadLargeException extends Exception {\n constructor(message: string) {\n super(message, 413, 'Payload Too Large')\n }\n}\n","import { Exception } from './base'\n\nexport class TimeoutException extends Exception {\n constructor(message: string) {\n super(message, 408, 'Request Timeout',\n )\n }\n}\n","import { Exception } from './base'\n\nexport class UnauthorizedException extends Exception {\n constructor(message: string) {\n super(message, 401, 'Unauthorized')\n }\n}\n","import { Exception } from './base'\n\nexport class ServiceUnavailableException extends Exception {\n constructor(message: string) {\n super(message, 503, 'Service Unavailable')\n }\n}\n","import { Exception } from './base'\n\nexport class FrameworkException extends Exception {\n constructor(message: string) {\n super(`[phecda-server] ${message}`, 500, 'Framework Error')\n }\n}\n","import { Exception, UndefinedException } from './exception'\nimport type { P } from './types'\n\nexport const defaultFilter: P.Filter = (e: any) => {\n if (!(e instanceof Exception)) {\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 Histroy {\n guard: string[] = []\n interceptor: string[] = []\n record(name: string, type: 'guard' | 'interceptor') {\n if (!this[type].includes(name)) {\n this[type].push(name)\n return true\n }\n return false\n }\n}\n","import { defaultPipe } from './pipe'\nimport { ForbiddenException, FrameworkException } from './exception'\nimport { defaultFilter } from './filter'\nimport { Histroy } from './history'\nimport type { P } from './types'\n\nexport const guardsRecord = {} as Record<string, P.Guard>\n\nexport class Context<Data = any> {\n method: string\n params: string[]\n history = new Histroy()\n\n static filter: P.Filter = defaultFilter\n static pipeRecord: Record<string, P.Pipe> = {\n default: defaultPipe,\n }\n\n static guardsRecord: Record<string, P.Guard> = {}\n static interceptorsRecord: Record<string, P.Interceptor> = {}\n\n static middlewareRecord: Record<string, (...params: any) => any> = {}\n postInterceptors: Function[]\n\n constructor(public tag: string, public data: Data) {\n if (process.env.NODE_ENV === 'development')\n // @ts-expect-error work for debug\n data._context = this\n }\n\n usePipe(args: { arg: any; pipe?: string; pipeOpts?: any; type: string; key: string; index: number; reflect: any }[]) {\n return Promise.all(args.map((item) => {\n return Context.pipeRecord[item.pipe || 'default'](item, this.tag, this.data)\n }))\n }\n\n useFilter(arg: any) {\n return Context.filter(arg, this.tag, this.data)\n }\n\n async useGuard(guards: string[]) {\n for (const guard of guards) {\n if (this.history.record(guard, 'guard')) {\n if (!(guard in Context.guardsRecord)) {\n if (process.env.PS_STRICT)\n throw new FrameworkException(`can't find guard named '${guard}'`)\n continue\n }\n if (!await Context.guardsRecord[guard](this.tag, this.data))\n throw new ForbiddenException(`Guard exception--${guard}`)\n }\n }\n }\n\n async usePostInterceptor(ret: any) {\n for (const cb of this.postInterceptors)\n ret = await cb(ret) || ret\n\n return ret\n }\n\n async useInterceptor(interceptors: string[]) {\n const ret = []\n for (const interceptor of interceptors) {\n if (this.history.record(interceptor, 'interceptor')) {\n if (!(interceptor in Context.interceptorsRecord)) {\n if (process.env.PS_STRICT)\n throw new FrameworkException(`can't find interceptor named '${interceptor}'`)\n\n continue\n }\n const postInterceptor = await Context.interceptorsRecord[interceptor](this.tag, this.data)\n if (postInterceptor !== undefined) {\n if (typeof postInterceptor === 'function')\n ret.push(postInterceptor)\n\n else\n return true\n }\n }\n }\n this.postInterceptors = ret\n }\n\n static useMiddleware(middlewares: string[]) {\n const ret = []\n for (const m of middlewares) {\n if (!(m in Context.middlewareRecord)) {\n if (process.env.PS_STRICT)\n throw new FrameworkException(`can't find middleware named '${m}'`)\n\n continue\n }\n ret.push(Context.middlewareRecord[m])\n }\n return ret as any[]\n }\n}\nexport function addMiddleware(key: string, handler: (...params: any) => any) {\n Context.middlewareRecord[key] = handler\n}\n\nexport function addPipe(key: string, pipe: P.Pipe) {\n Context.pipeRecord[key] = pipe\n}\n\nexport function setFilter(filter: P.Filter) {\n Context.filter = filter\n}\n\nexport function addGuard(key: string, handler: P.Guard) {\n Context.guardsRecord[key] = handler\n}\n\nexport function addInterceptor(key: string, handler: P.Interceptor) {\n Context.interceptorsRecord[key] = handler\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, isPhecda, registerAsync } from 'phecda-core'\nimport Debug from 'debug'\nimport type { Construct, Emitter, P } from './types'\nimport { Meta } from './meta'\nimport { warn } from './utils'\nimport { UNMOUNT_SYMBOL } from './common'\nimport { generateHTTPCode, generateRPCCode } from './compiler'\n\nconst debug = Debug('phecda-server')\n// TODO: support both emitter types and origin emitter type in future\nexport const emitter: Emitter = new EventEmitter() as any\n\nexport async function Factory(Modules: (new (...args: any) => any)[], opts: {\n\n // HTTP generate code path\n http?: string\n // rpc generate code path\n rpc?: string\n} = {}) {\n const moduleMap = new Map<string, InstanceType<Construct>>()\n const meta: Meta[] = []\n const constructorMap = new Map()\n\n // only work for warn\n const constructorSet = new WeakSet()\n const moduleGraph = new Map<string, Set<string>>()\n const { http, rpc } = opts\n injectProperty('watcher', ({ eventName, instance, key, options }: { eventName: string; instance: any; key: string; options?: { once: boolean } }) => {\n const fn = typeof instance[key] === 'function' ? instance[key].bind(instance) : (v: any) => instance[key] = v\n\n if (options?.once)\n (emitter as any).once(eventName, fn)\n\n else\n (emitter as any).on(eventName, fn)\n })\n\n async function update(Module: Construct) {\n const tag = Module.prototype?.__TAG__ || Module.name\n if (!moduleMap.has(tag))\n return\n debug(`update module \"${tag}\"`)\n\n const instance = moduleMap.get(tag)\n\n if (instance?.[UNMOUNT_SYMBOL]) {\n for (const cb of instance[UNMOUNT_SYMBOL])\n await cb()\n }\n moduleMap.delete(tag)\n constructorMap.delete(tag)\n for (let i = meta.length - 1; i >= 0; i--) {\n if (meta[i].data.tag === tag)\n meta.splice(i, 1)\n }\n\n const { instance: newModule } = await buildNestModule(Module)\n if (moduleGraph.has(tag)) {\n [...moduleGraph.get(tag)!].forEach((tag) => {\n const module = moduleMap.get(tag)\n for (const key in module) {\n if (module[key] === instance)\n module[key] = newModule\n }\n })\n }\n\n moduleMap.set(tag, newModule)\n }\n async function buildNestModule(Module: Construct) {\n const paramtypes = getParamTypes(Module) as Construct[]\n let instance: InstanceType<Construct>\n const tag = Module.prototype?.__TAG__ || Module.name\n if (moduleMap.has(tag)) {\n instance = moduleMap.get(tag)\n if (!instance)\n throw new Error(`exist Circular-Dependency or Multiple modules with the same name/tag [tag] ${tag}--[module] ${Module}`)\n\n if (constructorMap.get(tag) !== Module && !constructorSet.has(Module)) {\n constructorSet.add(Module)// a module will only warn once\n warn(`Synonym module: Module taged \"${tag}\" has been loaded before, so phecda-server won't load Module \"${Module.name}\"`)\n }\n return { instance, tag }\n }\n moduleMap.set(tag, undefined)\n if (paramtypes) {\n const paramtypesInstances = [] as any[]\n for (const i in paramtypes) {\n const { instance: sub, tag: subTag } = await buildNestModule(paramtypes[i])\n paramtypesInstances[i] = sub\n if (!moduleGraph.has(subTag))\n moduleGraph.set(subTag, new Set())\n moduleGraph.get(subTag)!.add(tag)\n }\n instance = new Module(...paramtypesInstances)\n }\n else {\n instance = new Module()\n }\n meta.push(...getMetaFromInstance(instance, tag, Module.name))\n await registerAsync(instance)\n moduleMap.set(tag, instance)\n constructorMap.set(tag, Module)\n return { instance, tag }\n }\n\n for (const Module of Modules)\n await buildNestModule(Module)\n\n function writeMeta() {\n debug('write metadata')\n\n http && fs.promises.writeFile(http, generateHTTPCode(meta.map(item => item.data)))\n rpc && fs.promises.writeFile(rpc, generateRPCCode(meta.map(item => item.data)))\n }\n\n writeMeta()\n if (process.env.NODE_ENV === 'development') {\n // @ts-expect-error globalThis\n globalThis.__PS_HMR__ = async (file: string) => {\n debug(`reload file ${file}`)\n const module = await import(file)\n for (const i in module) {\n if (isPhecda(module[i]))\n await update(module[i])\n }\n }\n // @ts-expect-error globalThis\n globalThis.__PS_WRITEMETA__ = writeMeta\n }\n\n return {\n moduleMap,\n meta,\n constructorMap,\n update,\n }\n}\n\nfunction getMetaFromInstance(instance: Phecda, tag: string, name: string) {\n const vars = getExposeKey(instance).filter(item => item !== '__CLASS')\n const baseState = (getState(instance, '__CLASS') || {}) as P.Meta\n initState(baseState)\n\n return vars.map((i) => {\n const meta = {} as P.Meta\n const state = (getState(instance, i) || {}) as P.Meta\n initState(state)\n if (state.http) {\n meta.http = {\n route: (baseState.http?.route || '') + (state.http.route),\n type: state.http.type,\n }\n }\n if (baseState.rpc)\n meta.rpc = baseState.rpc\n if (state.rpc) {\n meta.rpc = {\n ...meta.rpc,\n ...state.rpc,\n }\n }\n\n meta.name = name\n meta.tag = tag\n meta.method = i as string\n const params = [] as any[]\n for (const i of state.params || []) {\n params.unshift(i)\n if (i.index === 0)\n break\n }\n\n meta.params = params\n meta.define = { ...baseState.define, ...state.define }\n meta.header = { ...baseState.header, ...state.header }\n meta.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 paramsType: any[]) {\n\n }\n}\n","import pc from 'picocolors'\n\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 no matter\n console.warn(`${pc.magenta('[phecda-server]')} ${pc[color](msg)}`)\n}\n","export const MERGE_SYMBOL = '__PS_MERGE__'\nexport const UNMOUNT_SYMBOL = '__PS_UNMOUNT__'\nexport const MODULE_SYMBOL = '__PS_MODULE__'\nexport const META_SYMBOL = '__PS_META__'\nexport const APP_SYMBOL = '__PS__'\n","import type { P } from '../types'\n\nclass Compiler {\n classMap: Record<string, { [key: string]: string }> = {}\n constructor() { }\n\n getContent() {\n let content = ''\n\n for (const name in this.classMap) {\n content += `\n export class ${name}{\n ${Object.values(this.classMap[name]).reduce((p, c) => p + c)}\n }`\n }\n return content\n }\n\n addMethod(args: P.Meta) {\n const {\n rpc, name, method, tag,\n } = args\n if (!rpc || !rpc.type)\n return\n if (!this.classMap[name])\n this.classMap[name] = {}\n this.classMap[name][method] = `\n ${method}(){\n return {tag:'${tag}-${method}',isEvent:${!!rpc.isEvent},rpc:[${rpc.type.reduce((p, c) => {\n return `${p}\"${c}\",`\n }, '')}]}\n\n }\n `\n }\n}\n\nexport function generateRPCCode(meta: P.Meta[]) {\n const compiler = new Compiler()\n\n for (const i of meta)\n compiler.addMethod(i)\n return compiler.getContent()\n}\n","import type { P } from '../types'\n\nclass Compiler {\n classMap: Record<string, { [key: string]: string }> = {}\n constructor() { }\n\n getContent() {\n let content = ''\n\n for (const name in this.classMap) {\n content += `\n export class ${name}{\n ${Object.values(this.classMap[name]).reduce((p, c) => p + c)}\n }`\n }\n return content\n }\n\n // createRequest() {\n // let content = 'import {useC} from \\'phecda-server\\'\\n'\n // for (const name in this.classMap)\n // content += `export const {${Object.keys(this.classMap[name]).join(',')}}=useC(${name})\\n`\n // return content\n // }\n\n addMethod(args: P.Meta) {\n const {\n http, name, method, params, tag,\n } = args\n if (!http)\n return\n const url = http.route.replace(/\\/\\:([^\\/]*)/g, (_, js) => `/{{${js}}}`)\n if (!this.classMap[name])\n this.classMap[name] = {}\n this.classMap[name][method] = `\n ${method}(...args){\nconst ret={tag:\"${tag}-${method}\",body:{},headers:{},query:{},params:{},method:\"${http.type}\",url:\"${url}\",args}\n\n${params.reduce((p, c, i) => `${p}ret.${c.type}${c.key ? `['${c.key}']` : ''}=args[${i}]\\n${c.type === 'params' ? `ret.url=ret.url.replace('{{${c.key}}}',args[${i}])` : ''}\\n`, '')}\nreturn ret\n }\n `\n }\n}\n\nexport function generateHTTPCode(meta: P.Meta[]) {\n const compiler = new Compiler()\n\n for (const i of meta)\n compiler.addMethod(i)\n return compiler.getContent()\n}\n","import { 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'\nexport * from './aop'\n","import { setModelVar, setState } from 'phecda-core'\n\nexport function BaseParam(type: string, key: string): 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 const existItem = state.params.find((item: any) => item.index === index)\n if (existItem)\n Object.assign(existItem, { type, key })\n\n else\n state.params.push({ type, key, index })\n\n setState(target, k, state)\n }\n}\n\nexport function Pipe(key?: string, opts?: any) {\n return (target: any, k: PropertyKey, index: number) => {\n setModelVar(target, k)\n\n const state = target._namespace.__STATE_NAMESPACE__.get(k) || {}\n const existItem = state.params.find((item: any) => item.index === index)\n if (existItem)\n Object.assign(existItem, { pipe: key, pipeOpts: opts })\n\n else\n state.params.push({ pipe: key, pipeOpts: opts, index })\n\n setState(target, k, state)\n }\n}\n\nexport function Body(key = '') {\n return BaseParam('body', key)\n}\n// req.headers\nexport function Head(key: string) {\n return BaseParam('headers', key.toLowerCase())\n}\n\nexport function Query(key = '') {\n return BaseParam('query', key)\n}\nexport function Param(key: string) {\n return BaseParam('params', key)\n}\n\n// work for micro service\nexport function Arg() {\n return BaseParam('params', '')\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.http = {\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 Rpc(...types: ('mq' | 'redis' | string)[]) {\n return (target: any, key?: PropertyKey) => {\n if (!key)\n key = '__CLASS'\n target = key === '__CLASS' ? target.prototype : target\n setModelVar(target, key)\n const state = target._namespace.__STATE_NAMESPACE__.get(key) || {}\n if (!state.rpc)\n state.rpc = {}\n\n state.rpc.type = types\n setState(target, key, state)\n }\n}\nexport function Event(isEvent = true) {\n return (target: any, key?: PropertyKey) => {\n if (!key)\n key = '__CLASS'\n target = key === '__CLASS' ? target.prototype : target\n setModelVar(target, key)\n const state = target._namespace.__STATE_NAMESPACE__.get(key) || {}\n if (!state.rpc)\n state.rpc = {}\n\n state.rpc.isEvent = isEvent\n setState(target, key, state)\n }\n}\n","import { setModelVar, setState } from 'phecda-core'\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 function resolveDep(ret: any, key: string) {\n if (key)\n return ret?.[key]\n return ret\n}\n","import { UNMOUNT_SYMBOL } from '../common'\n\nexport class Dev {\n [UNMOUNT_SYMBOL]: (() => void)[] = []\n onUnmount(cb: () => void) {\n this[UNMOUNT_SYMBOL].push(cb)\n }\n}\n","import { setFilter } from '../context'\nimport type { Exception } from '../exception'\n\nexport abstract class PFilter {\n constructor() {\n setFilter(this.use.bind(this))\n }\n\n abstract use< C, S, E extends Exception >(error: Error | E, tag?: string, ctx?: C): S\n}\n","import { addGuard } from '../context'\n\nexport abstract class PGuard {\n abstract use<C>(tag: string, ctx: C): Promise<boolean> | boolean\n\n constructor(tag: string) {\n addGuard(tag, this.use.bind(this))\n }\n}\n","import { addInterceptor } from '../context'\n\nexport abstract class PInterceptor {\n abstract use<C>(tag: string, ctx: C): ((arg: any) => any) | void\n\n constructor(tag: string) {\n addInterceptor(tag, this.use.bind(this))\n }\n}\n","import { addPipe } from '../context'\n\nexport abstract class PPipe {\n constructor(key: string) {\n addPipe(key, this.use.bind(this))\n }\n\n abstract use<C>(args: { arg: any; option?: any; key: string; type: string; index: number; reflect: any }, tag: string, ctx: C): Promise<any>\n}\n"],"mappings":"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","names":["Exception","Error","message","status","description","constructor","data","error","ValidateException","Exception","constructor","message","defaultPipe","arg","reflect","index","isPhecda","instance","plainToClass","err","transformClass","length","ValidateException","Number","Boolean","includes","Object","is","NaN","UndefinedException","Exception","constructor","message","ForbiddenException","Exception","constructor","message","BadRequestException","Exception","constructor","message","NotFoundException","Exception","constructor","message","ConflictException","Exception","constructor","message","BadGatewayException","Exception","constructor","message","InvalidInputException","Exception","constructor","message","UnsupportedMediaTypeException","Exception","constructor","message","PayloadLargeException","Exception","constructor","message","TimeoutException","Exception","constructor","message","UnauthorizedException","Exception","constructor","message","ServiceUnavailableException","Exception","constructor","message","FrameworkException","Exception","constructor","message","defaultFilter","e","Exception","console","error","stack","UndefinedException","message","data","Histroy","guard","interceptor","record","name","type","includes","push","guardsRecord","Context","tag","data","method","params","history","postInterceptors","constructor","Histroy","process","env","NODE_ENV","_context","usePipe","args","Promise","all","map","item","pipeRecord","pipe","useFilter","arg","filter","useGuard","guards","guard","record","PS_STRICT","FrameworkException","ForbiddenException","usePostInterceptor","ret","cb","useInterceptor","interceptors","interceptor","interceptorsRecord","postInterceptor","undefined","push","useMiddleware","middlewares","m","middlewareRecord","defaultFilter","default","defaultPipe","addMiddleware","key","handler","addPipe","setFilter","addGuard","addInterceptor","import_phecda_core","Meta","data","handlers","paramsType","constructor","warn","msg","color","console","pc","magenta","MERGE_SYMBOL","UNMOUNT_SYMBOL","MODULE_SYMBOL","META_SYMBOL","APP_SYMBOL","Compiler","classMap","constructor","getContent","content","name","Object","values","reduce","p","c","addMethod","args","rpc","method","tag","type","isEvent","generateRPCCode","meta","compiler","i","Compiler","classMap","constructor","getContent","content","name","Object","values","reduce","p","c","addMethod","args","http","method","params","tag","url","route","replace","_","js","type","i","key","generateHTTPCode","meta","compiler","debug","Debug","emitter","EventEmitter","Factory","Modules","opts","moduleMap","Map","meta","constructorMap","constructorSet","WeakSet","moduleGraph","http","rpc","injectProperty","eventName","instance","key","options","fn","bind","v","once","on","update","Module","tag","prototype","__TAG__","name","has","get","UNMOUNT_SYMBOL","cb","delete","i","length","data","splice","newModule","buildNestModule","forEach","module","set","paramtypes","getParamTypes","Error","add","warn","undefined","paramtypesInstances","sub","subTag","Set","push","getMetaFromInstance","registerAsync","writeMeta","fs","promises","writeFile","generateHTTPCode","map","item","generateRPCCode","process","env","NODE_ENV","globalThis","__PS_HMR__","file","isPhecda","__PS_WRITEMETA__","vars","getExposeKey","filter","baseState","getState","initState","state","route","type","method","params","unshift","index","define","header","middlewares","guards","interceptors","Meta","getHandler","Reflect","getMetadata","import_phecda_core","import_phecda_core","BaseParam","type","key","target","k","index","setModelVar","state","_namespace","__STATE_NAMESPACE__","get","params","existItem","find","item","Object","assign","push","setState","Pipe","opts","pipe","pipeOpts","Body","Head","toLowerCase","Query","Param","Arg","import_phecda_core","Route","route","type","target","key","prototype","setModelVar","state","_namespace","__STATE_NAMESPACE__","get","http","setState","Get","Post","Put","Patch","Delete","Controller","Rpc","types","rpc","Event","isEvent","import_phecda_core","Guard","guards","target","key","prototype","setModelVar","state","_namespace","__STATE_NAMESPACE__","get","push","setState","Middle","middlewares","Interceptor","interceptors","Header","name","value","target","k","setModelVar","state","_namespace","__STATE_NAMESPACE__","get","header","setState","Define","key","prototype","define","resolveDep","ret","key","Dev","UNMOUNT_SYMBOL","onUnmount","cb","push","PFilter","constructor","setFilter","use","bind","PGuard","constructor","tag","addGuard","use","bind","PInterceptor","constructor","tag","addInterceptor","use","bind","PPipe","constructor","key","addPipe","use","bind"]}