vue-tiny-validator
Version:
Tiny form validation tool for Vue 3
2 lines (1 loc) • 1.66 kB
JavaScript
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("vue")):"function"==typeof define&&define.amd?define(["exports","vue"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).TinyValidator={},e.Vue)}(this,(function(e,t){"use strict";const r=Symbol("Form");e.useField=function({value:e,rules:i,identifier:n,form:o}){const a=t.isRef(e)?e:t.computed(e),u=t.isRef(i)?i:t.computed(i instanceof Function?i:()=>i),l=t.ref(""),s=()=>{l.value=""},f=e=>e&&"string"==typeof e?(l.value=e,!1):(s(),!0),d=()=>f(function(e,t){for(const r of t){const t=r(e);if(!0!==t)return t}}(a.value,u.value)),c=()=>async function(e,t){for(const r of t)try{const t=await r(e);if(!0!==t)return t}catch(l){return l.message}}(a.value,u.value).then(f),v=t.inject(r,null==o?void 0:o[r]);if(v){const e={validate:d,validateAsync:c,reset:s,error:l,identifier:n,value:a};v.registerField(e),t.onBeforeUnmount((()=>v.unregisterField(e)))}return{validate:d,validateAsync:c,error:t.computed((()=>l.value)),reset:s}},e.useForm=function(){const e=t.reactive(new Set),i={registerField(t){e.add(t)},unregisterField(t){e.delete(t)}};t.provide(r,i);const n={[r]:i},o=t.computed((()=>[...e].filter((e=>!!e.error)).map((({error:e,value:t,identifier:r})=>({message:e,value:t,identifier:r}))))),a=()=>{for(const t of e)t.reset()};return{validate:()=>{a();for(const t of e)t.validate();return 0===o.value.length},validateAsync:async()=>(a(),await Promise.all([...e].map((e=>e.validateAsync()))),0===o.value.length),errors:o,reset:a,form:n,isValid:t.computed((()=>0===o.value.length))}},Object.defineProperty(e,"__esModule",{value:!0}),e[Symbol.toStringTag]="Module"}));