Files
vercel/packages/node/test/dev-fixtures/edge-websocket.js
2024-04-04 00:09:36 -05:00

43 lines
1.1 KiB
JavaScript

/* eslint-disable -- flakey application of `global TextEncoderStream, ReadableStream, Response, WebSocket` eslint directive */
export const config = { runtime: 'edge' };
const createWebSocket = url =>
new Promise((resolve, reject) => {
const ws = new WebSocket(url);
ws.onopen = () => resolve(ws);
ws.onerror = reject;
});
let data = [...Array(4).keys()];
export default async () => {
const ws = await createWebSocket('wss://ws.postman-echo.com/raw');
const interval = 100;
let timer;
const end = controller => {
clearInterval(timer);
setTimeout(() => {
controller.close();
ws.close();
}, interval);
};
const readable = new ReadableStream({
async start(controller) {
ws.onmessage = ({ data }) => controller.enqueue(data);
timer = setInterval(() => {
const value = data.pop();
if (value === undefined) return end(controller);
ws.send(value);
}, interval);
},
cancel() {
clearInterval(timer);
},
}).pipeThrough(new TextEncoderStream());
return new Response(readable);
};