Skip to content

Commit 58f68cf

Browse files
filipesilvahansl
authored andcommitted
fix(@angular-devkit/build-webpack): use updated architect API
1 parent 84022de commit 58f68cf

File tree

4 files changed

+105
-110
lines changed

4 files changed

+105
-110
lines changed

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

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import { Path, getSystemPath, resolve, tags } from '@angular-devkit/core';
1616
import { existsSync, readFileSync } from 'fs';
1717
import * as path from 'path';
1818
import { Observable } from 'rxjs/Observable';
19-
import { concatMap, map, tap } from 'rxjs/operators';
19+
import { concatMap, map } from 'rxjs/operators';
2020
import * as url from 'url';
2121
import * as webpack from 'webpack';
2222
import { getWebpackStatsConfig } from '../angular-cli-files/models/webpack-configs/utils';
@@ -235,7 +235,7 @@ export class DevServerBuilder implements Builder<DevServerBuilderOptions> {
235235
headers: { 'Access-Control-Allow-Origin': '*' },
236236
historyApiFallback: {
237237
index: `${servePath}/${
238-
path.relative(projectRoot, path.resolve(root, browserOptions.index))
238+
path.relative(projectRoot, path.resolve(root, browserOptions.index))
239239
}`,
240240
disableDotRule: true,
241241
htmlAcceptHeaders: ['text/html', 'application/xhtml+xml'],
@@ -415,19 +415,18 @@ export class DevServerBuilder implements Builder<DevServerBuilderOptions> {
415415
}
416416

417417
private _getBrowserOptions(options: DevServerBuilderOptions) {
418+
const architect = this.context.architect;
418419
const [project, target, configuration] = options.browserTarget.split(':');
419420
// Override browser build watch setting.
420421
const overrides = { watch: options.watch };
421422
const browserTargetSpec = { project, target, configuration, overrides };
422-
let builderConfig: BuilderConfiguration<BrowserBuilderOptions>;
423-
424-
return this.context.architect.getBuilderConfiguration<BrowserBuilderOptions>(browserTargetSpec)
425-
.pipe(
426-
tap(cfg => builderConfig = cfg),
427-
concatMap(builderConfig => this.context.architect.getBuilderDescription(builderConfig)),
428-
concatMap(browserDescription =>
429-
this.context.architect.validateBuilderOptions(builderConfig, browserDescription)),
430-
map(browserConfig => browserConfig.options),
423+
const builderConfig = architect.getBuilderConfiguration<BrowserBuilderOptions>(
424+
browserTargetSpec);
425+
426+
return architect.getBuilderDescription(builderConfig).pipe(
427+
concatMap(browserDescription =>
428+
architect.validateBuilderOptions(builderConfig, browserDescription)),
429+
map(browserConfig => browserConfig.options),
431430
);
432431
}
433432
}

packages/angular_devkit/build_webpack/src/extract-i18n/index.ts

Lines changed: 61 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import {
1515
import { resolve } from '@angular-devkit/core';
1616
import * as path from 'path';
1717
import { Observable } from 'rxjs/Observable';
18-
import { concatMap, map, tap } from 'rxjs/operators';
18+
import { concatMap, map } from 'rxjs/operators';
1919
import * as webpack from 'webpack';
2020
import { getWebpackStatsConfig } from '../angular-cli-files/models/webpack-configs/utils';
2121
import { 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

packages/angular_devkit/build_webpack/src/protractor/index.ts

Lines changed: 32 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -56,47 +56,46 @@ export class ProtractorBuilder implements Builder<ProtractorBuilderOptions> {
5656
);
5757
}
5858

59+
// Note: this method mutates the options argument.
5960
private _startDevServer(options: ProtractorBuilderOptions) {
61+
const architect = this.context.architect;
6062
const [project, targetName, configuration] = (options.devServerTarget as string).split(':');
6163
// Override browser build watch setting.
6264
const overrides = { watch: false, host: options.host, port: options.port };
63-
const browserTargetOptions = { project, target: targetName, configuration, overrides };
64-
let devServerBuilderConfig: BuilderConfiguration<DevServerBuilderOptions>;
65+
const targetSpec = { project, target: targetName, configuration, overrides };
66+
const builderConfig = architect.getBuilderConfiguration<DevServerBuilderOptions>(targetSpec);
6567
let devServerDescription: BuilderDescription;
6668
let baseUrl: string;
6769

68-
return this.context.architect
69-
.getBuilderConfiguration<DevServerBuilderOptions>(browserTargetOptions).pipe(
70-
tap(cfg => devServerBuilderConfig = cfg),
71-
concatMap(builderConfig => this.context.architect.getBuilderDescription(builderConfig)),
72-
tap(description => devServerDescription = description),
73-
concatMap(devServerDescription => this.context.architect.validateBuilderOptions(
74-
devServerBuilderConfig, devServerDescription)),
75-
concatMap(() => {
76-
// Compute baseUrl from devServerOptions.
77-
if (options.devServerTarget && devServerBuilderConfig.options.publicHost) {
78-
let publicHost = devServerBuilderConfig.options.publicHost;
79-
if (!/^\w+:\/\//.test(publicHost)) {
80-
publicHost = `${devServerBuilderConfig.options.ssl
81-
? 'https'
82-
: 'http'}://${publicHost}`;
83-
}
84-
const clientUrl = url.parse(publicHost);
85-
baseUrl = url.format(clientUrl);
86-
} else if (options.devServerTarget) {
87-
baseUrl = url.format({
88-
protocol: devServerBuilderConfig.options.ssl ? 'https' : 'http',
89-
hostname: options.host,
90-
port: devServerBuilderConfig.options.port.toString(),
91-
});
70+
return architect.getBuilderDescription(builderConfig).pipe(
71+
tap(description => devServerDescription = description),
72+
concatMap(devServerDescription => architect.validateBuilderOptions(
73+
builderConfig, devServerDescription)),
74+
concatMap(() => {
75+
// Compute baseUrl from devServerOptions.
76+
if (options.devServerTarget && builderConfig.options.publicHost) {
77+
let publicHost = builderConfig.options.publicHost;
78+
if (!/^\w+:\/\//.test(publicHost)) {
79+
publicHost = `${builderConfig.options.ssl
80+
? 'https'
81+
: 'http'}://${publicHost}`;
9282
}
93-
94-
// Save the computed baseUrl back so that Protractor can use it.
95-
options.baseUrl = baseUrl;
96-
97-
return of(this.context.architect.getBuilder(devServerDescription, this.context));
98-
}),
99-
concatMap(builder => builder.run(devServerBuilderConfig)),
83+
const clientUrl = url.parse(publicHost);
84+
baseUrl = url.format(clientUrl);
85+
} else if (options.devServerTarget) {
86+
baseUrl = url.format({
87+
protocol: builderConfig.options.ssl ? 'https' : 'http',
88+
hostname: options.host,
89+
port: builderConfig.options.port.toString(),
90+
});
91+
}
92+
93+
// Save the computed baseUrl back so that Protractor can use it.
94+
options.baseUrl = baseUrl;
95+
96+
return of(this.context.architect.getBuilder(devServerDescription, this.context));
97+
}),
98+
concatMap(builder => builder.run(builderConfig)),
10099
);
101100
}
102101

packages/angular_devkit/build_webpack/test/utils/run-target-spec.ts

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
import { Architect, BuildEvent, TargetSpecifier } from '@angular-devkit/architect';
1010
import { experimental, join, logging, normalize } from '@angular-devkit/core';
1111
import { Observable } from 'rxjs/Observable';
12-
import { concatMap, tap } from 'rxjs/operators';
12+
import { concatMap } from 'rxjs/operators';
1313
import { TestProjectHost } from '../utils/test-project-host';
1414

1515

@@ -35,12 +35,9 @@ export function runTargetSpec(
3535
): Observable<BuildEvent> {
3636
targetSpec = { ...targetSpec, overrides };
3737
const workspace = new experimental.workspace.Workspace(workspaceRoot, host);
38-
let architect: Architect;
3938

4039
return workspace.loadWorkspaceFromHost(workspaceFile).pipe(
4140
concatMap(ws => new Architect(ws).loadArchitect()),
42-
tap(arch => architect = arch),
43-
concatMap(() => architect.getBuilderConfiguration(targetSpec)),
44-
concatMap(cfg => architect.run(cfg, { logger })),
41+
concatMap(arch => arch.run(arch.getBuilderConfiguration(targetSpec), { logger })),
4542
);
4643
}

0 commit comments

Comments
 (0)