/
githubmirror
/
socket.io
Обзор
Документация
Войти
/
githubmirror
/
socket.io
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
packages/engine.io-parser/lib/decodePacket.ts
66 строк
2 KB
Damien Arrachequesne
chore: bump @fails-components/webtransport to version 1.1.4 (dev)
22 окт 2024, 00:29
Не верифицирован
22 окт 2024, 00:29
3b68658
Код
Авторство
О чём код?
import { ERROR_PACKET, PACKET_TYPES_REVERSE, Packet, BinaryType, RawData, } from "./commons.js"; export const decodePacket = ( encodedPacket: RawData, binaryType?: BinaryType, ): Packet => { if (typeof encodedPacket !== "string") { return { type: "message", data: mapBinary(encodedPacket, binaryType), }; } const type = encodedPacket.charAt(0); if (type === "b") { const buffer = Buffer.from(encodedPacket.substring(1), "base64"); return { type: "message", data: mapBinary(buffer, binaryType), }; } if (!PACKET_TYPES_REVERSE[type]) { return ERROR_PACKET; } return encodedPacket.length > 1 ? { type: PACKET_TYPES_REVERSE[type], data: encodedPacket.substring(1), } : { type: PACKET_TYPES_REVERSE[type], }; }; const mapBinary = (data: RawData, binaryType?: BinaryType) => { switch (binaryType) { case "arraybuffer": if (data instanceof ArrayBuffer) { // from WebSocket & binaryType "arraybuffer" return data; } else if (Buffer.isBuffer(data)) { // from HTTP long-polling return data.buffer.slice( data.byteOffset, data.byteOffset + data.byteLength, ); } else { // from WebTransport (Uint8Array) return data.slice().buffer; } case "nodebuffer": default: if (Buffer.isBuffer(data)) { // from HTTP long-polling or WebSocket & binaryType "nodebuffer" (default) return data; } else { // from WebTransport (Uint8Array) return Buffer.from(data); } } };