diff --git a/examples/full/package.json b/examples/full/package.json index b81231eb..6293b684 100644 --- a/examples/full/package.json +++ b/examples/full/package.json @@ -10,7 +10,7 @@ "@vitejs/plugin-react": "^5.1.1", "react": "^19.2.1", "react-dom": "^19.2.1", - "react-streaming": "^0.4.15", + "react-streaming": "^0.4.16", "typescript": "^5.9.3", "vike": "^0.4.253", "vike-react": "0.6.20", diff --git a/packages/vike-react-apollo/package.json b/packages/vike-react-apollo/package.json index 6d2def0b..b61f54f4 100644 --- a/packages/vike-react-apollo/package.json +++ b/packages/vike-react-apollo/package.json @@ -36,7 +36,7 @@ "react": "^19.2.1", "react-dom": "^19.2.1", "@types/react-dom": "^19.1.9", - "react-streaming": "^0.4.15", + "react-streaming": "^0.4.16", "rimraf": "^5.0.5", "typescript": "^5.9.2", "vike": "^0.4.253", diff --git a/packages/vike-react-query/package.json b/packages/vike-react-query/package.json index dd0a0cb7..aeef5b5c 100644 --- a/packages/vike-react-query/package.json +++ b/packages/vike-react-query/package.json @@ -36,7 +36,7 @@ "jsdom": "^24.0.0", "react": "^19.2.1", "react-dom": "^19.2.1", - "react-streaming": "^0.4.15", + "react-streaming": "^0.4.16", "rimraf": "^5.0.5", "typescript": "^5.9.2", "vike": "^0.4.253", diff --git a/packages/vike-react-zustand/package.json b/packages/vike-react-zustand/package.json index 9697428b..f4b6cb96 100644 --- a/packages/vike-react-zustand/package.json +++ b/packages/vike-react-zustand/package.json @@ -36,7 +36,7 @@ "typescript": "^5.9.2", "vike": "^0.4.253", "vike-react": "0.6.20", - "react-streaming": "^0.4.15", + "react-streaming": "^0.4.16", "vite": "^7.3.0", "zustand": "^5.0.3" }, diff --git a/packages/vike-react/package.json b/packages/vike-react/package.json index fc4fcc30..19da49ed 100644 --- a/packages/vike-react/package.json +++ b/packages/vike-react/package.json @@ -31,7 +31,7 @@ "./__internal/integration/Loading": "./dist/integration/Loading.js" }, "dependencies": { - "react-streaming": "^0.4.15" + "react-streaming": "^0.4.16" }, "peerDependencies": { "react": ">=19", diff --git a/packages/vike-react/src/integration/onRenderHtml.tsx b/packages/vike-react/src/integration/onRenderHtml.tsx index da8eacfb..7e7c356d 100644 --- a/packages/vike-react/src/integration/onRenderHtml.tsx +++ b/packages/vike-react/src/integration/onRenderHtml.tsx @@ -72,7 +72,7 @@ async function renderPageToHtml(pageContext: PageContextServer) { // https://github.com/vikejs/vike-react/issues/87#issuecomment-2488742744 await callCumulativeHooks(pageContext.config.onBeforeRenderHtml, pageContext) - const { renderToStringOptions } = resolveReactOptions(pageContext) + const { renderToStringOptions, renderToStreamOptions } = resolveReactOptions(pageContext) if (pageContext.page) { const streamSetting = resolveStreamSetting(pageContext) @@ -101,6 +101,7 @@ async function renderPageToHtml(pageContext: PageContextServer) { false, */ undefined, + ...renderToStreamOptions, }) pageContext.pageHtmlStream = pageHtmlStream } diff --git a/packages/vike-react/src/integration/resolveReactOptions.ts b/packages/vike-react/src/integration/resolveReactOptions.ts index 18cdee48..27f73a44 100644 --- a/packages/vike-react/src/integration/resolveReactOptions.ts +++ b/packages/vike-react/src/integration/resolveReactOptions.ts @@ -22,6 +22,7 @@ function resolveReactOptions(pageContext: PageContext) { // @ts-ignore optionsAcc[fnName][key] = (...args: unknown[]) => { valPrevious?.(...args) + // @ts-ignore val(...args) } } diff --git a/packages/vike-react/src/types/Config.ts b/packages/vike-react/src/types/Config.ts index df68d108..adb22948 100644 --- a/packages/vike-react/src/types/Config.ts +++ b/packages/vike-react/src/types/Config.ts @@ -5,6 +5,7 @@ import type { ConfigsCumulative } from '../hooks/useConfig/configsCumulative.js' import type React from 'react' import type { HydrationOptions, RootOptions } from 'react-dom/client' import type { ServerOptions } from 'react-dom/server' +import type { RenderToStreamOptions } from 'react-streaming/server' // https://vike.dev/meta#typescript declare global { @@ -300,7 +301,32 @@ export type ConfigViaHookResolved = Omit & Pick export type ReactOptions = { + /** + * Options passed to React's `hydrateRoot()`. + * + * https://react.dev/reference/react-dom/client/hydrateRoot + * https://vike.dev/react-setting + */ hydrateRootOptions?: HydrationOptions + /** + * Options passed to React's `createRoot()`. + * + * https://react.dev/reference/react-dom/client/createRoot + * https://vike.dev/react-setting + */ createRootOptions?: RootOptions + /** + * Options passed to React's `renderToString()`. + * + * https://react.dev/reference/react-dom/server/renderToString + * https://vike.dev/react-setting + */ renderToStringOptions?: ServerOptions + /** + * Options passed to `react-streaming`'s `renderToStream()` during SSR streaming. + * + * https://github.com/brillout/react-streaming#options + * https://vike.dev/react-setting + */ + renderToStreamOptions?: RenderToStreamOptions } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7df4d9c2..788dcd8f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -55,7 +55,7 @@ importers: version: 5.9.3 vike: specifier: ^0.4.253 - version: 0.4.253(react-streaming@0.4.15(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) + version: 0.4.253(react-streaming@0.4.16(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) vike-react: specifier: 0.6.20 version: link:../../packages/vike-react @@ -84,14 +84,14 @@ importers: specifier: ^19.2.1 version: 19.2.1(react@19.2.1) react-streaming: - specifier: ^0.4.15 - version: 0.4.15(react-dom@19.2.1(react@19.2.1))(react@19.2.1) + specifier: ^0.4.16 + version: 0.4.16(react-dom@19.2.1(react@19.2.1))(react@19.2.1) typescript: specifier: ^5.9.3 version: 5.9.3 vike: specifier: ^0.4.253 - version: 0.4.253(react-streaming@0.4.15(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) + version: 0.4.253(react-streaming@0.4.16(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) vike-react: specifier: 0.6.20 version: link:../../packages/vike-react @@ -112,7 +112,7 @@ importers: version: 19.2.1(react@19.2.1) vike: specifier: ^0.4.253 - version: 0.4.253(react-streaming@0.4.15(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) + version: 0.4.253(react-streaming@0.4.16(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) vike-react: specifier: 0.6.20 version: link:../../packages/vike-react @@ -145,7 +145,7 @@ importers: version: 5.9.3 vike: specifier: ^0.4.253 - version: 0.4.253(react-streaming@0.4.15(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) + version: 0.4.253(react-streaming@0.4.16(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) vike-react: specifier: 0.6.20 version: link:../../packages/vike-react @@ -184,7 +184,7 @@ importers: version: 5.9.3 vike: specifier: ^0.4.253 - version: 0.4.253(react-streaming@0.4.15(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) + version: 0.4.253(react-streaming@0.4.16(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) vike-react: specifier: 0.6.20 version: link:../../packages/vike-react @@ -232,13 +232,13 @@ importers: version: 5.9.3 vike: specifier: ^0.4.253 - version: 0.4.253(react-streaming@0.4.15(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) + version: 0.4.253(react-streaming@0.4.16(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) vike-photon: specifier: ^0.1.20 - version: 0.1.24(@photonjs/core@0.1.21(hono@4.11.4)(srvx@0.9.8)(vite@7.3.0(@types/node@24.0.8)))(@photonjs/runtime@0.1.16(hono@4.11.4)(rollup@4.46.2)(vite@7.3.0(@types/node@24.0.8)))(hono@4.11.4)(rollup@4.46.2)(srvx@0.9.8)(vike@0.4.253(react-streaming@0.4.15(react-dom@19.2.1(react@19.2.1))(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)))(vite@7.3.0(@types/node@24.0.8)) + version: 0.1.24(@photonjs/core@0.1.21(hono@4.11.4)(srvx@0.9.8)(vite@7.3.0(@types/node@24.0.8)))(@photonjs/runtime@0.1.16(hono@4.11.4)(rollup@4.46.2)(vite@7.3.0(@types/node@24.0.8)))(hono@4.11.4)(rollup@4.46.2)(srvx@0.9.8)(vike@0.4.253(react-streaming@0.4.16(react-dom@19.2.1(react@19.2.1))(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)))(vite@7.3.0(@types/node@24.0.8)) vike-react: specifier: 0.6.10 - version: 0.6.10(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(vike@0.4.253(react-streaming@0.4.15(react-dom@19.2.1(react@19.2.1))(react@19.2.1))(vite@7.3.0(@types/node@24.0.8))) + version: 0.6.10(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(vike@0.4.253(react-streaming@0.4.16(react-dom@19.2.1(react@19.2.1))(react@19.2.1))(vite@7.3.0(@types/node@24.0.8))) vike-react-sentry: specifier: 0.1.0 version: link:../../packages/vike-react-sentry @@ -271,7 +271,7 @@ importers: version: 5.9.3 vike: specifier: ^0.4.253 - version: 0.4.253(react-streaming@0.4.15(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) + version: 0.4.253(react-streaming@0.4.16(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) vike-react: specifier: 0.6.20 version: link:../../packages/vike-react @@ -288,8 +288,8 @@ importers: packages/vike-react: dependencies: react-streaming: - specifier: ^0.4.15 - version: 0.4.15(react-dom@19.2.1(react@19.2.1))(react@19.2.1) + specifier: ^0.4.16 + version: 0.4.16(react-dom@19.2.1(react@19.2.1))(react@19.2.1) devDependencies: '@biomejs/biome': specifier: ^1.9.4 @@ -320,7 +320,7 @@ importers: version: 5.9.3 vike: specifier: ^0.4.253 - version: 0.4.253(react-streaming@0.4.15(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) + version: 0.4.253(react-streaming@0.4.16(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) vite: specifier: ^7.3.0 version: 7.3.0(@types/node@24.0.8) @@ -350,7 +350,7 @@ importers: version: 5.9.3 vike: specifier: ^0.4.253 - version: 0.4.253(react-streaming@0.4.15(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) + version: 0.4.253(react-streaming@0.4.16(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) vike-react: specifier: 0.6.20 version: link:../vike-react @@ -392,8 +392,8 @@ importers: specifier: ^19.2.1 version: 19.2.1(react@19.2.1) react-streaming: - specifier: ^0.4.15 - version: 0.4.15(react-dom@19.2.1(react@19.2.1))(react@19.2.1) + specifier: ^0.4.16 + version: 0.4.16(react-dom@19.2.1(react@19.2.1))(react@19.2.1) rimraf: specifier: ^5.0.5 version: 5.0.10 @@ -402,7 +402,7 @@ importers: version: 5.9.3 vike: specifier: ^0.4.253 - version: 0.4.253(react-streaming@0.4.15(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) + version: 0.4.253(react-streaming@0.4.16(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) vike-react: specifier: 0.6.20 version: link:../vike-react @@ -435,7 +435,7 @@ importers: version: 5.9.3 vike: specifier: ^0.4.253 - version: 0.4.253(react-streaming@0.4.15(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) + version: 0.4.253(react-streaming@0.4.16(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) vike-react: specifier: 0.6.20 version: link:../vike-react @@ -480,8 +480,8 @@ importers: specifier: ^19.2.1 version: 19.2.1(react@19.2.1) react-streaming: - specifier: ^0.4.15 - version: 0.4.15(react-dom@19.2.1(react@19.2.1))(react@19.2.1) + specifier: ^0.4.16 + version: 0.4.16(react-dom@19.2.1(react@19.2.1))(react@19.2.1) rimraf: specifier: ^5.0.5 version: 5.0.10 @@ -490,7 +490,7 @@ importers: version: 5.9.3 vike: specifier: ^0.4.253 - version: 0.4.253(react-streaming@0.4.15(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) + version: 0.4.253(react-streaming@0.4.16(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) vike-react: specifier: 0.6.20 version: link:../vike-react @@ -530,7 +530,7 @@ importers: version: 5.9.3 vike: specifier: ^0.4.253 - version: 0.4.253(react-streaming@0.4.15(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) + version: 0.4.253(react-streaming@0.4.16(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) vike-react: specifier: 0.6.20 version: link:../vike-react @@ -573,7 +573,7 @@ importers: version: 5.9.3 vike: specifier: ^0.4.253 - version: 0.4.253(react-streaming@0.4.15(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) + version: 0.4.253(react-streaming@0.4.16(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) vike-react: specifier: 0.6.20 version: link:../vike-react @@ -603,7 +603,7 @@ importers: version: 5.9.3 vike: specifier: ^0.4.253 - version: 0.4.253(react-streaming@0.4.15(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) + version: 0.4.253(react-streaming@0.4.16(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) vike-react: specifier: 0.6.20 version: link:../vike-react @@ -636,7 +636,7 @@ importers: version: 5.9.3 vike: specifier: ^0.4.253 - version: 0.4.253(react-streaming@0.4.15(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) + version: 0.4.253(react-streaming@0.4.16(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) vike-react: specifier: 0.6.20 version: link:../vike-react @@ -678,8 +678,8 @@ importers: specifier: ^19.2.1 version: 19.2.1(react@19.2.1) react-streaming: - specifier: ^0.4.15 - version: 0.4.15(react-dom@19.2.1(react@19.2.1))(react@19.2.1) + specifier: ^0.4.16 + version: 0.4.16(react-dom@19.2.1(react@19.2.1))(react@19.2.1) rimraf: specifier: ^5.0.5 version: 5.0.10 @@ -688,7 +688,7 @@ importers: version: 5.9.3 vike: specifier: ^0.4.253 - version: 0.4.253(react-streaming@0.4.15(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) + version: 0.4.253(react-streaming@0.4.16(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) vike-react: specifier: 0.6.20 version: link:../vike-react @@ -3673,8 +3673,8 @@ packages: resolution: {integrity: sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==} engines: {node: '>=0.10.0'} - react-streaming@0.4.15: - resolution: {integrity: sha512-3/olKmuCRYNLy0nFGXI54ErYKK1cfxJ3UoKn6pPZkknaHSn1APvJHE9MkKow/2s2CG94emxXoj/RMVpGF4Lxzg==} + react-streaming@0.4.16: + resolution: {integrity: sha512-qaDUklKjpmPStven+MvFFk3SWN+UaeIugBNwKgd97UPIR8IMUzk68gIg2iPR1fN7+HkrpLmTVwZE9dGoLZTcCA==} peerDependencies: react: '>=19' react-dom: '>=19' @@ -7767,11 +7767,11 @@ snapshots: react-refresh@0.18.0: {} - react-streaming@0.4.15(react-dom@19.2.1(react@19.2.1))(react@19.2.1): + react-streaming@0.4.16(react-dom@19.2.1(react@19.2.1))(react@19.2.1): dependencies: '@brillout/import': 0.2.6 '@brillout/json-serializer': 0.5.21 - '@brillout/picocolors': 1.0.29 + '@brillout/picocolors': 1.0.30 isbot-fast: 1.2.0 react: 19.2.1 react-dom: 19.2.1(react@19.2.1) @@ -8126,7 +8126,7 @@ snapshots: spdx-correct: 3.2.0 spdx-expression-parse: 3.0.1 - vike-photon@0.1.24(@photonjs/core@0.1.21(hono@4.11.4)(srvx@0.9.8)(vite@7.3.0(@types/node@24.0.8)))(@photonjs/runtime@0.1.16(hono@4.11.4)(rollup@4.46.2)(vite@7.3.0(@types/node@24.0.8)))(hono@4.11.4)(rollup@4.46.2)(srvx@0.9.8)(vike@0.4.253(react-streaming@0.4.15(react-dom@19.2.1(react@19.2.1))(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)))(vite@7.3.0(@types/node@24.0.8)): + vike-photon@0.1.24(@photonjs/core@0.1.21(hono@4.11.4)(srvx@0.9.8)(vite@7.3.0(@types/node@24.0.8)))(@photonjs/runtime@0.1.16(hono@4.11.4)(rollup@4.46.2)(vite@7.3.0(@types/node@24.0.8)))(hono@4.11.4)(rollup@4.46.2)(srvx@0.9.8)(vike@0.4.253(react-streaming@0.4.16(react-dom@19.2.1(react@19.2.1))(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)))(vite@7.3.0(@types/node@24.0.8)): dependencies: '@brillout/picocolors': 1.0.30 '@brillout/vite-plugin-server-entry': 0.7.17 @@ -8137,7 +8137,7 @@ snapshots: '@universal-middleware/sirv': 0.1.25 pkg-types: 2.3.0 standaloner: 0.1.11(rollup@4.46.2) - vike: 0.4.253(react-streaming@0.4.15(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) + vike: 0.4.253(react-streaming@0.4.16(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) optionalDependencies: vite: 7.3.0(@types/node@24.0.8) transitivePeerDependencies: @@ -8154,14 +8154,14 @@ snapshots: - srvx - supports-color - vike-react@0.6.10(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(vike@0.4.253(react-streaming@0.4.15(react-dom@19.2.1(react@19.2.1))(react@19.2.1))(vite@7.3.0(@types/node@24.0.8))): + vike-react@0.6.10(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(vike@0.4.253(react-streaming@0.4.16(react-dom@19.2.1(react@19.2.1))(react@19.2.1))(vite@7.3.0(@types/node@24.0.8))): dependencies: react: 19.2.1 react-dom: 19.2.1(react@19.2.1) - react-streaming: 0.4.15(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - vike: 0.4.253(react-streaming@0.4.15(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) + react-streaming: 0.4.16(react-dom@19.2.1(react@19.2.1))(react@19.2.1) + vike: 0.4.253(react-streaming@0.4.16(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) - vike@0.4.253(react-streaming@0.4.15(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)): + vike@0.4.253(react-streaming@0.4.16(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)): dependencies: '@babel/core': 7.28.5 '@babel/types': 7.28.5 @@ -8181,7 +8181,7 @@ snapshots: source-map-support: 0.5.21 tinyglobby: 0.2.15 optionalDependencies: - react-streaming: 0.4.15(react-dom@19.2.1(react@19.2.1))(react@19.2.1) + react-streaming: 0.4.16(react-dom@19.2.1(react@19.2.1))(react@19.2.1) vite: 7.3.0(@types/node@24.0.8) transitivePeerDependencies: - supports-color