unique-login-credential
Version:
A package for generating unique passwords and usernames.
1 lines • 7.62 kB
Source Map (JSON)
{"version":3,"sources":["../index.ts"],"sourcesContent":["const smallAlphabets = \"abcdefghijklmnopqrstuvwxyz\".split(\"\");\r\nconst capitalAlphabets = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\".split(\"\");\r\nconst numbers = \"1234567890\".split(\"\");\r\nconst specialCharacters = [\"!\", \"@\", \"#\", \"$\", \"_\", \"*\"];\r\n\r\ntype CharType = \"capitalAlphabet\" | \"smallAlphabet\" | \"number\" | \"specialCharacter\";\r\n\r\nconst refrenceObj: Record<CharType, string[]> = {\r\n capitalAlphabet: capitalAlphabets,\r\n smallAlphabet: smallAlphabets,\r\n number: numbers,\r\n specialCharacter: specialCharacters,\r\n};\r\n\r\nconst getFilledArray = (element: CharType, count: number): CharType[] => {\r\n if (count < 1) {\r\n throw new Error(\"Invalid element count: element count is less than 1\");\r\n }\r\n return new Array(count).fill(element);\r\n};\r\n\r\ninterface PasswordOptions {\r\n length?: number;\r\n capitalLetter?: number;\r\n smallLetter?: number;\r\n number?: number;\r\n specialCharacter?: number;\r\n random?: boolean;\r\n}\r\n\r\ninterface UsernameOptions extends PasswordOptions {\r\n prefix?: string;\r\n}\r\n\r\nconst defaultPasswordOptions: Required<PasswordOptions> = {\r\n length: 8,\r\n capitalLetter: 1,\r\n smallLetter: 3,\r\n number: 2,\r\n specialCharacter: 2,\r\n random: false,\r\n};\r\n\r\nconst defaultUsernameOptions: Required<UsernameOptions> = {\r\n prefix: \"\",\r\n length: 6,\r\n capitalLetter: 1,\r\n smallLetter: 3,\r\n number: 2,\r\n specialCharacter: 0,\r\n random: false,\r\n};\r\n\r\nexport const uniquePassword = (options: PasswordOptions = {}): string => {\r\n const finalOptions = { ...defaultPasswordOptions, ...options };\r\n const {\r\n length,\r\n capitalLetter,\r\n smallLetter,\r\n number,\r\n specialCharacter,\r\n random,\r\n } = finalOptions;\r\n\r\n const totalRequested =\r\n capitalLetter + smallLetter + number + specialCharacter;\r\n\r\n if (totalRequested > length) {\r\n throw new Error(\r\n \"Invalid password length: Total character count exceeds the password length.\"\r\n );\r\n }\r\n\r\n let choice: CharType[] = [];\r\n\r\n if (capitalLetter > 0) {\r\n choice.push(...getFilledArray(\"capitalAlphabet\", capitalLetter));\r\n }\r\n if (smallLetter > 0) {\r\n choice.push(...getFilledArray(\"smallAlphabet\", smallLetter));\r\n }\r\n if (number > 0) {\r\n choice.push(...getFilledArray(\"number\", number));\r\n }\r\n if (specialCharacter > 0) {\r\n choice.push(...getFilledArray(\"specialCharacter\", specialCharacter));\r\n }\r\n\r\n while (choice.length < length) {\r\n const types: CharType[] = [\r\n \"capitalAlphabet\",\r\n \"smallAlphabet\",\r\n \"number\",\r\n \"specialCharacter\",\r\n ];\r\n choice.push(types[Math.floor(Math.random() * types.length)]);\r\n }\r\n\r\n if (random) {\r\n choice = choice.sort(() => 0.5 - Math.random());\r\n }\r\n\r\n let password = \"\";\r\n choice.forEach((type) => {\r\n const ch = refrenceObj[type][Math.floor(Math.random() * refrenceObj[type].length)];\r\n if (ch !== undefined) password += ch;\r\n });\r\n\r\n return password;\r\n};\r\n\r\nexport const uniqueUsername = (options: UsernameOptions = {}): string => {\r\n const finalOptions = { ...defaultUsernameOptions, ...options };\r\n const {\r\n prefix,\r\n length,\r\n capitalLetter,\r\n smallLetter,\r\n number,\r\n specialCharacter,\r\n random,\r\n } = finalOptions;\r\n\r\n const totalRequested =\r\n capitalLetter + smallLetter + number + specialCharacter + prefix.length;\r\n\r\n if (totalRequested > length) {\r\n throw new Error(\r\n \"Invalid username length: Total character count exceeds the username length.\"\r\n );\r\n }\r\n\r\n let choice: CharType[] = [];\r\n let username = prefix;\r\n\r\n if (capitalLetter > 0) {\r\n choice.push(...getFilledArray(\"capitalAlphabet\", capitalLetter));\r\n }\r\n if (smallLetter > 0) {\r\n choice.push(...getFilledArray(\"smallAlphabet\", smallLetter));\r\n }\r\n if (number > 0) {\r\n choice.push(...getFilledArray(\"number\", number));\r\n }\r\n if (specialCharacter > 0) {\r\n choice.push(...getFilledArray(\"specialCharacter\", specialCharacter));\r\n }\r\n\r\n while (choice.length < length - prefix.length) {\r\n const types: CharType[] = [\r\n \"capitalAlphabet\",\r\n \"smallAlphabet\",\r\n \"number\",\r\n \"specialCharacter\",\r\n ];\r\n choice.push(types[Math.floor(Math.random() * types.length)]);\r\n }\r\n\r\n if (random) {\r\n choice = choice.sort(() => 0.5 - Math.random());\r\n }\r\n\r\n choice.forEach((type) => {\r\n const ch = refrenceObj[type][Math.floor(Math.random() * refrenceObj[type].length)];\r\n if (ch !== undefined) username += ch;\r\n });\r\n\r\n return username;\r\n};\r\n"],"mappings":"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","names":[]}