@tsclean/core
Version:
Plugin for API Rest Full development, based on Clean Architecture, IoC and Dependency Injection.
34 lines • 4.47 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ExceptionsHandler = void 0;
const utils_1 = require("../../utils");
const base_exception_filter_1 = require("./base-exception-filter");
const errors_1 = require("../../errors");
class ExceptionsHandler extends base_exception_filter_1.BaseExceptionFilter {
constructor() {
super(...arguments);
this.filters = [];
}
next(exception, ctx) {
if (this.invokeCustomFilters(exception, ctx))
return;
super.catch(exception, ctx);
}
setCustomFilters(filters) {
if (!Array.isArray(filters))
throw new errors_1.InvalidExceptionFilterException();
this.filters = filters;
}
invokeCustomFilters(exception, ctx) {
if ((0, utils_1.isEmpty)(this.filters))
return false;
const isInstanceOf = (metaType) => exception instanceof metaType;
const filter = this.filters.find(({ exceptionMetaTypes }) => {
return !exceptionMetaTypes.length || exceptionMetaTypes.some(isInstanceOf);
});
filter && filter.func(exception, ctx);
return !!filter;
}
}
exports.ExceptionsHandler = ExceptionsHandler;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhjZXB0aW9ucy1oYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvcmUvZXhjZXB0aW9ucy9leGNlcHRpb25zLWhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsdUNBQW9DO0FBRXBDLG1FQUE0RDtBQUM1RCx5Q0FBNkQ7QUFHN0QsTUFBYSxpQkFBa0IsU0FBUSwyQ0FBbUI7SUFBMUQ7O1FBQ1ksWUFBTyxHQUF1QyxFQUFFLENBQUM7SUFzQjdELENBQUM7SUFwQlUsSUFBSSxDQUFDLFNBQXNDLEVBQUUsR0FBMkI7UUFDM0UsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQztZQUFFLE9BQU87UUFDckQsS0FBSyxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVNLGdCQUFnQixDQUFDLE9BQTJDO1FBQy9ELElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztZQUFFLE1BQU0sSUFBSSx3Q0FBK0IsRUFBRSxDQUFDO1FBQ3pFLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0lBQzNCLENBQUM7SUFFTSxtQkFBbUIsQ0FBVSxTQUFZLEVBQUUsR0FBMkI7UUFDekUsSUFBSSxJQUFBLGVBQU8sRUFBQyxJQUFJLENBQUMsT0FBTyxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDeEMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxRQUF1QixFQUFFLEVBQUUsQ0FBQyxTQUFTLFlBQVksUUFBUSxDQUFDO1FBRWhGLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBQyxrQkFBa0IsRUFBQyxFQUFFLEVBQUU7WUFDdEQsT0FBTyxDQUFDLGtCQUFrQixDQUFDLE1BQU0sSUFBSSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDL0UsQ0FBQyxDQUFDLENBQUM7UUFDSCxNQUFNLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDdEMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ3BCLENBQUM7Q0FDSjtBQXZCRCw4Q0F1QkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2lzRW1wdHl9IGZyb20gXCIuLi8uLi91dGlsc1wiO1xuaW1wb3J0IHtIdHRwRXhjZXB0aW9ufSBmcm9tIFwiLi4vLi4vZXhjZXB0aW9uc1wiO1xuaW1wb3J0IHtCYXNlRXhjZXB0aW9uRmlsdGVyfSBmcm9tICcuL2Jhc2UtZXhjZXB0aW9uLWZpbHRlcic7XG5pbXBvcnQge0ludmFsaWRFeGNlcHRpb25GaWx0ZXJFeGNlcHRpb259IGZyb20gJy4uLy4uL2Vycm9ycyc7XG5pbXBvcnQge0FyZ3VtZW50c0hvc3RJbnRlcmZhY2UsIEV4Y2VwdGlvbkZpbHRlck1ldGFkYXRhSW50ZXJmYWNlLCBUeXBlfSBmcm9tIFwiLi4vLi4vY29udHJhY3RzXCI7XG5cbmV4cG9ydCBjbGFzcyBFeGNlcHRpb25zSGFuZGxlciBleHRlbmRzIEJhc2VFeGNlcHRpb25GaWx0ZXIge1xuICAgIHByaXZhdGUgZmlsdGVyczogRXhjZXB0aW9uRmlsdGVyTWV0YWRhdGFJbnRlcmZhY2VbXSA9IFtdO1xuXG4gICAgcHVibGljIG5leHQoZXhjZXB0aW9uOiBFcnJvciB8IEh0dHBFeGNlcHRpb24gfCBhbnksIGN0eDogQXJndW1lbnRzSG9zdEludGVyZmFjZSkge1xuICAgICAgICBpZiAodGhpcy5pbnZva2VDdXN0b21GaWx0ZXJzKGV4Y2VwdGlvbiwgY3R4KSkgcmV0dXJuO1xuICAgICAgICBzdXBlci5jYXRjaChleGNlcHRpb24sIGN0eCk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldEN1c3RvbUZpbHRlcnMoZmlsdGVyczogRXhjZXB0aW9uRmlsdGVyTWV0YWRhdGFJbnRlcmZhY2VbXSkge1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZmlsdGVycykpIHRocm93IG5ldyBJbnZhbGlkRXhjZXB0aW9uRmlsdGVyRXhjZXB0aW9uKCk7XG4gICAgICAgIHRoaXMuZmlsdGVycyA9IGZpbHRlcnM7XG4gICAgfVxuXG4gICAgcHVibGljIGludm9rZUN1c3RvbUZpbHRlcnM8VCA9IGFueT4oZXhjZXB0aW9uOiBULCBjdHg6IEFyZ3VtZW50c0hvc3RJbnRlcmZhY2UpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKGlzRW1wdHkodGhpcy5maWx0ZXJzKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBjb25zdCBpc0luc3RhbmNlT2YgPSAobWV0YVR5cGU6IFR5cGU8dW5rbm93bj4pID0+IGV4Y2VwdGlvbiBpbnN0YW5jZW9mIG1ldGFUeXBlO1xuXG4gICAgICAgIGNvbnN0IGZpbHRlciA9IHRoaXMuZmlsdGVycy5maW5kKCh7ZXhjZXB0aW9uTWV0YVR5cGVzfSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuICFleGNlcHRpb25NZXRhVHlwZXMubGVuZ3RoIHx8IGV4Y2VwdGlvbk1ldGFUeXBlcy5zb21lKGlzSW5zdGFuY2VPZik7XG4gICAgICAgIH0pO1xuICAgICAgICBmaWx0ZXIgJiYgZmlsdGVyLmZ1bmMoZXhjZXB0aW9uLCBjdHgpO1xuICAgICAgICByZXR1cm4gISFmaWx0ZXI7XG4gICAgfVxufVxuIl19