UNPKG

tinybase

Version:

A reactive data store and sync engine.

2 lines (1 loc) 3.72 kB
const e=e=>typeof e,t="",r=e(t),n=e(e),s=Math,i=s.max,o=s.min,c=isFinite,a=e=>null==e,d=(e,t,r)=>a(e)?r?.():t(e),l=e=>Array.isArray(e),u=e=>e.length,v=()=>{},h=(e,t)=>e.forEach(t),f=e=>g(e,((e,t)=>e+t),0),g=(e,t,r)=>e.reduce(t,r),M=(e,...t)=>e.push(...t),L=e=>e?.size??0,m=(w=L,e=>g(b(e),((e,t)=>e+w(t)),0));var w;const y=(e,t)=>e?.has(t)??!1,p=e=>a(e)||0==L(e),b=e=>[...e?.values()??[]],I=e=>e.clear(),x=(e,t)=>e?.forEach(t),E=(e,t)=>e?.delete(t),R=Object.freeze,S=e=>new Map(e),T=(e,t)=>e?.get(t),k=(e,t)=>x(e,((e,r)=>t(r,e))),z=(e,t,r)=>a(r)?(E(e,t),e):e?.set(t,r),A=(e,t,r,n)=>(y(e,t)?n?.(T(e,t)):z(e,t,r()),T(e,t)),D=(e,t,r,n,s=0)=>d((r?A:T)(e,t[s],s>u(t)-2?r:S),(i=>{if(s>u(t)-2)return n?.(i)&&z(e,t[s]),i;const o=D(i,t,r,n,s+1);return p(i)&&z(e,t[s]),o})),N=S([["avg",[(e,t)=>f(e)/t,(e,t,r)=>e+(t-e)/(r+1),(e,t,r)=>e+(e-t)/(r-1),(e,t,r,n)=>e+(t-r)/n]],["max",[e=>i(...e),(e,t)=>i(t,e),(e,t)=>t==e?void 0:e,(e,t,r)=>r==e?void 0:i(t,e)]],["min",[e=>o(...e),(e,t)=>o(t,e),(e,t)=>t==e?void 0:e,(e,t,r)=>r==e?void 0:o(t,e)]],["sum",[e=>f(e),(e,t)=>e+t,(e,t)=>e-t,(e,t,r)=>e-r+t]]]),j=e=>new Set(l(e)||a(e)?e:[e]),C=(e,t)=>e?.add(t),F=/^\d+$/,O=(()=>{const s=new WeakMap;return i=>(s.has(i)||s.set(i,(s=>{const i=S(),[o,f,g]=(()=>{let e;const[r,n]=(()=>{const e=[];let r=0;return[n=>(n?e.shift():null)??t+r++,t=>{F.test(t)&&u(e)<1e3&&M(e,t)}]})(),s=S();return[(n,i,o,c=[],a=()=>[])=>{e??=Q;const d=r(1);return z(s,d,[n,i,o,c,a]),C(D(i,o??[t],j),d),d},(r,n,...i)=>h(((e,r=[t])=>{const n=[],s=(e,t)=>t==u(r)?M(n,e):null===r[t]?x(e,(e=>s(e,t+1))):h([r[t],null],(r=>s(T(e,r),t+1)));return s(e,0),n})(r,n),(t=>x(t,(t=>T(s,t)[0](e,...n??[],...i))))),e=>d(T(s,e),(([,r,i])=>(D(r,i??[t],void 0,(t=>(E(t,e),p(t)?1:0))),z(s,e),n(e),i))),t=>d(T(s,t),(([t,,r=[],n,s])=>{const i=(...o)=>{const c=u(o);c==u(r)?t(e,...o,...s(o)):a(r[c])?h(n[c]?.(...o)??[],(e=>i(...o,e))):i(...o,r[c])};i()}))]})(),[w,O,W,$,q,B,G,,H,J,K,P]=((e,r,n,s,i)=>{const o=e.hasRow,c=S(),v=S(),f=S(),g=S(),M=S(),L=S(),m=(t,r,...n)=>{const s=A(L,t,j);return h(n,(t=>C(s,t)&&r&&e.callListener(t))),n},w=(t,...r)=>d(T(L,t),(n=>{h(0==u(r)?b(n):r,(t=>{e.delListener(t),E(n,t)})),p(n)&&z(L,t)})),R=(e,t)=>{z(c,e,t),y(v,e)||(z(v,e,r()),z(g,e,S()),z(M,e,S()),i(f))},D=e=>{z(c,e),z(v,e),z(g,e),z(M,e),w(e),i(f)};return[()=>e,()=>{return e=c,[...e?.keys()??[]];var e},e=>k(v,e),e=>y(v,e),e=>T(c,e),e=>T(v,e),(e,t)=>z(v,e,t),R,(r,n,s,i,c)=>{R(r,n);const d=S(),v=S(),f=T(g,r),L=T(M,r),p=r=>{const s=t=>e.getCell(n,r,t),h=T(f,r),g=o(n,r)?(M=i(s,r),isNaN(M)||a(M)||!0===M||!1===M||M===t?void 0:1*M):void 0;var M,m,w,y;if(h===g||l(h)&&l(g)&&(w=g,u(m=h)===u(w)&&(y=(e,t)=>w[t]===e,m.every(y)))||z(d,r,[h,g]),!a(c)){const e=T(L,r),t=o(n,r)?c(s,r):void 0;e!=t&&z(v,r,t)}},b=e=>{s((()=>{x(d,(([,e],t)=>z(f,t,e))),x(v,((e,t)=>z(L,t,e)))}),d,v,f,L,e),I(d),I(v)};k(f,p),e.hasTable(n)&&h(e.getRowIds(n),(e=>{y(f,e)||p(e)})),b(!0),w(r),m(r,0,e.addRowListener(n,null,((e,t,r)=>p(r))),e.addTableListener(n,(()=>b())))},D,e=>s(e,f),()=>k(L,D),m,w]})(s,v,0,o,f),Q={setMetricDefinition:(t,s,o,d,l,u,v)=>{const h=e(o)==n?[o,l,u,v]:T(N,o)??T(N,"sum");return H(t,s,((e,r,n,s,o,d)=>{const l=B(t),u=L(s);d||=a(l),e();let v=((e,t,r,n,s,i=!1)=>{if(p(r))return;const[o,c,d,l]=s;return i||=a(e),x(n,(([r,n])=>{i||(e=a(r)?c?.(e,n,t++):a(n)?d?.(e,r,t--):l?.(e,n,r,t),i||=a(e))})),i?o(b(r),L(r)):e})(l,u,s,r,h,d);c(v)||(v=void 0),v!=l&&(G(t,v),f(i,[t],v,l))}),e(g=d)==r?e=>e(g):g??(()=>1)),Q;var g},delMetricDefinition:e=>(J(e),Q),getStore:w,getMetricIds:O,forEachMetric:W,hasMetric:$,getTableId:q,getMetric:B,addMetricIdsListener:K,addMetricListener:(e,t)=>o(t,i,[e]),delListener:e=>(g(e),Q),destroy:P,getListenerStats:()=>({metric:m(i)})};return R(Q)})(i)),s.get(i))})();export{O as createMetrics};