UNPKG

tinybase

Version:

A reactive data store and sync engine.

2 lines (1 loc) 3.33 kB
const e=e=>void 0===e,t=e=>null===e,n=(r=e,(e,t,n)=>r(e)?n?.():t(e));var r;const s=e=>e.length,o=(e,t)=>e.includes(t),c=(e,t)=>e.forEach(t),i=e=>0==s(e),l=(e,...t)=>e.push(...t),a=e=>e.pop(),d=e=>e.shift(),u=e=>e?.size??0,h=(p=u,e=>{return t=(e,t)=>e+p(t),k(e).reduce(t,0);var t});var p;const v=(e,t)=>e?.has(t)??!1,g=t=>e(t)||0==u(t),k=e=>[...e?.values()??[]],C=(e,t)=>e?.forEach(t),f=(e,t)=>e?.delete(t),L=Object.freeze,w=e=>new Map(e),S=(e,t)=>e?.get(t),y=(t,n,r)=>e(r)?(f(t,n),t):t?.set(n,r),z=(e,t,n,r)=>(v(e,t)?r?.(S(e,t)):y(e,t,n()),S(e,t)),E=(e,t,r,o,c=0)=>n((r?z:S)(e,t[c],c>s(t)-2?r:w),n=>{if(c>s(t)-2)return o?.(n)&&y(e,t[c]),n;const i=E(n,t,r,o,c+1);return g(n)&&y(e,t[c]),i}),I=t=>new Set(Array.isArray(t)||e(t)?t:[t]),V=/^\d+$/,A=(()=>{const r=new WeakMap;return u=>{r.has(u)||r.set(u,(r=>{let u,p,k,A=100,F=w(),M=w(),_=1;const b=w(),j=w(),[x,B,O]=(()=>{let e;const[r,o]=(()=>{const e=[];let t=0;return[n=>(n?d(e):null)??""+t++,t=>{V.test(t)&&s(e)<1e3&&l(e,t)}]})(),i=w();return[(t,n,s,o=[],c=()=>[])=>{e??=te;const l=r(1);var a,d;return y(i,l,[t,n,s,o,c]),a=E(n,s??[""],I),d=l,a?.add(d),l},(n,r,...o)=>c(((e,n=[""])=>{const r=[],o=(e,i)=>i==s(n)?l(r,e):t(n[i])?C(e,e=>o(e,i+1)):c([n[i],null],t=>o(S(e,t),i+1));return o(e,0),r})(n,r),t=>C(t,t=>S(i,t)[0](e,...r??[],...o))),e=>n(S(i,e),([,t,n])=>(E(t,n??[""],void 0,t=>(f(t,e),g(t)?1:0)),y(i,e),o(e),n)),r=>n(S(i,r),([n,,r=[],o,i])=>{const l=(...a)=>{const d=s(a);d==s(r)?n(e,...a,...i(a)):t(r[d])?c(o[d]?.(...a)??[],e=>l(...a,e)):l(...a,r[d])};l()})]})(),T=w(),W=w(),$=[],m=[],q=(t,n)=>{_=0,r.transaction(()=>{const[s,o]=S(T,n);C(s,(n,s)=>C(n,(n,o)=>C(n,(n,c)=>((t,n,r,s,o)=>e(o)?t.delCell(n,r,s,!0):t.setCell(n,r,s,o))(r,s,o,c,n[t])))),C(o,(n,s)=>((t,n,r)=>e(r)?t.delValue(n):t.setValue(n,r))(r,s,n[t]))}),_=1},D=e=>{y(T,e),y(W,e),B(j,[e])},G=(e,t)=>c(((e,t)=>e.splice(0,t))(e,t??s(e)),D),H=()=>G($,s($)-A),J=()=>n(u,()=>{l($,u),H(),G(m),u=void 0,k=1}),K=()=>{u=a($),k=1};let N,P;const Q=(t="")=>(e(u)&&(u=""+p++,y(T,u,[F,M]),Z(u,t),F=w(),M=w(),k=1),u),R=()=>{i($)||(((e,...t)=>{e.unshift(...t)})(m,Q()),q(0,u),u=a($),k=1)},U=()=>{i(m)||(l($,u),u=d(m),q(1,u),k=1)},X=()=>{k&&(B(b),k=0)},Y=e=>{const t=Q(e);return X(),t},Z=(e,t)=>(ee(e)&&S(W,e)!==t&&(y(W,e,t),B(j,[e])),te),ee=e=>v(T,e),te={setSize:e=>(A=e,H(),te),addCheckpoint:Y,setCheckpoint:Z,getStore:()=>r,getCheckpointIds:()=>[[...$],u,[...m]],forEachCheckpoint:e=>{return t=e,C(W,(e,n)=>t(n,e));var t},hasCheckpoint:ee,getCheckpoint:e=>S(W,e),goBackward:()=>(R(),X(),te),goForward:()=>(U(),X(),te),goTo:t=>{const n=o($,t)?R:o(m,t)?U:void 0;for(;!e(n)&&t!=u;)n();return X(),te},addCheckpointIdsListener:e=>x(e,b),addCheckpointListener:(e,t)=>x(t,j,[e]),delListener:e=>(O(e),te),clear:()=>(G($),G(m),e(u)||D(u),u=void 0,p=0,Y(),te),clearForward:()=>(i(m)||(G(m),B(b)),te),destroy:()=>{r.delListener(N),r.delListener(P)},getListenerStats:()=>({checkpointIds:h(b),checkpoint:h(j)}),_registerListeners:()=>{N=r.addCellListener(null,null,null,(e,t,n,r,s,o)=>{if(_){J();const e=z(F,t,w),c=z(e,n,w),i=z(c,r,()=>[o,void 0]);i[1]=s,i[0]===s&&g(y(c,r))&&g(y(e,n))&&g(y(F,t))&&K(),X()}}),P=r.addValueListener(null,(e,t,n,r)=>{if(_){J();const e=z(M,t,()=>[r,void 0]);e[1]=n,e[0]===n&&g(y(M,t))&&K(),X()}})}};return L(te.clear())})(u));const p=r.get(u);return p._registerListeners(),p}})();export{A as createCheckpoints};