Skip to content

Commit 07ac174

Browse files
committed
fix(@schematics/angular): support using default browser option when not present
The Angular schematics that require knowledge of the main entry point of an application will now use the default value for the `application` builder. The default value as per the `application` build system is `<project_source_root>/main.ts`.
1 parent 9d07249 commit 07ac174

File tree

6 files changed

+18
-12
lines changed

6 files changed

+18
-12
lines changed

packages/schematics/angular/environments/index_spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ describe('Environments Schematic', () => {
5050
build.builder = Builders.Browser;
5151
build.options = {
5252
...build.options,
53-
main: build.options.browser,
53+
main: 'projects/foo/src/main.ts',
5454
browser: undefined,
5555
};
5656

packages/schematics/angular/server/index_spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -269,7 +269,7 @@ describe('Server Schematic', () => {
269269
build.builder = Builders.Browser;
270270
build.options = {
271271
...build.options,
272-
main: build.options.browser,
272+
main: 'projects/bar/src/main.ts',
273273
browser: undefined,
274274
};
275275

packages/schematics/angular/service-worker/index.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ import { getAppModulePath, isStandaloneApp } from '../utility/ng-ast-utils';
2828
import { relativePathToWorkspaceRoot } from '../utility/paths';
2929
import { targetBuildNotFoundError } from '../utility/project-targets';
3030
import { findAppConfig } from '../utility/standalone/app_config';
31-
import { findBootstrapApplicationCall } from '../utility/standalone/util';
31+
import { findBootstrapApplicationCall, getMainFilePath } from '../utility/standalone/util';
3232
import { Builders } from '../utility/workspace-models';
3333
import { Schema as ServiceWorkerOptions } from './schema';
3434

@@ -119,20 +119,18 @@ export default function (options: ServiceWorkerOptions): Rule {
119119
}
120120

121121
const buildOptions = buildTarget.options as Record<string, string | boolean>;
122-
let browserEntryPoint: string | undefined;
122+
const browserEntryPoint = await getMainFilePath(host, options.project);
123123
const ngswConfigPath = join(normalize(project.root), 'ngsw-config.json');
124124

125125
if (
126126
buildTarget.builder === Builders.Application ||
127127
buildTarget.builder === Builders.BuildApplication
128128
) {
129-
browserEntryPoint = buildOptions.browser as string;
130129
const productionConf = buildTarget.configurations?.production;
131130
if (productionConf) {
132131
productionConf.serviceWorker = ngswConfigPath;
133132
}
134133
} else {
135-
browserEntryPoint = buildOptions.main as string;
136134
buildOptions.serviceWorker = true;
137135
buildOptions.ngswConfigPath = ngswConfigPath;
138136
}

packages/schematics/angular/service-worker/index_spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,7 @@ describe('Service Worker Schematic', () => {
203203
build.builder = Builders.Browser;
204204
build.options = {
205205
...build.options,
206-
main: build.options.browser,
206+
main: 'projects/bar/src/main.ts',
207207
browser: undefined,
208208
};
209209

packages/schematics/angular/ssr/index_spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,7 @@ describe('SSR Schematic', () => {
182182
build.builder = '@angular-devkit/build-angular:browser';
183183
build.options = {
184184
...build.options,
185-
main: build.options.browser,
185+
main: 'projects/test-app/src/main.ts',
186186
browser: undefined,
187187
};
188188

packages/schematics/angular/utility/standalone/util.ts

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
*/
88

99
import { SchematicsException, Tree } from '@angular-devkit/schematics';
10+
import { join } from 'node:path/posix';
1011
import ts from '../../third_party/github.com/Microsoft/TypeScript/lib/typescript';
1112
import { Change, applyToUpdateRecorder } from '../change';
1213
import { targetBuildNotFoundError } from '../project-targets';
@@ -23,16 +24,23 @@ export async function getMainFilePath(tree: Tree, projectName: string): Promise<
2324
const project = workspace.projects.get(projectName);
2425
const buildTarget = project?.targets.get('build');
2526

26-
if (!buildTarget) {
27+
if (!project || !buildTarget) {
2728
throw targetBuildNotFoundError();
2829
}
2930

3031
const options = buildTarget.options as Record<string, string>;
3132

32-
return buildTarget.builder === Builders.Application ||
33+
if (
34+
buildTarget.builder === Builders.Application ||
3335
buildTarget.builder === Builders.BuildApplication
34-
? options.browser
35-
: options.main;
36+
) {
37+
// These builders support a default of `<project_source_root>/main.ts`
38+
const projectSourceRoot = project.sourceRoot ?? join(project.root, 'src');
39+
40+
return options.browser ?? join(projectSourceRoot, 'main.ts');
41+
}
42+
43+
return options.main;
3644
}
3745

3846
/**

0 commit comments

Comments
 (0)