Skip to content

Commit

Permalink
refactor: rename internal crossws to hooks
Browse files Browse the repository at this point in the history
  • Loading branch information
pi0 committed Aug 6, 2024
1 parent 5e92bd7 commit bb4c917
Show file tree
Hide file tree
Showing 9 changed files with 78 additions and 77 deletions.
22 changes: 10 additions & 12 deletions src/adapters/bun.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import type { WebSocketHandler, ServerWebSocket, Server } from "bun";
import { Message } from "../message";
import { Peer } from "../peer";
import { AdapterOptions, defineWebSocketAdapter } from "../types";
import { CrossWS } from "../crossws";
import { AdapterHookable } from "../hooks";
import { toBufferLike } from "../_utils";

export interface BunAdapter {
Expand All @@ -23,10 +23,10 @@ type ContextData = {

export default defineWebSocketAdapter<BunAdapter, BunOptions>(
(options = {}) => {
const crossws = new CrossWS(options);
const hooks = new AdapterHookable(options);
return {
async handleUpgrade(request, server) {
const res = await crossws.callHook("upgrade", request);
const res = await hooks.callHook("upgrade", request);
if (res instanceof Response) {
return res;
}
Expand All @@ -45,30 +45,28 @@ export default defineWebSocketAdapter<BunAdapter, BunOptions>(
websocket: {
message: (ws, message) => {
const peer = getPeer(ws);
crossws.callAdapterHook("bun:message", peer, ws, message);
crossws.callHook("message", peer, new Message(message));
hooks.callHook("message", peer, new Message(message));
},
open: (ws) => {
const peer = getPeer(ws);
crossws.callAdapterHook("bun:open", peer, ws);
crossws.callHook("open", peer);
hooks.callHook("open", peer);
},
close: (ws) => {
const peer = getPeer(ws);
crossws.callAdapterHook("bun:close", peer, ws);
crossws.callHook("close", peer, {});
hooks.callAdapterHook("bun:close", peer, ws);
hooks.callHook("close", peer, {});
},
drain: (ws) => {
const peer = getPeer(ws);
crossws.callAdapterHook("bun:drain", peer);
hooks.callAdapterHook("bun:drain", peer);
},
ping(ws, data) {
const peer = getPeer(ws);
crossws.callAdapterHook("bun:ping", peer, ws, data);
hooks.callAdapterHook("bun:ping", peer, ws, data);
},
pong(ws, data) {
const peer = getPeer(ws);
crossws.callAdapterHook("bun:pong", peer, ws, data);
hooks.callAdapterHook("bun:pong", peer, ws, data);
},
},
};
Expand Down
18 changes: 9 additions & 9 deletions src/adapters/cloudflare-durable.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import type { DurableObject } from "cloudflare:workers";
import { AdapterOptions, defineWebSocketAdapter } from "../types";
import { Peer } from "../peer";
import { Message } from "../message";
import { CrossWS } from "../crossws";
import { AdapterHookable } from "../hooks";
import { toBufferLike } from "../_utils";

declare class DurableObjectPub extends DurableObject {
Expand Down Expand Up @@ -58,7 +58,7 @@ export default defineWebSocketAdapter<
CloudflareDurableAdapter,
CloudflareOptions
>((opts) => {
const crossws = new CrossWS(opts);
const hooks = new AdapterHookable(opts);
return {
handleUpgrade: async (req, env, _context) => {
const bindingName = opts?.bindingName ?? "$DurableObject";
Expand All @@ -69,7 +69,7 @@ export default defineWebSocketAdapter<
return stub.fetch(req as CF.Request) as unknown as Response;
},
handleDurableUpgrade: async (obj, request) => {
const res = await crossws.callHook("upgrade", request as Request);
const res = await hooks.callHook("upgrade", request as Request);
if (res instanceof Response) {
return res;
}
Expand All @@ -82,8 +82,8 @@ export default defineWebSocketAdapter<
request,
);
(obj as DurableObjectPub).ctx.acceptWebSocket(server);
crossws.callAdapterHook("cloudflare:accept", peer);
crossws.callHook("open", peer);
hooks.callAdapterHook("cloudflare:accept", peer);
hooks.callHook("open", peer);
// eslint-disable-next-line unicorn/no-null
return new Response(null, {
status: 101,
Expand All @@ -93,14 +93,14 @@ export default defineWebSocketAdapter<
},
handleDurableMessage: async (obj, ws, message) => {
const peer = peerFromDurableEvent(obj, ws as CF.WebSocket);
crossws.callAdapterHook("cloudflare:message", peer, message);
crossws.callHook("message", peer, new Message(message));
hooks.callAdapterHook("cloudflare:message", peer, message);
hooks.callHook("message", peer, new Message(message));
},
handleDurableClose: async (obj, ws, code, reason, wasClean) => {
const peer = peerFromDurableEvent(obj, ws as CF.WebSocket);
const details = { code, reason, wasClean };
crossws.callAdapterHook("cloudflare:close", peer, details);
crossws.callHook("close", peer, details);
hooks.callAdapterHook("cloudflare:close", peer, details);
hooks.callHook("close", peer, details);
ws.close(code, reason);
},
};
Expand Down
22 changes: 11 additions & 11 deletions src/adapters/cloudflare.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import { Peer } from "../peer";
import { AdapterOptions, defineWebSocketAdapter } from "../types.js";
import { Message } from "../message";
import { WSError } from "../error";
import { CrossWS } from "../crossws";
import { AdapterHookable } from "../hooks.js";
import { toBufferLike } from "../_utils";

declare const WebSocketPair: typeof _cf.WebSocketPair;
Expand All @@ -24,10 +24,10 @@ export interface CloudflareOptions extends AdapterOptions {}

export default defineWebSocketAdapter<CloudflareAdapter, CloudflareOptions>(
(options = {}) => {
const crossws = new CrossWS(options);
const hooks = new AdapterHookable(options);
return {
handleUpgrade: async (request, env, context) => {
const res = await crossws.callHook(
const res = await hooks.callHook(
"upgrade",
request as unknown as Request,
);
Expand All @@ -41,19 +41,19 @@ export default defineWebSocketAdapter<CloudflareAdapter, CloudflareOptions>(
cloudflare: { client, server, request, env, context },
});
server.accept();
crossws.callAdapterHook("cloudflare:accept", peer);
crossws.callHook("open", peer);
hooks.callAdapterHook("cloudflare:accept", peer);
hooks.callHook("open", peer);
server.addEventListener("message", (event) => {
crossws.callAdapterHook("cloudflare:message", peer, event);
crossws.callHook("message", peer, new Message(event.data));
hooks.callAdapterHook("cloudflare:message", peer, event);
hooks.callHook("message", peer, new Message(event.data));
});
server.addEventListener("error", (event) => {
crossws.callAdapterHook("cloudflare:error", peer, event);
crossws.callHook("error", peer, new WSError(event.error));
hooks.callAdapterHook("cloudflare:error", peer, event);
hooks.callHook("error", peer, new WSError(event.error));
});
server.addEventListener("close", (event) => {
crossws.callAdapterHook("cloudflare:close", peer, event);
crossws.callHook("close", peer, event);
hooks.callAdapterHook("cloudflare:close", peer, event);
hooks.callHook("close", peer, event);
});
// eslint-disable-next-line unicorn/no-null
return new Response(null, {
Expand Down
22 changes: 11 additions & 11 deletions src/adapters/deno.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import { Message } from "../message.ts";
import { WSError } from "../error.ts";
import { Peer } from "../peer.ts";
import { AdapterOptions, defineWebSocketAdapter } from "../types.ts";
import { CrossWS } from "../crossws.ts";
import { AdapterHookable } from "../hooks.ts";
import { toBufferLike } from "../_utils.ts";

export interface DenoAdapter {
Expand All @@ -28,11 +28,11 @@ type DenoWSSharedState = {

export default defineWebSocketAdapter<DenoAdapter, DenoOptions>(
(options = {}) => {
const crossws = new CrossWS(options);
const hooks = new AdapterHookable(options);
const sharedState: DenoWSSharedState = { peers: new Set() };
return {
handleUpgrade: async (request, info) => {
const res = await crossws.callHook("upgrade", request);
const res = await hooks.callHook("upgrade", request);
if (res instanceof Response) {
return res;
}
Expand All @@ -45,22 +45,22 @@ export default defineWebSocketAdapter<DenoAdapter, DenoOptions>(
});
sharedState.peers.add(peer);
upgrade.socket.addEventListener("open", () => {
crossws.callAdapterHook("deno:open", peer);
crossws.callHook("open", peer);
hooks.callAdapterHook("deno:open", peer);
hooks.callHook("open", peer);
});
upgrade.socket.addEventListener("message", (event) => {
crossws.callAdapterHook("deno:message", peer, event);
crossws.callHook("message", peer, new Message(event.data));
hooks.callAdapterHook("deno:message", peer, event);
hooks.callHook("message", peer, new Message(event.data));
});
upgrade.socket.addEventListener("close", () => {
sharedState.peers.delete(peer);
crossws.callAdapterHook("deno:close", peer);
crossws.callHook("close", peer, {});
hooks.callAdapterHook("deno:close", peer);
hooks.callHook("close", peer, {});
});
upgrade.socket.addEventListener("error", (error) => {
sharedState.peers.delete(peer);
crossws.callAdapterHook("deno:error", peer, error);
crossws.callHook("error", peer, new WSError(error));
hooks.callAdapterHook("deno:error", peer, error);
hooks.callHook("error", peer, new WSError(error));
});
return upgrade.response;
},
Expand Down
30 changes: 15 additions & 15 deletions src/adapters/node.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import { Peer } from "../peer";
import { Message } from "../message";
import { WSError } from "../error";
import { AdapterOptions, defineWebSocketAdapter } from "../types";
import { CrossWS } from "../crossws";
import { AdapterHookable } from "../hooks";
import { toBufferLike } from "../_utils";

type AugmentedReq = IncomingMessage & { _upgradeHeaders?: HeadersInit };
Expand All @@ -31,7 +31,7 @@ export interface NodeOptions extends AdapterOptions {

export default defineWebSocketAdapter<NodeAdapter, NodeOptions>(
(options = {}) => {
const crossws = new CrossWS(options);
const hooks = new AdapterHookable(options);

const wss: WebSocketServer =
options.wss ||
Expand All @@ -42,46 +42,46 @@ export default defineWebSocketAdapter<NodeAdapter, NodeOptions>(

wss.on("connection", (ws, req) => {
const peer = new NodePeer({ node: { ws, req, server: wss } });
crossws.callHook("open", peer);
hooks.callHook("open", peer);

// Managed socket-level events
ws.on("message", (data: RawData, isBinary: boolean) => {
crossws.callAdapterHook("node:message", peer, data, isBinary);
hooks.callAdapterHook("node:message", peer, data, isBinary);
if (Array.isArray(data)) {
data = Buffer.concat(data);
}
crossws.callHook("message", peer, new Message(data, isBinary));
hooks.callHook("message", peer, new Message(data, isBinary));
});
ws.on("error", (error: Error) => {
crossws.callAdapterHook("node:error", peer, error);
crossws.callHook("error", peer, new WSError(error));
hooks.callAdapterHook("node:error", peer, error);
hooks.callHook("error", peer, new WSError(error));
});
ws.on("close", (code: number, reason: Buffer) => {
crossws.callAdapterHook("node:close", peer, code, reason);
crossws.callHook("close", peer, {
hooks.callAdapterHook("node:close", peer, code, reason);
hooks.callHook("close", peer, {
code,
reason: reason?.toString(),
});
});
ws.on("open", () => {
crossws.callAdapterHook("node:open", peer);
hooks.callAdapterHook("node:open", peer);
});

// Unmanaged socket-level events
ws.on("ping", (data: Buffer) => {
crossws.callAdapterHook("node:ping", peer, data);
hooks.callAdapterHook("node:ping", peer, data);
});
ws.on("pong", (data: Buffer) => {
crossws.callAdapterHook("node:pong", peer, data);
hooks.callAdapterHook("node:pong", peer, data);
});
ws.on(
"unexpected-response",
(req: ClientRequest, res: IncomingMessage) => {
crossws.callAdapterHook("node:unexpected-response", peer, req, res);
hooks.callAdapterHook("node:unexpected-response", peer, req, res);
},
);
ws.on("upgrade", (req: IncomingMessage) => {
crossws.callAdapterHook("node:upgrade", peer, req);
hooks.callAdapterHook("node:upgrade", peer, req);
});
});

Expand All @@ -96,7 +96,7 @@ export default defineWebSocketAdapter<NodeAdapter, NodeOptions>(

return {
handleUpgrade: async (req, socket, head) => {
const res = await crossws.callHook("upgrade", new NodeReqProxy(req));
const res = await hooks.callHook("upgrade", new NodeReqProxy(req));
if (res instanceof Response) {
return sendResponse(socket, res);
}
Expand Down
26 changes: 13 additions & 13 deletions src/adapters/uws.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import type {
import { Peer } from "../peer";
import { Message } from "../message";
import { AdapterOptions, defineWebSocketAdapter } from "../types";
import { CrossWS } from "../crossws";
import { AdapterHookable } from "../hooks";
import { toBufferLike } from "../_utils";

type UserData = {
Expand Down Expand Up @@ -43,44 +43,44 @@ export interface UWSOptions extends AdapterOptions {

export default defineWebSocketAdapter<UWSAdapter, UWSOptions>(
(options = {}) => {
const crossws = new CrossWS(options);
const hooks = new AdapterHookable(options);
return {
websocket: {
...options.uws,
close(ws, code, message) {
const peer = getPeer(ws);
crossws.callAdapterHook("uws:close", peer, ws, code, message);
crossws.callHook("close", peer, {
hooks.callAdapterHook("uws:close", peer, ws, code, message);
hooks.callHook("close", peer, {
code,
reason: message?.toString(),
});
},
drain(ws) {
const peer = getPeer(ws);
crossws.callAdapterHook("uws:drain", peer, ws);
hooks.callAdapterHook("uws:drain", peer, ws);
},
message(ws, message, isBinary) {
const peer = getPeer(ws);
crossws.callAdapterHook("uws:message", peer, ws, message, isBinary);
hooks.callAdapterHook("uws:message", peer, ws, message, isBinary);
const msg = new Message(message, isBinary);
crossws.callHook("message", peer, msg);
hooks.callHook("message", peer, msg);
},
open(ws) {
const peer = getPeer(ws);
crossws.callAdapterHook("uws:open", peer, ws);
crossws.callHook("open", peer);
hooks.callAdapterHook("uws:open", peer, ws);
hooks.callHook("open", peer);
},
ping(ws, message) {
const peer = getPeer(ws);
crossws.callAdapterHook("uws:ping", peer, ws, message);
hooks.callAdapterHook("uws:ping", peer, ws, message);
},
pong(ws, message) {
const peer = getPeer(ws);
crossws.callAdapterHook("uws:pong", peer, ws, message);
hooks.callAdapterHook("uws:pong", peer, ws, message);
},
subscription(ws, topic, newCount, oldCount) {
const peer = getPeer(ws);
crossws.callAdapterHook(
hooks.callAdapterHook(
"uws:subscription",
peer,
ws,
Expand All @@ -94,7 +94,7 @@ export default defineWebSocketAdapter<UWSAdapter, UWSOptions>(
res.onAborted(() => {
aborted = true;
});
const _res = await crossws.callHook("upgrade", new UWSReqProxy(req));
const _res = await hooks.callHook("upgrade", new UWSReqProxy(req));
if (aborted) {
return;
}
Expand Down
2 changes: 1 addition & 1 deletion src/crossws.ts → src/hooks.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import type {
MaybePromise,
} from "./types.ts";

export class CrossWS {
export class AdapterHookable {
options: AdapterOptions;

constructor(options?: AdapterOptions) {
Expand Down
2 changes: 1 addition & 1 deletion src/index.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
export * from "./crossws.ts";
export * from "./hooks.ts";
export * from "./error.ts";
export * from "./message.ts";
export * from "./peer.ts";
Expand Down
Loading

0 comments on commit bb4c917

Please sign in to comment.