UNPKG

@tf2pickup-org/mumble-client

Version:
46 lines 1.62 kB
export function readVarint(buffer) { if (buffer.length === 0) { throw new Error(`buffer is empty`); } switch (true) { case (0b10000000 & buffer[0]) === 0: return { value: buffer.readUInt8(0), length: 1 }; case (0b11000000 & buffer[0]) === 0b10000000: return { value: buffer.readUint16BE(0) & 0x3fff, length: 2 }; case (0b11100000 & buffer[0]) === 0b11000000: return { value: ((buffer.readUint16BE(0) & 0x1fff) << 8) | buffer.readUint8(2), length: 3, }; case (0b11110000 & buffer[0]) === 0b11100000: return { value: buffer.readUint32BE(0) & 0x1fffffff, length: 4, }; case (0b11111100 & buffer[0]) === 0b11110000: return { value: buffer.readUint32BE(1), length: 5, }; case (0b11111100 & buffer[0]) === 0b11110100: return { value: buffer.readBigInt64BE(1), length: 9, }; case (0b11111100 & buffer[0]) === 0b11111000: { const { value, length } = readVarint(buffer.subarray(1)); return { value: -value, length: length + 1, }; } case (0b11111100 & buffer[0]) === 0b11111100: return { value: ~(buffer.readUint8(0) & 0x00000011), length: 1, }; default: throw new Error(`varint not supported`); } } //# sourceMappingURL=read-varint.js.map