@@ -36,6 +36,7 @@ import {
3636import { ApplicationConfig } from './application-config' ;
3737import { APP_FILTER , APP_GUARD , APP_INTERCEPTOR , APP_PIPE } from './constants' ;
3838import { CircularDependencyException } from './errors/exceptions/circular-dependency.exception' ;
39+ import { ModulesContainer } from './injector' ;
3940import { NestContainer } from './injector/container' ;
4041import { InstanceWrapper } from './injector/instance-wrapper' ;
4142import { Module } from './injector/module' ;
@@ -116,6 +117,7 @@ export class DependenciesScanner {
116117 this . reflectControllers ( metatype , token ) ;
117118 this . reflectExports ( metatype , token ) ;
118119 }
120+ this . calculateModulesDistance ( modules ) ;
119121 }
120122
121123 public async reflectImports (
@@ -251,6 +253,26 @@ export class DependenciesScanner {
251253 return undefined ;
252254 }
253255
256+ public async calculateModulesDistance ( modules : ModulesContainer ) {
257+ const modulesStack = [ ] ;
258+ const modulesGenerator = modules . values ( ) ;
259+ const rootModule = modulesGenerator . next ( ) . value ;
260+
261+ const calculateDistance = ( moduleRef : Module , distance = 1 ) => {
262+ if ( modulesStack . includes ( moduleRef ) ) {
263+ return ;
264+ }
265+ modulesStack . push ( moduleRef ) ;
266+
267+ const moduleImports = rootModule . relatedModules ;
268+ moduleImports . forEach ( module => {
269+ module . distance = distance ;
270+ calculateDistance ( module , distance + 1 ) ;
271+ } ) ;
272+ } ;
273+ calculateDistance ( rootModule ) ;
274+ }
275+
254276 public async insertImport ( related : any , token : string , context : string ) {
255277 if ( isUndefined ( related ) ) {
256278 throw new CircularDependencyException ( context ) ;
0 commit comments