tinybase 2.2.0-beta.0 → 2.2.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. package/bin/cli.js +1 -1
  2. package/lib/checkpoints.js +1 -1
  3. package/lib/checkpoints.js.gz +0 -0
  4. package/lib/debug/queries.js +4 -3
  5. package/lib/debug/store.js +5 -5
  6. package/lib/debug/tinybase.js +6 -6
  7. package/lib/debug/tools.d.ts +155 -5
  8. package/lib/debug/tools.js +488 -431
  9. package/lib/es6/checkpoints.js +1 -1
  10. package/lib/es6/checkpoints.js.gz +0 -0
  11. package/lib/es6/indexes.js +1 -1
  12. package/lib/es6/indexes.js.gz +0 -0
  13. package/lib/es6/metrics.js +1 -1
  14. package/lib/es6/metrics.js.gz +0 -0
  15. package/lib/es6/queries.js +1 -1
  16. package/lib/es6/queries.js.gz +0 -0
  17. package/lib/es6/relationships.js +1 -1
  18. package/lib/es6/relationships.js.gz +0 -0
  19. package/lib/es6/store.js +1 -1
  20. package/lib/es6/store.js.gz +0 -0
  21. package/lib/es6/tinybase.js +1 -1
  22. package/lib/es6/tinybase.js.gz +0 -0
  23. package/lib/es6/tools.d.ts +155 -5
  24. package/lib/es6/tools.js +1 -1
  25. package/lib/es6/tools.js.gz +0 -0
  26. package/lib/es6/ui-react.js +1 -1
  27. package/lib/es6/ui-react.js.gz +0 -0
  28. package/lib/indexes.js +1 -1
  29. package/lib/indexes.js.gz +0 -0
  30. package/lib/metrics.js +1 -1
  31. package/lib/metrics.js.gz +0 -0
  32. package/lib/queries.js +1 -1
  33. package/lib/queries.js.gz +0 -0
  34. package/lib/relationships.js +1 -1
  35. package/lib/relationships.js.gz +0 -0
  36. package/lib/store.js +1 -1
  37. package/lib/store.js.gz +0 -0
  38. package/lib/tinybase.js +1 -1
  39. package/lib/tinybase.js.gz +0 -0
  40. package/lib/tools.d.ts +155 -5
  41. package/lib/tools.js +1 -1
  42. package/lib/tools.js.gz +0 -0
  43. package/lib/umd/checkpoints.js +1 -1
  44. package/lib/umd/checkpoints.js.gz +0 -0
  45. package/lib/umd/indexes.js +1 -1
  46. package/lib/umd/indexes.js.gz +0 -0
  47. package/lib/umd/metrics.js +1 -1
  48. package/lib/umd/metrics.js.gz +0 -0
  49. package/lib/umd/queries.js +1 -1
  50. package/lib/umd/queries.js.gz +0 -0
  51. package/lib/umd/relationships.js +1 -1
  52. package/lib/umd/relationships.js.gz +0 -0
  53. package/lib/umd/store.js +1 -1
  54. package/lib/umd/store.js.gz +0 -0
  55. package/lib/umd/tinybase.js +1 -1
  56. package/lib/umd/tinybase.js.gz +0 -0
  57. package/lib/umd/tools.d.ts +155 -5
  58. package/lib/umd/tools.js +1 -1
  59. package/lib/umd/tools.js.gz +0 -0
  60. package/lib/umd-es6/checkpoints.js +1 -1
  61. package/lib/umd-es6/checkpoints.js.gz +0 -0
  62. package/lib/umd-es6/indexes.js +1 -1
  63. package/lib/umd-es6/indexes.js.gz +0 -0
  64. package/lib/umd-es6/metrics.js +1 -1
  65. package/lib/umd-es6/metrics.js.gz +0 -0
  66. package/lib/umd-es6/queries.js +1 -1
  67. package/lib/umd-es6/queries.js.gz +0 -0
  68. package/lib/umd-es6/relationships.js +1 -1
  69. package/lib/umd-es6/relationships.js.gz +0 -0
  70. package/lib/umd-es6/store.js +1 -1
  71. package/lib/umd-es6/store.js.gz +0 -0
  72. package/lib/umd-es6/tinybase.js +1 -1
  73. package/lib/umd-es6/tinybase.js.gz +0 -0
  74. package/lib/umd-es6/tools.d.ts +155 -5
  75. package/lib/umd-es6/tools.js +1 -1
  76. package/lib/umd-es6/tools.js.gz +0 -0
  77. package/lib/umd-es6/ui-react.js +1 -1
  78. package/lib/umd-es6/ui-react.js.gz +0 -0
  79. package/package.json +6 -5
  80. package/readme.md +21 -2
