{"version":3,"file":"complexity-DydNJOmy.mjs","names":["specialCharsRegex: RegExp"],"sources":["../../src/internal/clerk-js/passwords/complexity.ts"],"sourcesContent":["import type { PasswordSettingsData } from '@/types';\n\nexport type ComplexityErrors = {\n [key in keyof Partial>]?: boolean;\n};\n\nexport type UsePasswordComplexityConfig = Omit<\n PasswordSettingsData,\n 'disable_hibp' | 'min_zxcvbn_strength' | 'show_zxcvbn'\n>;\n\nconst createTestComplexityCases = (config: Pick) => {\n let specialCharsRegex: RegExp;\n if (config.allowed_special_characters) {\n // Avoid a nested group by escaping the `[]` characters\n let escaped = config.allowed_special_characters.replace('[', '\\\\[');\n escaped = escaped.replace(']', '\\\\]');\n specialCharsRegex = new RegExp(`[${escaped}]`);\n } else {\n specialCharsRegex = /[!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~]/;\n }\n\n return (\n password: string,\n {\n minLength,\n maxLength,\n }: {\n minLength: number;\n maxLength: number;\n },\n ) => {\n return {\n max_length: password.length < maxLength,\n min_length: password.length >= minLength,\n require_numbers: /\\d/.test(password),\n require_lowercase: /[a-z]/.test(password),\n require_uppercase: /[A-Z]/.test(password),\n require_special_char: specialCharsRegex.test(password),\n };\n };\n};\n\nexport const validate = (password: string, config: UsePasswordComplexityConfig): ComplexityErrors => {\n const { max_length, min_length, require_special_char, require_lowercase, require_numbers, require_uppercase } =\n config;\n const testComplexityCases = createTestComplexityCases(config);\n const testCases = testComplexityCases(password, {\n maxLength: config.max_length,\n minLength: config.min_length,\n });\n\n const keys = {\n max_length,\n min_length,\n require_special_char,\n require_lowercase,\n require_numbers,\n require_uppercase,\n };\n\n const _validationsFailedMap = new Map();\n for (const k in keys) {\n const key = k as keyof typeof keys;\n\n if (!keys[key]) {\n continue;\n }\n\n if (!testCases[key]) {\n _validationsFailedMap.set(key, true);\n }\n }\n\n return Object.freeze(Object.fromEntries(_validationsFailedMap));\n};\n\nexport const createValidateComplexity = (config: UsePasswordComplexityConfig) => {\n return (password: string) => validate(password, config);\n};\n"],"mappings":";AAWA,MAAM,6BAA6B,WAA4E;CAC7G,IAAIA;AACJ,KAAI,OAAO,4BAA4B;EAErC,IAAI,UAAU,OAAO,2BAA2B,QAAQ,KAAK,MAAM;AACnE,YAAU,QAAQ,QAAQ,KAAK,MAAM;AACrC,sCAAoB,IAAI,OAAO,IAAI,QAAQ,GAAG;OAE9C,qBAAoB;AAGtB,SACE,UACA,EACE,WACA,gBAKC;AACH,SAAO;GACL,YAAY,SAAS,SAAS;GAC9B,YAAY,SAAS,UAAU;GAC/B,iBAAiB,KAAK,KAAK,SAAS;GACpC,mBAAmB,QAAQ,KAAK,SAAS;GACzC,mBAAmB,QAAQ,KAAK,SAAS;GACzC,sBAAsB,kBAAkB,KAAK,SAAS;GACvD;;;AAIL,MAAa,YAAY,UAAkB,WAA0D;CACnG,MAAM,EAAE,YAAY,YAAY,sBAAsB,mBAAmB,iBAAiB,sBACxF;CAEF,MAAM,YADsB,0BAA0B,OAAO,CACvB,UAAU;EAC9C,WAAW,OAAO;EAClB,WAAW,OAAO;EACnB,CAAC;CAEF,MAAM,OAAO;EACX;EACA;EACA;EACA;EACA;EACA;EACD;CAED,MAAM,wCAAwB,IAAI,KAAK;AACvC,MAAK,MAAM,KAAK,MAAM;EACpB,MAAM,MAAM;AAEZ,MAAI,CAAC,KAAK,KACR;AAGF,MAAI,CAAC,UAAU,KACb,uBAAsB,IAAI,KAAK,KAAK;;AAIxC,QAAO,OAAO,OAAO,OAAO,YAAY,sBAAsB,CAAC;;AAGjE,MAAa,4BAA4B,WAAwC;AAC/E,SAAQ,aAAqB,SAAS,UAAU,OAAO"}