From 4bf5bb9430734b0f6ffe50684e42c5ed9133bfae Mon Sep 17 00:00:00 2001 From: Linden <65407488+thelindat@users.noreply.github.com> Date: Wed, 17 Jan 2024 17:43:08 +1100 Subject: [PATCH] feat(package): random string/int utility functions --- package/shared/index.ts | 50 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/package/shared/index.ts b/package/shared/index.ts index 74c7ab9..499f3b0 100644 --- a/package/shared/index.ts +++ b/package/shared/index.ts @@ -38,3 +38,53 @@ export async function waitFor(cb: () => T, errMessage: string | void, timeout return p; } + +export function getRandomInt(min = 0, max = 9) { + if (min > max) [min, max] = [max, min]; + + return Math.floor(Math.random() * (max - min + 1)) + min; +} + +export function getRandomChar(lowercase?: boolean) { + const str = String.fromCharCode(getRandomInt(65, 90)); + return lowercase ? str.toLowerCase() : str; +} + +export function getRandomAlphanumeric(lowercase?: boolean) { + return Math.random() > 0.5 ? getRandomChar(lowercase) : getRandomInt(); +} + +const formatChar: Record string | number> = { + '1': getRandomInt, + A: getRandomChar, + '.': getRandomAlphanumeric, + a: getRandomChar, +}; + +export function getRandomString(pattern: string, length?: number): string { + const len = length || pattern.replace(/\^/g, '').length; + const arr: Array = Array(len).fill(0); + let size = 0; + let i = 0; + + while (size < len) { + i += 1; + let char: string | number = pattern.charAt(i - 1); + + if (char === '') { + arr[size] = ' '.repeat(len - size); + break; + } else if (char === '^') { + i += 1; + char = pattern.charAt(i - 1); + } else { + const fn = formatChar[char]; + char = fn ? fn(char === 'a') : char; + } + + size += 1; + arr[size - 1] = char; + } + + return arr.join(''); +}