3298 Commits

Author SHA1 Message Date
Angular Robot
db87e4f730 build: update all non-major dependencies 2023-12-26 10:16:04 -05:00
Charles Lyding
874e576b52 fix(@angular-devkit/build-angular): filter explicit external dependencies for Vite prebundling
To ensure that Vite does not unintentionally attempt to prebundle a module that was explicitly
marked as external (typically via the `externalDependencies` build option), the full list of
externalized imports is now filtered by the dependencies specified within the external configuration.
Vite currently will include a module for prebundling if it is present in the include list even though
it may also be present in the exclude list.
2023-12-22 08:17:57 +01:00
Angular Robot
1867a0a3cf build: update dependency mrmime to v2 2023-12-21 16:17:22 +01:00
Angular Robot
f167e5445b build: update all non-major dependencies 2023-12-20 19:31:19 +01:00
Alan Agius
47a064b146 feat(@angular-devkit/build-angular): emit external sourcemaps for component styles
This commits, changes the behaviour in the esbuild based builders by emitting component sourcemaps in external files instead of inlining them.

Closes #24049 and closes #26676
2023-12-20 19:30:12 +01:00
Alan Agius
ceffafe1a3 fix(@angular-devkit/build-angular): provide better error messages for failed file reads
This commit adds a more actionable error message when `readFile` fails during index generation.
2023-12-20 15:58:13 +01:00
Alan Agius
ce9bf81598 refactor(@angular-devkit/build-angular): remove no longer needed realpathSync
This is no longer needed since the path provided is already passed through `realpathSync`. 9d7d136b32/packages/angular_devkit/build_angular/src/builders/application/options.ts (L104-L109)
2023-12-19 19:25:46 +01:00
Charles Lyding
efe3bda483 fix(@angular-devkit/build-angular): ensure external dependencies are used by Web Worker bundling
When processing a Web Worker reference in application code, the Web Worker entry point is bundled
in a separate action. The external dependencies configuration was previously not passed on to this
action which caused the Web Worker bundling to attempt to bundle any configured external dependencies.
This could lead to build errors if the dependency does not exist within the project.
2023-12-19 12:47:58 -05:00
Charles Lyding
9d7d136b32 refactor(@angular-devkit/build-angular): pass full extensions to application builder for dev server
Experimental programmatically added build extensions are now passed to the internal application builder
when used with the development server. Previously, the plugins were not passed in a manner that would
allow them to be used if the `application` builder was selected as the builder for dev server usage.
2023-12-19 10:50:07 -05:00
Charles Lyding
d263cb2783 refactor(@angular-devkit/build-angular): use direct explicit external configuration for metadata
The metadata used by the development server to determine the prebundling and externalization behavior
is now created using the external configurations of each bundling operation context directly instead
of the higher level `externalDependencies` build option. This better captures the explicitly defined
external values as each bundling operation configuration could contain additional values based on
the needs and/or customization of each. This will have no current noticeable behavior change as the
default behavior currently does not differ from the higher level option.
2023-12-19 10:50:07 -05:00
Alan Agius
b3c1991a2e fix(@angular-devkit/build-angular): add missing tailwind @screen directive in matcher
`@screen` is not documented in tailwind documentation as it is not a recommanded option, however it still works and they don't have plans to remove it.

https://github.com/tailwindlabs/tailwindcss/discussions/7516

Closes #26709
2023-12-19 16:47:59 +01:00
Charles Lyding
7f2d162c0c refactor(@angular-devkit/build-angular): reduce promise creation during estimated transfer size calculation
The promise creation overhead when calculating the estimated transfer size of the output files during an
optimized build has been reduced by directly using the `brotliCompress` Node.js function instead of using
a promisified variant. Node.js Only provides a callback-based async variant for brotli compression. This
change allows for a single promise to be used.
2023-12-19 10:45:21 -05:00
Angular Robot
0457aa455a build: update all non-major dependencies 2023-12-18 14:10:56 -08:00
Charles Lyding
15a669c1ef feat(@angular-devkit/build-angular): allowing control of index HTML initial preload generation
The long-form variant of the `index` option for the `application` builder now supports
an addition sub-option named `preloadInitial`. This new option is a boolean option that controls
the generation of initial preload related link elements in the generated index HTML file
for the application. Preload related link elements include `preload`, `modulepreload`,
and `preconnect` link rels for initial JavaScript and stylesheet application files.
2023-12-18 07:34:38 -05:00
Angular Robot
1b6e9c34f3 build: update all non-major dependencies 2023-12-15 11:17:52 +01:00
Alan Agius
cc246d50ea feat(@angular-devkit/build-angular): allow customization of output locations
This update introduces the ability for users to define the locations for storing `media`, `browser`, and `server` files.

