diff --git a/packages/common/decorators/http/create-route-param-metadata.decorator.ts b/packages/common/decorators/http/create-route-param-metadata.decorator.ts index d17d3b34487..13c7f08c802 100644 --- a/packages/common/decorators/http/create-route-param-metadata.decorator.ts +++ b/packages/common/decorators/http/create-route-param-metadata.decorator.ts @@ -48,7 +48,8 @@ export function createParamDecorator( const isPipe = (pipe: any) => pipe && - ((isFunction(pipe) && pipe.prototype) || isFunction(pipe.transform)); + ((isFunction(pipe) && pipe.prototype && isFunction(pipe.prototype.transform)) || + isFunction(pipe.transform)); const hasParamData = isNil(data) || !isPipe(data); const paramData = hasParamData ? data : undefined; diff --git a/packages/common/test/decorators/create-param-decorator.spec.ts b/packages/common/test/decorators/create-param-decorator.spec.ts index 559fdbc23a4..1858778ce54 100644 --- a/packages/common/test/decorators/create-param-decorator.spec.ts +++ b/packages/common/test/decorators/create-param-decorator.spec.ts @@ -88,5 +88,24 @@ describe('createParamDecorator', () => { }); }); }); + + describe('when class type passed as data', () => { + class Data { } + class Test { + public test( + @Decorator(Data) prop, + ) { } + } + + it('should return class type as data parameter', () => { + const metadata = Reflect.getMetadata( + ROUTE_ARGS_METADATA, + Test, + 'test', + ); + const key = Object.keys(metadata)[0]; + expect(metadata[key].data).to.equal(Data); + }); + }); }); });