From a5705d376289525e3c59caa11dc14b06f6a28c52 Mon Sep 17 00:00:00 2001 From: Alen Kralj Date: Mon, 13 Feb 2023 15:25:10 +0100 Subject: [PATCH 1/2] fix: pass action when resolving middleware from container --- src/driver/express/ExpressDriver.ts | 18 +++++++++++------- src/driver/koa/KoaDriver.ts | 4 ++-- src/metadata/MiddlewareMetadata.ts | 17 ----------------- 3 files changed, 13 insertions(+), 26 deletions(-) diff --git a/src/driver/express/ExpressDriver.ts b/src/driver/express/ExpressDriver.ts index d7547dd8..ce4d26c3 100644 --- a/src/driver/express/ExpressDriver.ts +++ b/src/driver/express/ExpressDriver.ts @@ -58,17 +58,19 @@ export class ExpressDriver extends BaseDriver { let middlewareWrapper; // if its an error handler then register it with proper signature in express - if ((middleware.instance as ExpressErrorMiddlewareInterface).error) { + if (middleware.target.prototype && middleware.target.prototype.error) { middlewareWrapper = (error: any, request: any, response: any, next: (err?: any) => any) => { - (middleware.instance as ExpressErrorMiddlewareInterface).error(error, request, response, next); + const instance = getFromContainer(middleware.target, { request, response }); + instance.error(error, request, response, next); }; } // if its a regular middleware then register it as express middleware - else if ((middleware.instance as ExpressMiddlewareInterface).use) { + else if (middleware.target.prototype && middleware.target.prototype.use) { middlewareWrapper = (request: any, response: any, next: (err: any) => any) => { try { - const useResult = (middleware.instance as ExpressMiddlewareInterface).use(request, response, next); + const instance = getFromContainer(middleware.target, { request, response }); + const useResult = instance.use(request, response, next); if (isPromiseLike(useResult)) { useResult.catch((error: any) => { this.handleError(error, undefined, { request, response, next }); @@ -84,7 +86,7 @@ export class ExpressDriver extends BaseDriver { if (middlewareWrapper) { // Name the function for better debugging Object.defineProperty(middlewareWrapper, 'name', { - value: middleware.instance.constructor.name, + value: middleware.target.name, writable: true, }); @@ -396,7 +398,8 @@ export class ExpressDriver extends BaseDriver { // if this is function instance of MiddlewareInterface middlewareFunctions.push((request: any, response: any, next: (err: any) => any) => { try { - const useResult = getFromContainer(use.middleware).use(request, response, next); + const instance = getFromContainer(use.middleware, { request, response }); + const useResult = instance.use(request, response, next); if (isPromiseLike(useResult)) { useResult.catch((error: any) => { this.handleError(error, undefined, { request, response, next }); @@ -412,7 +415,8 @@ export class ExpressDriver extends BaseDriver { } else if (use.middleware.prototype && use.middleware.prototype.error) { // if this is function instance of ErrorMiddlewareInterface middlewareFunctions.push(function (error: any, request: any, response: any, next: (err: any) => any) { - return getFromContainer(use.middleware).error( + const instance = getFromContainer(use.middleware, { request, response }); + return instance.error( error, request, response, diff --git a/src/driver/koa/KoaDriver.ts b/src/driver/koa/KoaDriver.ts index 65038a74..9ec4d568 100644 --- a/src/driver/koa/KoaDriver.ts +++ b/src/driver/koa/KoaDriver.ts @@ -59,9 +59,9 @@ export class KoaDriver extends BaseDriver { * Registers middleware that run before controller actions. */ registerMiddleware(middleware: MiddlewareMetadata): void { - if ((middleware.instance as KoaMiddlewareInterface).use) { + if (middleware.target.prototype && middleware.target.prototype.use) { this.koa.use(function (ctx: any, next: any) { - return (middleware.instance as KoaMiddlewareInterface).use(ctx, next); + return getFromContainer(middleware.target).use(ctx, next); }); } } diff --git a/src/metadata/MiddlewareMetadata.ts b/src/metadata/MiddlewareMetadata.ts index e245c355..facfe795 100644 --- a/src/metadata/MiddlewareMetadata.ts +++ b/src/metadata/MiddlewareMetadata.ts @@ -1,8 +1,4 @@ import { MiddlewareMetadataArgs } from './args/MiddlewareMetadataArgs'; -import { ExpressMiddlewareInterface } from '../driver/express/ExpressMiddlewareInterface'; -import { ExpressErrorMiddlewareInterface } from '../driver/express/ExpressErrorMiddlewareInterface'; -import { getFromContainer } from '../container'; -import { KoaMiddlewareInterface } from '../driver/koa/KoaMiddlewareInterface'; /** * Middleware metadata. @@ -42,17 +38,4 @@ export class MiddlewareMetadata { this.priority = args.priority; this.type = args.type; } - - // ------------------------------------------------------------------------- - // Accessors - // ------------------------------------------------------------------------- - - /** - * Gets middleware instance from the container. - */ - get instance(): ExpressMiddlewareInterface | KoaMiddlewareInterface | ExpressErrorMiddlewareInterface { - return getFromContainer( - this.target - ); - } } From 2549a260a27e5e9b4ba815078409d6ba6a5bc974 Mon Sep 17 00:00:00 2001 From: Alen Kralj Date: Mon, 13 Feb 2023 15:30:46 +0100 Subject: [PATCH 2/2] fix: prettier --- src/driver/express/ExpressDriver.ts | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/driver/express/ExpressDriver.ts b/src/driver/express/ExpressDriver.ts index ce4d26c3..7d1f836e 100644 --- a/src/driver/express/ExpressDriver.ts +++ b/src/driver/express/ExpressDriver.ts @@ -416,12 +416,7 @@ export class ExpressDriver extends BaseDriver { // if this is function instance of ErrorMiddlewareInterface middlewareFunctions.push(function (error: any, request: any, response: any, next: (err: any) => any) { const instance = getFromContainer(use.middleware, { request, response }); - return instance.error( - error, - request, - response, - next - ); + return instance.error(error, request, response, next); }); } else { middlewareFunctions.push(use.middleware);