You can achieve this by utilizing the extended `outputPath` option.
```json
{
  "projects": {
    "my-app": {
      "architect": {
        "build": {
          "builder": "@angular-devkit/build-angular:application",
          "options": {
            "outputPath": {
              "base": "dist/my-app",
              "browser": "",
              "server": "node-server",
              "media": "resources"
            }
          }
        }
      }
    }
  }
}
```

While not recommended, choosing to set the `browser` option empty will result in files being output directly under the specified `base` path. It's important to note that this action will generate certain files like `stats.json` and `prerendered-routes.json` that aren't intended for deployment in this directory.

**Validation rules:**
- `browser` and `server` are relative to the configuration set in the `base` option.
- When SSR is enabled, `browser` cannot be set to an empty string, and cannot be the same as `server`.
- `media` is relative to the value specified in the `browser` option.
- `media` cannot be set to an empty string.
- `browser`, `media`, or `server` cannot contain slashes.

Closes: #26632 and closes: #26057
2023-12-14 23:50:17 +01:00
Charles Lyding
66edac4bbd refactor(@angular-devkit/build-angular): add index HTML transformer to application programmatic usage
Similar to the `dev-server` builder, the `application` builder's programmatic usage can now transform
the index HTML that is generated during a build. As is the case for the existing builder JavaScript
exports from the package, the new export (`buildApplication`) is also considered experimental and does
not provide the support nor semver guarantees that the builders have when used via `angular.json` configuration.

The third parameter of the `buildApplication` function can now be an extensions object with one of the fields
being `indexHtmlTransformer`. This newly introduced field allows adjusting the index HTML content.

Closes #26299
2023-12-14 12:01:46 +01:00
Alan Agius
a5d4735b80 fix(@angular-devkit/build-angular): construct SSR request URL using server resolvedUrls
With vite `header.host` is undefined when SSL is enabled. This resulted in an invalid URL to be constructed.

Closes #26652
2023-12-13 20:14:37 +01:00
Angular Robot
7f86757a5b build: update all non-major dependencies 2023-12-13 19:53:14 +01:00
Charles Lyding
0fa1e3419f fix(@angular-devkit/build-angular): ensure empty optimized Sass stylesheets stay empty
When an optimized Sass stylesheet becomes an empty string the AOT Angular host adapter
was previously treating this as a falsy value and using the original content of the
stylesheet. Empty strings are now considered valid values and will be passed to the
AOT compiler as such.
2023-12-13 18:16:25 +01:00
Marco Steinhoff
e9a51a37f6 refactor(@angular-devkit/build-angular): unify proxy config loading in dev-server and ssr-dev-server
This improvement harmonizes the proxy configuration loading mechanisms between the dev-server and ssr-dev-server. Previously, these servers used different methods for loading the proxy configuration, leading to inconsistencies. Notably, the ssr-dev-server was limited to loading configurations only in JSON format. This change enables the ssr-dev-server to support various configuration formats, aligning it with the dev-server's capabilities and improving overall developer experience.
2023-12-13 17:43:53 +01:00
Alan Agius
4a63d1f4a7 Revert "build: update dependency vite to v5.0.8"
This reverts commit 7eb412c4f2f2fb60471cdadad627788f277f09fa as it causes CI to hang when used with 18.13 tests/legacy-cli/e2e/tests/basic/serve.ts
2023-12-13 14:22:03 +01:00
Angular Robot
8df2043216 build: update dependency piscina to v4.2.1 2023-12-13 10:44:24 +01:00
Alan Agius
0f253a1fc6 fix(@angular-devkit/build-angular): file is missing from the TypeScript compilation with JIT
Before this update, removing the modified file entry from `typeScriptFileCache` when a file was saved but unmodified created an issue. The TypeScript compiler didn't re-emit the file using `emitNextAffectedFile` because the file hashes remained unchanged. Consequently, this led to missing files in the esbuild compilation process.

In the current update, we no longer delete entries from typeScriptFileCache. This adjustment resolves the problem by ensuring the proper handling of file recompilation and prevents files from going missing during the esbuild compilation.

