tinybase 1.3.3 → 2.0.0-beta.0

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.
Files changed (53) hide show
  1. package/lib/checkpoints.js +1 -1
  2. package/lib/checkpoints.js.gz +0 -0
  3. package/lib/debug/checkpoints.js +67 -54
  4. package/lib/debug/indexes.js +104 -67
  5. package/lib/debug/metrics.js +185 -129
  6. package/lib/debug/persisters.js +2 -1
  7. package/lib/debug/queries.d.ts +3066 -0
  8. package/lib/debug/queries.js +883 -0
  9. package/lib/debug/relationships.d.ts +6 -5
  10. package/lib/debug/relationships.js +103 -67
  11. package/lib/debug/store.d.ts +137 -66
  12. package/lib/debug/store.js +215 -119
  13. package/lib/debug/tinybase.d.ts +1 -0
  14. package/lib/debug/tinybase.js +896 -176
  15. package/lib/debug/ui-react.d.ts +49 -2
  16. package/lib/debug/ui-react.js +85 -74
  17. package/lib/indexes.js +1 -1
  18. package/lib/indexes.js.gz +0 -0
  19. package/lib/metrics.js +1 -1
  20. package/lib/metrics.js.gz +0 -0
  21. package/lib/queries.d.ts +3066 -0
  22. package/lib/queries.js +1 -0
  23. package/lib/queries.js.gz +0 -0
  24. package/lib/relationships.d.ts +6 -5
  25. package/lib/relationships.js +1 -1
  26. package/lib/relationships.js.gz +0 -0
  27. package/lib/store.d.ts +137 -66
  28. package/lib/store.js +1 -1
  29. package/lib/store.js.gz +0 -0
  30. package/lib/tinybase.d.ts +1 -0
  31. package/lib/tinybase.js +1 -1
  32. package/lib/tinybase.js.gz +0 -0
  33. package/lib/ui-react.d.ts +49 -2
  34. package/lib/ui-react.js +1 -1
  35. package/lib/ui-react.js.gz +0 -0
  36. package/lib/umd/checkpoints.js +1 -1
  37. package/lib/umd/checkpoints.js.gz +0 -0
  38. package/lib/umd/indexes.js +1 -1
  39. package/lib/umd/indexes.js.gz +0 -0
  40. package/lib/umd/metrics.js +1 -1
  41. package/lib/umd/metrics.js.gz +0 -0
  42. package/lib/umd/queries.js +1 -0
  43. package/lib/umd/queries.js.gz +0 -0
  44. package/lib/umd/relationships.js +1 -1
  45. package/lib/umd/relationships.js.gz +0 -0
  46. package/lib/umd/store.js +1 -1
  47. package/lib/umd/store.js.gz +0 -0
  48. package/lib/umd/tinybase.js +1 -1
  49. package/lib/umd/tinybase.js.gz +0 -0
  50. package/lib/umd/ui-react.js +1 -1
  51. package/lib/umd/ui-react.js.gz +0 -0
  52. package/package.json +24 -24
  53. package/readme.md +2 -2
