From c411200d0b6f45c3fa6f5ce626f3538e981db653 Mon Sep 17 00:00:00 2001 From: Matthew Phillips Date: Tue, 30 Jun 2026 11:20:31 -0400 Subject: [PATCH 1/7] Pre-bundle Cloudflare worker server entrypoint in dev (#17236) * Pre-bundle Cloudflare worker server entrypoint in dev * Apply suggestion from @matthewp --- .changeset/cloudflare-prebundle-server-entry.md | 5 +++++ packages/integrations/cloudflare/src/index.ts | 1 + 2 files changed, 6 insertions(+) create mode 100644 .changeset/cloudflare-prebundle-server-entry.md diff --git a/.changeset/cloudflare-prebundle-server-entry.md b/.changeset/cloudflare-prebundle-server-entry.md new file mode 100644 index 000000000000..b880fc2189e4 --- /dev/null +++ b/.changeset/cloudflare-prebundle-server-entry.md @@ -0,0 +1,5 @@ +--- +'@astrojs/cloudflare': patch +--- + +Prevents warnings in the Cloudflare adapter about optimizing the `@astrojs/cloudflare/entrypoints/server` module in dev. diff --git a/packages/integrations/cloudflare/src/index.ts b/packages/integrations/cloudflare/src/index.ts index 96399acc5f17..fdf88adea275 100644 --- a/packages/integrations/cloudflare/src/index.ts +++ b/packages/integrations/cloudflare/src/index.ts @@ -302,6 +302,7 @@ export default function createIntegration({ optimizeDeps: { include: [ '@astrojs/cloudflare/image-service-workerd', + '@astrojs/cloudflare/entrypoints/server', 'astro', 'astro/runtime/**', 'astro > html-escaper', From 257505ebfd8be87e6b11fd369340245edd0c937a Mon Sep 17 00:00:00 2001 From: Matthew Phillips Date: Tue, 30 Jun 2026 11:57:36 -0400 Subject: [PATCH 2/7] Fix styles dropped when an await precedes a propagating component in slot markup (#17232) * Fix styles dropped when await precedes a propagating component in slot markup Gates async slot pre-render awaiting on routes that use head propagation and discovers propagators via a fixpoint loop, so propagating components behind an await in slot markup are collected without blocking the head on unrelated markup awaits. Closes #17218 * Clarify head-collection loop comments from review --- .changeset/proud-pugs-jump.md | 5 ++ packages/astro/src/core/fetch/fetch-state.ts | 2 + .../astro/src/core/head-propagation/buffer.ts | 56 +++++++++++++++---- .../runtime/server/render/astro/instance.ts | 9 +++ .../astro/src/runtime/server/render/page.ts | 14 +++-- packages/astro/src/types/public/internal.ts | 14 +++++ .../astro/test/content-collections.test.ts | 20 +++++++ .../src/components/SlotLayout.astro | 11 ++++ .../src/pages/async-slot.astro | 15 +++++ .../render/head-propagation/buffer.test.ts | 51 ++++++++++++++++- .../server-islands-render.test.ts | 2 + 11 files changed, 181 insertions(+), 18 deletions(-) create mode 100644 .changeset/proud-pugs-jump.md create mode 100644 packages/astro/test/fixtures/content-collections-base/src/components/SlotLayout.astro create mode 100644 packages/astro/test/fixtures/content-collections-base/src/pages/async-slot.astro diff --git a/.changeset/proud-pugs-jump.md b/.changeset/proud-pugs-jump.md new file mode 100644 index 000000000000..11c796ee19ba --- /dev/null +++ b/.changeset/proud-pugs-jump.md @@ -0,0 +1,5 @@ +--- +'astro': patch +--- + +Fixes a bug where `'), + }); + }); + + const result = createResult([slotEvaluation]); + const collected = await collectPropagatedHeadParts({ propagators, result, isHeadAndContent }); + + assert.deepEqual(collected, ['']); + // The queue is fully drained. + assert.equal(result._metadata.pendingSlotEvaluations.length, 0); + }); + + it('drains nested async slot pre-renders queued while collecting', async () => { + const propagators = new Set(); + const result = createResult(); + + // Outer async slot resolves, registers a propagator AND queues a deeper + // async slot pre-render — the case a one-shot `Promise.all` would miss. + const outer = tick().then(() => { + propagators.add({ + init: () => createHeadAndContentLike(''), + }); + const inner = tick().then(() => { + propagators.add({ + init: () => createHeadAndContentLike(''), + }); + }); + result._metadata.pendingSlotEvaluations.push(inner); + }); + result._metadata.pendingSlotEvaluations.push(outer); + + const collected = await collectPropagatedHeadParts({ propagators, result, isHeadAndContent }); + + assert.deepEqual(collected, ['', '']); + assert.equal(result._metadata.pendingSlotEvaluations.length, 0); + }); }); diff --git a/packages/astro/test/units/server-islands/server-islands-render.test.ts b/packages/astro/test/units/server-islands/server-islands-render.test.ts index f0e0d8093017..aa62183c8f50 100644 --- a/packages/astro/test/units/server-islands/server-islands-render.test.ts +++ b/packages/astro/test/units/server-islands/server-islands-render.test.ts @@ -65,6 +65,8 @@ async function createStubResult(overrides: Partial = {}): Promise Date: Tue, 30 Jun 2026 13:37:32 -0400 Subject: [PATCH 3/7] Use Vite tsconfig path resolution by default (#17202) * Resolve tsconfig aliases in Astro style preprocessing Fixes: #17163 Related: 3cf76c035eef5954637e78015be9c20d0129599a, 4766f3716d1e8ee47902bfdf87963a215c462cbe Goal: restore Astro 6-style tsconfig alias handling for CSS references that are written inside .astro diff --git a/packages/astro/test/fixtures/config-vite-css-target-no-minify/src/styles/global.css b/packages/astro/test/fixtures/config-vite-css-target-no-minify/src/styles/global.css new file mode 100644 index 000000000000..00ce50186417 --- /dev/null +++ b/packages/astro/test/fixtures/config-vite-css-target-no-minify/src/styles/global.css @@ -0,0 +1,44 @@ +/* Global CSS - tests that imported CSS also respects target */ +@media screen and (min-width: 500px) { + body { + background: skyblue; + } +} + +@media screen and (width >= 1000px) { + body { + background: plum; + } +} + +/* Padding to ensure this doesn't get inlined */ +.pad1 { color: red; } +.pad2 { color: blue; } +.pad3 { color: green; } +.pad4 { color: yellow; } +.pad5 { color: orange; } +.pad6 { color: purple; } +.pad7 { color: pink; } +.pad8 { color: brown; } +.pad9 { color: black; } +.pad10 { color: white; } +.pad11 { color: gray; } +.pad12 { color: cyan; } +.pad13 { color: magenta; } +.pad14 { color: lime; } +.pad15 { color: olive; } +.pad16 { color: navy; } +.pad17 { color: teal; } +.pad18 { color: maroon; } +.pad19 { color: aqua; } +.pad20 { color: fuchsia; } +.pad21 { color: silver; } +.pad22 { color: coral; } +.pad23 { color: salmon; } +.pad24 { color: tomato; } +.pad25 { color: crimson; } +.pad26 { color: orchid; } +.pad27 { color: violet; } +.pad28 { color: indigo; } +.pad29 { color: khaki; } +.pad30 { color: linen; } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 012ff010abe1..b7c70c6fd29d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -2564,6 +2564,12 @@ importers: specifier: workspace:* version: link:../../.. + packages/astro/test/fixtures/config-vite-css-target-no-minify: + dependencies: + astro: + specifier: workspace:* + version: link:../../.. + packages/astro/test/fixtures/container-custom-renderers: dependencies: '@astrojs/react':