This commit is contained in:
Joel Wetzell
2026-07-13 14:09:21 -05:00
parent 4bb1e87e03
commit 466228fb4a
62 changed files with 2157 additions and 1851 deletions
+21 -19
View File
@@ -1,29 +1,31 @@
import type { Chunk } from '../models/chunk.js';
export default (buffer: Uint8Array): Chunk => {
if (buffer.length < 4) {
throw new Error('Chunk buffer must be at least 4 bytes');
}
if (buffer.length < 4) {
throw new Error('Chunk buffer must be at least 4 bytes');
}
const id = (buffer[1] << 8) + buffer[0];
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;
// 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 header = {
id,
dataLen,
hasSubchunks,
};
const chunkData = buffer.subarray(4, 4 + header.dataLen);
const chunkData = buffer.subarray(4, 4 + header.dataLen);
const chunk = {
chunkData,
header,
};
const chunk = {
chunkData,
header,
};
return chunk;
return chunk;
};