Files
SnowLuma/.pnpm-store/v11/files/de/ac6b0e46daa84fde838bc9a0f4aedb8be83effe56b3ca15dd5cab25edaaeec2b1bc3749742805d466a972d5e8263be99b186320120e2752a35e7ca30c5de48
T
TanTan 2a69b23b47
Dev Build / cleanup (push) Waiting to run
Dev Build / typecheck (push) Waiting to run
docs: 仓库链接指向本镜像仓库
2026-11-13 09:27:07 +08:00

54 lines
1.3 KiB
Plaintext

//#region src/helper/websocket/index.ts
/**
* A context for controlling WebSockets
*/
var WSContext = class {
#init;
constructor(init) {
this.#init = init;
this.raw = init.raw;
this.url = init.url ? new URL(init.url) : null;
this.protocol = init.protocol ?? null;
}
send(source, options) {
this.#init.send(source, options ?? {});
}
raw;
binaryType = "arraybuffer";
get readyState() {
return this.#init.readyState;
}
url;
protocol;
close(code, reason) {
this.#init.close(code, reason);
}
};
const createWSMessageEvent = (source) => {
return new MessageEvent("message", { data: source });
};
/**
* Create a WebSocket adapter/helper
*/
const defineWebSocketHelper = (handler) => {
return ((...args) => {
if (typeof args[0] === "function") {
const [createEvents, options] = args;
return async function upgradeWebSocket(c, next) {
const result = await handler(c, await createEvents(c), options);
if (result) return result;
await next();
};
} else {
const [c, events, options] = args;
return (async () => {
const upgraded = await handler(c, events, options);
if (!upgraded) throw new Error("Failed to upgrade WebSocket");
return upgraded;
})();
}
});
};
//#endregion
export { WSContext, createWSMessageEvent, defineWebSocketHelper };