2900 Commits

Author SHA1 Message Date
Alan Agius
1b3a5429b0 fix(@angular-devkit/core): add missing option peer dependency on chokidar 2021-10-09 07:04:18 +02:00
Alan Agius
81531d1b64 fix(@schematics/angular): remove target and lib options for library tsconfig
The `target` option is set directly in ng-packagr binary and cannot be overridden, while the `lib` option is inherited from the root level tsconfig.
2021-10-08 14:40:54 +02:00
Renovate Bot
7c2119e48a build: update all non-major dependencies 2021-10-08 10:32:47 +02:00
Alan Agius
94c00afbf3 fix(@schematics/angular): don't export renderModuleFactory from server file
Using `renderModuleFactory` is no longer needed since this was used for ViewEngine.
2021-10-07 18:50:54 +02:00
Alan Agius
9a3b63766a refactor(@angular-devkit/build-angular): remove redundant require.resolve for @angular/service-worker
This was mainly done prior to the introduction of optional peer dependencies.
2021-10-07 17:34:19 +02:00
Charles Lyding
5dba8a22b1 test(@angular-devkit/build-angular): disable Webpack caching during harness-based unit tests
The default set of metadata fields provided to all builders executed via the BuilderHarness is controlled programmatically. The BuilderHarness is eventually intended to operate in-memory and without file system access unlike the legacy unit tests. The `cli.cache.enabled` option must therefore be set within the BuilderHarness initialization code. `cli.cache.enabled` set to false provides improved test isolation guarantees by disabling Webpack’s caching.
2021-10-07 17:33:14 +02:00
Renovate Bot
6bcbc77b91 build: update all non-major dependencies to v7.15.8 2021-10-07 08:50:01 +02:00
Alan Agius
64ca38bda5 test(@angular-devkit/build-webpack): disable webpack cache during unit tests
Unit tests are not isolated and therefore using cache might be flakey due to race conditions.
2021-10-06 19:11:47 -04:00
Charles Lyding
93ae204047 test(@angular-devkit/build-angular): correctly disable caching in unit-tests
The unit-tests where intended to not use build caching to better ensure test isolation. However, the configuration format was incorrect and did not disable the build caching.
2021-10-06 19:10:24 -04:00
Charles Lyding
d7af4a7b53 fix(@angular-devkit/build-angular): enable custom es2020 and es2015 conditional exports
By adding the `es2020` and `es2015` condition names, the build process will now use ES2020 or ES2015 specific files if a package's exports entries contain files for either of those conditions. This allows packages to provide multiple variants of the code that the bundler can then use based on the bundler's configuration. As of Angular v13, ES2020 code is preferred. However, some packages may prefer to export other variants by default but provide an `es2020`/`es2015` condition to allow other variants if requested.
The server configuration is intentional not altered since the server output executes on Node.js and should use the `node` condition which is automatically added by Webpack based on the output target.
2021-10-06 19:10:24 -04:00
Doug Parker
5e435ff377 docs: mark @angular-devkit/build-optimizer as deprecated.
DEPRECATED: `@angular-devkit/build-optimizer`

It's functionality has been included in `@angular-devkit/build-angular` so this package is no longer needed by the CLI and we will stop publishing the package soon. It has been an experimental (never hit `1.0.0`) and internal (only used by Angular itself) package and should be not be used directly by others.
2021-10-06 14:34:59 -05:00
Alan Agius
bf0709b14c feat(@angular-devkit/build-angular): disable critical CSS inlining by default
With this change we disable critical css inline by default. The main motivations are the following issues #20760 and #20864.

BREAKING CHANGE:

Inlining of critical CSS is no longer enable by default. Users already on Angular CLI version 12 and have not opted-out from using this feature are encouraged to opt-in using the browser builder `inlineCritical` option.

The motivation behind this change is that the package used to parse the CSS has a number of defects which can lead to unactionable error messages when updating to Angular 13 from versions priors to 12. Such errors can be seen in the following issue #20760.

