com-tools
Version:
com-tools 提供了一些通用的工具函数;
2 lines (1 loc) • 6.09 kB
JavaScript
var ComTools=function(l){"use strict";var X=Object.defineProperty;var G=(l,m,b)=>m in l?X(l,m,{enumerable:!0,configurable:!0,writable:!0,value:b}):l[m]=b;var _=(l,m,b)=>G(l,typeof m!="symbol"?m+"":m,b);function m(e,t){return JSON.stringify(e)==JSON.stringify(t)}function b({loopCall:e,complete:t,stepComplete:n,thisValue:i,total:r=Number.POSITIVE_INFINITY,step:u=50,delay:f=0}){let o=0,s=0,v=!1;function d(y){y&&(v=y,t&&t.call(i,v,o,s,r))}function h(){let y=o<r;return!y&&t&&t.call(i,!1,o-1,s,r),y}let g=null;function c(){s++;let y=Math.min(o+u,r);function P(){return o<y}for(;P()&&!v;)d(e.call(i,o,s,r)),o++;n&&d(n.call(i,o-1,s,r)),h()&&!v&&(g=setTimeout(c,f))}function a(y){y||(y=!0),clearTimeout(g),d(y)}return h()&&c(),a}let F={multipleLoop:{configurable:!0,writable:!0,enumerable:!1,value:function({loopCall:e,complete:t,stepComplete:n,thisValue:i,step:r,delay:u}){i&&(i=this);let f={loopCall:(o,s)=>e.call(i,this[o],o,s,this),total:this.length,step:r,delay:u};return t&&(f.complete=(o,s,v)=>t.call(i,o,s,v,this)),n&&(f.stepComplete=(o,s)=>n.call(i,o,s,this)),b(f)}}};Object.defineProperties(Array.prototype,F);function S(e,t,n){n==null&&(n=e);let i=[];for(let u of e)i.push(u);return i.filter(function(u){let f=this.indexOf(u);return t.call(n,u,f,e)},i)}function N(e,t,n){let{ready:i=t+"Ready",noEvent:r,event:u=t+"Change",newValueKey:f="value",oldValueKey:o="oldValue",getDefault:s}=n||{},v="_"+i,d="_"+t;if(Object.defineProperty(e,i,{configurable:!0,enumerable:!0,get:function(){let c=this||window;if(!c[v]){let a=c[d];a?c[v]=Promise.resolve(a):c[v]=L()}return c[v]},set:function(c){let a=this||window;a[v]=c}}),s)var h=function(){let c=this||window;return!c[d]&&s&&(c[t]=s.call(c,c)),c[d]};else h=function(){return(this||window)[d]};if(r)var g=function(c){let a=this||window;if(c&&c!==a[d]){a[d]=c;let y=a[i];y.resolve?y.resolve(c):a[i]=Promise.resolve(c)}};else g=function(c){let a=this||window;if(c&&c!==a[d]){let y=a[d];a[d]=c;let P=a[i];P.resolve?P.resolve(c):a[i]=Promise.resolve(c);let E=new Event(u,{bubbles:!0});E[f]=c,E[o]=y,window.dispatchEvent(E)}};return Object.defineProperty(e,t,{configurable:!0,enumerable:!0,get:h,set:g}),e}function j(e,t,n){var i=t;return Array.isArray(t)&&(i=t.reduce(function(r,u){return r[u]=n,r},{})),Object.keys(i).forEach(function(r){let u=i[r];N(e,r,u)}),e}function D(e,t,n,i){let r="_"+t;if(i)var u=n;else n?u=function(){let f=this||window;return!f[r]&&n&&(f[t]=n.call(f,f)),f[r]}:u=function(){return(this||window)[r]};Object.defineProperty(e,t,{configurable:!0,enumerable:!0,get:u})}function I(){var e=new Date;return e.getTime().toString()+Math.random()}function L(e,t){let n=typeof e=="function";n&&t==null&&(t=!0);var i={};function r(){o.resolve=void 0,o.reject=void 0,o.clearAdditions=void 0}function u(s){r(),i.resolve(s)}function f(s){r(),i.reject(s)}var o=new Promise(function(s,v){if(i.resolve=s,i.reject=v,n)if(t)setTimeout(e,0,u,f);else return e(u,f)});return o.clearAdditions=r,o.resolve=u,o.reject=f,o}function M(e,t,n,i){var{get:r=!0,set:u=!0,configurable:f=!0,enumerable:o=!0,getDefault:s,setDefault:v}=i||{},d={configurable:f,enumerable:o};return r&&(d.get=function(){var h=t[n];return h===void 0?s:h}),u&&(d.set=function(h){h=h===void 0?v:h,t[n]=h}),Object.defineProperty(e,n,d),e}function R(e,t,n,i){var r=n;return Array.isArray(n)&&(r=n.reduce(function(u,f){return u[f]=i,u},{})),Object.keys(r).forEach(function(u){let f=r[u];M(e,t,u,f)}),e}function T(e){return new Function(`"use strict"; return (${e})`)()}function C(e){const t=$(e);return t.prototype=Object.create(e.prototype),t.prototype.constructor=t,t}function $(e){return A(e.toString(),e.name,!0)}const q=/(^\s*(async\s+)?function\s*(\s|\*)\s*)[A-Za-z_$]+[\w$]*(\s*\()/,J=/^[A-Za-z_$]+[\w$]*$/;function A(e,t,n){const i=q,r=J,u=i.test(e),f=t&&r.test(t);if(u&&f&&!n&&(e=e.replace(i,`$1${t}$4`)),!u&&f)var o=`"use strict"; var ${t} = ${e} ; return ${t}`;else o=`"use strict"; return (${e})`;return new Function(o)()}function U(e){return function(){return new.target?new e(...arguments):e.apply(this,arguments)}}class W{constructor(){_(this,"_decided",!1);_(this,"listeners",[]);_(this,"_value")}get decided(){return this._decided}get value(){return this._value}set value(t){this._value=t,this.resolve()}resolve(){this._decided=!0;const t=this.value;for(const n of this.listeners)n(t);this.listeners=[],this.then=function(n){n(this.value)}}then(t){this.listeners.push(t)}static resolve(t){const n=new this;return n.value=t,n}}function w(e,t){if(t.length===0)return e;for(let n=0;n<t.length;n++){if(e==null)return;e=e[t[n]]}return e}function O(e,t,n){t.length===0&&Object.assign(e,n);const i=t.length-1;for(let r=0;r<i;r++){const u=t[r];e[u]==null&&(e[u]=typeof t[r+1]=="number"?[]:{}),e=e[u]}e[t[i]]=n}function B(e,t,n){const i=typeof n=="function"?n:()=>n;let r=w(e,t);return r===void 0&&(r=i(),O(e,t,r)),r}function k(e,t,n){const i=typeof n=="function"?n:()=>n;let r=w(e,t);return r===void 0&&(r=i(),r instanceof Promise?r.then(u=>O(e,t,u)):O(e,t,r)),r}function z(e,t){if(t.length===0)return!0;const n=t.length-1;for(let i=0;i<n;i++){if(e==null)return!1;e=e[t[i]]}return e==null?!1:delete e[t[n]]}function K(e){return Object.keys(e).forEach(t=>e[t]===void 0&&delete e[t]),e}function Z(e){return Object.keys(e).forEach(t=>e[t]==null&&delete e[t]),e}function Y(e,t){return t.some(n=>e.includes(n))}function H(e,t){return t.some(n=>n.test(e))}function Q(e,t){return t.some(function(n){return typeof n=="string"?e.includes(n):n.test(e)})}return l.Decide=W,l.betterEval=T,l.copyConstructor=C,l.copyFunction=$,l.createControllablePromise=L,l.createFunctionBy=A,l.createSingleton=U,l.createUniqueIdentifier=I,l.defineListenableProperties=j,l.defineListenableProperty=N,l.defineListenablePropertyGetter=D,l.defineProxyProperties=R,l.defineProxyProperty=M,l.deleteMember=z,l.getMember=w,l.getMemberWithAsyncDefault=k,l.getMemberWithDefault=B,l.includesPatterns=Q,l.includesRegExps=H,l.includesStrings=Y,l.isEqualByJSON=m,l.multipleLoop=b,l.removeNull=Z,l.removeUndefined=K,l.safelyIterate=S,l.setMember=O,Object.defineProperty(l,Symbol.toStringTag,{value:"Module"}),l}({});