tinybase 1.3.3 → 1.3.6

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.
Binary file
@@ -1 +1 @@
1
- var e,t;e=this,t=function(e){"use strict";const t=e=>typeof e,s=t(""),n=t(t),i=(e,t)=>e.forEach(t),o=e=>d(e,((e,t)=>e+t),0),r=e=>e.length,c=e=>0==r(e),d=(e,t,s)=>e.reduce(t,s),a=e=>e.slice(1),l=Math.max,u=Math.min,f=isFinite,h=e=>null==e,p=(e,t,s)=>h(e)?s?.():t(e),v=()=>{},M=e=>e.size,g=(e,t)=>e?.has(t)??!1,y=e=>e.clear(),b=(e,t)=>e?.forEach(t),m=(e,t)=>e?.delete(t),w=e=>new Map(e),L=(e,t)=>e?.get(t),T=(e,t)=>b(e,((e,s)=>t(s,e))),x=(e,t,s)=>h(s)?(m(e,t),e):e?.set(t,s),j=(e,t,s)=>(g(e,t)||e.set(t,s()),L(e,t)),E=e=>new Set(e),I=(e,n)=>t(e)==s?t=>t(e):e??(()=>n??""),R=(e,t,s)=>r(s)<2?((e,t)=>e?.add(t))(c(s)?e:j(e,s[0],E),t):R(j(e,s[0],w),t,a(s)),S=e=>{const t=(s,n,...o)=>p(s,(s=>c(o)?e(s,n):i([o[0],null],(e=>t(L(s,e),n,...a(o))))));return t},k=Object.freeze,z=w([["avg",[(e,t)=>o(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=>l(...e),(e,t)=>l(t,e),(e,t)=>t==e?void 0:e,(e,t,s)=>s==e?void 0:l(t,e)]],["min",[e=>u(...e),(e,t)=>u(t,e),(e,t)=>t==e?void 0:e,(e,t,s)=>s==e?void 0:u(t,e)]],["sum",[e=>o(e),(e,t)=>e+t,(e,t)=>e-t,(e,t,s)=>e-s+t]]]),D=(e=>{const t=new WeakMap;return s=>(t.has(s)||t.set(s,e(s)),t.get(s))})((e=>{const s=w(),[o,c,d,a,l,u,j,D,N,O]=((e,t,s)=>{const n=e.hasRow,o=w(),r=w(),c=w(),d=w(),a=w(),l=t=>p(L(a,t),(s=>{b(s,e.delListener),x(a,t)})),u=e=>{x(o,e),x(r,e),x(c,e),x(d,e),l(e)};return[()=>e,()=>[...o?.keys()??[]],e=>T(r,e),e=>g(r,e),e=>L(o,e),e=>L(r,e),(e,t)=>x(r,e,t),(u,f,p,v,M)=>{const m=w(),j=w();x(o,u,f),g(r,u)||(x(r,u,t()),x(c,u,w()),x(d,u,w()));const I=L(c,u),R=L(d,u),S=t=>{const i=s=>e.getCell(f,t,s),o=L(I,t),r=n(f,t)?s(v(i,t)):void 0;if(o!=r&&x(m,t,[o,r]),!h(M)){const e=L(R,t),s=n(f,t)?M(i,t):void 0;e!=s&&x(j,t,s)}},k=e=>{p((()=>{b(m,(([,e],t)=>x(I,t,e))),b(j,((e,t)=>x(R,t,e)))}),m,j,I,R,e),y(m),y(j)};T(I,S),e.hasTable(f)&&i(e.getRowIds(f),(e=>{g(I,e)||S(e)})),k(!0),l(u),x(a,u,E([e.addRowListener(f,null,((e,t,s)=>S(s))),e.addTableListener(f,(()=>k()))]))},u,()=>T(a,u)]})(e,v,(e=>isNaN(e)||h(e)||!0===e||!1===e||""===e?void 0:1*e)),[_,B,C]=(e=>{let t,s=0;const n=[],o=w();return[(i,r,c=[])=>{t??=e();const d=n.pop()??""+s++;return x(o,d,[i,r,c]),R(r,d,c),d},(e,s=[],...n)=>S(b)(e,(e=>p(L(o,e),(([e])=>e(t,...s,...n)))),...s),e=>p(L(o,e),(([,t,s])=>(S(m)(t,e,...s),x(o,e),r(n)<1e3&&n.push(e),s)),(()=>[])),(e,s,n)=>p(L(o,e),(([e,,o])=>{const c=(...d)=>{const a=r(d);a==r(o)?e(t,...d,...n(d)):h(o[a])?i(s[a](...d),(e=>c(...d,e))):c(...d,o[a])};c()}))]})((()=>F)),F={setMetricDefinition:(e,i,o,r,c,d,a)=>{const l=t(o)==n?[o,c,d,a]:L(z,o)??L(z,"sum");return D(e,i,((t,n,i,o,r,c)=>{let d=u(e),a=M(o);const[p,v,g,y]=l;var m;c=c||h(d),b(n,(([e,t])=>{c||(d=h(e)?v?.(d,t,a++):h(t)?g?.(d,e,a--):y?.(d,t,e,a)),c=c||h(d)})),t(),h(m=o)||0==M(m)?d=void 0:c&&(d=p((e=>[...e?.values()??[]])(o),M(o))),f(d)||(d=void 0);const w=u(e);d!=w&&(j(e,d),B(s,[e],d,w))}),I(r,1)),F},delMetricDefinition:e=>(N(e),F),getStore:o,getMetricIds:c,forEachMetric:d,hasMetric:a,getTableId:l,getMetric:u,addMetricListener:(e,t)=>_(t,s,[e]),delListener:e=>(C(e),F),destroy:O,getListenerStats:()=>({})};return k(F)}));e.createMetrics=D,Object.defineProperty(e,"__esModule",{value:!0})},"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).TinyBaseMetrics={});
1
+ var e,t;e=this,t=function(e){"use strict";const t=e=>typeof e,n=t(""),s=t(t),i=(e,t)=>e.forEach(t),o=e=>d(e,((e,t)=>e+t),0),r=e=>e.length,c=e=>0==r(e),d=(e,t,n)=>e.reduce(t,n),a=e=>e.slice(1),l=Math.max,u=Math.min,f=isFinite,h=e=>null==e,p=(e,t,n)=>h(e)?n?.():t(e),v=()=>{},M=e=>e.size,g=(e,t)=>e?.has(t)??!1,y=e=>e.clear(),b=(e,t)=>e?.forEach(t),m=(e,t)=>e?.delete(t),w=e=>new Map(e),L=(e,t)=>e?.get(t),T=(e,t)=>b(e,((e,n)=>t(n,e))),x=(e,t,n)=>h(n)?(m(e,t),e):e?.set(t,n),j=(e,t,n)=>(g(e,t)||x(e,t,n()),L(e,t)),E=e=>new Set(e),I=(e,s)=>t(e)==n?t=>t(e):e??(()=>s??""),R=(e,t,n)=>r(n)<2?((e,t)=>e?.add(t))(c(n)?e:j(e,n[0],E),t):R(j(e,n[0],w),t,a(n)),S=e=>{const t=(n,s,...o)=>p(n,(n=>c(o)?e(n,s):i([o[0],null],(e=>t(L(n,e),s,...a(o))))));return t},k=Object.freeze,z=w([["avg",[(e,t)=>o(e)/t,(e,t,n)=>e+(t-e)/(n+1),(e,t,n)=>e+(e-t)/(n-1),(e,t,n,s)=>e+(t-n)/s]],["max",[e=>l(...e),(e,t)=>l(t,e),(e,t)=>t==e?void 0:e,(e,t,n)=>n==e?void 0:l(t,e)]],["min",[e=>u(...e),(e,t)=>u(t,e),(e,t)=>t==e?void 0:e,(e,t,n)=>n==e?void 0:u(t,e)]],["sum",[e=>o(e),(e,t)=>e+t,(e,t)=>e-t,(e,t,n)=>e-n+t]]]),D=(e=>{const t=new WeakMap;return n=>(t.has(n)||t.set(n,e(n)),t.get(n))})((e=>{const n=w(),[o,c,d,a,l,u,j,D,N,O]=((e,t,n)=>{const s=e.hasRow,o=w(),r=w(),c=w(),d=w(),a=w(),l=t=>p(L(a,t),(n=>{b(n,e.delListener),x(a,t)})),u=e=>{x(o,e),x(r,e),x(c,e),x(d,e),l(e)};return[()=>e,()=>[...o?.keys()??[]],e=>T(r,e),e=>g(r,e),e=>L(o,e),e=>L(r,e),(e,t)=>x(r,e,t),(u,f,p,v,M)=>{const m=w(),j=w();x(o,u,f),g(r,u)||(x(r,u,t()),x(c,u,w()),x(d,u,w()));const I=L(c,u),R=L(d,u),S=t=>{const i=n=>e.getCell(f,t,n),o=L(I,t),r=s(f,t)?n(v(i,t)):void 0;if(o!=r&&x(m,t,[o,r]),!h(M)){const e=L(R,t),n=s(f,t)?M(i,t):void 0;e!=n&&x(j,t,n)}},k=e=>{p((()=>{b(m,(([,e],t)=>x(I,t,e))),b(j,((e,t)=>x(R,t,e)))}),m,j,I,R,e),y(m),y(j)};T(I,S),e.hasTable(f)&&i(e.getRowIds(f),(e=>{g(I,e)||S(e)})),k(!0),l(u),x(a,u,E([e.addRowListener(f,null,((e,t,n)=>S(n))),e.addTableListener(f,(()=>k()))]))},u,()=>T(a,u)]})(e,v,(e=>isNaN(e)||h(e)||!0===e||!1===e||""===e?void 0:1*e)),[_,B,C]=(e=>{let t,n=0;const s=[],o=w();return[(i,r,c=[])=>{t??=e();const d=s.pop()??""+n++;return x(o,d,[i,r,c]),R(r,d,c),d},(e,n=[],...s)=>S(b)(e,(e=>p(L(o,e),(([e])=>e(t,...n,...s)))),...n),e=>p(L(o,e),(([,t,n])=>(S(m)(t,e,...n),x(o,e),r(s)<1e3&&s.push(e),n)),(()=>[])),(e,n,s)=>p(L(o,e),(([e,,o])=>{const c=(...d)=>{const a=r(d);a==r(o)?e(t,...d,...s(d)):h(o[a])?i(n[a](...d),(e=>c(...d,e))):c(...d,o[a])};c()}))]})((()=>F)),F={setMetricDefinition:(e,i,o,r,c,d,a)=>{const l=t(o)==s?[o,c,d,a]:L(z,o)??L(z,"sum");return D(e,i,((t,s,i,o,r,c)=>{let d=u(e),a=M(o);const[p,v,g,y]=l;var m;c=c||h(d),b(s,(([e,t])=>{c||(d=h(e)?v?.(d,t,a++):h(t)?g?.(d,e,a--):y?.(d,t,e,a)),c=c||h(d)})),t(),h(m=o)||0==M(m)?d=void 0:c&&(d=p((e=>[...e?.values()??[]])(o),M(o))),f(d)||(d=void 0);const w=u(e);d!=w&&(j(e,d),B(n,[e],d,w))}),I(r,1)),F},delMetricDefinition:e=>(N(e),F),getStore:o,getMetricIds:c,forEachMetric:d,hasMetric:a,getTableId:l,getMetric:u,addMetricListener:(e,t)=>_(t,n,[e]),delListener:e=>(C(e),F),destroy:O,getListenerStats:()=>({})};return k(F)}));e.createMetrics=D,Object.defineProperty(e,"__esModule",{value:!0})},"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).TinyBaseMetrics={});
Binary file
@@ -1 +1 @@
1
- var e,t;e=this,t=function(e){"use strict";const t=e=>typeof e,o=t(""),s=(e,t)=>e.forEach(t),n=e=>e.length,i=e=>0==n(e),a=e=>e.slice(1),d=e=>null==e,r=(e,t,o)=>d(e)?o?.():t(e),l=(e,t)=>e?.has(t)??!1,c=e=>[...e?.values()??[]],f=e=>e.clear(),h=(e,t)=>e?.forEach(t),p=(e,t)=>e?.delete(t),u=e=>new Map(e),R=(e,t)=>e?.get(t),g=(e,t)=>h(e,((e,o)=>t(o,e))),w=(e,t,o)=>d(o)?(p(e,t),e):e?.set(t,o),L=(e,t,o)=>(l(e,t)||e.set(t,o()),R(e,t)),I=e=>new Set(e),b=(e,t)=>e?.add(t),y=(e,s)=>t(e)==o?t=>t(e):e??(()=>s??""),v=(e,t,o)=>n(o)<2?b(i(o)?e:L(e,o[0],I),t):v(L(e,o[0],u),t,a(o)),T=e=>{const t=(o,n,...d)=>r(o,(o=>i(d)?e(o,n):s([d[0],null],(e=>t(R(o,e),n,...a(d))))));return t},m=Object.freeze,k=(e=>{const t=new WeakMap;return o=>(t.has(o)||t.set(o,e(o)),t.get(o))})((e=>{const t=u(),o=u(),i=u(),a=u(),[L,k,E,j,x,M,S,z,D,O]=((e,t,o)=>{const n=e.hasRow,i=u(),a=u(),c=u(),p=u(),L=u(),b=t=>r(R(L,t),(o=>{h(o,e.delListener),w(L,t)})),y=e=>{w(i,e),w(a,e),w(c,e),w(p,e),b(e)};return[()=>e,()=>[...i?.keys()??[]],e=>g(a,e),e=>l(a,e),e=>R(i,e),e=>R(a,e),(e,t)=>w(a,e,t),(r,y,v,T,m)=>{const k=u(),E=u();w(i,r,y),l(a,r)||(w(a,r,t()),w(c,r,u()),w(p,r,u()));const j=R(c,r),x=R(p,r),M=t=>{const s=o=>e.getCell(y,t,o),i=R(j,t),a=n(y,t)?o(T(s,t)):void 0;if(i!=a&&w(k,t,[i,a]),!d(m)){const e=R(x,t),o=n(y,t)?m(s,t):void 0;e!=o&&w(E,t,o)}},S=e=>{v((()=>{h(k,(([,e],t)=>w(j,t,e))),h(E,((e,t)=>w(x,t,e)))}),k,E,j,x,e),f(k),f(E)};g(j,M),e.hasTable(y)&&s(e.getRowIds(y),(e=>{l(j,e)||M(e)})),S(!0),b(r),w(L,r,I([e.addRowListener(y,null,((e,t,o)=>M(o))),e.addTableListener(y,(()=>S()))]))},y,()=>g(L,y)]})(e,(()=>[u(),u(),u(),u()]),(e=>d(e)?void 0:e+"")),[_,B,C]=(e=>{let t,o=0;const i=[],a=u();return[(s,n,d=[])=>{t??=e();const r=i.pop()??""+o++;return w(a,r,[s,n,d]),v(n,r,d),r},(e,o=[],...s)=>T(h)(e,(e=>r(R(a,e),(([e])=>e(t,...o,...s)))),...o),e=>r(R(a,e),(([,t,o])=>(T(p)(t,e,...o),w(a,e),n(i)<1e3&&i.push(e),o)),(()=>[])),(e,o,i)=>r(R(a,e),(([e,,a])=>{const r=(...l)=>{const c=n(l);c==n(a)?e(t,...l,...i(l)):d(a[c])?s(o[c](...l),(e=>r(...l,e))):r(...l,a[c])};r()}))]})((()=>A)),P=(e,t,o)=>r(M(e),(([s,,n])=>{if(!l(n,t)){const i=I();if(x(e)!=q(e))b(i,t);else{let e=t;for(;!d(e)&&!l(i,e);)b(i,e),e=R(s,e)}if(o)return i;w(n,t,i)}return R(n,t)})),W=(e,t)=>r(M(e),(([,,e])=>w(e,t))),q=e=>R(t,e),A={setRelationshipDefinition:(e,s,n,c)=>(w(t,e,n),z(e,s,((t,s)=>{const n=I(),c=I(),f=I(),[u,L]=M(e);h(s,(([t,o],s)=>{d(t)||(b(c,t),r(R(L,t),(e=>{var o;p(e,s),(d(o=e)||0==(e=>e.size)(o))&&w(L,t)}))),d(o)||(b(c,o),l(L,o)||w(L,o,I()),b(R(L,o),s)),b(n,s),w(u,s,o),g(R(a,e),(t=>{l(P(e,t),s)&&b(f,t)}))})),t(),h(n,(t=>B(o,[e,t]))),h(c,(t=>B(i,[e,t]))),h(f,(t=>{W(e,t),B(a,[e,t])}))}),y(c)),A),delRelationshipDefinition:e=>(w(t,e),D(e),A),getStore:L,getRelationshipIds:k,forEachRelationship:t=>E((o=>t(o,(t=>e.forEachRow(x(o),t))))),hasRelationship:j,getLocalTableId:x,getRemoteTableId:q,getRemoteRowId:(e,t)=>R(M(e)?.[0],t),getLocalRowIds:(e,t)=>c(R(M(e)?.[1],t)),getLinkedRowIds:(e,t)=>d(M(e))?[t]:c(P(e,t,!0)),addRemoteRowIdListener:(e,t,s)=>_(s,o,[e,t]),addLocalRowIdsListener:(e,t,o)=>_(o,i,[e,t]),addLinkedRowIdsListener:(e,t,o)=>(P(e,t),_(o,a,[e,t])),delListener:e=>(W(...C(e)),A),destroy:O,getListenerStats:()=>({})};return m(A)}));e.createRelationships=k,Object.defineProperty(e,"__esModule",{value:!0})},"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).TinyBaseRelationships={});
1
+ var e,t;e=this,t=function(e){"use strict";const t=e=>typeof e,o=t(""),s=(e,t)=>e.forEach(t),n=e=>e.length,i=e=>0==n(e),a=e=>e.slice(1),d=e=>null==e,r=(e,t,o)=>d(e)?o?.():t(e),l=(e,t)=>e?.has(t)??!1,c=e=>[...e?.values()??[]],f=e=>e.clear(),h=(e,t)=>e?.forEach(t),p=(e,t)=>e?.delete(t),u=e=>new Map(e),R=(e,t)=>e?.get(t),g=(e,t)=>h(e,((e,o)=>t(o,e))),w=(e,t,o)=>d(o)?(p(e,t),e):e?.set(t,o),L=(e,t,o)=>(l(e,t)||w(e,t,o()),R(e,t)),I=e=>new Set(e),b=(e,t)=>e?.add(t),y=(e,s)=>t(e)==o?t=>t(e):e??(()=>s??""),v=(e,t,o)=>n(o)<2?b(i(o)?e:L(e,o[0],I),t):v(L(e,o[0],u),t,a(o)),T=e=>{const t=(o,n,...d)=>r(o,(o=>i(d)?e(o,n):s([d[0],null],(e=>t(R(o,e),n,...a(d))))));return t},m=Object.freeze,k=(e=>{const t=new WeakMap;return o=>(t.has(o)||t.set(o,e(o)),t.get(o))})((e=>{const t=u(),o=u(),i=u(),a=u(),[L,k,E,j,x,M,,S,z,D]=((e,t,o)=>{const n=e.hasRow,i=u(),a=u(),c=u(),p=u(),L=u(),b=t=>r(R(L,t),(o=>{h(o,e.delListener),w(L,t)})),y=e=>{w(i,e),w(a,e),w(c,e),w(p,e),b(e)};return[()=>e,()=>[...i?.keys()??[]],e=>g(a,e),e=>l(a,e),e=>R(i,e),e=>R(a,e),(e,t)=>w(a,e,t),(r,y,v,T,m)=>{const k=u(),E=u();w(i,r,y),l(a,r)||(w(a,r,t()),w(c,r,u()),w(p,r,u()));const j=R(c,r),x=R(p,r),M=t=>{const s=o=>e.getCell(y,t,o),i=R(j,t),a=n(y,t)?o(T(s,t)):void 0;if(i!=a&&w(k,t,[i,a]),!d(m)){const e=R(x,t),o=n(y,t)?m(s,t):void 0;e!=o&&w(E,t,o)}},S=e=>{v((()=>{h(k,(([,e],t)=>w(j,t,e))),h(E,((e,t)=>w(x,t,e)))}),k,E,j,x,e),f(k),f(E)};g(j,M),e.hasTable(y)&&s(e.getRowIds(y),(e=>{l(j,e)||M(e)})),S(!0),b(r),w(L,r,I([e.addRowListener(y,null,((e,t,o)=>M(o))),e.addTableListener(y,(()=>S()))]))},y,()=>g(L,y)]})(e,(()=>[u(),u(),u(),u()]),(e=>d(e)?void 0:e+"")),[O,_,B]=(e=>{let t,o=0;const i=[],a=u();return[(s,n,d=[])=>{t??=e();const r=i.pop()??""+o++;return w(a,r,[s,n,d]),v(n,r,d),r},(e,o=[],...s)=>T(h)(e,(e=>r(R(a,e),(([e])=>e(t,...o,...s)))),...o),e=>r(R(a,e),(([,t,o])=>(T(p)(t,e,...o),w(a,e),n(i)<1e3&&i.push(e),o)),(()=>[])),(e,o,i)=>r(R(a,e),(([e,,a])=>{const r=(...l)=>{const c=n(l);c==n(a)?e(t,...l,...i(l)):d(a[c])?s(o[c](...l),(e=>r(...l,e))):r(...l,a[c])};r()}))]})((()=>q)),C=(e,t,o)=>r(M(e),(([s,,n])=>{if(!l(n,t)){const i=I();if(x(e)!=W(e))b(i,t);else{let e=t;for(;!d(e)&&!l(i,e);)b(i,e),e=R(s,e)}if(o)return i;w(n,t,i)}return R(n,t)})),P=(e,t)=>r(M(e),(([,,e])=>w(e,t))),W=e=>R(t,e),q={setRelationshipDefinition:(e,s,n,c)=>(w(t,e,n),S(e,s,((t,s)=>{const n=I(),c=I(),f=I(),[u,L]=M(e);h(s,(([t,o],s)=>{d(t)||(b(c,t),r(R(L,t),(e=>{var o;p(e,s),(d(o=e)||0==(e=>e.size)(o))&&w(L,t)}))),d(o)||(b(c,o),l(L,o)||w(L,o,I()),b(R(L,o),s)),b(n,s),w(u,s,o),g(R(a,e),(t=>{l(C(e,t),s)&&b(f,t)}))})),t(),h(n,(t=>_(o,[e,t]))),h(c,(t=>_(i,[e,t]))),h(f,(t=>{P(e,t),_(a,[e,t])}))}),y(c)),q),delRelationshipDefinition:e=>(w(t,e),z(e),q),getStore:L,getRelationshipIds:k,forEachRelationship:t=>E((o=>t(o,(t=>e.forEachRow(x(o),t))))),hasRelationship:j,getLocalTableId:x,getRemoteTableId:W,getRemoteRowId:(e,t)=>R(M(e)?.[0],t),getLocalRowIds:(e,t)=>c(R(M(e)?.[1],t)),getLinkedRowIds:(e,t)=>d(M(e))?[t]:c(C(e,t,!0)),addRemoteRowIdListener:(e,t,s)=>O(s,o,[e,t]),addLocalRowIdsListener:(e,t,o)=>O(o,i,[e,t]),addLinkedRowIdsListener:(e,t,o)=>(C(e,t),O(o,a,[e,t])),delListener:e=>(P(...B(e)),q),destroy:D,getListenerStats:()=>({})};return m(q)}));e.createRelationships=k,Object.defineProperty(e,"__esModule",{value:!0})},"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).TinyBaseRelationships={});
Binary file
package/lib/umd/store.js CHANGED
@@ -1 +1 @@
1
- var e,t;e=this,t=function(e){"use strict";const t=e=>typeof e,s=t(""),n=t(!0),r=t(0),a=t(t),l="type",o="default",i=e=>[e,e],d=(e,t)=>e.forEach(t),c=e=>e.length,f=e=>0==c(e),u=e=>e.slice(1),h=(e,t)=>e.push(t),T=e=>JSON.stringify(e,((e,t)=>{return g(t,Map)?(s=[...t],n=(e,[t,s])=>(e[t]=s,e),r={},s.reduce(n,r)):t;var s,n,r})),b=JSON.parse,p=isFinite,g=(e,t)=>e instanceof t,y=e=>null==e,L=(e,t,s)=>y(e)?s?.():t(e),w=e=>e==s||e==n,R=(e,t)=>e?.has(t)??!1,C=e=>y(e)||0==(e=>e.size)(e),S=e=>e.clear(),v=(e,t)=>e?.forEach(t),I=(e,t)=>e?.delete(t),m=e=>new Map(e),E=(e=m)=>[e(),e()],J=e=>[...e?.keys()??[]],F=(e,t)=>e?.get(t),O=(e,t)=>v(e,((e,s)=>t(s,e))),j=(e,t,s)=>y(s)?(I(e,t),e):e?.set(t,s),x=(e,t,s)=>(R(e,t)||e.set(t,s()),F(e,t)),z=(e,t,s)=>{const n={},r=t??(e=>e);return v(e,((e,t)=>L(r(e),(e=>s?.(e)?0:n[t]=e)))),n},M=(e,t)=>{const s=m(),n=t??(e=>e);return v(e,((e,t)=>s.set(t,n(e)))),s},k=e=>M(e,M),N=Object,P=N.keys,_=N.isFrozen,B=N.freeze,D=(e,t)=>!y(((e,t)=>L(e,(e=>e[t])))(e,t)),W=(e,t)=>delete e[t],q=(e,t)=>d(N.entries(e),(([e,s])=>t(s,e))),A=e=>f(P(e)),G=e=>new Set(e),H=(e,t)=>e?.add(t),K=(e,t,s)=>c(s)<2?H(f(s)?e:x(e,s[0],G),t):K(x(e,s[0],m),t,u(s)),Q=e=>{const t=(s,n,...r)=>L(s,(s=>f(r)?e(s,n):d([r[0],null],(e=>t(F(s,e),n,...u(r))))));return t},U=(e,t,s,n=j)=>{const r=(a=J(e),l=e=>!D(t,e),a.filter(l));var a,l;return d(P(t),(n=>s(e,n,t[n]))),d(r,(t=>n(e,t))),e},V=e=>{const s=t(e);return w(s)||s==r&&p(e)?s:void 0},X=(e,t,s)=>y(e)||!(e=>g(e,N)&&e.constructor==N)(e)||A(e)||_(e)?(s?.(),!1):(q(e,((s,n)=>{t(s,n)||W(e,n)})),!A(e)),Y=(e,t,s)=>j(e,t,F(e,t)==-s?void 0:s);e.createStore=()=>{let e,s,n=0,f=0;const u=m(),p=m(),g=m(),N=m(),P=m(),_=m(),Z=m(),$=m(),ee=E(G),te=E(G),se=E(),ne=E(),re=E(),ae=E(),le=E(),oe=E(),ie=E(G),[de,ce,fe,ue]=(e=>{let t,s=0;const n=[],r=m();return[(a,l,o=[])=>{t??=e();const i=n.pop()??""+s++;return j(r,i,[a,l,o]),K(l,i,o),i},(e,s=[],...n)=>Q(v)(e,(e=>L(F(r,e),(([e])=>e(t,...s,...n)))),...s),e=>L(F(r,e),(([,t,s])=>(Q(I)(t,e,...s),j(r,e),c(n)<1e3&&h(n,e),s)),(()=>[])),(e,s,n)=>L(F(r,e),(([e,,r])=>{const a=(...l)=>{const o=c(l);o==c(r)?e(t,...l,...n(l)):y(r[o])?d(s[o](...l),(e=>a(...l,e))):a(...l,r[o])};a()}))]})((()=>Ve)),he=(t,s)=>(!e||R(_,s)||xe(s))&&X(t,((e,t)=>Te(s,t,e)),(()=>xe(s))),Te=(e,t,s,n)=>X(n?s:pe(s,e,t),((n,r)=>L(be(e,t,r,n),(e=>(s[r]=e,!0)),(()=>!1))),(()=>xe(e,t))),be=(t,s,n,r)=>e?L(F(F(_,t),n),(e=>V(r)!=e.type?xe(t,s,n,r,e.default):r),(()=>xe(t,s,n,r))):y(V(r))?xe(t,s,n,r):r,pe=(e,t,s)=>(L(F(Z,t),(([n,r])=>{v(n,((t,s)=>{D(e,s)||(e[s]=t)})),v(r,(n=>{D(e,n)||xe(t,s,n)}))})),e),ge=e=>U(_,e,((e,t,s)=>{const n=m(),r=G();U(x(_,t,m),s,((e,t,s)=>{j(e,t,s),L(s.default,(e=>j(n,t,e)),(()=>H(r,t)))})),j(Z,t,[n,r])}),((e,t)=>{j(_,t),j(Z,t)})),ye=e=>U($,e,((e,t,s)=>Le(t,s)),((e,t)=>Ie(t))),Le=(e,t)=>U(x($,e,(()=>(Je(e,1),m()))),t,((t,s,n)=>we(e,t,s,n)),((t,s)=>me(e,t,s))),we=(e,t,s,n,r)=>U(x(t,s,(()=>(Fe(e,s,1),m()))),n,((t,n,r)=>Re(e,s,t,n,r)),((n,a)=>Ee(e,t,s,n,a,r))),Re=(e,t,s,n,r)=>{R(s,n)||Oe(e,t,n,1);const a=F(s,n);r!==a&&(je(e,t,n,a,r),j(s,n,r))},Ce=(e,t,s,n,r)=>L(F(t,s),(t=>Re(e,s,t,n,r)),(()=>we(e,t,s,pe({[n]:r},e,s)))),Se=e=>{const t=""+n++;return R(e,t)?Se(e):t},ve=e=>F($,e)??Le(e,{}),Ie=e=>Le(e,{}),me=(e,t,s)=>we(e,t,s,{},!0),Ee=(e,t,s,n,r,a)=>{const l=F(F(Z,e)?.[0],r);if(!y(l)&&!a)return Re(e,s,n,r,l);const o=t=>{je(e,s,t,F(n,t)),Oe(e,s,t,-1),j(n,t)};y(l)?o(r):O(n,o),C(n)&&(Fe(e,s,-1),C(j(t,s))&&(Je(e,-1),j($,e)))},Je=(e,t)=>Y(u,e,t),Fe=(e,t,s)=>Y(x(p,e,m),t,s),Oe=(e,t,s,n)=>Y(x(x(g,e,m),t,m),s,n),je=(e,t,s,n,r)=>x(x(x(N,e,m),t,m),s,(()=>[n,0]))[1]=r,xe=(e,t,s,n,r)=>(h(x(x(x(P,e,m),t,m),s,(()=>[])),n),r),ze=(e,t,s)=>L(F(F(F(N,e),t),s),(([e,t])=>[!0,e,t]),(()=>[!1,...i(We(e,t,s))])),Me=e=>C(P)||C(oe[e])?0:v(e?M(P,k):P,((t,s)=>v(t,((t,n)=>v(t,((t,r)=>ce(oe[e],[s,n,r],t))))))),ke=e=>{const t=C(ae[e])&&C(ne[e])&&C(te[e]),s=C(le[e])&&C(re[e])&&C(se[e])&&C(ee[e]);if(!t||!s){const n=e?[M(u),k(p),M(g,k),M(N,k)]:[u,p,g,N];if(t||(v(n[2],((t,s)=>v(t,((t,n)=>{C(t)||ce(ae[e],[s,n])})))),v(n[1],((t,s)=>{C(t)||ce(ne[e],[s])})),C(n[0])||ce(te[e])),!s){let t;v(n[3],((s,n)=>{let r;v(s,((s,a)=>{let l;v(s,(([s,o],i)=>{o!==s&&(ce(le[e],[n,a,i],o,s,ze),t=r=l=1)})),l&&ce(re[e],[n,a],ze)})),r&&ce(se[e],[n],ze)})),t&&ce(ee[e],[],ze)}}},Ne=e=>(Ke(e),Ve),Pe=()=>z($,(e=>z(e,z))),_e=()=>J($),Be=e=>J(F($,e)),De=(e,t)=>J(F(F($,e),t)),We=(e,t,s)=>F(F(F($,e),t),s),qe=e=>Ne((()=>(e=>X(e,he,xe))(e)?ye(e):0)),Ae=(e,s,n,r)=>Ne((()=>L(be(e,s,n,t(r)==a?r(We(e,s,n)):r),(t=>Ce(e,ve(e),s,n,t))))),Ge=()=>Ne((()=>ye({}))),He=(e,t,s,n)=>Ne((()=>L(F($,e),(r=>L(F(r,t),(a=>R(a,s)?Ee(e,r,t,a,s,n):0)))))),Ke=(e,t)=>{if(-1==f)return;Qe();const s=e?.();return Ue(t),s},Qe=()=>(f++,Ve),Ue=e=>(f>0&&(f--,0==f&&(s=!C(N),f=1,Me(1),s&&ke(1),f=-1,e?.(z(N,(e=>z(e,(e=>z(e,(e=>[...e]),(([e,t])=>e===t))),A)),A),z(P,(e=>z(e,z))))&&(f=1,v(N,((e,t)=>v(e,((e,s)=>v(e,(([e],n)=>y(e)?He(t,s,n,!0):Ae(t,s,n,e))))))),f=-1,s=!1),ce(ie[0],[],s),Me(0),s&&ke(0),ce(ie[1],[],s),f=0,d([N,P,u,p,g],S))),Ve),Ve={getTables:Pe,getTableIds:_e,getTable:e=>z(F($,e),z),getRowIds:Be,getRow:(e,t)=>z(F(F($,e),t)),getCellIds:De,getCell:We,hasTables:()=>!C($),hasTable:e=>R($,e),hasRow:(e,t)=>R(F($,e),t),hasCell:(e,t,s)=>R(F(F($,e),t),s),getJson:()=>T($),getSchemaJson:()=>T(_),setTables:qe,setTable:(e,t)=>Ne((()=>he(t,e)?Le(e,t):0)),setRow:(e,t,s)=>Ne((()=>Te(e,t,s)?we(e,ve(e),t,s):0)),addRow:(e,t)=>Ke((()=>{let s;return Te(e,s,t)&&we(e,ve(e),s=Se(F($,e)),t),s})),setPartialRow:(e,t,s)=>Ne((()=>{if(Te(e,t,s,1)){const n=ve(e);q(s,((s,r)=>Ce(e,n,t,r,s)))}})),setCell:Ae,setJson:e=>{try{"{}"===e?Ge():qe(b(e))}catch{}return Ve},setSchema:t=>Ne((()=>{if((e=(e=>X(e,(e=>X(e,(e=>{if(!X(e,((e,t)=>[l,o].includes(t))))return!1;const t=e.type;return!(!w(t)&&t!=r||(V(e.default)!=t&&W(e,o),0))})))))(t))&&(ge(t),!C($))){const e=Pe();Ge(),qe(e)}})),delTables:Ge,delTable:e=>Ne((()=>R($,e)?Ie(e):0)),delRow:(e,t)=>Ne((()=>L(F($,e),(s=>R(s,t)?me(e,s,t):0)))),delCell:He,delSchema:()=>Ne((()=>{ge({}),e=!1})),transaction:Ke,startTransaction:Qe,finishTransaction:Ue,forEachTable:e=>v($,((t,s)=>e(s,(e=>v(t,((t,s)=>e(s,(e=>O(t,e))))))))),forEachRow:(e,t)=>v(F($,e),((e,s)=>t(s,(t=>O(e,t))))),forEachCell:(e,t,s)=>O(F(F($,e),t),s),addTablesListener:(e,t)=>de(e,ee[t?1:0]),addTableIdsListener:(e,t)=>de(e,te[t?1:0]),addTableListener:(e,t,s)=>de(t,se[s?1:0],[e]),addRowIdsListener:(e,t,s)=>de(t,ne[s?1:0],[e]),addRowListener:(e,t,s,n)=>de(s,re[n?1:0],[e,t]),addCellIdsListener:(e,t,s,n)=>de(s,ae[n?1:0],[e,t]),addCellListener:(e,t,s,n,r)=>de(n,le[r?1:0],[e,t,s]),addInvalidCellListener:(e,t,s,n,r)=>de(n,oe[r?1:0],[e,t,s]),addWillFinishTransactionListener:e=>de(e,ie[0]),addDidFinishTransactionListener:e=>de(e,ie[1]),callListener:e=>(ue(e,[_e,Be,De],(e=>y(e[2])?[]:i(We(...e)))),Ve),delListener:e=>(fe(e),Ve),getListenerStats:()=>({})};return B(Ve)},Object.defineProperty(e,"__esModule",{value:!0})},"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).TinyBaseStore={});
1
+ var e,t;e=this,t=function(e){"use strict";const t=e=>typeof e,s=t(""),n=t(!0),r=t(0),a=t(t),l="type",o="default",i=e=>[e,e],d=(e,t)=>e.forEach(t),c=e=>e.length,u=e=>0==c(e),f=e=>e.slice(1),h=(e,t)=>e.push(t),T=e=>JSON.stringify(e,((e,t)=>{return g(t,Map)?(s=[...t],n=(e,[t,s])=>(e[t]=s,e),r={},s.reduce(n,r)):t;var s,n,r})),p=JSON.parse,b=isFinite,g=(e,t)=>e instanceof t,y=e=>null==e,L=(e,t,s)=>y(e)?s?.():t(e),w=e=>e==s||e==n,R=(e,t)=>e?.has(t)??!1,C=e=>y(e)||0==(e=>e.size)(e),S=e=>e.clear(),v=(e,t)=>e?.forEach(t),I=(e,t)=>e?.delete(t),m=e=>new Map(e),E=(e=m)=>[e(),e()],J=e=>[...e?.keys()??[]],F=(e,t)=>e?.get(t),O=(e,t)=>v(e,((e,s)=>t(s,e))),j=(e,t,s)=>y(s)?(I(e,t),e):e?.set(t,s),x=(e,t,s)=>(R(e,t)||j(e,t,s()),F(e,t)),z=(e,t,s)=>{const n={},r=t??(e=>e);return v(e,((e,t)=>L(r(e),(e=>s?.(e)?0:n[t]=e)))),n},M=(e,t)=>{const s=m(),n=t??(e=>e);return v(e,((e,t)=>s.set(t,n(e)))),s},k=e=>M(e,M),N=Object,P=N.keys,_=N.isFrozen,B=N.freeze,D=(e,t)=>!y(((e,t)=>L(e,(e=>e[t])))(e,t)),W=(e,t)=>delete e[t],q=(e,t)=>d(N.entries(e),(([e,s])=>t(s,e))),A=e=>u(P(e)),G=e=>new Set(e),H=(e,t)=>e?.add(t),K=(e,t,s)=>c(s)<2?H(u(s)?e:x(e,s[0],G),t):K(x(e,s[0],m),t,f(s)),Q=e=>{const t=(s,n,...r)=>L(s,(s=>u(r)?e(s,n):d([r[0],null],(e=>t(F(s,e),n,...f(r))))));return t},U=e=>""+e,V=(e,t,s,n=j)=>{const r=(a=J(e),l=e=>!D(t,e),a.filter(l));var a,l;return d(P(t),(n=>s(e,n,t[n]))),d(r,(t=>n(e,t))),e},X=e=>{const s=t(e);return w(s)||s==r&&b(e)?s:void 0},Y=(e,t,s)=>y(e)||!(e=>g(e,N)&&e.constructor==N)(e)||A(e)||_(e)?(s?.(),!1):(q(e,((s,n)=>{t(s,n)||W(e,n)})),!A(e)),Z=(e,t,s)=>j(e,t,F(e,t)==-s?void 0:s);e.createStore=()=>{let e,s,n=0,u=0;const f=m(),b=m(),g=m(),N=m(),P=m(),_=m(),$=m(),ee=m(),te=E(G),se=E(G),ne=E(),re=E(),ae=E(),le=E(),oe=E(),ie=E(),de=E(G),[ce,ue,fe,he]=(e=>{let t,s=0;const n=[],r=m();return[(a,l,o=[])=>{t??=e();const i=n.pop()??""+s++;return j(r,i,[a,l,o]),K(l,i,o),i},(e,s=[],...n)=>Q(v)(e,(e=>L(F(r,e),(([e])=>e(t,...s,...n)))),...s),e=>L(F(r,e),(([,t,s])=>(Q(I)(t,e,...s),j(r,e),c(n)<1e3&&h(n,e),s)),(()=>[])),(e,s,n)=>L(F(r,e),(([e,,r])=>{const a=(...l)=>{const o=c(l);o==c(r)?e(t,...l,...n(l)):y(r[o])?d(s[o](...l),(e=>a(...l,e))):a(...l,r[o])};a()}))]})((()=>Xe)),Te=(t,s)=>(!e||R(_,s)||ze(s))&&Y(t,((e,t)=>pe(s,t,e)),(()=>ze(s))),pe=(e,t,s,n)=>Y(n?s:ge(s,e,t),((n,r)=>L(be(e,t,r,n),(e=>(s[r]=e,!0)),(()=>!1))),(()=>ze(e,t))),be=(t,s,n,r)=>e?L(F(F(_,t),n),(e=>X(r)!=e.type?ze(t,s,n,r,e.default):r),(()=>ze(t,s,n,r))):y(X(r))?ze(t,s,n,r):r,ge=(e,t,s)=>(L(F($,t),(([n,r])=>{v(n,((t,s)=>{D(e,s)||(e[s]=t)})),v(r,(n=>{D(e,n)||ze(t,s,n)}))})),e),ye=e=>V(_,e,((e,t,s)=>{const n=m(),r=G();V(x(_,t,m),s,((e,t,s)=>{j(e,t,s),L(s.default,(e=>j(n,t,e)),(()=>H(r,t)))})),j($,t,[n,r])}),((e,t)=>{j(_,t),j($,t)})),Le=e=>V(ee,e,((e,t,s)=>we(t,s)),((e,t)=>me(t))),we=(e,t)=>V(x(ee,e,(()=>(Fe(e,1),m()))),t,((t,s,n)=>Re(e,t,s,n)),((t,s)=>Ee(e,t,s))),Re=(e,t,s,n,r)=>V(x(t,s,(()=>(Oe(e,s,1),m()))),n,((t,n,r)=>Ce(e,s,t,n,r)),((n,a)=>Je(e,t,s,n,a,r))),Ce=(e,t,s,n,r)=>{R(s,n)||je(e,t,n,1);const a=F(s,n);r!==a&&(xe(e,t,n,a,r),j(s,n,r))},Se=(e,t,s,n,r)=>L(F(t,s),(t=>Ce(e,s,t,n,r)),(()=>Re(e,t,s,ge({[n]:r},e,s)))),ve=e=>{const t=""+n++;return R(e,t)?ve(e):t},Ie=e=>F(ee,e)??we(e,{}),me=e=>we(e,{}),Ee=(e,t,s)=>Re(e,t,s,{},!0),Je=(e,t,s,n,r,a)=>{const l=F(F($,e)?.[0],r);if(!y(l)&&!a)return Ce(e,s,n,r,l);const o=t=>{xe(e,s,t,F(n,t)),je(e,s,t,-1),j(n,t)};y(l)?o(r):O(n,o),C(n)&&(Oe(e,s,-1),C(j(t,s))&&(Fe(e,-1),j(ee,e)))},Fe=(e,t)=>Z(f,e,t),Oe=(e,t,s)=>Z(x(b,e,m),t,s),je=(e,t,s,n)=>Z(x(x(g,e,m),t,m),s,n),xe=(e,t,s,n,r)=>x(x(x(N,e,m),t,m),s,(()=>[n,0]))[1]=r,ze=(e,t,s,n,r)=>(h(x(x(x(P,e,m),t,m),s,(()=>[])),n),r),Me=(e,t,s)=>L(F(F(F(N,e),t),s),(([e,t])=>[!0,e,t]),(()=>[!1,...i(qe(e,t,s))])),ke=e=>C(P)||C(ie[e])?0:v(e?M(P,k):P,((t,s)=>v(t,((t,n)=>v(t,((t,r)=>ue(ie[e],[s,n,r],t))))))),Ne=e=>{const t=C(le[e])&&C(re[e])&&C(se[e]),s=C(oe[e])&&C(ae[e])&&C(ne[e])&&C(te[e]);if(!t||!s){const n=e?[M(f),k(b),M(g,k),M(N,k)]:[f,b,g,N];if(t||(v(n[2],((t,s)=>v(t,((t,n)=>{C(t)||ue(le[e],[s,n])})))),v(n[1],((t,s)=>{C(t)||ue(re[e],[s])})),C(n[0])||ue(se[e])),!s){let t;v(n[3],((s,n)=>{let r;v(s,((s,a)=>{let l;v(s,(([s,o],i)=>{o!==s&&(ue(oe[e],[n,a,i],o,s,Me),t=r=l=1)})),l&&ue(ae[e],[n,a],Me)})),r&&ue(ne[e],[n],Me)})),t&&ue(te[e],[],Me)}}},Pe=(e,...t)=>(Qe((()=>{return e(...(s=t,n=U,s.map(n)));var s,n})),Xe),_e=()=>z(ee,(e=>z(e,z))),Be=()=>J(ee),De=e=>J(F(ee,U(e))),We=(e,t)=>J(F(F(ee,U(e)),U(t))),qe=(e,t,s)=>F(F(F(ee,U(e)),U(t)),U(s)),Ae=e=>Pe((()=>(e=>Y(e,Te,ze))(e)?Le(e):0)),Ge=(e,s,n,r)=>Pe(((e,s,n)=>L(be(e,s,n,t(r)==a?r(qe(e,s,n)):r),(t=>Se(e,Ie(e),s,n,t)))),e,s,n),He=()=>Pe((()=>Le({}))),Ke=(e,t,s,n)=>Pe(((e,t,s)=>L(F(ee,e),(r=>L(F(r,t),(a=>R(a,s)?Je(e,r,t,a,s,n):0))))),e,t,s),Qe=(e,t)=>{if(-1==u)return;Ue();const s=e?.();return Ve(t),s},Ue=()=>(u++,Xe),Ve=e=>(u>0&&(u--,0==u&&(s=!C(N),u=1,ke(1),s&&Ne(1),u=-1,e?.(z(N,(e=>z(e,(e=>z(e,(e=>[...e]),(([e,t])=>e===t))),A)),A),z(P,(e=>z(e,z))))&&(u=1,v(N,((e,t)=>v(e,((e,s)=>v(e,(([e],n)=>y(e)?Ke(t,s,n,!0):Ge(t,s,n,e))))))),u=-1,s=!1),ue(de[0],[],s),ke(0),s&&Ne(0),ue(de[1],[],s),u=0,d([N,P,f,b,g],S))),Xe),Xe={getTables:_e,getTableIds:Be,getTable:e=>z(F(ee,U(e)),z),getRowIds:De,getRow:(e,t)=>z(F(F(ee,U(e)),U(t))),getCellIds:We,getCell:qe,hasTables:()=>!C(ee),hasTable:e=>R(ee,U(e)),hasRow:(e,t)=>R(F(ee,U(e)),U(t)),hasCell:(e,t,s)=>R(F(F(ee,U(e)),U(t)),U(s)),getJson:()=>T(ee),getSchemaJson:()=>T(_),setTables:Ae,setTable:(e,t)=>Pe((e=>Te(t,e)?we(e,t):0),e),setRow:(e,t,s)=>Pe(((e,t)=>pe(U(e),U(t),s)?Re(U(e),Ie(U(e)),U(t),s):0),e,t),addRow:(e,t)=>Qe((()=>{let s;return pe(e,s,t)&&(e=U(e),Re(e,Ie(e),s=ve(F(ee,e)),t)),s})),setPartialRow:(e,t,s)=>Pe(((e,t)=>{if(pe(e,t,s,1)){const n=Ie(e);q(s,((s,r)=>Se(e,n,t,r,s)))}}),e,t),setCell:Ge,setJson:e=>{try{"{}"===e?He():Ae(p(e))}catch{}return Xe},setSchema:t=>Pe((()=>{if((e=(e=>Y(e,(e=>Y(e,(e=>{if(!Y(e,((e,t)=>[l,o].includes(t))))return!1;const t=e.type;return!(!w(t)&&t!=r||(X(e.default)!=t&&W(e,o),0))})))))(t))&&(ye(t),!C(ee))){const e=_e();He(),Ae(e)}})),delTables:He,delTable:e=>Pe((e=>R(ee,e)?me(e):0),e),delRow:(e,t)=>Pe(((e,t)=>L(F(ee,e),(s=>R(s,t)?Ee(e,s,t):0))),e,t),delCell:Ke,delSchema:()=>Pe((()=>{ye({}),e=!1})),transaction:Qe,startTransaction:Ue,finishTransaction:Ve,forEachTable:e=>v(ee,((t,s)=>e(s,(e=>v(t,((t,s)=>e(s,(e=>O(t,e))))))))),forEachRow:(e,t)=>v(F(ee,U(e)),((e,s)=>t(s,(t=>O(e,t))))),forEachCell:(e,t,s)=>O(F(F(ee,U(e)),U(t)),s),addTablesListener:(e,t)=>ce(e,te[t?1:0]),addTableIdsListener:(e,t)=>ce(e,se[t?1:0]),addTableListener:(e,t,s)=>ce(t,ne[s?1:0],[e]),addRowIdsListener:(e,t,s)=>ce(t,re[s?1:0],[e]),addRowListener:(e,t,s,n)=>ce(s,ae[n?1:0],[e,t]),addCellIdsListener:(e,t,s,n)=>ce(s,le[n?1:0],[e,t]),addCellListener:(e,t,s,n,r)=>ce(n,oe[r?1:0],[e,t,s]),addInvalidCellListener:(e,t,s,n,r)=>ce(n,ie[r?1:0],[e,t,s]),addWillFinishTransactionListener:e=>ce(e,de[0]),addDidFinishTransactionListener:e=>ce(e,de[1]),callListener:e=>(he(e,[Be,De,We],(e=>y(e[2])?[]:i(qe(...e)))),Xe),delListener:e=>(fe(e),Xe),getListenerStats:()=>({})};return B(Xe)},Object.defineProperty(e,"__esModule",{value:!0})},"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).TinyBaseStore={});
Binary file
@@ -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),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)||K(e,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=e=>n+e,pe=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)})),we=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]]]),ve=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(we,n)??H(we,"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)})),Ie=(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)},ye="storage",Se=globalThis.window,Te=(e,t,s)=>{let n;return Ie(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}))},Re=e=>e.headers.get("ETag"),be=te((e=>{const t=W(),s=W(),o=W(),r=W(),[a,i,d,l,c,u,,f,h,g]=$(e,(()=>[W(),W(),W(),W()]),(e=>M(e)?void 0:e+n)),[L,p,w]=oe((()=>S)),v=(e,t,s)=>x(u(e),(([n,,o])=>{if(!J(o,t)){const r=Y();if(c(e)!=y(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)})),I=(e,t)=>x(u(e),(([,,e])=>K(e,t))),y=e=>H(t,e),S={setRelationshipDefinition:(e,n,a,i)=>(K(t,e,a),f(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(v(e,t),n)&&Z(d,t)}))})),t(),N(a,(t=>p(s,[e,t]))),N(i,(t=>p(o,[e,t]))),N(d,(t=>{I(e,t),p(r,[e,t])}))}),ee(i)),S),delRelationshipDefinition:e=>(K(t,e),h(e),S),getStore:a,getRelationshipIds:i,forEachRelationship:t=>d((s=>t(s,(t=>e.forEachRow(c(s),t))))),hasRelationship:l,getLocalTableId:c,getRemoteTableId:y,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(v(e,t,!0)),addRemoteRowIdListener:(e,t,n)=>L(n,s,[e,t]),addLocalRowIdsListener:(e,t,s)=>L(s,o,[e,t]),addLinkedRowIdsListener:(e,t,s)=>(v(e,t),L(s,r,[e,t])),delListener:e=>(I(...w(e)),S),destroy:g,getListenerStats:()=>({})};return de(S)})),Ce=(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},me=e=>{const t=s(e);return A(t)||t==a&&k(e)?t:void 0},ke=(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)),Ee=(e,t,s)=>K(e,t,H(e,t)==-s?void 0:s);e.createCheckpoints=he,e.createCustomPersister=Ie,e.createFilePersister=(e,s)=>{let n;return Ie(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=pe,e.createLocalPersister=(e,t)=>Te(e,t,localStorage),e.createMetrics=ve,e.createRelationships=be,e.createRemotePersister=(e,t,s,n)=>{let o,r;return Ie(e,(async()=>{const e=await fetch(t);return r=Re(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=Re(s);M(r)||M(n)||n==r||(r=n,e())}),1e3*n)}),(()=>{x(o,clearInterval),o=void 0}))},e.createSessionPersister=(e,t)=>Te(e,t,sessionStorage),e.createStore=()=>{let e,t,s=0,o=0;const r=W(),i=W(),c=W(),h=W(),g=W(),p=W(),w=W(),v=W(),I=_(Y),y=_(Y),T=_(),C=_(),m=_(),k=_(),E=_(),F=_(),P=_(Y),[j,B,$,ee]=oe((()=>Ue)),te=(t,s)=>(!e||J(p,s)||Ae(s))&&ke(t,((e,t)=>se(s,t,e)),(()=>Ae(s))),se=(e,t,s,n)=>ke(n?s:re(s,e,t),((n,o)=>x(ne(e,t,o,n),(e=>(s[o]=e,!0)),(()=>!1))),(()=>Ae(e,t))),ne=(t,s,n,o)=>e?x(H(H(p,t),n),(e=>me(o)!=e.type?Ae(t,s,n,o,e.default):o),(()=>Ae(t,s,n,o))):M(me(o))?Ae(t,s,n,o):o,re=(e,t,s)=>(x(H(w,t),(([n,o])=>{N(n,((t,s)=>{le(e,s)||(e[s]=t)})),N(o,(n=>{le(e,n)||Ae(t,s,n)}))})),e),ae=e=>Ce(p,e,((e,t,s)=>{const n=W(),o=Y();Ce(Q(p,t,W),s,((e,t,s)=>{K(e,t,s),x(s.default,(e=>K(n,t,e)),(()=>Z(o,t)))})),K(w,t,[n,o])}),((e,t)=>{K(p,t),K(w,t)})),ie=e=>Ce(v,e,((e,t,s)=>he(t,s)),((e,t)=>ye(t))),he=(e,t)=>Ce(Q(v,e,(()=>(Re(e,1),W()))),t,((t,s,n)=>ge(e,t,s,n)),((t,s)=>Se(e,t,s))),ge=(e,t,s,n,o)=>Ce(Q(t,s,(()=>(be(e,s,1),W()))),n,((t,n,o)=>pe(e,s,t,n,o)),((n,r)=>Te(e,t,s,n,r,o))),pe=(e,t,s,n,o)=>{J(s,n)||Me(e,t,n,1);const r=H(s,n);o!==r&&(xe(e,t,n,r,o),K(s,n,o))},we=(e,t,s,n,o)=>x(H(t,s),(t=>pe(e,s,t,n,o)),(()=>ge(e,t,s,re({[n]:o},e,s)))),ve=e=>{const t=n+s++;return J(e,t)?ve(e):t},Ie=e=>H(v,e)??he(e,{}),ye=e=>he(e,{}),Se=(e,t,s)=>ge(e,t,s,{},!0),Te=(e,t,s,n,o,r)=>{const a=H(H(w,e)?.[0],o);if(!M(a)&&!r)return pe(e,s,n,o,a);const i=t=>{xe(e,s,t,H(n,t)),Me(e,s,t,-1),K(n,t)};M(a)?i(o):G(n,i),O(n)&&(be(e,s,-1),O(K(t,s))&&(Re(e,-1),K(v,e)))},Re=(e,t)=>Ee(r,e,t),be=(e,t,s)=>Ee(Q(i,e,W),t,s),Me=(e,t,s,n)=>Ee(Q(Q(c,e,W),t,W),s,n),xe=(e,t,s,n,o)=>Q(Q(Q(h,e,W),t,W),s,(()=>[n,0]))[1]=o,Ae=(e,t,s,n,o)=>(S(Q(Q(Q(g,e,W),t,W),s,(()=>[])),n),o),De=(e,t,s)=>x(H(H(H(h,e),t),s),(([e,t])=>[!0,e,t]),(()=>[!1,...u(Be(e,t,s))])),Fe=e=>O(g)||O(F[e])?0:N(e?V(g,X):g,((t,s)=>N(t,((t,n)=>N(t,((t,o)=>B(F[e],[s,n,o],t))))))),Pe=e=>{const t=O(k[e])&&O(C[e])&&O(y[e]),s=O(E[e])&&O(m[e])&&O(T[e])&&O(I[e]);if(!t||!s){const n=e?[V(r),X(i),V(c,X),V(h,X)]:[r,i,c,h];if(t||(N(n[2],((t,s)=>N(t,((t,n)=>{O(t)||B(k[e],[s,n])})))),N(n[1],((t,s)=>{O(t)||B(C[e],[s])})),O(n[0])||B(y[e])),!s){let t;N(n[3],((s,n)=>{let o;N(s,((s,r)=>{let a;N(s,(([s,i],d)=>{i!==s&&(B(E[e],[n,r,d],i,s,De),t=o=a=1)})),a&&B(m[e],[n,r],De)})),o&&B(T[e],[n],De)})),t&&B(I[e],[],De)}}},Je=(e,...t)=>(Ge((()=>{return e(...(s=t,n=Le,s.map(n)));var s,n})),Ue),Oe=()=>U(v,(e=>U(e,U))),je=()=>q(v),ze=e=>q(H(v,Le(e))),Ne=(e,t)=>q(H(H(v,Le(e)),Le(t))),Be=(e,t,s)=>H(H(H(v,Le(e)),Le(t)),Le(s)),We=e=>Je((()=>(e=>ke(e,te,Ae))(e)?ie(e):0)),_e=(e,t,s,n)=>Je(((e,t,s)=>x(ne(e,t,s,D(n)?n(Be(e,t,s)):n),(n=>we(e,Ie(e),t,s,n)))),e,t,s),qe=()=>Je((()=>ie({}))),He=(e,t,s,n)=>Je(((e,t,s)=>x(H(v,e),(o=>x(H(o,t),(r=>J(r,s)?Te(e,o,t,r,s,n):0))))),e,t,s),Ge=(e,t)=>{if(-1==o)return;Ke();const s=e?.();return Qe(t),s},Ke=()=>(o++,Ue),Qe=e=>(o>0&&(o--,0==o&&(t=!O(h),o=1,Fe(1),t&&Pe(1),o=-1,e?.(U(h,(e=>U(e,(e=>U(e,(e=>[...e]),(([e,t])=>e===t))),fe)),fe),U(g,(e=>U(e,U))))&&(o=1,N(h,((e,t)=>N(e,((e,s)=>N(e,(([e],n)=>M(e)?He(t,s,n,!0):_e(t,s,n,e))))))),o=-1,t=!1),B(P[0],[],t),Fe(0),t&&Pe(0),B(P[1],[],t),o=0,L([h,g,r,i,c],z))),Ue),Ue={getTables:Oe,getTableIds:je,getTable:e=>U(H(v,Le(e)),U),getRowIds:ze,getRow:(e,t)=>U(H(H(v,Le(e)),Le(t))),getCellIds:Ne,getCell:Be,hasTables:()=>!O(v),hasTable:e=>J(v,Le(e)),hasRow:(e,t)=>J(H(v,Le(e)),Le(t)),hasCell:(e,t,s)=>J(H(H(v,Le(e)),Le(t)),Le(s)),getJson:()=>R(v),getSchemaJson:()=>R(p),setTables:We,setTable:(e,t)=>Je((e=>te(t,e)?he(e,t):0),e),setRow:(e,t,s)=>Je(((e,t)=>se(Le(e),Le(t),s)?ge(Le(e),Ie(Le(e)),Le(t),s):0),e,t),addRow:(e,t)=>Ge((()=>{let s;return se(e,s,t)&&(e=Le(e),ge(e,Ie(e),s=ve(H(v,e)),t)),s})),setPartialRow:(e,t,s)=>Je(((e,t)=>{if(se(e,t,s,1)){const n=Ie(e);ue(s,((s,o)=>we(e,n,t,o,s)))}}),e,t),setCell:_e,setJson:e=>{try{"{}"===e?qe():We(b(e))}catch{}return Ue},setSchema:t=>Je((()=>{if((e=(e=>ke(e,(e=>ke(e,(e=>{if(!ke(e,((e,t)=>f([d,l],t))))return!1;const t=e.type;return!(!A(t)&&t!=a||(me(e.default)!=t&&ce(e,l),0))})))))(t))&&(ae(t),!O(v))){const e=Oe();qe(),We(e)}})),delTables:qe,delTable:e=>Je((e=>J(v,e)?ye(e):0),e),delRow:(e,t)=>Je(((e,t)=>x(H(v,e),(s=>J(s,t)?Se(e,s,t):0))),e,t),delCell:He,delSchema:()=>Je((()=>{ae({}),e=!1})),transaction:Ge,startTransaction:Ke,finishTransaction:Qe,forEachTable:e=>N(v,((t,s)=>e(s,(e=>N(t,((t,s)=>e(s,(e=>G(t,e))))))))),forEachRow:(e,t)=>N(H(v,Le(e)),((e,s)=>t(s,(t=>G(e,t))))),forEachCell:(e,t,s)=>G(H(H(v,Le(e)),Le(t)),s),addTablesListener:(e,t)=>j(e,I[t?1:0]),addTableIdsListener:(e,t)=>j(e,y[t?1:0]),addTableListener:(e,t,s)=>j(t,T[s?1:0],[e]),addRowIdsListener:(e,t,s)=>j(t,C[s?1:0],[e]),addRowListener:(e,t,s,n)=>j(s,m[n?1:0],[e,t]),addCellIdsListener:(e,t,s,n)=>j(s,k[n?1:0],[e,t]),addCellListener:(e,t,s,n,o)=>j(n,E[o?1:0],[e,t,s]),addInvalidCellListener:(e,t,s,n,o)=>j(n,F[o?1:0],[e,t,s]),addWillFinishTransactionListener:e=>j(e,P[0]),addDidFinishTransactionListener:e=>j(e,P[1]),callListener:e=>(ee(e,[je,ze,Ne],(e=>M(e[2])?[]:u(Be(...e)))),Ue),delListener:e=>($(e),Ue),getListenerStats:()=>({})};return de(Ue)},e.defaultSorter=ge,e.id=Le,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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tinybase",
3
- "version": "1.3.3",
3
+ "version": "1.3.6",
4
4
  "author": "jamesgpearce",
5
5
  "repository": "github:tinyplex/tinybase",
6
6
  "license": "MIT",
@@ -58,16 +58,16 @@
58
58
  "publishPackage": "gulp publishPackage"
59
59
  },
