UNPKG

@newdash/newdash

Version:

javascript/typescript utility library

71 lines (70 loc) 2.08 kB
"use strict"; 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;