UNPKG

@substrate-system/bencode

Version:
86 lines (75 loc) 28.7 kB
<!DOCTYPE html><html class="default" lang="en" data-base="."><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>@substrate-system/bencode</title><meta name="description" content="Documentation for @substrate-system/bencode"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="assets/style.css"/><link rel="stylesheet" href="assets/highlight.css"/><script defer src="assets/main.js"></script><script async src="assets/icons.js" id="tsd-icons-script"></script><script async src="assets/search.js" id="tsd-search-script"></script><script async src="assets/navigation.js" id="tsd-nav-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar"><div class="tsd-toolbar-contents container"><div class="table-cell" id="tsd-search"><div class="field"><label for="tsd-search-field" class="tsd-widget tsd-toolbar-icon search no-caption"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><use href="assets/icons.svg#icon-search"></use></svg></label><input type="text" id="tsd-search-field" aria-label="Search"/></div><div class="field"><div id="tsd-toolbar-links"></div></div><ul class="results"><li class="state loading">Preparing search index...</li><li class="state failure">The search index is not available</li></ul><a href="index.html" class="title">@substrate-system/bencode</a></div><div class="table-cell" id="tsd-widgets"><a href="#" class="tsd-widget tsd-toolbar-icon menu no-caption" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><use href="assets/icons.svg#icon-menu"></use></svg></a></div></div></header><div class="container container-main"><div class="col-content"><div class="tsd-page-title"><h1>@substrate-system/bencode</h1></div><div class="tsd-panel tsd-typography"><a id="bencode" class="tsd-anchor"></a><h1 class="tsd-anchor-link">bencode<a href="#bencode" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h1><p><img src="https://github.com/substrate-system/node-bencode/actions/workflows/nodejs.yml/badge.svg" alt="tests"> <a href="README.md"><img src="https://img.shields.io/npm/types/@substrate-system/bencode?style=flat-square" alt="types"></a> <a href="README.md"><img src="https://img.shields.io/badge/module-ESM%2FCJS-blue?style=flat-square" alt="module"></a> <a href="https://semver.org/" target="_blank" class="external"><img src="https://img.shields.io/badge/semver-2.0.0-blue?logo=semver&amp;style=flat-square" alt="semantic versioning"></a> <a href="./CHANGELOG.md"><img src="https://nichoth.github.io/badge/common-changelog.svg" alt="Common Changelog"></a> <a href="https://packagephobia.com/result?p=@substrate-system/bencode" target="_blank" class="external"><img src="https://flat.badgen.net/packagephobia/install/@substrate-system/bencode?cache-control=no-cache" alt="install size"></a> <a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-brightgreen.svg?style=flat-square" alt="license"></a></p> <p>A node library for encoding and decoding bencoded data, according to the <a href="http://www.bittorrent.org/beps/bep_0003.html" target="_blank" class="external">BitTorrent specification</a>.</p> <details><summary><h2>Contents</h2></summary> <!-- toc --> <ul> <li><a href="#about-bencoding">About BEncoding</a></li> <li><a href="#install">Install</a></li> <li><a href="#usage">Usage</a> <ul> <li><a href="#encoding">Encoding</a></li> <li><a href="#decoding">Decoding</a></li> </ul> </li> <li><a href="#api">API</a> <ul> <li><a href="#bencodeencode-data-buffer-offset-">bencode.encode( <em>data</em>, <em>[buffer]</em>, <em>[offset]</em> )</a></li> <li><a href="#bencodedecode-data-start-end-encoding-">bencode.decode( <em>data</em>, <em>[start]</em>, <em>[end]</em>, <em>[encoding]</em> )</a></li> <li><a href="#bencodebytelength-value--or-bencodeencodinglength-value-">bencode.byteLength( <em>value</em> ) or bencode.encodingLength( <em>value</em> )</a></li> </ul> </li> </ul> <!-- tocstop --> </details> <a id="about-bencoding" class="tsd-anchor"></a><h2 class="tsd-anchor-link">About BEncoding<a href="#about-bencoding" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2><p>from <a href="https://en.wikipedia.org/wiki/Bencoding" target="_blank" class="external">Wikipedia</a>:</p> <p>Bencode (pronounced like B encode) is the encoding used by the peer-to-peer file sharing system BitTorrent for storing and transmitting loosely structured data.</p> <p>It supports four different types of values:</p> <ul> <li>byte strings</li> <li>integers</li> <li>lists</li> <li>dictionaries</li> </ul> <p>Bencoding is most commonly used in torrent files. These metadata files are simply bencoded dictionaries.</p> <a id="install" class="tsd-anchor"></a><h2 class="tsd-anchor-link">Install<a href="#install" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2><pre><code class="sh"><span class="hl-0">npm</span><span class="hl-1"> </span><span class="hl-2">i</span><span class="hl-1"> </span><span class="hl-3">-S</span><span class="hl-1"> </span><span class="hl-2">@substrate-system/bencode</span> </code><button type="button">Copy</button></pre> <a id="usage" class="tsd-anchor"></a><h2 class="tsd-anchor-link">Usage<a href="#usage" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2><pre><code class="js"><span class="hl-4">import</span><span class="hl-1"> </span><span class="hl-5">bencode</span><span class="hl-1"> </span><span class="hl-4">from</span><span class="hl-1"> </span><span class="hl-2">&#39;@substrate-system/bencode&#39;</span> </code><button type="button">Copy</button></pre> <a id="encoding" class="tsd-anchor"></a><h3 class="tsd-anchor-link">Encoding<a href="#encoding" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><pre><code class="js"><span class="hl-3">var</span><span class="hl-1"> </span><span class="hl-5">data</span><span class="hl-1"> = {</span><br/><span class="hl-1"> </span><span class="hl-5">string:</span><span class="hl-1"> </span><span class="hl-2">&#39;Hello World&#39;</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">integer:</span><span class="hl-1"> </span><span class="hl-6">12345</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">dict:</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-5">key:</span><span class="hl-1"> </span><span class="hl-2">&#39;This is a string within a dictionary&#39;</span><br/><span class="hl-1"> },</span><br/><span class="hl-1"> </span><span class="hl-5">list:</span><span class="hl-1"> [ </span><span class="hl-6">1</span><span class="hl-1">, </span><span class="hl-6">2</span><span class="hl-1">, </span><span class="hl-6">3</span><span class="hl-1">, </span><span class="hl-6">4</span><span class="hl-1">, </span><span class="hl-2">&#39;string&#39;</span><span class="hl-1">, </span><span class="hl-6">5</span><span class="hl-1">, {} ]</span><br/><span class="hl-1">}</span><br/><br/><span class="hl-3">var</span><span class="hl-1"> </span><span class="hl-5">result</span><span class="hl-1"> = </span><span class="hl-5">bencode</span><span class="hl-1">.</span><span class="hl-0">encode</span><span class="hl-1">( </span><span class="hl-5">data</span><span class="hl-1"> )</span> </code><button type="button">Copy</button></pre> <div class="tsd-alert tsd-alert-note"><div class="tsd-alert-title"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><use href="assets/icons.svg#icon-alertNote"></use></svg><span>Note</span></div><p><br> As of <code>bencode@0.8.0</code>, boolean values will be cast to integers (false -&gt; 0, true -&gt; 1).</p> </div> <a id="output" class="tsd-anchor"></a><h4 class="tsd-anchor-link">Output<a href="#output" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h4><pre><code><span class="hl-7">d4</span><span class="hl-1">:</span><span class="hl-7">dictd3</span><span class="hl-1">:</span><span class="hl-7">key36</span><span class="hl-1">:</span><span class="hl-5">This</span><span class="hl-1"> </span><span class="hl-5">is</span><span class="hl-1"> </span><span class="hl-5">a</span><span class="hl-1"> </span><span class="hl-5">string</span><span class="hl-1"> </span><span class="hl-5">within</span><span class="hl-1"> </span><span class="hl-5">a</span><span class="hl-1"> </span><span class="hl-7">dictionarye7</span><span class="hl-1">:</span><span class="hl-7">integeri12345e4</span><span class="hl-1">:</span><span class="hl-7">listli1ei2ei3ei4e6</span><span class="hl-1">:</span><span class="hl-7">stringi5edee6</span><span class="hl-1">:</span><span class="hl-7">string11</span><span class="hl-1">:</span><span class="hl-5">Hello</span><span class="hl-1"> </span><span class="hl-5">Worlde</span> </code><button>Copy</button></pre> <a id="decoding" class="tsd-anchor"></a><h3 class="tsd-anchor-link">Decoding<a href="#decoding" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><pre><code class="js"><span class="hl-4">import</span><span class="hl-1"> </span><span class="hl-5">bencode</span><span class="hl-1"> </span><span class="hl-4">from</span><span class="hl-1"> </span><span class="hl-2">&#39;@substrate-system/bencode&#39;</span><br/><br/><span class="hl-3">var</span><span class="hl-1"> </span><span class="hl-5">data</span><span class="hl-1"> = </span><span class="hl-5">Buffer</span><span class="hl-1">.</span><span class="hl-0">from</span><span class="hl-1">(</span><span class="hl-2">&#39;d6:string11:Hello World7:integeri12345e4:dictd3:key36:This is a string within a dictionarye4:listli1ei2ei3ei4e6:stringi5edeee&#39;</span><span class="hl-1">)</span><br/><span class="hl-3">var</span><span class="hl-1"> </span><span class="hl-5">result</span><span class="hl-1"> = </span><span class="hl-5">bencode</span><span class="hl-1">.</span><span class="hl-0">decode</span><span class="hl-1">( </span><span class="hl-5">data</span><span class="hl-1"> )</span> </code><button type="button">Copy</button></pre> <a id="output-1" class="tsd-anchor"></a><h4 class="tsd-anchor-link">Output<a href="#output-1" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h4><pre><code><span class="hl-1">{</span><br/><span class="hl-1"> </span><span class="hl-7">string</span><span class="hl-1">: &lt;</span><span class="hl-8">Buffer</span><span class="hl-1"> </span><span class="hl-6">48</span><span class="hl-1"> </span><span class="hl-6">65</span><span class="hl-1"> 6</span><span class="hl-8">c</span><span class="hl-1"> 6</span><span class="hl-8">c</span><span class="hl-1"> 6</span><span class="hl-8">f</span><span class="hl-1"> </span><span class="hl-6">20</span><span class="hl-1"> </span><span class="hl-6">57</span><span class="hl-1"> 6</span><span class="hl-8">f</span><span class="hl-1"> </span><span class="hl-6">72</span><span class="hl-1"> 6</span><span class="hl-8">c</span><span class="hl-1"> </span><span class="hl-6">64</span><span class="hl-1">&gt;,</span><br/><span class="hl-1"> </span><span class="hl-7">integer</span><span class="hl-1">: </span><span class="hl-6">12345</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-7">dict</span><span class="hl-1">: {</span><br/><span class="hl-1"> </span><span class="hl-7">key</span><span class="hl-1">: &lt;</span><span class="hl-8">Buffer</span><span class="hl-1"> </span><span class="hl-6">54</span><span class="hl-1"> </span><span class="hl-6">68</span><span class="hl-1"> </span><span class="hl-6">69</span><span class="hl-1"> </span><span class="hl-6">73</span><span class="hl-1"> </span><span class="hl-6">20</span><span class="hl-1"> </span><span class="hl-6">69</span><span class="hl-1"> </span><span class="hl-6">73</span><span class="hl-1"> </span><span class="hl-6">20</span><span class="hl-1"> </span><span class="hl-6">61</span><span class="hl-1"> </span><span class="hl-6">20</span><span class="hl-1"> </span><span class="hl-6">73</span><span class="hl-1"> </span><span class="hl-6">74</span><span class="hl-1"> </span><span class="hl-6">72</span><span class="hl-1"> </span><span class="hl-6">69</span><span class="hl-1"> 6</span><span class="hl-8">e</span><span class="hl-1"> </span><span class="hl-6">67</span><span class="hl-1"> </span><span class="hl-6">20</span><span class="hl-1"> </span><span class="hl-6">77</span><span class="hl-1"> </span><span class="hl-6">69</span><span class="hl-1"> </span><span class="hl-6">74</span><span class="hl-1"> </span><span class="hl-6">68</span><span class="hl-1"> </span><span class="hl-6">69</span><span class="hl-1"> 6</span><span class="hl-8">e</span><span class="hl-1"> </span><span class="hl-6">20</span><span class="hl-1"> </span><span class="hl-6">61</span><span class="hl-1"> </span><span class="hl-6">20</span><span class="hl-1"> </span><span class="hl-6">64</span><span class="hl-1"> </span><span class="hl-6">69</span><span class="hl-1"> </span><span class="hl-6">63</span><span class="hl-1"> </span><span class="hl-6">74</span><span class="hl-1"> </span><span class="hl-6">69</span><span class="hl-1"> 6</span><span class="hl-8">f</span><span class="hl-1"> 6</span><span class="hl-8">e</span><span class="hl-1"> </span><span class="hl-6">61</span><span class="hl-1"> </span><span class="hl-6">72</span><span class="hl-1"> </span><span class="hl-6">79</span><span class="hl-1">&gt;</span><br/><span class="hl-1"> },</span><br/><span class="hl-1"> </span><span class="hl-7">list</span><span class="hl-1">: [ </span><span class="hl-6">1</span><span class="hl-1">, </span><span class="hl-6">2</span><span class="hl-1">, </span><span class="hl-6">3</span><span class="hl-1">, </span><span class="hl-6">4</span><span class="hl-1">, &lt;</span><span class="hl-8">Buffer</span><span class="hl-1"> </span><span class="hl-6">73</span><span class="hl-1"> </span><span class="hl-6">74</span><span class="hl-1"> </span><span class="hl-6">72</span><span class="hl-1"> </span><span class="hl-6">69</span><span class="hl-1"> 6</span><span class="hl-8">e</span><span class="hl-1"> </span><span class="hl-6">67</span><span class="hl-1">&gt;, </span><span class="hl-6">5</span><span class="hl-1">, {} ]</span><br/><span class="hl-1">}</span> </code><button>Copy</button></pre> <p>Automagically convert bytestrings to strings:</p> <pre><code class="js"><span class="hl-3">const</span><span class="hl-1"> </span><span class="hl-9">result</span><span class="hl-1"> = </span><span class="hl-5">bencode</span><span class="hl-1">.</span><span class="hl-0">decode</span><span class="hl-1">( </span><span class="hl-5">data</span><span class="hl-1">, </span><span class="hl-2">&#39;utf8&#39;</span><span class="hl-1"> )</span> </code><button type="button">Copy</button></pre> <a id="output-2" class="tsd-anchor"></a><h4 class="tsd-anchor-link">Output<a href="#output-2" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h4><pre><code class="js"><span class="hl-1">{</span><br/><span class="hl-1"> </span><span class="hl-7">string</span><span class="hl-1">: </span><span class="hl-2">&#39;Hello World&#39;</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-7">integer</span><span class="hl-1">: </span><span class="hl-6">12345</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-7">dict</span><span class="hl-1">: {</span><br/><span class="hl-1"> </span><span class="hl-7">key</span><span class="hl-1">: </span><span class="hl-2">&#39;This is a string within a dictionary&#39;</span><br/><span class="hl-1"> },</span><br/><span class="hl-1"> </span><span class="hl-7">list</span><span class="hl-1">: [ </span><span class="hl-6">1</span><span class="hl-1">, </span><span class="hl-6">2</span><span class="hl-1">, </span><span class="hl-6">3</span><span class="hl-1">, </span><span class="hl-6">4</span><span class="hl-1">, </span><span class="hl-2">&#39;string&#39;</span><span class="hl-1">, </span><span class="hl-6">5</span><span class="hl-1">, {} ]</span><br/><span class="hl-1">}</span> </code><button type="button">Copy</button></pre> <a id="api" class="tsd-anchor"></a><h2 class="tsd-anchor-link">API<a href="#api" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2><p>The API is compatible with the <a href="https://github.com/mafintosh/abstract-encoding" target="_blank" class="external"><code>abstract-encoding</code></a> specification.</p> <a id="bencodeencode-data-buffer-offset-" class="tsd-anchor"></a><h3 class="tsd-anchor-link">bencode.encode( <em>data</em>, <em>[buffer]</em>, <em>[offset]</em> )<a href="#bencodeencode-data-buffer-offset-" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><pre><code class="ts"><span class="hl-3">function</span><span class="hl-1"> </span><span class="hl-0">encode</span><span class="hl-1"> (</span><br/><span class="hl-1"> </span><span class="hl-5">data</span><span class="hl-1">?:</span><span class="hl-8">TypedArray</span><span class="hl-1">|</span><span class="hl-8">any</span><span class="hl-1">[]|</span><span class="hl-8">string</span><span class="hl-1">|</span><span class="hl-8">number</span><span class="hl-1">|</span><span class="hl-8">boolean</span><span class="hl-1">|</span><span class="hl-8">object</span><span class="hl-1">|</span><span class="hl-8">null</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">buffer</span><span class="hl-1">?:</span><span class="hl-8">Uint8Array</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">offset</span><span class="hl-1">?:</span><span class="hl-8">number</span><br/><span class="hl-1">):</span><span class="hl-8">Uint8Array</span><span class="hl-1">|</span><span class="hl-8">null</span> </code><button type="button">Copy</button></pre> <p>Returns <code>Uint8Array</code>.</p> <a id="bencodedecode-data-start-end-encoding-" class="tsd-anchor"></a><h3 class="tsd-anchor-link">bencode.decode( <em>data</em>, <em>[start]</em>, <em>[end]</em>, <em>[encoding]</em> )<a href="#bencodedecode-data-start-end-encoding-" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><pre><code class="ts"><span class="hl-3">type</span><span class="hl-1"> </span><span class="hl-8">Decoded</span><span class="hl-1"> =</span><br/><span class="hl-1"> | </span><span class="hl-8">Record</span><span class="hl-1">&lt;</span><span class="hl-8">string</span><span class="hl-1">, </span><span class="hl-8">any</span><span class="hl-1">&gt;</span><br/><span class="hl-1"> | </span><span class="hl-8">Array</span><span class="hl-1">&lt;</span><span class="hl-8">any</span><span class="hl-1">&gt;</span><br/><span class="hl-1"> | </span><span class="hl-8">Uint8Array</span><br/><span class="hl-1"> | </span><span class="hl-8">string</span><br/><span class="hl-1"> | </span><span class="hl-8">number</span><br/><span class="hl-1"> | </span><span class="hl-8">null</span><span class="hl-1">;</span><br/><br/><span class="hl-3">interface</span><span class="hl-1"> </span><span class="hl-8">Decoder</span><span class="hl-1"> {</span><br/><span class="hl-1"> (</span><span class="hl-5">data</span><span class="hl-1">:</span><span class="hl-8">Uint8Array</span><span class="hl-1">|</span><span class="hl-8">string</span><span class="hl-1">):</span><span class="hl-8">Decoded</span><br/><span class="hl-1"> (</span><span class="hl-5">data</span><span class="hl-1">:</span><span class="hl-8">Uint8Array</span><span class="hl-1">|</span><span class="hl-8">string</span><span class="hl-1">, </span><span class="hl-5">encoding</span><span class="hl-1">:</span><span class="hl-8">string</span><span class="hl-1">):</span><span class="hl-8">Decoded</span><br/><span class="hl-1"> (</span><span class="hl-5">data</span><span class="hl-1">:</span><span class="hl-8">Uint8Array</span><span class="hl-1">|</span><span class="hl-8">string</span><span class="hl-1">, </span><span class="hl-5">start</span><span class="hl-1">:</span><span class="hl-8">number</span><span class="hl-1">, </span><span class="hl-5">encoding</span><span class="hl-1">:</span><span class="hl-8">string</span><span class="hl-1">):</span><span class="hl-8">Decoded</span><br/><span class="hl-1"> (</span><span class="hl-5">data</span><span class="hl-1">:</span><span class="hl-8">Uint8Array</span><span class="hl-1">|</span><span class="hl-8">string</span><span class="hl-1">, </span><span class="hl-5">start</span><span class="hl-1">:</span><span class="hl-8">number</span><span class="hl-1">, </span><span class="hl-5">end</span><span class="hl-1">:</span><span class="hl-8">number</span><span class="hl-1">, </span><span class="hl-5">encoding</span><span class="hl-1">:</span><span class="hl-8">string</span><span class="hl-1">):</span><span class="hl-8">Decoded</span><br/><span class="hl-1"> </span><span class="hl-5">data</span><span class="hl-1">:</span><span class="hl-8">Uint8Array</span><span class="hl-1">|</span><span class="hl-8">null</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><span class="hl-5">bytes</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><span class="hl-5">position</span><span class="hl-1">:</span><span class="hl-8">number</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><span class="hl-5">encoding</span><span class="hl-1">:</span><span class="hl-8">string</span><span class="hl-1">|</span><span class="hl-8">null</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><span class="hl-0">next</span><span class="hl-1">:()</span><span class="hl-3">=&gt;</span><span class="hl-8">any</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><span class="hl-0">dictionary</span><span class="hl-1">:()</span><span class="hl-3">=&gt;</span><span class="hl-8">any</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><span class="hl-0">list</span><span class="hl-1">:()</span><span class="hl-3">=&gt;</span><span class="hl-8">any</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><span class="hl-0">buffer</span><span class="hl-1">:()</span><span class="hl-3">=&gt;</span><span class="hl-8">Uint8Array</span><span class="hl-1">|</span><span class="hl-8">string</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><span class="hl-0">find</span><span class="hl-1">:(</span><span class="hl-5">ch</span><span class="hl-1">:</span><span class="hl-8">number</span><span class="hl-1">)</span><span class="hl-3">=&gt;</span><span class="hl-8">number</span><span class="hl-1">|</span><span class="hl-8">null</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><span class="hl-0">integer</span><span class="hl-1">:()</span><span class="hl-3">=&gt;</span><span class="hl-8">number</span><span class="hl-1">;</span><br/><span class="hl-1">}</span> </code><button type="button">Copy</button></pre> <p>If <code>encoding</code> is set, bytestrings are automatically converted to strings.</p> <p>Returns <code>Object</code> | <code>Array</code> | <code>Buffer</code> | <code>String</code> | <code>Number</code></p> <a id="bencodebytelength-value--or-bencodeencodinglength-value-" class="tsd-anchor"></a><h3 class="tsd-anchor-link">bencode.byteLength( <em>value</em> ) or bencode.encodingLength( <em>value</em> )<a href="#bencodebytelength-value--or-bencodeencodinglength-value-" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><blockquote> <p><code>Buffer</code> | <code>Array</code> | <code>String</code> | <code>Object</code> | <code>Number</code> | <code>Boolean</code> <strong>value</strong></p> </blockquote> </div></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-accordion"><summary class="tsd-accordion-summary"><h3><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><use href="assets/icons.svg#icon-chevronDown"></use></svg>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-protected" name="protected"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Protected</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-external" name="external"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>External</span></label></li></ul></div><div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div><details open class="tsd-accordion tsd-page-navigation"><summary class="tsd-accordion-summary"><h3><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><use href="assets/icons.svg#icon-chevronDown"></use></svg>On This Page</h3></summary><div class="tsd-accordion-details"><a href="#bencode"><span>bencode</span></a><ul><li><a href="#about-bencoding"><span>About BEncoding</span></a></li><li><a href="#install"><span>Install</span></a></li><li><a href="#usage"><span>Usage</span></a></li><li><ul><li><a href="#encoding"><span>Encoding</span></a></li><li><ul><li><a href="#output"><span>Output</span></a></li></ul></li><li><a href="#decoding"><span>Decoding</span></a></li><li><ul><li><a href="#output-1"><span>Output</span></a></li><li><a href="#output-2"><span>Output</span></a></li></ul></li></ul></li><li><a href="#api"><span>API</span></a></li><li><ul><li><a href="#bencodeencode-data-buffer-offset-"><span>bencode.encode( data, [buffer], [offset] )</span></a></li><li><a href="#bencodedecode-data-start-end-encoding-"><span>bencode.decode( data, [start], [end], [encoding] )</span></a></li><li><a href="#bencodebytelength-value--or-bencodeencodinglength-value-"><span>bencode.byte<wbr/>Length( value ) or bencode.encoding<wbr/>Length( value )</span></a></li></ul></li></ul></div></details></div><div class="site-menu"><nav class="tsd-navigation"><a href="modules.html" class="current">@substrate-system/bencode</a><ul class="tsd-small-nested-navigation" id="tsd-nav-container"><li>Loading...</li></ul></nav></div></div></div><footer><p class="tsd-generator">Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></footer><div class="overlay"></div></body></html>