tinybase 1.0.4 → 1.1.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/checkpoints.d.ts +44 -0
- package/lib/checkpoints.js +1 -1
- package/lib/checkpoints.js.gz +0 -0
- package/lib/debug/checkpoints.d.ts +44 -0
- package/lib/debug/checkpoints.js +13 -6
- package/lib/debug/indexes.d.ts +114 -1
- package/lib/debug/indexes.js +29 -2
- package/lib/debug/metrics.d.ts +46 -0
- package/lib/debug/metrics.js +8 -2
- package/lib/debug/relationships.d.ts +63 -1
- package/lib/debug/relationships.js +14 -2
- package/lib/debug/store.d.ts +269 -5
- package/lib/debug/store.js +243 -185
- package/lib/debug/tinybase.js +285 -189
- package/lib/indexes.d.ts +114 -1
- package/lib/indexes.js +1 -1
- package/lib/indexes.js.gz +0 -0
- package/lib/metrics.d.ts +46 -0
- package/lib/metrics.js +1 -1
- package/lib/metrics.js.gz +0 -0
- package/lib/relationships.d.ts +63 -1
- package/lib/relationships.js +1 -1
- package/lib/relationships.js.gz +0 -0
- package/lib/store.d.ts +269 -5
- package/lib/store.js +1 -1
- package/lib/store.js.gz +0 -0
- package/lib/tinybase.js +1 -1
- package/lib/tinybase.js.gz +0 -0
- package/lib/umd/checkpoints.js +1 -1
- package/lib/umd/checkpoints.js.gz +0 -0
- package/lib/umd/indexes.js +1 -1
- package/lib/umd/indexes.js.gz +0 -0
- package/lib/umd/metrics.js +1 -1
- package/lib/umd/metrics.js.gz +0 -0
- package/lib/umd/relationships.js +1 -1
- package/lib/umd/relationships.js.gz +0 -0
- package/lib/umd/store.js +1 -1
- package/lib/umd/store.js.gz +0 -0
- package/lib/umd/tinybase.js +1 -1
- package/lib/umd/tinybase.js.gz +0 -0
- package/package.json +20 -19
- package/readme.md +2 -2
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),l=t(t),o="type",a="default",d=(e,t)=>e.forEach(t),c=e=>e.length,i=e=>0==c(e),
|
|
1
|
+
var e,t;e=this,t=function(e){"use strict";const t=e=>typeof e,s=t(""),n=t(!0),r=t(0),l=t(t),o="type",a="default",d=(e,t)=>e.forEach(t),c=e=>e.length,i=e=>0==c(e),f=e=>e.slice(1),u=(e,t)=>e.push(t),h=e=>JSON.stringify(e,((e,t)=>{return T(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,T=(e,t)=>e instanceof t,g=e=>null==e,y=(e,t,s)=>g(e)?s?.():t(e),w=e=>e==s||e==n,L=(e,t)=>e?.has(t)??!1,R=e=>g(e)||0==(e=>e.size)(e),C=e=>e.clear(),S=(e,t)=>e?.forEach(t),v=(e,t)=>e?.delete(t),I=e=>new Map(e),m=(e=I)=>[e(),e()],E=e=>[...e?.keys()??[]],J=(e,t)=>e?.get(t),O=(e,t)=>S(e,((e,s)=>t(s,e))),j=(e,t,s)=>g(s)?(v(e,t),e):e?.set(t,s),x=(e,t,s,n)=>(L(e,t)||(n?.(s),e.set(t,s)),J(e,t)),z=(e,t)=>{const s={},n=t??(e=>e);return S(e,((e,t)=>s[t]=n(e))),s},M=(e,t)=>{const s=I(),n=t??(e=>e);return S(e,((e,t)=>s.set(t,n(e)))),s},k=Object,F=k.keys,N=k.isFrozen,P=k.freeze,_=(e,t)=>!g(((e,t)=>y(e,(e=>e[t])))(e,t)),B=(e,t)=>delete e[t],q=(e,t)=>d(k.entries(e),(([e,s])=>t(s,e))),A=e=>i(F(e)),D=e=>new Set(e),G=(e,t)=>e?.add(t),H=(e,t,s)=>c(s)<2?G(i(s)?e:x(e,s[0],D()),t):H(x(e,s[0],I()),t,f(s)),K=e=>{const t=(s,n,...r)=>y(s,(s=>i(r)?e(s,n):d([r[0],null],(e=>t(J(s,e),n,...f(r))))));return t},Q=(e,t,s,n=j)=>{const r=(l=E(e),o=e=>!_(t,e),l.filter(o));var l,o;return d(F(t),(n=>s(e,n,t[n]))),d(r,(t=>n(e,t))),e},U=e=>{const s=t(e);return w(s)||s==r&&p(e)?s:void 0},V=(e,t,s)=>g(e)||!(e=>T(e,k)&&e.constructor==k)(e)||A(e)||N(e)?(s?.(),!1):(q(e,((s,n)=>{t(s,n)||B(e,n)})),!A(e)),W=(e,t,s)=>j(e,t,J(e,t)==-s?void 0:s);e.createStore=()=>{let e,s=0,n=0;const i=I(),f=I(),p=I(),T=I(),k=I(),F=I(),N=I(),A=I(),X=m(D),Y=m(D),Z=m(),$=m(),ee=m(),te=m(),se=m(),ne=m(),[re,le,oe,ae]=(e=>{let t,s=0;const n=[],r=I();return[(l,o,a=[])=>{t??=e();const d=n.pop()??""+s++;return j(r,d,[l,o,a]),H(o,d,a),d},(e,s=[],...n)=>K(S)(e,(e=>y(J(r,e),(([e])=>e(t,...s,...n)))),...s),e=>y(J(r,e),(([,t,s])=>(K(v)(t,e,...s),j(r,e),c(n)<1e3&&u(n,e),s)),(()=>[])),(e,s,n)=>y(J(r,e),(([e,,r])=>{const l=(...o)=>{const a=c(o);a==c(r)?e(t,...o,...n(o)):g(r[a])?d(s[a](...o),(e=>l(...o,e))):l(...o,r[a])};l()}))]})((()=>qe)),de=(t,s)=>(!e||L(F,s)||Ee(s))&&V(t,((e,t)=>ce(s,t,e)),(()=>Ee(s))),ce=(e,t,s,n)=>V(n?s:fe(s,e,t),((n,r)=>y(ie(e,t,r,n),(e=>(s[r]=e,!0)),(()=>!1))),(()=>Ee(e,t))),ie=(t,s,n,r)=>e?y(J(J(F,t),n),(e=>U(r)!=e.type?Ee(t,s,n,r,e.default):r),(()=>Ee(t,s,n,r))):g(U(r))?Ee(t,s,n,r):r,fe=(e,t,s)=>(y(J(N,t),(([n,r])=>{S(n,((t,s)=>{_(e,s)||(e[s]=t)})),S(r,(n=>{_(e,n)||Ee(t,s,n)}))})),e),ue=e=>Q(F,e,((e,t,s)=>{const n=I(),r=D();Q(x(F,t,I()),s,((e,t,s)=>{j(e,t,s),y(s.default,(e=>j(n,t,e)),(()=>G(r,t)))})),j(N,t,[n,r])}),((e,t)=>{j(F,t),j(N,t)})),he=e=>Q(A,e,((e,t,s)=>be(t,s)),((e,t)=>Le(t))),be=(e,t)=>Q(x(A,e,I(),(()=>Se(e,1))),t,((t,s,n)=>pe(e,t,s,n)),((t,s)=>Re(e,t,s))),pe=(e,t,s,n,r)=>Q(x(t,s,I(),(()=>ve(e,s,1))),n,((t,n,r)=>Te(e,s,t,n,r)),((n,l)=>Ce(e,t,s,n,l,r))),Te=(e,t,s,n,r)=>{L(s,n)||Ie(e,t,n,1);const l=J(s,n);r!==l&&(me(e,t,n,l),j(s,n,r))},ge=(e,t,s,n,r)=>y(J(t,s),(t=>Te(e,s,t,n,r)),(()=>pe(e,t,s,fe({[n]:r},e,s)))),ye=e=>{const t=""+s++;return L(e,t)?ye(e):t},we=e=>J(A,e)??be(e,{}),Le=e=>be(e,{}),Re=(e,t,s)=>pe(e,t,s,{},!0),Ce=(e,t,s,n,r,l)=>{const o=J(J(N,e)?.[0],r);if(!g(o)&&!l)return Te(e,s,n,r,o);const a=t=>{me(e,s,t,J(n,t)),Ie(e,s,t,-1),j(n,t)};g(o)?a(r):O(n,a),R(n)&&(ve(e,s,-1),R(j(t,s))&&(Se(e,-1),j(A,e)))},Se=(e,t)=>W(i,e,t),ve=(e,t,s)=>W(x(f,e,I()),t,s),Ie=(e,t,s,n)=>W(x(x(p,e,I()),t,I()),s,n),me=(e,t,s,n)=>x(x(x(T,e,I()),t,I()),s,n),Ee=(e,t,s,n,r)=>(u(x(x(x(k,e,I()),t,I()),s,[]),n),r),Je=(e,t,s)=>{const n=J(J(T,e),t),r=Ne(e,t,s);return L(n,s)?[!0,J(n,s),r]:[!1,r,r]},Oe=e=>R(k)||R(ne[e])?0:S(e?M(k,(e=>M(e,M))):k,((t,s)=>S(t,((t,n)=>S(t,((t,r)=>le(ne[e],[s,n,r],t))))))),je=e=>{if(!R(T)){const t=R(te[e])&&R($[e])&&R(Y[e]),s=R(se[e])&&R(ee[e])&&R(Z[e])&&R(X[e]);if(!t||!s){const n=e?[M(i),M(f,M),M(p,(e=>M(e,M))),M(T,(e=>M(e,M)))]:[i,f,p,T];if(t||(S(n[2],((t,s)=>S(t,((t,n)=>{R(t)||le(te[e],[s,n])})))),S(n[1],((t,s)=>{R(t)||le($[e],[s])})),R(n[0])||le(Y[e])),!s){let t;S(n[3],((s,n)=>{let r;S(s,((s,l)=>{let o;S(s,((s,a)=>{const d=Ne(n,l,a);d!==s&&(le(se[e],[n,l,a],d,s,Je),t=r=o=1)})),o&&le(ee[e],[n,l],Je)})),r&&le(Z[e],[n],Je)})),t&&le(X[e],[],Je)}}}},xe=e=>(Be(e),qe),ze=()=>z(A,(e=>z(e,z))),Me=()=>E(A),ke=e=>E(J(A,e)),Fe=(e,t)=>E(J(J(A,e),t)),Ne=(e,t,s)=>J(J(J(A,e),t),s),Pe=e=>xe((()=>(e=>V(e,de,Ee))(e)?he(e):0)),_e=()=>xe((()=>he({}))),Be=e=>{if(-1==n)return;n++;const t=e?.();return n--,0==n&&(n=1,Oe(1),je(1),n=-1,Oe(0),je(0),n=0,d([T,k,i,f,p],C)),t},qe={getTables:ze,getTableIds:Me,getTable:e=>z(J(A,e),z),getRowIds:ke,getRow:(e,t)=>z(J(J(A,e),t)),getCellIds:Fe,getCell:Ne,hasTables:()=>!R(A),hasTable:e=>L(A,e),hasRow:(e,t)=>L(J(A,e),t),hasCell:(e,t,s)=>L(J(J(A,e),t),s),getJson:()=>h(A),getSchemaJson:()=>h(F),setTables:Pe,setTable:(e,t)=>xe((()=>de(t,e)?be(e,t):0)),setRow:(e,t,s)=>xe((()=>ce(e,t,s)?pe(e,we(e),t,s):0)),addRow:(e,t)=>Be((()=>{let s;return ce(e,s,t)&&pe(e,we(e),s=ye(J(A,e)),t),s})),setPartialRow:(e,t,s)=>xe((()=>{if(ce(e,t,s,1)){const n=we(e);q(s,((s,r)=>ge(e,n,t,r,s)))}})),setCell:(e,s,n,r)=>xe((()=>y(ie(e,s,n,t(r)==l?r(Ne(e,s,n)):r),(t=>ge(e,we(e),s,n,t))))),setJson:e=>{try{"{}"===e?_e():Pe(b(e))}catch{}return qe},setSchema:t=>xe((()=>{if((e=(e=>V(e,(e=>V(e,(e=>{if(!V(e,((e,t)=>[o,a].includes(t))))return!1;const t=e.type;return!(!w(t)&&t!=r||(U(e.default)!=t&&B(e,a),0))})))))(t))&&(ue(t),!R(A))){const e=ze();_e(),Pe(e)}})),delTables:_e,delTable:e=>xe((()=>L(A,e)?Le(e):0)),delRow:(e,t)=>xe((()=>y(J(A,e),(s=>L(s,t)?Re(e,s,t):0)))),delCell:(e,t,s,n)=>xe((()=>y(J(A,e),(r=>y(J(r,t),(l=>L(l,s)?Ce(e,r,t,l,s,n):0)))))),delSchema:()=>xe((()=>{ue({}),e=!1})),transaction:Be,forEachTable:e=>S(A,((t,s)=>e(s,(e=>S(t,((t,s)=>e(s,(e=>O(t,e))))))))),forEachRow:(e,t)=>S(J(A,e),((e,s)=>t(s,(t=>O(e,t))))),forEachCell:(e,t,s)=>O(J(J(A,e),t),s),addTablesListener:(e,t)=>re(e,X[t?1:0]),addTableIdsListener:(e,t)=>re(e,Y[t?1:0]),addTableListener:(e,t,s)=>re(t,Z[s?1:0],[e]),addRowIdsListener:(e,t,s)=>re(t,$[s?1:0],[e]),addRowListener:(e,t,s,n)=>re(s,ee[n?1:0],[e,t]),addCellIdsListener:(e,t,s,n)=>re(s,te[n?1:0],[e,t]),addCellListener:(e,t,s,n,r)=>re(n,se[r?1:0],[e,t,s]),addInvalidCellListener:(e,t,s,n,r)=>re(n,ne[r?1:0],[e,t,s]),callListener:e=>(ae(e,[Me,ke,Fe],(e=>g(e[2])?[]:[,,].fill(Ne(...e)))),qe),delListener:e=>(oe(e),qe),getListenerStats:()=>({})};return P(qe)},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={});
|
package/lib/umd/store.js.gz
CHANGED
|
Binary file
|
package/lib/umd/tinybase.js
CHANGED
|
@@ -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,t)=>e.includes(t),f=(e,t)=>e.every(((s,n)=>0==n||t(e[n-1],s)<=0)),h=(e,t)=>e.sort(t),g=(e,t)=>e.forEach(t),p=e=>w(e,((e,t)=>e+t),0),L=e=>e.length,v=e=>0==L(e),w=(e,t,s)=>e.reduce(t,s),y=e=>e.slice(1),I=e=>JSON.stringify(e,((e,t)=>m(t,Map)?w([...t],((e,[t,s])=>(e[t]=s,e)),{}):t)),S=JSON.parse,R=Math.max,T=Math.min,b=isFinite,m=(e,t)=>e instanceof t,C=e=>null==e,k=(e,t,s)=>C(e)?s?.():t(e),M=e=>e==o||e==r,x=e=>s(e)==i,A=()=>{},E=e=>e.size,P=(e,t)=>e?.has(t)??!1,D=e=>C(e)||0==E(e),J=e=>[...e?.values()??[]],F=e=>e.clear(),O=(e,t)=>e?.forEach(t),j=(e,t)=>e?.delete(t),z=e=>new Map(e),N=(e=z)=>[e(),e()],B=e=>[...e?.keys()??[]],_=(e,t)=>e?.get(t),q=(e,t)=>O(e,((e,s)=>t(s,e))),H=(e,t,s)=>C(s)?(j(e,t),e):e?.set(t,s),W=(e,t,s,n)=>(P(e,t)||(n?.(s),e.set(t,s)),_(e,t)),G=(e,t)=>{const s={},n=t??(e=>e);return O(e,((e,t)=>s[t]=n(e))),s},K=(e,t)=>{const s=z(),n=t??(e=>e);return O(e,((e,t)=>s.set(t,n(e)))),s},Q=e=>new Set(e),U=(e,t)=>e?.add(t),V=(e,t,s)=>{const n=e.hasRow,o=z(),r=z(),a=z(),i=z(),d=z(),l=t=>k(_(d,t),(s=>{O(s,e.delListener),H(d,t)})),c=e=>{H(o,e),H(r,e),H(a,e),H(i,e),l(e)};return[()=>e,()=>B(o),e=>P(r,e),e=>_(o,e),e=>_(r,e),(e,t)=>H(r,e,t),(c,u,f,h,p)=>{const L=z(),v=z();H(o,c,u),P(r,c)||(H(r,c,t()),H(a,c,z()),H(i,c,z()));const w=_(a,c),y=_(i,c),I=t=>{const o=s=>e.getCell(u,t,s),r=_(w,t),a=n(u,t)?s(h(o,t)):void 0;if(r!=a&&H(L,t,[r,a]),!C(p)){const e=_(y,t),s=n(u,t)?p(o,t):void 0;e!=s&&H(v,t,s)}},S=e=>{f((()=>{O(L,(([,e],t)=>H(w,t,e))),O(v,((e,t)=>H(y,t,e)))}),L,v,w,y,e),F(L),F(v)};q(w,I),e.hasTable(u)&&g(e.getRowIds(u),(e=>{P(w,e)||I(e)})),S(!0),l(c),H(d,c,Q([e.addRowListener(u,null,((e,t,s)=>I(s))),e.addTableListener(u,(()=>S()))]))},c,()=>q(d,c)]},X=(e,t)=>s(e)==o?t=>t(e):e??(()=>t??n),Y=e=>{const t=new WeakMap;return s=>(t.has(s)||t.set(s,e(s)),t.get(s))},Z=(e,t,s)=>L(s)<2?U(v(s)?e:W(e,s[0],Q()),t):Z(W(e,s[0],z()),t,y(s)),$=e=>{const t=(s,n,...o)=>k(s,(s=>v(o)?e(s,n):g([o[0],null],(e=>t(_(s,e),n,...y(o))))));return t},ee=e=>{let t,s=0;const n=[],o=z();return[(r,a,i=[])=>{t??=e();const d=n.pop()??""+s++;return H(o,d,[r,a,i]),Z(a,d,i),d},(e,s=[],...n)=>$(O)(e,(e=>k(_(o,e),(([e])=>e(t,...s,...n)))),...s),e=>k(_(o,e),(([,t,s])=>($(j)(t,e,...s),H(o,e),L(n)<1e3&&n.push(e),s)),(()=>[])),(e,s,n)=>k(_(o,e),(([e,,o])=>{const r=(...a)=>{const i=L(a);i==L(o)?e(t,...a,...n(a)):C(o[i])?g(s[i](...a),(e=>r(...a,e))):r(...a,o[i])};r()}))]},te=Object,se=te.keys,ne=te.isFrozen,oe=te.freeze,re=(e,t)=>!C(((e,t)=>k(e,(e=>e[t])))(e,t)),ae=(e,t)=>delete e[t],ie=(e,t)=>g(te.entries(e),(([e,s])=>t(s,e))),de=Y((e=>{let t,s,n,o=100,r=z(),a=1;const i=Q(),d=z(),[l,c,f]=ee((()=>j)),h=z(),p=z(),w=[],y=[],I=(t,s)=>{a=0,e.transaction((()=>O(_(h,s),((s,n)=>O(s,((s,o)=>O(s,((s,r)=>C(s[t])?e.delCell(n,o,r,!0):e.setCell(n,o,r,s[t]))))))))),a=1},S=e=>{H(h,e),H(p,e),c(d,[e])},R=(e,t)=>g(((e,t)=>e.splice(0,t))(e,t??L(e)),S),T=()=>R(w,L(w)-o),b=e.addCellListener(null,null,null,((e,s,o,i,d,l)=>{if(a){k(t,(()=>{w.push(t),T(),R(y),t=void 0,n=1}));const e=W(r,s,z()),a=W(e,o,z()),c=W(a,i,[void 0,void 0],(e=>e[0]=l));c[1]=d,c[0]===c[1]&&D(H(a,i))&&D(H(e,o))&&D(H(r,s))&&(t=w.pop(),n=1),A()}})),m=(e="")=>(C(t)&&(t=""+s++,H(h,t,r),J(t,e),r=z(),n=1),t),M=()=>{v(w)||(y.unshift(m()),I(0,t),t=w.pop(),n=1)},x=()=>{v(y)||(w.push(t),t=y.shift(),I(1,t),n=1)},A=()=>{n&&(c(i),n=0)},E=e=>{const t=m(e);return A(),t},J=(e,t)=>(F(e)&&_(p,e)!==t&&(H(p,e,t),c(d,[e])),j),F=e=>P(h,e),j={setSize:e=>(o=e,T(),j),addCheckpoint:E,setCheckpoint:J,getStore:()=>e,getCheckpointIds:()=>[[...w],t,[...y]],hasCheckpoint:F,getCheckpoint:e=>_(p,e),goBackward:()=>(M(),A(),j),goForward:()=>(x(),A(),j),goTo:e=>{const s=u(w,e)?M:u(y,e)?x:null;for(;!C(s)&&e!=t;)s();return A(),j},addCheckpointIdsListener:e=>l(e,i),addCheckpointListener:(e,t)=>l(t,d,[e]),delListener:e=>(f(e),j),clear:()=>(R(w),R(y),C(t)||S(t),t=void 0,s=0,E(),j),destroy:()=>{e.delListener(b)},getListenerStats:()=>({})};return oe(j.clear())})),le=(e,t)=>e<t?-1:1,ce=Y((e=>{const t=z(),s=z(),[o,r,a,i,d,l,c,u,g]=V(e,z,(e=>C(e)?n:e+n)),[p,L,v]=ee((()=>w)),w={setIndexDefinition:(e,n,o,r,a,i=le)=>{const u=C(a)?void 0:([e],[t])=>a(e,t);return c(e,n,((n,o,a,c,g,p)=>{let v=0;const w=Q(),y=Q(),I=d(e);if(O(o,(([e,t],s)=>{C(e)||(U(w,e),k(_(I,e),(t=>{j(t,s),D(t)&&(H(I,e),v=1)}))),C(t)||(U(w,t),P(I,t)||(H(I,t,Q()),v=1),U(_(I,t),s),C(r)||U(y,t))})),n(),D(g)||(p?q(I,(e=>U(y,e))):q(a,(e=>k(_(c,e),(e=>U(y,e))))),O(y,(e=>{const t=(t,s)=>i(_(g,t),_(g,s),e),s=[..._(I,e)];f(s,t)||(H(I,e,Q(h(s,t))),U(w,e))}))),(v||p)&&!C(u)){const t=[...I];f(t,u)||(l(e,z(h(t,u))),v=1)}v&&L(t,[e]),O(w,(t=>L(s,[e,t])))}),X(o),k(r,X)),w},delIndexDefinition:e=>(u(e),w),getStore:o,getIndexIds:r,hasIndex:a,hasSlice:(e,t)=>P(d(e),t),getTableId:i,getSliceIds:e=>B(d(e)),getSliceRowIds:(e,t)=>J(_(d(e),t)),addSliceIdsListener:(e,s)=>p(s,t,[e]),addSliceRowIdsListener:(e,t,n)=>p(n,s,[e,t]),delListener:e=>(v(e),w),destroy:g,getListenerStats:()=>({})};return oe(w)})),ue=z([["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=>R(...e),(e,t)=>R(t,e),(e,t)=>t==e?void 0:e,(e,t,s)=>s==e?void 0:R(t,e)]],["min",[e=>T(...e),(e,t)=>T(t,e),(e,t)=>t==e?void 0:e,(e,t,s)=>s==e?void 0:T(t,e)]],["sum",[e=>p(e),(e,t)=>e+t,(e,t)=>e-t,(e,t,s)=>e-s+t]]]),fe=Y((e=>{const t=z(),[s,o,r,a,i,d,l,c,u]=V(e,A,(e=>isNaN(e)||C(e)||!0===e||!1===e||e===n?void 0:1*e)),[f,h,g]=ee((()=>p)),p={setMetricDefinition:(e,s,n,o,r,a,c)=>{const u=x(n)?[n,r,a,c]:_(ue,n)??_(ue,"sum");return l(e,s,((s,n,o,r,a,l)=>{let c=i(e),f=E(r);const[g,p,L,v]=u;l=l||C(c),O(n,(([e,t])=>{l||(c=C(e)?p?.(c,t,f++):C(t)?L?.(c,e,f--):v?.(c,t,e,f)),l=l||C(c)})),s(),D(r)?c=void 0:l&&(c=g(J(r),E(r))),b(c)||(c=void 0);const w=i(e);c!=w&&(d(e,c),h(t,[e],c,w))}),X(o,1)),p},delMetricDefinition:e=>(c(e),p),getStore:s,getMetricIds:o,hasMetric:r,getTableId:a,getMetric:i,addMetricListener:(e,s)=>f(s,t,[e]),delListener:e=>(g(e),p),destroy:u,getListenerStats:()=>({})};return oe(p)})),he=(e,t,s,n,o)=>{let r,a=0;const i={load:async s=>{if(2!=a){a=1;const n=await t();C(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:()=>(k(r,e.delListener),i),getStore:()=>e,destroy:()=>i.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return oe(i)},ge="storage",pe=globalThis.window,Le=(e,t,s)=>{let n;return he(e,(async()=>s.getItem(t)),(async e=>s.setItem(t,e)),(e=>{n=n=>{n.storageArea===s&&n.key===t&&e()},pe.addEventListener(ge,n)}),(()=>{pe.removeEventListener(ge,n),n=void 0}))},ve=e=>e.headers.get("ETag"),we=Y((e=>{const t=z(),s=z(),o=z(),r=z(),[a,i,d,l,c,u,f,h,g]=V(e,(()=>[z(),z(),z(),z()]),(e=>C(e)?void 0:e+n)),[p,L,v]=ee((()=>S)),w=(e,t,s)=>k(c(e),(([n,,o])=>{if(!P(o,t)){const r=Q();if(l(e)!=I(e))U(r,t);else{let e=t;for(;!C(e)&&!P(r,e);)U(r,e),e=_(n,e)}if(s)return r;H(o,t,r)}return _(o,t)})),y=(e,t)=>k(c(e),(([,,e])=>H(e,t))),I=e=>_(t,e),S={setRelationshipDefinition:(e,n,a,i)=>(H(t,e,a),f(e,n,((t,n)=>{const a=Q(),i=Q(),d=Q(),[l,u]=c(e);O(n,(([t,s],n)=>{C(t)||(U(i,t),k(_(u,t),(e=>{j(e,n),D(e)&&H(u,t)}))),C(s)||(U(i,s),P(u,s)||H(u,s,Q()),U(_(u,s),n)),U(a,n),H(l,n,s),q(_(r,e),(t=>{P(w(e,t),n)&&U(d,t)}))})),t(),O(a,(t=>L(s,[e,t]))),O(i,(t=>L(o,[e,t]))),O(d,(t=>{y(e,t),L(r,[e,t])}))}),X(i)),S),delRelationshipDefinition:e=>(H(t,e),h(e),S),getStore:a,getRelationshipIds:i,hasRelationship:d,getLocalTableId:l,getRemoteTableId:I,getRemoteRowId:(e,t)=>_(c(e)?.[0],t),getLocalRowIds:(e,t)=>J(_(c(e)?.[1],t)),getLinkedRowIds:(e,t)=>C(c(e))?[t]:J(w(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)=>(w(e,t),p(s,r,[e,t])),delListener:e=>(y(...v(e)),S),destroy:g,getListenerStats:()=>({})};return oe(S)})),ye=(e,t,s,n=H)=>{const o=(r=B(e),a=e=>!re(t,e),r.filter(a));var r,a;return g(se(t),(n=>s(e,n,t[n]))),g(o,(t=>n(e,t))),e},Ie=e=>{const t=s(e);return M(t)||t==a&&b(e)?t:void 0},Se=(e,t)=>!(C(e)||!(e=>m(e,te)&&e.constructor==te)(e)||ne(e)||(ie(e,((s,n)=>{t(s,n)||ae(e,n)})),(e=>v(se(e)))(e))),Re=(e,t,s)=>H(e,t,_(e,t)==-s?void 0:s);e.createCheckpoints=de,e.createCustomPersister=he,e.createFilePersister=(e,s)=>{let n;return he(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=ce,e.createLocalPersister=(e,t)=>Le(e,t,localStorage),e.createMetrics=fe,e.createRelationships=we,e.createRemotePersister=(e,t,s,n)=>{let o,r;return he(e,(async()=>{const e=await fetch(t);return r=ve(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=ve(s);C(r)||C(n)||n==r||(r=n,e())}),1e3*n)}),(()=>{k(o,clearInterval),o=void 0}))},e.createSessionPersister=(e,t)=>Le(e,t,sessionStorage),e.createStore=()=>{let e,t=0,s=0;const n=z(),o=z(),r=z(),i=z(),c=z(),f=z(),h=z(),p=N(Q),L=N(Q),v=N(),w=N(),y=N(),R=N(),T=N(),[b,m,A,E]=ee((()=>Ee)),J=(t,s)=>(!e||P(c,s))&&Se(t,(e=>j(s,e))),j=(e,t,s)=>Se(s?t:V(t,e),((s,n)=>k(U(e,n,s),(e=>(t[n]=e,!0)),(()=>!1)))),U=(t,s,n)=>e?k(_(_(c,t),s),(e=>Ie(n)!=e.type?e.default:n)):C(Ie(n))?void 0:n,V=(e,t)=>(k(_(f,t),(t=>ie(t,((t,s)=>{re(e,s)||(e[s]=t)})))),e),X=e=>ye(c,e,((e,t,s)=>{const n={};ye(W(c,t,z()),s,((e,t,s)=>{H(e,t,s),k(s.default,(e=>n[t]=e))})),H(f,t,n)}),((e,t)=>{H(c,t),H(f,t)})),Y=e=>ye(h,e,((e,t,s)=>Z(t,s)),((e,t)=>ce(t))),Z=(e,t)=>ye(W(h,e,z(),(()=>he(e,1))),t,((t,s,n)=>$(e,t,s,n)),((t,s)=>ue(e,t,s))),$=(e,t,s,n,o)=>ye(W(t,s,z(),(()=>ge(e,s,1))),n,((t,n,o)=>te(e,s,t,n,o)),((n,r)=>fe(e,t,s,n,r,o))),te=(e,t,s,n,o)=>{P(s,n)||pe(e,t,n,1);const r=_(s,n);o!==r&&(Le(e,t,n,r),H(s,n,o))},se=(e,t,s)=>Ae((()=>$(e,le(e),t,s))),ne=(e,t,s,n,o)=>k(_(t,s),(t=>te(e,s,t,n,o)),(()=>$(e,t,s,V({[n]:o},e)))),de=e=>{const s=""+t++;return P(e,s)?de(e):s},le=e=>_(h,e)??Z(e,{}),ce=e=>Z(e,{}),ue=(e,t,s)=>$(e,t,s,{},!0),fe=(e,t,s,n,o,r)=>{const a=_(f,e)?.[o];if(!C(a)&&!r)return te(e,s,n,o,a);const i=t=>{Le(e,s,t,_(n,t)),pe(e,s,t,-1),H(n,t)};C(a)?i(o):q(n,i),D(n)&&(ge(e,s,-1),D(H(t,s))&&(he(e,-1),H(h,e)))},he=(e,t)=>Re(n,e,t),ge=(e,t,s)=>Re(W(o,e,z()),t,s),pe=(e,t,s,n)=>Re(W(W(r,e,z()),t,z()),s,n),Le=(e,t,s,n)=>W(W(W(i,e,z()),t,z()),s,n),ve=(e,t,s)=>{const n=_(_(i,e),t),o=ke(e,t,s);return P(n,s)?[!0,_(n,s),o]:[!1,o,o]},we=e=>{const t=D(R[e])&&D(w[e])&&D(L[e]),s=D(T[e])&&D(y[e])&&D(v[e])&&D(p[e]);if(t&&s)return;const a=e?[K(n),K(o,K),K(r,(e=>K(e,K))),K(i,(e=>K(e,K)))]:[n,o,r,i];if(t||(O(a[2],((t,s)=>O(t,((t,n)=>{D(t)||m(R[e],[s,n])})))),O(a[1],((t,s)=>{D(t)||m(w[e],[s])})),D(a[0])||m(L[e])),!s){let t;O(a[3],((s,n)=>{let o;O(s,((s,r)=>{let a;O(s,((s,i)=>{const d=ke(n,r,i);d!==s&&(m(T[e],[n,r,i],d,s,ve),t=o=a=1)})),a&&m(y[e],[n,r],ve)})),o&&m(v[e],[n],ve)})),t&&m(p[e],[],ve)}},Te=()=>G(h,(e=>G(e,G))),be=()=>B(h),me=e=>B(_(h,e)),Ce=(e,t)=>B(_(_(h,e),t)),ke=(e,t,s)=>_(_(_(h,e),t),s),Me=e=>((e=>Se(e,J))(e)&&Ae((()=>Y(e))),Ee),xe=()=>(Ae((()=>Y({}))),Ee),Ae=e=>{if(-1==s)return;s++;const t=e();return s--,0==s&&(s=1,we(1),s=-1,we(0),s=0,g([i,n,o,r],F)),t},Ee={getTables:Te,getTableIds:be,getTable:e=>G(_(h,e),G),getRowIds:me,getRow:(e,t)=>G(_(_(h,e),t)),getCellIds:Ce,getCell:ke,hasTables:()=>!D(h),hasTable:e=>P(h,e),hasRow:(e,t)=>P(_(h,e),t),hasCell:(e,t,s)=>P(_(_(h,e),t),s),getJson:()=>I(h),getSchemaJson:()=>I(c),setTables:Me,setTable:(e,t)=>(J(t,e)&&Ae((()=>Z(e,t))),Ee),setRow:(e,t,s)=>(j(e,s)&&se(e,t,s),Ee),addRow:(e,t)=>{let s;return j(e,t)&&(s=de(_(h,e)),se(e,s,t)),s},setPartialRow:(e,t,s)=>(j(e,s,1)&&Ae((()=>{const n=le(e);ie(s,((s,o)=>ne(e,n,t,o,s)))})),Ee),setCell:(e,t,s,n)=>(k(U(e,s,x(n)?n(ke(e,t,s)):n),(n=>Ae((()=>ne(e,le(e),t,s,n))))),Ee),setJson:e=>{try{"{}"===e?xe():Me(S(e))}catch{}return Ee},setSchema:t=>{if((e=(e=>Se(e,(e=>Se(e,(e=>{if(!Se(e,((e,t)=>u([d,l],t))))return!1;const t=e.type;return!(!M(t)&&t!=a||(Ie(e.default)!=t&&ae(e,l),0))})))))(t))&&(X(t),!D(h))){const e=Te();xe(),Me(e)}return Ee},delTables:xe,delTable:e=>(P(h,e)&&Ae((()=>ce(e))),Ee),delRow:(e,t)=>(k(_(h,e),(s=>{P(s,t)&&Ae((()=>ue(e,s,t)))})),Ee),delCell:(e,t,s,n)=>(k(_(h,e),(o=>k(_(o,t),(r=>{P(r,s)&&Ae((()=>fe(e,o,t,r,s,n)))})))),Ee),delSchema:()=>(X({}),e=!1,Ee),transaction:Ae,forEachTable:e=>O(h,((t,s)=>e(s,(e=>O(t,((t,s)=>e(s,(e=>q(t,e))))))))),forEachRow:(e,t)=>O(_(h,e),((e,s)=>t(s,(t=>q(e,t))))),forEachCell:(e,t,s)=>q(_(_(h,e),t),s),addTablesListener:(e,t)=>b(e,p[t?1:0]),addTableIdsListener:(e,t)=>b(e,L[t?1:0]),addTableListener:(e,t,s)=>b(t,v[s?1:0],[e]),addRowIdsListener:(e,t,s)=>b(t,w[s?1:0],[e]),addRowListener:(e,t,s,n)=>b(s,y[n?1:0],[e,t]),addCellIdsListener:(e,t,s,n)=>b(s,R[n?1:0],[e,t]),addCellListener:(e,t,s,n,o)=>b(n,T[o?1:0],[e,t,s]),callListener:e=>(E(e,[be,me,Ce],(e=>C(e[2])?[]:[,,].fill(ke(...e)))),Ee),delListener:e=>(A(e),Ee),getListenerStats:()=>({})};return oe(Ee)},e.defaultSorter=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);
|
|
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,t)=>e.includes(t),f=(e,t)=>e.every(((s,n)=>0==n||t(e[n-1],s)<=0)),h=(e,t)=>e.sort(t),g=(e,t)=>e.forEach(t),p=e=>v(e,((e,t)=>e+t),0),L=e=>e.length,w=e=>0==L(e),v=(e,t,s)=>e.reduce(t,s),I=e=>e.slice(1),y=(e,t)=>e.push(t),S=e=>e.pop(),R=e=>JSON.stringify(e,((e,t)=>k(t,Map)?v([...t],((e,[t,s])=>(e[t]=s,e)),{}):t)),T=JSON.parse,b=Math.max,C=Math.min,m=isFinite,k=(e,t)=>e instanceof t,E=e=>null==e,M=(e,t,s)=>E(e)?s?.():t(e),x=e=>e==o||e==r,A=e=>s(e)==i,P=()=>{},D=e=>e.size,J=(e,t)=>e?.has(t)??!1,F=e=>E(e)||0==D(e),O=e=>[...e?.values()??[]],j=e=>e.clear(),z=(e,t)=>e?.forEach(t),N=(e,t)=>e?.delete(t),B=e=>new Map(e),_=(e=B)=>[e(),e()],q=e=>[...e?.keys()??[]],H=(e,t)=>e?.get(t),W=(e,t)=>z(e,((e,s)=>t(s,e))),G=(e,t,s)=>E(s)?(N(e,t),e):e?.set(t,s),K=(e,t,s,n)=>(J(e,t)||(n?.(s),e.set(t,s)),H(e,t)),Q=(e,t)=>{const s={},n=t??(e=>e);return z(e,((e,t)=>s[t]=n(e))),s},U=(e,t)=>{const s=B(),n=t??(e=>e);return z(e,((e,t)=>s.set(t,n(e)))),s},V=e=>new Set(e),X=(e,t)=>e?.add(t),Y=(e,t,s)=>{const n=e.hasRow,o=B(),r=B(),a=B(),i=B(),d=B(),l=t=>M(H(d,t),(s=>{z(s,e.delListener),G(d,t)})),c=e=>{G(o,e),G(r,e),G(a,e),G(i,e),l(e)};return[()=>e,()=>q(o),e=>W(r,e),e=>J(r,e),e=>H(o,e),e=>H(r,e),(e,t)=>G(r,e,t),(c,u,f,h,p)=>{const L=B(),w=B();G(o,c,u),J(r,c)||(G(r,c,t()),G(a,c,B()),G(i,c,B()));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&&G(L,t,[r,a]),!E(p)){const e=H(I,t),s=n(u,t)?p(o,t):void 0;e!=s&&G(w,t,s)}},S=e=>{f((()=>{z(L,(([,e],t)=>G(v,t,e))),z(w,((e,t)=>G(I,t,e)))}),L,w,v,I,e),j(L),j(w)};W(v,y),e.hasTable(u)&&g(e.getRowIds(u),(e=>{J(v,e)||y(e)})),S(!0),l(c),G(d,c,V([e.addRowListener(u,null,((e,t,s)=>y(s))),e.addTableListener(u,(()=>S()))]))},c,()=>W(d,c)]},Z=(e,t)=>s(e)==o?t=>t(e):e??(()=>t??n),$=e=>{const t=new WeakMap;return s=>(t.has(s)||t.set(s,e(s)),t.get(s))},ee=(e,t,s)=>L(s)<2?X(w(s)?e:K(e,s[0],V()),t):ee(K(e,s[0],B()),t,I(s)),te=e=>{const t=(s,n,...o)=>M(s,(s=>w(o)?e(s,n):g([o[0],null],(e=>t(H(s,e),n,...I(o))))));return t},se=e=>{let t,s=0;const n=[],o=B();return[(r,a,i=[])=>{t??=e();const d=S(n)??""+s++;return G(o,d,[r,a,i]),ee(a,d,i),d},(e,s=[],...n)=>te(z)(e,(e=>M(H(o,e),(([e])=>e(t,...s,...n)))),...s),e=>M(H(o,e),(([,t,s])=>(te(N)(t,e,...s),G(o,e),L(n)<1e3&&y(n,e),s)),(()=>[])),(e,s,n)=>M(H(o,e),(([e,,o])=>{const r=(...a)=>{const i=L(a);i==L(o)?e(t,...a,...n(a)):E(o[i])?g(s[i](...a),(e=>r(...a,e))):r(...a,o[i])};r()}))]},ne=Object,oe=ne.keys,re=ne.isFrozen,ae=ne.freeze,ie=(e,t)=>!E(((e,t)=>M(e,(e=>e[t])))(e,t)),de=(e,t)=>delete e[t],le=(e,t)=>g(ne.entries(e),(([e,s])=>t(s,e))),ce=e=>w(oe(e)),ue=$((e=>{let t,s,n,o=100,r=B(),a=1;const i=V(),d=B(),[l,c,f]=se((()=>N)),h=B(),p=B(),v=[],I=[],R=(t,s)=>{a=0,e.transaction((()=>z(H(h,s),((s,n)=>z(s,((s,o)=>z(s,((s,r)=>E(s[t])?e.delCell(n,o,r,!0):e.setCell(n,o,r,s[t]))))))))),a=1},T=e=>{G(h,e),G(p,e),c(d,[e])},b=(e,t)=>g(((e,t)=>e.splice(0,t))(e,t??L(e)),T),C=()=>b(v,L(v)-o),m=e.addCellListener(null,null,null,((e,s,o,i,d,l)=>{if(a){M(t,(()=>{y(v,t),C(),b(I),t=void 0,n=1}));const e=K(r,s,B()),a=K(e,o,B()),c=K(a,i,[void 0,void 0],(e=>e[0]=l));c[1]=d,c[0]===c[1]&&F(G(a,i))&&F(G(e,o))&&F(G(r,s))&&(t=S(v),n=1),P()}})),k=(e="")=>(E(t)&&(t=""+s++,G(h,t,r),O(t,e),r=B(),n=1),t),x=()=>{w(v)||(I.unshift(k()),R(0,t),t=S(v),n=1)},A=()=>{w(I)||(y(v,t),t=I.shift(),R(1,t),n=1)},P=()=>{n&&(c(i),n=0)},D=e=>{const t=k(e);return P(),t},O=(e,t)=>(j(e)&&H(p,e)!==t&&(G(p,e,t),c(d,[e])),N),j=e=>J(h,e),N={setSize:e=>(o=e,C(),N),addCheckpoint:D,setCheckpoint:O,getStore:()=>e,getCheckpointIds:()=>[[...v],t,[...I]],forEachCheckpoint:e=>W(p,e),hasCheckpoint:j,getCheckpoint:e=>H(p,e),goBackward:()=>(x(),P(),N),goForward:()=>(A(),P(),N),goTo:e=>{const s=u(v,e)?x:u(I,e)?A:null;for(;!E(s)&&e!=t;)s();return P(),N},addCheckpointIdsListener:e=>l(e,i),addCheckpointListener:(e,t)=>l(t,d,[e]),delListener:e=>(f(e),N),clear:()=>(b(v),b(I),E(t)||T(t),t=void 0,s=0,D(),N),destroy:()=>{e.delListener(m)},getListenerStats:()=>({})};return ae(N.clear())})),fe=(e,t)=>e<t?-1:1,he=$((e=>{const t=B(),s=B(),[o,r,a,i,d,l,c,u,g,p]=Y(e,B,(e=>E(e)?n:e+n)),[L,w,v]=se((()=>y)),I=(t,s,n)=>{const o=d(t);z(n,((t,n)=>s(n,(s=>z(t,(t=>s(t,(s=>e.forEachCell(o,t,s)))))))))},y={setIndexDefinition:(e,n,o,r,a,i=fe)=>{const d=E(a)?void 0:([e],[t])=>a(e,t);return u(e,n,((n,o,a,u,g,p)=>{let L=0;const v=V(),I=V(),y=l(e);if(z(o,(([e,t],s)=>{E(e)||(X(v,e),M(H(y,e),(t=>{N(t,s),F(t)&&(G(y,e),L=1)}))),E(t)||(X(v,t),J(y,t)||(G(y,t,V()),L=1),X(H(y,t),s),E(r)||X(I,t))})),n(),F(g)||(p?W(y,(e=>X(I,e))):W(a,(e=>M(H(u,e),(e=>X(I,e))))),z(I,(e=>{const t=(t,s)=>i(H(g,t),H(g,s),e),s=[...H(y,e)];f(s,t)||(G(y,e,V(h(s,t))),X(v,e))}))),(L||p)&&!E(d)){const t=[...y];f(t,d)||(c(e,B(h(t,d))),L=1)}L&&w(t,[e]),z(v,(t=>w(s,[e,t])))}),Z(o),M(r,Z)),y},delIndexDefinition:e=>(g(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)=>O(H(l(e),t)),addSliceIdsListener:(e,s)=>L(s,t,[e]),addSliceRowIdsListener:(e,t,n)=>L(n,s,[e,t]),delListener:e=>(v(e),y),destroy:p,getListenerStats:()=>({})};return ae(y)})),ge=B([["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=>b(...e),(e,t)=>b(t,e),(e,t)=>t==e?void 0:e,(e,t,s)=>s==e?void 0:b(t,e)]],["min",[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)]],["sum",[e=>p(e),(e,t)=>e+t,(e,t)=>e-t,(e,t,s)=>e-s+t]]]),pe=$((e=>{const t=B(),[s,o,r,a,i,d,l,c,u,f]=Y(e,P,(e=>isNaN(e)||E(e)||!0===e||!1===e||e===n?void 0:1*e)),[h,g,p]=se((()=>L)),L={setMetricDefinition:(e,s,n,o,r,a,i)=>{const u=A(n)?[n,r,a,i]:H(ge,n)??H(ge,"sum");return c(e,s,((s,n,o,r,a,i)=>{let c=d(e),f=D(r);const[h,p,L,w]=u;i=i||E(c),z(n,(([e,t])=>{i||(c=E(e)?p?.(c,t,f++):E(t)?L?.(c,e,f--):w?.(c,t,e,f)),i=i||E(c)})),s(),F(r)?c=void 0:i&&(c=h(O(r),D(r))),m(c)||(c=void 0);const v=d(e);c!=v&&(l(e,c),g(t,[e],c,v))}),Z(o,1)),L},delMetricDefinition:e=>(u(e),L),getStore:s,getMetricIds:o,forEachMetric:r,hasMetric:a,getTableId:i,getMetric:d,addMetricListener:(e,s)=>h(s,t,[e]),delListener:e=>(p(e),L),destroy:f,getListenerStats:()=>({})};return ae(L)})),Le=(e,t,s,n,o)=>{let r,a=0;const i={load:async s=>{if(2!=a){a=1;const n=await t();E(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:()=>(M(r,e.delListener),i),getStore:()=>e,destroy:()=>i.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return ae(i)},we="storage",ve=globalThis.window,Ie=(e,t,s)=>{let n;return Le(e,(async()=>s.getItem(t)),(async e=>s.setItem(t,e)),(e=>{n=n=>{n.storageArea===s&&n.key===t&&e()},ve.addEventListener(we,n)}),(()=>{ve.removeEventListener(we,n),n=void 0}))},ye=e=>e.headers.get("ETag"),Se=$((e=>{const t=B(),s=B(),o=B(),r=B(),[a,i,d,l,c,u,f,h,g,p]=Y(e,(()=>[B(),B(),B(),B()]),(e=>E(e)?void 0:e+n)),[L,w,v]=se((()=>R)),I=(e,t,s)=>M(u(e),(([n,,o])=>{if(!J(o,t)){const r=V();if(c(e)!=S(e))X(r,t);else{let e=t;for(;!E(e)&&!J(r,e);)X(r,e),e=H(n,e)}if(s)return r;G(o,t,r)}return H(o,t)})),y=(e,t)=>M(u(e),(([,,e])=>G(e,t))),S=e=>H(t,e),R={setRelationshipDefinition:(e,n,a,i)=>(G(t,e,a),h(e,n,((t,n)=>{const a=V(),i=V(),d=V(),[l,c]=u(e);z(n,(([t,s],n)=>{E(t)||(X(i,t),M(H(c,t),(e=>{N(e,n),F(e)&&G(c,t)}))),E(s)||(X(i,s),J(c,s)||G(c,s,V()),X(H(c,s),n)),X(a,n),G(l,n,s),W(H(r,e),(t=>{J(I(e,t),n)&&X(d,t)}))})),t(),z(a,(t=>w(s,[e,t]))),z(i,(t=>w(o,[e,t]))),z(d,(t=>{y(e,t),w(r,[e,t])}))}),Z(i)),R),delRelationshipDefinition:e=>(G(t,e),g(e),R),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)=>O(H(u(e)?.[1],t)),getLinkedRowIds:(e,t)=>E(u(e))?[t]:O(I(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)=>(I(e,t),L(s,r,[e,t])),delListener:e=>(y(...v(e)),R),destroy:p,getListenerStats:()=>({})};return ae(R)})),Re=(e,t,s,n=G)=>{const o=(r=q(e),a=e=>!ie(t,e),r.filter(a));var r,a;return g(oe(t),(n=>s(e,n,t[n]))),g(o,(t=>n(e,t))),e},Te=e=>{const t=s(e);return x(t)||t==a&&m(e)?t:void 0},be=(e,t,s)=>E(e)||!(e=>k(e,ne)&&e.constructor==ne)(e)||ce(e)||re(e)?(s?.(),!1):(le(e,((s,n)=>{t(s,n)||de(e,n)})),!ce(e)),Ce=(e,t,s)=>G(e,t,H(e,t)==-s?void 0:s);e.createCheckpoints=ue,e.createCustomPersister=Le,e.createFilePersister=(e,s)=>{let n;return Le(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=he,e.createLocalPersister=(e,t)=>Ie(e,t,localStorage),e.createMetrics=pe,e.createRelationships=Se,e.createRemotePersister=(e,t,s,n)=>{let o,r;return Le(e,(async()=>{const e=await fetch(t);return r=ye(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=ye(s);E(r)||E(n)||n==r||(r=n,e())}),1e3*n)}),(()=>{M(o,clearInterval),o=void 0}))},e.createSessionPersister=(e,t)=>Ie(e,t,sessionStorage),e.createStore=()=>{let e,t=0,s=0;const n=B(),o=B(),r=B(),i=B(),c=B(),f=B(),h=B(),p=B(),L=_(V),w=_(V),v=_(),I=_(),S=_(),b=_(),C=_(),m=_(),[k,P,D,O]=se((()=>je)),N=(t,s)=>(!e||J(f,s)||ye(s))&&be(t,((e,t)=>Y(s,t,e)),(()=>ye(s))),Y=(e,t,s,n)=>be(n?s:$(s,e,t),((n,o)=>M(Z(e,t,o,n),(e=>(s[o]=e,!0)),(()=>!1))),(()=>ye(e,t))),Z=(t,s,n,o)=>e?M(H(H(f,t),n),(e=>Te(o)!=e.type?ye(t,s,n,o,e.default):o),(()=>ye(t,s,n,o))):E(Te(o))?ye(t,s,n,o):o,$=(e,t,s)=>(M(H(h,t),(([n,o])=>{z(n,((t,s)=>{ie(e,s)||(e[s]=t)})),z(o,(n=>{ie(e,n)||ye(t,s,n)}))})),e),ee=e=>Re(f,e,((e,t,s)=>{const n=B(),o=V();Re(K(f,t,B()),s,((e,t,s)=>{G(e,t,s),M(s.default,(e=>G(n,t,e)),(()=>X(o,t)))})),G(h,t,[n,o])}),((e,t)=>{G(f,t),G(h,t)})),te=e=>Re(p,e,((e,t,s)=>ne(t,s)),((e,t)=>he(t))),ne=(e,t)=>Re(K(p,e,B(),(()=>Le(e,1))),t,((t,s,n)=>oe(e,t,s,n)),((t,s)=>ge(e,t,s))),oe=(e,t,s,n,o)=>Re(K(t,s,B(),(()=>we(e,s,1))),n,((t,n,o)=>re(e,s,t,n,o)),((n,r)=>pe(e,t,s,n,r,o))),re=(e,t,s,n,o)=>{J(s,n)||ve(e,t,n,1);const r=H(s,n);o!==r&&(Ie(e,t,n,r),G(s,n,o))},ce=(e,t,s,n,o)=>M(H(t,s),(t=>re(e,s,t,n,o)),(()=>oe(e,t,s,$({[n]:o},e,s)))),ue=e=>{const s=""+t++;return J(e,s)?ue(e):s},fe=e=>H(p,e)??ne(e,{}),he=e=>ne(e,{}),ge=(e,t,s)=>oe(e,t,s,{},!0),pe=(e,t,s,n,o,r)=>{const a=H(H(h,e)?.[0],o);if(!E(a)&&!r)return re(e,s,n,o,a);const i=t=>{Ie(e,s,t,H(n,t)),ve(e,s,t,-1),G(n,t)};E(a)?i(o):W(n,i),F(n)&&(we(e,s,-1),F(G(t,s))&&(Le(e,-1),G(p,e)))},Le=(e,t)=>Ce(n,e,t),we=(e,t,s)=>Ce(K(o,e,B()),t,s),ve=(e,t,s,n)=>Ce(K(K(r,e,B()),t,B()),s,n),Ie=(e,t,s,n)=>K(K(K(i,e,B()),t,B()),s,n),ye=(e,t,s,n,o)=>(y(K(K(K(c,e,B()),t,B()),s,[]),n),o),Se=(e,t,s)=>{const n=H(H(i,e),t),o=De(e,t,s);return J(n,s)?[!0,H(n,s),o]:[!1,o,o]},me=e=>F(c)||F(m[e])?0:z(e?U(c,(e=>U(e,U))):c,((t,s)=>z(t,((t,n)=>z(t,((t,o)=>P(m[e],[s,n,o],t))))))),ke=e=>{if(!F(i)){const t=F(b[e])&&F(I[e])&&F(w[e]),s=F(C[e])&&F(S[e])&&F(v[e])&&F(L[e]);if(!t||!s){const a=e?[U(n),U(o,U),U(r,(e=>U(e,U))),U(i,(e=>U(e,U)))]:[n,o,r,i];if(t||(z(a[2],((t,s)=>z(t,((t,n)=>{F(t)||P(b[e],[s,n])})))),z(a[1],((t,s)=>{F(t)||P(I[e],[s])})),F(a[0])||P(w[e])),!s){let t;z(a[3],((s,n)=>{let o;z(s,((s,r)=>{let a;z(s,((s,i)=>{const d=De(n,r,i);d!==s&&(P(C[e],[n,r,i],d,s,Se),t=o=a=1)})),a&&P(S[e],[n,r],Se)})),o&&P(v[e],[n],Se)})),t&&P(L[e],[],Se)}}}},Ee=e=>(Oe(e),je),Me=()=>Q(p,(e=>Q(e,Q))),xe=()=>q(p),Ae=e=>q(H(p,e)),Pe=(e,t)=>q(H(H(p,e),t)),De=(e,t,s)=>H(H(H(p,e),t),s),Je=e=>Ee((()=>(e=>be(e,N,ye))(e)?te(e):0)),Fe=()=>Ee((()=>te({}))),Oe=e=>{if(-1==s)return;s++;const t=e?.();return s--,0==s&&(s=1,me(1),ke(1),s=-1,me(0),ke(0),s=0,g([i,c,n,o,r],j)),t},je={getTables:Me,getTableIds:xe,getTable:e=>Q(H(p,e),Q),getRowIds:Ae,getRow:(e,t)=>Q(H(H(p,e),t)),getCellIds:Pe,getCell:De,hasTables:()=>!F(p),hasTable:e=>J(p,e),hasRow:(e,t)=>J(H(p,e),t),hasCell:(e,t,s)=>J(H(H(p,e),t),s),getJson:()=>R(p),getSchemaJson:()=>R(f),setTables:Je,setTable:(e,t)=>Ee((()=>N(t,e)?ne(e,t):0)),setRow:(e,t,s)=>Ee((()=>Y(e,t,s)?oe(e,fe(e),t,s):0)),addRow:(e,t)=>Oe((()=>{let s;return Y(e,s,t)&&oe(e,fe(e),s=ue(H(p,e)),t),s})),setPartialRow:(e,t,s)=>Ee((()=>{if(Y(e,t,s,1)){const n=fe(e);le(s,((s,o)=>ce(e,n,t,o,s)))}})),setCell:(e,t,s,n)=>Ee((()=>M(Z(e,t,s,A(n)?n(De(e,t,s)):n),(n=>ce(e,fe(e),t,s,n))))),setJson:e=>{try{"{}"===e?Fe():Je(T(e))}catch{}return je},setSchema:t=>Ee((()=>{if((e=(e=>be(e,(e=>be(e,(e=>{if(!be(e,((e,t)=>u([d,l],t))))return!1;const t=e.type;return!(!x(t)&&t!=a||(Te(e.default)!=t&&de(e,l),0))})))))(t))&&(ee(t),!F(p))){const e=Me();Fe(),Je(e)}})),delTables:Fe,delTable:e=>Ee((()=>J(p,e)?he(e):0)),delRow:(e,t)=>Ee((()=>M(H(p,e),(s=>J(s,t)?ge(e,s,t):0)))),delCell:(e,t,s,n)=>Ee((()=>M(H(p,e),(o=>M(H(o,t),(r=>J(r,s)?pe(e,o,t,r,s,n):0)))))),delSchema:()=>Ee((()=>{ee({}),e=!1})),transaction:Oe,forEachTable:e=>z(p,((t,s)=>e(s,(e=>z(t,((t,s)=>e(s,(e=>W(t,e))))))))),forEachRow:(e,t)=>z(H(p,e),((e,s)=>t(s,(t=>W(e,t))))),forEachCell:(e,t,s)=>W(H(H(p,e),t),s),addTablesListener:(e,t)=>k(e,L[t?1:0]),addTableIdsListener:(e,t)=>k(e,w[t?1:0]),addTableListener:(e,t,s)=>k(t,v[s?1:0],[e]),addRowIdsListener:(e,t,s)=>k(t,I[s?1:0],[e]),addRowListener:(e,t,s,n)=>k(s,S[n?1:0],[e,t]),addCellIdsListener:(e,t,s,n)=>k(s,b[n?1:0],[e,t]),addCellListener:(e,t,s,n,o)=>k(n,C[o?1:0],[e,t,s]),addInvalidCellListener:(e,t,s,n,o)=>k(n,m[o?1:0],[e,t,s]),callListener:e=>(O(e,[xe,Ae,Pe],(e=>E(e[2])?[]:[,,].fill(De(...e)))),je),delListener:e=>(D(e),je),getListenerStats:()=>({})};return ae(je)},e.defaultSorter=fe,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);
|
package/lib/umd/tinybase.js.gz
CHANGED
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tinybase",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.1.0-beta.2",
|
|
4
4
|
"author": "jamesgpearce",
|
|
5
5
|
"repository": "github:tinyplex/tinybase",
|
|
6
6
|
"license": "MIT",
|
|
@@ -42,6 +42,7 @@
|
|
|
42
42
|
"compileForProd": "gulp compileForProd",
|
|
43
43
|
"testUnit": "gulp testUnit",
|
|
44
44
|
"testUnitCountAsserts": "gulp testUnitCountAsserts",
|
|
45
|
+
"compileAndTestUnitSaveCoverage": "gulp compileAndTestUnitSaveCoverage",
|
|
45
46
|
"testPerf": "gulp testPerf",
|
|
46
47
|
"testE2e": "gulp testE2e",
|
|
47
48
|
"compileAndTestUnit": "gulp compileAndTestUnit",
|
|
@@ -55,9 +56,9 @@
|
|
|
55
56
|
"publishPackage": "gulp publishPackage"
|
|
56
57
|
},
|
|
57
58
|
"devDependencies": {
|
|
58
|
-
"@babel/cli": "^7.
|
|
59
|
-
"@babel/core": "^7.
|
|
60
|
-
"@babel/preset-env": "^7.16.
|
|
59
|
+
"@babel/cli": "^7.17.0",
|
|
60
|
+
"@babel/core": "^7.17.0",
|
|
61
|
+
"@babel/preset-env": "^7.16.11",
|
|
61
62
|
"@babel/preset-react": "^7.16.7",
|
|
62
63
|
"@babel/preset-typescript": "^7.16.7",
|
|
63
64
|
"@rollup/plugin-replace": "^3.0.1",
|
|
@@ -65,41 +66,41 @@
|
|
|
65
66
|
"@types/expect-puppeteer": "^4.4.7",
|
|
66
67
|
"@types/http-server": "^0.12.1",
|
|
67
68
|
"@types/jest": "^27.4.0",
|
|
68
|
-
"@types/jest-environment-puppeteer": "^
|
|
69
|
+
"@types/jest-environment-puppeteer": "^5.0.0",
|
|
69
70
|
"@types/less": "^3.0.3",
|
|
70
71
|
"@types/puppeteer": "^5.4.4",
|
|
71
|
-
"@types/react": "^17.0.
|
|
72
|
+
"@types/react": "^17.0.39",
|
|
72
73
|
"@types/react-dom": "^17.0.11",
|
|
73
74
|
"@types/react-test-renderer": "^17.0.1",
|
|
74
75
|
"@types/tmp": "^0.2.3",
|
|
75
|
-
"@typescript-eslint/eslint-plugin": "^5.10.
|
|
76
|
-
"@typescript-eslint/parser": "^5.10.
|
|
76
|
+
"@typescript-eslint/eslint-plugin": "^5.10.2",
|
|
77
|
+
"@typescript-eslint/parser": "^5.10.2",
|
|
77
78
|
"asciichart": "^1.5.25",
|
|
78
79
|
"babel-eslint": "^10.1.0",
|
|
79
|
-
"babel-jest": "^27.
|
|
80
|
+
"babel-jest": "^27.5.0",
|
|
80
81
|
"babel-preset-minify": "^0.5.1",
|
|
81
82
|
"country-flag-emoji-json": "^2.0.0",
|
|
82
|
-
"cspell": "^5.
|
|
83
|
-
"esbuild": "^0.14.
|
|
84
|
-
"eslint": "^8.
|
|
83
|
+
"cspell": "^5.18.3",
|
|
84
|
+
"esbuild": "^0.14.18",
|
|
85
|
+
"eslint": "^8.8.0",
|
|
85
86
|
"eslint-config-prettier": "^8.3.0",
|
|
86
|
-
"eslint-plugin-jest": "^
|
|
87
|
-
"eslint-plugin-jsdoc": "^37.
|
|
87
|
+
"eslint-plugin-jest": "^26.0.0",
|
|
88
|
+
"eslint-plugin-jsdoc": "^37.7.1",
|
|
88
89
|
"eslint-plugin-react": "^7.28.0",
|
|
89
90
|
"eslint-plugin-react-hooks": "^4.3.0",
|
|
90
91
|
"gulp": "^4.0.2",
|
|
91
92
|
"gulp-gzip": "^1.4.2",
|
|
92
93
|
"http-server": "^14.1.0",
|
|
93
|
-
"jest": "^27.
|
|
94
|
+
"jest": "^27.5.0",
|
|
94
95
|
"jest-fetch-mock": "^3.0.3",
|
|
95
|
-
"jest-puppeteer": "^6.0
|
|
96
|
+
"jest-puppeteer": "^6.1.0",
|
|
96
97
|
"less": "^4.1.2",
|
|
97
98
|
"prettier": "^2.5.1",
|
|
98
|
-
"puppeteer": "^13.1.
|
|
99
|
+
"puppeteer": "^13.1.3",
|
|
99
100
|
"react": "^17.0.2",
|
|
100
101
|
"react-dom": "^17.0.2",
|
|
101
102
|
"react-test-renderer": "^17.0.2",
|
|
102
|
-
"rollup": "^2.
|
|
103
|
+
"rollup": "^2.67.0",
|
|
103
104
|
"rollup-plugin-esbuild": "^4.8.2",
|
|
104
105
|
"rollup-plugin-gzip": "^3.0.0",
|
|
105
106
|
"rollup-plugin-prettier": "^2.2.2",
|
|
@@ -107,7 +108,7 @@
|
|
|
107
108
|
"tinydocs": "^0.1.10",
|
|
108
109
|
"tmp": "^0.2.1",
|
|
109
110
|
"ts-unused-exports": "^7.0.3",
|
|
110
|
-
"typescript": "4.5.
|
|
111
|
+
"typescript": "4.5.5"
|
|
111
112
|
},
|
|
112
113
|
"peerDependencies": {
|
|
113
114
|
"react": "^17.0.2"
|
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'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">2.
|
|
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'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">2.8kB - 5.8kB</a> when compressed, and has zero dependencies. And of course it'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'll only add a gzipped <em>2.
|
|
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'll only add a gzipped <em>2.8kB</em> to your app. You can incrementally add the other modules as you need more functionality, or get it all for <em>5.8kB</em>. The <code>ui-react</code> adaptor is just another <em>2.6kB</em>, and everything is fast.</p><p>Life'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>2.8kB</td><td>6.3kB</td><td>26.4kB</td><td>97.7kB</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.4kB</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>5.8kB</td><td>13.8kB</td><td>58.1kB</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>973</td><td>973</td><td>100.0%</td></tr><tr><th class="right">Statements</th><td>1,061</td><td>1,061</td><td>100.0%</td></tr><tr><th class="right">Functions</th><td>401</td><td>401</td><td>100.0%</td></tr><tr><th class="right">Branches</th><td>355</td><td>355</td><td>100.0%</td></tr><tr><th class="right">Tests</th><td colspan="3">1,757</td></tr><tr><th class="right">Assertions</th><td colspan="3">8,793</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://github.com/tinyplex/tinybase/issues">Issues</a> and <a href="https://github.com/tinyplex/tinybase/releases">release notes</a> on <a href="https://github.com/tinyplex/tinybase">GitHub</a></li><li>Packages on <a href="https://www.npmjs.com/package/tinybase/v/1.1.0-beta.2">NPM</a>.</li></ul></section><section><h2 id="about">About</h2><p>Building TinyBase was an interesting exercise in API design, minification, and documentation. It'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>
|