diff --git a/packages/compiler-cli/src/ngtsc/routing/src/lazy.ts b/packages/compiler-cli/src/ngtsc/routing/src/lazy.ts index c5cd9dfe3b..62caeed917 100644 --- a/packages/compiler-cli/src/ngtsc/routing/src/lazy.ts +++ b/packages/compiler-cli/src/ngtsc/routing/src/lazy.ts @@ -111,7 +111,7 @@ function scanForLazyRoutes(routes: ResolvedValue[]): string[] { } else if (route.has('children')) { const children = route.get('children'); if (Array.isArray(children)) { - recursivelyScanRoutes(routes); + recursivelyScanRoutes(children); } } } diff --git a/packages/compiler-cli/test/ngtsc/ngtsc_spec.ts b/packages/compiler-cli/test/ngtsc/ngtsc_spec.ts index 2f46985930..acc6ca55e1 100644 --- a/packages/compiler-cli/test/ngtsc/ngtsc_spec.ts +++ b/packages/compiler-cli/test/ngtsc/ngtsc_spec.ts @@ -2065,6 +2065,54 @@ describe('ngtsc behavioral tests', () => { expect(routes[0].module.filePath.endsWith('/test.ts')).toBe(true); expect(routes[0].referencedModule.filePath.endsWith('/lazy.ts')).toBe(true); }); + + it('should detect lazy routes in simple children routes', () => { + env.tsconfig(); + env.write('test.ts', ` + import {NgModule} from '@angular/core'; + import {RouterModule} from '@angular/router'; + + @Component({ + selector: 'foo', + template: '
Foo
' + }) + class FooCmp {} + + @NgModule({ + imports: [ + RouterModule.forRoot([ + {path: '', children: [ + {path: 'foo', component: FooCmp}, + {path: 'lazy', loadChildren: './lazy#LazyModule'} + ]}, + ]), + ], + }) + export class TestModule {} + `); + env.write('lazy.ts', ` + import {NgModule} from '@angular/core'; + import {RouterModule} from '@angular/router'; + + @NgModule({}) + export class LazyModule {} + `); + env.write('node_modules/@angular/router/index.d.ts', ` + import {ModuleWithProviders} from '@angular/core'; + + export declare var ROUTES; + export declare class RouterModule { + static forRoot(arg1: any, arg2: any): ModuleWithProviders; + static forChild(arg1: any): ModuleWithProviders; + } + `); + + const routes = env.driveRoutes(); + expect(routes.length).toBe(1); + expect(routes[0].route).toEqual('./lazy#LazyModule'); + expect(routes[0].module.filePath.endsWith('/test.ts')).toBe(true); + expect(routes[0].referencedModule.filePath.endsWith('/lazy.ts')).toBe(true); + }); }); function expectTokenAtPosition(