align structure more with underlying chunk layout

This commit is contained in:
2025-01-06 21:49:08 -06:00
parent acac519e9a
commit 6580f66e91
35 changed files with 594 additions and 372 deletions
+17 -7
View File
@@ -1,19 +1,29 @@
import { Chunk } from '../models/chunk';
export default (buffer: Uint8Array, dataDecoder: Function): Chunk => {
export default (buffer: Uint8Array): Chunk => {
let offset = 0;
const view = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength);
const chunk: Chunk = {};
chunk.id = view.getUint16(offset, true);
const id = view.getUint16(offset, true);
offset += 2;
// NOTE(jwetzell): this data is split up as 1 bit for has_subchunks and 15 bits for the data_len
const combinedLengthAndFlag = view.getUint16(offset, true);
chunk.has_subchunks = combinedLengthAndFlag > 32768;
chunk.data_len = chunk.has_subchunks ? combinedLengthAndFlag - 32768 : combinedLengthAndFlag;
const hasSubchunks = combinedLengthAndFlag > 32768;
const dataLen = hasSubchunks ? combinedLengthAndFlag - 32768 : combinedLengthAndFlag;
offset += 2;
chunk.chunk_data = buffer.slice(offset, offset + chunk.data_len);
dataDecoder(chunk);
const header = {
id,
dataLen,
hasSubchunks,
};
const chunkData = buffer.subarray(offset, offset + header.dataLen);
const chunk = {
chunkData,
header,
};
return chunk;
};