Closes #26635
2023-12-12 18:37:40 +01:00
Alan Agius
7a50df5c04 fix(@angular-devkit/build-angular): update ESM loader to work with Node.js 18.19.0
In Node.js 18.19 ESM loaders works the same way as Node.js 20.9+

Closes #26648
2023-12-12 18:10:36 +01:00
Alan Agius
72bd0ab9d0 fix(@angular-devkit/build-angular): allow vite to serve JavaScript and TypeScript assets
This commit fixes an issue which caused vite to transform JavaScript and TypeScript assets.

Closes #26641
2023-12-12 17:43:29 +01:00
Angular Robot
7eb412c4f2 build: update dependency vite to v5.0.8 2023-12-12 11:46:59 +01:00
Angular Robot
11d61223ae build: update all non-major dependencies 2023-12-12 10:10:39 +01:00
Charles Lyding
12f4433afb fix(@angular-devkit/build-angular): cache loading of component resources in JIT mode
The load result caching capabilities of the Angular compiler plugin used within the
`application` and `browser-esbuild` builders is now used for both stylesheet and
template component resources when building in JIT mode. This limits the amount of
file system access required during a rebuild in JIT mode and also more accurately
captures the full set of watched files.
2023-12-12 09:42:02 +01:00
Alan Agius
4e1f0e44dc fix(@angular-devkit/build-angular): the request url "..." is outside of Vite serving allow list for all assets
Vite's fs.allow was being populated incorrectly.

Closes #26624
2023-12-11 15:46:07 +01:00
Alan Agius
2909daf618 fix(@angular-devkit/build-angular): handle updates of an npm link library from another workspace when preserveSymlinks is true
Prior to this change, watching of an `npm link` of a library in another workspace when `preserveSymlinks` was set to `true` was not being picked up as `node_modules` files were always ignored.

Closes #25753
2023-12-11 15:45:55 +01:00
Charles Lyding
fe51926eec refactor(@angular-devkit/build-angular): convert watching to use watchpack package
The underlying file watching functionality now uses the `watchpack` library for all
builders. This includes the Webpack-based `browser` and the esbuild-based `application`/
`browser-esbuild`. This not only has the advantage of a single dependency for both but also
provides more consistent behavior between the two build system in regards to file watching.
Since the implementation of the file watching is fully encapsulated, there is no change to
the options or configurations of consuming applications.
2023-12-11 10:30:16 +01:00
Angular Robot
16d5486bd0 build: update all non-major dependencies 2023-12-11 10:29:59 +01:00
Charles Lyding
6a44989f54 fix(@angular-devkit/build-angular): retain symlinks to output platform directories on builds
The `deleteOutputPath` option will now empty specific build artifact directories instead of
removing them completely. This allows for symlinking or mounting the directories via Docker.
This is similar to the current behavior of emptying the root output path to allow similar
actions. All previous files will still be removed when the `deleteOutputPath` option is enabled.
This is useful in situations were the browser output files may be symlinked onto another
location on disk that is setup as a development server, or a Docker configuration mounts the browser
and server output to different locations on the host machine.
2023-12-11 10:29:46 +01:00
Charles Lyding
f18076a88c test(@angular-devkit/build-angular): add support for builder harness directory expectations
When using the builder harness in unit tests, expectations can now be made directly for
directories. Currently the existence, or lack thereof, can be tested using the harness.
This is similar to be existing file expectations. More capability may be added as needed
in the future.
2023-12-11 10:29:46 +01:00
dominicbachmann
52bf11f395 refactor(@angular-devkit/build-angular): remove deployUrl from browser-esbuild builder-status-warnings 2023-12-11 10:28:03 +01:00
Alan Agius
f6e67df1c4 feat(@angular-devkit/build-angular): inline Google and Adobe fonts located in stylesheets
`@import url()` to Google and Adobe fonts that are located in global and component CSS will now be inlined when using the esbuild based builders.

Input
```css
@import url(https://fonts.googleapis.com/css?family=Roboto:300,400,500);
```

Output
```css
/* latin */
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-weight: 500;
  src: url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmEU9fBBc4AMP6lQ.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
```

