diff --git a/.changeset/great-pugs-visit.md b/.changeset/great-pugs-visit.md new file mode 100644 index 000000000000..03f297391e7f --- /dev/null +++ b/.changeset/great-pugs-visit.md @@ -0,0 +1,5 @@ +--- +'astro': patch +--- + +Fixes an internal bug where in some cases the head propagation wasn't correctly flagged. diff --git a/packages/astro/src/runtime/server/render/astro/factory.ts b/packages/astro/src/runtime/server/render/astro/factory.ts index dab33a031991..3cc6408c96d7 100644 --- a/packages/astro/src/runtime/server/render/astro/factory.ts +++ b/packages/astro/src/runtime/server/render/astro/factory.ts @@ -26,3 +26,14 @@ export function isAPropagatingComponent( } return hint === 'in-tree' || hint === 'self'; } + +export function getPropagationHint( + result: SSRResult, + factory: AstroComponentFactory, +): PropagationHint { + let hint: PropagationHint = factory.propagation || 'none'; + if (factory.moduleId && result.componentMetadata.has(factory.moduleId) && hint === 'none') { + hint = result.componentMetadata.get(factory.moduleId)!.propagation; + } + return hint; +} diff --git a/packages/astro/src/runtime/server/render/page.ts b/packages/astro/src/runtime/server/render/page.ts index 83b684b642e3..06a1b31968a1 100644 --- a/packages/astro/src/runtime/server/render/page.ts +++ b/packages/astro/src/runtime/server/render/page.ts @@ -6,6 +6,7 @@ import { isAstroComponentFactory } from './astro/index.js'; import { renderToAsyncIterable, renderToReadableStream, renderToString } from './astro/render.js'; import { encoder } from './common.js'; import { isDeno, isNode } from './util.js'; +import { getPropagationHint } from './astro/factory.js'; export async function renderPage( result: SSRResult, @@ -43,8 +44,9 @@ export async function renderPage( // Mark if this page component contains a within its tree. If it does // We avoid implicit head injection entirely. + const propagationHint = getPropagationHint(result, componentFactory); result._metadata.headInTree = - result.componentMetadata.get(componentFactory.moduleId!)?.containsHead ?? false; + result.componentMetadata.get(componentFactory.moduleId!)?.containsHead ?? propagationHint === 'in-tree'; let body: BodyInit | Response; if (streaming) {