From 6a8290c1f0017305361cf76d3a6bfb5fbe6f4511 Mon Sep 17 00:00:00 2001 From: Alex Rickabaugh Date: Tue, 31 May 2022 13:42:34 -0700 Subject: [PATCH] docs: update release and update guides for v14 (#46200) This commit adds content related to Angular v14 to the `releases.md` and `update-to-latest-version.md` guides on AIO. PR Close #46200 --- aio/content/guide/releases.md | 3 +- aio/content/guide/update-to-latest-version.md | 164 +++++------------- 2 files changed, 49 insertions(+), 118 deletions(-) diff --git a/aio/content/guide/releases.md b/aio/content/guide/releases.md index 46a4321b8c5..3f9e25d688e 100644 --- a/aio/content/guide/releases.md +++ b/aio/content/guide/releases.md @@ -119,7 +119,8 @@ The following table provides the status for Angular versions under support. | Version | Status | Released | Active ends | LTS ends | |:--- |:--- |:--- |:--- |:--- | -| ^13.0.0 | Active | 2021-11-04 | 2022-05-04 | 2023-05-04 | +| ^14.0.0 | Active | 2022-06-02 | 2022-12-02 | 2023-12-02 | +| ^13.0.0 | Active | 2021-11-04 | 2022-06-02 | 2023-05-04 | | ^12.0.0 | LTS | 2021-05-12 | 2021-11-12 | 2022-11-12 | Angular versions v2 to v11 are no longer under support. diff --git a/aio/content/guide/update-to-latest-version.md b/aio/content/guide/update-to-latest-version.md index 63f30fd2d8b..706188170cc 100644 --- a/aio/content/guide/update-to-latest-version.md +++ b/aio/content/guide/update-to-latest-version.md @@ -1,143 +1,73 @@ # Update Angular -This guide contains information to update to Angular version 13. +This guide contains information to update to Angular version 14. ## Update Angular CLI applications -For step-by-step instructions on how to update to the latest Angular release and leverage the Angular automated migration tools, use the interactive update guide at [update.angular.io][AngularUpdateMain]. +For step-by-step instructions on how to update to the latest Angular release and leverage the Angular automated migration tools, use the interactive update guide at [update.angular.io](https://update.angular.io). -## Changes and deprecations in version 13 +## Changes and deprecations in version 14
-For information about the deprecation and removal practices of Angular, see [Angular Release Practices][AioGuideReleasesDeprecationPractices]. +For information about the deprecation and removal practices of Angular, see [Angular Release Practices](guide/releases#deprecation-practices).
-* **Removal of View Engine** +* **Strictly Typed Reactive Forms** - Requires all applications and libraries to build using Ivy. - See the [Upcoming improvements to Angular library distribution][AngularBlog76c02f782aa4] blog. + The Reactive Forms types `AbstractControl`, `FormControl`, `FormGroup`, and `FormArray` now support a generic parameter which allows for strict typing of the controls. An automatic migration will convert existing usages of these types to special `Untyped` aliases which preserve the existing behavior. -* **Modernization of the Angular Package Format \(APF\)** + The `initialValueIsDefault` option for `FormControl` construction has been deprecated in favor of the `nonNullable` option (which has identical behavior). This renaming aligns the `FormControl` constructor with other strictly typed APIs related to nullability. - Removed older output formats, including View Engine specific metadata. +* **`ComponentFactory` and `NgModuleFactory` cleanup** -* **Removal of IE11 Support** + Many APIs which use either `ComponentFactory` or `NgModuleFactory` have been deprecated and replaced with new APIs that use component or NgModule classes directly. - Removes all support for Microsoft Internet Explorer 11 \(IE11\). - See [Issue #41840][GithubAngularAngularIssues41840]. - -* **Testbed module teardown** - - Adds the option in `initTestEnvironment` to completely remove test environments from an application. - See the [Improving Angular tests by enabling Angular testing module teardown][DevThisIsAngularImprovingAngularTestsByEnablingAngularTestingModuleTeardown38kh] article. - -* **`$localize` tagged message strings** - - Adds documentation for the Angular `$localize` API and tagged message strings. - -* **Disk Cache** - - Enables the persistent build cache by default for all applications. - See [Issue #21545][GithubAngularAngularCliIssues21545]. - -### Breaking changes in Angular version 13 +### Breaking changes in Angular version 14 -| | Details | -|:--- |:--- | -| [**PR #43642**][GithubAngularAngularPull43642] | TypeScript versions older than `4.4.2` are no longer supported. | -| [**PR #43740**][GithubAngularAngularPull43740] | NodeJS versions older than `v12.20.0` are no longer supported. The Angular packages now use the NodeJS package exports feature with subpath patterns and requires a NodeJS version above `14.15.0` or `16.10.0`. | -| [PR #31187][GithubAngularAngularPull31187] | Previously, the default url serializer dropped everything after and including a question mark in query parameters. That is, for a navigation to `/path?q=hello?&other=123`, the query parameters parsed to just `{q: 'hello'}`. This is incorrect, because the URI spec allows for question mark characers in query data. This change now correctly parses the query parameters for `/path?q=hello?&other=123` as `{q: 'hello?', other: '123'}`. | -| [PR #41730][GithubAngularAngularPull41730] | The behavior of the `SpyLocation` used by the `RouterTestingModule` has changed to match the behavior of browsers. It no longer emits a `popstate` event when `Location.go` is called. In addition, `simulateHashChange` now triggers *both* a `hashchange` event and a `popstate` event. Tests that use `location.go` and expect the changes to be picked up by the `Router` should migrate to `simulateHashChange`. Each test is different in what it attempts to assert, so there is no single change that works for all tests. Each test that uses the `SpyLocation` to simulate changes in the browser URL should be evaluated on a case-by-case basis. | -| [PR #42952][GithubAngularAngularPull42952] | A new type called `FormControlStatus` has been introduced, which is a union of all possible status strings for form controls. `AbstractControl.status` has been narrowed from `string` to `FormControlStatus`, and `statusChanges` has been narrowed from `Observable` to `Observable`. Most applications should consume the new types seamlessly. Any breakage caused by this change is likely due to one of the following two problems:
  1. The app is comparing AbstractControl.status against a string which is not a valid status.
  2. The app is using `statusChanges` events as if they were something other than strings.
| -| [PR #43087][GithubAngularAngularPull43087] | Previously ,`null` and `undefined` inputs for `routerLink` were equivalent to empty string and there was no way to disable the navigation of the link. In addition, the `href` is changed from a property `HostBinding()` to an attribute binding \(`HostBinding('attr.href')`\). The effect of this change is that `DebugElement.properties['href']` now returns the `href` value returned by the native element which is the full URL rather than the internal value of the `RouterLink` `href` property. | -| [PR #43496][GithubAngularAngularPull43496] | The router no longer replaces the browser URL when a new navigation cancels an ongoing navigation. The replacement of the browser URL often caused URL flicker and was only in place to support some AngularJS hybrid applications. Hybrid applications which rely on the presence of `navigationId` on each initial navigation handled by the Angular router should instead subscribe to `NavigationCancel` events and manually perform the `location.replaceState` to add `navigationId` to the Router state.
In addition, tests that assert `urlChanges` on the `SpyLocation` should be adjusted to account for the lack of the `replaceState` trigger. | -| [PR #43507][GithubAngularAngularPull43507] | The `WrappedValue` class is no longer imported from `@angular/core`. This change may result in compile errors or failures at runtime, if outdated libraries are used that rely on `WrappedValue`. Dependancy on `WrappedValue` should be removed since no replacement is available. | -| [PR #43591][GithubAngularAngularPull43591] | It is no longer possible to use `Route.loadChildren` with a string value. The following supporting classes were removed from `@angular/core`:
  • NgModuleFactoryLoader
  • SystemJsNgModuleFactoryLoader
The `@angular/router` package no longer exports the following symbols:
  • SpyNgModuleFactoryLoader
  • DeprecatedLoadChildren
The signature of the `setupTestingRouter` function from `@angular/core/testing` was changed to drop the `NgModuleFactoryLoader` parameter, since an value for that parameter can not be created. | -| [PR #43668][GithubAngularAngularPull43668] | The return type of `SwUpdate#activateUpdate` and `SwUpdate#checkForUpdate` changed to `Promise`.
Although unlikely, this change may cause TypeScript type-checking to fail in some cases. If necessary, update your types to account for the new return type. | -| [PR #43791][GithubAngularAngularPull43791] | When storing and retrieving a `DetachedRouteHandle`, the Router traverses the `Route` children in order to correctly allow storing a parent route when there are several possible child `Route` configs that can be stored. This allows a `RouteReuseStrategy` to store a parent `Route` *and* a child, while preserving the ability to change the child route while restoring the parent. Some implementations of `RouteReuseStrategy` will need to be updated to correctly store and retrieve the `DetachedRouteHandle` of descendants as well as the stored parent `ActivatedRouteSnapshot`.
Previously, the `Router` would only store the parent, making it impossible to change descendant paths when a parent stored was retrieved. See [**Issue #20114**][GithubAngularAngularIssues20114] | -| [Issue #22159][GithubAngularAngularCliIssues22159] | Scripts that load via dynamic `import()` are now treated as ES modules \(meaning they must be strict mode-compatible\). | +| | Details | +|:--- |:--- | +| [**PR #45729**](https://github.com/angular/angular/pull/45729) | `initialNavigation: 'enabled'` was deprecated in v11 and is replaced by `initialNavigation: 'enabledBlocking'.`. | +| [**PR #42803**](https://github.com/angular/angular/pull/42803) | Forms `email` input coercion: forms `email` input value will be considered as true if it is defined with any value rather than false and 'false'. | +| [**PR #33729**](https://github.com/angular/angular/pull/33729) | Objects with a length key set to zero will no longer validate as empty. This is technically a breaking change, since objects with a key `length` and value `0` will no longer validate as empty. This is a very minor change, and any reliance on this behavior is probably a bug anyway. | +| [**PR #44921**](https://github.com/angular/angular/pull/44921) | Do not run change detection when loading Hammer. This change may cause unit tests that are implicitly asserting on the specific number or the ordering of change detections to fail. | +| [**PR #23020**](https://github.com/angular/angular/pull/23020) | Parameter types of `TransferState` usage have increased type safety, and this may reveal existing problematic calls. | +| [**PR #43863**](https://github.com/angular/angular/pull/43863) | The type of `Navigation#initialUrl` has been narrowed to `UrlTree` from `string|UrlTree`, to reflect reality. | +| [**PR #45114**](https://github.com/angular/angular/pull/45114) | The `AnimationDriver.getParentElement` method has become required, so any implementors of this interface are now required to provide an implementation for this method. | +| [**PR #45176**](https://github.com/angular/angular/pull/45176) | The type of `Route.pathMatch` is now more strict. Places that use `pathMatch` will likely need to be updated to have an explicit `Route`/`Routes` type so that TypeScript does not infer the type as `string`. | +| [**PR #44573**](https://github.com/angular/angular/pull/44573) | The router now takes only the first emitted value by the resolvers and then proceeds with navigation. This is now consistent with `Observables` returned by other guards: only the first value is used.| +| [**PR #45394**](https://github.com/angular/angular/pull/45394) | TypeScript versions older than `4.6.0` are no longer supported. | +| [**PR #45210**](https://github.com/angular/angular/pull/45210) | `HttpClient` will throw an error when headers are set on a JSONP request. | +| [**PR #43834**](https://github.com/angular/angular/pull/43834) | Reactive form types such as `FormControl` and `FormGroup` now have generic type parameters and infer stricter types. A migration will convert existing usages to new `Untyped`-prefixed aliases which preserve the existing behavior. | +| [**PR #45487**](https://github.com/angular/angular/pull/45487) | The deprecated `aotSummaries` field in the `TestBed` configuration has been removed. | +| [**PR #45648**](https://github.com/angular/angular/pull/45648) | A new required class member `LocationStrategy#getState` has been added, that any implementers of this interface will need to provide. | +| [**PR #45735**](https://github.com/angular/angular/pull/45735) | When a guard returns a `UrlTree`, the router would previously schedule the redirect navigation within a `setTimeout`. This timeout is now removed, which can result in test failures due to incorrectly written tests. | ### New deprecations -| Removed | Replacement | Details | -|:--- |:--- |:--- | -| [`getModuleFactory`][AioApiCoreGetmodulefactory] | [`getNgModuleById`][AioApiCoreGetngmodulebyid] | | -| Factory-based signature of [`ApplicationRef.bootstrap`][AioApiCoreApplicationrefBootstrap] | Type-based signature of [`ApplicationRef.bootstrap`][AioApiCoreApplicationrefBootstrap] | Use the Type-based signature in place of the Factory-based signature. | -| [`PlatformRef.bootstrapModuleFactory`][AioApiCorePlatformrefBootstrapmodulefactory] | [`PlatformRef.bootstrapModule`][AioApiCorePlatformrefBootstrapmodule] | | -| [`ModuleWithComponentFactories`][AioApiCoreModulewithcomponentfactories] | none | | -| [`Compiler`][AioApiCoreCompiler] | none | | -| [`CompilerFactory`][AioApiCoreCompilerfactory] | none | | -| [`NgModuleFactory`][AioApiCoreNgmodulefactory] | Non-factory based framework APIs | Use the non-factory based framework APIs, such as [`PlatformRef.bootstrapModule`][AioApiCorePlatformrefBootstrapmodule] and [`createNgModuleRef`][AioApiCoreCreatengmoduleref]. | -| Factory-based signature of [`ViewContainerRef.createComponent`][AioApiCoreViewcontainerrefCreatecomponent] | Type-based signature of [`ViewContainerRef.createComponent`][AioApiCoreViewcontainerrefCreatecomponent] | Use the Type-based signature in place of the Factory-based signature. | -| `aotSummaries` parameter of the [`TestBed.initTestEnvironment` method][AioApiCoreTestingTestbedInittestenvironment] | none | | -| `aotSummaries` parameter of the [`TestModuleMetadata` type][AioApiCoreTestingTestmodulemetadata] | none | | -| [`renderModuleFactory`][AioApiPlatformServerRendermodulefactory] | [`renderModule`][AioApiPlatformServerRendermodule] | | -| [`SwUpdate#activated`][AioApiServiceWorkerSwupdateActivated] | [`SwUpdate#activateUpdate()`][AioApiServiceWorkerSwupdateActivateupdate] | Use the return value of [`SwUpdate#activateUpdate()`][AioApiServiceWorkerSwupdateActivateupdate]. | -| [`SwUpdate#available`][AioApiServiceWorkerSwupdateAvailable] | [`SwUpdate#versionUpdates`][AioApiServiceWorkerSwupdateVersionupdates] | | -| `bind-input="value"` | `[input]="value"` | | -| `bind-animate-trigger="value"` | `[@trigger]="value"` | | -| `on-click="onClick()"` | `(click)="onClick()"` | | -| `bindon-ngModel="value"` | `[(ngModel)]="value"` | | -| `ref-templateRef` | `#templateRef` | | +| Removed | Replacement | Details | +| :--- | :--- |:--- | +| [`FormControlOptions#initialValueIsDefault`](api/forms/FormControlOptions#initialValueIsDefault) | [`FormControlOptions#nonNullable`](api/forms/FormControlOptions#nonNullable) | The `initialValueIsDefault` option for `FormControl` construction has been deprecated in favor of the `nonNullable` option (which has identical behavior). This renaming aligns the `FormControl` constructor with other strictly typed APIs related to nullability. | +| `ErrorEvent`s passed to [`TestRequest#error`](api/common/http/testing/TestRequest#error] | `ProgressEvent` | Http requests never emit an `ErrorEvent`. Use a `ProgressEvent` instead. | +| [`getModuleFactory`](api/core/getModuleFactory) | `getNgModuleById` | `NgModuleFactory` itself is deprecated. | +| [`ModuleWithComponentFactories`](api/core/ModuleWithComponentFactories) | n/a | Ivy JIT mode doesn't require accessing this symbol. See [JIT API changes due to ViewEngine deprecation](guide/deprecations#jit-api-changes) for additional context. | +| [`Compiler`](api/core/Compiler) | n/a | Ivy JIT mode doesn't require accessing this symbol. See [JIT API changes due to ViewEngine deprecation](guide/deprecations#jit-api-changes) for additional context. | +| [`CompilerFactory`](api/core/CompilerFactory) | n/a | Ivy JIT mode doesn't require accessing this symbol. See [JIT API changes due to ViewEngine deprecation](guide/deprecations#jit-api-changes) for additional context. | +| [`NgModuleFactory`](api/core/NgModuleFactory) | n/a | This class was mostly used as a part of ViewEngine-based JIT API and is no longer needed in Ivy JIT mode. See [JIT API changes due to ViewEngine deprecation](guide/deprecations#jit-api-changes) for additional context. Angular provides APIs that accept NgModule classes directly (such as [`PlatformRef.bootstrapModule`](api/core/PlatformRef#bootstrapModule) and [`createNgModuleRef`](api/core/createNgModuleRef)), consider switching to those APIs instead of using factory-based ones. | +| [`ComponentFactory`](api/core/ComponentFactory) | n/a | Angular no longer requires `ComponentFactory`s. Other APIs allow Component classes to be used directly. | +| [`ComponentFactoryResolver`](api/core/ComponentFactoryResolver) | n/a | Angular no longer requires `ComponentFactory`s. Other APIs allow Component classes to be used directly. | +| `useJit` and `missingTranslation` in [`CompilerOptions`](api/core/CompilerOptions) | n/a | Ivy JIT mode does not support these options. See [JIT API changes due to ViewEngine deprecation](guide/deprecations#jit-api-changes) for additional context. | +| [`JitCompilerFactory`](api/platform-browser-dynamic/JitCompilerFactory) | n/a | Ivy JIT mode doesn't require accessing this symbol. See [JIT API changes due to ViewEngine deprecation](guide/deprecations#jit-api-changes) for additional context. | +| [`RESOURCE_CACHE_PROVIDER`](api/platform-browser-dynamic/RESOURCE_CACHE_PROVIDER) | n/a | This was previously necessary in some cases to test AOT-compiled components with View Engine, but is no longer since Ivy. | +| `relativeLinkResolution` in the Router [`ExtraOptions`](api/router/ExtraOptions) | Switch to the default of `'corrected'` link resolution | This option was introduced to fix a bug with link resolution in a backwards compatible way. Existing apps which still depend on the buggy legacy behavior should switch to the new corrected behavior and stop passing this flag. | +| `resolver` argument in [`RouterOutletContract.activateWith`](api/router/RouterOutletContract#activateWith) | n/a | `ComponentFactory` and `ComponentFactoryResolver` afre deprecated, and passing an argument for a resolver to retrieve a `ComponentFactory` is no longer required. | +| [`OutletContext#resolver](api/router/OutletContext#resolver) | n/a | `ComponentFactory` and `ComponentFactoryResolver` are deprecated, and using a resolver to retrieve a `ComponentFactory` is no longer required. | +| [`SwUpdate#activated`](api/service-worker/SwUpdate#activated) | Return value of [`SwUpdate#activateUpdate`](api/service-worker/SwUpdate#activateUpdate) | The `activated` property is deprecated. Existing usages can migrate to [`SwUpdate#activateUpdate`](api/service-worker/SwUpdate#activateUpdate). | +| [`SwUpdate#available`](api/service-worker/SwUpdate#available) | [`SwUpdate#versionUpdates`](api/service-worker/SwUpdate#versionUpdates) | The behavior of [`SwUpdate#available`](api/service-worker/SwUpdate#available) can be achieved by filtering for the [`VersionReadyEvent`](api/service-worker/VersionReadyEvent) from [`SwUpdate#versionUpdates`](api/service-worker/SwUpdate#versionUpdates) - - -[AioApiCoreApplicationrefBootstrap]: api/core/ApplicationRef#bootstrap "bootstrap - ApplicationRef | Core - API | Angular" -[AioApiCoreCompiler]: api/core/Compiler "Compiler | Core - API | Angular" -[AioApiCoreCompilerfactory]: api/core/CompilerFactory "CompilerFactory | Core - API | Angular" -[AioApiCoreCreatengmoduleref]: api/core/createNgModuleRef "createNgModuleRef | Core - API | Angular" -[AioApiCoreGetmodulefactory]: api/core/getModuleFactory "getModuleFactory | Core - API | Angular" -[AioApiCoreGetngmodulebyid]: api/core/getNgModuleById "getNgModuleById | Core - API | Angular" -[AioApiCoreModulewithcomponentfactories]: api/core/ModuleWithComponentFactories "ModuleWithComponentFactories | Core - API | Angular" -[AioApiCoreNgmodulefactory]: api/core/NgModuleFactory "NgModuleFactory | Core - API | Angular" -[AioApiCorePlatformrefBootstrapmodulefactory]: api/core/PlatformRef#bootstrapModuleFactory "bootstrapModuleFactory - PlatformRef | Core - API | Angular" -[AioApiCorePlatformrefBootstrapmodule]: api/core/PlatformRef#bootstrapModule "bootstrapModule - PlatformRef | Core - API | Angular" -[AioApiCoreTestingTestbedInittestenvironment]: api/core/testing/TestBed#inittestenvironment "inittestenvironment - TestBed | Testing - Core - API | Angular" -[AioApiCoreTestingTestmodulemetadata]: api/core/testing/TestModuleMetadata "TestModuleMetadata | Testing - Core - API | Angular" -[AioApiCoreViewcontainerrefCreatecomponent]: api/core/ViewContainerRef#createComponent "createComponent - ViewContainerRef | Core - API | Angular" - -[AioApiPlatformServerRendermodulefactory]: api/platform-server/renderModuleFactory "renderModuleFactory | Platform server - API | Angular" -[AioApiPlatformServerRendermodule]: api/platform-server/renderModule "renderModule | Platform server - API | Angular" - -[AioApiServiceWorkerSwupdateActivated]: api/service-worker/SwUpdate#activated "activated - SwUpdate | Service worker - API | Angular" -[AioApiServiceWorkerSwupdateActivateupdate]: api/service-worker/SwUpdate#activateUpdate "activateUpdate - SwUpdate | Service worker - API | Angular" -[AioApiServiceWorkerSwupdateAvailable]: api/service-worker/SwUpdate#available "available - SwUpdate | Service worker - API | Angular" -[AioApiServiceWorkerSwupdateVersionupdates]: api/service-worker/SwUpdate#versionUpdates "versionUpdates - SwUpdate | Service worker - API | Angular" - -[AioGuideReleasesDeprecationPractices]: guide/releases#deprecation-practices "Deprecation practices - Angular versioning and releases | Angular" - - - -[AngularBlog76c02f782aa4]: https://blog.angular.io/76c02f782aa4 "Upcoming improvements to Angular library distribution | Angular Blog" - -[AngularUpdateMain]: https://update.angular.io " Angular Update Guide" - -[DevThisIsAngularImprovingAngularTestsByEnablingAngularTestingModuleTeardown38kh]: https://dev.to/this-is-angular/improving-angular-tests-by-enabling-angular-testing-module-teardown-38kh "Improving Angular tests by enabling Angular testing module teardown | This is Angular | DEV Community" - -[GithubAngularAngularIssues41840]: https://github.com/angular/angular/issues/41840 "RFC: Internet Explorer 11 support deprecation and removal #41840 | angular/angular | GitHub" - -[GithubAngularAngularPull31187]: https://github.com/angular/angular/pull/31187 "fix(router): Allow question marks in query param values #31187 | angular/angular | GitHub" -[GithubAngularAngularPull41730]: https://github.com/angular/angular/pull/41730 "fix(common): synchronise location mock behavior with the navigators #41730 | angular/angular | GitHub" -[GithubAngularAngularPull42952]: https://github.com/angular/angular/pull/42952 "feat(forms): Give form statuses a more specific type #42952 | angular/angular | GitHub" -[GithubAngularAngularPull43087]: https://github.com/angular/angular/pull/43087 "fix(router): null/undefined routerLink should disable navigation #43087 | angular/angular | GitHub" -[GithubAngularAngularPull43496]: https://github.com/angular/angular/pull/43496 "fix(router): Prevent URL flicker when new navigations cancel ongoing … #43496 | angular/angular | GitHub" -[GithubAngularAngularPull43507]: https://github.com/angular/angular/pull/43507 "perf(core): remove support for the deprecated WrappedValue #43507 | angular/angular | GitHub" -[GithubAngularAngularPull43591]: https://github.com/angular/angular/pull/43591 "refactor(router): remove support for loadChildren string syntax #43591 | angular/angular | GitHub" -[GithubAngularAngularPull43642]: https://github.com/angular/angular/pull/43642 "feat(core): drop support for TypeScript 4.2 and 4.3 #43642 | angular/angular | GitHub" -[GithubAngularAngularPull43668]: https://github.com/angular/angular/pull/43668 "feat(service-worker): improve ergonomics of the SwUpdate APIs #43668 | angular/angular | GitHub" -[GithubAngularAngularPull43740]: https://github.com/angular/angular/pull/43740 "feat(bazel): expose esm2020 and es2020 conditions in APF package exports #43740 | angular/angular | GitHub" -[GithubAngularAngularPull43791]: https://github.com/angular/angular/pull/43791 "fix(router): reuse route strategy fix #43791 | angular/angular | GitHub" - -[GithubAngularAngularCliIssues21545]: https://github.com/angular/angular-cli/issues/21545 "[RFC] Persistent build cache by default #21545 | angular/angular-cli | GitHub" -[GithubAngularAngularCliIssues22159]: https://github.com/angular/angular-cli/issues/22159 "Script imports are modules by default #22159 | angular/angular-cli | GitHub" -[GithubAngularAngularIssues20114]: https://github.com/angular/angular/issues/20114 "RouteReuseStrategy impossible to store/retrieve siblings AND ALSO a non-sibling #20114 | angular/angular | GitHub" - - - -@reviewed 2022-02-28 +@reviewed 2022-05-31