feat: String.random util

This commit is contained in:
Mariusz Nowak
2017-11-23 17:10:31 +01:00
parent 60470eb10c
commit 047b2dba8d
3 changed files with 56 additions and 0 deletions
+1
View File
@@ -5,6 +5,7 @@ module.exports = {
"formatMethod": require("./format-method"),
"fromCodePoint": require("./from-code-point"),
"isString": require("./is-string"),
"random": require("./random"),
"randomUniq": require("./random-uniq"),
"raw": require("./raw")
};
+42
View File
@@ -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;
};
+13
View File
@@ -0,0 +1,13 @@
"use strict";
var isValidFormat = RegExp.prototype.test.bind(/^[a-z0-9]+$/);
module.exports = function (t, a) {
a(typeof t(), "string");
a.ok(t().length > 7);
a.not(t({ isUnique: true }), t({ isUnique: true }));
a.ok(isValidFormat(t()));
a(t({ length: 1 }).length, 1);
a(t({ length: 100 }).length, 100);
a(t({ length: 0 }), "");
};