Core buffers
@webbuf/rw
Read and write buffers, optimized with Rust/WASM
Install
npm install @webbuf/rwUsage
import { BufWriter, BufReader } from "@webbuf/rw";
import { zigZagEncode, zigZagDecode } from "@webbuf/numbers";
import {
U8,
U16BE,
U32BE,
U64BE,
U16LE,
U32LE,
U64LE,
U128LE,
U256LE,
} from "@webbuf/numbers";
import { FixedBuf } from "@webbuf/fixedbuf";
const writer = new BufWriter();
// Separate codecs: SLEB128 is not ZigZag followed by ULEB128.
const variable = new BufWriter()
.writeULEB128(300n)
.writeSLEB128(-1n)
.writeULEB128(zigZagEncode(-1n));
if (variable.toBuf().toHex() !== "ac027f01") throw new Error("Wrong bytes");
const variableReader = new BufReader(variable.toBuf());
if (variableReader.readULEB128() !== 300n)
throw new Error("Wrong unsigned value");
if (variableReader.readSLEB128() !== -1n) throw new Error("Wrong signed value");
if (zigZagDecode(variableReader.readULEB128()) !== -1n)
throw new Error("Wrong ZigZag value");
// Write numbers
writer.writeU8(U8.fromN(255));
writer.writeU16BE(U16BE.fromN(1000));
writer.writeU32BE(U32BE.fromN(123456));
writer.writeU64BE(U64BE.fromBn(0x123456789abcdef0n));
// Write fixed buffers
const hash = FixedBuf.fromRandom<32>(32);
writer.write(hash.buf);
// Write variable-length data
writer.writeVarIntU64BE(U64BE.fromBn(1000n));
// Fixed-width little-endian fields (not varints)
writer.writeU16LE(U16LE.fromN(1000));
writer.writeU32LE(U32LE.fromN(123456));
writer.writeU64LE(U64LE.fromBn(0x123456789abcdef0n));
writer.writeU128LE(U128LE.fromBn(1n << 100n));
writer.writeU256LE(U256LE.fromBn(1n << 200n));
// Get result
const buf = writer.toBuf();API reference (2 exports)
Classes
BufReader
classconstructor(buf: WebBuf): BufReader
buf: WebBuf
pos: number
eof(): boolean
readULEB128(maxBits?: number): bigint
readSLEB128(maxBits?: number): bigint
read(len: number): WebBuf
readFixed<N extends number>(len: N): FixedBuf<N>
readRemainder(): WebBuf
readU8(): U8
readU16BE(): U16BE
readU32BE(): U32BE
readU64BE(): U64BE
readU128BE(): U128BE
readU256BE(): U256BE
readU16LE(): U16LE
readU32LE(): U32LE
readU64LE(): U64LE
readU128LE(): U128LE
readU256LE(): U256LE
readVarIntBEBuf(): WebBuf
readVarIntLEBuf(): WebBuf
readVarIntU64LE(): U64LE
readVarIntU64BE(): U64BEBufWriter
classconstructor(bufs?: WebBuf[]): BufWriter
static varIntU64LEBuf(value: U64LE): WebBuf
static varIntU64BEBuf(bn: U64BE): WebBuf
bufs: WebBuf[]
getLength(): number
toBuf(): WebBuf
write(buf: WebBuf): BufWriter
writeULEB128(value: bigint, maxBits?: number): BufWriter
writeSLEB128(value: bigint, maxBits?: number): BufWriter
writeU8(u8: U8): BufWriter
writeU16BE(u16: U16BE): BufWriter
writeU32BE(u32: U32BE): BufWriter
writeU64BE(u64: U64BE): BufWriter
writeU128BE(u128: U128BE): BufWriter
writeU256BE(u256: U256BE): BufWriter
writeU16LE(value: U16LE): BufWriter
writeU32LE(value: U32LE): BufWriter
writeU64LE(value: U64LE): BufWriter
writeU128LE(value: U128LE): BufWriter
writeU256LE(value: U256LE): BufWriter
writeVarIntU64BE(u64: U64BE): BufWriter
writeVarIntU64LE(value: U64LE): BufWriter