@ahmetilhn/handy-utils
Version:
Handy utils offers developers a powerful and easy-to-use toolset. With its clean, modular and scalable code structure, it accelerates development processes and reduces code complexity. With a wide range of functions, it offers ready-made methods for solvi
2 lines (1 loc) • 3.29 kB
JavaScript
;var e;!function(e){e.OBJECT="[object Object]",e.ARRAY="[object Array]",e.STRING="[object String]",e.NUMBER="[object Number]",e.BOOLEAN="[object Boolean]",e.FUNCTION="[object Function]",e.UNDEFINED="[object Undefined]",e.NULL="[object Null]",e.DATE="[object Date]"}(e||(e={}));var t=e;const r=e=>null===e,n=e=>r(e)?t.NULL:Object.prototype.toString.call(e),o=e=>Array.isArray(e)&&n(e)===t.ARRAY,i=e=>"object"==typeof e&&n(e)===t.DATE,s=e=>null!==e&&"object"==typeof e,u=e=>{if(o(e)){const t=[];return e.forEach((e=>{t.push(s(e)?u(e):e)})),t}if(i(e))return new Date(e);if(s(e)){const t={};for(const r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=u(e[r]));return t}return e},c=e=>s(e)&&!o(e)&&!i(e),l=(e,t)=>{if(e===t)return!0;if(typeof e!=typeof t||null===e||null===t)return!1;if(c(e)&&c(t)&&!f(e)&&!f(t))return!0;if(i(e)&&i(t))return l(e.getTime(),t.getTime());if(o(e)&&o(t)){if(!e.length&&!t.length)return!0;if(e.length!==t.length)return!1;let r=0;for(;r<e.length;){if(!l(e[r],t[r]))return!1;r++}return!0}if(c(e)&&c(t)){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(const r in e){if(!Object.prototype.hasOwnProperty.call(t,r))return!1;if(!l(e[r],t[r]))return!1}return!0}return a(e)&&a(t)?l(e.toString(),t.toString()):e===t},a=e=>"function"==typeof e&&n(e)===t.FUNCTION,f=e=>{if(!c(e))throw new Error("hasPlainObjectRecord should only use for plain object type.");return!!Object.keys(e).length};function p(e,t,r,n){return new(r||(r=Promise))((function(o,i){function s(e){try{c(n.next(e))}catch(e){i(e)}}function u(e){try{c(n.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(s,u)}c((n=n.apply(e,t||[])).next())}))}"function"==typeof SuppressedError&&SuppressedError;const h=e=>p(void 0,void 0,void 0,(function*(){return new Promise((t=>setTimeout(t,e)))})),d=e=>void 0===e,b=e=>!d(e)&&!r(e),y=()=>b(globalThis.window);exports.deepClone=u,exports.hasPlainObjectRecord=f,exports.isAndroid=e=>{if(e)return!!/Android/i.exec(e);if(!y())throw new Error("Os detecetor only works on client!");return!!/Android/i.exec(navigator.userAgent)},exports.isArray=o,exports.isBoolean=e=>(!0===e||!1===e)&&n(e)===t.BOOLEAN,exports.isClient=y,exports.isDate=i,exports.isDeepEqual=l,exports.isDefined=b,exports.isFunction=a,exports.isIos=e=>{if(e)return!!/iPhone|iPad|iPod/i.exec(e);if(!y())throw new Error("Os detecetor only works on client!");return!!/iPhone|iPad|iPod/i.exec(navigator.userAgent)},exports.isNull=r,exports.isNumber=e=>"number"==typeof e&&!isNaN(e)&&n(e)===t.NUMBER,exports.isObject=s,exports.isPlainObject=c,exports.isServer=()=>!y(),exports.isUndefined=d,exports.normalize=(e,t)=>{if(isNaN(t)||isNaN(e))throw new Error("Max or value must be number");if(t<=0)throw new RangeError("max must be greater than 0");if(e<0)throw new RangeError("value must be non-negative");return Math.round(100*Math.min(e/t*100,100))/100},exports.sleep=h,exports.watcher=(e,t)=>new Proxy(e,{set(e,r,n){const o=r,i=e[o];return Object.is(i,n)||(e[o]=n,t(o,n,i)),!0}}),exports.withRetry=e=>p(void 0,[e],void 0,(function*({fn:e,retries:t,delay:r,exception:n}){for(let o=0;o<t;o++)try{return yield e()}catch(e){if(!(e instanceof n))throw e;if(o===t-1)return null;yield h(r*Math.pow(2,o))}return null}));