1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | exports.LazyModuleLoader = void 0;
|
4 | const module_ref_1 = require("./module-ref");
|
5 | class LazyModuleLoader {
|
6 | constructor(dependenciesScanner, instanceLoader, moduleCompiler, modulesContainer) {
|
7 | this.dependenciesScanner = dependenciesScanner;
|
8 | this.instanceLoader = instanceLoader;
|
9 | this.moduleCompiler = moduleCompiler;
|
10 | this.modulesContainer = modulesContainer;
|
11 | }
|
12 | async load(loaderFn) {
|
13 | const moduleClassOrDynamicDefinition = await loaderFn();
|
14 | const moduleInstances = await this.dependenciesScanner.scanForModules(moduleClassOrDynamicDefinition);
|
15 | if (moduleInstances.length === 0) {
|
16 |
|
17 |
|
18 | const { token } = await this.moduleCompiler.compile(moduleClassOrDynamicDefinition);
|
19 | const moduleInstance = this.modulesContainer.get(token);
|
20 | return moduleInstance && this.getTargetModuleRef(moduleInstance);
|
21 | }
|
22 | const lazyModulesContainer = this.createLazyModulesContainer(moduleInstances);
|
23 | await this.dependenciesScanner.scanModulesForDependencies(lazyModulesContainer);
|
24 | await this.instanceLoader.createInstancesOfDependencies(lazyModulesContainer);
|
25 | const [targetModule] = moduleInstances;
|
26 | return this.getTargetModuleRef(targetModule);
|
27 | }
|
28 | createLazyModulesContainer(moduleInstances) {
|
29 | moduleInstances = Array.from(new Set(moduleInstances));
|
30 | return new Map(moduleInstances.map(ref => [ref.token, ref]));
|
31 | }
|
32 | getTargetModuleRef(moduleInstance) {
|
33 | const moduleRefInstanceWrapper = moduleInstance.getProviderByKey(module_ref_1.ModuleRef);
|
34 | return moduleRefInstanceWrapper.instance;
|
35 | }
|
36 | }
|
37 | exports.LazyModuleLoader = LazyModuleLoader;
|