aboutsummaryrefslogtreecommitdiff
path: root/node_modules/es5-ext/string/random.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/es5-ext/string/random.js')
-rw-r--r--node_modules/es5-ext/string/random.js42
1 files changed, 42 insertions, 0 deletions
diff --git a/node_modules/es5-ext/string/random.js b/node_modules/es5-ext/string/random.js
new file mode 100644
index 000000000..4ecec7fcd
--- /dev/null
+++ b/node_modules/es5-ext/string/random.js
@@ -0,0 +1,42 @@
+"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;
+};