Skip to content

fix(@angular/build): reset component updates on dev-server SSR page request - #34177

Merged
alan-agius4 merged 1 commit into
angular:mainfrom
alan-agius4:fix/ssr-dev-server-hmr-reset
Sep 25, 2026
Merged

alan-agius4 merged 1 commit into
angular:mainfrom
alan-agius4:fix/ssr-dev-server-hmr-reset

Conversation

@alan-agius4

Copy link
Copy Markdown
Collaborator

When server-side rendering is enabled (either internal or external mode), page reload requests are handled by the SSR middleware before reaching the index HTML middleware. As a result, resetComponentUpdates was never invoked on page reloads, causing stale component HMR updates to persist in templateUpdates and be re-applied over freshly rendered pages.

We now pass resetComponentUpdates to createAngularSsrInternalMiddleware and createAngularSsrExternalMiddleware, and trigger it when an SSR HTML transform occurs (html:transform:pre).

Fixes #34163

@alan-agius4 alan-agius4 added action: review The PR is still awaiting reviews from at least one requested reviewer target: patch This PR is targeted for the next patch release labels Sep 25, 2026
@alan-agius4
alan-agius4 requested a review from clydin September 25, 2026 09:52

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request updates the Angular SSR middlewares to accept and invoke a resetComponentUpdates callback during the html:transform:pre hook execution. It also adds corresponding unit tests and updates the setup middleware plugin. The review feedback recommends replacing the arbitrary setTimeout(50) delays in the new unit tests with deterministic Promises to prevent potential test flakiness in slower CI environments.

…equest

When server-side rendering is enabled (either internal or external mode),
page reload requests are handled by the SSR middleware before reaching
the index HTML middleware. As a result, `resetComponentUpdates` was never
invoked on page reloads, causing stale component HMR updates to persist
in `templateUpdates` and be re-applied over freshly rendered pages.

We now pass `resetComponentUpdates` to `createAngularSsrInternalMiddleware`
and `createAngularSsrExternalMiddleware`, and trigger it when an SSR HTML
transform occurs (`html:transform:pre`).

Fixes angular#34163
@alan-agius4
alan-agius4 force-pushed the fix/ssr-dev-server-hmr-reset branch from bad4bdc to 45f257d Compare September 25, 2026 09:55
@alan-agius4 alan-agius4 added action: merge The PR is ready for merge by the caretaker and removed action: review The PR is still awaiting reviews from at least one requested reviewer labels Sep 25, 2026
@alan-agius4
alan-agius4 merged commit de91345 into angular:main Sep 25, 2026
40 checks passed
@alan-agius4
alan-agius4 deleted the fix/ssr-dev-server-hmr-reset branch September 25, 2026 14:37
@alan-agius4

Copy link
Copy Markdown
Collaborator Author

This PR was merged into the repository. The changes were merged into the following branches:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

action: merge The PR is ready for merge by the caretaker area: @angular/build target: patch This PR is targeted for the next patch release

Projects

None yet

Development

Successfully merging this pull request may close these issues.

dev-server: with SSR, stale component HMR update re-applied on every page load

2 participants