1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | const shared_utils_1 = require("@nestjs/common/utils/shared.utils");
|
4 | const invalid_exception_filter_exception_1 = require("../errors/exceptions/invalid-exception-filter.exception");
|
5 | const external_exception_filter_1 = require("./external-exception-filter");
|
6 | class ExternalExceptionsHandler extends external_exception_filter_1.ExternalExceptionFilter {
|
7 | constructor() {
|
8 | super(...arguments);
|
9 | this.filters = [];
|
10 | }
|
11 | next(exception, host) {
|
12 | const result = this.invokeCustomFilters(exception, host);
|
13 | if (result) {
|
14 | return result;
|
15 | }
|
16 | return super.catch(exception, host);
|
17 | }
|
18 | setCustomFilters(filters) {
|
19 | if (!Array.isArray(filters)) {
|
20 | throw new invalid_exception_filter_exception_1.InvalidExceptionFilterException();
|
21 | }
|
22 | this.filters = filters;
|
23 | }
|
24 | invokeCustomFilters(exception, host) {
|
25 | if (shared_utils_1.isEmpty(this.filters)) {
|
26 | return null;
|
27 | }
|
28 | const isInstanceOf = metatype => exception instanceof metatype;
|
29 | const filter = this.filters.find(({ exceptionMetatypes, func }) => {
|
30 | const hasMetatype = !exceptionMetatypes.length || exceptionMetatypes.some(isInstanceOf);
|
31 | return hasMetatype;
|
32 | });
|
33 | return filter ? filter.func(exception, host) : null;
|
34 | }
|
35 | }
|
36 | exports.ExternalExceptionsHandler = ExternalExceptionsHandler;
|