({
moduleDefinition,
lazy,
scope = [],
ctxRegistry = [],
overrides = [],
}: ModulesScanParameters)
| 104 | } |
| 105 | |
| 106 | public async scanForModules({ |
| 107 | moduleDefinition, |
| 108 | lazy, |
| 109 | scope = [], |
| 110 | ctxRegistry = [], |
| 111 | overrides = [], |
| 112 | }: ModulesScanParameters): Promise<Module[]> { |
| 113 | const { moduleRef: moduleInstance, inserted: moduleInserted } = |
| 114 | (await this.insertOrOverrideModule(moduleDefinition, overrides, scope)) ?? |
| 115 | {}; |
| 116 | |
| 117 | moduleDefinition = |
| 118 | this.getOverrideModuleByModule(moduleDefinition, overrides)?.newModule ?? |
| 119 | moduleDefinition; |
| 120 | |
| 121 | moduleDefinition = |
| 122 | moduleDefinition instanceof Promise |
| 123 | ? await moduleDefinition |
| 124 | : moduleDefinition; |
| 125 | |
| 126 | ctxRegistry.push(moduleDefinition); |
| 127 | |
| 128 | if (this.isForwardReference(moduleDefinition)) { |
| 129 | moduleDefinition = (moduleDefinition as ForwardReference).forwardRef(); |
| 130 | } |
| 131 | const modules = !this.isDynamicModule( |
| 132 | moduleDefinition as Type<any> | DynamicModule, |
| 133 | ) |
| 134 | ? this.reflectMetadata( |
| 135 | MODULE_METADATA.IMPORTS, |
| 136 | moduleDefinition as Type<any>, |
| 137 | ) |
| 138 | : [ |
| 139 | ...this.reflectMetadata( |
| 140 | MODULE_METADATA.IMPORTS, |
| 141 | (moduleDefinition as DynamicModule).module, |
| 142 | ), |
| 143 | ...((moduleDefinition as DynamicModule).imports || []), |
| 144 | ]; |
| 145 | |
| 146 | let registeredModuleRefs: Module[] = []; |
| 147 | for (const [index, innerModule] of modules.entries()) { |
| 148 | // In case of a circular dependency (ES module system), JavaScript will resolve the type to `undefined`. |
| 149 | if (innerModule === undefined) { |
| 150 | throw new UndefinedModuleException(moduleDefinition, index, scope); |
| 151 | } |
| 152 | if (!innerModule) { |
| 153 | throw new InvalidModuleException( |
| 154 | moduleDefinition, |
| 155 | index, |
| 156 | scope, |
| 157 | innerModule, |
| 158 | ); |
| 159 | } |
| 160 | if (ctxRegistry.includes(innerModule)) { |
| 161 | continue; |
| 162 | } |
| 163 | const moduleRefs = await this.scanForModules({ |
no test coverage detected