This PR contains the following updates:
Release Notes
angular/angular (@angular/compiler)
Compare Source
Compare Source
common
compiler-cli
Commit |
Type |
Description |
901c1e1a7f |
fix |
correctly get the type of nested function call expressions (#57010) |
core
Commit |
Type |
Description |
2f347ef8fc |
fix |
provide flag to opt into manual cleanup for after render hooks (#57917) |
http
Commit |
Type |
Description |
ca637fe6a9 |
fix |
cleanup JSONP script listeners once loading completed (#57877) |
migrations
Commit |
Type |
Description |
b9d846dad7 |
fix |
delete constructor if it only has super call (#58013) |
upgrade
Compare Source
Compare Source
compiler-cli
Commit |
Type |
Description |
e685ed883a |
fix |
extended diagnostics not validating ICUs (#57845) |
core
Commit |
Type |
Description |
76709d5d6e |
fix |
Handle @let declaration with array when preparingForHydration (#57816) |
migrations
Commit |
Type |
Description |
5c866942a1 |
fix |
account for explicit standalone: false in migration (#57803) |
Compare Source
compiler
Commit |
Type |
Description |
b619d6987e |
fix |
produce less noisy errors when parsing control flow (#57711) |
migrations
Commit |
Type |
Description |
9895e4492f |
fix |
replace leftover modules with their exports during pruning (#57684) |
Compare Source
http
Commit |
Type |
Description |
de68e049e4 |
fix |
Dynamicaly call the global fetch implementation (#57531) |
Compare Source
core
http
Commit |
Type |
Description |
5d2e243c76a |
fix |
Dynamicaly call the global fetch implementation (#57531) |
router
Commit |
Type |
Description |
804925b1149 |
fix |
Do not unnecessarily run matcher twice on route matching (#57530) |
upgrade
Compare Source
core
Commit |
Type |
Description |
9de30a7b1c |
fix |
Allow zoneless scheduler to run inside fakeAsync (#56932) |
286012fb89 |
fix |
handle hydration of components that project content conditionally (#57383) |
migrations
Compare Source
Breaking Changes
zone.js
-
fakeAsync
will now flush pending timers at the end of
the given function by default. To opt-out of this, you can use {flush: false}
in options parameter of fakeAsync
compiler
Commit |
Type |
Description |
c8e2885136 |
feat |
Add extended diagnostic to warn when there are uncalled functions in event bindings (#56295) (#56295) |
compiler-cli
core
language-service
migrations
router
Commit |
Type |
Description |
6c76c91e15 |
feat |
Add defaultQueryParamsHandling to router configuration (#57198) |
Compare Source
compiler-cli
Commit |
Type |
Description |
5401332b0e |
fix |
generate valid TS 5.6 type checking code (#57303) |
core
Commit |
Type |
Description |
e39b22a932 |
fix |
Account for addEventListener to be passed a Window or Document. (#57282) |
db65bc25ca |
fix |
Account for addEventListener to be passed a Window or Document. (#57354) |
0e024ecc27 |
fix |
complete post-hydration cleanup in components that use ViewContainerRef (#57300) |
822db64b93 |
fix |
skip hydration for i18n nodes that were not projected (#57356) |
810f76f574 |
fix |
take skip hydration flag into account while hydrating i18n blocks (#57299) |
Compare Source
compiler
Commit |
Type |
Description |
6a99f83659 |
fix |
reduce chance of conflicts between generated factory and local variables (#57181) |
compiler-cli
Commit |
Type |
Description |
afb05ff1cb |
fix |
support JIT transforms before other transforms modifying classes (#57262) |
bae54a1621 |
perf |
improve performance of interpolatedSignalNotInvoked extended diagnostic (#57291) |
language-service
Commit |
Type |
Description |
6ac209c24f |
fix |
avoid generating TS suggestion diagnostics for templates (#56241) |
Compare Source
compiler
Commit |
Type |
Description |
31dea066d6 |
fix |
reduce chance of conflicts between generated factory and local variables (#57181) |
compiler-cli
core
Commit |
Type |
Description |
f7ab04018e |
fix |
errors during ApplicationRef.tick should be rethrown for zoneless tests (#56993) |
eaa83f9d27 |
fix |
hydration error in some let declaration setups (#57173) |
Compare Source
compiler
Commit |
Type |
Description |
463945003d |
fix |
limit the number of chained instructions (#57069) |
compiler-cli
Commit |
Type |
Description |
e904f34020 |
fix |
add warning for unused let declarations (#57033) |
core
Compare Source
common
Commit |
Type |
Description |
a1cb9dfc0d |
fix |
Don't run preconnect assertion on the server. (#56213) |
compiler
Commit |
Type |
Description |
daf0317bdc |
fix |
JIT mode incorrectly interpreting host directive configuration in partial compilation (#57002) |
d7dca6dbb6 |
fix |
use strict equality for 'code' comparison (#56944) |
compiler-cli
Commit |
Type |
Description |
c94a897248 |
fix |
avoid emitting references to typecheck files in TS 5.4 (#56961) |
core
Commit |
Type |
Description |
5682527d94 |
fix |
not all callbacks running when registered at the same time (#56981) |
migrations
Compare Source
common
compiler
Commit |
Type |
Description |
fd6cd0422d |
feat |
Add extended diagnostic to warn when there are uncalled functions in event bindings (#56295) |
341a116d61 |
fix |
allow more characters in let declaration name (#56764) |
2a1291e942 |
fix |
give precedence to local let declarations over parent ones (#56752) |
compiler-cli
Commit |
Type |
Description |
66e582551e |
fix |
avoid duplicate diagnostics for let declarations read before definition (#56843) |
4d18c5bfd5 |
fix |
flag all conflicts between let declarations and local symbols (#56752) |
9e21582456 |
fix |
Show template syntax errors in local compilation modified (#55855) |
5996502921 |
fix |
type check let declarations nested inside nodes (#56752) |
cdebf751e4 |
fix |
used before declared diagnostic not firing for control flow blocks (#56843) |
core
forms
Commit |
Type |
Description |
00bde8b1c2 |
fix |
Make NgControlStatus host bindings OnPush compatible (#55720) |
http
Commit |
Type |
Description |
cc21989132 |
fix |
Make Content-Type header case insensitive (#56541) |
language-service
router
Commit |
Type |
Description |
a13f5da773 |
feat |
Allow UrlTree as an input to routerLink (#56265) |
1d3a7529b4 |
feat |
Set a different browser URL from the one for route matching (#53318) |
Compare Source
compiler
http
Commit |
Type |
Description |
95d7076d1a |
perf |
execute fetch outside of Angular zone (#56820) |
migrations
Commit |
Type |
Description |
d6fff45e73 |
fix |
Fix cf migration let condition semicolon order (#56913) |
Compare Source
common
Commit |
Type |
Description |
a55719f55e |
fix |
Don't run preconnect assertion on the server. (#56213) |
core
Commit |
Type |
Description |
4909844805 |
fix |
establish proper defer injector hierarchy for components attached to ApplicationRef (#56763) |
fec5b80aaf |
fix |
support injection of object with null constructor. (#56553) |
router
Commit |
Type |
Description |
b7d3ecc873 |
fix |
routes should not get stale providers (#56798) |
Compare Source
core
Compare Source
compiler-cli
Commit |
Type |
Description |
ec0d1bf6f3 |
fix |
insert constant statements after the first group of imports (#56431) |
core
Commit |
Type |
Description |
83ffa94783 |
fix |
do not activate event replay when no events are registered (#56509) |
router
Commit |
Type |
Description |
5578681da2 |
fix |
Delay the view transition to ensure renders in microtasks complete (#56494) |
Compare Source
benchpress
Commit |
Type |
Description |
ebf00aa0659 |
fix |
adjust supported browser names for headless chrome (#56360) |
core
Commit |
Type |
Description |
dbd0fa00f8c |
fix |
async EventEmitter should contribute to app stability (#56308) |
625ca3e2b3f |
fix |
signals should be tracked when embeddedViewRef.detectChanges is called (#55719) |
localize
Commit |
Type |
Description |
d6dd3dbdb09 |
fix |
add @angular/localize/init as polyfill in angular.json (#56300) |
migrations
Compare Source
core
Commit |
Type |
Description |
78cf9bfc0e |
fix |
Do not migrate HttpClientModule imports on components. (#56067) |
616cdef474 |
fix |
don't coerce all producers to consumers on liveness change (#56140) |
2a440e1064 |
fix |
Fix shouldPreventDefaultBeforeDispatching bug (#56188) |
290a47d842 |
fix |
handle missing withI18nSupport() call for components that use i18n blocks (#56175) |
migrations
Commit |
Type |
Description |
b70b80ba55 |
fix |
do not generate aliased variables with the same name (#56154) |
Compare Source
compiler
Commit |
Type |
Description |
419ffa2026 |
fix |
optimize track function that only passes $index (#55872) |
compiler-cli
Commit |
Type |
Description |
4c7efc005a |
fix |
interpolatedSignalNotInvoked diagnostic for class, style, attribute and animation bindings (#55969) |
core
migrations
Compare Source
Blog post "Angular v18 is now available".
Breaking Changes
animations
- Deprecated
matchesElement
method has been removed from AnimationDriver
as it is unused.
common
- The deprecated
isPlatformWorkerUi
and isPlatformWorkerApp
have been removed without replacement, as they serve no purpose since the removal of the WebWorker platform.
compiler
- Angular only supports writable expressions inside of two-way bindings.
compiler-cli
-
- Angular no longer supports TypeScript versions older than 5.4.
core
-
OnPush
views at the root of the application need to
be marked dirty for their host bindings to refresh. Previously, the host
bindings were refreshed for all root views without respecting the
OnPush
change detection strategy.
-
OnPush
views at the root of the application need to
be marked dirty for their host bindings to refresh. Previously, the host
bindings were refreshed for all root views without respecting the
OnPush
change detection strategy.
-
The ComponentFixture
autoDetect
feature will no
longer refresh the component's host view when the component is OnPush
and not marked dirty. This exposes existing issues in components which
claim to be OnPush
but do not correctly call markForCheck
when they
need to be refreshed. If this change causes test failures, the easiest
fix is to change the component to ChangeDetectionStrategy.Default
.
-
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.
-
Angular will ensure change detection runs, even when the state update originates from
outside the zone, tests may observe additional rounds of change
detection compared to the previous behavior.
This change will be more likely to impact existing unit tests.
This should usually be seen as more correct and the test should be updated,
but in cases where it is too much effort to debug, the test can revert to the old behavior by adding
provideZoneChangeDetection({schedulingMode: NgZoneSchedulingMode.NgZoneOnly})
to the TestBed
providers.
Similarly, applications which may want to update state outside the zone
and not trigger change detection can add
provideZoneChangeDetection({schedulingMode: NgZoneSchedulingMode.NgZoneOnly})
to the providers in bootstrapApplication
or add
schedulingMode: NgZoneSchedulingMode.NgZoneOnly
to the
BootstrapOptions
of bootstrapModule
.
-
When Angular runs change detection, it will continue to
refresh any views attached to ApplicationRef
that are still marked for
check after one round completes. In rare cases, this can result in infinite
loops when certain patterns continue to mark views for check using
ChangeDetectorRef.detectChanges
. This will be surfaced as a runtime
error with the NG0103
code.
-
async
has been removed, use waitForAsync
instead.
-
The ComponentFixture.autoDetect
feature now executes
change detection for the fixture within ApplicationRef.tick
. This more
closely matches the behavior of how a component would refresh in
production. The order of component refresh in tests may be slightly
affected as a result, especially when dealing with additional components
attached to the application, such as dialogs. Tests sensitive to this
type of change (such as screenshot tests) may need to be updated.
Concretely, this change means that the component will refresh before
additional views attached to ApplicationRef
(i.e. dialog components).
Prior to this change, the fixture component would refresh after other
views attached to the application.
-
The exact timing of change detection execution when
using event or run coalescing with NgZone
is now the first of either
setTimeout
or requestAnimationFrame
. Code which relies on this
timing (usually by accident) will need to be adjusted. If a callback
needs to execute after change detection, we recommend afterNextRender
instead of something like setTimeout
.
-
Newly created and views marked for check and reattached
during change detection are now guaranteed to be refreshed in that same
change detection cycle. Previously, if they were attached at a location
in the view tree that was already checked, they would either throw
ExpressionChangedAfterItHasBeenCheckedError
or not be refreshed until
some future round of change detection. In rare circumstances, this
correction can cause issues. We identified one instance that relied on
the previous behavior by reading a value on initialization which was
queued to be updated in a microtask instead of being available in the
current change detection round. The component only read this value during
initialization and did not read it again after the microtask updated it.
-
Testability methods increasePendingRequestCount
,
decreasePendingRequestCount
and getPendingRequestCount
have been
removed. This information is tracked with zones.
http
-
By default we now prevent caching of HTTP requests that require authorization . To opt-out from this behaviour use the includeRequestsWithAuthHeaders
option in withHttpTransferCache
.
Example:
withHttpTransferCache({
includeRequestsWithAuthHeaders: true,
})
platform-browser
- Deprecated
StateKey
, TransferState
and makeStateKey
have been removed from @angular/platform-browser
, use the same APIs from @angular/core
.
platform-browser-dynamic
- No longer used
RESOURCE_CACHE_PROVIDER
APIs have been removed.
platform-server
-
deprecated platformDynamicServer
has been removed. Add an import @​angular/compiler
and replace the usage with platformServer
-
deprecated ServerTransferStateModule
has been removed. TransferState
can be use without providing this module.
-
deprecated useAbsoluteUrl
and baseUrl
been removed from PlatformConfig
. Provide and absolute url
instead.
-
Legacy handling or Node.js URL parsing has been removed from ServerPlatformLocation
.
The main differences are;
-
pathname
is always suffixed with a /
.
-
port
is empty when http:
protocol and port in url is 80
-
port
is empty when https:
protocol and port in url is 443
router
- Guards can now return
RedirectCommand
for redirects
in addition to UrlTree
. Code which expects only boolean
or UrlTree
values in Route
types will need to be adjusted.
- This change allows
Route.redirectTo
to be a function
in addition to the previous string. Code which expects redirectTo
to
only be a string on Route
objects will need to be adjusted.
- 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
.
- Providers available to the routed components always
come from the injector heirarchy of the routes and never inherit from
the
RouterOutlet
. This means that providers available only to the
component that defines the RouterOutlet
will no longer be available to
route components in any circumstances. This was already the case
whenever routes defined providers, either through lazy loading an
NgModule
or through explicit providers
on the route config.
- Providers available to the routed components always
come from the injector heirarchy of the routes and never inherit from
the
RouterOutlet
. This means that providers available only to the
component that defines the RouterOutlet
will no longer be available to
route components in any circumstances. This was already the case
whenever routes defined providers, either through lazy loading an
NgModule
or through explicit providers
on the route config.
Deprecations
common
-
getCurrencySymbol
, getLocaleCurrencyCode
, getLocaleCurrencyName
, getLocaleCurrencySymbol
, getLocaleDateFormat
, getLocaleDateTimeFormat
, getLocaleDayNames
, getLocaleDayPeriods
, getLocaleDirection
, getLocaleEraNames
, getLocaleExtraDayPeriodRules
, getLocaleExtraDayPeriods
, getLocaleFirstDayOfWeek
, getLocaleId
, getLocaleMonthNames
, getLocaleNumberFormat
, getLocaleNumberSymbol
, getLocalePluralCase
, getLocaleTimeFormat
, getLocaleWeekEndRange
, getNumberOfCurrencyDigits
core
-
@Component.interpolation
is deprecated. Use Angular's
delimiters instead.
http
-
HttpClientModule
, HttpClientXsrfModule
and HttpClientJsonpModule
As mentionned, those modules can be replaced by provider function only.
animations
Commit |
Type |
Description |
bcce85af72 |
refactor |
remove deprecated matchesElement from AnimationDriver (#55479) |
common
Commit |
Type |
Description |
d34c033902 |
refactor |
Deprecate Local Data API functions (#54483) |
3b0de30b37 |
refactor |
remove deprecated isPlatformWorkerApp and isPlatformWorkerUi API (#55302) |
compiler
Configuration
📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).
🚦 Automerge: Enabled.
♻ Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about these updates again.
- [ ] If you want to rebase/retry this PR, check this box
This PR was generated by Mend Renovate. View the repository job log.
⚠️ Artifact update problem
Renovate failed to update an artifact related to this branch. You probably do not want to merge this PR as-is.
♻ Renovate will retry this branch, including artifacts, only when one of the following happens:
- any of the package files in this branch needs updating, or
- the branch becomes conflicted, or
- you click the rebase/retry checkbox if found above, or
- you rename this PR's title to start with "rebase!" to trigger it manually
The artifact failure details are included below:
File name: package-lock.json
npm ERR! code ERESOLVE
npm ERR! ERESOLVE unable to resolve dependency tree
npm ERR!
npm ERR! While resolving: @0.0.0-semantically-released
npm ERR! Found: [email protected]
npm ERR! node_modules/typescript
npm ERR! dev typescript@"4.8.4" from the root project
npm ERR!
npm ERR! Could not resolve dependency:
npm ERR! peer typescript@">=5.2 <5.5" from @angular/[email protected]
npm ERR! node_modules/@angular/compiler-cli
npm ERR! dev @angular/compiler-cli@"17.3.9" from the root project
npm ERR!
npm ERR! Fix the upstream dependency conflict, or retry
npm ERR! this command with --force, or --legacy-peer-deps
npm ERR! to accept an incorrect (and potentially broken) dependency resolution.
npm ERR!
npm ERR! See /tmp/renovate/cache/others/npm/eresolve-report.txt for a full report.
npm ERR! A complete log of this run can be found in:
npm ERR! /tmp/renovate/cache/others/npm/_logs/2024-05-16T03_34_59_534Z-debug-0.log
⚠ Artifact update problem
Renovate failed to update an artifact related to this branch. You probably do not want to merge this PR as-is.
♻ Renovate will retry this branch, including artifacts, only when one of the following happens:
- any of the package files in this branch needs updating, or
- the branch becomes conflicted, or
- you click the rebase/retry checkbox if found above, or
- you rename this PR's title to start with "rebase!" to trigger it manually
The artifact failure details are included below:
File name: package-lock.json
npm ERR! code ERESOLVE
npm ERR! ERESOLVE unable to resolve dependency tree
npm ERR!
npm ERR! While resolving: @0.0.0-semantically-released
npm ERR! Found: [email protected]
npm ERR! node_modules/typescript
npm ERR! dev typescript@"4.8.4" from the root project
npm ERR!
npm ERR! Could not resolve dependency:
npm ERR! peer typescript@">=5.2 <5.5" from @angular/[email protected]
npm ERR! node_modules/@angular/compiler-cli
npm ERR! dev @angular/compiler-cli@"17.3.8" from the root project
npm ERR!
npm ERR! Fix the upstream dependency conflict, or retry
npm ERR! this command with --force, or --legacy-peer-deps
npm ERR! to accept an incorrect (and potentially broken) dependency resolution.
npm ERR!
npm ERR! See /tmp/renovate/cache/others/npm/eresolve-report.txt for a full report.
npm ERR! A complete log of this run can be found in:
npm ERR! /tmp/renovate/cache/others/npm/_logs/2024-05-08T17_17_09_041Z-debug-0.log