()
| 47 | }; |
| 48 | |
| 49 | export function createPacketEncoderStream(): any { |
| 50 | return new TransformStream({ |
| 51 | transform(packet: Packet, controller) { |
| 52 | encodePacketToBinary(packet, (encodedPacket) => { |
| 53 | const payloadLength = encodedPacket.length; |
| 54 | let header; |
| 55 | // inspired by the WebSocket format: https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API/Writing_WebSocket_servers#decoding_payload_length |
| 56 | if (payloadLength < 126) { |
| 57 | header = new Uint8Array(1); |
| 58 | new DataView(header.buffer).setUint8(0, payloadLength); |
| 59 | } else if (payloadLength < 65536) { |
| 60 | header = new Uint8Array(3); |
| 61 | const view = new DataView(header.buffer); |
| 62 | view.setUint8(0, 126); |
| 63 | view.setUint16(1, payloadLength); |
| 64 | } else { |
| 65 | header = new Uint8Array(9); |
| 66 | const view = new DataView(header.buffer); |
| 67 | view.setUint8(0, 127); |
| 68 | view.setBigUint64(1, BigInt(payloadLength)); |
| 69 | } |
| 70 | // first bit indicates whether the payload is plain text (0) or binary (1) |
| 71 | if (packet.data && typeof packet.data !== "string") { |
| 72 | header[0] |= 0x80; |
| 73 | } |
| 74 | controller.enqueue(header); |
| 75 | controller.enqueue(encodedPacket); |
| 76 | }); |
| 77 | }, |
| 78 | }); |
| 79 | } |
| 80 | |
| 81 | let TEXT_DECODER; |
| 82 |
no outgoing calls
no test coverage detected