3.0.10 • Published 3 months ago

@thi.ng/bencode v3.0.10

Weekly downloads
85
License
Apache-2.0
Repository
github
Last release
3 months ago

bencode

npm version npm downloads Twitter Follow

This project is part of the @thi.ng/umbrella monorepo.

About

Binary Bencode encoder & decoder for structured data.

Features / behaviors

Booleans

Will be converted to 0 or 1.

String handling

All JS strings will be UTF-8 encoded. To write raw bytes without transformation, wrap them as Uint8Array. These too will be written as Bencode strings (e.g. len:xxx...), but are used as is.

Floating point values

This implementation has optional (non-standard) support for floating point values. If these are not desired (e.g. for compatibility reasons), all numeric values MUST be pre-rounded to integers. The encoder only chooses the custom float encoding iff a number has a fractional part. Floats are encoded similarly to standard ints (i.e. as text), but using f as prefix. Furthermore, only floats with an absolute value in the semi-open [1e-6,1e21) interval can be encoded.

Status

STABLE - used in production

Search or submit any issues for this package

Installation

yarn add @thi.ng/bencode

ES module import:

<script type="module" src="https://cdn.skypack.dev/@thi.ng/bencode"></script>

Skypack documentation

For Node.js REPL:

# with flag only for < v16
node --experimental-repl-await

> const bencode = await import("@thi.ng/bencode");

Package sizes (gzipped, pre-treeshake): ESM: 1.23 KB

Dependencies

API

Generated API docs

import { encode, decode } from "@thi.ng/bencode";
import { hexDump } from "@thi.ng/transducers-binary";

[...hexDump({}, encode({ foo: "bar", "baz": [0, 1, 2, 3], "pi": Math.PI }))]
// [ '00000000 | 64 33 3a 62 61 7a 6c 69 30 65 69 31 65 69 32 65 | d3:bazli0ei1ei2e',
//   '00000010 | 69 33 65 65 33 3a 66 6f 6f 33 3a 62 61 72 32 3a | i3ee3:foo3:bar2:',
//   '00000020 | 70 69 66 33 2e 31 34 31 35 39 32 36 35 33 35 38 | pif3.14159265358',
//   '00000030 | 39 37 39 33 65 65 00 00 00 00 00 00 00 00 00 00 | 9793ee..........' ]

// Uin8Array values are written verbatim (as Bencode strings)
[...hexDump({}, encode({ foo: new Uint8Array([0, 1 ,2, 3]) }))]
// [ '00000000 | 64 33 3a 66 6f 6f 34 3a 00 01 02 03 65 00 00 00 | d3:foo4:....e...' ]

const bytes = encode({ foo: [1, "a", { bar: "baz"}, [42]] });
// Uint8Array [ 100, 51, 58, 102, 111, 111, 108, 105, 49, 101, 49, ... ]

decode(bytes)
// { foo: [ 1, 'a', { bar: 'baz' }, [ 42 ] ] }

// decode w/o UTF8 decoding
// (note: dictionary keys will ALWAYS be utf8 decoded)
decode(bytes, false)
// { foo: [ 1, [ 97 ], { bar: [ 98, 97, 122 ] }, [ 42 ] ] }

Authors

Karsten Schmidt

If this project contributes to an academic publication, please cite it as:

@misc{thing-bencode,
  title = "@thi.ng/bencode",
  author = "Karsten Schmidt",
  note = "https://thi.ng/bencode",
  year = 2016
}

License

© 2016 - 2021 Karsten Schmidt // Apache Software License 2.0

3.0.10

3 months ago

3.0.9

4 months ago

3.0.8

4 months ago

3.0.7

4 months ago

3.0.4

5 months ago

3.0.6

4 months ago

3.0.5

5 months ago

3.0.3

5 months ago

3.0.2

5 months ago

3.0.1

5 months ago

3.0.0

5 months ago

2.1.148

5 months ago

2.1.147

6 months ago

2.1.146

6 months ago

2.1.145

7 months ago

2.1.143

7 months ago

2.1.144

7 months ago

2.1.142

7 months ago

2.1.141

7 months ago

2.1.140

8 months ago

2.1.130

10 months ago

2.1.132

10 months ago

2.1.131

10 months ago

2.1.134

10 months ago

2.1.133

10 months ago

2.1.136

9 months ago

2.1.135

9 months ago

2.1.138

8 months ago

2.1.137

9 months ago

2.1.139

8 months ago

2.1.123

12 months ago

2.1.125

11 months ago

2.1.124

12 months ago

2.1.127

11 months ago

2.1.126

11 months ago

2.1.129

11 months ago

2.1.128

11 months ago

2.1.122

1 year ago

2.1.121

1 year ago

2.1.120

1 year ago

2.1.119

1 year ago

2.1.118

1 year ago

2.1.117

1 year ago

2.1.116

1 year ago

2.1.115

1 year ago

2.1.114

1 year ago

2.1.113

1 year ago

2.1.112

1 year ago

2.1.111

1 year ago

2.1.110

1 year ago

2.1.109

1 year ago

2.1.108

1 year ago

2.1.107

1 year ago

2.1.106

1 year ago

2.1.105

1 year ago

2.1.104

1 year ago

2.1.101

1 year ago

2.1.103

1 year ago

2.1.102

1 year ago

2.1.100

1 year ago

2.1.98

1 year ago

2.1.97

1 year ago

2.1.96

1 year ago

2.1.94

1 year ago

2.1.95

1 year ago

2.1.93

1 year ago

2.1.91

1 year ago

2.1.90

