util.js 1.8 KB

1
  1. const formatRegExp=/%[sdj%]/g;export let warning=()=>{};export function format(...t){let e=1;const r=t[0],n=t.length;if("function"==typeof r)return r.apply(null,t.slice(1));if("string"==typeof r){let i=String(r).replace(formatRegExp,r=>{if("%%"===r)return"%";if(e>=n)return r;switch(r){case"%s":return String(t[e++]);case"%d":return Number(t[e++]);case"%j":try{return JSON.stringify(t[e++])}catch(t){return"[Circular]"}default:return r}});for(let r=t[e];e<n;r=t[++e])i+=` ${r}`;return i}return r}function isNativeStringType(t){return"string"===t||"url"===t||"hex"===t||"email"===t||"pattern"===t}export function isEmptyValue(t,e){return null==t||(!("array"!==e||!Array.isArray(t)||t.length)||!(!isNativeStringType(e)||"string"!=typeof t||t))}export function isEmptyObject(t){return 0===Object.keys(t).length}function asyncParallelArray(t,e,r){const n=[];let i=0;const l=t.length;function a(t){n.push.apply(n,t),i++,i===l&&r(n)}t.forEach(t=>{e(t,a)})}function asyncSerialArray(t,e,r){let n=0;const i=t.length;!function l(a){if(a&&a.length)return void r(a);const c=n;n+=1,c<i?e(t[c],l):r([])}([])}function flattenObjArr(t){const e=[];return Object.keys(t).forEach(r=>{e.push.apply(e,t[r])}),e}export function asyncMap(t,e,r,n){if(e.first){return asyncSerialArray(flattenObjArr(t),r,n)}let i=e.firstFields||[];!0===i&&(i=Object.keys(t));const l=Object.keys(t),a=l.length;let c=0;const o=[],s=t=>{o.push.apply(o,t),c++,c===a&&n(o)};l.forEach(e=>{const n=t[e];-1!==i.indexOf(e)?asyncSerialArray(n,r,s):asyncParallelArray(n,r,s)})}export function complementError(t){return e=>e&&e.message?(e.field=e.field||t.fullField,e):{message:e,field:e.field||t.fullField}}export function deepMerge(t,e){if(e)for(const r in e)if(e.hasOwnProperty(r)){const n=e[r];"object"==typeof n&&"object"==typeof t[r]?t[r]={...t[r],...n}:t[r]=n}return t}