@nestjs/common
Version:
Decorators, pipes, exceptions and utilities for NestJS applications: @Controller(), @Injectable(), @Body(), ValidationPipe, HttpException and more.
32 lines (31 loc) • 1.27 kB
JavaScript
import { CATCH_WATERMARK, FILTER_CATCH_EXCEPTIONS } from '../../constants.js';
/**
* Decorator that marks a class as a Nest exception filter. An exception filter
* handles exceptions thrown by or not handled by your application code.
*
* The decorated class must implement the `ExceptionFilter` interface.
*
* @param exceptions one or more exception *types* specifying
* the exceptions to be caught and handled by this filter.
*
* @see [Exception Filters](https://docs.nestjs.com/exception-filters)
*
* @usageNotes
* Exception filters are applied using the `@UseFilters()` decorator, or (globally)
* with `app.useGlobalFilters()`.
*
* @publicApi
*/
export function Catch(...exceptions) {
return (target) => {
Reflect.defineMetadata(CATCH_WATERMARK, true, target);
Reflect.defineMetadata(FILTER_CATCH_EXCEPTIONS, exceptions, target);
// Filters are looked up by instance, and the "constructor" of a prototype
// does not always lead back to the decorated class (mixin helpers
// overwrite it, class decorators may return a Proxy of the class).
const { prototype } = target;
if (prototype) {
Reflect.defineMetadata(FILTER_CATCH_EXCEPTIONS, exceptions, prototype);
}
};
}