1 year ago

2.1.89

1 year ago

2.1.88

1 year ago

2.1.87

1 year ago

2.1.85

1 year ago

2.1.86

1 year ago

2.1.84

2 years ago

2.1.83

2 years ago

2.1.82

2 years ago

2.1.81

2 years ago

2.1.80

2 years ago

2.1.58

2 years ago

2.1.59

2 years ago

2.1.56

2 years ago

2.1.57

2 years ago

2.1.54

2 years ago

2.1.53

2 years ago

2.1.69

2 years ago

2.1.67

2 years ago

2.1.68

2 years ago

2.1.65

2 years ago

2.1.66

2 years ago

2.1.63

2 years ago

2.1.64

2 years ago

2.1.61

2 years ago

2.1.62

2 years ago

2.1.60

2 years ago

2.1.79

2 years ago

2.1.76

2 years ago

2.1.77

2 years ago

2.1.74

2 years ago

2.1.75

2 years ago

2.1.72

2 years ago

2.1.73

2 years ago

2.1.70

2 years ago

2.1.71

2 years ago

2.1.52

2 years ago

2.1.51

2 years ago

2.1.49

2 years ago

2.1.50

2 years ago

2.1.47

2 years ago

2.1.48

2 years ago

2.1.45

2 years ago

2.1.46

2 years ago

2.1.43

2 years ago

2.1.44

2 years ago

2.1.42

2 years ago

2.1.41

2 years ago

2.1.38

2 years ago

2.1.40

2 years ago

2.1.36

2 years ago

2.1.37

2 years ago

2.1.34

2 years ago

2.1.35

2 years ago

2.1.33

2 years ago

2.1.27

3 years ago

2.1.28

3 years ago

2.1.25

3 years ago

2.1.26

3 years ago

2.1.23

3 years ago

2.1.24

3 years ago

2.1.22

3 years ago

2.1.29

3 years ago

2.1.32

3 years ago

2.1.30

3 years ago

2.1.31

3 years ago

2.1.21

3 years ago

2.1.20

3 years ago

2.1.19

3 years ago

2.1.16

3 years ago

2.1.17

3 years ago

2.1.14

3 years ago

2.1.15

3 years ago

2.1.12

3 years ago

2.1.13

3 years ago

2.1.11

3 years ago

2.1.18

3 years ago

2.1.9

3 years ago

2.1.10

3 years ago

2.1.8

3 years ago

2.1.7

3 years ago

2.1.6

3 years ago

2.1.5

3 years ago

2.0.8

4 years ago

2.1.2

4 years ago

2.1.1

4 years ago

2.1.4

3 years ago

2.1.3

4 years ago

2.1.0

4 years ago

2.0.7

4 years ago

2.0.4

4 years ago

2.0.6

4 years ago

2.0.3

4 years ago

2.0.1

4 years ago

2.0.0

4 years ago

1.0.5

4 years ago

1.0.4

4 years ago

1.0.3

4 years ago

1.0.2

4 years ago

1.0.1

4 years ago

0.3.69

4 years ago

0.3.68

4 years ago

0.3.67

4 years ago

0.3.66

4 years ago

0.3.65

4 years ago

0.3.64

4 years ago

0.3.63

4 years ago

0.3.62

4 years ago

0.3.61

4 years ago

0.3.60

4 years ago

0.3.59

4 years ago

0.3.58

4 years ago

0.3.57

4 years ago

0.3.56

4 years ago

0.3.55

4 years ago

0.3.51

4 years ago

0.3.50

4 years ago

0.3.49

4 years ago

0.3.48

4 years ago

0.3.47

4 years ago

0.3.46

4 years ago

0.3.45

4 years ago

0.3.44

4 years ago

0.3.43

5 years ago

0.3.42

5 years ago

0.3.41

5 years ago

0.3.40

5 years ago

0.3.39

5 years ago

0.3.38

5 years ago

0.3.37

5 years ago

0.3.36

5 years ago

0.3.35

5 years ago

0.3.34

5 years ago

0.3.33

5 years ago

0.3.31

5 years ago

0.3.32

5 years ago

0.3.30

5 years ago

0.3.29

5 years ago

0.3.28

5 years ago

0.3.27

5 years ago

0.3.26

5 years ago

0.3.25

5 years ago

0.3.24

5 years ago

0.3.23

5 years ago

0.3.22

5 years ago

0.3.21

5 years ago

0.3.20

5 years ago

0.3.19

5 years ago

0.3.18

5 years ago

0.3.17

5 years ago

0.3.16

5 years ago

0.3.15

5 years ago

0.3.14

5 years ago

0.3.13

5 years ago

0.3.12

5 years ago

0.3.9

5 years ago

0.3.8

5 years ago

0.3.7

6 years ago

0.3.6

6 years ago

0.3.5

6 years ago

0.3.4

6 years ago

0.3.3

6 years ago

0.3.2

6 years ago

0.3.1

6 years ago

0.3.0

6 years ago

0.2.17

6 years ago

0.2.16

6 years ago

0.2.15

6 years ago

0.2.14

6 years ago

0.2.13

6 years ago

0.2.12

6 years ago

0.2.11

6 years ago

0.2.10

6 years ago

0.2.9

6 years ago

0.2.8

6 years ago

0.2.7

6 years ago

0.2.6

6 years ago

0.2.5

6 years ago

0.2.4

6 years ago

0.2.3

6 years ago

0.2.2

6 years ago

0.2.1

6 years ago

0.2.0

6 years ago

0.1.1

6 years ago

0.1.0

6 years ago