UNPKG

@vorms/core

Version:

Vue Form Validation with Composition API

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