{
  "version": 3,
  "sources": ["../src/encode.ts"],
  "sourcesContent": ["import { concat, text2arr, type TypedArray } from '@substrate-system/uint8-util'\nimport { getType } from './util.js'\n\n/**\n * Encodes data in bencode.\n *\n * @param  {Uint8Array|Array|String|Object|Number|Boolean} data\n * @return {Uint8Array}\n */\nexport function encode (\n    data?:TypedArray|any[]|string|number|boolean|object|null,\n    buffer?:Uint8Array,\n    offset?:number\n):Uint8Array {\n    const buffers = []\n    encode._encode(buffers, data)\n    const result:Uint8Array = concat(buffers)\n    encode.bytes = result.length\n\n    if (ArrayBuffer.isView(buffer)) {\n        buffer.set(result, offset)\n        return buffer\n    }\n\n    return result\n}\n\nencode.bytes = -1\nencode._floatConversionDetected = false\n\nencode._encode = function (buffers, data) {\n    if (data == null) { return }\n\n    switch (getType(data)) {\n        case 'object': encode.dict(buffers, data); break\n        case 'map': encode.dictMap(buffers, data); break\n        case 'array': encode.list(buffers, data); break\n        case 'set': encode.listSet(buffers, data); break\n        case 'string': encode.string(buffers, data); break\n        case 'number': encode.number(buffers, data); break\n        case 'boolean': encode.number(buffers, data); break\n        case 'arraybufferview': encode.buffer(buffers, new Uint8Array(data.buffer, data.byteOffset, data.byteLength)); break\n        case 'arraybuffer': encode.buffer(buffers, new Uint8Array(data)); break\n    }\n}\n\nconst buffE = new Uint8Array([0x65])\nconst buffD = new Uint8Array([0x64])\nconst buffL = new Uint8Array([0x6C])\n\nencode.buffer = function (buffers, data) {\n    buffers.push(text2arr(data.length + ':'), data)\n}\n\nencode.string = function (buffers, data) {\n    buffers.push(text2arr(text2arr(data).byteLength + ':' + data))\n}\n\nencode.number = function (buffers, data) {\n    if (Number.isInteger(data)) return buffers.push(text2arr('i' + BigInt(data) + 'e'))\n\n    const maxLo = 0x80000000\n    const hi = (data / maxLo) << 0\n    const lo = (data % maxLo) << 0\n    const val = hi * maxLo + lo\n\n    buffers.push(text2arr('i' + val + 'e'))\n\n    if (val !== data && !encode._floatConversionDetected) {\n        encode._floatConversionDetected = true\n        console.warn(\n            'WARNING: Possible data corruption detected with value \"' + data + '\":',\n            'Bencoding only defines support for integers, value was converted to \"' + val + '\"'\n        )\n        console.trace()\n    }\n}\n\nencode.dict = function (buffers, data) {\n    buffers.push(buffD)\n\n    let j = 0\n    let k\n    // fix for issue #13 - sorted dicts\n    const keys = Object.keys(data).sort()\n    const kl = keys.length\n\n    for (; j < kl; j++) {\n        k = keys[j]\n        if (data[k] == null) continue\n        encode.string(buffers, k)\n        encode._encode(buffers, data[k])\n    }\n\n    buffers.push(buffE)\n}\n\nencode.dictMap = function (buffers, data) {\n    buffers.push(buffD)\n\n    const keys = Array.from(data.keys()).sort()\n\n    for (const key of keys) {\n        if (data.get(key) == null) {\n            continue\n        }\n\n        if (ArrayBuffer.isView(key)) {\n            encode._encode(buffers, key)\n        } else {\n            encode.string(buffers, String(key))\n        }\n\n        encode._encode(buffers, data.get(key))\n    }\n\n    buffers.push(buffE)\n}\n\nencode.list = function (buffers, data) {\n    let i = 0\n    const c = data.length\n    buffers.push(buffL)\n\n    for (; i < c; i++) {\n        if (data[i] == null) continue\n        encode._encode(buffers, data[i])\n    }\n\n    buffers.push(buffE)\n}\n\nencode.listSet = function (buffers, data) {\n    buffers.push(buffL)\n\n    for (const item of data) {\n        if (item == null) continue\n        encode._encode(buffers, item)\n    }\n\n    buffers.push(buffE)\n}\n\nexport default encode\n"],
  "mappings": "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",
  "names": []
}
