From 35ebf1efdfa438ea713020b847826621bba0ebfc Mon Sep 17 00:00:00 2001 From: Alan Agius Date: Tue, 23 Jan 2024 10:25:03 +0000 Subject: [PATCH] fix(@schematics/angular): retain trailing comma when adding providers to app config This fixes an issue which caused the new provider to be added in the position of the trailing comma. With this change the trailing comma is retained. Closes #26911 (cherry picked from commit 90363dd6bfcf963bb97a948457decf2e2967d350) --- .../angular/utility/standalone/rules.ts | 4 +-- .../angular/utility/standalone/rules_spec.ts | 31 +++++++++++++++++++ 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/packages/schematics/angular/utility/standalone/rules.ts b/packages/schematics/angular/utility/standalone/rules.ts index ba8e574d4fc2..2f7a083f20c1 100644 --- a/packages/schematics/angular/utility/standalone/rules.ts +++ b/packages/schematics/angular/utility/standalone/rules.ts @@ -231,12 +231,10 @@ function addProvidersExpressionToAppConfig( // If there's a `providers` property, we can add the provider // to it, otherwise we need to declare it ourselves. if (providersLiteral) { - const hasTrailingComma = providersLiteral.elements.hasTrailingComma; - applyChangesToFile(tree, filePath, [ insertAfterLastOccurrence( providersLiteral.elements, - (hasTrailingComma || providersLiteral.elements.length === 0 ? '' : ', ') + expression, + (providersLiteral.elements.length === 0 ? '' : ', ') + expression, filePath, providersLiteral.getStart() + 1, ), diff --git a/packages/schematics/angular/utility/standalone/rules_spec.ts b/packages/schematics/angular/utility/standalone/rules_spec.ts index d79557a5f730..7a5cabd69074 100644 --- a/packages/schematics/angular/utility/standalone/rules_spec.ts +++ b/packages/schematics/angular/utility/standalone/rules_spec.ts @@ -445,5 +445,36 @@ describe('standalone utilities', () => { assertContains(content, `import { provideModule } from '@my/module';`); assertContains(content, `providers: [provideModule([])]`); }); + + it('should add a root provider to a standalone app when providers contain a trailing comma', async () => { + await setupProject(true); + + const configPath = 'app/app.config.ts'; + host.overwrite( + getPathWithinProject(configPath), + ` + import { ApplicationConfig } from '@angular/core'; + import { provideRouter } from '@angular/router'; + + export const appConfig: ApplicationConfig = { + providers: [ + provideRouter([]), + ] + }; + `, + ); + + await testRule( + addRootProvider( + projectName, + ({ code, external }) => code`${external('provideModule', '@my/module')}([])`, + ), + host, + ); + + const content = readFile('app/app.config.ts'); + assertContains(content, `import { provideModule } from '@my/module';`); + assertContains(content, `providers: [provideRouter([]),provideModule([]),]`); + }); }); });