```json
"configurations": {
  "production": {
    "optimization": {
      "styles": {
        "inlineCritical": true,
      }
    },
    ...
  }
```
2021-10-06 14:34:11 -05:00
Alan Agius
585adacd06 fix(@schematics/angular): don't add destroyAfterEach in newly generated spec files
This is now enabled by default.

See https://github.com/angular/angular/pull/43353 for more context.
2021-10-06 14:33:42 -05:00
Alan Agius
7ff8c5350e feat(@schematics/angular): add /.angular/cache to .gitignore
With this change we add `/.angular/cache` to `.gitignore`. This folder will primary be used to store the build disk cache artifacts.
2021-10-06 08:02:22 -05:00
Alan Agius
5904afd1de feat(@angular-devkit/build-angular): enable disk cache by default and provide configurable options
Persistent disk build cache is now enabled by default. A number of options have been added to allow fine tuning of the cache.

The options can be configuration in `cli.cache` section in the `angular.json` as shown below.

- `enabled`: Configure whether disk caching is enabled. Defaults to `true`
- `environment`: Configure in which environment disk cache is enabled. Valid values `ci`, `local` or `all`. Defaults to: `local`
- `path`: cache base path. Defaults to `.angular/cache`

DEPRECATED: `NG_BUILD_CACHE` environment variable option will be removed in the next major version. Configure `cli.cache` in the workspace configuration instead.

BREAKING CHANGE:  `NG_PERSISTENT_BUILD_CACHE` environment variable option no longer  have effect. Configure `cli.cache` in the workspace configuration instead.

```json
{
  "$schema": "./node_modules/@angular/cli/lib/config/schema.json",
  "version": 1,
  "cli": {
    "cache": {
      "enabled": true,
      "path": ".custom-cache-path",
      "environment": "all"
    }
  }
  ...
}
```
2021-10-06 08:02:22 -05:00
Alan Agius
09e039500f feat(@angular-devkit/architect): include workspace extensions in project metadata 2021-10-06 08:02:22 -05:00
Renovate Bot
96600f55d7 build: update dependency license-webpack-plugin to v3 2021-10-06 06:12:25 -05:00
Renovate Bot
a5dadc5f71 build: update all non-major dependencies 2021-10-06 06:12:13 -05:00
Charles Lyding
248ed4864e refactor(@angular-devkit/build-angular): remove unneeded @angular/core System.import workarounds
With the removal of support for the string form of `loadChildren` within the Angular router, the usage of `System.import` has also been removal from `@angular/core`. This removal allows for the additional removal of all workarounds within the Angular CLI due to the `System.import` usage. Webpack's deprecated support for `System.import` was previously required to be enabled which resulted in warnings that then needed to be suppressed. A Webpack context dependency replacement was also previously required to prevent Webpack from failing due to the otherwise unknown behavior of the `System.import` call. All of these workarounds have now been removed.
2021-10-06 06:11:36 -05:00
Charles Lyding
a54e5e0655 fix(@angular-devkit/core): support Node.js v16 with NodeJsSyncHost/NodeJsAsyncHost delete operation
The `NodeJsSyncHost`/`NodeJsAsyncHost` classes' `delete` method uses `fs.rmdirSync`/`fs.rmdir` to delete directories. However, Node.js v16's `fs.rmdirSync`/`fs.rmdir` will now throw an `ENOENT` error if the path does not exist. `fs.rmSync`/`fs.rm` is now the preferred option when using Node.js v16 but since this function is not available on Node.js v12 both are tried with `fs.rmSync`/`fs.rm` given preference.
Once Node.js 12 support is dropped, the `delete` method could potentially be refactored to avoid the `isDirectory` check and only use `fs.rmSync`/`fs.rm` which supports both files and directories.
2021-10-06 06:11:09 -05:00
Charles Lyding
f10a828336 fix(@angular-devkit/build-angular): improve fidelity and performance of babel loader sourcemaps
This change uses the `@ampproject/remapping` package to merge sourcemaps generated from the customized babel loader used to perform the partial compilation linking in applications as well as other optimization and downleveling transformations. This provides more accurate output mapppings as well as improved performance and lower memory usage when source maps are enabled within a build.
2021-10-06 06:10:57 -05:00
Alan Agius
b715e73957 test(@angular-devkit/build-angular): update shared lazy modules spec file path 2021-10-05 11:38:20 -04:00
Alan Agius
75fddc9b13 test(@angular-devkit/build-angular): workaround for rxjs 6 directory imports
rxjs 6 requires directory imports which are not support in ES modules. Disabling `fullySpecified` allows Webpack to ignore cases such as this until the package can be updated to use package exports.
2021-10-05 11:38:20 -04:00
Alan Agius
7930b50388 build: update ng-packagr to version 13.0.0-next.6 2021-10-05 11:38:20 -04:00
Alan Agius
e11209591a refactor(@angular-devkit/build-angular): use @angular/localize/tools entry-point 2021-10-05 11:38:20 -04:00
Charles Lyding
4be6537ddf fix(@angular-devkit/build-angular): update TS/JS regexp checks to latest extensions
The regular expressions based checks for TypeScript and JavaScript files used by Webpack module rules have been updated to include all current extension variations.
JavaScript files can be either `.js`, `.mjs`, or `.cjs`. TypeScript files as of the upcoming version 4.5 can be either `.ts`, `.mts`, or `.cts`.
Also while not officially supported by Angular, the TypeScript compiler can attempt to process any of the previous extensions with an `x` suffix which indicates a JSX/TSX file.
2021-10-05 04:44:24 -05:00
Alan Agius
22cd9edfaf feat(@angular-devkit/build-angular): favor es2020 main fields
APF version 13 will include es2020, with this change we favor es2020 entrypoints.
2021-10-01 14:08:14 -05:00
Alan Agius
000b0e51c1 feat(@angular-devkit/build-angular): remove deprecated dev-server options
BREAKING CHANGE: With this change a number of deprecated dev-server builder options which proxied to the browser builder have been removed. These options should be configured in the browser builder instead.

