UNPKG

@mysten/bcs

Version:

BCS - Canonical Binary Serialization implementation for JavaScript

1 lines 2.1 kB
{"version":3,"file":"uleb.mjs","names":[],"sources":["../src/uleb.ts"],"sourcesContent":["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n// Helper utility: write number as an ULEB array.\n// Original code is taken from: https://www.npmjs.com/package/uleb128 (no longer exists)\nexport function ulebEncode(num: number | bigint): number[] {\n\tlet bigNum = BigInt(num);\n\tconst arr: number[] = [];\n\tlet len = 0;\n\n\tif (bigNum === 0n) {\n\t\treturn [0];\n\t}\n\n\twhile (bigNum > 0) {\n\t\tarr[len] = Number(bigNum & 0x7fn);\n\t\tbigNum >>= 7n;\n\t\tif (bigNum > 0n) {\n\t\t\tarr[len] |= 0x80;\n\t\t}\n\t\tlen += 1;\n\t}\n\n\treturn arr;\n}\n\n// Helper utility: decode ULEB as an array of numbers.\n// Original code is taken from: https://www.npmjs.com/package/uleb128 (no longer exists)\nexport function ulebDecode(arr: number[] | Uint8Array): {\n\tvalue: number;\n\tlength: number;\n} {\n\tlet total = 0n;\n\tlet shift = 0n;\n\tlet len = 0;\n\n\twhile (true) {\n\t\tif (len >= arr.length) {\n\t\t\tthrow new Error('ULEB decode error: buffer overflow');\n\t\t}\n\n\t\tconst byte = arr[len];\n\t\tlen += 1;\n\t\ttotal += BigInt(byte & 0x7f) << shift;\n\t\tif ((byte & 0x80) === 0) {\n\t\t\tbreak;\n\t\t}\n\t\tshift += 7n;\n\t}\n\n\t// TODO: return bigint in next major version\n\tif (total > BigInt(Number.MAX_SAFE_INTEGER)) {\n\t\tthrow new Error('ULEB decode error: value exceeds MAX_SAFE_INTEGER');\n\t}\n\n\treturn {\n\t\tvalue: Number(total),\n\t\tlength: len,\n\t};\n}\n"],"mappings":";AAKA,SAAgB,WAAW,KAAgC;CAC1D,IAAI,SAAS,OAAO,IAAI;CACxB,MAAM,MAAgB,EAAE;CACxB,IAAI,MAAM;AAEV,KAAI,WAAW,GACd,QAAO,CAAC,EAAE;AAGX,QAAO,SAAS,GAAG;AAClB,MAAI,OAAO,OAAO,SAAS,KAAM;AACjC,aAAW;AACX,MAAI,SAAS,GACZ,KAAI,QAAQ;AAEb,SAAO;;AAGR,QAAO;;AAKR,SAAgB,WAAW,KAGzB;CACD,IAAI,QAAQ;CACZ,IAAI,QAAQ;CACZ,IAAI,MAAM;AAEV,QAAO,MAAM;AACZ,MAAI,OAAO,IAAI,OACd,OAAM,IAAI,MAAM,qCAAqC;EAGtD,MAAM,OAAO,IAAI;AACjB,SAAO;AACP,WAAS,OAAO,OAAO,IAAK,IAAI;AAChC,OAAK,OAAO,SAAU,EACrB;AAED,WAAS;;AAIV,KAAI,QAAQ,OAAO,OAAO,iBAAiB,CAC1C,OAAM,IAAI,MAAM,oDAAoD;AAGrE,QAAO;EACN,OAAO,OAAO,MAAM;EACpB,QAAQ;EACR"}