From 741b108f6f52c1049bead3b443720543ea5447cd Mon Sep 17 00:00:00 2001 From: Da-Jin Chu Date: Tue, 13 Jan 2026 12:59:19 -0500 Subject: [PATCH 1/5] upgrade vike --- bifrost-fastify/package.json | 2 +- bifrost/package.json | 4 ++-- package-lock.json | 22 +++++++++++----------- tests/vite/package.json | 2 +- 4 files changed, 15 insertions(+), 15 deletions(-) diff --git a/bifrost-fastify/package.json b/bifrost-fastify/package.json index 3cd713a..74e8e1c 100644 --- a/bifrost-fastify/package.json +++ b/bifrost-fastify/package.json @@ -19,7 +19,7 @@ "peerDependencies": { "@alignable/bifrost": "1.0.15", "fastify": "^5.0.0", - "vike": ">=0.4.248", + "vike": ">=0.4.251", "vite": ">=6" }, "devDependencies": { diff --git a/bifrost/package.json b/bifrost/package.json index ba30a4b..6b3808a 100644 --- a/bifrost/package.json +++ b/bifrost/package.json @@ -45,7 +45,7 @@ "peerDependencies": { "react": ">=18", "typescript": ">=4.7", - "vike": ">=0.4.248", + "vike": ">=0.4.251", "vike-react": ">=0.6.11" }, "devDependencies": { @@ -60,7 +60,7 @@ "typescript": "^5.0.4", "vike-react": "0.6.11", "vite": "^6.3.5", - "vike": "0.4.250", + "vike": "0.4.252", "cross-env": "^7.0.3" } } diff --git a/package-lock.json b/package-lock.json index fa4cd38..b9c4da7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -37,14 +37,14 @@ "tsup": "^7.1.0", "turbolinks": "5.3.0-beta.1", "typescript": "^5.0.4", - "vike": "0.4.250", + "vike": "0.4.252", "vike-react": "0.6.11", "vite": "^6.3.5" }, "peerDependencies": { "react": ">=18", "typescript": ">=4.7", - "vike": ">=0.4.248", + "vike": ">=0.4.251", "vike-react": ">=0.6.11" } }, @@ -77,7 +77,7 @@ "peerDependencies": { "@alignable/bifrost": "1.0.15", "fastify": "^5.0.0", - "vike": ">=0.4.248", + "vike": ">=0.4.251", "vite": ">=6" } }, @@ -1833,9 +1833,9 @@ "license": "MIT" }, "node_modules/@brillout/vite-plugin-server-entry": { - "version": "0.7.15", - "resolved": "https://registry.npmjs.org/@brillout/vite-plugin-server-entry/-/vite-plugin-server-entry-0.7.15.tgz", - "integrity": "sha512-0ClgcmjkhJoHbI6KhbjZlXMeA9qn/EPLXEVssjCE6IVYnVb4bTYuq635c44n7jV3GkjcgFHCQWBmNw0OAGiUvQ==", + "version": "0.7.17", + "resolved": "https://registry.npmjs.org/@brillout/vite-plugin-server-entry/-/vite-plugin-server-entry-0.7.17.tgz", + "integrity": "sha512-MfvSytYl51J2B+RrHvRXMdRNc1U2lHG/K9Gw05/jdPY2iYU2YQKdEzsPswfEWnt3fd1TrXF27h/fx5DIRn19jw==", "license": "MIT", "dependencies": { "@brillout/import": "^0.2.6", @@ -7951,9 +7951,9 @@ "license": "MIT" }, "node_modules/vike": { - "version": "0.4.250", - "resolved": "https://registry.npmjs.org/vike/-/vike-0.4.250.tgz", - "integrity": "sha512-ZTsVEL3V4JT7hHqRbvjiQotoIGrwWTmh2RIzkbpNtUDhzbrMIVljcFuzLjzAvjpiL86gRL/bHSKS0DSnFPlmqw==", + "version": "0.4.252", + "resolved": "https://registry.npmjs.org/vike/-/vike-0.4.252.tgz", + "integrity": "sha512-hH3q92yYupWth4fN6TYAK62JLmZELrWXUpna0+n20iEVFT+x917ah7q2zxR+oLhVq8eeDNPHn47OOMUCjUS9nw==", "license": "MIT", "dependencies": { "@babel/core": "^7.28.5", @@ -7962,7 +7962,7 @@ "@brillout/json-serializer": "^0.5.21", "@brillout/picocolors": "^1.0.30", "@brillout/require-shim": "^0.1.2", - "@brillout/vite-plugin-server-entry": "^0.7.15", + "@brillout/vite-plugin-server-entry": "^0.7.17", "cac": "^6.0.0", "es-module-lexer": "^1.0.0", "esbuild": ">=0.19.0", @@ -8461,7 +8461,7 @@ "@vitejs/plugin-react": "^4.7.0", "fastify": "^5.6.2", "uuid": "^9.0.0", - "vike": "0.4.250", + "vike": "0.4.252", "vike-react": "^0.6.10", "vite": "^6.3.5" }, diff --git a/tests/vite/package.json b/tests/vite/package.json index 49c9bd6..e01aecd 100644 --- a/tests/vite/package.json +++ b/tests/vite/package.json @@ -21,7 +21,7 @@ "@vitejs/plugin-react": "^4.7.0", "fastify": "^5.6.2", "uuid": "^9.0.0", - "vike": "0.4.250", + "vike": "0.4.252", "vike-react": "^0.6.10", "vite": "^6.3.5" }, From 32fe31b8f0784f643941a3e659f87e8a75a0d10d Mon Sep 17 00:00:00 2001 From: Da-Jin Chu Date: Tue, 13 Jan 2026 13:43:46 -0500 Subject: [PATCH 2/5] disable streaming --- bifrost-fastify/index.ts | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/bifrost-fastify/index.ts b/bifrost-fastify/index.ts index 0fcf4f8..24511da 100644 --- a/bifrost-fastify/index.ts +++ b/bifrost-fastify/index.ts @@ -83,13 +83,11 @@ export const viteProxyPlugin: FastifyPluginAsync< return reply.code(404).type("text/html").send("Not Found"); } - const { pipe, statusCode, headers } = httpResponse; - const stream = new PassThrough(); - pipe(stream); + const { statusCode, headers, getBody } = httpResponse; return reply .status(statusCode) .headers(Object.fromEntries(headers)) - .send(stream); + .send(await getBody()); } await fastify.register(accepts); fastify.decorateRequest("bifrostPageId", null); @@ -122,6 +120,10 @@ export const viteProxyPlugin: FastifyPluginAsync< req.vikePageContext = pageContext; const proxyMode = pageContext.config?.proxyMode; + if (!proxyMode) { + req.log.info(`bifrost: rendering page ${pageContext.pageId}`); + return replyWithPage(reply, pageContext); + } switch (proxyMode) { case "passthru": { @@ -163,9 +165,6 @@ export const viteProxyPlugin: FastifyPluginAsync< } break; } - default: - req.log.info(`bifrost: rendering page ${pageContext.pageId}`); - return replyWithPage(reply, pageContext); } if (pageContext.urlParsed) { From 633e99cfa133a4d3b5875460128810091d82bc46 Mon Sep 17 00:00:00 2001 From: Da-Jin Chu Date: Tue, 13 Jan 2026 14:46:20 -0500 Subject: [PATCH 3/5] onrenderhtml optimization --- bifrost/renderer/config.ts | 2 ++ bifrost/renderer/wrapped/onRenderHtml.ts | 12 ++++++++++++ 2 files changed, 14 insertions(+) create mode 100644 bifrost/renderer/wrapped/onRenderHtml.ts diff --git a/bifrost/renderer/config.ts b/bifrost/renderer/config.ts index d687483..bdd2ee1 100644 --- a/bifrost/renderer/config.ts +++ b/bifrost/renderer/config.ts @@ -40,6 +40,8 @@ export default { case "wrapped": return { Page: "import:@alignable/bifrost/__internal/renderer/wrapped/Page:default" as any, + onRenderHtml: + "import:@alignable/bifrost/__internal/renderer/wrapped/onRenderHtml:default", onBeforeRenderHtml: "import:@alignable/bifrost/__internal/renderer/wrapped/onBeforeRenderHtml:default", onBeforeRender: diff --git a/bifrost/renderer/wrapped/onRenderHtml.ts b/bifrost/renderer/wrapped/onRenderHtml.ts new file mode 100644 index 0000000..d1fef12 --- /dev/null +++ b/bifrost/renderer/wrapped/onRenderHtml.ts @@ -0,0 +1,12 @@ +import { dangerouslySkipEscape } from "vike/server"; +// @ts-ignore vike-react import typescript is wrong +import { onRenderHtml as vikeReactRender } from "vike-react/__internal/integration/onRenderHtml"; +import { PageContextServer } from "vike/types"; + +const emptydocument = dangerouslySkipEscape(""); +export default async function onRenderHtml(pageContext: PageContextServer) { + if (pageContext._wrappedServerOnly) { + return await vikeReactRender(pageContext); + } + return { documentHtml: emptydocument }; +} From be36dc2a0cd3b23a9ed5c5488692d55bdf99b1ad Mon Sep 17 00:00:00 2001 From: Da-Jin Chu Date: Tue, 13 Jan 2026 14:46:37 -0500 Subject: [PATCH 4/5] pagedata specfix --- tests/vite/pages/custom-vite/+Page.tsx | 28 ++++++++++++++------------ 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/tests/vite/pages/custom-vite/+Page.tsx b/tests/vite/pages/custom-vite/+Page.tsx index 9617e88..0235bd0 100644 --- a/tests/vite/pages/custom-vite/+Page.tsx +++ b/tests/vite/pages/custom-vite/+Page.tsx @@ -4,22 +4,24 @@ import { usePageContext } from "vike-react/usePageContext"; export default function Page() { const { urlParsed } = usePageContext(); + const pageData = urlParsed.search["page"]; return ( <>

vite is here

- {(JSON.parse(urlParsed.search["page"]) as PageDataOk)?.links?.map( - (link) => - "title" in link && ( - - {link.title} - - ) - )} + {pageData && + (JSON.parse(pageData) as PageDataOk)?.links?.map( + (link) => + "title" in link && ( + + {link.title} + + ) + )} ); } From 61b9bb4055f77d9e0fc63c229d72ace593493392 Mon Sep 17 00:00:00 2001 From: Da-Jin Chu Date: Tue, 13 Jan 2026 16:06:44 -0500 Subject: [PATCH 5/5] disable streaming --- bifrost-fastify/index.ts | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/bifrost-fastify/index.ts b/bifrost-fastify/index.ts index 24511da..e210939 100644 --- a/bifrost-fastify/index.ts +++ b/bifrost-fastify/index.ts @@ -84,10 +84,16 @@ export const viteProxyPlugin: FastifyPluginAsync< } const { statusCode, headers, getBody } = httpResponse; - return reply - .status(statusCode) - .headers(Object.fromEntries(headers)) - .send(await getBody()); + return ( + reply + .status(statusCode) + .headers(Object.fromEntries(headers)) + // This disables any possibility of real streaming. To re-enable streaming we should adopt vike-photon and rewrite wrapped proxy as a Vike middleware. + // Why not pipe? Because Vike gives us `pipe` which sends data into a Writable, but Fastify's reply.send only accepts a ReadableStream. Passthrough can convert but causes race conditions + // We would have to pipe into reply.raw, but that skips Fastify's reply handling (like onSend hooks) + // Photon/universal-middleware solves this with some hacks around reply.body + .send(await getBody()) + ); } await fastify.register(accepts); fastify.decorateRequest("bifrostPageId", null);