Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/reklatsmasters/btparse
A modern bencode parser focused on speed and perfomance.
https://github.com/reklatsmasters/btparse
bencode bencode-parser bittorrent decode node nodejs parser parsing torrent
Last synced: 24 days ago
JSON representation
A modern bencode parser focused on speed and perfomance.
- Host: GitHub
- URL: https://github.com/reklatsmasters/btparse
- Owner: reklatsmasters
- License: mit
- Created: 2014-06-09T18:58:35.000Z (over 10 years ago)
- Default Branch: master
- Last Pushed: 2017-11-25T10:44:54.000Z (almost 7 years ago)
- Last Synced: 2024-04-29T11:21:50.891Z (6 months ago)
- Topics: bencode, bencode-parser, bittorrent, decode, node, nodejs, parser, parsing, torrent
- Language: JavaScript
- Homepage:
- Size: 119 KB
- Stars: 8
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE.md
Awesome Lists containing this project
README
## btparse [![Build Status](https://travis-ci.org/reklatsmasters/btparse.svg?branch=master)](https://travis-ci.org/reklatsmasters/btparse) [![npm](https://img.shields.io/npm/v/btparse.svg)](https://npmjs.org/package/btparse) [![license](https://img.shields.io/npm/l/btparse.svg)](https://npmjs.org/package/btparse) [![downloads](https://img.shields.io/npm/dm/btparse.svg)](https://npmjs.org/package/btparse)
A modern bencode parser focused on speed and perfomance. It used [`recursive descent parser`](https://en.wikipedia.org/wiki/Recursive_descent_parser), a kind of [`top-down`](https://en.wikipedia.org/wiki/Top-down_parsing) parsers.
## Usage
```js
// classic api
const decode = require('btparse')
// or you can use lazy parser
// const decode = require('btparse/lazy')console.log(decode(torrent).info.name)
console.log(decode('d3:abcli13eee')) // {abc: [ 13 ]}
```## Perfomance
*nodejs 8.3.0 / windows 10 x64 / i5 4690*|Library| op/s |
|-------|:---:|
|bencode| 129,671 |
|btparse| 179,075 |
|btparse#lazy|205,130|## API
##### `decode(input: Buffer|String, opts: Options) -> Object|Number|Array|Buffer`
Parse and decode bencoded message.* **`opts.depth: Number`**
Max parse depth for objects; default = `infinity`, min = `1`
```js
const decode = require('btparse')console.log(decode('d2:abi2e2:bbd2:ccleee', {depth: 1})) // {ab: 2, bb: Buffer.from('d2:cclee')}
```## Lazy
##### `decode(input: Buffer|String) -> Proxy|Number|Array|Buffer`
The main difference is that **all** buffers decoded into a strings on demand. Required nodejs 6+.```js
const decode = require('btparse/lazy')// get prop
console.log(decode(torrent).info.name)// check prop
console.log('name' in decode(torrent).info)// get all keys / props
console.log(Reflect.ownKeys(decode(torrent)))
```## License
MIT, (c) Dmitry Tsvettsikh, 2017+