@ark7/router
Version:
Ark7 Router layer framework.
1 lines • 3.17 kB
Source Map (JSON)
{"version":3,"sources":["../src/decorators.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAG1B,OAAO,KAAK,MAAM,MAAM,YAAY,CAAC;AAUrC;;GAEG;AACH,wBAAgB,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,cAAc,SACtC,GAAG,UAKjB;AAED,wBAAgB,UAAU,CACxB,WAAW,EAAE,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,EAAE,GACrD,cAAc,GAAG,iBAAiB,GAAG,eAAe,CAsBtD","file":"decorators.d.ts","sourcesContent":["import 'reflect-metadata';\n\nimport * as _ from 'underscore';\nimport * as Router from 'koa-router';\n\nimport { A7Controller } from './controller';\nimport {\n A7ControllerMetadata,\n A7ControllerSubsidiary,\n A7ControllerSubsidiaryType,\n} from './declarations';\nimport { a7RouterConfig } from './global-config';\n\n/**\n * A decorator to config a router class.\n */\nexport function Config(options: Router.IRouterOptions) {\n return (cls: any) => {\n const meta = A7ControllerMetadata.getMetadata(cls);\n meta.extendOptions(options);\n meta.defineMetadata(cls);\n };\n}\n\nexport function Middleware(\n middlewares: Router.IMiddleware | Router.IMiddleware[],\n): ClassDecorator & PropertyDecorator & MethodDecorator {\n middlewares = _.chain([middlewares])\n .flatten()\n .map(a7RouterConfig.middlewareMapper)\n .value();\n\n return (\n target: any,\n propertyKey?: string,\n descriptor?: TypedPropertyDescriptor<any>,\n ): any => {\n if (propertyKey == null) {\n buildConstructorMiddleware(target, middlewares as Router.IMiddleware[]);\n } else {\n return buildPropertyMiddleware(\n target,\n propertyKey,\n middlewares as Router.IMiddleware[],\n descriptor,\n );\n }\n };\n}\n\nfunction buildConstructorMiddleware(\n cls: any,\n middlewares: Router.IMiddleware[],\n) {\n A7ControllerMetadata.getMetadata(cls)\n .clone()\n .pushMiddlewaresInFront(middlewares)\n .defineMetadata(cls);\n}\n\nfunction getDescription(handler: A7ControllerSubsidiary) {\n return {\n get: function () {\n return handler.composedMiddleware;\n },\n set: function (fn: Router.IMiddleware | typeof A7Controller) {\n if (fn.prototype instanceof A7Controller) {\n handler.cls = fn as typeof A7Controller;\n handler.type = A7ControllerSubsidiaryType.SUB_CONTROLLER;\n } else {\n handler.pushMiddlewaresBack(_.flatten([fn as Router.IMiddleware]));\n handler.type = A7ControllerSubsidiaryType.HANDLER;\n }\n },\n enumerable: false,\n configurable: true,\n _a7: true,\n };\n}\n\nfunction buildPropertyMiddleware(\n target: any,\n propertyKey: string,\n middlewares: Router.IMiddleware[],\n descriptor: TypedPropertyDescriptor<Router.IMiddleware>,\n) {\n const cls = target.constructor;\n const meta = A7ControllerMetadata.getMetadata(cls).clone();\n\n const subsidiary = meta.getOrCreateSubsidiary(propertyKey);\n\n subsidiary.pushMiddlewaresInFront(middlewares);\n\n if (descriptor != null && !(descriptor as any)._a7) {\n subsidiary.pushMiddlewaresBack([descriptor.value]);\n }\n\n meta.defineMetadata(cls);\n\n if (!(descriptor as any)?._a7) {\n return getDescription(subsidiary);\n }\n}\n"],"sourceRoot":"/Users/yz/workspace/router/src"}