mauss
Version:
lightweight, modular, type-safe utilities
57 lines (56 loc) • 1.74 kB
JavaScript
/**
* Generates a random floating point number between `min` and `max`
* @default max=1
* @default min=0
*/
export function float(max = 1, min = 0) {
[min, max] = [Math.ceil(min), Math.floor(max)];
return Math.random() * (max - min) + min;
}
/**
* Generates a random integer between `min` and `max`
* @default max=1
* @default min=0
*/
export function int(max = 1, min = 0) {
return Math.floor(float(max, min));
}
/** Generates a random boolean value */
export function bool() {
return float() < 0.5;
}
/** Generates an array of random integers */
export function array(length, max, min = 0) {
return Array.from({ length }, () => int(max, min));
}
/** Gets a random property from an object */
export function key(dict) {
const keys = Object.keys(dict);
return keys[int(keys.length)];
}
/** Gets a value of a random property from an object */
export function val(dict) {
const values = Object.values(dict);
return values[int(values.length)];
}
/** Gets a random item from a list */
export function item(list) {
return list[int(list.length)];
}
/** Generates a random hexadecimal color code */
export function hex() {
return `#${~~(float() * (1 << 24)).toString(16)}`;
}
/** Generates a random IPv4 address */
export function ipv4() {
return [0, 1, 2, 3].map((i) => int(255) + (!i ? 1 : 0)).join('.');
}
/** Generates a random UUID */
export function uuid(gen) {
if (gen && typeof gen.randomUUID === 'function')
return gen.randomUUID();
return `${1e7}-${1e3}-${4e3}-${8e3}-${1e11}`.replace(/[018]/g, (c) => {
const rng = gen ? gen.getRandomValues(new Uint8Array(1))[0] : float(16);
return (+c ^ ((Number(rng) & 15) >> (+c / 4))).toString(16);
});
}