From a94c826661fe122332fcaa17b0457cf48974a86b Mon Sep 17 00:00:00 2001 From: Bram Borggreve Date: Tue, 21 Aug 2018 22:40:12 +0200 Subject: [PATCH] feat(@schematics/angular): let Universal schematic use configurations from build architect --- .../schematics/angular/universal/index.ts | 20 +++++++++++++++++++ .../angular/universal/index_spec.ts | 7 +++++++ 2 files changed, 27 insertions(+) diff --git a/packages/schematics/angular/universal/index.ts b/packages/schematics/angular/universal/index.ts index 6db955cd11..09c8bae312 100644 --- a/packages/schematics/angular/universal/index.ts +++ b/packages/schematics/angular/universal/index.ts @@ -68,6 +68,16 @@ function getClientTargets( return projectTargets; } +// TODO: Add types for the Target +// tslint:disable-next-line:no-any +function getFileReplacements(target: any ) { + const configurations = target.configurations || {}; + const production = configurations.production || {}; + const fileReplacements = production.fileReplacements || []; + + return fileReplacements; +} + function updateConfigFile(options: UniversalOptions, tsConfigDirectory: Path): Rule { return (host: Tree) => { const workspace = getWorkspace(host); @@ -83,9 +93,19 @@ function updateConfigFile(options: UniversalOptions, tsConfigDirectory: Path): R main: `${clientProject.root}src/main.server.ts`, tsConfig: join(tsConfigDirectory, `${options.tsconfigFileName}.json`), }; + + // TODO: Add types for the TargetConfiguration + // tslint:disable-next-line:no-any + const builderConfigurations: any = { + production: { + fileReplacements: getFileReplacements(projectTargets.build), + }, + }; + const serverTarget: JsonObject = { builder: '@angular-devkit/build-angular:server', options: builderOptions, + configurations: builderConfigurations, }; projectTargets.server = serverTarget; diff --git a/packages/schematics/angular/universal/index_spec.ts b/packages/schematics/angular/universal/index_spec.ts index 7a5e330417..0ca8c034ac 100644 --- a/packages/schematics/angular/universal/index_spec.ts +++ b/packages/schematics/angular/universal/index_spec.ts @@ -130,6 +130,13 @@ describe('Universal Schematic', () => { expect(opts.outputPath).toEqual('dist/bar-server'); expect(opts.main).toEqual('projects/bar/src/main.server.ts'); expect(opts.tsConfig).toEqual('projects/bar/tsconfig.server.json'); + const configurations = targets.server.configurations; + expect(configurations.production).toBeDefined(); + expect(configurations.production.fileReplacements).toBeDefined(); + const fileReplacements = targets.server.configurations.production.fileReplacements; + expect(fileReplacements.length).toEqual(1); + expect(fileReplacements[0].replace).toEqual('projects/bar/src/environments/environment.ts'); + expect(fileReplacements[0].with).toEqual('projects/bar/src/environments/environment.prod.ts'); }); it('should add a server transition to BrowerModule import', () => {