The removed options are:
- `aot`
- `sourceMap`
- `deployUrl`
- `baseHref`
- `vendorChunk`
- `commonChunk`
- `optimization`
- `progress`
2021-10-01 14:07:42 -05:00
Paul Gschwendtner
f383f3201b fix(@angular-devkit/build-angular): ESM-interop loaded plugin creators of @angular/localize/tools not respected
This is a follow-up to fb210e5b747ce0351dd9ee7d482770b9cfa71133 which
added support for the ESM-variant of the `@angular/localize` package,
and also prepared for the `tools/` secondary entry-point we will expose
as of v13.

Unfortunately this change currently does not pass-through the ESM-loaded
plugin creators as the option (which is passed to the Babel plugin) is
incorrect. This was hidden due to a type cast. This commit fixes the
issue and also ensures TS would complain in the future if the option
names differ.
2021-09-30 06:57:01 -04:00
Renovate Bot
1a8d0d0af5 build: update all non-major dependencies 2021-09-29 15:36:38 -04:00
Alan Agius
4e0743c8ad perf(@angular-devkit/build-angular): change webpack hashing function to xxhash64
`xxhash64` uses a faster WASM based hash mechanism.
2021-09-29 11:33:56 -04:00
Alan Agius
884111ac0b fix(@angular-devkit/build-angular): update IE unsupported and deprecation messages
IE 11 is no longer supported.
2021-09-29 09:22:11 -04:00
Alan Agius
9c924a4c24 build: update to TypeScript 4.4 2021-09-28 09:35:19 -04:00
Alan Agius
505438cc41 feat(@angular-devkit/build-angular): support TypeScript 4.4
BREAKING CHANGE: TypeScript versions prior to 4.4 are no longer supported.
2021-09-28 09:35:19 -04:00
Alan Agius
537e3a1944 refactor(@angular-devkit/build-webpack): port 0 WEBPACK_DEV_SERVER_BASE_PORT workaround
No longer needed due to change in webpack-dev-server. See: ed67f66fc4/lib/Server.js (L77-L79)
2021-09-28 05:48:28 -04:00
Charles Lyding
043c4107f8 refactor(@angular-devkit/build-angular): remove patching of @angular/localize Diagnostics object
A Babel webpack loader specific `@angular/localize` package `Diagnostics` object is now created that is optimized for the diagnostics reporting case. This removes the need to manually create and patch an instance of a Diagnostics object. Future work will potentially allow a reporter to be passed directly to the translation plugins to remove the need to create a new object entirely.
2021-09-28 04:58:10 -04:00
Charles Lyding
47bf88e10f refactor(@angular-devkit/build-angular): use module resolution to search for i18n locale data
Previously, the search for a locale's data when using i18n was performed by a series of file system accesses that searched through the `@angular/common` package. The search is now conducted via Node.js module resolution which has several advantages. The internal structure of the package is no longer assumed and allows the `@angular/common` package to change its internal implementation without affecting the locale data search. File extensions of the locale data files are also not hard-coded as only the name of the locale data is needed to perform a search. There are also less direct file system access calls and the search can leverage whatever internal caching Node.js performs during module resolution.
2021-09-28 04:58:10 -04:00
Alan Agius
ff58f775d3 refactor(@angular-devkit/build-angular): pass SSL cert and key path to dev-server
Since version 4.2.0 webpack-dev-server supports read the mentioned files.

