import { reactive, watch, type Ref } from 'vue'; type UseValidationRule = { validator: (value: T) => boolean message: string } export function useValidation({ source, rules }: { source: Ref; rules: UseValidationRule[] }) { const state = reactive<{ message: string, status: undefined | 'error' }>({ message: '', status: undefined }) watch([source], () => { for(const rule of rules) { if(!rule.validator(source.value)){ state.message = rule.message state.status = 'error' } } }) return state; }