@@ -1 +1 @@
1
- var e,t;e=this,t=function(e,t){"use strict";const s=e=>typeof e,n="",o=s(n),r=s(!0),a=s(0),i=s(s),d="type",l="default",c="utf8",u=e=>[e,e],f=(e,t)=>e.includes(t),h=(e,t)=>e.every(((s,n)=>0==n||t(e[n-1],s)<=0)),g=(e,t)=>e.sort(t),L=(e,t)=>e.forEach(t),p=e=>I(e,((e,t)=>e+t),0),w=e=>e.length,v=e=>0==w(e),I=(e,t,s)=>e.reduce(t,s),y=e=>e.slice(1),S=(e,t)=>e.push(t),T=e=>e.pop(),R=e=>JSON.stringify(e,((e,t)=>E(t,Map)?I([...t],((e,[t,s])=>(e[t]=s,e)),{}):t)),b=JSON.parse,C=Math.max,m=Math.min,k=isFinite,E=(e,t)=>e instanceof t,M=e=>null==e,x=(e,t,s)=>M(e)?s?.():t(e),A=e=>e==o||e==r,D=e=>s(e)==i,F=()=>{},P=e=>e.size,J=(e,t)=>e?.has(t)??!1,O=e=>M(e)||0==P(e),j=e=>[...e?.values()??[]],z=e=>e.clear(),N=(e,t)=>e?.forEach(t),B=(e,t)=>e?.delete(t),W=e=>new Map(e),_=(e=W)=>[e(),e()],q=e=>[...e?.keys()??[]],H=(e,t)=>e?.get(t),G=(e,t)=>N(e,((e,s)=>t(s,e))),K=(e,t,s)=>M(s)?(B(e,t),e):e?.set(t,s),Q=(e,t,s)=>(J(e,t)||e.set(t,s()),H(e,t)),U=(e,t,s)=>{const n={},o=t??(e=>e);return N(e,((e,t)=>x(o(e),(e=>s?.(e)?0:n[t]=e)))),n},V=(e,t)=>{const s=W(),n=t??(e=>e);return N(e,((e,t)=>s.set(t,n(e)))),s},X=e=>V(e,V),Y=e=>new Set(e),Z=(e,t)=>e?.add(t),$=(e,t,s)=>{const n=e.hasRow,o=W(),r=W(),a=W(),i=W(),d=W(),l=t=>x(H(d,t),(s=>{N(s,e.delListener),K(d,t)})),c=e=>{K(o,e),K(r,e),K(a,e),K(i,e),l(e)};return[()=>e,()=>q(o),e=>G(r,e),e=>J(r,e),e=>H(o,e),e=>H(r,e),(e,t)=>K(r,e,t),(c,u,f,h,g)=>{const p=W(),w=W();K(o,c,u),J(r,c)||(K(r,c,t()),K(a,c,W()),K(i,c,W()));const v=H(a,c),I=H(i,c),y=t=>{const o=s=>e.getCell(u,t,s),r=H(v,t),a=n(u,t)?s(h(o,t)):void 0;if(r!=a&&K(p,t,[r,a]),!M(g)){const e=H(I,t),s=n(u,t)?g(o,t):void 0;e!=s&&K(w,t,s)}},S=e=>{f((()=>{N(p,(([,e],t)=>K(v,t,e))),N(w,((e,t)=>K(I,t,e)))}),p,w,v,I,e),z(p),z(w)};G(v,y),e.hasTable(u)&&L(e.getRowIds(u),(e=>{J(v,e)||y(e)})),S(!0),l(c),K(d,c,Y([e.addRowListener(u,null,((e,t,s)=>y(s))),e.addTableListener(u,(()=>S()))]))},c,()=>G(d,c)]},ee=(e,t)=>s(e)==o?t=>t(e):e??(()=>t??n),te=e=>{const t=new WeakMap;return s=>(t.has(s)||t.set(s,e(s)),t.get(s))},se=(e,t,s)=>w(s)<2?Z(v(s)?e:Q(e,s[0],Y),t):se(Q(e,s[0],W),t,y(s)),ne=e=>{const t=(s,n,...o)=>x(s,(s=>v(o)?e(s,n):L([o[0],null],(e=>t(H(s,e),n,...y(o))))));return t},oe=e=>{let t,s=0;const n=[],o=W();return[(r,a,i=[])=>{t??=e();const d=T(n)??""+s++;return K(o,d,[r,a,i]),se(a,d,i),d},(e,s=[],...n)=>ne(N)(e,(e=>x(H(o,e),(([e])=>e(t,...s,...n)))),...s),e=>x(H(o,e),(([,t,s])=>(ne(B)(t,e,...s),K(o,e),w(n)<1e3&&S(n,e),s)),(()=>[])),(e,s,n)=>x(H(o,e),(([e,,o])=>{const r=(...a)=>{const i=w(a);i==w(o)?e(t,...a,...n(a)):M(o[i])?L(s[i](...a),(e=>r(...a,e))):r(...a,o[i])};r()}))]},re=Object,ae=re.keys,ie=re.isFrozen,de=re.freeze,le=(e,t)=>!M(((e,t)=>x(e,(e=>e[t])))(e,t)),ce=(e,t)=>delete e[t],ue=(e,t)=>L(re.entries(e),(([e,s])=>t(s,e))),fe=e=>v(ae(e)),he=te((e=>{let t,s,n,o=100,r=W(),a=1;const i=Y(),d=W(),[l,c,u]=oe((()=>z)),h=W(),g=W(),p=[],I=[],y=(t,s)=>{a=0,e.transaction((()=>N(H(h,s),((s,n)=>N(s,((s,o)=>N(s,((s,r)=>M(s[t])?e.delCell(n,o,r,!0):e.setCell(n,o,r,s[t]))))))))),a=1},R=e=>{K(h,e),K(g,e),c(d,[e])},b=(e,t)=>L(((e,t)=>e.splice(0,t))(e,t??w(e)),R),C=()=>b(p,w(p)-o),m=e.addCellListener(null,null,null,((e,s,o,i,d,l)=>{if(a){x(t,(()=>{S(p,t),C(),b(I),t=void 0,n=1}));const e=Q(r,s,W),a=Q(e,o,W),c=Q(a,i,(()=>[l,void 0]));c[1]=d,c[0]===d&&O(K(a,i))&&O(K(e,o))&&O(K(r,s))&&(t=T(p),n=1),D()}})),k=(e="")=>(M(t)&&(t=""+s++,K(h,t,r),P(t,e),r=W(),n=1),t),E=()=>{v(p)||(I.unshift(k()),y(0,t),t=T(p),n=1)},A=()=>{v(I)||(S(p,t),t=I.shift(),y(1,t),n=1)},D=()=>{n&&(c(i),n=0)},F=e=>{const t=k(e);return D(),t},P=(e,t)=>(j(e)&&H(g,e)!==t&&(K(g,e,t),c(d,[e])),z),j=e=>J(h,e),z={setSize:e=>(o=e,C(),z),addCheckpoint:F,setCheckpoint:P,getStore:()=>e,getCheckpointIds:()=>[[...p],t,[...I]],forEachCheckpoint:e=>G(g,e),hasCheckpoint:j,getCheckpoint:e=>H(g,e),goBackward:()=>(E(),D(),z),goForward:()=>(A(),D(),z),goTo:e=>{const s=f(p,e)?E:f(I,e)?A:null;for(;!M(s)&&e!=t;)s();return D(),z},addCheckpointIdsListener:e=>l(e,i),addCheckpointListener:(e,t)=>l(t,d,[e]),delListener:e=>(u(e),z),clear:()=>(b(p),b(I),M(t)||R(t),t=void 0,s=0,F(),z),destroy:()=>{e.delListener(m)},getListenerStats:()=>({})};return de(z.clear())})),ge=(e,t)=>e<t?-1:1,Le=te((e=>{const t=W(),s=W(),[o,r,a,i,d,l,c,u,f,L]=$(e,W,(e=>M(e)?n:e+n)),[p,w,v]=oe((()=>y)),I=(t,s,n)=>{const o=d(t);N(n,((t,n)=>s(n,(s=>N(t,(t=>s(t,(s=>e.forEachCell(o,t,s)))))))))},y={setIndexDefinition:(e,n,o,r,a,i=ge)=>{const d=M(a)?void 0:([e],[t])=>a(e,t);return u(e,n,((n,o,a,u,f,L)=>{let p=0;const v=Y(),I=Y(),y=l(e);if(N(o,(([e,t],s)=>{M(e)||(Z(v,e),x(H(y,e),(t=>{B(t,s),O(t)&&(K(y,e),p=1)}))),M(t)||(Z(v,t),J(y,t)||(K(y,t,Y()),p=1),Z(H(y,t),s),M(r)||Z(I,t))})),n(),O(f)||(L?G(y,(e=>Z(I,e))):G(a,(e=>x(H(u,e),(e=>Z(I,e))))),N(I,(e=>{const t=(t,s)=>i(H(f,t),H(f,s),e),s=[...H(y,e)];h(s,t)||(K(y,e,Y(g(s,t))),Z(v,e))}))),(p||L)&&!M(d)){const t=[...y];h(t,d)||(c(e,W(g(t,d))),p=1)}p&&w(t,[e]),N(v,(t=>w(s,[e,t])))}),ee(o),x(r,ee)),y},delIndexDefinition:e=>(f(e),y),getStore:o,getIndexIds:r,forEachIndex:e=>a(((t,s)=>e(t,(e=>I(t,e,s))))),forEachSlice:(e,t)=>I(e,t,l(e)),hasIndex:i,hasSlice:(e,t)=>J(l(e),t),getTableId:d,getSliceIds:e=>q(l(e)),getSliceRowIds:(e,t)=>j(H(l(e),t)),addSliceIdsListener:(e,s)=>p(s,t,[e]),addSliceRowIdsListener:(e,t,n)=>p(n,s,[e,t]),delListener:e=>(v(e),y),destroy:L,getListenerStats:()=>({})};return de(y)})),pe=W([["avg",[(e,t)=>p(e)/t,(e,t,s)=>e+(t-e)/(s+1),(e,t,s)=>e+(e-t)/(s-1),(e,t,s,n)=>e+(t-s)/n]],["max",[e=>C(...e),(e,t)=>C(t,e),(e,t)=>t==e?void 0:e,(e,t,s)=>s==e?void 0:C(t,e)]],["min",[e=>m(...e),(e,t)=>m(t,e),(e,t)=>t==e?void 0:e,(e,t,s)=>s==e?void 0:m(t,e)]],["sum",[e=>p(e),(e,t)=>e+t,(e,t)=>e-t,(e,t,s)=>e-s+t]]]),we=te((e=>{const t=W(),[s,o,r,a,i,d,l,c,u,f]=$(e,F,(e=>isNaN(e)||M(e)||!0===e||!1===e||e===n?void 0:1*e)),[h,g,L]=oe((()=>p)),p={setMetricDefinition:(e,s,n,o,r,a,i)=>{const u=D(n)?[n,r,a,i]:H(pe,n)??H(pe,"sum");return c(e,s,((s,n,o,r,a,i)=>{let c=d(e),f=P(r);const[h,L,p,w]=u;i=i||M(c),N(n,(([e,t])=>{i||(c=M(e)?L?.(c,t,f++):M(t)?p?.(c,e,f--):w?.(c,t,e,f)),i=i||M(c)})),s(),O(r)?c=void 0:i&&(c=h(j(r),P(r))),k(c)||(c=void 0);const v=d(e);c!=v&&(l(e,c),g(t,[e],c,v))}),ee(o,1)),p},delMetricDefinition:e=>(u(e),p),getStore:s,getMetricIds:o,forEachMetric:r,hasMetric:a,getTableId:i,getMetric:d,addMetricListener:(e,s)=>h(s,t,[e]),delListener:e=>(L(e),p),destroy:f,getListenerStats:()=>({})};return de(p)})),ve=(e,t,s,n,o)=>{let r,a=0;const i={load:async s=>{if(2!=a){a=1;const n=await t();M(n)||""==n?e.setTables(s):e.setJson(n),a=0}return i},startAutoLoad:async e=>(i.stopAutoLoad(),await i.load(e),n(i.load),i),stopAutoLoad:()=>(o(),i),save:async()=>(1!=a&&(a=2,await s(e.getJson()),a=0),i),startAutoSave:async()=>(await i.stopAutoSave().save(),r=e.addTablesListener((()=>i.save())),i),stopAutoSave:()=>(x(r,e.delListener),i),getStore:()=>e,destroy:()=>i.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return de(i)},Ie="storage",ye=globalThis.window,Se=(e,t,s)=>{let n;return ve(e,(async()=>s.getItem(t)),(async e=>s.setItem(t,e)),(e=>{n=n=>{n.storageArea===s&&n.key===t&&e()},ye.addEventListener(Ie,n)}),(()=>{ye.removeEventListener(Ie,n),n=void 0}))},Te=e=>e.headers.get("ETag"),Re=te((e=>{const t=W(),s=W(),o=W(),r=W(),[a,i,d,l,c,u,f,h,g,L]=$(e,(()=>[W(),W(),W(),W()]),(e=>M(e)?void 0:e+n)),[p,w,v]=oe((()=>T)),I=(e,t,s)=>x(u(e),(([n,,o])=>{if(!J(o,t)){const r=Y();if(c(e)!=S(e))Z(r,t);else{let e=t;for(;!M(e)&&!J(r,e);)Z(r,e),e=H(n,e)}if(s)return r;K(o,t,r)}return H(o,t)})),y=(e,t)=>x(u(e),(([,,e])=>K(e,t))),S=e=>H(t,e),T={setRelationshipDefinition:(e,n,a,i)=>(K(t,e,a),h(e,n,((t,n)=>{const a=Y(),i=Y(),d=Y(),[l,c]=u(e);N(n,(([t,s],n)=>{M(t)||(Z(i,t),x(H(c,t),(e=>{B(e,n),O(e)&&K(c,t)}))),M(s)||(Z(i,s),J(c,s)||K(c,s,Y()),Z(H(c,s),n)),Z(a,n),K(l,n,s),G(H(r,e),(t=>{J(I(e,t),n)&&Z(d,t)}))})),t(),N(a,(t=>w(s,[e,t]))),N(i,(t=>w(o,[e,t]))),N(d,(t=>{y(e,t),w(r,[e,t])}))}),ee(i)),T),delRelationshipDefinition:e=>(K(t,e),g(e),T),getStore:a,getRelationshipIds:i,forEachRelationship:t=>d((s=>t(s,(t=>e.forEachRow(c(s),t))))),hasRelationship:l,getLocalTableId:c,getRemoteTableId:S,getRemoteRowId:(e,t)=>H(u(e)?.[0],t),getLocalRowIds:(e,t)=>j(H(u(e)?.[1],t)),getLinkedRowIds:(e,t)=>M(u(e))?[t]:j(I(e,t,!0)),addRemoteRowIdListener:(e,t,n)=>p(n,s,[e,t]),addLocalRowIdsListener:(e,t,s)=>p(s,o,[e,t]),addLinkedRowIdsListener:(e,t,s)=>(I(e,t),p(s,r,[e,t])),delListener:e=>(y(...v(e)),T),destroy:L,getListenerStats:()=>({})};return de(T)})),be=(e,t,s,n=K)=>{const o=(r=q(e),a=e=>!le(t,e),r.filter(a));var r,a;return L(ae(t),(n=>s(e,n,t[n]))),L(o,(t=>n(e,t))),e},Ce=e=>{const t=s(e);return A(t)||t==a&&k(e)?t:void 0},me=(e,t,s)=>M(e)||!(e=>E(e,re)&&e.constructor==re)(e)||fe(e)||ie(e)?(s?.(),!1):(ue(e,((s,n)=>{t(s,n)||ce(e,n)})),!fe(e)),ke=(e,t,s)=>K(e,t,H(e,t)==-s?void 0:s);e.createCheckpoints=he,e.createCustomPersister=ve,e.createFilePersister=(e,s)=>{let n;return ve(e,(async()=>{try{return await t.promises.readFile(s,c)}catch{}}),(async e=>{try{await t.promises.writeFile(s,e,c)}catch{}}),(e=>{n=t.watch(s,e)}),(()=>{n?.close(),n=void 0}))},e.createIndexes=Le,e.createLocalPersister=(e,t)=>Se(e,t,localStorage),e.createMetrics=we,e.createRelationships=Re,e.createRemotePersister=(e,t,s,n)=>{let o,r;return ve(e,(async()=>{const e=await fetch(t);return r=Te(e),e.text()}),(async e=>await fetch(s,{method:"POST",headers:{"Content-Type":"application/json"},body:e})),(e=>{o=setInterval((async()=>{const s=await fetch(t,{method:"HEAD"}),n=Te(s);M(r)||M(n)||n==r||(r=n,e())}),1e3*n)}),(()=>{x(o,clearInterval),o=void 0}))},e.createSessionPersister=(e,t)=>Se(e,t,sessionStorage),e.createStore=()=>{let e,t,s=0,n=0;const o=W(),r=W(),i=W(),c=W(),h=W(),g=W(),p=W(),w=W(),v=_(Y),I=_(Y),y=_(),T=_(),C=_(),m=_(),k=_(),E=_(),F=_(Y),[P,j,B,$]=oe((()=>Ke)),ee=(t,s)=>(!e||J(g,s)||Me(s))&&me(t,((e,t)=>te(s,t,e)),(()=>Me(s))),te=(e,t,s,n)=>me(n?s:ne(s,e,t),((n,o)=>x(se(e,t,o,n),(e=>(s[o]=e,!0)),(()=>!1))),(()=>Me(e,t))),se=(t,s,n,o)=>e?x(H(H(g,t),n),(e=>Ce(o)!=e.type?Me(t,s,n,o,e.default):o),(()=>Me(t,s,n,o))):M(Ce(o))?Me(t,s,n,o):o,ne=(e,t,s)=>(x(H(p,t),(([n,o])=>{N(n,((t,s)=>{le(e,s)||(e[s]=t)})),N(o,(n=>{le(e,n)||Me(t,s,n)}))})),e),re=e=>be(g,e,((e,t,s)=>{const n=W(),o=Y();be(Q(g,t,W),s,((e,t,s)=>{K(e,t,s),x(s.default,(e=>K(n,t,e)),(()=>Z(o,t)))})),K(p,t,[n,o])}),((e,t)=>{K(g,t),K(p,t)})),ae=e=>be(w,e,((e,t,s)=>ie(t,s)),((e,t)=>ve(t))),ie=(e,t)=>be(Q(w,e,(()=>(Se(e,1),W()))),t,((t,s,n)=>he(e,t,s,n)),((t,s)=>Ie(e,t,s))),he=(e,t,s,n,o)=>be(Q(t,s,(()=>(Te(e,s,1),W()))),n,((t,n,o)=>ge(e,s,t,n,o)),((n,r)=>ye(e,t,s,n,r,o))),ge=(e,t,s,n,o)=>{J(s,n)||Re(e,t,n,1);const r=H(s,n);o!==r&&(Ee(e,t,n,r,o),K(s,n,o))},Le=(e,t,s,n,o)=>x(H(t,s),(t=>ge(e,s,t,n,o)),(()=>he(e,t,s,ne({[n]:o},e,s)))),pe=e=>{const t=""+s++;return J(e,t)?pe(e):t},we=e=>H(w,e)??ie(e,{}),ve=e=>ie(e,{}),Ie=(e,t,s)=>he(e,t,s,{},!0),ye=(e,t,s,n,o,r)=>{const a=H(H(p,e)?.[0],o);if(!M(a)&&!r)return ge(e,s,n,o,a);const i=t=>{Ee(e,s,t,H(n,t)),Re(e,s,t,-1),K(n,t)};M(a)?i(o):G(n,i),O(n)&&(Te(e,s,-1),O(K(t,s))&&(Se(e,-1),K(w,e)))},Se=(e,t)=>ke(o,e,t),Te=(e,t,s)=>ke(Q(r,e,W),t,s),Re=(e,t,s,n)=>ke(Q(Q(i,e,W),t,W),s,n),Ee=(e,t,s,n,o)=>Q(Q(Q(c,e,W),t,W),s,(()=>[n,0]))[1]=o,Me=(e,t,s,n,o)=>(S(Q(Q(Q(h,e,W),t,W),s,(()=>[])),n),o),xe=(e,t,s)=>x(H(H(H(c,e),t),s),(([e,t])=>[!0,e,t]),(()=>[!1,...u(ze(e,t,s))])),Ae=e=>O(h)||O(E[e])?0:N(e?V(h,X):h,((t,s)=>N(t,((t,n)=>N(t,((t,o)=>j(E[e],[s,n,o],t))))))),De=e=>{const t=O(m[e])&&O(T[e])&&O(I[e]),s=O(k[e])&&O(C[e])&&O(y[e])&&O(v[e]);if(!t||!s){const n=e?[V(o),X(r),V(i,X),V(c,X)]:[o,r,i,c];if(t||(N(n[2],((t,s)=>N(t,((t,n)=>{O(t)||j(m[e],[s,n])})))),N(n[1],((t,s)=>{O(t)||j(T[e],[s])})),O(n[0])||j(I[e])),!s){let t;N(n[3],((s,n)=>{let o;N(s,((s,r)=>{let a;N(s,(([s,i],d)=>{i!==s&&(j(k[e],[n,r,d],i,s,xe),t=o=a=1)})),a&&j(C[e],[n,r],xe)})),o&&j(y[e],[n],xe)})),t&&j(v[e],[],xe)}}},Fe=e=>(qe(e),Ke),Pe=()=>U(w,(e=>U(e,U))),Je=()=>q(w),Oe=e=>q(H(w,e)),je=(e,t)=>q(H(H(w,e),t)),ze=(e,t,s)=>H(H(H(w,e),t),s),Ne=e=>Fe((()=>(e=>me(e,ee,Me))(e)?ae(e):0)),Be=(e,t,s,n)=>Fe((()=>x(se(e,t,s,D(n)?n(ze(e,t,s)):n),(n=>Le(e,we(e),t,s,n))))),We=()=>Fe((()=>ae({}))),_e=(e,t,s,n)=>Fe((()=>x(H(w,e),(o=>x(H(o,t),(r=>J(r,s)?ye(e,o,t,r,s,n):0)))))),qe=(e,t)=>{if(-1==n)return;He();const s=e?.();return Ge(t),s},He=()=>(n++,Ke),Ge=e=>(n>0&&(n--,0==n&&(t=!O(c),n=1,Ae(1),t&&De(1),n=-1,e?.(U(c,(e=>U(e,(e=>U(e,(e=>[...e]),(([e,t])=>e===t))),fe)),fe),U(h,(e=>U(e,U))))&&(n=1,N(c,((e,t)=>N(e,((e,s)=>N(e,(([e],n)=>M(e)?_e(t,s,n,!0):Be(t,s,n,e))))))),n=-1,t=!1),j(F[0],[],t),Ae(0),t&&De(0),j(F[1],[],t),n=0,L([c,h,o,r,i],z))),Ke),Ke={getTables:Pe,getTableIds:Je,getTable:e=>U(H(w,e),U),getRowIds:Oe,getRow:(e,t)=>U(H(H(w,e),t)),getCellIds:je,getCell:ze,hasTables:()=>!O(w),hasTable:e=>J(w,e),hasRow:(e,t)=>J(H(w,e),t),hasCell:(e,t,s)=>J(H(H(w,e),t),s),getJson:()=>R(w),getSchemaJson:()=>R(g),setTables:Ne,setTable:(e,t)=>Fe((()=>ee(t,e)?ie(e,t):0)),setRow:(e,t,s)=>Fe((()=>te(e,t,s)?he(e,we(e),t,s):0)),addRow:(e,t)=>qe((()=>{let s;return te(e,s,t)&&he(e,we(e),s=pe(H(w,e)),t),s})),setPartialRow:(e,t,s)=>Fe((()=>{if(te(e,t,s,1)){const n=we(e);ue(s,((s,o)=>Le(e,n,t,o,s)))}})),setCell:Be,setJson:e=>{try{"{}"===e?We():Ne(b(e))}catch{}return Ke},setSchema:t=>Fe((()=>{if((e=(e=>me(e,(e=>me(e,(e=>{if(!me(e,((e,t)=>f([d,l],t))))return!1;const t=e.type;return!(!A(t)&&t!=a||(Ce(e.default)!=t&&ce(e,l),0))})))))(t))&&(re(t),!O(w))){const e=Pe();We(),Ne(e)}})),delTables:We,delTable:e=>Fe((()=>J(w,e)?ve(e):0)),delRow:(e,t)=>Fe((()=>x(H(w,e),(s=>J(s,t)?Ie(e,s,t):0)))),delCell:_e,delSchema:()=>Fe((()=>{re({}),e=!1})),transaction:qe,startTransaction:He,finishTransaction:Ge,forEachTable:e=>N(w,((t,s)=>e(s,(e=>N(t,((t,s)=>e(s,(e=>G(t,e))))))))),forEachRow:(e,t)=>N(H(w,e),((e,s)=>t(s,(t=>G(e,t))))),forEachCell:(e,t,s)=>G(H(H(w,e),t),s),addTablesListener:(e,t)=>P(e,v[t?1:0]),addTableIdsListener:(e,t)=>P(e,I[t?1:0]),addTableListener:(e,t,s)=>P(t,y[s?1:0],[e]),addRowIdsListener:(e,t,s)=>P(t,T[s?1:0],[e]),addRowListener:(e,t,s,n)=>P(s,C[n?1:0],[e,t]),addCellIdsListener:(e,t,s,n)=>P(s,m[n?1:0],[e,t]),addCellListener:(e,t,s,n,o)=>P(n,k[o?1:0],[e,t,s]),addInvalidCellListener:(e,t,s,n,o)=>P(n,E[o?1:0],[e,t,s]),addWillFinishTransactionListener:e=>P(e,F[0]),addDidFinishTransactionListener:e=>P(e,F[1]),callListener:e=>($(e,[Je,Oe,je],(e=>M(e[2])?[]:u(ze(...e)))),Ke),delListener:e=>(B(e),Ke),getListenerStats:()=>({})};return de(Ke)},e.defaultSorter=ge,Object.defineProperty(e,"__esModule",{value:!0})},"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("fs")):"function"==typeof define&&define.amd?define(["exports","fs"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).TinyBase={},e.fs);
1
+ var e,t;e=this,t=function(e,t){"use strict";const s=e=>typeof e,n="",o=s(n),r=s(!0),a=s(0),l=s(s),i="type",d="default",c="utf8",u=(e,t)=>e.includes(t),h=(e,t)=>e.every(t),f=(e,t)=>T(e)===T(t)&&h(e,((e,s)=>t[s]===e)),g=(e,t)=>h(e,((s,n)=>0==n||t(e[n-1],s)<=0)),R=(e,t)=>e.sort(t),L=(e,t)=>e.forEach(t),w=e=>I(e,((e,t)=>e+t),0),T=e=>e.length,v=e=>0==T(e),I=(e,t,s)=>e.reduce(t,s),p=(e,...t)=>e.push(...t),b=e=>e.pop(),y=e=>JSON.stringify(e,((e,t)=>k(t,Map)?I([...t],((e,[t,s])=>(e[t]=s,e)),{}):t)),S=JSON.parse,C=Math.max,m=Math.min,E=isFinite,k=(e,t)=>e instanceof t,M=e=>null==e,x=(e,t,s)=>M(e)?s?.():t(e),D=e=>e==o||e==r,A=e=>s(e)==l,F=()=>{},P=e=>e.size,J=(Q=P,e=>I(z(e),((e,t)=>e+Q(t)),0));var Q;const j=(e,t)=>e?.has(t)??!1,O=e=>M(e)||0==P(e),z=e=>[...e?.values()??[]],N=e=>e.clear(),W=(e,t)=>e?.forEach(t),B=(e,t)=>e?.delete(t),_=e=>new Map(e),q=e=>[...e?.keys()??[]],H=(e,t)=>e?.get(t),G=(e,t)=>W(e,((e,s)=>t(s,e))),K=(e,t,s)=>M(s)?(B(e,t),e):e?.set(t,s),U=(e,t,s)=>(j(e,t)||e.set(t,s()),H(e,t)),V=(e,t,s)=>{const n={},o=t??(e=>e);return W(e,((e,t)=>x(o(e),(e=>s?.(e)?0:n[t]=e)))),n},X=(e,t)=>{const s=_(),n=t??(e=>e);return W(e,((e,t)=>s.set(t,n(e)))),s},Y=e=>X(e,X),Z=(e,t,s,n,o=0)=>x((s?U:H)(e,t[o],o>T(t)-2?s:_),(r=>{if(o>T(t)-2)return n?.(r)&&K(e,t[o]),r;const a=Z(r,t,s,n,o+1);return O(r)&&K(e,t[o]),a})),$=e=>new Set(e),ee=(e,t)=>e?.add(t),te=(e,t,s)=>{const n=e.hasRow,o=_(),r=_(),a=_(),l=_(),i=_(),d=(t,s,...n)=>{const o=U(i,t,$);return L(n,(t=>ee(o,t)&&s&&e.callListener(t))),n},c=(t,...s)=>x(H(i,t),(n=>{L(v(s)?z(n):s,(t=>{e.delListener(t),B(n,t)})),O(n)&&K(i,t)})),u=(e,s)=>{K(o,e,s),j(r,e)||(K(r,e,t()),K(a,e,_()),K(l,e,_()))},h=e=>{K(o,e),K(r,e),K(a,e),K(l,e),c(e)};return[()=>e,()=>q(o),e=>G(r,e),e=>j(r,e),e=>H(o,e),e=>H(r,e),(e,t)=>K(r,e,t),u,(t,o,r,i,h)=>{u(t,o);const f=_(),g=_(),R=H(a,t),w=H(l,t),T=t=>{const r=s=>e.getCell(o,t,s),a=H(R,t),l=n(o,t)?s(i(r,t)):void 0;if(a!=l&&K(f,t,[a,l]),!M(h)){const e=H(w,t),s=n(o,t)?h(r,t):void 0;e!=s&&K(g,t,s)}},v=e=>{r((()=>{W(f,(([,e],t)=>K(R,t,e))),W(g,((e,t)=>K(w,t,e)))}),f,g,R,w,e),N(f),N(g)};G(R,T),e.hasTable(o)&&L(e.getRowIds(o),(e=>{j(R,e)||T(e)})),v(!0),c(t),d(t,0,e.addRowListener(o,null,((e,t,s)=>T(s))),e.addTableListener(o,(()=>v())))},h,()=>G(i,h),d,c]},se=(e,t)=>s(e)==o?t=>t(e):e??(()=>t??n),ne=e=>{const t=new WeakMap;return s=>(t.has(s)||t.set(s,e(s)),t.get(s))},oe=(e,t=[n])=>{const s=[],o=(e,n)=>n==T(t)?p(s,e):L([t[n],null],(t=>o(H(e,t),n+1)));return o(e,0),s},re=e=>{let t,s=0;const o=[],r=_();return[(a,l,i)=>{t??=e();const d=b(o)??n+s++;return K(r,d,[a,l,i]),ee(Z(l,i??[n],$),d),d},(e,s,...n)=>L(oe(e,s),(e=>W(e,(e=>x(H(r,e),(([e])=>e(t,...s??[],...n))))))),e=>x(H(r,e),(([,t,s])=>(Z(t,s??[n],void 0,(t=>(B(t,e),O(t)?1:0))),K(r,e),T(o)<1e3&&p(o,e),s))),(e,t)=>!h(oe(e,t),M),(e,s,n)=>x(H(r,e),(([e,,o=[]])=>{const r=(...a)=>{const l=T(a);l==T(o)?e(t,...a,...n(a)):M(o[l])?L(s[l](...a),(e=>r(...a,e))):r(...a,o[l])};r()}))]},ae=Object,le=ae.keys,ie=ae.isFrozen,de=ae.freeze,ce=(e,t)=>!M(((e,t)=>x(e,(e=>e[t])))(e,t)),ue=(e,t)=>delete e[t],he=(e,t)=>L(ae.entries(e),(([e,s])=>t(s,e))),fe=e=>v(le(e)),ge=e=>{const t=s(e);return D(t)||t==a&&E(e)?t:void 0},Re=(e,t,s,n,o)=>M(o)?e.delCell(t,s,n,!0):e.setCell(t,s,n,o),Le=ne((e=>{let t,s,o,r=100,a=_(),l=1;const i=_(),d=_(),[c,h,f]=re((()=>z)),g=_(),R=_(),w=[],I=[],y=(t,s)=>{l=0,e.transaction((()=>W(H(g,s),((s,n)=>W(s,((s,o)=>W(s,((s,r)=>Re(e,n,o,r,s[t]))))))))),l=1},S=e=>{K(g,e),K(R,e),h(d,[e])},C=(e,t)=>L(((e,t)=>e.splice(0,t))(e,t??T(e)),S),m=()=>C(w,T(w)-r),E=e.addCellListener(null,null,null,((e,s,n,r,i,d)=>{if(l){x(t,(()=>{p(w,t),m(),C(I),t=void 0,o=1}));const e=U(a,s,_),l=U(e,n,_),c=U(l,r,(()=>[d,void 0]));c[1]=i,c[0]===i&&O(K(l,r))&&O(K(e,n))&&O(K(a,s))&&(t=b(w),o=1),F()}})),k=(e="")=>(M(t)&&(t=n+s++,K(g,t,a),J(t,e),a=_(),o=1),t),D=()=>{v(w)||(I.unshift(k()),y(0,t),t=b(w),o=1)},A=()=>{v(I)||(p(w,t),t=I.shift(),y(1,t),o=1)},F=()=>{o&&(h(i),o=0)},P=e=>{const t=k(e);return F(),t},J=(e,t)=>(Q(e)&&H(R,e)!==t&&(K(R,e,t),h(d,[e])),z),Q=e=>j(g,e),z={setSize:e=>(r=e,m(),z),addCheckpoint:P,setCheckpoint:J,getStore:()=>e,getCheckpointIds:()=>[[...w],t,[...I]],forEachCheckpoint:e=>G(R,e),hasCheckpoint:Q,getCheckpoint:e=>H(R,e),goBackward:()=>(D(),F(),z),goForward:()=>(A(),F(),z),goTo:e=>{const s=u(w,e)?D:u(I,e)?A:null;for(;!M(s)&&e!=t;)s();return F(),z},addCheckpointIdsListener:e=>c(e,i),addCheckpointListener:(e,t)=>c(t,d,[e]),delListener:e=>(f(e),z),clear:()=>(C(w),C(I),M(t)||S(t),t=void 0,s=0,P(),z),destroy:()=>{e.delListener(E)},getListenerStats:()=>({})};return de(z.clear())})),we=(e,t)=>e<t?-1:1,Te=ne((e=>{const t=_(),s=_(),[o,r,a,l,i,d,c,,u,h,f]=te(e,_,(e=>M(e)?n:e+n)),[L,w,T]=re((()=>I)),v=(t,s,n)=>{const o=i(t);W(n,((t,n)=>s(n,(s=>W(t,(t=>s(t,(s=>e.forEachCell(o,t,s)))))))))},I={setIndexDefinition:(e,n,o,r,a,l=we)=>{const i=M(a)?void 0:([e],[t])=>a(e,t);return u(e,n,((n,o,a,u,h,f)=>{let L=0;const T=$(),v=$(),I=d(e);if(W(o,(([e,t],s)=>{M(e)||(ee(T,e),x(H(I,e),(t=>{B(t,s),O(t)&&(K(I,e),L=1)}))),M(t)||(ee(T,t),j(I,t)||(K(I,t,$()),L=1),ee(H(I,t),s),M(r)||ee(v,t))})),n(),O(h)||(f?G(I,(e=>ee(v,e))):G(a,(e=>x(H(u,e),(e=>ee(v,e))))),W(v,(e=>{const t=(t,s)=>l(H(h,t),H(h,s),e),s=[...H(I,e)];g(s,t)||(K(I,e,$(R(s,t))),ee(T,e))}))),(L||f)&&!M(i)){const t=[...I];g(t,i)||(c(e,_(R(t,i))),L=1)}L&&w(t,[e]),W(T,(t=>w(s,[e,t])))}),se(o),x(r,se)),I},delIndexDefinition:e=>(h(e),I),getStore:o,getIndexIds:r,forEachIndex:e=>a(((t,s)=>e(t,(e=>v(t,e,s))))),forEachSlice:(e,t)=>v(e,t,d(e)),hasIndex:l,hasSlice:(e,t)=>j(d(e),t),getTableId:i,getSliceIds:e=>q(d(e)),getSliceRowIds:(e,t)=>z(H(d(e),t)),addSliceIdsListener:(e,s)=>L(s,t,[e]),addSliceRowIdsListener:(e,t,n)=>L(n,s,[e,t]),delListener:e=>(T(e),I),destroy:f,getListenerStats:()=>({})};return de(I)})),ve=_([["avg",[(e,t)=>w(e)/t,(e,t,s)=>e+(t-e)/(s+1),(e,t,s)=>e+(e-t)/(s-1),(e,t,s,n)=>e+(t-s)/n]],["max",[e=>C(...e),(e,t)=>C(t,e),(e,t)=>t==e?void 0:e,(e,t,s)=>s==e?void 0:C(t,e)]],["min",[e=>m(...e),(e,t)=>m(t,e),(e,t)=>t==e?void 0:e,(e,t,s)=>s==e?void 0:m(t,e)]],["sum",[e=>w(e),(e,t)=>e+t,(e,t)=>e-t,(e,t,s)=>e-s+t]]]),Ie=(e,t,s,n,o,r=!1)=>{if(O(s))return;const[a,l,i,d]=o;return r||=M(e),W(n,(([s,n])=>{r||(e=M(s)?l?.(e,n,t++):M(n)?i?.(e,s,t--):d?.(e,n,s,t),r||=M(e))})),r?a(z(s),P(s)):e},pe=ne((e=>{const t=_(),[s,o,r,a,l,i,d,,c,u,h]=te(e,F,(e=>isNaN(e)||M(e)||!0===e||!1===e||e===n?void 0:1*e)),[f,g,R]=re((()=>L)),L={setMetricDefinition:(e,s,n,o,r,a,l)=>{const u=A(n)?[n,r,a,l]:H(ve,n)??H(ve,"sum");return c(e,s,((s,n,o,r,a,l)=>{const c=i(e),h=P(r);l||=M(c),s();let f=Ie(c,h,r,n,u,l);E(f)||(f=void 0),f!=c&&(d(e,f),g(t,[e],f,c))}),se(o,1)),L},delMetricDefinition:e=>(u(e),L),getStore:s,getMetricIds:o,forEachMetric:r,hasMetric:a,getTableId:l,getMetric:i,addMetricListener:(e,s)=>f(s,t,[e]),delListener:e=>(R(e),L),destroy:h,getListenerStats:()=>({})};return de(L)})),be=(e,t,s,o,r)=>{let a,l=0;const i={load:async s=>{if(2!=l){l=1;const o=await t();M(o)||o==n?e.setTables(s):e.setJson(o),l=0}return i},startAutoLoad:async e=>(i.stopAutoLoad(),await i.load(e),o(i.load),i),stopAutoLoad:()=>(r(),i),save:async()=>(1!=l&&(l=2,await s(e.getJson()),l=0),i),startAutoSave:async()=>(await i.stopAutoSave().save(),a=e.addTablesListener((()=>i.save())),i),stopAutoSave:()=>(x(a,e.delListener),i),getStore:()=>e,destroy:()=>i.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return de(i)},ye="storage",Se=globalThis.window,Ce=(e,t,s)=>{let n;return be(e,(async()=>s.getItem(t)),(async e=>s.setItem(t,e)),(e=>{n=n=>{n.storageArea===s&&n.key===t&&e()},Se.addEventListener(ye,n)}),(()=>{Se.removeEventListener(ye,n),n=void 0}))},me=e=>e.headers.get("ETag"),Ee=ne((e=>{const[t,s,o,r,a,,,l,,i,d,c,u]=te(e,(()=>!0),F),g=e.createStore(),w=e.createStore(),I=e.createStore(),b=_(),y=(e,t,...s)=>L(s,(s=>ee(U(U(b,t,_),e,$),s))),S=(e,t,s)=>c(e,0,t.addWillFinishTransactionListener(s.startTransaction),t.addDidFinishTransactionListener((()=>s.finishTransaction()))),C={setQueryDefinition:(t,s,o)=>{let r;l(t,s),g.delTable(t),w.delTable(t),I.delTable(t);const a=[],i=[[null,[s,null,null,[],_()]]],d=[],b=[],m=[],E=[];o({select:(e,t)=>{const s=A(e)?[T(a)+n,e]:[M(t)?e:t,s=>s(e,t)];return p(a,s),{as:e=>s[0]=e}},join:(e,t,s)=>{const n=M(s)||A(t)?null:t,o=M(n)?t:s,r=[e,[e,n,A(o)?o:e=>e(o),[],_()]];return p(i,r),{as:e=>r[0]=e}},where:(e,t,s)=>p(d,A(e)?e:M(s)?s=>s(e)===t:n=>n(e,t)===s),group:(e,t,s,n,o)=>{const r=[e,[e,A(t)?[t,s,n,o]:H(ve,t)??[(e,t)=>t]]];return p(b,r),{as:e=>r[0]=e}},having:(e,t)=>p(m,A(e)?e:s=>s(e)===t),order:(e,t)=>p(E,[A(e)?e:t=>t(e)??0,t]),limit:(e,t)=>{r=M(t)?[0,e]:[e,t]}});const k=_(a);if(O(k))return C;const D=_(i);G(D,((e,[,t])=>x(H(D,t),(({3:t})=>M(e)?0:p(t,e)))));const F=_(b);let J=g,Q=w;if(v(E)&&M(r))Q=I;else{S(t,Q,I);const e=(e,t)=>{const n=H(s,e)??[],o=H(s,t)??[],r=E.findIndex(((e,t)=>n[t]!==o[t]));return r<0?0:we(n[r],o[r])*(E[r][1]?-1:1)},s=_(),n=_();y(Q,t,v(E)?Q.addRowIdsListener(t,(()=>N(n))):Q.addRowListener(t,null,((e,o,r)=>{let a=null;if(Q.hasRow(t,r)){const e=H(s,r)??[],o=Q.getRow(t,r),i=e=>o[e];if(l=([e])=>e(i,r),a=E.map(l),f(e,a))return void(H(n,r)&&I.setRow(t,r,o))}var l;K(s,r,a),N(n)})),Q.addTableListener(t,(()=>{if(O(n)&&(I.delTable(t),Q.hasTable(t))){const s=Q.getTable(t);L(R(le(s),e),(e=>K(n,e,0))),L(x(r,(([e,t])=>{return s=q(n),o=e,r=e+t,s.slice(o,r);var s,o,r}),(()=>q(n))),(e=>{I.setRow(t,e,s[e]),K(n,e,1)}))}})))}if(O(F)&&v(m))J=Q;else{S(t,J,Q);const e=_();G(F,((t,[s,n])=>ee(U(e,s,$),[t,n])));const s=$();G(k,(t=>j(e,t)?0:ee(s,t)));const n=_(),o=(s,n,o,r)=>x(s,(([s,a,l,i])=>{G(n,((t,[n])=>{const a=U(s,t,_),l=H(a,o),d=r?void 0:n;if(l!==d){const s=$([[l,d]]),n=P(a);K(a,o,d),W(H(e,t),(([e,t])=>{const o=Ie(i[e],n,a,s,t);i[e]=M(ge(o))?null:o}))}})),(O(a)||!h(m,(e=>e((e=>i[e]))))?Q.delRow:Q.setRow)(t,l,i)}));y(J,t,J.addRowListener(t,null,((r,a,l,i)=>{const d=[],c=[],u=_(),h=J.hasRow(t,l);let f=!h;W(s,(e=>{const[s,n,o]=i(t,l,e);p(d,n),p(c,o),f||=s})),G(e,(e=>{const[s,,n]=i(t,l,e);(f||s)&&K(u,e,[n])})),f&&o(Z(n,d,void 0,(([,e,s])=>{if(B(e,l),O(e))return Q.delRow(t,s),1})),u,l,1),h&&o(Z(n,c,(()=>{const e={};return W(s,(s=>e[s]=J.getCell(t,l,s))),[_(),$(),Q.addRow(t,e,1),e]}),(([,e])=>{ee(e,l)})),u,l)})))}S(t,e,J);const z=(n,o,r,a)=>{const l=t=>e.getCell(o,r,t);L(a,(s=>{const[o,,r,a,i]=H(D,s),d=r?.(l,n),[h,f]=H(i,n)??[];d!=h&&(M(f)||u(t,f),K(i,n,M(d)?null:[d,...c(t,1,e.addRowListener(o,d,(()=>z(n,o,d,a))))]))})),(n=>{const o=(t,o)=>e.getCell(...M(o)?[s,n,t]:t===s?[s,n,o]:[H(D,t)?.[0],H(H(D,t)?.[4],n)?.[0],o]);J.transaction((()=>h(d,(e=>e(o)))?G(k,((e,s)=>Re(J,t,n,e,s(o,n)))):J.delRow(t,n)))})(n)},{3:V}=H(D,null);return J.transaction((()=>c(t,1,e.addRowListener(s,null,((n,o,r)=>{e.hasRow(s,r)?z(r,s,r,V):(J.delRow(t,r),W(D,(({4:e})=>x(H(e,r),(([,s])=>{u(t,s),K(e,r)})))))}))))),C},delQueryDefinition:e=>(G(H(b,e),((e,t)=>W(t,(t=>e.delListener(t))))),i(e),C),getStore:t,getQueryIds:s,forEachQuery:o,hasQuery:r,getTableId:a,getResultTable:e=>I.getTable(e),getResultRowIds:e=>I.getRowIds(e),getResultRow:(e,t)=>I.getRow(e,t),getResultCellIds:(e,t)=>I.getCellIds(e,t),getResultCell:(e,t,s)=>I.getCell(e,t,s),hasResultTable:e=>I.hasTable(e),hasResultRow:(e,t)=>I.hasRow(e,t),hasResultCell:(e,t,s)=>I.hasCell(e,t,s),forEachResultTable:e=>I.forEachTable(e),forEachResultRow:(e,t)=>I.forEachRow(e,t),forEachResultCell:(e,t,s)=>I.forEachCell(e,t,s),addResultTableListener:(e,t)=>I.addTableListener(e,((e,...s)=>t(C,...s))),addResultRowIdsListener:(e,t,s)=>I.addRowIdsListener(e,((e,...s)=>t(C,...s)),s),addResultRowListener:(e,t,s)=>I.addRowListener(e,t,((e,...t)=>s(C,...t))),addResultCellIdsListener:(e,t,s,n)=>I.addCellIdsListener(e,t,((e,...t)=>s(C,...t)),n),addResultCellListener:(e,t,s,n)=>I.addCellListener(e,t,s,((e,...t)=>n(C,...t))),delListener:e=>(I.delListener(e),C),destroy:d,getListenerStats:()=>{const{tables:e,tableIds:t,transaction:s,...n}=I.getListenerStats();return n}};return de(C)})),ke=ne((e=>{const t=_(),s=_(),o=_(),r=_(),[a,l,i,d,c,u,,,h,f,g]=te(e,(()=>[_(),_(),_(),_()]),(e=>M(e)?void 0:e+n)),[R,L,w]=re((()=>p)),T=(e,t,s)=>x(u(e),(([n,,o])=>{if(!j(o,t)){const r=$();if(c(e)!=I(e))ee(r,t);else{let e=t;for(;!M(e)&&!j(r,e);)ee(r,e),e=H(n,e)}if(s)return r;K(o,t,r)}return H(o,t)})),v=(e,t)=>x(u(e),(([,,e])=>K(e,t))),I=e=>H(t,e),p={setRelationshipDefinition:(e,n,a,l)=>(K(t,e,a),h(e,n,((t,n)=>{const a=$(),l=$(),i=$(),[d,c]=u(e);W(n,(([t,s],n)=>{M(t)||(ee(l,t),x(H(c,t),(e=>{B(e,n),O(e)&&K(c,t)}))),M(s)||(ee(l,s),j(c,s)||K(c,s,$()),ee(H(c,s),n)),ee(a,n),K(d,n,s),G(H(r,e),(t=>{j(T(e,t),n)&&ee(i,t)}))})),t(),W(a,(t=>L(s,[e,t]))),W(l,(t=>L(o,[e,t]))),W(i,(t=>{v(e,t),L(r,[e,t])}))}),se(l)),p),delRelationshipDefinition:e=>(K(t,e),f(e),p),getStore:a,getRelationshipIds:l,forEachRelationship:t=>i((s=>t(s,(t=>e.forEachRow(c(s),t))))),hasRelationship:d,getLocalTableId:c,getRemoteTableId:I,getRemoteRowId:(e,t)=>H(u(e)?.[0],t),getLocalRowIds:(e,t)=>z(H(u(e)?.[1],t)),getLinkedRowIds:(e,t)=>M(u(e))?[t]:z(T(e,t,!0)),addRemoteRowIdListener:(e,t,n)=>R(n,s,[e,t]),addLocalRowIdsListener:(e,t,s)=>R(s,o,[e,t]),addLinkedRowIdsListener:(e,t,s)=>(T(e,t),R(s,r,[e,t])),delListener:e=>(v(...w(e)),p),destroy:g,getListenerStats:()=>({})};return de(p)})),Me=e=>[e,e],xe=e=>0==((e,t=J)=>t(e[0])+t(e[1]))(e),De=()=>[_(),_()],Ae=()=>[De(),De()],Fe=(e,t,s,n=K)=>{const o=(r=q(e),a=e=>!ce(t,e),r.filter(a));var r,a;return L(le(t),(n=>s(e,n,t[n]))),L(o,(t=>n(e,t))),e},Pe=(e,t,s)=>M(e)||!(e=>k(e,ae)&&e.constructor==ae)(e)||fe(e)||ie(e)?(s?.(),!1):(he(e,((s,n)=>{t(s,n)||ue(e,n)})),!fe(e)),Je=(e,t,s)=>K(e,t,H(e,t)==-s?void 0:s),Qe=()=>{let e,t,s=0,o=0;const r=_(),l=_(),c=_(),h=_(),g=_(),R=_(),w=_(),T=_(),v=De(),I=Ae(),b=De(),C=Ae(),m=De(),E=Ae(),k=De(),F=De(),J=De(),[Q,z,B,Z,te]=re((()=>et)),se=(t,s)=>(!e||j(R,s)||ke(s))&&Pe(t,((e,t)=>ne(s,t,e)),(()=>ke(s))),ne=(e,t,s,n)=>Pe(n?s:ae(s,e,t),((n,o)=>x(oe(e,t,o,n),(e=>(s[o]=e,!0)),(()=>!1))),(()=>ke(e,t))),oe=(t,s,n,o)=>e?x(H(H(R,t),n),(e=>ge(o)!=e.type?ke(t,s,n,o,e.default):o),(()=>ke(t,s,n,o))):M(ge(o))?ke(t,s,n,o):o,ae=(e,t,s)=>(x(H(w,t),(([n,o])=>{W(n,((t,s)=>{ce(e,s)||(e[s]=t)})),W(o,(n=>{ce(e,n)||ke(t,s,n)}))})),e),le=e=>Fe(R,e,((e,t,s)=>{const n=_(),o=$();Fe(U(R,t,_),s,((e,t,s)=>{K(e,t,s),x(s.default,(e=>K(n,t,e)),(()=>ee(o,t)))})),K(w,t,[n,o])}),((e,t)=>{K(R,t),K(w,t)})),ie=e=>Fe(T,e,((e,t,s)=>Re(t,s)),((e,t)=>pe(t))),Re=(e,t)=>Fe(U(T,e,(()=>(Se(e,1),_()))),t,((t,s,n)=>Le(e,t,s,n)),((t,s)=>be(e,t,s))),Le=(e,t,s,n,o)=>Fe(U(t,s,(()=>(Ce(e,s,1),_()))),n,((t,n,o)=>we(e,s,t,n,o)),((n,r)=>ye(e,t,s,n,r,o))),we=(e,t,s,n,o)=>{j(s,n)||me(e,t,n,1);const r=H(s,n);o!==r&&(Ee(e,t,n,r,o),K(s,n,o))},Te=(e,t,s,n,o)=>x(H(t,s),(t=>we(e,s,t,n,o)),(()=>Le(e,t,s,ae({[n]:o},e,s)))),ve=e=>{const t=n+s++;return j(e,t)?ve(e):t},Ie=e=>H(T,e)??Re(e,{}),pe=e=>Re(e,{}),be=(e,t,s)=>Le(e,t,s,{},!0),ye=(e,t,s,n,o,r)=>{const a=H(H(w,e)?.[0],o);if(!M(a)&&!r)return we(e,s,n,o,a);const l=t=>{Ee(e,s,t,H(n,t)),me(e,s,t,-1),K(n,t)};M(a)?l(o):G(n,l),O(n)&&(Ce(e,s,-1),O(K(t,s))&&(Se(e,-1),K(T,e)))},Se=(e,t)=>Je(O(r)?K(r,null,Z(I[0][1])||Z(I[1][1])?_e():0):r,e,t),Ce=(e,t,s)=>Je(U(l,e,(()=>_([[null,Z(C[0][1],[e])||Z(C[1][1],[e])?qe(e):0]]))),t,s),me=(e,t,s,n)=>Je(U(U(c,e,_),t,(()=>_([[null,Z(E[0][1],[e,t])||Z(E[1][1],[e,t])?He(e,t):0]]))),s,n),Ee=(e,t,s,n,o)=>U(U(U(h,e,_),t,_),s,(()=>[n,0]))[1]=o,ke=(e,t,s,n,o)=>(p(U(U(U(g,e,_),t,_),s,(()=>[])),n),o),je=(e,t,s)=>x(H(H(H(h,e),t),s),(([e,t])=>[!0,e,t]),(()=>[!1,...Me(Ge(e,t,s))])),Oe=e=>O(g)||O(F[e])?0:W(e?X(g,Y):g,((t,s)=>W(t,((t,n)=>W(t,((t,o)=>z(F[e],[s,n,o],t))))))),ze=(e,t,s,n)=>{P(t)>1?(z(e[0],n),z(e[1],n)):O(t)||0==H(t,null)||f(H(t,null),s(...n??[]))||z(e[1],n)},Ne=e=>{const t=xe(E[e])&&xe(C[e])&&xe(I[e]),s=O(k[e])&&O(m[e])&&O(b[e])&&O(v[e]);if(!t||!s){const n=e?[X(r),Y(l),X(c,Y),X(h,Y)]:[r,l,c,h];if(t||(W(n[2],((t,s)=>W(t,((t,n)=>ze(E[e],t,He,[s,n]))))),W(n[1],((t,s)=>ze(C[e],t,qe,[s]))),ze(I[e],n[0],_e)),!s){let t;W(n[3],((s,n)=>{let o;W(s,((s,r)=>{let a;W(s,(([s,l],i)=>{l!==s&&(z(k[e],[n,r,i],l,s,je),t=o=a=1)})),a&&z(m[e],[n,r],je)})),o&&z(b[e],[n],je)})),t&&z(v[e],void 0,je)}}},We=e=>(Ye(e),et),Be=()=>V(T,(e=>V(e,V))),_e=()=>q(T),qe=e=>q(H(T,e)),He=(e,t)=>q(H(H(T,e),t)),Ge=(e,t,s)=>H(H(H(T,e),t),s),Ke=e=>We((()=>(e=>Pe(e,se,ke))(e)?ie(e):0)),Ue=(e,t,s,n)=>We((()=>x(oe(e,t,s,A(n)?n(Ge(e,t,s)):n),(n=>Te(e,Ie(e),t,s,n))))),Ve=()=>We((()=>ie({}))),Xe=(e,t,s,n)=>We((()=>x(H(T,e),(o=>x(H(o,t),(r=>j(r,s)?ye(e,o,t,r,s,n):0)))))),Ye=(e,t)=>{if(-1==o)return;Ze();const s=e?.();return $e(t),s},Ze=()=>(o++,et),$e=e=>(o>0&&(o--,0==o&&(t=!O(h),o=1,Oe(1),t&&Ne(1),o=-1,e?.(V(h,(e=>V(e,(e=>V(e,(e=>[...e]),(([e,t])=>e===t))),fe)),fe),V(g,(e=>V(e,V))))&&(o=1,W(h,((e,t)=>W(e,((e,s)=>W(e,(([e],n)=>M(e)?Xe(t,s,n,!0):Ue(t,s,n,e))))))),o=-1,t=!1),z(J[0],void 0,t),Oe(0),t&&Ne(0),z(J[1],void 0,t),o=0,L([h,g,r,l,c],N))),et),et={getTables:Be,getTableIds:_e,getTable:e=>V(H(T,e),V),getRowIds:qe,getRow:(e,t)=>V(H(H(T,e),t)),getCellIds:He,getCell:Ge,hasTables:()=>!O(T),hasTable:e=>j(T,e),hasRow:(e,t)=>j(H(T,e),t),hasCell:(e,t,s)=>j(H(H(T,e),t),s),getJson:()=>y(T),getSchemaJson:()=>y(R),setTables:Ke,setTable:(e,t)=>We((()=>se(t,e)?Re(e,t):0)),setRow:(e,t,s)=>We((()=>ne(e,t,s)?Le(e,Ie(e),t,s):0)),addRow:(e,t,s)=>Ye((()=>{const n=ne(e,void 0,t),o=n||s?ve(H(T,e)):void 0;return n&&Le(e,Ie(e),o,t),o})),setPartialRow:(e,t,s)=>We((()=>{if(ne(e,t,s,1)){const n=Ie(e);he(s,((s,o)=>Te(e,n,t,o,s)))}})),setCell:Ue,setJson:e=>{try{"{}"===e?Ve():Ke(S(e))}catch{}return et},setSchema:t=>We((()=>{if((e=(e=>Pe(e,(e=>Pe(e,(e=>{if(!Pe(e,((e,t)=>u([i,d],t))))return!1;const t=e.type;return!(!D(t)&&t!=a||(ge(e.default)!=t&&ue(e,d),0))})))))(t))&&(le(t),!O(T))){const e=Be();Ve(),Ke(e)}})),delTables:Ve,delTable:e=>We((()=>j(T,e)?pe(e):0)),delRow:(e,t)=>We((()=>x(H(T,e),(s=>j(s,t)?be(e,s,t):0)))),delCell:Xe,delSchema:()=>We((()=>{le({}),e=!1})),transaction:Ye,startTransaction:Ze,finishTransaction:$e,forEachTable:e=>W(T,((t,s)=>e(s,(e=>W(t,((t,s)=>e(s,(e=>G(t,e))))))))),forEachRow:(e,t)=>W(H(T,e),((e,s)=>t(s,(t=>G(e,t))))),forEachCell:(e,t,s)=>G(H(H(T,e),t),s),addTablesListener:(e,t)=>Q(e,v[t?1:0]),addTableIdsListener:(e,t,s)=>Q(e,I[s?1:0][t?1:0]),addTableListener:(e,t,s)=>Q(t,b[s?1:0],[e]),addRowIdsListener:(e,t,s,n)=>Q(t,C[n?1:0][s?1:0],[e]),addRowListener:(e,t,s,n)=>Q(s,m[n?1:0],[e,t]),addCellIdsListener:(e,t,s,n,o)=>Q(s,E[o?1:0][n?1:0],[e,t]),addCellListener:(e,t,s,n,o)=>Q(n,k[o?1:0],[e,t,s]),addInvalidCellListener:(e,t,s,n,o)=>Q(n,F[o?1:0],[e,t,s]),addWillFinishTransactionListener:e=>Q(e,J[0]),addDidFinishTransactionListener:e=>Q(e,J[1]),callListener:e=>(te(e,[_e,qe,He],(e=>M(e[2])?[]:Me(Ge(...e)))),et),delListener:e=>(B(e),et),getListenerStats:()=>({}),createStore:Qe};return de(et)};e.createCheckpoints=Le,e.createCustomPersister=be,e.createFilePersister=(e,s)=>{let n;return be(e,(async()=>{try{return await t.promises.readFile(s,c)}catch{}}),(async e=>{try{await t.promises.writeFile(s,e,c)}catch{}}),(e=>{n=t.watch(s,e)}),(()=>{n?.close(),n=void 0}))},e.createIndexes=Te,e.createLocalPersister=(e,t)=>Ce(e,t,localStorage),e.createMetrics=pe,e.createQueries=Ee,e.createRelationships=ke,e.createRemotePersister=(e,t,s,n)=>{let o,r;return be(e,(async()=>{const e=await fetch(t);return r=me(e),e.text()}),(async e=>await fetch(s,{method:"POST",headers:{"Content-Type":"application/json"},body:e})),(e=>{o=setInterval((async()=>{const s=await fetch(t,{method:"HEAD"}),n=me(s);M(r)||M(n)||n==r||(r=n,e())}),1e3*n)}),(()=>{x(o,clearInterval),o=void 0}))},e.createSessionPersister=(e,t)=>Ce(e,t,sessionStorage),e.createStore=Qe,e.defaultSorter=we,Object.defineProperty(e,"__esModule",{value:!0})},"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("fs")):"function"==typeof define&&define.amd?define(["exports","fs"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).TinyBase={},e.fs);
Binary file
@@ -1 +1 @@
1
- var e,s;e=this,s=function(e,s){"use strict";const o=e=>typeof e,t=o(""),d=(e,s)=>e.map(s),r=e=>null==e,n=(e,s,o)=>r(e)?o?.():s(e),i=()=>{},{createContext:l,useContext:a}=s,c=l([]),u=(e,s)=>{const o=a(c);return r(e)?o[s]:((e,s)=>n(e,(e=>e[s])))(o[s+1],e)},I=(e,s)=>{const d=u(e,s);return r(e)||(e=>o(e)==t)(e)?d:e},p=e=>I(e,0),w=e=>I(e,2),b=e=>I(e,4),C=e=>I(e,6),k=e=>I(e,8),{useCallback:R,useEffect:g,useMemo:h,useState:m}=s,T=(e,s,o=[])=>{const t=h((()=>s(e)),[e,...o]);return g((()=>()=>t.destroy()),[t]),t},L=(e,s,o,...t)=>{const d=s?.["get"+e]??(()=>o),r=d(...t),[,n]=m(r);return g((()=>{const o=s?.[`add${e}Listener`]?.(...t,(()=>n(d(...t))),!1);return()=>s?.delListener(o)}),[s,e,n,d,...t]),r},y=(e,s,o,t=[],d,...r)=>{g((()=>{const t=s?.[`add${e}Listener`]?.(...r,o,d);return()=>s?.delListener(t)}),[s,e,...t,d,...r])},v=(e,s,o,t=[],d=i,r=[],...l)=>{const a=p(e);return R((e=>n(a,(t=>n(o(e,t),(e=>d(t["set"+s](...l,e),e)))))),[a,s,...t,...r,...l])},S=(e,s,o=i,t=[],...d)=>{const r=p(e);return R((()=>o(r?.["del"+s](...d))),[r,s,...t,...d])},f=(e,s,o)=>{const t=k(e);return R((()=>t?.[s](o)),[t,s,o])},x=e=>L("TableIds",p(e),[]),P=(e,s)=>L("RowIds",p(s),[],e),V=(e,s,o)=>L("CellIds",p(o),[],e,s),M=(e,s,o,t)=>L("Cell",p(t),void 0,e,s,o),B=(e,s)=>L("Metric",w(s),void 0,e),D=(e,s)=>L("SliceIds",b(s),[],e),A=(e,s,o)=>L("SliceRowIds",b(o),[],e,s),F=(e,s,o)=>L("RemoteRowId",C(o),void 0,e,s),G=(e,s,o)=>L("LocalRowIds",C(o),[],e,s),j=(e,s,o)=>L("LinkedRowIds",C(o),[],e,s),E=e=>L("CheckpointIds",k(e),[[],void 0,[]]),U=(e,s)=>L("Checkpoint",k(s),void 0,e),$=e=>f(e,"goBackward"),_=e=>f(e,"goForward"),{createElement:q,useMemo:O}=s,z=e=>{const s=C(e);return[s,s?.getStore()]},H=({relationshipId:e,relationships:s,rowComponent:o=W,getRowComponentProps:t,separator:r,debugIds:n},i,l)=>{const[a,c]=z(s),u=a?.getLocalTableId(e),I=i(e,l,a);return N(d(I,(e=>q(o,{...K(t,e),key:e,tableId:u,rowId:e,store:c,debugIds:n}))),r,n,l)},J=e=>({checkpoints:s,checkpointComponent:o=Z,getCheckpointComponentProps:t,separator:r,debugIds:n})=>{const i=k(s);return N(d(e(E(i)),(e=>q(o,{...K(t,e),key:e,checkpoints:i,checkpointId:e,debugIds:n}))),r)},K=(e,s)=>r(e)?{}:e(s),N=(e,s,o,t)=>{const n=r(s)||!Array.isArray(e)?e:d(e,((e,o)=>o>0?[s,e]:e));return o?[t,":{",n,"}"]:n},Q=({tableId:e,rowId:s,cellId:o,store:t,debugIds:d})=>N(""+(M(e,s,o,t)??""),void 0,d,o),W=({tableId:e,rowId:s,store:o,cellComponent:t=Q,getCellComponentProps:r,separator:n,debugIds:i})=>N(d(V(e,s,o),(d=>q(t,{...K(r,d),key:d,tableId:e,rowId:s,cellId:d,store:o,debugIds:i}))),n,i,s),X=({tableId:e,store:s,rowComponent:o=W,getRowComponentProps:t,separator:r,debugIds:n})=>N(d(P(e,s),(d=>q(o,{...K(t,d),key:d,tableId:e,rowId:d,store:s,debugIds:n}))),r,n,e),Y=({indexId:e,sliceId:s,indexes:o,rowComponent:t=W,getRowComponentProps:r,separator:n,debugIds:i})=>{const l=b(o),a=l?.getStore(),c=l?.getTableId(e),u=A(e,s,l);return N(d(u,(e=>q(t,{...K(r,e),key:e,tableId:c,rowId:e,store:a,debugIds:i}))),n,i,s)},Z=({checkpoints:e,checkpointId:s,debugIds:o})=>N(U(s,e)??"",void 0,o,s),ee=J((e=>e[0])),se=J((e=>r(e[1])?[]:[e[1]])),oe=J((e=>e[2]));e.BackwardCheckpointsView=ee,e.CellView=Q,e.CheckpointView=Z,e.CurrentCheckpointView=se,e.ForwardCheckpointsView=oe,e.IndexView=({indexId:e,indexes:s,sliceComponent:o=Y,getSliceComponentProps:t,separator:r,debugIds:n})=>N(d(D(e,s),(d=>q(o,{...K(t,d),key:d,indexId:e,sliceId:d,indexes:s,debugIds:n}))),r,n,e),e.LinkedRowsView=e=>H(e,j,e.firstRowId),e.LocalRowsView=e=>H(e,G,e.remoteRowId),e.MetricView=({metricId:e,metrics:s,debugIds:o})=>N(B(e,s)??"",void 0,o,e),e.Provider=({store:e,storesById:o,metrics:t,metricsById:d,indexes:r,indexesById:n,relationships:i,relationshipsById:l,checkpoints:a,checkpointsById:u,children:I})=>{const p=s.useContext(c);return q(c.Provider,{value:O((()=>[e??p[0],{...p[1],...o},t??p[2],{...p[3],...d},r??p[4],{...p[5],...n},i??p[6],{...p[7],...l},a??p[8],{...p[9],...u}]),[e,o,t,d,r,n,i,l,a,u,p])},I)},e.RemoteRowView=({relationshipId:e,localRowId:s,relationships:o,rowComponent:t=W,getRowComponentProps:d,debugIds:n})=>{const[i,l]=z(o),a=i?.getRemoteTableId(e),c=F(e,s,i);return N(r(a)||r(c)?null:q(t,{...K(d,c),key:c,tableId:a,rowId:c,store:l,debugIds:n}),void 0,n,s)},e.RowView=W,e.SliceView=Y,e.TableView=X,e.TablesView=({store:e,tableComponent:s=X,getTableComponentProps:o,separator:t,debugIds:r})=>N(d(x(e),(t=>q(s,{...K(o,t),key:t,tableId:t,store:e,debugIds:r}))),t),e.useAddRowCallback=(e,s,o=[],t,d=i,r=[])=>{const l=p(t);return R((o=>n(l,(t=>n(s(o,t),(s=>d(t.addRow(e,s),t,s)))))),[l,e,...o,...r])},e.useCell=M,e.useCellIds=V,e.useCellIdsListener=(e,s,o,t,d,r)=>y("CellIds",p(r),o,t,d,e,s),e.useCellListener=(e,s,o,t,d,r,n)=>y("Cell",p(n),t,d,r,e,s,o),e.useCheckpoint=U,e.useCheckpointIds=E,e.useCheckpointIdsListener=(e,s,o)=>y("CheckpointIds",k(o),e,s),e.useCheckpointListener=(e,s,o,t)=>y("Checkpoint",k(t),s,o,void 0,e),e.useCheckpoints=e=>u(e,8),e.useCreateCheckpoints=(e,s,o)=>T(e,s,o),e.useCreateIndexes=(e,s,o)=>T(e,s,o),e.useCreateMetrics=(e,s,o)=>T(e,s,o),e.useCreatePersister=(e,s,o=[],t,d=[])=>{const[,r]=m(),n=h((()=>s(e)),[e,...o]);return g((()=>((async()=>{await(t?.(n)),r(1)})(),()=>{n.destroy()})),[n,...d]),n},e.useCreateRelationships=(e,s,o)=>T(e,s,o),e.useCreateStore=(e,s=[])=>h(e,s),e.useDelCellCallback=(e,s,o,t,d,r,n)=>S(d,"Cell",r,n,e,s,o,t),e.useDelRowCallback=(e,s,o,t,d)=>S(o,"Row",t,d,e,s),e.useDelTableCallback=(e,s,o,t)=>S(s,"Table",o,t,e),e.useDelTablesCallback=(e,s,o)=>S(e,"Tables",s,o),e.useGoBackwardCallback=$,e.useGoForwardCallback=_,e.useGoToCallback=(e,s=[],o,t=i,d=[])=>{const r=k(o);return R((s=>n(r,(o=>n(e(s),(e=>t(o.goTo(e),e)))))),[r,...s,...d])},e.useIndexes=e=>u(e,4),e.useLinkedRowIds=j,e.useLinkedRowIdsListener=(e,s,o,t,d)=>y("LinkedRowIds",C(d),o,t,void 0,e,s),e.useLocalRowIds=G,e.useLocalRowIdsListener=(e,s,o,t,d)=>y("LocalRowIds",C(d),o,t,void 0,e,s),e.useMetric=B,e.useMetricListener=(e,s,o,t)=>y("Metric",w(t),s,o,void 0,e),e.useMetrics=e=>u(e,2),e.useRedoInformation=e=>{const s=k(e),[,,[o]]=E(s);return[!r(o),_(s),o,n(o,(e=>s?.getCheckpoint(e)))??""]},e.useRelationships=e=>u(e,6),e.useRemoteRowId=F,e.useRemoteRowIdListener=(e,s,o,t,d)=>y("RemoteRowId",C(d),o,t,void 0,e,s),e.useRow=(e,s,o)=>L("Row",p(o),{},e,s),e.useRowIds=P,e.useRowIdsListener=(e,s,o,t,d)=>y("RowIds",p(d),s,o,t,e),e.useRowListener=(e,s,o,t,d,r)=>y("Row",p(r),o,t,d,e,s),e.useSetCellCallback=(e,s,o,t,d,r,n,i)=>v(r,"Cell",t,d,n,i,e,s,o),e.useSetCheckpointCallback=(e=i,s=[],o,t=i,d=[])=>{const r=k(o);return R((s=>n(r,(o=>{const d=e(s);t(o.addCheckpoint(d),o,d)}))),[r,...s,...d])},e.useSetPartialRowCallback=(e,s,o,t,d,r,n)=>v(d,"PartialRow",o,t,r,n,e,s),e.useSetRowCallback=(e,s,o,t,d,r,n)=>v(d,"Row",o,t,r,n,e,s),e.useSetTableCallback=(e,s,o,t,d,r)=>v(t,"Table",s,o,d,r,e),e.useSetTablesCallback=(e,s,o,t,d)=>v(o,"Tables",e,s,t,d),e.useSliceIds=D,e.useSliceIdsListener=(e,s,o,t)=>y("SliceIds",b(t),s,o,void 0,e),e.useSliceRowIds=A,e.useSliceRowIdsListener=(e,s,o,t,d)=>y("SliceRowIds",b(d),o,t,void 0,e,s),e.useStore=e=>u(e,0),e.useTable=(e,s)=>L("Table",p(s),{},e),e.useTableIds=x,e.useTableIdsListener=(e,s,o,t)=>y("TableIds",p(t),e,s,o),e.useTableListener=(e,s,o,t,d)=>y("Table",p(d),s,o,t,e),e.useTables=e=>L("Tables",p(e),{}),e.useTablesListener=(e,s,o,t)=>y("Tables",p(t),e,s,o),e.useUndoInformation=e=>{const s=k(e),[o,t]=E(s);return[(d=o,!(0==(e=>e.length)(d))),$(s),t,n(t,(e=>s?.getCheckpoint(e)))??""];var d},Object.defineProperty(e,"__esModule",{value:!0})},"object"==typeof exports&&"undefined"!=typeof module?s(exports,require("react")):"function"==typeof define&&define.amd?define(["exports","react"],s):s((e="undefined"!=typeof globalThis?globalThis:e||self).TinyBaseUiReact={},e.React);
1
+ var e,s;e=this,s=function(e,s){"use strict";const o=e=>typeof e,t="",r=o(t),d=(e,s)=>e.map(s),n=e=>null==e,l=(e,s,o)=>n(e)?o?.():s(e),i=()=>{},{createContext:a,useContext:c}=s,u=a([]),I=(e,s)=>{const o=c(u);return n(e)?o[s]:((e,s)=>l(e,(e=>e[s])))(o[s+1],e)},p=(e,s)=>{const t=I(e,s);return n(e)||(e=>o(e)==r)(e)?t:e},w=e=>p(e,0),b=e=>p(e,2),C=e=>p(e,4),k=e=>p(e,6),R=e=>p(e,8),{useCallback:g,useEffect:h,useMemo:m,useState:T}=s,L=(e,s,o=[])=>{const t=m((()=>s(e)),[e,...o]);return h((()=>()=>t.destroy()),[t]),t},y=(e,s,o,t=[],...r)=>{const d=s?.["get"+e]??(()=>o),n=d(...t),[,l]=T(n);return h((()=>{const o=s?.[`add${e}Listener`]?.(...t,(()=>l(d(...t))),...r);return()=>s?.delListener(o)}),[s,e,l,d,...t]),n},S=(e,s,o,t=[],r=[],...d)=>{h((()=>{const t=s?.[`add${e}Listener`]?.(...r,o,...d);return()=>s?.delListener(t)}),[s,e,...t,...r,...d])},f=(e,s,o,t=[],r=i,d=[],...n)=>{const a=w(e);return g((e=>l(a,(t=>l(o(e,t),(e=>r(t["set"+s](...n,e),e)))))),[a,s,...t,...d,...n])},x=(e,s,o=i,t=[],...r)=>{const d=w(e);return g((()=>o(d?.["del"+s](...r))),[d,s,...t,...r])},v=(e,s,o)=>{const t=R(e);return g((()=>t?.[s](o)),[t,s,o])},P=(e,s)=>y("TableIds",w(e),[],[],s),V=(e,s,o)=>y("RowIds",w(s),[],[e],o),M=(e,s,o,t)=>y("CellIds",w(o),[],[e,s],t),B=(e,s,o,t)=>y("Cell",w(t),void 0,[e,s,o]),D=(e,s)=>y("Metric",b(s),void 0,[e]),A=(e,s)=>y("SliceIds",C(s),[],[e]),F=(e,s,o)=>y("SliceRowIds",C(o),[],[e,s]),G=(e,s,o)=>y("RemoteRowId",k(o),void 0,[e,s]),j=(e,s,o)=>y("LocalRowIds",k(o),[],[e,s]),E=(e,s,o)=>y("LinkedRowIds",k(o),[],[e,s]),U=e=>y("CheckpointIds",R(e),[[],void 0,[]]),$=(e,s)=>y("Checkpoint",R(s),void 0,[e]),_=e=>v(e,"goBackward"),q=e=>v(e,"goForward"),{createElement:O,useMemo:z}=s,H=e=>{const s=k(e);return[s,s?.getStore()]},J=({relationshipId:e,relationships:s,rowComponent:o=X,getRowComponentProps:t,separator:r,debugIds:n},l,i)=>{const[a,c]=H(s),u=a?.getLocalTableId(e),I=l(e,i,a);return Q(d(I,(e=>O(o,{...N(t,e),key:e,tableId:u,rowId:e,store:c,debugIds:n}))),r,n,i)},K=e=>({checkpoints:s,checkpointComponent:o=ee,getCheckpointComponentProps:t,separator:r,debugIds:n})=>{const l=R(s);return Q(d(e(U(l)),(e=>O(o,{...N(t,e),key:e,checkpoints:l,checkpointId:e,debugIds:n}))),r)},N=(e,s)=>n(e)?{}:e(s),Q=(e,s,o,t)=>{const r=n(s)||!Array.isArray(e)?e:d(e,((e,o)=>o>0?[s,e]:e));return o?[t,":{",r,"}"]:r},W=({tableId:e,rowId:s,cellId:o,store:r,debugIds:d})=>Q(t+(B(e,s,o,r)??t),void 0,d,o),X=({tableId:e,rowId:s,store:o,trackReorder:t,cellComponent:r=W,getCellComponentProps:n,separator:l,debugIds:i})=>Q(d(M(e,s,o,t),(t=>O(r,{...N(n,t),key:t,tableId:e,rowId:s,cellId:t,store:o,debugIds:i}))),l,i,s),Y=({tableId:e,store:s,trackReorder:o,rowComponent:t=X,getRowComponentProps:r,separator:n,debugIds:l})=>Q(d(V(e,s,o),(o=>O(t,{...N(r,o),key:o,tableId:e,rowId:o,store:s,debugIds:l}))),n,l,e),Z=({indexId:e,sliceId:s,indexes:o,rowComponent:t=X,getRowComponentProps:r,separator:n,debugIds:l})=>{const i=C(o),a=i?.getStore(),c=i?.getTableId(e),u=F(e,s,i);return Q(d(u,(e=>O(t,{...N(r,e),key:e,tableId:c,rowId:e,store:a,debugIds:l}))),n,l,s)},ee=({checkpoints:e,checkpointId:s,debugIds:o})=>Q($(s,e)??t,void 0,o,s),se=K((e=>e[0])),oe=K((e=>n(e[1])?[]:[e[1]])),te=K((e=>e[2]));e.BackwardCheckpointsView=se,e.CellView=W,e.CheckpointView=ee,e.CurrentCheckpointView=oe,e.ForwardCheckpointsView=te,e.IndexView=({indexId:e,indexes:s,sliceComponent:o=Z,getSliceComponentProps:t,separator:r,debugIds:n})=>Q(d(A(e,s),(r=>O(o,{...N(t,r),key:r,indexId:e,sliceId:r,indexes:s,debugIds:n}))),r,n,e),e.LinkedRowsView=e=>J(e,E,e.firstRowId),e.LocalRowsView=e=>J(e,j,e.remoteRowId),e.MetricView=({metricId:e,metrics:s,debugIds:o})=>Q(D(e,s)??t,void 0,o,e),e.Provider=({store:e,storesById:o,metrics:t,metricsById:r,indexes:d,indexesById:n,relationships:l,relationshipsById:i,checkpoints:a,checkpointsById:c,children:I})=>{const p=s.useContext(u);return O(u.Provider,{value:z((()=>[e??p[0],{...p[1],...o},t??p[2],{...p[3],...r},d??p[4],{...p[5],...n},l??p[6],{...p[7],...i},a??p[8],{...p[9],...c}]),[e,o,t,r,d,n,l,i,a,c,p])},I)},e.RemoteRowView=({relationshipId:e,localRowId:s,relationships:o,rowComponent:t=X,getRowComponentProps:r,debugIds:d})=>{const[l,i]=H(o),a=l?.getRemoteTableId(e),c=G(e,s,l);return Q(n(a)||n(c)?null:O(t,{...N(r,c),key:c,tableId:a,rowId:c,store:i,debugIds:d}),void 0,d,s)},e.RowView=X,e.SliceView=Z,e.TableView=Y,e.TablesView=({store:e,trackReorder:s,tableComponent:o=Y,getTableComponentProps:t,separator:r,debugIds:n})=>Q(d(P(e,s),(s=>O(o,{...N(t,s),key:s,tableId:s,store:e,debugIds:n}))),r),e.useAddRowCallback=(e,s,o=[],t,r=i,d=[])=>{const n=w(t);return g((o=>l(n,(t=>l(s(o,t),(s=>r(t.addRow(e,s),t,s)))))),[n,e,...o,...d])},e.useCell=B,e.useCellIds=M,e.useCellIdsListener=(e,s,o,t,r,d,n)=>S("CellIds",w(n),o,t,[e,s],r,d),e.useCellListener=(e,s,o,t,r,d,n)=>S("Cell",w(n),t,r,[e,s,o],d),e.useCheckpoint=$,e.useCheckpointIds=U,e.useCheckpointIdsListener=(e,s,o)=>S("CheckpointIds",R(o),e,s),e.useCheckpointListener=(e,s,o,t)=>S("Checkpoint",R(t),s,o,[e]),e.useCheckpoints=e=>I(e,8),e.useCreateCheckpoints=(e,s,o)=>L(e,s,o),e.useCreateIndexes=(e,s,o)=>L(e,s,o),e.useCreateMetrics=(e,s,o)=>L(e,s,o),e.useCreatePersister=(e,s,o=[],t,r=[])=>{const[,d]=T(),n=m((()=>s(e)),[e,...o]);return h((()=>((async()=>{await(t?.(n)),d(1)})(),()=>{n.destroy()})),[n,...r]),n},e.useCreateRelationships=(e,s,o)=>L(e,s,o),e.useCreateStore=(e,s=[])=>m(e,s),e.useDelCellCallback=(e,s,o,t,r,d,n)=>x(r,"Cell",d,n,e,s,o,t),e.useDelRowCallback=(e,s,o,t,r)=>x(o,"Row",t,r,e,s),e.useDelTableCallback=(e,s,o,t)=>x(s,"Table",o,t,e),e.useDelTablesCallback=(e,s,o)=>x(e,"Tables",s,o),e.useGoBackwardCallback=_,e.useGoForwardCallback=q,e.useGoToCallback=(e,s=[],o,t=i,r=[])=>{const d=R(o);return g((s=>l(d,(o=>l(e(s),(e=>t(o.goTo(e),e)))))),[d,...s,...r])},e.useIndexes=e=>I(e,4),e.useLinkedRowIds=E,e.useLinkedRowIdsListener=(e,s,o,t,r)=>S("LinkedRowIds",k(r),o,t,[e,s]),e.useLocalRowIds=j,e.useLocalRowIdsListener=(e,s,o,t,r)=>S("LocalRowIds",k(r),o,t,[e,s]),e.useMetric=D,e.useMetricListener=(e,s,o,t)=>S("Metric",b(t),s,o,[e]),e.useMetrics=e=>I(e,2),e.useRedoInformation=e=>{const s=R(e),[,,[o]]=U(s);return[!n(o),q(s),o,l(o,(e=>s?.getCheckpoint(e)))??t]},e.useRelationships=e=>I(e,6),e.useRemoteRowId=G,e.useRemoteRowIdListener=(e,s,o,t,r)=>S("RemoteRowId",k(r),o,t,[e,s]),e.useRow=(e,s,o)=>y("Row",w(o),{},[e,s]),e.useRowIds=V,e.useRowIdsListener=(e,s,o,t,r,d)=>S("RowIds",w(d),s,o,[e],t,r),e.useRowListener=(e,s,o,t,r,d)=>S("Row",w(d),o,t,[e,s],r),e.useSetCellCallback=(e,s,o,t,r,d,n,l)=>f(d,"Cell",t,r,n,l,e,s,o),e.useSetCheckpointCallback=(e=i,s=[],o,t=i,r=[])=>{const d=R(o);return g((s=>l(d,(o=>{const r=e(s);t(o.addCheckpoint(r),o,r)}))),[d,...s,...r])},e.useSetPartialRowCallback=(e,s,o,t,r,d,n)=>f(r,"PartialRow",o,t,d,n,e,s),e.useSetRowCallback=(e,s,o,t,r,d,n)=>f(r,"Row",o,t,d,n,e,s),e.useSetTableCallback=(e,s,o,t,r,d)=>f(t,"Table",s,o,r,d,e),e.useSetTablesCallback=(e,s,o,t,r)=>f(o,"Tables",e,s,t,r),e.useSliceIds=A,e.useSliceIdsListener=(e,s,o,t)=>S("SliceIds",C(t),s,o,[e]),e.useSliceRowIds=F,e.useSliceRowIdsListener=(e,s,o,t,r)=>S("SliceRowIds",C(r),o,t,[e,s]),e.useStore=e=>I(e,0),e.useTable=(e,s)=>y("Table",w(s),{},[e]),e.useTableIds=P,e.useTableIdsListener=(e,s,o,t,r)=>S("TableIds",w(r),e,s,[],o,t),e.useTableListener=(e,s,o,t,r)=>S("Table",w(r),s,o,[e],t),e.useTables=e=>y("Tables",w(e),{}),e.useTablesListener=(e,s,o,t)=>S("Tables",w(t),e,s,[],o),e.useUndoInformation=e=>{const s=R(e),[o,r]=U(s);return[(d=o,!(0==(e=>e.length)(d))),_(s),r,l(r,(e=>s?.getCheckpoint(e)))??t];var d},Object.defineProperty(e,"__esModule",{value:!0})},"object"==typeof exports&&"undefined"!=typeof module?s(exports,require("react")):"function"==typeof define&&define.amd?define(["exports","react"],s):s((e="undefined"!=typeof globalThis?globalThis:e||self).TinyBaseUiReact={},e.React);
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tinybase",
3
- "version": "1.3.3",
3
+ "version": "2.0.0-beta.0",
4
4
  "author": "jamesgpearce",
5
5
  "repository": "github:tinyplex/tinybase",
6
6
  "license": "MIT",
@@ -59,15 +59,15 @@
59
59
  },
60
60
  "devDependencies": {
61
61
  "@babel/cli": "^7.17.10",
62
- "@babel/core": "^7.17.10",
63
- "@babel/preset-env": "^7.17.10",
64
- "@babel/preset-react": "^7.16.7",
65
- "@babel/preset-typescript": "^7.16.7",
62
+ "@babel/core": "^7.18.2",
63
+ "@babel/preset-env": "^7.18.2",
64
+ "@babel/preset-react": "^7.17.12",
65
+ "@babel/preset-typescript": "^7.17.12",
66
66
  "@rollup/plugin-replace": "^4.0.0",
67
67
  "@types/asciichart": "^1.5.6",
68
68
  "@types/expect-puppeteer": "^4.4.7",
69
69
  "@types/http-server": "^0.12.1",
70
- "@types/jest": "^27.5.0",
70
+ "@types/jest": "^28.1.1",
71
71
  "@types/jest-environment-puppeteer": "^5.0.2",
72
72
  "@types/less": "^3.0.3",
73
73
  "@types/puppeteer": "^5.4.6",
@@ -75,43 +75,43 @@
75
75
  "@types/react-dom": "^17.0.14",
76
76
  "@types/react-test-renderer": "^17.0.1",
77
77
  "@types/tmp": "^0.2.3",
78
- "@typescript-eslint/eslint-plugin": "^5.22.0",
79
- "@typescript-eslint/parser": "^5.22.0",
78
+ "@typescript-eslint/eslint-plugin": "^5.27.1",
79
+ "@typescript-eslint/parser": "^5.27.1",
80
80
  "asciichart": "^1.5.25",
81
81
  "babel-eslint": "^10.1.0",
82
- "babel-jest": "^28.1.0",
82
+ "babel-jest": "^28.1.1",
83
83
  "babel-preset-minify": "^0.5.2",
84
84
  "country-flag-emoji-json": "^2.0.0",
85
- "cspell": "^5.20.0",
86
- "esbuild": "^0.14.38",
87
- "eslint": "^8.15.0",
85
+ "cspell": "^6.1.2",
86
+ "esbuild": "^0.14.43",
87
+ "eslint": "^8.17.0",
88
88
  "eslint-config-prettier": "^8.5.0",
89
- "eslint-plugin-jest": "^26.1.5",
90
- "eslint-plugin-jsdoc": "^39.2.9",
91
- "eslint-plugin-react": "^7.29.4",
89
+ "eslint-plugin-jest": "^26.5.3",
90
+ "eslint-plugin-jsdoc": "^39.3.2",
91
+ "eslint-plugin-react": "^7.30.0",
92
92
  "eslint-plugin-react-hooks": "^4.5.0",
93
93
  "gulp": "^4.0.2",
94
94
  "gulp-gzip": "^1.4.2",
95
- "http-server": "^14.1.0",
96
- "jest": "^28.1.0",
97
- "jest-environment-jsdom": "^28.1.0",
95
+ "http-server": "^14.1.1",
96
+ "jest": "^28.1.1",
97
+ "jest-environment-jsdom": "^28.1.1",
98
98
  "jest-fetch-mock": "^3.0.3",
99
99
  "jest-puppeteer": "^6.1.0",
100
- "less": "^4.1.2",
100
+ "less": "^4.1.3",
101
101
  "prettier": "^2.6.2",
102
- "puppeteer": "^13.7.0",
102
+ "puppeteer": "^14.3.0",
103
103
  "react": "^17.0.2",
104
104
  "react-dom": "^17.0.2",
105
105
  "react-test-renderer": "^17.0.2",
106
- "rollup": "^2.72.1",
106
+ "rollup": "^2.75.6",
107
107
  "rollup-plugin-esbuild": "^4.9.1",
108
108
  "rollup-plugin-gzip": "^3.0.1",
109
109
  "rollup-plugin-prettier": "^2.2.2",
110
110
  "rollup-plugin-terser": "^7.0.2",
111
- "tinydocs": "^0.1.12",
111
+ "tinydocs": "^0.1.13",
112
112
  "tmp": "^0.2.1",
113
113
  "ts-unused-exports": "^8.0.0",
114
- "typescript": "4.6.4"
114
+ "typescript": "4.7.3"
115
115
  },
116
116
  "peerDependencies": {
117
117
  "react": "^17.0.0"
@@ -121,4 +121,4 @@
121
121
  "optional": true
122
122
  }
123
123
  }
