From d48ebcd49dd5ec6074b84884606acb86eda7c75e Mon Sep 17 00:00:00 2001 From: Irakli Gozalishvili Date: Wed, 14 Sep 2022 23:58:57 -0700 Subject: [PATCH 1/2] feat: add optional offset param to varint.decode --- src/varint.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/varint.js b/src/varint.js index 0fa7b319..d0c71eac 100644 --- a/src/varint.js +++ b/src/varint.js @@ -2,10 +2,11 @@ import varint from '../vendor/varint.js' /** * @param {Uint8Array} data + * @param {number} [offset=0] * @returns {[number, number]} */ -export const decode = (data) => { - const code = varint.decode(data) +export const decode = (data, offset = 0) => { + const code = varint.decode(data, offset) return [code, varint.decode.bytes] } From 7196a9e49df6914290a096dd2c5461d1ea1c9ed0 Mon Sep 17 00:00:00 2001 From: Irakli Gozalishvili Date: Thu, 15 Sep 2022 00:14:11 -0700 Subject: [PATCH 2/2] create unit test --- test/test-varint.js | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 test/test-varint.js diff --git a/test/test-varint.js b/test/test-varint.js new file mode 100644 index 00000000..e875e95b --- /dev/null +++ b/test/test-varint.js @@ -0,0 +1,28 @@ +/* globals describe, it */ + +import { varint } from 'multiformats' +import chai from 'chai' +import chaiAsPromised from 'chai-as-promised' + +chai.use(chaiAsPromised) +const { assert } = chai + +const UTF8 = new TextEncoder() + +describe('varint', () => { + it('can decode with offset', () => { + const message = UTF8.encode('hello-world') + const outerTag = 0x55 + const innerTag = 0xe3 + const outerTagSize = varint.encodingLength(outerTag) + const innerTagSize = varint.encodingLength(innerTag) + + const bytes = new Uint8Array(message.byteLength + outerTagSize + innerTagSize) + varint.encodeTo(outerTag, bytes) + varint.encodeTo(innerTag, bytes, outerTagSize) + bytes.set(message, outerTagSize + innerTagSize) + + assert.deepStrictEqual(varint.decode(bytes), [outerTag, outerTagSize]) + assert.deepStrictEqual(varint.decode(bytes, outerTagSize), [innerTag, innerTagSize]) + }) +})