UNPKG

tinybase

Version:

A reactive data store and sync engine.

2 lines (1 loc) 3.85 kB
const e=e=>typeof e,t="",n=e(t),r=e=>void 0===e,o=e=>null===e,s=(a=r,(e,t,n)=>a(e)?n?.():t(e));var a;const i=e=>Array.isArray(e),d=e=>e.length,l=(e,t)=>e.forEach(t),c=(e,...t)=>e.push(...t),u=e=>t=>{return n=(t,n)=>t+e(n),I(t).reduce(n,0);var n},R=e=>e?.size??0,h=u(R),w=u(h),f=(e,t)=>e?.has(t)??!1,L=e=>r(e)||0==R(e),I=e=>[...e?.values()??[]],g=e=>e.clear(),v=(e,t)=>e?.forEach(t),p=(e,t)=>e?.delete(t),y=Object.freeze,b=e=>new Map(e),k=(e,t)=>e?.get(t),m=(e,t)=>v(e,(e,n)=>t(n,e)),E=(e,t,n)=>r(n)?(p(e,t),e):e?.set(t,n),T=(e,t,n,r)=>(f(e,t)?r?.(k(e,t)):E(e,t,n()),k(e,t)),S=(e,t,n,r,o=0)=>s((n?T:k)(e,t[o],o>d(t)-2?n:b),s=>{if(o>d(t)-2)return r?.(s)&&E(e,t[o]),s;const a=S(s,t,n,r,o+1);return L(s)&&E(e,t[o]),a}),z=e=>new Set(i(e)||r(e)?e:[e]),A=(e,t)=>e?.add(t),D=/^\d+$/,M=(()=>{const a=new WeakMap;return u=>(a.has(u)||a.set(u,(a=>{const u=b(),R=b(),h=b(),M=b(),[j,x,C]=(()=>{let e;const[n,r]=(()=>{const e=[];let n=0;return[r=>(r?e.shift():null)??t+n++,t=>{D.test(t)&&d(e)<1e3&&c(e,t)}]})(),a=b();return[(r,o,s,i=[],d=()=>[])=>{e??=U;const l=n(1);return E(a,l,[r,o,s,i,d]),A(S(o,s??[t],z),l),l},(n,r,...s)=>l(((e,n=[t])=>{const r=[],s=(e,t)=>t==d(n)?c(r,e):o(n[t])?v(e,e=>s(e,t+1)):l([n[t],null],n=>s(k(e,n),t+1));return s(e,0),r})(n,r),t=>v(t,t=>k(a,t)[0](e,...r??[],...s))),e=>s(k(a,e),([,n,o])=>(S(n,o??[t],void 0,t=>(p(t,e),L(t)?1:0)),E(a,e),r(e),o)),t=>s(k(a,t),([t,,n=[],r,s])=>{const a=(...i)=>{const c=d(i);c==d(n)?t(e,...i,...s(i)):o(n[c])?l(r[c]?.(...i)??[],e=>a(...i,e)):a(...i,n[c])};a()})]})(),[O,W,$,q,B,F,,,G,H,J,K]=((e,n,o,a,c)=>{const u=e.hasRow,R=b(),h=b(),w=b(),y=b(),S=b(),D=b(),M=(t,n,...r)=>{const o=T(D,t,z);return l(r,t=>A(o,t)&&n&&e.callListener(t)),r},j=(t,...n)=>s(k(D,t),r=>{l(0==d(n)?I(r):n,t=>{e.delListener(t),p(r,t)}),L(r)&&E(D,t)}),x=(e,t)=>{E(R,e,t),f(h,e)||(E(h,e,[b(),b(),b(),b()]),E(y,e,b()),E(S,e,b()),c(w))},C=e=>{E(R,e),E(h,e),E(y,e),E(S,e),j(e),c(w)};return[()=>e,()=>{return e=R,[...e?.keys()??[]];var e},e=>m(h,e),e=>f(h,e),e=>k(R,e),e=>k(h,e),(e,t)=>E(h,e,t),x,(n,o,s,a,c)=>{x(n,o);const R=b(),h=b(),w=k(y,n),L=k(S,n),I=n=>{const s=t=>e.getCell(o,n,t),l=k(w,n),f=u(o,n)?(I=a(s,n),r(I)?void 0:I+t):void 0;var I,g,v,p;if(l===f||i(l)&&i(f)&&(v=f,d(g=l)===d(v)&&(p=(e,t)=>v[t]===e,g.every(p)))||E(R,n,[l,f]),!r(c)){const e=k(L,n),t=u(o,n)?c(s,n):void 0;e!=t&&E(h,n,t)}},p=e=>{s(()=>{v(R,([,e],t)=>E(w,t,e)),v(h,(e,t)=>E(L,t,e))},R,h,w,L,e),g(R),g(h)};m(w,I),e.hasTable(o)&&l(e.getRowIds(o),e=>{f(w,e)||I(e)}),p(!0),j(n),M(n,0,e.addRowListener(o,null,(e,t,n)=>I(n)),e.addTableListener(o,()=>p()))},C,e=>a(e,w),()=>m(D,C),M,j]})(a,0,0,j,x),N=(e,t,n)=>s(F(e),([o,,s])=>{if(!f(s,t)){const a=z();if(B(e)!=Q(e))A(a,t);else{let e=t;for(;!r(e)&&!f(a,e);)A(a,e),e=k(o,e)}if(n)return a;E(s,t,a)}return k(s,t)}),P=(e,t)=>s(F(e),([,,e])=>E(e,t)),Q=e=>k(u,e),U={setRelationshipDefinition:(o,a,i,d)=>{return E(u,o,i),G(o,a,(e,t)=>{const n=z(),a=z(),i=z(),[d,l]=F(o);v(t,([e,t],c)=>{r(e)||(A(a,e),s(k(l,e),t=>{p(t,c),L(t)&&E(l,e)})),r(t)||(A(a,t),f(l,t)||E(l,t,z()),A(k(l,t),c)),A(n,c),E(d,c,t),m(k(M,o),e=>{f(N(o,e),c)&&A(i,e)})}),e(),v(n,e=>x(R,[o,e])),v(a,e=>x(h,[o,e])),v(i,e=>{P(o,e),x(M,[o,e])})},e(l=d)==n?e=>e(l):l??(()=>t)),U;var l},delRelationshipDefinition:e=>(E(u,e),H(e),U),getStore:O,getRelationshipIds:W,forEachRelationship:e=>$(t=>e(t,e=>a.forEachRow(B(t),e))),hasRelationship:q,getLocalTableId:B,getRemoteTableId:Q,getRemoteRowId:(e,t)=>k(F(e)?.[0],t),getLocalRowIds:(e,t)=>I(k(F(e)?.[1],t)),getLinkedRowIds:(e,t)=>r(F(e))?[t]:I(N(e,t,!0)),addRelationshipIdsListener:J,addRemoteRowIdListener:(e,t,n)=>j(n,R,[e,t]),addLocalRowIdsListener:(e,t,n)=>j(n,h,[e,t]),addLinkedRowIdsListener:(e,t,n)=>(N(e,t),j(n,M,[e,t])),delListener:e=>(P(...C(e)??[]),U),destroy:K,getListenerStats:()=>({remoteRowId:w(R),localRowIds:w(h),linkedRowIds:w(M)})};return y(U)})(u)),a.get(u))})();export{M as createRelationships};