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