UNPKG

2.25 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3const constants_1 = require("@nestjs/common/constants");
4const shared_utils_1 = require("@nestjs/common/utils/shared.utils");
5const iterare_1 = require("iterare");
6const context_creator_1 = require("../helpers/context-creator");
7const constants_2 = require("../injector/constants");
8class BaseExceptionFilterContext extends context_creator_1.ContextCreator {
9 constructor(container) {
10 super();
11 this.container = container;
12 }
13 createConcreteContext(metadata, contextId = constants_2.STATIC_CONTEXT, inquirerId) {
14 if (shared_utils_1.isEmpty(metadata)) {
15 return [];
16 }
17 return iterare_1.default(metadata)
18 .filter(instance => instance && (shared_utils_1.isFunction(instance.catch) || instance.name))
19 .map(filter => this.getFilterInstance(filter, contextId, inquirerId))
20 .filter(item => !!item)
21 .map(instance => ({
22 func: instance.catch.bind(instance),
23 exceptionMetatypes: this.reflectCatchExceptions(instance),
24 }))
25 .toArray();
26 }
27 getFilterInstance(filter, contextId = constants_2.STATIC_CONTEXT, inquirerId) {
28 const isObject = filter.catch;
29 if (isObject) {
30 return filter;
31 }
32 const instanceWrapper = this.getInstanceByMetatype(filter);
33 if (!instanceWrapper) {
34 return null;
35 }
36 const instanceHost = instanceWrapper.getInstanceByContextId(contextId, inquirerId);
37 return instanceHost && instanceHost.instance;
38 }
39 getInstanceByMetatype(filter) {
40 if (!this.moduleContext) {
41 return undefined;
42 }
43 const collection = this.container.getModules();
44 const module = collection.get(this.moduleContext);
45 if (!module) {
46 return undefined;
47 }
48 return module.injectables.get(filter.name);
49 }
50 reflectCatchExceptions(instance) {
51 const prototype = Object.getPrototypeOf(instance);
52 return (Reflect.getMetadata(constants_1.FILTER_CATCH_EXCEPTIONS, prototype.constructor) || []);
53 }
54}
55exports.BaseExceptionFilterContext = BaseExceptionFilterContext;