Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

@hazae41/binary

hazae4187MIT1.3.5TypeScript support: included

Zero-copy binary data types

binary, zero-copy, encoding, decoding, buffer, bytes, protocol, packets, reader, writer, offset, asn1, der, ber, octets, stream, low-level, alloc, allocation, allocator, typescript, esmodules, tested, unit-tested

readme

npm i @hazae41/binary

Node Package 📦

Features

Current features

  • 100% TypeScript and ESM
  • No external dependencies
  • Zero-copy reading and writing
  • Rust-like patterns
  • Unit-tested

Usage

Writable

class MyObject implements Writable {

  constructor(
    readonly x: number,
    readonly y: number
  ) {}

  size() {
    return 1 + 2
  }

  write(cursor: Cursor): Result<void, Error> {
    return Result.unthrowSync(() => {
      cursor.tryWriteUint8(this.x).throw()
      cursor.tryWriteUint16(this.y).throw()

      return Ok.void()
    })
  }

}
const myobject = new MyObject(1, 515)
const bytes = Writable.tryWriteToBytes(myobject).unwrap() // Uint8Array([1, 2, 3])

Readable

class MyObject {

  constructor(
    readonly x: number,
    readonly y: number
  ) {}

  static read(cursor: Cursor): Result<MyObject, Error> {
    return Result.unthrowSync(() => {
      const x = cursor.tryReadUint8().throw()
      const y = cursor.tryReadUint16().throw()

      return new Ok(new this(x, y))
    })
  }

}
const bytes = new Uint8Array([1, 2, 3])
const myobject = Readable.tryReadFromBytes(MyObject, bytes).unwrap() // MyObject(1, 515)

Opaque

This is a binary data type that just holds bytes, it can be used when a binary data type is required

const bytes = new Uint8Array([1, 2, 3])
const opaque = Readable.tryReadFromBytes(SafeOpaque, bytes).unwrap() // Opaque(Uint8Array([1, 2, 3]))
const myobject = opaque.tryInto(MyObject).unwrap() // MyObject(1, 515)
const myobject = new MyObject(1, 515)
const opaque = Opaque.tryWriteFrom(myobject).unwrap() // Opaque(Uint8Array([1, 2, 3]))
const bytes = Writable.tryWriteToBytes(opaque).unwrap() // Uint8Array([1, 2, 3])