import { ERROR_PACKET , PACKET_TYPES_REVERSE , Packet , BinaryType , RawData } from "./commons.js" ; import { decode } from "@socket.io/base64-arraybuffer" ; const withNativeArrayBuffer = typeof ArrayBuffer === "function" ; const decodePacket = ( encodedPacket , binaryType ? ) : Packet => { if ( typeof encodedPacket !== "string" ) { return { type : "message" , data : mapBinary ( encodedPacket , binaryType ) } ; } const type = encodedPacket . charAt ( 0 ) ; if ( type === "b" ) { return { type : "message" , data : decodeBase64Packet ( encodedPacket . substring ( 1 ) , binaryType ) } ; } const packetType = PACKET_TYPES_REVERSE [ type ] ; if ( ! packetType ) { return ERROR_PACKET ; } return encodedPacket . length > 1 ? { type : PACKET_TYPES_REVERSE [ type ] , data : encodedPacket . substring ( 1 ) } : { type : PACKET_TYPES_REVERSE [ type ] } ; } ; const decodeBase64Packet = ( data , binaryType ) => { if ( withNativeArrayBuffer ) { const decoded = decode ( data ) ; return mapBinary ( decoded , binaryType ) ; } else { return { base64 : true , data } ; } } ; const mapBinary = ( data , binaryType ) => { switch ( binaryType ) { case "blob" : return data instanceof ArrayBuffer ? new Blob ( [ data ] ) : data ; case "arraybuffer" : default : return data ; } } ; export default decodePacket ;