Sha256: eca15a03b07de45e47bf696594948cc77d134990a34d2ae72051f0f0b630d98f
Contents?: true
Size: 1.05 KB
Versions: 46
Compression:
Stored size: 1.05 KB
Contents
"use strict"; var isValue = require("../object/is-value") , toNaturalNumber = require("../number/to-pos-integer"); var generated = Object.create(null), random = Math.random, uniqTryLimit = 100; var getChunk = function () { return random() .toString(36) .slice(2); }; var getString = function (/* length */) { var str = getChunk(), length = arguments[0]; if (!isValue(length)) return str; while (str.length < length) str += getChunk(); return str.slice(0, length); }; module.exports = function (/* options */) { var options = Object(arguments[0]), length = options.length, isUnique = options.isUnique; if (isValue(length)) length = toNaturalNumber(length); var str = getString(length); if (isUnique) { var count = 0; while (generated[str]) { if (++count === uniqTryLimit) { throw new Error( "Cannot generate random string.\n" + "String.random is not designed to effectively generate many short and " + "unique random strings" ); } str = getString(length); } generated[str] = true; } return str; };
Version data entries
46 entries across 46 versions & 3 rubygems