Angular: 18.0.0-next.2 Release

Release date:
March 28, 2024
Previous version:
18.0.0-next.1 (released March 21, 2024)
Magnitude:
6,680 Diff Delta
Contributors:
19 total committers
Data confidence:
Commits:

Top Contributors in 18.0.0-next.2

crisbeto
devversion
atscott
pkozlowski-opensource
alan-agius4
dylhunn
AndrewKushnir
clydin
vladboisa
blathers16

Directory Browser for 18.0.0-next.2

All files are compared to previous version, 18.0.0-next.1. Click here to browse diffs between other versions.

Loading File Browser...

Release Notes Published

<a name="18.0.0-next.2"></a>

18.0.0-next.2 (2024-03-28)

compiler

| Commit | Description | | -- | -- | | fix - 7fc7f3f05f | capture all control flow branches for content projection in if blocks (#54921) | | fix - a369f43fbd | capture switch block cases for content projection (#54921) | | fix - eb625d3783 | declare for loop aliases in addition to new name (#54942) | | fix - bfd0bd574e | invoke method-based tracking function with context (#54960) | | fix - e1650e3b13 | throw error if item name and context variables conflict (#55045) |

compiler-cli

| Commit | Description | | -- | -- | | feat - 5bd188a394 | add partial compilation support for deferred blocks (#54908) | | feat - b02b31a915 | drop support for TypeScript older than 5.4 (#54961) | | fix - 78188e877a | add diagnostic if initializer API is used outside of an initializer (#54993) | | fix - 694ba79cbf | report cases where initializer APIs are used in a non-directive class (#54993) | | fix - 6219341d26 | report errors when initializer APIs are used on private fields (#54981) |

core

| Commit | Description | | -- | -- | | feat - a600a39d0c | add support for fallback content in ng-content (#54854) | | fix - 658cf8c384 | ComponentFixture stability should match ApplicationRef (#54949) | | fix - 2fc11eae9e | account for re-projected ng-content elements with fallback content (#54854) | | fix - 1c0ec56c46 | correctly project single-root content inside control flow (#54921) | | fix - 86a359b399 | establish proper injector resolution order for @defer blocks (#55079) | | fix - e02bcf89cf | Fix clearing of pending task in zoneless cleanup implementation (#55074) |

http

| Commit | Description | | -- | -- | | fix - cf73983fdc | include transferCache when cloning HttpRequest (#54939) | | fix - 13554f9637 | manage different body types for caching POST requests (#54980) |

language-service

| Commit | Description | | -- | -- | | fix - 6d1b82df32 | allow external projects to use provided compiler options (#55035) | | fix - 4166dfc1b6 | prevent underlying TS Service from handling template files (#55003) |

migrations

| Commit | Description | | -- | -- | | fix - 63688714ae | account for variables in imports initializer (#55081) |

router

| Commit | Description | | -- | -- | | fix - 60f1d681e0 | preserve replaceUrl when returning a urlTree from CanActivate (#54042) | | fix - eae75ff3f9 | RouterLinkActive will always remove active classes when links are not active (#54982) |

Breaking Changes

compiler-cli

  • * Angular no longer supports TypeScript versions older than 5.4. ### core
  • ComponentFixture.whenStable now matches the ApplicationRef.isStable observable. Prior to this change, stability of the fixture did not include everything that was considered in ApplicationRef. whenStable of the fixture will now include unfinished router navigations and unfinished HttpClient requests. This will cause tests that await the whenStable promise to time out when there are incomplete requests. To fix this, remove the whenStable, instead wait for another condition, or ensure HttpTestingController mocks responses for all requests. Try adding HttpTestingController.verify() before your await fixture.whenStable to identify the open requests. Also, make sure your tests wait for the stability promise. We found many examples of tests that did not, meaning the expectations did not execute within the test body.

In addition, ComponentFixture.isStable would synchronously switch to true in some scenarios but will now always be asynchronous.

router

  • When a a guard returns a UrlTree as a redirect, the redirecting navigation will now use replaceUrl if the initial navigation was also using the replaceUrl option. If this is not desirable, the redirect can configure new NavigationBehaviorOptions by returning a RedirectCommand with the desired options instead of UrlTree.