@newdash/newdash
Version:
javascript/typescript utility library
71 lines (70 loc) • 2.08 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.random = void 0;
const isIterateeCall_1 = __importDefault(require("./.internal/isIterateeCall"));
const toFinite_1 = __importDefault(require("./toFinite"));
/**
* Built-in method references without a dependency on `root`.
* @internal
* @ignore
* @private
*/
const freeParseFloat = parseFloat;
/**
* The base implementation of `random` without support for returning
* floating-point numbers.
*
* @private
* @ignore
* @internal
* @param lower The lower bound.
* @param upper The upper bound.
* @returns Returns the random number.
*/
function baseRandom(lower, upper) {
return lower + Math.floor(Math.random() * (upper - lower + 1));
}
function random(lower = 0, upper = 1, floating) {
if (floating && typeof floating != "boolean" && (0, isIterateeCall_1.default)(lower, upper, floating)) {
upper = floating = undefined;
}
if (floating === undefined) {
if (typeof upper == "boolean") {
floating = upper;
upper = undefined;
}
else if (typeof lower == "boolean") {
floating = lower;
lower = undefined;
}
}
if (lower === undefined && upper === undefined) {
lower = 0;
upper = 1;
}
else {
lower = (0, toFinite_1.default)(lower);
if (upper === undefined) {
upper = lower;
lower = 0;
}
else {
upper = (0, toFinite_1.default)(upper);
}
}
if (lower > upper) {
const temp = lower;
lower = upper;
upper = temp;
}
if (floating || lower % 1 || upper % 1) {
const rand = Math.random();
return Math.min(lower + (rand * (upper - lower + freeParseFloat(`1e-${(`${rand}`).length - 1}`))), upper);
}
return baseRandom(lower, upper);
}
exports.random = random;
exports.default = random;