@@ -12,20 +12,27 @@ import {
1212 BuilderConfiguration ,
1313 BuilderContext ,
1414} from '@angular-devkit/architect' ;
15- import { Path , getSystemPath , normalize , resolve } from '@angular-devkit/core' ;
15+ import { getSystemPath , normalize , resolve } from '@angular-devkit/core' ;
16+ import * as net from 'net' ;
1617import { Observable , from } from 'rxjs' ;
1718import { concatMap } from 'rxjs/operators' ;
1819import * as webpack from 'webpack' ;
1920import * as WebpackDevServer from 'webpack-dev-server' ;
2021import { LoggingCallback , defaultLoggingCb } from '../webpack' ;
2122import { WebpackDevServerBuilderSchema } from './schema' ;
2223
24+ export interface DevServerResult {
25+ port : number ;
26+ family : string ;
27+ address : string ;
28+ }
2329
2430export class WebpackDevServerBuilder implements Builder < WebpackDevServerBuilderSchema > {
2531
2632 constructor ( public context : BuilderContext ) { }
2733
28- run ( builderConfig : BuilderConfiguration < WebpackDevServerBuilderSchema > ) : Observable < BuildEvent > {
34+ run ( builderConfig : BuilderConfiguration < WebpackDevServerBuilderSchema > )
35+ : Observable < BuildEvent < DevServerResult > > {
2936 const configPath = resolve ( this . context . workspace . root ,
3037 normalize ( builderConfig . options . webpackConfig ) ) ;
3138
@@ -42,11 +49,13 @@ export class WebpackDevServerBuilder implements Builder<WebpackDevServerBuilderS
4249 webpackConfig : webpack . Configuration ,
4350 devServerCfg ?: WebpackDevServer . Configuration ,
4451 loggingCb : LoggingCallback = defaultLoggingCb ,
45- ) : Observable < BuildEvent > {
52+ ) : Observable < BuildEvent < DevServerResult > > {
4653 return new Observable ( obs => {
4754 const devServerConfig = devServerCfg || webpackConfig . devServer || { } ;
4855 devServerConfig . host = devServerConfig . host || 'localhost' ;
49- devServerConfig . port = devServerConfig . port || 8080 ;
56+ if ( devServerConfig . port == undefined ) {
57+ devServerConfig . port = 8080 ;
58+ }
5059
5160 if ( devServerConfig . stats ) {
5261 webpackConfig . stats = devServerConfig . stats as webpack . Stats . ToStringOptionsObject ;
@@ -56,20 +65,26 @@ export class WebpackDevServerBuilder implements Builder<WebpackDevServerBuilderS
5665
5766 const webpackCompiler = webpack ( webpackConfig ) ;
5867 const server = new WebpackDevServer ( webpackCompiler , devServerConfig ) ;
68+ let result : undefined | DevServerResult ;
5969
6070 webpackCompiler . hooks . done . tap ( 'build-webpack' , ( stats ) => {
6171 // Log stats.
6272 loggingCb ( stats , webpackConfig , this . context . logger ) ;
6373
64- obs . next ( { success : ! stats . hasErrors ( ) } ) ;
74+ obs . next ( { success : ! stats . hasErrors ( ) , result } ) ;
6575 } ) ;
6676
6777 server . listen (
6878 devServerConfig . port ,
6979 devServerConfig . host ,
70- ( err ) => {
80+ function ( err ) {
7181 if ( err ) {
7282 obs . error ( err ) ;
83+ } else {
84+ // this is ignored because of ts errors
85+ // that this is overshadowed by it's outer contain
86+ // @ts -ignore;
87+ result = ( this as net . Server ) . address ( ) ;
7388 }
7489 } ,
7590 ) ;
0 commit comments