diff --git a/packages/qwik-router/src/buildtime/types.ts b/packages/qwik-router/src/buildtime/types.ts index 83aa9c2d0d3..b01ff90a8af 100644 --- a/packages/qwik-router/src/buildtime/types.ts +++ b/packages/qwik-router/src/buildtime/types.ts @@ -130,7 +130,13 @@ export interface PluginOptions { mdxPlugins?: MdxPlugins; /** MDX Options https://mdxjs.com/ */ mdx?: any; - /** The platform object which can be used to mock the Cloudflare bindings. */ + /** + * Extend the `platform` object in RequestEvent, which can be used to e.g. mock Cloudflare + * bindings. + * + * This only works in **dev mode** and only when using the in-process Vite dev server middleware + * (the default). + */ platform?: Record; /** Configuration to rewrite url paths */ rewriteRoutes?: RewriteRouteOption[]; diff --git a/packages/qwik-router/src/buildtime/vite/dev-middleware.ts b/packages/qwik-router/src/buildtime/vite/dev-middleware.ts index 065315f70fb..aa3d8549046 100644 --- a/packages/qwik-router/src/buildtime/vite/dev-middleware.ts +++ b/packages/qwik-router/src/buildtime/vite/dev-middleware.ts @@ -63,7 +63,11 @@ export const makeRouterDevMiddleware = const render = (async (opts: RendererOptions) => { return await renderer(opts as any); }) as Render; - const { router, staticFile, notFound } = createQwikRouter({ render }); + const { router, staticFile, notFound } = createQwikRouter({ + render, + // inject the platform from dev middleware options + platform: ctx.opts.platform, + } as any); // Wrap the response to enable HTML transformation const wrappedRes = wrapResponseForHtmlTransform(req, res, server); diff --git a/packages/qwik-router/src/middleware/node/index.ts b/packages/qwik-router/src/middleware/node/index.ts index ce63c6a5ed5..d0cca053721 100644 --- a/packages/qwik-router/src/middleware/node/index.ts +++ b/packages/qwik-router/src/middleware/node/index.ts @@ -1,3 +1,4 @@ +import { isDev } from '@qwik.dev/core'; import { setServerPlatform } from '@qwik.dev/core/server'; import type { ClientConn, ServerRenderOptions } from '@qwik.dev/router/middleware/request-handler'; import { @@ -42,6 +43,10 @@ export function createQwikRouter(opts: QwikRouterNodeRequestOptions | QwikCityNo 'server', opts.getClientConn ); + // In dev mode, inject platform from options via secret property + if (isDev && (opts as any).platform) { + Object.assign(serverRequestEv.platform, (opts as any).platform); + } const handled = await requestHandler(serverRequestEv, opts); if (handled) { const err = await handled.completion;