@lowentry/utils 1.10.3 → 1.10.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.js +2801 -1
- package/index.js.map +1 -1
- package/package.json +2 -2
package/index.js
CHANGED
|
@@ -1,2 +1,2802 @@
|
|
|
1
|
-
import n from"@babel/runtime/helpers/toConsumableArray";import e from"@babel/runtime/helpers/defineProperty";import t from"@babel/runtime/helpers/asyncToGenerator";import r from"@babel/runtime/helpers/typeof";import"@babel/runtime/helpers/awaitAsyncGenerator";import a from"@babel/runtime/helpers/wrapAsyncGenerator";import o from"@babel/runtime/regenerator";import i from"fast-deep-equal";import u from"clone-deep";var c=/[^0-9.\-]/g,l=function(n){return null!=n},s=function(n){return Array.isArray(n)},f=function(n){return s(n)?n:void 0!==n?[n]:[]},h=function(n){return"object"===r(n)&&null!==n&&!Array.isArray(n)},p=function(n){return h(n)?n:{}},m=function(n){return l(n)?""+n:""},d=function(){for(var n=arguments.length,e=new Array(n),t=0;t<n;t++)e[t]=arguments[t];for(var r=0,a=e;r<a.length;r++){var o=a[r];if(l(o))return""+o}return""},v=function(n){return Math.round(w(n))},g=function(){return Math.round(y.apply(void 0,arguments))},w=function(n){var e=+n;return isNaN(e)?0:e},y=function(){for(var n=arguments.length,e=new Array(n),t=0;t<n;t++)e[t]=arguments[t];for(var r=0,a=e;r<a.length;r++){var o=a[r];if(null!==o){var i=+o;if(!isNaN(i))return i}}return 0},b=function(n){return Math.round(x(n))},A=function(){return Math.round(k.apply(void 0,arguments))},x=function(n){var e="number"==typeof n?n:parseFloat((n+"").replace(c,""));return isNaN(e)?0:e},k=function(){for(var n=arguments.length,e=new Array(n),t=0;t<n;t++)e[t]=arguments[t];for(var r=0,a=e;r<a.length;r++){var o=a[r];if(null!==o){var i="number"==typeof o?o:parseFloat((o+"").replace(c,""));if(!isNaN(i))return i}}return 0};function M(n,e){var t=Object.keys(n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(n);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),t.push.apply(t,r)}return t}var T,C,S,j,O,E,I,L,U,_,P,F,N,q,D,B,V,z=function(n){if(!G.isTransactionalValueValid(n))throw console.error("The given value is not a valid TransactionalValue:"),console.error(n),new Error("The given value is not a valid TransactionalValue")},W=function(n,e){for(var t=0;t<n.changes.length;t++){var r=n.changes[t];if(r.id===e)return{index:t,value:r.value}}return null},G={equals:i,parseVersionString:function(n){var e,t,r;if(h(n)&&l(null===(e=n)||void 0===e?void 0:e.major)&&l(null===(t=n)||void 0===t?void 0:t.minor)&&l(null===(r=n)||void 0===r?void 0:r.patch))return n;var a=(n=m(n).trim()).split(" ")[0].split("-")[0].split("."),o=b(a[0]),i=b(a[1]),u=b(a[2]),c={major:o,minor:i,patch:u,toString:function(){return o+"."+i+"."+u},equals:function(n){return n=G.parseVersionString(n),o===n.major&&i===n.minor&&u===n.patch},largerThan:function(n){return n=G.parseVersionString(n),o>n.major||!(o<n.major)&&(i>n.minor||!(i<n.minor)&&u>n.patch)},largerThanOrEquals:function(n){return n=G.parseVersionString(n),o>n.major||!(o<n.major)&&(i>n.minor||!(i<n.minor)&&u>=n.patch)},smallerThan:function(n){return!c.largerThanOrEquals(n)},smallerThanOrEquals:function(n){return!c.largerThan(n)}};return c},contains:function(n,e){if(!n)return!1;var t=!1;return e=m(e),G.each(n,(function(n){if(m(n)===e)return t=!0,!1})),t},containsCaseInsensitive:function(n,e){if(!n)return!1;var t=!1;return e=m(e).toLowerCase(),G.each(n,(function(n){if(m(n).toLowerCase()===e)return t=!0,!1})),t},containsAll:function(n,e){if(!n)return!1;var t=!0;return G.each(e,(function(e){if(!G.contains(n,e))return t=!1,!1})),t},containsAllCaseInsensitive:function(n,e){if(!n)return!1;var t=!0;return G.each(e,(function(e){if(!G.containsCaseInsensitive(n,e))return t=!1,!1})),t},containsAny:function(n,e){if(!n)return!1;var t=!1;return G.each(e,(function(e){if(G.contains(n,e))return t=!0,!1})),t},containsAnyCaseInsensitive:function(n,e){if(!n)return!1;var t=!1;return G.each(e,(function(e){if(G.containsCaseInsensitive(n,e))return t=!0,!1})),t},containsNone:function(n,e){if(!n)return!0;var t=!0;return G.each(e,(function(e){if(G.contains(n,e))return t=!1,!1})),t},containsNoneCaseInsensitive:function(n,e){if(!n)return!0;var t=!0;return G.each(e,(function(e){if(G.containsCaseInsensitive(n,e))return t=!1,!1})),t},each:function(n,e){var t=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(null!=n)if(Array.isArray(n))for(var a=0;a<n.length&&!1!==e.call(n[a],n[a],a);a++);else if("object"===r(n)||"function"==typeof n){for(var o in n)if((!0===t||Object.prototype.hasOwnProperty.call(n,o))&&!1===e.call(n[o],n[o],o))break}else console.warn("Executed LeUtils.each() on an invalid type: ["+r(n)+"]",n);return n},eachAsync:(V=function(){var n=t(o.mark((function n(e,r,a,i){var u,c;return o.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return u=[],c=!1,n.next=4,G.eachAsync(e,function(){var n=t(o.mark((function n(e,i){var l,s;return o.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:l=o.mark((function n(){var e;return o.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:if(e=[],G.each(u,(function(n){n.__lowentry_utils__promise_is_done__||e.push(n)})),!((u=e).length>a)){n.next=6;break}return n.next=6,Promise.any(u);case 6:case"end":return n.stop()}}),n)}));case 1:if(!(u.length>a)){n.next=5;break}return n.delegateYield(l(),"t0",3);case 3:n.next=1;break;case 5:if(!c){n.next=7;break}return n.abrupt("return",!1);case 7:s=t(o.mark((function n(){return o.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,r.call(e,e,i);case 2:if(n.t0=n.sent,!1!==n.t0){n.next=5;break}c=!0;case 5:s.__lowentry_utils__promise_is_done__=!0;case 6:case"end":return n.stop()}}),n)})))(),u.push(s);case 9:case"end":return n.stop()}}),n)})));return function(e,t){return n.apply(this,arguments)}}(),i);case 4:return n.next=6,Promise.all(u);case 6:return n.abrupt("return",e);case 7:case"end":return n.stop()}}),n)})));return function(e,t,r,a){return n.apply(this,arguments)}}(),function(){var n=t(o.mark((function n(e,t){var a,i,u,c,l=arguments;return o.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:if(a=l.length>2&&void 0!==l[2]?l[2]:1,i=l.length>3&&void 0!==l[3]&&l[3],null==e){n.next=36;break}if(!((a=b(a))>1)){n.next=8;break}return n.next=7,V(e,t,a,i);case 7:return n.abrupt("return",n.sent);case 8:if(!Array.isArray(e)){n.next=21;break}u=0;case 10:if(!(u<e.length)){n.next=19;break}return n.next=13,t.call(e[u],e[u],u);case 13:if(n.t0=n.sent,!1!==n.t0){n.next=16;break}return n.abrupt("break",19);case 16:u++,n.next=10;break;case 19:n.next=36;break;case 21:if("object"!==r(e)&&"function"!=typeof e){n.next=35;break}n.t1=o.keys(e);case 23:if((n.t2=n.t1()).done){n.next=33;break}if(c=n.t2.value,!0!==i&&!Object.prototype.hasOwnProperty.call(e,c)){n.next=31;break}return n.next=28,t.call(e[c],e[c],c);case 28:if(n.t3=n.sent,!1!==n.t3){n.next=31;break}return n.abrupt("break",33);case 31:n.next=23;break;case 33:n.next=36;break;case 35:console.warn("Executed LeUtils.eachAsync() on an invalid type: ["+r(e)+"]",e);case 36:return n.abrupt("return",e);case 37:case"end":return n.stop()}}),n)})));return function(e,t){return n.apply(this,arguments)}}()),filter:function(n,e){var t=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(null!=n){if(Array.isArray(n)){for(var a=[],o=0;o<n.length;o++)!1!==e.call(n[o],n[o],o)&&a.push(n[o]);return a}if("object"===r(n)||"function"==typeof n){var i={};for(var u in n)(!0===t||Object.prototype.hasOwnProperty.call(n,u))&&!1!==e.call(n[u],n[u],u)&&(i[u]=n[u]);return i}console.warn("Executed LeUtils.filter() on an invalid type: ["+r(n)+"]",n)}return n},map:function(n,e){var t=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(null!=n){if(Array.isArray(n)){for(var a=[],o=0;o<n.length;o++)a[o]=e.call(n[o],n[o],o);return a}if("object"===r(n)||"function"==typeof n){var i={};for(var u in n)(!0===t||Object.prototype.hasOwnProperty.call(n,u))&&(i[u]=e.call(n[u],n[u],u));return i}console.warn("Executed LeUtils.map() on an invalid type: ["+r(n)+"]",n)}return n},mapToArray:function(n,e){var t=arguments.length>2&&void 0!==arguments[2]&&arguments[2],a=[];if(null!=n)if(Array.isArray(n))for(var o=0;o<n.length;o++)a.push(e.call(n[o],n[o],o));else if("object"===r(n)||"function"==typeof n)for(var i in n)(!0===t||Object.prototype.hasOwnProperty.call(n,i))&&a.push(e.call(n[i],n[i],i));else console.warn("Executed LeUtils.mapToArray() on an invalid type: ["+r(n)+"]",n);return a},mapToArraySorted:function(n,e,t){for(var r=arguments.length>3&&void 0!==arguments[3]&&arguments[3],a=G.sortKeys(n,e,r),o=[],i=0;i<a.length;i++)o.push(t.call(n[a[i]],n[a[i]],a[i]));return o},sortKeys:function(n,e){var t=arguments.length>2&&void 0!==arguments[2]&&arguments[2],a=[];if(null!=n)if(Array.isArray(n))for(var o=0;o<n.length;o++)a.push(o);else if("object"===r(n)||"function"==typeof n)for(var i in n)(!0===t||Object.prototype.hasOwnProperty.call(n,i))&&a.push(i);else console.warn("Executed LeUtils.sortKeys() on an invalid type: ["+r(n)+"]",n);return a.sort((function(t,r){return e(n[t],n[r])})),a},flattenArray:(B=function n(e,t){Array.isArray(t)?t.forEach((function(t){n(e,t)})):e.push(t)},function(n){if(!Array.isArray(n))return[n];var e=[];return n.forEach((function(n){B(e,n)})),e}),compare:function(n,e){return n<e?-1:n>e?1:0},compareNumbers:function(n,e){return n-e},compareNumericStrings:function(n,e){return n=m(n).trim(),e=m(e).trim(),n.length===e.length?n<e?-1:n>e?1:0:n.length<e.length?-1:1},compareTimestampStrings:function(n,e){return n=G.base64ToHex(m(n).replaceAll("-","+").replaceAll("_","/")),e=G.base64ToHex(m(e).replaceAll("-","+").replaceAll("_","/")),G.compare(n,e)},isEmptyObject:function(n){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];for(var t in n)if(!0===e||Object.prototype.hasOwnProperty.call(n,t))return!1;return!0},getObjectFieldsCount:function(n){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],t=0;for(var r in n)(!0===e||Object.prototype.hasOwnProperty.call(n,r))&&t++;return t},isGeneratorFunction:(F=o.mark((function n(){return o.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:case"end":return n.stop()}}),n)})).constructor,N=a(o.mark((function n(){return o.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:case"end":return n.stop()}}),n)}))).constructor,q=function(){}.constructor,D=Array.from(new Set(["GeneratorFunction","AsyncFunction","AsyncGeneratorFunction",F.name,F.displayName,N.name,N.displayName])).filter((function(n){return n&&n!==q.name&&n!==q.displayName})),function(n){if(!n)return!1;var e=n.constructor;return!!e&&(e.name&&D.includes(e.name)||e.displayName&&D.includes(e.displayName))}),setTimeout:function(n){function e(e,t){return n.apply(this,arguments)}return e.toString=function(){return n.toString()},e}((function(n,e){e=x(e);var t=performance.now(),r=setTimeout((function(){var e=performance.now();try{n((e-t)/1e3)}catch(n){console.error(n)}t=e}),e);return{remove:function(){null!==r&&(clearTimeout(r),r=null)}}})),setInterval:function(n){function e(e){return n.apply(this,arguments)}return e.toString=function(){return n.toString()},e}((function(n){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1e3,t=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(e=k(e,1e3),t)try{n(0)}catch(n){console.error(n)}var r=performance.now(),a=setInterval((function(){var e=performance.now();try{n((e-r)/1e3)}catch(n){console.error(n)}r=e}),e);return{remove:function(){null!==a&&(clearInterval(a),a=null)}}})),setAnimationFrameTimeout:function(n){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;e=A(e,1);var t=!0,r=null,a=performance.now();return function o(){if(t){if(e<=0){t=!1,r=null;var i=performance.now();try{n((i-a)/1e3)}catch(n){console.error(n)}return void(a=i)}e--,r="undefined"==typeof window?setTimeout(o,1e3/60):requestAnimationFrame(o)}}(),{remove:function(){t=!1,null!==r&&("undefined"==typeof window?clearTimeout(r):cancelAnimationFrame(r),r=null)}}},setAnimationFrameInterval:function(n){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,t=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(e=A(e,1),t)try{n(0)}catch(n){console.error(n)}var r=!0,a=null,o=performance.now(),i=e,u=function t(){if(r){if(i<=0){var u=performance.now();try{n((u-o)/1e3)}catch(n){console.error(n)}o=u,i=e}i--,r&&(a="undefined"==typeof window?setTimeout(t,1e3/60):requestAnimationFrame(t))}};return"undefined"==typeof window?setTimeout(u,1e3/60):requestAnimationFrame(u),{remove:function(){r=!1,null!==a&&("undefined"==typeof window?clearTimeout(a):cancelAnimationFrame(a),a=null)}}},promiseTimeout:function(n){return n=x(n),new Promise(n<=0?function(n){return n()}:function(e){return setTimeout(e,n)})},promiseAnimationFrameTimeout:function(n){return n=b(n),new Promise(n<=0?function(n){return n()}:function(e){return G.setAnimationFrameTimeout(e,n)})},platformIsMobile:function(){var n,e;if("undefined"==typeof window)return!1;var t=m((null===(n=window.navigator)||void 0===n?void 0:n.userAgent)||(null===(e=window.navigator)||void 0===e?void 0:e.vendor)||window.opera||""),r=t.substring(0,4);return!(!/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series([46])0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(t)&&!/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br([ev])w|bumb|bw-([nu])|c55\/|capi|ccwa|cdm-|cell|chtm|cldc|cmd-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do([cp])o|ds(12|-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly([-_])|g1 u|g560|gene|gf-5|g-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd-([mpt])|hei-|hi(pt|ta)|hp( i|ip)|hs-c|ht(c([- _agpst])|tp)|hu(aw|tc)|i-(20|go|ma)|i230|iac([ \-/])|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja([tv])a|jbro|jemu|jigs|kddi|keji|kgt([ /])|klon|kpt |kwc-|kyo([ck])|le(no|xi)|lg( g|\/([klu])|50|54|-[a-w])|libw|lynx|m1-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t([- ov])|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30([02])|n50([025])|n7(0([01])|10)|ne(([cm])-|on|tf|wf|wg|wt)|nok([6i])|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan([adt])|pdxg|pg(13|-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio|pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h-|oo|p-)|sdk\/|se(c([-01])|47|mc|nd|ri)|sgh-|shar|sie([-m])|sk-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel([im])|tim-|t-mo|to(pl|sh)|ts(70|m-|m3|m5)|tx-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c([- ])|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas-|your|zeto|zte-/i.test(r))},platformHasCursor:function(){var n;return"undefined"==typeof window||!(G.platformIsMobile()||null!==(n=window.matchMedia("(any-hover: none)"))&&void 0!==n&&n.matches)},capitalize:function(n){return(n=m(n).trim()).length<=0?n:n.charAt(0).toUpperCase()+n.slice(1)},endsWithAny:function(n,e){var t;n=m(n),t=Array.isArray(e)?e:m(e).split("");var r=!1;return G.each(t,(function(e){if(n.endsWith(m(e)))return r=!0,!1})),r},startsWithAny:function(n,e){var t;n=m(n),t=Array.isArray(e)?e:m(e).split("");var r=!1;return G.each(t,(function(e){if(n.startsWith(m(e)))return r=!0,!1})),r},trimEnd:function(n,e){var t;n=m(n),t=Array.isArray(e)?e:m(e).split("");for(var r=function(e){e=m(e),n.endsWith(e)&&(n=n.substring(0,n.length-e.length),a=!0)},a=!0;a;)a=!1,G.each(t,r);return n},trimStart:function(n,e){var t;n=m(n),t=Array.isArray(e)?e:m(e).split("");for(var r=function(e){e=m(e),n.startsWith(e)&&(n=n.substring(e.length),a=!0)},a=!0;a;)a=!1,G.each(t,r);return n},trim:function(n,e){return G.trimEnd(G.trimStart(n,e),e)},purgeSentence:function(n){return n=G.trimEnd(m(n).trim(),".: \r\n\t"),n+=G.endsWithAny(n,"!?;")?"":"."},purgeErrorMessage:function(n){var e,t=m("string"==typeof n?n:null!==(e=n.message)&&void 0!==e?e:JSON.stringify(n)).split("threw an error:");return t[t.length-1].trim()},generateNamePermutations:function(){for(var n=arguments.length,e=new Array(n),t=0;t<n;t++)e[t]=arguments[t];var r=[];return(e=G.flattenArray(e).map((function(n){return m(n).trim().toLowerCase()})).filter((function(n){return n.length>0}))).length>0&&(r.push(e.join("")),r.push(e.map(G.capitalize).join(""))),e.length>1&&(r.push([e[0]].concat(e.slice(1).map(G.capitalize)).join("")),r.push(e.join("-")),r.push(e.join("_"))),r},increaseNumericStringByOne:function(n){if("string"!=typeof n)for(var e=(n=""+n).length-1;e>=0;e--){var t=n.charAt(e);if(t<"0"||t>"9")return"1"}if(""===n)return"1";for(var r=n.length-1;r>=0;r--){var a=n.charAt(r);if(a<"0"||a>"9")return"1";if(a<"9"){a++,n=n.substring(0,r)+a+n.substring(r+1);break}n=n.substring(0,r)+"0"+n.substring(r+1)}return"0"===n.charAt(0)&&(n="1"+n),n},uniqueId:(L=null,U={},_=function(n){for(var e=0===n?0:Math.ceil((Math.floor(Math.log2(n))+1)/8),t=new Uint8ClampedArray(e),r=n,a=e-1;a>=0;a--){var o=255&r;t[a]=o,r=Math.floor(r/256)}return t},P=function(){var n;try{if("number"!=typeof(n=(performance.timeOrigin||performance.timing.navigationStart)+performance.now()))throw new Error}catch(e){n=Date.now?Date.now():(new Date).getTime()}n=Math.round(n);var e=_(n),t=null;try{var r;t=null===(r=crypto)||void 0===r?void 0:r.randomUUID()}catch(n){}if(t)t=G.base64ToBytes(G.hexToBase64(t));else{var a=_((Math.random()+" ").substring(2,12).padEnd(10,"0")),o=_((Math.random()+" ").substring(2,12).padEnd(10,"0")),i=_((Math.random()+" ").substring(2,12).padEnd(10,"0")),u=_((Math.random()+" ").substring(2,12).padEnd(10,"0"));(t=new Uint8Array(a.length+o.length+i.length+u.length)).set(a,0),t.set(o,a.length),t.set(i,a.length+o.length),t.set(u,a.length+o.length+i.length)}var c=new Uint8Array(e.length+t.length);return c.set(e,0),c.set(t,e.length),{time:n,id:t=G.bytesToBase64(c).replaceAll("=","").replaceAll("+","-").replaceAll("/","_")}},function(){for(;;){var n=P();if(L!==n.time)return L=n.time,U=e({},n.id,!0),n.id;if(!0!==U[n.id])return U[n.id]=!0,n.id}}),timestamp:function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;if(l(n))n=x(n);else try{if("number"!=typeof(n=(performance.timeOrigin||performance.timing.navigationStart)+performance.now()))throw new Error}catch(e){n=Date.now?Date.now():(new Date).getTime()}var e=function(n){for(var e=0===n?0:Math.ceil((Math.floor(Math.log2(n))+1)/8),t=new Uint8ClampedArray(e),r=n,a=e-1;a>=0;a--){var o=255&r;t[a]=o,r=Math.floor(r/256)}return t}(n=Math.round(n));return G.bytesToBase64(e).replaceAll("=","").replaceAll("+","-").replaceAll("/","_")},getEmptyImageSrc:function(){return"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="},getPercentage:function(n,e){return n=x(n),(e=x(e))<=0?100:Math.max(0,Math.min(100,n/e*100))},getImagePixels:function(n){if(!document)return new Uint8ClampedArray;var e=document.createElement("canvas");document.body.appendChild(e);try{var t=e.getContext("2d"),r=Math.floor(n.width),a=Math.floor(n.height);return r<=0||a<=0?(e.width=1,e.height=1):(e.width=r,e.height=a,t.drawImage(n,0,0,e.width,e.height)),t.getImageData(0,0,e.width,e.height).data}finally{e.parentNode.removeChild(e)}},getColoredImage:function(n,e){if(!document)return G.getEmptyImageSrc();var t=document.createElement("canvas");document.body.appendChild(t);try{var r=t.getContext("2d"),a=Math.floor(n.width),o=Math.floor(n.height);return a<=0||o<=0?(t.width=1,t.height=1):(t.width=a,t.height=o,r.drawImage(n,0,0,t.width,t.height)),r.globalCompositeOperation="source-in",r.fillStyle=e,r.fillRect(0,0,t.width,t.height),t.toDataURL("image/png")}finally{t.parentNode.removeChild(t)}},rgbToHex:function(n){return"#"+n.map((function(n){var e=n.toString(16);return 1===e.length?"0"+e:e})).join("")},hexToRgb:function(e){for(var t=4===(e=e.replace(/[^0-9A-F]/gi,"")).length||8===e.length;e.length<6;)e=e.replace(/(.)/g,"$1$1");var r=e.match(/\w{2}/g).map((function(n){return parseInt(n,16)}));return[r[0],r[1],r[2]].concat(n(t?[r[3]]:[]))},rgbToHsl:function(e){var t,r,a=e[0]/255,o=e[1]/255,i=e[2]/255,u=Math.max(a,o,i),c=Math.min(a,o,i),l=(u+c)/2;if(u===c)t=r=0;else{var s=u-c;switch(r=l>.5?s/(2-u-c):s/(u+c),u){case a:t=(o-i)/s+(o<i?6:0);break;case o:t=(i-a)/s+2;break;case i:t=(a-o)/s+4}t/=6}return[t,r,l].concat(n(e.length>=4?[e[3]/255]:[]))},hslToRgb:(I=function(n,e,t){return t<0&&(t+=1),t>1&&(t-=1),t<1/6?n+6*(e-n)*t:t<.5?e:t<2/3?n+(e-n)*(2/3-t)*6:n},function(e){var t,r,a,o=e[0],i=e[1],u=e[2];if(0===i)t=r=a=u;else{var c=u<.5?u*(1+i):u+i-u*i,l=2*u-c;t=I(l,c,o+1/3),r=I(l,c,o),a=I(l,c,o-1/3)}return[255*t,255*r,255*a].concat(n(e.length>=4?[255*e[3]]:[])).map((function(n){return Math.max(0,Math.min(255,Math.round(n)))}))}),rgbToLab:function(e){var t=e[0]/255,r=e[1]/255,a=e[2]/255,o=(.4124*(t=t>.04045?Math.pow((t+.055)/1.055,2.4):t/12.92)+.3576*(r=r>.04045?Math.pow((r+.055)/1.055,2.4):r/12.92)+.1805*(a=a>.04045?Math.pow((a+.055)/1.055,2.4):a/12.92))/.95047,i=.2126*t+.7152*r+.0722*a,u=(.0193*t+.1192*r+.9505*a)/1.08883;return o=o>.008856?Math.pow(o,1/3):7.787*o+16/116,[116*(i=i>.008856?Math.pow(i,1/3):7.787*i+16/116)-16,500*(o-i),200*(i-(u=u>.008856?Math.pow(u,1/3):7.787*u+16/116))].concat(n(e.length>=4?[e[3]/255]:[]))},getDifferenceBetweenRgb:function(n,e){var t=G.rgbToLab(n),r=G.rgbToLab(e);return G.getDifferenceBetweenLab(t,r)},getDifferenceBetweenLab:function(n,e){var t=n[0]-e[0],r=n[1]-e[1],a=n[2]-e[2],o=Math.sqrt(n[1]*n[1]+n[2]*n[2]),i=o-Math.sqrt(e[1]*e[1]+e[2]*e[2]),u=r*r+a*a-i*i,c=t/1,l=i/(1+.045*o),s=(u=u<0?0:Math.sqrt(u))/(1+.015*o),f=c*c+l*l+s*s;return f<0?0:Math.sqrt(f)},getRgbOfGradient:function(n,e){e=Math.max(0,Math.min(100,x(e)));var t=null;if(G.each(n,(function(n,r){if(r=b(r),null===t)t=[r,Math.abs(e-r)];else{var a=Math.abs(e-r);a<t[1]&&(t=[r,a])}})),null===t)return null;t=t[0];var r=99999,a=-99999;if(G.each(n,(function(n,e){(e=b(e))<t&&e>a&&(a=e),e>t&&e<r&&(r=e)})),99999===r&&(r=null),-99999===a&&(a=null),null===r&&null===a||r===a)return n[t];if(null!==r&&null!==a?Math.abs(r-e)>Math.abs(e-a)?r=t:a=t:null===a?a=t:r=t,a>r){var o=r;r=a,a=o}var i=r-a,u=e-a;return G.getRgbBetween(n[a],n[r],u/i*100)},getRgbBetween:function(n,e,t){t=x(t);for(var r=Math.max(0,Math.min(1,t/100)),a=1-r,o=Math.min(n.length,e.length),i=[],u=0;u<o;u++)i.push(Math.max(0,Math.min(255,Math.round(n[u]*a+e[u]*r))));return i},btoa:function(n){function e(e){return n.apply(this,arguments)}return e.toString=function(){return n.toString()},e}((function(n){return"function"==typeof btoa?btoa(n):Buffer.from(n).toString("base64")})),atob:function(n){function e(e){return n.apply(this,arguments)}return e.toString=function(){return n.toString()},e}((function(n){return"function"==typeof atob?atob(n):Buffer.from(n,"base64").toString()})),utf8ToBase64:function(n){return G.btoa(encodeURIComponent(n).replace(/%([0-9A-F]{2})/g,(function(n,e){return String.fromCharCode(parseInt(e,16))})))},base64ToUtf8:function(n){return decodeURIComponent(G.atob(n.trim()).split("").map((function(n){return"%"+("00"+n.charCodeAt(0).toString(16)).slice(-2)})).join(""))},base64ToHex:function(n){return G.atob(n.trim()).split("").map((function(n){return("0"+n.charCodeAt(0).toString(16)).slice(-2)})).join("")},hexToBase64:function(n){return G.btoa(n.replace(/[^0-9A-F]/gi,"").match(/\w{2}/g).map((function(n){return String.fromCharCode(parseInt(n,16))})).join(""))},base64ToBytes:function(n){for(var e=G.atob(n.trim()),t=e.length,r=new Uint8Array(t),a=0;a<t;a++)r[a]=e.charCodeAt(a);return r},bytesToBase64:function(n){for(var e=new Uint8Array(n),t=e.byteLength,r="",a=0;a<t;a++)r+=String.fromCharCode(e[a]);return G.btoa(r)},downloadFile:function(n,e,t){var r=document.createElement("a");r.setAttribute("download","string"==typeof e?e:"file"),r.href="data:"+t+";base64,"+n,r.setAttribute("target","_blank"),r.click()},localStorageGet:function(n){if("undefined"!=typeof window){var e=window.localStorage.getItem("LeUtils_"+n);if("string"==typeof e)try{if(void 0!==(e=JSON.parse(e))["-"])return e["-"]}catch(n){}}},localStorageSet:function(n,e){"undefined"!=typeof window&&(void 0!==e?window.localStorage.setItem("LeUtils_"+n,JSON.stringify({"-":e})):window.localStorage.removeItem("LeUtils_"+n))},localStorageRemove:function(n){"undefined"!=typeof window&&window.localStorage.removeItem("LeUtils_"+n)},isCurrentHostPrivate:(O=null,E=!1,function(){if("undefined"==typeof window)return!1;var n=window.location.hostname;return O===n?E:(O=n,E=G.isGivenHostPrivate(O))}),isGivenHostPrivate:function(n){if("localhost"===(n=m(n).trim().toLowerCase())||"127.0.0.1"===n)return!0;if(!/^(\d{1,3}\.){3}\d{1,3}$/.test(n))return!1;var e=n.split(".");return"10"===e[0]||"172"===e[0]&&parseInt(e[1],10)>=16&&parseInt(e[1],10)<=31||"192"===e[0]&&"168"===e[1]},createTreeSet:function(n,e){e=e||G.compare,(n=n||[]).sort(e);var t=function(t){for(var r=0,a=n.length-1;r<=a;){var o=Math.floor((r+a)/2),i=n[o],u=e(i,t);if(u<0)r=o+1;else{if(!(u>0))return{found:!0,index:o,value:i};a=o-1}}return{found:!1,index:r,value:void 0}},r={getElements:function(){return n},getComparator:function(){return e},size:function(){return n.length},isEmpty:function(){return n.length<=0},contains:function(n){return t(n).found},first:function(){return n.length>0?n[0]:void 0},last:function(){return n.length>0?n[n.length-1]:void 0},pollFirst:function(){return n.length>0?n.splice(0,1)[0]:void 0},pollLast:function(){return n.length>0?n.splice(n.length-1,1)[0]:void 0},add:function(e){var r=t(e);r.found||n.splice(r.index,0,e)},addAll:function(n){G.each(n,r.add)},getEqualValue:function(n){var e=t(n);if(e.found)return e.value},getEqualValueOrAdd:function(e){var r=t(e);return r.found?r.value:(n.splice(r.index,0,e),e)}};return r},createTransactionalValue:function(n){return void 0===n&&(n=null),{value:n,changes:[]}},isTransactionalValueValid:function(n){return"object"===r(n)&&"value"in n&&"changes"in n&&Array.isArray(n.changes)},transactionalValueToString:function(n){if(!G.isTransactionalValueValid(n))return n+"";if(n.changes.length<=0)return""+n.value;for(var e=""+n.value,t=0;t<n.changes.length;t++)e+=" -> "+n.changes[t].value;return n.changes[n.changes.length-1].value+" ("+e+")"},transactionSetAndCommit:function(n,e){z(n),void 0===e&&(e=null),n.value=e,n.changes=[]},transactionSetWithoutCommitting:function(n,e){z(n),void 0===e&&(e=null);var t=G.uniqueId();return n.changes.push({id:t,value:e}),t},transactionCommitChange:function(n,e){z(n);var t=W(n,e);return null!==t&&(n.value=t.value,n.changes.splice(0,t.index+1),!0)},transactionCancelChange:function(n,e){z(n);var t=W(n,e);return null!==t&&(n.changes.splice(t.index,1),!0)},transactionIsChangeRelevant:function(n,e){return z(n),null!==W(n,e)},transactionGetCommittedValue:function(n){return z(n),n.value},transactionGetValue:function(n){return z(n),n.changes.length<=0?n.value:n.changes[n.changes.length-1].value},createWorkerThread:function(n){var t=new Worker("/workers/"+n+".worker.js"),r={},a=function(n){delete r[n]};return t.onerror=function(e){console.error("Worker "+n+":",e)},t.onmessage=function(n){var e=n.data;if(null!=e&&e.id){var t=r[e.id];t&&(a(e.id),t(e))}},{worker:t,sendMessage:function(n,o){return new Promise((function(i,u){var c,l=G.uniqueId();!function(n,e){r[n]=e}(l,i),setTimeout((function(){a(l),u("timeout")}),null!==(c=null==o?void 0:o.timeout)&&void 0!==c?c:1e4),t.postMessage(function(n){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?M(Object(r),!0).forEach((function(t){e(n,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(r)):M(Object(r)).forEach((function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(r,e))}))}return n}({id:l},n))}))}}},sendWorkerMessage:(j={},function(n,e,t){return j[n]||(j[n]=G.createWorkerThread(n)),j[n].sendMessage(e,t)}),clone:function(n){return u(n,!0)},purgeEmail:function(n){return(n=m(n).trim().toLowerCase().replace(/\s/g,"")).includes("@")&&n.includes(".")?n:""},isFocusClear:(S=["text","search","email","number","password","tel","time","url","week","month","date","datetime-local"],function(){var n,e;return!("input"===(null===(n=document)||void 0===n||null===(n=n.activeElement)||void 0===n||null===(n=n.tagName)||void 0===n?void 0:n.toLowerCase())&&S.includes(null===(e=document)||void 0===e||null===(e=e.activeElement)||void 0===e||null===(e=e.type)||void 0===e?void 0:e.toLowerCase()))}),getUserLocale:(C=null,function(){return null===C&&(C=function(){if("undefined"==typeof window)return"en-US";var n=window.navigator.languages;if(!s(n)||n.length<=0)return"en-US";if((n=n.filter((function(n){return"string"==typeof n&&n.includes("-")&&"en-us"!==n.toLowerCase()}))).length<=0)return"en-US";var e=n.filter((function(n){return!n.toLowerCase().startsWith("en-")}));return e.length<=0?n[0]:e[0]}()),C}),getUserLocaleDateFormat:(T=null,function(){return null===T&&(T=function(){var n="/";if("undefined"!=typeof window&&"undefined"!=typeof Intl&&void 0!==Intl.DateTimeFormat){var e=new Intl.DateTimeFormat(G.getUserLocale()).format();e.includes("-")?n="-":(e.includes(". ")||e.includes("."))&&(n=".")}return"YYYY"+n+"MM"+n+"DD"}()),T})};export{f as ARRAY,w as FLOAT,y as FLOAT_ANY,x as FLOAT_LAX,k as FLOAT_LAX_ANY,v as INT,g as INT_ANY,b as INT_LAX,A as INT_LAX_ANY,l as ISSET,s as IS_ARRAY,h as IS_OBJECT,G as LeUtils,p as OBJECT,m as STRING,d as STRING_ANY};
|
|
1
|
+
import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';
|
|
2
|
+
import _defineProperty from '@babel/runtime/helpers/defineProperty';
|
|
3
|
+
import _asyncToGenerator from '@babel/runtime/helpers/asyncToGenerator';
|
|
4
|
+
import _typeof from '@babel/runtime/helpers/typeof';
|
|
5
|
+
import '@babel/runtime/helpers/awaitAsyncGenerator';
|
|
6
|
+
import _wrapAsyncGenerator from '@babel/runtime/helpers/wrapAsyncGenerator';
|
|
7
|
+
import _regeneratorRuntime from '@babel/runtime/regenerator';
|
|
8
|
+
import FastDeepEqual from 'fast-deep-equal';
|
|
9
|
+
import CloneDeep from 'clone-deep';
|
|
10
|
+
|
|
11
|
+
var REGEX_ALL_NON_FLOAT_CHARACTERS = /[^0-9.\-]/g;
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Returns true if the value is set (not undefined and not null).
|
|
15
|
+
*
|
|
16
|
+
* @param {*} value
|
|
17
|
+
* @returns {boolean}
|
|
18
|
+
*/
|
|
19
|
+
var ISSET = function ISSET(value) {
|
|
20
|
+
return typeof value !== 'undefined' && value !== null;
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Returns true if the value is an array.
|
|
25
|
+
*
|
|
26
|
+
* @param {*} value
|
|
27
|
+
* @returns {boolean}
|
|
28
|
+
*/
|
|
29
|
+
var IS_ARRAY = function IS_ARRAY(value) {
|
|
30
|
+
return Array.isArray(value);
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Ensures the given value is an array (returns the value wrapped in an array if it's not).
|
|
35
|
+
*
|
|
36
|
+
* @param {*} value
|
|
37
|
+
* @returns {*[]}
|
|
38
|
+
*/
|
|
39
|
+
var ARRAY = function ARRAY(value) {
|
|
40
|
+
return IS_ARRAY(value) ? value : typeof value !== 'undefined' ? [value] : [];
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Returns true if the value is an object.
|
|
45
|
+
*
|
|
46
|
+
* @param {*} value
|
|
47
|
+
* @returns {boolean}
|
|
48
|
+
*/
|
|
49
|
+
var IS_OBJECT = function IS_OBJECT(value) {
|
|
50
|
+
return _typeof(value) === 'object' && value !== null && !Array.isArray(value);
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Ensures the given value is an object (returns an empty object if it's not).
|
|
55
|
+
*
|
|
56
|
+
* @param value
|
|
57
|
+
* @returns {object}
|
|
58
|
+
*/
|
|
59
|
+
var OBJECT = function OBJECT(value) {
|
|
60
|
+
return IS_OBJECT(value) ? value : {};
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Ensures the given value is a string (casts it to a string if it's not, null and undefined will return an empty string).
|
|
65
|
+
*
|
|
66
|
+
* @param {*} value
|
|
67
|
+
* @returns {string}
|
|
68
|
+
*/
|
|
69
|
+
var STRING = function STRING(value) {
|
|
70
|
+
return ISSET(value) ? '' + value : '';
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Returns the first non-null non-undefined value as a string.
|
|
75
|
+
*
|
|
76
|
+
* @param {*} values
|
|
77
|
+
* @returns {string}
|
|
78
|
+
*/
|
|
79
|
+
var STRING_ANY = function STRING_ANY() {
|
|
80
|
+
for (var _len = arguments.length, values = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
81
|
+
values[_key] = arguments[_key];
|
|
82
|
+
}
|
|
83
|
+
for (var _i = 0, _values = values; _i < _values.length; _i++) {
|
|
84
|
+
var value = _values[_i];
|
|
85
|
+
if (ISSET(value)) {
|
|
86
|
+
return '' + value;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return '';
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Ensures the given value is an integer (attempts to cast it to an integer if it's not, null and undefined will return 0).
|
|
94
|
+
*
|
|
95
|
+
* @param {*} value
|
|
96
|
+
* @returns {number}
|
|
97
|
+
*/
|
|
98
|
+
var INT = function INT(value) {
|
|
99
|
+
return Math.round(FLOAT(value));
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Returns the first non-null non-undefined int-castable value as an integer.
|
|
104
|
+
*
|
|
105
|
+
* @param {*} values
|
|
106
|
+
* @returns {number}
|
|
107
|
+
*/
|
|
108
|
+
var INT_ANY = function INT_ANY() {
|
|
109
|
+
return Math.round(FLOAT_ANY.apply(void 0, arguments));
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Ensures the given value is a float (attempts to cast it to a float if it's not, null and undefined will return 0).
|
|
114
|
+
*
|
|
115
|
+
* @param {*} value
|
|
116
|
+
* @returns {number}
|
|
117
|
+
*/
|
|
118
|
+
var FLOAT = function FLOAT(value) {
|
|
119
|
+
var v = +value;
|
|
120
|
+
if (!isNaN(v)) {
|
|
121
|
+
return v;
|
|
122
|
+
}
|
|
123
|
+
return 0;
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Returns the first non-null non-undefined float-castable value as a float.
|
|
128
|
+
*
|
|
129
|
+
* @param {*} values
|
|
130
|
+
* @returns {number}
|
|
131
|
+
*/
|
|
132
|
+
var FLOAT_ANY = function FLOAT_ANY() {
|
|
133
|
+
for (var _len2 = arguments.length, values = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
|
134
|
+
values[_key2] = arguments[_key2];
|
|
135
|
+
}
|
|
136
|
+
for (var _i2 = 0, _values2 = values; _i2 < _values2.length; _i2++) {
|
|
137
|
+
var value = _values2[_i2];
|
|
138
|
+
if (value !== null) {
|
|
139
|
+
var v = +value;
|
|
140
|
+
if (!isNaN(v)) {
|
|
141
|
+
return v;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
return 0;
|
|
146
|
+
};
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* Ensures the given value is an integer (attempts to cast it to an integer if it's not, null and undefined will return 0).
|
|
150
|
+
* This version is less strict than INT, as it relies on parseFloat instead of on +value, meaning that it will accept strings that contain a number followed by other characters, which +value doesn't.
|
|
151
|
+
*
|
|
152
|
+
* @param {*} value
|
|
153
|
+
* @returns {number}
|
|
154
|
+
*/
|
|
155
|
+
var INT_LAX = function INT_LAX(value) {
|
|
156
|
+
return Math.round(FLOAT_LAX(value));
|
|
157
|
+
};
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* Returns the first non-null non-undefined int-castable value as an integer.
|
|
161
|
+
* This version is less strict than INT_ANY, as it relies on parseFloat instead of on +value, meaning that it will accept strings that contain a number followed by other characters, which +value doesn't.
|
|
162
|
+
*
|
|
163
|
+
* @param {*} values
|
|
164
|
+
* @returns {number}
|
|
165
|
+
*/
|
|
166
|
+
var INT_LAX_ANY = function INT_LAX_ANY() {
|
|
167
|
+
return Math.round(FLOAT_LAX_ANY.apply(void 0, arguments));
|
|
168
|
+
};
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* Ensures the given value is a float (attempts to cast it to a float if it's not, null and undefined will return 0).
|
|
172
|
+
* This version is less strict than FLOAT, as it relies on parseFloat instead of on +value, meaning that it will accept strings that contain a number followed by other characters, which +value doesn't.
|
|
173
|
+
*
|
|
174
|
+
* @param {*} value
|
|
175
|
+
* @returns {number}
|
|
176
|
+
*/
|
|
177
|
+
var FLOAT_LAX = function FLOAT_LAX(value) {
|
|
178
|
+
var v = typeof value === 'number' ? value : parseFloat((value + '').replace(REGEX_ALL_NON_FLOAT_CHARACTERS, ''));
|
|
179
|
+
if (!isNaN(v)) {
|
|
180
|
+
return v;
|
|
181
|
+
}
|
|
182
|
+
return 0;
|
|
183
|
+
};
|
|
184
|
+
|
|
185
|
+
/**
|
|
186
|
+
* Returns the first non-null non-undefined float-castable value as a float.
|
|
187
|
+
* This version is less strict than FLOAT_ANY, as it relies on parseFloat instead of on +value, meaning that it will accept strings that contain a number followed by other characters, which +value doesn't.
|
|
188
|
+
*
|
|
189
|
+
* @param {*} values
|
|
190
|
+
* @returns {number}
|
|
191
|
+
*/
|
|
192
|
+
var FLOAT_LAX_ANY = function FLOAT_LAX_ANY() {
|
|
193
|
+
for (var _len3 = arguments.length, values = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
|
|
194
|
+
values[_key3] = arguments[_key3];
|
|
195
|
+
}
|
|
196
|
+
for (var _i3 = 0, _values3 = values; _i3 < _values3.length; _i3++) {
|
|
197
|
+
var value = _values3[_i3];
|
|
198
|
+
if (value !== null) {
|
|
199
|
+
var v = typeof value === 'number' ? value : parseFloat((value + '').replace(REGEX_ALL_NON_FLOAT_CHARACTERS, ''));
|
|
200
|
+
if (!isNaN(v)) {
|
|
201
|
+
return v;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
return 0;
|
|
206
|
+
};
|
|
207
|
+
|
|
208
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
209
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
210
|
+
|
|
211
|
+
/**
|
|
212
|
+
* @param {LeUtils~TransactionalValue} transactionalValue
|
|
213
|
+
*/
|
|
214
|
+
var checkTransactionalValue = function checkTransactionalValue(transactionalValue) {
|
|
215
|
+
if (!LeUtils.isTransactionalValueValid(transactionalValue)) {
|
|
216
|
+
console.error('The given value is not a valid TransactionalValue:');
|
|
217
|
+
console.error(transactionalValue);
|
|
218
|
+
throw new Error('The given value is not a valid TransactionalValue');
|
|
219
|
+
}
|
|
220
|
+
};
|
|
221
|
+
|
|
222
|
+
/**
|
|
223
|
+
* @param {LeUtils~TransactionalValue} transactionalValue
|
|
224
|
+
* @param {string} changeId
|
|
225
|
+
* @returns {{index:number, value:*}|null}
|
|
226
|
+
*/
|
|
227
|
+
var findTransactionalValueChange = function findTransactionalValueChange(transactionalValue, changeId) {
|
|
228
|
+
for (var i = 0; i < transactionalValue.changes.length; i++) {
|
|
229
|
+
var change = transactionalValue.changes[i];
|
|
230
|
+
if (change.id === changeId) {
|
|
231
|
+
return {
|
|
232
|
+
index: i,
|
|
233
|
+
value: change.value
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
return null;
|
|
238
|
+
};
|
|
239
|
+
var LeUtils = {
|
|
240
|
+
/**
|
|
241
|
+
* A deep equals implementation (npm package "fast-deep-equal").
|
|
242
|
+
*
|
|
243
|
+
* @param {*} value The value to compare.
|
|
244
|
+
* @param {*} other The other value to compare.
|
|
245
|
+
* @returns {boolean} Returns true if the values are equivalent.
|
|
246
|
+
*/
|
|
247
|
+
equals: FastDeepEqual,
|
|
248
|
+
/**
|
|
249
|
+
* Parses the given version string, and returns an object with the major, minor, and patch numbers, as well as some comparison functions.
|
|
250
|
+
*
|
|
251
|
+
* Expects a version string such as:
|
|
252
|
+
* - "1"
|
|
253
|
+
* - "1.2"
|
|
254
|
+
* - "1.2.3"
|
|
255
|
+
* - "1.2.3 anything"
|
|
256
|
+
* - "1.2.3-anything"
|
|
257
|
+
*
|
|
258
|
+
* @param {string|*} versionString
|
|
259
|
+
* @returns {{major: (number), minor: (number), patch: (number), toString: (function(): string), equals: (function(string|*): boolean), smallerThan: (function(string|*): boolean), smallerThanOrEquals: (function(string|*): boolean), largerThan: (function(string|*): boolean), largerThanOrEquals: (function(string|*): boolean)}}
|
|
260
|
+
*/
|
|
261
|
+
parseVersionString: function parseVersionString(versionString) {
|
|
262
|
+
var _versionString, _versionString2, _versionString3;
|
|
263
|
+
if (IS_OBJECT(versionString) && ISSET((_versionString = versionString) === null || _versionString === void 0 ? void 0 : _versionString.major) && ISSET((_versionString2 = versionString) === null || _versionString2 === void 0 ? void 0 : _versionString2.minor) && ISSET((_versionString3 = versionString) === null || _versionString3 === void 0 ? void 0 : _versionString3.patch)) {
|
|
264
|
+
return versionString;
|
|
265
|
+
}
|
|
266
|
+
versionString = STRING(versionString).trim();
|
|
267
|
+
var partsVersion = versionString.split(' ')[0].split('-')[0].split('.');
|
|
268
|
+
var major = INT_LAX(partsVersion[0]);
|
|
269
|
+
var minor = INT_LAX(partsVersion[1]);
|
|
270
|
+
var patch = INT_LAX(partsVersion[2]);
|
|
271
|
+
var THIS = {
|
|
272
|
+
major: major,
|
|
273
|
+
minor: minor,
|
|
274
|
+
patch: patch,
|
|
275
|
+
toString: function toString() {
|
|
276
|
+
return major + '.' + minor + '.' + patch;
|
|
277
|
+
},
|
|
278
|
+
equals: function equals(otherVersion) {
|
|
279
|
+
otherVersion = LeUtils.parseVersionString(otherVersion);
|
|
280
|
+
return major === otherVersion.major && minor === otherVersion.minor && patch === otherVersion.patch;
|
|
281
|
+
},
|
|
282
|
+
largerThan: function largerThan(otherVersion) {
|
|
283
|
+
otherVersion = LeUtils.parseVersionString(otherVersion);
|
|
284
|
+
if (major > otherVersion.major) {
|
|
285
|
+
return true;
|
|
286
|
+
}
|
|
287
|
+
if (major < otherVersion.major) {
|
|
288
|
+
return false;
|
|
289
|
+
}
|
|
290
|
+
if (minor > otherVersion.minor) {
|
|
291
|
+
return true;
|
|
292
|
+
}
|
|
293
|
+
if (minor < otherVersion.minor) {
|
|
294
|
+
return false;
|
|
295
|
+
}
|
|
296
|
+
return patch > otherVersion.patch;
|
|
297
|
+
},
|
|
298
|
+
largerThanOrEquals: function largerThanOrEquals(otherVersion) {
|
|
299
|
+
otherVersion = LeUtils.parseVersionString(otherVersion);
|
|
300
|
+
if (major > otherVersion.major) {
|
|
301
|
+
return true;
|
|
302
|
+
}
|
|
303
|
+
if (major < otherVersion.major) {
|
|
304
|
+
return false;
|
|
305
|
+
}
|
|
306
|
+
if (minor > otherVersion.minor) {
|
|
307
|
+
return true;
|
|
308
|
+
}
|
|
309
|
+
if (minor < otherVersion.minor) {
|
|
310
|
+
return false;
|
|
311
|
+
}
|
|
312
|
+
return patch >= otherVersion.patch;
|
|
313
|
+
},
|
|
314
|
+
smallerThan: function smallerThan(otherVersion) {
|
|
315
|
+
return !THIS.largerThanOrEquals(otherVersion);
|
|
316
|
+
},
|
|
317
|
+
smallerThanOrEquals: function smallerThanOrEquals(otherVersion) {
|
|
318
|
+
return !THIS.largerThan(otherVersion);
|
|
319
|
+
}
|
|
320
|
+
};
|
|
321
|
+
return THIS;
|
|
322
|
+
},
|
|
323
|
+
/**
|
|
324
|
+
* Returns true if the array or object contains the given value.
|
|
325
|
+
*
|
|
326
|
+
* Values are compared by casting both of them to a string.
|
|
327
|
+
*
|
|
328
|
+
* @param {array|object|Function} array
|
|
329
|
+
* @param {*} value
|
|
330
|
+
* @returns {boolean}
|
|
331
|
+
*/
|
|
332
|
+
contains: function contains(array, value) {
|
|
333
|
+
if (!array) {
|
|
334
|
+
return false;
|
|
335
|
+
}
|
|
336
|
+
var result = false;
|
|
337
|
+
value = STRING(value);
|
|
338
|
+
LeUtils.each(array, function (val) {
|
|
339
|
+
if (STRING(val) === value) {
|
|
340
|
+
result = true;
|
|
341
|
+
return false;
|
|
342
|
+
}
|
|
343
|
+
});
|
|
344
|
+
return result;
|
|
345
|
+
},
|
|
346
|
+
/**
|
|
347
|
+
* Returns true if the array or object contains the given value.
|
|
348
|
+
*
|
|
349
|
+
* Values are compared by casting both of them to a string, and then lowercasing them.
|
|
350
|
+
*
|
|
351
|
+
* @param {array|object|Function} array
|
|
352
|
+
* @param {*} value
|
|
353
|
+
* @returns {boolean}
|
|
354
|
+
*/
|
|
355
|
+
containsCaseInsensitive: function containsCaseInsensitive(array, value) {
|
|
356
|
+
if (!array) {
|
|
357
|
+
return false;
|
|
358
|
+
}
|
|
359
|
+
var result = false;
|
|
360
|
+
value = STRING(value).toLowerCase();
|
|
361
|
+
LeUtils.each(array, function (val) {
|
|
362
|
+
if (STRING(val).toLowerCase() === value) {
|
|
363
|
+
result = true;
|
|
364
|
+
return false;
|
|
365
|
+
}
|
|
366
|
+
});
|
|
367
|
+
return result;
|
|
368
|
+
},
|
|
369
|
+
/**
|
|
370
|
+
* Returns true if the array or object contains all the given values.
|
|
371
|
+
*
|
|
372
|
+
* Values are compared by casting both of them to a string.
|
|
373
|
+
*
|
|
374
|
+
* @param {array|object|Function} array
|
|
375
|
+
* @param {array|object|Function} values
|
|
376
|
+
* @returns {boolean}
|
|
377
|
+
*/
|
|
378
|
+
containsAll: function containsAll(array, values) {
|
|
379
|
+
if (!array) {
|
|
380
|
+
return false;
|
|
381
|
+
}
|
|
382
|
+
var result = true;
|
|
383
|
+
LeUtils.each(values, function (value) {
|
|
384
|
+
if (!LeUtils.contains(array, value)) {
|
|
385
|
+
result = false;
|
|
386
|
+
return false;
|
|
387
|
+
}
|
|
388
|
+
});
|
|
389
|
+
return result;
|
|
390
|
+
},
|
|
391
|
+
/**
|
|
392
|
+
* Returns true if the array or object contains all the given values.
|
|
393
|
+
*
|
|
394
|
+
* Values are compared by casting both of them to a string, and then lowercasing them.
|
|
395
|
+
*
|
|
396
|
+
* @param {array|object|Function} array
|
|
397
|
+
* @param {array|object|Function} values
|
|
398
|
+
* @returns {boolean}
|
|
399
|
+
*/
|
|
400
|
+
containsAllCaseInsensitive: function containsAllCaseInsensitive(array, values) {
|
|
401
|
+
if (!array) {
|
|
402
|
+
return false;
|
|
403
|
+
}
|
|
404
|
+
var result = true;
|
|
405
|
+
LeUtils.each(values, function (value) {
|
|
406
|
+
if (!LeUtils.containsCaseInsensitive(array, value)) {
|
|
407
|
+
result = false;
|
|
408
|
+
return false;
|
|
409
|
+
}
|
|
410
|
+
});
|
|
411
|
+
return result;
|
|
412
|
+
},
|
|
413
|
+
/**
|
|
414
|
+
* Returns true if the array or object contains any of the given values.
|
|
415
|
+
*
|
|
416
|
+
* Values are compared by casting both of them to a string.
|
|
417
|
+
*
|
|
418
|
+
* @param {array|object|Function} array
|
|
419
|
+
* @param {array|object|Function} values
|
|
420
|
+
* @returns {boolean}
|
|
421
|
+
*/
|
|
422
|
+
containsAny: function containsAny(array, values) {
|
|
423
|
+
if (!array) {
|
|
424
|
+
return false;
|
|
425
|
+
}
|
|
426
|
+
var result = false;
|
|
427
|
+
LeUtils.each(values, function (value) {
|
|
428
|
+
if (LeUtils.contains(array, value)) {
|
|
429
|
+
result = true;
|
|
430
|
+
return false;
|
|
431
|
+
}
|
|
432
|
+
});
|
|
433
|
+
return result;
|
|
434
|
+
},
|
|
435
|
+
/**
|
|
436
|
+
* Returns true if the array or object contains any of the given values.
|
|
437
|
+
*
|
|
438
|
+
* Values are compared by casting both of them to a string, and then lowercasing them.
|
|
439
|
+
*
|
|
440
|
+
* @param {array|object|Function} array
|
|
441
|
+
* @param {array|object|Function} values
|
|
442
|
+
* @returns {boolean}
|
|
443
|
+
*/
|
|
444
|
+
containsAnyCaseInsensitive: function containsAnyCaseInsensitive(array, values) {
|
|
445
|
+
if (!array) {
|
|
446
|
+
return false;
|
|
447
|
+
}
|
|
448
|
+
var result = false;
|
|
449
|
+
LeUtils.each(values, function (value) {
|
|
450
|
+
if (LeUtils.containsCaseInsensitive(array, value)) {
|
|
451
|
+
result = true;
|
|
452
|
+
return false;
|
|
453
|
+
}
|
|
454
|
+
});
|
|
455
|
+
return result;
|
|
456
|
+
},
|
|
457
|
+
/**
|
|
458
|
+
* Returns true if the array or object contains none of the given values.
|
|
459
|
+
*
|
|
460
|
+
* Values are compared by casting both of them to a string.
|
|
461
|
+
*
|
|
462
|
+
* @param {array|object|Function} array
|
|
463
|
+
* @param {array|object|Function} values
|
|
464
|
+
* @returns {boolean}
|
|
465
|
+
*/
|
|
466
|
+
containsNone: function containsNone(array, values) {
|
|
467
|
+
if (!array) {
|
|
468
|
+
return true;
|
|
469
|
+
}
|
|
470
|
+
var result = true;
|
|
471
|
+
LeUtils.each(values, function (value) {
|
|
472
|
+
if (LeUtils.contains(array, value)) {
|
|
473
|
+
result = false;
|
|
474
|
+
return false;
|
|
475
|
+
}
|
|
476
|
+
});
|
|
477
|
+
return result;
|
|
478
|
+
},
|
|
479
|
+
/**
|
|
480
|
+
* Returns true if the array or object contains none of the given values.
|
|
481
|
+
*
|
|
482
|
+
* Values are compared by casting both of them to a string, and then lowercasing them.
|
|
483
|
+
*
|
|
484
|
+
* @param {array|object|Function} array
|
|
485
|
+
* @param {array|object|Function} values
|
|
486
|
+
* @returns {boolean}
|
|
487
|
+
*/
|
|
488
|
+
containsNoneCaseInsensitive: function containsNoneCaseInsensitive(array, values) {
|
|
489
|
+
if (!array) {
|
|
490
|
+
return true;
|
|
491
|
+
}
|
|
492
|
+
var result = true;
|
|
493
|
+
LeUtils.each(values, function (value) {
|
|
494
|
+
if (LeUtils.containsCaseInsensitive(array, value)) {
|
|
495
|
+
result = false;
|
|
496
|
+
return false;
|
|
497
|
+
}
|
|
498
|
+
});
|
|
499
|
+
return result;
|
|
500
|
+
},
|
|
501
|
+
/**
|
|
502
|
+
* @callback LeUtils~__eachCallback
|
|
503
|
+
* @param {*} value
|
|
504
|
+
* @param {*} index
|
|
505
|
+
*/
|
|
506
|
+
/**
|
|
507
|
+
* Loops through each element in the given array or object, and calls the callback for each element.
|
|
508
|
+
*
|
|
509
|
+
* @param {*[]|object|Function} elements
|
|
510
|
+
* @param {LeUtils~__eachCallback} callback
|
|
511
|
+
* @param {boolean} [optionalSkipHasOwnPropertyCheck]
|
|
512
|
+
* @returns {*[]|object|Function}
|
|
513
|
+
*/
|
|
514
|
+
each: function each(elements, callback) {
|
|
515
|
+
var optionalSkipHasOwnPropertyCheck = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
516
|
+
if (elements !== null && typeof elements !== 'undefined') {
|
|
517
|
+
if (Array.isArray(elements)) {
|
|
518
|
+
for (var index = 0; index < elements.length; index++) {
|
|
519
|
+
if (callback.call(elements[index], elements[index], index) === false) {
|
|
520
|
+
break;
|
|
521
|
+
}
|
|
522
|
+
}
|
|
523
|
+
} else if (_typeof(elements) === 'object' || typeof elements === 'function') {
|
|
524
|
+
for (var _index in elements) {
|
|
525
|
+
if (optionalSkipHasOwnPropertyCheck === true || Object.prototype.hasOwnProperty.call(elements, _index)) {
|
|
526
|
+
if (callback.call(elements[_index], elements[_index], _index) === false) {
|
|
527
|
+
break;
|
|
528
|
+
}
|
|
529
|
+
}
|
|
530
|
+
}
|
|
531
|
+
} else {
|
|
532
|
+
console.warn('Executed LeUtils.each() on an invalid type: [' + _typeof(elements) + ']', elements);
|
|
533
|
+
}
|
|
534
|
+
}
|
|
535
|
+
return elements;
|
|
536
|
+
},
|
|
537
|
+
/**
|
|
538
|
+
* Like LeUtils.each(), except that it expects an async callback.
|
|
539
|
+
*
|
|
540
|
+
* @param {*[]|object|function} elements
|
|
541
|
+
* @param {LeUtils~__eachCallback} asyncCallback
|
|
542
|
+
* @param {number} [optionalParallelCount]
|
|
543
|
+
* @param {boolean} [optionalSkipHasOwnPropertyCheck]
|
|
544
|
+
* @returns {*[]|object|function}
|
|
545
|
+
*/
|
|
546
|
+
eachAsync: function () {
|
|
547
|
+
var eachAsyncParallel = /*#__PURE__*/function () {
|
|
548
|
+
var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee3(elements, asyncCallback, optionalParallelCount, optionalSkipHasOwnPropertyCheck) {
|
|
549
|
+
var promises, doBreak;
|
|
550
|
+
return _regeneratorRuntime.wrap(function _callee3$(_context4) {
|
|
551
|
+
while (1) switch (_context4.prev = _context4.next) {
|
|
552
|
+
case 0:
|
|
553
|
+
promises = [];
|
|
554
|
+
doBreak = false;
|
|
555
|
+
_context4.next = 4;
|
|
556
|
+
return LeUtils.eachAsync(elements, /*#__PURE__*/function () {
|
|
557
|
+
var _ref3 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2(element, index) {
|
|
558
|
+
var _loop, promise;
|
|
559
|
+
return _regeneratorRuntime.wrap(function _callee2$(_context3) {
|
|
560
|
+
while (1) switch (_context3.prev = _context3.next) {
|
|
561
|
+
case 0:
|
|
562
|
+
_loop = /*#__PURE__*/_regeneratorRuntime.mark(function _loop() {
|
|
563
|
+
var newPromises;
|
|
564
|
+
return _regeneratorRuntime.wrap(function _loop$(_context2) {
|
|
565
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
566
|
+
case 0:
|
|
567
|
+
newPromises = [];
|
|
568
|
+
LeUtils.each(promises, function (promise) {
|
|
569
|
+
if (!promise.__lowentry_utils__promise_is_done__) {
|
|
570
|
+
newPromises.push(promise);
|
|
571
|
+
}
|
|
572
|
+
});
|
|
573
|
+
promises = newPromises;
|
|
574
|
+
if (!(promises.length > optionalParallelCount)) {
|
|
575
|
+
_context2.next = 6;
|
|
576
|
+
break;
|
|
577
|
+
}
|
|
578
|
+
_context2.next = 6;
|
|
579
|
+
return Promise.any(promises);
|
|
580
|
+
case 6:
|
|
581
|
+
case "end":
|
|
582
|
+
return _context2.stop();
|
|
583
|
+
}
|
|
584
|
+
}, _loop);
|
|
585
|
+
});
|
|
586
|
+
case 1:
|
|
587
|
+
if (!(promises.length > optionalParallelCount)) {
|
|
588
|
+
_context3.next = 5;
|
|
589
|
+
break;
|
|
590
|
+
}
|
|
591
|
+
return _context3.delegateYield(_loop(), "t0", 3);
|
|
592
|
+
case 3:
|
|
593
|
+
_context3.next = 1;
|
|
594
|
+
break;
|
|
595
|
+
case 5:
|
|
596
|
+
if (!doBreak) {
|
|
597
|
+
_context3.next = 7;
|
|
598
|
+
break;
|
|
599
|
+
}
|
|
600
|
+
return _context3.abrupt("return", false);
|
|
601
|
+
case 7:
|
|
602
|
+
promise = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
|
|
603
|
+
return _regeneratorRuntime.wrap(function _callee$(_context) {
|
|
604
|
+
while (1) switch (_context.prev = _context.next) {
|
|
605
|
+
case 0:
|
|
606
|
+
_context.next = 2;
|
|
607
|
+
return asyncCallback.call(element, element, index);
|
|
608
|
+
case 2:
|
|
609
|
+
_context.t0 = _context.sent;
|
|
610
|
+
if (!(_context.t0 === false)) {
|
|
611
|
+
_context.next = 5;
|
|
612
|
+
break;
|
|
613
|
+
}
|
|
614
|
+
doBreak = true;
|
|
615
|
+
case 5:
|
|
616
|
+
promise.__lowentry_utils__promise_is_done__ = true;
|
|
617
|
+
case 6:
|
|
618
|
+
case "end":
|
|
619
|
+
return _context.stop();
|
|
620
|
+
}
|
|
621
|
+
}, _callee);
|
|
622
|
+
}))();
|
|
623
|
+
promises.push(promise);
|
|
624
|
+
case 9:
|
|
625
|
+
case "end":
|
|
626
|
+
return _context3.stop();
|
|
627
|
+
}
|
|
628
|
+
}, _callee2);
|
|
629
|
+
}));
|
|
630
|
+
return function (_x5, _x6) {
|
|
631
|
+
return _ref3.apply(this, arguments);
|
|
632
|
+
};
|
|
633
|
+
}(), optionalSkipHasOwnPropertyCheck);
|
|
634
|
+
case 4:
|
|
635
|
+
_context4.next = 6;
|
|
636
|
+
return Promise.all(promises);
|
|
637
|
+
case 6:
|
|
638
|
+
return _context4.abrupt("return", elements);
|
|
639
|
+
case 7:
|
|
640
|
+
case "end":
|
|
641
|
+
return _context4.stop();
|
|
642
|
+
}
|
|
643
|
+
}, _callee3);
|
|
644
|
+
}));
|
|
645
|
+
return function eachAsyncParallel(_x, _x2, _x3, _x4) {
|
|
646
|
+
return _ref2.apply(this, arguments);
|
|
647
|
+
};
|
|
648
|
+
}();
|
|
649
|
+
return /*#__PURE__*/function () {
|
|
650
|
+
var _ref5 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee4(elements, asyncCallback) {
|
|
651
|
+
var parallelCount,
|
|
652
|
+
optionalSkipHasOwnPropertyCheck,
|
|
653
|
+
index,
|
|
654
|
+
_index2,
|
|
655
|
+
_args5 = arguments;
|
|
656
|
+
return _regeneratorRuntime.wrap(function _callee4$(_context5) {
|
|
657
|
+
while (1) switch (_context5.prev = _context5.next) {
|
|
658
|
+
case 0:
|
|
659
|
+
parallelCount = _args5.length > 2 && _args5[2] !== undefined ? _args5[2] : 1;
|
|
660
|
+
optionalSkipHasOwnPropertyCheck = _args5.length > 3 && _args5[3] !== undefined ? _args5[3] : false;
|
|
661
|
+
if (!(elements !== null && typeof elements !== 'undefined')) {
|
|
662
|
+
_context5.next = 36;
|
|
663
|
+
break;
|
|
664
|
+
}
|
|
665
|
+
parallelCount = INT_LAX(parallelCount);
|
|
666
|
+
if (!(parallelCount > 1)) {
|
|
667
|
+
_context5.next = 8;
|
|
668
|
+
break;
|
|
669
|
+
}
|
|
670
|
+
_context5.next = 7;
|
|
671
|
+
return eachAsyncParallel(elements, asyncCallback, parallelCount, optionalSkipHasOwnPropertyCheck);
|
|
672
|
+
case 7:
|
|
673
|
+
return _context5.abrupt("return", _context5.sent);
|
|
674
|
+
case 8:
|
|
675
|
+
if (!Array.isArray(elements)) {
|
|
676
|
+
_context5.next = 21;
|
|
677
|
+
break;
|
|
678
|
+
}
|
|
679
|
+
index = 0;
|
|
680
|
+
case 10:
|
|
681
|
+
if (!(index < elements.length)) {
|
|
682
|
+
_context5.next = 19;
|
|
683
|
+
break;
|
|
684
|
+
}
|
|
685
|
+
_context5.next = 13;
|
|
686
|
+
return asyncCallback.call(elements[index], elements[index], index);
|
|
687
|
+
case 13:
|
|
688
|
+
_context5.t0 = _context5.sent;
|
|
689
|
+
if (!(_context5.t0 === false)) {
|
|
690
|
+
_context5.next = 16;
|
|
691
|
+
break;
|
|
692
|
+
}
|
|
693
|
+
return _context5.abrupt("break", 19);
|
|
694
|
+
case 16:
|
|
695
|
+
index++;
|
|
696
|
+
_context5.next = 10;
|
|
697
|
+
break;
|
|
698
|
+
case 19:
|
|
699
|
+
_context5.next = 36;
|
|
700
|
+
break;
|
|
701
|
+
case 21:
|
|
702
|
+
if (!(_typeof(elements) === 'object' || typeof elements === 'function')) {
|
|
703
|
+
_context5.next = 35;
|
|
704
|
+
break;
|
|
705
|
+
}
|
|
706
|
+
_context5.t1 = _regeneratorRuntime.keys(elements);
|
|
707
|
+
case 23:
|
|
708
|
+
if ((_context5.t2 = _context5.t1()).done) {
|
|
709
|
+
_context5.next = 33;
|
|
710
|
+
break;
|
|
711
|
+
}
|
|
712
|
+
_index2 = _context5.t2.value;
|
|
713
|
+
if (!(optionalSkipHasOwnPropertyCheck === true || Object.prototype.hasOwnProperty.call(elements, _index2))) {
|
|
714
|
+
_context5.next = 31;
|
|
715
|
+
break;
|
|
716
|
+
}
|
|
717
|
+
_context5.next = 28;
|
|
718
|
+
return asyncCallback.call(elements[_index2], elements[_index2], _index2);
|
|
719
|
+
case 28:
|
|
720
|
+
_context5.t3 = _context5.sent;
|
|
721
|
+
if (!(_context5.t3 === false)) {
|
|
722
|
+
_context5.next = 31;
|
|
723
|
+
break;
|
|
724
|
+
}
|
|
725
|
+
return _context5.abrupt("break", 33);
|
|
726
|
+
case 31:
|
|
727
|
+
_context5.next = 23;
|
|
728
|
+
break;
|
|
729
|
+
case 33:
|
|
730
|
+
_context5.next = 36;
|
|
731
|
+
break;
|
|
732
|
+
case 35:
|
|
733
|
+
console.warn('Executed LeUtils.eachAsync() on an invalid type: [' + _typeof(elements) + ']', elements);
|
|
734
|
+
case 36:
|
|
735
|
+
return _context5.abrupt("return", elements);
|
|
736
|
+
case 37:
|
|
737
|
+
case "end":
|
|
738
|
+
return _context5.stop();
|
|
739
|
+
}
|
|
740
|
+
}, _callee4);
|
|
741
|
+
}));
|
|
742
|
+
return function (_x7, _x8) {
|
|
743
|
+
return _ref5.apply(this, arguments);
|
|
744
|
+
};
|
|
745
|
+
}();
|
|
746
|
+
}(),
|
|
747
|
+
/**
|
|
748
|
+
* @callback LeUtils~__filterCallback
|
|
749
|
+
* @param {*} value
|
|
750
|
+
* @param {*} index
|
|
751
|
+
*/
|
|
752
|
+
/**
|
|
753
|
+
* Loops through the given elements, and returns a new array or object, with only the elements that didn't return false from the callback.
|
|
754
|
+
*
|
|
755
|
+
* @param {*[]|object|Function} elements
|
|
756
|
+
* @param {LeUtils~__filterCallback} callback
|
|
757
|
+
* @param {boolean} [optionalSkipHasOwnPropertyCheck]
|
|
758
|
+
* @returns {*[]|object|Function}
|
|
759
|
+
*/
|
|
760
|
+
filter: function filter(elements, callback) {
|
|
761
|
+
var optionalSkipHasOwnPropertyCheck = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
762
|
+
if (elements !== null && typeof elements !== 'undefined') {
|
|
763
|
+
if (Array.isArray(elements)) {
|
|
764
|
+
var result = [];
|
|
765
|
+
for (var index = 0; index < elements.length; index++) {
|
|
766
|
+
if (callback.call(elements[index], elements[index], index) !== false) {
|
|
767
|
+
result.push(elements[index]);
|
|
768
|
+
}
|
|
769
|
+
}
|
|
770
|
+
return result;
|
|
771
|
+
} else if (_typeof(elements) === 'object' || typeof elements === 'function') {
|
|
772
|
+
var _result = {};
|
|
773
|
+
for (var _index3 in elements) {
|
|
774
|
+
if (optionalSkipHasOwnPropertyCheck === true || Object.prototype.hasOwnProperty.call(elements, _index3)) {
|
|
775
|
+
if (callback.call(elements[_index3], elements[_index3], _index3) !== false) {
|
|
776
|
+
_result[_index3] = elements[_index3];
|
|
777
|
+
}
|
|
778
|
+
}
|
|
779
|
+
}
|
|
780
|
+
return _result;
|
|
781
|
+
} else {
|
|
782
|
+
console.warn('Executed LeUtils.filter() on an invalid type: [' + _typeof(elements) + ']', elements);
|
|
783
|
+
}
|
|
784
|
+
}
|
|
785
|
+
return elements;
|
|
786
|
+
},
|
|
787
|
+
/**
|
|
788
|
+
* @callback LeUtils~__mapCallback
|
|
789
|
+
* @param {*} value
|
|
790
|
+
* @param {*} index
|
|
791
|
+
*/
|
|
792
|
+
/**
|
|
793
|
+
* Loops through the given elements, and returns a new array or object, with the elements that were returned from the callback.
|
|
794
|
+
*
|
|
795
|
+
* @param {*[]|object|Function} elements
|
|
796
|
+
* @param {LeUtils~__mapCallback} callback
|
|
797
|
+
* @param {boolean} [optionalSkipHasOwnPropertyCheck]
|
|
798
|
+
* @returns {*[]|object|Function}
|
|
799
|
+
*/
|
|
800
|
+
map: function map(elements, callback) {
|
|
801
|
+
var optionalSkipHasOwnPropertyCheck = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
802
|
+
if (elements !== null && typeof elements !== 'undefined') {
|
|
803
|
+
if (Array.isArray(elements)) {
|
|
804
|
+
var result = [];
|
|
805
|
+
for (var index = 0; index < elements.length; index++) {
|
|
806
|
+
result[index] = callback.call(elements[index], elements[index], index);
|
|
807
|
+
}
|
|
808
|
+
return result;
|
|
809
|
+
} else if (_typeof(elements) === 'object' || typeof elements === 'function') {
|
|
810
|
+
var _result2 = {};
|
|
811
|
+
for (var _index4 in elements) {
|
|
812
|
+
if (optionalSkipHasOwnPropertyCheck === true || Object.prototype.hasOwnProperty.call(elements, _index4)) {
|
|
813
|
+
_result2[_index4] = callback.call(elements[_index4], elements[_index4], _index4);
|
|
814
|
+
}
|
|
815
|
+
}
|
|
816
|
+
return _result2;
|
|
817
|
+
} else {
|
|
818
|
+
console.warn('Executed LeUtils.map() on an invalid type: [' + _typeof(elements) + ']', elements);
|
|
819
|
+
}
|
|
820
|
+
}
|
|
821
|
+
return elements;
|
|
822
|
+
},
|
|
823
|
+
/**
|
|
824
|
+
* @callback LeUtils~__mapToArrayCallback
|
|
825
|
+
* @param {*} value
|
|
826
|
+
* @param {*} index
|
|
827
|
+
*/
|
|
828
|
+
/**
|
|
829
|
+
* Loops through the given elements, and returns a new array, with the elements that were returned from the callback. Always returns an array.
|
|
830
|
+
*
|
|
831
|
+
* @param {*[]|object|Function} elements
|
|
832
|
+
* @param {LeUtils~__mapToArrayCallback} callback
|
|
833
|
+
* @param {boolean} [optionalSkipHasOwnPropertyCheck]
|
|
834
|
+
* @returns {*[]}
|
|
835
|
+
*/
|
|
836
|
+
mapToArray: function mapToArray(elements, callback) {
|
|
837
|
+
var optionalSkipHasOwnPropertyCheck = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
838
|
+
var result = [];
|
|
839
|
+
if (elements !== null && typeof elements !== 'undefined') {
|
|
840
|
+
if (Array.isArray(elements)) {
|
|
841
|
+
for (var index = 0; index < elements.length; index++) {
|
|
842
|
+
result.push(callback.call(elements[index], elements[index], index));
|
|
843
|
+
}
|
|
844
|
+
} else if (_typeof(elements) === 'object' || typeof elements === 'function') {
|
|
845
|
+
for (var _index5 in elements) {
|
|
846
|
+
if (optionalSkipHasOwnPropertyCheck === true || Object.prototype.hasOwnProperty.call(elements, _index5)) {
|
|
847
|
+
result.push(callback.call(elements[_index5], elements[_index5], _index5));
|
|
848
|
+
}
|
|
849
|
+
}
|
|
850
|
+
} else {
|
|
851
|
+
console.warn('Executed LeUtils.mapToArray() on an invalid type: [' + _typeof(elements) + ']', elements);
|
|
852
|
+
}
|
|
853
|
+
}
|
|
854
|
+
return result;
|
|
855
|
+
},
|
|
856
|
+
/**
|
|
857
|
+
* @callback LeUtils~__mapToArraySortedCallback
|
|
858
|
+
* @param {*} value
|
|
859
|
+
* @param {*} index
|
|
860
|
+
*/
|
|
861
|
+
/**
|
|
862
|
+
* Loops through the given elements, and returns a new array, with the elements that were returned from the callback. The elements will be sorted by the result from the given comparator. Always returns an array.
|
|
863
|
+
*
|
|
864
|
+
* @param {*[]|object|Function} elements
|
|
865
|
+
* @param {LeUtils~__sortKeysComparatorCallback} comparator
|
|
866
|
+
* @param {LeUtils~__mapToArraySortedCallback} callback
|
|
867
|
+
* @param {boolean} [optionalSkipHasOwnPropertyCheck]
|
|
868
|
+
* @returns {*[]}
|
|
869
|
+
*/
|
|
870
|
+
mapToArraySorted: function mapToArraySorted(elements, comparator, callback) {
|
|
871
|
+
var optionalSkipHasOwnPropertyCheck = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
|
|
872
|
+
var keys = LeUtils.sortKeys(elements, comparator, optionalSkipHasOwnPropertyCheck);
|
|
873
|
+
var result = [];
|
|
874
|
+
for (var i = 0; i < keys.length; i++) {
|
|
875
|
+
result.push(callback.call(elements[keys[i]], elements[keys[i]], keys[i]));
|
|
876
|
+
}
|
|
877
|
+
return result;
|
|
878
|
+
},
|
|
879
|
+
/**
|
|
880
|
+
* @callback LeUtils~__sortKeysComparatorCallback
|
|
881
|
+
* @param {*} elementA
|
|
882
|
+
* @param {*} elementB
|
|
883
|
+
*/
|
|
884
|
+
/**
|
|
885
|
+
* Loops through the given elements, and returns a new array, with the keys from the given elements, sorted by the result from the given comparator. Always returns an array.
|
|
886
|
+
*
|
|
887
|
+
* @param {*[]|object|Function} elements
|
|
888
|
+
* @param {LeUtils~__sortKeysComparatorCallback} comparator
|
|
889
|
+
* @param {boolean} [optionalSkipHasOwnPropertyCheck]
|
|
890
|
+
* @returns {*[]}
|
|
891
|
+
*/
|
|
892
|
+
sortKeys: function sortKeys(elements, comparator) {
|
|
893
|
+
var optionalSkipHasOwnPropertyCheck = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
894
|
+
var keys = [];
|
|
895
|
+
if (elements !== null && typeof elements !== 'undefined') {
|
|
896
|
+
if (Array.isArray(elements)) {
|
|
897
|
+
for (var index = 0; index < elements.length; index++) {
|
|
898
|
+
keys.push(index);
|
|
899
|
+
}
|
|
900
|
+
} else if (_typeof(elements) === 'object' || typeof elements === 'function') {
|
|
901
|
+
for (var _index6 in elements) {
|
|
902
|
+
if (optionalSkipHasOwnPropertyCheck === true || Object.prototype.hasOwnProperty.call(elements, _index6)) {
|
|
903
|
+
keys.push(_index6);
|
|
904
|
+
}
|
|
905
|
+
}
|
|
906
|
+
} else {
|
|
907
|
+
console.warn('Executed LeUtils.sortKeys() on an invalid type: [' + _typeof(elements) + ']', elements);
|
|
908
|
+
}
|
|
909
|
+
}
|
|
910
|
+
keys.sort(function (a, b) {
|
|
911
|
+
return comparator(elements[a], elements[b]);
|
|
912
|
+
});
|
|
913
|
+
return keys;
|
|
914
|
+
},
|
|
915
|
+
/**
|
|
916
|
+
* Turns the given value(s) into a 1 dimensional array.
|
|
917
|
+
*
|
|
918
|
+
* Does the same thing as Array.flat(Infinity).
|
|
919
|
+
*
|
|
920
|
+
* @param {*} array
|
|
921
|
+
* @returns {*[]}
|
|
922
|
+
*/
|
|
923
|
+
flattenArray: function () {
|
|
924
|
+
var flattenArrayRecursive = function flattenArrayRecursive(result, array) {
|
|
925
|
+
if (!Array.isArray(array)) {
|
|
926
|
+
result.push(array);
|
|
927
|
+
return;
|
|
928
|
+
}
|
|
929
|
+
array.forEach(function (entry) {
|
|
930
|
+
flattenArrayRecursive(result, entry);
|
|
931
|
+
});
|
|
932
|
+
};
|
|
933
|
+
return function (array) {
|
|
934
|
+
if (!Array.isArray(array)) {
|
|
935
|
+
return [array];
|
|
936
|
+
}
|
|
937
|
+
var result = [];
|
|
938
|
+
array.forEach(function (entry) {
|
|
939
|
+
flattenArrayRecursive(result, entry);
|
|
940
|
+
});
|
|
941
|
+
return result;
|
|
942
|
+
};
|
|
943
|
+
}(),
|
|
944
|
+
/**
|
|
945
|
+
* Compares two values. Primarily used for sorting.
|
|
946
|
+
*
|
|
947
|
+
* @param {*} a
|
|
948
|
+
* @param {*} b
|
|
949
|
+
* @returns {number}
|
|
950
|
+
*/
|
|
951
|
+
compare: function compare(a, b) {
|
|
952
|
+
return a < b ? -1 : a > b ? 1 : 0;
|
|
953
|
+
},
|
|
954
|
+
/**
|
|
955
|
+
* Compares two numbers. Primarily used for sorting.
|
|
956
|
+
*
|
|
957
|
+
* @param {number} a
|
|
958
|
+
* @param {number} b
|
|
959
|
+
* @returns {number}
|
|
960
|
+
*/
|
|
961
|
+
compareNumbers: function compareNumbers(a, b) {
|
|
962
|
+
return a - b;
|
|
963
|
+
},
|
|
964
|
+
/**
|
|
965
|
+
* Compares two numeric strings. Primarily used for sorting.
|
|
966
|
+
*
|
|
967
|
+
* @param {string|number} a
|
|
968
|
+
* @param {string|number} b
|
|
969
|
+
* @returns {number}
|
|
970
|
+
*/
|
|
971
|
+
compareNumericStrings: function compareNumericStrings(a, b) {
|
|
972
|
+
a = STRING(a).trim();
|
|
973
|
+
b = STRING(b).trim();
|
|
974
|
+
if (a.length === b.length) {
|
|
975
|
+
return a < b ? -1 : a > b ? 1 : 0;
|
|
976
|
+
}
|
|
977
|
+
return a.length < b.length ? -1 : 1;
|
|
978
|
+
},
|
|
979
|
+
/**
|
|
980
|
+
* Compares two strings generated by LeUtils.timestamp(). Primarily used for sorting.
|
|
981
|
+
*
|
|
982
|
+
* @param {string} a
|
|
983
|
+
* @param {string} b
|
|
984
|
+
* @returns {number}
|
|
985
|
+
*/
|
|
986
|
+
compareTimestampStrings: function compareTimestampStrings(a, b) {
|
|
987
|
+
a = LeUtils.base64ToHex(STRING(a).replaceAll('-', '+').replaceAll('_', '/'));
|
|
988
|
+
b = LeUtils.base64ToHex(STRING(b).replaceAll('-', '+').replaceAll('_', '/'));
|
|
989
|
+
return LeUtils.compare(a, b);
|
|
990
|
+
},
|
|
991
|
+
/**
|
|
992
|
+
* Returns true if the given object is empty, false otherwise.
|
|
993
|
+
*
|
|
994
|
+
* @param {object} obj
|
|
995
|
+
* @param [optionalSkipHasOwnPropertyCheck]
|
|
996
|
+
* @returns {boolean}
|
|
997
|
+
*/
|
|
998
|
+
isEmptyObject: function isEmptyObject(obj) {
|
|
999
|
+
var optionalSkipHasOwnPropertyCheck = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
1000
|
+
for (var field in obj) {
|
|
1001
|
+
if (optionalSkipHasOwnPropertyCheck === true || Object.prototype.hasOwnProperty.call(obj, field)) {
|
|
1002
|
+
return false;
|
|
1003
|
+
}
|
|
1004
|
+
}
|
|
1005
|
+
return true;
|
|
1006
|
+
},
|
|
1007
|
+
/**
|
|
1008
|
+
* Returns the number of fields in the given object.
|
|
1009
|
+
*
|
|
1010
|
+
* @param {object} obj
|
|
1011
|
+
* @param [optionalSkipHasOwnPropertyCheck]
|
|
1012
|
+
* @returns {number}
|
|
1013
|
+
*/
|
|
1014
|
+
getObjectFieldsCount: function getObjectFieldsCount(obj) {
|
|
1015
|
+
var optionalSkipHasOwnPropertyCheck = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
1016
|
+
var count = 0;
|
|
1017
|
+
for (var field in obj) {
|
|
1018
|
+
if (optionalSkipHasOwnPropertyCheck === true || Object.prototype.hasOwnProperty.call(obj, field)) {
|
|
1019
|
+
count++;
|
|
1020
|
+
}
|
|
1021
|
+
}
|
|
1022
|
+
return count;
|
|
1023
|
+
},
|
|
1024
|
+
/**
|
|
1025
|
+
* Returns true if the given function is a generator function (like: "function* (){}"), returns false otherwise.
|
|
1026
|
+
*
|
|
1027
|
+
* @param {Function} func
|
|
1028
|
+
* @returns {boolean}
|
|
1029
|
+
*/
|
|
1030
|
+
isGeneratorFunction: function () {
|
|
1031
|
+
var GeneratorFunction = _regeneratorRuntime.mark(function _callee5() {
|
|
1032
|
+
return _regeneratorRuntime.wrap(function _callee5$(_context6) {
|
|
1033
|
+
while (1) switch (_context6.prev = _context6.next) {
|
|
1034
|
+
case 0:
|
|
1035
|
+
case "end":
|
|
1036
|
+
return _context6.stop();
|
|
1037
|
+
}
|
|
1038
|
+
}, _callee5);
|
|
1039
|
+
}).constructor;
|
|
1040
|
+
var AsyncGeneratorFunction = _wrapAsyncGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee6() {
|
|
1041
|
+
return _regeneratorRuntime.wrap(function _callee6$(_context7) {
|
|
1042
|
+
while (1) switch (_context7.prev = _context7.next) {
|
|
1043
|
+
case 0:
|
|
1044
|
+
case "end":
|
|
1045
|
+
return _context7.stop();
|
|
1046
|
+
}
|
|
1047
|
+
}, _callee6);
|
|
1048
|
+
})).constructor;
|
|
1049
|
+
var RegularFunction = function () {}.constructor;
|
|
1050
|
+
var PossibleGeneratorFunctionNames = Array.from(new Set(['GeneratorFunction', 'AsyncFunction', 'AsyncGeneratorFunction', GeneratorFunction.name, GeneratorFunction.displayName, AsyncGeneratorFunction.name, AsyncGeneratorFunction.displayName])).filter(function (element) {
|
|
1051
|
+
return element && element !== RegularFunction.name && element !== RegularFunction.displayName;
|
|
1052
|
+
});
|
|
1053
|
+
return function (func) {
|
|
1054
|
+
if (!func) {
|
|
1055
|
+
return false;
|
|
1056
|
+
}
|
|
1057
|
+
var constructor = func.constructor;
|
|
1058
|
+
if (!constructor) {
|
|
1059
|
+
return false;
|
|
1060
|
+
}
|
|
1061
|
+
return constructor.name && PossibleGeneratorFunctionNames.includes(constructor.name) || constructor.displayName && PossibleGeneratorFunctionNames.includes(constructor.displayName);
|
|
1062
|
+
};
|
|
1063
|
+
}(),
|
|
1064
|
+
/**
|
|
1065
|
+
* @callback LeUtils~__setTimeoutCallback
|
|
1066
|
+
* @param {number} deltaTime
|
|
1067
|
+
*/
|
|
1068
|
+
/**
|
|
1069
|
+
* Executes the callback after the given number of milliseconds. Passes the elapsed time in seconds to the callback.
|
|
1070
|
+
*
|
|
1071
|
+
* To cancel the timeout, call remove() on the result of this function (example: "const timeoutHandler = LeUtils.setTimeout((deltaTime)=>{}, 1000); timeoutHandler.remove();")
|
|
1072
|
+
*
|
|
1073
|
+
* @param {LeUtils~__setTimeoutCallback} callback ([number] deltaTime)
|
|
1074
|
+
* @param {number} ms
|
|
1075
|
+
* @returns {{remove:Function}}
|
|
1076
|
+
*/
|
|
1077
|
+
setTimeout: function (_setTimeout) {
|
|
1078
|
+
function setTimeout(_x9, _x10) {
|
|
1079
|
+
return _setTimeout.apply(this, arguments);
|
|
1080
|
+
}
|
|
1081
|
+
setTimeout.toString = function () {
|
|
1082
|
+
return _setTimeout.toString();
|
|
1083
|
+
};
|
|
1084
|
+
return setTimeout;
|
|
1085
|
+
}(function (callback, ms) {
|
|
1086
|
+
ms = FLOAT_LAX(ms);
|
|
1087
|
+
var lastTime = performance.now();
|
|
1088
|
+
var handler = setTimeout(function () {
|
|
1089
|
+
var currentTime = performance.now();
|
|
1090
|
+
try {
|
|
1091
|
+
callback((currentTime - lastTime) / 1000);
|
|
1092
|
+
} catch (e) {
|
|
1093
|
+
console.error(e);
|
|
1094
|
+
}
|
|
1095
|
+
lastTime = currentTime;
|
|
1096
|
+
}, ms);
|
|
1097
|
+
return {
|
|
1098
|
+
remove: function remove() {
|
|
1099
|
+
if (handler !== null) {
|
|
1100
|
+
clearTimeout(handler);
|
|
1101
|
+
handler = null;
|
|
1102
|
+
}
|
|
1103
|
+
}
|
|
1104
|
+
};
|
|
1105
|
+
}),
|
|
1106
|
+
/**
|
|
1107
|
+
* @callback LeUtils~__setIntervalCallback
|
|
1108
|
+
* @param {number} deltaTime
|
|
1109
|
+
*/
|
|
1110
|
+
/**
|
|
1111
|
+
* Executes the callback every given number of milliseconds. Passes the time difference in seconds between the last frame and now to it.
|
|
1112
|
+
*
|
|
1113
|
+
* To remove the interval, call remove() on the result of this function (example: "const intervalHandler = LeUtils.setInterval((deltaTime)=>{}, 1000); intervalHandler.remove();")
|
|
1114
|
+
*
|
|
1115
|
+
* @param {LeUtils~__setIntervalCallback} callback ([number] deltaTime)
|
|
1116
|
+
* @param {number} [intervalMs]
|
|
1117
|
+
* @param {boolean} [fireImmediately]
|
|
1118
|
+
* @returns {{remove:Function}}
|
|
1119
|
+
*/
|
|
1120
|
+
setInterval: function (_setInterval) {
|
|
1121
|
+
function setInterval(_x11) {
|
|
1122
|
+
return _setInterval.apply(this, arguments);
|
|
1123
|
+
}
|
|
1124
|
+
setInterval.toString = function () {
|
|
1125
|
+
return _setInterval.toString();
|
|
1126
|
+
};
|
|
1127
|
+
return setInterval;
|
|
1128
|
+
}(function (callback) {
|
|
1129
|
+
var intervalMs = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1000;
|
|
1130
|
+
var fireImmediately = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
1131
|
+
intervalMs = FLOAT_LAX_ANY(intervalMs, 1000);
|
|
1132
|
+
if (fireImmediately) {
|
|
1133
|
+
try {
|
|
1134
|
+
callback(0);
|
|
1135
|
+
} catch (e) {
|
|
1136
|
+
console.error(e);
|
|
1137
|
+
}
|
|
1138
|
+
}
|
|
1139
|
+
var lastTime = performance.now();
|
|
1140
|
+
var handler = setInterval(function () {
|
|
1141
|
+
var currentTime = performance.now();
|
|
1142
|
+
try {
|
|
1143
|
+
callback((currentTime - lastTime) / 1000);
|
|
1144
|
+
} catch (e) {
|
|
1145
|
+
console.error(e);
|
|
1146
|
+
}
|
|
1147
|
+
lastTime = currentTime;
|
|
1148
|
+
}, intervalMs);
|
|
1149
|
+
return {
|
|
1150
|
+
remove: function remove() {
|
|
1151
|
+
if (handler !== null) {
|
|
1152
|
+
clearInterval(handler);
|
|
1153
|
+
handler = null;
|
|
1154
|
+
}
|
|
1155
|
+
}
|
|
1156
|
+
};
|
|
1157
|
+
}),
|
|
1158
|
+
/**
|
|
1159
|
+
* @callback LeUtils~__setAnimationFrameTimeoutCallback
|
|
1160
|
+
* @param {number} deltaTime
|
|
1161
|
+
*/
|
|
1162
|
+
/**
|
|
1163
|
+
* Executes the callback after the given number of frames. Passes the elapsed time in seconds to the callback.
|
|
1164
|
+
*
|
|
1165
|
+
* To cancel the timeout, call remove() on the result of this function (example: "const timeoutHandler = LeUtils.setAnimationFrameTimeout((deltaTime){}, 5); timeoutHandler.remove();")
|
|
1166
|
+
*
|
|
1167
|
+
* @param {LeUtils~__setAnimationFrameTimeoutCallback} callback ([number] deltaTime)
|
|
1168
|
+
* @param {number} [frames]
|
|
1169
|
+
* @returns {{remove:Function}}
|
|
1170
|
+
*/
|
|
1171
|
+
setAnimationFrameTimeout: function setAnimationFrameTimeout(callback) {
|
|
1172
|
+
var frames = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
|
|
1173
|
+
frames = INT_LAX_ANY(frames, 1);
|
|
1174
|
+
var run = true;
|
|
1175
|
+
var requestAnimationFrameId = null;
|
|
1176
|
+
var lastTime = performance.now();
|
|
1177
|
+
var tick = function tick() {
|
|
1178
|
+
if (run) {
|
|
1179
|
+
if (frames <= 0) {
|
|
1180
|
+
run = false;
|
|
1181
|
+
requestAnimationFrameId = null;
|
|
1182
|
+
var currentTime = performance.now();
|
|
1183
|
+
try {
|
|
1184
|
+
callback((currentTime - lastTime) / 1000);
|
|
1185
|
+
} catch (e) {
|
|
1186
|
+
console.error(e);
|
|
1187
|
+
}
|
|
1188
|
+
lastTime = currentTime;
|
|
1189
|
+
return;
|
|
1190
|
+
}
|
|
1191
|
+
frames--;
|
|
1192
|
+
requestAnimationFrameId = typeof window === 'undefined' ? setTimeout(tick, 1000 / 60) : requestAnimationFrame(tick);
|
|
1193
|
+
}
|
|
1194
|
+
};
|
|
1195
|
+
tick();
|
|
1196
|
+
return {
|
|
1197
|
+
remove: function remove() {
|
|
1198
|
+
run = false;
|
|
1199
|
+
if (requestAnimationFrameId !== null) {
|
|
1200
|
+
typeof window === 'undefined' ? clearTimeout(requestAnimationFrameId) : cancelAnimationFrame(requestAnimationFrameId);
|
|
1201
|
+
requestAnimationFrameId = null;
|
|
1202
|
+
}
|
|
1203
|
+
}
|
|
1204
|
+
};
|
|
1205
|
+
},
|
|
1206
|
+
/**
|
|
1207
|
+
* @callback LeUtils~__setAnimationFrameIntervalCallback
|
|
1208
|
+
* @param {number} deltaTime
|
|
1209
|
+
*/
|
|
1210
|
+
/**
|
|
1211
|
+
* Executes the callback every given number of frames. Passes the time difference in seconds between the last frame and now to it.
|
|
1212
|
+
*
|
|
1213
|
+
* To remove the interval, call remove() on the result of this function (example: "const intervalHandler = LeUtils.setAnimationFrameInterval((deltaTime)=>{}, 5); intervalHandler.remove();")
|
|
1214
|
+
*
|
|
1215
|
+
* @param {LeUtils~__setAnimationFrameIntervalCallback} callback ([number] deltaTime)
|
|
1216
|
+
* @param {number} [intervalFrames]
|
|
1217
|
+
* @param {boolean} [fireImmediately]
|
|
1218
|
+
* @returns {{remove:Function}}
|
|
1219
|
+
*/
|
|
1220
|
+
setAnimationFrameInterval: function setAnimationFrameInterval(callback) {
|
|
1221
|
+
var intervalFrames = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
|
|
1222
|
+
var fireImmediately = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
1223
|
+
intervalFrames = INT_LAX_ANY(intervalFrames, 1);
|
|
1224
|
+
if (fireImmediately) {
|
|
1225
|
+
try {
|
|
1226
|
+
callback(0);
|
|
1227
|
+
} catch (e) {
|
|
1228
|
+
console.error(e);
|
|
1229
|
+
}
|
|
1230
|
+
}
|
|
1231
|
+
var run = true;
|
|
1232
|
+
var requestAnimationFrameId = null;
|
|
1233
|
+
var lastTime = performance.now();
|
|
1234
|
+
var frames = intervalFrames;
|
|
1235
|
+
var tick = function tick() {
|
|
1236
|
+
if (run) {
|
|
1237
|
+
if (frames <= 0) {
|
|
1238
|
+
var currentTime = performance.now();
|
|
1239
|
+
try {
|
|
1240
|
+
callback((currentTime - lastTime) / 1000);
|
|
1241
|
+
} catch (e) {
|
|
1242
|
+
console.error(e);
|
|
1243
|
+
}
|
|
1244
|
+
lastTime = currentTime;
|
|
1245
|
+
frames = intervalFrames;
|
|
1246
|
+
}
|
|
1247
|
+
frames--;
|
|
1248
|
+
if (run) {
|
|
1249
|
+
requestAnimationFrameId = typeof window === 'undefined' ? setTimeout(tick, 1000 / 60) : requestAnimationFrame(tick);
|
|
1250
|
+
}
|
|
1251
|
+
}
|
|
1252
|
+
};
|
|
1253
|
+
typeof window === 'undefined' ? setTimeout(tick, 1000 / 60) : requestAnimationFrame(tick);
|
|
1254
|
+
return {
|
|
1255
|
+
remove: function remove() {
|
|
1256
|
+
run = false;
|
|
1257
|
+
if (requestAnimationFrameId !== null) {
|
|
1258
|
+
typeof window === 'undefined' ? clearTimeout(requestAnimationFrameId) : cancelAnimationFrame(requestAnimationFrameId);
|
|
1259
|
+
requestAnimationFrameId = null;
|
|
1260
|
+
}
|
|
1261
|
+
}
|
|
1262
|
+
};
|
|
1263
|
+
},
|
|
1264
|
+
/**
|
|
1265
|
+
* Returns a promise, which will be resolved after the given number of milliseconds.
|
|
1266
|
+
*
|
|
1267
|
+
* @param {number} ms
|
|
1268
|
+
* @returns {Promise}
|
|
1269
|
+
*/
|
|
1270
|
+
promiseTimeout: function promiseTimeout(ms) {
|
|
1271
|
+
ms = FLOAT_LAX(ms);
|
|
1272
|
+
if (ms <= 0) {
|
|
1273
|
+
return new Promise(function (resolve) {
|
|
1274
|
+
return resolve();
|
|
1275
|
+
});
|
|
1276
|
+
}
|
|
1277
|
+
return new Promise(function (resolve) {
|
|
1278
|
+
return setTimeout(resolve, ms);
|
|
1279
|
+
});
|
|
1280
|
+
},
|
|
1281
|
+
/**
|
|
1282
|
+
* Returns a promise, which will be resolved after the given number of frames.
|
|
1283
|
+
*
|
|
1284
|
+
* @param {number} frames
|
|
1285
|
+
* @returns {Promise}
|
|
1286
|
+
*/
|
|
1287
|
+
promiseAnimationFrameTimeout: function promiseAnimationFrameTimeout(frames) {
|
|
1288
|
+
frames = INT_LAX(frames);
|
|
1289
|
+
if (frames <= 0) {
|
|
1290
|
+
return new Promise(function (resolve) {
|
|
1291
|
+
return resolve();
|
|
1292
|
+
});
|
|
1293
|
+
}
|
|
1294
|
+
return new Promise(function (resolve) {
|
|
1295
|
+
return LeUtils.setAnimationFrameTimeout(resolve, frames);
|
|
1296
|
+
});
|
|
1297
|
+
},
|
|
1298
|
+
/**
|
|
1299
|
+
* Returns true if the user is on a smartphone device (mobile).
|
|
1300
|
+
* Will return false if the user is on a tablet or on a desktop.
|
|
1301
|
+
*
|
|
1302
|
+
* In short:
|
|
1303
|
+
* - Mobile: True
|
|
1304
|
+
* - Tablet: False
|
|
1305
|
+
* - Desktop: False
|
|
1306
|
+
*
|
|
1307
|
+
* @returns {boolean}
|
|
1308
|
+
*/
|
|
1309
|
+
platformIsMobile: function platformIsMobile() {
|
|
1310
|
+
var _window$navigator, _window$navigator2;
|
|
1311
|
+
if (typeof window === 'undefined') {
|
|
1312
|
+
return false;
|
|
1313
|
+
}
|
|
1314
|
+
// noinspection JSDeprecatedSymbols, JSUnresolvedReference
|
|
1315
|
+
/** navigator.userAgentData.mobile doesn't return the correct value on some platforms, so this is a work-around, code from: http://detectmobilebrowsers.com **/
|
|
1316
|
+
var a = STRING(((_window$navigator = window.navigator) === null || _window$navigator === void 0 ? void 0 : _window$navigator.userAgent) || ((_window$navigator2 = window.navigator) === null || _window$navigator2 === void 0 ? void 0 : _window$navigator2.vendor) || window.opera || '');
|
|
1317
|
+
var b = a.substring(0, 4);
|
|
1318
|
+
return !!(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series([46])0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br([ev])w|bumb|bw-([nu])|c55\/|capi|ccwa|cdm-|cell|chtm|cldc|cmd-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do([cp])o|ds(12|-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly([-_])|g1 u|g560|gene|gf-5|g-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd-([mpt])|hei-|hi(pt|ta)|hp( i|ip)|hs-c|ht(c([- _agpst])|tp)|hu(aw|tc)|i-(20|go|ma)|i230|iac([ \-/])|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja([tv])a|jbro|jemu|jigs|kddi|keji|kgt([ /])|klon|kpt |kwc-|kyo([ck])|le(no|xi)|lg( g|\/([klu])|50|54|-[a-w])|libw|lynx|m1-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t([- ov])|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30([02])|n50([025])|n7(0([01])|10)|ne(([cm])-|on|tf|wf|wg|wt)|nok([6i])|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan([adt])|pdxg|pg(13|-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio|pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h-|oo|p-)|sdk\/|se(c([-01])|47|mc|nd|ri)|sgh-|shar|sie([-m])|sk-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel([im])|tim-|t-mo|to(pl|sh)|ts(70|m-|m3|m5)|tx-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c([- ])|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas-|your|zeto|zte-/i.test(b));
|
|
1319
|
+
},
|
|
1320
|
+
/**
|
|
1321
|
+
* Returns true if the user has a cursor (mouse, touchpad, etc).
|
|
1322
|
+
* In this context, a cursor is defined as an input device that can hover over elements without necessarily interacting with them.
|
|
1323
|
+
*
|
|
1324
|
+
* @returns {boolean}
|
|
1325
|
+
*/
|
|
1326
|
+
platformHasCursor: function platformHasCursor() {
|
|
1327
|
+
var _window$matchMedia;
|
|
1328
|
+
if (typeof window === 'undefined') {
|
|
1329
|
+
return true;
|
|
1330
|
+
}
|
|
1331
|
+
return !LeUtils.platformIsMobile() && !((_window$matchMedia = window.matchMedia('(any-hover: none)')) !== null && _window$matchMedia !== void 0 && _window$matchMedia.matches);
|
|
1332
|
+
},
|
|
1333
|
+
/**
|
|
1334
|
+
* Returns the given string, with the first character capitalized.
|
|
1335
|
+
*
|
|
1336
|
+
* @param {String} string
|
|
1337
|
+
* @returns {string}
|
|
1338
|
+
*/
|
|
1339
|
+
capitalize: function capitalize(string) {
|
|
1340
|
+
string = STRING(string).trim();
|
|
1341
|
+
if (string.length <= 0) {
|
|
1342
|
+
return string;
|
|
1343
|
+
}
|
|
1344
|
+
return string.charAt(0).toUpperCase() + string.slice(1);
|
|
1345
|
+
},
|
|
1346
|
+
/**
|
|
1347
|
+
* Returns true if the given string ends with any of the given characters or words.
|
|
1348
|
+
*
|
|
1349
|
+
* @param {string} string
|
|
1350
|
+
* @param {string|string[]} endingCharsStringOrArray
|
|
1351
|
+
* @returns {boolean}
|
|
1352
|
+
*/
|
|
1353
|
+
endsWithAny: function endsWithAny(string, endingCharsStringOrArray) {
|
|
1354
|
+
string = STRING(string);
|
|
1355
|
+
var endingCharsArray;
|
|
1356
|
+
if (Array.isArray(endingCharsStringOrArray)) {
|
|
1357
|
+
endingCharsArray = endingCharsStringOrArray;
|
|
1358
|
+
} else {
|
|
1359
|
+
endingCharsArray = STRING(endingCharsStringOrArray).split('');
|
|
1360
|
+
}
|
|
1361
|
+
var result = false;
|
|
1362
|
+
LeUtils.each(endingCharsArray, function (chars) {
|
|
1363
|
+
if (string.endsWith(STRING(chars))) {
|
|
1364
|
+
result = true;
|
|
1365
|
+
return false;
|
|
1366
|
+
}
|
|
1367
|
+
});
|
|
1368
|
+
return result;
|
|
1369
|
+
},
|
|
1370
|
+
/**
|
|
1371
|
+
* Returns true if the given string starts with any of the given characters or words.
|
|
1372
|
+
*
|
|
1373
|
+
* @param {string} string
|
|
1374
|
+
* @param {string|string[]} startingCharsStringOrArray
|
|
1375
|
+
* @returns {boolean}
|
|
1376
|
+
*/
|
|
1377
|
+
startsWithAny: function startsWithAny(string, startingCharsStringOrArray) {
|
|
1378
|
+
string = STRING(string);
|
|
1379
|
+
var startingCharsArray;
|
|
1380
|
+
if (Array.isArray(startingCharsStringOrArray)) {
|
|
1381
|
+
startingCharsArray = startingCharsStringOrArray;
|
|
1382
|
+
} else {
|
|
1383
|
+
startingCharsArray = STRING(startingCharsStringOrArray).split('');
|
|
1384
|
+
}
|
|
1385
|
+
var result = false;
|
|
1386
|
+
LeUtils.each(startingCharsArray, function (chars) {
|
|
1387
|
+
if (string.startsWith(STRING(chars))) {
|
|
1388
|
+
result = true;
|
|
1389
|
+
return false;
|
|
1390
|
+
}
|
|
1391
|
+
});
|
|
1392
|
+
return result;
|
|
1393
|
+
},
|
|
1394
|
+
/**
|
|
1395
|
+
* Trims the end of the given string, by removing the given characters from it.
|
|
1396
|
+
*
|
|
1397
|
+
* @param {string} string
|
|
1398
|
+
* @param {string|string[]} trimCharsStringOrArray
|
|
1399
|
+
*/
|
|
1400
|
+
trimEnd: function trimEnd(string, trimCharsStringOrArray) {
|
|
1401
|
+
string = STRING(string);
|
|
1402
|
+
var endingCharsArray;
|
|
1403
|
+
if (Array.isArray(trimCharsStringOrArray)) {
|
|
1404
|
+
endingCharsArray = trimCharsStringOrArray;
|
|
1405
|
+
} else {
|
|
1406
|
+
endingCharsArray = STRING(trimCharsStringOrArray).split('');
|
|
1407
|
+
}
|
|
1408
|
+
var trimChars = function trimChars(chars) {
|
|
1409
|
+
chars = STRING(chars);
|
|
1410
|
+
if (string.endsWith(chars)) {
|
|
1411
|
+
string = string.substring(0, string.length - chars.length);
|
|
1412
|
+
run = true;
|
|
1413
|
+
}
|
|
1414
|
+
};
|
|
1415
|
+
var run = true;
|
|
1416
|
+
while (run) {
|
|
1417
|
+
run = false;
|
|
1418
|
+
LeUtils.each(endingCharsArray, trimChars);
|
|
1419
|
+
}
|
|
1420
|
+
return string;
|
|
1421
|
+
},
|
|
1422
|
+
/**
|
|
1423
|
+
* Trims the start of the given string, by removing the given characters from it.
|
|
1424
|
+
*
|
|
1425
|
+
* @param {string} string
|
|
1426
|
+
* @param {string|string[]} trimCharsStringOrArray
|
|
1427
|
+
*/
|
|
1428
|
+
trimStart: function trimStart(string, trimCharsStringOrArray) {
|
|
1429
|
+
string = STRING(string);
|
|
1430
|
+
var startingCharsArray;
|
|
1431
|
+
if (Array.isArray(trimCharsStringOrArray)) {
|
|
1432
|
+
startingCharsArray = trimCharsStringOrArray;
|
|
1433
|
+
} else {
|
|
1434
|
+
startingCharsArray = STRING(trimCharsStringOrArray).split('');
|
|
1435
|
+
}
|
|
1436
|
+
var trimChars = function trimChars(chars) {
|
|
1437
|
+
chars = STRING(chars);
|
|
1438
|
+
if (string.startsWith(chars)) {
|
|
1439
|
+
string = string.substring(chars.length);
|
|
1440
|
+
run = true;
|
|
1441
|
+
}
|
|
1442
|
+
};
|
|
1443
|
+
var run = true;
|
|
1444
|
+
while (run) {
|
|
1445
|
+
run = false;
|
|
1446
|
+
LeUtils.each(startingCharsArray, trimChars);
|
|
1447
|
+
}
|
|
1448
|
+
return string;
|
|
1449
|
+
},
|
|
1450
|
+
/**
|
|
1451
|
+
* Trims the start and end of the given string, by removing the given characters from it.
|
|
1452
|
+
*
|
|
1453
|
+
* @param {string} string
|
|
1454
|
+
* @param {string|string[]} trimCharsStringOrArray
|
|
1455
|
+
*/
|
|
1456
|
+
trim: function trim(string, trimCharsStringOrArray) {
|
|
1457
|
+
return LeUtils.trimEnd(LeUtils.trimStart(string, trimCharsStringOrArray), trimCharsStringOrArray);
|
|
1458
|
+
},
|
|
1459
|
+
/**
|
|
1460
|
+
* Returns the given string, trims the start and end, and makes sure it ends with a valid sentence ending character (such as !?;.).
|
|
1461
|
+
*
|
|
1462
|
+
* @param {string} sentence
|
|
1463
|
+
* @returns {string}
|
|
1464
|
+
*/
|
|
1465
|
+
purgeSentence: function purgeSentence(sentence) {
|
|
1466
|
+
sentence = LeUtils.trimEnd(STRING(sentence).trim(), '.: \r\n\t');
|
|
1467
|
+
sentence += LeUtils.endsWithAny(sentence, '!?;') ? '' : '.';
|
|
1468
|
+
return sentence;
|
|
1469
|
+
},
|
|
1470
|
+
/**
|
|
1471
|
+
* Attempts to obtain and return an error message from the given error, regardless of what is passed to this function.
|
|
1472
|
+
*
|
|
1473
|
+
* @param {*} error
|
|
1474
|
+
* @returns {string}
|
|
1475
|
+
*/
|
|
1476
|
+
purgeErrorMessage: function purgeErrorMessage(error) {
|
|
1477
|
+
var _error$message;
|
|
1478
|
+
var message = STRING(typeof error === 'string' ? error : (_error$message = error.message) !== null && _error$message !== void 0 ? _error$message : JSON.stringify(error));
|
|
1479
|
+
var messageParts = message.split('threw an error:');
|
|
1480
|
+
return messageParts[messageParts.length - 1].trim();
|
|
1481
|
+
},
|
|
1482
|
+
/**
|
|
1483
|
+
* Generates all permutations of the given names.
|
|
1484
|
+
*
|
|
1485
|
+
* For example, if you pass "foo" and "bar", it will return:
|
|
1486
|
+
* - foobar
|
|
1487
|
+
* - fooBar
|
|
1488
|
+
* - FooBar
|
|
1489
|
+
* - foo-bar
|
|
1490
|
+
* - foo_bar
|
|
1491
|
+
*
|
|
1492
|
+
* @param {string} names
|
|
1493
|
+
* @returns {string[]}
|
|
1494
|
+
*/
|
|
1495
|
+
generateNamePermutations: function generateNamePermutations() {
|
|
1496
|
+
for (var _len = arguments.length, names = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
1497
|
+
names[_key] = arguments[_key];
|
|
1498
|
+
}
|
|
1499
|
+
names = LeUtils.flattenArray(names).map(function (name) {
|
|
1500
|
+
return STRING(name).trim().toLowerCase();
|
|
1501
|
+
}).filter(function (name) {
|
|
1502
|
+
return name.length > 0;
|
|
1503
|
+
});
|
|
1504
|
+
var results = [];
|
|
1505
|
+
if (names.length > 0) {
|
|
1506
|
+
results.push(names.join('')); //foobar
|
|
1507
|
+
results.push(names.map(LeUtils.capitalize).join('')); //FooBar
|
|
1508
|
+
}
|
|
1509
|
+
if (names.length > 1) {
|
|
1510
|
+
results.push([names[0]].concat(names.slice(1).map(LeUtils.capitalize)).join('')); //fooBar
|
|
1511
|
+
results.push(names.join('-')); //foo-bar
|
|
1512
|
+
results.push(names.join('_')); //foo_bar
|
|
1513
|
+
}
|
|
1514
|
+
return results;
|
|
1515
|
+
},
|
|
1516
|
+
/**
|
|
1517
|
+
* Increases the given numeric string by 1, this allows you to increase a numeric string without a limit.
|
|
1518
|
+
*
|
|
1519
|
+
* @param {string} string
|
|
1520
|
+
* @returns {string}
|
|
1521
|
+
*/
|
|
1522
|
+
increaseNumericStringByOne: function increaseNumericStringByOne(string) {
|
|
1523
|
+
if (typeof string !== 'string') {
|
|
1524
|
+
string = '' + string;
|
|
1525
|
+
for (var i = string.length - 1; i >= 0; i--) {
|
|
1526
|
+
var c = string.charAt(i);
|
|
1527
|
+
if (c < '0' || c > '9') {
|
|
1528
|
+
return '1';
|
|
1529
|
+
}
|
|
1530
|
+
}
|
|
1531
|
+
}
|
|
1532
|
+
if (string === '') {
|
|
1533
|
+
return '1';
|
|
1534
|
+
}
|
|
1535
|
+
for (var _i = string.length - 1; _i >= 0; _i--) {
|
|
1536
|
+
var _c = string.charAt(_i);
|
|
1537
|
+
if (_c < '0' || _c > '9') {
|
|
1538
|
+
return '1';
|
|
1539
|
+
}
|
|
1540
|
+
if (_c < '9') {
|
|
1541
|
+
_c++;
|
|
1542
|
+
string = string.substring(0, _i) + _c + string.substring(_i + 1); // string[i] = (char + 1);
|
|
1543
|
+
break;
|
|
1544
|
+
}
|
|
1545
|
+
string = string.substring(0, _i) + '0' + string.substring(_i + 1); // string[i] = '0';
|
|
1546
|
+
}
|
|
1547
|
+
if (string.charAt(0) === '0') {
|
|
1548
|
+
string = '1' + string;
|
|
1549
|
+
}
|
|
1550
|
+
return string;
|
|
1551
|
+
},
|
|
1552
|
+
/**
|
|
1553
|
+
* Generates a base64 string (with +/ replaced by -_) that is guaranteed to be unique.
|
|
1554
|
+
*
|
|
1555
|
+
* @returns {string}
|
|
1556
|
+
*/
|
|
1557
|
+
uniqueId: function () {
|
|
1558
|
+
var previousUniqueIdsTime = null;
|
|
1559
|
+
var previousUniqueIds = {};
|
|
1560
|
+
var numberToBytes = function numberToBytes(number) {
|
|
1561
|
+
var size = number === 0 ? 0 : Math.ceil((Math.floor(Math.log2(number)) + 1) / 8);
|
|
1562
|
+
var bytes = new Uint8ClampedArray(size);
|
|
1563
|
+
var x = number;
|
|
1564
|
+
for (var i = size - 1; i >= 0; i--) {
|
|
1565
|
+
var rightByte = x & 0xff;
|
|
1566
|
+
bytes[i] = rightByte;
|
|
1567
|
+
x = Math.floor(x / 0x100);
|
|
1568
|
+
}
|
|
1569
|
+
return bytes;
|
|
1570
|
+
};
|
|
1571
|
+
var generateUniqueId = function generateUniqueId() {
|
|
1572
|
+
var now;
|
|
1573
|
+
try {
|
|
1574
|
+
// noinspection JSDeprecatedSymbols
|
|
1575
|
+
now = (performance.timeOrigin || performance.timing.navigationStart) + performance.now();
|
|
1576
|
+
if (typeof now !== 'number') {
|
|
1577
|
+
throw new Error();
|
|
1578
|
+
}
|
|
1579
|
+
} catch (e) {
|
|
1580
|
+
now = Date.now ? Date.now() : new Date().getTime();
|
|
1581
|
+
}
|
|
1582
|
+
now = Math.round(now);
|
|
1583
|
+
var nowBytes = numberToBytes(now);
|
|
1584
|
+
var uuid = null;
|
|
1585
|
+
try {
|
|
1586
|
+
var _crypto;
|
|
1587
|
+
uuid = (_crypto = crypto) === null || _crypto === void 0 ? void 0 : _crypto.randomUUID();
|
|
1588
|
+
} catch (e) {}
|
|
1589
|
+
if (uuid) {
|
|
1590
|
+
uuid = LeUtils.base64ToBytes(LeUtils.hexToBase64(uuid));
|
|
1591
|
+
} else {
|
|
1592
|
+
var bytesChunkA = numberToBytes((Math.random() + ' ').substring(2, 12).padEnd(10, '0'));
|
|
1593
|
+
var bytesChunkB = numberToBytes((Math.random() + ' ').substring(2, 12).padEnd(10, '0'));
|
|
1594
|
+
var bytesChunkC = numberToBytes((Math.random() + ' ').substring(2, 12).padEnd(10, '0'));
|
|
1595
|
+
var bytesChunkD = numberToBytes((Math.random() + ' ').substring(2, 12).padEnd(10, '0'));
|
|
1596
|
+
uuid = new Uint8Array(bytesChunkA.length + bytesChunkB.length + bytesChunkC.length + bytesChunkD.length);
|
|
1597
|
+
uuid.set(bytesChunkA, 0);
|
|
1598
|
+
uuid.set(bytesChunkB, bytesChunkA.length);
|
|
1599
|
+
uuid.set(bytesChunkC, bytesChunkA.length + bytesChunkB.length);
|
|
1600
|
+
uuid.set(bytesChunkD, bytesChunkA.length + bytesChunkB.length + bytesChunkC.length);
|
|
1601
|
+
}
|
|
1602
|
+
var bytes = new Uint8Array(nowBytes.length + uuid.length);
|
|
1603
|
+
bytes.set(nowBytes, 0);
|
|
1604
|
+
bytes.set(uuid, nowBytes.length);
|
|
1605
|
+
uuid = LeUtils.bytesToBase64(bytes).replaceAll('=', '').replaceAll('+', '-').replaceAll('/', '_');
|
|
1606
|
+
return {
|
|
1607
|
+
time: now,
|
|
1608
|
+
id: uuid
|
|
1609
|
+
};
|
|
1610
|
+
};
|
|
1611
|
+
return function () {
|
|
1612
|
+
while (true) {
|
|
1613
|
+
var result = generateUniqueId();
|
|
1614
|
+
if (previousUniqueIdsTime !== result.time) {
|
|
1615
|
+
previousUniqueIdsTime = result.time;
|
|
1616
|
+
previousUniqueIds = _defineProperty({}, result.id, true);
|
|
1617
|
+
return result.id;
|
|
1618
|
+
} else if (previousUniqueIds[result.id] !== true) {
|
|
1619
|
+
previousUniqueIds[result.id] = true;
|
|
1620
|
+
return result.id;
|
|
1621
|
+
}
|
|
1622
|
+
}
|
|
1623
|
+
};
|
|
1624
|
+
}(),
|
|
1625
|
+
/**
|
|
1626
|
+
* Generates a base64 string (with +/ replaced by -_) of the current time (in milliseconds since 1970).
|
|
1627
|
+
*
|
|
1628
|
+
* @param {number} [now] Optional time to use instead of the current time. If not set, the current time will be used.
|
|
1629
|
+
* @returns {string}
|
|
1630
|
+
*/
|
|
1631
|
+
timestamp: function () {
|
|
1632
|
+
var numberToBytes = function numberToBytes(number) {
|
|
1633
|
+
var size = number === 0 ? 0 : Math.ceil((Math.floor(Math.log2(number)) + 1) / 8);
|
|
1634
|
+
var bytes = new Uint8ClampedArray(size);
|
|
1635
|
+
var x = number;
|
|
1636
|
+
for (var i = size - 1; i >= 0; i--) {
|
|
1637
|
+
var rightByte = x & 0xff;
|
|
1638
|
+
bytes[i] = rightByte;
|
|
1639
|
+
x = Math.floor(x / 0x100);
|
|
1640
|
+
}
|
|
1641
|
+
return bytes;
|
|
1642
|
+
};
|
|
1643
|
+
return function () {
|
|
1644
|
+
var now = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
|
|
1645
|
+
if (ISSET(now)) {
|
|
1646
|
+
now = FLOAT_LAX(now);
|
|
1647
|
+
} else {
|
|
1648
|
+
try {
|
|
1649
|
+
// noinspection JSDeprecatedSymbols
|
|
1650
|
+
now = (performance.timeOrigin || performance.timing.navigationStart) + performance.now();
|
|
1651
|
+
if (typeof now !== 'number') {
|
|
1652
|
+
throw new Error();
|
|
1653
|
+
}
|
|
1654
|
+
} catch (e) {
|
|
1655
|
+
now = Date.now ? Date.now() : new Date().getTime();
|
|
1656
|
+
}
|
|
1657
|
+
}
|
|
1658
|
+
now = Math.round(now);
|
|
1659
|
+
var nowBytes = numberToBytes(now);
|
|
1660
|
+
return LeUtils.bytesToBase64(nowBytes).replaceAll('=', '').replaceAll('+', '-').replaceAll('/', '_');
|
|
1661
|
+
};
|
|
1662
|
+
}(),
|
|
1663
|
+
/**
|
|
1664
|
+
* Returns a data URL of a 1x1 transparent pixel.
|
|
1665
|
+
*
|
|
1666
|
+
* @returns {string}
|
|
1667
|
+
*/
|
|
1668
|
+
getEmptyImageSrc: function getEmptyImageSrc() {
|
|
1669
|
+
// noinspection SpellCheckingInspection
|
|
1670
|
+
return 'data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==';
|
|
1671
|
+
},
|
|
1672
|
+
/**
|
|
1673
|
+
* Calculates and returns the percentage of the part and total ((part / total) * 100).
|
|
1674
|
+
*
|
|
1675
|
+
* @param {number|string} part
|
|
1676
|
+
* @param {number|string} total
|
|
1677
|
+
* @returns {number}
|
|
1678
|
+
*/
|
|
1679
|
+
getPercentage: function getPercentage(part, total) {
|
|
1680
|
+
part = FLOAT_LAX(part);
|
|
1681
|
+
total = FLOAT_LAX(total);
|
|
1682
|
+
if (total <= 0) {
|
|
1683
|
+
return 100;
|
|
1684
|
+
}
|
|
1685
|
+
return Math.max(0, Math.min(100, part / total * 100));
|
|
1686
|
+
},
|
|
1687
|
+
/**
|
|
1688
|
+
* Returns the pixels of the given Image object.
|
|
1689
|
+
*
|
|
1690
|
+
* @param {HTMLImageElement} image
|
|
1691
|
+
* @returns {Uint8ClampedArray}
|
|
1692
|
+
*/
|
|
1693
|
+
getImagePixels: function getImagePixels(image) {
|
|
1694
|
+
if (!document) {
|
|
1695
|
+
return new Uint8ClampedArray();
|
|
1696
|
+
}
|
|
1697
|
+
var canvas = document.createElement('canvas');
|
|
1698
|
+
document.body.appendChild(canvas);
|
|
1699
|
+
try {
|
|
1700
|
+
var ctx = canvas.getContext('2d');
|
|
1701
|
+
var width = Math.floor(image.width);
|
|
1702
|
+
var height = Math.floor(image.height);
|
|
1703
|
+
if (width <= 0 || height <= 0) {
|
|
1704
|
+
canvas.width = 1;
|
|
1705
|
+
canvas.height = 1;
|
|
1706
|
+
} else {
|
|
1707
|
+
canvas.width = width;
|
|
1708
|
+
canvas.height = height;
|
|
1709
|
+
ctx.drawImage(image, 0, 0, canvas.width, canvas.height);
|
|
1710
|
+
}
|
|
1711
|
+
return ctx.getImageData(0, 0, canvas.width, canvas.height).data;
|
|
1712
|
+
} finally {
|
|
1713
|
+
canvas.parentNode.removeChild(canvas);
|
|
1714
|
+
}
|
|
1715
|
+
},
|
|
1716
|
+
/**
|
|
1717
|
+
* Returns the data URL (mimetype "image/png") of a colored version of the given Image object.
|
|
1718
|
+
*
|
|
1719
|
+
* @param {HTMLImageElement} image
|
|
1720
|
+
* @param {string} color
|
|
1721
|
+
* @returns {string}
|
|
1722
|
+
*/
|
|
1723
|
+
getColoredImage: function getColoredImage(image, color) {
|
|
1724
|
+
if (!document) {
|
|
1725
|
+
return LeUtils.getEmptyImageSrc();
|
|
1726
|
+
}
|
|
1727
|
+
var canvas = document.createElement('canvas');
|
|
1728
|
+
document.body.appendChild(canvas);
|
|
1729
|
+
try {
|
|
1730
|
+
var ctx = canvas.getContext('2d');
|
|
1731
|
+
var width = Math.floor(image.width);
|
|
1732
|
+
var height = Math.floor(image.height);
|
|
1733
|
+
if (width <= 0 || height <= 0) {
|
|
1734
|
+
canvas.width = 1;
|
|
1735
|
+
canvas.height = 1;
|
|
1736
|
+
} else {
|
|
1737
|
+
canvas.width = width;
|
|
1738
|
+
canvas.height = height;
|
|
1739
|
+
ctx.drawImage(image, 0, 0, canvas.width, canvas.height);
|
|
1740
|
+
}
|
|
1741
|
+
ctx.globalCompositeOperation = 'source-in';
|
|
1742
|
+
ctx.fillStyle = color;
|
|
1743
|
+
ctx.fillRect(0, 0, canvas.width, canvas.height);
|
|
1744
|
+
return canvas.toDataURL('image/png');
|
|
1745
|
+
} finally {
|
|
1746
|
+
canvas.parentNode.removeChild(canvas);
|
|
1747
|
+
}
|
|
1748
|
+
},
|
|
1749
|
+
/**
|
|
1750
|
+
* Returns the hex color of the given RGB(A).
|
|
1751
|
+
*
|
|
1752
|
+
* @param {number[]} rgb
|
|
1753
|
+
* @returns {string}
|
|
1754
|
+
*/
|
|
1755
|
+
rgbToHex: function rgbToHex(rgb) {
|
|
1756
|
+
return '#' + rgb.map(function (x) {
|
|
1757
|
+
var hex = x.toString(16);
|
|
1758
|
+
return hex.length === 1 ? '0' + hex : hex;
|
|
1759
|
+
}).join('');
|
|
1760
|
+
},
|
|
1761
|
+
/**
|
|
1762
|
+
* Returns the RGB(A) of the given hex color.
|
|
1763
|
+
*
|
|
1764
|
+
* @param {string} hexstring
|
|
1765
|
+
* @returns {number[]}
|
|
1766
|
+
*/
|
|
1767
|
+
hexToRgb: function hexToRgb(hexstring) {
|
|
1768
|
+
hexstring = hexstring.replace(/[^0-9A-F]/gi, '');
|
|
1769
|
+
var hasAlpha = hexstring.length === 4 || hexstring.length === 8;
|
|
1770
|
+
while (hexstring.length < 6) {
|
|
1771
|
+
hexstring = hexstring.replace(/(.)/g, '$1$1');
|
|
1772
|
+
}
|
|
1773
|
+
var result = hexstring.match(/\w{2}/g).map(function (a) {
|
|
1774
|
+
return parseInt(a, 16);
|
|
1775
|
+
});
|
|
1776
|
+
return [result[0], result[1], result[2]].concat(_toConsumableArray(hasAlpha ? [result[3]] : []));
|
|
1777
|
+
},
|
|
1778
|
+
/**
|
|
1779
|
+
* Returns the HSL(A) of the given RGB(A).
|
|
1780
|
+
*
|
|
1781
|
+
* @param {number[]} rgb
|
|
1782
|
+
* @returns {number[]}
|
|
1783
|
+
*/
|
|
1784
|
+
rgbToHsl: function rgbToHsl(rgb) {
|
|
1785
|
+
var r = rgb[0] / 255;
|
|
1786
|
+
var g = rgb[1] / 255;
|
|
1787
|
+
var b = rgb[2] / 255;
|
|
1788
|
+
var max = Math.max(r, g, b);
|
|
1789
|
+
var min = Math.min(r, g, b);
|
|
1790
|
+
var h,
|
|
1791
|
+
s,
|
|
1792
|
+
l = (max + min) / 2;
|
|
1793
|
+
if (max === min) {
|
|
1794
|
+
h = s = 0;
|
|
1795
|
+
} else {
|
|
1796
|
+
var d = max - min;
|
|
1797
|
+
s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
|
|
1798
|
+
switch (max) {
|
|
1799
|
+
case r:
|
|
1800
|
+
h = (g - b) / d + (g < b ? 6 : 0);
|
|
1801
|
+
break;
|
|
1802
|
+
case g:
|
|
1803
|
+
h = (b - r) / d + 2;
|
|
1804
|
+
break;
|
|
1805
|
+
case b:
|
|
1806
|
+
h = (r - g) / d + 4;
|
|
1807
|
+
break;
|
|
1808
|
+
}
|
|
1809
|
+
h /= 6;
|
|
1810
|
+
}
|
|
1811
|
+
return [h, s, l].concat(_toConsumableArray(rgb.length >= 4 ? [rgb[3] / 255] : []));
|
|
1812
|
+
},
|
|
1813
|
+
/**
|
|
1814
|
+
* Returns the RGB(A) of the given HSL(A).
|
|
1815
|
+
*
|
|
1816
|
+
* @param {number[]} hsl
|
|
1817
|
+
* @returns {number[]}
|
|
1818
|
+
*/
|
|
1819
|
+
hslToRgb: function () {
|
|
1820
|
+
var hue2rgb = function hue2rgb(p, q, t) {
|
|
1821
|
+
if (t < 0) {
|
|
1822
|
+
t += 1;
|
|
1823
|
+
}
|
|
1824
|
+
if (t > 1) {
|
|
1825
|
+
t -= 1;
|
|
1826
|
+
}
|
|
1827
|
+
if (t < 1 / 6) {
|
|
1828
|
+
return p + (q - p) * 6 * t;
|
|
1829
|
+
}
|
|
1830
|
+
if (t < 1 / 2) {
|
|
1831
|
+
return q;
|
|
1832
|
+
}
|
|
1833
|
+
if (t < 2 / 3) {
|
|
1834
|
+
return p + (q - p) * (2 / 3 - t) * 6;
|
|
1835
|
+
}
|
|
1836
|
+
return p;
|
|
1837
|
+
};
|
|
1838
|
+
return function (hsl) {
|
|
1839
|
+
var h = hsl[0];
|
|
1840
|
+
var s = hsl[1];
|
|
1841
|
+
var l = hsl[2];
|
|
1842
|
+
var r, g, b;
|
|
1843
|
+
if (s === 0) {
|
|
1844
|
+
r = g = b = l;
|
|
1845
|
+
} else {
|
|
1846
|
+
var q = l < 0.5 ? l * (1 + s) : l + s - l * s;
|
|
1847
|
+
var p = 2 * l - q;
|
|
1848
|
+
r = hue2rgb(p, q, h + 1 / 3);
|
|
1849
|
+
g = hue2rgb(p, q, h);
|
|
1850
|
+
b = hue2rgb(p, q, h - 1 / 3);
|
|
1851
|
+
}
|
|
1852
|
+
return [r * 255, g * 255, b * 255].concat(_toConsumableArray(hsl.length >= 4 ? [hsl[3] * 255] : [])).map(function (c) {
|
|
1853
|
+
return Math.max(0, Math.min(255, Math.round(c)));
|
|
1854
|
+
});
|
|
1855
|
+
};
|
|
1856
|
+
}(),
|
|
1857
|
+
/**
|
|
1858
|
+
* Returns the LAB(A) of the given RGB(A).
|
|
1859
|
+
*
|
|
1860
|
+
* @param {number[]} rgb
|
|
1861
|
+
* @returns {number[]}
|
|
1862
|
+
*/
|
|
1863
|
+
rgbToLab: function rgbToLab(rgb) {
|
|
1864
|
+
var r = rgb[0] / 255;
|
|
1865
|
+
var g = rgb[1] / 255;
|
|
1866
|
+
var b = rgb[2] / 255;
|
|
1867
|
+
r = r > 0.04045 ? Math.pow((r + 0.055) / 1.055, 2.4) : r / 12.92;
|
|
1868
|
+
g = g > 0.04045 ? Math.pow((g + 0.055) / 1.055, 2.4) : g / 12.92;
|
|
1869
|
+
b = b > 0.04045 ? Math.pow((b + 0.055) / 1.055, 2.4) : b / 12.92;
|
|
1870
|
+
var x = (r * 0.4124 + g * 0.3576 + b * 0.1805) / 0.95047;
|
|
1871
|
+
var y = r * 0.2126 + g * 0.7152 + b * 0.0722;
|
|
1872
|
+
var z = (r * 0.0193 + g * 0.1192 + b * 0.9505) / 1.08883;
|
|
1873
|
+
x = x > 0.008856 ? Math.pow(x, 1 / 3) : 7.787 * x + 16 / 116;
|
|
1874
|
+
y = y > 0.008856 ? Math.pow(y, 1 / 3) : 7.787 * y + 16 / 116;
|
|
1875
|
+
z = z > 0.008856 ? Math.pow(z, 1 / 3) : 7.787 * z + 16 / 116;
|
|
1876
|
+
return [116 * y - 16, 500 * (x - y), 200 * (y - z)].concat(_toConsumableArray(rgb.length >= 4 ? [rgb[3] / 255] : []));
|
|
1877
|
+
},
|
|
1878
|
+
/**
|
|
1879
|
+
* Returns the difference (calculated with DeltaE) of the LAB values of the given RGB values.
|
|
1880
|
+
*
|
|
1881
|
+
* Returns a number:
|
|
1882
|
+
*
|
|
1883
|
+
* <pre>
|
|
1884
|
+
* < 1.0 is not perceptible by human eyes
|
|
1885
|
+
* 1-2 is perceptible through close observation
|
|
1886
|
+
* 2-10 is perceptible at a glance
|
|
1887
|
+
* 11-49 is more similar than opposite
|
|
1888
|
+
* 100 is exactly the opposite color
|
|
1889
|
+
* </pre>
|
|
1890
|
+
*
|
|
1891
|
+
* @param {number[]} rgbA
|
|
1892
|
+
* @param {number[]} rgbB
|
|
1893
|
+
* @returns {number}
|
|
1894
|
+
*/
|
|
1895
|
+
getDifferenceBetweenRgb: function getDifferenceBetweenRgb(rgbA, rgbB) {
|
|
1896
|
+
var labA = LeUtils.rgbToLab(rgbA);
|
|
1897
|
+
var labB = LeUtils.rgbToLab(rgbB);
|
|
1898
|
+
return LeUtils.getDifferenceBetweenLab(labA, labB);
|
|
1899
|
+
},
|
|
1900
|
+
/**
|
|
1901
|
+
* Returns the difference (calculated with DeltaE) of the given LAB values. Ignores the Alpha channel.
|
|
1902
|
+
*
|
|
1903
|
+
* Returns a number:
|
|
1904
|
+
*
|
|
1905
|
+
* <pre>
|
|
1906
|
+
* < 1.0 is not perceptible by human eyes
|
|
1907
|
+
* 1-2 is perceptible through close observation
|
|
1908
|
+
* 2-10 is perceptible at a glance
|
|
1909
|
+
* 11-49 is more similar than opposite
|
|
1910
|
+
* 100 is exactly the opposite color
|
|
1911
|
+
* </pre>
|
|
1912
|
+
*
|
|
1913
|
+
* @param {number[]} labA
|
|
1914
|
+
* @param {number[]} labB
|
|
1915
|
+
* @returns {number}
|
|
1916
|
+
*/
|
|
1917
|
+
getDifferenceBetweenLab: function getDifferenceBetweenLab(labA, labB) {
|
|
1918
|
+
var deltaL = labA[0] - labB[0];
|
|
1919
|
+
var deltaA = labA[1] - labB[1];
|
|
1920
|
+
var deltaB = labA[2] - labB[2];
|
|
1921
|
+
var c1 = Math.sqrt(labA[1] * labA[1] + labA[2] * labA[2]);
|
|
1922
|
+
var c2 = Math.sqrt(labB[1] * labB[1] + labB[2] * labB[2]);
|
|
1923
|
+
var deltaC = c1 - c2;
|
|
1924
|
+
var deltaH = deltaA * deltaA + deltaB * deltaB - deltaC * deltaC;
|
|
1925
|
+
deltaH = deltaH < 0 ? 0 : Math.sqrt(deltaH);
|
|
1926
|
+
var sc = 1.0 + 0.045 * c1;
|
|
1927
|
+
var sh = 1.0 + 0.015 * c1;
|
|
1928
|
+
var deltaLKlsl = deltaL / 1.0;
|
|
1929
|
+
var deltaCkcsc = deltaC / sc;
|
|
1930
|
+
var deltaHkhsh = deltaH / sh;
|
|
1931
|
+
var i = deltaLKlsl * deltaLKlsl + deltaCkcsc * deltaCkcsc + deltaHkhsh * deltaHkhsh;
|
|
1932
|
+
return i < 0 ? 0 : Math.sqrt(i);
|
|
1933
|
+
},
|
|
1934
|
+
/**
|
|
1935
|
+
* Returns the RGB(A) of the given RGB(A) values, based on the given percentage (0-100).
|
|
1936
|
+
* This allows you to define a gradient of colors to fade in between, rather than just having a start and an end color.
|
|
1937
|
+
*
|
|
1938
|
+
* Usage:
|
|
1939
|
+
*
|
|
1940
|
+
* <pre>
|
|
1941
|
+
* LeUtils.getRgbOfGradient({
|
|
1942
|
+
* 0: [255, 0, 0],
|
|
1943
|
+
* 33: [255, 255, 0],
|
|
1944
|
+
* 66: [0, 255, 0],
|
|
1945
|
+
* 100:[0, 255, 255],
|
|
1946
|
+
* }, 45.1234);
|
|
1947
|
+
* </pre>
|
|
1948
|
+
*
|
|
1949
|
+
* @param {{[percentage]: number[]}} gradient
|
|
1950
|
+
* @param {number} percentage
|
|
1951
|
+
* @returns {number[]}
|
|
1952
|
+
*/
|
|
1953
|
+
getRgbOfGradient: function getRgbOfGradient(gradient, percentage) {
|
|
1954
|
+
percentage = Math.max(0, Math.min(100, FLOAT_LAX(percentage)));
|
|
1955
|
+
var closest = null;
|
|
1956
|
+
LeUtils.each(gradient, function (color, percent) {
|
|
1957
|
+
percent = INT_LAX(percent);
|
|
1958
|
+
if (closest === null) {
|
|
1959
|
+
closest = [percent, Math.abs(percentage - percent)];
|
|
1960
|
+
} else {
|
|
1961
|
+
var difference = Math.abs(percentage - percent);
|
|
1962
|
+
if (difference < closest[1]) {
|
|
1963
|
+
closest = [percent, difference];
|
|
1964
|
+
}
|
|
1965
|
+
}
|
|
1966
|
+
});
|
|
1967
|
+
if (closest === null) {
|
|
1968
|
+
return null;
|
|
1969
|
+
}
|
|
1970
|
+
closest = closest[0];
|
|
1971
|
+
var higher = 99999;
|
|
1972
|
+
var lower = -99999;
|
|
1973
|
+
LeUtils.each(gradient, function (color, percent) {
|
|
1974
|
+
percent = INT_LAX(percent);
|
|
1975
|
+
if (percent < closest) {
|
|
1976
|
+
if (percent > lower) {
|
|
1977
|
+
lower = percent;
|
|
1978
|
+
}
|
|
1979
|
+
}
|
|
1980
|
+
if (percent > closest) {
|
|
1981
|
+
if (percent < higher) {
|
|
1982
|
+
higher = percent;
|
|
1983
|
+
}
|
|
1984
|
+
}
|
|
1985
|
+
});
|
|
1986
|
+
if (higher === 99999) {
|
|
1987
|
+
higher = null;
|
|
1988
|
+
}
|
|
1989
|
+
if (lower === -99999) {
|
|
1990
|
+
lower = null;
|
|
1991
|
+
}
|
|
1992
|
+
if (higher === null && lower === null || higher === lower) {
|
|
1993
|
+
return gradient[closest];
|
|
1994
|
+
} else if (higher !== null && lower !== null) {
|
|
1995
|
+
var higherDifference = Math.abs(higher - percentage);
|
|
1996
|
+
var lowerDifference = Math.abs(percentage - lower);
|
|
1997
|
+
if (higherDifference > lowerDifference) {
|
|
1998
|
+
higher = closest;
|
|
1999
|
+
} else {
|
|
2000
|
+
lower = closest;
|
|
2001
|
+
}
|
|
2002
|
+
} else if (lower === null) {
|
|
2003
|
+
lower = closest;
|
|
2004
|
+
} else {
|
|
2005
|
+
higher = closest;
|
|
2006
|
+
}
|
|
2007
|
+
if (lower > higher) {
|
|
2008
|
+
var tmp = higher;
|
|
2009
|
+
higher = lower;
|
|
2010
|
+
lower = tmp;
|
|
2011
|
+
}
|
|
2012
|
+
var total = higher - lower;
|
|
2013
|
+
var part = percentage - lower;
|
|
2014
|
+
return LeUtils.getRgbBetween(gradient[lower], gradient[higher], part / total * 100);
|
|
2015
|
+
},
|
|
2016
|
+
/**
|
|
2017
|
+
* Returns the RGB(A) between the two given RGB(A) values, based on the given percentage (0-100).
|
|
2018
|
+
*
|
|
2019
|
+
* @param {number[]} startRgb
|
|
2020
|
+
* @param {number[]} endRgb
|
|
2021
|
+
* @param {number} percentage
|
|
2022
|
+
* @returns {number[]}
|
|
2023
|
+
*/
|
|
2024
|
+
getRgbBetween: function getRgbBetween(startRgb, endRgb, percentage) {
|
|
2025
|
+
percentage = FLOAT_LAX(percentage);
|
|
2026
|
+
var partEnd = Math.max(0, Math.min(1, percentage / 100.0));
|
|
2027
|
+
var partStart = 1 - partEnd;
|
|
2028
|
+
var length = Math.min(startRgb.length, endRgb.length);
|
|
2029
|
+
var result = [];
|
|
2030
|
+
for (var i = 0; i < length; i++) {
|
|
2031
|
+
result.push(Math.max(0, Math.min(255, Math.round(startRgb[i] * partStart + endRgb[i] * partEnd))));
|
|
2032
|
+
}
|
|
2033
|
+
return result;
|
|
2034
|
+
},
|
|
2035
|
+
/**
|
|
2036
|
+
* An implementation of the btoa function, which should work in all environments.
|
|
2037
|
+
*
|
|
2038
|
+
* @param {string} string
|
|
2039
|
+
* @returns {string}
|
|
2040
|
+
*/
|
|
2041
|
+
btoa: function (_btoa) {
|
|
2042
|
+
function btoa(_x12) {
|
|
2043
|
+
return _btoa.apply(this, arguments);
|
|
2044
|
+
}
|
|
2045
|
+
btoa.toString = function () {
|
|
2046
|
+
return _btoa.toString();
|
|
2047
|
+
};
|
|
2048
|
+
return btoa;
|
|
2049
|
+
}(function (string) {
|
|
2050
|
+
if (typeof btoa === 'function') {
|
|
2051
|
+
return btoa(string);
|
|
2052
|
+
}
|
|
2053
|
+
return Buffer.from(string).toString('base64');
|
|
2054
|
+
}),
|
|
2055
|
+
/**
|
|
2056
|
+
* An implementation of the atob function, which should work in all environments.
|
|
2057
|
+
*
|
|
2058
|
+
* @param {string} base64string
|
|
2059
|
+
* @returns {string}
|
|
2060
|
+
*/
|
|
2061
|
+
atob: function (_atob) {
|
|
2062
|
+
function atob(_x13) {
|
|
2063
|
+
return _atob.apply(this, arguments);
|
|
2064
|
+
}
|
|
2065
|
+
atob.toString = function () {
|
|
2066
|
+
return _atob.toString();
|
|
2067
|
+
};
|
|
2068
|
+
return atob;
|
|
2069
|
+
}(function (base64string) {
|
|
2070
|
+
if (typeof atob === 'function') {
|
|
2071
|
+
return atob(base64string);
|
|
2072
|
+
}
|
|
2073
|
+
return Buffer.from(base64string, 'base64').toString();
|
|
2074
|
+
}),
|
|
2075
|
+
/**
|
|
2076
|
+
* Encodes a UTF-8 string into a base64 string.
|
|
2077
|
+
*
|
|
2078
|
+
* @param {string} string
|
|
2079
|
+
* @returns {string}
|
|
2080
|
+
*/
|
|
2081
|
+
utf8ToBase64: function utf8ToBase64(string) {
|
|
2082
|
+
return LeUtils.btoa(encodeURIComponent(string).replace(/%([0-9A-F]{2})/g, function (match, p1) {
|
|
2083
|
+
return String.fromCharCode(parseInt(p1, 16));
|
|
2084
|
+
}));
|
|
2085
|
+
},
|
|
2086
|
+
/**
|
|
2087
|
+
* Decodes a base64 string back into a UTF-8 string.
|
|
2088
|
+
*
|
|
2089
|
+
* @param {string} base64string
|
|
2090
|
+
* @returns {string}
|
|
2091
|
+
*/
|
|
2092
|
+
base64ToUtf8: function base64ToUtf8(base64string) {
|
|
2093
|
+
return decodeURIComponent(LeUtils.atob(base64string.trim()).split('').map(function (c) {
|
|
2094
|
+
return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
|
|
2095
|
+
}).join(''));
|
|
2096
|
+
},
|
|
2097
|
+
/**
|
|
2098
|
+
* Converts a base64 string into a hex string.
|
|
2099
|
+
*
|
|
2100
|
+
* @param {string} base64string
|
|
2101
|
+
* @returns {string}
|
|
2102
|
+
*/
|
|
2103
|
+
base64ToHex: function base64ToHex(base64string) {
|
|
2104
|
+
return LeUtils.atob(base64string.trim()).split('').map(function (c) {
|
|
2105
|
+
return ('0' + c.charCodeAt(0).toString(16)).slice(-2);
|
|
2106
|
+
}).join('');
|
|
2107
|
+
},
|
|
2108
|
+
/**
|
|
2109
|
+
* Converts a hex string into a base64 string.
|
|
2110
|
+
*
|
|
2111
|
+
* @param {string} hexstring
|
|
2112
|
+
* @returns {string}
|
|
2113
|
+
*/
|
|
2114
|
+
hexToBase64: function hexToBase64(hexstring) {
|
|
2115
|
+
return LeUtils.btoa(hexstring.replace(/[^0-9A-F]/gi, '').match(/\w{2}/g).map(function (a) {
|
|
2116
|
+
return String.fromCharCode(parseInt(a, 16));
|
|
2117
|
+
}).join(''));
|
|
2118
|
+
},
|
|
2119
|
+
/**
|
|
2120
|
+
* Converts a base64 string into bytes (Uint8Array).
|
|
2121
|
+
*
|
|
2122
|
+
* @param {string} base64string
|
|
2123
|
+
* @returns {Uint8Array}
|
|
2124
|
+
*/
|
|
2125
|
+
base64ToBytes: function base64ToBytes(base64string) {
|
|
2126
|
+
var binary = LeUtils.atob(base64string.trim());
|
|
2127
|
+
var len = binary.length;
|
|
2128
|
+
var data = new Uint8Array(len);
|
|
2129
|
+
for (var i = 0; i < len; i++) {
|
|
2130
|
+
data[i] = binary.charCodeAt(i);
|
|
2131
|
+
}
|
|
2132
|
+
return data;
|
|
2133
|
+
},
|
|
2134
|
+
/**
|
|
2135
|
+
* Converts bytes into a base64 string.
|
|
2136
|
+
*
|
|
2137
|
+
* @param {ArrayLike<number>|ArrayBufferLike} arraybuffer
|
|
2138
|
+
* @returns {string}
|
|
2139
|
+
*/
|
|
2140
|
+
bytesToBase64: function bytesToBase64(arraybuffer) {
|
|
2141
|
+
var bytes = new Uint8Array(arraybuffer);
|
|
2142
|
+
var len = bytes.byteLength;
|
|
2143
|
+
var binary = '';
|
|
2144
|
+
for (var i = 0; i < len; i++) {
|
|
2145
|
+
binary += String.fromCharCode(bytes[i]);
|
|
2146
|
+
}
|
|
2147
|
+
return LeUtils.btoa(binary);
|
|
2148
|
+
},
|
|
2149
|
+
/**
|
|
2150
|
+
* Downloads the given base64 string as a file.
|
|
2151
|
+
*
|
|
2152
|
+
* @param {string} base64string
|
|
2153
|
+
* @param {string} [fileName]
|
|
2154
|
+
* @param {string} [mimeType]
|
|
2155
|
+
*/
|
|
2156
|
+
downloadFile: function downloadFile(base64string, fileName, mimeType) {
|
|
2157
|
+
var link = document.createElement('a');
|
|
2158
|
+
link.setAttribute('download', typeof fileName === 'string' ? fileName : 'file');
|
|
2159
|
+
link.href = 'data:' + mimeType + ';base64,' + base64string;
|
|
2160
|
+
link.setAttribute('target', '_blank');
|
|
2161
|
+
link.click();
|
|
2162
|
+
},
|
|
2163
|
+
/**
|
|
2164
|
+
* Loads the value from the browser, returns undefined if the value doesn't exist.
|
|
2165
|
+
*
|
|
2166
|
+
* @param {string} id
|
|
2167
|
+
* @returns {*}
|
|
2168
|
+
*/
|
|
2169
|
+
localStorageGet: function localStorageGet(id) {
|
|
2170
|
+
if (typeof window === 'undefined') {
|
|
2171
|
+
return;
|
|
2172
|
+
}
|
|
2173
|
+
var result = window.localStorage.getItem('LeUtils_' + id);
|
|
2174
|
+
if (typeof result !== 'string') {
|
|
2175
|
+
return;
|
|
2176
|
+
}
|
|
2177
|
+
try {
|
|
2178
|
+
result = JSON.parse(result);
|
|
2179
|
+
if (typeof result['-'] !== 'undefined') {
|
|
2180
|
+
return result['-'];
|
|
2181
|
+
}
|
|
2182
|
+
} catch (e) {}
|
|
2183
|
+
},
|
|
2184
|
+
/**
|
|
2185
|
+
* Saves the given data in the browser.
|
|
2186
|
+
*
|
|
2187
|
+
* @param {string} id
|
|
2188
|
+
* @param {*} data
|
|
2189
|
+
*/
|
|
2190
|
+
localStorageSet: function localStorageSet(id, data) {
|
|
2191
|
+
if (typeof window === 'undefined') {
|
|
2192
|
+
return;
|
|
2193
|
+
}
|
|
2194
|
+
if (typeof data === 'undefined') {
|
|
2195
|
+
window.localStorage.removeItem('LeUtils_' + id);
|
|
2196
|
+
return;
|
|
2197
|
+
}
|
|
2198
|
+
window.localStorage.setItem('LeUtils_' + id, JSON.stringify({
|
|
2199
|
+
'-': data
|
|
2200
|
+
}));
|
|
2201
|
+
},
|
|
2202
|
+
/**
|
|
2203
|
+
* Removes the data from the browser.
|
|
2204
|
+
*
|
|
2205
|
+
* @param {string} id
|
|
2206
|
+
*/
|
|
2207
|
+
localStorageRemove: function localStorageRemove(id) {
|
|
2208
|
+
if (typeof window === 'undefined') {
|
|
2209
|
+
return;
|
|
2210
|
+
}
|
|
2211
|
+
window.localStorage.removeItem('LeUtils_' + id);
|
|
2212
|
+
},
|
|
2213
|
+
/**
|
|
2214
|
+
* Returns whether the current hostname (window.location.hostname) is private (such as localhost, 192.168.1.1, etc).
|
|
2215
|
+
* This can be used to determine if the app is running in a development environment or not.
|
|
2216
|
+
*
|
|
2217
|
+
* Only "localhost" and IPv4 addresses are supported. IPv6 addresses will always return false.
|
|
2218
|
+
*
|
|
2219
|
+
* @returns {boolean}
|
|
2220
|
+
*/
|
|
2221
|
+
isCurrentHostPrivate: function () {
|
|
2222
|
+
var lastHostname = null;
|
|
2223
|
+
var lastResult = false;
|
|
2224
|
+
return function () {
|
|
2225
|
+
if (typeof window === 'undefined') {
|
|
2226
|
+
return false; // server-side rendering, who knows to who it is being served to, assume it's public
|
|
2227
|
+
}
|
|
2228
|
+
var hostname = window.location.hostname;
|
|
2229
|
+
if (lastHostname === hostname) {
|
|
2230
|
+
return lastResult;
|
|
2231
|
+
}
|
|
2232
|
+
lastHostname = hostname;
|
|
2233
|
+
lastResult = LeUtils.isGivenHostPrivate(lastHostname);
|
|
2234
|
+
return lastResult;
|
|
2235
|
+
};
|
|
2236
|
+
}(),
|
|
2237
|
+
/**
|
|
2238
|
+
* Returns true if the given hostname is private (such as localhost, 192.168.1.1, etc).
|
|
2239
|
+
*
|
|
2240
|
+
* Only "localhost" and IPv4 addresses are supported. IPv6 addresses will always return false.
|
|
2241
|
+
*
|
|
2242
|
+
* @param {string} host
|
|
2243
|
+
* @returns {boolean}
|
|
2244
|
+
*/
|
|
2245
|
+
isGivenHostPrivate: function isGivenHostPrivate(host) {
|
|
2246
|
+
host = STRING(host).trim().toLowerCase();
|
|
2247
|
+
if (host === 'localhost' || host === '127.0.0.1') {
|
|
2248
|
+
return true;
|
|
2249
|
+
}
|
|
2250
|
+
if (!/^(\d{1,3}\.){3}\d{1,3}$/.test(host)) {
|
|
2251
|
+
return false;
|
|
2252
|
+
}
|
|
2253
|
+
var parts = host.split('.');
|
|
2254
|
+
return parts[0] === '10' ||
|
|
2255
|
+
// 10.0.0.0 - 10.255.255.255
|
|
2256
|
+
parts[0] === '172' && parseInt(parts[1], 10) >= 16 && parseInt(parts[1], 10) <= 31 ||
|
|
2257
|
+
// 172.16.0.0 - 172.31.255.255
|
|
2258
|
+
parts[0] === '192' && parts[1] === '168'; // 192.168.0.0 - 192.168.255.255
|
|
2259
|
+
},
|
|
2260
|
+
/**
|
|
2261
|
+
* Creates and returns a new TreeSet.
|
|
2262
|
+
* A TreeSet is a set of elements, sorted by a comparator.
|
|
2263
|
+
* Binary search is used to find elements, which makes it very fast to find elements.
|
|
2264
|
+
*
|
|
2265
|
+
* The comparator is also used to determine if two values are equal to each other.
|
|
2266
|
+
* This way, you can have values that aren't the same be treated as if they are. This can be used to deal with issues such as floating point errors for example.
|
|
2267
|
+
*
|
|
2268
|
+
* @param {*[]} elements
|
|
2269
|
+
* @param {Function} comparator
|
|
2270
|
+
* @returns {{getElements: (function(): *[]), getComparator: (function(): Function), size: (function(): number), isEmpty: (function(): boolean), contains: (function(*): boolean), first: (function(): *|undefined), last: (function(): *|undefined), pollFirst: (function(): *|undefined), pollLast: (function(): *|undefined), add: function(*), addAll: function(*[]|object), getEqualValue: (function(*): (*)), getEqualValueOrAdd: (function(*): (*))}}
|
|
2271
|
+
*/
|
|
2272
|
+
createTreeSet: function createTreeSet(elements, comparator) {
|
|
2273
|
+
comparator = comparator || LeUtils.compare;
|
|
2274
|
+
elements = elements || [];
|
|
2275
|
+
elements.sort(comparator);
|
|
2276
|
+
|
|
2277
|
+
/**
|
|
2278
|
+
* Performs a binary search on the elements, and returns the result.
|
|
2279
|
+
*
|
|
2280
|
+
* @param {*} value
|
|
2281
|
+
* @returns {{found: boolean, index: number, value: *|undefined}}
|
|
2282
|
+
*/
|
|
2283
|
+
var binarySearch = function binarySearch(value) {
|
|
2284
|
+
var low = 0;
|
|
2285
|
+
var high = elements.length - 1;
|
|
2286
|
+
while (low <= high) {
|
|
2287
|
+
var mid = Math.floor((low + high) / 2);
|
|
2288
|
+
var midValue = elements[mid];
|
|
2289
|
+
var cmp = comparator(midValue, value);
|
|
2290
|
+
if (cmp < 0) {
|
|
2291
|
+
low = mid + 1;
|
|
2292
|
+
} else if (cmp > 0) {
|
|
2293
|
+
high = mid - 1;
|
|
2294
|
+
} else {
|
|
2295
|
+
return {
|
|
2296
|
+
found: true,
|
|
2297
|
+
index: mid,
|
|
2298
|
+
value: midValue
|
|
2299
|
+
};
|
|
2300
|
+
}
|
|
2301
|
+
}
|
|
2302
|
+
return {
|
|
2303
|
+
found: false,
|
|
2304
|
+
index: low,
|
|
2305
|
+
value: undefined
|
|
2306
|
+
};
|
|
2307
|
+
};
|
|
2308
|
+
var treeSet = {
|
|
2309
|
+
/**
|
|
2310
|
+
* Returns the elements of the set.
|
|
2311
|
+
*
|
|
2312
|
+
* @returns {*[]}
|
|
2313
|
+
*/
|
|
2314
|
+
getElements: function getElements() {
|
|
2315
|
+
return elements;
|
|
2316
|
+
},
|
|
2317
|
+
/**
|
|
2318
|
+
* Returns the comparator of the set.
|
|
2319
|
+
*
|
|
2320
|
+
* @returns {Function}
|
|
2321
|
+
*/
|
|
2322
|
+
getComparator: function getComparator() {
|
|
2323
|
+
return comparator;
|
|
2324
|
+
},
|
|
2325
|
+
/**
|
|
2326
|
+
* Returns the size of the set.
|
|
2327
|
+
*
|
|
2328
|
+
* @returns {number}
|
|
2329
|
+
*/
|
|
2330
|
+
size: function size() {
|
|
2331
|
+
return elements.length;
|
|
2332
|
+
},
|
|
2333
|
+
/**
|
|
2334
|
+
* Returns true if the set is empty, false otherwise.
|
|
2335
|
+
*
|
|
2336
|
+
* @returns {boolean}
|
|
2337
|
+
*/
|
|
2338
|
+
isEmpty: function isEmpty() {
|
|
2339
|
+
return elements.length <= 0;
|
|
2340
|
+
},
|
|
2341
|
+
/**
|
|
2342
|
+
* Returns true if the set contains a value that is equal to the given value, returns false otherwise.
|
|
2343
|
+
*
|
|
2344
|
+
* @param {*} value
|
|
2345
|
+
* @returns {boolean}
|
|
2346
|
+
*/
|
|
2347
|
+
contains: function contains(value) {
|
|
2348
|
+
return binarySearch(value).found;
|
|
2349
|
+
},
|
|
2350
|
+
/**
|
|
2351
|
+
* Returns the first element of the set, or undefined if it is empty.
|
|
2352
|
+
*
|
|
2353
|
+
* @returns {*|undefined}
|
|
2354
|
+
*/
|
|
2355
|
+
first: function first() {
|
|
2356
|
+
return elements.length > 0 ? elements[0] : undefined;
|
|
2357
|
+
},
|
|
2358
|
+
/**
|
|
2359
|
+
* Returns the last element of the set, or undefined if it is empty.
|
|
2360
|
+
*
|
|
2361
|
+
* @returns {*|undefined}
|
|
2362
|
+
*/
|
|
2363
|
+
last: function last() {
|
|
2364
|
+
return elements.length > 0 ? elements[elements.length - 1] : undefined;
|
|
2365
|
+
},
|
|
2366
|
+
/**
|
|
2367
|
+
* Removes and returns the first element of the set, or undefined if it is empty.
|
|
2368
|
+
*
|
|
2369
|
+
* @returns {*|undefined}
|
|
2370
|
+
*/
|
|
2371
|
+
pollFirst: function pollFirst() {
|
|
2372
|
+
return elements.length > 0 ? elements.splice(0, 1)[0] : undefined;
|
|
2373
|
+
},
|
|
2374
|
+
/**
|
|
2375
|
+
* Removes and returns the last element of the set, or undefined if it is empty.
|
|
2376
|
+
*
|
|
2377
|
+
* @returns {*|undefined}
|
|
2378
|
+
*/
|
|
2379
|
+
pollLast: function pollLast() {
|
|
2380
|
+
return elements.length > 0 ? elements.splice(elements.length - 1, 1)[0] : undefined;
|
|
2381
|
+
},
|
|
2382
|
+
/**
|
|
2383
|
+
* Adds the given value to the set. Will only do so if no equal value already exists.
|
|
2384
|
+
*
|
|
2385
|
+
* @param {*} value
|
|
2386
|
+
*/
|
|
2387
|
+
add: function add(value) {
|
|
2388
|
+
var result = binarySearch(value);
|
|
2389
|
+
if (result.found) {
|
|
2390
|
+
return;
|
|
2391
|
+
}
|
|
2392
|
+
elements.splice(result.index, 0, value);
|
|
2393
|
+
},
|
|
2394
|
+
/**
|
|
2395
|
+
* Adds all the given values to the set. Will only do so if no equal value already exists.
|
|
2396
|
+
*
|
|
2397
|
+
* @param {*[]|object} values
|
|
2398
|
+
*/
|
|
2399
|
+
addAll: function addAll(values) {
|
|
2400
|
+
LeUtils.each(values, treeSet.add);
|
|
2401
|
+
},
|
|
2402
|
+
/**
|
|
2403
|
+
* Returns an equal value that's already in the tree set, or undefined if no equal values in it exist.
|
|
2404
|
+
*
|
|
2405
|
+
* @param {*} value
|
|
2406
|
+
* @returns {*|undefined}
|
|
2407
|
+
*/
|
|
2408
|
+
getEqualValue: function getEqualValue(value) {
|
|
2409
|
+
var result = binarySearch(value);
|
|
2410
|
+
if (result.found) {
|
|
2411
|
+
return result.value;
|
|
2412
|
+
}
|
|
2413
|
+
return undefined;
|
|
2414
|
+
},
|
|
2415
|
+
/**
|
|
2416
|
+
* Returns an equal value that's already in the tree set. If no equal values in it exist, the given value will be added and returned.
|
|
2417
|
+
*
|
|
2418
|
+
* @param {*} value
|
|
2419
|
+
* @returns {*}
|
|
2420
|
+
*/
|
|
2421
|
+
getEqualValueOrAdd: function getEqualValueOrAdd(value) {
|
|
2422
|
+
var result = binarySearch(value);
|
|
2423
|
+
if (result.found) {
|
|
2424
|
+
return result.value;
|
|
2425
|
+
}
|
|
2426
|
+
elements.splice(result.index, 0, value);
|
|
2427
|
+
return value;
|
|
2428
|
+
}
|
|
2429
|
+
};
|
|
2430
|
+
return treeSet;
|
|
2431
|
+
},
|
|
2432
|
+
/**
|
|
2433
|
+
* @typedef {Object} LeUtils~TransactionalValue
|
|
2434
|
+
* @property {*} value
|
|
2435
|
+
* @property {{id:string, value:*}[]} changes
|
|
2436
|
+
*/
|
|
2437
|
+
/**
|
|
2438
|
+
* Creates and returns a new TransactionalValue object.
|
|
2439
|
+
* With a TransactionalValue, you can keep track of changes to a value, and commit or cancel them.
|
|
2440
|
+
*
|
|
2441
|
+
* Multiple uncommitted changes can be made at the same time, the last change will be the one that overwrites older changes.
|
|
2442
|
+
* If that change is cancelled, the previous change will be the one that overwrites older changes.
|
|
2443
|
+
* This allows you to make multiple unconfirmed changes, and confirm or cancel each of them individually at any time.
|
|
2444
|
+
*
|
|
2445
|
+
* @param {*} [value]
|
|
2446
|
+
* @returns {LeUtils~TransactionalValue}
|
|
2447
|
+
*/
|
|
2448
|
+
createTransactionalValue: function createTransactionalValue(value) {
|
|
2449
|
+
if (typeof value === 'undefined') {
|
|
2450
|
+
value = null;
|
|
2451
|
+
}
|
|
2452
|
+
return {
|
|
2453
|
+
value: value,
|
|
2454
|
+
changes: []
|
|
2455
|
+
};
|
|
2456
|
+
},
|
|
2457
|
+
/**
|
|
2458
|
+
* Returns true if the given value is a valid TransactionalValue, returns false if it isn't.
|
|
2459
|
+
*
|
|
2460
|
+
* @param {LeUtils~TransactionalValue} transactionalValue
|
|
2461
|
+
* @returns {boolean}
|
|
2462
|
+
*/
|
|
2463
|
+
isTransactionalValueValid: function isTransactionalValueValid(transactionalValue) {
|
|
2464
|
+
return _typeof(transactionalValue) === 'object' && 'value' in transactionalValue && 'changes' in transactionalValue && Array.isArray(transactionalValue.changes);
|
|
2465
|
+
},
|
|
2466
|
+
/**
|
|
2467
|
+
* Returns true if the given value is a TransactionalValue, false otherwise.
|
|
2468
|
+
*
|
|
2469
|
+
* @param {LeUtils~TransactionalValue} transactionalValue
|
|
2470
|
+
* @returns {string}
|
|
2471
|
+
*/
|
|
2472
|
+
transactionalValueToString: function transactionalValueToString(transactionalValue) {
|
|
2473
|
+
if (!LeUtils.isTransactionalValueValid(transactionalValue)) {
|
|
2474
|
+
return transactionalValue + '';
|
|
2475
|
+
}
|
|
2476
|
+
if (transactionalValue.changes.length <= 0) {
|
|
2477
|
+
return '' + transactionalValue.value;
|
|
2478
|
+
}
|
|
2479
|
+
var valuesString = '' + transactionalValue.value;
|
|
2480
|
+
for (var i = 0; i < transactionalValue.changes.length; i++) {
|
|
2481
|
+
valuesString += ' -> ' + transactionalValue.changes[i].value;
|
|
2482
|
+
}
|
|
2483
|
+
return transactionalValue.changes[transactionalValue.changes.length - 1].value + ' (' + valuesString + ')';
|
|
2484
|
+
},
|
|
2485
|
+
/**
|
|
2486
|
+
* Sets the committed value of the given TransactionalValue to the given value. Clears out the previously uncommitted changes.
|
|
2487
|
+
*
|
|
2488
|
+
* @param {LeUtils~TransactionalValue} transactionalValue
|
|
2489
|
+
* @param {*} value
|
|
2490
|
+
*/
|
|
2491
|
+
transactionSetAndCommit: function transactionSetAndCommit(transactionalValue, value) {
|
|
2492
|
+
checkTransactionalValue(transactionalValue);
|
|
2493
|
+
if (typeof value === 'undefined') {
|
|
2494
|
+
value = null;
|
|
2495
|
+
}
|
|
2496
|
+
transactionalValue.value = value;
|
|
2497
|
+
transactionalValue.changes = [];
|
|
2498
|
+
},
|
|
2499
|
+
/**
|
|
2500
|
+
* Sets the value of the given TransactionalValue to the given value, without yet committing it, meaning it can be committed or cancelled later.
|
|
2501
|
+
* It returns the ID of the change, which can be used to commit or cancel the change later.
|
|
2502
|
+
*
|
|
2503
|
+
* @param {LeUtils~TransactionalValue} transactionalValue
|
|
2504
|
+
* @param {*} value
|
|
2505
|
+
* @returns {string}
|
|
2506
|
+
*/
|
|
2507
|
+
transactionSetWithoutCommitting: function transactionSetWithoutCommitting(transactionalValue, value) {
|
|
2508
|
+
checkTransactionalValue(transactionalValue);
|
|
2509
|
+
if (typeof value === 'undefined') {
|
|
2510
|
+
value = null;
|
|
2511
|
+
}
|
|
2512
|
+
var id = LeUtils.uniqueId();
|
|
2513
|
+
transactionalValue.changes.push({
|
|
2514
|
+
id: id,
|
|
2515
|
+
value: value
|
|
2516
|
+
});
|
|
2517
|
+
return id;
|
|
2518
|
+
},
|
|
2519
|
+
/**
|
|
2520
|
+
* Commits the change with the given ID, making it the new committed value.
|
|
2521
|
+
* Returns true if the change was found and committed, returns false if it was already overwritten by a newer committed change.
|
|
2522
|
+
*
|
|
2523
|
+
* @param {LeUtils~TransactionalValue} transactionalValue
|
|
2524
|
+
* @param {string} changeId
|
|
2525
|
+
* @returns {boolean}
|
|
2526
|
+
*/
|
|
2527
|
+
transactionCommitChange: function transactionCommitChange(transactionalValue, changeId) {
|
|
2528
|
+
checkTransactionalValue(transactionalValue);
|
|
2529
|
+
var change = findTransactionalValueChange(transactionalValue, changeId);
|
|
2530
|
+
if (change === null) {
|
|
2531
|
+
return false;
|
|
2532
|
+
}
|
|
2533
|
+
transactionalValue.value = change.value;
|
|
2534
|
+
transactionalValue.changes.splice(0, change.index + 1);
|
|
2535
|
+
return true;
|
|
2536
|
+
},
|
|
2537
|
+
/**
|
|
2538
|
+
* Cancels the change with the given ID, removing it from the uncommitted changes.
|
|
2539
|
+
* Returns true if the change was found and removed, returns false if it was already overwritten by a newer committed change.
|
|
2540
|
+
*
|
|
2541
|
+
* @param {LeUtils~TransactionalValue} transactionalValue
|
|
2542
|
+
* @param {string} changeId
|
|
2543
|
+
* @returns {boolean}
|
|
2544
|
+
*/
|
|
2545
|
+
transactionCancelChange: function transactionCancelChange(transactionalValue, changeId) {
|
|
2546
|
+
checkTransactionalValue(transactionalValue);
|
|
2547
|
+
var change = findTransactionalValueChange(transactionalValue, changeId);
|
|
2548
|
+
if (change === null) {
|
|
2549
|
+
return false;
|
|
2550
|
+
}
|
|
2551
|
+
transactionalValue.changes.splice(change.index, 1);
|
|
2552
|
+
return true;
|
|
2553
|
+
},
|
|
2554
|
+
/**
|
|
2555
|
+
* Returns true if the change was found, meaning it can still make a difference to the final committed value of this TransactionalValue.
|
|
2556
|
+
* Returns false if it was already overwritten by a newer committed change, meaning that this change can no longer make a difference to the final committed value of this TransactionalValue.
|
|
2557
|
+
*
|
|
2558
|
+
* @param {LeUtils~TransactionalValue} transactionalValue
|
|
2559
|
+
* @param {string} changeId
|
|
2560
|
+
* @returns {boolean}
|
|
2561
|
+
*/
|
|
2562
|
+
transactionIsChangeRelevant: function transactionIsChangeRelevant(transactionalValue, changeId) {
|
|
2563
|
+
checkTransactionalValue(transactionalValue);
|
|
2564
|
+
return findTransactionalValueChange(transactionalValue, changeId) !== null;
|
|
2565
|
+
},
|
|
2566
|
+
/**
|
|
2567
|
+
* Returns the committed value of the given TransactionalValue.
|
|
2568
|
+
*
|
|
2569
|
+
* @param {LeUtils~TransactionalValue} transactionalValue
|
|
2570
|
+
* @returns {*}
|
|
2571
|
+
*/
|
|
2572
|
+
transactionGetCommittedValue: function transactionGetCommittedValue(transactionalValue) {
|
|
2573
|
+
checkTransactionalValue(transactionalValue);
|
|
2574
|
+
return transactionalValue.value;
|
|
2575
|
+
},
|
|
2576
|
+
/**
|
|
2577
|
+
* Returns the value (including any uncommitted changes made to it) of the given TransactionalValue.
|
|
2578
|
+
*
|
|
2579
|
+
* @param {LeUtils~TransactionalValue} transactionalValue
|
|
2580
|
+
* @returns {*}
|
|
2581
|
+
*/
|
|
2582
|
+
transactionGetValue: function transactionGetValue(transactionalValue) {
|
|
2583
|
+
checkTransactionalValue(transactionalValue);
|
|
2584
|
+
if (transactionalValue.changes.length <= 0) {
|
|
2585
|
+
return transactionalValue.value;
|
|
2586
|
+
}
|
|
2587
|
+
return transactionalValue.changes[transactionalValue.changes.length - 1].value;
|
|
2588
|
+
},
|
|
2589
|
+
/**
|
|
2590
|
+
* Creates a worker thread. Workers have to be stored at /workers/{workerName}.worker.js for this to work.
|
|
2591
|
+
*
|
|
2592
|
+
* Example of a worker file:
|
|
2593
|
+
*
|
|
2594
|
+
* ```js
|
|
2595
|
+
* onmessage = (message) =>
|
|
2596
|
+
* {
|
|
2597
|
+
* postMessage({
|
|
2598
|
+
* ...message.data,
|
|
2599
|
+
* results: ['...some expensive calculation involving message.data...'],
|
|
2600
|
+
* });
|
|
2601
|
+
* };
|
|
2602
|
+
* ```
|
|
2603
|
+
*
|
|
2604
|
+
* Usage:
|
|
2605
|
+
*
|
|
2606
|
+
* ```js
|
|
2607
|
+
* const {results} = await (async () =>
|
|
2608
|
+
* {
|
|
2609
|
+
* try
|
|
2610
|
+
* {
|
|
2611
|
+
* return await LeUtils.sendWorkerMessage('my-worker', {someData:[1, 2, 3, 4, 5]});
|
|
2612
|
+
* }
|
|
2613
|
+
* catch(error)
|
|
2614
|
+
* {
|
|
2615
|
+
* console.error('MyWorker: ', error);
|
|
2616
|
+
* return {results:[]};
|
|
2617
|
+
* }
|
|
2618
|
+
* })();
|
|
2619
|
+
* ```
|
|
2620
|
+
*
|
|
2621
|
+
* or, if you want more control over the number of threads you have (the above example will only create 1 thread per worker):
|
|
2622
|
+
*
|
|
2623
|
+
* ```js
|
|
2624
|
+
* const myWorker1 = LeUtils.createWorkerThread('my-worker'); // creates a thread, you can create multiple worker threads of the same worker, to run multiple instances in parallel
|
|
2625
|
+
* const myWorker2 = LeUtils.createWorkerThread('my-worker'); // same worker, another thread
|
|
2626
|
+
* const {results} = await (async () =>
|
|
2627
|
+
* {
|
|
2628
|
+
* try
|
|
2629
|
+
* {
|
|
2630
|
+
* return await myWorker1.sendMessage({someData:[1, 2, 3, 4, 5]});
|
|
2631
|
+
* }
|
|
2632
|
+
* catch(error)
|
|
2633
|
+
* {
|
|
2634
|
+
* console.error('MyWorker: ', error);
|
|
2635
|
+
* return {results:[]};
|
|
2636
|
+
* }
|
|
2637
|
+
* })();
|
|
2638
|
+
* ```
|
|
2639
|
+
*
|
|
2640
|
+
* @param {string} name
|
|
2641
|
+
* @returns {{worker: Worker, sendMessage: function(Object, {timeout: number|undefined}|undefined): Promise<Object>}}
|
|
2642
|
+
*/
|
|
2643
|
+
createWorkerThread: function createWorkerThread(name) {
|
|
2644
|
+
var worker = new Worker('/workers/' + name + '.worker.js');
|
|
2645
|
+
var listeners = {};
|
|
2646
|
+
var addListener = function addListener(id, callback) {
|
|
2647
|
+
listeners[id] = callback;
|
|
2648
|
+
};
|
|
2649
|
+
var removeListener = function removeListener(id) {
|
|
2650
|
+
delete listeners[id];
|
|
2651
|
+
};
|
|
2652
|
+
var sendMessage = function sendMessage(data, options) {
|
|
2653
|
+
return new Promise(function (resolve, reject) {
|
|
2654
|
+
var _options$timeout;
|
|
2655
|
+
var id = LeUtils.uniqueId();
|
|
2656
|
+
addListener(id, resolve);
|
|
2657
|
+
setTimeout(function () {
|
|
2658
|
+
removeListener(id);
|
|
2659
|
+
reject('timeout');
|
|
2660
|
+
}, (_options$timeout = options === null || options === void 0 ? void 0 : options.timeout) !== null && _options$timeout !== void 0 ? _options$timeout : 10000);
|
|
2661
|
+
worker.postMessage(_objectSpread({
|
|
2662
|
+
id: id
|
|
2663
|
+
}, data));
|
|
2664
|
+
});
|
|
2665
|
+
};
|
|
2666
|
+
worker.onerror = function (error) {
|
|
2667
|
+
console.error('Worker ' + name + ':', error);
|
|
2668
|
+
};
|
|
2669
|
+
worker.onmessage = function (message) {
|
|
2670
|
+
var data = message.data;
|
|
2671
|
+
if (data !== null && data !== void 0 && data.id) {
|
|
2672
|
+
var callback = listeners[data.id];
|
|
2673
|
+
if (callback) {
|
|
2674
|
+
removeListener(data.id);
|
|
2675
|
+
callback(data);
|
|
2676
|
+
}
|
|
2677
|
+
}
|
|
2678
|
+
};
|
|
2679
|
+
return {
|
|
2680
|
+
worker: worker,
|
|
2681
|
+
sendMessage: sendMessage
|
|
2682
|
+
};
|
|
2683
|
+
},
|
|
2684
|
+
/**
|
|
2685
|
+
* Sends a message to the given worker. Creates a worker thread for this worker if it doesn't exist yet.
|
|
2686
|
+
*
|
|
2687
|
+
* See {@link LeUtils#createWorkerThread} for more info on how to use workers.
|
|
2688
|
+
*
|
|
2689
|
+
* @param {string} workerName
|
|
2690
|
+
* @param {Object} data
|
|
2691
|
+
* @param {{timeout: number|undefined}} [options]
|
|
2692
|
+
* @returns {Promise<Object>}
|
|
2693
|
+
*/
|
|
2694
|
+
sendWorkerMessage: function () {
|
|
2695
|
+
var workers = {};
|
|
2696
|
+
return function (workerName, data, options) {
|
|
2697
|
+
if (!workers[workerName]) {
|
|
2698
|
+
workers[workerName] = LeUtils.createWorkerThread(workerName);
|
|
2699
|
+
}
|
|
2700
|
+
return workers[workerName].sendMessage(data, options);
|
|
2701
|
+
};
|
|
2702
|
+
}(),
|
|
2703
|
+
/**
|
|
2704
|
+
* Returns a deep copy of the given value.
|
|
2705
|
+
*
|
|
2706
|
+
* @param {*} value
|
|
2707
|
+
* @returns {*}
|
|
2708
|
+
*/
|
|
2709
|
+
clone: function clone(value) {
|
|
2710
|
+
return CloneDeep(value, true);
|
|
2711
|
+
},
|
|
2712
|
+
/**
|
|
2713
|
+
* Purges the given email address, returning an empty string if it's invalid.
|
|
2714
|
+
*
|
|
2715
|
+
* @param {string} email
|
|
2716
|
+
* @returns {string}
|
|
2717
|
+
*/
|
|
2718
|
+
purgeEmail: function purgeEmail(email) {
|
|
2719
|
+
email = STRING(email).trim().toLowerCase().replace(/\s/g, '');
|
|
2720
|
+
if (!email.includes('@') || !email.includes('.')) {
|
|
2721
|
+
return '';
|
|
2722
|
+
}
|
|
2723
|
+
return email;
|
|
2724
|
+
},
|
|
2725
|
+
/**
|
|
2726
|
+
* Returns true if the focus is effectively clear, meaning that the user is not typing in an input field.
|
|
2727
|
+
*
|
|
2728
|
+
* @returns {boolean}
|
|
2729
|
+
*/
|
|
2730
|
+
isFocusClear: function () {
|
|
2731
|
+
var inputTypes = ['text', 'search', 'email', 'number', 'password', 'tel', 'time', 'url', 'week', 'month', 'date', 'datetime-local'];
|
|
2732
|
+
return function () {
|
|
2733
|
+
var _document, _document2;
|
|
2734
|
+
return !(((_document = document) === null || _document === void 0 || (_document = _document.activeElement) === null || _document === void 0 || (_document = _document.tagName) === null || _document === void 0 ? void 0 : _document.toLowerCase()) === 'input' && inputTypes.includes((_document2 = document) === null || _document2 === void 0 || (_document2 = _document2.activeElement) === null || _document2 === void 0 || (_document2 = _document2.type) === null || _document2 === void 0 ? void 0 : _document2.toLowerCase()));
|
|
2735
|
+
};
|
|
2736
|
+
}(),
|
|
2737
|
+
/**
|
|
2738
|
+
* Returns the user's locale. Returns 'en-US' if it can't be determined.
|
|
2739
|
+
*
|
|
2740
|
+
* @returns {string}
|
|
2741
|
+
*/
|
|
2742
|
+
getUserLocale: function () {
|
|
2743
|
+
var userLocale = null;
|
|
2744
|
+
return function () {
|
|
2745
|
+
if (userLocale === null) {
|
|
2746
|
+
userLocale = function () {
|
|
2747
|
+
if (typeof window === 'undefined') {
|
|
2748
|
+
return 'en-US';
|
|
2749
|
+
}
|
|
2750
|
+
var locales = window.navigator.languages;
|
|
2751
|
+
if (!IS_ARRAY(locales) || locales.length <= 0) {
|
|
2752
|
+
return 'en-US';
|
|
2753
|
+
}
|
|
2754
|
+
locales = locales.filter(function (locale) {
|
|
2755
|
+
return typeof locale === 'string' && locale.includes('-') && locale.toLowerCase() !== 'en-us';
|
|
2756
|
+
});
|
|
2757
|
+
if (locales.length <= 0) {
|
|
2758
|
+
return 'en-US';
|
|
2759
|
+
}
|
|
2760
|
+
var localesNoEnglish = locales.filter(function (locale) {
|
|
2761
|
+
return !locale.toLowerCase().startsWith('en-');
|
|
2762
|
+
});
|
|
2763
|
+
if (localesNoEnglish.length <= 0) {
|
|
2764
|
+
return locales[0];
|
|
2765
|
+
}
|
|
2766
|
+
return localesNoEnglish[0];
|
|
2767
|
+
}();
|
|
2768
|
+
}
|
|
2769
|
+
return userLocale;
|
|
2770
|
+
};
|
|
2771
|
+
}(),
|
|
2772
|
+
/**
|
|
2773
|
+
* Returns the user's locale date format. Always returns YYYY MM DD, with the character in between depending on the user's locale. Returns 'YYYY/MM/DD' if the user's locale can't be determined.
|
|
2774
|
+
*
|
|
2775
|
+
* @returns {string}
|
|
2776
|
+
*/
|
|
2777
|
+
getUserLocaleDateFormat: function () {
|
|
2778
|
+
var userLocaleDateFormat = null;
|
|
2779
|
+
return function () {
|
|
2780
|
+
if (userLocaleDateFormat === null) {
|
|
2781
|
+
userLocaleDateFormat = function () {
|
|
2782
|
+
var _char = '/';
|
|
2783
|
+
if (typeof window !== 'undefined' && typeof Intl !== 'undefined' && typeof Intl.DateTimeFormat !== 'undefined') {
|
|
2784
|
+
var formattedDate = new Intl.DateTimeFormat(LeUtils.getUserLocale()).format();
|
|
2785
|
+
if (formattedDate.includes('-')) {
|
|
2786
|
+
_char = '-';
|
|
2787
|
+
} else if (formattedDate.includes('. ')) {
|
|
2788
|
+
_char = '.';
|
|
2789
|
+
} else if (formattedDate.includes('.')) {
|
|
2790
|
+
_char = '.';
|
|
2791
|
+
}
|
|
2792
|
+
}
|
|
2793
|
+
return 'YYYY' + _char + 'MM' + _char + 'DD';
|
|
2794
|
+
}();
|
|
2795
|
+
}
|
|
2796
|
+
return userLocaleDateFormat;
|
|
2797
|
+
};
|
|
2798
|
+
}()
|
|
2799
|
+
};
|
|
2800
|
+
|
|
2801
|
+
export { ARRAY, FLOAT, FLOAT_ANY, FLOAT_LAX, FLOAT_LAX_ANY, INT, INT_ANY, INT_LAX, INT_LAX_ANY, ISSET, IS_ARRAY, IS_OBJECT, LeUtils, OBJECT, STRING, STRING_ANY };
|
|
2
2802
|
//# sourceMappingURL=index.js.map
|