@@ -12,20 +12,27 @@ import {
12
12
BuilderConfiguration ,
13
13
BuilderContext ,
14
14
} 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' ;
16
17
import { Observable , from } from 'rxjs' ;
17
18
import { concatMap } from 'rxjs/operators' ;
18
19
import * as webpack from 'webpack' ;
19
20
import * as WebpackDevServer from 'webpack-dev-server' ;
20
21
import { LoggingCallback , defaultLoggingCb } from '../webpack' ;
21
22
import { WebpackDevServerBuilderSchema } from './schema' ;
22
23
24
+ export interface DevServerResult {
25
+ port : number ;
26
+ family : string ;
27
+ address : string ;
28
+ }
23
29
24
30
export class WebpackDevServerBuilder implements Builder < WebpackDevServerBuilderSchema > {
25
31
26
32
constructor ( public context : BuilderContext ) { }
27
33
28
- run ( builderConfig : BuilderConfiguration < WebpackDevServerBuilderSchema > ) : Observable < BuildEvent > {
34
+ run ( builderConfig : BuilderConfiguration < WebpackDevServerBuilderSchema > )
35
+ : Observable < BuildEvent < DevServerResult > > {
29
36
const configPath = resolve ( this . context . workspace . root ,
30
37
normalize ( builderConfig . options . webpackConfig ) ) ;
31
38
@@ -42,11 +49,13 @@ export class WebpackDevServerBuilder implements Builder<WebpackDevServerBuilderS
42
49
webpackConfig : webpack . Configuration ,
43
50
devServerCfg ?: WebpackDevServer . Configuration ,
44
51
loggingCb : LoggingCallback = defaultLoggingCb ,
45
- ) : Observable < BuildEvent > {
52
+ ) : Observable < BuildEvent < DevServerResult > > {
46
53
return new Observable ( obs => {
47
54
const devServerConfig = devServerCfg || webpackConfig . devServer || { } ;
48
55
devServerConfig . host = devServerConfig . host || 'localhost' ;
49
- devServerConfig . port = devServerConfig . port || 8080 ;
56
+ if ( devServerConfig . port == undefined ) {
57
+ devServerConfig . port = 8080 ;
58
+ }
50
59
51
60
if ( devServerConfig . stats ) {
52
61
webpackConfig . stats = devServerConfig . stats as webpack . Stats . ToStringOptionsObject ;
@@ -56,20 +65,26 @@ export class WebpackDevServerBuilder implements Builder<WebpackDevServerBuilderS
56
65
57
66
const webpackCompiler = webpack ( webpackConfig ) ;
58
67
const server = new WebpackDevServer ( webpackCompiler , devServerConfig ) ;
68
+ let result : undefined | DevServerResult ;
59
69
60
70
webpackCompiler . hooks . done . tap ( 'build-webpack' , ( stats ) => {
61
71
// Log stats.
62
72
loggingCb ( stats , webpackConfig , this . context . logger ) ;
63
73
64
- obs . next ( { success : ! stats . hasErrors ( ) } ) ;
74
+ obs . next ( { success : ! stats . hasErrors ( ) , result } ) ;
65
75
} ) ;
66
76
67
77
server . listen (
68
78
devServerConfig . port ,
69
79
devServerConfig . host ,
70
- ( err ) => {
80
+ function ( err ) {
71
81
if ( err ) {
72
82
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 ( ) ;
73
88
}
74
89
} ,
75
90
) ;
0 commit comments