Bencode Codec
Implements Bencode encoder and decoder.
Features
- High-performance Bencode encoding and decoding
- Support for all standard Bencode types
- Extensions for additional JavaScript types
- BitTorrent-compatible implementation
Usage
Note: BencodeEncoder requires a Writer instance from the @jsonjoy.com/util package. Make sure to install it as a peer dependency:
npm install @jsonjoy.com/util
Basic Usage
import {BencodeEncoder, BencodeDecoder} from '@jsonjoy.com/json-pack/lib/bencode';
import {Writer} from '@jsonjoy.com/buffers/lib/Writer';
const writer = new Writer();
const encoder = new BencodeEncoder(writer);
const decoder = new BencodeDecoder();
const data = {
name: 'example.torrent',
length: 1024,
files: ['file1.txt', 'file2.txt']
};
const encoded = encoder.encode(data);
const decoded = decoder.decode(encoded);
console.log(decoded); // Original data structure
import {Writer} from '@jsonjoy.com/buffers/lib/Writer';
const writer = new Writer();
const encoder = new BencodeEncoder(writer);
const decoder = new BencodeDecoder();
const data = {
name: 'example.torrent',
length: 1024,
files: ['file1.txt', 'file2.txt']
};
const encoded = encoder.encode(data);
const decoded = decoder.decode(encoded);
console.log(decoded); // Original data structure
Alternative: Use simpler codecs
For easier usage without external dependencies, consider using MessagePack or CBOR codecs instead:
import {MessagePackEncoder, MessagePackDecoder} from '@jsonjoy.com/json-pack/lib/msgpack';
// ... simpler usage
// ... simpler usage
Type Coercion
- Strings and
Uint8Arrayare encoded as Bencode byte strings, decoded asUint8Array. ObjectandMapare encoded as Bencode dictionaries, decoded asObject.ArrayandSetare encoded as Bencode lists, decoded asArray.numberandbigintare encoded as Bencode integers, decoded asnumber.- Float
numberare rounded and encoded as Bencode integers, decoded asnumber.
Extensions
This codec extends the Bencode specification to support the following types:
null(encoded asn)undefined(encoded asu)boolean(encoded astfortrueandfforfalse)