{"version":3,"file":"password.mjs","names":["result: PasswordValidation"],"sources":["../../../../../src/internal/clerk-js/passwords/password.ts"],"sourcesContent":["import type { PasswordSettingsData, PasswordValidation, ValidatePasswordCallbacks, ZxcvbnResult } from '@/types';\nimport { noop } from '@/utils';\n\nimport { createValidateComplexity } from './complexity';\nimport { createValidatePasswordStrength } from './strength';\n\ntype zxcvbnFN = (password: string, userInputs?: (string | number)[]) => ZxcvbnResult;\n\nexport type UsePasswordConfig = PasswordSettingsData & {\n  validatePassword: boolean;\n};\n\nexport type UsePasswordCbs = {\n  onValidationError?: (error: string | undefined) => void;\n  onValidationSuccess?: () => void;\n  onValidationWarning?: (warning: string) => void;\n  onValidationInfo?: (info: string) => void;\n  onValidationComplexity?: (b: boolean) => void;\n};\n\nexport const createValidatePassword = (\n  loadZxcvbn: () => Promise<zxcvbnFN>,\n  config: UsePasswordConfig,\n  callbacks?: ValidatePasswordCallbacks,\n) => {\n  const { onValidation = noop, onValidationComplexity = noop } = callbacks || {};\n  const { show_zxcvbn, validatePassword: validatePasswordProp } = config;\n  const getComplexity = createValidateComplexity(config);\n  const getScore = createValidatePasswordStrength(config);\n  let result: PasswordValidation = {} satisfies PasswordValidation;\n\n  return (password: string, internalCallbacks?: ValidatePasswordCallbacks) => {\n    const {\n      onValidation: internalOnValidation = onValidation,\n      onValidationComplexity: internalOnValidationComplexity = onValidationComplexity,\n    } = internalCallbacks || {};\n    if (!validatePasswordProp) {\n      return;\n    }\n\n    /**\n     * Validate Complexity\n     */\n    const failedValidationsComplexity = getComplexity(password);\n    internalOnValidationComplexity(Object.keys(failedValidationsComplexity).length === 0);\n    result = {\n      ...result,\n      complexity: failedValidationsComplexity,\n    };\n    /**\n     * Validate score\n     */\n    if (show_zxcvbn) {\n      /**\n       * Lazy load zxcvbn without preventing a complexityError to be thrown if it exists\n       */\n      void loadZxcvbn().then(zxcvbn => {\n        const setPasswordScore = getScore(zxcvbn);\n        const strength = setPasswordScore(password);\n\n        result = {\n          ...result,\n          strength,\n        };\n        internalOnValidation({\n          ...result,\n          strength,\n        });\n      });\n    }\n\n    if (result.complexity && Object.keys(result.complexity).length === 0 && show_zxcvbn) {\n      return;\n    }\n\n    internalOnValidation(result);\n  };\n};\n"],"mappings":";;;;;;;;;;AAoBA,MAAa,0BACX,YACA,QACA,cACG;CACH,MAAM,EAAE,eAAe,MAAM,yBAAyB,SAAS,aAAa,EAAE;CAC9E,MAAM,EAAE,aAAa,kBAAkB,yBAAyB;CAChE,MAAM,gBAAgB,yBAAyB,OAAO;CACtD,MAAM,WAAW,+BAA+B,OAAO;CACvD,IAAIA,SAA6B,EAAE;AAEnC,SAAQ,UAAkB,sBAAkD;EAC1E,MAAM,EACJ,cAAc,uBAAuB,cACrC,wBAAwB,iCAAiC,2BACvD,qBAAqB,EAAE;AAC3B,MAAI,CAAC,qBACH;;;;EAMF,MAAM,8BAA8B,cAAc,SAAS;AAC3D,iCAA+B,OAAO,KAAK,4BAA4B,CAAC,WAAW,EAAE;AACrF,WAAS;GACP,GAAG;GACH,YAAY;GACb;;;;AAID,MAAI;;;;AAIF,EAAK,YAAY,CAAC,MAAK,WAAU;GAE/B,MAAM,WADmB,SAAS,OAAO,CACP,SAAS;AAE3C,YAAS;IACP,GAAG;IACH;IACD;AACD,wBAAqB;IACnB,GAAG;IACH;IACD,CAAC;IACF;AAGJ,MAAI,OAAO,cAAc,OAAO,KAAK,OAAO,WAAW,CAAC,WAAW,KAAK,YACtE;AAGF,uBAAqB,OAAO"}