Skip to content

Commit b6c3fa5

Browse files
authored
refactor!: merge cloudflare and cloudflare-durable adapters (#165)
1 parent 37889b0 commit b6c3fa5

File tree

8 files changed

+305
-362
lines changed

8 files changed

+305
-362
lines changed

docs/2.adapters/cloudflare.md

Lines changed: 6 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -4,46 +4,16 @@ icon: devicon-plain:cloudflareworkers
44

55
# Cloudflare
66

7-
> Integrate crossws with Cloudflare Workers.
7+
> Integrate crossws with Cloudflare Workers and Durable Objects.
88
9-
To integrate crossws with your Cloudflare Workers, you need to check for the `upgrade` header.
9+
To integrate crossws with Cloudflare [Durable Objects](https://developers.cloudflare.com/durable-objects/api/websockets/) with [pub/sub](/guide/pubsub) and [hibernation API](https://developers.cloudflare.com/durable-objects/best-practices/websockets/#websocket-hibernation-api) support, you need to check for the `upgrade` header and additionally export a DurableObject with crossws adapter hooks integrated.
1010

11-
> [!IMPORTANT]
12-
> For [pub/sub](/guide/pubsub) support, you need to use [Durable objects](#durable-objects).
13-
14-
```ts
15-
import crossws from "crossws/adapters/cloudflare";
16-
17-
const ws = crossws({
18-
hooks: {
19-
message: console.log,
20-
},
21-
});
22-
23-
export default {
24-
async fetch(request, env, context) {
25-
if (request.headers.get("upgrade") === "websocket") {
26-
return ws.handleUpgrade(request, env, context);
27-
}
28-
return new Response(
29-
`<script>new WebSocket("ws://localhost:3000").addEventListener("open", (e) => e.target.send("Hello from client!"));</script>`,
30-
{ headers: { "content-type": "text/html" } },
31-
);
32-
},
33-
};
34-
```
35-
36-
::read-more
37-
See [`test/fixture/cloudflare.ts`](https://github.com/h3js/crossws/blob/main/test/fixture/cloudflare.ts) for demo and [`src/adapters/cloudflare.ts`](https://github.com/h3js/crossws/blob/main/src/adapters/cloudflare.ts) for implementation.
38-
::
39-
40-
## Durable objects
41-
42-
To integrate crossws with Cloudflare [Durable Objects](https://developers.cloudflare.com/durable-objects/api/websockets/) (available on paid plans) with pub/sub and hibernation support, you need to check for the `upgrade` header and additionally export a Durable object with crossws adapter hooks integrated.
11+
> [!NOTE]
12+
> If you skip durable object class export or in cases the binding is unavailable, crossws uses a **fallback mode** without pub/sub support in the same worker.
4313
4414
```js
4515
import { DurableObject } from "cloudflare:workers";
46-
import crossws from "crossws/adapters/cloudflare-durable";
16+
import crossws from "crossws/adapters/cloudflare";
4717

4818
const ws = crossws({
4919
// bindingName: "$DurableObject",
@@ -102,7 +72,7 @@ new_classes = ["$DurableObject"]
10272
```
10373

10474
::read-more
105-
See [`test/fixture/cloudflare-durable.ts`](https://github.com/h3js/crossws/blob/main/test/fixture/cloudflare-durable.ts) for demo and [`src/adapters/cloudflare-durable.ts`](https://github.com/h3js/crossws/blob/main/src/adapters/cloudflare-durable.ts) for implementation.
75+
See [`test/fixture/cloudflare-durable.ts`](https://github.com/h3js/crossws/blob/main/test/fixture/cloudflare-durable.ts) for demo and [`src/adapters/cloudflare.ts`](https://github.com/h3js/crossws/blob/main/src/adapters/cloudflare.ts) for implementation.
10676
::
10777

10878
### Adapter options

package.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
"./adapters/bun": "./dist/adapters/bun.mjs",
1313
"./adapters/deno": "./dist/adapters/deno.mjs",
1414
"./adapters/cloudflare": "./dist/adapters/cloudflare.mjs",
15-
"./adapters/cloudflare-durable": "./dist/adapters/cloudflare-durable.mjs",
1615
"./adapters/sse": "./dist/adapters/sse.mjs",
1716
"./adapters/node": "./dist/adapters/node.mjs",
1817
"./adapters/uws": "./dist/adapters/uws.mjs",

src/adapters/cloudflare-durable.ts

Lines changed: 0 additions & 281 deletions
This file was deleted.

0 commit comments

Comments
 (0)