Spaces:
Sleeping
Sleeping
| ; | |
| Object.defineProperty(exports, "__esModule", { value: true }); | |
| exports.callModuleInitHook = callModuleInitHook; | |
| const shared_utils_1 = require("@nestjs/common/utils/shared.utils"); | |
| const iterare_1 = require("iterare"); | |
| const transient_instances_1 = require("../injector/helpers/transient-instances"); | |
| /** | |
| * Returns true or false if the given instance has a `onModuleInit` function | |
| * | |
| * @param instance The instance which should be checked | |
| */ | |
| function hasOnModuleInitHook(instance) { | |
| return (0, shared_utils_1.isFunction)(instance.onModuleInit); | |
| } | |
| /** | |
| * Calls the given instances | |
| */ | |
| function callOperator(instances) { | |
| return (0, iterare_1.iterate)(instances) | |
| .filter(instance => !(0, shared_utils_1.isNil)(instance)) | |
| .filter(hasOnModuleInitHook) | |
| .map(async (instance) => instance.onModuleInit()) | |
| .toArray(); | |
| } | |
| /** | |
| * Calls the `onModuleInit` function on the module and its children | |
| * (providers / controllers). | |
| * | |
| * @param module The module which will be initialized | |
| */ | |
| async function callModuleInitHook(module) { | |
| const providers = module.getNonAliasProviders(); | |
| // Module (class) instance is the first element of the providers array | |
| // Lifecycle hook has to be called once all classes are properly initialized | |
| const [_, moduleClassHost] = providers.shift(); | |
| const instances = [ | |
| ...module.controllers, | |
| ...providers, | |
| ...module.injectables, | |
| ...module.middlewares, | |
| ]; | |
| const nonTransientInstances = (0, transient_instances_1.getNonTransientInstances)(instances); | |
| await Promise.all(callOperator(nonTransientInstances)); | |
| const transientInstances = (0, transient_instances_1.getTransientInstances)(instances); | |
| await Promise.all(callOperator(transientInstances)); | |
| // Call the instance itself | |
| const moduleClassInstance = moduleClassHost.instance; | |
| if (moduleClassInstance && | |
| hasOnModuleInitHook(moduleClassInstance) && | |
| moduleClassHost.isDependencyTreeStatic()) { | |
| await moduleClassInstance.onModuleInit(); | |
| } | |
| } | |