{
  "version": 3,
  "sources": ["../node_modules/.pnpm/check-password-strength@3.0.0/node_modules/check-password-strength/dist/index.js", "../src/index.ts"],
  "sourcesContent": ["'use strict';\r\n\r\nObject.defineProperty(exports, '__esModule', { value: true });\r\n\r\nfunction escapeStringRegexp(string) {\r\n\tif (typeof string !== 'string') {\r\n\t\tthrow new TypeError('Expected a string');\r\n\t}\r\n\r\n\t// Escape characters with special meaning either inside or outside character sets.\r\n\t// Use a simple backslash escape when it\u2019s always valid, and a `\\xnn` escape when the simpler form would be disallowed by Unicode patterns\u2019 stricter grammar.\r\n\treturn string\r\n\t\t.replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&')\r\n\t\t.replace(/-/g, '\\\\x2d');\r\n}\r\n\r\nconst defaultOptions = [\r\n  {\r\n    id: 0,\r\n    value: \"Too weak\",\r\n    minDiversity: 0,\r\n    minLength: 0,\r\n  },\r\n  {\r\n    id: 1,\r\n    value: \"Weak\",\r\n    minDiversity: 2,\r\n    minLength: 8,\r\n  },\r\n  {\r\n    id: 2,\r\n    value: \"Medium\",\r\n    minDiversity: 4,\r\n    minLength: 10,\r\n  },\r\n  {\r\n    id: 3,\r\n    value: \"Strong\",\r\n    minDiversity: 4,\r\n    minLength: 12,\r\n  },\r\n];\r\n\r\nconst owaspSymbols = \"!\\\"#$%&'()*+,-./\\\\:;<=>?@[]^_`{|}~\";\r\n\r\nconst passwordStrength = (\r\n  password,\r\n  options = defaultOptions,\r\n  restrictSymbolsTo\r\n) => {\r\n  options[0].minDiversity = 0;\r\n  options[0].minLength = 0;\r\n\r\n  // prevent [a-z] to match null and compute length\r\n  const _password = password ?? \"\";\r\n\r\n  const rules = [\r\n    {\r\n      key: \"lowercase\",\r\n      regex: \"[a-z]\",\r\n    },\r\n    {\r\n      key: \"uppercase\",\r\n      regex: \"[A-Z]\",\r\n    },\r\n    {\r\n      key: \"number\",\r\n      regex: \"[0-9]\",\r\n    },\r\n    {\r\n      key: \"symbol\",\r\n      regex: restrictSymbolsTo ? `[${escapeStringRegexp(restrictSymbolsTo)}]` : \"[^a-zA-Z0-9]\",\r\n    },\r\n  ];\r\n\r\n  let strength = {};\r\n\r\n  strength.contains = rules\r\n    .filter((rule) => new RegExp(`${rule.regex}`).test(_password))\r\n    .map((rule) => rule.key);\r\n\r\n  strength.length = _password.length;\r\n\r\n  let fulfilledOptions = options\r\n    .filter((option) => strength.contains.length >= option.minDiversity)\r\n    .filter((option) => strength.length >= option.minLength)\r\n    .sort((o1, o2) => o2.id - o1.id)\r\n    .map((option) => ({ id: option.id, value: option.value }));\r\n\r\n  Object.assign(strength, fulfilledOptions[0]);\r\n\r\n  return strength;\r\n};\r\n\r\nvar index = { passwordStrength, defaultOptions, owaspSymbols };\r\n\r\nexports.default = index;\r\nexports.defaultOptions = defaultOptions;\r\nexports.owaspSymbols = owaspSymbols;\r\nexports.passwordStrength = passwordStrength;\r\n", "import { passwordStrength } from 'check-password-strength'\n\nconst crypto = globalThis.crypto\n\nexport default isPasswordLeaked\nglobalThis.isPasswordLeaked = isPasswordLeaked\nglobalThis.checkPassword = checkPassword\nglobalThis.checkPasswordStrength = checkPasswordStrength\n\nexport async function checkPassword(password: string) {\n  return {\n    strength: passwordStrength(password),\n    isLeaked: await isPasswordLeaked(password)\n  }\n}\n\nexport function checkPasswordStrength(password: string) {\n  return passwordStrength(password)\n}\n\nexport async function isPasswordLeaked(password: string) {\n  if (typeof password !== 'string') throw new Error('Password must be a string')\n\n  const hashedPassword = await crypto.subtle.digest('SHA-1', new TextEncoder().encode(password))\n  const hashedPasswordString = Array.from(new Uint8Array(hashedPassword)).map(b => b.toString(16).padStart(2, '0')).join('')\n  const firstFive = hashedPasswordString.substring(0, 5).toUpperCase()\n  const response = await fetch(`https://api.pwnedpasswords.com/range/${firstFive}`)\n  const data = await response.text()\n\n  return data.includes(hashedPasswordString.substring(5).toUpperCase())\n}\n\nexport function isPasswordLeakedSync(password: string, callback: (error: Error | null, isLeaked: boolean) => void) {\n  if (typeof password !== 'string') {\n    callback(new Error('Password must be a string'), false)\n    return\n  }\n\n  crypto.subtle.digest('SHA-1', new TextEncoder().encode(password))\n    .catch(error => callback(error, false))\n    .then(hashedPassword => {\n      const hashedPasswordString = Array.from(new Uint8Array(hashedPassword as ArrayBuffer)).map(b => b.toString(16).padStart(2, '0')).join('')\n      const firstFive = hashedPasswordString.substring(0, 5).toUpperCase()\n      fetch(`https://api.pwnedpasswords.com/range/${firstFive}`)\n        .then(response => response.text())\n        .then(data => callback(null, data.includes(hashedPasswordString.substring(5).toUpperCase())))\n        .catch(error => callback(error, false))\n    })\n}\n"],
  "mappings": "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",
  "names": ["require_dist", "__commonJSMin", "exports", "escapeStringRegexp", "string", "defaultOptions", "owaspSymbols", "passwordStrength", "password", "options", "restrictSymbolsTo", "_password", "rules", "strength", "rule", "fulfilledOptions", "option", "o1", "o2", "index", "index_exports", "__export", "checkPassword", "checkPasswordStrength", "index_default", "isPasswordLeaked", "isPasswordLeakedSync", "__toCommonJS", "import_check_password_strength", "crypto", "password", "hashedPassword", "hashedPasswordString", "b", "firstFive", "callback", "error", "response", "data"]
}
