diff --git a/packages/core/middleware/utils.ts b/packages/core/middleware/utils.ts index 0ebd282bf..62832eba4 100644 --- a/packages/core/middleware/utils.ts +++ b/packages/core/middleware/utils.ts @@ -29,7 +29,7 @@ export const mapToClass = >( excludedRoutes: RouteInfoRegex[], httpAdapter: HttpServer, ) => { - if (isClass(middleware)) { + if (isMiddlewareClass(middleware)) { if (excludedRoutes.length <= 0) { return middleware; } @@ -59,8 +59,17 @@ export const mapToClass = >( ); }; -export function isClass(middleware: any): middleware is Type { - return middleware.toString().substring(0, 5) === 'class'; +export function isMiddlewareClass(middleware: any): middleware is Type { + const middlewareStr = middleware.toString(); + if (middlewareStr.substring(0, 5) === 'class') { + return true; + } + const middlewareArr = middlewareStr.split(' '); + return ( + middlewareArr[0] === 'function' && + /[A-Z]/.test(middlewareArr[1]?.[0]) && + typeof middleware.prototype?.use === 'function' + ); } export function assignToken(metatype: Type, token = uuid()): Type { diff --git a/packages/core/test/middleware/utils.spec.ts b/packages/core/test/middleware/utils.spec.ts index ffeb76205..f16ce6820 100644 --- a/packages/core/test/middleware/utils.spec.ts +++ b/packages/core/test/middleware/utils.spec.ts @@ -5,7 +5,7 @@ import * as sinon from 'sinon'; import { assignToken, filterMiddleware, - isClass, + isMiddlewareClass, isRouteExcluded, mapToClass, } from '../../middleware/utils'; @@ -63,15 +63,15 @@ describe('middleware utils', () => { }); }); }); - describe('isClass', () => { + describe('isMiddlewareClass', () => { describe('when middleware is a class', () => { it('should returns true', () => { - expect(isClass(Test)).to.be.true; + expect(isMiddlewareClass(Test)).to.be.true; }); }); describe('when middleware is a function', () => { it('should returns false', () => { - expect(isClass(fnMiddleware)).to.be.false; + expect(isMiddlewareClass(fnMiddleware)).to.be.false; }); }); });