import type { ComputedRef, Ref } from "vue"; import { scorePassword } from "~~/lib/passwords"; export interface PasswordScore { score: ComputedRef<number>; message: ComputedRef<string>; isValid: ComputedRef<boolean>; } export function usePasswordScore(pw: Ref<string>, min = 30): PasswordScore { const score = computed(() => { return scorePassword(pw.value) || 0; }); const message = computed(() => { if (score.value < 20) { return "Very weak"; } else if (score.value < 40) { return "Weak"; } else if (score.value < 60) { return "Good"; } else if (score.value < 80) { return "Strong"; } return "Very strong"; }); const isValid = computed(() => { return score.value >= min; }); return { score, isValid, message, }; }