UNPKG

tinybase

Version:

A reactive data store and sync engine.

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