New Research: Supply Chain Attack on Axios Pulls Malicious Dependency from npm.Details
Socket
Book a DemoSign in
Socket

@zenweb/controller

Package Overview
Dependencies
Maintainers
1
Versions
50
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@zenweb/controller - npm Package Compare versions

Comparing version
3.1.0
to
3.2.0
+19
-9
dist/controller.d.ts

@@ -5,5 +5,5 @@ /// <reference types="koa__router" />

interface MappingItem {
method: RouterMethod;
methods: RouterMethod[];
path: RouterPath;
middleware?: Router.Middleware[];
middleware: Router.Middleware[];
handle: (...args: any[]) => Promise<void> | void;

@@ -33,13 +33,23 @@ params: any[];

* 如果方法中存在参数,则自动注入
* @param method HTTP 方法
* @param path 路径。如不指定则使用方法名
* @param middleware 可选中间件
* @param arg0.method HTTP 方法,默认 GET
* @param arg0.path 路径,默认 /{方法名}
* @param arg0.middleware 中间件
*/
export declare function mapping(method?: RouterMethod, path?: RouterPath, ...middleware: Router.Middleware[]): (target: any, propertyKey: string, descriptor: PropertyDescriptor) => void;
export declare function mapping({ method, path, middleware, }?: {
method?: RouterMethod | RouterMethod[];
path?: RouterPath;
middleware?: Router.Middleware | Router.Middleware[];
}): (target: any, propertyKey: string, descriptor: PropertyDescriptor) => void;
interface ControlleOption extends Router.RouterOptions {
middleware?: Router.Middleware | Router.Middleware[];
}
/**
* 控制器
* @param middleware 控制器中间件
* 控制器选项
*/
export declare function controller<C>(...middleware: Router.Middleware[]): (controllerClass: ControllerClass<C>) => void;
export declare function controller<C>(opt: ControlleOption): (target: ControllerClass<C>) => void;
/**
* 取得控制器选项
*/
export declare function getControllerOption(target: any): ControlleOption;
/**
* 将控制器中的路由配置添加到指定路由中

@@ -46,0 +56,0 @@ * @param router 路由实例

@@ -12,5 +12,7 @@ "use strict";

Object.defineProperty(exports, "__esModule", { value: true });
exports.addToRouter = exports.controller = exports.mapping = exports.addControllerMapping = exports.getControllerMapping = exports.Controller = void 0;
exports.addToRouter = exports.getControllerOption = exports.controller = exports.mapping = exports.addControllerMapping = exports.getControllerMapping = exports.Controller = void 0;
const inject_1 = require("@zenweb/inject");
const router_1 = require("@zenweb/router");
const MAPPING = Symbol('Controller#mapping');
const OPTION = Symbol('Controller#option');
class Controller {

@@ -46,13 +48,13 @@ }

* 如果方法中存在参数,则自动注入
* @param method HTTP 方法
* @param path 路径。如不指定则使用方法名
* @param middleware 可选中间件
* @param arg0.method HTTP 方法,默认 GET
* @param arg0.path 路径,默认 /{方法名}
* @param arg0.middleware 中间件
*/
function mapping(method = 'GET', path, ...middleware) {
function mapping({ method, path, middleware, } = {}) {
return function (target, propertyKey, descriptor) {
const params = Reflect.getMetadata('design:paramtypes', target, propertyKey) || [];
addControllerMapping(target, {
method,
methods: method ? (Array.isArray(method) ? method : [method]) : ['GET'],
path: path || `/${propertyKey}`,
middleware,
middleware: middleware ? (Array.isArray(middleware) ? middleware : [middleware]) : [],
handle: descriptor.value,

@@ -65,14 +67,7 @@ params,

/**
* 控制器
* @param middleware 控制器中间件
* 控制器选项
*/
function controller(...middleware) {
return function (controllerClass) {
const mappingList = getControllerMapping(controllerClass.prototype);
if (mappingList) {
for (const item of mappingList) {
// 把控制器的中间件推到方法前
item.middleware.unshift(...middleware);
}
}
function controller(opt) {
return function (target) {
Reflect.defineMetadata(OPTION, opt, target);
};

@@ -82,2 +77,9 @@ }

/**
* 取得控制器选项
*/
function getControllerOption(target) {
return Reflect.getMetadata(OPTION, target);
}
exports.getControllerOption = getControllerOption;
/**
* 将控制器中的路由配置添加到指定路由中

@@ -90,11 +92,18 @@ * @param router 路由实例

if (mappingList) {
const option = getControllerOption(target);
const _router = new router_1.Router(option);
if (option && option.middleware) {
_router.use(...(Array.isArray(option.middleware) ? option.middleware : [option.middleware]));
}
for (const item of mappingList) {
router[item.method.toLowerCase()](item.path, ...item.middleware, async (ctx) => {
const controller = await ctx.injector.getInstance(target);
const args = await Promise.all(item.params.map(i => ctx.injector.getInstance(i)));
await item.handle.apply(controller, args);
});
// <any>item.path 实际上路由参数支持数组形式,只是 ts 文件没有正确描述
_router.register(item.path, item.methods, [...item.middleware, async (ctx) => {
const controller = await ctx.injector.getInstance(target);
const args = await Promise.all(item.params.map(i => ctx.injector.getInstance(i)));
await item.handle.apply(controller, args);
}]);
}
router.use(_router.routes());
}
}
exports.addToRouter = addToRouter;
{
"name": "@zenweb/controller",
"version": "3.1.0",
"version": "3.2.0",
"description": "Zenweb Controller module",

@@ -5,0 +5,0 @@ "exports": "./dist/index.js",