tinybase 4.0.1 → 4.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/lib/cjs/persisters/persister-cr-sqlite-wasm.cjs +1 -1
  2. package/lib/cjs/persisters/persister-cr-sqlite-wasm.cjs.gz +0 -0
  3. package/lib/cjs/persisters/persister-sqlite-wasm.cjs +1 -1
  4. package/lib/cjs/persisters/persister-sqlite-wasm.cjs.gz +0 -0
  5. package/lib/cjs/persisters/persister-sqlite3.cjs +1 -1
  6. package/lib/cjs/persisters/persister-sqlite3.cjs.gz +0 -0
  7. package/lib/cjs-es6/persisters/persister-cr-sqlite-wasm.cjs +1 -1
  8. package/lib/cjs-es6/persisters/persister-cr-sqlite-wasm.cjs.gz +0 -0
  9. package/lib/cjs-es6/persisters/persister-sqlite-wasm.cjs +1 -1
  10. package/lib/cjs-es6/persisters/persister-sqlite-wasm.cjs.gz +0 -0
  11. package/lib/cjs-es6/persisters/persister-sqlite3.cjs +1 -1
  12. package/lib/cjs-es6/persisters/persister-sqlite3.cjs.gz +0 -0
  13. package/lib/debug/persisters/persister-cr-sqlite-wasm.js +177 -117
  14. package/lib/debug/persisters/persister-sqlite-wasm.js +172 -116
  15. package/lib/debug/persisters/persister-sqlite3.js +172 -117
  16. package/lib/es6/persisters/persister-cr-sqlite-wasm.js +1 -1
  17. package/lib/es6/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  18. package/lib/es6/persisters/persister-sqlite-wasm.js +1 -1
  19. package/lib/es6/persisters/persister-sqlite-wasm.js.gz +0 -0
  20. package/lib/es6/persisters/persister-sqlite3.js +1 -1
  21. package/lib/es6/persisters/persister-sqlite3.js.gz +0 -0
  22. package/lib/persisters/persister-cr-sqlite-wasm.js +1 -1
  23. package/lib/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  24. package/lib/persisters/persister-sqlite-wasm.js +1 -1
  25. package/lib/persisters/persister-sqlite-wasm.js.gz +0 -0
  26. package/lib/persisters/persister-sqlite3.js +1 -1
  27. package/lib/persisters/persister-sqlite3.js.gz +0 -0
  28. package/lib/types/persisters.d.ts +7 -0
  29. package/lib/types/with-schemas/persisters.d.ts +7 -0
  30. package/lib/umd/persisters/persister-cr-sqlite-wasm.js +1 -1
  31. package/lib/umd/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  32. package/lib/umd/persisters/persister-sqlite-wasm.js +1 -1
  33. package/lib/umd/persisters/persister-sqlite-wasm.js.gz +0 -0
  34. package/lib/umd/persisters/persister-sqlite3.js +1 -1
  35. package/lib/umd/persisters/persister-sqlite3.js.gz +0 -0
  36. package/lib/umd-es6/persisters/persister-cr-sqlite-wasm.js +1 -1
  37. package/lib/umd-es6/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  38. package/lib/umd-es6/persisters/persister-sqlite-wasm.js +1 -1
  39. package/lib/umd-es6/persisters/persister-sqlite-wasm.js.gz +0 -0
  40. package/lib/umd-es6/persisters/persister-sqlite3.js +1 -1
  41. package/lib/umd-es6/persisters/persister-sqlite3.js.gz +0 -0
  42. package/package.json +19 -19
  43. package/readme.md +1 -1
