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] } 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]) + }) +})