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=Map,k=e=>new b(e),m=(e,t)=>e?.get(t),E=(e,t)=>v(e,(e,n)=>t(n,e)),T=(e,t,n)=>r(n)?(p(e,t),e):e?.set(t,n),S=(e,t,n,r)=>(f(e,t)?r?.(m(e,t)):T(e,t,n()),m(e,t)),z=(e,t,n,r,o=0)=>s((n?S:m)(e,t[o],o>d(t)-2?n:k),s=>{if(o>d(t)-2)return r?.(s)&&T(e,t[o]),s;const a=z(s,t,n,r,o+1);return L(s)&&T(e,t[o]),a}),A=e=>new Set(i(e)||r(e)?e:[e]),D=(e,t)=>e?.add(t),M=/^\d+$/,j=(()=>{const a=new WeakMap;return u=>(a.has(u)||a.set(u,(a=>{const u=k(),R=k(),h=k(),b=k(),[j,x,C]=(()=>{let e;const[n,r]=(()=>{const e=[];let n=0;return[r=>(r?e.shift():null)??t+n++,t=>{M.test(t)&&d(e)<1e3&&c(e,t)}]})(),a=k();return[(r,o,s,i=[],d=()=>[])=>{e??=U;const l=n(1);return T(a,l,[r,o,s,i,d]),D(z(o,s??[t],A),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(m(e,n),t+1));return s(e,0),r})(n,r),t=>v(t,t=>m(a,t)[0](e,...r??[],...s))),e=>s(m(a,e),([,n,o])=>(z(n,o??[t],void 0,t=>(p(t,e),L(t)?1:0)),T(a,e),r(e),o)),t=>s(m(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=k(),h=k(),w=k(),y=k(),b=k(),z=k(),M=(t,n,...r)=>{const o=S(z,t,A);return l(r,t=>D(o,t)&&n&&e.callListener(t)),r},j=(t,...n)=>s(m(z,t),r=>{l(0==d(n)?I(r):n,t=>{e.delListener(t),p(r,t)}),L(r)&&T(z,t)}),x=(e,t)=>{T(R,e,t),f(h,e)||(T(h,e,[k(),k(),k(),k()]),T(y,e,k()),T(b,e,k()),c(w))},C=e=>{T(R,e),T(h,e),T(y,e),T(b,e),j(e),c(w)};return[()=>e,()=>{return e=R,[...e?.keys()??[]];var e},e=>E(h,e),e=>f(h,e),e=>m(R,e),e=>m(h,e),(e,t)=>T(h,e,t),x,(n,o,s,a,c)=>{x(n,o);const R=k(),h=k(),w=m(y,n),L=m(b,n),I=n=>{const s=t=>e.getCell(o,n,t),l=m(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)))||T(R,n,[l,f]),!r(c)){const e=m(L,n),t=u(o,n)?c(s,n):void 0;e!=t&&T(h,n,t)}},p=e=>{s(()=>{v(R,([,e],t)=>T(w,t,e)),v(h,(e,t)=>T(L,t,e))},R,h,w,L,e),g(R),g(h)};E(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),()=>E(z,C),M,j]})(a,0,0,j,x),N=(e,t,n)=>s(F(e),([o,,s])=>{if(!f(s,t)){const a=A();if(B(e)!=Q(e))D(a,t);else{let e=t;for(;!r(e)&&!f(a,e);)D(a,e),e=m(o,e)}if(n)return a;T(s,t,a)}return m(s,t)}),P=(e,t)=>s(F(e),([,,e])=>T(e,t)),Q=e=>m(u,e),U={setRelationshipDefinition:(o,a,i,d)=>{return T(u,o,i),G(o,a,(e,t)=>{const n=A(),a=A(),i=A(),[d,l]=F(o);v(t,([e,t],c)=>{r(e)||(D(a,e),s(m(l,e),t=>{p(t,c),L(t)&&T(l,e)})),r(t)||(D(a,t),f(l,t)||T(l,t,A()),D(m(l,t),c)),D(n,c),T(d,c,t),E(m(b,o),e=>{f(N(o,e),c)&&D(i,e)})}),e(),v(n,e=>x(R,[o,e])),v(a,e=>x(h,[o,e])),v(i,e=>{P(o,e),x(b,[o,e])})},e(l=d)==n?e=>e(l):l??(()=>t)),U;var l},delRelationshipDefinition:e=>(T(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)=>m(F(e)?.[0],t),getLocalRowIds:(e,t)=>I(m(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,b,[e,t])),delListener:e=>(P(...C(e)??[]),U),destroy:K,getListenerStats:()=>({remoteRowId:w(R),localRowIds:w(h),linkedRowIds:w(b)})};return y(U)})(u)),a.get(u))})();export{j as createRelationships};