@@ -15,7 +15,7 @@ import {
1515import { resolve } from '@angular-devkit/core' ;
1616import * as path from 'path' ;
1717import { Observable } from 'rxjs/Observable' ;
18- import { concatMap , map , tap } from 'rxjs/operators' ;
18+ import { concatMap , map } from 'rxjs/operators' ;
1919import * as webpack from 'webpack' ;
2020import { getWebpackStatsConfig } from '../angular-cli-files/models/webpack-configs/utils' ;
2121import { statsErrorsToString , statsWarningsToString } from '../angular-cli-files/utilities/stats' ;
@@ -36,6 +36,7 @@ export class ExtractI18nBuilder implements Builder<ExtractI18nBuilderOptions> {
3636 constructor ( public context : BuilderContext ) { }
3737
3838 run ( builderConfig : BuilderConfiguration < ExtractI18nBuilderOptions > ) : Observable < BuildEvent > {
39+ const architect = this . context . architect ;
3940 const options = builderConfig . options ;
4041 const root = this . context . workspace . root ;
4142 const projectRoot = resolve ( root , builderConfig . root ) ;
@@ -44,69 +45,68 @@ export class ExtractI18nBuilder implements Builder<ExtractI18nBuilderOptions> {
4445 const overrides = { watch : false } ;
4546
4647 const browserTargetSpec = { project, target : targetName , configuration, overrides } ;
47- let browserBuilderConfig : BuilderConfiguration < BrowserBuilderOptions > ;
48-
49- return this . context . architect . getBuilderConfiguration < BrowserBuilderOptions > ( browserTargetSpec )
50- . pipe (
51- tap ( cfg => browserBuilderConfig = cfg ) ,
52- concatMap ( builderConfig => this . context . architect . getBuilderDescription ( builderConfig ) ) ,
53- concatMap ( browserDescription =>
54- this . context . architect . validateBuilderOptions ( browserBuilderConfig , browserDescription ) ) ,
55- map ( browserBuilderConfig => browserBuilderConfig . options ) ,
56- concatMap ( ( validatedBrowserOptions ) => new Observable ( obs => {
57- const browserOptions = validatedBrowserOptions ;
58- const browserBuilder = new BrowserBuilder ( this . context ) ;
59-
60- // We need to determine the outFile name so that AngularCompiler can retrieve it.
61- let outFile = options . outFile || getI18nOutfile ( options . i18nFormat ) ;
62- if ( options . outputPath ) {
63- // AngularCompilerPlugin doesn't support genDir so we have to adjust outFile instead.
64- outFile = path . join ( options . outputPath , outFile ) ;
48+ const browserBuilderConfig = architect . getBuilderConfiguration < BrowserBuilderOptions > (
49+ browserTargetSpec ) ;
50+
51+ return architect . getBuilderDescription ( browserBuilderConfig ) . pipe (
52+ concatMap ( browserDescription =>
53+ architect . validateBuilderOptions ( browserBuilderConfig , browserDescription ) ) ,
54+ map ( browserBuilderConfig => browserBuilderConfig . options ) ,
55+ concatMap ( ( validatedBrowserOptions ) => new Observable ( obs => {
56+ const browserOptions = validatedBrowserOptions ;
57+ const browserBuilder = new BrowserBuilder ( this . context ) ;
58+
59+ // We need to determine the outFile name so that AngularCompiler can retrieve it.
60+ let outFile = options . outFile || getI18nOutfile ( options . i18nFormat ) ;
61+ if ( options . outputPath ) {
62+ // AngularCompilerPlugin doesn't support genDir so we have to adjust outFile instead.
63+ outFile = path . join ( options . outputPath , outFile ) ;
64+ }
65+
66+ // Extracting i18n uses the browser target webpack config with some specific options.
67+ const webpackConfig = browserBuilder . buildWebpackConfig ( root , projectRoot , {
68+ ...browserOptions ,
69+ optimizationLevel : 0 ,
70+ i18nLocale : options . i18nLocale ,
71+ i18nOutFormat : options . i18nFormat ,
72+ i18nOutFile : outFile ,
73+ aot : true ,
74+ } ) ;
75+
76+ const webpackCompiler = webpack ( webpackConfig ) ;
77+ webpackCompiler . outputFileSystem = new MemoryFS ( ) ;
78+ const statsConfig = getWebpackStatsConfig ( ) ;
79+
80+ const callback : webpack . compiler . CompilerCallback = ( err , stats ) => {
81+ if ( err ) {
82+ return obs . error ( err ) ;
6583 }
6684
67- // Extracting i18n uses the browser target webpack config with some specific options.
68- const webpackConfig = browserBuilder . buildWebpackConfig ( root , projectRoot , {
69- ...browserOptions ,
70- optimizationLevel : 0 ,
71- i18nLocale : options . i18nLocale ,
72- i18nOutFormat : options . i18nFormat ,
73- i18nOutFile : outFile ,
74- aot : true ,
75- } ) ;
76-
77- const webpackCompiler = webpack ( webpackConfig ) ;
78- webpackCompiler . outputFileSystem = new MemoryFS ( ) ;
79- const statsConfig = getWebpackStatsConfig ( ) ;
80-
81- const callback : webpack . compiler . CompilerCallback = ( err , stats ) => {
82- if ( err ) {
83- return obs . error ( err ) ;
84- }
85-
86- const json = stats . toJson ( 'verbose' ) ;
87- if ( stats . hasWarnings ( ) ) {
88- this . context . logger . warn ( statsWarningsToString ( json , statsConfig ) ) ;
89- }
90-
91- if ( stats . hasErrors ( ) ) {
92- this . context . logger . error ( statsErrorsToString ( json , statsConfig ) ) ;
93- }
94-
95- obs . next ( { success : ! stats . hasErrors ( ) } ) ;
96-
97- obs . complete ( ) ;
98- } ;
99-
100- try {
101- webpackCompiler . run ( callback ) ;
102- } catch ( err ) {
103- if ( err ) {
104- this . context . logger . error (
105- '\nAn error occured during the extraction:\n' + ( ( err && err . stack ) || err ) ) ;
106- }
107- throw err ;
85+ const json = stats . toJson ( 'verbose' ) ;
86+ if ( stats . hasWarnings ( ) ) {
87+ this . context . logger . warn ( statsWarningsToString ( json , statsConfig ) ) ;
10888 }
109- } ) ) ) ;
89+
90+ if ( stats . hasErrors ( ) ) {
91+ this . context . logger . error ( statsErrorsToString ( json , statsConfig ) ) ;
92+ }
93+
94+ obs . next ( { success : ! stats . hasErrors ( ) } ) ;
95+
96+ obs . complete ( ) ;
97+ } ;
98+
99+ try {
100+ webpackCompiler . run ( callback ) ;
101+ } catch ( err ) {
102+ if ( err ) {
103+ this . context . logger . error (
104+ '\nAn error occured during the extraction:\n' + ( ( err && err . stack ) || err ) ) ;
105+ }
106+ throw err ;
107+ }
108+ } ) ) ,
109+ ) ;
110110 }
111111}
112112
0 commit comments