diff --git a/.eslintrc.js b/.eslintrc.js index 5ad7d30..44c4633 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,13 +1,10 @@ - module.exports = { - extends: 'flickr', env: { - browser: true, + browser: true, node: true }, rules: {} - }; diff --git a/src/base58.js b/src/base58.js index b8c9530..aa6483c 100644 --- a/src/base58.js +++ b/src/base58.js @@ -1,54 +1,52 @@ - var alphabet = '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ'; var base = alphabet.length; // Create a lookup table to fetch character index var alphabetLookup = alphabet.split('').reduce(function (lookup, char, index) { - lookup[char] = index; - return lookup; + lookup[char] = index; + return lookup; }, {}); function assertNonNegativeSafeInteger(val) { - if (typeof val !== 'number' || isNaN(val) || val < 0 || val > Number.MAX_SAFE_INTEGER || Math.floor(val) !== val) { - throw new Error('Value passed is not a non-negative safe integer.'); - } + if (typeof val !== 'number' || isNaN(val) || val < 0 || val > Number.MAX_SAFE_INTEGER || Math.floor(val) !== val) { + throw new Error('Value passed is not a non-negative safe integer.'); + } } function assertString(str) { - if (typeof str !== 'string') { - throw new Error('Value passed is not a string.'); - } + if (typeof str !== 'string') { + throw new Error('Value passed is not a string.'); + } } function assertBase58Character(character) { - if (alphabetLookup[character] === undefined) { - throw new Error('Value passed is not a valid Base58 string.'); - } + if (alphabetLookup[character] === undefined) { + throw new Error('Value passed is not a valid Base58 string.'); + } } - exports.encode = function (num) { - var str = ''; - var modulus; + var str = ''; + var modulus; - num = Number(num); + num = Number(num); - assertNonNegativeSafeInteger(num); + assertNonNegativeSafeInteger(num); - while (num >= base) { - modulus = num % base; - str = alphabet[modulus] + str; - num = Math.floor(num / base); - } + while (num >= base) { + modulus = num % base; + str = alphabet[modulus] + str; + num = Math.floor(num / base); + } - return alphabet[num] + str; + return alphabet[num] + str; }; exports.decode = function (str) { - assertString(str); + assertString(str); - return str.split('').reverse().reduce(function (num, character, index) { - assertBase58Character(character); - return num + alphabetLookup[character] * Math.pow(base, index); - }, 0); + return str.split('').reverse().reduce(function (num, character, index) { + assertBase58Character(character); + return num + alphabetLookup[character] * Math.pow(base, index); + }, 0); }; diff --git a/test/base58.test.js b/test/base58.test.js index b6a59be..a09ba55 100644 --- a/test/base58.test.js +++ b/test/base58.test.js @@ -1,116 +1,113 @@ - var assert = require('assert'); var examples = require('./examples'); var base58 = require('..'); function exampleRunner(callback) { - Object.keys(examples).forEach(function (str) { - callback(str, examples[str]); - }); + Object.keys(examples).forEach(function (str) { + callback(str, examples[str]); + }); } describe('Base58', function () { + before(function () { + var valid = true; + var count = 0; - before(function () { - var valid = true; - var count = 0; + exampleRunner(function (str, num) { + count++; + if (typeof str !== 'string') { + valid = false; + } + if (typeof num !== 'number') { + valid = false; + } + }); - exampleRunner(function (str, num) { - count++; - if (typeof str !== 'string') { - valid = false; - } - if (typeof num !== 'number') { - valid = false; - } - }); + assert.strictEqual(count > 0, true, 'Expected there to be examples'); + assert.strictEqual(valid, true, 'Expected the examples to be valid'); + }); - assert.strictEqual(count > 0, true, 'Expected there to be examples'); - assert.strictEqual(valid, true, 'Expected the examples to be valid'); - }); + describe('.encode', function () { + it('encodes number to Base58 string', function () { + exampleRunner(function (str, num) { + assert.strictEqual(base58.encode(num), str); + }); + }); - describe('.encode', function () { - it('encodes number to Base58 string', function () { - exampleRunner(function (str, num) { - assert.strictEqual(base58.encode(num), str); - }); - }); + describe('when passed a string only containing numbers', function () { + it('encodes string after first converting it to an integer', function () { + exampleRunner(function (str, num) { + assert.strictEqual(base58.encode(num.toString()), str); + }); + }); + }); - describe('when passed a string only containing numbers', function () { - it('encodes string after first converting it to an integer', function () { - exampleRunner(function (str, num) { - assert.strictEqual(base58.encode(num.toString()), str); - }); - }); - }); + describe('when passed a non number', function () { + it('throws an error', function () { + assert.throws(function () { + base58.encode('hi'); + }, function (err) { + return err.message === 'Value passed is not a non-negative safe integer.'; + }); + }); + }); - describe('when passed a non number', function () { - it('throws an error', function () { - assert.throws(function () { - base58.encode('hi'); - }, function (err) { - return err.message === 'Value passed is not a non-negative safe integer.'; - }); - }); - }); + describe('when passed a float', function () { + it('throws an error', function () { + assert.throws(function () { + base58.encode(3.14); + }, function (err) { + return err.message === 'Value passed is not a non-negative safe integer.'; + }); + }); + }); - describe('when passed a float', function () { - it('throws an error', function () { - assert.throws(function () { - base58.encode(3.14); - }, function (err) { - return err.message === 'Value passed is not a non-negative safe integer.'; - }); - }); - }); + describe('when passed a negative number', function () { + it('throws an error', function () { + assert.throws(function () { + base58.encode(-300); + }, function (err) { + return err.message === 'Value passed is not a non-negative safe integer.'; + }); + }); + }); - describe('when passed a negative number', function () { - it('throws an error', function () { - assert.throws(function () { - base58.encode(-300); - }, function (err) { - return err.message === 'Value passed is not a non-negative safe integer.'; - }); - }); - }); + describe('when passed a non-safe integer', function () { + it('throws an error', function () { + assert.throws(function () { + base58.encode(1E100); + }, function (err) { + return err.message === 'Value passed is not a non-negative safe integer.'; + }); + }); + }); + }); - describe('when passed a non-safe integer', function () { - it('throws an error', function () { - assert.throws(function () { - base58.encode(1E100); - }, function (err) { - return err.message === 'Value passed is not a non-negative safe integer.'; - }); - }); - }); - }); + describe('.decode', function () { + it('decodes base58 string to number', function () { + exampleRunner(function (str, num) { + assert.strictEqual(base58.decode(str), num); + }); + }); - describe('.decode', function () { - it('decodes base58 string to number', function () { - exampleRunner(function (str, num) { - assert.strictEqual(base58.decode(str), num); - }); - }); - - describe('when passed a non string', function () { - it('throws an error', function () { - assert.throws(function () { - base58.decode(123); - }, function (err) { - return err.message === 'Value passed is not a string.'; - }); - }); - }); - - describe('when passed a non base58 string', function () { - it('throws an error', function () { - assert.throws(function () { - base58.decode('>_<'); - }, function (err) { - return err.message === 'Value passed is not a valid Base58 string.'; - }); - }); - }); - }); + describe('when passed a non string', function () { + it('throws an error', function () { + assert.throws(function () { + base58.decode(123); + }, function (err) { + return err.message === 'Value passed is not a string.'; + }); + }); + }); + describe('when passed a non base58 string', function () { + it('throws an error', function () { + assert.throws(function () { + base58.decode('>_<'); + }, function (err) { + return err.message === 'Value passed is not a valid Base58 string.'; + }); + }); + }); + }); }); diff --git a/test/examples.js b/test/examples.js index 7a791e0..128514a 100644 --- a/test/examples.js +++ b/test/examples.js @@ -1,4 +1,3 @@ - module.exports = { '6hKMCS': 3471391110, '6hDrmR': 3470152229,