From cd7c97662781bfa5043fb04ab6643610cf550234 Mon Sep 17 00:00:00 2001 From: mvm Date: Thu, 6 Aug 2026 11:18:01 -0500 Subject: [PATCH] [TOC] Fix rendered-heading scrape failures from deprecated container renderer imports MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace deprecated loadRenderers([getContainerRenderer()]) + AstroContainer.create({ renderers }) with AstroContainer.create({}) + container.addServerRenderer() using direct server.js imports, matching the pattern already used in src/util/container.ts. The deprecated loadRenderers/getContainerRenderer API path failed with ERR_UNSUPPORTED_ESM_URL_SCHEME (protocol 'astro:') for 56 pages using AnchorHeading. The addServerRenderer approach properly registers renderers without triggering the astro: virtual import resolution failure. Results: - TOC scrape failures: 56 → 0 - Deprecated renderer import type hints: 4 → 0 - No new build warnings, 8802 pages built successfully --- src/util/rendered-toc.ts | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/util/rendered-toc.ts b/src/util/rendered-toc.ts index b4efc4795c6..ca968cca8d1 100644 --- a/src/util/rendered-toc.ts +++ b/src/util/rendered-toc.ts @@ -1,8 +1,7 @@ import { getCollection } from "astro:content"; import { experimental_AstroContainer as AstroContainer } from "astro/container"; -import { loadRenderers } from "astro:container"; -import { getContainerRenderer as getMdxRenderer } from "@astrojs/mdx"; -import { getContainerRenderer as getReactRenderer } from "@astrojs/react"; +import reactRenderer from "@astrojs/react/server.js"; +import mdxRenderer from "@astrojs/mdx/server.js"; import { getHeadingsFromHtml, type Heading } from "@cloudflare/nimbus-docs"; import type { AstroComponentFactory } from "astro/runtime/server/index.js"; @@ -71,10 +70,15 @@ export async function scrapeRenderedHeadings( Content: AstroComponentFactory, components: Record, ): Promise { - containerPromise ??= loadRenderers([ - getMdxRenderer(), - getReactRenderer(), - ]).then((renderers) => AstroContainer.create({ renderers })); + containerPromise ??= (async () => { + const container = await AstroContainer.create({}); + container.addServerRenderer({ name: "astro:jsx", renderer: mdxRenderer }); + container.addServerRenderer({ + name: "@astrojs/react", + renderer: reactRenderer, + }); + return container; + })(); const html = await ( await containerPromise ).renderToString(Content, { props: { components } });