mirror of
https://github.com/hanzoai/es5-ext.git
synced 2026-09-24 16:58:43 +00:00
feat: String.random util
This commit is contained in:
@@ -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")
|
||||
};
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
@@ -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 }), "");
|
||||
};
|
||||
Reference in New Issue
Block a user