diff --git a/packages/cli/src/angular/migrations/standalone/0003-migrate-bootstrap-application.test.ts b/packages/cli/src/angular/migrations/standalone/0003-migrate-bootstrap-application.test.ts index ae797b6..5c45a32 100644 --- a/packages/cli/src/angular/migrations/standalone/0003-migrate-bootstrap-application.test.ts +++ b/packages/cli/src/angular/migrations/standalone/0003-migrate-bootstrap-application.test.ts @@ -60,4 +60,60 @@ describe("migrateBootstrapApplication", () => { `), ); }); + + it("order of providers should not impact migration", async () => { + const project = new Project({ useInMemoryFileSystem: true }); + + const main = dedent(` + import { enableProdMode, importProvidersFrom } from '@angular/core'; + import { bootstrapApplication } from '@angular/platform-browser'; + import { RouteReuseStrategy, provideRouter } from '@angular/router'; + import { IonicModule, IonicRouteStrategy } from '@ionic/angular'; + + import { routes } from './app/app.routes'; + import { AppComponent } from './app/app.component'; + import { environment } from './environments/environment'; + + if (environment.production) { + enableProdMode(); + } + + bootstrapApplication(AppComponent, { + providers: [ + { provide: RouteReuseStrategy, useClass: IonicRouteStrategy }, + provideRouter(routes), + importProvidersFrom(IonicModule.forRoot({ mode: 'ios' })), + ], + }); + `); + + const mainSourceFile = project.createSourceFile("src/main.ts", main); + + await migrateBootstrapApplication(project, { dryRun: false }); + + expect(dedent(mainSourceFile.getText())).toBe( + dedent(` + import { enableProdMode, importProvidersFrom } from '@angular/core'; + import { bootstrapApplication } from '@angular/platform-browser'; + import { RouteReuseStrategy, provideRouter } from '@angular/router'; + import { IonicRouteStrategy, provideIonicAngular } from '@ionic/angular/standalone'; + + import { routes } from './app/app.routes'; + import { AppComponent } from './app/app.component'; + import { environment } from './environments/environment'; + + if (environment.production) { + enableProdMode(); + } + + bootstrapApplication(AppComponent, { + providers: [ + { provide: RouteReuseStrategy, useClass: IonicRouteStrategy }, + provideRouter(routes), + provideIonicAngular({ mode: 'ios' }) + ], + }); + `), + ); + }); }); diff --git a/packages/cli/src/angular/migrations/standalone/0003-migrate-bootstrap-application.ts b/packages/cli/src/angular/migrations/standalone/0003-migrate-bootstrap-application.ts index 21c5ec3..0279b7d 100644 --- a/packages/cli/src/angular/migrations/standalone/0003-migrate-bootstrap-application.ts +++ b/packages/cli/src/angular/migrations/standalone/0003-migrate-bootstrap-application.ts @@ -68,9 +68,17 @@ export const migrateBootstrapApplication = async ( return; } - const importProvidersFromFunctionCall = providersArray.getFirstChildByKind( - SyntaxKind.CallExpression, - ); + const importProvidersFromFunctionCall = providersArray + .getChildrenOfKind(SyntaxKind.CallExpression) + .find((callExpression) => { + const identifier = callExpression.getFirstChildByKind( + SyntaxKind.Identifier, + ); + return ( + identifier !== undefined && + identifier.getText() === "importProvidersFrom" + ); + }); if (importProvidersFromFunctionCall === undefined) { return;