'use strict'; // http://www.2ality.com/2013/10/safe-integers.html // http://es6.ruanyifeng.com/#docs/number exports.MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || Math.pow(2, 53) - 1; exports.MIN_SAFE_INTEGER = -exports.MAX_SAFE_INTEGER; var MAX_SAFE_INTEGER_STR = exports.MAX_SAFE_INTEGER_STR = String(exports.MAX_SAFE_INTEGER); var MAX_SAFE_INTEGER_STR_LENGTH = MAX_SAFE_INTEGER_STR.length; /** * Detect a number string can safe convert to Javascript Number. * * @param {String} s number format string, like `"123"`, `"-1000123123123123123123"` * @return {Boolean} */ exports.isSafeNumberString = function isSafeNumberString(s) { if (s[0] === '-') { s = s.substring(1); } if (s.length < MAX_SAFE_INTEGER_STR_LENGTH || (s.length === MAX_SAFE_INTEGER_STR_LENGTH && s <= MAX_SAFE_INTEGER_STR)) { return true; } return false; }; /** * Convert string to Number if string in safe Number scope. * * @param {String} s number format string. * @return {Number|String} success will return Number, otherise return the original string. */ exports.toSafeNumber = function toSafeNumber(s) { if (typeof s === 'number') { return s; } return exports.isSafeNumberString(s) ? Number(s) : s; }; /** * Produces a random integer between the inclusive `lower` and `upper` bounds. * * @param {Number} lower The lower bound. * @param {Number} upper The upper bound. * @return {Number} Returns the random number. */ exports.random = function random(lower, upper) { if (lower === undefined && upper === undefined) { return 0; } if (upper === undefined) { upper = lower; lower = 0; } var temp; if (lower > upper) { temp = lower; lower = upper; upper = temp; } return Math.floor(lower + Math.random() * (upper - lower)); };