astro-ghostcms/.pnpm-store/v3/files/b3/78b9aad63c722c46d84147fd224...

61 lines
2.1 KiB
Plaintext
Raw Normal View History

2024-02-20 00:35:26 +00:00
const decoder = new TextDecoder();
const toUTF8String = (input, start = 0, end = input.length) => decoder.decode(input.slice(start, end));
const toHexString = (input, start = 0, end = input.length) => input.slice(start, end).reduce((memo, i) => memo + ("0" + i.toString(16)).slice(-2), "");
const readInt16LE = (input, offset = 0) => {
const val = input[offset] + input[offset + 1] * 2 ** 8;
return val | (val & 2 ** 15) * 131070;
};
const readUInt16BE = (input, offset = 0) => input[offset] * 2 ** 8 + input[offset + 1];
const readUInt16LE = (input, offset = 0) => input[offset] + input[offset + 1] * 2 ** 8;
const readUInt24LE = (input, offset = 0) => input[offset] + input[offset + 1] * 2 ** 8 + input[offset + 2] * 2 ** 16;
const readInt32LE = (input, offset = 0) => input[offset] + input[offset + 1] * 2 ** 8 + input[offset + 2] * 2 ** 16 + (input[offset + 3] << 24);
const readUInt32BE = (input, offset = 0) => input[offset] * 2 ** 24 + input[offset + 1] * 2 ** 16 + input[offset + 2] * 2 ** 8 + input[offset + 3];
const readUInt32LE = (input, offset = 0) => input[offset] + input[offset + 1] * 2 ** 8 + input[offset + 2] * 2 ** 16 + input[offset + 3] * 2 ** 24;
const methods = {
readUInt16BE,
readUInt16LE,
readUInt32BE,
readUInt32LE
};
function readUInt(input, bits, offset, isBigEndian) {
offset = offset || 0;
const endian = isBigEndian ? "BE" : "LE";
const methodName = "readUInt" + bits + endian;
return methods[methodName](input, offset);
}
function readBox(buffer, offset) {
if (buffer.length - offset < 4)
return;
const boxSize = readUInt32BE(buffer, offset);
if (buffer.length - offset < boxSize)
return;
return {
name: toUTF8String(buffer, 4 + offset, 8 + offset),
offset,
size: boxSize
};
}
function findBox(buffer, boxName, offset) {
while (offset < buffer.length) {
const box = readBox(buffer, offset);
if (!box)
break;
if (box.name === boxName)
return box;
offset += box.size;
}
}
export {
findBox,
readInt16LE,
readInt32LE,
readUInt,
readUInt16BE,
readUInt16LE,
readUInt24LE,
readUInt32BE,
readUInt32LE,
toHexString,
toUTF8String
};