tinybase 5.0.0-beta.6 → 5.0.0-beta.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cjs/synchronizers/synchronizer-local.cjs +1 -0
- package/lib/cjs/synchronizers/synchronizer-local.cjs.gz +0 -0
- package/lib/cjs/synchronizers/synchronizer-ws-client.cjs +1 -0
- package/lib/cjs/synchronizers/synchronizer-ws-client.cjs.gz +0 -0
- package/lib/cjs/synchronizers/synchronizer-ws-server.cjs +1 -0
- package/lib/cjs/synchronizers/synchronizer-ws-server.cjs.gz +0 -0
- package/lib/cjs/synchronizers.cjs +1 -0
- package/lib/cjs/synchronizers.cjs.gz +0 -0
- package/lib/cjs/tinybase.cjs +1 -1
- package/lib/cjs/tinybase.cjs.gz +0 -0
- package/lib/cjs-es6/synchronizers/synchronizer-local.cjs +1 -0
- package/lib/cjs-es6/synchronizers/synchronizer-local.cjs.gz +0 -0
- package/lib/cjs-es6/synchronizers/synchronizer-ws-client.cjs +1 -0
- package/lib/cjs-es6/synchronizers/synchronizer-ws-client.cjs.gz +0 -0
- package/lib/cjs-es6/synchronizers/synchronizer-ws-server.cjs +1 -0
- package/lib/cjs-es6/synchronizers/synchronizer-ws-server.cjs.gz +0 -0
- package/lib/cjs-es6/synchronizers.cjs +1 -0
- package/lib/cjs-es6/synchronizers.cjs.gz +0 -0
- package/lib/cjs-es6/tinybase.cjs +1 -1
- package/lib/cjs-es6/tinybase.cjs.gz +0 -0
- package/lib/debug/synchronizers/synchronizer-local.js +502 -0
- package/lib/debug/{persisters/persister-sync.js → synchronizers/synchronizer-ws-client.js} +83 -152
- package/lib/debug/synchronizers/synchronizer-ws-server.js +57 -0
- package/lib/debug/synchronizers.js +466 -0
- package/lib/debug/tinybase.js +254 -84
- package/lib/es6/synchronizers/synchronizer-local.js +1 -0
- package/lib/es6/synchronizers/synchronizer-local.js.gz +0 -0
- package/lib/es6/synchronizers/synchronizer-ws-client.js +1 -0
- package/lib/es6/synchronizers/synchronizer-ws-client.js.gz +0 -0
- package/lib/es6/synchronizers/synchronizer-ws-server.js +1 -0
- package/lib/es6/synchronizers/synchronizer-ws-server.js.gz +0 -0
- package/lib/es6/synchronizers.js +1 -0
- package/lib/es6/synchronizers.js.gz +0 -0
- package/lib/es6/tinybase.js +1 -1
- package/lib/es6/tinybase.js.gz +0 -0
- package/lib/synchronizers/synchronizer-local.js +1 -0
- package/lib/synchronizers/synchronizer-local.js.gz +0 -0
- package/lib/synchronizers/synchronizer-ws-client.js +1 -0
- package/lib/synchronizers/synchronizer-ws-client.js.gz +0 -0
- package/lib/synchronizers/synchronizer-ws-server.js +1 -0
- package/lib/synchronizers/synchronizer-ws-server.js.gz +0 -0
- package/lib/synchronizers.js +1 -0
- package/lib/synchronizers.js.gz +0 -0
- package/lib/tinybase.js +1 -1
- package/lib/tinybase.js.gz +0 -0
- package/lib/types/persisters.d.ts +8 -16
- package/lib/types/synchronizers/synchronizer-local.d.ts +27 -0
- package/lib/types/synchronizers/synchronizer-ws-client.d.ts +30 -0
- package/lib/types/synchronizers/synchronizer-ws-server.d.ts +24 -0
- package/lib/types/synchronizers.d.ts +131 -0
- package/lib/types/tinybase.d.ts +1 -0
- package/lib/types/with-schemas/persisters.d.ts +13 -57
- package/lib/types/with-schemas/synchronizers/synchronizer-local.d.ts +29 -0
- package/lib/types/with-schemas/synchronizers/synchronizer-ws-client.d.ts +32 -0
- package/lib/types/with-schemas/synchronizers/synchronizer-ws-server.d.ts +24 -0
- package/lib/types/with-schemas/synchronizers.d.ts +146 -0
- package/lib/umd/synchronizers/synchronizer-local.js +1 -0
- package/lib/umd/synchronizers/synchronizer-local.js.gz +0 -0
- package/lib/umd/synchronizers/synchronizer-ws-client.js +1 -0
- package/lib/umd/synchronizers/synchronizer-ws-client.js.gz +0 -0
- package/lib/umd/synchronizers/synchronizer-ws-server.js +1 -0
- package/lib/umd/synchronizers/synchronizer-ws-server.js.gz +0 -0
- package/lib/umd/synchronizers.js +1 -0
- package/lib/umd/synchronizers.js.gz +0 -0
- package/lib/umd/tinybase.js +1 -1
- package/lib/umd/tinybase.js.gz +0 -0
- package/lib/umd-es6/synchronizers/synchronizer-local.js +1 -0
- package/lib/umd-es6/synchronizers/synchronizer-local.js.gz +0 -0
- package/lib/umd-es6/synchronizers/synchronizer-ws-client.js +1 -0
- package/lib/umd-es6/synchronizers/synchronizer-ws-client.js.gz +0 -0
- package/lib/umd-es6/synchronizers/synchronizer-ws-server.js +1 -0
- package/lib/umd-es6/synchronizers/synchronizer-ws-server.js.gz +0 -0
- package/lib/umd-es6/synchronizers.js +1 -0
- package/lib/umd-es6/synchronizers.js.gz +0 -0
- package/lib/umd-es6/tinybase.js +1 -1
- package/lib/umd-es6/tinybase.js.gz +0 -0
- package/package.json +1 -1
- package/readme.md +2 -2
- package/lib/cjs/persisters/persister-sync.cjs +0 -1
- package/lib/cjs/persisters/persister-sync.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-sync.cjs +0 -1
- package/lib/cjs-es6/persisters/persister-sync.cjs.gz +0 -0
- package/lib/es6/persisters/persister-sync.js +0 -1
- package/lib/es6/persisters/persister-sync.js.gz +0 -0
- package/lib/persisters/persister-sync.js +0 -1
- package/lib/persisters/persister-sync.js.gz +0 -0
- package/lib/types/persisters/persister-sync.d.ts +0 -182
- package/lib/types/with-schemas/persisters/persister-sync.d.ts +0 -195
- package/lib/umd/persisters/persister-sync.js +0 -1
- package/lib/umd/persisters/persister-sync.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-sync.js +0 -1
- package/lib/umd-es6/persisters/persister-sync.js.gz +0 -0
package/lib/umd-es6/tinybase.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var e,t;e=this,t=function(e){"use strict";const t=e=>typeof e,n="",l=t(n),o=t(!0),r=t(0),s=t(t),a="type",i="default",d="Listener",u="Result",c="add",v="Has",g="Ids",h="Table",f=h+"s",p=h+g,b="Row",y=b+"Count",L=b+g,C="Sorted"+b+g,T="Cell",w=T+g,I="Value",S=I+"s",R=I+g,M=e=>n+e,m=(e,t)=>e.startsWith(t),V=(e,t)=>e.endsWith(t),E=Math.max,x=Math.min,O=isFinite,k=e=>null==e,D=(e,t,n)=>k(e)?null==n?void 0:n():t(e),A=e=>e==l||e==o,H=e=>t(e)==l,J=e=>t(e)==s,P=e=>Array.isArray(e),j=(e,t,n)=>e.slice(t,n),F=e=>e.length,Q=()=>{},z=(e,t)=>e.includes(t),N=(e,t)=>e.every(t),W=(e,t)=>F(e)===F(t)&&N(e,((e,n)=>t[n]===e)),B=(e,t)=>N(e,((n,l)=>0==l||t(e[l-1],n)<=0)),_=(e,t)=>e.sort(t),$=(e,t)=>e.forEach(t),q=(e,t)=>e.map(t),G=e=>U(e,((e,t)=>e+t),0),K=e=>0==F(e),U=(e,t,n)=>e.reduce(t,n),X=(e,...t)=>e.push(...t),Y=e=>e.pop(),Z=e=>e.shift(),ee=Object,te=e=>ee.getPrototypeOf(e),ne=ee.entries,le=ee.isFrozen,oe=e=>!k(e)&&D(te(e),(e=>e==ee.prototype||k(te(e))),(()=>!0)),re=ee.keys,se=ee.freeze,ae=(e=[])=>ee.fromEntries(e),ie=(e,t)=>t in e,de=(e,t)=>(delete e[t],e),ue=(e,t)=>$(ne(e),(([e,n])=>t(n,e))),ce=(e,t)=>q(ne(e),(([e,n])=>t(n,e))),ve=(e,t)=>ae(ce(e,((e,n)=>[n,t(e,n)]))),ge=e=>oe(e)&&0==(e=>F(re(e)))(e),he=(e,t,n)=>(ie(e,t)||(e[t]=n()),e[t]),fe=(e,t,n,l=0)=>k(e)||!oe(e)||!l&&ge(e)||le(e)?(null==n||n(),!1):(ce(e,((n,l)=>{t(n,l)||de(e,l)})),!!l||!ge(e)),pe=e=>{var t;return null!=(t=null==e?void 0:e.size)?t:0},be=(e,t)=>{var n;return null!=(n=null==e?void 0:e.has(t))&&n},ye=e=>k(e)||0==pe(e),Le=e=>{var t;return[...null!=(t=null==e?void 0:e.values())?t:[]]},Ce=e=>e.clear(),Te=(e,t)=>null==e?void 0:e.forEach(t),we=(e,t)=>null==e?void 0:e.delete(t),Ie=e=>new Map(e),Se=e=>{var t;return[...null!=(t=null==e?void 0:e.keys())?t:[]]},Re=(e,t)=>null==e?void 0:e.get(t),Me=(e,t)=>Te(e,((e,n)=>t(n,e))),me=(e,t,n)=>k(n)?(we(e,t),e):null==e?void 0:e.set(t,n),Ve=(e,t,n,l)=>(be(e,t)?null==l||l(Re(e,t)):me(e,t,n()),Re(e,t)),Ee=(e,t,n,l=me)=>(ce(t,((t,l)=>n(e,l,t))),Me(e,(n=>ie(t,n)?0:l(e,n))),e),xe=(e,t,n,l)=>{const o={};return Te(e,((e,r)=>{if(!(null==n?void 0:n(e,r))){const n=t?t(e,r):e;!(null==l?void 0:l(n))&&(o[r]=n)}})),o},Oe=(e,t,n)=>xe(e,(e=>xe(e,t,n)),ye,ge),ke=(e,t,n)=>xe(e,(e=>Oe(e,t,n)),ye,ge),De=(e,t)=>{const n=Ie();return Te(e,((e,l)=>{var o;return n.set(l,null!=(o=null==t?void 0:t(e))?o:e)})),n},Ae=e=>De(e,De),He=e=>De(e,Ae),Je=(e,t,n,l,o=0)=>D((n?Ve:Re)(e,t[o],o>F(t)-2?n:Ie),(r=>{if(o>F(t)-2)return(null==l?void 0:l(r))&&me(e,t[o]),r;const s=Je(r,t,n,l,o+1);return ye(r)&&me(e,t[o]),s})),Pe=e=>{const n=t(e);return A(n)||n==r&&O(e)?n:void 0},je=e=>null===e||!k(Pe(e)),Fe=(e,t,n,l,o)=>k(o)?e.delCell(t,n,l,!0):e.setCell(t,n,l,o),Qe=(e,t,n)=>k(n)?e.delValue(t):e.setValue(t,n),ze=e=>new Set(P(e)||k(e)?e:[e]),Ne=(e,t)=>null==e?void 0:e.add(t),We=(e,t,n,l,o)=>{const r=e.hasRow,s=Ie(),a=Ie(),i=Ie(),d=Ie(),u=Ie(),c=Ie(),v=(t,n,...l)=>{const o=Ve(c,t,ze);return $(l,(t=>Ne(o,t)&&n&&e.callListener(t))),l},g=(t,...n)=>D(Re(c,t),(l=>{$(K(n)?Le(l):n,(t=>{e.delListener(t),we(l,t)})),ye(l)&&me(c,t)})),h=(e,n)=>{me(s,e,n),be(a,e)||(me(a,e,t()),me(d,e,Ie()),me(u,e,Ie()),o(i))},f=e=>{me(s,e),me(a,e),me(d,e),me(u,e),g(e),o(i)};return[()=>e,()=>Se(s),e=>Me(a,e),e=>be(a,e),e=>Re(s,e),e=>Re(a,e),(e,t)=>me(a,e,t),h,(t,l,o,s,a)=>{h(t,l);const i=Ie(),c=Ie(),f=Re(d,t),p=Re(u,t),b=t=>{const o=n=>e.getCell(l,t,n),d=Re(f,t),u=r(l,t)?n(s(o,t)):void 0;if(d===u||P(d)&&P(u)&&W(d,u)||me(i,t,[d,u]),!k(a)){const e=Re(p,t),n=r(l,t)?a(o,t):void 0;e!=n&&me(c,t,n)}},y=e=>{o((()=>{Te(i,(([,e],t)=>me(f,t,e))),Te(c,((e,t)=>me(p,t,e)))}),i,c,f,p,e),Ce(i),Ce(c)};Me(f,b),e.hasTable(l)&&$(e.getRowIds(l),(e=>{be(f,e)||b(e)})),y(!0),g(t),v(t,0,e.addRowListener(l,null,((e,t,n)=>b(n))),e.addTableListener(l,(()=>y())))},f,e=>l(e,i),()=>Me(c,f),v,g]},Be=(e,t)=>H(e)?t=>t(e):null!=e?e:()=>null!=t?t:n,_e=(e,t)=>{const n=new WeakMap;return l=>{n.has(l)||n.set(l,e(l));const o=n.get(l);return null==t||t(o),o}},$e=/^\d+$/,qe=()=>{const e=[];let t=0;return[l=>{var o;return null!=(o=l?Z(e):null)?o:n+t++},t=>{$e.test(t)&&F(e)<1e3&&X(e,t)}]},Ge=e=>{let t;const[l,o]=qe(),r=Ie();return[(o,s,a,i=[],d=(()=>[]))=>{null!=t||(t=e());const u=l(1);return me(r,u,[o,s,a,i,d]),Ne(Je(s,null!=a?a:[n],ze),u),u},(e,l,...o)=>$(((e,t=[n])=>{const l=[],o=(e,n)=>n==F(t)?X(l,e):null===t[n]?Te(e,(e=>o(e,n+1))):$([t[n],null],(t=>o(Re(e,t),n+1)));return o(e,0),l})(e,l),(e=>Te(e,(e=>Re(r,e)[0](t,...null!=l?l:[],...o))))),e=>D(Re(r,e),(([,t,l])=>(Je(t,null!=l?l:[n],void 0,(t=>(we(t,e),ye(t)?1:0))),me(r,e),o(e),l))),e=>D(Re(r,e),(([e,,n=[],l,o])=>{const r=(...s)=>{var a,i;const d=F(s);d==F(n)?e(t,...s,...o(s)):k(n[d])?$(null!=(i=null==(a=l[d])?void 0:a.call(l,...s))?i:[],(e=>r(...s,e))):r(...s,n[d])};r()}))]},Ke=_e((e=>{let t,l,o,r=100,s=Ie(),a=Ie(),i=1;const d=Ie(),u=Ie(),[c,v,g]=Ge((()=>H)),h=Ie(),f=Ie(),p=[],b=[],y=(t,n)=>{i=0,e.transaction((()=>{const[l,o]=Re(h,n);Te(l,((n,l)=>Te(n,((n,o)=>Te(n,((n,r)=>Fe(e,l,o,r,n[t]))))))),Te(o,((n,l)=>Qe(e,l,n[t])))})),i=1},L=e=>{me(h,e),me(f,e),v(u,[e])},C=(e,t)=>$(((e,t)=>e.splice(0,t))(e,null!=t?t:F(e)),L),T=()=>C(p,F(p)-r),w=()=>D(t,(()=>{X(p,t),T(),C(b),t=void 0,o=1})),I=()=>{t=Y(p),o=1};let S,R;const M=(e="")=>(k(t)&&(t=n+l++,me(h,t,[s,a]),O(t,e),s=Ie(),a=Ie(),o=1),t),m=()=>{K(p)||(((e,...t)=>{e.unshift(...t)})(b,M()),y(0,t),t=Y(p),o=1)},V=()=>{K(b)||(X(p,t),t=Z(b),y(1,t),o=1)},E=()=>{o&&(v(d),o=0)},x=e=>{const t=M(e);return E(),t},O=(e,t)=>(A(e)&&Re(f,e)!==t&&(me(f,e,t),v(u,[e])),H),A=e=>be(h,e),H={setSize:e=>(r=e,T(),H),addCheckpoint:x,setCheckpoint:O,getStore:()=>e,getCheckpointIds:()=>[[...p],t,[...b]],forEachCheckpoint:e=>Me(f,e),hasCheckpoint:A,getCheckpoint:e=>Re(f,e),goBackward:()=>(m(),E(),H),goForward:()=>(V(),E(),H),goTo:e=>{const n=z(p,e)?m:z(b,e)?V:null;for(;!k(n)&&e!=t;)n();return E(),H},addCheckpointIdsListener:e=>c(e,d),addCheckpointListener:(e,t)=>c(t,u,[e]),delListener:e=>(g(e),H),clear:()=>(C(p),C(b),k(t)||L(t),t=void 0,l=0,x(),H),clearForward:()=>(K(b)||(C(b),v(d)),H),destroy:()=>{e.delListener(S),e.delListener(R)},getListenerStats:()=>({}),_registerListeners:()=>{S=e.addCellListener(null,null,null,((e,t,n,l,o,r)=>{if(i){w();const e=Ve(s,t,Ie),a=Ve(e,n,Ie),i=Ve(a,l,(()=>[r,void 0]));i[1]=o,i[0]===o&&ye(me(a,l))&&ye(me(e,n))&&ye(me(s,t))&&I(),E()}})),R=e.addValueListener(null,((e,t,n,l)=>{if(i){w();const e=Ve(a,t,(()=>[l,void 0]));e[1]=n,e[0]===n&&ye(me(a,t))&&I(),E()}}))}};return se(H.clear())}),(e=>e._registerListeners())),Ue=(e,t)=>(null!=e?e:0)<(null!=t?t:0)?-1:1,Xe=_e((e=>{const t=Ie(),l=Ie(),[o,r,s]=Ge((()=>L)),[a,i,d,u,c,v,g,,h,f,p,b]=We(e,Ie,(e=>k(e)?n:P(e)?q(e,M):M(e)),o,r),y=(t,n,l)=>{const o=c(t);Te(l,((t,l)=>n(l,(n=>Te(t,(t=>n(t,(n=>e.forEachCell(o,t,n)))))))))},L={setIndexDefinition:(e,n,o,s,a,i=Ue)=>{const d=k(a)?void 0:([e],[t])=>a(e,t);return h(e,n,((n,o,a,u,c,h)=>{let f=0;const p=ze(),b=ze(),y=v(e);if(Te(o,(([e,t],n)=>{const l=ze(e),o=ze(t);Te(l,(e=>we(o,e)?we(l,e):0)),Te(l,(e=>{Ne(p,e),D(Re(y,e),(t=>{we(t,n),ye(t)&&(me(y,e),f=1)}))})),Te(o,(e=>{Ne(p,e),be(y,e)||(me(y,e,ze()),f=1),Ne(Re(y,e),n),k(s)||Ne(b,e)}))})),n(),ye(c)||(h?Me(y,(e=>Ne(b,e))):Me(a,(e=>D(Re(u,e),(e=>Ne(b,e))))),Te(b,(e=>{const t=(t,n)=>i(Re(c,t),Re(c,n),e),n=[...Re(y,e)];B(n,t)||(me(y,e,ze(_(n,t))),Ne(p,e))}))),(f||h)&&!k(d)){const t=[...y];B(t,d)||(g(e,Ie(_(t,d))),f=1)}f&&r(t,[e]),Te(p,(t=>r(l,[e,t])))}),Be(o),D(s,Be)),L},delIndexDefinition:e=>(f(e),L),getStore:a,getIndexIds:i,forEachIndex:e=>d(((t,n)=>e(t,(e=>y(t,e,n))))),forEachSlice:(e,t)=>y(e,t,v(e)),hasIndex:u,hasSlice:(e,t)=>be(v(e),t),getTableId:c,getSliceIds:e=>Se(v(e)),getSliceRowIds:(e,t)=>Le(Re(v(e),t)),addIndexIdsListener:p,addSliceIdsListener:(e,n)=>o(n,t,[e]),addSliceRowIdsListener:(e,t,n)=>o(n,l,[e,t]),delListener:e=>(s(e),L),destroy:b,getListenerStats:()=>({})};return se(L)})),Ye=Ie([["avg",[(e,t)=>G(e)/t,(e,t,n)=>e+(t-e)/(n+1),(e,t,n)=>e+(e-t)/(n-1),(e,t,n,l)=>e+(t-n)/l]],["max",[e=>E(...e),(e,t)=>E(t,e),(e,t)=>t==e?void 0:e,(e,t,n)=>n==e?void 0:E(t,e)]],["min",[e=>x(...e),(e,t)=>x(t,e),(e,t)=>t==e?void 0:e,(e,t,n)=>n==e?void 0:x(t,e)]],["sum",[e=>G(e),(e,t)=>e+t,(e,t)=>e-t,(e,t,n)=>e-n+t]]]),Ze=(e,t,n,l,o,r=!1)=>{if(ye(n))return;const[s,a,i,d]=o;return r||(r=k(e)),Te(l,(([n,l])=>{r||(e=k(n)?null==a?void 0:a(e,l,t++):k(l)?null==i?void 0:i(e,n,t--):null==d?void 0:d(e,l,n,t),r||(r=k(e)))})),r?s(Le(n),pe(n)):e},et=_e((e=>{const t=Ie(),[l,o,r]=Ge((()=>b)),[s,a,i,d,u,c,v,,g,h,f,p]=We(e,Q,(e=>isNaN(e)||k(e)||!0===e||!1===e||e===n?void 0:1*e),l,o),b={setMetricDefinition:(e,n,l,r,s,a,i)=>{var d;const u=J(l)?[l,s,a,i]:null!=(d=Re(Ye,l))?d:Re(Ye,"sum");return g(e,n,((n,l,r,s,a,i)=>{const d=c(e),g=pe(s);i||(i=k(d)),n();let h=Ze(d,g,s,l,u,i);O(h)||(h=void 0),h!=d&&(v(e,h),o(t,[e],h,d))}),Be(r,1)),b},delMetricDefinition:e=>(h(e),b),getStore:s,getMetricIds:a,forEachMetric:i,hasMetric:d,getTableId:u,getMetric:c,addMetricIdsListener:f,addMetricListener:(e,n)=>l(n,t,[e]),delListener:e=>(r(e),b),destroy:p,getListenerStats:()=>({})};return se(b)}));var tt=Object.defineProperty,nt=Object.getOwnPropertySymbols,lt=Object.prototype.hasOwnProperty,ot=Object.prototype.propertyIsEnumerable,rt=(e,t,n)=>t in e?tt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,st=(e,t,n)=>new Promise(((l,o)=>{var r=e=>{try{a(n.next(e))}catch(e){o(e)}},s=e=>{try{a(n.throw(e))}catch(e){o(e)}},a=e=>e.done?l(e.value):Promise.resolve(e.value).then(r,s);a((n=n.apply(e,t)).next())}));const at=Ie(),it=Ie();var dt=Object.getOwnPropertySymbols,ut=Object.prototype.hasOwnProperty,ct=Object.prototype.propertyIsEnumerable;const vt=_e((e=>{const t=e.createStore,l=t(),o=t(),r=Ie(),{addListener:s,callListeners:a,delListener:i}=o,[v,g,f,p,I,,,S,,R,M,m,V,E]=We(e,(()=>!0),Q,s,a),x=(e,t,...n)=>$(n,(n=>Ne(Ve(Ve(r,t,Ie),e,ze),n))),O=e=>{D(Re(r,e),(e=>{Me(e,((e,t)=>Te(t,(t=>e.delListener(t))))),Ce(e)})),$([o,l],(t=>t.delTable(e)))},A=(e,t,n)=>x(t,e,t.addStartTransactionListener(n.startTransaction),t.addDidFinishTransactionListener((()=>n.finishTransaction()))),H={setQueryDefinition:(t,r,s)=>{S(t,r),O(t);const a=[],i=[[null,[r,null,null,[],Ie()]]],d=[],u=[],c=[];s({select:(e,t)=>{const l=J(e)?[F(a)+n,e]:[k(t)?e:t,n=>n(e,t)];return X(a,l),{as:e=>l[0]=e}},join:(e,t,n)=>{const l=k(n)||J(t)?null:t,o=k(l)?t:n,r=[e,[e,l,J(o)?o:e=>e(o),[],Ie()]];return X(i,r),{as:e=>r[0]=e}},where:(e,t,n)=>X(d,J(e)?e:k(n)?n=>n(e)===t:l=>l(e,t)===n),group:(e,t,n,l,o)=>{var r;const s=[e,[e,J(t)?[t,n,l,o]:null!=(r=Re(Ye,t))?r:[(e,t)=>t]]];return X(u,s),{as:e=>s[0]=e}},having:(e,t)=>X(c,J(e)?e:n=>n(e)===t)});const v=Ie(a);if(ye(v))return H;const g=Ie(i);Me(g,((e,[,t])=>D(Re(g,t),(({3:t})=>k(e)?0:X(t,e)))));const h=Ie(u);let f=l;if(ye(h)&&K(c))f=o;else{A(t,f,o);const e=Ie();Me(h,((t,[n,l])=>Ne(Ve(e,n,ze),[t,l])));const n=ze();Me(v,(t=>be(e,t)?0:Ne(n,t)));const l=Ie(),r=(n,l,r,s)=>D(n,(([a,i,d,u])=>{Me(l,((t,[n])=>{const l=Ve(a,t,Ie),o=Re(l,r),i=s?void 0:n;if(o!==i){const n=ze([[o,i]]),s=pe(l);me(l,r,i),Te(Re(e,t),(([e,t])=>{const o=Ze(u[e],s,l,n,t);u[e]=k(Pe(o))?null:o}))}})),ye(i)||!N(c,(e=>e((e=>u[e]))))?o.delRow(t,d):k(d)?n[2]=o.addRow(t,u):o.setRow(t,d,u)}));x(f,t,f.addRowListener(t,null,((o,s,a,i)=>{const d=[],u=[],c=Ie(),v=f.hasRow(t,a);let g=!v;Te(n,(e=>{const[n,l,o]=i(t,a,e);X(d,l),X(u,o),g||(g=n)})),Me(e,(e=>{const[n,,l]=i(t,a,e);(g||n)&&me(c,e,[l])})),g&&r(Je(l,d,void 0,(([,e])=>(we(e,a),ye(e)))),c,a,1),v&&r(Je(l,u,(()=>{const e={};return Te(n,(n=>e[n]=f.getCell(t,a,n))),[Ie(),ze(),void 0,e]}),(([,e])=>{Ne(e,a)})),c,a)})))}A(t,e,f);const p=(n,l,o,s)=>{const a=t=>e.getCell(l,o,t);$(s,(l=>{var o;const[r,,s,i,d]=Re(g,l),u=null==s?void 0:s(a,n),[c,v]=null!=(o=Re(d,n))?o:[];u!=c&&(k(v)||E(t,v),me(d,n,k(u)?null:[u,...V(t,1,e.addRowListener(r,u,(()=>p(n,r,u,i))))]))})),(n=>{const l=(t,l)=>{var o,s,a;return e.getCell(...k(l)?[r,n,t]:t===r?[r,n,l]:[null==(o=Re(g,t))?void 0:o[0],null==(a=Re(null==(s=Re(g,t))?void 0:s[4],n))?void 0:a[0],l])};f.transaction((()=>N(d,(e=>e(l)))?Me(v,((e,o)=>Fe(f,t,n,e,o(l,n)))):f.delRow(t,n)))})(n)},{3:b}=Re(g,null);return f.transaction((()=>V(t,1,e.addRowListener(r,null,((n,l,o)=>{e.hasRow(r,o)?p(o,r,o,b):(f.delRow(t,o),Te(g,(({4:e})=>D(Re(e,o),(([,n])=>{E(t,n),me(e,o)})))))}))))),H},delQueryDefinition:e=>(O(e),R(e),H),getStore:v,getQueryIds:g,forEachQuery:f,hasQuery:p,getTableId:I,addQueryIdsListener:e=>M((()=>e(H))),delListener:e=>(i(e),H),destroy:m,getListenerStats:()=>((e,t)=>{var n={};for(var l in e)ut.call(e,l)&&t.indexOf(l)<0&&(n[l]=e[l]);if(null!=e&&dt)for(var l of dt(e))t.indexOf(l)<0&&ct.call(e,l)&&(n[l]=e[l]);return n})(o.getListenerStats(),["tables","tableIds","transaction"])};return ce({[h]:[1,1],[h+w]:[0,1],[y]:[0,1],[L]:[0,1],[C]:[0,5],[b]:[1,2],[w]:[0,2],[T]:[1,3]},(([e,t],n)=>{$(e?["get","has","forEach"]:["get"],(e=>H[e+u+n]=(...t)=>o[e+n](...t))),H[c+u+n+d]=(...e)=>o[c+n+d](...j(e,0,t),((n,...l)=>e[t](H,...l)),!0)})),se(H)})),gt=_e((e=>{const t=Ie(),l=Ie(),o=Ie(),r=Ie(),[s,a,i]=Ge((()=>w)),[d,u,c,v,g,h,,,f,p,b,y]=We(e,(()=>[Ie(),Ie(),Ie(),Ie()]),(e=>k(e)?void 0:e+n),s,a),L=(e,t,n)=>D(h(e),(([l,,o])=>{if(!be(o,t)){const r=ze();if(g(e)!=T(e))Ne(r,t);else{let e=t;for(;!k(e)&&!be(r,e);)Ne(r,e),e=Re(l,e)}if(n)return r;me(o,t,r)}return Re(o,t)})),C=(e,t)=>D(h(e),(([,,e])=>me(e,t))),T=e=>Re(t,e),w={setRelationshipDefinition:(e,n,s,i)=>(me(t,e,s),f(e,n,((t,n)=>{const s=ze(),i=ze(),d=ze(),[u,c]=h(e);Te(n,(([t,n],l)=>{k(t)||(Ne(i,t),D(Re(c,t),(e=>{we(e,l),ye(e)&&me(c,t)}))),k(n)||(Ne(i,n),be(c,n)||me(c,n,ze()),Ne(Re(c,n),l)),Ne(s,l),me(u,l,n),Me(Re(r,e),(t=>{be(L(e,t),l)&&Ne(d,t)}))})),t(),Te(s,(t=>a(l,[e,t]))),Te(i,(t=>a(o,[e,t]))),Te(d,(t=>{C(e,t),a(r,[e,t])}))}),Be(i)),w),delRelationshipDefinition:e=>(me(t,e),p(e),w),getStore:d,getRelationshipIds:u,forEachRelationship:t=>c((n=>t(n,(t=>e.forEachRow(g(n),t))))),hasRelationship:v,getLocalTableId:g,getRemoteTableId:T,getRemoteRowId:(e,t)=>{var n;return Re(null==(n=h(e))?void 0:n[0],t)},getLocalRowIds:(e,t)=>{var n;return Le(Re(null==(n=h(e))?void 0:n[1],t))},getLinkedRowIds:(e,t)=>k(h(e))?[t]:Le(L(e,t,!0)),addRelationshipIdsListener:b,addRemoteRowIdListener:(e,t,n)=>s(n,l,[e,t]),addLocalRowIdsListener:(e,t,n)=>s(n,o,[e,t]),addLinkedRowIdsListener:(e,t,n)=>(L(e,t),s(n,r,[e,t])),delListener:e=>{var t;return C(...null!=(t=i(e))?t:[]),w},destroy:y,getListenerStats:()=>({})};return se(w)})),ht=new globalThis.TextEncoder,ft=e=>{let t=2166136261;return $(ht.encode(e),(e=>{t^=e,t+=(t<<1)+(t<<4)+(t<<7)+(t<<8)+(t<<24)})),t>>>0},pt=([e,t,n])=>[e,t,n],bt=([e,t])=>[e,t],yt=e=>e[2],Lt=(e,t)=>ft(e+":"+t),Ct=(e,t,n)=>{e[2]=t>>>0,n>e[0]&&(e[0]=n)},Tt=e=>[e,ae()],wt=(e="")=>[e,Ie(),0],It=([e,t,n],l=pt)=>[e,xe(t,l),n],St=(e,n)=>P(e)&&3==F(e)&&H(e[0])&&n(e[1])&&t(e[2])==r&&O(e[2]),Rt=e=>[e,e],Mt=()=>[Ie(),Ie()],mt=e=>[...e],Vt=([e,t])=>e===t,Et=e=>JSON.stringify(e,((e,t)=>t instanceof Map?ee.fromEntries([...t]):t)),xt=JSON.parse,Ot=(e,t,n)=>me(e,t,Re(e,t)==-n?void 0:n),kt=()=>{let e,t,n=!1,l=!1,o=0,s=[];const u=Ie(),g=Ie(),C=Ie(),m=Ie(),V=Ie(),E=Ie(),x=Ie(),O=Ie(),H=Ie(),P=Ie(),F=Ie(),Q=Ie(),N=Ie(),B=Ie(),G=ze(),K=Ie(),U=Ie(),Y=Ie(),Z=Ie(),ee=Mt(),te=Mt(),ne=Mt(),le=Mt(),oe=Mt(),re=Mt(),ae=Mt(),ue=Mt(),ve=Mt(),he=Mt(),Le=Mt(),Je=Mt(),je=Mt(),We=Mt(),Be=Mt(),_e=Mt(),$e=Mt(),Ke=Mt(),Xe=Mt(),Ye=Mt(),Ze=Mt(),et=Mt(),tt=Ie(),nt=Mt(),[lt,ot,rt,st]=Ge((()=>Hn)),at=e=>{if(!fe(e,((e,t)=>z([a,i],t))))return!1;const t=e[a];return!(!A(t)&&t!=r||(Pe(e[i])!=t&&de(e,i),0))},it=(t,n)=>(!e||be(F,n)||$t(n))&&fe(t,((e,t)=>dt(n,t,e)),(()=>$t(n))),dt=(e,t,n,l)=>fe(l?n:gt(n,e,t),((l,o)=>D(ut(e,t,o,l),(e=>(n[o]=e,!0)),(()=>!1))),(()=>$t(e,t))),ut=(t,n,l,o)=>e?D(Re(Re(F,t),l),(e=>Pe(o)!=e[a]?$t(t,n,l,o,e[i]):o),(()=>$t(t,n,l,o))):k(Pe(o))?$t(t,n,l,o):o,ct=(e,t)=>fe(t?e:ht(e),((t,n)=>D(vt(n,t),(t=>(e[n]=t,!0)),(()=>!1))),(()=>qt())),vt=(e,n)=>t?D(Re(N,e),(t=>Pe(n)!=t[a]?qt(e,n,t[i]):n),(()=>qt(e,n))):k(Pe(n))?qt(e,n):n,gt=(e,t,n)=>(D(Re(Q,t),(([l,o])=>{Te(l,((t,n)=>{ie(e,n)||(e[n]=t)})),Te(o,(l=>{ie(e,l)||$t(t,n,l)}))})),e),ht=e=>(t&&(Te(B,((t,n)=>{ie(e,n)||(e[n]=t)})),Te(G,(t=>{ie(e,t)||qt(t)}))),e),ft=e=>Ee(F,e,((e,t,n)=>{const l=Ie(),o=ze();Ee(Ve(F,t,Ie),n,((e,t,n)=>{me(e,t,n),D(n[i],(e=>me(l,t,e)),(()=>Ne(o,t)))})),me(Q,t,[l,o])}),((e,t)=>{me(F,t),me(Q,t)})),pt=e=>Ee(N,e,((e,t,n)=>{me(N,t,n),D(n[i],(e=>me(B,t,e)),(()=>Ne(G,t)))}),((e,t)=>{me(N,t),me(B,t),we(G,t)})),bt=e=>ge(e)?Mn():Tn(e),yt=e=>Ee(Y,e,((e,t,n)=>Lt(t,n)),((e,t)=>Jt(t))),Lt=(e,t)=>Ee(Ve(Y,e,(()=>(Qt(e,1),me(K,e,qe()),me(U,e,Ie()),Ie()))),t,((t,n,l)=>Ct(e,t,n,l)),((t,n)=>Pt(e,t,n))),Ct=(e,t,n,l,o)=>Ee(Ve(t,n,(()=>(zt(e,n,1),Ie()))),l,((t,l,o)=>Tt(e,n,t,l,o)),((l,r)=>jt(e,t,n,l,r,o))),Tt=(e,t,n,l,o)=>{be(n,l)||Nt(e,t,l,1);const r=Re(n,l);o!==r&&(Wt(e,t,l,r,o),me(n,l,o))},wt=(e,t,n,l,o)=>D(Re(t,n),(t=>Tt(e,n,t,l,o)),(()=>Ct(e,t,n,gt({[l]:o},e,n)))),It=e=>ge(e)?En():wn(e),St=e=>Ee(Z,e,((e,t,n)=>Dt(t,n)),((e,t)=>Ft(t))),Dt=(e,t)=>{be(Z,e)||Bt(e,1);const n=Re(Z,e);t!==n&&(_t(e,n,t),me(Z,e,t))},At=(e,t)=>{const[n]=Re(K,e),l=n(t);return be(Re(Y,e),l)?At(e,t):l},Ht=e=>{var t;return null!=(t=Re(Y,e))?t:Lt(e,{})},Jt=e=>Lt(e,{}),Pt=(e,t,n)=>{const[,l]=Re(K,e);l(n),Ct(e,t,n,{},!0)},jt=(e,t,n,l,o,r)=>{var s;const a=Re(null==(s=Re(Q,e))?void 0:s[0],o);if(!k(a)&&!r)return Tt(e,n,l,o,a);const i=t=>{Wt(e,n,t,Re(l,t)),Nt(e,n,t,-1),me(l,t)};k(a)?i(o):Me(l,i),ye(l)&&(zt(e,n,-1),ye(me(t,n))&&(Qt(e,-1),me(Y,e),me(K,e),me(U,e)))},Ft=e=>{const t=Re(B,e);if(!k(t))return Dt(e,t);_t(e,Re(Z,e)),Bt(e,-1),me(Z,e)},Qt=(e,t)=>Ot(u,e,t),zt=(e,t,n)=>Ot(Ve(m,e,Ie),t,n)&&me(C,e,Ve(C,e,(()=>0))+n),Nt=(e,t,n,l)=>{var o;const r=Re(U,e),s=null!=(o=Re(r,n))?o:0;(0==s&&1==l||1==s&&-1==l)&&Ot(Ve(g,e,Ie),n,l),me(r,n,s!=-l?s+l:null),Ot(Ve(Ve(V,e,Ie),t,Ie),n,l)},Wt=(e,t,n,l,o)=>Ve(Ve(Ve(E,e,Ie),t,Ie),n,(()=>[l,0]))[1]=o,Bt=(e,t)=>Ot(x,e,t),_t=(e,t,n)=>Ve(O,e,(()=>[t,0]))[1]=n,$t=(e,t,n,l,o)=>(X(Ve(Ve(Ve(H,e,Ie),t,Ie),n,(()=>[])),l),o),qt=(e,t,n)=>(X(Ve(P,e,(()=>[])),t),n),Gt=(e,t,n)=>D(Re(Re(Re(E,e),t),n),(([e,t])=>[!0,e,t]),(()=>[!1,...Rt(un(e,t,n))])),Kt=e=>D(Re(O,e),(([e,t])=>[!0,e,t]),(()=>[!1,...Rt(gn(e))])),Ut=e=>ye(H)||ye(_e[e])?0:Te(e?He(H):H,((t,n)=>Te(t,((t,l)=>Te(t,((t,o)=>ot(_e[e],[n,l,o],t))))))),Xt=e=>ye(P)||ye($e[e])?0:Te(e?De(P):P,((t,n)=>ot($e[e],[n],t))),Yt=(e,t,n,l)=>{if(!ye(e))return ot(t,l,(()=>xe(e))),Me(e,((e,t)=>ot(n,[...null!=l?l:[],e],1==t))),1},Zt=e=>{const t=hn();t!=n&&ot(ee[e],void 0,t);const l=ye(he[e]),o=ye(je[e])&&ye(We[e])&&ye(ve[e])&&ye(Le[e])&&ye(re[e])&&ye(ae[e])&&ye(ue[e])&&l&&ye(ne[e])&&ye(le[e]),r=ye(Be[e])&&ye(Je[e])&&ye(oe[e])&&ye(te[e]);if(!o||!r){const t=e?[De(u),Ae(g),De(C),Ae(m),He(V),He(E)]:[u,g,C,m,V,E];if(!o){Yt(t[0],ne[e],le[e]),Te(t[1],((t,n)=>Yt(t,re[e],ae[e],[n]))),Te(t[2],((t,n)=>{0!=t&&ot(ue[e],[n],rn(n))}));const n=ze();Te(t[3],((t,o)=>{Yt(t,ve[e],Le[e],[o])&&!l&&(ot(he[e],[o,null]),Ne(n,o))})),l||Te(t[5],((t,l)=>{if(!be(n,l)){const n=ze();Te(t,(e=>Te(e,(([t,l],o)=>l!==t?Ne(n,o):we(e,o))))),Te(n,(t=>ot(he[e],[l,t])))}})),Te(t[4],((t,n)=>Te(t,((t,l)=>Yt(t,je[e],We[e],[n,l])))))}if(!r){let n;Te(t[5],((t,l)=>{let o;Te(t,((t,r)=>{let s;Te(t,(([t,a],i)=>{a!==t&&(ot(Be[e],[l,r,i],a,t,Gt),n=o=s=1)})),s&&ot(Je[e],[l,r],Gt)})),o&&ot(oe[e],[l],Gt)})),n&&ot(te[e],void 0,Gt)}}},en=e=>{const t=Ln();t!=l&&ot(Ke[e],void 0,t);const n=ye(Ye[e])&&ye(Ze[e]),o=ye(et[e])&&ye(Xe[e]);if(!n||!o){const t=e?[De(x),De(O)]:[x,O];if(n||Yt(t[0],Ye[e],Ze[e]),!o){let n;Te(t[1],(([t,l],o)=>{l!==t&&(ot(et[e],[o],l,t,Kt),n=1)})),n&&ot(Xe[e],void 0,Kt)}}},tn=(e,...t)=>(kn((()=>e(...q(t,M)))),Hn),nn=()=>ke(Y),ln=()=>Se(Y),on=e=>Se(Re(U,M(e))),rn=e=>pe(Re(Y,M(e))),sn=e=>Se(Re(Y,M(e))),an=(e,t,n,l=0,o)=>{return q(j(_((r=Re(Y,M(e)),s=(e,n)=>[k(t)?n:Re(e,M(t)),n],q([...null!=(a=null==r?void 0:r.entries())?a:[]],(([e,t])=>s(t,e)))),(([e],[t])=>Ue(e,t)*(n?-1:1))),l,k(o)?o:l+o),(([,e])=>e));var r,s,a},dn=(e,t)=>Se(Re(Re(Y,M(e)),M(t))),un=(e,t,n)=>Re(Re(Re(Y,M(e)),M(t)),M(n)),cn=()=>xe(Z),vn=()=>Se(Z),gn=e=>Re(Z,M(e)),hn=()=>!ye(Y),fn=e=>be(Y,M(e)),pn=(e,t)=>be(Re(U,M(e)),M(t)),bn=(e,t)=>be(Re(Y,M(e)),M(t)),yn=(e,t,n)=>be(Re(Re(Y,M(e)),M(t)),M(n)),Ln=()=>!ye(Z),Cn=e=>be(Z,M(e)),Tn=e=>tn((()=>(e=>fe(e,it,$t))(e)?yt(e):0)),wn=e=>tn((()=>ct(e)?St(e):0)),In=e=>{try{bt(xt(e))}catch(e){}return Hn},Sn=t=>tn((()=>{if((e=fe(t,(e=>fe(e,at))))&&(ft(t),!ye(Y))){const e=nn();Mn(),Tn(e)}})),Rn=e=>tn((()=>{if(t=(e=>fe(e,at))(e)){const n=cn();On(),En(),t=!0,pt(e),wn(n)}})),Mn=()=>tn((()=>yt({}))),mn=e=>tn((e=>be(Y,e)?Jt(e):0),e),Vn=(e,t)=>tn(((e,t)=>D(Re(Y,e),(n=>be(n,t)?Pt(e,n,t):0))),e,t),En=()=>tn((()=>St({}))),xn=()=>tn((()=>{ft({}),e=!1})),On=()=>tn((()=>{pt({}),t=!1})),kn=(e,t)=>{if(-1!=o){Dn();const n=e();return An(t),n}},Dn=()=>(-1!=o&&o++,1==o&&ot(tt,void 0),Hn),An=e=>{var t,r;return o>0&&(o--,0==o&&(o=1,Ut(1),ye(E)||Zt(1),Xt(1),ye(O)||en(1),(null==e?void 0:e(Hn))&&(Te(E,((e,t)=>Te(e,((e,n)=>Te(e,(([e],l)=>Fe(Hn,t,n,l,e))))))),Ce(E),Te(O,(([e],t)=>Qe(Hn,t,e))),Ce(O)),ot(nt[0],void 0),o=-1,Ut(0),ye(E)||Zt(0),Xt(0),ye(O)||en(0),null==(t=s[0])||t.call(s,Hn),ot(nt[1],void 0),null==(r=s[1])||r.call(s,Hn),o=0,n=hn(),l=Ln(),$([u,g,C,m,V,E,H,x,O,P],Ce))),Hn},Hn={getContent:()=>[nn(),cn()],getTables:nn,getTableIds:ln,getTable:e=>Oe(Re(Y,M(e))),getTableCellIds:on,getRowCount:rn,getRowIds:sn,getSortedRowIds:an,getRow:(e,t)=>xe(Re(Re(Y,M(e)),M(t))),getCellIds:dn,getCell:un,getValues:cn,getValueIds:vn,getValue:gn,hasTables:hn,hasTable:fn,hasTableCell:pn,hasRow:bn,hasCell:yn,hasValues:Ln,hasValue:Cn,getTablesJson:()=>Et(Y),getValuesJson:()=>Et(Z),getJson:()=>Et([Y,Z]),getTablesSchemaJson:()=>Et(F),getValuesSchemaJson:()=>Et(N),getSchemaJson:()=>Et([F,N]),hasTablesSchema:()=>e,hasValuesSchema:()=>t,setContent:([e,t])=>tn((()=>{(ge(e)?Mn:Tn)(e),(ge(t)?En:wn)(t)})),setTables:Tn,setTable:(e,t)=>tn((e=>it(t,e)?Lt(e,t):0),e),setRow:(e,t,n)=>tn(((e,t)=>dt(e,t,n)?Ct(e,Ht(e),t,n):0),e,t),addRow:(e,t,n=!0)=>kn((()=>{let l;return dt(e,l,t)&&(e=M(e),Ct(e,Ht(e),l=At(e,n?1:0),t)),l})),setPartialRow:(e,t,n)=>tn(((e,t)=>{if(dt(e,t,n,1)){const l=Ht(e);ce(n,((n,o)=>wt(e,l,t,o,n)))}}),e,t),setCell:(e,t,n,l)=>tn(((e,t,n)=>D(ut(e,t,n,J(l)?l(un(e,t,n)):l),(l=>wt(e,Ht(e),t,n,l)))),e,t,n),setValues:wn,setPartialValues:e=>tn((()=>ct(e,1)?ce(e,((e,t)=>Dt(t,e))):0)),setValue:(e,t)=>tn((e=>D(vt(e,J(t)?t(gn(e)):t),(t=>Dt(e,t)))),e),applyChanges:e=>tn((()=>{ce(e[0],((e,t)=>k(e)?mn(t):ce(e,((e,n)=>k(e)?Vn(t,n):ce(e,((e,l)=>Fe(Hn,t,n,l,e))))))),ce(e[1],((e,t)=>Qe(Hn,t,e)))})),setTablesJson:In,setValuesJson:e=>{try{It(xt(e))}catch(e){}return Hn},setJson:e=>tn((()=>{try{const[t,n]=xt(e);bt(t),It(n)}catch(t){In(e)}})),setTablesSchema:Sn,setValuesSchema:Rn,setSchema:(e,t)=>tn((()=>{Sn(e),Rn(t)})),delTables:Mn,delTable:mn,delRow:Vn,delCell:(e,t,n,l)=>tn(((e,t,n)=>D(Re(Y,e),(o=>D(Re(o,t),(r=>be(r,n)?jt(e,o,t,r,n,l):0))))),e,t,n),delValues:En,delValue:e=>tn((e=>be(Z,e)?Ft(e):0),e),delTablesSchema:xn,delValuesSchema:On,delSchema:()=>tn((()=>{xn(),On()})),transaction:kn,startTransaction:Dn,getTransactionChanges:()=>[xe(E,((e,t)=>-1===Re(u,t)?void 0:xe(e,((e,n)=>-1===Re(Re(m,t),n)?void 0:xe(e,(([,e])=>e),(e=>Vt(e)))),ye,ge)),ye,ge),xe(O,(([,e])=>e),(e=>Vt(e))),1],getTransactionLog:()=>[!ye(E),!ye(O),ke(E,mt,Vt),ke(H),xe(O,mt,Vt),xe(P),xe(u),Oe(m),ke(V),xe(x)],finishTransaction:An,forEachTable:e=>Te(Y,((t,n)=>e(n,(e=>Te(t,((t,n)=>e(n,(e=>Me(t,e))))))))),forEachTableCell:(e,t)=>Me(Re(U,M(e)),t),forEachRow:(e,t)=>Te(Re(Y,M(e)),((e,n)=>t(n,(t=>Me(e,t))))),forEachCell:(e,t,n)=>Me(Re(Re(Y,M(e)),M(t)),n),forEachValue:e=>Me(Z,e),addSortedRowIdsListener:(e,t,n,l,o,r,s)=>{let a=an(e,t,n,l,o);return lt((()=>{const s=an(e,t,n,l,o);W(s,a)||(a=s,r(Hn,e,t,n,l,o,a))}),he[s?1:0],[e,t],[ln])},addStartTransactionListener:e=>lt(e,tt),addWillFinishTransactionListener:e=>lt(e,nt[0]),addDidFinishTransactionListener:e=>lt(e,nt[1]),callListener:e=>(st(e),Hn),delListener:e=>(rt(e),Hn),getListenerStats:()=>({}),createStore:kt,addListener:lt,callListeners:ot,setInternalListeners:(e,t)=>s=[e,t]};return ce({[v+f]:[0,ee,[],()=>[hn()]],[f]:[0,te],[p]:[0,ne],[v+h]:[1,le,[ln],e=>[fn(...e)]],[h]:[1,oe,[ln]],[h+w]:[1,re,[ln]],[v+h+T]:[2,ae,[ln,on],e=>[pn(...e)]],[y]:[1,ue,[ln]],[L]:[1,ve,[ln]],[v+b]:[2,Le,[ln,sn],e=>[bn(...e)]],[b]:[2,Je,[ln,sn]],[w]:[2,je,[ln,sn]],[v+T]:[3,We,[ln,sn,dn],e=>[yn(...e)]],[T]:[3,Be,[ln,sn,dn],e=>Rt(un(...e))],InvalidCell:[3,_e],[v+S]:[0,Ke,[],()=>[Ln()]],[S]:[0,Xe],[R]:[0,Ye],[v+I]:[1,Ze,[vn],e=>[Cn(...e)]],[I]:[1,et,[vn],e=>Rt(gn(e[0]))],InvalidValue:[1,$e]},(([e,t,n,l],o)=>{Hn[c+o+d]=(...o)=>lt(o[e],t[o[e+1]?1:0],e>0?j(o,0,e):void 0,n,l)})),se(Hn)};var Dt=Math.pow;const At=Dt(2,36),Ht=Dt(2,30),Jt=Dt(2,24),Pt=Dt(2,18),jt=Dt(2,12),Ft=Dt(2,6),Qt=e=>String.fromCharCode(48+(63&e)),zt=(e,t)=>((e,t)=>e.charCodeAt(t))(e,t)-48,Nt={HasTable:1,Table:1,TableCellIds:1,HasTableCell:2,RowCount:1,RowIds:1,SortedRowIds:5,HasRow:2,Row:2,CellIds:2,HasCell:3,Cell:3,HasValue:1,Value:1,InvalidCell:3,InvalidValue:1},Wt=(e="")=>[e,[wt(e),wt(e)],0];e.createCheckpoints=Ke,e.createCustomPersister=(e,t,n,l,o,r,s,a={},i=[])=>{let d,u,c,v=0;Ve(at,i,(()=>0)),Ve(it,i,(()=>[]));const[g,h,f,p]=((e,t)=>!e||k(t.getMergeableContent)?[0,t.getContent,t.getTransactionChanges,([e,t])=>!ge(e)||!ge(t)]:[1,t.getMergeableContent,t.getTransactionMergeableChanges,([,[[,e],[,t]]])=>!ge(e)||!ge(t)])(s,e),b=e=>st(void 0,null,(function*(){return 2!=v&&(v=1,yield L.schedule((()=>st(void 0,null,(function*(){yield e(),v=0}))))),L})),y=t=>{(g&&H(null==t?void 0:t[0])?1===(null==t?void 0:t[1][2])?e.applyMergeableChanges:e.setMergeableContent:1===(null==t?void 0:t[2])?e.applyChanges:e.setContent)(t)},L=((e,t)=>{for(var n in t||(t={}))lt.call(t,n)&&rt(e,n,t[n]);if(nt)for(var n of nt(t))ot.call(t,n)&&rt(e,n,t[n]);return e})({load:(n,l)=>st(void 0,null,(function*(){return yield b((()=>st(void 0,null,(function*(){try{y(yield t())}catch(t){null==r||r(t),e.setContent([n,l])}}))))})),startAutoLoad:(...e)=>st(void 0,[...e],(function*(e={},n={}){return yield L.stopAutoLoad().load(e,n),u=l(((e,n)=>st(void 0,null,(function*(){const l=null==n?void 0:n();yield b((()=>st(void 0,null,(function*(){var n;try{y(null!=(n=null!=l?l:null==e?void 0:e())?n:yield t())}catch(e){null==r||r(e)}}))))})))),L})),stopAutoLoad:()=>(u&&(o(u),u=void 0),L),isAutoLoading:()=>!k(u),save:e=>st(void 0,null,(function*(){return 1!=v&&(v=2,yield L.schedule((()=>st(void 0,null,(function*(){try{yield n(h,e)}catch(e){null==r||r(e)}v=0}))))),L})),startAutoSave:()=>st(void 0,null,(function*(){return yield L.stopAutoSave().save(),c=e.addDidFinishTransactionListener((()=>{const e=f();p(e)&&L.save((()=>e))})),L})),stopAutoSave:()=>(D(c,e.delListener),c=void 0,L),isAutoSaving:()=>!k(c),schedule:(...e)=>st(void 0,null,(function*(){return X(Re(it,i),...e),yield st(void 0,null,(function*(){if(!Re(at,i)){for(me(at,i,1);!k(d=Z(Re(it,i)));)try{yield d()}catch(e){null==r||r(e)}me(at,i,0)}})),L})),getStore:()=>e,destroy:()=>L.stopAutoLoad().stopAutoSave(),getStats:()=>({})},a);return se(L)},e.createIndexes=Xe,e.createMergeableStore=e=>{let t,l,o=1,r=Wt();const[s,a]=(e=>{let t=0,n=-1;const l=ft(e),o=e=>{const l=t,[o,r]=k(e)||""==e?[0,0]:[zt(s=e,0)*At+zt(s,1)*Ht+zt(s,2)*Jt+zt(s,3)*Pt+zt(s,4)*jt+zt(s,5)*Ft+zt(s,6),zt(s,7)*Pt+zt(s,8)*jt+zt(s,9)*Ft+zt(s,10),zt(s,11)*Jt+zt(s,12)*Pt+zt(s,13)*jt+zt(s,14)*Ft+zt(s,15)];var s;t=E(l,o,Date.now()),n=t==l?t==o?E(n,r):n:t==o?r:-1};return[()=>{return o(),r=++n,s=l,Qt((e=t)/At)+Qt(e/Ht)+Qt(e/Jt)+Qt(e/Pt)+Qt(e/jt)+Qt(e/Ft)+Qt(e)+Qt(r/Pt)+Qt(r/jt)+Qt(r/Ft)+Qt(r)+Qt(s/Jt)+Qt(s/Pt)+Qt(s/jt)+Qt(s/Ft)+Qt(s);var e,r,s},o]})(e),i=kt(),d=e=>{const t=o;return o=0,e(),o=t,f},u=(e,t=0)=>{const n={},l={},[o,[[s,a,i],d],u]=e,[,[v,g]]=r,[h,f,p]=v;if(s){let e=t?i:p^(s>h?(h?ft(h):0)^ft(s):0);ue(a,(([l,o,r],s)=>{const a=Ve(f,s,wt),[i,d,u]=a;let v=t?r:u^(l>i?(i?ft(i):0)^ft(l):0);ue(o,((e,l)=>{const[o,r]=c(e,Ve(d,l,wt),he(he(n,s,ae),l,ae),t);v^=t?0:(o?Lt(l,o):0)^Lt(l,r)})),Ct(a,v,l),e^=t?0:(u?Lt(s,u):0)^Lt(s,a[2])})),Ct(v,e,s)}return c(d,g,l,t),Ct(r,t?u:v[2]^g[2],o),[n,l,1]},c=(e,t,l,o)=>{const[r,s,a]=e,[i,d,u]=t;if(r){let e=o?a:u^(r>i?(i?ft(i):0)^ft(r):0);ue(s,(([t,r,s],a)=>{const i=Ve(d,a,(()=>[n,void 0,0])),[u,,c]=i;t>u&&(Ct(i,o?s:ft(Et(null!=r?r:null)+":"+t),t),i[1]=r,l[a]=r,e^=o?0:Lt(a,c)^Lt(a,i[2]))})),Ct(t,e,r)}return[u,t[2]]},v=()=>[r[0],[It(r[1][0],(e=>It(e,(e=>It(e))))),It(r[1][1])],r[2]],g=()=>{if(k(l)){const[,,e,,l]=i.getTransactionLog(),o=ge(e)&&ge(l)?n:null!=t?t:t=s(),r=[o,[Tt(ge(e)?n:o),Tt(ge(l)?n:o),1]],[[,a],[,d]]=r[1];return ce(e,((e,t)=>{const[,n]=a[t]=Tt(o);ce(e,((e,t)=>{const[,l]=n[t]=Tt(o);ce(e,(([,e],t)=>l[t]=[o,e]))}))})),ce(l,(([,e],t)=>d[t]=[o,e])),r}return l},h=e=>d((()=>{a(e[0]),i.applyChanges(u(e))})),f={getId:()=>e,getMergeableContent:v,getMergeableContentHashes:()=>[r[0],[r[1][0][2],r[1][1][2]]],getMergeableTableHashes:()=>xe(r[1][0][1],yt),getMergeableTableIdsDiff:e=>{const t=[];return Me(r[1][0][1],((n,[,,l])=>{l!==(null==e?void 0:e[n])&&X(t,n)})),t},getMergeableRowHashes:e=>ae(q(e,(e=>{var t;return[e,xe(null==(t=Re(r[1][0][1],e))?void 0:t[1],yt)]}))),getMergeableRowIdsDiff:e=>ve(e,((e,t)=>{var n;const l=[];return Me(null==(n=Re(r[1][0][1],t))?void 0:n[1],((t,[,,n])=>{n!==(null==e?void 0:e[t])&&X(l,t)})),l})),getMergeableCellHashes:e=>ve(e,((e,t)=>ae(q(e,(e=>{var n,l;return[e,xe(null==(l=Re(null==(n=Re(r[1][0][1],t))?void 0:n[1],e))?void 0:l[1],yt)]}))))),getMergeableTablesChanges:e=>{const[,[[t,n]]]=r,l={};return ue(e,((e,t)=>D(Re(n,t),(([n,o])=>{const r={};ue(e,((e,t)=>D(Re(o,t),(([n,l])=>{const o=xe(l,bt,(([,,t],n)=>t==(null==e?void 0:e[n])));ge(o)||(r[t]=[n,o])})))),ge(r)||(l[t]=[n,r])})))),[t,l]},getMergeableValuesHashes:()=>xe(r[1][1][1],yt),getMergeableValuesChanges:e=>[r[1][1][0],xe(r[1][1][1],bt,(([,,t],n)=>t==(null==e?void 0:e[n])))],setMergeableContent:e=>d((()=>(e=>St(e,(e=>P(e)&&2==F(e)&&St(e[0],(e=>fe(e,(e=>St(e,(e=>fe(e,(e=>St(e,(e=>fe(e,(e=>St(e,je)),void 0,1)))),void 0,1)))),void 0,1)))&&St(e[1],(e=>fe(e,(e=>St(e,je)),void 0,1))))))(e)?i.transaction((()=>{i.delTables().delValues(),r=Wt(),a(e[0]),i.applyChanges(u(e,1))})):0)),getTransactionMergeableChanges:g,applyMergeableChanges:h,merge:e=>{const t=v(),n=e.getMergeableContent();return e.applyMergeableChanges(t),h(n)}};return i.setInternalListeners((()=>{o&&(l=g(),u(l))}),(()=>t=l=void 0)),ce(i,((e,t)=>f[t]=m(t,"set")||m(t,"del")||m(t,"apply")||V(t,"Transaction")||"callListener"==t?(...t)=>(e(...t),f):m(t,"add")&&V(t,"Listener")?(...n)=>{var l;const o=null!=(l=Nt[j(t,3,-8)])?l:0,r=n[o];return n[o]=(e,...t)=>r(f,...t),e(...n)}:e)),se(f)},e.createMetrics=et,e.createQueries=vt,e.createRelationships=gt,e.createStore=kt,e.defaultSorter=Ue},"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).TinyBase={});
|
|
1
|
+
var e,t;e=this,t=function(e){"use strict";const t=e=>typeof e,n="",l=t(n),o=t(!0),s=t(0),r=t(t),a="type",i="default",d="Listener",u="Result",c="add",g="Has",v="Ids",h="Table",f=h+"s",b=h+v,y="Row",p=y+"Count",C=y+v,L="Sorted"+y+v,T="Cell",w=T+v,S="Value",I=S+"s",R=S+v,M=e=>n+e,m=(e,t)=>e.startsWith(t),V=(e,t)=>e.endsWith(t),E=Promise,x=Math.max,A=Math.min,H=isFinite,O=e=>null==e,D=(e,t,n)=>O(e)?null==n?void 0:n():t(e),k=e=>e==l||e==o,P=e=>t(e)==l,J=e=>t(e)==r,j=e=>Array.isArray(e),F=(e,t,n)=>e.slice(t,n),Q=e=>e.length,z=()=>{},N=(e,t)=>e.includes(t),W=(e,t)=>e.every(t),$=(e,t)=>Q(e)===Q(t)&&W(e,((e,n)=>t[n]===e)),B=(e,t)=>W(e,((n,l)=>0==l||t(e[l-1],n)<=0)),_=(e,t)=>e.sort(t),q=(e,t)=>e.forEach(t),G=(e,t)=>e.map(t),K=e=>X(e,((e,t)=>e+t),0),U=e=>0==Q(e),X=(e,t,n)=>e.reduce(t,n),Y=(e,...t)=>e.push(...t),Z=e=>e.pop(),ee=e=>e.shift(),te=Object,ne=e=>te.getPrototypeOf(e),le=te.entries,oe=te.isFrozen,se=e=>!O(e)&&D(ne(e),(e=>e==te.prototype||O(ne(e))),(()=>!0)),re=te.keys,ae=te.freeze,ie=(e=[])=>te.fromEntries(e),de=(e,t)=>t in e,ue=(e,t)=>(delete e[t],e),ce=(e,t)=>q(le(e),(([e,n])=>t(n,e))),ge=(e,t)=>G(le(e),(([e,n])=>t(n,e))),ve=(e,t)=>ie(ge(e,((e,n)=>[n,t(e,n)]))),he=e=>se(e)&&0==(e=>Q(re(e)))(e),fe=(e,t,n)=>(de(e,t)||(e[t]=n()),e[t]),be=(e,t,n,l=0)=>O(e)||!se(e)||!l&&he(e)||oe(e)?(null==n||n(),!1):(ge(e,((n,l)=>{t(n,l)||ue(e,l)})),!!l||!he(e)),ye=e=>{var t;return null!=(t=null==e?void 0:e.size)?t:0},pe=(e,t)=>{var n;return null!=(n=null==e?void 0:e.has(t))&&n},Ce=e=>O(e)||0==ye(e),Le=e=>{var t;return[...null!=(t=null==e?void 0:e.values())?t:[]]},Te=e=>e.clear(),we=(e,t)=>null==e?void 0:e.forEach(t),Se=(e,t)=>null==e?void 0:e.delete(t),Ie=e=>new Map(e),Re=e=>{var t;return[...null!=(t=null==e?void 0:e.keys())?t:[]]},Me=(e,t)=>null==e?void 0:e.get(t),me=(e,t)=>we(e,((e,n)=>t(n,e))),Ve=(e,t,n)=>O(n)?(Se(e,t),e):null==e?void 0:e.set(t,n),Ee=(e,t,n,l)=>(pe(e,t)?null==l||l(Me(e,t)):Ve(e,t,n()),Me(e,t)),xe=(e,t,n,l=Ve)=>(ge(t,((t,l)=>n(e,l,t))),me(e,(n=>de(t,n)?0:l(e,n))),e),Ae=(e,t,n,l)=>{const o={};return we(e,((e,s)=>{if(!(null==n?void 0:n(e,s))){const n=t?t(e,s):e;!(null==l?void 0:l(n))&&(o[s]=n)}})),o},He=(e,t,n)=>Ae(e,(e=>Ae(e,t,n)),Ce,he),Oe=(e,t,n)=>Ae(e,(e=>He(e,t,n)),Ce,he),De=(e,t)=>{const n=Ie();return we(e,((e,l)=>{var o;return n.set(l,null!=(o=null==t?void 0:t(e))?o:e)})),n},ke=e=>De(e,De),Pe=e=>De(e,ke),Je=(e,t,n,l,o=0)=>D((n?Ee:Me)(e,t[o],o>Q(t)-2?n:Ie),(s=>{if(o>Q(t)-2)return(null==l?void 0:l(s))&&Ve(e,t[o]),s;const r=Je(s,t,n,l,o+1);return Ce(s)&&Ve(e,t[o]),r})),je=e=>{const n=t(e);return k(n)||n==s&&H(e)?n:void 0},Fe=e=>null===e||!O(je(e)),Qe=(e,t,n,l,o)=>O(o)?e.delCell(t,n,l,!0):e.setCell(t,n,l,o),ze=(e,t,n)=>O(n)?e.delValue(t):e.setValue(t,n),Ne=e=>new Set(j(e)||O(e)?e:[e]),We=(e,t)=>null==e?void 0:e.add(t),$e=(e,t,n,l,o)=>{const s=e.hasRow,r=Ie(),a=Ie(),i=Ie(),d=Ie(),u=Ie(),c=Ie(),g=(t,n,...l)=>{const o=Ee(c,t,Ne);return q(l,(t=>We(o,t)&&n&&e.callListener(t))),l},v=(t,...n)=>D(Me(c,t),(l=>{q(U(n)?Le(l):n,(t=>{e.delListener(t),Se(l,t)})),Ce(l)&&Ve(c,t)})),h=(e,n)=>{Ve(r,e,n),pe(a,e)||(Ve(a,e,t()),Ve(d,e,Ie()),Ve(u,e,Ie()),o(i))},f=e=>{Ve(r,e),Ve(a,e),Ve(d,e),Ve(u,e),v(e),o(i)};return[()=>e,()=>Re(r),e=>me(a,e),e=>pe(a,e),e=>Me(r,e),e=>Me(a,e),(e,t)=>Ve(a,e,t),h,(t,l,o,r,a)=>{h(t,l);const i=Ie(),c=Ie(),f=Me(d,t),b=Me(u,t),y=t=>{const o=n=>e.getCell(l,t,n),d=Me(f,t),u=s(l,t)?n(r(o,t)):void 0;if(d===u||j(d)&&j(u)&&$(d,u)||Ve(i,t,[d,u]),!O(a)){const e=Me(b,t),n=s(l,t)?a(o,t):void 0;e!=n&&Ve(c,t,n)}},p=e=>{o((()=>{we(i,(([,e],t)=>Ve(f,t,e))),we(c,((e,t)=>Ve(b,t,e)))}),i,c,f,b,e),Te(i),Te(c)};me(f,y),e.hasTable(l)&&q(e.getRowIds(l),(e=>{pe(f,e)||y(e)})),p(!0),v(t),g(t,0,e.addRowListener(l,null,((e,t,n)=>y(n))),e.addTableListener(l,(()=>p())))},f,e=>l(e,i),()=>me(c,f),g,v]},Be=(e,t)=>P(e)?t=>t(e):null!=e?e:()=>null!=t?t:n,_e=(e,t)=>{const n=new WeakMap;return l=>{n.has(l)||n.set(l,e(l));const o=n.get(l);return null==t||t(o),o}},qe=/^\d+$/,Ge=()=>{const e=[];let t=0;return[l=>{var o;return null!=(o=l?ee(e):null)?o:n+t++},t=>{qe.test(t)&&Q(e)<1e3&&Y(e,t)}]},Ke=e=>{let t;const[l,o]=Ge(),s=Ie();return[(o,r,a,i=[],d=(()=>[]))=>{null!=t||(t=e());const u=l(1);return Ve(s,u,[o,r,a,i,d]),We(Je(r,null!=a?a:[n],Ne),u),u},(e,l,...o)=>q(((e,t=[n])=>{const l=[],o=(e,n)=>n==Q(t)?Y(l,e):null===t[n]?we(e,(e=>o(e,n+1))):q([t[n],null],(t=>o(Me(e,t),n+1)));return o(e,0),l})(e,l),(e=>we(e,(e=>Me(s,e)[0](t,...null!=l?l:[],...o))))),e=>D(Me(s,e),(([,t,l])=>(Je(t,null!=l?l:[n],void 0,(t=>(Se(t,e),Ce(t)?1:0))),Ve(s,e),o(e),l))),e=>D(Me(s,e),(([e,,n=[],l,o])=>{const s=(...r)=>{var a,i;const d=Q(r);d==Q(n)?e(t,...r,...o(r)):O(n[d])?q(null!=(i=null==(a=l[d])?void 0:a.call(l,...r))?i:[],(e=>s(...r,e))):s(...r,n[d])};s()}))]},Ue=_e((e=>{let t,l,o,s=100,r=Ie(),a=Ie(),i=1;const d=Ie(),u=Ie(),[c,g,v]=Ke((()=>k)),h=Ie(),f=Ie(),b=[],y=[],p=(t,n)=>{i=0,e.transaction((()=>{const[l,o]=Me(h,n);we(l,((n,l)=>we(n,((n,o)=>we(n,((n,s)=>Qe(e,l,o,s,n[t]))))))),we(o,((n,l)=>ze(e,l,n[t])))})),i=1},C=e=>{Ve(h,e),Ve(f,e),g(u,[e])},L=(e,t)=>q(((e,t)=>e.splice(0,t))(e,null!=t?t:Q(e)),C),T=()=>L(b,Q(b)-s),w=()=>D(t,(()=>{Y(b,t),T(),L(y),t=void 0,o=1})),S=()=>{t=Z(b),o=1};let I,R;const M=(e="")=>(O(t)&&(t=n+l++,Ve(h,t,[r,a]),A(t,e),r=Ie(),a=Ie(),o=1),t),m=()=>{U(b)||(((e,...t)=>{e.unshift(...t)})(y,M()),p(0,t),t=Z(b),o=1)},V=()=>{U(y)||(Y(b,t),t=ee(y),p(1,t),o=1)},E=()=>{o&&(g(d),o=0)},x=e=>{const t=M(e);return E(),t},A=(e,t)=>(H(e)&&Me(f,e)!==t&&(Ve(f,e,t),g(u,[e])),k),H=e=>pe(h,e),k={setSize:e=>(s=e,T(),k),addCheckpoint:x,setCheckpoint:A,getStore:()=>e,getCheckpointIds:()=>[[...b],t,[...y]],forEachCheckpoint:e=>me(f,e),hasCheckpoint:H,getCheckpoint:e=>Me(f,e),goBackward:()=>(m(),E(),k),goForward:()=>(V(),E(),k),goTo:e=>{const n=N(b,e)?m:N(y,e)?V:null;for(;!O(n)&&e!=t;)n();return E(),k},addCheckpointIdsListener:e=>c(e,d),addCheckpointListener:(e,t)=>c(t,u,[e]),delListener:e=>(v(e),k),clear:()=>(L(b),L(y),O(t)||C(t),t=void 0,l=0,x(),k),clearForward:()=>(U(y)||(L(y),g(d)),k),destroy:()=>{e.delListener(I),e.delListener(R)},getListenerStats:()=>({}),_registerListeners:()=>{I=e.addCellListener(null,null,null,((e,t,n,l,o,s)=>{if(i){w();const e=Ee(r,t,Ie),a=Ee(e,n,Ie),i=Ee(a,l,(()=>[s,void 0]));i[1]=o,i[0]===o&&Ce(Ve(a,l))&&Ce(Ve(e,n))&&Ce(Ve(r,t))&&S(),E()}})),R=e.addValueListener(null,((e,t,n,l)=>{if(i){w();const e=Ee(a,t,(()=>[l,void 0]));e[1]=n,e[0]===n&&Ce(Ve(a,t))&&S(),E()}}))}};return ae(k.clear())}),(e=>e._registerListeners())),Xe=(e,t)=>(null!=e?e:0)<(null!=t?t:0)?-1:1,Ye=_e((e=>{const t=Ie(),l=Ie(),[o,s,r]=Ke((()=>C)),[a,i,d,u,c,g,v,,h,f,b,y]=$e(e,Ie,(e=>O(e)?n:j(e)?G(e,M):M(e)),o,s),p=(t,n,l)=>{const o=c(t);we(l,((t,l)=>n(l,(n=>we(t,(t=>n(t,(n=>e.forEachCell(o,t,n)))))))))},C={setIndexDefinition:(e,n,o,r,a,i=Xe)=>{const d=O(a)?void 0:([e],[t])=>a(e,t);return h(e,n,((n,o,a,u,c,h)=>{let f=0;const b=Ne(),y=Ne(),p=g(e);if(we(o,(([e,t],n)=>{const l=Ne(e),o=Ne(t);we(l,(e=>Se(o,e)?Se(l,e):0)),we(l,(e=>{We(b,e),D(Me(p,e),(t=>{Se(t,n),Ce(t)&&(Ve(p,e),f=1)}))})),we(o,(e=>{We(b,e),pe(p,e)||(Ve(p,e,Ne()),f=1),We(Me(p,e),n),O(r)||We(y,e)}))})),n(),Ce(c)||(h?me(p,(e=>We(y,e))):me(a,(e=>D(Me(u,e),(e=>We(y,e))))),we(y,(e=>{const t=(t,n)=>i(Me(c,t),Me(c,n),e),n=[...Me(p,e)];B(n,t)||(Ve(p,e,Ne(_(n,t))),We(b,e))}))),(f||h)&&!O(d)){const t=[...p];B(t,d)||(v(e,Ie(_(t,d))),f=1)}f&&s(t,[e]),we(b,(t=>s(l,[e,t])))}),Be(o),D(r,Be)),C},delIndexDefinition:e=>(f(e),C),getStore:a,getIndexIds:i,forEachIndex:e=>d(((t,n)=>e(t,(e=>p(t,e,n))))),forEachSlice:(e,t)=>p(e,t,g(e)),hasIndex:u,hasSlice:(e,t)=>pe(g(e),t),getTableId:c,getSliceIds:e=>Re(g(e)),getSliceRowIds:(e,t)=>Le(Me(g(e),t)),addIndexIdsListener:b,addSliceIdsListener:(e,n)=>o(n,t,[e]),addSliceRowIdsListener:(e,t,n)=>o(n,l,[e,t]),delListener:e=>(r(e),C),destroy:y,getListenerStats:()=>({})};return ae(C)})),Ze=Ie([["avg",[(e,t)=>K(e)/t,(e,t,n)=>e+(t-e)/(n+1),(e,t,n)=>e+(e-t)/(n-1),(e,t,n,l)=>e+(t-n)/l]],["max",[e=>x(...e),(e,t)=>x(t,e),(e,t)=>t==e?void 0:e,(e,t,n)=>n==e?void 0:x(t,e)]],["min",[e=>A(...e),(e,t)=>A(t,e),(e,t)=>t==e?void 0:e,(e,t,n)=>n==e?void 0:A(t,e)]],["sum",[e=>K(e),(e,t)=>e+t,(e,t)=>e-t,(e,t,n)=>e-n+t]]]),et=(e,t,n,l,o,s=!1)=>{if(Ce(n))return;const[r,a,i,d]=o;return s||(s=O(e)),we(l,(([n,l])=>{s||(e=O(n)?null==a?void 0:a(e,l,t++):O(l)?null==i?void 0:i(e,n,t--):null==d?void 0:d(e,l,n,t),s||(s=O(e)))})),s?r(Le(n),ye(n)):e},tt=_e((e=>{const t=Ie(),[l,o,s]=Ke((()=>y)),[r,a,i,d,u,c,g,,v,h,f,b]=$e(e,z,(e=>isNaN(e)||O(e)||!0===e||!1===e||e===n?void 0:1*e),l,o),y={setMetricDefinition:(e,n,l,s,r,a,i)=>{var d;const u=J(l)?[l,r,a,i]:null!=(d=Me(Ze,l))?d:Me(Ze,"sum");return v(e,n,((n,l,s,r,a,i)=>{const d=c(e),v=ye(r);i||(i=O(d)),n();let h=et(d,v,r,l,u,i);H(h)||(h=void 0),h!=d&&(g(e,h),o(t,[e],h,d))}),Be(s,1)),y},delMetricDefinition:e=>(h(e),y),getStore:r,getMetricIds:a,forEachMetric:i,hasMetric:d,getTableId:u,getMetric:c,addMetricIdsListener:f,addMetricListener:(e,n)=>l(n,t,[e]),delListener:e=>(s(e),y),destroy:b,getListenerStats:()=>({})};return ae(y)}));var nt=Object.defineProperty,lt=Object.getOwnPropertySymbols,ot=Object.prototype.hasOwnProperty,st=Object.prototype.propertyIsEnumerable,rt=(e,t,n)=>t in e?nt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,at=(e,t,n)=>new Promise(((l,o)=>{var s=e=>{try{a(n.next(e))}catch(e){o(e)}},r=e=>{try{a(n.throw(e))}catch(e){o(e)}},a=e=>e.done?l(e.value):Promise.resolve(e.value).then(s,r);a((n=n.apply(e,t)).next())}));const it=Ie(),dt=Ie(),ut=(e,t,n,l,o,s,r,a={},i=[])=>{let d,u,c,g=0;Ee(it,i,(()=>0)),Ee(dt,i,(()=>[]));const[v,h,f,b]=((e,t)=>!e||O(t.getMergeableContent)?[0,t.getContent,t.getTransactionChanges,([e,t])=>!he(e)||!he(t)]:[1,t.getMergeableContent,t.getTransactionMergeableChanges,([,[[,e],[,t]]])=>!he(e)||!he(t)])(r,e),y=e=>at(void 0,null,(function*(){return 2!=g&&(g=1,yield C.schedule((()=>at(void 0,null,(function*(){yield e(),g=0}))))),C})),p=t=>{(v&&P(null==t?void 0:t[0])?1===(null==t?void 0:t[1][2])?e.applyMergeableChanges:e.setMergeableContent:1===(null==t?void 0:t[2])?e.applyChanges:e.setContent)(t)},C=((e,t)=>{for(var n in t||(t={}))ot.call(t,n)&&rt(e,n,t[n]);if(lt)for(var n of lt(t))st.call(t,n)&&rt(e,n,t[n]);return e})({load:(n,l)=>at(void 0,null,(function*(){return yield y((()=>at(void 0,null,(function*(){try{p(yield t())}catch(t){null==s||s(t),e.setContent([n,l])}}))))})),startAutoLoad:(...e)=>at(void 0,[...e],(function*(e={},n={}){return yield C.stopAutoLoad().load(e,n),u=l(((e,n)=>at(void 0,null,(function*(){const l=null==n?void 0:n();yield y((()=>at(void 0,null,(function*(){var n;try{p(null!=(n=null!=l?l:null==e?void 0:e())?n:yield t())}catch(e){null==s||s(e)}}))))})))),C})),stopAutoLoad:()=>(u&&(o(u),u=void 0),C),isAutoLoading:()=>!O(u),save:e=>at(void 0,null,(function*(){return 1!=g&&(g=2,yield C.schedule((()=>at(void 0,null,(function*(){try{yield n(h,e)}catch(e){null==s||s(e)}g=0}))))),C})),startAutoSave:()=>at(void 0,null,(function*(){return yield C.stopAutoSave().save(),c=e.addDidFinishTransactionListener((()=>{const e=f();b(e)&&C.save((()=>e))})),C})),stopAutoSave:()=>(D(c,e.delListener),c=void 0,C),isAutoSaving:()=>!O(c),schedule:(...e)=>at(void 0,null,(function*(){return Y(Me(dt,i),...e),yield at(void 0,null,(function*(){if(!Me(it,i)){for(Ve(it,i,1);!O(d=ee(Me(dt,i)));)try{yield d()}catch(e){null==s||s(e)}Ve(it,i,0)}})),C})),getStore:()=>e,destroy:()=>C.stopAutoLoad().stopAutoSave(),getStats:()=>({})},a);return ae(C)},ct=new globalThis.TextEncoder,gt=e=>{let t=2166136261;return q(ct.encode(e),(e=>{t^=e,t+=(t<<1)+(t<<4)+(t<<7)+(t<<8)+(t<<24)})),t>>>0};var vt=Math.pow;const ht=vt(2,36),ft=vt(2,30),bt=vt(2,24),yt=vt(2,18),pt=vt(2,12),Ct=vt(2,6),Lt=e=>String.fromCharCode(48+(63&e)),Tt=(e,t)=>((e,t)=>e.charCodeAt(t))(e,t)-48,wt=e=>{let t=0,n=-1;const l=gt(e),o=e=>{const l=t,[o,s]=O(e)||""==e?[0,0]:[Tt(r=e,0)*ht+Tt(r,1)*ft+Tt(r,2)*bt+Tt(r,3)*yt+Tt(r,4)*pt+Tt(r,5)*Ct+Tt(r,6),Tt(r,7)*yt+Tt(r,8)*pt+Tt(r,9)*Ct+Tt(r,10),Tt(r,11)*bt+Tt(r,12)*yt+Tt(r,13)*pt+Tt(r,14)*Ct+Tt(r,15)];var r;t=x(l,o,Date.now()),n=t==l?t==o?x(n,s):n:t==o?s:-1};return[()=>{return o(),s=++n,r=l,Lt((e=t)/ht)+Lt(e/ft)+Lt(e/bt)+Lt(e/yt)+Lt(e/pt)+Lt(e/Ct)+Lt(e)+Lt(s/yt)+Lt(s/pt)+Lt(s/Ct)+Lt(s)+Lt(r/bt)+Lt(r/yt)+Lt(r/pt)+Lt(r/Ct)+Lt(r);var e,s,r},o]};var St=(e,t,n)=>new Promise(((l,o)=>{var s=e=>{try{a(n.next(e))}catch(e){o(e)}},r=e=>{try{a(n.throw(e))}catch(e){o(e)}},a=e=>e.done?l(e.value):Promise.resolve(e.value).then(s,r);a((n=n.apply(e,t)).next())})),It=Object.getOwnPropertySymbols,Rt=Object.prototype.hasOwnProperty,Mt=Object.prototype.propertyIsEnumerable;const mt=_e((e=>{const t=e.createStore,l=t(),o=t(),s=Ie(),{addListener:r,callListeners:a,delListener:i}=o,[g,v,f,b,S,,,I,,R,M,m,V,E]=$e(e,(()=>!0),z,r,a),x=(e,t,...n)=>q(n,(n=>We(Ee(Ee(s,t,Ie),e,Ne),n))),A=e=>{D(Me(s,e),(e=>{me(e,((e,t)=>we(t,(t=>e.delListener(t))))),Te(e)})),q([o,l],(t=>t.delTable(e)))},H=(e,t,n)=>x(t,e,t.addStartTransactionListener(n.startTransaction),t.addDidFinishTransactionListener((()=>n.finishTransaction()))),k={setQueryDefinition:(t,s,r)=>{I(t,s),A(t);const a=[],i=[[null,[s,null,null,[],Ie()]]],d=[],u=[],c=[];r({select:(e,t)=>{const l=J(e)?[Q(a)+n,e]:[O(t)?e:t,n=>n(e,t)];return Y(a,l),{as:e=>l[0]=e}},join:(e,t,n)=>{const l=O(n)||J(t)?null:t,o=O(l)?t:n,s=[e,[e,l,J(o)?o:e=>e(o),[],Ie()]];return Y(i,s),{as:e=>s[0]=e}},where:(e,t,n)=>Y(d,J(e)?e:O(n)?n=>n(e)===t:l=>l(e,t)===n),group:(e,t,n,l,o)=>{var s;const r=[e,[e,J(t)?[t,n,l,o]:null!=(s=Me(Ze,t))?s:[(e,t)=>t]]];return Y(u,r),{as:e=>r[0]=e}},having:(e,t)=>Y(c,J(e)?e:n=>n(e)===t)});const g=Ie(a);if(Ce(g))return k;const v=Ie(i);me(v,((e,[,t])=>D(Me(v,t),(({3:t})=>O(e)?0:Y(t,e)))));const h=Ie(u);let f=l;if(Ce(h)&&U(c))f=o;else{H(t,f,o);const e=Ie();me(h,((t,[n,l])=>We(Ee(e,n,Ne),[t,l])));const n=Ne();me(g,(t=>pe(e,t)?0:We(n,t)));const l=Ie(),s=(n,l,s,r)=>D(n,(([a,i,d,u])=>{me(l,((t,[n])=>{const l=Ee(a,t,Ie),o=Me(l,s),i=r?void 0:n;if(o!==i){const n=Ne([[o,i]]),r=ye(l);Ve(l,s,i),we(Me(e,t),(([e,t])=>{const o=et(u[e],r,l,n,t);u[e]=O(je(o))?null:o}))}})),Ce(i)||!W(c,(e=>e((e=>u[e]))))?o.delRow(t,d):O(d)?n[2]=o.addRow(t,u):o.setRow(t,d,u)}));x(f,t,f.addRowListener(t,null,((o,r,a,i)=>{const d=[],u=[],c=Ie(),g=f.hasRow(t,a);let v=!g;we(n,(e=>{const[n,l,o]=i(t,a,e);Y(d,l),Y(u,o),v||(v=n)})),me(e,(e=>{const[n,,l]=i(t,a,e);(v||n)&&Ve(c,e,[l])})),v&&s(Je(l,d,void 0,(([,e])=>(Se(e,a),Ce(e)))),c,a,1),g&&s(Je(l,u,(()=>{const e={};return we(n,(n=>e[n]=f.getCell(t,a,n))),[Ie(),Ne(),void 0,e]}),(([,e])=>{We(e,a)})),c,a)})))}H(t,e,f);const b=(n,l,o,r)=>{const a=t=>e.getCell(l,o,t);q(r,(l=>{var o;const[s,,r,i,d]=Me(v,l),u=null==r?void 0:r(a,n),[c,g]=null!=(o=Me(d,n))?o:[];u!=c&&(O(g)||E(t,g),Ve(d,n,O(u)?null:[u,...V(t,1,e.addRowListener(s,u,(()=>b(n,s,u,i))))]))})),(n=>{const l=(t,l)=>{var o,r,a;return e.getCell(...O(l)?[s,n,t]:t===s?[s,n,l]:[null==(o=Me(v,t))?void 0:o[0],null==(a=Me(null==(r=Me(v,t))?void 0:r[4],n))?void 0:a[0],l])};f.transaction((()=>W(d,(e=>e(l)))?me(g,((e,o)=>Qe(f,t,n,e,o(l,n)))):f.delRow(t,n)))})(n)},{3:y}=Me(v,null);return f.transaction((()=>V(t,1,e.addRowListener(s,null,((n,l,o)=>{e.hasRow(s,o)?b(o,s,o,y):(f.delRow(t,o),we(v,(({4:e})=>D(Me(e,o),(([,n])=>{E(t,n),Ve(e,o)})))))}))))),k},delQueryDefinition:e=>(A(e),R(e),k),getStore:g,getQueryIds:v,forEachQuery:f,hasQuery:b,getTableId:S,addQueryIdsListener:e=>M((()=>e(k))),delListener:e=>(i(e),k),destroy:m,getListenerStats:()=>((e,t)=>{var n={};for(var l in e)Rt.call(e,l)&&t.indexOf(l)<0&&(n[l]=e[l]);if(null!=e&&It)for(var l of It(e))t.indexOf(l)<0&&Mt.call(e,l)&&(n[l]=e[l]);return n})(o.getListenerStats(),["tables","tableIds","transaction"])};return ge({[h]:[1,1],[h+w]:[0,1],[p]:[0,1],[C]:[0,1],[L]:[0,5],[y]:[1,2],[w]:[0,2],[T]:[1,3]},(([e,t],n)=>{q(e?["get","has","forEach"]:["get"],(e=>k[e+u+n]=(...t)=>o[e+n](...t))),k[c+u+n+d]=(...e)=>o[c+n+d](...F(e,0,t),((n,...l)=>e[t](k,...l)),!0)})),ae(k)})),Vt=_e((e=>{const t=Ie(),l=Ie(),o=Ie(),s=Ie(),[r,a,i]=Ke((()=>w)),[d,u,c,g,v,h,,,f,b,y,p]=$e(e,(()=>[Ie(),Ie(),Ie(),Ie()]),(e=>O(e)?void 0:e+n),r,a),C=(e,t,n)=>D(h(e),(([l,,o])=>{if(!pe(o,t)){const s=Ne();if(v(e)!=T(e))We(s,t);else{let e=t;for(;!O(e)&&!pe(s,e);)We(s,e),e=Me(l,e)}if(n)return s;Ve(o,t,s)}return Me(o,t)})),L=(e,t)=>D(h(e),(([,,e])=>Ve(e,t))),T=e=>Me(t,e),w={setRelationshipDefinition:(e,n,r,i)=>(Ve(t,e,r),f(e,n,((t,n)=>{const r=Ne(),i=Ne(),d=Ne(),[u,c]=h(e);we(n,(([t,n],l)=>{O(t)||(We(i,t),D(Me(c,t),(e=>{Se(e,l),Ce(e)&&Ve(c,t)}))),O(n)||(We(i,n),pe(c,n)||Ve(c,n,Ne()),We(Me(c,n),l)),We(r,l),Ve(u,l,n),me(Me(s,e),(t=>{pe(C(e,t),l)&&We(d,t)}))})),t(),we(r,(t=>a(l,[e,t]))),we(i,(t=>a(o,[e,t]))),we(d,(t=>{L(e,t),a(s,[e,t])}))}),Be(i)),w),delRelationshipDefinition:e=>(Ve(t,e),b(e),w),getStore:d,getRelationshipIds:u,forEachRelationship:t=>c((n=>t(n,(t=>e.forEachRow(v(n),t))))),hasRelationship:g,getLocalTableId:v,getRemoteTableId:T,getRemoteRowId:(e,t)=>{var n;return Me(null==(n=h(e))?void 0:n[0],t)},getLocalRowIds:(e,t)=>{var n;return Le(Me(null==(n=h(e))?void 0:n[1],t))},getLinkedRowIds:(e,t)=>O(h(e))?[t]:Le(C(e,t,!0)),addRelationshipIdsListener:y,addRemoteRowIdListener:(e,t,n)=>r(n,l,[e,t]),addLocalRowIdsListener:(e,t,n)=>r(n,o,[e,t]),addLinkedRowIdsListener:(e,t,n)=>(C(e,t),r(n,s,[e,t])),delListener:e=>{var t;return L(...null!=(t=i(e))?t:[]),w},destroy:p,getListenerStats:()=>({})};return ae(w)})),Et=([e,t,n])=>[e,t,n],xt=([e,t])=>[e,t],At=e=>e[2],Ht=(e,t)=>gt(e+":"+t),Ot=(e,t,n)=>{e[2]=t>>>0,n>e[0]&&(e[0]=n)},Dt=e=>[e,ie()],kt=(e="")=>[e,Ie(),0],Pt=([e,t,n],l=Et)=>[e,Ae(t,l),n],Jt=(e,n)=>j(e)&&3==Q(e)&&P(e[0])&&n(e[1])&&t(e[2])==s&&H(e[2]),jt=e=>[e,e],Ft=()=>[Ie(),Ie()],Qt=e=>[...e],zt=([e,t])=>e===t,Nt=e=>JSON.stringify(e,((e,t)=>t instanceof Map?te.fromEntries([...t]):t)),Wt=JSON.parse,$t=(e,t,n)=>Ve(e,t,Me(e,t)==-n?void 0:n),Bt=()=>{let e,t,n=!1,l=!1,o=0,r=[];const u=Ie(),v=Ie(),L=Ie(),m=Ie(),V=Ie(),E=Ie(),x=Ie(),A=Ie(),H=Ie(),P=Ie(),j=Ie(),Q=Ie(),z=Ie(),W=Ie(),B=Ne(),K=Ie(),U=Ie(),X=Ie(),Z=Ie(),ee=Ft(),te=Ft(),ne=Ft(),le=Ft(),oe=Ft(),se=Ft(),re=Ft(),ie=Ft(),ce=Ft(),ve=Ft(),fe=Ft(),Le=Ft(),Je=Ft(),Fe=Ft(),$e=Ft(),Be=Ft(),_e=Ft(),qe=Ft(),Ue=Ft(),Ye=Ft(),Ze=Ft(),et=Ft(),tt=Ie(),nt=Ft(),[lt,ot,st,rt]=Ke((()=>kn)),at=e=>{if(!be(e,((e,t)=>N([a,i],t))))return!1;const t=e[a];return!(!k(t)&&t!=s||(je(e[i])!=t&&ue(e,i),0))},it=(t,n)=>(!e||pe(j,n)||_t(n))&&be(t,((e,t)=>dt(n,t,e)),(()=>_t(n))),dt=(e,t,n,l)=>be(l?n:vt(n,e,t),((l,o)=>D(ut(e,t,o,l),(e=>(n[o]=e,!0)),(()=>!1))),(()=>_t(e,t))),ut=(t,n,l,o)=>e?D(Me(Me(j,t),l),(e=>je(o)!=e[a]?_t(t,n,l,o,e[i]):o),(()=>_t(t,n,l,o))):O(je(o))?_t(t,n,l,o):o,ct=(e,t)=>be(t?e:ht(e),((t,n)=>D(gt(n,t),(t=>(e[n]=t,!0)),(()=>!1))),(()=>qt())),gt=(e,n)=>t?D(Me(z,e),(t=>je(n)!=t[a]?qt(e,n,t[i]):n),(()=>qt(e,n))):O(je(n))?qt(e,n):n,vt=(e,t,n)=>(D(Me(Q,t),(([l,o])=>{we(l,((t,n)=>{de(e,n)||(e[n]=t)})),we(o,(l=>{de(e,l)||_t(t,n,l)}))})),e),ht=e=>(t&&(we(W,((t,n)=>{de(e,n)||(e[n]=t)})),we(B,(t=>{de(e,t)||qt(t)}))),e),ft=e=>xe(j,e,((e,t,n)=>{const l=Ie(),o=Ne();xe(Ee(j,t,Ie),n,((e,t,n)=>{Ve(e,t,n),D(n[i],(e=>Ve(l,t,e)),(()=>We(o,t)))})),Ve(Q,t,[l,o])}),((e,t)=>{Ve(j,t),Ve(Q,t)})),bt=e=>xe(z,e,((e,t,n)=>{Ve(z,t,n),D(n[i],(e=>Ve(W,t,e)),(()=>We(B,t)))}),((e,t)=>{Ve(z,t),Ve(W,t),Se(B,t)})),yt=e=>he(e)?Mn():Tn(e),pt=e=>xe(X,e,((e,t,n)=>Ct(t,n)),((e,t)=>Vt(t))),Ct=(e,t)=>xe(Ee(X,e,(()=>(Ht(e,1),Ve(K,e,Ge()),Ve(U,e,Ie()),Ie()))),t,((t,n,l)=>Lt(e,t,n,l)),((t,n)=>Et(e,t,n))),Lt=(e,t,n,l,o)=>xe(Ee(t,n,(()=>(Ot(e,n,1),Ie()))),l,((t,l,o)=>Tt(e,n,t,l,o)),((l,s)=>xt(e,t,n,l,s,o))),Tt=(e,t,n,l,o)=>{pe(n,l)||Dt(e,t,l,1);const s=Me(n,l);o!==s&&(kt(e,t,l,s,o),Ve(n,l,o))},wt=(e,t,n,l,o)=>D(Me(t,n),(t=>Tt(e,n,t,l,o)),(()=>Lt(e,t,n,vt({[l]:o},e,n)))),St=e=>he(e)?En():wn(e),It=e=>xe(Z,e,((e,t,n)=>Rt(t,n)),((e,t)=>At(t))),Rt=(e,t)=>{pe(Z,e)||Pt(e,1);const n=Me(Z,e);t!==n&&(Jt(e,n,t),Ve(Z,e,t))},Mt=(e,t)=>{const[n]=Me(K,e),l=n(t);return pe(Me(X,e),l)?Mt(e,t):l},mt=e=>{var t;return null!=(t=Me(X,e))?t:Ct(e,{})},Vt=e=>Ct(e,{}),Et=(e,t,n)=>{const[,l]=Me(K,e);l(n),Lt(e,t,n,{},!0)},xt=(e,t,n,l,o,s)=>{var r;const a=Me(null==(r=Me(Q,e))?void 0:r[0],o);if(!O(a)&&!s)return Tt(e,n,l,o,a);const i=t=>{kt(e,n,t,Me(l,t)),Dt(e,n,t,-1),Ve(l,t)};O(a)?i(o):me(l,i),Ce(l)&&(Ot(e,n,-1),Ce(Ve(t,n))&&(Ht(e,-1),Ve(X,e),Ve(K,e),Ve(U,e)))},At=e=>{const t=Me(W,e);if(!O(t))return Rt(e,t);Jt(e,Me(Z,e)),Pt(e,-1),Ve(Z,e)},Ht=(e,t)=>$t(u,e,t),Ot=(e,t,n)=>$t(Ee(m,e,Ie),t,n)&&Ve(L,e,Ee(L,e,(()=>0))+n),Dt=(e,t,n,l)=>{var o;const s=Me(U,e),r=null!=(o=Me(s,n))?o:0;(0==r&&1==l||1==r&&-1==l)&&$t(Ee(v,e,Ie),n,l),Ve(s,n,r!=-l?r+l:null),$t(Ee(Ee(V,e,Ie),t,Ie),n,l)},kt=(e,t,n,l,o)=>Ee(Ee(Ee(E,e,Ie),t,Ie),n,(()=>[l,0]))[1]=o,Pt=(e,t)=>$t(x,e,t),Jt=(e,t,n)=>Ee(A,e,(()=>[t,0]))[1]=n,_t=(e,t,n,l,o)=>(Y(Ee(Ee(Ee(H,e,Ie),t,Ie),n,(()=>[])),l),o),qt=(e,t,n)=>(Y(Ee(P,e,(()=>[])),t),n),Gt=(e,t,n)=>D(Me(Me(Me(E,e),t),n),(([e,t])=>[!0,e,t]),(()=>[!1,...jt(un(e,t,n))])),Kt=e=>D(Me(A,e),(([e,t])=>[!0,e,t]),(()=>[!1,...jt(vn(e))])),Ut=e=>Ce(H)||Ce(Be[e])?0:we(e?Pe(H):H,((t,n)=>we(t,((t,l)=>we(t,((t,o)=>ot(Be[e],[n,l,o],t))))))),Xt=e=>Ce(P)||Ce(_e[e])?0:we(e?De(P):P,((t,n)=>ot(_e[e],[n],t))),Yt=(e,t,n,l)=>{if(!Ce(e))return ot(t,l,(()=>Ae(e))),me(e,((e,t)=>ot(n,[...null!=l?l:[],e],1==t))),1},Zt=e=>{const t=hn();t!=n&&ot(ee[e],void 0,t);const l=Ce(ve[e]),o=Ce(Je[e])&&Ce(Fe[e])&&Ce(ce[e])&&Ce(fe[e])&&Ce(se[e])&&Ce(re[e])&&Ce(ie[e])&&l&&Ce(ne[e])&&Ce(le[e]),s=Ce($e[e])&&Ce(Le[e])&&Ce(oe[e])&&Ce(te[e]);if(!o||!s){const t=e?[De(u),ke(v),De(L),ke(m),Pe(V),Pe(E)]:[u,v,L,m,V,E];if(!o){Yt(t[0],ne[e],le[e]),we(t[1],((t,n)=>Yt(t,se[e],re[e],[n]))),we(t[2],((t,n)=>{0!=t&&ot(ie[e],[n],sn(n))}));const n=Ne();we(t[3],((t,o)=>{Yt(t,ce[e],fe[e],[o])&&!l&&(ot(ve[e],[o,null]),We(n,o))})),l||we(t[5],((t,l)=>{if(!pe(n,l)){const n=Ne();we(t,(e=>we(e,(([t,l],o)=>l!==t?We(n,o):Se(e,o))))),we(n,(t=>ot(ve[e],[l,t])))}})),we(t[4],((t,n)=>we(t,((t,l)=>Yt(t,Je[e],Fe[e],[n,l])))))}if(!s){let n;we(t[5],((t,l)=>{let o;we(t,((t,s)=>{let r;we(t,(([t,a],i)=>{a!==t&&(ot($e[e],[l,s,i],a,t,Gt),n=o=r=1)})),r&&ot(Le[e],[l,s],Gt)})),o&&ot(oe[e],[l],Gt)})),n&&ot(te[e],void 0,Gt)}}},en=e=>{const t=Cn();t!=l&&ot(qe[e],void 0,t);const n=Ce(Ye[e])&&Ce(Ze[e]),o=Ce(et[e])&&Ce(Ue[e]);if(!n||!o){const t=e?[De(x),De(A)]:[x,A];if(n||Yt(t[0],Ye[e],Ze[e]),!o){let n;we(t[1],(([t,l],o)=>{l!==t&&(ot(et[e],[o],l,t,Kt),n=1)})),n&&ot(Ue[e],void 0,Kt)}}},tn=(e,...t)=>(Hn((()=>e(...G(t,M)))),kn),nn=()=>Oe(X),ln=()=>Re(X),on=e=>Re(Me(U,M(e))),sn=e=>ye(Me(X,M(e))),rn=e=>Re(Me(X,M(e))),an=(e,t,n,l=0,o)=>{return G(F(_((s=Me(X,M(e)),r=(e,n)=>[O(t)?n:Me(e,M(t)),n],G([...null!=(a=null==s?void 0:s.entries())?a:[]],(([e,t])=>r(t,e)))),(([e],[t])=>Xe(e,t)*(n?-1:1))),l,O(o)?o:l+o),(([,e])=>e));var s,r,a},dn=(e,t)=>Re(Me(Me(X,M(e)),M(t))),un=(e,t,n)=>Me(Me(Me(X,M(e)),M(t)),M(n)),cn=()=>Ae(Z),gn=()=>Re(Z),vn=e=>Me(Z,M(e)),hn=()=>!Ce(X),fn=e=>pe(X,M(e)),bn=(e,t)=>pe(Me(U,M(e)),M(t)),yn=(e,t)=>pe(Me(X,M(e)),M(t)),pn=(e,t,n)=>pe(Me(Me(X,M(e)),M(t)),M(n)),Cn=()=>!Ce(Z),Ln=e=>pe(Z,M(e)),Tn=e=>tn((()=>(e=>be(e,it,_t))(e)?pt(e):0)),wn=e=>tn((()=>ct(e)?It(e):0)),Sn=e=>{try{yt(Wt(e))}catch(e){}return kn},In=t=>tn((()=>{if((e=be(t,(e=>be(e,at))))&&(ft(t),!Ce(X))){const e=nn();Mn(),Tn(e)}})),Rn=e=>tn((()=>{if(t=(e=>be(e,at))(e)){const n=cn();An(),En(),t=!0,bt(e),wn(n)}})),Mn=()=>tn((()=>pt({}))),mn=e=>tn((e=>pe(X,e)?Vt(e):0),e),Vn=(e,t)=>tn(((e,t)=>D(Me(X,e),(n=>pe(n,t)?Et(e,n,t):0))),e,t),En=()=>tn((()=>It({}))),xn=()=>tn((()=>{ft({}),e=!1})),An=()=>tn((()=>{bt({}),t=!1})),Hn=(e,t)=>{if(-1!=o){On();const n=e();return Dn(t),n}},On=()=>(-1!=o&&o++,1==o&&ot(tt,void 0),kn),Dn=e=>{var t,s;return o>0&&(o--,0==o&&(o=1,Ut(1),Ce(E)||Zt(1),Xt(1),Ce(A)||en(1),(null==e?void 0:e(kn))&&(we(E,((e,t)=>we(e,((e,n)=>we(e,(([e],l)=>Qe(kn,t,n,l,e))))))),Te(E),we(A,(([e],t)=>ze(kn,t,e))),Te(A)),ot(nt[0],void 0),o=-1,Ut(0),Ce(E)||Zt(0),Xt(0),Ce(A)||en(0),null==(t=r[0])||t.call(r,kn),ot(nt[1],void 0),null==(s=r[1])||s.call(r,kn),o=0,n=hn(),l=Cn(),q([u,v,L,m,V,E,H,x,A,P],Te))),kn},kn={getContent:()=>[nn(),cn()],getTables:nn,getTableIds:ln,getTable:e=>He(Me(X,M(e))),getTableCellIds:on,getRowCount:sn,getRowIds:rn,getSortedRowIds:an,getRow:(e,t)=>Ae(Me(Me(X,M(e)),M(t))),getCellIds:dn,getCell:un,getValues:cn,getValueIds:gn,getValue:vn,hasTables:hn,hasTable:fn,hasTableCell:bn,hasRow:yn,hasCell:pn,hasValues:Cn,hasValue:Ln,getTablesJson:()=>Nt(X),getValuesJson:()=>Nt(Z),getJson:()=>Nt([X,Z]),getTablesSchemaJson:()=>Nt(j),getValuesSchemaJson:()=>Nt(z),getSchemaJson:()=>Nt([j,z]),hasTablesSchema:()=>e,hasValuesSchema:()=>t,setContent:([e,t])=>tn((()=>{(he(e)?Mn:Tn)(e),(he(t)?En:wn)(t)})),setTables:Tn,setTable:(e,t)=>tn((e=>it(t,e)?Ct(e,t):0),e),setRow:(e,t,n)=>tn(((e,t)=>dt(e,t,n)?Lt(e,mt(e),t,n):0),e,t),addRow:(e,t,n=!0)=>Hn((()=>{let l;return dt(e,l,t)&&(e=M(e),Lt(e,mt(e),l=Mt(e,n?1:0),t)),l})),setPartialRow:(e,t,n)=>tn(((e,t)=>{if(dt(e,t,n,1)){const l=mt(e);ge(n,((n,o)=>wt(e,l,t,o,n)))}}),e,t),setCell:(e,t,n,l)=>tn(((e,t,n)=>D(ut(e,t,n,J(l)?l(un(e,t,n)):l),(l=>wt(e,mt(e),t,n,l)))),e,t,n),setValues:wn,setPartialValues:e=>tn((()=>ct(e,1)?ge(e,((e,t)=>Rt(t,e))):0)),setValue:(e,t)=>tn((e=>D(gt(e,J(t)?t(vn(e)):t),(t=>Rt(e,t)))),e),applyChanges:e=>tn((()=>{ge(e[0],((e,t)=>O(e)?mn(t):ge(e,((e,n)=>O(e)?Vn(t,n):ge(e,((e,l)=>Qe(kn,t,n,l,e))))))),ge(e[1],((e,t)=>ze(kn,t,e)))})),setTablesJson:Sn,setValuesJson:e=>{try{St(Wt(e))}catch(e){}return kn},setJson:e=>tn((()=>{try{const[t,n]=Wt(e);yt(t),St(n)}catch(t){Sn(e)}})),setTablesSchema:In,setValuesSchema:Rn,setSchema:(e,t)=>tn((()=>{In(e),Rn(t)})),delTables:Mn,delTable:mn,delRow:Vn,delCell:(e,t,n,l)=>tn(((e,t,n)=>D(Me(X,e),(o=>D(Me(o,t),(s=>pe(s,n)?xt(e,o,t,s,n,l):0))))),e,t,n),delValues:En,delValue:e=>tn((e=>pe(Z,e)?At(e):0),e),delTablesSchema:xn,delValuesSchema:An,delSchema:()=>tn((()=>{xn(),An()})),transaction:Hn,startTransaction:On,getTransactionChanges:()=>[Ae(E,((e,t)=>-1===Me(u,t)?void 0:Ae(e,((e,n)=>-1===Me(Me(m,t),n)?void 0:Ae(e,(([,e])=>e),(e=>zt(e)))),Ce,he)),Ce,he),Ae(A,(([,e])=>e),(e=>zt(e))),1],getTransactionLog:()=>[!Ce(E),!Ce(A),Oe(E,Qt,zt),Oe(H),Ae(A,Qt,zt),Ae(P),Ae(u),He(m),Oe(V),Ae(x)],finishTransaction:Dn,forEachTable:e=>we(X,((t,n)=>e(n,(e=>we(t,((t,n)=>e(n,(e=>me(t,e))))))))),forEachTableCell:(e,t)=>me(Me(U,M(e)),t),forEachRow:(e,t)=>we(Me(X,M(e)),((e,n)=>t(n,(t=>me(e,t))))),forEachCell:(e,t,n)=>me(Me(Me(X,M(e)),M(t)),n),forEachValue:e=>me(Z,e),addSortedRowIdsListener:(e,t,n,l,o,s,r)=>{let a=an(e,t,n,l,o);return lt((()=>{const r=an(e,t,n,l,o);$(r,a)||(a=r,s(kn,e,t,n,l,o,a))}),ve[r?1:0],[e,t],[ln])},addStartTransactionListener:e=>lt(e,tt),addWillFinishTransactionListener:e=>lt(e,nt[0]),addDidFinishTransactionListener:e=>lt(e,nt[1]),callListener:e=>(rt(e),kn),delListener:e=>(st(e),kn),getListenerStats:()=>({}),createStore:Bt,addListener:lt,callListeners:ot,setInternalListeners:(e,t)=>r=[e,t]};return ge({[g+f]:[0,ee,[],()=>[hn()]],[f]:[0,te],[b]:[0,ne],[g+h]:[1,le,[ln],e=>[fn(...e)]],[h]:[1,oe,[ln]],[h+w]:[1,se,[ln]],[g+h+T]:[2,re,[ln,on],e=>[bn(...e)]],[p]:[1,ie,[ln]],[C]:[1,ce,[ln]],[g+y]:[2,fe,[ln,rn],e=>[yn(...e)]],[y]:[2,Le,[ln,rn]],[w]:[2,Je,[ln,rn]],[g+T]:[3,Fe,[ln,rn,dn],e=>[pn(...e)]],[T]:[3,$e,[ln,rn,dn],e=>jt(un(...e))],InvalidCell:[3,Be],[g+I]:[0,qe,[],()=>[Cn()]],[I]:[0,Ue],[R]:[0,Ye],[g+S]:[1,Ze,[gn],e=>[Ln(...e)]],[S]:[1,et,[gn],e=>jt(vn(e[0]))],InvalidValue:[1,_e]},(([e,t,n,l],o)=>{kn[c+o+d]=(...o)=>lt(o[e],t[o[e+1]?1:0],e>0?F(o,0,e):void 0,n,l)})),ae(kn)},_t={HasTable:1,Table:1,TableCellIds:1,HasTableCell:2,RowCount:1,RowIds:1,SortedRowIds:5,HasRow:2,Row:2,CellIds:2,HasCell:3,Cell:3,HasValue:1,Value:1,InvalidCell:3,InvalidValue:1},qt=(e="")=>[e,[kt(e),kt(e)],0];e.createCheckpoints=Ue,e.createCustomPersister=ut,e.createCustomSynchronizer=(e,t,l,o,s=1,r)=>{let a;const[i]=wt(e.getId()),d=Ie();l(((n,l,o,s)=>{0==o?D(Me(d,l),(([e,t])=>O(e)||e==n?t(s,n):0)):1==o&&g.isAutoLoading()?c(n,s).then((e=>null==a?void 0:a(void 0,(()=>e)))):D(2==o&&g.isAutoSaving()?e.getMergeableContentHashes():3==o?e.getMergeableTableIdsDiff(s):4==o?e.getMergeableRowIdsDiff(s):5==o?e.getMergeableTablesChanges(s):6==o?e.getMergeableValuesChanges(s):void 0,(e=>{t(n,l,0,e)}))}));const u=(e,n,...l)=>St(void 0,[e,n,...l],(function*(e,n,l=""){return new E(((o,r)=>{const a=i(),u=setTimeout((()=>{Se(d,a),r(`No response from ${null!=e?e:"anyone"} to '${n}'`)}),1e3*s);Ve(d,a,[e,(e,t)=>{clearTimeout(u),Se(d,a),o([e,t])}]),t(e,a,n,l)}))})),c=(t=null,l)=>St(void 0,null,(function*(){O(l)&&([l,t]=yield u(t,2));const[o,[s,r]]=l,[,[a,i]]=e.getMergeableContentHashes(),d=[n,[[n,{}],[n,{}],1]];return a!=s&&(d[0]=o,d[1][0]=(yield u(t,5,e.getMergeableCellHashes((yield u(t,4,e.getMergeableRowHashes((yield u(t,3,e.getMergeableTableHashes()))[0])))[0])))[0]),i!=r&&(d[0]=o,d[1][1]=(yield u(t,6,e.getMergeableValuesHashes()))[0]),d})),g=ut(e,(()=>St(void 0,null,(function*(){const e=yield c();return e[0]!=n?e:void 0}))),(()=>St(void 0,null,(function*(){t(null,null,1,e.getMergeableContentHashes())}))),(e=>a=e),(()=>a=void 0),r,!0,{startSync:()=>St(void 0,null,(function*(){return yield(yield g.startAutoLoad()).startAutoSave()})),stopSync:()=>g.stopAutoLoad().stopAutoSave(),destroy:()=>(o(),g.stopSync()),getSynchronizerStats:()=>({})});return g},e.createIndexes=Ye,e.createMergeableStore=e=>{let t,l,o=1,s=qt();const[r,a]=wt(e),i=Bt(),d=e=>{const t=o;return o=0,e(),o=t,f},u=(e,t=0)=>{const n={},l={},[o,[[r,a,i],d],u]=e,[,[g,v]]=s,[h,f,b]=g;if(r){let e=t?i:b^(r>h?(h?gt(h):0)^gt(r):0);ce(a,(([l,o,s],r)=>{const a=Ee(f,r,kt),[i,d,u]=a;let g=t?s:u^(l>i?(i?gt(i):0)^gt(l):0);ce(o,((e,l)=>{const[o,s]=c(e,Ee(d,l,kt),fe(fe(n,r,ie),l,ie),t);g^=t?0:(o?Ht(l,o):0)^Ht(l,s)})),Ot(a,g,l),e^=t?0:(u?Ht(r,u):0)^Ht(r,a[2])})),Ot(g,e,r)}return c(d,v,l,t),Ot(s,t?u:g[2]^v[2],o),[n,l,1]},c=(e,t,l,o)=>{const[s,r,a]=e,[i,d,u]=t;if(s){let e=o?a:u^(s>i?(i?gt(i):0)^gt(s):0);ce(r,(([t,s,r],a)=>{const i=Ee(d,a,(()=>[n,void 0,0])),[u,,c]=i;t>u&&(Ot(i,o?r:gt(Nt(null!=s?s:null)+":"+t),t),i[1]=s,l[a]=s,e^=o?0:Ht(a,c)^Ht(a,i[2]))})),Ot(t,e,s)}return[u,t[2]]},g=()=>[s[0],[Pt(s[1][0],(e=>Pt(e,(e=>Pt(e))))),Pt(s[1][1])],s[2]],v=()=>{if(O(l)){const[,,e,,l]=i.getTransactionLog(),o=he(e)&&he(l)?n:null!=t?t:t=r(),s=[o,[Dt(he(e)?n:o),Dt(he(l)?n:o),1]],[[,a],[,d]]=s[1];return ge(e,((e,t)=>{const[,n]=a[t]=Dt(o);ge(e,((e,t)=>{const[,l]=n[t]=Dt(o);ge(e,(([,e],t)=>l[t]=[o,e]))}))})),ge(l,(([,e],t)=>d[t]=[o,e])),s}return l},h=e=>d((()=>{a(e[0]),i.applyChanges(u(e))})),f={getId:()=>e,getMergeableContent:g,getMergeableContentHashes:()=>[s[0],[s[1][0][2],s[1][1][2]]],getMergeableTableHashes:()=>Ae(s[1][0][1],At),getMergeableTableIdsDiff:e=>{const t=[];return me(s[1][0][1],((n,[,,l])=>{l!==(null==e?void 0:e[n])&&Y(t,n)})),t},getMergeableRowHashes:e=>ie(G(e,(e=>{var t;return[e,Ae(null==(t=Me(s[1][0][1],e))?void 0:t[1],At)]}))),getMergeableRowIdsDiff:e=>ve(e,((e,t)=>{var n;const l=[];return me(null==(n=Me(s[1][0][1],t))?void 0:n[1],((t,[,,n])=>{n!==(null==e?void 0:e[t])&&Y(l,t)})),l})),getMergeableCellHashes:e=>ve(e,((e,t)=>ie(G(e,(e=>{var n,l;return[e,Ae(null==(l=Me(null==(n=Me(s[1][0][1],t))?void 0:n[1],e))?void 0:l[1],At)]}))))),getMergeableTablesChanges:e=>{const[,[[t,n]]]=s,l={};return ce(e,((e,t)=>D(Me(n,t),(([n,o])=>{const s={};ce(e,((e,t)=>D(Me(o,t),(([n,l])=>{const o=Ae(l,xt,(([,,t],n)=>t==(null==e?void 0:e[n])));he(o)||(s[t]=[n,o])})))),he(s)||(l[t]=[n,s])})))),[t,l]},getMergeableValuesHashes:()=>Ae(s[1][1][1],At),getMergeableValuesChanges:e=>[s[1][1][0],Ae(s[1][1][1],xt,(([,,t],n)=>t==(null==e?void 0:e[n])))],setMergeableContent:e=>d((()=>(e=>Jt(e,(e=>j(e)&&2==Q(e)&&Jt(e[0],(e=>be(e,(e=>Jt(e,(e=>be(e,(e=>Jt(e,(e=>be(e,(e=>Jt(e,Fe)),void 0,1)))),void 0,1)))),void 0,1)))&&Jt(e[1],(e=>be(e,(e=>Jt(e,Fe)),void 0,1))))))(e)?i.transaction((()=>{i.delTables().delValues(),s=qt(),a(e[0]),i.applyChanges(u(e,1))})):0)),getTransactionMergeableChanges:v,applyMergeableChanges:h,merge:e=>{const t=g(),n=e.getMergeableContent();return e.applyMergeableChanges(t),h(n)}};return i.setInternalListeners((()=>{o&&(l=v(),u(l))}),(()=>t=l=void 0)),ge(i,((e,t)=>f[t]=m(t,"set")||m(t,"del")||m(t,"apply")||V(t,"Transaction")||"callListener"==t?(...t)=>(e(...t),f):m(t,"add")&&V(t,"Listener")?(...n)=>{var l;const o=null!=(l=_t[F(t,3,-8)])?l:0,s=n[o];return n[o]=(e,...t)=>s(f,...t),e(...n)}:e)),ae(f)},e.createMetrics=tt,e.createQueries=mt,e.createRelationships=Vt,e.createStore=Bt,e.defaultSorter=Xe},"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).TinyBase={});
|
|
Binary file
|
package/package.json
CHANGED
package/readme.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<section id="hero"><h2 id="the-reactive-data-store-for-local-first-apps">The <em>reactive</em> data store for <span>local-first apps</span>.</h2><p id="copy">Build blisteringly fast web apps that work both online and offline. Manage your state locally, synchronize it to the cloud when you need to, or even make it collaborative. But, most importantly... have fun building stuff again!</p></section><p><a href="https://beta.tinybase.org/guides/releases/#v5-0"><em>NEW!</em> v5.0 release</a> <span id="one-with">"The One You Can Sync"</span></p><p><a class="start" href="https://beta.tinybase.org/guides/the-basics/getting-started/">Get started</a></p><p><a href="https://beta.tinybase.org/demos/">Try the demos</a></p><p><a href="https://beta.tinybase.org/api/store/interfaces/store/store/">Read the docs</a></p><hr><ul><li>Manage <a href="#start-with-a-simple-key-value-store">key-value data</a>, <a href="#level-up-to-use-tabular-data">tabular data</a> - or both - with optional <a href="#apply-schemas-to-tables-values">schematization</a> to model your app's data structures.</li><li><a href="#register-granular-listeners">Flexibly reactive</a> to reconciled updates, so you only spend rendering cycles on things that change.</li><li><a href="#build-complex-queries-with-tinyql">Powerful query engine</a> to select, join, filter, group, sort and paginate data - reactively - and without SQL.</li><li>Built-in <a href="#create-indexes-for-fast-lookups">indexing</a>, <a href="#define-metrics-and-aggregations">metric aggregation</a>, <a href="#model-table-relationships">tabular relationships</a> - and even an <a href="#set-checkpoints-for-an-undo-stack">undo stack</a> for your app state.</li><li>Create <a href="#type-definitions-orm-like-apis">type definitions & ORM-like APIs</a>, from schema or inference. <a href="#an-inspector-for-your-data">Inspect your data</a> (<em>new!</em>) directly in the browser.</li><li>Easily <a href="#persist-to-storage-sqlite-crdts">sync your data</a> to browser <a href="https://beta.tinybase.org/api/persister-browser">storage</a>, <a href="https://beta.tinybase.org/api/persister-indexed-db/">IndexedDB</a>, <a href="https://beta.tinybase.org/guides/schemas-and-persistence/database-persistence/">SQLite</a>, <a href="https://beta.tinybase.org/guides/schemas-and-persistence/synchronizing-data/">CRDTs</a>; and (<em>new!</em>) <a href="https://beta.tinybase.org/api/persister-partykit-client/">PartyKit</a> and <a href="https://electric-sql.com/">ElectricSQL</a>.</li><li>Optional <a href="#call-hooks-to-bind-to-data">bindings to React</a> and (<em>new!</em>) <a href="#pre-built-reactive-components">pre-built components</a> that let you easily build fully reactive user interfaces.</li><li>Tiny by name, tiny by nature: <a href="#did-we-say-tiny">5.0kB - 11.
|
|
1
|
+
<section id="hero"><h2 id="the-reactive-data-store-for-local-first-apps">The <em>reactive</em> data store for <span>local-first apps</span>.</h2><p id="copy">Build blisteringly fast web apps that work both online and offline. Manage your state locally, synchronize it to the cloud when you need to, or even make it collaborative. But, most importantly... have fun building stuff again!</p></section><p><a href="https://beta.tinybase.org/guides/releases/#v5-0"><em>NEW!</em> v5.0 release</a> <span id="one-with">"The One You Can Sync"</span></p><p><a class="start" href="https://beta.tinybase.org/guides/the-basics/getting-started/">Get started</a></p><p><a href="https://beta.tinybase.org/demos/">Try the demos</a></p><p><a href="https://beta.tinybase.org/api/store/interfaces/store/store/">Read the docs</a></p><hr><ul><li>Manage <a href="#start-with-a-simple-key-value-store">key-value data</a>, <a href="#level-up-to-use-tabular-data">tabular data</a> - or both - with optional <a href="#apply-schemas-to-tables-values">schematization</a> to model your app's data structures.</li><li><a href="#register-granular-listeners">Flexibly reactive</a> to reconciled updates, so you only spend rendering cycles on things that change.</li><li><a href="#build-complex-queries-with-tinyql">Powerful query engine</a> to select, join, filter, group, sort and paginate data - reactively - and without SQL.</li><li>Built-in <a href="#create-indexes-for-fast-lookups">indexing</a>, <a href="#define-metrics-and-aggregations">metric aggregation</a>, <a href="#model-table-relationships">tabular relationships</a> - and even an <a href="#set-checkpoints-for-an-undo-stack">undo stack</a> for your app state.</li><li>Create <a href="#type-definitions-orm-like-apis">type definitions & ORM-like APIs</a>, from schema or inference. <a href="#an-inspector-for-your-data">Inspect your data</a> (<em>new!</em>) directly in the browser.</li><li>Easily <a href="#persist-to-storage-sqlite-crdts">sync your data</a> to browser <a href="https://beta.tinybase.org/api/persister-browser">storage</a>, <a href="https://beta.tinybase.org/api/persister-indexed-db/">IndexedDB</a>, <a href="https://beta.tinybase.org/guides/schemas-and-persistence/database-persistence/">SQLite</a>, <a href="https://beta.tinybase.org/guides/schemas-and-persistence/synchronizing-data/">CRDTs</a>; and (<em>new!</em>) <a href="https://beta.tinybase.org/api/persister-partykit-client/">PartyKit</a> and <a href="https://electric-sql.com/">ElectricSQL</a>.</li><li>Optional <a href="#call-hooks-to-bind-to-data">bindings to React</a> and (<em>new!</em>) <a href="#pre-built-reactive-components">pre-built components</a> that let you easily build fully reactive user interfaces.</li><li>Tiny by name, tiny by nature: <a href="#did-we-say-tiny">5.0kB - 11.8kB</a>, no dependencies. <a href="#well-tested-and-documented">100% tested</a>, <a href="https://beta.tinybase.org/guides/the-basics/getting-started/">fully documented</a>, and of course, <a href="https://github.com/tinyplex/tinybase">open source</a>!</li></ul><hr><section id="friends"><h2 id="tinybase-works-great-on-its-own-but-also-plays-well-with-friends">TinyBase works great on its own, but also plays well with friends!</h2><div><a href="https://beta.tinybase.org/guides/building-uis/getting-started-with-ui-react"><img width="48" src="https://beta.tinybase.org/react.svg"> React</a></div><div><a href="https://beta.tinybase.org/api/persister-partykit-client"><img width="48" src="https://beta.tinybase.org/partykit.svg"> PartyKit</a></div><div><a href="https://beta.tinybase.org/guides/schemas-and-persistence/database-persistence"><img width="48" src="https://beta.tinybase.org/expo.svg">Expo SQLite</a></div><div><a href="https://beta.tinybase.org/guides/schemas-and-persistence/database-persistence"><img width="48" src="https://beta.tinybase.org/electric.svg">ElectricSQL</a></div><div><a href="https://beta.tinybase.org/guides/schemas-and-persistence/database-persistence"><img width="48" src="https://beta.tinybase.org/sqlite.svg"> SQLite</a></div><div><a href="https://beta.tinybase.org/guides/schemas-and-persistence/database-persistence"><img width="48" src="https://beta.tinybase.org/turso.svg">Turso</a></div><div><a href="https://beta.tinybase.org/guides/schemas-and-persistence/database-persistence"><img width="48" src="https://beta.tinybase.org/powersync.svg">PowerSync</a></div><div><a href="https://beta.tinybase.org/api/persister-indexed-db/functions/creation/createindexeddbpersister"><img width="48" src="https://beta.tinybase.org/indexeddb.svg"> IndexedDB</a></div><div><a href="https://beta.tinybase.org/api/persister-yjs/functions/creation/createyjspersister"><img width="48" src="https://beta.tinybase.org/yjs.svg"> YJS</a></div><div><a href="https://beta.tinybase.org/api/persister-cr-sqlite-wasm"><img width="48" src="https://beta.tinybase.org/crsqlite.png"> CR-SQLite</a></div><div><a href="https://beta.tinybase.org/api/persister-automerge"><img width="48" src="https://beta.tinybase.org/automerge.svg"> Automerge</a></div></section><hr><section id="follow"><a href="https://github.com/tinyplex/tinybase" target="_blank"><img src="https://img.shields.io/github/stars/tinyplex/tinybase?style=for-the-badge&logo=GitHub&logoColor=%23fff&label=GitHub&labelColor=%23d81b60&color=%23333"> </a><a href="https://discord.com/invite/mGz3mevwP8" target="_blank"><img src="https://img.shields.io/discord/1027918215323590676?style=for-the-badge&logo=discord&logoColor=%23fff&label=Discord&labelColor=%233131e8&color=%23333"> </a><a href="https://twitter.com/tinybasejs" target="_blank"><img src="https://img.shields.io/twitter/follow/tinybasejs?style=for-the-badge&logo=x&logoColor=%23fff&label=Twitter&labelColor=%23333&color=%23333"></a><br><a href="https://github.com/tinyplex/tinybase/discussions" target="_blank"><img src="https://img.shields.io/github/discussions/tinyplex/tinybase?style=for-the-badge&logo=GitHub&logoColor=%23fff&label=Ideas&labelColor=%23d81b60&color=%23333"> </a><a href="https://github.com/tinyplex/tinybase/issues" target="_blank"><img src="https://img.shields.io/github/issues/tinyplex/tinybase?style=for-the-badge&logo=GitHub&logoColor=%23fff&label=Issues&labelColor=%23d81b60&color=%23333"> </a><a href="#well-tested-and-documented"><img src="https://img.shields.io/badge/Tests-100%25-green?style=for-the-badge&logo=jest&logoColor=%23fff&color=%23333&labelColor=%2387c305"> </a><a href="https://www.npmjs.com/package/tinybase/v/5.0.0-beta.7" target="_blank"><img src="https://img.shields.io/npm/v/tinybase?style=for-the-badge&logo=npm&logoColor=%23fff&labelColor=%23bd0005&color=%23333"></a></section><hr><section><h2 id="start-with-a-simple-key-value-store">Start with a simple key-value store.</h2><p>Creating a <a href="https://beta.tinybase.org/api/store/interfaces/store/store/"><code>Store</code></a> requires just a simple call to the <a href="https://beta.tinybase.org/api/store/functions/creation/createstore/"><code>createStore</code></a> function. Once you have one, you can easily set <a href="https://beta.tinybase.org/api/store/type-aliases/store/values/"><code>Values</code></a> in it by unique <a href="https://beta.tinybase.org/api/common/type-aliases/identity/id/"><code>Id</code></a>. And of course you can easily get them back out again.</p><p>Read more about using keyed value data in <a href="https://beta.tinybase.org/guides/the-basics/">The Basics</a> guide.</p></section>
|
|
2
2
|
|
|
3
3
|
```js
|
|
4
4
|
const store = createStore()
|
|
@@ -247,4 +247,4 @@ export const createShop: typeof createShopDecl = () => {
|
|
|
247
247
|
};
|
|
248
248
|
```
|
|
249
249
|
|
|
250
|
-
<section><h2 id="did-we-say-tiny">Did we say tiny?</h2><p>If you use the basic <a href="https://beta.tinybase.org/api/store/"><code>store</code></a> module alone, you'll only add a gzipped <em>5.0kB</em> to your app. Incrementally add the other modules as you need more functionality, or get it all for <em>11.2kB</em>.</p><p>The optional <a href="https://beta.tinybase.org/api/ui-react/"><code>ui-react</code></a> module is just another <em>4.5kB</em>, the auxiliary <a href="https://beta.tinybase.org/api/tools/"><code>tools</code></a> module is <em>11.1kB</em>, and everything is super fast. Life's easy when you have zero dependencies!</p><p>Read more about how TinyBase is structured and packaged in the <a href="https://beta.tinybase.org/guides/how-tinybase-is-built/architecture/">Architecture</a> guide.</p></section><div class="table"><table class="fixed"><tbody><tr><th width="30%"> </th><th>.js.gz</th><th>.js</th><th>debug.js</th><th>.d.ts</th></tr><tr><th class="right"><a href="https://beta.tinybase.org/api/store/">store</a></th><td>5.0kB</td><td>12.0kB</td><td>51.7kB</td><td>255.3kB</td></tr><tr><th class="right"><a href="https://beta.tinybase.org/api/metrics/">metrics</a></th><td>1.8kB</td><td>3.7kB</td><td>15.3kB</td><td>30.9kB</td></tr><tr><th class="right"><a href="https://beta.tinybase.org/api/indexes/">indexes</a></th><td>1.9kB</td><td>3.8kB</td><td>17.1kB</td><td>35.6kB</td></tr><tr><th class="right"><a href="https://beta.tinybase.org/api/relationships/">relationships</a></th><td>1.9kB</td><td>3.8kB</td><td>17.3kB</td><td>44.2kB</td></tr><tr><th class="right"><a href="https://beta.tinybase.org/api/queries/">queries</a></th><td>2.8kB</td><td>5.7kB</td><td>25.8kB</td><td>126.0kB</td></tr><tr><th class="right"><a href="https://beta.tinybase.org/api/checkpoints/">checkpoints</a></th><td>1.6kB</td><td>3.2kB</td><td>13.5kB</td><td>35.1kB</td></tr><tr><th class="right"><a href="https://beta.tinybase.org/api/mergeable-store/">mergeable-store</a></th><td>6.7kB</td><td>16.3kB</td><td>68.5kB</td><td>4.4kB</td></tr><tr><th class="right"><a href="https://beta.tinybase.org/api/persisters/">persisters</a></th><td>0.9kB</td><td>1.9kB</td><td>6.3kB</td><td>46.8kB</td></tr><tr><th class="right"><a href="https://beta.tinybase.org/api/common/">common</a></th><td>0.1kB</td><td>0.1kB</td><td>0.1kB</td><td>3.5kB</td></tr><tr><th class="right">tinybase (all)</th><td>11.2kB</td><td>27.8kB</td><td>119.2kB</td><td>0.4kB</td></tr></tbody></table></div><section><h2 id="well-tested-and-documented">Well tested and documented.</h2><p>TinyBase has <em>100.0%</em> test coverage, including the code throughout the documentation - even on this page! The guides, demos, and API examples are designed to make it as easy as possible for you to get your TinyBase-powered app up and running.</p><p>Read more about how TinyBase is tested in the Unit <a href="https://beta.tinybase.org/guides/how-tinybase-is-built/testing/">Testing</a> guide.</p></section><div class="table"><table class="fixed"><tbody><tr><th width="30%"> </th><th>Total</th><th>Tested</th><th>Coverage</th></tr><tr><th class="right">Lines</th><td>2,213</td><td>2,213</td><td>100.0%</td></tr><tr><th class="right">Statements</th><td>2,391</td><td>2,391</td><td>100.0%</td></tr><tr><th class="right">Functions</th><td>949</td><td>949</td><td>100.0%</td></tr><tr><th class="right">Branches</th><td>863</td><td>863</td><td>100.0%</td></tr><tr><th class="right">Tests</th><td colspan="3">6,479</td></tr><tr><th class="right">Assertions</th><td colspan="3">30,023</td></tr></tbody></table></div><hr><section id="sponsors"><h2 id="proud-to-be-sponsored-by">Proud to be sponsored by:</h2><a href="https://github.com/expo" target="_blank"><img title="expo" src="https://github.com/expo.png?size=48" width="48" height="48"></a><a href="https://github.com/beekeeb" target="_blank"><img title="beekeeb" src="https://github.com/beekeeb.png?size=48" width="48" height="48"></a><a href="https://github.com/cancelself" target="_blank"><img title="cancelself" src="https://github.com/cancelself.png?size=48" width="48" height="48"></a><a href="https://github.com/WonderPanda" target="_blank"><img title="WonderPanda" src="https://github.com/WonderPanda.png?size=48" width="48" height="48"></a><a href="https://github.com/arpitBhalla" target="_blank"><img title="arpitBhalla" src="https://github.com/arpitBhalla.png?size=48" width="48" height="48"></a></section><section id="users"><h2 id="excited-to-be-used-by">Excited to be used by:</h2><a href="https://github.com/Apocalypsor" target="_blank"><img title="Apocalypsor" src="https://github.com/Apocalypsor.png?size=48" width="48" height="48"></a><a href="https://github.com/brentvatne" target="_blank"><img title="brentvatne" src="https://github.com/brentvatne.png?size=48" width="48" height="48"></a><a href="https://github.com/circadian-risk" target="_blank"><img title="circadian-risk" src="https://github.com/circadian-risk.png?size=48" width="48" height="48"></a><a href="https://github.com/cubecull" target="_blank"><img title="cubecull" src="https://github.com/cubecull.png?size=48" width="48" height="48"></a><a href="https://github.com/erwinkn" target="_blank"><img title="erwinkn" src="https://github.com/erwinkn.png?size=48" width="48" height="48"></a><a href="https://github.com/expo" target="_blank"><img title="expo" src="https://github.com/expo.png?size=48" width="48" height="48"></a><a href="https://github.com/ezra-en" target="_blank"><img title="ezra-en" src="https://github.com/ezra-en.png?size=48" width="48" height="48"></a><a href="https://github.com/fdfontes" target="_blank"><img title="fdfontes" src="https://github.com/fdfontes.png?size=48" width="48" height="48"></a><a href="https://github.com/feychenie" target="_blank"><img title="feychenie" src="https://github.com/feychenie.png?size=48" width="48" height="48"></a><a href="https://github.com/flaming-codes" target="_blank"><img title="flaming-codes" src="https://github.com/flaming-codes.png?size=48" width="48" height="48"></a><a href="https://github.com/fostertheweb" target="_blank"><img title="fostertheweb" src="https://github.com/fostertheweb.png?size=48" width="48" height="48"></a><a href="https://github.com/fostertheweb" target="_blank"><img title="fostertheweb" src="https://github.com/fostertheweb.png?size=48" width="48" height="48"></a><a href="https://github.com/generates" target="_blank"><img title="generates" src="https://github.com/generates.png?size=48" width="48" height="48"></a><a href="https://github.com/Giulio987" target="_blank"><img title="Giulio987" src="https://github.com/Giulio987.png?size=48" width="48" height="48"></a><a href="https://github.com/itsdevcoffee" target="_blank"><img title="itsdevcoffee" src="https://github.com/itsdevcoffee.png?size=48" width="48" height="48"></a><a href="https://github.com/jaysc" target="_blank"><img title="jaysc" src="https://github.com/jaysc.png?size=48" width="48" height="48"></a><a href="https://github.com/jbolda" target="_blank"><img title="jbolda" src="https://github.com/jbolda.png?size=48" width="48" height="48"></a><a href="https://github.com/Kayoo-asso" target="_blank"><img title="Kayoo-asso" src="https://github.com/Kayoo-asso.png?size=48" width="48" height="48"></a><a href="https://github.com/kotofurumiya" target="_blank"><img title="kotofurumiya" src="https://github.com/kotofurumiya.png?size=48" width="48" height="48"></a><a href="https://github.com/Kudo" target="_blank"><img title="Kudo" src="https://github.com/Kudo.png?size=48" width="48" height="48"></a><a href="https://github.com/learn-anything" target="_blank"><img title="learn-anything" src="https://github.com/learn-anything.png?size=48" width="48" height="48"></a><a href="https://github.com/lluc" target="_blank"><img title="lluc" src="https://github.com/lluc.png?size=48" width="48" height="48"></a><a href="https://github.com/marksteve" target="_blank"><img title="marksteve" src="https://github.com/marksteve.png?size=48" width="48" height="48"></a><a href="https://github.com/miking-the-viking" target="_blank"><img title="miking-the-viking" src="https://github.com/miking-the-viking.png?size=48" width="48" height="48"></a><a href="https://github.com/mjamesderocher" target="_blank"><img title="mjamesderocher" src="https://github.com/mjamesderocher.png?size=48" width="48" height="48"></a><a href="https://github.com/nikitavoloboev" target="_blank"><img title="nikitavoloboev" src="https://github.com/nikitavoloboev.png?size=48" width="48" height="48"></a><a href="https://github.com/palerdot" target="_blank"><img title="palerdot" src="https://github.com/palerdot.png?size=48" width="48" height="48"></a><a href="https://github.com/PorcoRosso85" target="_blank"><img title="PorcoRosso85" src="https://github.com/PorcoRosso85.png?size=48" width="48" height="48"></a><a href="https://github.com/shaneosullivan" target="_blank"><img title="shaneosullivan" src="https://github.com/shaneosullivan.png?size=48" width="48" height="48"></a><a href="https://github.com/sudo-self" target="_blank"><img title="sudo-self" src="https://github.com/sudo-self.png?size=48" width="48" height="48"></a><a href="https://github.com/SuperSonicHub1" target="_blank"><img title="SuperSonicHub1" src="https://github.com/SuperSonicHub1.png?size=48" width="48" height="48"></a><a href="https://github.com/threepointone" target="_blank"><img title="threepointone" src="https://github.com/threepointone.png?size=48" width="48" height="48"></a><a href="https://github.com/uptonking" target="_blank"><img title="uptonking" src="https://github.com/uptonking.png?size=48" width="48" height="48"></a><a href="https://github.com/WonderPanda" target="_blank"><img title="WonderPanda" src="https://github.com/WonderPanda.png?size=48" width="48" height="48"></a></section><hr><p><a class="start" href="https://beta.tinybase.org/guides/the-basics/getting-started/">Get started</a></p><p><a href="https://beta.tinybase.org/demos/">Try the demos</a></p><p><a href="https://beta.tinybase.org/api/store/interfaces/store/store/">Read the docs</a></p><hr><section id="about"><h2 id="about">About</h2><p>Modern apps deserve better. Why trade reactive user experiences to be able to use relational data? Or sacrifice features for bundle size? And why does the cloud do all the work <a href="https://localfirstweb.dev/" target="_blank">anyway</a>?</p><p>Building TinyBase was originally an interesting exercise for <a rel="me" href="https://tripleodeon.com">me</a> in API design, minification, and documentation. But now it has taken on a life of its own, and has grown beyond my wildest expectations.</p><p>It could not have been built without these great <a href="https://beta.tinybase.org/guides/how-tinybase-is-built/credits/#giants">projects</a> and <a href="https://beta.tinybase.org/guides/how-tinybase-is-built/credits/#and-friends">friends</a>, and I hope you enjoy using it as much as I do building it!</p></section><section id="story"><h2 id="the-story">The story</h2><a href="https://youtu.be/hXL7OkW-Prk?t=1232" target="_blank"><img src="https://beta.tinybase.org/youtube.webp"></a></section>
|
|
250
|
+
<section><h2 id="did-we-say-tiny">Did we say tiny?</h2><p>If you use the basic <a href="https://beta.tinybase.org/api/store/"><code>store</code></a> module alone, you'll only add a gzipped <em>5.0kB</em> to your app. Incrementally add the other modules as you need more functionality, or get it all for <em>11.8kB</em>.</p><p>The optional <a href="https://beta.tinybase.org/api/ui-react/"><code>ui-react</code></a> module is just another <em>4.5kB</em>, the auxiliary <a href="https://beta.tinybase.org/api/tools/"><code>tools</code></a> module is <em>11.1kB</em>, and everything is super fast. Life's easy when you have zero dependencies!</p><p>Read more about how TinyBase is structured and packaged in the <a href="https://beta.tinybase.org/guides/how-tinybase-is-built/architecture/">Architecture</a> guide.</p></section><div class="table"><table class="fixed"><tbody><tr><th width="30%"> </th><th>.js.gz</th><th>.js</th><th>debug.js</th><th>.d.ts</th></tr><tr><th class="right"><a href="https://beta.tinybase.org/api/store/">store</a></th><td>5.0kB</td><td>12.0kB</td><td>51.7kB</td><td>255.3kB</td></tr><tr><th class="right"><a href="https://beta.tinybase.org/api/metrics/">metrics</a></th><td>1.8kB</td><td>3.7kB</td><td>15.3kB</td><td>30.9kB</td></tr><tr><th class="right"><a href="https://beta.tinybase.org/api/indexes/">indexes</a></th><td>1.9kB</td><td>3.8kB</td><td>17.1kB</td><td>35.6kB</td></tr><tr><th class="right"><a href="https://beta.tinybase.org/api/relationships/">relationships</a></th><td>1.9kB</td><td>3.8kB</td><td>17.3kB</td><td>44.2kB</td></tr><tr><th class="right"><a href="https://beta.tinybase.org/api/queries/">queries</a></th><td>2.8kB</td><td>5.7kB</td><td>25.8kB</td><td>126.0kB</td></tr><tr><th class="right"><a href="https://beta.tinybase.org/api/checkpoints/">checkpoints</a></th><td>1.6kB</td><td>3.2kB</td><td>13.5kB</td><td>35.1kB</td></tr><tr><th class="right"><a href="https://beta.tinybase.org/api/mergeable-store/">mergeable-store</a></th><td>6.7kB</td><td>16.3kB</td><td>68.5kB</td><td>4.4kB</td></tr><tr><th class="right"><a href="https://beta.tinybase.org/api/persisters/">persisters</a></th><td>0.9kB</td><td>1.9kB</td><td>6.3kB</td><td>46.6kB</td></tr><tr><th class="right"><a href="https://beta.tinybase.org/api/synchronizers/">synchronizers</a></th><td>1.8kB</td><td>3.9kB</td><td>14.2kB</td><td>3.5kB</td></tr><tr><th class="right"><a href="https://beta.tinybase.org/api/common/">common</a></th><td>0.1kB</td><td>0.1kB</td><td>0.1kB</td><td>3.5kB</td></tr><tr><th class="right">tinybase (all)</th><td>11.8kB</td><td>29.2kB</td><td>124.4kB</td><td>0.4kB</td></tr></tbody></table></div><section><h2 id="well-tested-and-documented">Well tested and documented.</h2><p>TinyBase has <em>100.0%</em> test coverage, including the code throughout the documentation - even on this page! The guides, demos, and API examples are designed to make it as easy as possible for you to get your TinyBase-powered app up and running.</p><p>Read more about how TinyBase is tested in the Unit <a href="https://beta.tinybase.org/guides/how-tinybase-is-built/testing/">Testing</a> guide.</p></section><div class="table"><table class="fixed"><tbody><tr><th width="30%"> </th><th>Total</th><th>Tested</th><th>Coverage</th></tr><tr><th class="right">Lines</th><td>2,278</td><td>2,278</td><td>100.0%</td></tr><tr><th class="right">Statements</th><td>2,460</td><td>2,460</td><td>100.0%</td></tr><tr><th class="right">Functions</th><td>969</td><td>969</td><td>100.0%</td></tr><tr><th class="right">Branches</th><td>897</td><td>897</td><td>100.0%</td></tr><tr><th class="right">Tests</th><td colspan="3">6,532</td></tr><tr><th class="right">Assertions</th><td colspan="3">30,523</td></tr></tbody></table></div><hr><section id="sponsors"><h2 id="proud-to-be-sponsored-by">Proud to be sponsored by:</h2><a href="https://github.com/expo" target="_blank"><img title="expo" src="https://github.com/expo.png?size=48" width="48" height="48"></a><a href="https://github.com/beekeeb" target="_blank"><img title="beekeeb" src="https://github.com/beekeeb.png?size=48" width="48" height="48"></a><a href="https://github.com/cancelself" target="_blank"><img title="cancelself" src="https://github.com/cancelself.png?size=48" width="48" height="48"></a><a href="https://github.com/WonderPanda" target="_blank"><img title="WonderPanda" src="https://github.com/WonderPanda.png?size=48" width="48" height="48"></a><a href="https://github.com/arpitBhalla" target="_blank"><img title="arpitBhalla" src="https://github.com/arpitBhalla.png?size=48" width="48" height="48"></a></section><section id="users"><h2 id="excited-to-be-used-by">Excited to be used by:</h2><a href="https://github.com/Apocalypsor" target="_blank"><img title="Apocalypsor" src="https://github.com/Apocalypsor.png?size=48" width="48" height="48"></a><a href="https://github.com/brentvatne" target="_blank"><img title="brentvatne" src="https://github.com/brentvatne.png?size=48" width="48" height="48"></a><a href="https://github.com/circadian-risk" target="_blank"><img title="circadian-risk" src="https://github.com/circadian-risk.png?size=48" width="48" height="48"></a><a href="https://github.com/cubecull" target="_blank"><img title="cubecull" src="https://github.com/cubecull.png?size=48" width="48" height="48"></a><a href="https://github.com/erwinkn" target="_blank"><img title="erwinkn" src="https://github.com/erwinkn.png?size=48" width="48" height="48"></a><a href="https://github.com/expo" target="_blank"><img title="expo" src="https://github.com/expo.png?size=48" width="48" height="48"></a><a href="https://github.com/ezra-en" target="_blank"><img title="ezra-en" src="https://github.com/ezra-en.png?size=48" width="48" height="48"></a><a href="https://github.com/fdfontes" target="_blank"><img title="fdfontes" src="https://github.com/fdfontes.png?size=48" width="48" height="48"></a><a href="https://github.com/feychenie" target="_blank"><img title="feychenie" src="https://github.com/feychenie.png?size=48" width="48" height="48"></a><a href="https://github.com/flaming-codes" target="_blank"><img title="flaming-codes" src="https://github.com/flaming-codes.png?size=48" width="48" height="48"></a><a href="https://github.com/fostertheweb" target="_blank"><img title="fostertheweb" src="https://github.com/fostertheweb.png?size=48" width="48" height="48"></a><a href="https://github.com/fostertheweb" target="_blank"><img title="fostertheweb" src="https://github.com/fostertheweb.png?size=48" width="48" height="48"></a><a href="https://github.com/generates" target="_blank"><img title="generates" src="https://github.com/generates.png?size=48" width="48" height="48"></a><a href="https://github.com/Giulio987" target="_blank"><img title="Giulio987" src="https://github.com/Giulio987.png?size=48" width="48" height="48"></a><a href="https://github.com/itsdevcoffee" target="_blank"><img title="itsdevcoffee" src="https://github.com/itsdevcoffee.png?size=48" width="48" height="48"></a><a href="https://github.com/jaysc" target="_blank"><img title="jaysc" src="https://github.com/jaysc.png?size=48" width="48" height="48"></a><a href="https://github.com/jbolda" target="_blank"><img title="jbolda" src="https://github.com/jbolda.png?size=48" width="48" height="48"></a><a href="https://github.com/Kayoo-asso" target="_blank"><img title="Kayoo-asso" src="https://github.com/Kayoo-asso.png?size=48" width="48" height="48"></a><a href="https://github.com/kotofurumiya" target="_blank"><img title="kotofurumiya" src="https://github.com/kotofurumiya.png?size=48" width="48" height="48"></a><a href="https://github.com/Kudo" target="_blank"><img title="Kudo" src="https://github.com/Kudo.png?size=48" width="48" height="48"></a><a href="https://github.com/learn-anything" target="_blank"><img title="learn-anything" src="https://github.com/learn-anything.png?size=48" width="48" height="48"></a><a href="https://github.com/lluc" target="_blank"><img title="lluc" src="https://github.com/lluc.png?size=48" width="48" height="48"></a><a href="https://github.com/marksteve" target="_blank"><img title="marksteve" src="https://github.com/marksteve.png?size=48" width="48" height="48"></a><a href="https://github.com/miking-the-viking" target="_blank"><img title="miking-the-viking" src="https://github.com/miking-the-viking.png?size=48" width="48" height="48"></a><a href="https://github.com/mjamesderocher" target="_blank"><img title="mjamesderocher" src="https://github.com/mjamesderocher.png?size=48" width="48" height="48"></a><a href="https://github.com/nikitavoloboev" target="_blank"><img title="nikitavoloboev" src="https://github.com/nikitavoloboev.png?size=48" width="48" height="48"></a><a href="https://github.com/palerdot" target="_blank"><img title="palerdot" src="https://github.com/palerdot.png?size=48" width="48" height="48"></a><a href="https://github.com/PorcoRosso85" target="_blank"><img title="PorcoRosso85" src="https://github.com/PorcoRosso85.png?size=48" width="48" height="48"></a><a href="https://github.com/shaneosullivan" target="_blank"><img title="shaneosullivan" src="https://github.com/shaneosullivan.png?size=48" width="48" height="48"></a><a href="https://github.com/sudo-self" target="_blank"><img title="sudo-self" src="https://github.com/sudo-self.png?size=48" width="48" height="48"></a><a href="https://github.com/SuperSonicHub1" target="_blank"><img title="SuperSonicHub1" src="https://github.com/SuperSonicHub1.png?size=48" width="48" height="48"></a><a href="https://github.com/threepointone" target="_blank"><img title="threepointone" src="https://github.com/threepointone.png?size=48" width="48" height="48"></a><a href="https://github.com/uptonking" target="_blank"><img title="uptonking" src="https://github.com/uptonking.png?size=48" width="48" height="48"></a><a href="https://github.com/WonderPanda" target="_blank"><img title="WonderPanda" src="https://github.com/WonderPanda.png?size=48" width="48" height="48"></a></section><hr><p><a class="start" href="https://beta.tinybase.org/guides/the-basics/getting-started/">Get started</a></p><p><a href="https://beta.tinybase.org/demos/">Try the demos</a></p><p><a href="https://beta.tinybase.org/api/store/interfaces/store/store/">Read the docs</a></p><hr><section id="about"><h2 id="about">About</h2><p>Modern apps deserve better. Why trade reactive user experiences to be able to use relational data? Or sacrifice features for bundle size? And why does the cloud do all the work <a href="https://localfirstweb.dev/" target="_blank">anyway</a>?</p><p>Building TinyBase was originally an interesting exercise for <a rel="me" href="https://tripleodeon.com">me</a> in API design, minification, and documentation. But now it has taken on a life of its own, and has grown beyond my wildest expectations.</p><p>It could not have been built without these great <a href="https://beta.tinybase.org/guides/how-tinybase-is-built/credits/#giants">projects</a> and <a href="https://beta.tinybase.org/guides/how-tinybase-is-built/credits/#and-friends">friends</a>, and I hope you enjoy using it as much as I do building it!</p></section><section id="story"><h2 id="the-story">The story</h2><a href="https://youtu.be/hXL7OkW-Prk?t=1232" target="_blank"><img src="https://beta.tinybase.org/youtube.webp"></a></section>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";const e=e=>typeof e,t="",a=e(t),s="utf8",n=Promise,o=Math.max,r=e=>null==e,c=(e,t,a)=>r(e)?a?.():t(e),i=(e,t,a)=>e.slice(t,a),l=e=>new n(e),g=Object,d=e=>g.getPrototypeOf(e),y=g.keys,u=g.freeze,h=(e=[])=>g.fromEntries(e),p=e=>(e=>!r(e)&&c(d(e),(e=>e==g.prototype||r(d(e))),(()=>!0)))(e)&&0==(e=>y(e).length)(e),v=(e,t)=>e?.delete(t),w=e=>new Map(e),S=(e,t)=>e?.get(t),f=(e,t)=>((e,t)=>e?.forEach(t))(e,((e,a)=>t(a,e))),b=(e,t,a)=>r(a)?(v(e,t),e):e?.set(t,a),C=(e,t,a,s)=>{var n,o;return n=e,o=t,n?.has(o)?s?.(S(e,t)):b(e,t,a()),S(e,t)},M=w(),A=w(),m=new globalThis.TextEncoder,L=2**36,T=2**30,x=2**24,H=2**18,O=4096,E=64,R=e=>String.fromCharCode(48+(63&e)),k=(e,t)=>((e,t)=>e.charCodeAt(t))(e,t)-48,D=w();h(),h();const N=JSON.parse,P="\n";exports.createLocalClient=()=>{const e=""+Math.random();return{send:(t,a,s,n)=>{r(t)?f(D,((t,o)=>t!=e?o(e,a,s,n):0)):S(D,t)?.(e,a,s,n)},onReceive:t=>{b(D,e,t)},destroy:()=>{v(D,e)},getStats:()=>({})}},exports.createSyncPersister=(s,n,i=1,g)=>{let d;const{send:y,onReceive:h,destroy:f}=n,[D]=(e=>{let t=0,a=-1;const s=(e=>{let t=2166136261;var a;return a=e=>{t^=e,t+=(t<<1)+(t<<4)+(t<<7)+(t<<8)+(t<<24)},m.encode(e).forEach(a),t>>>0})(e),n=e=>{const s=t,[n,c]=r(e)||""==e?[0,0]:[k(i=e,0)*L+k(i,1)*T+k(i,2)*x+k(i,3)*H+k(i,4)*O+k(i,5)*E+k(i,6),k(i,7)*H+k(i,8)*O+k(i,9)*E+k(i,10),k(i,11)*x+k(i,12)*H+k(i,13)*O+k(i,14)*E+k(i,15)];var i;t=o(s,n,Date.now()),a=t==s?t==n?o(a,c):a:t==n?c:-1};return[()=>{return n(),o=++a,r=s,R((e=t)/L)+R(e/T)+R(e/x)+R(e/H)+R(e/O)+R(e/E)+R(e)+R(o/H)+R(o/O)+R(o/E)+R(o)+R(r/x)+R(r/H)+R(r/O)+R(r/E)+R(r);var e,o,r},n]})(s.getId()),N=w();h(((e,t,a,n)=>{if(0==a)c(S(N,t),(([t,a])=>r(t)||t==e?a(n,e):0));else if(1==a&&W.isAutoLoading())I(e,n).then((e=>d?.(void 0,(()=>e))));else{const o=2==a&&W.isAutoSaving()?s.getMergeableContentHashes():3==a?s.getMergeableTableIdsDiff(n):4==a?s.getMergeableRowIdsDiff(n):5==a?s.getMergeableTablesChanges(n):6==a?s.getMergeableValuesChanges(n):0;0!==o&&y(e,t,0,o)}}));const P=async(e,t,a="")=>l(((s,n)=>{const o=D(),r=setTimeout((()=>{v(N,o),n(`No response from ${e??"anyone"} to '${t}'`)}),1e3*i);b(N,o,[e,(e,t)=>{clearTimeout(r),v(N,o),s([e,t])}]),y(e,o,t,a)})),I=async(e=null,a)=>{r(a)&&([a,e]=await P(e,2));const[n,[o,c]]=a,[,[i,l]]=s.getMergeableContentHashes(),g=[t,[[t,{}],[t,{}],1]];return i!=o&&(g[0]=n,g[1][0]=(await P(e,5,s.getMergeableCellHashes((await P(e,4,s.getMergeableRowHashes((await P(e,3,s.getMergeableTableHashes()))[0])))[0])))[0]),l!=c&&(g[0]=n,g[1][1]=(await P(e,6,s.getMergeableValuesHashes()))[0]),g},W=((t,s,n,o,i,l,g,d={},y=[])=>{let h,v,w,f=0;C(M,y,(()=>0)),C(A,y,(()=>[]));const[m,L,T,x]=((e,t)=>!e||r(t.getMergeableContent)?[0,t.getContent,t.getTransactionChanges,([e,t])=>!p(e)||!p(t)]:[1,t.getMergeableContent,t.getTransactionMergeableChanges,([,[[,e],[,t]]])=>!p(e)||!p(t)])(g,t),H=async e=>(2!=f&&(f=1,await E.schedule((async()=>{await e(),f=0}))),E),O=s=>{var n;(m&&(n=s?.[0],e(n)==a)?1===s?.[1][2]?t.applyMergeableChanges:t.setMergeableContent:1===s?.[2]?t.applyChanges:t.setContent)(s)},E={load:async(e,a)=>await H((async()=>{try{O(await s())}catch(s){l?.(s),t.setContent([e,a])}})),startAutoLoad:async(e={},t={})=>(await E.stopAutoLoad().load(e,t),v=o((async(e,t)=>{const a=t?.();await H((async()=>{try{O(a??e?.()??await s())}catch(e){l?.(e)}}))})),E),stopAutoLoad:()=>(v&&(i(v),v=void 0),E),isAutoLoading:()=>!r(v),save:async e=>(1!=f&&(f=2,await E.schedule((async()=>{try{await n(L,e)}catch(e){l?.(e)}f=0}))),E),startAutoSave:async()=>(await E.stopAutoSave().save(),w=t.addDidFinishTransactionListener((()=>{const e=T();x(e)&&E.save((()=>e))})),E),stopAutoSave:()=>(c(w,t.delListener),w=void 0,E),isAutoSaving:()=>!r(w),schedule:async(...e)=>(((e,...t)=>{e.push(...t)})(S(A,y),...e),await(async()=>{if(!S(M,y)){for(b(M,y,1);!r((e=S(A,y),h=e.shift()));)try{await h()}catch(e){l?.(e)}b(M,y,0)}var e})(),E),getStore:()=>t,destroy:()=>E.stopAutoLoad().stopAutoSave(),getStats:()=>({}),...d};return u(E)})(s,(async()=>{const e=await I();return e[0]!=t?e:void 0}),(async()=>{y(null,null,1,s.getMergeableContentHashes())}),(e=>d=e),(()=>d=void 0),g,!0,{getClient:()=>n,startSync:async()=>await(await W.startAutoLoad()).startAutoSave(),stopSync:()=>W.stopAutoLoad().stopAutoSave(),destroy:()=>(f(),W.stopSync())});return W},exports.createWsClient=async e=>{let a;e.on("message",(e=>{if(!r(a)){const t=e.toString(s),n=t.indexOf(P);-1!==n&&a(i(t,0,n),...N(i(t,n+1)))}}));const n={send:(a,...s)=>{e.send((a??t)+P+JSON.stringify(s,((e,t)=>t instanceof Map?g.fromEntries([...t]):t)))},onReceive:e=>{a=e},destroy:()=>{e.close()},getStats:()=>({})};return l(((t,a)=>{e.readyState!=e.OPEN?(e.on("error",a),e.on("open",(()=>t(n)))):t(n)}))},exports.createWsSimpleServer=e=>{const a=w();return e.on("connection",((e,n)=>{const o=n.headers["sec-websocket-key"];b(a,o,e),e.on("message",(e=>{const n=e.toString(s),r=n.indexOf(P);if(-1!==r){const e=i(n,0,r),s=i(n,r+1);e===t?f(a,((e,t)=>e!=o?t.send(o+P+s):0)):S(a,e)?.send(o+P+s)}})),e.on("close",(()=>v(a,o)))})),{getWebSocketServer:()=>e,destroy:()=>{e.close(),a.clear()}}};
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";const e=e=>typeof e,t="",n=e(t),o="utf8",l=Promise,r=Math.max,a=e=>null==e,s=(e,t,n)=>a(e)?null==n?void 0:n():t(e),i=(e,t,n)=>e.slice(t,n),u=e=>new l(e),c=Object,d=e=>c.getPrototypeOf(e),v=c.keys,g=c.freeze,y=(e=[])=>c.fromEntries(e),f=e=>(e=>!a(e)&&s(d(e),(e=>e==c.prototype||a(d(e))),(()=>!0)))(e)&&0==(e=>v(e).length)(e),h=(e,t)=>null==e?void 0:e.delete(t),p=e=>new Map(e),b=(e,t)=>null==e?void 0:e.get(t),S=(e,t)=>((e,t)=>null==e?void 0:e.forEach(t))(e,((e,n)=>t(n,e))),C=(e,t,n)=>a(n)?(h(e,t),e):null==e?void 0:e.set(t,n),m=(e,t,n,o)=>{var l,r,a;return r=t,null!=(a=null==(l=e)?void 0:l.has(r))&&a?null==o||o(b(e,t)):C(e,t,n()),b(e,t)};var M=Object.defineProperty,w=Object.getOwnPropertySymbols,A=Object.prototype.hasOwnProperty,x=Object.prototype.propertyIsEnumerable,O=(e,t,n)=>t in e?M(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,P=(e,t,n)=>new Promise(((o,l)=>{var r=e=>{try{s(n.next(e))}catch(e){l(e)}},a=e=>{try{s(n.throw(e))}catch(e){l(e)}},s=e=>e.done?o(e.value):Promise.resolve(e.value).then(r,a);s((n=n.apply(e,t)).next())}));const L=p(),T=p(),E=new globalThis.TextEncoder;var H=Math.pow;const j=H(2,36),R=H(2,30),k=H(2,24),D=H(2,18),I=H(2,12),N=H(2,6),W=e=>String.fromCharCode(48+(63&e)),J=(e,t)=>((e,t)=>e.charCodeAt(t))(e,t)-48,V=p();y(),y();const $=JSON.parse,z="\n";var F=(e,t,n)=>new Promise(((o,l)=>{var r=e=>{try{s(n.next(e))}catch(e){l(e)}},a=e=>{try{s(n.throw(e))}catch(e){l(e)}},s=e=>e.done?o(e.value):Promise.resolve(e.value).then(r,a);s((n=n.apply(e,t)).next())}));exports.createLocalClient=()=>{const e=""+Math.random();return{send:(t,n,o,l)=>{var r;a(t)?S(V,((t,r)=>t!=e?r(e,n,o,l):0)):null==(r=b(V,t))||r(e,n,o,l)},onReceive:t=>{C(V,e,t)},destroy:()=>{h(V,e)},getStats:()=>({})}},exports.createSyncPersister=(o,l,i=1,c)=>{let d;const{send:v,onReceive:y,destroy:S}=l,[M]=(e=>{let t=0,n=-1;const o=(e=>{let t=2166136261;var n;return n=e=>{t^=e,t+=(t<<1)+(t<<4)+(t<<7)+(t<<8)+(t<<24)},E.encode(e).forEach(n),t>>>0})(e),l=e=>{const o=t,[l,s]=a(e)||""==e?[0,0]:[J(i=e,0)*j+J(i,1)*R+J(i,2)*k+J(i,3)*D+J(i,4)*I+J(i,5)*N+J(i,6),J(i,7)*D+J(i,8)*I+J(i,9)*N+J(i,10),J(i,11)*k+J(i,12)*D+J(i,13)*I+J(i,14)*N+J(i,15)];var i;t=r(o,l,Date.now()),n=t==o?t==l?r(n,s):n:t==l?s:-1};return[()=>{return l(),r=++n,a=o,W((e=t)/j)+W(e/R)+W(e/k)+W(e/D)+W(e/I)+W(e/N)+W(e)+W(r/D)+W(r/I)+W(r/N)+W(r)+W(a/k)+W(a/D)+W(a/I)+W(a/N)+W(a);var e,r,a},l]})(o.getId()),H=p();y(((e,t,n,l)=>{if(0==n)s(b(H,t),(([t,n])=>a(t)||t==e?n(l,e):0));else if(1==n&&z.isAutoLoading())$(e,l).then((e=>null==d?void 0:d(void 0,(()=>e))));else{const r=2==n&&z.isAutoSaving()?o.getMergeableContentHashes():3==n?o.getMergeableTableIdsDiff(l):4==n?o.getMergeableRowIdsDiff(l):5==n?o.getMergeableTablesChanges(l):6==n?o.getMergeableValuesChanges(l):0;0!==r&&v(e,t,0,r)}}));const V=(e,t,...n)=>F(void 0,[e,t,...n],(function*(e,t,n=""){return u(((o,l)=>{const r=M(),a=setTimeout((()=>{h(H,r),l(`No response from ${null!=e?e:"anyone"} to '${t}'`)}),1e3*i);C(H,r,[e,(e,t)=>{clearTimeout(a),h(H,r),o([e,t])}]),v(e,r,t,n)}))})),$=(e=null,n)=>F(void 0,null,(function*(){a(n)&&([n,e]=yield V(e,2));const[l,[r,s]]=n,[,[i,u]]=o.getMergeableContentHashes(),c=[t,[[t,{}],[t,{}],1]];return i!=r&&(c[0]=l,c[1][0]=(yield V(e,5,o.getMergeableCellHashes((yield V(e,4,o.getMergeableRowHashes((yield V(e,3,o.getMergeableTableHashes()))[0])))[0])))[0]),u!=s&&(c[0]=l,c[1][1]=(yield V(e,6,o.getMergeableValuesHashes()))[0]),c})),z=((t,o,l,r,i,u,c,d={},v=[])=>{let y,h,p,S=0;m(L,v,(()=>0)),m(T,v,(()=>[]));const[M,E,H,j]=((e,t)=>!e||a(t.getMergeableContent)?[0,t.getContent,t.getTransactionChanges,([e,t])=>!f(e)||!f(t)]:[1,t.getMergeableContent,t.getTransactionMergeableChanges,([,[[,e],[,t]]])=>!f(e)||!f(t)])(c,t),R=e=>P(void 0,null,(function*(){return 2!=S&&(S=1,yield D.schedule((()=>P(void 0,null,(function*(){yield e(),S=0}))))),D})),k=o=>{var l;(M&&(l=null==o?void 0:o[0],e(l)==n)?1===(null==o?void 0:o[1][2])?t.applyMergeableChanges:t.setMergeableContent:1===(null==o?void 0:o[2])?t.applyChanges:t.setContent)(o)},D=((e,t)=>{for(var n in t||(t={}))A.call(t,n)&&O(e,n,t[n]);if(w)for(var n of w(t))x.call(t,n)&&O(e,n,t[n]);return e})({load:(e,n)=>P(void 0,null,(function*(){return yield R((()=>P(void 0,null,(function*(){try{k(yield o())}catch(o){null==u||u(o),t.setContent([e,n])}}))))})),startAutoLoad:(...e)=>P(void 0,[...e],(function*(e={},t={}){return yield D.stopAutoLoad().load(e,t),h=r(((e,t)=>P(void 0,null,(function*(){const n=null==t?void 0:t();yield R((()=>P(void 0,null,(function*(){var t;try{k(null!=(t=null!=n?n:null==e?void 0:e())?t:yield o())}catch(e){null==u||u(e)}}))))})))),D})),stopAutoLoad:()=>(h&&(i(h),h=void 0),D),isAutoLoading:()=>!a(h),save:e=>P(void 0,null,(function*(){return 1!=S&&(S=2,yield D.schedule((()=>P(void 0,null,(function*(){try{yield l(E,e)}catch(e){null==u||u(e)}S=0}))))),D})),startAutoSave:()=>P(void 0,null,(function*(){return yield D.stopAutoSave().save(),p=t.addDidFinishTransactionListener((()=>{const e=H();j(e)&&D.save((()=>e))})),D})),stopAutoSave:()=>(s(p,t.delListener),p=void 0,D),isAutoSaving:()=>!a(p),schedule:(...e)=>P(void 0,null,(function*(){return((e,...t)=>{e.push(...t)})(b(T,v),...e),yield P(void 0,null,(function*(){if(!b(L,v)){for(C(L,v,1);!a((e=b(T,v),y=e.shift()));)try{yield y()}catch(e){null==u||u(e)}C(L,v,0)}var e})),D})),getStore:()=>t,destroy:()=>D.stopAutoLoad().stopAutoSave(),getStats:()=>({})},d);return g(D)})(o,(()=>F(void 0,null,(function*(){const e=yield $();return e[0]!=t?e:void 0}))),(()=>F(void 0,null,(function*(){v(null,null,1,o.getMergeableContentHashes())}))),(e=>d=e),(()=>d=void 0),c,!0,{getClient:()=>l,startSync:()=>F(void 0,null,(function*(){return yield(yield z.startAutoLoad()).startAutoSave()})),stopSync:()=>z.stopAutoLoad().stopAutoSave(),destroy:()=>(S(),z.stopSync())});return z},exports.createWsClient=e=>{return n=function*(){let n;e.on("message",(e=>{if(!a(n)){const t=e.toString(o),l=t.indexOf(z);-1!==l&&n(i(t,0,l),...$(i(t,l+1)))}}));const l={send:(n,...o)=>{e.send((null!=n?n:t)+z+JSON.stringify(o,((e,t)=>t instanceof Map?c.fromEntries([...t]):t)))},onReceive:e=>{n=e},destroy:()=>{e.close()},getStats:()=>({})};return u(((t,n)=>{e.readyState!=e.OPEN?(e.on("error",n),e.on("open",(()=>t(l)))):t(l)}))},new Promise(((e,t)=>{var o=e=>{try{r(n.next(e))}catch(e){t(e)}},l=e=>{try{r(n.throw(e))}catch(e){t(e)}},r=t=>t.done?e(t.value):Promise.resolve(t.value).then(o,l);r((n=n.apply(void 0,null)).next())}));var n},exports.createWsSimpleServer=e=>{const n=p();return e.on("connection",((e,l)=>{const r=l.headers["sec-websocket-key"];C(n,r,e),e.on("message",(e=>{var l;const a=e.toString(o),s=a.indexOf(z);if(-1!==s){const e=i(a,0,s),o=i(a,s+1);e===t?S(n,((e,t)=>e!=r?t.send(r+z+o):0)):null==(l=b(n,e))||l.send(r+z+o)}})),e.on("close",(()=>h(n,r)))})),{getWebSocketServer:()=>e,destroy:()=>{e.close(),n.clear()}}};
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
const e=e=>typeof e,t="",n=e(t),o="utf8",l=Promise,r=Math.max,a=e=>null==e,s=(e,t,n)=>a(e)?null==n?void 0:n():t(e),i=(e,t,n)=>e.slice(t,n),u=e=>new l(e),d=Object,c=e=>d.getPrototypeOf(e),v=d.keys,g=d.freeze,y=(e=[])=>d.fromEntries(e),f=e=>(e=>!a(e)&&s(c(e),(e=>e==d.prototype||a(c(e))),(()=>!0)))(e)&&0==(e=>v(e).length)(e),h=(e,t)=>null==e?void 0:e.delete(t),p=e=>new Map(e),b=(e,t)=>null==e?void 0:e.get(t),S=(e,t)=>((e,t)=>null==e?void 0:e.forEach(t))(e,((e,n)=>t(n,e))),M=(e,t,n)=>a(n)?(h(e,t),e):null==e?void 0:e.set(t,n),m=(e,t,n,o)=>{var l,r,a;return r=t,null!=(a=null==(l=e)?void 0:l.has(r))&&a?null==o||o(b(e,t)):M(e,t,n()),b(e,t)};var C=Object.defineProperty,w=Object.getOwnPropertySymbols,A=Object.prototype.hasOwnProperty,O=Object.prototype.propertyIsEnumerable,P=(e,t,n)=>t in e?C(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,x=(e,t,n)=>new Promise(((o,l)=>{var r=e=>{try{s(n.next(e))}catch(e){l(e)}},a=e=>{try{s(n.throw(e))}catch(e){l(e)}},s=e=>e.done?o(e.value):Promise.resolve(e.value).then(r,a);s((n=n.apply(e,t)).next())}));const L=p(),T=p(),E=new globalThis.TextEncoder;var H=Math.pow;const j=H(2,36),R=H(2,30),k=H(2,24),D=H(2,18),I=H(2,12),N=H(2,6),J=e=>String.fromCharCode(48+(63&e)),V=(e,t)=>((e,t)=>e.charCodeAt(t))(e,t)-48,$=p();y(),y();const z=()=>{const e=""+Math.random();return{send:(t,n,o,l)=>{var r;a(t)?S($,((t,r)=>t!=e?r(e,n,o,l):0)):null==(r=b($,t))||r(e,n,o,l)},onReceive:t=>{M($,e,t)},destroy:()=>{h($,e)},getStats:()=>({})}},F=JSON.parse,W="\n",q=e=>{return n=function*(){let n;e.on("message",(e=>{if(!a(n)){const t=e.toString(o),l=t.indexOf(W);-1!==l&&n(i(t,0,l),...F(i(t,l+1)))}}));const l={send:(n,...o)=>{e.send((null!=n?n:t)+W+JSON.stringify(o,((e,t)=>t instanceof Map?d.fromEntries([...t]):t)))},onReceive:e=>{n=e},destroy:()=>{e.close()},getStats:()=>({})};return u(((t,n)=>{e.readyState!=e.OPEN?(e.on("error",n),e.on("open",(()=>t(l)))):t(l)}))},new Promise(((e,t)=>{var o=e=>{try{r(n.next(e))}catch(e){t(e)}},l=e=>{try{r(n.throw(e))}catch(e){t(e)}},r=t=>t.done?e(t.value):Promise.resolve(t.value).then(o,l);r((n=n.apply(void 0,null)).next())}));var n},B=e=>{const n=p();return e.on("connection",((e,l)=>{const r=l.headers["sec-websocket-key"];M(n,r,e),e.on("message",(e=>{var l;const a=e.toString(o),s=a.indexOf(W);if(-1!==s){const e=i(a,0,s),o=i(a,s+1);e===t?S(n,((e,t)=>e!=r?t.send(r+W+o):0)):null==(l=b(n,e))||l.send(r+W+o)}})),e.on("close",(()=>h(n,r)))})),{getWebSocketServer:()=>e,destroy:()=>{e.close(),n.clear()}}};var G=(e,t,n)=>new Promise(((o,l)=>{var r=e=>{try{s(n.next(e))}catch(e){l(e)}},a=e=>{try{s(n.throw(e))}catch(e){l(e)}},s=e=>e.done?o(e.value):Promise.resolve(e.value).then(r,a);s((n=n.apply(e,t)).next())}));const K=(o,l,i=1,d)=>{let c;const{send:v,onReceive:y,destroy:S}=l,[C]=(e=>{let t=0,n=-1;const o=(e=>{let t=2166136261;var n;return n=e=>{t^=e,t+=(t<<1)+(t<<4)+(t<<7)+(t<<8)+(t<<24)},E.encode(e).forEach(n),t>>>0})(e),l=e=>{const o=t,[l,s]=a(e)||""==e?[0,0]:[V(i=e,0)*j+V(i,1)*R+V(i,2)*k+V(i,3)*D+V(i,4)*I+V(i,5)*N+V(i,6),V(i,7)*D+V(i,8)*I+V(i,9)*N+V(i,10),V(i,11)*k+V(i,12)*D+V(i,13)*I+V(i,14)*N+V(i,15)];var i;t=r(o,l,Date.now()),n=t==o?t==l?r(n,s):n:t==l?s:-1};return[()=>{return l(),r=++n,a=o,J((e=t)/j)+J(e/R)+J(e/k)+J(e/D)+J(e/I)+J(e/N)+J(e)+J(r/D)+J(r/I)+J(r/N)+J(r)+J(a/k)+J(a/D)+J(a/I)+J(a/N)+J(a);var e,r,a},l]})(o.getId()),H=p();y(((e,t,n,l)=>{if(0==n)s(b(H,t),(([t,n])=>a(t)||t==e?n(l,e):0));else if(1==n&&F.isAutoLoading())z(e,l).then((e=>null==c?void 0:c(void 0,(()=>e))));else{const r=2==n&&F.isAutoSaving()?o.getMergeableContentHashes():3==n?o.getMergeableTableIdsDiff(l):4==n?o.getMergeableRowIdsDiff(l):5==n?o.getMergeableTablesChanges(l):6==n?o.getMergeableValuesChanges(l):0;0!==r&&v(e,t,0,r)}}));const $=(e,t,...n)=>G(void 0,[e,t,...n],(function*(e,t,n=""){return u(((o,l)=>{const r=C(),a=setTimeout((()=>{h(H,r),l(`No response from ${null!=e?e:"anyone"} to '${t}'`)}),1e3*i);M(H,r,[e,(e,t)=>{clearTimeout(a),h(H,r),o([e,t])}]),v(e,r,t,n)}))})),z=(e=null,n)=>G(void 0,null,(function*(){a(n)&&([n,e]=yield $(e,2));const[l,[r,s]]=n,[,[i,u]]=o.getMergeableContentHashes(),d=[t,[[t,{}],[t,{}],1]];return i!=r&&(d[0]=l,d[1][0]=(yield $(e,5,o.getMergeableCellHashes((yield $(e,4,o.getMergeableRowHashes((yield $(e,3,o.getMergeableTableHashes()))[0])))[0])))[0]),u!=s&&(d[0]=l,d[1][1]=(yield $(e,6,o.getMergeableValuesHashes()))[0]),d})),F=((t,o,l,r,i,u,d,c={},v=[])=>{let y,h,p,S=0;m(L,v,(()=>0)),m(T,v,(()=>[]));const[C,E,H,j]=((e,t)=>!e||a(t.getMergeableContent)?[0,t.getContent,t.getTransactionChanges,([e,t])=>!f(e)||!f(t)]:[1,t.getMergeableContent,t.getTransactionMergeableChanges,([,[[,e],[,t]]])=>!f(e)||!f(t)])(d,t),R=e=>x(void 0,null,(function*(){return 2!=S&&(S=1,yield D.schedule((()=>x(void 0,null,(function*(){yield e(),S=0}))))),D})),k=o=>{var l;(C&&(l=null==o?void 0:o[0],e(l)==n)?1===(null==o?void 0:o[1][2])?t.applyMergeableChanges:t.setMergeableContent:1===(null==o?void 0:o[2])?t.applyChanges:t.setContent)(o)},D=((e,t)=>{for(var n in t||(t={}))A.call(t,n)&&P(e,n,t[n]);if(w)for(var n of w(t))O.call(t,n)&&P(e,n,t[n]);return e})({load:(e,n)=>x(void 0,null,(function*(){return yield R((()=>x(void 0,null,(function*(){try{k(yield o())}catch(o){null==u||u(o),t.setContent([e,n])}}))))})),startAutoLoad:(...e)=>x(void 0,[...e],(function*(e={},t={}){return yield D.stopAutoLoad().load(e,t),h=r(((e,t)=>x(void 0,null,(function*(){const n=null==t?void 0:t();yield R((()=>x(void 0,null,(function*(){var t;try{k(null!=(t=null!=n?n:null==e?void 0:e())?t:yield o())}catch(e){null==u||u(e)}}))))})))),D})),stopAutoLoad:()=>(h&&(i(h),h=void 0),D),isAutoLoading:()=>!a(h),save:e=>x(void 0,null,(function*(){return 1!=S&&(S=2,yield D.schedule((()=>x(void 0,null,(function*(){try{yield l(E,e)}catch(e){null==u||u(e)}S=0}))))),D})),startAutoSave:()=>x(void 0,null,(function*(){return yield D.stopAutoSave().save(),p=t.addDidFinishTransactionListener((()=>{const e=H();j(e)&&D.save((()=>e))})),D})),stopAutoSave:()=>(s(p,t.delListener),p=void 0,D),isAutoSaving:()=>!a(p),schedule:(...e)=>x(void 0,null,(function*(){return((e,...t)=>{e.push(...t)})(b(T,v),...e),yield x(void 0,null,(function*(){if(!b(L,v)){for(M(L,v,1);!a((e=b(T,v),y=e.shift()));)try{yield y()}catch(e){null==u||u(e)}M(L,v,0)}var e})),D})),getStore:()=>t,destroy:()=>D.stopAutoLoad().stopAutoSave(),getStats:()=>({})},c);return g(D)})(o,(()=>G(void 0,null,(function*(){const e=yield z();return e[0]!=t?e:void 0}))),(()=>G(void 0,null,(function*(){v(null,null,1,o.getMergeableContentHashes())}))),(e=>c=e),(()=>c=void 0),d,!0,{getClient:()=>l,startSync:()=>G(void 0,null,(function*(){return yield(yield F.startAutoLoad()).startAutoSave()})),stopSync:()=>F.stopAutoLoad().stopAutoSave(),destroy:()=>(S(),F.stopSync())});return F};export{z as createLocalClient,K as createSyncPersister,q as createWsClient,B as createWsSimpleServer};
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
const e=e=>typeof e,t="",a=e(t),s="utf8",n=Promise,o=Math.max,r=e=>null==e,c=(e,t,a)=>r(e)?a?.():t(e),i=(e,t,a)=>e.slice(t,a),g=e=>new n(e),l=Object,d=e=>l.getPrototypeOf(e),y=l.keys,u=l.freeze,h=(e=[])=>l.fromEntries(e),w=e=>(e=>!r(e)&&c(d(e),(e=>e==l.prototype||r(d(e))),(()=>!0)))(e)&&0==(e=>y(e).length)(e),v=(e,t)=>e?.delete(t),f=e=>new Map(e),p=(e,t)=>e?.get(t),b=(e,t)=>((e,t)=>e?.forEach(t))(e,((e,a)=>t(a,e))),S=(e,t,a)=>r(a)?(v(e,t),e):e?.set(t,a),C=(e,t,a,s)=>{var n,o;return n=e,o=t,n?.has(o)?s?.(p(e,t)):S(e,t,a()),p(e,t)},M=f(),A=f(),m=new globalThis.TextEncoder,L=2**36,T=2**30,H=2**24,O=2**18,E=4096,x=64,R=e=>String.fromCharCode(48+(63&e)),k=(e,t)=>((e,t)=>e.charCodeAt(t))(e,t)-48,D=f();h(),h();const N=()=>{const e=""+Math.random();return{send:(t,a,s,n)=>{r(t)?b(D,((t,o)=>t!=e?o(e,a,s,n):0)):p(D,t)?.(e,a,s,n)},onReceive:t=>{S(D,e,t)},destroy:()=>{v(D,e)},getStats:()=>({})}},I=JSON.parse,P="\n",J=async e=>{let a;e.on("message",(e=>{if(!r(a)){const t=e.toString(s),n=t.indexOf(P);-1!==n&&a(i(t,0,n),...I(i(t,n+1)))}}));const n={send:(a,...s)=>{e.send((a??t)+P+JSON.stringify(s,((e,t)=>t instanceof Map?l.fromEntries([...t]):t)))},onReceive:e=>{a=e},destroy:()=>{e.close()},getStats:()=>({})};return g(((t,a)=>{e.readyState!=e.OPEN?(e.on("error",a),e.on("open",(()=>t(n)))):t(n)}))},V=e=>{const a=f();return e.on("connection",((e,n)=>{const o=n.headers["sec-websocket-key"];S(a,o,e),e.on("message",(e=>{const n=e.toString(s),r=n.indexOf(P);if(-1!==r){const e=i(n,0,r),s=i(n,r+1);e===t?b(a,((e,t)=>e!=o?t.send(o+P+s):0)):p(a,e)?.send(o+P+s)}})),e.on("close",(()=>v(a,o)))})),{getWebSocketServer:()=>e,destroy:()=>{e.close(),a.clear()}}},$=(s,n,i=1,l)=>{let d;const{send:y,onReceive:h,destroy:b}=n,[D]=(e=>{let t=0,a=-1;const s=(e=>{let t=2166136261;var a;return a=e=>{t^=e,t+=(t<<1)+(t<<4)+(t<<7)+(t<<8)+(t<<24)},m.encode(e).forEach(a),t>>>0})(e),n=e=>{const s=t,[n,c]=r(e)||""==e?[0,0]:[k(i=e,0)*L+k(i,1)*T+k(i,2)*H+k(i,3)*O+k(i,4)*E+k(i,5)*x+k(i,6),k(i,7)*O+k(i,8)*E+k(i,9)*x+k(i,10),k(i,11)*H+k(i,12)*O+k(i,13)*E+k(i,14)*x+k(i,15)];var i;t=o(s,n,Date.now()),a=t==s?t==n?o(a,c):a:t==n?c:-1};return[()=>{return n(),o=++a,r=s,R((e=t)/L)+R(e/T)+R(e/H)+R(e/O)+R(e/E)+R(e/x)+R(e)+R(o/O)+R(o/E)+R(o/x)+R(o)+R(r/H)+R(r/O)+R(r/E)+R(r/x)+R(r);var e,o,r},n]})(s.getId()),N=f();h(((e,t,a,n)=>{if(0==a)c(p(N,t),(([t,a])=>r(t)||t==e?a(n,e):0));else if(1==a&&J.isAutoLoading())P(e,n).then((e=>d?.(void 0,(()=>e))));else{const o=2==a&&J.isAutoSaving()?s.getMergeableContentHashes():3==a?s.getMergeableTableIdsDiff(n):4==a?s.getMergeableRowIdsDiff(n):5==a?s.getMergeableTablesChanges(n):6==a?s.getMergeableValuesChanges(n):0;0!==o&&y(e,t,0,o)}}));const I=async(e,t,a="")=>g(((s,n)=>{const o=D(),r=setTimeout((()=>{v(N,o),n(`No response from ${e??"anyone"} to '${t}'`)}),1e3*i);S(N,o,[e,(e,t)=>{clearTimeout(r),v(N,o),s([e,t])}]),y(e,o,t,a)})),P=async(e=null,a)=>{r(a)&&([a,e]=await I(e,2));const[n,[o,c]]=a,[,[i,g]]=s.getMergeableContentHashes(),l=[t,[[t,{}],[t,{}],1]];return i!=o&&(l[0]=n,l[1][0]=(await I(e,5,s.getMergeableCellHashes((await I(e,4,s.getMergeableRowHashes((await I(e,3,s.getMergeableTableHashes()))[0])))[0])))[0]),g!=c&&(l[0]=n,l[1][1]=(await I(e,6,s.getMergeableValuesHashes()))[0]),l},J=((t,s,n,o,i,g,l,d={},y=[])=>{let h,v,f,b=0;C(M,y,(()=>0)),C(A,y,(()=>[]));const[m,L,T,H]=((e,t)=>!e||r(t.getMergeableContent)?[0,t.getContent,t.getTransactionChanges,([e,t])=>!w(e)||!w(t)]:[1,t.getMergeableContent,t.getTransactionMergeableChanges,([,[[,e],[,t]]])=>!w(e)||!w(t)])(l,t),O=async e=>(2!=b&&(b=1,await x.schedule((async()=>{await e(),b=0}))),x),E=s=>{var n;(m&&(n=s?.[0],e(n)==a)?1===s?.[1][2]?t.applyMergeableChanges:t.setMergeableContent:1===s?.[2]?t.applyChanges:t.setContent)(s)},x={load:async(e,a)=>await O((async()=>{try{E(await s())}catch(s){g?.(s),t.setContent([e,a])}})),startAutoLoad:async(e={},t={})=>(await x.stopAutoLoad().load(e,t),v=o((async(e,t)=>{const a=t?.();await O((async()=>{try{E(a??e?.()??await s())}catch(e){g?.(e)}}))})),x),stopAutoLoad:()=>(v&&(i(v),v=void 0),x),isAutoLoading:()=>!r(v),save:async e=>(1!=b&&(b=2,await x.schedule((async()=>{try{await n(L,e)}catch(e){g?.(e)}b=0}))),x),startAutoSave:async()=>(await x.stopAutoSave().save(),f=t.addDidFinishTransactionListener((()=>{const e=T();H(e)&&x.save((()=>e))})),x),stopAutoSave:()=>(c(f,t.delListener),f=void 0,x),isAutoSaving:()=>!r(f),schedule:async(...e)=>(((e,...t)=>{e.push(...t)})(p(A,y),...e),await(async()=>{if(!p(M,y)){for(S(M,y,1);!r((e=p(A,y),h=e.shift()));)try{await h()}catch(e){g?.(e)}S(M,y,0)}var e})(),x),getStore:()=>t,destroy:()=>x.stopAutoLoad().stopAutoSave(),getStats:()=>({}),...d};return u(x)})(s,(async()=>{const e=await P();return e[0]!=t?e:void 0}),(async()=>{y(null,null,1,s.getMergeableContentHashes())}),(e=>d=e),(()=>d=void 0),l,!0,{getClient:()=>n,startSync:async()=>await(await J.startAutoLoad()).startAutoSave(),stopSync:()=>J.stopAutoLoad().stopAutoSave(),destroy:()=>(b(),J.stopSync())});return J};export{N as createLocalClient,$ as createSyncPersister,J as createWsClient,V as createWsSimpleServer};
|
|
Binary file
|
|
@@ -1,182 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The persister-file module of the TinyBase project lets you save and load
|
|
3
|
-
* Store data to and from a local file system (in an appropriate environment).
|
|
4
|
-
* @see Persisting Data guide
|
|
5
|
-
* @packageDocumentation
|
|
6
|
-
* @module persister-file
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
import {Id, IdOrNull} from '../common';
|
|
10
|
-
import {WebSocket, WebSocketServer} from 'ws';
|
|
11
|
-
import {MergeableStore} from '../mergeable-store';
|
|
12
|
-
import {Persister} from '../persisters';
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* The MessageType type
|
|
16
|
-
*
|
|
17
|
-
*/
|
|
18
|
-
export type MessageType = number;
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* The Receive type
|
|
22
|
-
*
|
|
23
|
-
*/
|
|
24
|
-
export type Receive = (
|
|
25
|
-
fromClientId: Id,
|
|
26
|
-
requestId: IdOrNull,
|
|
27
|
-
messageType: MessageType,
|
|
28
|
-
messageBody: any,
|
|
29
|
-
) => void;
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
* The Send type
|
|
33
|
-
*
|
|
34
|
-
*/
|
|
35
|
-
export type Send = (
|
|
36
|
-
toClientId: IdOrNull,
|
|
37
|
-
requestId: IdOrNull,
|
|
38
|
-
messageType: MessageType,
|
|
39
|
-
messageBody: any,
|
|
40
|
-
) => void;
|
|
41
|
-
|
|
42
|
-
/**
|
|
43
|
-
* The ClientStats type
|
|
44
|
-
*
|
|
45
|
-
*/
|
|
46
|
-
export type ClientStats = {sends?: number; receives?: number};
|
|
47
|
-
|
|
48
|
-
/**
|
|
49
|
-
* The Client interface
|
|
50
|
-
*
|
|
51
|
-
*/
|
|
52
|
-
export interface Client {
|
|
53
|
-
send: Send;
|
|
54
|
-
onReceive: (receive: Receive) => void;
|
|
55
|
-
destroy: () => void;
|
|
56
|
-
getStats: () => ClientStats;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
/**
|
|
60
|
-
* The WsServer interface
|
|
61
|
-
*/
|
|
62
|
-
export interface WsServer {
|
|
63
|
-
getWebSocketServer: () => WebSocketServer;
|
|
64
|
-
destroy: () => void;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
/**
|
|
68
|
-
* The SyncPersister interface is a minor extension to the Persister interface.
|
|
69
|
-
*
|
|
70
|
-
* It simply provides an extra getClient method for accessing the reference the
|
|
71
|
-
* Client that the MergeableStore is being persisted via.
|
|
72
|
-
*
|
|
73
|
-
* You should use the createSyncPersister function to create a SyncPersister
|
|
74
|
-
* object.
|
|
75
|
-
* @category Persister
|
|
76
|
-
* @since v5.0.0
|
|
77
|
-
*/
|
|
78
|
-
export interface SyncPersister extends Persister<true> {
|
|
79
|
-
/**
|
|
80
|
-
* The getClient method returns the reference of the Client that the
|
|
81
|
-
* MergeableStore is being persisted via.
|
|
82
|
-
* @returns The reference of the other MergeableStore.
|
|
83
|
-
* @example
|
|
84
|
-
* This example creates a Persister object against a newly-created
|
|
85
|
-
* MergeableStore and then gets the reference to the Client back out
|
|
86
|
-
* again.
|
|
87
|
-
*
|
|
88
|
-
* ```js
|
|
89
|
-
* const client = createLocalClient();
|
|
90
|
-
*
|
|
91
|
-
* const store1 = createMergeableStore('store1').setTables({
|
|
92
|
-
* pets: {fido: {species: 'dog'}},
|
|
93
|
-
* });
|
|
94
|
-
* const persister = createSyncPersister(store1, client);
|
|
95
|
-
*
|
|
96
|
-
* console.log(persister.getClient() == client);
|
|
97
|
-
* // -> true
|
|
98
|
-
*
|
|
99
|
-
* persister.destroy();
|
|
100
|
-
* ```
|
|
101
|
-
* @category Getter
|
|
102
|
-
* @since v5.0.0
|
|
103
|
-
*/
|
|
104
|
-
getClient(): Client;
|
|
105
|
-
/**
|
|
106
|
-
* The startSync method
|
|
107
|
-
*/
|
|
108
|
-
startSync(): Promise<Persister<true>>;
|
|
109
|
-
/**
|
|
110
|
-
* The stopSync method
|
|
111
|
-
*/
|
|
112
|
-
stopSync(): Persister<true>;
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
/**
|
|
116
|
-
* The createSyncPersister function creates a Persister object that can persist
|
|
117
|
-
* one MergeableStore to another.
|
|
118
|
-
*
|
|
119
|
-
* As well as providing a reference to the MergeableStore to persist, you must
|
|
120
|
-
* provide a `client` parameter which identifies the Client that is used to
|
|
121
|
-
* transmit changes to and from this MergeableStore and its peers. persist it
|
|
122
|
-
* to.
|
|
123
|
-
* @param store The MergeableStore to persist.
|
|
124
|
-
* @param client The reference of the Client.
|
|
125
|
-
* @param requestTimeoutSeconds An optional number of seconds before a request
|
|
126
|
-
* to the Client times out, defaulting to 5.
|
|
127
|
-
* @param onIgnoredError An optional handler for the errors that the Persister
|
|
128
|
-
* would otherwise ignore when trying to save or load data. This is suitable for
|
|
129
|
-
* debugging persistence issues in a development environment.
|
|
130
|
-
* @returns A reference to the new SyncPersister object.
|
|
131
|
-
* @example
|
|
132
|
-
* This example creates a SyncPersister object and persists one MergeableStore
|
|
133
|
-
* to another.
|
|
134
|
-
*
|
|
135
|
-
* ```js
|
|
136
|
-
* const store1 = createMergeableStore('store1').setTables({
|
|
137
|
-
* pets: {fido: {species: 'dog'}},
|
|
138
|
-
* });
|
|
139
|
-
* const persister1 = createSyncPersister(store1, createLocalClient());
|
|
140
|
-
*
|
|
141
|
-
* const store2 = createMergeableStore('store2');
|
|
142
|
-
* const persister2 = createSyncPersister(store2, createLocalClient());
|
|
143
|
-
* await persister2.startSync();
|
|
144
|
-
*
|
|
145
|
-
* await persister1.save();
|
|
146
|
-
* // ...
|
|
147
|
-
* // Store2 will be synced with Store1.
|
|
148
|
-
*
|
|
149
|
-
* console.log(store2.getTables());
|
|
150
|
-
* // -> {pets: {fido: {species: 'dog'}}}
|
|
151
|
-
*
|
|
152
|
-
* await persister1.load();
|
|
153
|
-
* // Store1 will be synced with Store2.
|
|
154
|
-
*
|
|
155
|
-
* persister1.destroy();
|
|
156
|
-
* persister2.destroy();
|
|
157
|
-
* ```
|
|
158
|
-
* @category Creation
|
|
159
|
-
*/
|
|
160
|
-
export function createSyncPersister(
|
|
161
|
-
store: MergeableStore,
|
|
162
|
-
client: Client,
|
|
163
|
-
requestTimeoutSeconds?: number,
|
|
164
|
-
onIgnoredError?: (error: any) => void,
|
|
165
|
-
): SyncPersister;
|
|
166
|
-
|
|
167
|
-
/**
|
|
168
|
-
* The createLocalClient function
|
|
169
|
-
*/
|
|
170
|
-
export function createLocalClient(): Client;
|
|
171
|
-
|
|
172
|
-
/**
|
|
173
|
-
* The createWsClient function
|
|
174
|
-
*/
|
|
175
|
-
export function createWsClient(webSocket: WebSocket): Promise<Client>;
|
|
176
|
-
|
|
177
|
-
/**
|
|
178
|
-
* The createWsSimpleServer function
|
|
179
|
-
*/
|
|
180
|
-
export function createWsSimpleServer(
|
|
181
|
-
WebSocketServer: WebSocketServer,
|
|
182
|
-
): WsServer;
|