See:
9bb6f78948/CHANGELOG.md (420-2021-09-09)
2021-09-27 16:34:22 -04:00
Renovate Bot
d2e302cc42 build: update all non-major dependencies 2021-09-27 06:46:21 -04:00
Charles Lyding
fb210e5b74 refactor(@angular-devkit/build-angular): support ESM @angular/localize usage
With the Angular CLI currently being a CommonJS package, this change uses a dynamic import to load `@angular/localize` which may be ESM. CommonJS code can load ESM code via a dynamic import. Unfortunately, TypeScript will currently, unconditionally downlevel dynamic import into a require call. require calls cannot load ESM code and will result in a runtime error. To workaround this, a Function constructor is used to prevent TypeScript from changing the dynamic import. Once TypeScript provides support for keeping the dynamic import this workaround can be dropped and replaced with a standard dynamic import.
2021-09-27 06:45:24 -04:00
Paul Gschwendtner
0e7277c63a fix(@angular-devkit/build-angular): babel adjust enum plugin incorrectly transforming loose enums
With Angular Package Format v13, we will be using a more recent version of rollup. Rollup
always suffixed exports to avoid collisions, but with the most recent version, the order
has changed slightly changed. e.g. previously for `@angular/core`, there were two instances
of the `ViewEncapsulation` enum part of the `fesm` bundle. The second instance of the enum
orginated from the compiler <--> core facade and it got renamed to avoid conflicts with the
actual declaration of `ViewEncapsulation`. Now this has changed, and the first export is
being renamed instead. This now breaks at runtime because the first export is being incorrectly
transformed by the adjust enum plugin of `build-angular`. The plugin always had this problem
of incorrectly transforming the enums, but it never surfaced because only the face enum has been
transformed (which is not used at runtime). e.g.

consider the following input in `core.mjs`:

```
var ViewEncapsulation$1;
(function (ViewEncapsulation) {
    ViewEncapsulation[ViewEncapsulation["Emulated"] = 0] = "Emulated";
})(ViewEncapsulation$1 || (ViewEncapsulation$1 = {}));
```

this is transformed into:

```
var ViewEncapsulation$1 = /*#__PURE__*/(() => {
  ViewEncapsulation$1 = ViewEncapsulation$1 || {};
  ViewEncapsulation[ViewEncapsulation["Emulated"] = 0] = "Emulated";
}());
```

