fix(core): detect conventional middleware class #6586

This commit is contained in:
Clay Risser
2021-03-07 04:30:11 -06:00
parent 779b5e6eb3
commit b5476ed439
2 changed files with 16 additions and 7 deletions

View File

@@ -29,7 +29,7 @@ export const mapToClass = <T extends Function | Type<any>>(
excludedRoutes: RouteInfoRegex[],
httpAdapter: HttpServer,
) => {
if (isClass(middleware)) {
if (isMiddlewareClass(middleware)) {
if (excludedRoutes.length <= 0) {
return middleware;
}
@@ -59,8 +59,17 @@ export const mapToClass = <T extends Function | Type<any>>(
);
};
export function isClass(middleware: any): middleware is Type<any> {
return middleware.toString().substring(0, 5) === 'class';
export function isMiddlewareClass(middleware: any): middleware is Type<any> {
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<any>, token = uuid()): Type<any> {

View File

@@ -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;
});
});
});