Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 6 additions & 2 deletions packages/angular/pwa/pwa/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -96,10 +96,14 @@ export default function (options: PwaOptions): Rule {
for (const target of project.targets.values()) {
if (
target.builder === '@angular-devkit/build-angular:browser' ||
target.builder === '@angular-devkit/build-angular:application'
target.builder === '@angular-devkit/build-angular:application' ||
target.builder === '@angular/build:application'
) {
buildTargets.push(target);
} else if (target.builder === '@angular-devkit/build-angular:karma') {
} else if (
target.builder === '@angular-devkit/build-angular:karma' ||
target.builder === '@angular/build:karma'
) {
testTargets.push(target);
}
}
Expand Down
40 changes: 40 additions & 0 deletions packages/angular/pwa/pwa/index_spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -169,4 +169,44 @@ describe('PWA Schematic', () => {
expect(swFlag).toBeTrue();
});
});

describe('@angular-devkit/build-angular:application builder', () => {
beforeEach(() => {
const config = JSON.parse(appTree.readContent('/angular.json'));
const build = config.projects.bar.architect.build;

build.builder = '@angular-devkit/build-angular:application';

appTree.overwrite('/angular.json', JSON.stringify(config, undefined, 2));
});

it('should run the service worker schematic', async () => {
const tree = await schematicRunner.runSchematic('ng-add', defaultOptions, appTree);
const configText = tree.readContent('/angular.json');
const config = JSON.parse(configText);
const swFlag = config.projects.bar.architect.build.configurations.production.serviceWorker;

expect(swFlag).toBe('projects/bar/ngsw-config.json');
});
});

describe('@angular/build:application builder', () => {
beforeEach(() => {
const config = JSON.parse(appTree.readContent('/angular.json'));
const build = config.projects.bar.architect.build;

build.builder = '@angular/build:application';

appTree.overwrite('/angular.json', JSON.stringify(config, undefined, 2));
});

it('should run the service worker schematic', async () => {
const tree = await schematicRunner.runSchematic('ng-add', defaultOptions, appTree);
const configText = tree.readContent('/angular.json');
const config = JSON.parse(configText);
const swFlag = config.projects.bar.architect.build.configurations.production.serviceWorker;

expect(swFlag).toBe('projects/bar/ngsw-config.json');
});
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,13 @@
module.exports = function (config) {
config.set({
basePath: '',
frameworks: ['jasmine', '@angular-devkit/build-angular'],
frameworks: ['jasmine'<% if (needDevkitPlugin) { %>, '@angular-devkit/build-angular'<% } %>],
plugins: [
require('karma-jasmine'),
require('karma-chrome-launcher'),
require('karma-jasmine-html-reporter'),
require('karma-coverage'),
require('@angular-devkit/build-angular/plugins/karma')
require('karma-coverage'),<% if (needDevkitPlugin) { %>
require('@angular-devkit/build-angular/plugins/karma')<% } %>
],
client: {
jasmine: {
Expand Down
9 changes: 7 additions & 2 deletions packages/schematics/angular/config/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -67,9 +67,13 @@ function addKarmaConfig(options: ConfigOptions): Rule {
);
}

if (testTarget.builder !== AngularBuilder.Karma) {
if (
testTarget.builder !== AngularBuilder.Karma &&
testTarget.builder !== AngularBuilder.BuildKarma
) {
throw new SchematicsException(
`Cannot add a karma configuration as builder for "test" target in project does not use "${AngularBuilder.Karma}".`,
`Cannot add a karma configuration as builder for "test" target in project does not` +
` use "${AngularBuilder.Karma}" or "${AngularBuilder.BuildKarma}".`,
);
}

Expand All @@ -88,6 +92,7 @@ function addKarmaConfig(options: ConfigOptions): Rule {
applyTemplates({
relativePathToWorkspaceRoot: relativePathToWorkspaceRoot(project.root),
folderName,
needDevkitPlugin: testTarget.builder === AngularBuilder.Karma,
}),
move(project.root),
]),
Expand Down
18 changes: 18 additions & 0 deletions packages/schematics/angular/config/index_spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,24 @@ describe('Config Schematic', () => {
expect(tree.exists('projects/foo/karma.conf.js')).toBeTrue();
});

it('should include devkit karma plugin by default', async () => {
const tree = await runConfigSchematic(ConfigType.Karma);
const karmaConf = tree.readText('projects/foo/karma.conf.js');
expect(karmaConf).toContain(`'@angular-devkit/build-angular'`);
});

it('should not include devkit karma plugin with angular/build:karma is used', async () => {
applicationTree.overwrite(
'angular.json',
applicationTree
.readText('angular.json')
.replace('@angular-devkit/build-angular:karma', '@angular/build:karma'),
);
const tree = await runConfigSchematic(ConfigType.Karma);
const karmaConf = tree.readText('projects/foo/karma.conf.js');
expect(karmaConf).not.toContain(`'@angular-devkit/build-angular'`);
});

it('should set the right coverage folder', async () => {
const tree = await runConfigSchematic(ConfigType.Karma);
const karmaConf = tree.readText('projects/foo/karma.conf.js');
Expand Down
3 changes: 2 additions & 1 deletion packages/schematics/angular/environments/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,8 @@ function* generateConfigurationEnvironments(
if (
buildTarget.builder !== AngularBuilder.Browser &&
buildTarget.builder !== AngularBuilder.BrowserEsbuild &&
buildTarget.builder !== AngularBuilder.Application
buildTarget.builder !== AngularBuilder.Application &&
buildTarget.builder !== AngularBuilder.BuildApplication
) {
yield log(
'warn',
Expand Down
5 changes: 4 additions & 1 deletion packages/schematics/angular/service-worker/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,10 @@ export default function (options: ServiceWorkerOptions): Rule {
let browserEntryPoint: string | undefined;
const ngswConfigPath = join(normalize(project.root), 'ngsw-config.json');

if (buildTarget.builder === Builders.Application) {
if (
buildTarget.builder === Builders.Application ||
buildTarget.builder === Builders.BuildApplication
) {
browserEntryPoint = buildOptions.browser as string;
const productionConf = buildTarget.configurations?.production;
if (productionConf) {
Expand Down
3 changes: 3 additions & 0 deletions packages/schematics/angular/utility/workspace-models.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,11 +26,14 @@ export enum Builders {
Prerender = '@angular-devkit/build-angular:prerender',
BrowserEsbuild = '@angular-devkit/build-angular:browser-esbuild',
Karma = '@angular-devkit/build-angular:karma',
BuildKarma = '@angular/build:karma',
TsLint = '@angular-devkit/build-angular:tslint',
NgPackagr = '@angular-devkit/build-angular:ng-packagr',
BuildNgPackagr = '@angular/build:ng-packagr',
DevServer = '@angular-devkit/build-angular:dev-server',
BuildDevServer = '@angular/build:dev-server',
ExtractI18n = '@angular-devkit/build-angular:extract-i18n',
BuildExtractI18n = '@angular/build:extract-i18n',
Protractor = '@angular-devkit/build-angular:private-protractor',
BuildApplication = '@angular/build:application',
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Consider: I see that X and BuildX is an existing convention, but I wonder if it would be worth renaming the existing ones to DevkitX, XDevkit, or something similar to be more clear about the distinction between them.

Alternatively we could potentially drop the BuildX prefix with that being the "default" option we want to use, with DevkitX being the legacy versions.

If we do make this change, it's probably worth a separate PR, but something to think about.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

While these are "internal", they have been and probably still are used by third-party custom schematics. This makes more comprehensive changes problematic. I do like the Devkit variation though.

}
Expand Down