1710 Commits

Author SHA1 Message Date
Alan Agius
9ddb220c3d docs: replace app with application 2022-03-14 10:03:06 -04:00
Alan Agius
2e0493130a refactor(@angular/cli): replace command line arguments parser
With this change we refactor the Angular CLI and replace the underlying args parser and command builder. We choose to use Yargs as our parser and command builder of choice. The main advantages of Yargs over other command builders are;

- Highly configurable.
- We already use it in other packages such as the compiler-cli/dev-infra etc..
- Commands and options can be added during runtime. This is a requirement that is needed to support architect and schematics commands.
- Outstanding documentation.
- The possibility to parse args without parser configuration (Free form).
- Commands are built lazily based on the arguments passed.

BREAKING CHANGE:

Several changes in the Angular CLI commands and arguments handling.

- `ng help` has been removed in favour of the `—-help` option.
- `ng —-version` has been removed in favour of `ng version` and `ng v`.
- Deprecated camel cased arguments are no longer supported. Ex. using `—-sourceMap` instead of `—-source-map` will result in an error.
- `ng update`, `—-migrate-only` option no longer accepts a string of migration name, instead use `—-migrate-only -—name <migration-name>`.
- `—-help json` help has been removed.

Closes #20976, closes #16614 and closes #16241
2022-03-09 17:18:53 +01:00
Alan Agius
4ebfe03415 feat(@angular/cli): drop support for Node.js 12
Node.js v12 will become EOL on 2022-04-30. As a result, Angular CLI v14 will no longer support Node.js v12.

BREAKING CHANGE:

Support for Node.js v12 has been removed as it will become EOL on 2022-04-30. Please use Node.js v14.15 or later.
2022-03-04 22:38:45 +01:00
Alan Agius
ef753628a6 refactor(@angular-devkit/build-angular): move dev-server specs into a seperate directory 2022-03-04 17:18:54 +01:00
Alan Agius
433b6b4931 docs: remove redundant default empty strings values
(cherry picked from commit 3d928c01c8196b1caba7b373eec870540ecda79e)
2022-03-04 16:58:55 +01:00
Alan Agius
e28c715972 fix(@angular-devkit/build-angular): ignore css only chunks during naming
Don't name CSS only chunks.

Closes #22769
2022-03-04 16:58:38 +01:00
Charles Lyding
f0daa8c3bf refactor(@angular-devkit/build-angular): remove unneeded JsonObject type casting
The use of the `@angular-devkit/core` `JsonObject` type is no longer needed to satisfy the type requirements of `@angular-devkit/architect` package builder creation functions.
2022-02-25 13:35:14 -05:00
Charles Lyding
ed67d9a362 refactor(@angular-devkit/build-angular): replace most custom path resolve usages with Node.js builtins
During the build initialization phase, many paths are converted back and forth between multiple normalized forms. These conversions involve potentially expensive string operations. The majority of the custom path `resolve` function from `@angular-devkit/core` usages have now been removed in favor of the Node.js builtin path functions. This change reduces the need to perform additional string manipulation where possible.
2022-02-25 07:46:35 -05:00
Alan Agius
de14293083 fix(@angular-devkit/build-angular): don't rename blocks which have a name
When using the unsupported `webpackChunkName` magic comment we renamed the chunk which in some cases causes a runtime error.

Closes #22525
2022-02-22 16:30:59 -05:00
Alan Agius
063acc335a test: change puppeteer imports to use primary entry-point 2022-02-10 14:16:24 +01:00
Alan Agius
561df27e36 test(@angular-devkit/build-angular): disable html karma coverage reporter
Under bazel this causes the below error.

```
Unexpected error while generating coverage report. [Error: EEXIST: file already exists, mkdir
```
2022-02-10 14:16:24 +01:00
Alan Agius
7ce50002a2 fix(@angular-devkit/build-angular): block Karma from starting until build is complete
This change is inspired by https://github.com/karma-runner/karma-chrome-launcher/issues/154#issuecomment-986661937 which blocks Karma from launching the browsers until the compilation is complete.

This is needed especially for large applications when using code-coverage where otherwise the users would have to fine-tune several Karma timeouts such as  `captureTimeout` for various environments.

Closes #22495
2022-02-09 11:15:37 +00:00
Alan Agius
7c92becb19 refactor(@angular-devkit/build-angular): remove workaround for fidelity and performance of babel sourcemaps
With this change we remove the workaround for fidelity and performance of babel sourcemaps as this is no longer needed as Babel now uses `@ampproject/remapping` to merge sourcemaps.

