Conversation
Refactors server-island tracking into a shared state class and uses it to prevent SSR renderer stripping for prerender-only pages with server islands.
🦋 Changeset detectedLatest commit: 378b86a The changes in this PR will be included in the next version bump. Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
ematipico
left a comment
There was a problem hiding this comment.
The new state management lacks in docs and tests. I would like to see more of that, because at the moment I don't really understand the new logic
| resolvedPath: comp.resolvedPath, | ||
| localName: comp.localName, | ||
| specifier: comp.specifier ?? comp.resolvedPath, |
There was a problem hiding this comment.
If resolvedPath and specifier match, wouldn't make more sense to have specifier being null/undefined and fallback to resolvedPath?
Since we're poor on comments (can't understand the difference between the two fields), it seems the only logical suggestion
There was a problem hiding this comment.
specifier is the import from './foo' the ./foo part. We already had this fallback, i'll add a comment explaining.
| assert.equal(state.hasIslands(), true); | ||
| assert.equal(first.islandName, 'Island'); | ||
| assert.deepEqual(duplicate, first); | ||
| assert.equal(Array.from(state.getDiscoveredIslands()).length, 1); |
There was a problem hiding this comment.
That's one thing we should document in the discover method (or class): what deems an island being a duplicate or not. Is it the resolvedPath and specifier?
Then, we should add a test against "not deep equal". That will cement the logic of "being e duplicate"
There was a problem hiding this comment.
yeah it's resolvedPath, added a test.
.changeset/curvy-pandas-exercise.md
Outdated
| 'astro': patch | ||
| --- | ||
|
|
||
| Fixes a build regression where SSR framework renderers could be removed when all project pages are prerendered, causing `server:defer` server islands to fail at runtime. |
There was a problem hiding this comment.
I don't think users have a grasp of "renderers", which is an internal term. Maybe let's say something like "having multiple frontend integrations could lead..."
There was a problem hiding this comment.
Renderer is not internal, it's used in public APIs, for example: https://docs.astro.build/en/reference/integrations-reference/#addrenderer-option
I feel like this is a good use of the term, otherwise I'm not sure what else you would say.
There was a problem hiding this comment.
Went ahead and changed the wording here: a468c27#diff-e438f2ce6de6a7037fb637e8a9ad6aee8a20944a1c175f61795b1a27dffb102b
There was a problem hiding this comment.
Didn't know that! Even so, I believe docs wise we don't call it SSR anymore, but on demand pages. Unless you meant server renderer, which makes sense
| } | ||
|
|
||
| const record: ServerIslandRecord = { | ||
| ...island, |
There was a problem hiding this comment.
island here still contains resolvedPath. I believe it's a TS bug that can't catch it. We should probably use a spread
const { resolvedPath: _, ...islandRecord } = island;This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [astro](https://astro.build) ([source](https://github.com/withastro/astro/tree/HEAD/packages/astro)) | [`6.0.6` → `6.0.8`](https://renovatebot.com/diffs/npm/astro/6.0.6/6.0.8) |  |  | --- ### Release Notes <details> <summary>withastro/astro (astro)</summary> ### [`v6.0.8`](https://github.com/withastro/astro/blob/HEAD/packages/astro/CHANGELOG.md#608) [Compare Source](https://github.com/withastro/astro/compare/astro@6.0.7...astro@6.0.8) ##### Patch Changes - [#​15978](withastro/astro#15978) [`6d182fe`](withastro/astro@6d182fe) Thanks [@​seroperson](https://github.com/seroperson)! - Fixes a bug where Astro Actions didn't properly support nested object properties, causing problems when users used zod functions such as `superRefine` or `discriminatedUnion`. - [#​16011](withastro/astro#16011) [`e752170`](withastro/astro@e752170) Thanks [@​matthewp](https://github.com/matthewp)! - Fixes a dev server hang on the first request when using the Cloudflare adapter - [#​15997](withastro/astro#15997) [`1fddff7`](withastro/astro@1fddff7) Thanks [@​ematipico](https://github.com/ematipico)! - Fixes `Astro.rewrite()` failing when the target path contains duplicate slashes (e.g. `//about`). The duplicate slashes are now collapsed before URL parsing, preventing them from being interpreted as a protocol-relative URL. ### [`v6.0.7`](https://github.com/withastro/astro/blob/HEAD/packages/astro/CHANGELOG.md#607) [Compare Source](https://github.com/withastro/astro/compare/astro@6.0.6...astro@6.0.7) ##### Patch Changes - [#​15950](withastro/astro#15950) [`acce5e8`](withastro/astro@acce5e8) Thanks [@​matthewp](https://github.com/matthewp)! - Fixes a build regression in projects with multiple frontend integrations where `server:defer` server islands could fail at runtime when all pages are prerendered. - [#​15988](withastro/astro#15988) [`c93b4a0`](withastro/astro@c93b4a0) Thanks [@​ossaidqadri](https://github.com/ossaidqadri)! - Fix styles from dynamically imported components not being injected on first dev server load. - [#​15968](withastro/astro#15968) [`3e7a9d5`](withastro/astro@3e7a9d5) Thanks [@​chasemccoy](https://github.com/chasemccoy)! - Fixes `renderMarkdown` in custom content loaders not resolving images in markdown content. Images referenced in markdown processed by `renderMarkdown` are now correctly optimized, matching the behavior of the built-in `glob()` loader. - [#​15990](withastro/astro#15990) [`1e6017f`](withastro/astro@1e6017f) Thanks [@​ematipico](https://github.com/ematipico)! - Fixes an issue where `Astro.currentLocale` would always be the default locale instead of the actual one when using a dynamic route like `[locale].astro` or `[locale]/index.astro`. It now resolves to the correct locale from the URL. - [#​15990](withastro/astro#15990) [`1e6017f`](withastro/astro@1e6017f) Thanks [@​ematipico](https://github.com/ematipico)! - Fixes an issue where visiting an invalid locale URL (e.g. `/asdf/`) would show the content of a dynamic `[locale]` page with a 404 status code, instead of showing your custom 404 page. Now, the correct 404 page is rendered when the locale in the URL doesn't match any configured locale. - [#​15960](withastro/astro#15960) [`1d84020`](withastro/astro@1d84020) Thanks [@​matthewp](https://github.com/matthewp)! - Fixes Cloudflare dev server islands with `prerenderEnvironment: 'node'` by sharing the serialized manifest encryption key across dev environments and routing server island requests through the SSR runtime. - [#​15735](withastro/astro#15735) [`9685e2d`](withastro/astro@9685e2d) Thanks [@​fa-sharp](https://github.com/fa-sharp)! - Fixes an EventEmitter memory leak when serving static pages from Node.js middleware. When using the middleware handler, requests that were being passed on to Express / Fastify (e.g. static files / pre-rendered pages / etc.) weren't cleaning up socket listeners before calling `next()`, causing a memory leak warning. This fix makes sure to run the cleanup before calling `next()`. </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My43Ni4yIiwidXBkYXRlZEluVmVyIjoiNDMuODYuMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==--> Co-authored-by: Renovate Bot <renovate@zarantonello.dev> Co-committed-by: Renovate Bot <renovate@zarantonello.dev>
Changes
server:deferwith framework components could fail at runtime due to SSR renderers being stripped.ServerIslandsStateclass used by both server-islands and renderer plugins.Testing
ServerIslandsState.Docs