diff --git a/index.ts b/index.ts index db91032..1f1f438 100644 --- a/index.ts +++ b/index.ts @@ -52,11 +52,14 @@ function chain>(...args: T): Coder>, } /** - * Encodes integer radix representation to array of strings using alphabet and back + * Encodes integer radix representation to array of strings using alphabet and back. + * Could also be array of strings. */ function alphabet(letters: string): Coder { - if (typeof letters !== 'string') throw new Error('invalid alphabet'); - const indexes = Object.fromEntries(letters.split('').map((l, i) => [l, i])); + const lettersArr = typeof letters === 'string' ? letters.split('') : letters; + if (!isArrayOf('string', lettersArr)) + throw new Error('alphabet expects string or array of strings'); + const indexes = Object.fromEntries(lettersArr.map((l, i) => [l, i])); return { encode: (digits: number[]) => { if (!isArrayOf('number', digits)) diff --git a/test/bases.test.js b/test/bases.test.js index 54b0caf..14e538f 100644 --- a/test/bases.test.js +++ b/test/bases.test.js @@ -187,6 +187,10 @@ should('utils: radix', () => { should('utils: alphabet', () => { const a = utils.alphabet('12345'); + const ab = utils.alphabet(['11', '2', '3', '4', '5']); + assert.deepStrictEqual(a.encode([1]), ['2']); + assert.deepStrictEqual(ab.encode([0]), ['11']); + assert.deepStrictEqual(a.encode([2]), ab.encode([2])); assert.throws(() => a.encode([1, 2, true, 3])); assert.throws(() => a.decode(['1', 2, true])); assert.throws(() => a.decode(['1', 2]));