phecda-server 3.2.0-alpha.2 → 3.2.0-alpha.3

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 CHANGED
@@ -250,6 +250,7 @@ declare function bindApp(app: Express | Router, { moduleMap, meta }: Awaited<Ret
250
250
 
251
251
  declare function BaseParam(type: string, key: string, option?: any): any;
252
252
  declare function Body(key?: string, pipeOpts?: any): any;
253
+ declare function Head(key: string, pipeOpts?: any): any;
253
254
  declare function Query(key?: string, pipeOpts?: any): any;
254
255
  declare function Param(key: string, pipeOpts?: any): any;
255
256
 
@@ -272,4 +273,4 @@ declare const defaultPipe: P.Pipe;
272
273
  declare function isMerge(data: ServerCtx | ServerMergeCtx): data is ServerMergeCtx;
273
274
  declare function resolveDep(ret: any, key: string): any;
274
275
 
275
- export { BadGatewayException, BadRequestException, Base, BaseError, BaseParam, Body, ConflictException, Construct, Context, Controller, Define, Delete, Dev, Emitter, Factory, ForbiddenException, FrameworkException, Get, Guard, Header, HttpException, Interceptor, InvalidInputException, MERGE_SYMBOL, META_SYMBOL, MODULE_SYMBOL, MergeType, Meta, Middle, NotFoundException, Options, P, Param, Patch, PayloadLargeException, Post, Put, Query, RequestType, Route, SERIES_SYMBOL, ServerContext, ServerCtx, ServerFilter, ServerMergeCtx, ServiceUnavailableException, TimeoutException, UNMOUNT_SYMBOL, UnauthorizedException, UndefinedException, UnsupportedMediaTypeException, ValidateException, addGuard, addInterceptor, addMiddleware, bindApp, defaultPipe, emitter, isMerge, parseMeta, resolveDep, useServerFilter, useServerPipe };
276
+ export { BadGatewayException, BadRequestException, Base, BaseError, BaseParam, Body, ConflictException, Construct, Context, Controller, Define, Delete, Dev, Emitter, Factory, ForbiddenException, FrameworkException, Get, Guard, Head, Header, HttpException, Interceptor, InvalidInputException, MERGE_SYMBOL, META_SYMBOL, MODULE_SYMBOL, MergeType, Meta, Middle, NotFoundException, Options, P, Param, Patch, PayloadLargeException, Post, Put, Query, RequestType, Route, SERIES_SYMBOL, ServerContext, ServerCtx, ServerFilter, ServerMergeCtx, ServiceUnavailableException, TimeoutException, UNMOUNT_SYMBOL, UnauthorizedException, UndefinedException, UnsupportedMediaTypeException, ValidateException, addGuard, addInterceptor, addMiddleware, bindApp, defaultPipe, emitter, isMerge, parseMeta, resolveDep, useServerFilter, useServerPipe };
package/dist/index.js CHANGED
@@ -49,6 +49,7 @@ __export(src_exports, {
49
49
  FrameworkException: () => FrameworkException,
50
50
  Get: () => Get,
51
51
  Guard: () => Guard,
52
+ Head: () => Head,
52
53
  Header: () => Header,
53
54
  HttpException: () => HttpException,
54
55
  Interceptor: () => Interceptor,
@@ -884,6 +885,10 @@ function Body(key = "", pipeOpts) {
884
885
  return BaseParam("body", key, pipeOpts);
885
886
  }
886
887
  __name(Body, "Body");
888
+ function Head(key, pipeOpts) {
889
+ return BaseParam("headers", key.toLowerCase(), pipeOpts);
890
+ }
891
+ __name(Head, "Head");
887
892
  function Query(key = "", pipeOpts) {
888
893
  return BaseParam("query", key, pipeOpts);
889
894
  }
@@ -1025,6 +1030,7 @@ __reExport(src_exports, require("phecda-core"), module.exports);
1025
1030
  FrameworkException,
1026
1031
  Get,
1027
1032
  Guard,
1033
+ Head,
1028
1034
  Header,
1029
1035
  HttpException,
1030
1036
  Interceptor,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/exception/base.ts","../src/exception/undefine.ts","../src/exception/validate.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/pipe.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","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 UndefinedException extends HttpException {\n constructor(message: string) {\n super(message, 500, 'Undefined error')\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 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 { 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","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 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 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 pc\n console.warn(`${pc.magenta('[phecda-server]')} ${pc[color](msg)}`)\n}\n","import { ForbiddenException, FrameworkException } from '../exception'\nimport { Histroy } 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 guardsRecord: Record<string, any> = {}\n static interceptorsRecord: Record<string, any > = {}\n // static serverRecord: Record<string, Context> = {}\n post: ((...params: any) => any)[]\n history = new Histroy()\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 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.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 if (process.env.PS_STRICT)\n throw new FrameworkException(`can't find interceptor named '${interceptor}'`)\n\n continue\n }\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}\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 { FrameworkException } from '../exception'\nimport { defaultPipe } from '../pipe'\nimport { serverFilter } from '../filter'\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 const ret = []\n for (const m of middlewares) {\n if (!(m in ServerContext.middlewareRecord)) {\n if (process.env.PS_STRICT)\n throw new FrameworkException(`can't find middleware named '${m}'`)\n\n continue\n }\n ret.push(ServerContext.middlewareRecord[m])\n }\n return ret\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?: any; 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 = '__PS_SERIES__'\nexport const MERGE_SYMBOL = '__PS_MERGE__'\nexport const UNMOUNT_SYMBOL = '__PS_UNMOUNT__'\nexport const MODULE_SYMBOL = '__PS_MODULE__'\nexport const META_SYMBOL = '__PS_META__'\n","import type { Express, Router } from 'express'\nimport { Context, ServerContext, parseMeta } from '../context'\nimport { isObject } from '../utils'\nimport { resolveDep } from '../helper'\nimport { MERGE_SYMBOL, META_SYMBOL, MODULE_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 dev?: boolean\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, { moduleMap, meta }: Awaited<ReturnType<typeof Factory>>, options: Options = {}) {\n const { dev = process.env.NODE_ENV !== 'production', globalGuards, globalInterceptors, route, middlewares: proMiddle } = { route: '/__PHECDA_SERVER__', globalGuards: [], globalInterceptors: [], middlewares: [], ...options } as Required<Options>\n\n const contextMeta = {} as Record<string, Meta>\n (app as Express).post(route, (req, _res, next) => {\n (req as any)[MERGE_SYMBOL] = true;\n (req as any)[MODULE_SYMBOL] = moduleMap;\n (req as any)[META_SYMBOL] = meta\n\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, method] = 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 moduleMap.get(name)[method](...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, method] = 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 moduleMap.get(name)[method](...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\n async function createRoute() {\n for (const i of meta) {\n const { method, route, header, tag } = i.data\n const methodTag = `${tag}-${method}`\n contextMeta[methodTag] = i\n Context.metaRecord[methodTag] = i\n\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 if (route) {\n (app as Express)[route.type](route.route, (req, _res, next) => {\n (req as any)[MODULE_SYMBOL] = moduleMap;\n (req as any)[META_SYMBOL] = meta\n next()\n }, ...ServerContext.useMiddleware(middlewares), async (req, res) => {\n const instance = moduleMap.get(tag)!\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 instance[method](...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\n createRoute()\n if (dev) {\n // @ts-expect-error globalThis\n const rawMetaHmr = globalThis.__PS_WRITEMETA__\n // @ts-expect-error globalThis\n\n globalThis.__PS_WRITEMETA__ = () => {\n app.stack = app.stack.slice(0, 1)\n Context.metaDataRecord = {}\n\n createRoute()\n rawMetaHmr?.()\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, 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'\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 dev?: boolean\n file?: string\n} = {}) {\n const moduleMap = new Map<string, InstanceType<Construct>>()\n const meta: Meta[] = []\n const constructorMap = new Map()\n const moduleGraph = new Map<string, Set<string>>()\n const { dev = process.env.NODE_ENV !== 'production', file = 'pmeta.js' } = 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)\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 fs.promises.writeFile(file, JSON.stringify(meta.map(item => item.data)))\n }\n\n writeMeta()\n if (dev) {\n // @ts-expect-error globalThis\n globalThis.__PS_HMR__ = async (file: string) => {\n debug(`reload file ${file}`)\n const module = await import(file)\n for (const i in module) {\n if (isPhecda(module[i]))\n await update(module[i])\n }\n }\n // @ts-expect-error globalThis\n globalThis.__PS_WRITEMETA__ = 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.route) {\n meta.route = {\n route: (baseState.route?.route || '') + (state.route.route),\n type: state.route.type,\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\nexport class Dev {\n [UNMOUNT_SYMBOL]: (() => void)[] = []\n onUnmount(cb: () => void) {\n this[UNMOUNT_SYMBOL].push(cb)\n }\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","UndefinedException","HttpException","constructor","message","ValidateException","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","defaultPipe","transform","args","i","option","arg","reflect","isPhecda","ret","plainToClass","err","length","ValidateException","data","Number","Boolean","includes","Object","is","NaN","map","item","serverFilter","e","HttpException","console","error","stack","UndefinedException","message","data","Histroy","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","Histroy","registerGuard","handler","guardsRecord","registerInterceptor","interceptorsRecord","useGuard","guards","isMerge","guard","record","process","env","PS_STRICT","FrameworkException","ForbiddenException","useInterceptor","interceptors","ret","interceptor","push","usePost","cb","metaRecord","metaDataRecord","addGuard","addInterceptor","parseMeta","meta","middlewares","reflect","handlers","forEach","index","i","warn","ServerContext","Context","useMiddleware","middlewares","ret","m","middlewareRecord","process","env","PS_STRICT","FrameworkException","push","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","UNMOUNT_SYMBOL","MODULE_SYMBOL","META_SYMBOL","bindApp","app","moduleMap","meta","options","dev","process","env","NODE_ENV","globalGuards","globalInterceptors","route","middlewares","proMiddle","contextMeta","post","req","_res","next","MERGE_SYMBOL","MODULE_SYMBOL","META_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","method","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","createRoute","i","header","methodTag","parseMeta","set","isObject","send","String","rawMetaHmr","globalThis","__PS_WRITEMETA__","stack","slice","import_phecda_core","Meta","data","handlers","reflect","constructor","debug","Debug","emitter","EventEmitter","Factory","Modules","opts","moduleMap","Map","meta","constructorMap","moduleGraph","dev","process","env","NODE_ENV","file","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","warn","undefined","paramtypesInstances","sub","subTag","Set","add","push","getMetaFromInstance","registerAsync","writeMeta","fs","promises","writeFile","JSON","stringify","map","item","globalThis","__PS_HMR__","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","Dev","onUnmount","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"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/exception/base.ts","../src/exception/undefine.ts","../src/exception/validate.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/pipe.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","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 UndefinedException extends HttpException {\n constructor(message: string) {\n super(message, 500, 'Undefined error')\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 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 { 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","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 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 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 pc\n console.warn(`${pc.magenta('[phecda-server]')} ${pc[color](msg)}`)\n}\n","import { ForbiddenException, FrameworkException } from '../exception'\nimport { Histroy } 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 guardsRecord: Record<string, any> = {}\n static interceptorsRecord: Record<string, any > = {}\n // static serverRecord: Record<string, Context> = {}\n post: ((...params: any) => any)[]\n history = new Histroy()\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 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.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 if (process.env.PS_STRICT)\n throw new FrameworkException(`can't find interceptor named '${interceptor}'`)\n\n continue\n }\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}\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 { FrameworkException } from '../exception'\nimport { defaultPipe } from '../pipe'\nimport { serverFilter } from '../filter'\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 const ret = []\n for (const m of middlewares) {\n if (!(m in ServerContext.middlewareRecord)) {\n if (process.env.PS_STRICT)\n throw new FrameworkException(`can't find middleware named '${m}'`)\n\n continue\n }\n ret.push(ServerContext.middlewareRecord[m])\n }\n return ret\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?: any; 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 = '__PS_SERIES__'\nexport const MERGE_SYMBOL = '__PS_MERGE__'\nexport const UNMOUNT_SYMBOL = '__PS_UNMOUNT__'\nexport const MODULE_SYMBOL = '__PS_MODULE__'\nexport const META_SYMBOL = '__PS_META__'\n","import type { Express, Router } from 'express'\nimport { Context, ServerContext, parseMeta } from '../context'\nimport { isObject } from '../utils'\nimport { resolveDep } from '../helper'\nimport { MERGE_SYMBOL, META_SYMBOL, MODULE_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 dev?: boolean\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, { moduleMap, meta }: Awaited<ReturnType<typeof Factory>>, options: Options = {}) {\n const { dev = process.env.NODE_ENV !== 'production', globalGuards, globalInterceptors, route, middlewares: proMiddle } = { route: '/__PHECDA_SERVER__', globalGuards: [], globalInterceptors: [], middlewares: [], ...options } as Required<Options>\n\n const contextMeta = {} as Record<string, Meta>\n (app as Express).post(route, (req, _res, next) => {\n (req as any)[MERGE_SYMBOL] = true;\n (req as any)[MODULE_SYMBOL] = moduleMap;\n (req as any)[META_SYMBOL] = meta\n\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\n const [name, method] = 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 moduleMap.get(name)[method](...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, method] = 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 moduleMap.get(name)[method](...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\n async function createRoute() {\n for (const i of meta) {\n const { method, route, header, tag } = i.data\n const methodTag = `${tag}-${method}`\n contextMeta[methodTag] = i\n Context.metaRecord[methodTag] = i\n\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 if (route) {\n (app as Express)[route.type](route.route, (req, _res, next) => {\n (req as any)[MODULE_SYMBOL] = moduleMap;\n (req as any)[META_SYMBOL] = meta\n next()\n }, ...ServerContext.useMiddleware(middlewares), async (req, res) => {\n const instance = moduleMap.get(tag)!\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 instance[method](...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\n createRoute()\n if (dev) {\n // @ts-expect-error globalThis\n const rawMetaHmr = globalThis.__PS_WRITEMETA__\n // @ts-expect-error globalThis\n\n globalThis.__PS_WRITEMETA__ = () => {\n app.stack = app.stack.slice(0, 1)\n Context.metaDataRecord = {}\n\n createRoute()\n rawMetaHmr?.()\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, 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'\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 dev?: boolean\n file?: string\n} = {}) {\n const moduleMap = new Map<string, InstanceType<Construct>>()\n const meta: Meta[] = []\n const constructorMap = new Map()\n const moduleGraph = new Map<string, Set<string>>()\n const { dev = process.env.NODE_ENV !== 'production', file = 'pmeta.js' } = 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)\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 fs.promises.writeFile(file, JSON.stringify(meta.map(item => item.data)))\n }\n\n writeMeta()\n if (dev) {\n // @ts-expect-error globalThis\n globalThis.__PS_HMR__ = async (file: string) => {\n debug(`reload file ${file}`)\n const module = await import(file)\n for (const i in module) {\n if (isPhecda(module[i]))\n await update(module[i])\n }\n }\n // @ts-expect-error globalThis\n globalThis.__PS_WRITEMETA__ = 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.route) {\n meta.route = {\n route: (baseState.route?.route || '') + (state.route.route),\n type: state.route.type,\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\nexport class Dev {\n [UNMOUNT_SYMBOL]: (() => void)[] = []\n onUnmount(cb: () => void) {\n this[UNMOUNT_SYMBOL].push(cb)\n }\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}\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","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","UndefinedException","HttpException","constructor","message","ValidateException","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","defaultPipe","transform","args","i","option","arg","reflect","isPhecda","ret","plainToClass","err","length","ValidateException","data","Number","Boolean","includes","Object","is","NaN","map","item","serverFilter","e","HttpException","console","error","stack","UndefinedException","message","data","Histroy","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","Histroy","registerGuard","handler","guardsRecord","registerInterceptor","interceptorsRecord","useGuard","guards","isMerge","guard","record","process","env","PS_STRICT","FrameworkException","ForbiddenException","useInterceptor","interceptors","ret","interceptor","push","usePost","cb","metaRecord","metaDataRecord","addGuard","addInterceptor","parseMeta","meta","middlewares","reflect","handlers","forEach","index","i","warn","ServerContext","Context","useMiddleware","middlewares","ret","m","middlewareRecord","process","env","PS_STRICT","FrameworkException","push","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","UNMOUNT_SYMBOL","MODULE_SYMBOL","META_SYMBOL","bindApp","app","moduleMap","meta","options","dev","process","env","NODE_ENV","globalGuards","globalInterceptors","route","middlewares","proMiddle","contextMeta","post","req","_res","next","MERGE_SYMBOL","MODULE_SYMBOL","META_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","method","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","createRoute","i","header","methodTag","parseMeta","set","isObject","send","String","rawMetaHmr","globalThis","__PS_WRITEMETA__","stack","slice","import_phecda_core","Meta","data","handlers","reflect","constructor","debug","Debug","emitter","EventEmitter","Factory","Modules","opts","moduleMap","Map","meta","constructorMap","moduleGraph","dev","process","env","NODE_ENV","file","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","warn","undefined","paramtypesInstances","sub","subTag","Set","add","push","getMetaFromInstance","registerAsync","writeMeta","fs","promises","writeFile","JSON","stringify","map","item","globalThis","__PS_HMR__","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","Dev","onUnmount","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","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
@@ -801,6 +801,10 @@ function Body(key = "", pipeOpts) {
801
801
  return BaseParam("body", key, pipeOpts);
802
802
  }
803
803
  __name(Body, "Body");
804
+ function Head(key, pipeOpts) {
805
+ return BaseParam("headers", key.toLowerCase(), pipeOpts);
806
+ }
807
+ __name(Head, "Head");
804
808
  function Query(key = "", pipeOpts) {
805
809
  return BaseParam("query", key, pipeOpts);
806
810
  }
@@ -941,6 +945,7 @@ export {
941
945
  FrameworkException,
942
946
  Get,
943
947
  Guard,
948
+ Head,
944
949
  Header,
945
950
  HttpException,
946
951
  Interceptor,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/exception/base.ts","../src/exception/undefine.ts","../src/exception/validate.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/pipe.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":["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 UndefinedException extends HttpException {\n constructor(message: string) {\n super(message, 500, 'Undefined error')\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 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 { 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","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 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 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 pc\n console.warn(`${pc.magenta('[phecda-server]')} ${pc[color](msg)}`)\n}\n","import { ForbiddenException, FrameworkException } from '../exception'\nimport { Histroy } 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 guardsRecord: Record<string, any> = {}\n static interceptorsRecord: Record<string, any > = {}\n // static serverRecord: Record<string, Context> = {}\n post: ((...params: any) => any)[]\n history = new Histroy()\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 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.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 if (process.env.PS_STRICT)\n throw new FrameworkException(`can't find interceptor named '${interceptor}'`)\n\n continue\n }\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}\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 { FrameworkException } from '../exception'\nimport { defaultPipe } from '../pipe'\nimport { serverFilter } from '../filter'\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 const ret = []\n for (const m of middlewares) {\n if (!(m in ServerContext.middlewareRecord)) {\n if (process.env.PS_STRICT)\n throw new FrameworkException(`can't find middleware named '${m}'`)\n\n continue\n }\n ret.push(ServerContext.middlewareRecord[m])\n }\n return ret\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?: any; 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 = '__PS_SERIES__'\nexport const MERGE_SYMBOL = '__PS_MERGE__'\nexport const UNMOUNT_SYMBOL = '__PS_UNMOUNT__'\nexport const MODULE_SYMBOL = '__PS_MODULE__'\nexport const META_SYMBOL = '__PS_META__'\n","import type { Express, Router } from 'express'\nimport { Context, ServerContext, parseMeta } from '../context'\nimport { isObject } from '../utils'\nimport { resolveDep } from '../helper'\nimport { MERGE_SYMBOL, META_SYMBOL, MODULE_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 dev?: boolean\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, { moduleMap, meta }: Awaited<ReturnType<typeof Factory>>, options: Options = {}) {\n const { dev = process.env.NODE_ENV !== 'production', globalGuards, globalInterceptors, route, middlewares: proMiddle } = { route: '/__PHECDA_SERVER__', globalGuards: [], globalInterceptors: [], middlewares: [], ...options } as Required<Options>\n\n const contextMeta = {} as Record<string, Meta>\n (app as Express).post(route, (req, _res, next) => {\n (req as any)[MERGE_SYMBOL] = true;\n (req as any)[MODULE_SYMBOL] = moduleMap;\n (req as any)[META_SYMBOL] = meta\n\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, method] = 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 moduleMap.get(name)[method](...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, method] = 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 moduleMap.get(name)[method](...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\n async function createRoute() {\n for (const i of meta) {\n const { method, route, header, tag } = i.data\n const methodTag = `${tag}-${method}`\n contextMeta[methodTag] = i\n Context.metaRecord[methodTag] = i\n\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 if (route) {\n (app as Express)[route.type](route.route, (req, _res, next) => {\n (req as any)[MODULE_SYMBOL] = moduleMap;\n (req as any)[META_SYMBOL] = meta\n next()\n }, ...ServerContext.useMiddleware(middlewares), async (req, res) => {\n const instance = moduleMap.get(tag)!\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 instance[method](...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\n createRoute()\n if (dev) {\n // @ts-expect-error globalThis\n const rawMetaHmr = globalThis.__PS_WRITEMETA__\n // @ts-expect-error globalThis\n\n globalThis.__PS_WRITEMETA__ = () => {\n app.stack = app.stack.slice(0, 1)\n Context.metaDataRecord = {}\n\n createRoute()\n rawMetaHmr?.()\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, 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'\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 dev?: boolean\n file?: string\n} = {}) {\n const moduleMap = new Map<string, InstanceType<Construct>>()\n const meta: Meta[] = []\n const constructorMap = new Map()\n const moduleGraph = new Map<string, Set<string>>()\n const { dev = process.env.NODE_ENV !== 'production', file = 'pmeta.js' } = 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)\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 fs.promises.writeFile(file, JSON.stringify(meta.map(item => item.data)))\n }\n\n writeMeta()\n if (dev) {\n // @ts-expect-error globalThis\n globalThis.__PS_HMR__ = async (file: string) => {\n debug(`reload file ${file}`)\n const module = await import(file)\n for (const i in module) {\n if (isPhecda(module[i]))\n await update(module[i])\n }\n }\n // @ts-expect-error globalThis\n globalThis.__PS_WRITEMETA__ = 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.route) {\n meta.route = {\n route: (baseState.route?.route || '') + (state.route.route),\n type: state.route.type,\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\nexport class Dev {\n [UNMOUNT_SYMBOL]: (() => void)[] = []\n onUnmount(cb: () => void) {\n this[UNMOUNT_SYMBOL].push(cb)\n }\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":["HttpException","Error","message","status","description","constructor","data","error","UndefinedException","HttpException","constructor","message","ValidateException","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","isPhecda","plainToClass","defaultPipe","transform","args","i","option","arg","reflect","isPhecda","ret","plainToClass","err","length","ValidateException","data","Number","Boolean","includes","Object","is","NaN","map","item","serverFilter","e","HttpException","console","error","stack","UndefinedException","message","data","Histroy","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","Histroy","registerGuard","handler","guardsRecord","registerInterceptor","interceptorsRecord","useGuard","guards","isMerge","guard","record","process","env","PS_STRICT","FrameworkException","ForbiddenException","useInterceptor","interceptors","ret","interceptor","push","usePost","cb","metaRecord","metaDataRecord","addGuard","addInterceptor","parseMeta","meta","middlewares","reflect","handlers","forEach","index","i","warn","ServerContext","Context","useMiddleware","middlewares","ret","m","middlewareRecord","process","env","PS_STRICT","FrameworkException","push","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","UNMOUNT_SYMBOL","MODULE_SYMBOL","META_SYMBOL","bindApp","app","moduleMap","meta","options","dev","process","env","NODE_ENV","globalGuards","globalInterceptors","route","middlewares","proMiddle","contextMeta","post","req","_res","next","MERGE_SYMBOL","MODULE_SYMBOL","META_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","method","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","createRoute","i","header","methodTag","parseMeta","set","isObject","send","String","rawMetaHmr","globalThis","__PS_WRITEMETA__","stack","slice","fs","EventEmitter","getExposeKey","getHandler","getState","injectProperty","isPhecda","registerAsync","Debug","Meta","data","handlers","reflect","constructor","debug","Debug","emitter","EventEmitter","Factory","Modules","opts","moduleMap","Map","meta","constructorMap","moduleGraph","dev","process","env","NODE_ENV","file","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","warn","undefined","paramtypesInstances","sub","subTag","Set","add","push","getMetaFromInstance","registerAsync","writeMeta","fs","promises","writeFile","JSON","stringify","map","item","globalThis","__PS_HMR__","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","Dev","onUnmount","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"]}
1
+ {"version":3,"sources":["../src/exception/base.ts","../src/exception/undefine.ts","../src/exception/validate.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/pipe.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":["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 UndefinedException extends HttpException {\n constructor(message: string) {\n super(message, 500, 'Undefined error')\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 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 { 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","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 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 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 pc\n console.warn(`${pc.magenta('[phecda-server]')} ${pc[color](msg)}`)\n}\n","import { ForbiddenException, FrameworkException } from '../exception'\nimport { Histroy } 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 guardsRecord: Record<string, any> = {}\n static interceptorsRecord: Record<string, any > = {}\n // static serverRecord: Record<string, Context> = {}\n post: ((...params: any) => any)[]\n history = new Histroy()\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 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.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 if (process.env.PS_STRICT)\n throw new FrameworkException(`can't find interceptor named '${interceptor}'`)\n\n continue\n }\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}\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 { FrameworkException } from '../exception'\nimport { defaultPipe } from '../pipe'\nimport { serverFilter } from '../filter'\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 const ret = []\n for (const m of middlewares) {\n if (!(m in ServerContext.middlewareRecord)) {\n if (process.env.PS_STRICT)\n throw new FrameworkException(`can't find middleware named '${m}'`)\n\n continue\n }\n ret.push(ServerContext.middlewareRecord[m])\n }\n return ret\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?: any; 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 = '__PS_SERIES__'\nexport const MERGE_SYMBOL = '__PS_MERGE__'\nexport const UNMOUNT_SYMBOL = '__PS_UNMOUNT__'\nexport const MODULE_SYMBOL = '__PS_MODULE__'\nexport const META_SYMBOL = '__PS_META__'\n","import type { Express, Router } from 'express'\nimport { Context, ServerContext, parseMeta } from '../context'\nimport { isObject } from '../utils'\nimport { resolveDep } from '../helper'\nimport { MERGE_SYMBOL, META_SYMBOL, MODULE_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 dev?: boolean\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, { moduleMap, meta }: Awaited<ReturnType<typeof Factory>>, options: Options = {}) {\n const { dev = process.env.NODE_ENV !== 'production', globalGuards, globalInterceptors, route, middlewares: proMiddle } = { route: '/__PHECDA_SERVER__', globalGuards: [], globalInterceptors: [], middlewares: [], ...options } as Required<Options>\n\n const contextMeta = {} as Record<string, Meta>\n (app as Express).post(route, (req, _res, next) => {\n (req as any)[MERGE_SYMBOL] = true;\n (req as any)[MODULE_SYMBOL] = moduleMap;\n (req as any)[META_SYMBOL] = meta\n\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\n const [name, method] = 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 moduleMap.get(name)[method](...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, method] = 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 moduleMap.get(name)[method](...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\n async function createRoute() {\n for (const i of meta) {\n const { method, route, header, tag } = i.data\n const methodTag = `${tag}-${method}`\n contextMeta[methodTag] = i\n Context.metaRecord[methodTag] = i\n\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 if (route) {\n (app as Express)[route.type](route.route, (req, _res, next) => {\n (req as any)[MODULE_SYMBOL] = moduleMap;\n (req as any)[META_SYMBOL] = meta\n next()\n }, ...ServerContext.useMiddleware(middlewares), async (req, res) => {\n const instance = moduleMap.get(tag)!\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 instance[method](...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\n createRoute()\n if (dev) {\n // @ts-expect-error globalThis\n const rawMetaHmr = globalThis.__PS_WRITEMETA__\n // @ts-expect-error globalThis\n\n globalThis.__PS_WRITEMETA__ = () => {\n app.stack = app.stack.slice(0, 1)\n Context.metaDataRecord = {}\n\n createRoute()\n rawMetaHmr?.()\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, 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'\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 dev?: boolean\n file?: string\n} = {}) {\n const moduleMap = new Map<string, InstanceType<Construct>>()\n const meta: Meta[] = []\n const constructorMap = new Map()\n const moduleGraph = new Map<string, Set<string>>()\n const { dev = process.env.NODE_ENV !== 'production', file = 'pmeta.js' } = 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)\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 fs.promises.writeFile(file, JSON.stringify(meta.map(item => item.data)))\n }\n\n writeMeta()\n if (dev) {\n // @ts-expect-error globalThis\n globalThis.__PS_HMR__ = async (file: string) => {\n debug(`reload file ${file}`)\n const module = await import(file)\n for (const i in module) {\n if (isPhecda(module[i]))\n await update(module[i])\n }\n }\n // @ts-expect-error globalThis\n globalThis.__PS_WRITEMETA__ = 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.route) {\n meta.route = {\n route: (baseState.route?.route || '') + (state.route.route),\n type: state.route.type,\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\nexport class Dev {\n [UNMOUNT_SYMBOL]: (() => void)[] = []\n onUnmount(cb: () => void) {\n this[UNMOUNT_SYMBOL].push(cb)\n }\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}\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","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":["HttpException","Error","message","status","description","constructor","data","error","UndefinedException","HttpException","constructor","message","ValidateException","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","isPhecda","plainToClass","defaultPipe","transform","args","i","option","arg","reflect","isPhecda","ret","plainToClass","err","length","ValidateException","data","Number","Boolean","includes","Object","is","NaN","map","item","serverFilter","e","HttpException","console","error","stack","UndefinedException","message","data","Histroy","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","Histroy","registerGuard","handler","guardsRecord","registerInterceptor","interceptorsRecord","useGuard","guards","isMerge","guard","record","process","env","PS_STRICT","FrameworkException","ForbiddenException","useInterceptor","interceptors","ret","interceptor","push","usePost","cb","metaRecord","metaDataRecord","addGuard","addInterceptor","parseMeta","meta","middlewares","reflect","handlers","forEach","index","i","warn","ServerContext","Context","useMiddleware","middlewares","ret","m","middlewareRecord","process","env","PS_STRICT","FrameworkException","push","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","UNMOUNT_SYMBOL","MODULE_SYMBOL","META_SYMBOL","bindApp","app","moduleMap","meta","options","dev","process","env","NODE_ENV","globalGuards","globalInterceptors","route","middlewares","proMiddle","contextMeta","post","req","_res","next","MERGE_SYMBOL","MODULE_SYMBOL","META_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","method","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","createRoute","i","header","methodTag","parseMeta","set","isObject","send","String","rawMetaHmr","globalThis","__PS_WRITEMETA__","stack","slice","fs","EventEmitter","getExposeKey","getHandler","getState","injectProperty","isPhecda","registerAsync","Debug","Meta","data","handlers","reflect","constructor","debug","Debug","emitter","EventEmitter","Factory","Modules","opts","moduleMap","Map","meta","constructorMap","moduleGraph","dev","process","env","NODE_ENV","file","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","warn","undefined","paramtypesInstances","sub","subTag","Set","add","push","getMetaFromInstance","registerAsync","writeMeta","fs","promises","writeFile","JSON","stringify","map","item","globalThis","__PS_HMR__","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","Dev","onUnmount","setModelVar","setState","setModelVar","setState","BaseParam","type","key","option","target","k","index","setModelVar","state","_namespace","__STATE_NAMESPACE__","get","params","push","setState","Body","pipeOpts","Head","toLowerCase","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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "phecda-server",
3
- "version": "3.2.0-alpha.2",
3
+ "version": "3.2.0-alpha.3",
4
4
  "description": "provide express middlewares, `nestjs` format",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",