UNPKG

@vorms/core

Version:

Vue Form Validation with Composition API

2 lines (1 loc) 11.7 kB
!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).Vorms={},e.Vue)}(this,(function(e,t){"use strict";var r=function(e){return function(e){return!!e&&"object"==typeof e}(e)&&!function(e){var t=Object.prototype.toString.call(e);return"[object RegExp]"===t||"[object Date]"===t||function(e){return e.$$typeof===a}(e)}(e)};var a="function"==typeof Symbol&&Symbol.for?Symbol.for("react.element"):60103;function u(e,t){return!1!==t.clone&&t.isMergeableObject(e)?s((r=e,Array.isArray(r)?[]:{}),e,t):e;var r}function n(e,t,r){return e.concat(t).map((function(e){return u(e,r)}))}function o(e){return Object.keys(e).concat(function(e){return Object.getOwnPropertySymbols?Object.getOwnPropertySymbols(e).filter((function(t){return Object.propertyIsEnumerable.call(e,t)})):[]}(e))}function l(e,t){try{return t in e}catch(e){return!1}}function i(e,t,r){var a={};return r.isMergeableObject(e)&&o(e).forEach((function(t){a[t]=u(e[t],r)})),o(t).forEach((function(n){(function(e,t){return l(e,t)&&!(Object.hasOwnProperty.call(e,t)&&Object.propertyIsEnumerable.call(e,t))})(e,n)||(l(e,n)&&r.isMergeableObject(t[n])?a[n]=function(e,t){if(!t.customMerge)return s;var r=t.customMerge(e);return"function"==typeof r?r:s}(n,r)(e[n],t[n],r):a[n]=u(t[n],r))})),a}function s(e,t,a){(a=a||{}).arrayMerge=a.arrayMerge||n,a.isMergeableObject=a.isMergeableObject||r,a.cloneUnlessOtherwiseSpecified=u;var o=Array.isArray(t);return o===Array.isArray(e)?o?a.arrayMerge(e,t,a):i(e,t,a):u(t,a)}s.all=function(e,t){if(!Array.isArray(e))throw new Error("first argument should be an array");return e.reduce((function(e,r){return s(e,r,t)}),{})};var c=s,f=function e(t,r){if(t===r)return!0;if(t&&r&&"object"==typeof t&&"object"==typeof r){if(t.constructor!==r.constructor)return!1;var a,u,n;if(Array.isArray(t)){if((a=t.length)!=r.length)return!1;for(u=a;0!=u--;)if(!e(t[u],r[u]))return!1;return!0}if(t instanceof Map&&r instanceof Map){if(t.size!==r.size)return!1;for(u of t.entries())if(!r.has(u[0]))return!1;for(u of t.entries())if(!e(u[1],r.get(u[0])))return!1;return!0}if(t instanceof Set&&r instanceof Set){if(t.size!==r.size)return!1;for(u of t.entries())if(!r.has(u[0]))return!1;return!0}if(ArrayBuffer.isView(t)&&ArrayBuffer.isView(r)){if((a=t.length)!=r.length)return!1;for(u=a;0!=u--;)if(t[u]!==r[u])return!1;return!0}if(t.constructor===RegExp)return t.source===r.source&&t.flags===r.flags;if(t.valueOf!==Object.prototype.valueOf)return t.valueOf()===r.valueOf();if(t.toString!==Object.prototype.toString)return t.toString()===r.toString();if((a=(n=Object.keys(t)).length)!==Object.keys(r).length)return!1;for(u=a;0!=u--;)if(!Object.prototype.hasOwnProperty.call(r,n[u]))return!1;for(u=a;0!=u--;){var o=n[u];if(!e(t[o],r[o]))return!1}return!0}return t!=t&&r!=r};function d(e,t,r){"object"==typeof r.value&&(r.value=v(r.value)),r.enumerable&&!r.get&&!r.set&&r.configurable&&r.writable&&"__proto__"!==t?e[t]=r.value:Object.defineProperty(e,t,r)}function v(e){if("object"!=typeof e)return e;var t,r,a,u=0,n=Object.prototype.toString.call(e);if("[object Object]"===n?a=Object.create(e.__proto__||null):"[object Array]"===n?a=Array(e.length):"[object Set]"===n?(a=new Set,e.forEach((function(e){a.add(v(e))}))):"[object Map]"===n?(a=new Map,e.forEach((function(e,t){a.set(v(t),v(e))}))):"[object Date]"===n?a=new Date(+e):"[object RegExp]"===n?a=new RegExp(e.source,e.flags):"[object DataView]"===n?a=new e.constructor(v(e.buffer)):"[object ArrayBuffer]"===n?a=e.slice(0):"Array]"===n.slice(-6)&&(a=new e.constructor(e)),a){for(r=Object.getOwnPropertySymbols(e);u<r.length;u++)d(a,r[u],Object.getOwnPropertyDescriptor(e,r[u]));for(u=0,r=Object.getOwnPropertyNames(e);u<r.length;u++)Object.hasOwnProperty.call(a,t=r[u])&&a[t]===e[t]||d(a,t,Object.getOwnPropertyDescriptor(e,t))}return a||e}const p=Symbol("");const y=Symbol("");function g(){return function(e,r=undefined){const a=t.getCurrentInstance();return(null==a?void 0:a.provides[e])||t.inject(e,r)}(y)}var b=e=>Array.isArray(e)?e.filter(Boolean):[],m=e=>null==e;var h=e=>!m(e)&&!Array.isArray(e)&&(e=>"object"==typeof e)(e)&&!(e=>e instanceof Date)(e),j=e=>void 0===e,O=(e,t,r)=>{if(!t||!h(e))return r;const a=b(t.split(/[,[\].]+?/)).reduce(((e,t)=>m(e)?e:e[t]),e);return j(a)||a===e?j(e[t])?r:e[t]:a},A=e=>"function"==typeof e,F=e=>!!e&&h(e)&&A(e.then),S=e=>"string"==typeof e,w=e=>Object.keys(e),M=(e,t,r)=>{let a=-1;const u=(e=>/^\w*$/.test(e))(t)?[t]:b(t.replace(/["|']|\]/g,"").split(/\.|\[/));const n=u.length,o=n-1;for(;++a<n;){const t=u[a];let n=r;if(a!==o){const r=e[t];n=h(r)||Array.isArray(r)?r:isNaN(+u[a+1])?{}:[]}e[t]=n,e=e[t]}return e};function V(e,t){switch(t.type){case 0:return e.isSubmitting.value=!0,void(e.submitCount.value=e.submitCount.value+1);case 1:case 2:return void(e.isSubmitting.value=!1);case 3:return w(e.values).forEach((t=>{delete e.values[t]})),void w(t.payload).forEach((r=>{e.values[r]=t.payload[r]}));case 4:return void M(e.values,t.payload.path,v(t.payload.value));case 5:return void M(e.touched.value,t.payload.path,t.payload.touched);case 6:return void(e.errors.value=t.payload);case 7:return void M(e.errors.value,t.payload.path,t.payload.error);case 8:return void(e.isSubmitting.value=t.payload);case 9:return void(e.isValidating.value=t.payload);case 10:V(e,{type:3,payload:t.payload.values}),e.touched.value=t.payload.touched,e.errors.value=t.payload.errors,e.submitCount.value=t.payload.submitCount}}const E={},P={};function $(e,t,r){const a=[...e];return t.forEach(((t,u)=>{void 0===a[u]?a[u]=r.cloneUnlessOtherwiseSpecified(t,r):r.isMergeableObject(t)?a[u]=c(e[u],t,r):-1===e.indexOf(t)&&a.push(t)})),a}var C=(e,t)=>[...e,t],B=(e,t,r)=>[...e.slice(0,t),r,...e.slice(t)],D=(e,t,r)=>{e.splice(r,0,e.splice(t,1)[0])},x=(e,t)=>{const r={...e};return delete r[t],r},_=(e,t)=>[t,...e],k=(e,t)=>{if(j(t))return[];const r=[...e];return r.splice(t,1),r},I=(e,t,r)=>{e[t]=[e[r],e[r]=e[t]][0]},R=(e,t,r)=>{const a=[...e];return a[t]=r,a};e.get=O,e.set=M,e.useField=function(e,t={}){const{registerField:r,getFieldValue:a,getFieldAttrs:u,getFieldMeta:n}=g();return r(e,t),{value:a(e),attrs:u(e),...n(e)}},e.useFieldArray=function(e,r){const{getFieldValue:a,setFieldValue:u,getFieldError:n,getFieldTouched:o,getFieldDirty:l,getFieldAttrs:i,registerFieldArray:s,setFieldArrayValue:c}=g(),f=t.ref([]),d=t.computed((()=>a(e).value||[]));let v=0;const p=()=>{f.value=d.value.map(y)},y=r=>{const a=v++,s=t.computed((()=>f.value.findIndex((e=>e.key===a))));return{key:a,value:t.computed({get:()=>-1===s.value?r:d.value[s.value],set(t){-1!==s.value&&u(`${e}.${s.value}`,t)}}),name:t.computed((()=>`${t.unref(e)}.${s.value}`)),error:t.computed((()=>n(`${t.unref(e)}.${s.value}`))),touched:t.computed((()=>o(`${t.unref(e)}.${s.value}`))),dirty:t.computed((()=>l(`${t.unref(e)}.${s.value}`))),attrs:t.computed((()=>x(t.unref(i(`${t.unref(e)}.${s.value}`)),"name")))}};return s(e,{...r,reset:p}),p(),{fields:f,append:r=>{c(t.unref(e),C(d.value,r),C,{argA:void 0}),f.value.push(y(r))},prepend:r=>{c(t.unref(e),_(d.value,r),_,{argA:void 0}),f.value.unshift(y(r))},swap:(r,a)=>{if(!(r in d.value)||!(a in d.value))return;const u=[...d.value],n=[...f.value];I(u,r,a),I(n,r,a),c(t.unref(e),u,I,{argA:r,argB:a},!1),f.value=n},remove:r=>{const a=k(d.value,r),u=k(f.value,r);c(t.unref(e),a,k,{argA:r}),f.value=u},move:(r,a)=>{if(!(r in d.value))return;const u=[...d.value],n=[...f.value];D(u,r,a),D(n,r,a),c(t.unref(e),u,D,{argA:r,argB:a},!1),f.value=n},insert:(r,a)=>{const u=B(d.value,r,a),n=B(f.value,r,y(a));c(t.unref(e),u,B,{argA:r,argB:void 0}),f.value=n},update:(r,a)=>{if(!(r in d.value))return;const u=R(d.value,r,a);c(t.unref(e),u,R,{argA:r,argB:void 0}),f.value[r].value=a},replace:r=>{const a=[...r];c(t.unref(e),a,(e=>e),{}),f.value=a.map(y)}}},e.useForm=function(e){const{validateOnMounted:r=!1,validateMode:a="submit",reValidateMode:u="change",onSubmit:n,onInvalid:o}=e;let l=v(e.initialValues),i=v(e.initialErrors||E),s=v(e.initialTouched||P);const[d,g]=function(e,t){const r=t;return[r,t=>{e(r,t)}]}(V,{values:t.reactive(v(l)),errors:t.ref(v(i)),touched:t.ref(v(s)),submitCount:t.ref(0),isSubmitting:t.ref(!1),isValidating:t.ref(!1)}),b={},m={},h=t.computed((()=>!f(d.values,l))),j=t.computed((()=>0===d.submitCount.value?a:u)),C=(e,{validate:r}={})=>{b[t.unref(e)]={validate:r}},B=(e,t=!0)=>(g({type:5,payload:{path:e,touched:t}}),"blur"===j.value?K(d.values):Promise.resolve()),D=(e,t,r)=>(g({type:4,payload:{path:e,value:t}}),r?K(d.values):Promise.resolve()),x=(e,t)=>{if(S(e))return()=>B(e,!0);const{name:r,id:a}=e.target,u=null!=t?t:r||a;u&&B(u,!0)},_=()=>{"change"===j.value&&K(d.values)},k=()=>{"input"===j.value&&K(d.values)},I=e=>t.computed({get:()=>O(d.values,t.unref(e)),set(r){D(t.unref(e),r)}}),R=e=>{const r=t.computed((()=>z(t.unref(e)))),a=t.computed((()=>N(t.unref(e))));return{dirty:t.computed((()=>U(t.unref(e)))),error:r,touched:a}},T=e=>t.computed((()=>({name:t.unref(e),onBlur:x,onChange:_,onInput:k}))),z=e=>O(d.errors.value,e),N=e=>O(d.touched.value,e,!1),U=e=>!f(O(l,e),O(d.values,e)),q={setSubmitting:e=>{g({type:8,payload:e})},get initialValues(){return v(l)}},G=(e,t)=>new Promise((r=>r(b[e].validate(t)))),H=e=>{const t=w(b).filter((e=>A(b[e].validate))),r=t.map((t=>G(t,O(e,t))));return Promise.all(r).then((e=>e.reduce(((e,r,a)=>(r&&M(e,t[a],r),e)),{})))},J=t=>new Promise((r=>{var a;const u=null===(a=e.validate)||void 0===a?void 0:a.call(e,t);null==u?r({}):F(u)?u.then((e=>{r(e||{})})):r(u)})),K=(t=d.values)=>(g({type:9,payload:!0}),Promise.all([H(t),e.validate?J(t):{}]).then((([e,t])=>{const r=c.all([e,t],{arrayMerge:$});return g({type:6,payload:r}),r})).finally((()=>{g({type:9,payload:!1})}))),L=e=>{const t=v((null==e?void 0:e.values)||l),r=v((null==e?void 0:e.errors)||i),a=v((null==e?void 0:e.touched)||s);l=v(t),i=v(r),s=v(a),g({type:10,payload:{values:t,touched:a,errors:r,submitCount:"number"==typeof(null==e?void 0:e.submitCount)?e.submitCount:0}}),Object.values(m).forEach((e=>{e.reset()}))},Q={values:d.values,touched:t.computed((()=>d.touched.value)),errors:t.computed((()=>d.errors.value)),submitCount:t.computed((()=>d.submitCount.value)),isSubmitting:d.isSubmitting,isValidating:t.computed((()=>d.isValidating.value)),dirty:h,register:(e,t)=>(C(e,t),{value:I(e),attrs:T(e),...R(e)}),setValues:(e,t)=>{g({type:3,payload:e});return(null==t?"change"===j.value:t)?K(d.values):Promise.resolve()},setFieldValue:D,handleSubmit:e=>{null==e||e.preventDefault(),g({type:0}),K().then((e=>{if(0===w(e).length){const e=n(v(d.values),q);if(null==e)return;e.then((e=>(g({type:1}),e))).catch((()=>{g({type:2})}))}else g({type:2}),null==o||o(e)}))},handleReset:e=>{null==e||e.preventDefault(),L()},resetForm:L,validateForm:K,validateField:e=>b[e]&&A(b[e].validate)?(g({type:9,payload:!0}),G(e,O(d.values,e)).then((t=>{g({type:7,payload:{path:e,error:t}})})).finally((()=>{g({type:9,payload:!1})}))):Promise.resolve()};return t.provide(y,{getFieldMeta:R,getFieldValue:I,setFieldValue:D,getFieldError:z,getFieldTouched:N,getFieldDirty:U,getFieldAttrs:T,registerField:C,registerFieldArray:(e,r)=>{C(e,r),m[t.unref(e)]={reset:r.reset}},setFieldArrayValue:(e,t,r,a,u=!0)=>{if(r&&a){if(w(d.errors.value).length&&Array.isArray(O(d.errors.value,e))){const t=r(O(d.errors.value,e),a.argA,a.argB);u&&g({type:7,payload:{path:e,error:t}})}if(w(d.touched.value).length&&Array.isArray(O(d.touched.value,e))){const t=r(O(d.touched.value,e),a.argA,a.argB);u&&g({type:5,payload:{path:e,touched:t}})}}return D(e,t)}}),t.provide(p,Q),t.onMounted((()=>{r&&K(l)})),Q},e.useFormContext=function(){return t.inject(p)}}));