Skip to content

Commit e013680

Browse files
committed
feat(@angular-devkit/architect): support mixing configurations
1 parent 2326850 commit e013680

File tree

4 files changed

+33
-8
lines changed

4 files changed

+33
-8
lines changed

packages/angular_devkit/architect/src/architect.ts

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -197,24 +197,32 @@ export class Architect {
197197
const {
198198
project: projectName,
199199
target: targetName,
200-
configuration: configurationName,
200+
configuration: configurationSpecifier,
201201
overrides,
202202
} = targetSpec;
203203

204+
const configurationNames = configurationSpecifier
205+
? configurationSpecifier.split(',').filter(Boolean)
206+
: [];
207+
204208
const project = this._workspace.getProject(projectName);
205209
const target = this._getProjectTarget(projectName, targetName);
206210
const options = target.options;
207-
let configuration: TargetConfiguration = {};
211+
const configurations: TargetConfiguration[] = [];
208212

209-
if (configurationName) {
213+
if (configurationNames && configurationNames.length) {
210214
if (!target.configurations) {
211-
throw new ConfigurationNotFoundException(projectName, configurationName);
215+
throw new ConfigurationNotFoundException(projectName, configurationNames[0]);
212216
}
213217

214-
configuration = target.configurations[configurationName];
218+
for (const configurationName of configurationNames) {
219+
const configuration = target.configurations[configurationName];
220+
221+
if (!configuration) {
222+
throw new ConfigurationNotFoundException(projectName, configurationName);
223+
}
215224

216-
if (!configuration) {
217-
throw new ConfigurationNotFoundException(projectName, configurationName);
225+
configurations.push(configuration);
218226
}
219227
}
220228

@@ -225,7 +233,7 @@ export class Architect {
225233
builder: target.builder,
226234
options: {
227235
...options,
228-
...configuration,
236+
...Object.assign({}, ...configurations),
229237
...overrides as {},
230238
} as OptionsT,
231239
};

packages/angular_devkit/architect/src/architect_spec.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,10 @@ describe('Architect', () => {
4141
prod: {
4242
optionalBrowserOption: false,
4343
},
44+
another: {
45+
optionalBrowserOption: true,
46+
anotherOptionalBrowserOption: true,
47+
},
4448
},
4549
},
4650
badBrowser: {
@@ -74,6 +78,13 @@ describe('Architect', () => {
7478
expect(builderConfig.options.optionalBrowserOption).toBe(false);
7579
});
7680

81+
it('mixes configurations', () => {
82+
const targetSpec = { project: 'app', target: 'browser', configuration: 'prod,another' };
83+
const builderConfig = architect.getBuilderConfiguration<BrowserTargetOptions>(targetSpec);
84+
expect(builderConfig.options.optionalBrowserOption).toBe(true);
85+
expect(builderConfig.options.anotherOptionalBrowserOption).toBe(true);
86+
});
87+
7788
it('lists targets by name', () => {
7889
expect(architect.listProjectTargets('app')).toEqual(['browser', 'badBrowser', 'karma']);
7990
});

packages/angular_devkit/architect/test/browser/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ const failBuildEvent: BuildEvent = {
2121
export interface BrowserTargetOptions {
2222
browserOption: number;
2323
optionalBrowserOption: boolean;
24+
anotherOptionalBrowserOption: boolean;
2425
}
2526

2627
export default class BrowserTarget implements Builder<BrowserTargetOptions> {

packages/angular_devkit/architect/test/browser/schema.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,11 @@
1313
"type": "boolean",
1414
"description": "A non-required option with a default",
1515
"default": false
16+
},
17+
"anotherOptionalBrowserOption": {
18+
"type": "boolean",
19+
"description": "Another non-required option with a default",
20+
"default": false
1621
}
1722
},
1823
"additionalProperties": false,

0 commit comments

Comments
 (0)