Files
psn-js/src/decoders/chunk.ts
T
2025-01-22 23:08:44 -06:00

30 lines
725 B
TypeScript

import { Chunk } from '../models/chunk';
export default (buffer: Uint8Array): Chunk => {
if (buffer.length < 4) {
throw new Error('Chunk buffer must be at least 4 bytes');
}
const id = (buffer[1] << 8) + buffer[0];
// NOTE(jwetzell): this data is split up as 1 bit for hasSubchunks and 15 bits for the dataLen
const combinedLengthAndFlag = (buffer[3] << 8) + buffer[2];
const hasSubchunks = combinedLengthAndFlag > 32768;
const dataLen = hasSubchunks ? combinedLengthAndFlag - 32768 : combinedLengthAndFlag;
const header = {
id,
dataLen,
hasSubchunks,
};
const chunkData = buffer.subarray(4, 4 + header.dataLen);
const chunk = {
chunkData,
header,
};
return chunk;
};