From 8f298ffda58a7dd7b9f816a1d037db257e3e56ce Mon Sep 17 00:00:00 2001 From: Victor Berchet Date: Wed, 16 Apr 2025 10:44:04 +0200 Subject: [PATCH 1/2] doc(cloudflare): custom worker --- pages/cloudflare/howtos/_meta.json | 3 +- pages/cloudflare/howtos/custom-worker.mdx | 41 +++++++++++++++++++++++ 2 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 pages/cloudflare/howtos/custom-worker.mdx diff --git a/pages/cloudflare/howtos/_meta.json b/pages/cloudflare/howtos/_meta.json index 3616fcb..ca4bfe1 100644 --- a/pages/cloudflare/howtos/_meta.json +++ b/pages/cloudflare/howtos/_meta.json @@ -3,5 +3,6 @@ "stripeAPI": "Stripe API", "dev-deploy": "Develop and Deploy", "env-vars": "Enviroment Variables", - "image": "Image Optimization" + "image": "Image Optimization", + "custom-worker": "Custom Worker" } diff --git a/pages/cloudflare/howtos/custom-worker.mdx b/pages/cloudflare/howtos/custom-worker.mdx new file mode 100644 index 0000000..fd9e3db --- /dev/null +++ b/pages/cloudflare/howtos/custom-worker.mdx @@ -0,0 +1,41 @@ +## Custom Worker + +The worker generated by the Cloudflare adapter only exports [a fetch handler](https://developers.cloudflare.com/workers/runtime-apis/handlers/fetch/). + +Sometimes your application needs to expose another type of handler (i.e. [a scheduled handler](https://developers.cloudflare.com/workers/runtime-apis/handlers/scheduled/)) or export a [Durable Object](https://developers.cloudflare.com/durable-objects/api/base/). This can be achieved by creating a custom worker. + +The custom worker re-uses the generated fetch handler. + +### Create your custom worker Worker + +The following custom worker re-uses the generated fetch handler and adds a scheduled handler: + +```ts +// custom-worker.ts + +// @ts-ignore `.open-next/worker.ts` is generated at build time +import { default as handler } from "./.open-next/worker.js"; + +export default { + fetch: handler.fetch, + + async scheduled(event) { + // ... + }, +} satisfies ExportedHandler; + +// @ts-ignore `.open-next/worker.ts` is generated at build time +export { DOQueueHandler, DOShardedTagCache } from "./.open-next/worker.js"; +``` + +See [an example in the adapater repository](https://github.com/opennextjs/opennextjs-cloudflare/blob/main/examples/playground14/worker.ts). + +### Update the entry point in your wrangler configuration + +```diff +// wrangler.jsonc +{ +- "main": "./.open-next/worker.js" ++ "main": "./path/to/custom-worker.ts", +} +``` From fd0261c3af182528cac87253cd29a3721078dba1 Mon Sep 17 00:00:00 2001 From: Victor Berchet Date: Wed, 16 Apr 2025 10:55:24 +0200 Subject: [PATCH 2/2] fixup: feedback --- pages/cloudflare/howtos/custom-worker.mdx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pages/cloudflare/howtos/custom-worker.mdx b/pages/cloudflare/howtos/custom-worker.mdx index fd9e3db..cab9ea9 100644 --- a/pages/cloudflare/howtos/custom-worker.mdx +++ b/pages/cloudflare/howtos/custom-worker.mdx @@ -24,11 +24,13 @@ export default { }, } satisfies ExportedHandler; +// The re-export is only required if your app uses the DO Queue and DO Tag Cache +// See https://opennext.js.org/cloudflare/caching for details // @ts-ignore `.open-next/worker.ts` is generated at build time export { DOQueueHandler, DOShardedTagCache } from "./.open-next/worker.js"; ``` -See [an example in the adapater repository](https://github.com/opennextjs/opennextjs-cloudflare/blob/main/examples/playground14/worker.ts). +See [an example in the adapter repository](https://github.com/opennextjs/opennextjs-cloudflare/blob/main/examples/playground14/worker.ts). ### Update the entry point in your wrangler configuration