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