Skip to content

Commit 030d5fa

Browse files
Alan Agiusalexeagle
Alan Agius
authored andcommitted
feat(@angular-devkit/build-webpack): expose DevServerResult in BuildEvent
1 parent 73a3507 commit 030d5fa

File tree

1 file changed

+21
-6
lines changed
  • packages/angular_devkit/build_webpack/src/webpack-dev-server

1 file changed

+21
-6
lines changed

packages/angular_devkit/build_webpack/src/webpack-dev-server/index.ts

+21-6
Original file line numberDiff line numberDiff line change
@@ -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';
1617
import { Observable, from } from 'rxjs';
1718
import { concatMap } from 'rxjs/operators';
1819
import * as webpack from 'webpack';
1920
import * as WebpackDevServer from 'webpack-dev-server';
2021
import { LoggingCallback, defaultLoggingCb } from '../webpack';
2122
import { WebpackDevServerBuilderSchema } from './schema';
2223

24+
export interface DevServerResult {
25+
port: number;
26+
family: string;
27+
address: string;
28+
}
2329

2430
export 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

Comments
 (0)