See https://github.com/babel/babel/pull/14209 for more context.
2022-02-07 10:54:14 +00:00
Alan Agius
4b9199d97f fix(@angular-devkit/build-angular): ensure to use content hash as filenames hashing mechanism
Previously we used hash which resulted in a unique hash generated for every build even when the contents of the files didn't differ.

More info: https://webpack.js.org/guides/caching/#output-filenames
2022-02-01 17:12:04 -08:00
Alan Agius
378ec0bcf0 docs(@angular-devkit/build-angular): add missing period in include description 2022-02-01 17:01:11 -08:00
Alan Agius
1842bd5d53 fix(@angular-devkit/build-angular): add whatwg-url to downlevel exclusion list
Similar to https://github.com/angular/angular-cli/pull/21739, `whatwg-url` seems to suffer from the same issue as https://github.com/angular/angular-cli/issues/21735

```ts
const AsyncIteratorPrototype = Object.getPrototypeOf(Object.getPrototypeOf(async function* () {}).prototype);
```
2022-02-01 17:00:58 -08:00
Alan Agius
0a1cd584d8 refactor(@angular-devkit/build-angular): remove deprecated showCircularDependencies browser and server builder option
BREAKING CHANGE:

The deprecated `showCircularDependencies` browser and server builder option has been removed. The recommended method to detect circular dependencies in project code is to use either a lint rule or other external tools.
2022-01-31 11:34:58 -08:00
Alan Agius
d23a168b8d feat(@angular-devkit/build-angular): validate file extensions for scripts and styles options
In some cases unexpected files may be provided which can cause to unsupported or broken behaviour.

One such use-case is users can provide TypeScript files as `scripts` input, this would not be processed by the TypeScript compiler, see: https://github.com/angular/angular-cli/issues/17125 and would cause the build to fail with a an unhelpful error message during optimization as the JS optimizers cannot parse TypeScript input.

BREAKING CHANGE:

`browser` and `karma` builders `script` and `styles` options input files extensions are now validated.

Valid extensions for `scripts` are:
- `.js`
- `.cjs`
- `.mjs`
- `.jsx`
- `.cjsx`
- `.mjsx`

Valid extensions for `styles` are:
- `.css`
- `.less`
- `.sass`
- `.scss`
- `.styl`
2022-01-31 11:30:10 -08:00
Alan Agius
7f67dbc1cf fix(@angular-devkit/build-angular): invalid browsers version ranges
This change addresses the `Invalid version: "15.2-15.3"` range error. We previously only handled version ranges for `ios_safari`. Now, we handle such versions for all browsers.

