UNPKG

@substrate-system/bencode

Version:
8 lines (7 loc) 3.43 kB
{ "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": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAAyB;AACzB,kBAAoC;AAEpC,SAAS,WAAY,MAAM;AACvB,MAAI,SAAS,IAAI;AAEjB,aAAW,SAAS,MAAM;AACtB,cAAU,eAAe,KAAK;AAAA,EAClC;AAEA,SAAO;AACX;AARS;AAUT,SAAS,UAAW,KAAK;AACrB,MAAI,SAAS,IAAI;AAEjB,aAAW,CAAC,KAAK,KAAK,KAAK,KAAK;AAC5B,UAAM,gBAAY,4BAAS,GAAG,EAAE;AAChC,kBAAU,wBAAW,SAAS,IAAI,IAAI;AACtC,cAAU,eAAe,KAAK;AAAA,EAClC;AAEA,SAAO;AACX;AAVS;AAYT,SAAS,aAAc,OAAO;AAC1B,MAAI,SAAS,IAAI;AACjB,QAAM,OAAO,OAAO,KAAK,KAAK;AAE9B,WAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AAClC,UAAM,gBAAY,4BAAS,KAAK,CAAC,CAAC,EAAE;AACpC,kBAAU,wBAAW,SAAS,IAAI,IAAI;AACtC,cAAU,eAAe,MAAM,KAAK,CAAC,CAAC,CAAC;AAAA,EAC3C;AAEA,SAAO;AACX;AAXS;AAaT,SAAS,aAAc,OAAO;AAC1B,QAAM,aAAS,4BAAS,KAAK,EAAE;AAC/B,aAAO,wBAAW,MAAM,IAAI,IAAI;AACpC;AAHS;AAKT,SAAS,kBAAmB,OAAO;AAC/B,QAAM,SAAS,MAAM,aAAa,MAAM;AACxC,aAAO,wBAAW,MAAM,IAAI,IAAI;AACpC;AAHS;AAKF,SAAS,eAAgB,OAAO;AACnC,QAAM,SAAS;AAEf,MAAI,SAAS,KAAM,QAAO;AAE1B,QAAM,WAAO,qBAAQ,KAAK;AAE1B,UAAQ,MAAM;AAAA,IACV,KAAK;AAAmB,aAAO,kBAAkB,KAAK;AAAA,IACtD,KAAK;AAAU,aAAO,aAAa,KAAK;AAAA,IACxC,KAAK;AAAA,IAAS,KAAK;AAAO,aAAO,WAAW,KAAK;AAAA,IACjD,KAAK;AAAU,aAAO,QAAI,wBAAW,KAAK,MAAM,KAAK,CAAC,IAAI;AAAA,IAC1D,KAAK;AAAU,aAAO,IAAI,MAAM,SAAS,EAAE,SAAS;AAAA,IACpD,KAAK;AAAU,aAAO,aAAa,KAAK;AAAA,IACxC,KAAK;AAAO,aAAO,UAAU,KAAK;AAAA,IAClC;AACI,YAAM,IAAI,UAAU,8BAA8B,IAAI,GAAG;AAAA,EACjE;AACJ;AAlBgB;AAoBhB,IAAO,0BAAQ;", "names": [] }