Files
react-native-devtools-frontend/node_modules/engine.io-parser/lib/decodePacket.browser.js
T
Tim van der Lippe c7b05fe360 Update testing packages
This updates Chai, Karma and Sinon. The breaking changes in Karma
6.0.0 don't affect us.

DISABLE_THIRD_PARTY_CHECK=NPM update
R=jacktfranklin@chromium.org

Bug: none
Change-Id: I77c2d4b1aeb1f0544d56c1f8a37e409a19352bfe
Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/2692906
Commit-Queue: Tim van der Lippe <tvanderlippe@chromium.org>
Reviewed-by: Jack Franklin <jacktfranklin@chromium.org>
2021-02-15 13:17:30 +00:00

58 lines
1.4 KiB
JavaScript

const { PACKET_TYPES_REVERSE, ERROR_PACKET } = require("./commons");
const withNativeArrayBuffer = typeof ArrayBuffer === "function";
let base64decoder;
if (withNativeArrayBuffer) {
base64decoder = require("base64-arraybuffer");
}
const decodePacket = (encodedPacket, binaryType) => {
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 (base64decoder) {
const decoded = base64decoder.decode(data);
return mapBinary(decoded, binaryType);
} else {
return { base64: true, data }; // fallback for old browsers
}
};
const mapBinary = (data, binaryType) => {
switch (binaryType) {
case "blob":
return data instanceof ArrayBuffer ? new Blob([data]) : data;
case "arraybuffer":
default:
return data; // assuming the data is already an ArrayBuffer
}
};
module.exports = decodePacket;