@substrate-system/bencode
Version:
Bencode de/encoder
8 lines (7 loc) • 3.83 kB
Source Map (JSON)
{
"version": 3,
"sources": ["../src/encoding-length.ts"],
"sourcesContent": ["import { text2arr } from '@substrate-system/uint8-util'\nimport { digitCount, getType } from './util.js'\n\nfunction listLength (list) {\n let length = 1 + 1 // type marker + end-of-type marker\n\n for (const value of list) {\n length += encodingLength(value)\n }\n\n return length\n}\n\nfunction mapLength (map) {\n let length = 1 + 1 // type marker + end-of-type marker\n\n for (const [key, value] of map) {\n const keyLength = text2arr(key).byteLength\n length += digitCount(keyLength) + 1 + keyLength\n length += encodingLength(value)\n }\n\n return length\n}\n\nfunction objectLength (value) {\n let length = 1 + 1 // type marker + end-of-type marker\n const keys = Object.keys(value)\n\n for (let i = 0; i < keys.length; i++) {\n const keyLength = text2arr(keys[i]).byteLength\n length += digitCount(keyLength) + 1 + keyLength\n length += encodingLength(value[keys[i]])\n }\n\n return length\n}\n\nfunction stringLength (value) {\n const length = text2arr(value).byteLength\n return digitCount(length) + 1 + length\n}\n\nfunction arrayBufferLength (value) {\n const length = value.byteLength - value.byteOffset\n return digitCount(length) + 1 + length\n}\n\nexport function encodingLength (value) {\n const length = 0\n\n if (value == null) return length\n\n const type = getType(value)\n\n switch (type) {\n case 'arraybufferview': return arrayBufferLength(value)\n case 'string': return stringLength(value)\n case 'array': case 'set': return listLength(value)\n case 'number': return 1 + digitCount(Math.floor(value)) + 1\n case 'bigint': return 1 + value.toString().length + 1\n case 'object': return objectLength(value)\n case 'map': return mapLength(value)\n default:\n throw new TypeError(`Unsupported value of type \"${type}\"`)\n }\n}\n\nexport default encodingLength\n"],
"mappings": "4dAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,aAAAE,EAAA,mBAAAC,IAAA,eAAAC,EAAAJ,GAAA,IAAAK,EAAyB,wCACzBC,EAAoC,qBAEpC,SAASC,EAAYC,EAAM,CACvB,IAAIC,EAAS,EAEb,UAAWC,KAASF,EAChBC,GAAUE,EAAeD,CAAK,EAGlC,OAAOD,CACX,CARSG,EAAAL,EAAA,cAUT,SAASM,EAAWC,EAAK,CACrB,IAAIL,EAAS,EAEb,SAAW,CAACM,EAAKL,CAAK,IAAKI,EAAK,CAC5B,MAAME,KAAY,YAASD,CAAG,EAAE,WAChCN,MAAU,cAAWO,CAAS,EAAI,EAAIA,EACtCP,GAAUE,EAAeD,CAAK,CAClC,CAEA,OAAOD,CACX,CAVSG,EAAAC,EAAA,aAYT,SAASI,EAAcP,EAAO,CAC1B,IAAID,EAAS,EACb,MAAMS,EAAO,OAAO,KAAKR,CAAK,EAE9B,QAASS,EAAI,EAAGA,EAAID,EAAK,OAAQC,IAAK,CAClC,MAAMH,KAAY,YAASE,EAAKC,CAAC,CAAC,EAAE,WACpCV,MAAU,cAAWO,CAAS,EAAI,EAAIA,EACtCP,GAAUE,EAAeD,EAAMQ,EAAKC,CAAC,CAAC,CAAC,CAC3C,CAEA,OAAOV,CACX,CAXSG,EAAAK,EAAA,gBAaT,SAASG,EAAcV,EAAO,CAC1B,MAAMD,KAAS,YAASC,CAAK,EAAE,WAC/B,SAAO,cAAWD,CAAM,EAAI,EAAIA,CACpC,CAHSG,EAAAQ,EAAA,gBAKT,SAASC,EAAmBX,EAAO,CAC/B,MAAMD,EAASC,EAAM,WAAaA,EAAM,WACxC,SAAO,cAAWD,CAAM,EAAI,EAAIA,CACpC,CAHSG,EAAAS,EAAA,qBAKF,SAASV,EAAgBD,EAAO,CAGnC,GAAIA,GAAS,KAAM,MAAO,GAE1B,MAAMY,KAAO,WAAQZ,CAAK,EAE1B,OAAQY,EAAM,CACV,IAAK,kBAAmB,OAAOD,EAAkBX,CAAK,EACtD,IAAK,SAAU,OAAOU,EAAaV,CAAK,EACxC,IAAK,QAAS,IAAK,MAAO,OAAOH,EAAWG,CAAK,EACjD,IAAK,SAAU,MAAO,MAAI,cAAW,KAAK,MAAMA,CAAK,CAAC,EAAI,EAC1D,IAAK,SAAU,MAAO,GAAIA,EAAM,SAAS,EAAE,OAAS,EACpD,IAAK,SAAU,OAAOO,EAAaP,CAAK,EACxC,IAAK,MAAO,OAAOG,EAAUH,CAAK,EAClC,QACI,MAAM,IAAI,UAAU,8BAA8BY,CAAI,GAAG,CACjE,CACJ,CAlBgBV,EAAAD,EAAA,kBAoBhB,IAAOY,EAAQZ",
"names": ["encoding_length_exports", "__export", "encoding_length_default", "encodingLength", "__toCommonJS", "import_uint8_util", "import_util", "listLength", "list", "length", "value", "encodingLength", "__name", "mapLength", "map", "key", "keyLength", "objectLength", "keys", "i", "stringLength", "arrayBufferLength", "type", "encoding_length_default"]
}