Note how the enum assignment for `Emulated` incorrectly still uses the non-suffixed
identifier that previously was part of the callee wrapper function.
2021-09-24 09:46:02 -04:00
Renovate Bot
8f33bdbb1c build: update all non-major dependencies to v0.13.2 2021-09-24 08:22:03 -04:00
Charles Lyding
fb1ad7c5b3 feat(@angular-devkit/build-angular): support ESM proxy configuration files for the dev server
The `proxyConfig` option now supports loading ESM configuration files in addition to JSON and CommonJS files. ESM files (such as those ending with `.mjs`) must provide a default export with the configuration object.
For example, a `proxy.config.mjs` containing the follow is now possible:
```
export default { "/api/*": { "target": "http://127.0.0.1:5001" } };
```

Closes #21623
2021-09-24 08:20:40 -04:00
Charles Lyding
13cceab8e7 fix(@angular-devkit/build-angular): use URLs for absolute import paths with ESM
Absolute import paths, especially on Windows, must be `file://` URLs when using ESM. Otherwise, Windows drive letters (e.g., `C:`) would be interpreted as a protocol instead of a drive letter when performing the import.
2021-09-23 13:59:31 -04:00
Renovate Bot
47dd77d928 build: update all non-major dependencies 2021-09-23 06:56:26 -04:00
Charles Lyding
9b207bddac refactor(@angular-devkit/build-angular): support ESM @angular/service-worker usage
With the Angular CLI currently being a CommonJS package, this change uses a dynamic import to load `@angular/service-worker/config` which may be ESM. CommonJS code can load ESM code via a dynamic import. Unfortunately, TypeScript will currently, unconditionally downlevel dynamic import into a require call. require calls cannot load ESM code and will result in a runtime error. To workaround this, a Function constructor is used to prevent TypeScript from changing the dynamic import. Once TypeScript provides support for keeping the dynamic import this workaround can be dropped and replaced with a standard dynamic import.
2021-09-23 06:52:06 -04:00
Charles Lyding
77561e796a refactor(@angular-devkit/build-angular): support ESM @angular/compiler-cli linker usage
This is a followup PR for #21771 that addresses partial compilation linker usage.
With the Angular CLI currently being a CommonJS package, this change uses a dynamic import to load `@angular/compiler-cli/linker[/babel]` which may be ESM. CommonJS code can load ESM code via a dynamic import. Unfortunately, TypeScript will currently, unconditionally downlevel dynamic import into a require call. require calls cannot load ESM code and will result in a runtime error. To workaround this, a Function constructor is used to prevent TypeScript from changing the dynamic import. Once TypeScript provides support for keeping the dynamic import this workaround can be dropped and replaced with a standard dynamic import.
2021-09-23 06:52:06 -04:00
Charles Lyding
0d76bf04bc fix(@angular-devkit/build-angular): support WASM-based esbuild optimizer fallback
In the event that the Angular CLI is executed on a platform that does not yet have native support for esbuild, the WASM-based variant of esbuild will now be used. If the first attempt to optimize a file fails to execute the native variant of esbuild, future executions will instead use the WASM-based variant instead which will execute regardless of the native platform. The WASM-based variant, unfortunately, can be significantly slower than the native version (some cases can be several times slower). For install time concerns regarding the esbuild post-install step, esbuild is now listed as an optional dependency which will allow the post-install step to fail but allow the full npm install to pass. This install scenario should only occur in the event that the esbuild native binary cannot be installed or is otherwise unavailable.
2021-09-22 16:09:57 +02:00
Renovate Bot
3a7e8505d3 build: update all non-major dependencies 2021-09-22 11:22:42 +02:00
Alan Agius
9efcb32e37 fix(@angular-devkit/build-webpack): better handle concurrent dev-servers
Webpack-dev-server doesn't handle concurrency very well. When using port 0, and 2 processes start at the same time, they end up being given the same port. The main reason for the issue is that it find a free port, put only uses at a later stage.
2021-09-21 16:07:30 +02:00