124
- }
124
+ }
package/readme.md CHANGED
@@ -1,4 +1,4 @@
1
- <section id="hero"><h2 id="a-javascript-library-for-structured-state">A JavaScript library for <em>structured state</em>.</h2><p>Using plain old JavaScript objects to manage data gets old very quickly. It&#x27;s error-prone, tricky to track changes efficiently, and easy to mistakenly incur performance costs.</p><p><em>TinyBase is a smarter way to structure your application state:</em></p><ul><li>Familiar concepts of <a href="#set-and-get-tables-rows-and-cells">tables, rows, and cells</a>, and <a href="#apply-schemas-to-tables">schematization</a> to model your data domain.</li><li><a href="#register-listeners-at-any-granularity">Flexibly reactive</a> to reconciled updates, so you only spend cycles on the data that changes.</li><li><a href="#create-indexes-for-fast-lookups">Indexing</a>, <a href="#define-metrics-and-aggregations">metrics</a>, <a href="#configure-relationships-between-tables">relationships</a> - and even an <a href="#use-checkpoints-for-an-easy-undo-stack">undo stack</a> for your app state! - out of the box.</li><li>Easily <a href="#persist-data-to-browser-file-or-server">sync your data</a> to local or remote storage, and use <a href="#call-react-hooks-to-bind-to-data">idiomatic bindings</a> to your React UI.</li></ul><p><em>Tiny by name, tiny by nature</em>, TinyBase only costs <a href="#did-we-say-tiny">3.0kB - 6.0kB</a> when compressed, and has zero dependencies. And of course it&#x27;s <a href="#well-tested-and-documented">well tested</a>, <a href="https://tinybase.org/guides/the-basics/getting-started">fully documented</a>, and <a href="https://github.com/tinyplex/tinybase">open source</a>. Other <a href="https://tinybase.org/guides/faq/">FAQs</a>?</p></section><hr><p><a id="start" href="https://tinybase.org/guides/the-basics/getting-started">Get started</a></p><p><a href="https://tinybase.org/demos">Try the demos</a></p><p><a href="https://tinybase.org/api/store/interfaces/store/store/">Read the docs</a></p><hr><section><h2 id="set-and-get-tables-rows-and-cells">Set and get tables, rows, and cells.</h2><p>Creating a <a href="https://tinybase.org/api/store/interfaces/store/store"><code>Store</code></a> requires just a simple call to the <a href="https://tinybase.org/api/store/functions/creation/createstore"><code>createStore</code></a> function. Once you have one, you can easily set <a href="https://tinybase.org/api/store/type-aliases/store/table"><code>Table</code></a>, <a href="https://tinybase.org/api/store/type-aliases/store/row"><code>Row</code></a>, or <a href="https://tinybase.org/api/store/type-aliases/store/cell"><code>Cell</code></a> values by their <a href="https://tinybase.org/api/common/type-aliases/identity/id"><code>Id</code></a>. And of course you can easily get the values back out again.</p><p>Read more about setting and changing data in <a href="https://tinybase.org/guides/the-basics">The Basics</a> guide.</p></section>
1
+ <section id="hero"><h2 id="a-javascript-library-for-structured-state">A JavaScript library for <em>structured state</em>.</h2><p>Using plain old JavaScript objects to manage data gets old very quickly. It&#x27;s error-prone, tricky to track changes efficiently, and easy to mistakenly incur performance costs.</p><p><em>TinyBase is a smarter way to structure your application state:</em></p><ul><li>Familiar concepts of <a href="#set-and-get-tables-rows-and-cells">tables, rows, and cells</a>, and <a href="#apply-schemas-to-tables">schematization</a> to model your data domain.</li><li><a href="#register-listeners-at-any-granularity">Flexibly reactive</a> to reconciled updates, so you only spend cycles on the data that changes.</li><li><a href="#create-indexes-for-fast-lookups">Indexing</a>, <a href="#define-metrics-and-aggregations">metrics</a>, <a href="#configure-relationships-between-tables">relationships</a> - and even an <a href="#use-checkpoints-for-an-easy-undo-stack">undo stack</a> for your app state! - out of the box.</li><li>Easily <a href="#persist-data-to-browser-file-or-server">sync your data</a> to local or remote storage, and use <a href="#call-react-hooks-to-bind-to-data">idiomatic bindings</a> to your React UI.</li></ul><p><em>Tiny by name, tiny by nature</em>, TinyBase only costs <a href="#did-we-say-tiny">3.2kB - 8.0kB</a> when compressed, and has zero dependencies. And of course it&#x27;s <a href="#well-tested-and-documented">well tested</a>, <a href="https://tinybase.org/guides/the-basics/getting-started">fully documented</a>, and <a href="https://github.com/tinyplex/tinybase">open source</a>. Other <a href="https://tinybase.org/guides/faq/">FAQs</a>?</p></section><hr><p><a id="start" href="https://tinybase.org/guides/the-basics/getting-started">Get started</a></p><p><a href="https://tinybase.org/demos">Try the demos</a></p><p><a href="https://tinybase.org/api/store/interfaces/store/store/">Read the docs</a></p><hr><section><h2 id="set-and-get-tables-rows-and-cells">Set and get tables, rows, and cells.</h2><p>Creating a <a href="https://tinybase.org/api/store/interfaces/store/store"><code>Store</code></a> requires just a simple call to the <a href="https://tinybase.org/api/store/functions/creation/createstore"><code>createStore</code></a> function. Once you have one, you can easily set <a href="https://tinybase.org/api/store/type-aliases/store/table"><code>Table</code></a>, <a href="https://tinybase.org/api/store/type-aliases/store/row"><code>Row</code></a>, or <a href="https://tinybase.org/api/store/type-aliases/store/cell"><code>Cell</code></a> values by their <a href="https://tinybase.org/api/common/type-aliases/identity/id"><code>Id</code></a>. And of course you can easily get the values back out again.</p><p>Read more about setting and changing data in <a href="https://tinybase.org/guides/the-basics">The Basics</a> guide.</p></section>
2
2
 
