binarytf v2.1.3
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' }
This module is TypeScript ready and comes with types included. To import with ESM use the following syntax:
import { serialize, deserialize } from 'binarytf';
Credit
binarytf
is heavily based on devsnek/earl
, this module wouldn't be possible without it's author:
Contributing
- Fork it!
- Create your feature branch:
git checkout -b my-new-feature
- Commit your changes:
git commit -am 'Add some feature'
- Push to the branch:
git push origin my-new-feature
- Submit a pull request!
Author
binarytf © kyranet, released under the MIT License. Authored and maintained by kyranet.
Contributors ✨
Thanks goes to these wonderful people (emoji key):
This project follows the all-contributors specification. Contributions of any kind welcome!
4 days ago
11 days ago
18 days ago
18 days ago
21 days ago
25 days ago
28 days ago
1 month ago
1 month ago
1 month ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
6 months ago
6 months ago
8 months ago
6 months ago
6 months ago
10 months ago
9 months ago
7 months ago
9 months ago
6 months ago
9 months ago
8 months ago
6 months ago
8 months ago
10 months ago
7 months ago
9 months ago
9 months ago
8 months ago
7 months ago
9 months ago
5 months ago
10 months ago
7 months ago
7 months ago
6 months ago
9 months ago
6 months ago
9 months ago
9 months ago
10 months ago
6 months ago
5 months ago
5 months ago
7 months ago
7 months ago
10 months ago
10 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
12 months ago
11 months ago
12 months ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
12 months ago
1 year ago
1 year ago
1 year ago
1 year ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago