UNPKG

tinybase

Version:

A reactive data store and sync engine.

2 lines (1 loc) 3.91 kB
const e=e=>typeof e,t="",n=e(t),s=e=>t+e,r=e=>void 0===e,o=e=>null===e,d=(c=r,(e,t,n)=>c(e)?n?.():t(e));var c;const l=e=>Array.isArray(e),a=e=>e.length,i=(e,t)=>e.every(t),u=(e,t)=>i(e,(n,s)=>0==s||t(e[s-1],n)<=0),I=(e,t)=>e.sort(t),h=(e,t)=>e.forEach(t),f=(e,...t)=>e.push(...t),g=e=>t=>{return n=(t,n)=>t+e(n),p(t).reduce(n,0);var n},v=e=>e?.size??0,w=g(v),L=g(w),S=(e,t)=>e?.has(t)??!1,x=e=>r(e)||0==v(e),p=e=>[...e?.values()??[]],y=e=>e.clear(),R=(e,t)=>e?.forEach(t),E=(e,t)=>e?.delete(t),b=Object.freeze,T=Map,k=e=>new T(e),z=e=>[...e?.keys()??[]],A=(e,t)=>e?.get(t),C=(e,t)=>R(e,(e,n)=>t(n,e)),D=(e,t,n)=>r(n)?(E(e,t),e):e?.set(t,n),M=(e,t,n,s)=>(S(e,t)?s?.(A(e,t)):D(e,t,n()),A(e,t)),j=(e,t,n,s,r=0)=>d((n?M:A)(e,t[r],r>a(t)-2?n:k),o=>{if(r>a(t)-2)return s?.(o)&&D(e,t[r]),o;const d=j(o,t,n,s,r+1);return x(o)&&D(e,t[r]),d}),m=e=>new Set(l(e)||r(e)?e:[e]),O=(e,t)=>e?.add(t),W=(s,r)=>e(s)==n?e=>e(s):s??(()=>r??t),$=(e,t)=>(e??0)<(t??0)?-1:1,q=/^\d+$/,B=(()=>{const e=new WeakMap;return n=>(e.has(n)||e.set(n,(e=>{const n=k(),c=k(),[g,v,T]=(()=>{let e;const[n,s]=(()=>{const e=[];let n=0;return[s=>(s?e.shift():null)??t+n++,t=>{q.test(t)&&a(e)<1e3&&f(e,t)}]})(),r=k();return[(s,o,d,c=[],l=()=>[])=>{e??=Y;const a=n(1);return D(r,a,[s,o,d,c,l]),O(j(o,d??[t],m),a),a},(n,s,...d)=>h(((e,n=[t])=>{const s=[],r=(e,t)=>t==a(n)?f(s,e):o(n[t])?R(e,e=>r(e,t+1)):h([n[t],null],n=>r(A(e,n),t+1));return r(e,0),s})(n,s),t=>R(t,t=>A(r,t)[0](e,...s??[],...d))),e=>d(A(r,e),([,n,o])=>(j(n,o??[t],void 0,t=>(E(t,e),x(t)?1:0)),D(r,e),s(e),o)),t=>d(A(r,t),([t,,n=[],s,r])=>{const d=(...c)=>{const l=a(c);l==a(n)?t(e,...c,...r(c)):o(n[l])?h(s[l]?.(...c)??[],e=>d(...c,e)):d(...c,n[l])};d()})]})(),[B,F,G,H,J,K,N,,P,Q,U,V]=((e,t,n,s,o)=>{const c=e.hasRow,u=k(),I=k(),f=k(),g=k(),v=k(),w=k(),L=(t,n,...s)=>{const r=M(w,t,m);return h(s,t=>O(r,t)&&n&&e.callListener(t)),s},b=(t,...n)=>d(A(w,t),s=>{h(0==a(n)?p(s):n,t=>{e.delListener(t),E(s,t)}),x(s)&&D(w,t)}),T=(e,n)=>{D(u,e,n),S(I,e)||(D(I,e,t()),D(g,e,k()),D(v,e,k()),o(f))},j=e=>{D(u,e),D(I,e),D(g,e),D(v,e),b(e),o(f)};return[()=>e,()=>z(u),e=>C(I,e),e=>S(I,e),e=>A(u,e),e=>A(I,e),(e,t)=>D(I,e,t),T,(t,s,o,d,u)=>{T(t,s);const I=k(),f=k(),w=A(g,t),x=A(v,t),p=t=>{const o=n=>e.getCell(s,t,n),h=A(w,t),g=c(s,t)?n(d(o,t)):void 0;var v,L;if(h===g||l(h)&&l(g)&&(L=g,a(v=h)===a(L)&&i(v,(e,t)=>L[t]===e))||D(I,t,[h,g]),!r(u)){const e=A(x,t),n=c(s,t)?u(o,t):void 0;e!=n&&D(f,t,n)}},E=e=>{o(()=>{R(I,([,e],t)=>D(w,t,e)),R(f,(e,t)=>D(x,t,e))},I,f,w,x,e),y(I),y(f)};C(w,p),e.hasTable(s)&&h(e.getRowIds(s),e=>{S(w,e)||p(e)}),E(!0),b(t),L(t,0,e.addRowListener(s,null,(e,t,n)=>p(n)),e.addTableListener(s,()=>E()))},j,e=>s(e,f),()=>C(w,j),L,b]})(e,k,e=>{return r(e)?t:l(e)?(n=s,e.map(n)):s(e);var n},g,v),X=(t,n,s)=>{const r=J(t);R(s,(t,s)=>n(s,n=>R(t,t=>n(t,n=>e.forEachCell(r,t,n)))))},Y={setIndexDefinition:(e,t,s,o,a,i=$)=>{const f=r(a)?void 0:([e],[t])=>a(e,t);return P(e,t,(t,s,a,g,w,L)=>{let p=0;const y=m(),b=m(),T=K(e);if(R(s,([e,t],n)=>{const s=m(e),c=m(t);R(s,e=>E(c,e)?E(s,e):0),R(s,e=>{O(y,e),d(A(T,e),t=>{E(t,n),x(t)&&(D(T,e),p=1)})}),R(c,e=>{O(y,e),S(T,e)||(D(T,e,m()),p=1),O(A(T,e),n),r(o)||O(b,e)})}),t(),x(w)||(L?C(T,e=>O(b,e)):C(a,e=>d(A(g,e),e=>h(l(e)?e:[e],e=>O(b,e)))),R(b,e=>{const t=(t,n)=>i(A(w,t),A(w,n),e),n=[...A(T,e)];u(n,t)||(D(T,e,m(I(n,t))),O(y,e))})),(p||L)&&!r(f)){const t=[...T];u(t,f)||(N(e,k(I(t,f))),p=1)}p&&v(n,[e]),R(y,t=>v(c,[e,t]))},W(s),d(o,W)),Y},delIndexDefinition:e=>(Q(e),Y),getStore:B,getIndexIds:F,forEachIndex:e=>G((t,n)=>e(t,e=>X(t,e,n))),forEachSlice:(e,t)=>X(e,t,K(e)),hasIndex:H,hasSlice:(e,t)=>S(K(e),t),getTableId:J,getSliceIds:e=>z(K(e)),getSliceRowIds:(e,t)=>p(A(K(e),t)),addIndexIdsListener:U,addSliceIdsListener:(e,t)=>g(t,n,[e]),addSliceRowIdsListener:(e,t,n)=>g(n,c,[e,t]),delListener:e=>(T(e),Y),destroy:V,getListenerStats:()=>({sliceIds:w(n),sliceRowIds:L(c)})};return b(Y)})(n)),e.get(n))})();export{B as createIndexes};