3
3
  ```js
4
4
  const store = createStore()
@@ -192,4 +192,4 @@ console.log(store.getCell('pets', 'felix', 'sold'));
192
192
  // -> false
193
193
  ```
194
194
 
195
- <section><h2 id="did-we-say-tiny">Did we say tiny?</h2><p>If you use the basic <a href="https://tinybase.org/api/store"><code>store</code></a> module alone, you&#x27;ll only add a gzipped <em>3.0kB</em> to your app. You can incrementally add the other modules as you need more functionality, or get it all for <em>6.0kB</em>. The <code>ui-react</code> adaptor is just another <em>2.6kB</em>, and everything is fast.</p><p>Life&#x27;s easy when you have zero dependencies.</p><p>Read more about how TinyBase is structured in the <a href="https://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://tinybase.org/api/store">store</a></th><td>3.0kB</td><td>6.7kB</td><td>28.4kB</td><td>114.5kB</td></tr><tr><th class="right"><a href="https://tinybase.org/api/indexes">indexes</a></th><td>1.6kB</td><td>3.2kB</td><td>14.1kB</td><td>32.9kB</td></tr><tr><th class="right"><a href="https://tinybase.org/api/metrics">metrics</a></th><td>1.5kB</td><td>3.1kB</td><td>12.6kB</td><td>29.1kB</td></tr><tr><th class="right"><a href="https://tinybase.org/api/relationships">relationships</a></th><td>1.6kB</td><td>3.2kB</td><td>14.8kB</td><td>42.1kB</td></tr><tr><th class="right"><a href="https://tinybase.org/api/checkpoints">checkpoints</a></th><td>1.3kB</td><td>2.5kB</td><td>10.3kB</td><td>33.0kB</td></tr><tr><th class="right"><a href="https://tinybase.org/api/persisters">persisters</a></th><td>0.8kB</td><td>1.6kB</td><td>4.9kB</td><td>26.7kB</td></tr><tr><th class="right"><a href="https://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"><a href="https://tinybase.org/api/tinybase">tinybase</a></th><td>6.0kB</td><td>14.2kB</td><td>60.0kB</td><td>0.3kB</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 to get up and running.</p><p>Read more about how TinyBase is tested in the Unit <a href="https://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>1,004</td><td>1,004</td><td>100.0%</td></tr><tr><th class="right">Statements</th><td>1,094</td><td>1,094</td><td>100.0%</td></tr><tr><th class="right">Functions</th><td>417</td><td>417</td><td>100.0%</td></tr><tr><th class="right">Branches</th><td>363</td><td>363</td><td>100.0%</td></tr><tr><th class="right">Tests</th><td colspan="3">1,795</td></tr><tr><th class="right">Assertions</th><td colspan="3">8,961</td></tr></tbody></table></div><hr><p><a id="start" href="https://tinybase.org/guides/the-basics/getting-started">Get started</a></p><p><a href="https://tinybase.org/demos">Try the demos</a></p><p><a href="https://tinybase.org/api/store/interfaces/store/store/">Read the docs</a></p><hr><section><h2 id="follow">Follow</h2><ul><li>News and updates on <a href="https://twitter.com/tinybasejs">Twitter</a> and <a href="https://facebook.com/tinybasejs">Facebook</a>.</li><li><a href="https://tinybase.org/guides/releases/">Release notes</a> for each minor version.</li><li>Packages on <a href="https://www.npmjs.com/package/tinybase/v/1.3.3">NPM</a>.</li><li><a href="https://github.com/tinyplex/tinybase/issues">Issues</a> on <a href="https://github.com/tinyplex/tinybase">GitHub</a>.</li></ul></section><section><h2 id="about">About</h2><p>Building TinyBase was an interesting exercise in API design, minification, and documentation. It&#x27;s not <a href="https://www.linkedin.com/in/jamespearce">my day job</a>, but I do intend to maintain it, so please provide feedback. I could not have done this without these great <a href="https://tinybase.org/guides/how-tinybase-is-built/credits/#giants">projects</a> and <a href="https://tinybase.org/guides/how-tinybase-is-built/credits/#and-friends">friends</a>, and I hope you enjoy using it!</p></section>
195
+ <section><h2 id="did-we-say-tiny">Did we say tiny?</h2><p>If you use the basic <a href="https://tinybase.org/api/store"><code>store</code></a> module alone, you&#x27;ll only add a gzipped <em>3.2kB</em> to your app. You can incrementally add the other modules as you need more functionality, or get it all for <em>8.0kB</em>. The <code>ui-react</code> adaptor is just another <em>2.7kB</em>, and everything is fast.</p><p>Life&#x27;s easy when you have zero dependencies.</p><p>Read more about how TinyBase is structured in the <a href="https://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://tinybase.org/api/store">store</a></th><td>3.2kB</td><td>7.4kB</td><td>30.9kB</td><td>117.2kB</td></tr><tr><th class="right"><a href="https://tinybase.org/api/indexes">indexes</a></th><td>1.7kB</td><td>3.5kB</td><td>15.3kB</td><td>32.9kB</td></tr><tr><th class="right"><a href="https://tinybase.org/api/metrics">metrics</a></th><td>1.7kB</td><td>3.4kB</td><td>14.0kB</td><td>29.1kB</td></tr><tr><th class="right"><a href="https://tinybase.org/api/relationships">relationships</a></th><td>1.7kB</td><td>3.5kB</td><td>16.0kB</td><td>42.1kB</td></tr><tr><th class="right"><a href="https://tinybase.org/api/checkpoints">checkpoints</a></th><td>1.4kB</td><td>2.7kB</td><td>10.9kB</td><td>33.0kB</td></tr><tr><th class="right"><a href="https://tinybase.org/api/persisters">persisters</a></th><td>0.8kB</td><td>1.6kB</td><td>5.0kB</td><td>26.7kB</td></tr><tr><th class="right"><a href="https://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"><a href="https://tinybase.org/api/tinybase">tinybase</a></th><td>8.0kB</td><td>19.3kB</td><td>83.5kB</td><td>0.3kB</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 to get up and running.</p><p>Read more about how TinyBase is tested in the Unit <a href="https://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>1,275</td><td>1,275</td><td>100.0%</td></tr><tr><th class="right">Statements</th><td>1,381</td><td>1,381</td><td>100.0%</td></tr><tr><th class="right">Functions</th><td>526</td><td>526</td><td>100.0%</td></tr><tr><th class="right">Branches</th><td>511</td><td>511</td><td>100.0%</td></tr><tr><th class="right">Tests</th><td colspan="3">1,985</td></tr><tr><th class="right">Assertions</th><td colspan="3">10,525</td></tr></tbody></table></div><hr><p><a id="start" href="https://tinybase.org/guides/the-basics/getting-started">Get started</a></p><p><a href="https://tinybase.org/demos">Try the demos</a></p><p><a href="https://tinybase.org/api/store/interfaces/store/store/">Read the docs</a></p><hr><section><h2 id="follow">Follow</h2><ul><li>News and updates on <a href="https://twitter.com/tinybasejs">Twitter</a> and <a href="https://facebook.com/tinybasejs">Facebook</a>.</li><li><a href="https://tinybase.org/guides/releases/">Release notes</a> for each minor version.</li><li>Packages on <a href="https://www.npmjs.com/package/tinybase/v/2.0.0-beta.0">NPM</a>.</li><li><a href="https://github.com/tinyplex/tinybase/issues">Issues</a> on <a href="https://github.com/tinyplex/tinybase">GitHub</a>.</li></ul></section><section><h2 id="about">About</h2><p>Building TinyBase was an interesting exercise in API design, minification, and documentation. It&#x27;s not <a href="https://www.linkedin.com/in/jamespearce">my day job</a>, but I do intend to maintain it, so please provide feedback. I could not have done this without these great <a href="https://tinybase.org/guides/how-tinybase-is-built/credits/#giants">projects</a> and <a href="https://tinybase.org/guides/how-tinybase-is-built/credits/#and-friends">friends</a>, and I hope you enjoy using it!</p></section>