Miss any of our Open RFC calls?Watch the recordings here! »

binarytf

2.0.0 • Public • Published

binarytf

About

Binary Term Format is a term format inspired in ETF with more types and circular reference serialization and deserialization. This term format is designed to fix one of ETF's flaws: byte size.

Serializing this object:

{ "test": ["hello", "world"], "more": { "nested": "objects", "do": ["you", "like", "it?"] } }

Takes 80 bytes as JSON.stringify()'d, 116 bytes as ETF using devsnek/earl, and just 71 bytes in BTF.

The extreme compression is achieved by delimiting the bytes using a technique similar to null delimited strings. Allowing every string, array, set, map, and object, to trim the byte size by 3 (4 bytes for length/size -> 1 byte to delimit the field). TypedArrays do not get this feature, since they have a type for all elements instead of a type for each element, [0] works because it is encoded as ArrayType + NumberByteLiteralType + 0x00 + NullDelimiter, but this technique would not work in Uint8Array[0] (Uint8ArrayType + 0x00 + 0x00 + 0x00 + 0x01 + 0x00).

And this is also achieved by using special types for empty collections, [null] takes 3 bytes (ArrayType + NullType + NullDelimiter), but [] takes a single byte (EmptyArrayType). This also applies to empty objects, sets, and maps.

Usage

This module is plug-and-play, it exposes two functions, serialize and deserialize, and would be used in the following way:

const { serialize, deserialize } = require('binarytf');
 
const serialized = serialize({ hello: 'world' });
const deserialized = deserialize(serialized);
console.log(deserialized); // { hello: 'world' }

Credit

binarytf is heavily based on devsnek/earl, this module wouldn't be possible without it's author:

Contributing

  1. Fork it!
  2. Create your feature branch: git checkout -b my-new-feature
  3. Commit your changes: git commit -am 'Add some feature'
  4. Push to the branch: git push origin my-new-feature
  5. Submit a pull request!

Author

binarytf © kyranet, released under the MIT License. Authored and maintained by kyranet.

Github kyranet - Twitter @kyranet_

Install

npm i binarytf

DownloadsWeekly Downloads

175

Version

2.0.0

License

MIT

Unpacked Size

70 kB

Total Files

29

Last publish

Collaborators

  • avatar