@@ -1 +1 @@
1
- var e,t;e=this,t=function(e){"use strict";const t=e=>typeof e,n="tinybase",l=",",r=t(""),o=(e,t="")=>e.join(t),i=(e,t)=>e.map(t),u=e=>e.length,a=e=>0==u(e),d=(e,t)=>e.filter(t),s=(e,t,n)=>e.slice(t,n),c=(e,...t)=>e.push(...t),v=Promise,y=(e,t)=>e instanceof t,f=e=>null==e,p=(e,t,n)=>f(e)?null==n?void 0:n():t(e),h=e=>t(e)==r,m=e=>{return t=function*(){return v.all(e)},new Promise(((e,n)=>{var l=e=>{try{o(t.next(e))}catch(e){n(e)}},r=e=>{try{o(t.throw(e))}catch(e){n(e)}},o=t=>t.done?e(t.value):Promise.resolve(t.value).then(l,r);o((t=t.apply(void 0,null)).next())}));var t},E=(e,t)=>{var n;return null!=(n=null==e?void 0:e.has(t))&&n},b=e=>{var t;return[...null!=(t=null==e?void 0:e.values())?t:[]]},O=(e,t)=>null==e?void 0:e.delete(t),P=Object,T=P.keys,w=P.freeze,A=(e=[])=>P.fromEntries(e),L=(...e)=>P.assign({},...e),S=(e,t)=>(delete e[t],e),x=(e,t)=>i(P.entries(e),(([e,n])=>t(n,e))),g=e=>P.values(e),N=e=>u(T(e)),C=e=>(e=>y(e,P)&&e.constructor==P)(e)&&0==N(e),R=e=>new Map(e),I=e=>{var t;return[...null!=(t=null==e?void 0:e.keys())?t:[]]},j=(e,t)=>null==e?void 0:e.get(t),_=(e,t)=>{var n;return i([...null!=(n=null==e?void 0:e.entries())?n:[]],(([e,n])=>t(n,e)))},D=(e,t,n)=>f(n)?(O(e,t),e):null==e?void 0:e.set(t,n),$=(e,t,n,l=D)=>(x(t,((t,l)=>n(e,l,t))),((e,t)=>{((e,t)=>{null==e||e.forEach(t)})(e,((e,n)=>t(n)))})(e,(n=>((e,t)=>!f(((e,t)=>p(e,(e=>e[t])))(e,t)))(t,n)?0:l(e,n))),e),M="_id",F=e=>`"${e.replace(/"/g,'""')}"`,B=e=>new Set(Array.isArray(e)||f(e)?e:[e]),k=(e,t)=>null==e?void 0:e.add(t);var q=Object.defineProperty,W=Object.getOwnPropertySymbols,H=Object.prototype.hasOwnProperty,J=Object.prototype.propertyIsEnumerable,U=(e,t,n)=>t in e?q(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,V=(e,t)=>{for(var n in t||(t={}))H.call(t,n)&&U(e,n,t[n]);if(W)for(var n of W(t))J.call(t,n)&&U(e,n,t[n]);return e},Y=(e,t,n)=>new Promise(((l,r)=>{var o=e=>{try{u(n.next(e))}catch(e){r(e)}},i=e=>{try{u(n.throw(e))}catch(e){r(e)}},u=e=>e.done?l(e.value):Promise.resolve(e.value).then(o,i);u((n=n.apply(e,t)).next())}));const z="SELECT*FROM",K="FROM pragma_table_",G="WHERE",Q=(e,t)=>{const n=R(),r=(e,t)=>!f(j(j(n,e),t)),s=(t,r,s,v,y)=>Y(void 0,null,(function*(){const f=B();x(null!=y?y:{},(e=>i(T(e),(e=>k(f,e)))));const p=b(f);if(a(p)&&E(n,t)&&v)return yield e("DROP TABLE"+F(t)),void D(n,t);if(a(p)||E(n,t)){const l=j(n,t),o=B(I(l));yield m([...i(p,(n=>Y(void 0,null,(function*(){O(o,n)||(yield e(`ALTER TABLE${F(t)}ADD${F(n)}`),D(l,n,""))})))),...s?i(b(o),(n=>Y(void 0,null,(function*(){n!=r&&(yield e(`ALTER TABLE${F(t)}DROP${F(n)}`),D(l,n))})))):[]])}else yield e(`CREATE TABLE${F(t)}(${F(r)} PRIMARY KEY ON CONFLICT REPLACE${o(i(p,(e=>l+F(e))))});`),D(n,t,R([[r,""],...i(p,(e=>[e,""]))]));if(a(p))E(n,t)&&(yield e("DELETE FROM"+F(t)));else{const a=[],s=[],v=[],f=d(I(j(n,t)),(e=>e!=r));x(y,((e,t)=>{var n;c(a,`(?${n=u(f),",?".repeat(n)})`),c(s,t,...i(f,(t=>e[t]))),c(v,t)})),yield e("INSERT INTO"+F(t)+"("+F(r)+o(i(f,(e=>l+F(e))))+")VALUES"+o(a,l)+"ON CONFLICT("+F(r)+")DO UPDATE SET"+o(i(f,(e=>F(e)+"=excluded."+F(e))),l),s),yield e("DELETE FROM"+F(t)+G+F(r)+"NOT IN("+X(v)+")",v)}}));return[()=>Y(void 0,null,(function*(){return $(n,A(yield m(i(yield e("SELECT name "+K+"list WHERE schema='main'AND type='table'AND name IN("+X(t)+")",t),(t=>Y(void 0,[t],(function*({name:t}){return[t,A(i(yield e("SELECT name,type "+K+"info(?)",[t]),(({name:e,type:t})=>[e,t])))]})))))),((e,t,l)=>{return D(n,t,$((i=R,E(r=n,o=t)||D(r,o,i()),j(r,o)),l,((e,t,n)=>{n!=j(e,t)&&D(e,t,n)}),((e,t)=>D(e,t))));var r,o,i}),((e,t)=>D(n,t)))})),(t,n)=>Y(void 0,null,(function*(){const l=r(t,n)?yield e(z+F(t)+G+F(n)+"=?",["_"]):[];return a(l)?null:S(l[0],n)})),(e,t,n,l)=>Y(void 0,null,(function*(){return yield s(e,t,!0,!0,{[n]:l})})),(t,n)=>Y(void 0,null,(function*(){return r(t,n)?A(d(i(yield e(z+F(t)),(e=>[e[n],S(V({},e),n)])),(([e,t])=>!f(e)&&!C(t)))):{}})),s]},X=e=>o(i(e,(()=>"?")),l),Z=JSON.parse;var ee=(e,t,n)=>new Promise(((l,r)=>{var o=e=>{try{u(n.next(e))}catch(e){r(e)}},i=e=>{try{u(n.throw(e))}catch(e){r(e)}},u=e=>e.done?l(e.value):Promise.resolve(e.value).then(o,i);u((n=n.apply(e,t)).next())}));const te=(e,t,n,l,r)=>{let o,i,u,a=0,d=0,s=0;const v=[],y=e=>ee(void 0,null,(function*(){return 2!=a&&(a=1,yield h.schedule((()=>ee(void 0,null,(function*(){yield e(),a=0}))))),h})),h={load:(n,l)=>ee(void 0,null,(function*(){return yield y((()=>ee(void 0,null,(function*(){try{e.setContent(yield t())}catch(t){e.setContent([n,l])}}))))})),startAutoLoad:(...n)=>ee(void 0,[...n],(function*(n={},r={}){return h.stopAutoLoad(),yield h.load(n,r),s=1,u=l(((n,l)=>ee(void 0,null,(function*(){return yield y((()=>ee(void 0,null,(function*(){var r;if(l)e.setTransactionChanges(l());else try{e.setContent(null!=(r=null==n?void 0:n())?r:yield t())}catch(e){}}))))})))),h})),stopAutoLoad:()=>(s&&(r(u),u=void 0,s=0),h),save:t=>ee(void 0,null,(function*(){return 1!=a&&(a=2,yield h.schedule((()=>ee(void 0,null,(function*(){try{yield n(e.getContent,t)}catch(e){}a=0}))))),h})),startAutoSave:()=>ee(void 0,null,(function*(){return yield h.stopAutoSave().save(),o=e.addDidFinishTransactionListener(((e,t)=>{const[n,l]=t();C(n)&&C(l)||h.save((()=>[n,l]))})),h})),stopAutoSave:()=>(p(o,e.delListener),h),schedule:(...e)=>ee(void 0,null,(function*(){return c(v,...e),yield ee(void 0,null,(function*(){if(!d){for(d=1;!f((e=v,i=e.shift()));)try{yield i()}catch(e){}d=0}var e})),h})),getStore:()=>e,destroy:()=>h.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return w(h)};var ne=(e,t,n)=>new Promise(((l,r)=>{var o=e=>{try{u(n.next(e))}catch(e){r(e)}},i=e=>{try{u(n.throw(e))}catch(e){r(e)}},u=e=>e.done?l(e.value):Promise.resolve(e.value).then(o,i);u((n=n.apply(e,t)).next())}));const le="store",re=(e,t,n,l,[r],o)=>{const[i,u,a]=Q(t,o),d=te(e,(()=>ne(void 0,null,(function*(){var e;return yield i(),Z((null!=(e=yield u(r,M))?e:{})[le])}))),(e=>ne(void 0,null,(function*(){return d.schedule(i,(()=>ne(void 0,null,(function*(){var t;yield a(r,M,"_",{[le]:(t=e(),JSON.stringify(t,((e,t)=>y(t,Map)?P.fromEntries([...t]):t)))})}))))}))),n,l);return d};var oe=(e,t,n)=>new Promise(((l,r)=>{var o=e=>{try{u(n.next(e))}catch(e){r(e)}},i=e=>{try{u(n.throw(e))}catch(e){r(e)}},u=e=>e.done?l(e.value):Promise.resolve(e.value).then(o,i);u((n=n.apply(e,t)).next())}));const ie=(e,t,n,l,[r,o,[i,u,a]],s)=>{const[c,v,y,p,h]=Q(t,s);return te(e,(()=>oe(void 0,null,(function*(){yield c();const e=yield oe(void 0,null,(function*(){return A(d(yield m(_(r,((e,t)=>oe(void 0,[e,t],(function*([e,t],n){return[e,yield p(n,t)]}))))),(e=>!C(e[1]))))})),t=yield oe(void 0,null,(function*(){return i?yield v(a,M):{}}));return C(e)&&f(t)?void 0:[e,t]}))),(e=>oe(void 0,null,(function*(){const[t,n]=e();yield c(),yield(e=>oe(void 0,null,(function*(){return yield m(_(o,((t,n)=>oe(void 0,[t,n],(function*([t,n,l,r],o){return yield h(t,n,l,r,e[o])})))))})))(t),yield(e=>oe(void 0,null,(function*(){return u?yield y(a,M,"_",e):null})))(n)}))),n,l)},ue="json",ae="autoLoadIntervalSeconds",de="rowIdColumnName",se="tableId",ce="tableName",ve={mode:ue,[ae]:1},ye={load:0,save:0,[ce]:n+"_values"},fe=(e,t,n,l)=>{const r=R();return x(e,((e,o)=>{const i=s(g(L(t,h(e)?{[n]:e}:e)),0,N(t));f(i[0])||l(o,i[0])||D(r,o,i)})),r},pe="pragma ",he="data_version",me="schema_version",Ee=(e,t,l,r,o)=>{let i,u;const[a,d,c,v]=(e=>{const t=(e=>L(ve,h(e)?{storeTableName:e}:null!=e?e:{}))(e),l=t[ae];if(t.mode==ue){const{storeTableName:e=n}=t;return[1,l,[e],B(e)]}const{tables:{load:r={},save:o={}}={},values:i={}}=t,u=s(g(L(ye,i)),0,N(ye)),a=u[2],d=B(a);return[0,l,[fe(r,{[se]:null,[de]:M},se,(e=>k(d,e)&&e==a)),fe(o,{[ce]:null,[de]:M,deleteEmptyColumns:0,deleteEmptyTable:0},ce,((e,t)=>k(d,t)&&t==a)),u],d]})(t);return(a?re:ie)(e,l,(e=>[setInterval((()=>{return t=function*(){try{const t=(yield l(pe+he))[0][he],n=(yield l(pe+me))[0][me];t==(null!=i?i:i=t)&&n==(null!=u?u:u=n)||(e(),i=t,u=n)}catch(e){}},new Promise(((e,n)=>{var l=e=>{try{o(t.next(e))}catch(e){n(e)}},r=e=>{try{o(t.throw(e))}catch(e){n(e)}},o=t=>t.done?e(t.value):Promise.resolve(t.value).then(l,r);o((t=t.apply(void 0,null)).next())}));var t}),1e3*d),r((t=>v.has(t)?e():0))]),(([e,t])=>{clearInterval(e),i=u=null,o(t)}),c,b(v))};var be=Object.defineProperty,Oe=Object.getOwnPropertySymbols,Pe=Object.prototype.hasOwnProperty,Te=Object.prototype.propertyIsEnumerable,we=(e,t,n)=>t in e?be(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;e.createSqliteWasmPersister=(e,t,n,l)=>Ee(e,l,((e,...t)=>{return l=[e,...t],r=function*(e,t=[]){return n.exec(e,{bind:t,rowMode:"object",returnValue:"resultRows"}).map((e=>((e,t)=>{for(var n in t||(t={}))Pe.call(t,n)&&we(e,n,t[n]);if(Oe)for(var n of Oe(t))Te.call(t,n)&&we(e,n,t[n]);return e})({},e)))},new Promise(((e,t)=>{var n=e=>{try{i(r.next(e))}catch(e){t(e)}},o=e=>{try{i(r.throw(e))}catch(e){t(e)}},i=t=>t.done?e(t.value):Promise.resolve(t.value).then(n,o);i((r=r.apply(void 0,l)).next())}));var l,r}),(e=>t.capi.sqlite3_update_hook(n,((t,n,l,r)=>e(r)),0)),(()=>t.capi.sqlite3_update_hook(n,(()=>0),0)))},"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).TinyBasePersisterSqliteWasm={});
1
+ var e,n;e=this,n=function(e){"use strict";const n=e=>typeof e,t="tinybase",l=",",o=n(""),r=(e,n)=>e.repeat(n),i=(e,n="")=>e.join(n),u=(e,n)=>e.map(n),a=e=>e.length,d=e=>0==a(e),s=(e,n)=>e.filter(n),c=(e,n,t)=>e.slice(n,t),v=(e,...n)=>e.push(...n),y=Promise,f=(e,n)=>e instanceof n,p=e=>null==e,h=(e,n,t)=>p(e)?null==t?void 0:t():n(e),m=e=>n(e)==o,E=e=>{return n=function*(){return y.all(e)},new Promise(((e,t)=>{var l=e=>{try{r(n.next(e))}catch(e){t(e)}},o=e=>{try{r(n.throw(e))}catch(e){t(e)}},r=n=>n.done?e(n.value):Promise.resolve(n.value).then(l,o);r((n=n.apply(void 0,null)).next())}));var n},b=(e,n)=>{var t;return null!=(t=null==e?void 0:e.has(n))&&t},O=e=>{var n;return[...null!=(n=null==e?void 0:e.values())?n:[]]},T=(e,n)=>null==e?void 0:e.delete(n),P=Object,w=P.keys,A=P.freeze,L=(e=[])=>P.fromEntries(e),R=(...e)=>P.assign({},...e),S=(e,n)=>u(P.entries(e),(([e,t])=>n(t,e))),x=e=>P.values(e),g=e=>a(w(e)),N=e=>(e=>f(e,P)&&e.constructor==P)(e)&&0==g(e),C=e=>new Map(e),I=e=>{var n;return[...null!=(n=null==e?void 0:e.keys())?n:[]]},j=(e,n)=>null==e?void 0:e.get(n),D=(e,n)=>{var t;return u([...null!=(t=null==e?void 0:e.entries())?t:[]],(([e,t])=>n(t,e)))},_=(e,n,t)=>p(t)?(T(e,n),e):null==e?void 0:e.set(n,t),M=(e,n,t,l=_)=>(S(n,((n,l)=>t(e,l,n))),((e,n)=>{((e,n)=>{null==e||e.forEach(n)})(e,((e,t)=>n(t)))})(e,(t=>((e,n)=>!p(((e,n)=>h(e,(e=>e[n])))(e,n)))(n,t)?0:l(e,t))),e),F=e=>new Set(Array.isArray(e)||p(e)?e:[e]),$=(e,n)=>null==e?void 0:e.add(n),W="_",B="_id",k=e=>`"${e.replace(/"/g,'""')}"`;var q=Object.defineProperty,H=Object.getOwnPropertySymbols,J=Object.prototype.hasOwnProperty,U=Object.prototype.propertyIsEnumerable,V=(e,n,t)=>n in e?q(e,n,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[n]=t,Y=(e,n)=>{for(var t in n||(n={}))J.call(n,t)&&V(e,t,n[t]);if(H)for(var t of H(n))U.call(n,t)&&V(e,t,n[t]);return e},z=(e,n,t)=>new Promise(((l,o)=>{var r=e=>{try{u(t.next(e))}catch(e){o(e)}},i=e=>{try{u(t.throw(e))}catch(e){o(e)}},u=e=>e.done?l(e.value):Promise.resolve(e.value).then(r,i);u((t=t.apply(e,n)).next())}));const K="FROM pragma_table_",G="WHERE",Q=(e,n)=>{const t=C();return[()=>z(void 0,null,(function*(){return M(t,L(yield E(u(yield e("SELECT name "+K+"list WHERE schema='main'AND type='table'AND name IN("+Z(n)+")",n),(n=>z(void 0,[n],(function*({name:n}){return[n,L(u(yield e("SELECT name,type "+K+"info(?)",[n]),(({name:e,type:n})=>[e,n])))]})))))),((e,n,l)=>{return _(t,n,M((i=C,b(o=t,r=n)||_(o,r,i()),j(o,r)),l,((e,n,t)=>{t!=j(e,n)&&_(e,n,t)}),((e,n)=>_(e,n))));var o,r,i}),((e,n)=>_(t,n)))})),(n,l)=>z(void 0,null,(function*(){return((e,n)=>!p(j(j(t,e),n)))(n,l)?L(s(u(yield e("SELECT*FROM"+k(n)),(e=>{return[e[l],(n=Y({},e),t=l,delete n[t],n)];var n,t})),(([e,n])=>!p(e)&&!N(n)))):{}})),(n,o,r,a,c,y=!1)=>z(void 0,null,(function*(){const f=F();S(null!=r?r:{},(e=>u(w(null!=e?e:{}),(e=>$(f,e)))));const h=O(f);if(!y&&c&&d(h)&&b(t,n))return yield e("DROP TABLE"+k(n)),void _(t,n);if(d(h)||b(t,n)){const l=j(t,n),r=F(I(l));yield E([...u(h,(t=>z(void 0,null,(function*(){T(r,t)||(yield e(`ALTER TABLE${k(n)}ADD${k(t)}`),_(l,t,""))})))),...!y&&a?u(O(r),(t=>z(void 0,null,(function*(){t!=o&&(yield e(`ALTER TABLE${k(n)}DROP${k(t)}`),_(l,t))})))):[]])}else yield e(`CREATE TABLE${k(n)}(${k(o)} PRIMARY KEY ON CONFLICT REPLACE${i(u(h,(e=>l+k(e))))});`),_(t,n,C([[o,""],...u(h,(e=>[e,""]))]));if(y)p(r)?yield e("DELETE FROM"+k(n)+"WHERE 1"):yield E(S(r,((t,l)=>z(void 0,null,(function*(){p(t)?yield e("DELETE FROM"+k(n)+G+k(o)+"=?",[l]):d(h)||(yield X(e,n,o,w(t),[l,...x(t)]))})))));else if(d(h))b(t,n)&&(yield e("DELETE FROM"+k(n)+"WHERE 1"));else{const l=s(I(j(t,n)),(e=>e!=o)),i=[],a=[];S(null!=r?r:{},((e,n)=>{v(i,n,...u(l,(n=>null==e?void 0:e[n]))),v(a,n)})),yield X(e,n,o,l,i),yield e("DELETE FROM"+k(n)+G+k(o)+"NOT IN("+Z(a)+")",a)}}))]},X=(e,n,t,o,d)=>z(void 0,null,(function*(){return yield e("INSERT INTO"+k(n)+"("+k(t)+i(u(o,(e=>l+k(e))))+")VALUES"+r(`,(?${r(",?",a(o))})`,a(d)/(a(o)+1)).substring(1)+"ON CONFLICT("+k(t)+")DO UPDATE SET"+i(u(o,(e=>k(e)+"=excluded."+k(e))),l),d)})),Z=e=>i(u(e,(()=>"?")),l),ee=JSON.parse;var ne=(e,n,t)=>new Promise(((l,o)=>{var r=e=>{try{u(t.next(e))}catch(e){o(e)}},i=e=>{try{u(t.throw(e))}catch(e){o(e)}},u=e=>e.done?l(e.value):Promise.resolve(e.value).then(r,i);u((t=t.apply(e,n)).next())}));const te=(e,n,t,l,o)=>{let r,i,u,a=0,d=0,s=0;const c=[],y=e=>ne(void 0,null,(function*(){return 2!=a&&(a=1,yield f.schedule((()=>ne(void 0,null,(function*(){yield e(),a=0}))))),f})),f={load:(t,l)=>ne(void 0,null,(function*(){return yield y((()=>ne(void 0,null,(function*(){try{e.setContent(yield n())}catch(n){e.setContent([t,l])}}))))})),startAutoLoad:(...t)=>ne(void 0,[...t],(function*(t={},o={}){return f.stopAutoLoad(),yield f.load(t,o),s=1,u=l(((t,l)=>ne(void 0,null,(function*(){return yield y((()=>ne(void 0,null,(function*(){var o;if(l)e.setTransactionChanges(l());else try{e.setContent(null!=(o=null==t?void 0:t())?o:yield n())}catch(e){}}))))})))),f})),stopAutoLoad:()=>(s&&(o(u),u=void 0,s=0),f),save:n=>ne(void 0,null,(function*(){return 1!=a&&(a=2,yield f.schedule((()=>ne(void 0,null,(function*(){try{yield t(e.getContent,n)}catch(e){}a=0}))))),f})),startAutoSave:()=>ne(void 0,null,(function*(){return yield f.stopAutoSave().save(),r=e.addDidFinishTransactionListener(((e,n)=>{const[t,l]=n();N(t)&&N(l)||f.save((()=>[t,l]))})),f})),stopAutoSave:()=>(h(r,e.delListener),f),schedule:(...e)=>ne(void 0,null,(function*(){return v(c,...e),yield ne(void 0,null,(function*(){if(!d){for(d=1;!p((e=c,i=e.shift()));)try{yield i()}catch(e){}d=0}var e})),f})),getStore:()=>e,destroy:()=>f.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return A(f)};var le=(e,n,t)=>new Promise(((l,o)=>{var r=e=>{try{u(t.next(e))}catch(e){o(e)}},i=e=>{try{u(t.throw(e))}catch(e){o(e)}},u=e=>e.done?l(e.value):Promise.resolve(e.value).then(r,i);u((t=t.apply(e,n)).next())}));const oe="store",re=(e,n,t,l,[o],r)=>{const[i,u,a]=Q(n,r),d=te(e,(()=>le(void 0,null,(function*(){var e;return yield i(),ee(null==(e=(yield u(o,B))[W])?void 0:e[oe])}))),(e=>le(void 0,null,(function*(){return d.schedule(i,(()=>le(void 0,null,(function*(){var n;yield a(o,B,{[W]:{[oe]:(n=e(),JSON.stringify(n,((e,n)=>f(n,Map)?P.fromEntries([...n]):n)))}},!0,!0)}))))}))),t,l);return d};var ie=(e,n,t)=>new Promise(((l,o)=>{var r=e=>{try{u(t.next(e))}catch(e){o(e)}},i=e=>{try{u(t.throw(e))}catch(e){o(e)}},u=e=>e.done?l(e.value):Promise.resolve(e.value).then(r,i);u((t=t.apply(e,n)).next())}));const ue=(e,n,t,l,[o,r,[i,u,a]],d)=>{const[c,v,y]=Q(n,d),f=(e,n)=>ie(void 0,null,(function*(){return yield E(D(r,((t,l)=>ie(void 0,[t,l],(function*([t,l,o,r],i){const u=e[i];n&&void 0===u||(yield y(t,l,u,o,r,n))})))))})),h=(e,n)=>ie(void 0,null,(function*(){return u?yield y(a,B,{[W]:e},!0,!0,n):null}));return te(e,(()=>ie(void 0,null,(function*(){yield c();const e=yield ie(void 0,null,(function*(){return L(s(yield E(D(o,((e,n)=>ie(void 0,[e,n],(function*([e,n],t){return[e,yield v(t,n)]}))))),(e=>!N(e[1]))))})),n=yield ie(void 0,null,(function*(){return i?(yield v(a,B))[W]:{}}));return N(e)&&p(n)?void 0:[e,n]}))),((e,n)=>ie(void 0,null,(function*(){if(yield c(),p(n)){const[n,t]=e();yield f(n),yield h(t)}else{const[e,t]=n();yield f(e,!0),yield h(t,!0)}}))),t,l)},ae="json",de="autoLoadIntervalSeconds",se="rowIdColumnName",ce="tableId",ve="tableName",ye={mode:ae,[de]:1},fe={load:0,save:0,[ve]:t+"_values"},pe=(e,n,t,l)=>{const o=C();return S(e,((e,r)=>{const i=c(x(R(n,m(e)?{[t]:e}:e)),0,g(n));p(i[0])||l(r,i[0])||_(o,r,i)})),o};var he=(e,n,t)=>new Promise(((l,o)=>{var r=e=>{try{u(t.next(e))}catch(e){o(e)}},i=e=>{try{u(t.throw(e))}catch(e){o(e)}},u=e=>e.done?l(e.value):Promise.resolve(e.value).then(r,i);u((t=t.apply(e,n)).next())}));const me="pragma ",Ee="data_version",be="schema_version",Oe=(e,n,l,o,r,i)=>{let u,a;const[d,s,v,y]=(e=>{const n=(e=>R(ye,m(e)?{storeTableName:e}:null!=e?e:{}))(e),l=n[de];if(n.mode==ae){const{storeTableName:e=t}=n;return[1,l,[e],F(e)]}const{tables:{load:o={},save:r={}}={},values:i={}}=n,u=c(x(R(fe,i)),0,g(fe)),a=u[2],d=F(a);return[0,l,[pe(o,{[ce]:null,[se]:B},ce,(e=>$(d,e)&&e==a)),pe(r,{[ve]:null,[se]:B,deleteEmptyColumns:0,deleteEmptyTable:0},ve,((e,n)=>$(d,n)&&n==a)),u],d]})(n);return(d?re:ue)(e,i?(e,n)=>he(void 0,null,(function*(){return i(e,n),yield l(e,n)})):l,(e=>[setInterval((()=>he(void 0,null,(function*(){try{const n=(yield l(me+Ee))[0][Ee],t=(yield l(me+be))[0][be];n==(null!=u?u:u=n)&&t==(null!=a?a:a=t)||(e(),u=n,a=t)}catch(e){}}))),1e3*s),o((n=>y.has(n)?e():0))]),(([e,n])=>{clearInterval(e),u=a=null,r(n)}),v,O(y))};var Te=Object.defineProperty,Pe=Object.getOwnPropertySymbols,we=Object.prototype.hasOwnProperty,Ae=Object.prototype.propertyIsEnumerable,Le=(e,n,t)=>n in e?Te(e,n,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[n]=t;e.createSqliteWasmPersister=(e,n,t,l,o)=>Oe(e,l,((e,...n)=>{return l=[e,...n],o=function*(e,n=[]){return t.exec(e,{bind:n,rowMode:"object",returnValue:"resultRows"}).map((e=>((e,n)=>{for(var t in n||(n={}))we.call(n,t)&&Le(e,t,n[t]);if(Pe)for(var t of Pe(n))Ae.call(n,t)&&Le(e,t,n[t]);return e})({},e)))},new Promise(((e,n)=>{var t=e=>{try{i(o.next(e))}catch(e){n(e)}},r=e=>{try{i(o.throw(e))}catch(e){n(e)}},i=n=>n.done?e(n.value):Promise.resolve(n.value).then(t,r);i((o=o.apply(void 0,l)).next())}));var l,o}),(e=>n.capi.sqlite3_update_hook(t,((n,t,l,o)=>e(o)),0)),(()=>n.capi.sqlite3_update_hook(t,(()=>0),0)),o)},"object"==typeof exports&&"undefined"!=typeof module?n(exports):"function"==typeof define&&define.amd?define(["exports"],n):n((e="undefined"!=typeof globalThis?globalThis:e||self).TinyBasePersisterSqliteWasm={});
@@ -1 +1 @@
1
- var e,n;e=this,n=function(e){"use strict";const n=e=>typeof e,t="tinybase",l=",",r=n(""),o=(e,n="")=>e.join(n),i=(e,n)=>e.map(n),u=e=>e.length,a=e=>0==u(e),d=(e,n)=>e.filter(n),s=(e,n,t)=>e.slice(n,t),c=(e,...n)=>e.push(...n),v=Promise,y=(e,n)=>e instanceof n,f=e=>null==e,p=(e,n,t)=>f(e)?null==t?void 0:t():n(e),h=e=>n(e)==r,m=e=>{return n=function*(){return v.all(e)},new Promise(((e,t)=>{var l=e=>{try{o(n.next(e))}catch(e){t(e)}},r=e=>{try{o(n.throw(e))}catch(e){t(e)}},o=n=>n.done?e(n.value):Promise.resolve(n.value).then(l,r);o((n=n.apply(void 0,null)).next())}));var n},E=(e,n)=>{var t;return null!=(t=null==e?void 0:e.has(n))&&t},b=e=>{var n;return[...null!=(n=null==e?void 0:e.values())?n:[]]},O=(e,n)=>null==e?void 0:e.delete(n),T=Object,P=T.keys,A=T.freeze,w=(e=[])=>T.fromEntries(e),L=(...e)=>T.assign({},...e),S=(e,n)=>(delete e[n],e),g=(e,n)=>i(T.entries(e),(([e,t])=>n(t,e))),N=e=>T.values(e),x=e=>u(P(e)),C=e=>(e=>y(e,T)&&e.constructor==T)(e)&&0==x(e),R=e=>new Map(e),I=e=>{var n;return[...null!=(n=null==e?void 0:e.keys())?n:[]]},j=(e,n)=>null==e?void 0:e.get(n),D=(e,n)=>{var t;return i([...null!=(t=null==e?void 0:e.entries())?t:[]],(([e,t])=>n(t,e)))},$=(e,n,t)=>f(t)?(O(e,n),e):null==e?void 0:e.set(n,t),_=(e,n,t,l=$)=>(g(n,((n,l)=>t(e,l,n))),((e,n)=>{((e,n)=>{null==e||e.forEach(n)})(e,((e,t)=>n(t)))})(e,(t=>((e,n)=>!f(((e,n)=>p(e,(e=>e[n])))(e,n)))(n,t)?0:l(e,t))),e),F="_id",M=e=>`"${e.replace(/"/g,'""')}"`,B=e=>new Set(Array.isArray(e)||f(e)?e:[e]),k=(e,n)=>null==e?void 0:e.add(n);var q=Object.defineProperty,H=Object.getOwnPropertySymbols,J=Object.prototype.hasOwnProperty,U=Object.prototype.propertyIsEnumerable,W=(e,n,t)=>n in e?q(e,n,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[n]=t,Y=(e,n)=>{for(var t in n||(n={}))J.call(n,t)&&W(e,t,n[t]);if(H)for(var t of H(n))U.call(n,t)&&W(e,t,n[t]);return e},z=(e,n,t)=>new Promise(((l,r)=>{var o=e=>{try{u(t.next(e))}catch(e){r(e)}},i=e=>{try{u(t.throw(e))}catch(e){r(e)}},u=e=>e.done?l(e.value):Promise.resolve(e.value).then(o,i);u((t=t.apply(e,n)).next())}));const K="SELECT*FROM",V="FROM pragma_table_",G="WHERE",Q=(e,n)=>{const t=R(),r=(e,n)=>!f(j(j(t,e),n)),s=(n,r,s,v,y)=>z(void 0,null,(function*(){const f=B();g(null!=y?y:{},(e=>i(P(e),(e=>k(f,e)))));const p=b(f);if(a(p)&&E(t,n)&&v)return yield e("DROP TABLE"+M(n)),void $(t,n);if(a(p)||E(t,n)){const l=j(t,n),o=B(I(l));yield m([...i(p,(t=>z(void 0,null,(function*(){O(o,t)||(yield e(`ALTER TABLE${M(n)}ADD${M(t)}`),$(l,t,""))})))),...s?i(b(o),(t=>z(void 0,null,(function*(){t!=r&&(yield e(`ALTER TABLE${M(n)}DROP${M(t)}`),$(l,t))})))):[]])}else yield e(`CREATE TABLE${M(n)}(${M(r)} PRIMARY KEY ON CONFLICT REPLACE${o(i(p,(e=>l+M(e))))});`),$(t,n,R([[r,""],...i(p,(e=>[e,""]))]));if(a(p))E(t,n)&&(yield e("DELETE FROM"+M(n)));else{const a=[],s=[],v=[],f=d(I(j(t,n)),(e=>e!=r));g(y,((e,n)=>{var t;c(a,`(?${t=u(f),",?".repeat(t)})`),c(s,n,...i(f,(n=>e[n]))),c(v,n)})),yield e("INSERT INTO"+M(n)+"("+M(r)+o(i(f,(e=>l+M(e))))+")VALUES"+o(a,l)+"ON CONFLICT("+M(r)+")DO UPDATE SET"+o(i(f,(e=>M(e)+"=excluded."+M(e))),l),s),yield e("DELETE FROM"+M(n)+G+M(r)+"NOT IN("+X(v)+")",v)}}));return[()=>z(void 0,null,(function*(){return _(t,w(yield m(i(yield e("SELECT name "+V+"list WHERE schema='main'AND type='table'AND name IN("+X(n)+")",n),(n=>z(void 0,[n],(function*({name:n}){return[n,w(i(yield e("SELECT name,type "+V+"info(?)",[n]),(({name:e,type:n})=>[e,n])))]})))))),((e,n,l)=>{return $(t,n,_((i=R,E(r=t,o=n)||$(r,o,i()),j(r,o)),l,((e,n,t)=>{t!=j(e,n)&&$(e,n,t)}),((e,n)=>$(e,n))));var r,o,i}),((e,n)=>$(t,n)))})),(n,t)=>z(void 0,null,(function*(){const l=r(n,t)?yield e(K+M(n)+G+M(t)+"=?",["_"]):[];return a(l)?null:S(l[0],t)})),(e,n,t,l)=>z(void 0,null,(function*(){return yield s(e,n,!0,!0,{[t]:l})})),(n,t)=>z(void 0,null,(function*(){return r(n,t)?w(d(i(yield e(K+M(n)),(e=>[e[t],S(Y({},e),t)])),(([e,n])=>!f(e)&&!C(n)))):{}})),s]},X=e=>o(i(e,(()=>"?")),l),Z=JSON.parse;var ee=(e,n,t)=>new Promise(((l,r)=>{var o=e=>{try{u(t.next(e))}catch(e){r(e)}},i=e=>{try{u(t.throw(e))}catch(e){r(e)}},u=e=>e.done?l(e.value):Promise.resolve(e.value).then(o,i);u((t=t.apply(e,n)).next())}));const ne=(e,n,t,l,r)=>{let o,i,u,a=0,d=0,s=0;const v=[],y=e=>ee(void 0,null,(function*(){return 2!=a&&(a=1,yield h.schedule((()=>ee(void 0,null,(function*(){yield e(),a=0}))))),h})),h={load:(t,l)=>ee(void 0,null,(function*(){return yield y((()=>ee(void 0,null,(function*(){try{e.setContent(yield n())}catch(n){e.setContent([t,l])}}))))})),startAutoLoad:(...t)=>ee(void 0,[...t],(function*(t={},r={}){return h.stopAutoLoad(),yield h.load(t,r),s=1,u=l(((t,l)=>ee(void 0,null,(function*(){return yield y((()=>ee(void 0,null,(function*(){var r;if(l)e.setTransactionChanges(l());else try{e.setContent(null!=(r=null==t?void 0:t())?r:yield n())}catch(e){}}))))})))),h})),stopAutoLoad:()=>(s&&(r(u),u=void 0,s=0),h),save:n=>ee(void 0,null,(function*(){return 1!=a&&(a=2,yield h.schedule((()=>ee(void 0,null,(function*(){try{yield t(e.getContent,n)}catch(e){}a=0}))))),h})),startAutoSave:()=>ee(void 0,null,(function*(){return yield h.stopAutoSave().save(),o=e.addDidFinishTransactionListener(((e,n)=>{const[t,l]=n();C(t)&&C(l)||h.save((()=>[t,l]))})),h})),stopAutoSave:()=>(p(o,e.delListener),h),schedule:(...e)=>ee(void 0,null,(function*(){return c(v,...e),yield ee(void 0,null,(function*(){if(!d){for(d=1;!f((e=v,i=e.shift()));)try{yield i()}catch(e){}d=0}var e})),h})),getStore:()=>e,destroy:()=>h.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return A(h)};var te=(e,n,t)=>new Promise(((l,r)=>{var o=e=>{try{u(t.next(e))}catch(e){r(e)}},i=e=>{try{u(t.throw(e))}catch(e){r(e)}},u=e=>e.done?l(e.value):Promise.resolve(e.value).then(o,i);u((t=t.apply(e,n)).next())}));const le="store",re=(e,n,t,l,[r],o)=>{const[i,u,a]=Q(n,o),d=ne(e,(()=>te(void 0,null,(function*(){var e;return yield i(),Z((null!=(e=yield u(r,F))?e:{})[le])}))),(e=>te(void 0,null,(function*(){return d.schedule(i,(()=>te(void 0,null,(function*(){var n;yield a(r,F,"_",{[le]:(n=e(),JSON.stringify(n,((e,n)=>y(n,Map)?T.fromEntries([...n]):n)))})}))))}))),t,l);return d};var oe=(e,n,t)=>new Promise(((l,r)=>{var o=e=>{try{u(t.next(e))}catch(e){r(e)}},i=e=>{try{u(t.throw(e))}catch(e){r(e)}},u=e=>e.done?l(e.value):Promise.resolve(e.value).then(o,i);u((t=t.apply(e,n)).next())}));const ie=(e,n,t,l,[r,o,[i,u,a]],s)=>{const[c,v,y,p,h]=Q(n,s);return ne(e,(()=>oe(void 0,null,(function*(){yield c();const e=yield oe(void 0,null,(function*(){return w(d(yield m(D(r,((e,n)=>oe(void 0,[e,n],(function*([e,n],t){return[e,yield p(t,n)]}))))),(e=>!C(e[1]))))})),n=yield oe(void 0,null,(function*(){return i?yield v(a,F):{}}));return C(e)&&f(n)?void 0:[e,n]}))),(e=>oe(void 0,null,(function*(){const[n,t]=e();yield c(),yield(e=>oe(void 0,null,(function*(){return yield m(D(o,((n,t)=>oe(void 0,[n,t],(function*([n,t,l,r],o){return yield h(n,t,l,r,e[o])})))))})))(n),yield(e=>oe(void 0,null,(function*(){return u?yield y(a,F,"_",e):null})))(t)}))),t,l)},ue="json",ae="autoLoadIntervalSeconds",de="rowIdColumnName",se="tableId",ce="tableName",ve={mode:ue,[ae]:1},ye={load:0,save:0,[ce]:t+"_values"},fe=(e,n,t,l)=>{const r=R();return g(e,((e,o)=>{const i=s(N(L(n,h(e)?{[t]:e}:e)),0,x(n));f(i[0])||l(o,i[0])||$(r,o,i)})),r},pe="pragma ",he="data_version",me="schema_version",Ee=(e,n,l,r,o)=>{let i,u;const[a,d,c,v]=(e=>{const n=(e=>L(ve,h(e)?{storeTableName:e}:null!=e?e:{}))(e),l=n[ae];if(n.mode==ue){const{storeTableName:e=t}=n;return[1,l,[e],B(e)]}const{tables:{load:r={},save:o={}}={},values:i={}}=n,u=s(N(L(ye,i)),0,x(ye)),a=u[2],d=B(a);return[0,l,[fe(r,{[se]:null,[de]:F},se,(e=>k(d,e)&&e==a)),fe(o,{[ce]:null,[de]:F,deleteEmptyColumns:0,deleteEmptyTable:0},ce,((e,n)=>k(d,n)&&n==a)),u],d]})(n);return(a?re:ie)(e,l,(e=>[setInterval((()=>{return n=function*(){try{const n=(yield l(pe+he))[0][he],t=(yield l(pe+me))[0][me];n==(null!=i?i:i=n)&&t==(null!=u?u:u=t)||(e(),i=n,u=t)}catch(e){}},new Promise(((e,t)=>{var l=e=>{try{o(n.next(e))}catch(e){t(e)}},r=e=>{try{o(n.throw(e))}catch(e){t(e)}},o=n=>n.done?e(n.value):Promise.resolve(n.value).then(l,r);o((n=n.apply(void 0,null)).next())}));var n}),1e3*d),r((n=>v.has(n)?e():0))]),(([e,n])=>{clearInterval(e),i=u=null,o(n)}),c,b(v))};var be=Object.defineProperty,Oe=Object.getOwnPropertySymbols,Te=Object.prototype.hasOwnProperty,Pe=Object.prototype.propertyIsEnumerable,Ae=(e,n,t)=>n in e?be(e,n,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[n]=t;const we="change";e.createSqlite3Persister=(e,n,t)=>Ee(e,t,((e,t=[])=>new v(((l,r)=>n.all(e,t,((e,n)=>e?r(e):l(n.map((e=>((e,n)=>{for(var t in n||(n={}))Te.call(n,t)&&Ae(e,t,n[t]);if(Oe)for(var t of Oe(n))Pe.call(n,t)&&Ae(e,t,n[t]);return e})({},e))))))))),(e=>{const t=(n,t,l)=>e(l);return n.on(we,t),t}),(e=>n.off(we,e)))},"object"==typeof exports&&"undefined"!=typeof module?n(exports):"function"==typeof define&&define.amd?define(["exports"],n):n((e="undefined"!=typeof globalThis?globalThis:e||self).TinyBasePersisterSqlite3={});
1
+ var e,n;e=this,n=function(e){"use strict";const n=e=>typeof e,t="tinybase",l=",",o=n(""),r=(e,n)=>e.repeat(n),i=(e,n="")=>e.join(n),u=(e,n)=>e.map(n),a=e=>e.length,d=e=>0==a(e),s=(e,n)=>e.filter(n),c=(e,n,t)=>e.slice(n,t),v=(e,...n)=>e.push(...n),y=Promise,f=(e,n)=>e instanceof n,p=e=>null==e,h=(e,n,t)=>p(e)?null==t?void 0:t():n(e),E=e=>n(e)==o,m=e=>{return n=function*(){return y.all(e)},new Promise(((e,t)=>{var l=e=>{try{r(n.next(e))}catch(e){t(e)}},o=e=>{try{r(n.throw(e))}catch(e){t(e)}},r=n=>n.done?e(n.value):Promise.resolve(n.value).then(l,o);r((n=n.apply(void 0,null)).next())}));var n},b=(e,n)=>{var t;return null!=(t=null==e?void 0:e.has(n))&&t},O=e=>{var n;return[...null!=(n=null==e?void 0:e.values())?n:[]]},T=(e,n)=>null==e?void 0:e.delete(n),P=Object,A=P.keys,L=P.freeze,w=(e=[])=>P.fromEntries(e),S=(...e)=>P.assign({},...e),g=(e,n)=>u(P.entries(e),(([e,t])=>n(t,e))),R=e=>P.values(e),N=e=>a(A(e)),x=e=>(e=>f(e,P)&&e.constructor==P)(e)&&0==N(e),C=e=>new Map(e),I=e=>{var n;return[...null!=(n=null==e?void 0:e.keys())?n:[]]},D=(e,n)=>null==e?void 0:e.get(n),j=(e,n)=>{var t;return u([...null!=(t=null==e?void 0:e.entries())?t:[]],(([e,t])=>n(t,e)))},F=(e,n,t)=>p(t)?(T(e,n),e):null==e?void 0:e.set(n,t),M=(e,n,t,l=F)=>(g(n,((n,l)=>t(e,l,n))),((e,n)=>{((e,n)=>{null==e||e.forEach(n)})(e,((e,t)=>n(t)))})(e,(t=>((e,n)=>!p(((e,n)=>h(e,(e=>e[n])))(e,n)))(n,t)?0:l(e,t))),e),$=e=>new Set(Array.isArray(e)||p(e)?e:[e]),_=(e,n)=>null==e?void 0:e.add(n),B="_",H="_id",W=e=>`"${e.replace(/"/g,'""')}"`;var k=Object.defineProperty,q=Object.getOwnPropertySymbols,J=Object.prototype.hasOwnProperty,U=Object.prototype.propertyIsEnumerable,Y=(e,n,t)=>n in e?k(e,n,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[n]=t,z=(e,n)=>{for(var t in n||(n={}))J.call(n,t)&&Y(e,t,n[t]);if(q)for(var t of q(n))U.call(n,t)&&Y(e,t,n[t]);return e},K=(e,n,t)=>new Promise(((l,o)=>{var r=e=>{try{u(t.next(e))}catch(e){o(e)}},i=e=>{try{u(t.throw(e))}catch(e){o(e)}},u=e=>e.done?l(e.value):Promise.resolve(e.value).then(r,i);u((t=t.apply(e,n)).next())}));const V="FROM pragma_table_",G="WHERE",Q=(e,n)=>{const t=C();return[()=>K(void 0,null,(function*(){return M(t,w(yield m(u(yield e("SELECT name "+V+"list WHERE schema='main'AND type='table'AND name IN("+Z(n)+")",n),(n=>K(void 0,[n],(function*({name:n}){return[n,w(u(yield e("SELECT name,type "+V+"info(?)",[n]),(({name:e,type:n})=>[e,n])))]})))))),((e,n,l)=>{return F(t,n,M((i=C,b(o=t,r=n)||F(o,r,i()),D(o,r)),l,((e,n,t)=>{t!=D(e,n)&&F(e,n,t)}),((e,n)=>F(e,n))));var o,r,i}),((e,n)=>F(t,n)))})),(n,l)=>K(void 0,null,(function*(){return((e,n)=>!p(D(D(t,e),n)))(n,l)?w(s(u(yield e("SELECT*FROM"+W(n)),(e=>{return[e[l],(n=z({},e),t=l,delete n[t],n)];var n,t})),(([e,n])=>!p(e)&&!x(n)))):{}})),(n,o,r,a,c,y=!1)=>K(void 0,null,(function*(){const f=$();g(null!=r?r:{},(e=>u(A(null!=e?e:{}),(e=>_(f,e)))));const h=O(f);if(!y&&c&&d(h)&&b(t,n))return yield e("DROP TABLE"+W(n)),void F(t,n);if(d(h)||b(t,n)){const l=D(t,n),r=$(I(l));yield m([...u(h,(t=>K(void 0,null,(function*(){T(r,t)||(yield e(`ALTER TABLE${W(n)}ADD${W(t)}`),F(l,t,""))})))),...!y&&a?u(O(r),(t=>K(void 0,null,(function*(){t!=o&&(yield e(`ALTER TABLE${W(n)}DROP${W(t)}`),F(l,t))})))):[]])}else yield e(`CREATE TABLE${W(n)}(${W(o)} PRIMARY KEY ON CONFLICT REPLACE${i(u(h,(e=>l+W(e))))});`),F(t,n,C([[o,""],...u(h,(e=>[e,""]))]));if(y)p(r)?yield e("DELETE FROM"+W(n)+"WHERE 1"):yield m(g(r,((t,l)=>K(void 0,null,(function*(){p(t)?yield e("DELETE FROM"+W(n)+G+W(o)+"=?",[l]):d(h)||(yield X(e,n,o,A(t),[l,...R(t)]))})))));else if(d(h))b(t,n)&&(yield e("DELETE FROM"+W(n)+"WHERE 1"));else{const l=s(I(D(t,n)),(e=>e!=o)),i=[],a=[];g(null!=r?r:{},((e,n)=>{v(i,n,...u(l,(n=>null==e?void 0:e[n]))),v(a,n)})),yield X(e,n,o,l,i),yield e("DELETE FROM"+W(n)+G+W(o)+"NOT IN("+Z(a)+")",a)}}))]},X=(e,n,t,o,d)=>K(void 0,null,(function*(){return yield e("INSERT INTO"+W(n)+"("+W(t)+i(u(o,(e=>l+W(e))))+")VALUES"+r(`,(?${r(",?",a(o))})`,a(d)/(a(o)+1)).substring(1)+"ON CONFLICT("+W(t)+")DO UPDATE SET"+i(u(o,(e=>W(e)+"=excluded."+W(e))),l),d)})),Z=e=>i(u(e,(()=>"?")),l),ee=JSON.parse;var ne=(e,n,t)=>new Promise(((l,o)=>{var r=e=>{try{u(t.next(e))}catch(e){o(e)}},i=e=>{try{u(t.throw(e))}catch(e){o(e)}},u=e=>e.done?l(e.value):Promise.resolve(e.value).then(r,i);u((t=t.apply(e,n)).next())}));const te=(e,n,t,l,o)=>{let r,i,u,a=0,d=0,s=0;const c=[],y=e=>ne(void 0,null,(function*(){return 2!=a&&(a=1,yield f.schedule((()=>ne(void 0,null,(function*(){yield e(),a=0}))))),f})),f={load:(t,l)=>ne(void 0,null,(function*(){return yield y((()=>ne(void 0,null,(function*(){try{e.setContent(yield n())}catch(n){e.setContent([t,l])}}))))})),startAutoLoad:(...t)=>ne(void 0,[...t],(function*(t={},o={}){return f.stopAutoLoad(),yield f.load(t,o),s=1,u=l(((t,l)=>ne(void 0,null,(function*(){return yield y((()=>ne(void 0,null,(function*(){var o;if(l)e.setTransactionChanges(l());else try{e.setContent(null!=(o=null==t?void 0:t())?o:yield n())}catch(e){}}))))})))),f})),stopAutoLoad:()=>(s&&(o(u),u=void 0,s=0),f),save:n=>ne(void 0,null,(function*(){return 1!=a&&(a=2,yield f.schedule((()=>ne(void 0,null,(function*(){try{yield t(e.getContent,n)}catch(e){}a=0}))))),f})),startAutoSave:()=>ne(void 0,null,(function*(){return yield f.stopAutoSave().save(),r=e.addDidFinishTransactionListener(((e,n)=>{const[t,l]=n();x(t)&&x(l)||f.save((()=>[t,l]))})),f})),stopAutoSave:()=>(h(r,e.delListener),f),schedule:(...e)=>ne(void 0,null,(function*(){return v(c,...e),yield ne(void 0,null,(function*(){if(!d){for(d=1;!p((e=c,i=e.shift()));)try{yield i()}catch(e){}d=0}var e})),f})),getStore:()=>e,destroy:()=>f.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return L(f)};var le=(e,n,t)=>new Promise(((l,o)=>{var r=e=>{try{u(t.next(e))}catch(e){o(e)}},i=e=>{try{u(t.throw(e))}catch(e){o(e)}},u=e=>e.done?l(e.value):Promise.resolve(e.value).then(r,i);u((t=t.apply(e,n)).next())}));const oe="store",re=(e,n,t,l,[o],r)=>{const[i,u,a]=Q(n,r),d=te(e,(()=>le(void 0,null,(function*(){var e;return yield i(),ee(null==(e=(yield u(o,H))[B])?void 0:e[oe])}))),(e=>le(void 0,null,(function*(){return d.schedule(i,(()=>le(void 0,null,(function*(){var n;yield a(o,H,{[B]:{[oe]:(n=e(),JSON.stringify(n,((e,n)=>f(n,Map)?P.fromEntries([...n]):n)))}},!0,!0)}))))}))),t,l);return d};var ie=(e,n,t)=>new Promise(((l,o)=>{var r=e=>{try{u(t.next(e))}catch(e){o(e)}},i=e=>{try{u(t.throw(e))}catch(e){o(e)}},u=e=>e.done?l(e.value):Promise.resolve(e.value).then(r,i);u((t=t.apply(e,n)).next())}));const ue=(e,n,t,l,[o,r,[i,u,a]],d)=>{const[c,v,y]=Q(n,d),f=(e,n)=>ie(void 0,null,(function*(){return yield m(j(r,((t,l)=>ie(void 0,[t,l],(function*([t,l,o,r],i){const u=e[i];n&&void 0===u||(yield y(t,l,u,o,r,n))})))))})),h=(e,n)=>ie(void 0,null,(function*(){return u?yield y(a,H,{[B]:e},!0,!0,n):null}));return te(e,(()=>ie(void 0,null,(function*(){yield c();const e=yield ie(void 0,null,(function*(){return w(s(yield m(j(o,((e,n)=>ie(void 0,[e,n],(function*([e,n],t){return[e,yield v(t,n)]}))))),(e=>!x(e[1]))))})),n=yield ie(void 0,null,(function*(){return i?(yield v(a,H))[B]:{}}));return x(e)&&p(n)?void 0:[e,n]}))),((e,n)=>ie(void 0,null,(function*(){if(yield c(),p(n)){const[n,t]=e();yield f(n),yield h(t)}else{const[e,t]=n();yield f(e,!0),yield h(t,!0)}}))),t,l)},ae="json",de="autoLoadIntervalSeconds",se="rowIdColumnName",ce="tableId",ve="tableName",ye={mode:ae,[de]:1},fe={load:0,save:0,[ve]:t+"_values"},pe=(e,n,t,l)=>{const o=C();return g(e,((e,r)=>{const i=c(R(S(n,E(e)?{[t]:e}:e)),0,N(n));p(i[0])||l(r,i[0])||F(o,r,i)})),o};var he=(e,n,t)=>new Promise(((l,o)=>{var r=e=>{try{u(t.next(e))}catch(e){o(e)}},i=e=>{try{u(t.throw(e))}catch(e){o(e)}},u=e=>e.done?l(e.value):Promise.resolve(e.value).then(r,i);u((t=t.apply(e,n)).next())}));const Ee="pragma ",me="data_version",be="schema_version",Oe=(e,n,l,o,r,i)=>{let u,a;const[d,s,v,y]=(e=>{const n=(e=>S(ye,E(e)?{storeTableName:e}:null!=e?e:{}))(e),l=n[de];if(n.mode==ae){const{storeTableName:e=t}=n;return[1,l,[e],$(e)]}const{tables:{load:o={},save:r={}}={},values:i={}}=n,u=c(R(S(fe,i)),0,N(fe)),a=u[2],d=$(a);return[0,l,[pe(o,{[ce]:null,[se]:H},ce,(e=>_(d,e)&&e==a)),pe(r,{[ve]:null,[se]:H,deleteEmptyColumns:0,deleteEmptyTable:0},ve,((e,n)=>_(d,n)&&n==a)),u],d]})(n);return(d?re:ue)(e,i?(e,n)=>he(void 0,null,(function*(){return i(e,n),yield l(e,n)})):l,(e=>[setInterval((()=>he(void 0,null,(function*(){try{const n=(yield l(Ee+me))[0][me],t=(yield l(Ee+be))[0][be];n==(null!=u?u:u=n)&&t==(null!=a?a:a=t)||(e(),u=n,a=t)}catch(e){}}))),1e3*s),o((n=>y.has(n)?e():0))]),(([e,n])=>{clearInterval(e),u=a=null,r(n)}),v,O(y))};var Te=Object.defineProperty,Pe=Object.getOwnPropertySymbols,Ae=Object.prototype.hasOwnProperty,Le=Object.prototype.propertyIsEnumerable,we=(e,n,t)=>n in e?Te(e,n,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[n]=t;const Se="change";e.createSqlite3Persister=(e,n,t,l)=>Oe(e,t,((e,t=[])=>new y(((l,o)=>n.all(e,t,((e,n)=>e?o(e):l(n.map((e=>((e,n)=>{for(var t in n||(n={}))Ae.call(n,t)&&we(e,t,n[t]);if(Pe)for(var t of Pe(n))Le.call(n,t)&&we(e,t,n[t]);return e})({},e))))))))),(e=>{const t=(n,t,l)=>e(l);return n.on(Se,t),t}),(e=>n.off(Se,e)),l)},"object"==typeof exports&&"undefined"!=typeof module?n(exports):"function"==typeof define&&define.amd?define(["exports"],n):n((e="undefined"!=typeof globalThis?globalThis:e||self).TinyBasePersisterSqlite3={});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tinybase",
3
- "version": "4.0.1",
3
+ "version": "4.0.2",
4
4
  "author": "jamesgpearce",
5
5
  "repository": "github:tinyplex/tinybase",
6
6
  "license": "MIT",
@@ -211,43 +211,43 @@
211
211
  },
212
212
  "devDependencies": {
213
213
  "@automerge/automerge": "^2.1.0-alpha.6",
214
- "@babel/cli": "^7.22.9",
215
- "@babel/core": "^7.22.9",
216
- "@babel/preset-env": "^7.22.9",
214
+ "@babel/cli": "^7.22.10",
215
+ "@babel/core": "^7.22.10",
216
+ "@babel/preset-env": "^7.22.10",
217
217
  "@babel/preset-react": "^7.22.5",
218
218
  "@babel/preset-typescript": "^7.22.5",
219
219
  "@rollup/plugin-replace": "^5.0.2",
220
220
  "@rollup/plugin-terser": "^0.4.3",
221
- "@sqlite.org/sqlite-wasm": "^3.42.0-build4",
221
+ "@sqlite.org/sqlite-wasm": "^3.42.0-build7",
222
222
  "@types/asciichart": "^1.5.6",
223
223
  "@types/expect-puppeteer": "^5.0.3",
224
224
  "@types/http-server": "^0.12.1",
225
225
  "@types/jest": "^29.5.3",
226
226
  "@types/jest-environment-puppeteer": "^5.0.3",
227
227
  "@types/less": "^3.0.3",
228
- "@types/node": "^20.4.5",
228
+ "@types/node": "^20.4.9",
229
229
  "@types/puppeteer": "^5.4.7",
230
- "@types/react": "^18.2.17",
230
+ "@types/react": "^18.2.20",
231
231
  "@types/react-dom": "^18.2.7",
232
232
  "@types/react-test-renderer": "^18.0.0",
233
233
  "@types/tmp": "^0.2.3",
234
- "@typescript-eslint/eslint-plugin": "^6.2.0",
235
- "@typescript-eslint/parser": "^6.2.0",
234
+ "@typescript-eslint/eslint-plugin": "^6.3.0",
235
+ "@typescript-eslint/parser": "^6.3.0",
236
236
  "@vlcn.io/crsqlite-wasm": "^0.14.0",
237
237
  "asciichart": "^1.5.25",
238
238
  "automerge-repo": "^0.1.0",
239
239
  "babel-eslint": "^10.1.0",
240
240
  "babel-jest": "^29.6.2",
241
- "babel-plugin-transform-import-meta": "^2.2.0",
241
+ "babel-plugin-transform-import-meta": "^2.2.1",
242
242
  "babel-preset-minify": "^0.5.2",
243
243
  "buffer-replace": "^1.0.0",
244
244
  "country-flag-emoji-json": "^2.0.0",
245
- "cspell": "^6.31.2",
246
- "esbuild": "^0.18.17",
247
- "eslint": "^8.45.0",
248
- "eslint-config-prettier": "^8.9.0",
245
+ "cspell": "^7.0.0",
246
+ "esbuild": "^0.19.0",
247
+ "eslint": "^8.46.0",
248
+ "eslint-config-prettier": "^9.0.0",
249
249
  "eslint-plugin-jest": "^27.2.3",
250
- "eslint-plugin-jsdoc": "^46.4.5",
250
+ "eslint-plugin-jsdoc": "^46.4.6",
251
251
  "eslint-plugin-react": "7.32.2",
252
252
  "eslint-plugin-react-hooks": "^4.6.0",
253
253
  "fake-indexeddb": "^4.0.2",
@@ -258,13 +258,13 @@
258
258
  "jest-environment-jsdom": "^29.6.2",
259
259
  "jest-fetch-mock": "^3.0.3",
260
260
  "jest-puppeteer": "^9.0.0",
261
- "less": "^4.1.3",
261
+ "less": "^4.2.0",
262
262
  "prettier": "^2.8.8",
263
- "puppeteer": "^20.9.0",
263
+ "puppeteer": "^21.0.2",
264
264
  "react": "^18.2.0",
265
265
  "react-dom": "^18.2.0",
266
266
  "react-test-renderer": "^18.2.0",
267
- "rollup": "^3.26.3",
267
+ "rollup": "^3.28.0",
268
268
  "rollup-plugin-esbuild": "^5.0.0",
269
269
  "rollup-plugin-gzip": "^3.1.0",
270
270
  "rollup-plugin-preserve-shebang": "^1.0.1",
@@ -273,7 +273,7 @@
273
273
  "tinybase": "file:./",
274
274
  "tinydocs": "^0.1.29",
275
275
  "tmp": "^0.2.1",
276
- "ts-unused-exports": "^9.0.5",
276
+ "ts-unused-exports": "^10.0.0",
277
277
  "typescript": "5.1.6",
278
278
  "yjs": "^13.6.7"
279
279
  },
package/readme.md CHANGED
@@ -266,4 +266,4 @@ export const createShop: typeof createShopDecl = () => {
266
266
  };
267
267
  ```
268
268
 
269
- <section><h2 id="did-we-say-tiny">Did we say tiny?</h2><p>If you use the basic <a href="https://tinybase.org/api/store/"><code>store</code></a> module alone, you&#x27;ll only add a gzipped <em>4.7kB</em> to your app. Incrementally add the other modules as you need more functionality, or get it all for <em>8.9kB</em>.</p><p>The optional <a href="https://tinybase.org/api/ui-react/"><code>ui-react</code></a> module is just another <em>3.4kB</em>, the auxiliary <a href="https://tinybase.org/api/tools/"><code>tools</code></a> module is <em>10.2kB</em>, and everything is super fast. Life&#x27;s easy when you have zero dependencies!</p><p>Read more about how TinyBase is structured and packaged in the <a href="https://tinybase.org/guides/how-tinybase-is-built/architecture/">Architecture</a> guide.</p></section><div class="table"><table class="fixed"><tbody><tr><th width="30%"> </th><th>.js.gz</th><th>.js</th><th>debug.js</th><th>.d.ts</th></tr><tr><th class="right"><a href="https://tinybase.org/api/store/">store</a></th><td>4.7kB</td><td>11.1kB</td><td>47.6kB</td><td>212.9kB</td></tr><tr><th class="right"><a href="https://tinybase.org/api/metrics/">metrics</a></th><td>1.8kB</td><td>3.6kB</td><td>14.9kB</td><td>29.2kB</td></tr><tr><th class="right"><a href="https://tinybase.org/api/indexes/">indexes</a></th><td>1.9kB</td><td>3.7kB</td><td>16.7kB</td><td>33.8kB</td></tr><tr><th class="right"><a href="https://tinybase.org/api/relationships/">relationships</a></th><td>1.8kB</td><td>3.7kB</td><td>16.8kB</td><td>42.1kB</td></tr><tr><th class="right"><a href="https://tinybase.org/api/queries/">queries</a></th><td>2.7kB</td><td>5.5kB</td><td>25.0kB</td><td>112.7kB</td></tr><tr><th class="right"><a href="https://tinybase.org/api/checkpoints/">checkpoints</a></th><td>1.5kB</td><td>3.1kB</td><td>12.5kB</td><td>33.3kB</td></tr><tr><th class="right"><a href="https://tinybase.org/api/persisters/">persisters</a></th><td>0.6kB</td><td>1.2kB</td><td>3.9kB</td><td>41.9kB</td></tr><tr><th class="right"><a href="https://tinybase.org/api/common/">common</a></th><td>0.1kB</td><td>0.1kB</td><td>0.1kB</td><td>3.5kB</td></tr><tr><th class="right">tinybase (all)</th><td>8.9kB</td><td>21.9kB</td><td>94.8kB</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 for you to get your TinyBase-powered app up and running.</p><p>Read more about how TinyBase is tested in the Unit <a href="https://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,815</td><td>1,815</td><td>100.0%</td></tr><tr><th class="right">Statements</th><td>1,957</td><td>1,957</td><td>100.0%</td></tr><tr><th class="right">Functions</th><td>776</td><td>776</td><td>100.0%</td></tr><tr><th class="right">Branches</th><td>669</td><td>669</td><td>100.0%</td></tr><tr><th class="right">Tests</th><td colspan="3">3,093</td></tr><tr><th class="right">Assertions</th><td colspan="3">14,355</td></tr></tbody></table></div><hr><p><a class="start" href="https://tinybase.org/guides/the-basics/getting-started/">Get started</a></p><p><a href="https://tinybase.org/demos/">Try the demos</a></p><p><a href="https://tinybase.org/api/store/interfaces/store/store/">Read the docs</a></p><hr><section><h2 id="follow">Follow</h2><ul><li>News and updates on <a href="https://twitter.com/tinybasejs">Twitter</a>, <a href="https://discord.com/invite/mGz3mevwP8">Discord</a>, and <a href="https://facebook.com/tinybasejs">Facebook</a>.</li><li><a href="https://github.com/tinyplex/tinybase/discussions">Discussions</a> and <a href="https://github.com/tinyplex/tinybase/issues">issues</a> on <a href="https://github.com/tinyplex/tinybase">GitHub</a>.</li><li><a href="https://tinybase.org/guides/releases/">Release notes</a> for each version.</li><li>Packages on <a href="https://www.npmjs.com/package/tinybase/v/4.0.1">NPM</a>.</li></ul></section><section><h2 id="about">About</h2><p>Building TinyBase was originally an interesting exercise for <a rel="me" href="https://hachyderm.io/@jamesgpearce">me</a> in API design, minification, and documentation. It could not have been built without these great <a href="https://tinybase.org/guides/how-tinybase-is-built/credits/#giants">projects</a> and <a href="https://tinybase.org/guides/how-tinybase-is-built/credits/#and-friends">friends</a>, and I hope you enjoy using it!</p></section>
269
+ <section><h2 id="did-we-say-tiny">Did we say tiny?</h2><p>If you use the basic <a href="https://tinybase.org/api/store/"><code>store</code></a> module alone, you&#x27;ll only add a gzipped <em>4.7kB</em> to your app. Incrementally add the other modules as you need more functionality, or get it all for <em>8.9kB</em>.</p><p>The optional <a href="https://tinybase.org/api/ui-react/"><code>ui-react</code></a> module is just another <em>3.4kB</em>, the auxiliary <a href="https://tinybase.org/api/tools/"><code>tools</code></a> module is <em>10.2kB</em>, and everything is super fast. Life&#x27;s easy when you have zero dependencies!</p><p>Read more about how TinyBase is structured and packaged in the <a href="https://tinybase.org/guides/how-tinybase-is-built/architecture/">Architecture</a> guide.</p></section><div class="table"><table class="fixed"><tbody><tr><th width="30%"> </th><th>.js.gz</th><th>.js</th><th>debug.js</th><th>.d.ts</th></tr><tr><th class="right"><a href="https://tinybase.org/api/store/">store</a></th><td>4.7kB</td><td>11.1kB</td><td>47.6kB</td><td>212.9kB</td></tr><tr><th class="right"><a href="https://tinybase.org/api/metrics/">metrics</a></th><td>1.8kB</td><td>3.6kB</td><td>14.9kB</td><td>29.2kB</td></tr><tr><th class="right"><a href="https://tinybase.org/api/indexes/">indexes</a></th><td>1.9kB</td><td>3.7kB</td><td>16.7kB</td><td>33.8kB</td></tr><tr><th class="right"><a href="https://tinybase.org/api/relationships/">relationships</a></th><td>1.8kB</td><td>3.7kB</td><td>16.8kB</td><td>42.1kB</td></tr><tr><th class="right"><a href="https://tinybase.org/api/queries/">queries</a></th><td>2.7kB</td><td>5.5kB</td><td>25.0kB</td><td>112.7kB</td></tr><tr><th class="right"><a href="https://tinybase.org/api/checkpoints/">checkpoints</a></th><td>1.5kB</td><td>3.1kB</td><td>12.5kB</td><td>33.3kB</td></tr><tr><th class="right"><a href="https://tinybase.org/api/persisters/">persisters</a></th><td>0.6kB</td><td>1.2kB</td><td>3.9kB</td><td>42.4kB</td></tr><tr><th class="right"><a href="https://tinybase.org/api/common/">common</a></th><td>0.1kB</td><td>0.1kB</td><td>0.1kB</td><td>3.5kB</td></tr><tr><th class="right">tinybase (all)</th><td>8.9kB</td><td>21.9kB</td><td>94.8kB</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 for you to get your TinyBase-powered app up and running.</p><p>Read more about how TinyBase is tested in the Unit <a href="https://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,815</td><td>1,815</td><td>100.0%</td></tr><tr><th class="right">Statements</th><td>1,957</td><td>1,957</td><td>100.0%</td></tr><tr><th class="right">Functions</th><td>776</td><td>776</td><td>100.0%</td></tr><tr><th class="right">Branches</th><td>669</td><td>669</td><td>100.0%</td></tr><tr><th class="right">Tests</th><td colspan="3">3,138</td></tr><tr><th class="right">Assertions</th><td colspan="3">14,445</td></tr></tbody></table></div><hr><p><a class="start" href="https://tinybase.org/guides/the-basics/getting-started/">Get started</a></p><p><a href="https://tinybase.org/demos/">Try the demos</a></p><p><a href="https://tinybase.org/api/store/interfaces/store/store/">Read the docs</a></p><hr><section><h2 id="follow">Follow</h2><ul><li>News and updates on <a href="https://twitter.com/tinybasejs">Twitter</a>, <a href="https://discord.com/invite/mGz3mevwP8">Discord</a>, and <a href="https://facebook.com/tinybasejs">Facebook</a>.</li><li><a href="https://github.com/tinyplex/tinybase/discussions">Discussions</a> and <a href="https://github.com/tinyplex/tinybase/issues">issues</a> on <a href="https://github.com/tinyplex/tinybase">GitHub</a>.</li><li><a href="https://tinybase.org/guides/releases/">Release notes</a> for each version.</li><li>Packages on <a href="https://www.npmjs.com/package/tinybase/v/4.0.2">NPM</a>.</li></ul></section><section><h2 id="about">About</h2><p>Building TinyBase was originally an interesting exercise for <a rel="me" href="https://hachyderm.io/@jamesgpearce">me</a> in API design, minification, and documentation. It could not have been built without these great <a href="https://tinybase.org/guides/how-tinybase-is-built/credits/#giants">projects</a> and <a href="https://tinybase.org/guides/how-tinybase-is-built/credits/#and-friends">friends</a>, and I hope you enjoy using it!</p></section>