1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | exports.callModuleDestroyHook = void 0;
|
4 | const shared_utils_1 = require("@nestjs/common/utils/shared.utils");
|
5 | const iterare_1 = require("iterare");
|
6 | const transient_instances_1 = require("../injector/helpers/transient-instances");
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 | function hasOnModuleDestroyHook(instance) {
|
13 | return (0, shared_utils_1.isFunction)(instance.onModuleDestroy);
|
14 | }
|
15 |
|
16 |
|
17 |
|
18 | function callOperator(instances) {
|
19 | return (0, iterare_1.iterate)(instances)
|
20 | .filter(instance => !(0, shared_utils_1.isNil)(instance))
|
21 | .filter(hasOnModuleDestroyHook)
|
22 | .map(async (instance) => instance.onModuleDestroy())
|
23 | .toArray();
|
24 | }
|
25 |
|
26 |
|
27 |
|
28 |
|
29 |
|
30 |
|
31 | async function callModuleDestroyHook(module) {
|
32 | const providers = module.getNonAliasProviders();
|
33 |
|
34 |
|
35 | const [_, moduleClassHost] = providers.shift();
|
36 | const instances = [
|
37 | ...module.controllers,
|
38 | ...providers,
|
39 | ...module.injectables,
|
40 | ...module.middlewares,
|
41 | ];
|
42 | const nonTransientInstances = (0, transient_instances_1.getNonTransientInstances)(instances);
|
43 | await Promise.all(callOperator(nonTransientInstances));
|
44 | const transientInstances = (0, transient_instances_1.getTransientInstances)(instances);
|
45 | await Promise.all(callOperator(transientInstances));
|
46 |
|
47 | const moduleClassInstance = moduleClassHost.instance;
|
48 | if (moduleClassInstance &&
|
49 | hasOnModuleDestroyHook(moduleClassInstance) &&
|
50 | moduleClassHost.isDependencyTreeStatic()) {
|
51 | await moduleClassInstance.onModuleDestroy();
|
52 | }
|
53 | }
|
54 | exports.callModuleDestroyHook = callModuleDestroyHook;
|