Closes #22606
2022-01-31 09:14:43 -08:00
Alan Agius
69ecddaa7d feat(@schematics/angular): update new and existing projects compilation target to ES2020
With this change we update the TypeScript compilation target to `ES2020` for both new and existing projects. This is because all browsers that Angular supports (https://angular.io/guide/browser-support) support `ES2020` features without the need for polyfills.
2022-01-28 11:01:09 -08:00
Alan Agius
07e776ea37 fix(@angular-devkit/build-angular): fail build when importing CSS files as an ECMA modules
BREAKING CHANGE:

We now issue a build time error since importing a CSS file as an ECMA module is non standard Webpack specific feature, which is not supported by the Angular CLI.

This feature was never truly supported by the Angular CLI, but has as such for visibility.
2022-01-27 11:07:32 -08:00
Alan Agius
6df962c7a4 refactor: remove build-optimizer from repo
This package is deprecated and should not be used. It has always been experimental. All the relevant functionality has been moved into `@angular-devkit/build-angular`.
2022-01-27 11:06:00 -08:00
Alan Agius
7068de2809 refactor(@angular-devkit/build-angular): clean find tests logic
With this change we clean up and reduce the complexity of the `findTests` logic that handles the `include` option in the karma builder.
2022-01-27 11:05:36 -08:00
Bill Barry
acf7532bd7 fix(@angular-devkit/build-angular): load translations fresh start
Currently when making a change while serving a localized application, duplicate
translation warnings appear for every translation id. This fixes that by
replacing the whole translation object with a new one each time translations
are loaded.

fixes #22398
2022-01-19 17:45:34 +01:00
Alan Agius
b6886cea52 refactor(@angular-devkit/build-angular): refactor mini-css-extract-plugin import to ES6
`mini-css-extract-plugin` now ships its own types.
2022-01-19 07:21:10 +01:00
Alan Agius
a35262e6a5 refactor(@angular-devkit/build-angular): exit early when there are no component style budgets
With this change we exit the function early, when there are no budgets defined.
2022-01-16 19:41:13 +00:00
Alan Agius
b5c4a23446 fix(@angular-devkit/build-angular): support ESNext as target for JavaScript optimizations
Previously, when ESNext was used, we fallbacked to ES2020 which caused ESBuild to output broken code.

Closes #22486
2022-01-16 19:40:29 +00:00
Alan Agius
a0784bd8cb fix(@angular-devkit/build-angular): disable parsing new URL syntax
When web-workers are enabled we allowing parsing `new URL` syntax which has the side-effect that Webpack will treat all assets as asset modules (https://webpack.js.org/guides/asset-modules/#url-assets). With this change we remove this inconsistency by disabling the `url` parsing which doesn't effect `new Worker(new URL(...))`.
2022-01-16 19:39:00 +00:00
Alan Agius
426ddb68d9 fix(@angular-devkit/build-angular): ensure $localize calls are replaced in watch mode
When `translations` is undefined `$localize` calls are not replaced.

2c9a33dddb/packages/angular_devkit/build_angular/src/builders/dev-server/index.ts (L382)

Closes #22435
2022-01-12 10:06:49 -08:00
Alan Agius
0d68ed5473 fix(@angular-devkit/build-angular): localized bundle generation fails in watch mode
Previously, we used to delete the temporary emitted JS and map files. However this causes a problem in watch mode, as Webpack will not re-emit these deleted files during the next incremental re-build.

With this change we now delete the entire temporary directory when the process is being terminated instead of a file by file bases.

Closes #22395
2022-01-12 10:05:08 -08:00
Elio Goettelmann
50167a36b0 fix(@angular-devkit/build-angular): websocket client only injected if required
After the webpack-dev-server migration to v4, the websocket client was always injected, even if not required. This caused unnecessary 'ws' requests when live-reload and hmr were disabled.
2022-01-12 10:03:55 -08:00
Alan Agius
6d2087b8f8 fix(@angular-devkit/build-angular): automatically purge stale build cache entries
With every build-angular release, previously created cache entries get stale and are no longer used. This causes the cache to keep growing as older files are not purged.

With this change we automatically purge entries that have been created with older version of build-angular and can no longer be used with the current installed version.

Closes #22323
2022-01-12 09:46:03 -08:00
minijus
cbe028e37c feat(@angular-devkit/build-angular): expose i18nDuplicateTranslation option of browser and server builders
Closes #22201
2022-01-10 16:14:14 -08:00
Alan Agius
11f817adae fix(@angular-devkit/build-angular): use contenthash instead of chunkhash for chunks
See https://github.com/waysact/webpack-subresource-integrity/tree/main/webpack-subresource-integrity#caching and https://github.com/waysact/webpack-subresource-integrity/issues/162 for more information about this.

Closes #22439
2022-01-10 16:13:39 -08:00
Alan Agius
a5e375ca93 fix(@angular-devkit/build-angular): correctly resolve core-js/proposals/reflect-metadata
Closes #22443
2022-01-10 16:13:06 -08:00
Alan Agius
2b789b3ad0 refactor: remove @types/webpack-dev-server
This package is no longer needed since `webpack-dev-server` now has it's own typings.
2022-01-10 11:32:40 -08:00
Jordan Pittman
509322b621 fix(@angular-devkit/build-angular): Don't use TAILWIND_MODE=watch
This was only used as a workaround for older postcss-loder versions. It is no longer necessary. Additionaly it does not work with polling.
2022-01-10 10:23:38 -08:00
Alan Agius
2c9a33dddb refactor(@angular-devkit/build-angular): ability to perform DCE but retain symbol names
Previously, we enabled the `keepNames` esbuild when mangling was disabled, this caused dead code to be retained because of the transformations that esbuild did to the input.

Input
```js
class foo {}
```

Output
```js
var l = Object.defineProperty,
  a = (s, c) => l(s, "name", { value: c, configurable: !0 });
class foo {}
a(foo, "foo");
```

Previously we enabled the `keepNames` esbuild option when mangling was disabled, which is actually not needed to retain the name of symbols but is needed for SSR because Domino relies on the `name` property on functions and classes.

Closes #22354
2021-12-17 13:30:52 +01:00
Alan Agius
b0c8109a99 build: update all non-major dependencies 2021-12-17 12:50:59 +01:00
Alan Agius
471930007c fix(@angular-devkit/build-angular): display FS cache information when verbose option is used
With this change we enabling Webpack to display additional cache related logs when the `verbose` option is enabled. This is helpful to debug cache misses.
2021-12-15 11:35:25 -08:00
Alan Agius
f1d2873ca7 fix(@angular-devkit/build-angular): only extract CSS styles when are specified in styles option
This fixes an issue were in some cases when importing CSS in the compilation using import syntax caused CSS to be extracted which causes a runtime error.

In general this is not something that we fully support since this is a specific webpack features and importing CSS as if they were ES modules not supported by the browsers. However, certain widely using libraries such as Monaco editor depend on this specific Webpack feature.

Note: This non-standard unsupported behaviour will no longer be possible in the next major version.

Closes #22358
2021-12-15 11:34:40 -08:00
Alan Agius
e15aee65b5 build: refactor code to use types from sass and copy-webpack-plugin instead of @types
These packages now ship their own type decleration files.
2021-12-14 20:20:59 +01:00
Alan Agius
b04cdc3a23 refactor(@angular-devkit/build-angular): remove usage of deprecated url methods
Use WHATWG URL API instead of the deprecated url utils.

See https://nodejs.org/api/url.html
2021-12-08 08:33:47 +01:00
Alan Agius
562dc6a892 fix(@angular-devkit/build-angular): prefer ES2015 entrypoints when application targets ES2019 or lower
Previously, we always consumed the ES2020 entrypoints, which caused issues in environments where the application compilation target is ES2019 or lower and ES2020 is not supported.

This is because we only downlevel code when we target ES5 or below.

- ES5 or below compilations, ES2015 entrypoints are used and their code is downlevelled to ES5.
- ES2019 or below, ES2015 entrypoints are used and no downlevelling is involved.
- ES2020 or later, ES2020 entrypoints are used.

Closes #22270
2021-12-08 08:33:31 +01:00
Alan Agius
9bacba3420 fix(@angular-devkit/build-angular): differentiate components and global styles using file query instead of filename
Previously, we introduced the `ngResource` query to Angular component resources we now use it with `resourceQuery` to differentiate between global and components styles, since in some cases while unlikely a file can be used as a component and global style.

Closes #7245
2021-12-08 08:33:18 +01:00
Alan Agius
f4cd684855 refactor(@ngtools/webpack): remove direct angular resource loader
We remove the custom direct resource loader which is used for JIT when `directTemplateLoading` is enabled. Instead, use Webpack's [asset modules](https://webpack.js.org/guides/asset-modules/) which were introduced in version 5.

To the resource URL, we also add a query parameter, `ngResource`. This is used to be filter request based on a query. See https://webpack.js.org/guides/asset-modules/#replacing-inline-loader-syntax for more information.
2021-12-08 08:33:18 +01:00
Alan Agius
556a3f56eb refactor(@angular-devkit/build-angular): remove ESM workarounds 2021-12-06 14:53:04 +00:00
Alan Agius
ac66e400cd fix(@angular-devkit/build-angular): Sass compilation in StackBlitz webcontainers
When `process.versions.webcontainer` is truthy it means that we are running in a StackBlitz webcontainer. `SassWorkerImplementation` uses `receiveMessageOnPort` Node.js `worker_thread` API to ensure sync behavior which is ~2x faster. However, it is non trivial to support this in a webcontainer and while slower we choose to use `dart-sass` which in Webpack uses the slower async path.
2021-12-06 14:51:16 +00:00
Alan Agius
9e22d7a215 refactor(@angular-devkit/build-angular): remove NG_BUILD_PROFILING and DEVKIT_PROFILING logic
Generating a CPU profile using Node.JS `--cpu-prof` or Chrome insector is preferred.

Closes #20336
2021-12-06 14:51:00 +00:00
Alan Agius
d55fc62ef2 fix(@angular-devkit/build-angular): fallback to use language ID to set the dir attribute
In some cases we don't ship certain locales, or they map to files which are named only the language IDs. Example `en-US`, which it's locale data is available from `@angular/common/locales/en.mjs`

Closes #22285
2021-12-06 14:50:26 +00:00