{"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":[]}