| import { PACKET_TYPES } from "./commons.js"; |
| export const encodePacket = ({ type, data }, supportsBinary, callback) => { |
| if (data instanceof ArrayBuffer || ArrayBuffer.isView(data)) { |
| return callback(supportsBinary ? data : "b" + toBuffer(data, true).toString("base64")); |
| } |
| // plain string |
| return callback(PACKET_TYPES[type] + (data || "")); |
| }; |
| const toBuffer = (data, forceBufferConversion) => { |
| if (Buffer.isBuffer(data) || |
| (data instanceof Uint8Array && !forceBufferConversion)) { |
| return data; |
| } |
| else if (data instanceof ArrayBuffer) { |
| return Buffer.from(data); |
| } |
| else { |
| return Buffer.from(data.buffer, data.byteOffset, data.byteLength); |
| } |
| }; |
| let TEXT_ENCODER; |
| export function encodePacketToBinary(packet, callback) { |
| if (packet.data instanceof ArrayBuffer || ArrayBuffer.isView(packet.data)) { |
| return callback(toBuffer(packet.data, false)); |
| } |
| encodePacket(packet, true, (encoded) => { |
| if (!TEXT_ENCODER) { |
| // lazily created for compatibility with Node.js 10 |
| TEXT_ENCODER = new TextEncoder(); |
| } |
| callback(TEXT_ENCODER.encode(encoded)); |
| }); |
| } |