Source: radix.js

'use strict'

const map = require('./map')

/**
 * @memberof module:change-radix
 * @param   {number} number A typical JavaScript unsigned number.
 * @param   {number} base   The new base you want. Must be between 2 and 62.
 * @returns {string}
 * @example
 * radix(1.234e50, 62); // -> 'NK7qkfsZSrqYB7KGPtq9zoolE4Te'
 * radix(1000, 13);     // -> '5bc'
 * radix(32, 5);        // -. '112'
 */
const radix = (number, base) => {
  if (number !== number || number < 0 || base < 2 || base > 62) {
    return NaN
  }

  let power = 1

  while (true) {
    const test = Math.pow(base, power += 1)

    if (test > number) {
      power -= 1
      break
    }
  }

  let result = ''

  for (let i = power; i >= 0; i -= 1) {
    const temp      = Math.pow(base, i)
    const remaining = Math.floor(number / temp)
    number -= remaining * temp
    result += map[remaining]
  }

  return result
}

module.exports = radix