1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | exports.callAppShutdownHook = 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 hasOnAppShutdownHook(instance) {
|
13 | return shared_utils_1.isFunction(instance.onApplicationShutdown);
|
14 | }
|
15 |
|
16 |
|
17 |
|
18 | function callOperator(instances, signal) {
|
19 | return iterare_1.iterate(instances)
|
20 | .filter(instance => !shared_utils_1.isNil(instance))
|
21 | .filter(hasOnAppShutdownHook)
|
22 | .map(async (instance) => instance.onApplicationShutdown(signal))
|
23 | .toArray();
|
24 | }
|
25 |
|
26 |
|
27 |
|
28 |
|
29 |
|
30 |
|
31 | async function callAppShutdownHook(module, signal) {
|
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 = transient_instances_1.getNonTransientInstances(instances);
|
43 | await Promise.all(callOperator(nonTransientInstances, signal));
|
44 | const transientInstances = transient_instances_1.getTransientInstances(instances);
|
45 | await Promise.all(callOperator(transientInstances, signal));
|
46 |
|
47 | const moduleClassInstance = moduleClassHost.instance;
|
48 | if (moduleClassInstance &&
|
49 | hasOnAppShutdownHook(moduleClassInstance) &&
|
50 | moduleClassHost.isDependencyTreeStatic()) {
|
51 | await moduleClassInstance.onApplicationShutdown(signal);
|
52 | }
|
53 | }
|
54 | exports.callAppShutdownHook = callAppShutdownHook;
|