@@ -1 +1 @@
1
- var e,t;e=this,t=function(e,t){"use strict";const n=e=>typeof e,r="",o=n(r),l=n(!0),s=n(0),i=n(n),a="type",d="default",c="utf8",u="Listener",v="Result",f="add",h="Table",g="RowIds",p="CellIds",y="Cell",w=e=>r+e,L=(e,t)=>e.includes(t),R=(e,t)=>e.every(t),I=(e,t)=>x(e)===x(t)&&R(e,((e,n)=>t[n]===e)),S=(e,t)=>R(e,((n,r)=>0==r||t(e[r-1],n)<=0)),T=(e,t)=>e.sort(t),b=(e,t)=>e.forEach(t),m=(e,t)=>e.map(t),C=e=>P(e,((e,t)=>e+t),0),x=e=>e.length,E=e=>0==x(e),P=(e,t,n)=>e.reduce(t,n),k=(e,t,n)=>e.slice(t,n),M=(e,...t)=>e.push(...t),A=e=>e.pop(),D=e=>e.shift(),O=e=>JSON.stringify(e,((e,t)=>z(t,Map)?P([...t],((e,[t,n])=>(e[t]=n,e)),{}):t)),F=JSON.parse,j=Math.max,J=Math.min,Q=isFinite,z=(e,t)=>e instanceof t,N=e=>null==e,W=(e,t,n)=>N(e)?null==n?void 0:n():t(e),B=e=>e==o||e==l,q=e=>n(e)==i,H=e=>Array.isArray(e),$=()=>{},G=e=>e.size,K=(e,t)=>{var n;return null!=(n=null==e?void 0:e.has(t))&&n},U=e=>N(e)||0==G(e),V=e=>{var t;return[...null!=(t=null==e?void 0:e.values())?t:[]]},X=e=>e.clear(),Y=(e,t)=>null==e?void 0:e.forEach(t),Z=(e,t)=>null==e?void 0:e.delete(t),_=e=>new Map(e),ee=e=>{var t;return[...null!=(t=null==e?void 0:e.keys())?t:[]]},te=(e,t)=>null==e?void 0:e.get(t),ne=(e,t)=>Y(e,((e,n)=>t(n,e))),re=(e,t,n)=>N(n)?(Z(e,t),e):null==e?void 0:e.set(t,n),oe=(e,t,n)=>(K(e,t)||re(e,t,n()),te(e,t)),le=(e,t,n)=>{const r={},o=null!=t?t:e=>e;return Y(e,((e,t)=>W(o(e),(e=>(null==n?void 0:n(e))?0:r[t]=e)))),r},se=(e,t)=>{const n=_(),r=null!=t?t:e=>e;return Y(e,((e,t)=>n.set(t,r(e)))),n},ie=e=>se(e,se),ae=(e,t,n,r,o=0)=>W((n?oe:te)(e,t[o],o>x(t)-2?n:_),(l=>{if(o>x(t)-2)return(null==r?void 0:r(l))&&re(e,t[o]),l;const s=ae(l,t,n,r,o+1);return U(l)&&re(e,t[o]),s})),de=e=>new Set(H(e)||N(e)?e:[e]),ce=(e,t)=>null==e?void 0:e.add(t),ue=(e,t,n)=>{const r=e.hasRow,o=_(),l=_(),s=_(),i=_(),a=_(),d=(t,n,...r)=>{const o=oe(a,t,de);return b(r,(t=>ce(o,t)&&n&&e.callListener(t))),r},c=(t,...n)=>W(te(a,t),(r=>{b(E(n)?V(r):n,(t=>{e.delListener(t),Z(r,t)})),U(r)&&re(a,t)})),u=(e,n)=>{re(o,e,n),K(l,e)||(re(l,e,t()),re(s,e,_()),re(i,e,_()))},v=e=>{re(o,e),re(l,e),re(s,e),re(i,e),c(e)};return[()=>e,()=>ee(o),e=>ne(l,e),e=>K(l,e),e=>te(o,e),e=>te(l,e),(e,t)=>re(l,e,t),u,(t,o,l,a,v)=>{u(t,o);const f=_(),h=_(),g=te(s,t),p=te(i,t),y=t=>{const l=n=>e.getCell(o,t,n),s=te(g,t),i=r(o,t)?n(a(l,t)):void 0;if(s===i||H(s)&&H(i)&&I(s,i)||re(f,t,[s,i]),!N(v)){const e=te(p,t),n=r(o,t)?v(l,t):void 0;e!=n&&re(h,t,n)}},w=e=>{l((()=>{Y(f,(([,e],t)=>re(g,t,e))),Y(h,((e,t)=>re(p,t,e)))}),f,h,g,p,e),X(f),X(h)};ne(g,y),e.hasTable(o)&&b(e.getRowIds(o),(e=>{K(g,e)||y(e)})),w(!0),c(t),d(t,0,e.addRowListener(o,null,((e,t,n)=>y(n))),e.addTableListener(o,(()=>w())))},v,()=>ne(a,v),d,c]},ve=(e,t)=>n(e)==o?t=>t(e):null!=e?e:()=>null!=t?t:r,fe=e=>{const t=new WeakMap;return n=>(t.has(n)||t.set(n,e(n)),t.get(n))},he=/^\d+$/,ge=()=>{const e=[];let t=0;return[()=>{var n;return null!=(n=D(e))?n:r+t++},t=>{he.test(t)&&x(e)<1e3&&M(e,t)}]},pe=e=>{let t;const[n,o]=ge(),l=_();return[(o,s,i)=>{null!=t||(t=e());const a=n();return re(l,a,[o,s,i]),ce(ae(s,null!=i?i:[r],de),a),a},(e,n,...o)=>b(((e,t=[r])=>{const n=[],o=(e,r)=>r==x(t)?M(n,e):null===t[r]?Y(e,(e=>o(e,r+1))):b([t[r],null],(t=>o(te(e,t),r+1)));return o(e,0),n})(e,n),(e=>Y(e,(e=>te(l,e)[0](t,...null!=n?n:[],...o))))),e=>W(te(l,e),(([,t,n])=>(ae(t,null!=n?n:[r],void 0,(t=>(Z(t,e),U(t)?1:0))),re(l,e),o(e),n))),(e,n,r)=>W(te(l,e),(([e,,o=[]])=>{const l=(...s)=>{const i=x(s);i==x(o)?e(t,...s,...r(s)):N(o[i])?b(n[i](...s),(e=>l(...s,e))):l(...s,o[i])};l()}))]},ye=Object,we=ye.keys,Le=ye.isFrozen,Re=ye.freeze,Ie=(e,t)=>!N(((e,t)=>W(e,(e=>e[t])))(e,t)),Se=(e,t)=>delete e[t],Te=(e,t)=>b(ye.entries(e),(([e,n])=>t(n,e))),be=e=>E(we(e)),me=e=>{const t=n(e);return B(t)||t==s&&Q(e)?t:void 0},Ce=(e,t,n,r,o)=>N(o)?e.delCell(t,n,r,!0):e.setCell(t,n,r,o),xe=fe((e=>{let t,n,o,l=100,s=_(),i=1;const a=_(),d=_(),[c,u,v]=pe((()=>j)),f=_(),h=_(),g=[],p=[],y=(t,n)=>{i=0,e.transaction((()=>Y(te(f,n),((n,r)=>Y(n,((n,o)=>Y(n,((n,l)=>Ce(e,r,o,l,n[t]))))))))),i=1},w=e=>{re(f,e),re(h,e),u(d,[e])},R=(e,t)=>b(((e,t)=>e.splice(0,t))(e,null!=t?t:x(e)),w),I=()=>R(g,x(g)-l),S=e.addCellListener(null,null,null,((e,n,r,l,a,d)=>{if(i){W(t,(()=>{M(g,t),I(),R(p),t=void 0,o=1}));const e=oe(s,n,_),i=oe(e,r,_),c=oe(i,l,(()=>[d,void 0]));c[1]=a,c[0]===a&&U(re(i,l))&&U(re(e,r))&&U(re(s,n))&&(t=A(g),o=1),P()}})),T=(e="")=>(N(t)&&(t=r+n++,re(f,t,s),O(t,e),s=_(),o=1),t),m=()=>{E(g)||(((e,...t)=>{e.unshift(...t)})(p,T()),y(0,t),t=A(g),o=1)},C=()=>{E(p)||(M(g,t),t=D(p),y(1,t),o=1)},P=()=>{o&&(u(a),o=0)},k=e=>{const t=T(e);return P(),t},O=(e,t)=>(F(e)&&te(h,e)!==t&&(re(h,e,t),u(d,[e])),j),F=e=>K(f,e),j={setSize:e=>(l=e,I(),j),addCheckpoint:k,setCheckpoint:O,getStore:()=>e,getCheckpointIds:()=>[[...g],t,[...p]],forEachCheckpoint:e=>ne(h,e),hasCheckpoint:F,getCheckpoint:e=>te(h,e),goBackward:()=>(m(),P(),j),goForward:()=>(C(),P(),j),goTo:e=>{const n=L(g,e)?m:L(p,e)?C:null;for(;!N(n)&&e!=t;)n();return P(),j},addCheckpointIdsListener:e=>c(e,a),addCheckpointListener:(e,t)=>c(t,d,[e]),delListener:e=>(v(e),j),clear:()=>(R(g),R(p),N(t)||w(t),t=void 0,n=0,k(),j),destroy:()=>{e.delListener(S)},getListenerStats:()=>({})};return Re(j.clear())})),Ee=(e,t)=>e<t?-1:1,Pe=fe((e=>{const t=_(),n=_(),[o,l,s,i,a,d,c,,u,v,f]=ue(e,_,(e=>N(e)?r:H(e)?m(e,w):w(e))),[h,g,p]=pe((()=>L)),y=(t,n,r)=>{const o=a(t);Y(r,((t,r)=>n(r,(n=>Y(t,(t=>n(t,(n=>e.forEachCell(o,t,n)))))))))},L={setIndexDefinition:(e,r,o,l,s,i=Ee)=>{const a=N(s)?void 0:([e],[t])=>s(e,t);return u(e,r,((r,o,s,u,v,f)=>{let h=0;const p=de(),y=de(),w=d(e);if(Y(o,(([e,t],n)=>{const r=de(e),o=de(t);Y(r,(e=>Z(o,e)?Z(r,e):0)),Y(r,(e=>{ce(p,e),W(te(w,e),(t=>{Z(t,n),U(t)&&(re(w,e),h=1)}))})),Y(o,(e=>{ce(p,e),K(w,e)||(re(w,e,de()),h=1),ce(te(w,e),n),N(l)||ce(y,e)}))})),r(),U(v)||(f?ne(w,(e=>ce(y,e))):ne(s,(e=>W(te(u,e),(e=>ce(y,e))))),Y(y,(e=>{const t=(t,n)=>i(te(v,t),te(v,n),e),n=[...te(w,e)];S(n,t)||(re(w,e,de(T(n,t))),ce(p,e))}))),(h||f)&&!N(a)){const t=[...w];S(t,a)||(c(e,_(T(t,a))),h=1)}h&&g(t,[e]),Y(p,(t=>g(n,[e,t])))}),ve(o),W(l,ve)),L},delIndexDefinition:e=>(v(e),L),getStore:o,getIndexIds:l,forEachIndex:e=>s(((t,n)=>e(t,(e=>y(t,e,n))))),forEachSlice:(e,t)=>y(e,t,d(e)),hasIndex:i,hasSlice:(e,t)=>K(d(e),t),getTableId:a,getSliceIds:e=>ee(d(e)),getSliceRowIds:(e,t)=>V(te(d(e),t)),addSliceIdsListener:(e,n)=>h(n,t,[e]),addSliceRowIdsListener:(e,t,r)=>h(r,n,[e,t]),delListener:e=>(p(e),L),destroy:f,getListenerStats:()=>({})};return Re(L)})),ke=_([["avg",[(e,t)=>C(e)/t,(e,t,n)=>e+(t-e)/(n+1),(e,t,n)=>e+(e-t)/(n-1),(e,t,n,r)=>e+(t-n)/r]],["max",[e=>j(...e),(e,t)=>j(t,e),(e,t)=>t==e?void 0:e,(e,t,n)=>n==e?void 0:j(t,e)]],["min",[e=>J(...e),(e,t)=>J(t,e),(e,t)=>t==e?void 0:e,(e,t,n)=>n==e?void 0:J(t,e)]],["sum",[e=>C(e),(e,t)=>e+t,(e,t)=>e-t,(e,t,n)=>e-n+t]]]),Me=(e,t,n,r,o,l=!1)=>{if(U(n))return;const[s,i,a,d]=o;return l||(l=N(e)),Y(r,(([n,r])=>{l||(e=N(n)?null==i?void 0:i(e,r,t++):N(r)?null==a?void 0:a(e,n,t--):null==d?void 0:d(e,r,n,t),l||(l=N(e)))})),l?s(V(n),G(n)):e},Ae=fe((e=>{const t=_(),[n,o,l,s,i,a,d,,c,u,v]=ue(e,$,(e=>isNaN(e)||N(e)||!0===e||!1===e||e===r?void 0:1*e)),[f,h,g]=pe((()=>p)),p={setMetricDefinition:(e,n,r,o,l,s,i)=>{var u;const v=q(r)?[r,l,s,i]:null!=(u=te(ke,r))?u:te(ke,"sum");return c(e,n,((n,r,o,l,s,i)=>{const c=a(e),u=G(l);i||(i=N(c)),n();let f=Me(c,u,l,r,v,i);Q(f)||(f=void 0),f!=c&&(d(e,f),h(t,[e],f,c))}),ve(o,1)),p},delMetricDefinition:e=>(u(e),p),getStore:n,getMetricIds:o,forEachMetric:l,hasMetric:s,getTableId:i,getMetric:a,addMetricListener:(e,n)=>f(n,t,[e]),delListener:e=>(g(e),p),destroy:v,getListenerStats:()=>({})};return Re(p)}));var De=(e,t,n)=>new Promise(((r,o)=>{var l=e=>{try{i(n.next(e))}catch(e){o(e)}},s=e=>{try{i(n.throw(e))}catch(e){o(e)}},i=e=>e.done?r(e.value):Promise.resolve(e.value).then(l,s);i((n=n.apply(e,t)).next())}));const Oe=(e,t,n,o,l)=>{let s,i=0;const a={load:n=>De(void 0,null,(function*(){if(2!=i){i=1;const o=yield t();N(o)||o==r?e.setTables(n):e.setJson(o),i=0}return a})),startAutoLoad:e=>De(void 0,null,(function*(){return a.stopAutoLoad(),yield a.load(e),o(a.load),a})),stopAutoLoad:()=>(l(),a),save:()=>De(void 0,null,(function*(){return 1!=i&&(i=2,yield n(e.getJson()),i=0),a})),startAutoSave:()=>De(void 0,null,(function*(){return yield a.stopAutoSave().save(),s=e.addTablesListener((()=>a.save())),a})),stopAutoSave:()=>(W(s,e.delListener),a),getStore:()=>e,destroy:()=>a.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return Re(a)};var Fe=(e,t,n)=>new Promise(((r,o)=>{var l=e=>{try{i(n.next(e))}catch(e){o(e)}},s=e=>{try{i(n.throw(e))}catch(e){o(e)}},i=e=>e.done?r(e.value):Promise.resolve(e.value).then(l,s);i((n=n.apply(e,t)).next())}));const je="storage",Je=globalThis.window,Qe=(e,t,n)=>{let r;return Oe(e,(()=>Fe(void 0,null,(function*(){return n.getItem(t)}))),(e=>Fe(void 0,null,(function*(){return n.setItem(t,e)}))),(e=>{r=r=>{r.storageArea===n&&r.key===t&&e()},Je.addEventListener(je,r)}),(()=>{Je.removeEventListener(je,r),r=void 0}))};var ze=(e,t,n)=>new Promise(((r,o)=>{var l=e=>{try{i(n.next(e))}catch(e){o(e)}},s=e=>{try{i(n.throw(e))}catch(e){o(e)}},i=e=>e.done?r(e.value):Promise.resolve(e.value).then(l,s);i((n=n.apply(e,t)).next())})),Ne=(e,t,n)=>new Promise(((r,o)=>{var l=e=>{try{i(n.next(e))}catch(e){o(e)}},s=e=>{try{i(n.throw(e))}catch(e){o(e)}},i=e=>e.done?r(e.value):Promise.resolve(e.value).then(l,s);i((n=n.apply(e,t)).next())}));const We=e=>e.headers.get("ETag");var Be=Object.getOwnPropertySymbols,qe=Object.prototype.hasOwnProperty,He=Object.prototype.propertyIsEnumerable;const $e=fe((e=>{const t=e.createStore,[n,o,l,s,i,,,a,,d,c,w,L]=ue(e,(()=>!0),$),I=t(),S=t(),T=_(),m=(e,t,...n)=>b(n,(n=>ce(oe(oe(T,t,_),e,de),n))),C=e=>{W(te(T,e),(e=>{ne(e,((e,t)=>Y(t,(t=>e.delListener(t))))),X(e)})),b([S,I],(t=>t.delTable(e)))},P=(e,t,n)=>m(t,e,t.addWillFinishTransactionListener(n.startTransaction),t.addDidFinishTransactionListener((()=>n.finishTransaction()))),A={setQueryDefinition:(t,n,o)=>{a(t,n),C(t);const l=[],s=[[null,[n,null,null,[],_()]]],i=[],d=[],c=[];o({select:(e,t)=>{const n=q(e)?[x(l)+r,e]:[N(t)?e:t,n=>n(e,t)];return M(l,n),{as:e=>n[0]=e}},join:(e,t,n)=>{const r=N(n)||q(t)?null:t,o=N(r)?t:n,l=[e,[e,r,q(o)?o:e=>e(o),[],_()]];return M(s,l),{as:e=>l[0]=e}},where:(e,t,n)=>M(i,q(e)?e:N(n)?n=>n(e)===t:r=>r(e,t)===n),group:(e,t,n,r,o)=>{var l;const s=[e,[e,q(t)?[t,n,r,o]:null!=(l=te(ke,t))?l:[(e,t)=>t]]];return M(d,s),{as:e=>s[0]=e}},having:(e,t)=>M(c,q(e)?e:n=>n(e)===t)});const u=_(l);if(U(u))return A;const v=_(s);ne(v,((e,[,t])=>W(te(v,t),(({3:t})=>N(e)?0:M(t,e)))));const f=_(d);let h=I;if(U(f)&&E(c))h=S;else{P(t,h,S);const e=_();ne(f,((t,[n,r])=>ce(oe(e,n,de),[t,r])));const n=de();ne(u,(t=>K(e,t)?0:ce(n,t)));const r=_(),o=(n,r,o,l)=>W(n,(([s,i,a,d])=>{ne(r,((t,[n])=>{const r=oe(s,t,_),i=te(r,o),a=l?void 0:n;if(i!==a){const n=de([[i,a]]),l=G(r);re(r,o,a),Y(te(e,t),(([e,t])=>{const o=Me(d[e],l,r,n,t);d[e]=N(me(o))?null:o}))}})),U(i)||!R(c,(e=>e((e=>d[e]))))?S.delRow(t,a):N(a)?n[2]=S.addRow(t,d):S.setRow(t,a,d)}));m(h,t,h.addRowListener(t,null,((l,s,i,a)=>{const d=[],c=[],u=_(),v=h.hasRow(t,i);let f=!v;Y(n,(e=>{const[n,r,o]=a(t,i,e);M(d,r),M(c,o),f||(f=n)})),ne(e,(e=>{const[n,,r]=a(t,i,e);(f||n)&&re(u,e,[r])})),f&&o(ae(r,d,void 0,(([,e])=>(Z(e,i),U(e)))),u,i,1),v&&o(ae(r,c,(()=>{const e={};return Y(n,(n=>e[n]=h.getCell(t,i,n))),[_(),de(),void 0,e]}),(([,e])=>{ce(e,i)})),u,i)})))}P(t,e,h);const g=(r,o,l,s)=>{const a=t=>e.getCell(o,l,t);b(s,(n=>{var o;const[l,,s,i,d]=te(v,n),c=null==s?void 0:s(a,r),[u,f]=null!=(o=te(d,r))?o:[];c!=u&&(N(f)||L(t,f),re(d,r,N(c)?null:[c,...w(t,1,e.addRowListener(l,c,(()=>g(r,l,c,i))))]))})),(r=>{const o=(t,o)=>{var l,s,i;return e.getCell(...N(o)?[n,r,t]:t===n?[n,r,o]:[null==(l=te(v,t))?void 0:l[0],null==(i=te(null==(s=te(v,t))?void 0:s[4],r))?void 0:i[0],o])};h.transaction((()=>R(i,(e=>e(o)))?ne(u,((e,n)=>Ce(h,t,r,e,n(o,r)))):h.delRow(t,r)))})(r)},{3:p}=te(v,null);return h.transaction((()=>w(t,1,e.addRowListener(n,null,((r,o,l)=>{e.hasRow(n,l)?g(l,n,l,p):(h.delRow(t,l),Y(v,(({4:e})=>W(te(e,l),(([,n])=>{L(t,n),re(e,l)})))))}))))),A},delQueryDefinition:e=>(C(e),d(e),A),getStore:n,getQueryIds:o,forEachQuery:l,hasQuery:s,getTableId:i,delListener:e=>(S.delListener(e),A),destroy:c,getListenerStats:()=>((e,t)=>{var n={};for(var r in e)qe.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&Be)for(var r of Be(e))t.indexOf(r)<0&&He.call(e,r)&&(n[r]=e[r]);return n})(S.getListenerStats(),["tables","tableIds","transaction"])};return Te({[h]:[1,1],[g]:[0,1],SortedRowIds:[0,5],Row:[1,2],[p]:[0,2],[y]:[1,3]},(([e,t],n)=>{b(e?["get","has","forEach"]:["get"],(e=>A[e+v+n]=(...t)=>S[e+n](...t))),A[f+v+n+u]=(...e)=>S[f+n+u](...k(e,0,t),((n,...r)=>e[t](A,...r)))})),Re(A)})),Ge=fe((e=>{const t=_(),n=_(),o=_(),l=_(),[s,i,a,d,c,u,,,v,f,h]=ue(e,(()=>[_(),_(),_(),_()]),(e=>N(e)?void 0:e+r)),[g,p,y]=pe((()=>I)),w=(e,t,n)=>W(u(e),(([r,,o])=>{if(!K(o,t)){const l=de();if(c(e)!=R(e))ce(l,t);else{let e=t;for(;!N(e)&&!K(l,e);)ce(l,e),e=te(r,e)}if(n)return l;re(o,t,l)}return te(o,t)})),L=(e,t)=>W(u(e),(([,,e])=>re(e,t))),R=e=>te(t,e),I={setRelationshipDefinition:(e,r,s,i)=>(re(t,e,s),v(e,r,((t,r)=>{const s=de(),i=de(),a=de(),[d,c]=u(e);Y(r,(([t,n],r)=>{N(t)||(ce(i,t),W(te(c,t),(e=>{Z(e,r),U(e)&&re(c,t)}))),N(n)||(ce(i,n),K(c,n)||re(c,n,de()),ce(te(c,n),r)),ce(s,r),re(d,r,n),ne(te(l,e),(t=>{K(w(e,t),r)&&ce(a,t)}))})),t(),Y(s,(t=>p(n,[e,t]))),Y(i,(t=>p(o,[e,t]))),Y(a,(t=>{L(e,t),p(l,[e,t])}))}),ve(i)),I),delRelationshipDefinition:e=>(re(t,e),f(e),I),getStore:s,getRelationshipIds:i,forEachRelationship:t=>a((n=>t(n,(t=>e.forEachRow(c(n),t))))),hasRelationship:d,getLocalTableId:c,getRemoteTableId:R,getRemoteRowId:(e,t)=>{var n;return te(null==(n=u(e))?void 0:n[0],t)},getLocalRowIds:(e,t)=>{var n;return V(te(null==(n=u(e))?void 0:n[1],t))},getLinkedRowIds:(e,t)=>N(u(e))?[t]:V(w(e,t,!0)),addRemoteRowIdListener:(e,t,r)=>g(r,n,[e,t]),addLocalRowIdsListener:(e,t,n)=>g(n,o,[e,t]),addLinkedRowIdsListener:(e,t,n)=>(w(e,t),g(n,l,[e,t])),delListener:e=>(L(...y(e)),I),destroy:h,getListenerStats:()=>({})};return Re(I)})),Ke=e=>[e,e],Ue=()=>[_(),_()],Ve=(e,t,n,r=re)=>{const o=(l=ee(e),s=e=>!Ie(t,e),l.filter(s));var l,s;return b(we(t),(r=>n(e,r,t[r]))),b(o,(t=>r(e,t))),e},Xe=(e,t,n)=>N(e)||!(e=>z(e,ye)&&e.constructor==ye)(e)||be(e)||Le(e)?(null==n||n(),!1):(Te(e,((n,r)=>{t(n,r)||Se(e,r)})),!be(e)),Ye=(e,t,n)=>re(e,t,te(e,t)==-n?void 0:n),Ze=()=>{let e,t,n=0;const r=_(),o=_(),l=_(),i=_(),c=_(),v=_(),R=_(),S=_(),C=_(),x=Ue(),E=Ue(),P=Ue(),A=Ue(),D=Ue(),j=Ue(),J=Ue(),Q=Ue(),z=Ue(),H=Ue(),[$,G,V,ae]=pe((()=>dt)),ue=(t,n)=>(!e||K(v,n)||Ne(n))&&Xe(t,((e,t)=>ve(n,t,e)),(()=>Ne(n))),ve=(e,t,n,r)=>Xe(r?n:he(n,e,t),((r,o)=>W(fe(e,t,o,r),(e=>(n[o]=e,!0)),(()=>!1))),(()=>Ne(e,t))),fe=(t,n,r,o)=>e?W(te(te(v,t),r),(e=>me(o)!=e.type?Ne(t,n,r,o,e.default):o),(()=>Ne(t,n,r,o))):N(me(o))?Ne(t,n,r,o):o,he=(e,t,n)=>(W(te(R,t),(([r,o])=>{Y(r,((t,n)=>{Ie(e,n)||(e[n]=t)})),Y(o,(r=>{Ie(e,r)||Ne(t,n,r)}))})),e),ye=e=>Ve(v,e,((e,t,n)=>{const r=_(),o=de();Ve(oe(v,t,_),n,((e,t,n)=>{re(e,t,n),W(n.default,(e=>re(r,t,e)),(()=>ce(o,t)))})),re(R,t,[r,o])}),((e,t)=>{re(v,t),re(R,t)})),we=e=>Ve(C,e,((e,t,n)=>Le(t,n)),((e,t)=>De(t))),Le=(e,t)=>Ve(oe(C,e,(()=>(je(e,1),_()))),t,((t,n,r)=>xe(e,t,n,r)),((t,n)=>Oe(e,t,n))),xe=(e,t,n,r,o)=>Ve(oe(t,n,(()=>(Je(e,n,1),_()))),r,((t,r,o)=>Pe(e,n,t,r,o)),((r,l)=>Fe(e,t,n,r,l,o))),Pe=(e,t,n,r,o)=>{K(n,r)||Qe(e,t,r,1);const l=te(n,r);o!==l&&(ze(e,t,r,l,o),re(n,r,o))},ke=(e,t,n,r,o)=>W(te(t,n),(t=>Pe(e,n,t,r,o)),(()=>xe(e,t,n,he({[r]:o},e,n)))),Me=e=>{const[t]=oe(S,e,ge),n=t();return K(te(C,e),n)?Me(e):n},Ae=e=>{var t;return null!=(t=te(C,e))?t:Le(e,{})},De=e=>Le(e,{}),Oe=(e,t,n)=>{const[,r]=oe(S,e,ge);r(n),xe(e,t,n,{},!0)},Fe=(e,t,n,r,o,l)=>{var s;const i=te(null==(s=te(R,e))?void 0:s[0],o);if(!N(i)&&!l)return Pe(e,n,r,o,i);const a=t=>{ze(e,n,t,te(r,t)),Qe(e,n,t,-1),re(r,t)};N(i)?a(o):ne(r,a),U(r)&&(Je(e,n,-1),U(re(t,n))&&(je(e,-1),re(C,e),re(S,e)))},je=(e,t)=>Ye(r,e,t),Je=(e,t,n)=>Ye(oe(o,e,_),t,n),Qe=(e,t,n,r)=>Ye(oe(oe(l,e,_),t,_),n,r),ze=(e,t,n,r,o)=>oe(oe(oe(i,e,_),t,_),n,(()=>[r,0]))[1]=o,Ne=(e,t,n,r,o)=>(M(oe(oe(oe(c,e,_),t,_),n,(()=>[])),r),o),We=(e,t,n)=>W(te(te(te(i,e),t),n),(([e,t])=>[!0,e,t]),(()=>[!1,...Ke(rt(e,t,n))])),Be=e=>U(c)||U(z[e])?0:Y(e?se(c,ie):c,((t,n)=>Y(t,((t,r)=>Y(t,((t,o)=>G(z[e],[n,r,o],t))))))),qe=(e,t,n)=>{if(!U(t))return G(e,n),1},He=e=>{const t=U(D[e]),n=U(J[e])&&U(A[e])&&t&&U(E[e]),s=U(Q[e])&&U(j[e])&&U(P[e])&&U(x[e]);if(!n||!s){const a=e?[se(r),ie(o),se(l,ie),se(i,ie)]:[r,o,l,i];if(!n){Y(a[2],((t,n)=>Y(t,((t,r)=>qe(J[e],t,[n,r])))));const n=de();Y(a[1],((r,o)=>{qe(A[e],r,[o])&&!t&&(G(D[e],[o,null]),ce(n,o))})),t||Y(a[3],((t,r)=>{if(!K(n,r)){const n=de();Y(t,(e=>Y(e,(([t,r],o)=>r!==t?ce(n,o):Z(e,o))))),Y(n,(t=>G(D[e],[r,t])))}})),qe(E[e],a[0])}if(!s){let t;Y(a[3],((n,r)=>{let o;Y(n,((n,l)=>{let s;Y(n,(([n,i],a)=>{i!==n&&(G(Q[e],[r,l,a],i,n,We),t=o=s=1)})),s&&G(j[e],[r,l],We)})),o&&G(P[e],[r],We)})),t&&G(x[e],void 0,We)}}},$e=(e,...t)=>(st((()=>e(...m(t,w)))),dt),Ge=()=>le(C,(e=>le(e,le))),_e=()=>ee(C),et=e=>ee(te(C,w(e))),tt=(e,t,n,r=0,o)=>{return m(k(T((l=te(C,w(e)),s=(e,n)=>[N(t)?n:te(e,w(t)),n],m([...null!=(i=null==l?void 0:l.entries())?i:[]],(([e,t])=>s(t,e)))),(([e],[t])=>Ee(e,t)*(n?-1:1))),r,N(o)?o:r+o),(([,e])=>e));var l,s,i},nt=(e,t)=>ee(te(te(C,w(e)),w(t))),rt=(e,t,n)=>te(te(te(C,w(e)),w(t)),w(n)),ot=e=>$e((()=>(e=>Xe(e,ue,Ne))(e)?we(e):0)),lt=()=>$e((()=>we({}))),st=(e,t)=>{if(-1==n)return;it();const r=e();return at(t),r},it=()=>(n++,dt),at=e=>(n>0&&(n--,0==n&&(t=!U(i),n=1,Be(1),t&&He(1),n=-1,(null==e?void 0:e(le(i,(e=>le(e,(e=>le(e,(e=>[...e]),(([e,t])=>e===t))),be)),be),le(c,(e=>le(e,le)))))&&(n=1,Y(i,((e,t)=>Y(e,((e,n)=>Y(e,(([e],r)=>Ce(dt,t,n,r,e))))))),n=-1,t=!1),G(H[0],void 0,t),Be(0),t&&He(0),G(H[1],void 0,t),n=0,b([i,c,r,o,l],X))),dt),dt={getTables:Ge,getTableIds:_e,getTable:e=>le(te(C,w(e)),le),getRowIds:et,getSortedRowIds:tt,getRow:(e,t)=>le(te(te(C,w(e)),w(t))),getCellIds:nt,getCell:rt,hasTables:()=>!U(C),hasTable:e=>K(C,w(e)),hasRow:(e,t)=>K(te(C,w(e)),w(t)),hasCell:(e,t,n)=>K(te(te(C,w(e)),w(t)),w(n)),getJson:()=>O(C),getSchemaJson:()=>O(v),setTables:ot,setTable:(e,t)=>$e((e=>ue(t,e)?Le(e,t):0),e),setRow:(e,t,n)=>$e(((e,t)=>ve(w(e),w(t),n)?xe(w(e),Ae(w(e)),w(t),n):0),e,t),addRow:(e,t)=>st((()=>{let n;return ve(e,n,t)&&(e=w(e),xe(e,Ae(e),n=Me(e),t)),n})),setPartialRow:(e,t,n)=>$e(((e,t)=>{if(ve(e,t,n,1)){const r=Ae(e);Te(n,((n,o)=>ke(e,r,t,o,n)))}}),e,t),setCell:(e,t,n,r)=>$e(((e,t,n)=>W(fe(e,t,n,q(r)?r(rt(e,t,n)):r),(r=>ke(e,Ae(e),t,n,r)))),e,t,n),setJson:e=>{try{"{}"===e?lt():ot(F(e))}catch(e){}return dt},setSchema:t=>$e((()=>{if((e=(e=>Xe(e,(e=>Xe(e,(e=>{if(!Xe(e,((e,t)=>L([a,d],t))))return!1;const t=e.type;return!(!B(t)&&t!=s||(me(e.default)!=t&&Se(e,d),0))})))))(t))&&(ye(t),!U(C))){const e=Ge();lt(),ot(e)}})),delTables:lt,delTable:e=>$e((e=>K(C,e)?De(e):0),e),delRow:(e,t)=>$e(((e,t)=>W(te(C,e),(n=>K(n,t)?Oe(e,n,t):0))),e,t),delCell:(e,t,n,r)=>$e(((e,t,n)=>W(te(C,e),(o=>W(te(o,t),(l=>K(l,n)?Fe(e,o,t,l,n,r):0))))),e,t,n),delSchema:()=>$e((()=>{ye({}),e=!1})),transaction:st,startTransaction:it,finishTransaction:at,forEachTable:e=>Y(C,((t,n)=>e(n,(e=>Y(t,((t,n)=>e(n,(e=>ne(t,e))))))))),forEachRow:(e,t)=>Y(te(C,w(e)),((e,n)=>t(n,(t=>ne(e,t))))),forEachCell:(e,t,n)=>ne(te(te(C,w(e)),w(t)),n),addSortedRowIdsListener:(e,t,n,r,o,l,s)=>{let i=tt(e,t,n,r,o);return $((()=>{const s=tt(e,t,n,r,o);I(s,i)||(i=s,l(dt,e,t,n,r,o,i))}),D[s?1:0],[e,t])},addWillFinishTransactionListener:e=>$(e,H[0]),addDidFinishTransactionListener:e=>$(e,H[1]),callListener:e=>(ae(e,[_e,et,nt],(e=>N(e[2])?[]:Ke(rt(...e)))),dt),delListener:e=>(V(e),dt),getListenerStats:()=>({}),createStore:Ze};return Te({Tables:[0,x],TableIds:[0,E],[h]:[1,P],[g]:[1,A],Row:[2,j],[p]:[2,J],[y]:[3,Q],InvalidCell:[3,z]},(([e,t],n)=>{dt[f+n+u]=(...n)=>$(n[e],t[n[e+1]?1:0],e>0?k(n,0,e):void 0)})),Re(dt)};e.createCheckpoints=xe,e.createCustomPersister=Oe,e.createFilePersister=(e,n)=>{let r;return Oe(e,(()=>ze(void 0,null,(function*(){try{return yield t.promises.readFile(n,c)}catch(e){}}))),(e=>ze(void 0,null,(function*(){try{yield t.promises.writeFile(n,e,c)}catch(e){}}))),(e=>{r=t.watch(n,e)}),(()=>{null==r||r.close(),r=void 0}))},e.createIndexes=Pe,e.createLocalPersister=(e,t)=>Qe(e,t,localStorage),e.createMetrics=Ae,e.createQueries=$e,e.createRelationships=Ge,e.createRemotePersister=(e,t,n,r)=>{let o,l;return Oe(e,(()=>Ne(void 0,null,(function*(){const e=yield fetch(t);return l=We(e),e.text()}))),(e=>Ne(void 0,null,(function*(){return yield fetch(n,{method:"POST",headers:{"Content-Type":"application/json"},body:e})}))),(e=>{o=setInterval((()=>Ne(void 0,null,(function*(){const n=yield fetch(t,{method:"HEAD"}),r=We(n);N(l)||N(r)||r==l||(l=r,e())}))),1e3*r)}),(()=>{W(o,clearInterval),o=void 0}))},e.createSessionPersister=(e,t)=>Qe(e,t,sessionStorage),e.createStore=Ze,e.defaultSorter=Ee},"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 n=e=>typeof e,r="",o=n(r),l=n(!0),s=n(0),i=n(n),a="default",d="utf8",c="Listener",u="Result",v="add",f="Table",h="RowIds",g="CellIds",p="Cell",y=e=>r+e,w=(e,t)=>e.includes(t),L=(e,t)=>e.every(t),R=(e,t)=>C(e)===C(t)&&L(e,((e,n)=>t[n]===e)),I=(e,t)=>L(e,((n,r)=>0==r||t(e[r-1],n)<=0)),S=(e,t)=>e.sort(t),T=(e,t)=>e.forEach(t),b=(e,t)=>e.map(t),m=e=>E(e,((e,t)=>e+t),0),C=e=>e.length,x=e=>0==C(e),E=(e,t,n)=>e.reduce(t,n),P=(e,t,n)=>e.slice(t,n),k=(e,...t)=>e.push(...t),M=e=>e.pop(),A=e=>e.shift(),D=e=>JSON.stringify(e,((e,t)=>Q(t,Map)?E([...t],((e,[t,n])=>(e[t]=n,e)),{}):t)),O=JSON.parse,F=Math.max,j=Math.min,J=isFinite,Q=(e,t)=>e instanceof t,z=e=>null==e,N=(e,t,n)=>z(e)?null==n?void 0:n():t(e),W=e=>e==o||e==l,B=e=>n(e)==i,q=e=>Array.isArray(e),H=()=>{},$=e=>e.size,G=(e,t)=>{var n;return null!=(n=null==e?void 0:e.has(t))&&n},K=e=>z(e)||0==$(e),U=e=>{var t;return[...null!=(t=null==e?void 0:e.values())?t:[]]},V=e=>e.clear(),X=(e,t)=>null==e?void 0:e.forEach(t),Y=(e,t)=>null==e?void 0:e.delete(t),Z=e=>new Map(e),_=e=>{var t;return[...null!=(t=null==e?void 0:e.keys())?t:[]]},ee=(e,t)=>null==e?void 0:e.get(t),te=(e,t)=>X(e,((e,n)=>t(n,e))),ne=(e,t,n)=>z(n)?(Y(e,t),e):null==e?void 0:e.set(t,n),re=(e,t,n)=>(G(e,t)||ne(e,t,n()),ee(e,t)),oe=(e,t,n)=>{const r={},o=null!=t?t:e=>e;return X(e,((e,t)=>N(o(e),(e=>(null==n?void 0:n(e))?0:r[t]=e)))),r},le=(e,t)=>{const n=Z(),r=null!=t?t:e=>e;return X(e,((e,t)=>n.set(t,r(e)))),n},se=e=>le(e,le),ie=(e,t,n,r,o=0)=>N((n?re:ee)(e,t[o],o>C(t)-2?n:Z),(l=>{if(o>C(t)-2)return(null==r?void 0:r(l))&&ne(e,t[o]),l;const s=ie(l,t,n,r,o+1);return K(l)&&ne(e,t[o]),s})),ae=e=>new Set(q(e)||z(e)?e:[e]),de=(e,t)=>null==e?void 0:e.add(t),ce=(e,t,n)=>{const r=e.hasRow,o=Z(),l=Z(),s=Z(),i=Z(),a=Z(),d=(t,n,...r)=>{const o=re(a,t,ae);return T(r,(t=>de(o,t)&&n&&e.callListener(t))),r},c=(t,...n)=>N(ee(a,t),(r=>{T(x(n)?U(r):n,(t=>{e.delListener(t),Y(r,t)})),K(r)&&ne(a,t)})),u=(e,n)=>{ne(o,e,n),G(l,e)||(ne(l,e,t()),ne(s,e,Z()),ne(i,e,Z()))},v=e=>{ne(o,e),ne(l,e),ne(s,e),ne(i,e),c(e)};return[()=>e,()=>_(o),e=>te(l,e),e=>G(l,e),e=>ee(o,e),e=>ee(l,e),(e,t)=>ne(l,e,t),u,(t,o,l,a,v)=>{u(t,o);const f=Z(),h=Z(),g=ee(s,t),p=ee(i,t),y=t=>{const l=n=>e.getCell(o,t,n),s=ee(g,t),i=r(o,t)?n(a(l,t)):void 0;if(s===i||q(s)&&q(i)&&R(s,i)||ne(f,t,[s,i]),!z(v)){const e=ee(p,t),n=r(o,t)?v(l,t):void 0;e!=n&&ne(h,t,n)}},w=e=>{l((()=>{X(f,(([,e],t)=>ne(g,t,e))),X(h,((e,t)=>ne(p,t,e)))}),f,h,g,p,e),V(f),V(h)};te(g,y),e.hasTable(o)&&T(e.getRowIds(o),(e=>{G(g,e)||y(e)})),w(!0),c(t),d(t,0,e.addRowListener(o,null,((e,t,n)=>y(n))),e.addTableListener(o,(()=>w())))},v,()=>te(a,v),d,c]},ue=(e,t)=>n(e)==o?t=>t(e):null!=e?e:()=>null!=t?t:r,ve=e=>{const t=new WeakMap;return n=>(t.has(n)||t.set(n,e(n)),t.get(n))},fe=/^\d+$/,he=()=>{const e=[];let t=0;return[()=>{var n;return null!=(n=A(e))?n:r+t++},t=>{fe.test(t)&&C(e)<1e3&&k(e,t)}]},ge=e=>{let t;const[n,o]=he(),l=Z();return[(o,s,i)=>{null!=t||(t=e());const a=n();return ne(l,a,[o,s,i]),de(ie(s,null!=i?i:[r],ae),a),a},(e,n,...o)=>T(((e,t=[r])=>{const n=[],o=(e,r)=>r==C(t)?k(n,e):null===t[r]?X(e,(e=>o(e,r+1))):T([t[r],null],(t=>o(ee(e,t),r+1)));return o(e,0),n})(e,n),(e=>X(e,(e=>ee(l,e)[0](t,...null!=n?n:[],...o))))),e=>N(ee(l,e),(([,t,n])=>(ie(t,null!=n?n:[r],void 0,(t=>(Y(t,e),K(t)?1:0))),ne(l,e),o(e),n))),(e,n,r)=>N(ee(l,e),(([e,,o=[]])=>{const l=(...s)=>{const i=C(s);i==C(o)?e(t,...s,...r(s)):z(o[i])?T(n[i](...s),(e=>l(...s,e))):l(...s,o[i])};l()}))]},pe=Object,ye=pe.keys,we=pe.isFrozen,Le=pe.freeze,Re=(e,t)=>!z(((e,t)=>N(e,(e=>e[t])))(e,t)),Ie=(e,t)=>delete e[t],Se=(e,t)=>b(pe.entries(e),(([e,n])=>t(n,e))),Te=e=>x(ye(e)),be=e=>{const t=n(e);return W(t)||t==s&&J(e)?t:void 0},me=(e,t,n,r,o)=>z(o)?e.delCell(t,n,r,!0):e.setCell(t,n,r,o),Ce=ve((e=>{let t,n,o,l=100,s=Z(),i=1;const a=Z(),d=Z(),[c,u,v]=ge((()=>j)),f=Z(),h=Z(),g=[],p=[],y=(t,n)=>{i=0,e.transaction((()=>X(ee(f,n),((n,r)=>X(n,((n,o)=>X(n,((n,l)=>me(e,r,o,l,n[t]))))))))),i=1},L=e=>{ne(f,e),ne(h,e),u(d,[e])},R=(e,t)=>T(((e,t)=>e.splice(0,t))(e,null!=t?t:C(e)),L),I=()=>R(g,C(g)-l),S=e.addCellListener(null,null,null,((e,n,r,l,a,d)=>{if(i){N(t,(()=>{k(g,t),I(),R(p),t=void 0,o=1}));const e=re(s,n,Z),i=re(e,r,Z),c=re(i,l,(()=>[d,void 0]));c[1]=a,c[0]===a&&K(ne(i,l))&&K(ne(e,r))&&K(ne(s,n))&&(t=M(g),o=1),P()}})),b=(e="")=>(z(t)&&(t=r+n++,ne(f,t,s),O(t,e),s=Z(),o=1),t),m=()=>{x(g)||(((e,...t)=>{e.unshift(...t)})(p,b()),y(0,t),t=M(g),o=1)},E=()=>{x(p)||(k(g,t),t=A(p),y(1,t),o=1)},P=()=>{o&&(u(a),o=0)},D=e=>{const t=b(e);return P(),t},O=(e,t)=>(F(e)&&ee(h,e)!==t&&(ne(h,e,t),u(d,[e])),j),F=e=>G(f,e),j={setSize:e=>(l=e,I(),j),addCheckpoint:D,setCheckpoint:O,getStore:()=>e,getCheckpointIds:()=>[[...g],t,[...p]],forEachCheckpoint:e=>te(h,e),hasCheckpoint:F,getCheckpoint:e=>ee(h,e),goBackward:()=>(m(),P(),j),goForward:()=>(E(),P(),j),goTo:e=>{const n=w(g,e)?m:w(p,e)?E:null;for(;!z(n)&&e!=t;)n();return P(),j},addCheckpointIdsListener:e=>c(e,a),addCheckpointListener:(e,t)=>c(t,d,[e]),delListener:e=>(v(e),j),clear:()=>(R(g),R(p),z(t)||L(t),t=void 0,n=0,D(),j),destroy:()=>{e.delListener(S)},getListenerStats:()=>({})};return Le(j.clear())})),xe=(e,t)=>e<t?-1:1,Ee=ve((e=>{const t=Z(),n=Z(),[o,l,s,i,a,d,c,,u,v,f]=ce(e,Z,(e=>z(e)?r:q(e)?b(e,y):y(e))),[h,g,p]=ge((()=>L)),w=(t,n,r)=>{const o=a(t);X(r,((t,r)=>n(r,(n=>X(t,(t=>n(t,(n=>e.forEachCell(o,t,n)))))))))},L={setIndexDefinition:(e,r,o,l,s,i=xe)=>{const a=z(s)?void 0:([e],[t])=>s(e,t);return u(e,r,((r,o,s,u,v,f)=>{let h=0;const p=ae(),y=ae(),w=d(e);if(X(o,(([e,t],n)=>{const r=ae(e),o=ae(t);X(r,(e=>Y(o,e)?Y(r,e):0)),X(r,(e=>{de(p,e),N(ee(w,e),(t=>{Y(t,n),K(t)&&(ne(w,e),h=1)}))})),X(o,(e=>{de(p,e),G(w,e)||(ne(w,e,ae()),h=1),de(ee(w,e),n),z(l)||de(y,e)}))})),r(),K(v)||(f?te(w,(e=>de(y,e))):te(s,(e=>N(ee(u,e),(e=>de(y,e))))),X(y,(e=>{const t=(t,n)=>i(ee(v,t),ee(v,n),e),n=[...ee(w,e)];I(n,t)||(ne(w,e,ae(S(n,t))),de(p,e))}))),(h||f)&&!z(a)){const t=[...w];I(t,a)||(c(e,Z(S(t,a))),h=1)}h&&g(t,[e]),X(p,(t=>g(n,[e,t])))}),ue(o),N(l,ue)),L},delIndexDefinition:e=>(v(e),L),getStore:o,getIndexIds:l,forEachIndex:e=>s(((t,n)=>e(t,(e=>w(t,e,n))))),forEachSlice:(e,t)=>w(e,t,d(e)),hasIndex:i,hasSlice:(e,t)=>G(d(e),t),getTableId:a,getSliceIds:e=>_(d(e)),getSliceRowIds:(e,t)=>U(ee(d(e),t)),addSliceIdsListener:(e,n)=>h(n,t,[e]),addSliceRowIdsListener:(e,t,r)=>h(r,n,[e,t]),delListener:e=>(p(e),L),destroy:f,getListenerStats:()=>({})};return Le(L)})),Pe=Z([["avg",[(e,t)=>m(e)/t,(e,t,n)=>e+(t-e)/(n+1),(e,t,n)=>e+(e-t)/(n-1),(e,t,n,r)=>e+(t-n)/r]],["max",[e=>F(...e),(e,t)=>F(t,e),(e,t)=>t==e?void 0:e,(e,t,n)=>n==e?void 0:F(t,e)]],["min",[e=>j(...e),(e,t)=>j(t,e),(e,t)=>t==e?void 0:e,(e,t,n)=>n==e?void 0:j(t,e)]],["sum",[e=>m(e),(e,t)=>e+t,(e,t)=>e-t,(e,t,n)=>e-n+t]]]),ke=(e,t,n,r,o,l=!1)=>{if(K(n))return;const[s,i,a,d]=o;return l||(l=z(e)),X(r,(([n,r])=>{l||(e=z(n)?null==i?void 0:i(e,r,t++):z(r)?null==a?void 0:a(e,n,t--):null==d?void 0:d(e,r,n,t),l||(l=z(e)))})),l?s(U(n),$(n)):e},Me=ve((e=>{const t=Z(),[n,o,l,s,i,a,d,,c,u,v]=ce(e,H,(e=>isNaN(e)||z(e)||!0===e||!1===e||e===r?void 0:1*e)),[f,h,g]=ge((()=>p)),p={setMetricDefinition:(e,n,r,o,l,s,i)=>{var u;const v=B(r)?[r,l,s,i]:null!=(u=ee(Pe,r))?u:ee(Pe,"sum");return c(e,n,((n,r,o,l,s,i)=>{const c=a(e),u=$(l);i||(i=z(c)),n();let f=ke(c,u,l,r,v,i);J(f)||(f=void 0),f!=c&&(d(e,f),h(t,[e],f,c))}),ue(o,1)),p},delMetricDefinition:e=>(u(e),p),getStore:n,getMetricIds:o,forEachMetric:l,hasMetric:s,getTableId:i,getMetric:a,addMetricListener:(e,n)=>f(n,t,[e]),delListener:e=>(g(e),p),destroy:v,getListenerStats:()=>({})};return Le(p)}));var Ae=(e,t,n)=>new Promise(((r,o)=>{var l=e=>{try{i(n.next(e))}catch(e){o(e)}},s=e=>{try{i(n.throw(e))}catch(e){o(e)}},i=e=>e.done?r(e.value):Promise.resolve(e.value).then(l,s);i((n=n.apply(e,t)).next())}));const De=(e,t,n,o,l)=>{let s,i=0;const a={load:n=>Ae(void 0,null,(function*(){if(2!=i){i=1;const o=yield t();z(o)||o==r?e.setTables(n):e.setJson(o),i=0}return a})),startAutoLoad:e=>Ae(void 0,null,(function*(){return a.stopAutoLoad(),yield a.load(e),o(a.load),a})),stopAutoLoad:()=>(l(),a),save:()=>Ae(void 0,null,(function*(){return 1!=i&&(i=2,yield n(e.getJson()),i=0),a})),startAutoSave:()=>Ae(void 0,null,(function*(){return yield a.stopAutoSave().save(),s=e.addTablesListener((()=>a.save())),a})),stopAutoSave:()=>(N(s,e.delListener),a),getStore:()=>e,destroy:()=>a.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return Le(a)};var Oe=(e,t,n)=>new Promise(((r,o)=>{var l=e=>{try{i(n.next(e))}catch(e){o(e)}},s=e=>{try{i(n.throw(e))}catch(e){o(e)}},i=e=>e.done?r(e.value):Promise.resolve(e.value).then(l,s);i((n=n.apply(e,t)).next())}));const Fe="storage",je=globalThis.window,Je=(e,t,n)=>{let r;return De(e,(()=>Oe(void 0,null,(function*(){return n.getItem(t)}))),(e=>Oe(void 0,null,(function*(){return n.setItem(t,e)}))),(e=>{r=r=>{r.storageArea===n&&r.key===t&&e()},je.addEventListener(Fe,r)}),(()=>{je.removeEventListener(Fe,r),r=void 0}))};var Qe=(e,t,n)=>new Promise(((r,o)=>{var l=e=>{try{i(n.next(e))}catch(e){o(e)}},s=e=>{try{i(n.throw(e))}catch(e){o(e)}},i=e=>e.done?r(e.value):Promise.resolve(e.value).then(l,s);i((n=n.apply(e,t)).next())})),ze=(e,t,n)=>new Promise(((r,o)=>{var l=e=>{try{i(n.next(e))}catch(e){o(e)}},s=e=>{try{i(n.throw(e))}catch(e){o(e)}},i=e=>e.done?r(e.value):Promise.resolve(e.value).then(l,s);i((n=n.apply(e,t)).next())}));const Ne=e=>e.headers.get("ETag");var We=Object.getOwnPropertySymbols,Be=Object.prototype.hasOwnProperty,qe=Object.prototype.propertyIsEnumerable;const He=ve((e=>{const t=e.createStore,[n,o,l,s,i,,,a,,d,y,w,R]=ce(e,(()=>!0),H),I=t(),S=t(),b=Z(),m=(e,t,...n)=>T(n,(n=>de(re(re(b,t,Z),e,ae),n))),E=e=>{N(ee(b,e),(e=>{te(e,((e,t)=>X(t,(t=>e.delListener(t))))),V(e)})),T([S,I],(t=>t.delTable(e)))},M=(e,t,n)=>m(t,e,t.addWillFinishTransactionListener(n.startTransaction),t.addDidFinishTransactionListener((()=>n.finishTransaction()))),A={setQueryDefinition:(t,n,o)=>{a(t,n),E(t);const l=[],s=[[null,[n,null,null,[],Z()]]],i=[],d=[],c=[];o({select:(e,t)=>{const n=B(e)?[C(l)+r,e]:[z(t)?e:t,n=>n(e,t)];return k(l,n),{as:e=>n[0]=e}},join:(e,t,n)=>{const r=z(n)||B(t)?null:t,o=z(r)?t:n,l=[e,[e,r,B(o)?o:e=>e(o),[],Z()]];return k(s,l),{as:e=>l[0]=e}},where:(e,t,n)=>k(i,B(e)?e:z(n)?n=>n(e)===t:r=>r(e,t)===n),group:(e,t,n,r,o)=>{var l;const s=[e,[e,B(t)?[t,n,r,o]:null!=(l=ee(Pe,t))?l:[(e,t)=>t]]];return k(d,s),{as:e=>s[0]=e}},having:(e,t)=>k(c,B(e)?e:n=>n(e)===t)});const u=Z(l);if(K(u))return A;const v=Z(s);te(v,((e,[,t])=>N(ee(v,t),(({3:t})=>z(e)?0:k(t,e)))));const f=Z(d);let h=I;if(K(f)&&x(c))h=S;else{M(t,h,S);const e=Z();te(f,((t,[n,r])=>de(re(e,n,ae),[t,r])));const n=ae();te(u,(t=>G(e,t)?0:de(n,t)));const r=Z(),o=(n,r,o,l)=>N(n,(([s,i,a,d])=>{te(r,((t,[n])=>{const r=re(s,t,Z),i=ee(r,o),a=l?void 0:n;if(i!==a){const n=ae([[i,a]]),l=$(r);ne(r,o,a),X(ee(e,t),(([e,t])=>{const o=ke(d[e],l,r,n,t);d[e]=z(be(o))?null:o}))}})),K(i)||!L(c,(e=>e((e=>d[e]))))?S.delRow(t,a):z(a)?n[2]=S.addRow(t,d):S.setRow(t,a,d)}));m(h,t,h.addRowListener(t,null,((l,s,i,a)=>{const d=[],c=[],u=Z(),v=h.hasRow(t,i);let f=!v;X(n,(e=>{const[n,r,o]=a(t,i,e);k(d,r),k(c,o),f||(f=n)})),te(e,(e=>{const[n,,r]=a(t,i,e);(f||n)&&ne(u,e,[r])})),f&&o(ie(r,d,void 0,(([,e])=>(Y(e,i),K(e)))),u,i,1),v&&o(ie(r,c,(()=>{const e={};return X(n,(n=>e[n]=h.getCell(t,i,n))),[Z(),ae(),void 0,e]}),(([,e])=>{de(e,i)})),u,i)})))}M(t,e,h);const g=(r,o,l,s)=>{const a=t=>e.getCell(o,l,t);T(s,(n=>{var o;const[l,,s,i,d]=ee(v,n),c=null==s?void 0:s(a,r),[u,f]=null!=(o=ee(d,r))?o:[];c!=u&&(z(f)||R(t,f),ne(d,r,z(c)?null:[c,...w(t,1,e.addRowListener(l,c,(()=>g(r,l,c,i))))]))})),(r=>{const o=(t,o)=>{var l,s,i;return e.getCell(...z(o)?[n,r,t]:t===n?[n,r,o]:[null==(l=ee(v,t))?void 0:l[0],null==(i=ee(null==(s=ee(v,t))?void 0:s[4],r))?void 0:i[0],o])};h.transaction((()=>L(i,(e=>e(o)))?te(u,((e,n)=>me(h,t,r,e,n(o,r)))):h.delRow(t,r)))})(r)},{3:p}=ee(v,null);return h.transaction((()=>w(t,1,e.addRowListener(n,null,((r,o,l)=>{e.hasRow(n,l)?g(l,n,l,p):(h.delRow(t,l),X(v,(({4:e})=>N(ee(e,l),(([,n])=>{R(t,n),ne(e,l)})))))}))))),A},delQueryDefinition:e=>(E(e),d(e),A),getStore:n,getQueryIds:o,forEachQuery:l,hasQuery:s,getTableId:i,delListener:e=>(S.delListener(e),A),destroy:y,getListenerStats:()=>((e,t)=>{var n={};for(var r in e)Be.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&We)for(var r of We(e))t.indexOf(r)<0&&qe.call(e,r)&&(n[r]=e[r]);return n})(S.getListenerStats(),["tables","tableIds","transaction"])};return Se({[f]:[1,1],[h]:[0,1],SortedRowIds:[0,5],Row:[1,2],[g]:[0,2],[p]:[1,3]},(([e,t],n)=>{T(e?["get","has","forEach"]:["get"],(e=>A[e+u+n]=(...t)=>S[e+n](...t))),A[v+u+n+c]=(...e)=>S[v+n+c](...P(e,0,t),((n,...r)=>e[t](A,...r)))})),Le(A)})),$e=ve((e=>{const t=Z(),n=Z(),o=Z(),l=Z(),[s,i,a,d,c,u,,,v,f,h]=ce(e,(()=>[Z(),Z(),Z(),Z()]),(e=>z(e)?void 0:e+r)),[g,p,y]=ge((()=>I)),w=(e,t,n)=>N(u(e),(([r,,o])=>{if(!G(o,t)){const l=ae();if(c(e)!=R(e))de(l,t);else{let e=t;for(;!z(e)&&!G(l,e);)de(l,e),e=ee(r,e)}if(n)return l;ne(o,t,l)}return ee(o,t)})),L=(e,t)=>N(u(e),(([,,e])=>ne(e,t))),R=e=>ee(t,e),I={setRelationshipDefinition:(e,r,s,i)=>(ne(t,e,s),v(e,r,((t,r)=>{const s=ae(),i=ae(),a=ae(),[d,c]=u(e);X(r,(([t,n],r)=>{z(t)||(de(i,t),N(ee(c,t),(e=>{Y(e,r),K(e)&&ne(c,t)}))),z(n)||(de(i,n),G(c,n)||ne(c,n,ae()),de(ee(c,n),r)),de(s,r),ne(d,r,n),te(ee(l,e),(t=>{G(w(e,t),r)&&de(a,t)}))})),t(),X(s,(t=>p(n,[e,t]))),X(i,(t=>p(o,[e,t]))),X(a,(t=>{L(e,t),p(l,[e,t])}))}),ue(i)),I),delRelationshipDefinition:e=>(ne(t,e),f(e),I),getStore:s,getRelationshipIds:i,forEachRelationship:t=>a((n=>t(n,(t=>e.forEachRow(c(n),t))))),hasRelationship:d,getLocalTableId:c,getRemoteTableId:R,getRemoteRowId:(e,t)=>{var n;return ee(null==(n=u(e))?void 0:n[0],t)},getLocalRowIds:(e,t)=>{var n;return U(ee(null==(n=u(e))?void 0:n[1],t))},getLinkedRowIds:(e,t)=>z(u(e))?[t]:U(w(e,t,!0)),addRemoteRowIdListener:(e,t,r)=>g(r,n,[e,t]),addLocalRowIdsListener:(e,t,n)=>g(n,o,[e,t]),addLinkedRowIdsListener:(e,t,n)=>(w(e,t),g(n,l,[e,t])),delListener:e=>(L(...y(e)),I),destroy:h,getListenerStats:()=>({})};return Le(I)})),Ge=e=>[e,e],Ke=()=>[Z(),Z()],Ue=(e,t,n,r=ne)=>{const o=(l=e=>!Re(t,e),_(e).filter(l));var l;return T(ye(t),(r=>n(e,r,t[r]))),T(o,(t=>r(e,t))),e},Ve=(e,t,n)=>z(e)||!(e=>Q(e,pe)&&e.constructor==pe)(e)||Te(e)||we(e)?(null==n||n(),!1):(Se(e,((n,r)=>{t(n,r)||Ie(e,r)})),!Te(e)),Xe=(e,t,n)=>ne(e,t,ee(e,t)==-n?void 0:n),Ye=()=>{let e,t,n=0;const r=Z(),o=Z(),l=Z(),i=Z(),d=Z(),u=Z(),L=Z(),I=Z(),m=Z(),C=Ke(),x=Ke(),E=Ke(),M=Ke(),A=Ke(),F=Ke(),j=Ke(),J=Ke(),Q=Ke(),q=Ke(),[H,$,U,ie]=ge((()=>at)),ce=(t,n)=>(!e||G(u,n)||ze(n))&&Ve(t,((e,t)=>ue(n,t,e)),(()=>ze(n))),ue=(e,t,n,r)=>Ve(r?n:fe(n,e,t),((r,o)=>N(ve(e,t,o,r),(e=>(n[o]=e,!0)),(()=>!1))),(()=>ze(e,t))),ve=(t,n,r,o)=>e?N(ee(ee(u,t),r),(e=>be(o)!=e.type?ze(t,n,r,o,e.default):o),(()=>ze(t,n,r,o))):z(be(o))?ze(t,n,r,o):o,fe=(e,t,n)=>(N(ee(L,t),(([r,o])=>{X(r,((t,n)=>{Re(e,n)||(e[n]=t)})),X(o,(r=>{Re(e,r)||ze(t,n,r)}))})),e),pe=e=>Ue(u,e,((e,t,n)=>{const r=Z(),o=ae();Ue(re(u,t,Z),n,((e,t,n)=>{ne(e,t,n),N(n.default,(e=>ne(r,t,e)),(()=>de(o,t)))})),ne(L,t,[r,o])}),((e,t)=>{ne(u,t),ne(L,t)})),ye=e=>Ue(m,e,((e,t,n)=>we(t,n)),((e,t)=>Ae(t))),we=(e,t)=>Ue(re(m,e,(()=>(Fe(e,1),Z()))),t,((t,n,r)=>Ce(e,t,n,r)),((t,n)=>De(e,t,n))),Ce=(e,t,n,r,o)=>Ue(re(t,n,(()=>(je(e,n,1),Z()))),r,((t,r,o)=>Ee(e,n,t,r,o)),((r,l)=>Oe(e,t,n,r,l,o))),Ee=(e,t,n,r,o)=>{G(n,r)||Je(e,t,r,1);const l=ee(n,r);o!==l&&(Qe(e,t,r,l,o),ne(n,r,o))},Pe=(e,t,n,r,o)=>N(ee(t,n),(t=>Ee(e,n,t,r,o)),(()=>Ce(e,t,n,fe({[r]:o},e,n)))),ke=e=>{const[t]=re(I,e,he),n=t();return G(ee(m,e),n)?ke(e):n},Me=e=>{var t;return null!=(t=ee(m,e))?t:we(e,{})},Ae=e=>we(e,{}),De=(e,t,n)=>{const[,r]=re(I,e,he);r(n),Ce(e,t,n,{},!0)},Oe=(e,t,n,r,o,l)=>{var s;const i=ee(null==(s=ee(L,e))?void 0:s[0],o);if(!z(i)&&!l)return Ee(e,n,r,o,i);const a=t=>{Qe(e,n,t,ee(r,t)),Je(e,n,t,-1),ne(r,t)};z(i)?a(o):te(r,a),K(r)&&(je(e,n,-1),K(ne(t,n))&&(Fe(e,-1),ne(m,e),ne(I,e)))},Fe=(e,t)=>Xe(r,e,t),je=(e,t,n)=>Xe(re(o,e,Z),t,n),Je=(e,t,n,r)=>Xe(re(re(l,e,Z),t,Z),n,r),Qe=(e,t,n,r,o)=>re(re(re(i,e,Z),t,Z),n,(()=>[r,0]))[1]=o,ze=(e,t,n,r,o)=>(k(re(re(re(d,e,Z),t,Z),n,(()=>[])),r),o),Ne=(e,t,n)=>N(ee(ee(ee(i,e),t),n),(([e,t])=>[!0,e,t]),(()=>[!1,...Ge(nt(e,t,n))])),We=e=>K(d)||K(Q[e])?0:X(e?le(d,se):d,((t,n)=>X(t,((t,r)=>X(t,((t,o)=>$(Q[e],[n,r,o],t))))))),Be=(e,t,n)=>{if(!K(t))return $(e,n),1},qe=e=>{const t=K(A[e]),n=K(j[e])&&K(M[e])&&t&&K(x[e]),s=K(J[e])&&K(F[e])&&K(E[e])&&K(C[e]);if(!n||!s){const a=e?[le(r),se(o),le(l,se),le(i,se)]:[r,o,l,i];if(!n){X(a[2],((t,n)=>X(t,((t,r)=>Be(j[e],t,[n,r])))));const n=ae();X(a[1],((r,o)=>{Be(M[e],r,[o])&&!t&&($(A[e],[o,null]),de(n,o))})),t||X(a[3],((t,r)=>{if(!G(n,r)){const n=ae();X(t,(e=>X(e,(([t,r],o)=>r!==t?de(n,o):Y(e,o))))),X(n,(t=>$(A[e],[r,t])))}})),Be(x[e],a[0])}if(!s){let t;X(a[3],((n,r)=>{let o;X(n,((n,l)=>{let s;X(n,(([n,i],a)=>{i!==n&&($(J[e],[r,l,a],i,n,Ne),t=o=s=1)})),s&&$(F[e],[r,l],Ne)})),o&&$(E[e],[r],Ne)})),t&&$(C[e],void 0,Ne)}}},He=(e,...t)=>(lt((()=>e(...b(t,y)))),at),$e=()=>oe(m,(e=>oe(e,oe))),Ze=()=>_(m),_e=e=>_(ee(m,y(e))),et=(e,t,n,r=0,o)=>{return b(P(S((l=ee(m,y(e)),s=(e,n)=>[z(t)?n:ee(e,y(t)),n],b([...null!=(i=null==l?void 0:l.entries())?i:[]],(([e,t])=>s(t,e)))),(([e],[t])=>xe(e,t)*(n?-1:1))),r,z(o)?o:r+o),(([,e])=>e));var l,s,i},tt=(e,t)=>_(ee(ee(m,y(e)),y(t))),nt=(e,t,n)=>ee(ee(ee(m,y(e)),y(t)),y(n)),rt=e=>He((()=>(e=>Ve(e,ce,ze))(e)?ye(e):0)),ot=()=>He((()=>ye({}))),lt=(e,t)=>{if(-1==n)return;st();const r=e();return it(t),r},st=()=>(n++,at),it=e=>(n>0&&(n--,0==n&&(t=!K(i),n=1,We(1),t&&qe(1),n=-1,(null==e?void 0:e(oe(i,(e=>oe(e,(e=>oe(e,(e=>[...e]),(([e,t])=>e===t))),Te)),Te),oe(d,(e=>oe(e,oe)))))&&(n=1,X(i,((e,t)=>X(e,((e,n)=>X(e,(([e],r)=>me(at,t,n,r,e))))))),n=-1,t=!1),$(q[0],void 0,t),We(0),t&&qe(0),$(q[1],void 0,t),n=0,T([i,d,r,o,l],V))),at),at={getTables:$e,getTableIds:Ze,getTable:e=>oe(ee(m,y(e)),oe),getRowIds:_e,getSortedRowIds:et,getRow:(e,t)=>oe(ee(ee(m,y(e)),y(t))),getCellIds:tt,getCell:nt,hasTables:()=>!K(m),hasTable:e=>G(m,y(e)),hasRow:(e,t)=>G(ee(m,y(e)),y(t)),hasCell:(e,t,n)=>G(ee(ee(m,y(e)),y(t)),y(n)),getJson:()=>D(m),getSchemaJson:()=>D(u),setTables:rt,setTable:(e,t)=>He((e=>ce(t,e)?we(e,t):0),e),setRow:(e,t,n)=>He(((e,t)=>ue(y(e),y(t),n)?Ce(y(e),Me(y(e)),y(t),n):0),e,t),addRow:(e,t)=>lt((()=>{let n;return ue(e,n,t)&&(e=y(e),Ce(e,Me(e),n=ke(e),t)),n})),setPartialRow:(e,t,n)=>He(((e,t)=>{if(ue(e,t,n,1)){const r=Me(e);Se(n,((n,o)=>Pe(e,r,t,o,n)))}}),e,t),setCell:(e,t,n,r)=>He(((e,t,n)=>N(ve(e,t,n,B(r)?r(nt(e,t,n)):r),(r=>Pe(e,Me(e),t,n,r)))),e,t,n),setJson:e=>{try{"{}"===e?ot():rt(O(e))}catch(e){}return at},setSchema:t=>He((()=>{if((e=(e=>Ve(e,(e=>Ve(e,(e=>{if(!Ve(e,((e,t)=>w(["type",a],t))))return!1;const t=e.type;return!(!W(t)&&t!=s||(be(e.default)!=t&&Ie(e,a),0))})))))(t))&&(pe(t),!K(m))){const e=$e();ot(),rt(e)}})),delTables:ot,delTable:e=>He((e=>G(m,e)?Ae(e):0),e),delRow:(e,t)=>He(((e,t)=>N(ee(m,e),(n=>G(n,t)?De(e,n,t):0))),e,t),delCell:(e,t,n,r)=>He(((e,t,n)=>N(ee(m,e),(o=>N(ee(o,t),(l=>G(l,n)?Oe(e,o,t,l,n,r):0))))),e,t,n),delSchema:()=>He((()=>{pe({}),e=!1})),transaction:lt,startTransaction:st,finishTransaction:it,forEachTable:e=>X(m,((t,n)=>e(n,(e=>X(t,((t,n)=>e(n,(e=>te(t,e))))))))),forEachRow:(e,t)=>X(ee(m,y(e)),((e,n)=>t(n,(t=>te(e,t))))),forEachCell:(e,t,n)=>te(ee(ee(m,y(e)),y(t)),n),addSortedRowIdsListener:(e,t,n,r,o,l,s)=>{let i=et(e,t,n,r,o);return H((()=>{const s=et(e,t,n,r,o);R(s,i)||(i=s,l(at,e,t,n,r,o,i))}),A[s?1:0],[e,t])},addWillFinishTransactionListener:e=>H(e,q[0]),addDidFinishTransactionListener:e=>H(e,q[1]),callListener:e=>(ie(e,[Ze,_e,tt],(e=>z(e[2])?[]:Ge(nt(...e)))),at),delListener:e=>(U(e),at),getListenerStats:()=>({}),createStore:Ye};return Se({Tables:[0,C],TableIds:[0,x],[f]:[1,E],[h]:[1,M],Row:[2,F],[g]:[2,j],[p]:[3,J],InvalidCell:[3,Q]},(([e,t],n)=>{at[v+n+c]=(...n)=>H(n[e],t[n[e+1]?1:0],e>0?P(n,0,e):void 0)})),Le(at)};e.createCheckpoints=Ce,e.createCustomPersister=De,e.createFilePersister=(e,n)=>{let r;return De(e,(()=>Qe(void 0,null,(function*(){try{return yield t.promises.readFile(n,d)}catch(e){}}))),(e=>Qe(void 0,null,(function*(){try{yield t.promises.writeFile(n,e,d)}catch(e){}}))),(e=>{r=t.watch(n,e)}),(()=>{null==r||r.close(),r=void 0}))},e.createIndexes=Ee,e.createLocalPersister=(e,t)=>Je(e,t,localStorage),e.createMetrics=Me,e.createQueries=He,e.createRelationships=$e,e.createRemotePersister=(e,t,n,r)=>{let o,l;return De(e,(()=>ze(void 0,null,(function*(){const e=yield fetch(t);return l=Ne(e),e.text()}))),(e=>ze(void 0,null,(function*(){return yield fetch(n,{method:"POST",headers:{"Content-Type":"application/json"},body:e})}))),(e=>{o=setInterval((()=>ze(void 0,null,(function*(){const n=yield fetch(t,{method:"HEAD"}),r=Ne(n);z(l)||z(r)||r==l||(l=r,e())}))),1e3*r)}),(()=>{N(o,clearInterval),o=void 0}))},e.createSessionPersister=(e,t)=>Je(e,t,sessionStorage),e.createStore=Ye,e.defaultSorter=xe},"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
@@ -224,21 +224,171 @@ export interface Tools {
224
224
 
225
225
  /**
226
226
  * The getStoreApi method returns a code-generated .d.ts file and a .ts file
227
- * that wraps the schema of a Store.
227
+ * that describe the schema of a Store in an ORM style.
228
228
  *
229
- * This is currently in development, and further documentation is to come.
229
+ * If the Store does not already have an explicit Schema associated with it,
230
+ * the data in the Store will be scanned to attempt to infer a new Schema. The
231
+ * method returns two strings (which should be saved as files) though if no
232
+ * schema can be inferred, the strings will be empty.
233
+ *
234
+ * The method takes a single argument which represents the name you want the
235
+ * generated store object to have in code. You are expected to save the files
236
+ * as `[storeName].d.ts` and `[storeName].ts`, and alongside each other so
237
+ * that the latter can import types from the former.
238
+ *
239
+ * The .d.ts and .ts files that are generated are designed to resemble the
240
+ * main TinyBase `store.d.ts` and `store.ts` files, but provide named types
241
+ * and methods that describe the domain of the schema in the store.
242
+ *
243
+ * For example, from a Store that has a `pets` Table, you will get methods
244
+ * like `getPetsTable`, and types like `PetsRow`, that are more specific
245
+ * versions of the underlying getTable method or the Row type. For example:
246
+ *
247
+ * |Store type|Equivalent generated type|
248
+ * |-|-|
249
+ * |Table|[Table]Table|
250
+ * |Row|[Table]Row|
251
+ * |(Cell) Id|[Table]CellId|
252
+ * |CellCallback|[Table]CellCallback|
253
+ * |...|...|
254
+ *
255
+ * |Store method|Equivalent generated method|
256
+ * |-|-|
257
+ * |setTable|set[Table]Table|
258
+ * |hasRow|has[Table]Row|
259
+ * |getCell|get[Table][Cell]Cell|
260
+ * |...|...|
261
+ *
262
+ * Equivalent to the TinyBase createStore function, a `create[StoreName]`
263
+ * function will also be created. This acts as the main entry point to the
264
+ * generated implementation.
265
+ *
266
+ * Each method is refined correctly to take, or return, the types specified by
267
+ * the schema. For example, if the `pets` Table has a numeric `price` Cell in
268
+ * the schema, the `getPetsPriceCell` method will be typed to return a number.
269
+ *
270
+ * The tables above include just a sample of the generated output. For the
271
+ * full set of methods and types generated by this method, inspect the output
272
+ * directly.
273
+ *
274
+ * @param storeName The name you want to provide to the generated Store, which
275
+ * should also be used to save the `.d.ts` and `.ts` files.
276
+ * @returns A pair of strings representing the contents of the `.d.ts` and
277
+ * `.ts` files.
278
+ * @example
279
+ * This example creates a Tools object and generates code for a Store that
280
+ * already has a Schema.
281
+ * ```js
282
+ * const store = createStore().setSchema({
283
+ * pets: {
284
+ * price: {type: 'number'},
285
+ * },
286
+ * });
287
+ * const [dTs, ts] = createTools(store).getStoreApi('shop');
288
+ *
289
+ * const dTsLines = dTs.split('\n');
290
+ * console.log(dTsLines[3]);
291
+ * // -> 'export type PetsTable = {[rowId: Id]: PetsRow};'
292
+ * console.log(dTsLines[6]);
293
+ * // -> 'export type PetsRow = {\'price\'?: number;};'
294
+ *
295
+ * const tsLines = ts.split('\n');
296
+ * console.log(tsLines[40]);
297
+ * // -> 'getPetsTable: (): PetsTable => store.getTable(PETS) as PetsTable,'
298
+ * ```
299
+ * @example
300
+ * This example creates a Tools object and generates code for a Store that
301
+ * doesn't already have a Schema.
302
+ * ```js
303
+ * const store = createStore().setTable('pets', {
304
+ * fido: {price: 5},
305
+ * felix: {price: 4},
306
+ * });
307
+ * const [dTs, ts] = createTools(store).getStoreApi('shop');
230
308
  *
309
+ * const dTsLines = dTs.split('\n');
310
+ * console.log(dTsLines[3]);
311
+ * // -> 'export type PetsTable = {[rowId: Id]: PetsRow};'
312
+ * console.log(dTsLines[6]);
313
+ * // -> 'export type PetsRow = {\'price\': number;};'
314
+ *
315
+ * const tsLines = ts.split('\n');
316
+ * console.log(tsLines[42]);
317
+ * // -> 'getPetsTable: (): PetsTable => store.getTable(PETS) as PetsTable,'
318
+ * ```
231
319
  * @category Modelling
232
320
  * @since v2.2.0
233
321
  */
234
322
  getStoreApi(storeName: string): [string, string];
235
323
 
236
324
  /**
237
- * The getStoreApi method attempts to return a prettified code-generated .d.ts
238
- * file and a .ts file that wraps the schema of a Store.
325
+ * The getPrettyStoreApi method attempts to returns a prettified
326
+ * code-generated .d.ts file and a .ts file that describe the schema of a
327
+ * Store in an ORM style.
328
+ *
329
+ * This is simply a wrapper around the getStoreApi method that attempts to
330
+ * invoke the `prettier` module (which it hopes you have installed) to format
331
+ * the generated code. If `prettier` is not present, the output will resemble
332
+ * that of the underlying getStoreApi method.
239
333
  *
240
- * This is currently in development, and further documentation is to come.
334
+ * The method is asynchronous, so you should use the `await` keyword or handle
335
+ * the results as a promise.
241
336
  *
337
+ * The method takes a single argument which represents the name you want the
338
+ * generated store object to have in code. You are expected to save the files
339
+ * as `[storeName].d.ts` and `[storeName].ts`, and alongside each other so
340
+ * that the latter can import types from the former.
341
+ *
342
+ * See the documentation for the getStoreApi method for details of the content
343
+ * of the generated files.
344
+ *
345
+ * @param storeName The name you want to provide to the generated Store, which
346
+ * should also be used to save the `.d.ts` and `.ts` files.
347
+ * @returns A pair of strings representing the contents of the `.d.ts` and
348
+ * `.ts` files.
349
+ * @example
350
+ * This example creates a Tools object and generates code for a Store that
351
+ * already has a Schema.
352
+ * ```js
353
+ * const store = createStore().setSchema({
354
+ * pets: {
355
+ * price: {type: 'number'},
356
+ * },
357
+ * });
358
+ * const tools = createTools(store);
359
+ * const [dTs, ts] = await tools.getPrettyStoreApi('shop');
360
+ *
361
+ * const dTsLines = dTs.split('\n');
362
+ * console.log(dTsLines[14]);
363
+ * // -> 'export type PetsTable = {[rowId: Id]: PetsRow};'
364
+ * console.log(dTsLines[19]);
365
+ * // -> 'export type PetsRow = {price?: number};'
366
+ *
367
+ * const tsLines = ts.split('\n');
368
+ * console.log(tsLines[73]);
369
+ * // -> ' hasPetsTable: (): boolean => store.hasTable(PETS),'
370
+ * ```
371
+ * @example
372
+ * This example creates a Tools object and generates code for a Store that
373
+ * doesn't already have a Schema.
374
+ * ```js
375
+ * const store = createStore().setTable('pets', {
376
+ * fido: {price: 5},
377
+ * felix: {price: 4},
378
+ * });
379
+ * const tools = createTools(store);
380
+ * const [dTs, ts] = await tools.getPrettyStoreApi('shop');
381
+ *
382
+ * const dTsLines = dTs.split('\n');
383
+ * console.log(dTsLines[14]);
384
+ * // -> 'export type PetsTable = {[rowId: Id]: PetsRow};'
385
+ * console.log(dTsLines[19]);
386
+ * // -> 'export type PetsRow = {price: number};'
387
+ *
388
+ * const tsLines = ts.split('\n');
389
+ * console.log(tsLines[75]);
390
+ * // -> ' hasPetsTable: (): boolean => store.hasTable(PETS),'
391
+ * ```
242
392
  * @category Modelling
243
393
  * @since v2.2.0
244
394
  */
@@ -1 +1 @@
1
- var e,t;e=this,t=function(e){"use strict";const t=e=>typeof e,l="",o=t(l),n=t(!0),a=t(0),r="type",s="default",d=(e,t)=>e.every(t),i=(e,t)=>e.sort(t),c=(e,t)=>e.forEach(t),$=(e,t)=>e.map(t),I=e=>e.length,u=(e,...t)=>e.push(...t),b=e=>e.shift(),h=JSON.parse,w=isFinite,f=e=>null==e,g=e=>Array.isArray(e),C=(e,t)=>{var l;return null!=(l=null==e?void 0:e.has(t))&&l},p=e=>{var t;return[...null!=(t=null==e?void 0:e.values())?t:[]]},v=(e,t)=>null==e?void 0:e.forEach(t),T=e=>new Map(e),R=(e,t)=>null==e?void 0:e.get(t),m=(e,t)=>{var l;return $([...null!=(l=null==e?void 0:e.entries())?l:[]],(([e,l])=>t(l,e)))},y=(e,t,l)=>{return f(l)?(n=t,null==(o=e)||o.delete(n),e):null==e?void 0:e.set(t,l);var o,n},S=(e,t,l)=>(C(e,t)||y(e,t,l()),R(e,t)),L=e=>new Set(g(e)||f(e)?e:[e]),k=/[^A-Za-z0-9]+/,A=/^( *)\/\*\* *(.*?) *\*\/$/gm,j=(e,t,l)=>e.substring(t,l),O=e=>e.toUpperCase(),x=e=>e.toLowerCase(),E=(e,t,l,o=1)=>{const n=`${t}${1==o?"":o}`;return C(e,n)?E(e,t,l,o+1):(y(e,n,l),n)},J=e=>e.length,N=(e,t="")=>e.join(t),P=(e,t=0)=>N($(e.split(k),((e,l)=>(l>0||t?O:x)(j(e,0,1))+j(e,1)))),G=e=>O(N(e.split(k),"_")),z=e=>`/** ${e}. */`,D=()=>{const e=[T(),T()],t=T(),o=T(),n=T();return[(...e)=>{const t=[],l=e=>g(e)?c(e,l):u(t,e);return c(e,l),t.join("\n")},(t,l,...o)=>c(o,(o=>{return n=S(e[t],l,L),a=o,null==n?void 0:n.add(a);var n,a})),(e,l="",o="")=>E(t,e,[l,o]),(e,l,o)=>y(t,e,[l,o]),(e,t,l,n,a,r="")=>E(o,e,[t,l,n,a,r]),(e,t,l)=>E(n,e,g(l)?[`(${t}) => {`,l,"}"]:[`(${t}) => ${l}`]),(e,t)=>R(n,e)===t?e:E(n,e,t),t=>[...i(m(e[t],((e,t)=>`import {${N(i(p(e)),", ")}} from '${t}';`))),l],()=>m(t,(([e,t],o)=>[z(t),`export type ${o} = ${e};`,l])),e=>m(o,(([t,o,n,a,r],s)=>{const d=e?[`${s}: ${r}(${t}): ${o} => ${n},`]:[`${s}${r}(${t}): ${o};`];return e||((e,...t)=>{e.unshift(...t)})(d,z(a)),u(d,l),d})),()=>m(n,((e,t)=>(e=g(e)?e:[e],u(e,e.pop()+";"),[`const ${t} = ${b(e)}`,e,l])))]},F=Object,M=F.keys,W=F.freeze,_=(e,t)=>{return o=e=>e[t],f(l=e)?null==n?void 0:n():o(l);var l,o,n},B=(e,t)=>c(F.entries(e),(([e,l])=>t(l,e))),Q=e=>{return t=M(e),0==I(t);var t},U=e=>{const l=t(e);return(e=>e==o||e==n)(l)||l==a&&w(e)?l:void 0},Z="the Store",q="the specified Row",H="Registers a listener that will be called",K=(e,t="",l="")=>`store.${e}(${t})${l?" as "+l:""}`,V=(e,t="")=>`fluent(() => ${K(e,t)})`,X=(e,t,l=0)=>`Gets ${l?"sorted, paginated":"the"} Ids of the ${e}s in ${t}`,Y=(e,t)=>`Calls a function for each ${e} in ${t}`,ee=(e,t=Z)=>`Gets whether ${e} exists in ${t}`,te=e=>"A function that takes "+e,le=(e,t,l=0)=>`${H} whenever ${e} in ${t} change`+(l?"":"s"),oe=(e=0)=>1==e?"Sets":2==e?"Sets part of":3==e?"Deletes":"Gets",ne=(e,l)=>{if(Q(e))return[a="// store has no inferable schema",a];var a;const d=P(l),i=P(l,1),c=P(i),$=`return ${c};`,I=[],b=[],h=[],w=[],g=[],C=[],R=[],m=(e,t="",l="")=>`store.${e}(${t?t+", ":""}proxy(listener)${l?", "+l:""})`,[S,L,k,A,j,O,x,E,J,F,M]=D();L(0,"tinybase","CellChange","ChangedCells","Id","IdOrNull","Ids","InvalidCells","Json","Store"),L(1,"tinybase","ChangedCells","Id","IdOrNull","Ids","InvalidCells","Json","Store","createStore"),O("fluent","actions: () => Store",["actions();",$]),O("proxy","listener: any",`(_: Store, ...args: any[]) => listener(${c}, ...args)`);const W=x(G(r),"'type'"),U=x(G(s),"'default'"),ne=k("Tables"),ae=k("TableId"),re=k("TableCallback"),se=k("GetCellChange"),de=k("TablesListener",`(${c}: ${i}, getCellChange: ${se} | undefined) => void`,"A function for listening to changes to the content of the Store"),ie=k("TableIdsListener",`(${c}: ${i}) => void`,"A function for listening to changes to Table Ids in the Store"),ce=k("TableListener",`(${c}: ${i}, tableId: ${ae}, getCellChange: ${se} | undefined) => void`,"A function for listening to changes to a Table in the Store"),$e=k("RowIdsListener",`(${c}: ${i}, tableId: ${ae}) => void`,"A function for listening to changes to Row Ids in the Store"),Ie=k("RowListener",`(${c}: ${i}, tableId: ${ae}, rowId: Id, getCellChange: ${se} | undefined) => void`,"A function for listening to changes to a Row in the Store"),ue=k("CellIdsListener",`(${c}: ${i}, tableId: ${ae}, rowId: Id) => void`,"A function for listening to changes to Cell Ids in the Store"),be=k("CellListener"),he=k("InvalidCellListener",`(${c}: ${i}, tableId: Id, rowId: Id, cellId: Id, invalidCells: any[]) => void;`,"A function for listening to invalid Cell changes"),we=k("TransactionListener",`(${c}: ${i}, cellsTouched: boolean) => void;`,"A function for listening to the completion of a transaction");L(1,`./${d}.d`,i,`create${i} as create${i}Decl`,ne,ae,re,de,ie,ce,$e,Ie,ue,be,he,we);const fe=(e=0)=>oe(e)+" the content of the Store";j("hasTables","",n,K("hasTables"),ee("any Table")),j("getTables","",ne,K("getTables"),fe()),j("setTables","tables: "+ne,i,V("setTables","tables"),fe(1)),j("delTables","",i,V("delTables"),fe(3)),j("getTableIds","",ae+"[]",K("getTableIds","",ae+"[]"),X("Table",Z)),j("forEachTable","tableCallback: "+re,"void",K("forEachTable","tableCallback as any"),Y("Table",Z));const ge=T();var Ce;return B(e,((e,l)=>{const a=P(l,1),r=x(G(l),`'${l}'`),$=[],p=[],v=[],T=[],m=`the '${l}' Table`,S="the specified Row in "+m,O="the content of "+m,E=(e=0)=>`${oe(e)} the content of ${m}`,J=(e=0)=>`${oe(e)} the content of ${S}`,z=(e=0)=>`Represents a Row when ${e?"s":"g"}etting ${O}`,D=k(a+"Table",`{[rowId: Id]: ${a}Row}`,"Represents "+m),F=k(a+"Row"),M=k(a+"RowWhenSet"),Q=k(a+"CellId"),Z=k(a+"CellCallback"),H=k(a+"RowCallback");L(1,`./${d}.d`,D,F,M,Q,Z,H),j(`has${a}Table`,"",n,K("hasTable",r),ee(m)),j(`get${a}Table`,"",D,K("getTable",r,D),E()),j(`set${a}Table`,"table: "+D,i,V("setTable",r+", table"),E(1)),j(`del${a}Table`,"",i,V("delTable",r),E(3)),j(`get${a}RowIds`,"","Ids",K("getRowIds",r),X("Row",m)),j(`get${a}SortedRowIds`,`cellId?: ${Q}, descending?: boolean, offset?: number, limit?: number`,"Ids",K("getSortedRowIds",r+", cellId, descending, offset, limit"),X("Row",m,1)),j(`forEach${a}Row`,"rowCallback: "+H,"void",K("forEachRow",r+", rowCallback as any"),Y("Row",m)),j(`has${a}Row`,"rowId: Id",n,K("hasRow",r+", rowId"),ee(q,m)),j(`get${a}Row`,"rowId: Id",F,K("getRow",r+", rowId",F),J()),j(`set${a}Row`,"rowId: Id, row: "+M,i,V("setRow",r+", rowId, row"),J(1)),j(`add${a}Row`,"row: "+M,"Id | undefined",K("addRow",r+", row"),"Adds a new Row to "+m),j(`set${a}PartialRow`,"rowId: Id, partialRow: "+M,i,V("setPartialRow",r+", rowId, partialRow"),J(2)),j(`del${a}Row`,"rowId: Id",i,V("delRow",r+", rowId"),J(3)),j(`get${a}CellIds`,"rowId: Id",Q+"[]",K("getCellIds",r+", rowId",Q+"[]"),X("Cell",S)),j(`forEach${a}Cell`,"rowId: Id, cellCallback: "+Z,"void",K("forEachCell",r+", rowId, cellCallback as any"),Y("Cell",S)),u(R,`[${r}]: {`),B(e,((e,d)=>{const I=P(d,1),b=x(G(d),`'${d}'`),h=e.type,w=!f(_(e,s)),C=e.default,m=`the '${d}' Cell`,L=(e=0)=>`${oe(e)} ${m} for ${S}`;var k;u(R,`[${b}]: {[${W}]: ${x(G(h),`'${h}'`)}${w?`, [${U}]: ${k=C,t(k)==o?x(G(C),`'${C}'`):C}`:""}},`),u($,`'${d}'${w?"":"?"}: ${h};`),u(p,`'${d}'?: ${h};`),u(v,`'${d}'`),u(T,`[cellId: '${d}', cell: ${h}]`),u(g,`[${c}: ${i}, tableId: '${l}', rowId: Id, cellId: '${d}', newCell: ${h} | undefined, oldCell: ${h} | undefined, getCellChange: ${se} | undefined]`);const A="Map"+P(h,1);y(ge,h,A),j(`has${a}${I}Cell`,"rowId: Id",n,K("hasCell",`${r}, rowId, ${b}`),ee(m,S));const O=`${h}${w?"":" | undefined"}`;j(`get${a}${I}Cell`,"rowId: Id",O,K("getCell",`${r}, rowId, ${b}`,O),L()),j(`set${a}${I}Cell`,`rowId: Id, cell: ${h} | ${A}`,i,V("setCell",`${r}, rowId, ${b}, cell as any`),L(1)),j(`del${a}${I}Cell`,"rowId: Id",i,V("delCell",`${r}, rowId, ${b}`),L(3))})),u(R,"},"),u(I,`'${l}'?: ${D};`),u(b,`'${l}'`),u(h,`[tableId: '${l}', forEachRow: (rowCallback: ${H}) => void]`),u(w,`[tableId: '${l}', rowId: Id, cellId: ${Q}]`),u(C,Q),A(F,`{${N($," ")}}`,z()),A(M,`{${N(p," ")}}`,z(1)),A(Q,N(v," | "),"A Cell Id for "+m),A(Z,`(...[cellId, cell]: ${N(T," | ")}) => void`,te("a Cell Id and value from a Row in "+m)),A(H,`(rowId: Id, forEachCell: (cellCallback: ${Z}) => void) => void`,te(`a Row Id from ${m}, and a Cell iterator`))})),j("getJson","","Json",K("getJson"),"Gets a a string serialization the content of the Store"),j("setJson","json: Json",i,V("setJson","json"),"Sets the content of the Store from a serialized string"),j("transaction","actions: () => Return, doRollback?: (changedCells: ChangedCells, invalidCells: InvalidCells) => boolean","Return",K("transaction","actions, doRollback"),"Execute a transaction to make multiple mutations","<Return>"),j("startTransaction","",i,V("startTransaction"),"Explicitly starts a transaction"),j("finishTransaction","doRollback?: (changedCells: ChangedCells, invalidCells: InvalidCells) => boolean,",i,V("finishTransaction","doRollback"),"Explicitly finishes a transaction"),j("addTablesListener",`listener: ${de}, mutator?: boolean`,"Id",m("addTablesListener","","mutator"),H+" whenever the content of the Store changes"),j("addTableIdsListener",`listener: ${ie}, mutator?: boolean`,"Id",m("addTableIdsListener","","mutator"),le("the Table Ids",Z,1)),j("addTableListener",`tableId: ${ae} | null, listener: ${ce}, mutator?: boolean`,"Id",m("addTableListener","tableId","mutator"),le("a Table",Z)),j("addRowIdsListener",`tableId: ${ae} | null, listener: ${$e}, mutator?: boolean`,"Id",m("addRowIdsListener","tableId","mutator"),le("the Row Ids","a Table",1)),j("addRowListener",`tableId: ${ae} | null, rowId: IdOrNull, listener: ${Ie}, mutator?: boolean`,"Id",m("addRowListener","tableId, rowId","mutator"),le("a Row","a Table")),j("addCellIdsListener",`tableId: ${ae} | null, rowId: IdOrNull, listener: ${ue}, mutator?: boolean`,"Id",m("addCellIdsListener","tableId, rowId","mutator"),le("the Cell Ids","a Row",1)),j("addCellListener",`tableId: ${ae} | null, rowId: IdOrNull, cellId: ${N(C," | ")} | null, listener: ${be}, mutator?: boolean`,"Id",m("addCellListener","tableId, rowId, cellId","mutator"),le("a Cell","a Row")),j("addInvalidCellListener",`tableId: IdOrNull, rowId: IdOrNull, cellId: IdOrNull, listener: ${he}, mutator?: boolean`,"Id",m("addCellListener","tableId, rowId, cellId","mutator"),H+" whenever an invalid Cell change was attempted"),j("addWillFinishTransactionListener","listener: "+we,"Id",m("addWillFinishTransactionListener"),H+" just before the end of the transaction"),j("addDidFinishTransactionListener","listener: "+we,"Id",m("addDidFinishTransactionListener"),H+" just after the end of the transaction"),j("callListener","listenerId: Id",i,V("callListener","listenerId"),"Manually provoke a listener to be called"),j("delListener","listenerId: Id",i,V("delListener","listenerId"),"Remove a listener that was previously added to the Store"),j("getStore","","Store","store","Gets the underlying Store object"),A(ne,`{${N(I," ")}}`,"Represents the content of the Store"),A(ae,N(b," | "),"A Table Id in the Store"),A(re,`(...[tableId, rowCallback]: ${N(h," | ")}) => void`,te("a Table Id, and a Row iterator")),A(se,`(...[tableId, rowId, cellId]: ${N(w," | ")}) => CellChange`,"A function that returns information about any Cell's changes during a transaction"),A(be,`(...[${c}, tableId, rowId, cellId, newCell, oldCell, getCellChange]: ${N(g," | ")}) => void`,"A function for listening to changes to a Cell in the Store"),Ce=(e,t)=>k(t,`(cell: ${e} | undefined) => ${e}`,`Takes a ${e} Cell value and returns another`),v(ge,((e,t)=>Ce(t,e))),L(1,`./${d}.d`,...p(ge)),x("store",["createStore().setSchema({",...R,"})"]),x(c,["{",...F(1),"}"]),[S(...E(0),...J(),`export interface ${i} {`,...F(0),"}","",z(`Creates a ${i} object`),`export function create${i}(): ${i};`),S(...E(1),`export const create${i}: typeof create${i}Decl = () => {`,...M(),`return Object.freeze(${c});`,"};")]};var ae=Object.defineProperty,re=Object.getOwnPropertySymbols,se=Object.prototype.hasOwnProperty,de=Object.prototype.propertyIsEnumerable,ie=(e,t,l)=>t in e?ae(e,t,{enumerable:!0,configurable:!0,writable:!0,value:l}):e[t]=l,ce=(e,t)=>{for(var l in t||(t={}))se.call(t,l)&&ie(e,l,t[l]);if(re)for(var l of re(t))de.call(t,l)&&ie(e,l,t[l]);return e};const $e={parser:"typescript",singleQuote:!0,trailingComma:"all",bracketSpacing:!1,jsdocSingleLineComment:!1},Ie=(e=>{const t=new WeakMap;return l=>(t.has(l)||t.set(l,e(l)),t.get(l))})((e=>{const t=()=>{const t=h(e.getSchemaJson());return!Q(t)||d(e.getTableIds(),(l=>{const o=e.getRowIds(l),n=T();if(d(o,(t=>d(e.getCellIds(l,t),(o=>{const a=e.getCell(l,t,o),r=S(n,o,(()=>[U(a),T(),[0],0])),[s,d,[i]]=r,c=S(d,a,(()=>0))+1;return c>i&&(r[2]=[c,a]),y(d,a,c),r[3]++,s==U(a)})))))return t[l]={},v(n,(([e,,[,n],a],d)=>{t[l][d]=ce({[r]:e},a==I(o)?{[s]:n}:{})})),1}))?t:{}},l=e=>ne(t(),e);return W({getStoreStats:t=>{let l=0,o=0,n=0;const a={};return e.forEachTable(((e,r)=>{l++;let s=0,d=0;const i={};r(((e,l)=>{s++;let o=0;l((()=>o++)),d+=o,t&&(i[e]={rowCells:o})})),o+=s,n+=d,t&&(a[e]={tableRows:s,tableCells:d,rows:i})})),ce({totalTables:l,totalRows:o,totalCells:n,jsonLength:J(e.getJson())},t?{detail:{tables:a}}:{})},getStoreSchema:t,getStoreApi:l,getPrettyStoreApi:e=>{return t=void 0,o=null,n=function*(){const t=l(e);try{const{format:e}=yield import("prettier");return $(t,(t=>(e=>e.replace(A,((e,t,l)=>{const o=77-J(t);return`${t}/**\n${l.replace(RegExp(`([^\\n]{1,${o}})(\\s|$)`,"g"),t+" * $1\n")}${t} */`})))(e(t,$e))))}catch(e){}return t},new Promise(((e,l)=>{var a=e=>{try{s(n.next(e))}catch(e){l(e)}},r=e=>{try{s(n.throw(e))}catch(e){l(e)}},s=t=>t.done?e(t.value):Promise.resolve(t.value).then(a,r);s((n=n.apply(t,o)).next())}));var t,o,n}})}));e.createTools=Ie},"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).TinyBaseTools={});
1
+ var e,l;e=this,l=function(e){"use strict";const l=e=>typeof e,t="",a=l(t),o=l(!0),n=l(0),r="type",d="default",s=(e,l)=>e.every(l),$=(e,l)=>e.sort(l),i=(e,l)=>e.forEach(l),I=(e,l)=>e.map(l),c=e=>e.length,b=e=>0==c(e),w=(e,...l)=>e.push(...l),u=e=>e.pop(),h=(e,...l)=>e.unshift(...l),C=e=>e.shift(),g=JSON.parse,f=isFinite,T=e=>null==e,p=e=>e==a||e==o,R=e=>l(e)==a,m=e=>Array.isArray(e),v=(e,l)=>{var t;return null!=(t=null==e?void 0:e.has(l))&&t},y=e=>{var l;return[...null!=(l=null==e?void 0:e.values())?l:[]]},L=(e,l)=>null==e?void 0:e.forEach(l),S=(e,l)=>null==e?void 0:e.delete(l),k=e=>new Map(e),j=(e,l)=>null==e?void 0:e.get(l),E=(e,l)=>L(e,((e,t)=>l(t,e))),O=(e,l)=>{var t;return I([...null!=(t=null==e?void 0:e.entries())?t:[]],(([e,t])=>l(t,e)))},x=(e,l,t)=>T(t)?(S(e,l),e):null==e?void 0:e.set(l,t),A=(e,l,t)=>(v(e,l)||x(e,l,t()),j(e,l)),J=e=>new Set(m(e)||T(e)?e:[e]),N=(e,l)=>null==e?void 0:e.add(l),P=e=>[e,e],z=()=>[k(),k()],D=/[^A-Za-z0-9]+/,F=/^( *)\/\*\* *(.*?) *\*\/$/gm,G=(e,l,t)=>e.substring(l,t),M=e=>e.toUpperCase(),W=e=>e.toLowerCase(),_=(e,l,t,a=1)=>{const o=`${l}${1==a?"":a}`;return v(e,o)?_(e,l,t,a+1):(x(e,o,t),o)},B=e=>e.replace(F,((e,l,t)=>{const a=77-Q(l);return`${l}/**\n${t.replace(RegExp(`([^\\n]{1,${a}})(\\s|$)`,"g"),l+" * $1\n")}${l} */`})),Q=e=>e.length,U=(e,l=t)=>e.join(l),Z=e=>e.flat(1e3),q=(e,l=0)=>U(I(e.split(D),((e,t)=>(t>0||l?M:W)(G(e,0,1))+G(e,1)))),H=e=>M(U(e.split(D),"_")),K=e=>`/** ${e}. */`,V=()=>{const e=z(),l=k(),a=k(),o=k();return[(...e)=>U(Z(e),"\n"),(l,t,...a)=>i(a,(a=>N(A(e[l],t,J),a))),(e,t="",a="")=>_(l,e,[t,a]),(e,l,t,o,n,r="")=>_(a,e,[l,t,o,n,r]),(e,l,t)=>_(o,e,m(t)?[`(${l}) => {`,t,"}"]:[`(${l}) => ${t}`]),(e,l)=>j(o,e)===l?e:_(o,e,l),l=>[...$(O(e[l],((e,l)=>`import {${U($(y(e)),", ")}} from '${l}';`))),t],()=>O(l,(([e,l],a)=>[K(l),`export type ${a} = ${e};`,t])),e=>O(a,(([l,a,o,n,r],d)=>{const s=e?[`${d}: ${r}(${l}): ${a} => ${o},`]:[`${d}${r}(${l}): ${a};`];return e||h(s,K(n)),w(s,t),s})),()=>O(o,((e,l)=>(e=m(e)?e:[e],w(e,u(e)+";"),[`const ${l} = ${C(e)}`,e,t])))]},X=Object,Y=X.keys,ee=X.freeze,le=(e,l)=>I(X.entries(e),(([e,t])=>l(t,e))),te=e=>b(Y(e)),ae=e=>{const t=l(e);return p(t)||t==n&&f(e)?t:void 0},oe=e=>{const l=new WeakMap;return t=>(l.has(t)||l.set(t,e(t)),l.get(t))},ne="the content of",re="the Store",de="A function for",se="export",$e="listener",ie=" | undefined",Ie=`Registers a ${$e} that will be called`,ce="Represents",be=" => void",we=`${ne} ${re}`,ue="the end of the transaction",he="the specified Row",Ce=(e,l=0)=>`${ce} a Row when ${l?"s":"g"}etting ${ne} the '${e}' Table`,ge=(e,l,t=0)=>`Gets ${t?"sorted, paginated":"the"} Ids of the ${e}s in ${l}`,fe=(e,l)=>`Calls a function for each ${e} in ${l}`,Te=(e,l=re)=>`Gets whether ${e} exists in ${l}`,pe=e=>"A function that takes "+e,Re=(e=0,l=0)=>`${de} listening to changes to ${xe[e]} in ${xe[l]}`,me=(e,l,t=0)=>`${Ie} whenever ${e} in ${l} change`+(t?"":"s"),ve=(e=0)=>`${Oe[e]} ${we}`,ye=e=>`the '${e}' Table`,Le=e=>`${he} in ${ye(e)}`,Se=e=>`the '${e}' Cell`,ke=(e,l=0)=>`${Oe[l]} ${ne} ${ye(e)}`,je=(e,l=0)=>`${Oe[l]} ${ne} ${Le(e)}`,Ee=(e,l,t=0)=>`${Oe[t]} ${Se(l)} for ${Le(e)}`,Oe=["Gets","Sets","Sets part of","Deletes"],xe=[re,"anything","Table Ids","a Table","Row Ids","a Row","Cell Ids","a Cell","invalid Cell changes"],Ae=["ChangedCells","Id","IdOrNull","Ids","InvalidCells","Json","Store"],Je=(e,l=t,a=t)=>`store.${e}(${l})${a?" as "+a:t}`,Ne=(e,l=t)=>`fluent(() => ${Je(e,l)})`,Pe=(e,l=t,a=t)=>`store.${e}(${l?l+", ":t}proxy(${$e})${a?", "+a:t})`,ze=(e,l)=>{if(te(e))return P(t);const[a,n,s,$,i,I,c,b,w,u]=V(),h=`./${q(l)}.d`,C=q(l,1),g=q(C),f=k(),p=l=>le(e,((e,a)=>l(a,A(f,a,(()=>{const e=q(a,1);return[s(e+"Table",`{[rowId: Id]: ${e}Row}`,`${ce} the '${a}' Table`),s(e+"Row",`{${U(m(a,((e,l,a)=>`'${e}'${T(a)?"?":t}: ${l};`))," ")}}`,Ce(a)),s(e+"RowWhenSet",`{${U(m(a,((e,l)=>`'${e}'?: ${l};`))," ")}}`,Ce(a,1)),s(e+"CellId",U(m(a,(e=>`'${e}'`))," | "),`A Cell Id for the '${a}' Table`),s(e+"CellCallback",`(...[cellId, cell]: ${U(m(a,((e,l)=>`[cellId: '${e}', cell: ${l}]`))," | ")})${be}`,pe(`a Cell Id and value from a Row in the '${a}' Table`)),s(e+"RowCallback",`(rowId: Id, forEachCell: (cellCallback: ${e}CellCallback)${be})${be}`,pe(`a Row Id from the '${a}' Table, and a Cell iterator`))]})),q(a,1),I(H(a),`'${a}'`)))),m=(l,t)=>le(e[l],((e,l)=>t(l,e[r],e[d],I(H(l),`'${l}'`),q(l,1)))),v=s("Tables",`{${U(p(((e,l)=>`'${e}'?: ${l[0]};`))," ")}}`,`${ce} ${we}`),L=s("TableId",U(p((e=>`'${e}'`))," | "),"A Table Id in "+re),S=s("TableCallback",`(...[tableId, rowCallback]: ${U(p(((e,l)=>`[tableId: '${e}', forEachRow: (rowCallback: ${l[5]})${be}]`))," | ")})${be}`,pe("a Table Id, and a Row iterator")),j=s("GetCellChange",`(...[tableId, rowId, cellId]: ${U(p(((e,l)=>`[tableId: '${e}', rowId: Id, cellId: ${l[3]}]`))," | ")}) => CellChange`,de+" returning information about any Cell's changes during a transaction"),O=s("TablesListener",`(${g}: ${C}, getCellChange: ${j}${ie})${be}`,Re(1)),J=s("TableIdsListener",`(${g}: ${C})${be}`,Re(2)),N=s("TableListener",`(${g}: ${C}, tableId: ${L}, getCellChange: ${j}${ie})${be}`,Re(3)),z=s("RowIdsListener",`(${g}: ${C}, tableId: ${L})${be}`,Re(4,3)),D=s("RowListener",`(${g}: ${C}, tableId: ${L}, rowId: Id, getCellChange: ${j}${ie})${be}`,Re(5,3)),F=s("CellIdsListener",`(${g}: ${C}, tableId: ${L}, rowId: Id)`+be,Re(6,5)),G=s("CellListener",`(...[${g}, tableId, rowId, cellId, newCell, oldCell, getCellChange]: ${U(Z(p((e=>m(e,((l,t)=>`[${g}: ${C}, tableId: '${e}', rowId: Id, cellId: '${l}', newCell: ${t}${ie}, oldCell: ${t}${ie}, getCellChange: ${j} | undefined]`)))))," | ")})${be}`,Re(7,5)),M=s("InvalidCellListener",`(${g}: ${C}, tableId: Id, rowId: Id, cellId: Id, invalidCells: any[])${be};`,Re(8)),W=s("TransactionListener",`(${g}: ${C}, cellsTouched: boolean)${be};`,de+" listening to the completion of a transaction");$("hasTables",t,o,Je("hasTables"),Te("any Table")),$("getTables",t,v,Je("getTables"),ve()),$("setTables","tables: "+v,C,Ne("setTables","tables"),ve(1)),$("delTables",t,C,Ne("delTables"),ve(3)),$("getTableIds",t,L+"[]",Je("getTableIds",t,L+"[]"),ge("Table",re)),$("forEachTable","tableCallback: "+S,"void",Je("forEachTable","tableCallback as any"),fe("Table",re));const _=k();return p(((e,[l,a,r,d,s,i],I,c)=>{n(1,h,l,a,r,d,s,i),$(`has${I}Table`,t,o,Je("hasTable",c),Te(ye(e))),$(`get${I}Table`,t,l,Je("getTable",c,l),ke(e)),$(`set${I}Table`,"table: "+l,C,Ne("setTable",c+", table"),ke(e,1)),$(`del${I}Table`,t,C,Ne("delTable",c),ke(e,3)),$(`get${I}RowIds`,t,"Ids",Je("getRowIds",c),ge("Row",ye(e))),$(`get${I}SortedRowIds`,`cellId?: ${d}, descending?: boolean, offset?: number, limit?: number`,"Ids",Je("getSortedRowIds",c+", cellId, descending, offset, limit"),ge("Row",ye(e),1)),$(`forEach${I}Row`,"rowCallback: "+i,"void",Je("forEachRow",c+", rowCallback as any"),fe("Row",ye(e))),$(`has${I}Row`,"rowId: Id",o,Je("hasRow",c+", rowId"),Te(he,ye(e))),$(`get${I}Row`,"rowId: Id",a,Je("getRow",c+", rowId",a),je(e)),$(`set${I}Row`,"rowId: Id, row: "+r,C,Ne("setRow",c+", rowId, row"),je(e,1)),$(`add${I}Row`,"row: "+r,"Id"+ie,Je("addRow",c+", row"),"Adds a new Row to "+ye(e)),$(`set${I}PartialRow`,"rowId: Id, partialRow: "+r,C,Ne("setPartialRow",c+", rowId, partialRow"),je(e,2)),$(`del${I}Row`,"rowId: Id",C,Ne("delRow",c+", rowId"),je(e,3)),$(`get${I}CellIds`,"rowId: Id",d+"[]",Je("getCellIds",c+", rowId",d+"[]"),ge("Cell",Le(e))),$(`forEach${I}Cell`,"rowId: Id, cellCallback: "+s,"void",Je("forEachCell",c+", rowId, cellCallback as any"),fe("Cell",Le(e))),m(e,((l,a,n,r,d)=>{const s="Map"+q(a,1);x(_,a,s),$(`has${I}${d}Cell`,"rowId: Id",o,Je("hasCell",`${c}, rowId, ${r}`),Te(Se(l),Le(e)));const i=`${a}${T(n)?ie:t}`;$(`get${I}${d}Cell`,"rowId: Id",i,Je("getCell",`${c}, rowId, ${r}`,i),Ee(e,l)),$(`set${I}${d}Cell`,`rowId: Id, cell: ${a} | ${s}`,C,Ne("setCell",`${c}, rowId, ${r}, cell as any`),Ee(e,l,1)),$(`del${I}${d}Cell`,"rowId: Id",C,Ne("delCell",`${c}, rowId, ${r}`),Ee(e,l,3))}))})),$("getJson",t,"Json",Je("getJson"),`${Oe[0]} a string serialization ${we}`),$("setJson","json: Json",C,Ne("setJson","json"),`${Oe[1]} ${we} from a serialized string`),$("transaction","actions: () => Return, doRollback?: (changedCells: ChangedCells, invalidCells: InvalidCells) => boolean","Return",Je("transaction","actions, doRollback"),"Execute a transaction to make multiple mutations","<Return>"),$("startTransaction",t,C,Ne("startTransaction"),"Explicitly starts a transaction"),$("finishTransaction","doRollback?: (changedCells: ChangedCells, invalidCells: InvalidCells) => boolean,",C,Ne("finishTransaction","doRollback"),"Explicitly finishes a transaction"),$("addTablesListener",`${$e}: ${O}, mutator?: boolean`,"Id",Pe("addTablesListener",t,"mutator"),`${Ie} whenever ${we} changes`),$("addTableIdsListener",`${$e}: ${J}, mutator?: boolean`,"Id",Pe("addTableIdsListener",t,"mutator"),me("the Table Ids",re,1)),$("addTableListener",`tableId: ${L} | null, ${$e}: ${N}, mutator?: boolean`,"Id",Pe("addTableListener","tableId","mutator"),me("a Table",re)),$("addRowIdsListener",`tableId: ${L} | null, ${$e}: ${z}, mutator?: boolean`,"Id",Pe("addRowIdsListener","tableId","mutator"),me("the Row Ids","a Table",1)),$("addRowListener",`tableId: ${L} | null, rowId: IdOrNull, ${$e}: ${D}, mutator?: boolean`,"Id",Pe("addRowListener","tableId, rowId","mutator"),me("a Row","a Table")),$("addCellIdsListener",`tableId: ${L} | null, rowId: IdOrNull, ${$e}: ${F}, mutator?: boolean`,"Id",Pe("addCellIdsListener","tableId, rowId","mutator"),me("the Cell Ids","a Row",1)),$("addCellListener",`tableId: ${L} | null, rowId: IdOrNull, cellId: ${U(p(((e,l)=>l[3]))," | ")} | null, ${$e}: ${G}, mutator?: boolean`,"Id",Pe("addCellListener","tableId, rowId, cellId","mutator"),me("a Cell","a Row")),$("addInvalidCellListener",`tableId: IdOrNull, rowId: IdOrNull, cellId: IdOrNull, ${$e}: ${M}, mutator?: boolean`,"Id",Pe("addCellListener","tableId, rowId, cellId","mutator"),Ie+" whenever an invalid Cell change was attempted"),$("addWillFinishTransactionListener",`${$e}: ${W}`,"Id",Pe("addWillFinishTransactionListener"),`${Ie} just before ${ue}`),$("addDidFinishTransactionListener",`${$e}: ${W}`,"Id",Pe("addDidFinishTransactionListener"),`${Ie} just after ${ue}`),$("callListener",$e+"Id: Id",C,Ne("callListener",$e+"Id"),`Manually provoke a ${$e} to be called`),$("delListener",$e+"Id: Id",C,Ne("delListener",$e+"Id"),`Remove a ${$e} that was previously added to ${re}`),$("getStore",t,"Store","store",Oe[0]+" the underlying Store object"),E(_,((e,l)=>s(l,`(cell: ${e}${ie}) => ${e}`,`Takes a ${e} Cell value and returns another`))),n(0,"tinybase","CellChange",...Ae),n(1,"tinybase","createStore",...Ae),n(1,h,C,`create${C} as create${C}Decl`,v,L,S,O,J,N,z,D,F,G,M,W,...y(_)),I("store",["createStore().setSchema({",Z(p(((e,l,a,o)=>[`[${o}]: {`,...m(e,((e,l,a,o)=>`[${o}]: {[${I(H(r),`'${r}'`)}]: ${I(H(l),`'${l}'`)}${T(a)?t:`, [${I(H(d),`'${d}'`)}]: ${R(a)?I(H(a),`'${a}'`):a}`}},`)),"},"]))),"})"]),i("fluent","actions: () => Store",["actions();",`return ${g};`]),i("proxy",$e+": any",`(_: Store, ...args: any[]) => ${$e}(${g}, ...args)`),I(g,["{",...w(1),"}"]),[a(...c(0),...b(),`${se} interface ${C} {`,...w(0),"}",t,K(`Creates a ${C} object`),`${se} function create${C}(): ${C};`),a(...c(1),`${se} const create${C}: typeof create${C}Decl = () => {`,...u(),`return Object.freeze(${g});`,"};")]};var De=Object.defineProperty,Fe=Object.getOwnPropertySymbols,Ge=Object.prototype.hasOwnProperty,Me=Object.prototype.propertyIsEnumerable,We=(e,l,t)=>l in e?De(e,l,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[l]=t,_e=(e,l)=>{for(var t in l||(l={}))Ge.call(l,t)&&We(e,t,l[t]);if(Fe)for(var t of Fe(l))Me.call(l,t)&&We(e,t,l[t]);return e},Be=(e,l,t)=>new Promise(((a,o)=>{var n=e=>{try{d(t.next(e))}catch(e){o(e)}},r=e=>{try{d(t.throw(e))}catch(e){o(e)}},d=e=>e.done?a(e.value):Promise.resolve(e.value).then(n,r);d((t=t.apply(e,l)).next())}));const Qe={parser:"typescript",singleQuote:!0,trailingComma:"all",bracketSpacing:!1,jsdocSingleLineComment:!1},Ue=oe((e=>{const l=()=>{const l=g(e.getSchemaJson());return!te(l)||s(e.getTableIds(),(t=>{const a=e.getRowIds(t),o=k();if(s(a,(l=>s(e.getCellIds(t,l),(a=>{const n=e.getCell(t,l,a),r=A(o,a,(()=>[ae(n),k(),[0],0])),[d,s,[$]]=r,i=A(s,n,(()=>0))+1;return i>$&&(r[2]=[i,n]),x(s,n,i),r[3]++,d==ae(n)})))))return l[t]={},L(o,(([e,,[,o],n],s)=>{l[t][s]=_e({[r]:e},n==c(a)?{[d]:o}:{})})),1}))?l:{}},t=e=>ze(l(),e),a=e=>Be(void 0,null,(function*(){let l;try{l=(yield import("prettier")).format}catch(e){l=e=>e}return I(t(e),(e=>B(l(e,Qe))))}));return ee({getStoreStats:l=>{let t=0,a=0,o=0;const n={};return e.forEachTable(((e,r)=>{t++;let d=0,s=0;const $={};r(((e,t)=>{d++;let a=0;t((()=>a++)),s+=a,l&&($[e]={rowCells:a})})),a+=d,o+=s,l&&(n[e]={tableRows:d,tableCells:s,rows:$})})),_e({totalTables:t,totalRows:a,totalCells:o,jsonLength:Q(e.getJson())},l?{detail:{tables:n}}:{})},getStoreSchema:l,getStoreApi:t,getPrettyStoreApi:a})}));e.createTools=Ue},"object"==typeof exports&&"undefined"!=typeof module?l(exports):"function"==typeof define&&define.amd?define(["exports"],l):l((e="undefined"!=typeof globalThis?globalThis:e||self).TinyBaseTools={});
Binary file
@@ -1 +1 @@
1
- var e,s;e=this,s=function(e,s){"use strict";const t=e=>typeof e,o="",l=t(o),r="Tables",n="TableIds",d="Table",u="RowIds",i="SortedRowIds",a="Row",c="CellIds",I="Cell",w=(e,s)=>e.map(s),R=e=>null==e,p=(e,s,t)=>R(e)?null==t?void 0:t():s(e),b=()=>{},{createContext:C,useContext:k}=s,g=C([]),v=(e,s)=>{const t=k(g);return R(e)?t[s]:((e,s)=>p(e,(e=>e[s])))(t[s+1],e)},m=(e,s)=>{const o=v(e,s);return R(e)||(e=>t(e)==l)(e)?o:e},h=e=>m(e,0),y=e=>m(e,2),f=e=>m(e,4),L=e=>m(e,6),S=e=>m(e,8),T=e=>m(e,10),{useCallback:P,useEffect:x,useMemo:V,useRef:q,useState:O}=s,B=(e,s,t=[])=>{const o=V((()=>s(e)),[e,...t]);return x((()=>()=>o.destroy()),[o]),o},M=(e,s,t,o=[],l)=>{const[,r]=O(),n=P((()=>{var l,r;return null!=(r=null==(l=null==s?void 0:s["get"+e])?void 0:l.call(s,...o))?r:t}),[s,...o]),[d]=O(n),u=q(d);return V((()=>u.current=n()),[n]),j(e,s,((...e)=>{u.current=R(l)?n():e[l],r([])}),[],o),u.current},j=(e,s,t,o=[],l=[],...r)=>x((()=>{var o;const n=null==(o=null==s?void 0:s["add"+e+"Listener"])?void 0:o.call(s,...l,t,...r);return()=>null==s?void 0:s.delListener(n)}),[s,...l,...o,...r]),D=(e,s,t,o=[],l=b,r=[],...n)=>{const d=h(e);return P((e=>p(d,(o=>p(t(e,o),(e=>l(o["set"+s](...n,e),e)))))),[d,s,...o,...r,...n])},A=(e,s,t=b,o=[],...l)=>{const r=h(e);return P((()=>t(null==r?void 0:r["del"+s](...l))),[r,s,...o,...l])},E=(e,s,t)=>{const o=T(e);return P((()=>null==o?void 0:o[s](t)),[o,s,t])},F=e=>M(n,h(e),[],[]),G=(e,s)=>M(u,h(s),[],[e]),Q=(e,s,t,o=0,l,r)=>M(i,h(r),[],[e,s,t,o,l],6),U=(e,s,t)=>M(c,h(t),[],[e,s]),z=(e,s,t,o)=>M(I,h(o),void 0,[e,s,t],4),H=(e,s)=>M("Metric",y(s),void 0,[e]),J=(e,s)=>M("SliceIds",f(s),[],[e]),K=(e,s,t)=>M("SliceRowIds",f(t),[],[e,s]),N=(e,s,t)=>M("RemoteRowId",L(t),void 0,[e,s]),W=(e,s,t)=>M("LocalRowIds",L(t),[],[e,s]),X=(e,s,t)=>M("LinkedRowIds",L(t),[],[e,s]),Y=(e,s)=>M("ResultRowIds",S(s),[],[e]),Z=(e,s,t,o=0,l,r)=>M("ResultSortedRowIds",S(r),[],[e,s,t,o,l],6),$=(e,s,t)=>M("ResultCellIds",S(t),[],[e,s]),_=(e,s,t,o)=>M("ResultCell",S(o),void 0,[e,s,t]),ee=e=>M("CheckpointIds",T(e),[[],void 0,[]]),se=(e,s)=>M("Checkpoint",T(s),void 0,[e]),te=e=>E(e,"goBackward"),oe=e=>E(e,"goForward");var le=Object.defineProperty,re=Object.defineProperties,ne=Object.getOwnPropertyDescriptors,de=Object.getOwnPropertySymbols,ue=Object.prototype.hasOwnProperty,ie=Object.prototype.propertyIsEnumerable,ae=(e,s,t)=>s in e?le(e,s,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[s]=t,ce=(e,s)=>{for(var t in s||(s={}))ue.call(s,t)&&ae(e,t,s[t]);if(de)for(var t of de(s))ie.call(s,t)&&ae(e,t,s[t]);return e},Ie=(e,s)=>re(e,ne(s)),we=(e,s)=>{var t={};for(var o in e)ue.call(e,o)&&s.indexOf(o)<0&&(t[o]=e[o]);if(null!=e&&de)for(var o of de(e))s.indexOf(o)<0&&ie.call(e,o)&&(t[o]=e[o]);return t};const{createElement:Re,useMemo:pe}=s,be=({tableId:e,store:s,rowComponent:t=fe,getRowComponentProps:o,separator:l,debugIds:r},n)=>he(w(n,(l=>Re(t,Ie(ce({},me(o,l)),{key:l,tableId:e,rowId:l,store:s,debugIds:r})))),l,r,e),Ce=({queryId:e,queries:s,resultRowComponent:t=Pe,getResultRowComponentProps:o,separator:l,debugIds:r},n)=>he(w(n,(l=>Re(t,Ie(ce({},me(o,l)),{key:l,queryId:e,rowId:l,queries:s,debugIds:r})))),l,r,e),ke=e=>{const s=L(e);return[s,null==s?void 0:s.getStore()]},ge=({relationshipId:e,relationships:s,rowComponent:t=fe,getRowComponentProps:o,separator:l,debugIds:r},n,d)=>{const[u,i]=ke(s),a=null==u?void 0:u.getLocalTableId(e),c=n(e,d,u);return he(w(c,(e=>Re(t,Ie(ce({},me(o,e)),{key:e,tableId:a,rowId:e,store:i,debugIds:r})))),l,r,d)},ve=e=>({checkpoints:s,checkpointComponent:t=xe,getCheckpointComponentProps:o,separator:l,debugIds:r})=>{const n=T(s);return he(w(e(ee(n)),(e=>Re(t,Ie(ce({},me(o,e)),{key:e,checkpoints:n,checkpointId:e,debugIds:r})))),l)},me=(e,s)=>R(e)?{}:e(s),he=(e,s,t,o)=>{const l=R(s)||!Array.isArray(e)?e:w(e,((e,t)=>t>0?[s,e]:e));return t?[o,":{",l,"}"]:l},ye=({tableId:e,rowId:s,cellId:t,store:l,debugIds:r})=>{var n;return he(o+(null!=(n=z(e,s,t,l))?n:o),void 0,r,t)},fe=({tableId:e,rowId:s,store:t,cellComponent:o=ye,getCellComponentProps:l,separator:r,debugIds:n})=>he(w(U(e,s,t),(r=>Re(o,Ie(ce({},me(l,r)),{key:r,tableId:e,rowId:s,cellId:r,store:t,debugIds:n})))),r,n,s),Le=e=>be(e,G(e.tableId,e.store)),Se=({indexId:e,sliceId:s,indexes:t,rowComponent:o=fe,getRowComponentProps:l,separator:r,debugIds:n})=>{const d=f(t),u=null==d?void 0:d.getStore(),i=null==d?void 0:d.getTableId(e),a=K(e,s,d);return he(w(a,(e=>Re(o,Ie(ce({},me(l,e)),{key:e,tableId:i,rowId:e,store:u,debugIds:n})))),r,n,s)},Te=({queryId:e,rowId:s,cellId:t,queries:l,debugIds:r})=>{var n;return he(o+(null!=(n=_(e,s,t,l))?n:o),void 0,r,t)},Pe=({queryId:e,rowId:s,queries:t,resultCellComponent:o=Te,getResultCellComponentProps:l,separator:r,debugIds:n})=>he(w($(e,s,t),(r=>Re(o,Ie(ce({},me(l,r)),{key:r,queryId:e,rowId:s,cellId:r,queries:t,debugIds:n})))),r,n,s),xe=({checkpoints:e,checkpointId:s,debugIds:t})=>{var l;return he(null!=(l=se(s,e))?l:o,void 0,t,s)},Ve=ve((e=>e[0])),qe=ve((e=>R(e[1])?[]:[e[1]])),Oe=ve((e=>e[2]));e.BackwardCheckpointsView=Ve,e.CellView=ye,e.CheckpointView=xe,e.CurrentCheckpointView=qe,e.ForwardCheckpointsView=Oe,e.IndexView=({indexId:e,indexes:s,sliceComponent:t=Se,getSliceComponentProps:o,separator:l,debugIds:r})=>he(w(J(e,s),(l=>Re(t,Ie(ce({},me(o,l)),{key:l,indexId:e,sliceId:l,indexes:s,debugIds:r})))),l,r,e),e.LinkedRowsView=e=>ge(e,X,e.firstRowId),e.LocalRowsView=e=>ge(e,W,e.remoteRowId),e.MetricView=({metricId:e,metrics:s,debugIds:t})=>{var l;return he(null!=(l=H(e,s))?l:o,void 0,t,e)},e.Provider=({store:e,storesById:t,metrics:o,metricsById:l,indexes:r,indexesById:n,relationships:d,relationshipsById:u,queries:i,queriesById:a,checkpoints:c,checkpointsById:I,children:w})=>{const R=s.useContext(g);return Re(g.Provider,{value:pe((()=>[null!=e?e:R[0],ce(ce({},R[1]),t),null!=o?o:R[2],ce(ce({},R[3]),l),null!=r?r:R[4],ce(ce({},R[5]),n),null!=d?d:R[6],ce(ce({},R[7]),u),null!=i?i:R[8],ce(ce({},R[9]),a),null!=c?c:R[10],ce(ce({},R[11]),I)]),[e,t,o,l,r,n,d,u,i,a,c,I,R])},w)},e.RemoteRowView=({relationshipId:e,localRowId:s,relationships:t,rowComponent:o=fe,getRowComponentProps:l,debugIds:r})=>{const[n,d]=ke(t),u=null==n?void 0:n.getRemoteTableId(e),i=N(e,s,n);return he(R(u)||R(i)?null:Re(o,Ie(ce({},me(l,i)),{key:i,tableId:u,rowId:i,store:d,debugIds:r})),void 0,r,s)},e.ResultCellView=Te,e.ResultRowView=Pe,e.ResultSortedTableView=e=>{var s=e,{cellId:t,descending:o,offset:l,limit:r}=s,n=we(s,["cellId","descending","offset","limit"]);return Ce(n,Z(n.queryId,t,o,l,r,n.queries))},e.ResultTableView=e=>Ce(e,Y(e.queryId,e.queries)),e.RowView=fe,e.SliceView=Se,e.SortedTableView=e=>{var s=e,{cellId:t,descending:o,offset:l,limit:r}=s,n=we(s,["cellId","descending","offset","limit"]);return be(n,Q(n.tableId,t,o,l,r,n.store))},e.TableView=Le,e.TablesView=({store:e,tableComponent:s=Le,getTableComponentProps:t,separator:o,debugIds:l})=>he(w(F(e),(o=>Re(s,Ie(ce({},me(t,o)),{key:o,tableId:o,store:e,debugIds:l})))),o),e.tableView=be,e.useAddRowCallback=(e,s,t=[],o,l=b,r=[])=>{const n=h(o);return P((t=>p(n,(o=>p(s(t,o),(s=>l(o.addRow(e,s),o,s)))))),[n,e,...t,...r])},e.useCell=z,e.useCellIds=U,e.useCellIdsListener=(e,s,t,o,l,r)=>j(c,h(r),t,o,[e,s],l),e.useCellListener=(e,s,t,o,l,r,n)=>j(I,h(n),o,l,[e,s,t],r),e.useCheckpoint=se,e.useCheckpointIds=ee,e.useCheckpointIdsListener=(e,s,t)=>j("CheckpointIds",T(t),e,s),e.useCheckpointListener=(e,s,t,o)=>j("Checkpoint",T(o),s,t,[e]),e.useCheckpoints=e=>v(e,10),e.useCreateCheckpoints=(e,s,t)=>B(e,s,t),e.useCreateIndexes=(e,s,t)=>B(e,s,t),e.useCreateMetrics=(e,s,t)=>B(e,s,t),e.useCreatePersister=(e,s,t=[],o,l=[])=>{const[,r]=O(),n=V((()=>s(e)),[e,...t]);return x((()=>{var e,s,t;return e=void 0,s=null,t=function*(){yield null==o?void 0:o(n),r(1)},new Promise(((o,l)=>{var r=e=>{try{d(t.next(e))}catch(e){l(e)}},n=e=>{try{d(t.throw(e))}catch(e){l(e)}},d=e=>e.done?o(e.value):Promise.resolve(e.value).then(r,n);d((t=t.apply(e,s)).next())})),()=>{n.destroy()}}),[n,...l]),n},e.useCreateQueries=(e,s,t)=>B(e,s,t),e.useCreateRelationships=(e,s,t)=>B(e,s,t),e.useCreateStore=(e,s=[])=>V(e,s),e.useDelCellCallback=(e,s,t,o,l,r,n)=>A(l,I,r,n,e,s,t,o),e.useDelRowCallback=(e,s,t,o,l)=>A(t,a,o,l,e,s),e.useDelTableCallback=(e,s,t,o)=>A(s,d,t,o,e),e.useDelTablesCallback=(e,s,t)=>A(e,r,s,t),e.useGoBackwardCallback=te,e.useGoForwardCallback=oe,e.useGoToCallback=(e,s=[],t,o=b,l=[])=>{const r=T(t);return P((s=>p(r,(t=>p(e(s),(e=>o(t.goTo(e),e)))))),[r,...s,...l])},e.useIndexes=e=>v(e,4),e.useLinkedRowIds=X,e.useLinkedRowIdsListener=(e,s,t,o,l)=>j("LinkedRowIds",L(l),t,o,[e,s]),e.useLocalRowIds=W,e.useLocalRowIdsListener=(e,s,t,o,l)=>j("LocalRowIds",L(l),t,o,[e,s]),e.useMetric=H,e.useMetricListener=(e,s,t,o)=>j("Metric",y(o),s,t,[e]),e.useMetrics=e=>v(e,2),e.useQueries=e=>v(e,8),e.useRedoInformation=e=>{var s;const t=T(e),[,,[l]]=ee(t);return[!R(l),oe(t),l,null!=(s=p(l,(e=>null==t?void 0:t.getCheckpoint(e))))?s:o]},e.useRelationships=e=>v(e,6),e.useRemoteRowId=N,e.useRemoteRowIdListener=(e,s,t,o,l)=>j("RemoteRowId",L(l),t,o,[e,s]),e.useResultCell=_,e.useResultCellIds=$,e.useResultCellIdsListener=(e,s,t,o,l)=>j("ResultCellIds",S(l),t,o,[e,s]),e.useResultCellListener=(e,s,t,o,l,r)=>j("ResultCell",S(r),o,l,[e,s,t]),e.useResultRow=(e,s,t)=>M("ResultRow",S(t),{},[e,s]),e.useResultRowIds=Y,e.useResultRowIdsListener=(e,s,t,o)=>j("ResultRowIds",S(o),s,t,[e]),e.useResultRowListener=(e,s,t,o,l)=>j("ResultRow",S(l),t,o,[e,s]),e.useResultSortedRowIds=Z,e.useResultSortedRowIdsListener=(e,s,t,o,l,r,n,d)=>j("ResultSortedRowIds",S(d),r,n,[e,s,t,o,l]),e.useResultTable=(e,s)=>M("ResultTable",S(s),{},[e]),e.useResultTableListener=(e,s,t,o)=>j("ResultTable",S(o),s,t,[e]),e.useRow=(e,s,t)=>M(a,h(t),{},[e,s]),e.useRowIds=G,e.useRowIdsListener=(e,s,t,o,l)=>j(u,h(l),s,t,[e],o),e.useRowListener=(e,s,t,o,l,r)=>j(a,h(r),t,o,[e,s],l),e.useSetCellCallback=(e,s,t,o,l,r,n,d)=>D(r,I,o,l,n,d,e,s,t),e.useSetCheckpointCallback=(e=b,s=[],t,o=b,l=[])=>{const r=T(t);return P((s=>p(r,(t=>{const l=e(s);o(t.addCheckpoint(l),t,l)}))),[r,...s,...l])},e.useSetPartialRowCallback=(e,s,t,o,l,r,n)=>D(l,"PartialRow",t,o,r,n,e,s),e.useSetRowCallback=(e,s,t,o,l,r,n)=>D(l,a,t,o,r,n,e,s),e.useSetTableCallback=(e,s,t,o,l,r)=>D(o,d,s,t,l,r,e),e.useSetTablesCallback=(e,s,t,o,l)=>D(t,r,e,s,o,l),e.useSliceIds=J,e.useSliceIdsListener=(e,s,t,o)=>j("SliceIds",f(o),s,t,[e]),e.useSliceRowIds=K,e.useSliceRowIdsListener=(e,s,t,o,l)=>j("SliceRowIds",f(l),t,o,[e,s]),e.useSortedRowIds=Q,e.useSortedRowIdsListener=(e,s,t,o,l,r,n,d,u)=>j(i,h(u),r,n,[e,s,t,o,l],d),e.useStore=e=>v(e,0),e.useTable=(e,s)=>M(d,h(s),{},[e]),e.useTableIds=F,e.useTableIdsListener=(e,s,t,o)=>j(n,h(o),e,s,[],t),e.useTableListener=(e,s,t,o,l)=>j(d,h(l),s,t,[e],o),e.useTables=e=>M(r,h(e),{}),e.useTablesListener=(e,s,t,o)=>j(r,h(o),e,s,[],t),e.useUndoInformation=e=>{var s;const t=T(e),[l,r]=ee(t);return[(n=l,!(0==(e=>e.length)(n))),te(t),r,null!=(s=p(r,(e=>null==t?void 0:t.getCheckpoint(e))))?s:o];var n}},"object"==typeof exports&&"undefined"!=typeof module?s(exports,require("react")):"function"==typeof define&&define.amd?define(["exports","react"],s):s((e="undefined"!=typeof globalThis?globalThis:e||self).TinyBaseUiReact={},e.React);
1
+ var e,s;e=this,s=function(e,s){"use strict";const t=e=>typeof e,o="",l=t(o),r="Tables",n="TableIds",d="Table",u="RowIds",i="SortedRowIds",a="Row",c="CellIds",I="Cell",w=(e,s)=>e.map(s),R=e=>null==e,p=(e,s,t)=>R(e)?null==t?void 0:t():s(e),b=()=>{},{createContext:C,useContext:k}=s,g=C([]),v=(e,s)=>{const t=k(g);return R(e)?t[s]:((e,s)=>p(e,(e=>e[s])))(t[s+1],e)},m=(e,s)=>{const o=v(e,s);return R(e)||(e=>t(e)==l)(e)?o:e},h=e=>m(e,0),y=e=>m(e,2),f=e=>m(e,4),L=e=>m(e,6),S=e=>m(e,8),T=e=>m(e,10),{useCallback:P,useEffect:x,useMemo:V,useRef:q,useState:O}=s,B=(e,s,t=[])=>{const o=V((()=>s(e)),[e,...t]);return x((()=>()=>o.destroy()),[o]),o},M=(e,s,t,o=[],l)=>{const[,r]=O(),n=P((()=>{var l,r;return null!=(r=null==(l=null==s?void 0:s["get"+e])?void 0:l.call(s,...o))?r:t}),[s,...o]),[d]=O(n),u=q(d);return V((()=>u.current=n()),[n]),j(e,s,((...e)=>{u.current=R(l)?n():e[l],r([])}),[],o),u.current},j=(e,s,t,o=[],l=[],...r)=>x((()=>{var o;const n=null==(o=null==s?void 0:s["add"+e+"Listener"])?void 0:o.call(s,...l,t,...r);return()=>null==s?void 0:s.delListener(n)}),[s,...l,...o,...r]),D=(e,s,t,o=[],l=b,r=[],...n)=>{const d=h(e);return P((e=>p(d,(o=>p(t(e,o),(e=>l(o["set"+s](...n,e),e)))))),[d,s,...o,...r,...n])},A=(e,s,t=b,o=[],...l)=>{const r=h(e);return P((()=>t(null==r?void 0:r["del"+s](...l))),[r,s,...o,...l])},E=(e,s,t)=>{const o=T(e);return P((()=>null==o?void 0:o[s](t)),[o,s,t])},F=e=>M(n,h(e),[],[]),G=(e,s)=>M(u,h(s),[],[e]),Q=(e,s,t,o=0,l,r)=>M(i,h(r),[],[e,s,t,o,l],6),U=(e,s,t)=>M(c,h(t),[],[e,s]),z=(e,s,t,o)=>M(I,h(o),void 0,[e,s,t],4),H=(e,s)=>M("Metric",y(s),void 0,[e]),J=(e,s)=>M("SliceIds",f(s),[],[e]),K=(e,s,t)=>M("SliceRowIds",f(t),[],[e,s]),N=(e,s,t)=>M("RemoteRowId",L(t),void 0,[e,s]),W=(e,s,t)=>M("LocalRowIds",L(t),[],[e,s]),X=(e,s,t)=>M("LinkedRowIds",L(t),[],[e,s]),Y=(e,s)=>M("ResultRowIds",S(s),[],[e]),Z=(e,s,t,o=0,l,r)=>M("ResultSortedRowIds",S(r),[],[e,s,t,o,l],6),$=(e,s,t)=>M("ResultCellIds",S(t),[],[e,s]),_=(e,s,t,o)=>M("ResultCell",S(o),void 0,[e,s,t]),ee=e=>M("CheckpointIds",T(e),[[],void 0,[]]),se=(e,s)=>M("Checkpoint",T(s),void 0,[e]),te=e=>E(e,"goBackward"),oe=e=>E(e,"goForward");var le=Object.defineProperty,re=Object.defineProperties,ne=Object.getOwnPropertyDescriptors,de=Object.getOwnPropertySymbols,ue=Object.prototype.hasOwnProperty,ie=Object.prototype.propertyIsEnumerable,ae=(e,s,t)=>s in e?le(e,s,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[s]=t,ce=(e,s)=>{for(var t in s||(s={}))ue.call(s,t)&&ae(e,t,s[t]);if(de)for(var t of de(s))ie.call(s,t)&&ae(e,t,s[t]);return e},Ie=(e,s)=>re(e,ne(s)),we=(e,s)=>{var t={};for(var o in e)ue.call(e,o)&&s.indexOf(o)<0&&(t[o]=e[o]);if(null!=e&&de)for(var o of de(e))s.indexOf(o)<0&&ie.call(e,o)&&(t[o]=e[o]);return t};const{createElement:Re,useMemo:pe}=s,be=({tableId:e,store:s,rowComponent:t=fe,getRowComponentProps:o,separator:l,debugIds:r},n)=>he(w(n,(l=>Re(t,Ie(ce({},me(o,l)),{key:l,tableId:e,rowId:l,store:s,debugIds:r})))),l,r,e),Ce=({queryId:e,queries:s,resultRowComponent:t=Pe,getResultRowComponentProps:o,separator:l,debugIds:r},n)=>he(w(n,(l=>Re(t,Ie(ce({},me(o,l)),{key:l,queryId:e,rowId:l,queries:s,debugIds:r})))),l,r,e),ke=e=>{const s=L(e);return[s,null==s?void 0:s.getStore()]},ge=({relationshipId:e,relationships:s,rowComponent:t=fe,getRowComponentProps:o,separator:l,debugIds:r},n,d)=>{const[u,i]=ke(s),a=null==u?void 0:u.getLocalTableId(e),c=n(e,d,u);return he(w(c,(e=>Re(t,Ie(ce({},me(o,e)),{key:e,tableId:a,rowId:e,store:i,debugIds:r})))),l,r,d)},ve=e=>({checkpoints:s,checkpointComponent:t=xe,getCheckpointComponentProps:o,separator:l,debugIds:r})=>{const n=T(s);return he(w(e(ee(n)),(e=>Re(t,Ie(ce({},me(o,e)),{key:e,checkpoints:n,checkpointId:e,debugIds:r})))),l)},me=(e,s)=>R(e)?{}:e(s),he=(e,s,t,o)=>{const l=R(s)||!Array.isArray(e)?e:w(e,((e,t)=>t>0?[s,e]:e));return t?[o,":{",l,"}"]:l},ye=({tableId:e,rowId:s,cellId:t,store:l,debugIds:r})=>{var n;return he(o+(null!=(n=z(e,s,t,l))?n:o),void 0,r,t)},fe=({tableId:e,rowId:s,store:t,cellComponent:o=ye,getCellComponentProps:l,separator:r,debugIds:n})=>he(w(U(e,s,t),(r=>Re(o,Ie(ce({},me(l,r)),{key:r,tableId:e,rowId:s,cellId:r,store:t,debugIds:n})))),r,n,s),Le=e=>be(e,G(e.tableId,e.store)),Se=({indexId:e,sliceId:s,indexes:t,rowComponent:o=fe,getRowComponentProps:l,separator:r,debugIds:n})=>{const d=f(t),u=null==d?void 0:d.getStore(),i=null==d?void 0:d.getTableId(e),a=K(e,s,d);return he(w(a,(e=>Re(o,Ie(ce({},me(l,e)),{key:e,tableId:i,rowId:e,store:u,debugIds:n})))),r,n,s)},Te=({queryId:e,rowId:s,cellId:t,queries:l,debugIds:r})=>{var n;return he(o+(null!=(n=_(e,s,t,l))?n:o),void 0,r,t)},Pe=({queryId:e,rowId:s,queries:t,resultCellComponent:o=Te,getResultCellComponentProps:l,separator:r,debugIds:n})=>he(w($(e,s,t),(r=>Re(o,Ie(ce({},me(l,r)),{key:r,queryId:e,rowId:s,cellId:r,queries:t,debugIds:n})))),r,n,s),xe=({checkpoints:e,checkpointId:s,debugIds:t})=>{var l;return he(null!=(l=se(s,e))?l:o,void 0,t,s)},Ve=ve((e=>e[0])),qe=ve((e=>R(e[1])?[]:[e[1]])),Oe=ve((e=>e[2]));e.BackwardCheckpointsView=Ve,e.CellView=ye,e.CheckpointView=xe,e.CurrentCheckpointView=qe,e.ForwardCheckpointsView=Oe,e.IndexView=({indexId:e,indexes:s,sliceComponent:t=Se,getSliceComponentProps:o,separator:l,debugIds:r})=>he(w(J(e,s),(l=>Re(t,Ie(ce({},me(o,l)),{key:l,indexId:e,sliceId:l,indexes:s,debugIds:r})))),l,r,e),e.LinkedRowsView=e=>ge(e,X,e.firstRowId),e.LocalRowsView=e=>ge(e,W,e.remoteRowId),e.MetricView=({metricId:e,metrics:s,debugIds:t})=>{var l;return he(null!=(l=H(e,s))?l:o,void 0,t,e)},e.Provider=({store:e,storesById:t,metrics:o,metricsById:l,indexes:r,indexesById:n,relationships:d,relationshipsById:u,queries:i,queriesById:a,checkpoints:c,checkpointsById:I,children:w})=>{const R=s.useContext(g);return Re(g.Provider,{value:pe((()=>[null!=e?e:R[0],ce(ce({},R[1]),t),null!=o?o:R[2],ce(ce({},R[3]),l),null!=r?r:R[4],ce(ce({},R[5]),n),null!=d?d:R[6],ce(ce({},R[7]),u),null!=i?i:R[8],ce(ce({},R[9]),a),null!=c?c:R[10],ce(ce({},R[11]),I)]),[e,t,o,l,r,n,d,u,i,a,c,I,R])},w)},e.RemoteRowView=({relationshipId:e,localRowId:s,relationships:t,rowComponent:o=fe,getRowComponentProps:l,debugIds:r})=>{const[n,d]=ke(t),u=null==n?void 0:n.getRemoteTableId(e),i=N(e,s,n);return he(R(u)||R(i)?null:Re(o,Ie(ce({},me(l,i)),{key:i,tableId:u,rowId:i,store:d,debugIds:r})),void 0,r,s)},e.ResultCellView=Te,e.ResultRowView=Pe,e.ResultSortedTableView=e=>{var s=e,{cellId:t,descending:o,offset:l,limit:r}=s,n=we(s,["cellId","descending","offset","limit"]);return Ce(n,Z(n.queryId,t,o,l,r,n.queries))},e.ResultTableView=e=>Ce(e,Y(e.queryId,e.queries)),e.RowView=fe,e.SliceView=Se,e.SortedTableView=e=>{var s=e,{cellId:t,descending:o,offset:l,limit:r}=s,n=we(s,["cellId","descending","offset","limit"]);return be(n,Q(n.tableId,t,o,l,r,n.store))},e.TableView=Le,e.TablesView=({store:e,tableComponent:s=Le,getTableComponentProps:t,separator:o,debugIds:l})=>he(w(F(e),(o=>Re(s,Ie(ce({},me(t,o)),{key:o,tableId:o,store:e,debugIds:l})))),o),e.tableView=be,e.useAddRowCallback=(e,s,t=[],o,l=b,r=[])=>{const n=h(o);return P((t=>p(n,(o=>p(s(t,o),(s=>l(o.addRow(e,s),o,s)))))),[n,e,...t,...r])},e.useCell=z,e.useCellIds=U,e.useCellIdsListener=(e,s,t,o,l,r)=>j(c,h(r),t,o,[e,s],l),e.useCellListener=(e,s,t,o,l,r,n)=>j(I,h(n),o,l,[e,s,t],r),e.useCheckpoint=se,e.useCheckpointIds=ee,e.useCheckpointIdsListener=(e,s,t)=>j("CheckpointIds",T(t),e,s),e.useCheckpointListener=(e,s,t,o)=>j("Checkpoint",T(o),s,t,[e]),e.useCheckpoints=e=>v(e,10),e.useCreateCheckpoints=(e,s,t)=>B(e,s,t),e.useCreateIndexes=(e,s,t)=>B(e,s,t),e.useCreateMetrics=(e,s,t)=>B(e,s,t),e.useCreatePersister=(e,s,t=[],o,l=[])=>{const[,r]=O(),n=V((()=>s(e)),[e,...t]);return x((()=>{var e;return e=function*(){yield null==o?void 0:o(n),r(1)},new Promise(((s,t)=>{var o=s=>{try{r(e.next(s))}catch(e){t(e)}},l=s=>{try{r(e.throw(s))}catch(e){t(e)}},r=e=>e.done?s(e.value):Promise.resolve(e.value).then(o,l);r((e=e.apply(void 0,null)).next())})),()=>{n.destroy()}}),[n,...l]),n},e.useCreateQueries=(e,s,t)=>B(e,s,t),e.useCreateRelationships=(e,s,t)=>B(e,s,t),e.useCreateStore=(e,s=[])=>V(e,s),e.useDelCellCallback=(e,s,t,o,l,r,n)=>A(l,I,r,n,e,s,t,o),e.useDelRowCallback=(e,s,t,o,l)=>A(t,a,o,l,e,s),e.useDelTableCallback=(e,s,t,o)=>A(s,d,t,o,e),e.useDelTablesCallback=(e,s,t)=>A(e,r,s,t),e.useGoBackwardCallback=te,e.useGoForwardCallback=oe,e.useGoToCallback=(e,s=[],t,o=b,l=[])=>{const r=T(t);return P((s=>p(r,(t=>p(e(s),(e=>o(t.goTo(e),e)))))),[r,...s,...l])},e.useIndexes=e=>v(e,4),e.useLinkedRowIds=X,e.useLinkedRowIdsListener=(e,s,t,o,l)=>j("LinkedRowIds",L(l),t,o,[e,s]),e.useLocalRowIds=W,e.useLocalRowIdsListener=(e,s,t,o,l)=>j("LocalRowIds",L(l),t,o,[e,s]),e.useMetric=H,e.useMetricListener=(e,s,t,o)=>j("Metric",y(o),s,t,[e]),e.useMetrics=e=>v(e,2),e.useQueries=e=>v(e,8),e.useRedoInformation=e=>{var s;const t=T(e),[,,[l]]=ee(t);return[!R(l),oe(t),l,null!=(s=p(l,(e=>null==t?void 0:t.getCheckpoint(e))))?s:o]},e.useRelationships=e=>v(e,6),e.useRemoteRowId=N,e.useRemoteRowIdListener=(e,s,t,o,l)=>j("RemoteRowId",L(l),t,o,[e,s]),e.useResultCell=_,e.useResultCellIds=$,e.useResultCellIdsListener=(e,s,t,o,l)=>j("ResultCellIds",S(l),t,o,[e,s]),e.useResultCellListener=(e,s,t,o,l,r)=>j("ResultCell",S(r),o,l,[e,s,t]),e.useResultRow=(e,s,t)=>M("ResultRow",S(t),{},[e,s]),e.useResultRowIds=Y,e.useResultRowIdsListener=(e,s,t,o)=>j("ResultRowIds",S(o),s,t,[e]),e.useResultRowListener=(e,s,t,o,l)=>j("ResultRow",S(l),t,o,[e,s]),e.useResultSortedRowIds=Z,e.useResultSortedRowIdsListener=(e,s,t,o,l,r,n,d)=>j("ResultSortedRowIds",S(d),r,n,[e,s,t,o,l]),e.useResultTable=(e,s)=>M("ResultTable",S(s),{},[e]),e.useResultTableListener=(e,s,t,o)=>j("ResultTable",S(o),s,t,[e]),e.useRow=(e,s,t)=>M(a,h(t),{},[e,s]),e.useRowIds=G,e.useRowIdsListener=(e,s,t,o,l)=>j(u,h(l),s,t,[e],o),e.useRowListener=(e,s,t,o,l,r)=>j(a,h(r),t,o,[e,s],l),e.useSetCellCallback=(e,s,t,o,l,r,n,d)=>D(r,I,o,l,n,d,e,s,t),e.useSetCheckpointCallback=(e=b,s=[],t,o=b,l=[])=>{const r=T(t);return P((s=>p(r,(t=>{const l=e(s);o(t.addCheckpoint(l),t,l)}))),[r,...s,...l])},e.useSetPartialRowCallback=(e,s,t,o,l,r,n)=>D(l,"PartialRow",t,o,r,n,e,s),e.useSetRowCallback=(e,s,t,o,l,r,n)=>D(l,a,t,o,r,n,e,s),e.useSetTableCallback=(e,s,t,o,l,r)=>D(o,d,s,t,l,r,e),e.useSetTablesCallback=(e,s,t,o,l)=>D(t,r,e,s,o,l),e.useSliceIds=J,e.useSliceIdsListener=(e,s,t,o)=>j("SliceIds",f(o),s,t,[e]),e.useSliceRowIds=K,e.useSliceRowIdsListener=(e,s,t,o,l)=>j("SliceRowIds",f(l),t,o,[e,s]),e.useSortedRowIds=Q,e.useSortedRowIdsListener=(e,s,t,o,l,r,n,d,u)=>j(i,h(u),r,n,[e,s,t,o,l],d),e.useStore=e=>v(e,0),e.useTable=(e,s)=>M(d,h(s),{},[e]),e.useTableIds=F,e.useTableIdsListener=(e,s,t,o)=>j(n,h(o),e,s,[],t),e.useTableListener=(e,s,t,o,l)=>j(d,h(l),s,t,[e],o),e.useTables=e=>M(r,h(e),{}),e.useTablesListener=(e,s,t,o)=>j(r,h(o),e,s,[],t),e.useUndoInformation=e=>{var s;const t=T(e),[l,r]=ee(t);return[(n=l,!(0==(e=>e.length)(n))),te(t),r,null!=(s=p(r,(e=>null==t?void 0:t.getCheckpoint(e))))?s:o];var n}},"object"==typeof exports&&"undefined"!=typeof module?s(exports,require("react")):"function"==typeof define&&define.amd?define(["exports","react"],s):s((e="undefined"!=typeof globalThis?globalThis:e||self).TinyBaseUiReact={},e.React);
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tinybase",
3
- "version": "2.2.0-beta.0",
3
+ "version": "2.2.0-beta.1",
4
4
  "author": "jamesgpearce",
5
5
  "repository": "github:tinyplex/tinybase",
6
6
  "license": "MIT",
@@ -46,6 +46,7 @@
46
46
  "test": "gulp --series testUnit testPerf",
47
47
  "compileForTest": "gulp compileForTest",
48
48
  "compileForProd": "gulp compileForProd",
49
+ "compileForCli": "gulp compileForCli",
49
50
  "testUnit": "gulp testUnit",
50
51
  "testUnitCountAsserts": "gulp testUnitCountAsserts",
51
52
  "compileAndTestUnitSaveCoverage": "gulp compileAndTestUnitSaveCoverage",
@@ -89,13 +90,13 @@
89
90
  "babel-preset-minify": "^0.5.2",
90
91
  "buffer-replace": "^1.0.0",
91
92
  "country-flag-emoji-json": "^2.0.0",
92
- "cspell": "^6.14.2",
93
- "esbuild": "^0.15.14",
94
- "eslint": "^8.27.0",
93
+ "cspell": "^6.14.3",
94
+ "esbuild": "^0.15.15",
95
+ "eslint": "^8.28.0",
95
96
  "eslint-config-prettier": "^8.5.0",
96
97
  "eslint-plugin-jest": "^27.1.5",
97
98
  "eslint-plugin-jsdoc": "^39.6.2",
98
- "eslint-plugin-react": "^7.31.10",
99
+ "eslint-plugin-react": "^7.31.11",
99
100
  "eslint-plugin-react-hooks": "^4.6.0",
100
101
  "gulp": "^4.0.2",
101
102
  "gulp-gzip": "^1.4.2",
package/readme.md CHANGED
@@ -1,4 +1,4 @@
1
- <section id="hero"><h2 id="the-reactive-data-store-for-local-first-apps">The <em>reactive</em> data store for local‑first apps.</h2><p>Modern apps deserve better. Why trade reactive user experiences to be able to use relational data? Why sacrifice store features for bundle size? And why should the cloud do all the work <a href="https://www.inkandswitch.com/local-first/" target="_blank">anyway</a>?</p><p><em>TinyBase is a smart new way to structure your local app data:</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 your UI only spends cycles on the data that changes.</li><li><em>NEW!</em> <a href="#build-complex-queries-with-tinyql">Powerful query engine</a> to select, join, filter, group, sort and paginate data - reactively.</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-hooks-to-bind-to-data">idiomatic bindings</a> to your UI.</li></ul><p><em>Tiny by name, tiny by nature</em>, TinyBase only costs <a href="#did-we-say-tiny">3.5kB - 7.9kB</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://beta.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://beta.tinybase.org/guides/faq/">FAQs</a>?</p></section><p><a id="new" href="https://beta.tinybase.org/guides/releases/#v2-1"><em>NEW!</em> v2.1 release</a></p><hr><p><a id="start" href="https://beta.tinybase.org/guides/the-basics/getting-started">Get started</a></p><p><a href="https://beta.tinybase.org/demos">Try the demos</a></p><p><a href="https://beta.tinybase.org/api/store/interfaces/store/store/">Read the docs</a></p><hr><section><h2 id="set-and-get-tables-rows-and-cells">Set and get tables, rows, and cells.</h2><p>Creating a <a href="https://beta.tinybase.org/api/store/interfaces/store/store"><code>Store</code></a> requires just a simple call to the <a href="https://beta.tinybase.org/api/store/functions/creation/createstore"><code>createStore</code></a> function. Once you have one, you can easily set <a href="https://beta.tinybase.org/api/store/type-aliases/store/table"><code>Table</code></a>, <a href="https://beta.tinybase.org/api/store/type-aliases/store/row"><code>Row</code></a>, or <a href="https://beta.tinybase.org/api/store/type-aliases/store/cell"><code>Cell</code></a> values by their <a href="https://beta.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://beta.tinybase.org/guides/the-basics">The Basics</a> guide.</p></section>
1
+ <section id="hero"><h2 id="the-reactive-data-store-for-local-first-apps">The <em>reactive</em> data store for local‑first apps.</h2><p>Modern apps deserve better. Why trade reactive user experiences to be able to use relational data? Why sacrifice store features for bundle size? And why should the cloud do all the work <a href="https://www.inkandswitch.com/local-first/" target="_blank">anyway</a>?</p><p><em>TinyBase is a smart new way to structure your local app data:</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 your UI only spends cycles on the data that changes.</li><li><a href="#build-complex-queries-with-tinyql">Powerful query engine</a> to select, join, filter, group, sort and paginate data - reactively.</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-hooks-to-bind-to-data">idiomatic bindings</a> to your UI.</li><li><em>NEW!</em> <a href="#generate-orm-like-apis">Generate ORM-like APIs</a> in TypeScript, based on your schema or inferred from actual data.</li></ul><p><em>Tiny by name, tiny by nature</em>, TinyBase only costs <a href="#did-we-say-tiny">3.5kB - 7.9kB</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://beta.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://beta.tinybase.org/guides/faq/">FAQs</a>?</p></section><p><a id="new" href="https://beta.tinybase.org/guides/releases/#v2-2"><em>NEW!</em> v2.2 release</a></p><hr><p><a id="start" href="https://beta.tinybase.org/guides/the-basics/getting-started">Get started</a></p><p><a href="https://beta.tinybase.org/demos">Try the demos</a></p><p><a href="https://beta.tinybase.org/api/store/interfaces/store/store/">Read the docs</a></p><hr><section><h2 id="set-and-get-tables-rows-and-cells">Set and get tables, rows, and cells.</h2><p>Creating a <a href="https://beta.tinybase.org/api/store/interfaces/store/store"><code>Store</code></a> requires just a simple call to the <a href="https://beta.tinybase.org/api/store/functions/creation/createstore"><code>createStore</code></a> function. Once you have one, you can easily set <a href="https://beta.tinybase.org/api/store/type-aliases/store/table"><code>Table</code></a>, <a href="https://beta.tinybase.org/api/store/type-aliases/store/row"><code>Row</code></a>, or <a href="https://beta.tinybase.org/api/store/type-aliases/store/cell"><code>Cell</code></a> values by their <a href="https://beta.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://beta.tinybase.org/guides/the-basics">The Basics</a> guide.</p></section>
2
2
 
3
3
  ```js
4
4
  const store = createStore()
@@ -235,4 +235,23 @@ console.log(store.getCell('pets', 'felix', 'sold'));
235
235
  // -> false
236
236
  ```
237
237
 
238
- <section><h2 id="did-we-say-tiny">Did we say tiny?</h2><p>If you use the basic <a href="https://beta.tinybase.org/api/store"><code>store</code></a> module alone, you&#x27;ll only add a gzipped <em>3.5kB</em> to your app. You can incrementally add the other modules as you need more functionality, or get it all for <em>7.9kB</em>.</p><p>The <code>ui-react</code> adaptor is just another <em>3.2kB</em>, and everything is fast. Life&#x27;s easy when you have zero dependencies!</p><p>Read more about how TinyBase is structured in the <a href="https://beta.tinybase.org/guides/how-tinybase-is-built/architecture">Architecture</a> guide.</p></section><div class="table"><table class="fixed"><tbody><tr><th width="30%"> </th><th>.js.gz</th><th>.js</th><th>debug.js</th><th>.d.ts</th></tr><tr><th class="right"><a href="https://beta.tinybase.org/api/store">store</a></th><td>3.5kB</td><td>7.8kB</td><td>33.3kB</td><td>127.2kB</td></tr><tr><th class="right"><a href="https://beta.tinybase.org/api/metrics">metrics</a></th><td>1.8kB</td><td>3.6kB</td><td>14.7kB</td><td>29.1kB</td></tr><tr><th class="right"><a href="https://beta.tinybase.org/api/indexes">indexes</a></th><td>1.9kB</td><td>3.7kB</td><td>16.5kB</td><td>33.9kB</td></tr><tr><th class="right"><a href="https://beta.tinybase.org/api/relationships">relationships</a></th><td>1.8kB</td><td>3.6kB</td><td>16.6kB</td><td>42.1kB</td></tr><tr><th class="right"><a href="https://beta.tinybase.org/api/queries">queries</a></th><td>2.6kB</td><td>5.5kB</td><td>24.9kB</td><td>106.8kB</td></tr><tr><th class="right"><a href="https://beta.tinybase.org/api/checkpoints">checkpoints</a></th><td>1.4kB</td><td>2.8kB</td><td>11.3kB</td><td>33.0kB</td></tr><tr><th class="right"><a href="https://beta.tinybase.org/api/persisters">persisters</a></th><td>0.8kB</td><td>1.6kB</td><td>5.0kB</td><td>26.8kB</td></tr><tr><th class="right"><a href="https://beta.tinybase.org/api/common">common</a></th><td>0.1kB</td><td>0.1kB</td><td>0.1kB</td><td>3.5kB</td></tr><tr><th class="right">tinybase (all)</th><td>7.9kB</td><td>18.5kB</td><td>81.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://beta.tinybase.org/guides/how-tinybase-is-built/testing">Testing</a> guide.</p></section><div class="table"><table class="fixed"><tbody><tr><th width="30%"> </th><th>Total</th><th>Tested</th><th>Coverage</th></tr><tr><th class="right">Lines</th><td>1,249</td><td>1,249</td><td>100.0%</td></tr><tr><th class="right">Statements</th><td>1,353</td><td>1,353</td><td>100.0%</td></tr><tr><th class="right">Functions</th><td>511</td><td>511</td><td>100.0%</td></tr><tr><th class="right">Branches</th><td>471</td><td>471</td><td>100.0%</td></tr><tr><th class="right">Tests</th><td colspan="3">2,147</td></tr><tr><th class="right">Assertions</th><td colspan="3">11,037</td></tr></tbody></table></div><hr><p><a id="start" href="https://beta.tinybase.org/guides/the-basics/getting-started">Get started</a></p><p><a href="https://beta.tinybase.org/demos">Try the demos</a></p><p><a href="https://beta.tinybase.org/api/store/interfaces/store/store/">Read the docs</a></p><hr><section><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://beta.tinybase.org/guides/releases/">Release notes</a> for each version.</li><li>Packages on <a href="https://www.npmjs.com/package/tinybase/v/2.2.0-beta.0">NPM</a>.</li><li><a href="https://github.com/tinyplex/tinybase/issues">Issues</a> on <a href="https://github.com/tinyplex/tinybase">GitHub</a>.</li></ul></section><section><h2 id="about">About</h2><p>Building TinyBase was an interesting exercise in API design, minification, and documentation. It could not have been built without these great <a href="https://beta.tinybase.org/guides/how-tinybase-is-built/credits/#giants">projects</a> and <a href="https://beta.tinybase.org/guides/how-tinybase-is-built/credits/#and-friends">friends</a>, and we hope you enjoy using it!</p></section>
238
+ <section><h2 id="generate-orm-like-apis">Generate ORM-like APIs</h2><p>You can easily create TypeScript <code>.d.ts</code> definitions that model your data and encourage type-safety when reading and writing data - as well as <code>.ts</code> implementations that provide ORM-like methods for your named tables.</p><p>Read more about TinyBase&#x27;s tools and CLI in the <a href="https://beta.tinybase.org/guides/developer-tools">Developer Tools</a> guide.</p></section>
239
+
240
+ ```js
241
+ const tools = createTools(store);
242
+ const [dTs, ts] = tools.getStoreApi('shop');
243
+
244
+ // -- shop.d.ts --
245
+ /* Represents the 'pets' Table. */
246
+ export type PetsTable = {[rowId: Id]: PetsRow};
247
+ /* Represents a Row when getting the content of the 'pets' Table. */
248
+ export type PetsRow = {species: string /* ... */};
249
+ //...
250
+
251
+ // -- shop.ts --
252
+ export const createShop: typeof createShopDecl = () => {
253
+ //...
254
+ };
255
+ ```
256
+
257
+ <section><h2 id="did-we-say-tiny">Did we say tiny?</h2><p>If you use the basic <a href="https://beta.tinybase.org/api/store"><code>store</code></a> module alone, you&#x27;ll only add a gzipped <em>3.5kB</em> to your app. You can incrementally add the other modules as you need more functionality, or get it all for <em>7.9kB</em>.</p><p>The <code>ui-react</code> adaptor is just another <em>3.2kB</em>, the developer <a href="https://beta.tinybase.org/api/tools"><code>tools</code></a> module is <em>4.7kB</em>, and everything is fast. Life&#x27;s easy when you have zero dependencies!</p><p>Read more about how TinyBase is structured in the <a href="https://beta.tinybase.org/guides/how-tinybase-is-built/architecture">Architecture</a> guide.</p></section><div class="table"><table class="fixed"><tbody><tr><th width="30%"> </th><th>.js.gz</th><th>.js</th><th>debug.js</th><th>.d.ts</th></tr><tr><th class="right"><a href="https://beta.tinybase.org/api/store">store</a></th><td>3.5kB</td><td>7.7kB</td><td>33.2kB</td><td>127.2kB</td></tr><tr><th class="right"><a href="https://beta.tinybase.org/api/metrics">metrics</a></th><td>1.8kB</td><td>3.5kB</td><td>14.7kB</td><td>29.1kB</td></tr><tr><th class="right"><a href="https://beta.tinybase.org/api/indexes">indexes</a></th><td>1.9kB</td><td>3.7kB</td><td>16.5kB</td><td>33.9kB</td></tr><tr><th class="right"><a href="https://beta.tinybase.org/api/relationships">relationships</a></th><td>1.8kB</td><td>3.6kB</td><td>16.6kB</td><td>42.1kB</td></tr><tr><th class="right"><a href="https://beta.tinybase.org/api/queries">queries</a></th><td>2.6kB</td><td>5.5kB</td><td>24.9kB</td><td>106.8kB</td></tr><tr><th class="right"><a href="https://beta.tinybase.org/api/checkpoints">checkpoints</a></th><td>1.4kB</td><td>2.8kB</td><td>11.3kB</td><td>33.0kB</td></tr><tr><th class="right"><a href="https://beta.tinybase.org/api/persisters">persisters</a></th><td>0.8kB</td><td>1.6kB</td><td>5.0kB</td><td>26.8kB</td></tr><tr><th class="right"><a href="https://beta.tinybase.org/api/common">common</a></th><td>0.1kB</td><td>0.1kB</td><td>0.1kB</td><td>3.5kB</td></tr><tr><th class="right">tinybase (all)</th><td>7.9kB</td><td>18.4kB</td><td>81.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://beta.tinybase.org/guides/how-tinybase-is-built/testing">Testing</a> guide.</p></section><div class="table"><table class="fixed"><tbody><tr><th width="30%"> </th><th>Total</th><th>Tested</th><th>Coverage</th></tr><tr><th class="right">Lines</th><td>1,249</td><td>1,249</td><td>100.0%</td></tr><tr><th class="right">Statements</th><td>1,353</td><td>1,353</td><td>100.0%</td></tr><tr><th class="right">Functions</th><td>511</td><td>511</td><td>100.0%</td></tr><tr><th class="right">Branches</th><td>471</td><td>471</td><td>100.0%</td></tr><tr><th class="right">Tests</th><td colspan="3">2,147</td></tr><tr><th class="right">Assertions</th><td colspan="3">11,037</td></tr></tbody></table></div><hr><p><a id="start" href="https://beta.tinybase.org/guides/the-basics/getting-started">Get started</a></p><p><a href="https://beta.tinybase.org/demos">Try the demos</a></p><p><a href="https://beta.tinybase.org/api/store/interfaces/store/store/">Read the docs</a></p><hr><section><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://beta.tinybase.org/guides/releases/">Release notes</a> for each version.</li><li>Packages on <a href="https://www.npmjs.com/package/tinybase/v/2.2.0-beta.1">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 could not have been built without these great <a href="https://beta.tinybase.org/guides/how-tinybase-is-built/credits/#giants">projects</a> and <a href="https://beta.tinybase.org/guides/how-tinybase-is-built/credits/#and-friends">friends</a>, and we hope you enjoy using it!</p></section>