https://github.com/hazae41/binary
Zero-copy binary data types 🏎️
https://github.com/hazae41/binary
binary buffer cursor decoding encoding esmodules javascript nodejs typescript unit-testing zero-copy
Last synced: 3 months ago
JSON representation
Zero-copy binary data types 🏎️
- Host: GitHub
- URL: https://github.com/hazae41/binary
- Owner: hazae41
- Created: 2022-12-15T14:05:49.000Z (almost 3 years ago)
- Default Branch: master
- Last Pushed: 2025-06-30T09:26:22.000Z (4 months ago)
- Last Synced: 2025-06-30T09:34:44.965Z (4 months ago)
- Topics: binary, buffer, cursor, decoding, encoding, esmodules, javascript, nodejs, typescript, unit-testing, zero-copy
- Language: TypeScript
- Homepage:
- Size: 310 KB
- Stars: 3
- Watchers: 2
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
Awesome Lists containing this project
README
![]()
```bash
npm i @hazae41/binary
```[**Node Package 📦**](https://www.npmjs.com/package/@hazae41/binary)
## Features
### Current features
- 100% TypeScript and ESM
- No external dependencies
- Zero-copy reading and writing
- Rust-like patterns
- Unit-tested## Usage
#### Writable
```typescript
class MyObject implements Writable {constructor(
readonly x: number,
readonly y: number
) {}sizeOrThrow() {
return 1 + 2
}writeOrThrow(cursor: Cursor) {
cursor.writeUint8OrThrow(this.x)
cursor.writeUint16OrThrow(this.y)
}}
``````typescript
const myobject = new MyObject(1, 515)
const bytes = Writable.writeToBytesOrThrow(myobject) // Uint8Array([1, 2, 3])
```#### Readable
```typescript
class MyObject {constructor(
readonly x: number,
readonly y: number
) {}static readOrThrow(cursor: Cursor): MyObject {
const x = cursor.readUint8OrThrow()
const y = cursor.readUint16OrThrow()return new MyObject(x, y)
}}
``````typescript
const bytes = new Uint8Array([1, 2, 3])
const myobject = Readable.readFromBytesOrThrow(MyObject, bytes) // 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
```typescript
const bytes = new Uint8Array([1, 2, 3])
const opaque = Readable.readFromBytesOrThrow(Opaque.Uncopied, bytes) // Opaque(Uint8Array([1, 2, 3]))
const myobject = opaque.readIntoOrThrow(MyObject) // MyObject(1, 515)
``````typescript
const myobject = new MyObject(1, 515)
const opaque = Opaque.writeFromOrThrow(myobject) // Opaque.Copied(Uint8Array([1, 2, 3]))
const bytes = Writable.writeToBytesOrThrow(opaque) // Uint8Array([1, 2, 3])
```