Skip to content

Instantly share code, notes, and snippets.

@rmarscher
Last active September 19, 2024 01:24
Show Gist options
  • Save rmarscher/9bb6ed54dc9535f4b81bed147204c7e9 to your computer and use it in GitHub Desktop.
Save rmarscher/9bb6ed54dc9535f4b81bed147204c7e9 to your computer and use it in GitHub Desktop.
Waku Cloudflare Pages Dev Server Middleware
import type { Hono } from 'hono';
import { getPlatformProxy } from 'wrangler';
import { WebSocketPair } from 'miniflare';
Object.assign(globalThis, { WebSocketPair })
export const cloudflareDevServer = (cfOptions: any) => async (app: Hono) => {
const proxyPromise = getPlatformProxy({
...(cfOptions || {}),
})
return async (req: Request) => {
const proxy = await proxyPromise;
Object.assign(req, { cf: proxy.cf });
Object.assign(globalThis, {
caches: proxy.caches,
});
return app.fetch(req, proxy.env, proxy.ctx);
};
};
import type { Config } from "waku/config";
import { cloudflareDevServer } from "./waku.cloudflare-dev-server";
const wakuConfig: Config = {
...(import.meta.env && import.meta.env.MODE !== "production"
? {
unstable_honoEnhancer: cloudflareDevServer({
// Optional config settings for the Cloudflare dev server (wrangler proxy)
// https://developers.cloudflare.com/workers/wrangler/api/#parameters-1
persist: {
path: ".wrangler/state/v3",
},
}),
}
: {}),
middleware: () => {
return [
import("waku/middleware/dev-server"),
import("waku/middleware/headers"),
import("waku/middleware/ssr"),
import("waku/middleware/rsc"),
];
},
};
export default wakuConfig;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment