UNPKG

2.11 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3exports.callBeforeAppShutdownHook = void 0;
4const shared_utils_1 = require("@nestjs/common/utils/shared.utils");
5const iterare_1 = require("iterare");
6const transient_instances_1 = require("../injector/helpers/transient-instances");
7/**
8 * Checks if the given instance has the `beforeApplicationShutdown` function
9 *
10 * @param instance The instance which should be checked
11 */
12function hasBeforeApplicationShutdownHook(instance) {
13 return shared_utils_1.isFunction(instance.beforeApplicationShutdown);
14}
15/**
16 * Calls the given instances
17 */
18function callOperator(instances, signal) {
19 return iterare_1.iterate(instances)
20 .filter(instance => !shared_utils_1.isNil(instance))
21 .filter(hasBeforeApplicationShutdownHook)
22 .map(async (instance) => instance.beforeApplicationShutdown(signal))
23 .toArray();
24}
25/**
26 * Calls the `beforeApplicationShutdown` function on the module and its children
27 * (providers / controllers).
28 *
29 * @param module The module which will be initialized
30 * @param signal The signal which caused the shutdown
31 */
32async function callBeforeAppShutdownHook(module, signal) {
33 const providers = module.getNonAliasProviders();
34 const [_, moduleClassHost] = providers.shift();
35 const instances = [
36 ...module.controllers,
37 ...providers,
38 ...module.injectables,
39 ...module.middlewares,
40 ];
41 const nonTransientInstances = transient_instances_1.getNonTransientInstances(instances);
42 await Promise.all(callOperator(nonTransientInstances, signal));
43 const transientInstances = transient_instances_1.getTransientInstances(instances);
44 await Promise.all(callOperator(transientInstances, signal));
45 const moduleClassInstance = moduleClassHost.instance;
46 if (moduleClassInstance &&
47 hasBeforeApplicationShutdownHook(moduleClassInstance) &&
48 moduleClassHost.isDependencyTreeStatic()) {
49 await moduleClassInstance.beforeApplicationShutdown(signal);
50 }
51}
52exports.callBeforeAppShutdownHook = callBeforeAppShutdownHook;