46 lines
1.1 KiB
JavaScript
46 lines
1.1 KiB
JavaScript
function getMsgpack() {
|
|
const globalObj = typeof globalThis !== "undefined" ? globalThis : window;
|
|
const mp =
|
|
globalObj.msgpackr ||
|
|
globalObj.msgpack ||
|
|
globalObj.msgpacklite ||
|
|
globalObj.MessagePack ||
|
|
globalObj.msgpack5 ||
|
|
globalObj.MsgPack;
|
|
if (!mp) {
|
|
return null;
|
|
}
|
|
return mp;
|
|
}
|
|
|
|
export function encodeMsgpack(payload) {
|
|
const mp = getMsgpack();
|
|
const encoder = mp?.pack || mp?.encode;
|
|
if (!encoder) {
|
|
throw new Error("msgpack encoder not available. Ensure msgpackr bundle is loaded before module scripts.");
|
|
}
|
|
return encoder(payload);
|
|
}
|
|
|
|
export function decodeMsgpack(data) {
|
|
const mp = getMsgpack();
|
|
const decoder = mp?.unpack || mp?.decode;
|
|
if (!decoder) {
|
|
throw new Error("msgpack decoder not available. Ensure msgpackr bundle is loaded before module scripts.");
|
|
}
|
|
if (data instanceof Uint8Array) {
|
|
return decoder(data);
|
|
}
|
|
if (data instanceof ArrayBuffer) {
|
|
return decoder(new Uint8Array(data));
|
|
}
|
|
if (typeof data === "string") {
|
|
try {
|
|
return JSON.parse(data);
|
|
} catch {
|
|
return null;
|
|
}
|
|
}
|
|
return null;
|
|
}
|