3065 Commits

Author SHA1 Message Date
Alan Agius
f1cf952485 docs(@angular/cli): remove incorrect statement about outputPath
By default output path does not default to dist.
2023-10-11 19:52:03 +02:00
Doug Parker
e5849c8995 refactor: strengthen language around Protractor support status
Protractor is no longer deprecated, it's already end-of-life. I didn't commit to a specific version because plans always fluctuate, but it is eligible to be removed in any future Angular major version.
2023-10-11 13:10:56 +02:00
Alan Agius
c48982dc1d feat(@angular-devkit/build-angular): add buildTarget option to dev-server and extract-i18n builders
This is to better match the nature of the application builder where the target can be both browser and server.

DEPRECATED: The `browserTarget` in the dev-server and extract-i18n builders have been deprecated in favor of `buildTarget`.
2023-10-10 19:43:11 +02:00
Charles Lyding
771e036d5c feat(@angular-devkit/build-angular): support deploy URL option for browser-esbuild builder
The `browser-esbuild` builder now provides support for using the `deployUrl` option when building
applications.  This option is still considered deprecated which is the same status as with the
Webpack-based `browser` application builder. This option is only available with the `browser-esbuild`
builder and not other esbuild-based builders. The `browser-esbuild` builder is primarily intended
to be used as a compatibility builder with the `browser` builder that requires only minimal changes
to use.
2023-10-10 16:28:43 +02:00
Alan Agius
8d0b707a79
refactor(@angular-devkit/build-angular): update ESM in memory file loader to work with Node.js 20 (#25988)
This commit refactors the ESM Node.js in memory loader to work with Node.js 20+
2023-10-09 19:41:59 +02:00
Charles Lyding
3ad028bb44 fix(@angular-devkit/build-angular): ensure localize polyfill and locale specifier are injected when not inlining
When using the esbuild-based builders (`application`/`browser-esbuild`), the localize polyfill and the locale specifier
for the configured source locale will now be injected into the application when available and the application is not
configured to inline translations (`localize` option disabled or otherwise not used). This is useful for when developing
a localized application with the development server or when the application is not translated but has a customized source
locale.
2023-10-09 19:40:14 +02:00
Charles Lyding
2c33f09db0 fix(@angular-devkit/build-angular): avoid dev-server proxy rewrite normalization when invalid value
When normalizing the proxy configuration for the Vite-based development server, the `pathRewrite` logic
will now be skipped if the proxy entry is not an object and therefore invalid. This situation can occur
if the proxy configuration JSON contains invalid properties.

Closes #25978
2023-10-09 19:39:56 +02:00
Alan Agius
8981d8c355 fix(@angular-devkit/build-angular): improve sharing of TypeScript compilation state between various esbuild instances during rebuilds
This commit improves the logic to block and share a TypeScript results across multiple esbuild instances (browser and server builds) which fixes an issue that previously during rebuilds in some cases did not block the build correctly.
2023-10-09 16:40:36 +02:00
Alan Agius
99d9037eee perf(@angular-devkit/build-angular): only perform a server build when either prerendering, app-shell or ssr is enabled
Prior to this change, a server build was performed when all the "server" features were disabled but the `server` fields was specified.
2023-10-09 15:55:27 +02:00
Alan Agius
968ee34280 fix(@angular-devkit/build-angular): fully downlevel async/await when using vite dev-server with caching enabled
Prior to this change, async/await in external packages were not being correctly downlevelled when using vite dev-server with cache enabled.

Closes #25985
2023-10-09 15:55:09 +02:00
Charles Lyding
91019bde2a feat(@angular-devkit/build-angular): enable localize support for SSR with application builder
With the output path directory structure updates in place, the localize support for SSR has
now been enabled. This allows for the `application` builder to produce both browser and server
output that is localized based on the i18n configuration for the project.
2023-10-09 10:34:09 +02:00
Charles Lyding
223a82f5f0 perf(@angular-devkit/build-angular): use incremental bundling for component styles in esbuild builders
When using the esbuild-based builders (`esbuild-browser`/`application`) in watch mode (including `ng serve`),
component stylesheets will now be incrementally rebuilt when needed. This avoids a full build of each
affected component's styles during an application rebuild. Both JIT and AOT mode are supported as well
as both inline and external styles.
2023-10-09 10:29:55 +02:00
Charles Lyding
9e425308a0 feat(@angular-devkit/build-angular): support component style budgets in esbuild builders
The `anyComponentStyle` budget type is now supported when using bundle budgets in the esbuild-
based builders (`browser-esbuild`/`application`). The configuration and behavior are intended
to match that of the Webpack-based  builder (`browser`). With this addition, the bundle budget
feature is now at feature parity with the Webpack-based builder.
The implementation of this budget type requires less code than the Webpack implementation due
to the component stylesheet information being present in the application's output metadata. This
removes the need for a custom budget plugin to extract the stylesheet size information during the build.
2023-10-09 10:17:35 +02:00
Angular Robot
c9208027b1 build: update all non-major dependencies 2023-10-09 10:17:27 +02:00
Charles Lyding
1fb0350eb7 feat(@angular-devkit/build-angular): add initial support for bundle budgets to esbuild builders
The bundle budget functionality (`budgets` option) is not available when using the esbuild-based
builders (`browser-esbuild`/`application`). The existing option format from the Webpack-based builder can
continue to be used. All budget types except `anyComponentStyle` are implemented. Any usage of the
`anyComponentStyle` type will be ignored when calculating budget failures. This type will be implemented
in a future change.
2023-10-06 14:49:38 -04:00
Alan Agius
1541cfd6b8 refactor(@angular-devkit/build-angular): move SourceFileCache into dedicated file
This is to reduce the code in `compiler-plugin.ts`
2023-10-06 19:51:27 +02:00
Charles Lyding
1f73bcc49a fix(@angular-devkit/build-angular): ensure Web Worker code file is replaced in esbuild builders
The previous Web Worker bundling code for the esbuild-based builders assumed that the first
output file was the JavaScript code for the worker. While this is typically the case, when
sourcemaps are enabled it may not be. To ensure the code file is used as the replacement path
for the Worker constructor, the output files are now searched for the code file.
2023-10-05 15:35:34 -04:00
Alan Agius
c98c049b6e test: update tests to account for changes in the build output structure
This commit updates the tests to account for the new build structure.
2023-10-05 13:30:52 -04:00
Alan Agius
49f07a84d6 feat(@angular-devkit/build-angular): standardize application builder output structure
This commit updates the application builder to output files in a standardized manner. The builder will output a `browser` directory for all the files that can be accessible by the browser, and a `server` directory that contains the SSR application. Both of these directories are created as children in the configured `outputPath`. Stats and license files will be outputted directly in the configured `outputPath`.

Example of output:
```
3rdpartylicenses.txt
├── browser
│   ├── chunk-2XJVAMHT.js
│   ├── favicon.ico
│   ├── index.html
│   ├── main-6JLMM7WW.js
│   ├── polyfills-4UVFGIFL.js
│   └── styles-5INURTSO.css
└── server
    ├── chunk-4ZCEIHD4.mjs
    ├── chunk-PMR7BAU4.mjs
    ├── chunk-TSP6W7K5.mjs
    ├── index.server.html
    ├── main.server.mjs
    └── server.mjs
```
2023-10-05 13:30:52 -04:00
Alan Agius
f29b744d4e refactor(@angular-devkit/build-angular): remove hardcoded Node.js version in application builder
This commit removed the hard coded Node.js version in application builder server config and instead passes the Angular CLI supported Node.js versions that are currently stamped using Bazel.
2023-10-05 17:28:48 +02:00
Alan Agius
667f43af6d fix(@angular-devkit/build-angular): correctly resolve polyfills when baseUrl URL is not set to root
Prior to this change when `baseUrl` was set to non-root or not set polyfills were not correctly resolved. Internally Esbuild uses the `baseUrl` to resolve non relative imports.

Closes: #25341
2023-10-05 10:00:05 -04:00
Angular Robot
3f2e2d3f9e build: update all non-major dependencies 2023-10-04 14:46:08 -04:00
cexbrayat
5898f72a97 feat(@angular-devkit/build-angular): support namedChunks option in application builder
This adds the support of `namedChunks` for the new `application` builder.
It generates output like the following:

```
Initial Chunk Files         | Names         |  Raw Size | Estimated Transfer Size
chunk-ACXUMF56.js           | -             |  94.14 kB |                28.25 kB
main-3WP5KDHR.js            | main          |  71.95 kB |                18.31 kB
polyfills-4UVFGIFL.js       | polyfills     |  32.85 kB |                10.68 kB
chunk-2XJVAMHT.js           | -             | 449 bytes |               449 bytes
styles-5INURTSO.css         | styles        |   0 bytes |                 0 bytes

                            | Initial Total | 199.38 kB |                57.68 kB

Lazy Chunk Files            | Names         |  Raw Size | Estimated Transfer Size
about.component-2PJOS5PM.js | -             | 401 bytes |               401 bytes
home.component-25UHFOEY.js  | -             | 398 bytes |               398 bytes
```

This is really handy to get a glimpse at what a chunk is referring to and be able to analyze it (especially in applications with dozens of chunks).
2023-10-04 11:21:54 -04:00
Angular Robot
76da08478f build: update dependency postcss to v8.4.31 [security] 2023-10-04 11:03:41 -04:00
Charles Lyding
fd62a9315d feat(@angular-devkit/build-angular): support i18n with service worker and app-shell with esbuild builders
When using the esbuild-based application build system through the `application` builder, the `localize`
option will now allow inlining project defined localizations when using the app shell, prerendering,
and service worker features. Previously a warning was issued and these features were disabled when the
`localize` option was enabled.
2023-10-04 09:53:45 -04:00
Charles Lyding
83020fc329 fix(@angular-devkit/build-angular): clear diagnostic cache when external templates change with esbuild builders
To prevent stale Angular template diagnostics from persisting in watch mode (including `ng serve`), the template
diagnostic cache will now be invalidated based on the set of changed external template files. This ensures that
the Angular AOT compiler will analyze the template again during the rebuild and clear any fixed errors.
2023-10-04 09:50:06 -04:00
Charles Lyding
9c4a6be2d1 refactor(@angular-devkit/build-angular): improve accuracy of programmatic watch mode usage for esbuild builders
To better capture file changes after the initial build for the esbuild-based builders in a programmatic usage,
the file watching initialization has been moved to before the first build results are yielded. This allows tests
that execute code to change files with improved accuracy of the watch mode triggering. The application builder
now also supports aborting the watch mode programmatically. This allows tests to gracefully stop the watch mode
and more fully cleanup the test at completion.
2023-10-04 09:49:50 -04:00
Alan Agius
2d2e79921a fix(@angular-devkit/build-angular): clean up internal Angular state during rendering SSR
This commit clean ups the compiled components state when the build is being executed in watch mode. This is required as otherwise during development `Component ID generation collision detected` are displayed on the server.

Closes: #25924
2023-09-29 18:47:39 +02:00
Alan Agius
1837fee197 refactor(@angular-devkit/build-angular): use whenStable private API in route extractor
This commit refactors the route extractor to use the newly `whenStable` API.
2023-09-28 17:31:51 +02:00
Alan Agius
26456b93d5 fix(@angular-devkit/build-angular): do not print Angular is running in development mode. in the server console when using dev-server
This commit disables logging `Angular is running in development mode.` when using SSR with vite dev-server. This to avoid polluting the server console with `Angular is running in development mode.` logs for each page load and reload.

Example:
```
ng s

Initial Chunk Files | Names         | Raw Size
main.js             | main          | 34.31 kB |
polyfills.js        | polyfills     | 95 bytes |
styles.css          | styles        | 95 bytes |

                    | Initial Total | 34.49 kB

Application bundle generation complete. [5.205 seconds]

  ➜  Local:   http://localhost:4200/
Watch mode enabled. Watching for file changes...
Angular is running in development mode.
Angular is running in development mode.
Angular is running in development mode.
Angular is running in development mode.
Angular is running in development mode.
Angular is running in development mode.
```
2023-09-27 18:58:31 +02:00
Alan Agius
6b5c469a42 build: update all non-major dependencies 2023-09-27 14:08:41 +02:00
Charles Lyding
c3a87a60e0 feat(@angular-devkit/build-angular): support basic web worker bundling with esbuild builders
When using the esbuild-based builders (`application`/`browser`), Web Workers that use the supported
syntax will now be bundled. The bundling process currently uses an additional synchronous internal
esbuild execution. The execution must be synchronous due to the usage within a TypeScript transformer.
TypeScript's compilation process is fully synchronous. The bundling itself currently does not provide
all the features of the Webpack-based builder. The following limitations are present in the current
implementation but will be addressed in upcoming changes:
* Worker code is not type-checked
* Nested workers are not supported
2023-09-22 16:47:55 +02:00
Alan Agius
61f409cbe4 perf(@angular-devkit/build-angular): disable ahead of time prerendering in vite dev-server
When using the devserver, instead of prerendering every page for every incremental change, we now perform a server rendering on the page during request time. This ensures that incremental build times are faster when prerending is enabled as we avoid rendering of pages that are never viewed.
2023-09-22 15:41:58 +02:00
Charles Lyding
c5f3ec71f5 feat(@angular-devkit/build-angular): support i18n inlining with esbuild-based builder
When using the esbuild-based application build system through either the `application`
or `browser-esbuild` builder, the `localize` option will now allow inlining project
defined localizations. The process to configure and enable the i18n system is the same
as with the Webpack-based `browser` builder. The implementation uses a similar approach
to the `browser` builder in which the application is built once and then post-processed
for each active locale. In addition to inlining translations, the locale identifier is
injected and the locale specific data is added to the applications. Currently, this
implementation adds all the locale specific data to each application during the initial
building. While this may cause a small increase in the polyfills bundle (locale data is
very small in size), it has a benefit of faster builds and a significantly less complicated
build process. Additional size optimizations to the data itself are also being
considered to even further reduce impact. Also, with the eventual shift towards the standard
`Intl` web APIs, the need for the locale data will become obsolete in addition to the build
time code necessary to add it to the application.
While build capabilities are functional, there are several areas which have not yet been
fully implemented but will be in future changes. These include console progress information,
efficient watch support, and app-shell/service worker support.
2023-09-22 10:48:17 +02:00
Charles Lyding
ccdd268d7e refactor(@angular-devkit/build-angular): avoid double emit of TypeScript files in AOT with esbuild
Some TypeScript files may previously have been emitted twice during builds when using the Angular compiler
esbuild plugin used within the esbuild-based browser application builder. It did not cause any build problems.
However, it may have caused builds to take longer than expected. This was caused by an incorrect comparison of the
transformed source file and the original source file found within the TypeScript program. Comparisons during
emit now compare only original source files which avoids the issue with the emitted files checks.
2023-09-21 11:02:20 +02:00
Charles Lyding
8bce80b91b feat(@angular-devkit/build-angular): initial support for application Web Worker discovery with esbuild
When using the esbuild-based builders (application/browser-esbuild), Web Workers following the previously
supported syntax as used in the Webpack-based builder will now be discovered. The worker entry points are not
yet bundled or otherwise processed. Currently, a warning will be issued to notify that the worker will not
be present in the built output.
Additional upcoming changes will add the processing and bundling support for the workers.

Web Worker syntax example: `new Worker(new URL('./my-worker-file', import.meta.url), { type: 'module' });`
2023-09-21 11:02:20 +02:00
cexbrayat
4e89c3cae4 fix(@angular-devkit/build-angular): use a dash in bundle names
This updates the esbuild based builder to use a dash in bundles and media instead of a dot to be consistent with the chunks files `chunk-xxx.js`.
2023-09-21 10:58:48 +02:00
Alan Agius
f9fdd0907c refactor(@angular-devkit/build-angular): use ɵloadChildren helper from router package
This commit updates the routes extractor to use the newly exported private `ɵloadChildren` method from the router to executes a `route.loadChildren` callback and return an array of child routes.

See: https://github.com/angular/angular/pull/51818
2023-09-21 07:02:17 +02:00
Alan Agius
1c00fd3fe9 refactor: drop support for older TypeScript versions
Drops support for versions of TypeScript older than 5.2

BREAKING CHANGE:
Versions of TypeScript older than 5.2 are no longer supported.
2023-09-20 21:27:35 +02:00
Alan Agius
c0eb2eb5fd build: update Angular to 17.0.0-next.5 2023-09-20 21:27:35 +02:00
cexbrayat
fe64193b78 refactor(@angular-devkit/build-angular): typo in ignore list plugin function 2023-09-20 19:48:55 +02:00
Alan Agius
8168ae2a89 feat(@angular-devkit/build-angular): apply global CSS updates without a live-reload when using vite
This commit changes the way that global style updates are applied when using `vite`.  When either live-reload or hmr are enabled the styles are replaced in placed (HMR style) without a live-reload.
2023-09-20 15:49:56 +02:00
Alan Agius
8f9a0d70cd feat(@angular-devkit/build-angular): support standalone apps route discovery during prerendering
This fixes an issue were routes could not be discovered automatically in a standalone application.

This is a total overhaul of the route extraction process as instead of using `guess-parser` NPM package, we now use the Angular Router. This enables a number of exciting possibilities for the future which were not possible before.

# How it works?
The application is bootstrapped and through DI injection we get the injector and router config instance and recursively build the routes tree.
2023-09-18 22:26:06 +02:00
Alan Agius
5a204b81c7 refactor(@angular-devkit/build-angular): accept boolean and string in ssr option
This is to align with the `serviceWorker` option.
2023-09-15 22:12:34 +02:00
Charles Lyding
b07ba1a90c refactor(@angular-devkit/build-angular): remove usage of terser constants in esbuild
The terser build time constant import from the `@angular/compiler-cli` package is no
longer used in the esbuild-based builder. The constants present are already defined
and conditionally added within the build configuration itself. This not only provides
more flexibility but also removes the need to import the package early in the process.
The import is also an expensive import due to it needing TypeScript and being ESM that
needs to be dynamically imported via a function helper to work around current ESM/TypeScript/CommonJS
limitations.
2023-09-14 21:59:56 +02:00
Alan Agius
48963fc17f fix(@angular-devkit/build-angular): several windows fixes to application builder prerendering
This commit fixes several Windows issues in the prerendering pipeline. Primarily due to path normalization and other Windows only constraints.
2023-09-14 17:25:30 +02:00
Angular Robot
5441d78ffa build: update all non-major dependencies 2023-09-14 10:56:09 +02:00
Alan Agius
c8909406a5 fix(@angular-devkit/build-angular): correctly re-point RXJS to ESM on Windows
Previously, the path matching and replacement did not consider non posix file systems like windows.
2023-09-14 10:53:38 +02:00
Alan Agius
a35ec17dee refactor(@angular-devkit/build-angular): remove experimental warning when using esbuild based builder
This is no longer experimental.
2023-09-13 17:40:50 +02:00
Alan Agius
e41e2015bf fix(@angular-devkit/build-angular): avoid spawning workers when there are no routes to prerender
This commit fixes an issue were previously we spawned piscina with `maxThreads` set to `0` which causes it to exit with a non zero error code when there are no routes to prerender.

Now, in the application builder we exit at n earlier stage if there are no routes to prerender.
2023-09-13 17:40:50 +02:00