60
60
  "devDependencies": {
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",
61
+ "@babel/cli": "^7.18.10",
62
+ "@babel/core": "^7.18.10",
63
+ "@babel/preset-env": "^7.18.10",
64
+ "@babel/preset-react": "^7.18.6",
65
+ "@babel/preset-typescript": "^7.18.6",
66
66
  "@rollup/plugin-replace": "^4.0.0",
67
67
  "@types/asciichart": "^1.5.6",
68
- "@types/expect-puppeteer": "^4.4.7",
68
+ "@types/expect-puppeteer": "^5.0.1",
69
69
  "@types/http-server": "^0.12.1",
70
- "@types/jest": "^27.5.0",
70
+ "@types/jest": "^28.1.6",
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.33.0",
79
+ "@typescript-eslint/parser": "^5.33.0",
80
80
  "asciichart": "^1.5.25",
81
81
  "babel-eslint": "^10.1.0",
82
- "babel-jest": "^28.1.0",
82
+ "babel-jest": "^28.1.3",
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.6.0",
86
+ "esbuild": "^0.14.54",
87
+ "eslint": "^8.21.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",
92
- "eslint-plugin-react-hooks": "^4.5.0",
89
+ "eslint-plugin-jest": "^26.8.2",
90
+ "eslint-plugin-jsdoc": "^39.3.6",
91
+ "eslint-plugin-react": "^7.30.1",
92
+ "eslint-plugin-react-hooks": "^4.6.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.3",
97
+ "jest-environment-jsdom": "^28.1.3",
98
98
  "jest-fetch-mock": "^3.0.3",
99
- "jest-puppeteer": "^6.1.0",
100
- "less": "^4.1.2",
101
- "prettier": "^2.6.2",
102
- "puppeteer": "^13.7.0",
99
+ "jest-puppeteer": "^6.1.1",
100
+ "less": "^4.1.3",
101
+ "prettier": "^2.7.1",
102
+ "puppeteer": "^16.1.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.77.2",
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.4"
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.0kB - 6.1kB</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.0kB</em> to your app. You can incrementally add the other modules as you need more functionality, or get it all for <em>6.1kB</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.9kB</td><td>29.4kB</td><td>114.6kB</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.0kB</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.2kB</td><td>3.5kB</td></tr><tr><th class="right"><a href="https://tinybase.org/api/tinybase">tinybase</a></th><td>6.1kB</td><td>14.4kB</td><td>60.9kB</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,009</td><td>1,009</td><td>100.0%</td></tr><tr><th class="right">Statements</th><td>1,100</td><td>1,100</td><td>100.0%</td></tr><tr><th class="right">Functions</th><td>420</td><td>420</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,807</td></tr><tr><th class="right">Assertions</th><td colspan="3">8,988</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.6">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>