MikeMcl / bignumber.js

A JavaScript library for arbitrary-precision decimal and non-decimal arithmetic
http://mikemcl.github.io/bignumber.js
MIT License
6.63k stars 743 forks source link

Can't convert to Base64 #365

Closed rafaelaznar closed 7 months ago

rafaelaznar commented 7 months ago

Can't convert to Base64 beacuse in Alphabet in B64 contains symbols that can't pass the condition /^.$|[+-.\s]|(.).*\1/ giving

Uncaught Error: [BigNumber Error] ALPHABET invalid: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
    at _.config._.set (bignumber.min.js:2:6185)

Any workaround?

MikeMcl commented 7 months ago

It would just be a matter of replacing the characters. For example:

BigNumber.set({ 
  ALPHABET: '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_'
});

const bigNumberToBase64 = big => big.toString(64).
  replace(/\$/g, '+').replace(/_/g, '-');

const bigNumberFromBase64 = str => new BigNumber(
  str.replace(/\+/g, '$').replace(/\-/g, '_'), 64);

console.log(
  bigNumberToBase64(bigNumberFromBase64('+123abcZ+--'))
);
// '+123abcZ+--'