Closes #23054
2023-12-09 08:17:43 +01:00
Alan Agius
bf5fbddd45 fix(@angular-devkit/build-angular): inlining of fonts results in jagged fonts for Windows users
We now replace the user agent string used to perform font inlining with a Windows one. This is because Google fonts will including hinting in fonts for Windows. Hinting is a technique used with Windows files to improve appearance however results in 20-50% larger file sizes, however this will make the fonts display correctly on all platforms.

More information about this can be found in:
- https://fonts.google.com/knowledge/glossary/hinting
- https://glyphsapp.com/learn/hinting-manual-truetype-hinting
- http://google3/java/com/google/fonts/css/OpenSansWebFontsCssBuilder.java?l=22

Closes #22248
2023-12-09 07:57:26 +01:00
Charles Lyding
125fb779ff perf(@angular-devkit/build-angular): reduce TypeScript JSDoc parsing in application builder
TypeScript 5.3 provides a new programmatically accessible option on the compiler host object
to control the amount of JSDoc parsing that the TypeScript parser will perform. The `tsc`
command line tool now uses the `ParseForTypeErrors` value which only parses JSDoc comments
that may affect type checking and is considered a good default for tools such as the Angular
CLI. The Angular CLI will now attempt to use the `ParseForTypeErrors` value as well when available.
Projects will need to use TypeScript 5.3+ for this option to be available. No behavior changes will
occur on TypeScript 5.2 projects. This should not only provide a small improvement to build times
but also a reduction in overall memory usage.
2023-12-08 13:03:38 -05:00
Alan Agius
4b3a965429 fix(@angular-devkit/build-angular): baseHref with trailing slash causes server not to be accessible without trailing slash
This commit fixes an issue were when using a `baseHref` with trailing slash, vite dev-server would have been only accessible via a URL with a trailing slash. As vite would redirect to an error page similar to the below;

```
The server is configured with a public base URL of /myapp/ - did you mean to visit [/myapp/](http://localhost:4200/myapp/) instead?
```

Closes: #26618
2023-12-08 10:25:23 -05:00
Angular Robot
5a8e18a653 build: update all non-major dependencies 2023-12-08 09:58:03 -05:00
Charles Lyding
d07ef2f0b9 fix(@angular-devkit/build-angular): ensure browser-esbuild is used in dev server with browser builder and forceEsbuild
To ensure that the `forceEsbuild` development server option chooses the correct underlying build implementation when
the project contains the `browser` builder within the build target, an explicit check and conversion of the builder
name is now performed during the initialization phase of the development server builder.
2023-12-08 09:57:38 -05:00
Charles Lyding
5b8e2d5e57 fix(@angular-devkit/build-angular): ensure port 0 uses random port with Vite development server
Vite appears to consider a port value of `0` as a falsy value and use the default Vite port of
`5173` when zero is used as a value for the development server port option. To workaround this
issue, the port checker code now explicitly handles the zero value case and determines a random
port as would be done automatically by the Webpack-based development server.
2023-12-08 09:57:22 -05:00
Alan Agius
204794c4f8 feat(@angular-devkit/build-angular): add support for --no-browsers in karma builder
This commit enables users to disable runnings tests against a browsers. This can be done by using the `--no-browsers` command line flag or setting `browsers` to `false` in the `angular.json`

Closes #26537
2023-12-07 16:40:28 +01:00
Alan Agius
364a16b7a6 feat(@angular-devkit/build-angular): move browser-sync as optional dependency
`browser-sync` is now an optional dependency of `@angular-devkit/build-angular`. This package is only needed when using the legacy `@angular-devkit/build-angular:ssr-dev-server` builder.

Closes #26349
2023-12-06 11:47:28 -05:00
Charles Lyding
10588c2fc3 refactor(@angular-devkit/build-angular): update Node.js module register load hook for new types 2023-12-06 11:26:12 -05:00
Alan Agius
e3ad8c42a7 fix(@angular-devkit/build-angular): app-shell generation incorrect content when using the application builder
In some cases, the index.html file emitted contained the wrong contents. This because in OutputFiles there were present multiple files with the same name.

Closes #26593
2023-12-06 10:19:06 -05:00
Angular Robot
b5b0432913 build: update all non-major dependencies 2023-12-06 10:01:09 -05:00
Angular Robot
bf08da7d8e build: update dependency vite to v5.0.5 [security] 2023-12-06 07:43:23 +01:00
Alan Agius
c1ae7f3b33 refactor: update rxjs imports
Remove `rxjs/operators` legacy import
2023-12-05 15:23:43 -05:00