34 lines
925 B
TypeScript
34 lines
925 B
TypeScript
import * as defaultRules from '@vee-validate/rules'
|
|
import { configure, defineRule } from 'vee-validate'
|
|
import type { Composer } from 'vue-i18n'
|
|
|
|
export default defineNuxtPlugin((nuxtApp) => {
|
|
for (const rule in defaultRules) {
|
|
if (['default', 'url'].includes(rule))
|
|
continue
|
|
|
|
defineRule(rule, defaultRules[rule])
|
|
}
|
|
|
|
defineRule('url', (value, params): boolean => {
|
|
const optionalProtocol = Array.isArray(params) ? params[0] : params.optionalProtocol
|
|
|
|
if (optionalProtocol)
|
|
return /^(http:\/\/www\.|https:\/\/www\.|http:\/\/|https:\/\/)?[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$/.test(value)
|
|
|
|
return defaultRules.url(value, params)
|
|
})
|
|
|
|
const i18n = nuxtApp.$i18n as Composer
|
|
|
|
if (i18n) {
|
|
configure({
|
|
generateMessage: (context) => {
|
|
return i18n.t(`validation.${context.rule!.name}`, context.rule!.params)
|
|
},
|
|
})
|
|
}
|
|
|
|
return {}
|
|
})
|