tinybase 4.0.1 → 4.0.3

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 (58) 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-expo-sqlite.cjs +1 -0
  4. package/lib/cjs/persisters/persister-expo-sqlite.cjs.gz +0 -0
  5. package/lib/cjs/persisters/persister-sqlite-wasm.cjs +1 -1
  6. package/lib/cjs/persisters/persister-sqlite-wasm.cjs.gz +0 -0
  7. package/lib/cjs/persisters/persister-sqlite3.cjs +1 -1
  8. package/lib/cjs/persisters/persister-sqlite3.cjs.gz +0 -0
  9. package/lib/cjs-es6/persisters/persister-cr-sqlite-wasm.cjs +1 -1
  10. package/lib/cjs-es6/persisters/persister-cr-sqlite-wasm.cjs.gz +0 -0
  11. package/lib/cjs-es6/persisters/persister-expo-sqlite.cjs +1 -0
  12. package/lib/cjs-es6/persisters/persister-expo-sqlite.cjs.gz +0 -0
  13. package/lib/cjs-es6/persisters/persister-sqlite-wasm.cjs +1 -1
  14. package/lib/cjs-es6/persisters/persister-sqlite-wasm.cjs.gz +0 -0
  15. package/lib/cjs-es6/persisters/persister-sqlite3.cjs +1 -1
  16. package/lib/cjs-es6/persisters/persister-sqlite3.cjs.gz +0 -0
  17. package/lib/debug/persisters/persister-cr-sqlite-wasm.js +177 -117
  18. package/lib/debug/persisters/persister-expo-sqlite.js +764 -0
  19. package/lib/debug/persisters/persister-sqlite-wasm.js +172 -116
  20. package/lib/debug/persisters/persister-sqlite3.js +174 -119
  21. package/lib/es6/persisters/persister-cr-sqlite-wasm.js +1 -1
  22. package/lib/es6/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  23. package/lib/es6/persisters/persister-expo-sqlite.js +1 -0
  24. package/lib/es6/persisters/persister-expo-sqlite.js.gz +0 -0
  25. package/lib/es6/persisters/persister-sqlite-wasm.js +1 -1
  26. package/lib/es6/persisters/persister-sqlite-wasm.js.gz +0 -0
  27. package/lib/es6/persisters/persister-sqlite3.js +1 -1
  28. package/lib/es6/persisters/persister-sqlite3.js.gz +0 -0
  29. package/lib/persisters/persister-cr-sqlite-wasm.js +1 -1
  30. package/lib/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  31. package/lib/persisters/persister-expo-sqlite.js +1 -0
  32. package/lib/persisters/persister-expo-sqlite.js.gz +0 -0
  33. package/lib/persisters/persister-sqlite-wasm.js +1 -1
  34. package/lib/persisters/persister-sqlite-wasm.js.gz +0 -0
  35. package/lib/persisters/persister-sqlite3.js +1 -1
  36. package/lib/persisters/persister-sqlite3.js.gz +0 -0
  37. package/lib/types/persisters/persister-expo-sqlite.d.ts +118 -0
  38. package/lib/types/persisters.d.ts +7 -0
  39. package/lib/types/with-schemas/persisters/persister-expo-sqlite.d.ts +128 -0
  40. package/lib/types/with-schemas/persisters.d.ts +7 -0
  41. package/lib/umd/persisters/persister-cr-sqlite-wasm.js +1 -1
  42. package/lib/umd/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  43. package/lib/umd/persisters/persister-expo-sqlite.js +1 -0
  44. package/lib/umd/persisters/persister-expo-sqlite.js.gz +0 -0
  45. package/lib/umd/persisters/persister-sqlite-wasm.js +1 -1
  46. package/lib/umd/persisters/persister-sqlite-wasm.js.gz +0 -0
  47. package/lib/umd/persisters/persister-sqlite3.js +1 -1
  48. package/lib/umd/persisters/persister-sqlite3.js.gz +0 -0
  49. package/lib/umd-es6/persisters/persister-cr-sqlite-wasm.js +1 -1
  50. package/lib/umd-es6/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  51. package/lib/umd-es6/persisters/persister-expo-sqlite.js +1 -0
  52. package/lib/umd-es6/persisters/persister-expo-sqlite.js.gz +0 -0
  53. package/lib/umd-es6/persisters/persister-sqlite-wasm.js +1 -1
  54. package/lib/umd-es6/persisters/persister-sqlite-wasm.js.gz +0 -0
  55. package/lib/umd-es6/persisters/persister-sqlite3.js +1 -1
  56. package/lib/umd-es6/persisters/persister-sqlite3.js.gz +0 -0
  57. package/package.json +20 -19
  58. package/readme.md +1 -1
@@ -1 +1 @@
1
- const e=e=>typeof e,n="tinybase",t=",",l=e(""),r=(e,n="")=>e.join(n),o=(e,n)=>e.map(n),i=e=>e.length,u=e=>0==i(e),a=(e,n)=>e.filter(n),d=(e,n,t)=>e.slice(n,t),c=(e,...n)=>e.push(...n),s=Promise,v=(e,n)=>e instanceof n,y=e=>null==e,f=(e,n,t)=>y(e)?null==t?void 0:t():n(e),p=n=>e(n)==l,h=e=>{return n=function*(){return s.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},m=(e,n)=>{var t;return null!=(t=null==e?void 0:e.has(n))&&t},E=e=>{var n;return[...null!=(n=null==e?void 0:e.values())?n:[]]},b=(e,n)=>null==e?void 0:e.delete(n),O=Object,A=O.keys,P=O.freeze,T=(e=[])=>O.fromEntries(e),w=(...e)=>O.assign({},...e),L=(e,n)=>(delete e[n],e),S=(e,n)=>o(O.entries(e),(([e,t])=>n(t,e))),N=e=>O.values(e),g=e=>i(A(e)),C=e=>(e=>v(e,O)&&e.constructor==O)(e)&&0==g(e),R=e=>new Map(e),x=e=>{var n;return[...null!=(n=null==e?void 0:e.keys())?n:[]]},I=(e,n)=>null==e?void 0:e.get(n),j=(e,n)=>{var t;return o([...null!=(t=null==e?void 0:e.entries())?t:[]],(([e,t])=>n(t,e)))},D=(e,n,t)=>y(t)?(b(e,n),e):null==e?void 0:e.set(n,t),$=(e,n,t,l=D)=>(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)=>!y(((e,n)=>f(e,(e=>e[n])))(e,n)))(n,t)?0:l(e,t))),e),_="_id",F=e=>`"${e.replace(/"/g,'""')}"`,M=e=>new Set(Array.isArray(e)||y(e)?e:[e]),B=(e,n)=>null==e?void 0:e.add(n);var k=Object.defineProperty,H=Object.getOwnPropertySymbols,J=Object.prototype.hasOwnProperty,U=Object.prototype.propertyIsEnumerable,W=(e,n,t)=>n in e?k(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_",q="WHERE",G=(e,n)=>{const l=R(),d=(e,n)=>!y(I(I(l,e),n)),s=(n,d,s,v,y)=>z(void 0,null,(function*(){const f=M();S(null!=y?y:{},(e=>o(A(e),(e=>B(f,e)))));const p=E(f);if(u(p)&&m(l,n)&&v)return yield e("DROP TABLE"+F(n)),void D(l,n);if(u(p)||m(l,n)){const t=I(l,n),r=M(x(t));yield h([...o(p,(l=>z(void 0,null,(function*(){b(r,l)||(yield e(`ALTER TABLE${F(n)}ADD${F(l)}`),D(t,l,""))})))),...s?o(E(r),(l=>z(void 0,null,(function*(){l!=d&&(yield e(`ALTER TABLE${F(n)}DROP${F(l)}`),D(t,l))})))):[]])}else yield e(`CREATE TABLE${F(n)}(${F(d)} PRIMARY KEY ON CONFLICT REPLACE${r(o(p,(e=>t+F(e))))});`),D(l,n,R([[d,""],...o(p,(e=>[e,""]))]));if(u(p))m(l,n)&&(yield e("DELETE FROM"+F(n)));else{const u=[],s=[],v=[],f=a(x(I(l,n)),(e=>e!=d));S(y,((e,n)=>{var t;c(u,`(?${t=i(f),",?".repeat(t)})`),c(s,n,...o(f,(n=>e[n]))),c(v,n)})),yield e("INSERT INTO"+F(n)+"("+F(d)+r(o(f,(e=>t+F(e))))+")VALUES"+r(u,t)+"ON CONFLICT("+F(d)+")DO UPDATE SET"+r(o(f,(e=>F(e)+"=excluded."+F(e))),t),s),yield e("DELETE FROM"+F(n)+q+F(d)+"NOT IN("+Q(v)+")",v)}}));return[()=>z(void 0,null,(function*(){return $(l,T(yield h(o(yield e("SELECT name "+V+"list WHERE schema='main'AND type='table'AND name IN("+Q(n)+")",n),(n=>z(void 0,[n],(function*({name:n}){return[n,T(o(yield e("SELECT name,type "+V+"info(?)",[n]),(({name:e,type:n})=>[e,n])))]})))))),((e,n,t)=>{return D(l,n,$((i=R,m(r=l,o=n)||D(r,o,i()),I(r,o)),t,((e,n,t)=>{t!=I(e,n)&&D(e,n,t)}),((e,n)=>D(e,n))));var r,o,i}),((e,n)=>D(l,n)))})),(n,t)=>z(void 0,null,(function*(){const l=d(n,t)?yield e(K+F(n)+q+F(t)+"=?",["_"]):[];return u(l)?null:L(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 d(n,t)?T(a(o(yield e(K+F(n)),(e=>[e[t],L(Y({},e),t)])),(([e,n])=>!y(e)&&!C(n)))):{}})),s]},Q=e=>r(o(e,(()=>"?")),t),X=JSON.parse;var 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 ee=(e,n,t,l,r)=>{let o,i,u,a=0,d=0,s=0;const v=[],p=e=>Z(void 0,null,(function*(){return 2!=a&&(a=1,yield h.schedule((()=>Z(void 0,null,(function*(){yield e(),a=0}))))),h})),h={load:(t,l)=>Z(void 0,null,(function*(){return yield p((()=>Z(void 0,null,(function*(){try{e.setContent(yield n())}catch(n){e.setContent([t,l])}}))))})),startAutoLoad:(...t)=>Z(void 0,[...t],(function*(t={},r={}){return h.stopAutoLoad(),yield h.load(t,r),s=1,u=l(((t,l)=>Z(void 0,null,(function*(){return yield p((()=>Z(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=>Z(void 0,null,(function*(){return 1!=a&&(a=2,yield h.schedule((()=>Z(void 0,null,(function*(){try{yield t(e.getContent,n)}catch(e){}a=0}))))),h})),startAutoSave:()=>Z(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:()=>(f(o,e.delListener),h),schedule:(...e)=>Z(void 0,null,(function*(){return c(v,...e),yield Z(void 0,null,(function*(){if(!d){for(d=1;!y((e=v,i=e.shift()));)try{yield i()}catch(e){}d=0}var e})),h})),getStore:()=>e,destroy:()=>h.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return P(h)};var ne=(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 te="store",le=(e,n,t,l,[r],o)=>{const[i,u,a]=G(n,o),d=ee(e,(()=>ne(void 0,null,(function*(){var e;return yield i(),X((null!=(e=yield u(r,_))?e:{})[te])}))),(e=>ne(void 0,null,(function*(){return d.schedule(i,(()=>ne(void 0,null,(function*(){var n;yield a(r,_,"_",{[te]:(n=e(),JSON.stringify(n,((e,n)=>v(n,Map)?O.fromEntries([...n]):n)))})}))))}))),t,l);return d};var re=(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 oe=(e,n,t,l,[r,o,[i,u,d]],c)=>{const[s,v,f,p,m]=G(n,c);return ee(e,(()=>re(void 0,null,(function*(){yield s();const e=yield re(void 0,null,(function*(){return T(a(yield h(j(r,((e,n)=>re(void 0,[e,n],(function*([e,n],t){return[e,yield p(t,n)]}))))),(e=>!C(e[1]))))})),n=yield re(void 0,null,(function*(){return i?yield v(d,_):{}}));return C(e)&&y(n)?void 0:[e,n]}))),(e=>re(void 0,null,(function*(){const[n,t]=e();yield s(),yield(e=>re(void 0,null,(function*(){return yield h(j(o,((n,t)=>re(void 0,[n,t],(function*([n,t,l,r],o){return yield m(n,t,l,r,e[o])})))))})))(n),yield(e=>re(void 0,null,(function*(){return u?yield f(d,_,"_",e):null})))(t)}))),t,l)},ie="json",ue="autoLoadIntervalSeconds",ae="rowIdColumnName",de="tableId",ce="tableName",se={mode:ie,[ue]:1},ve={load:0,save:0,[ce]:n+"_values"},ye=(e,n,t,l)=>{const r=R();return S(e,((e,o)=>{const i=d(N(w(n,p(e)?{[t]:e}:e)),0,g(n));y(i[0])||l(o,i[0])||D(r,o,i)})),r},fe="pragma ",pe="data_version",he="schema_version",me=(e,t,l,r,o)=>{let i,u;const[a,c,s,v]=(e=>{const t=(e=>w(se,p(e)?{storeTableName:e}:null!=e?e:{}))(e),l=t[ue];if(t.mode==ie){const{storeTableName:e=n}=t;return[1,l,[e],M(e)]}const{tables:{load:r={},save:o={}}={},values:i={}}=t,u=d(N(w(ve,i)),0,g(ve)),a=u[2],c=M(a);return[0,l,[ye(r,{[de]:null,[ae]:_},de,(e=>B(c,e)&&e==a)),ye(o,{[ce]:null,[ae]:_,deleteEmptyColumns:0,deleteEmptyTable:0},ce,((e,n)=>B(c,n)&&n==a)),u],c]})(t);return(a?le:oe)(e,l,(e=>[setInterval((()=>{return n=function*(){try{const n=(yield l(fe+pe))[0][pe],t=(yield l(fe+he))[0][he];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*c),r((n=>v.has(n)?e():0))]),(([e,n])=>{clearInterval(e),i=u=null,o(n)}),s,E(v))};var Ee=Object.defineProperty,be=Object.getOwnPropertySymbols,Oe=Object.prototype.hasOwnProperty,Ae=Object.prototype.propertyIsEnumerable,Pe=(e,n,t)=>n in e?Ee(e,n,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[n]=t;const Te="change",we=(e,n,t)=>me(e,t,((e,t=[])=>new s(((l,r)=>n.all(e,t,((e,n)=>e?r(e):l(n.map((e=>((e,n)=>{for(var t in n||(n={}))Oe.call(n,t)&&Pe(e,t,n[t]);if(be)for(var t of be(n))Ae.call(n,t)&&Pe(e,t,n[t]);return e})({},e))))))))),(e=>{const t=(n,t,l)=>e(l);return n.on(Te,t),t}),(e=>n.off(Te,e)));export{we as createSqlite3Persister};
1
+ const e=e=>typeof e,n="tinybase",t=",",l=e(""),r=(e,n)=>e.repeat(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),c=(e,n,t)=>e.slice(n,t),s=(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=n=>e(n)==l,E=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},m=(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:[]]},b=(e,n)=>null==e?void 0:e.delete(n),P=Object,T=P.keys,w=P.freeze,A=(e=[])=>P.fromEntries(e),L=(...e)=>P.assign({},...e),R=(e,n)=>i(P.entries(e),(([e,t])=>n(t,e))),S=e=>P.values(e),g=e=>u(T(e)),N=e=>(e=>y(e,P)&&e.constructor==P)(e)&&0==g(e),x=e=>new Map(e),C=e=>{var n;return[...null!=(n=null==e?void 0:e.keys())?n:[]]},I=(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)))},j=(e,n,t)=>f(t)?(b(e,n),e):null==e?void 0:e.set(n,t),F=(e,n,t,l=j)=>(R(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),M=e=>new Set(Array.isArray(e)||f(e)?e:[e]),$=(e,n)=>null==e?void 0:e.add(n),_="_",B="_id",H=e=>`"${e.replace(/"/g,'""')}"`;var W=Object.defineProperty,k=Object.getOwnPropertySymbols,J=Object.prototype.hasOwnProperty,U=Object.prototype.propertyIsEnumerable,Y=(e,n,t)=>n in e?W(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(k)for(var t of k(n))U.call(n,t)&&Y(e,t,n[t]);return e},K=(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 V="FROM pragma_table_",q="WHERE",G=(e,n)=>{const l=x();return[()=>K(void 0,null,(function*(){return F(l,A(yield E(i(yield e("SELECT name "+V+"list WHERE schema='main'AND type='table'AND name IN("+X(n)+")",n),(n=>K(void 0,[n],(function*({name:n}){return[n,A(i(yield e("SELECT name,type "+V+"info(?)",[n]),(({name:e,type:n})=>[e,n])))]})))))),((e,n,t)=>{return j(l,n,F((i=x,m(r=l,o=n)||j(r,o,i()),I(r,o)),t,((e,n,t)=>{t!=I(e,n)&&j(e,n,t)}),((e,n)=>j(e,n))));var r,o,i}),((e,n)=>j(l,n)))})),(n,t)=>K(void 0,null,(function*(){return((e,n)=>!f(I(I(l,e),n)))(n,t)?A(d(i(yield e("SELECT*FROM"+H(n)),(e=>{return[e[t],(n=z({},e),l=t,delete n[l],n)];var n,l})),(([e,n])=>!f(e)&&!N(n)))):{}})),(n,r,u,c,v,y=!1)=>K(void 0,null,(function*(){const p=M();R(null!=u?u:{},(e=>i(T(null!=e?e:{}),(e=>$(p,e)))));const h=O(p);if(!y&&v&&a(h)&&m(l,n))return yield e("DROP TABLE"+H(n)),void j(l,n);if(a(h)||m(l,n)){const t=I(l,n),o=M(C(t));yield E([...i(h,(l=>K(void 0,null,(function*(){b(o,l)||(yield e(`ALTER TABLE${H(n)}ADD${H(l)}`),j(t,l,""))})))),...!y&&c?i(O(o),(l=>K(void 0,null,(function*(){l!=r&&(yield e(`ALTER TABLE${H(n)}DROP${H(l)}`),j(t,l))})))):[]])}else yield e(`CREATE TABLE${H(n)}(${H(r)} PRIMARY KEY ON CONFLICT REPLACE${o(i(h,(e=>t+H(e))))});`),j(l,n,x([[r,""],...i(h,(e=>[e,""]))]));if(y)f(u)?yield e("DELETE FROM"+H(n)+"WHERE 1"):yield E(R(u,((t,l)=>K(void 0,null,(function*(){f(t)?yield e("DELETE FROM"+H(n)+q+H(r)+"=?",[l]):a(h)||(yield Q(e,n,r,T(t),[l,...S(t)]))})))));else if(a(h))m(l,n)&&(yield e("DELETE FROM"+H(n)+"WHERE 1"));else{const t=d(C(I(l,n)),(e=>e!=r)),o=[],a=[];R(null!=u?u:{},((e,n)=>{s(o,n,...i(t,(n=>null==e?void 0:e[n]))),s(a,n)})),yield Q(e,n,r,t,o),yield e("DELETE FROM"+H(n)+q+H(r)+"NOT IN("+X(a)+")",a)}}))]},Q=(e,n,l,a,d)=>K(void 0,null,(function*(){return yield e("INSERT INTO"+H(n)+"("+H(l)+o(i(a,(e=>t+H(e))))+")VALUES"+r(`,(?${r(",?",u(a))})`,u(d)/(u(a)+1)).substring(1)+"ON CONFLICT("+H(l)+")DO UPDATE SET"+o(i(a,(e=>H(e)+"=excluded."+H(e))),t),d)})),X=e=>o(i(e,(()=>"?")),t),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,c=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),c=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:()=>(c&&(r(u),u=void 0,c=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();N(t)&&N(l)||h.save((()=>[t,l]))})),h})),stopAutoSave:()=>(p(o,e.delListener),h),schedule:(...e)=>ee(void 0,null,(function*(){return s(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 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]=G(n,o),d=ne(e,(()=>te(void 0,null,(function*(){var e;return yield i(),Z(null==(e=(yield u(r,B))[_])?void 0:e[le])}))),(e=>te(void 0,null,(function*(){return d.schedule(i,(()=>te(void 0,null,(function*(){var n;yield a(r,B,{[_]:{[le]:(n=e(),JSON.stringify(n,((e,n)=>y(n,Map)?P.fromEntries([...n]):n)))}},!0,!0)}))))}))),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]],c)=>{const[s,v,y]=G(n,c),p=(e,n)=>oe(void 0,null,(function*(){return yield E(D(o,((t,l)=>oe(void 0,[t,l],(function*([t,l,r,o],i){const u=e[i];n&&void 0===u||(yield y(t,l,u,r,o,n))})))))})),h=(e,n)=>oe(void 0,null,(function*(){return u?yield y(a,B,{[_]:e},!0,!0,n):null}));return ne(e,(()=>oe(void 0,null,(function*(){yield s();const e=yield oe(void 0,null,(function*(){return A(d(yield E(D(r,((e,n)=>oe(void 0,[e,n],(function*([e,n],t){return[e,yield v(t,n)]}))))),(e=>!N(e[1]))))})),n=yield oe(void 0,null,(function*(){return i?(yield v(a,B))[_]:{}}));return N(e)&&f(n)?void 0:[e,n]}))),((e,n)=>oe(void 0,null,(function*(){if(yield s(),f(n)){const[n,t]=e();yield p(n),yield h(t)}else{const[e,t]=n();yield p(e,!0),yield h(t,!0)}}))),t,l)},ue="json",ae="autoLoadIntervalSeconds",de="rowIdColumnName",ce="tableId",se="tableName",ve={mode:ue,[ae]:1},ye={load:0,save:0,[se]:n+"_values"},fe=(e,n,t,l)=>{const r=x();return R(e,((e,o)=>{const i=c(S(L(n,h(e)?{[t]:e}:e)),0,g(n));f(i[0])||l(o,i[0])||j(r,o,i)})),r};var pe=(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 he="pragma ",Ee="data_version",me="schema_version",Oe=(e,t,l,r,o,i)=>{let u,a;const[d,s,v,y]=(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],M(e)]}const{tables:{load:r={},save:o={}}={},values:i={}}=t,u=c(S(L(ye,i)),0,g(ye)),a=u[2],d=M(a);return[0,l,[fe(r,{[ce]:null,[de]:B},ce,(e=>$(d,e)&&e==a)),fe(o,{[se]:null,[de]:B,deleteEmptyColumns:0,deleteEmptyTable:0},se,((e,n)=>$(d,n)&&n==a)),u],d]})(t);return(d?re:ie)(e,i?(e,n)=>pe(void 0,null,(function*(){return i(e,n),yield l(e,n)})):l,(e=>[setInterval((()=>pe(void 0,null,(function*(){try{const n=(yield l(he+Ee))[0][Ee],t=(yield l(he+me))[0][me];n==(null!=u?u:u=n)&&t==(null!=a?a:a=t)||(e(),u=n,a=t)}catch(e){}}))),1e3*s),r((n=>y.has(n)?e():0))]),(([e,n])=>{clearInterval(e),u=a=null,o(n)}),v,O(y))};var be=Object.defineProperty,Pe=Object.getOwnPropertySymbols,Te=Object.prototype.hasOwnProperty,we=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 Le="change",Re=(e,n,t,l)=>Oe(e,t,((e,...t)=>{return l=[e,...t],r=function*(e,t=[]){return yield(l=(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(Pe)for(var t of Pe(n))we.call(n,t)&&Ae(e,t,n[t]);return e})({},e)))))),new v(l));var l},new Promise(((e,n)=>{var t=e=>{try{i(r.next(e))}catch(e){n(e)}},o=e=>{try{i(r.throw(e))}catch(e){n(e)}},i=n=>n.done?e(n.value):Promise.resolve(n.value).then(t,o);i((r=r.apply(void 0,l)).next())}));var l,r}),(e=>{const t=(n,t,l)=>e(l);return n.on(Le,t),t}),(e=>n.off(Le,e)),l);export{Re as createSqlite3Persister};
@@ -1 +1 @@
1
- const a=a=>typeof a,t="tinybase",e=",",s=a(""),n=(a,t="")=>a.join(t),c=(a,t)=>a.map(t),i=a=>a.length,o=a=>0==i(a),r=(a,t)=>a.filter(t),l=(a,t,e)=>a.slice(t,e),y=(a,...t)=>a.push(...t),w=Promise,u=(a,t)=>a instanceof t,d=a=>null==a,E=(a,t,e)=>d(a)?e?.():t(a),v=t=>a(t)==s,m=async a=>w.all(a),A=(a,t)=>a?.has(t)??!1,T=a=>[...a?.values()??[]],p=(a,t)=>a?.delete(t),L=Object,h=L.keys,f=L.freeze,N=(a=[])=>L.fromEntries(a),O=(...a)=>L.assign({},...a),C=(a,t)=>(delete a[t],a),S=(a,t)=>c(L.entries(a),(([a,e])=>t(e,a))),R=a=>L.values(a),I=a=>i(h(a)),g=a=>(a=>u(a,L)&&a.constructor==L)(a)&&0==I(a),D=a=>new Map(a),b=a=>[...a?.keys()??[]],$=(a,t)=>a?.get(t),_=(a,t)=>c([...a?.entries()??[]],(([a,e])=>t(e,a))),F=(a,t,e)=>d(e)?(p(a,t),a):a?.set(t,e),M=(a,t,e,s=F)=>(S(t,((t,s)=>e(a,s,t))),((a,t)=>{((a,t)=>{a?.forEach(t)})(a,((a,e)=>t(e)))})(a,(e=>((a,t)=>!d(((a,t)=>E(a,(a=>a[t])))(a,t)))(t,e)?0:s(a,e))),a),P="_id",B=a=>`"${a.replace(/"/g,'""')}"`,j=a=>new Set(Array.isArray(a)||d(a)?a:[a]),x=(a,t)=>a?.add(t),U="SELECT*FROM",k="FROM pragma_table_",H="WHERE",J=(a,t)=>{const s=D(),l=(a,t)=>!d($($(s,a),t)),w=async(t,l,w,u,d)=>{const E=j();S(d??{},(a=>c(h(a),(a=>x(E,a)))));const v=T(E);if(o(v)&&A(s,t)&&u)return await a("DROP TABLE"+B(t)),void F(s,t);if(o(v)||A(s,t)){const e=$(s,t),n=j(b(e));await m([...c(v,(async s=>{p(n,s)||(await a(`ALTER TABLE${B(t)}ADD${B(s)}`),F(e,s,""))})),...w?c(T(n),(async s=>{s!=l&&(await a(`ALTER TABLE${B(t)}DROP${B(s)}`),F(e,s))})):[]])}else await a(`CREATE TABLE${B(t)}(${B(l)} PRIMARY KEY ON CONFLICT REPLACE${n(c(v,(a=>e+B(a))))});`),F(s,t,D([[l,""],...c(v,(a=>[a,""]))]));if(o(v))A(s,t)&&await a("DELETE FROM"+B(t));else{const o=[],w=[],u=[],E=r(b($(s,t)),(a=>a!=l));S(d,((a,t)=>{var e;y(o,`(?${e=i(E),",?".repeat(e)})`),y(w,t,...c(E,(t=>a[t]))),y(u,t)})),await a("INSERT INTO"+B(t)+"("+B(l)+n(c(E,(a=>e+B(a))))+")VALUES"+n(o,e)+"ON CONFLICT("+B(l)+")DO UPDATE SET"+n(c(E,(a=>B(a)+"=excluded."+B(a))),e),w),await a("DELETE FROM"+B(t)+H+B(l)+"NOT IN("+W(u)+")",u)}};return[async()=>M(s,N(await m(c(await a("SELECT name "+k+"list WHERE schema='main'AND type='table'AND name IN("+W(t)+")",t),(async({name:t})=>[t,N(c(await a("SELECT name,type "+k+"info(?)",[t]),(({name:a,type:t})=>[a,t])))])))),((a,t,e)=>{return F(s,t,M((i=D,A(n=s,c=t)||F(n,c,i()),$(n,c)),e,((a,t,e)=>{e!=$(a,t)&&F(a,t,e)}),((a,t)=>F(a,t))));var n,c,i}),((a,t)=>F(s,t))),async(t,e)=>{const s=l(t,e)?await a(U+B(t)+H+B(e)+"=?",["_"]):[];return o(s)?null:C(s[0],e)},async(a,t,e,s)=>await w(a,t,!0,!0,{[e]:s}),async(t,e)=>l(t,e)?N(r(c(await a(U+B(t)),(a=>[a[e],C({...a},e)])),(([a,t])=>!d(a)&&!g(t)))):{},w]},W=a=>n(c(a,(()=>"?")),e),Y=JSON.parse,z=(a,t,e,s,n)=>{let c,i,o,r=0,l=0,w=0;const u=[],v=async a=>(2!=r&&(r=1,await m.schedule((async()=>{await a(),r=0}))),m),m={load:async(e,s)=>await v((async()=>{try{a.setContent(await t())}catch{a.setContent([e,s])}})),startAutoLoad:async(e={},n={})=>(m.stopAutoLoad(),await m.load(e,n),w=1,o=s((async(e,s)=>await v((async()=>{if(s)a.setTransactionChanges(s());else try{a.setContent(e?.()??await t())}catch{}})))),m),stopAutoLoad:()=>(w&&(n(o),o=void 0,w=0),m),save:async t=>(1!=r&&(r=2,await m.schedule((async()=>{try{await e(a.getContent,t)}catch{}r=0}))),m),startAutoSave:async()=>(await m.stopAutoSave().save(),c=a.addDidFinishTransactionListener(((a,t)=>{const[e,s]=t();g(e)&&g(s)||m.save((()=>[e,s]))})),m),stopAutoSave:()=>(E(c,a.delListener),m),schedule:async(...a)=>(y(u,...a),await(async()=>{if(!l){for(l=1;!d((a=u,i=a.shift()));)try{await i()}catch{}l=0}var a})(),m),getStore:()=>a,destroy:()=>m.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return f(m)},K="store",V=(a,t,e,s,[n],c)=>{const[i,o,r]=J(t,c),l=z(a,(async()=>(await i(),Y((await o(n,P)??{})[K]))),(async a=>l.schedule(i,(async()=>{var t;await r(n,P,"_",{[K]:(t=a(),JSON.stringify(t,((a,t)=>u(t,Map)?L.fromEntries([...t]):t)))})}))),e,s);return l},q=(a,t,e,s,[n,c,[i,o,l]],y)=>{const[w,u,E,v,A]=J(t,y);return z(a,(async()=>{await w();const a=await(async()=>N(r(await m(_(n,(async([a,t],e)=>[a,await v(e,t)]))),(a=>!g(a[1])))))(),t=await(async()=>i?await u(l,P):{})();return g(a)&&d(t)?void 0:[a,t]}),(async a=>{const[t,e]=a();await w(),await(async a=>await m(_(c,(async([t,e,s,n],c)=>await A(t,e,s,n,a[c])))))(t),await(async a=>o?await E(l,P,"_",a):null)(e)}),e,s)},G="json",Q="autoLoadIntervalSeconds",X="rowIdColumnName",Z="tableId",aa="tableName",ta={mode:G,[Q]:1},ea={load:0,save:0,[aa]:t+"_values"},sa=(a,t,e,s)=>{const n=D();return S(a,((a,c)=>{const i=l(R(O(t,v(a)?{[e]:a}:a)),0,I(t));d(i[0])||s(c,i[0])||F(n,c,i)})),n},na="pragma ",ca="data_version",ia="schema_version",oa=(a,e,s,n,c)=>{let i,o;const[r,y,w,u]=(a=>{const e=(a=>O(ta,v(a)?{storeTableName:a}:a??{}))(a),s=e[Q];if(e.mode==G){const{storeTableName:a=t}=e;return[1,s,[a],j(a)]}const{tables:{load:n={},save:c={}}={},values:i={}}=e,o=l(R(O(ea,i)),0,I(ea)),r=o[2],y=j(r);return[0,s,[sa(n,{[Z]:null,[X]:P},Z,(a=>x(y,a)&&a==r)),sa(c,{[aa]:null,[X]:P,deleteEmptyColumns:0,deleteEmptyTable:0},aa,((a,t)=>x(y,t)&&t==r)),o],y]})(e);return(r?V:q)(a,s,(a=>[setInterval((async()=>{try{const t=(await s(na+ca))[0][ca],e=(await s(na+ia))[0][ia];t==(i??=t)&&e==(o??=e)||(a(),i=t,o=e)}catch{}}),1e3*y),n((t=>u.has(t)?a():0))]),(([a,t])=>{clearInterval(a),i=o=null,c(t)}),w,T(u))},ra=(a,t,e)=>oa(a,e,(async(a,e=[])=>await t.execO(a,e)),(a=>t.onUpdate(((t,e,s)=>a(s)))),(a=>a()));export{ra as createCrSqliteWasmPersister};
1
+ const a=a=>typeof a,t="tinybase",e=",",s=a(""),n=(a,t)=>a.repeat(t),i=(a,t="")=>a.join(t),c=(a,t)=>a.map(t),o=a=>a.length,r=a=>0==o(a),l=(a,t)=>a.filter(t),w=(a,t,e)=>a.slice(t,e),y=(a,...t)=>a.push(...t),E=Promise,u=(a,t)=>a instanceof t,d=a=>null==a,v=(a,t,e)=>d(a)?e?.():t(a),T=t=>a(t)==s,m=async a=>E.all(a),A=(a,t)=>a?.has(t)??!1,L=a=>[...a?.values()??[]],p=(a,t)=>a?.delete(t),f=Object,h=f.keys,O=f.freeze,R=(a=[])=>f.fromEntries(a),N=(...a)=>f.assign({},...a),C=(a,t)=>c(f.entries(a),(([a,e])=>t(e,a))),S=a=>f.values(a),D=a=>o(h(a)),g=a=>(a=>u(a,f)&&a.constructor==f)(a)&&0==D(a),I=a=>new Map(a),b=a=>[...a?.keys()??[]],F=(a,t)=>a?.get(t),M=(a,t)=>c([...a?.entries()??[]],(([a,e])=>t(e,a))),$=(a,t,e)=>d(e)?(p(a,t),a):a?.set(t,e),_=(a,t,e,s=$)=>(C(t,((t,s)=>e(a,s,t))),((a,t)=>{((a,t)=>{a?.forEach(t)})(a,((a,e)=>t(e)))})(a,(e=>((a,t)=>!d(((a,t)=>v(a,(a=>a[t])))(a,t)))(t,e)?0:s(a,e))),a),P=a=>new Set(Array.isArray(a)||d(a)?a:[a]),B=(a,t)=>a?.add(t),H="_",W="_id",j=a=>`"${a.replace(/"/g,'""')}"`,x="FROM pragma_table_",U="WHERE",k=(a,t)=>{const s=I();return[async()=>_(s,R(await m(c(await a("SELECT name "+x+"list WHERE schema='main'AND type='table'AND name IN("+Y(t)+")",t),(async({name:t})=>[t,R(c(await a("SELECT name,type "+x+"info(?)",[t]),(({name:a,type:t})=>[a,t])))])))),((a,t,e)=>{return $(s,t,_((c=I,A(n=s,i=t)||$(n,i,c()),F(n,i)),e,((a,t,e)=>{e!=F(a,t)&&$(a,t,e)}),((a,t)=>$(a,t))));var n,i,c}),((a,t)=>$(s,t))),async(t,e)=>((a,t)=>!d(F(F(s,a),t)))(t,e)?R(l(c(await a("SELECT*FROM"+j(t)),(a=>{return[a[e],(t={...a},s=e,delete t[s],t)];var t,s})),(([a,t])=>!d(a)&&!g(t)))):{},async(t,n,o,w,E,u=!1)=>{const v=P();C(o??{},(a=>c(h(a??{}),(a=>B(v,a)))));const T=L(v);if(!u&&E&&r(T)&&A(s,t))return await a("DROP TABLE"+j(t)),void $(s,t);if(r(T)||A(s,t)){const e=F(s,t),i=P(b(e));await m([...c(T,(async s=>{p(i,s)||(await a(`ALTER TABLE${j(t)}ADD${j(s)}`),$(e,s,""))})),...!u&&w?c(L(i),(async s=>{s!=n&&(await a(`ALTER TABLE${j(t)}DROP${j(s)}`),$(e,s))})):[]])}else await a(`CREATE TABLE${j(t)}(${j(n)} PRIMARY KEY ON CONFLICT REPLACE${i(c(T,(a=>e+j(a))))});`),$(s,t,I([[n,""],...c(T,(a=>[a,""]))]));if(u)d(o)?await a("DELETE FROM"+j(t)+"WHERE 1"):await m(C(o,(async(e,s)=>{d(e)?await a("DELETE FROM"+j(t)+U+j(n)+"=?",[s]):r(T)||await J(a,t,n,h(e),[s,...S(e)])})));else if(r(T))A(s,t)&&await a("DELETE FROM"+j(t)+"WHERE 1");else{const e=l(b(F(s,t)),(a=>a!=n)),i=[],r=[];C(o??{},((a,t)=>{y(i,t,...c(e,(t=>a?.[t]))),y(r,t)})),await J(a,t,n,e,i),await a("DELETE FROM"+j(t)+U+j(n)+"NOT IN("+Y(r)+")",r)}}]},J=async(a,t,s,r,l)=>await a("INSERT INTO"+j(t)+"("+j(s)+i(c(r,(a=>e+j(a))))+")VALUES"+n(`,(?${n(",?",o(r))})`,o(l)/(o(r)+1)).substring(1)+"ON CONFLICT("+j(s)+")DO UPDATE SET"+i(c(r,(a=>j(a)+"=excluded."+j(a))),e),l),Y=a=>i(c(a,(()=>"?")),e),z=JSON.parse,K=(a,t,e,s,n)=>{let i,c,o,r=0,l=0,w=0;const E=[],u=async a=>(2!=r&&(r=1,await T.schedule((async()=>{await a(),r=0}))),T),T={load:async(e,s)=>await u((async()=>{try{a.setContent(await t())}catch{a.setContent([e,s])}})),startAutoLoad:async(e={},n={})=>(T.stopAutoLoad(),await T.load(e,n),w=1,o=s((async(e,s)=>await u((async()=>{if(s)a.setTransactionChanges(s());else try{a.setContent(e?.()??await t())}catch{}})))),T),stopAutoLoad:()=>(w&&(n(o),o=void 0,w=0),T),save:async t=>(1!=r&&(r=2,await T.schedule((async()=>{try{await e(a.getContent,t)}catch{}r=0}))),T),startAutoSave:async()=>(await T.stopAutoSave().save(),i=a.addDidFinishTransactionListener(((a,t)=>{const[e,s]=t();g(e)&&g(s)||T.save((()=>[e,s]))})),T),stopAutoSave:()=>(v(i,a.delListener),T),schedule:async(...a)=>(y(E,...a),await(async()=>{if(!l){for(l=1;!d((a=E,c=a.shift()));)try{await c()}catch{}l=0}var a})(),T),getStore:()=>a,destroy:()=>T.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return O(T)},V="store",q=(a,t,e,s,[n],i)=>{const[c,o,r]=k(t,i),l=K(a,(async()=>(await c(),z((await o(n,W))[H]?.[V]))),(async a=>l.schedule(c,(async()=>{var t;await r(n,W,{[H]:{[V]:(t=a(),JSON.stringify(t,((a,t)=>u(t,Map)?f.fromEntries([...t]):t)))}},!0,!0)}))),e,s);return l},G=(a,t,e,s,[n,i,[c,o,r]],w)=>{const[y,E,u]=k(t,w),v=async(a,t)=>await m(M(i,(async([e,s,n,i],c)=>{const o=a[c];t&&void 0===o||await u(e,s,o,n,i,t)}))),T=async(a,t)=>o?await u(r,W,{[H]:a},!0,!0,t):null;return K(a,(async()=>{await y();const a=await(async()=>R(l(await m(M(n,(async([a,t],e)=>[a,await E(e,t)]))),(a=>!g(a[1])))))(),t=await(async()=>c?(await E(r,W))[H]:{})();return g(a)&&d(t)?void 0:[a,t]}),(async(a,t)=>{if(await y(),d(t)){const[t,e]=a();await v(t),await T(e)}else{const[a,e]=t();await v(a,!0),await T(e,!0)}}),e,s)},Q="json",X="autoLoadIntervalSeconds",Z="rowIdColumnName",aa="tableId",ta="tableName",ea={mode:Q,[X]:1},sa={load:0,save:0,[ta]:t+"_values"},na=(a,t,e,s)=>{const n=I();return C(a,((a,i)=>{const c=w(S(N(t,T(a)?{[e]:a}:a)),0,D(t));d(c[0])||s(i,c[0])||$(n,i,c)})),n},ia="pragma ",ca="data_version",oa="schema_version",ra=(a,e,s,n,i,c)=>{let o,r;const[l,y,E,u]=(a=>{const e=(a=>N(ea,T(a)?{storeTableName:a}:a??{}))(a),s=e[X];if(e.mode==Q){const{storeTableName:a=t}=e;return[1,s,[a],P(a)]}const{tables:{load:n={},save:i={}}={},values:c={}}=e,o=w(S(N(sa,c)),0,D(sa)),r=o[2],l=P(r);return[0,s,[na(n,{[aa]:null,[Z]:W},aa,(a=>B(l,a)&&a==r)),na(i,{[ta]:null,[Z]:W,deleteEmptyColumns:0,deleteEmptyTable:0},ta,((a,t)=>B(l,t)&&t==r)),o],l]})(e);return(l?q:G)(a,c?async(a,t)=>(c(a,t),await s(a,t)):s,(a=>[setInterval((async()=>{try{const t=(await s(ia+ca))[0][ca],e=(await s(ia+oa))[0][oa];t==(o??=t)&&e==(r??=e)||(a(),o=t,r=e)}catch{}}),1e3*y),n((t=>u.has(t)?a():0))]),(([a,t])=>{clearInterval(a),o=r=null,i(t)}),E,L(u))},la=(a,t,e,s)=>ra(a,e,(async(a,e=[])=>await t.execO(a,e)),(a=>t.onUpdate(((t,e,s)=>a(s)))),(a=>a()),s);export{la as createCrSqliteWasmPersister};
@@ -0,0 +1 @@
1
+ const a=a=>typeof a,t="tinybase",e=",",s=a(""),n=(a,t)=>a.repeat(t),i=(a,t="")=>a.join(t),c=(a,t)=>a.map(t),o=a=>a.length,r=a=>0==o(a),l=(a,t)=>a.filter(t),w=(a,t,e)=>a.slice(t,e),y=(a,...t)=>a.push(...t),E=Promise,u=(a,t)=>a instanceof t,d=a=>null==a,v=(a,t,e)=>d(a)?e?.():t(a),m=t=>a(t)==s,T=async a=>E.all(a),A=(a,t)=>a?.has(t)??!1,L=a=>[...a?.values()??[]],p=(a,t)=>a?.delete(t),h=Object,f=h.keys,R=h.freeze,N=(a=[])=>h.fromEntries(a),O=(...a)=>h.assign({},...a),C=(a,t)=>c(h.entries(a),(([a,e])=>t(e,a))),S=a=>h.values(a),g=a=>o(f(a)),D=a=>(a=>u(a,h)&&a.constructor==h)(a)&&0==g(a),b=a=>new Map(a),I=a=>[...a?.keys()??[]],F=(a,t)=>a?.get(t),M=(a,t)=>c([...a?.entries()??[]],(([a,e])=>t(e,a))),$=(a,t,e)=>d(e)?(p(a,t),a):a?.set(t,e),_=(a,t,e,s=$)=>(C(t,((t,s)=>e(a,s,t))),((a,t)=>{((a,t)=>{a?.forEach(t)})(a,((a,e)=>t(e)))})(a,(e=>((a,t)=>!d(((a,t)=>v(a,(a=>a[t])))(a,t)))(t,e)?0:s(a,e))),a),P=a=>new Set(Array.isArray(a)||d(a)?a:[a]),B=(a,t)=>a?.add(t),H="_",W="_id",j=a=>`"${a.replace(/"/g,'""')}"`,x="FROM pragma_table_",k="WHERE",J=(a,t)=>{const s=b();return[async()=>_(s,N(await T(c(await a("SELECT name "+x+"list WHERE schema='main'AND type='table'AND name IN("+Y(t)+")",t),(async({name:t})=>[t,N(c(await a("SELECT name,type "+x+"info(?)",[t]),(({name:a,type:t})=>[a,t])))])))),((a,t,e)=>{return $(s,t,_((c=b,A(n=s,i=t)||$(n,i,c()),F(n,i)),e,((a,t,e)=>{e!=F(a,t)&&$(a,t,e)}),((a,t)=>$(a,t))));var n,i,c}),((a,t)=>$(s,t))),async(t,e)=>((a,t)=>!d(F(F(s,a),t)))(t,e)?N(l(c(await a("SELECT*FROM"+j(t)),(a=>{return[a[e],(t={...a},s=e,delete t[s],t)];var t,s})),(([a,t])=>!d(a)&&!D(t)))):{},async(t,n,o,w,E,u=!1)=>{const v=P();C(o??{},(a=>c(f(a??{}),(a=>B(v,a)))));const m=L(v);if(!u&&E&&r(m)&&A(s,t))return await a("DROP TABLE"+j(t)),void $(s,t);if(r(m)||A(s,t)){const e=F(s,t),i=P(I(e));await T([...c(m,(async s=>{p(i,s)||(await a(`ALTER TABLE${j(t)}ADD${j(s)}`),$(e,s,""))})),...!u&&w?c(L(i),(async s=>{s!=n&&(await a(`ALTER TABLE${j(t)}DROP${j(s)}`),$(e,s))})):[]])}else await a(`CREATE TABLE${j(t)}(${j(n)} PRIMARY KEY ON CONFLICT REPLACE${i(c(m,(a=>e+j(a))))});`),$(s,t,b([[n,""],...c(m,(a=>[a,""]))]));if(u)d(o)?await a("DELETE FROM"+j(t)+"WHERE 1"):await T(C(o,(async(e,s)=>{d(e)?await a("DELETE FROM"+j(t)+k+j(n)+"=?",[s]):r(m)||await U(a,t,n,f(e),[s,...S(e)])})));else if(r(m))A(s,t)&&await a("DELETE FROM"+j(t)+"WHERE 1");else{const e=l(I(F(s,t)),(a=>a!=n)),i=[],r=[];C(o??{},((a,t)=>{y(i,t,...c(e,(t=>a?.[t]))),y(r,t)})),await U(a,t,n,e,i),await a("DELETE FROM"+j(t)+k+j(n)+"NOT IN("+Y(r)+")",r)}}]},U=async(a,t,s,r,l)=>await a("INSERT INTO"+j(t)+"("+j(s)+i(c(r,(a=>e+j(a))))+")VALUES"+n(`,(?${n(",?",o(r))})`,o(l)/(o(r)+1)).substring(1)+"ON CONFLICT("+j(s)+")DO UPDATE SET"+i(c(r,(a=>j(a)+"=excluded."+j(a))),e),l),Y=a=>i(c(a,(()=>"?")),e),q=JSON.parse,z=(a,t,e,s,n)=>{let i,c,o,r=0,l=0,w=0;const E=[],u=async a=>(2!=r&&(r=1,await m.schedule((async()=>{await a(),r=0}))),m),m={load:async(e,s)=>await u((async()=>{try{a.setContent(await t())}catch{a.setContent([e,s])}})),startAutoLoad:async(e={},n={})=>(m.stopAutoLoad(),await m.load(e,n),w=1,o=s((async(e,s)=>await u((async()=>{if(s)a.setTransactionChanges(s());else try{a.setContent(e?.()??await t())}catch{}})))),m),stopAutoLoad:()=>(w&&(n(o),o=void 0,w=0),m),save:async t=>(1!=r&&(r=2,await m.schedule((async()=>{try{await e(a.getContent,t)}catch{}r=0}))),m),startAutoSave:async()=>(await m.stopAutoSave().save(),i=a.addDidFinishTransactionListener(((a,t)=>{const[e,s]=t();D(e)&&D(s)||m.save((()=>[e,s]))})),m),stopAutoSave:()=>(v(i,a.delListener),m),schedule:async(...a)=>(y(E,...a),await(async()=>{if(!l){for(l=1;!d((a=E,c=a.shift()));)try{await c()}catch{}l=0}var a})(),m),getStore:()=>a,destroy:()=>m.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return R(m)},K="store",V=(a,t,e,s,[n],i)=>{const[c,o,r]=J(t,i),l=z(a,(async()=>(await c(),q((await o(n,W))[H]?.[K]))),(async a=>l.schedule(c,(async()=>{var t;await r(n,W,{[H]:{[K]:(t=a(),JSON.stringify(t,((a,t)=>u(t,Map)?h.fromEntries([...t]):t)))}},!0,!0)}))),e,s);return l},G=(a,t,e,s,[n,i,[c,o,r]],w)=>{const[y,E,u]=J(t,w),v=async(a,t)=>await T(M(i,(async([e,s,n,i],c)=>{const o=a[c];t&&void 0===o||await u(e,s,o,n,i,t)}))),m=async(a,t)=>o?await u(r,W,{[H]:a},!0,!0,t):null;return z(a,(async()=>{await y();const a=await(async()=>N(l(await T(M(n,(async([a,t],e)=>[a,await E(e,t)]))),(a=>!D(a[1])))))(),t=await(async()=>c?(await E(r,W))[H]:{})();return D(a)&&d(t)?void 0:[a,t]}),(async(a,t)=>{if(await y(),d(t)){const[t,e]=a();await v(t),await m(e)}else{const[a,e]=t();await v(a,!0),await m(e,!0)}}),e,s)},Q="json",X="autoLoadIntervalSeconds",Z="rowIdColumnName",aa="tableId",ta="tableName",ea={mode:Q,[X]:1},sa={load:0,save:0,[ta]:t+"_values"},na=(a,t,e,s)=>{const n=b();return C(a,((a,i)=>{const c=w(S(O(t,m(a)?{[e]:a}:a)),0,g(t));d(c[0])||s(i,c[0])||$(n,i,c)})),n},ia="pragma ",ca="data_version",oa="schema_version",ra=(a,e,s,n,i,c)=>{let o,r;const[l,y,E,u]=(a=>{const e=(a=>O(ea,m(a)?{storeTableName:a}:a??{}))(a),s=e[X];if(e.mode==Q){const{storeTableName:a=t}=e;return[1,s,[a],P(a)]}const{tables:{load:n={},save:i={}}={},values:c={}}=e,o=w(S(O(sa,c)),0,g(sa)),r=o[2],l=P(r);return[0,s,[na(n,{[aa]:null,[Z]:W},aa,(a=>B(l,a)&&a==r)),na(i,{[ta]:null,[Z]:W,deleteEmptyColumns:0,deleteEmptyTable:0},ta,((a,t)=>B(l,t)&&t==r)),o],l]})(e);return(l?V:G)(a,c?async(a,t)=>(c(a,t),await s(a,t)):s,(a=>[setInterval((async()=>{try{const t=(await s(ia+ca))[0][ca],e=(await s(ia+oa))[0][oa];t==(o??=t)&&e==(r??=e)||(a(),o=t,r=e)}catch{}}),1e3*y),n((t=>u.has(t)?a():0))]),(([a,t])=>{clearInterval(a),o=r=null,i(t)}),E,L(u))},la=(a,t,e,s)=>ra(a,e,(async(a,e=[])=>(await t.execAsync([{sql:a,args:e}],!1))[0].rows),(a=>t.onDatabaseChange((({tableName:t})=>a(t)))),(a=>a.remove()),s);export{la as createExpoSqlitePersister};
@@ -1 +1 @@
1
- const a=a=>typeof a,t="tinybase",e=",",s=a(""),n=(a,t="")=>a.join(t),o=(a,t)=>a.map(t),c=a=>a.length,i=a=>0==c(a),r=(a,t)=>a.filter(t),l=(a,t,e)=>a.slice(t,e),y=(a,...t)=>a.push(...t),w=Promise,u=(a,t)=>a instanceof t,d=a=>null==a,E=(a,t,e)=>d(a)?e?.():t(a),p=t=>a(t)==s,m=async a=>w.all(a),v=(a,t)=>a?.has(t)??!1,A=a=>[...a?.values()??[]],T=(a,t)=>a?.delete(t),L=Object,h=L.keys,f=L.freeze,N=(a=[])=>L.fromEntries(a),C=(...a)=>L.assign({},...a),O=(a,t)=>(delete a[t],a),R=(a,t)=>o(L.entries(a),(([a,e])=>t(e,a))),S=a=>L.values(a),_=a=>c(h(a)),b=a=>(a=>u(a,L)&&a.constructor==L)(a)&&0==_(a),I=a=>new Map(a),g=a=>[...a?.keys()??[]],D=(a,t)=>a?.get(t),$=(a,t)=>o([...a?.entries()??[]],(([a,e])=>t(e,a))),M=(a,t,e)=>d(e)?(T(a,t),a):a?.set(t,e),F=(a,t,e,s=M)=>(R(t,((t,s)=>e(a,s,t))),((a,t)=>{((a,t)=>{a?.forEach(t)})(a,((a,e)=>t(e)))})(a,(e=>((a,t)=>!d(((a,t)=>E(a,(a=>a[t])))(a,t)))(t,e)?0:s(a,e))),a),P="_id",j=a=>`"${a.replace(/"/g,'""')}"`,k=a=>new Set(Array.isArray(a)||d(a)?a:[a]),B=(a,t)=>a?.add(t),x="SELECT*FROM",q="FROM pragma_table_",H="WHERE",J=(a,t)=>{const s=I(),l=(a,t)=>!d(D(D(s,a),t)),w=async(t,l,w,u,d)=>{const E=k();R(d??{},(a=>o(h(a),(a=>B(E,a)))));const p=A(E);if(i(p)&&v(s,t)&&u)return await a("DROP TABLE"+j(t)),void M(s,t);if(i(p)||v(s,t)){const e=D(s,t),n=k(g(e));await m([...o(p,(async s=>{T(n,s)||(await a(`ALTER TABLE${j(t)}ADD${j(s)}`),M(e,s,""))})),...w?o(A(n),(async s=>{s!=l&&(await a(`ALTER TABLE${j(t)}DROP${j(s)}`),M(e,s))})):[]])}else await a(`CREATE TABLE${j(t)}(${j(l)} PRIMARY KEY ON CONFLICT REPLACE${n(o(p,(a=>e+j(a))))});`),M(s,t,I([[l,""],...o(p,(a=>[a,""]))]));if(i(p))v(s,t)&&await a("DELETE FROM"+j(t));else{const i=[],w=[],u=[],E=r(g(D(s,t)),(a=>a!=l));R(d,((a,t)=>{var e;y(i,`(?${e=c(E),",?".repeat(e)})`),y(w,t,...o(E,(t=>a[t]))),y(u,t)})),await a("INSERT INTO"+j(t)+"("+j(l)+n(o(E,(a=>e+j(a))))+")VALUES"+n(i,e)+"ON CONFLICT("+j(l)+")DO UPDATE SET"+n(o(E,(a=>j(a)+"=excluded."+j(a))),e),w),await a("DELETE FROM"+j(t)+H+j(l)+"NOT IN("+U(u)+")",u)}};return[async()=>F(s,N(await m(o(await a("SELECT name "+q+"list WHERE schema='main'AND type='table'AND name IN("+U(t)+")",t),(async({name:t})=>[t,N(o(await a("SELECT name,type "+q+"info(?)",[t]),(({name:a,type:t})=>[a,t])))])))),((a,t,e)=>{return M(s,t,F((c=I,v(n=s,o=t)||M(n,o,c()),D(n,o)),e,((a,t,e)=>{e!=D(a,t)&&M(a,t,e)}),((a,t)=>M(a,t))));var n,o,c}),((a,t)=>M(s,t))),async(t,e)=>{const s=l(t,e)?await a(x+j(t)+H+j(e)+"=?",["_"]):[];return i(s)?null:O(s[0],e)},async(a,t,e,s)=>await w(a,t,!0,!0,{[e]:s}),async(t,e)=>l(t,e)?N(r(o(await a(x+j(t)),(a=>[a[e],O({...a},e)])),(([a,t])=>!d(a)&&!b(t)))):{},w]},U=a=>n(o(a,(()=>"?")),e),V=JSON.parse,W=(a,t,e,s,n)=>{let o,c,i,r=0,l=0,w=0;const u=[],p=async a=>(2!=r&&(r=1,await m.schedule((async()=>{await a(),r=0}))),m),m={load:async(e,s)=>await p((async()=>{try{a.setContent(await t())}catch{a.setContent([e,s])}})),startAutoLoad:async(e={},n={})=>(m.stopAutoLoad(),await m.load(e,n),w=1,i=s((async(e,s)=>await p((async()=>{if(s)a.setTransactionChanges(s());else try{a.setContent(e?.()??await t())}catch{}})))),m),stopAutoLoad:()=>(w&&(n(i),i=void 0,w=0),m),save:async t=>(1!=r&&(r=2,await m.schedule((async()=>{try{await e(a.getContent,t)}catch{}r=0}))),m),startAutoSave:async()=>(await m.stopAutoSave().save(),o=a.addDidFinishTransactionListener(((a,t)=>{const[e,s]=t();b(e)&&b(s)||m.save((()=>[e,s]))})),m),stopAutoSave:()=>(E(o,a.delListener),m),schedule:async(...a)=>(y(u,...a),await(async()=>{if(!l){for(l=1;!d((a=u,c=a.shift()));)try{await c()}catch{}l=0}var a})(),m),getStore:()=>a,destroy:()=>m.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return f(m)},Y="store",z=(a,t,e,s,[n],o)=>{const[c,i,r]=J(t,o),l=W(a,(async()=>(await c(),V((await i(n,P)??{})[Y]))),(async a=>l.schedule(c,(async()=>{var t;await r(n,P,"_",{[Y]:(t=a(),JSON.stringify(t,((a,t)=>u(t,Map)?L.fromEntries([...t]):t)))})}))),e,s);return l},K=(a,t,e,s,[n,o,[c,i,l]],y)=>{const[w,u,E,p,v]=J(t,y);return W(a,(async()=>{await w();const a=await(async()=>N(r(await m($(n,(async([a,t],e)=>[a,await p(e,t)]))),(a=>!b(a[1])))))(),t=await(async()=>c?await u(l,P):{})();return b(a)&&d(t)?void 0:[a,t]}),(async a=>{const[t,e]=a();await w(),await(async a=>await m($(o,(async([t,e,s,n],o)=>await v(t,e,s,n,a[o])))))(t),await(async a=>i?await E(l,P,"_",a):null)(e)}),e,s)},G="json",Q="autoLoadIntervalSeconds",X="rowIdColumnName",Z="tableId",aa="tableName",ta={mode:G,[Q]:1},ea={load:0,save:0,[aa]:t+"_values"},sa=(a,t,e,s)=>{const n=I();return R(a,((a,o)=>{const c=l(S(C(t,p(a)?{[e]:a}:a)),0,_(t));d(c[0])||s(o,c[0])||M(n,o,c)})),n},na="pragma ",oa="data_version",ca="schema_version",ia=(a,e,s,n,o)=>{let c,i;const[r,y,w,u]=(a=>{const e=(a=>C(ta,p(a)?{storeTableName:a}:a??{}))(a),s=e[Q];if(e.mode==G){const{storeTableName:a=t}=e;return[1,s,[a],k(a)]}const{tables:{load:n={},save:o={}}={},values:c={}}=e,i=l(S(C(ea,c)),0,_(ea)),r=i[2],y=k(r);return[0,s,[sa(n,{[Z]:null,[X]:P},Z,(a=>B(y,a)&&a==r)),sa(o,{[aa]:null,[X]:P,deleteEmptyColumns:0,deleteEmptyTable:0},aa,((a,t)=>B(y,t)&&t==r)),i],y]})(e);return(r?z:K)(a,s,(a=>[setInterval((async()=>{try{const t=(await s(na+oa))[0][oa],e=(await s(na+ca))[0][ca];t==(c??=t)&&e==(i??=e)||(a(),c=t,i=e)}catch{}}),1e3*y),n((t=>u.has(t)?a():0))]),(([a,t])=>{clearInterval(a),c=i=null,o(t)}),w,A(u))},ra=(a,t,e,s)=>ia(a,s,(async(a,t=[])=>e.exec(a,{bind:t,rowMode:"object",returnValue:"resultRows"}).map((a=>({...a})))),(a=>t.capi.sqlite3_update_hook(e,((t,e,s,n)=>a(n)),0)),(()=>t.capi.sqlite3_update_hook(e,(()=>0),0)));export{ra as createSqliteWasmPersister};
1
+ const a=a=>typeof a,t="tinybase",e=",",s=a(""),n=(a,t)=>a.repeat(t),i=(a,t="")=>a.join(t),o=(a,t)=>a.map(t),c=a=>a.length,r=a=>0==c(a),l=(a,t)=>a.filter(t),w=(a,t,e)=>a.slice(t,e),y=(a,...t)=>a.push(...t),E=Promise,u=(a,t)=>a instanceof t,d=a=>null==a,p=(a,t,e)=>d(a)?e?.():t(a),v=t=>a(t)==s,T=async a=>E.all(a),m=(a,t)=>a?.has(t)??!1,A=a=>[...a?.values()??[]],L=(a,t)=>a?.delete(t),h=Object,R=h.keys,f=h.freeze,O=(a=[])=>h.fromEntries(a),N=(...a)=>h.assign({},...a),C=(a,t)=>o(h.entries(a),(([a,e])=>t(e,a))),S=a=>h.values(a),b=a=>c(R(a)),D=a=>(a=>u(a,h)&&a.constructor==h)(a)&&0==b(a),g=a=>new Map(a),I=a=>[...a?.keys()??[]],_=(a,t)=>a?.get(t),M=(a,t)=>o([...a?.entries()??[]],(([a,e])=>t(e,a))),F=(a,t,e)=>d(e)?(L(a,t),a):a?.set(t,e),$=(a,t,e,s=F)=>(C(t,((t,s)=>e(a,s,t))),((a,t)=>{((a,t)=>{a?.forEach(t)})(a,((a,e)=>t(e)))})(a,(e=>((a,t)=>!d(((a,t)=>p(a,(a=>a[t])))(a,t)))(t,e)?0:s(a,e))),a),P=a=>new Set(Array.isArray(a)||d(a)?a:[a]),j=(a,t)=>a?.add(t),k="_",B="_id",H=a=>`"${a.replace(/"/g,'""')}"`,W="FROM pragma_table_",x="WHERE",q=(a,t)=>{const s=g();return[async()=>$(s,O(await T(o(await a("SELECT name "+W+"list WHERE schema='main'AND type='table'AND name IN("+U(t)+")",t),(async({name:t})=>[t,O(o(await a("SELECT name,type "+W+"info(?)",[t]),(({name:a,type:t})=>[a,t])))])))),((a,t,e)=>{return F(s,t,$((o=g,m(n=s,i=t)||F(n,i,o()),_(n,i)),e,((a,t,e)=>{e!=_(a,t)&&F(a,t,e)}),((a,t)=>F(a,t))));var n,i,o}),((a,t)=>F(s,t))),async(t,e)=>((a,t)=>!d(_(_(s,a),t)))(t,e)?O(l(o(await a("SELECT*FROM"+H(t)),(a=>{return[a[e],(t={...a},s=e,delete t[s],t)];var t,s})),(([a,t])=>!d(a)&&!D(t)))):{},async(t,n,c,w,E,u=!1)=>{const p=P();C(c??{},(a=>o(R(a??{}),(a=>j(p,a)))));const v=A(p);if(!u&&E&&r(v)&&m(s,t))return await a("DROP TABLE"+H(t)),void F(s,t);if(r(v)||m(s,t)){const e=_(s,t),i=P(I(e));await T([...o(v,(async s=>{L(i,s)||(await a(`ALTER TABLE${H(t)}ADD${H(s)}`),F(e,s,""))})),...!u&&w?o(A(i),(async s=>{s!=n&&(await a(`ALTER TABLE${H(t)}DROP${H(s)}`),F(e,s))})):[]])}else await a(`CREATE TABLE${H(t)}(${H(n)} PRIMARY KEY ON CONFLICT REPLACE${i(o(v,(a=>e+H(a))))});`),F(s,t,g([[n,""],...o(v,(a=>[a,""]))]));if(u)d(c)?await a("DELETE FROM"+H(t)+"WHERE 1"):await T(C(c,(async(e,s)=>{d(e)?await a("DELETE FROM"+H(t)+x+H(n)+"=?",[s]):r(v)||await J(a,t,n,R(e),[s,...S(e)])})));else if(r(v))m(s,t)&&await a("DELETE FROM"+H(t)+"WHERE 1");else{const e=l(I(_(s,t)),(a=>a!=n)),i=[],r=[];C(c??{},((a,t)=>{y(i,t,...o(e,(t=>a?.[t]))),y(r,t)})),await J(a,t,n,e,i),await a("DELETE FROM"+H(t)+x+H(n)+"NOT IN("+U(r)+")",r)}}]},J=async(a,t,s,r,l)=>await a("INSERT INTO"+H(t)+"("+H(s)+i(o(r,(a=>e+H(a))))+")VALUES"+n(`,(?${n(",?",c(r))})`,c(l)/(c(r)+1)).substring(1)+"ON CONFLICT("+H(s)+")DO UPDATE SET"+i(o(r,(a=>H(a)+"=excluded."+H(a))),e),l),U=a=>i(o(a,(()=>"?")),e),V=JSON.parse,Y=(a,t,e,s,n)=>{let i,o,c,r=0,l=0,w=0;const E=[],u=async a=>(2!=r&&(r=1,await v.schedule((async()=>{await a(),r=0}))),v),v={load:async(e,s)=>await u((async()=>{try{a.setContent(await t())}catch{a.setContent([e,s])}})),startAutoLoad:async(e={},n={})=>(v.stopAutoLoad(),await v.load(e,n),w=1,c=s((async(e,s)=>await u((async()=>{if(s)a.setTransactionChanges(s());else try{a.setContent(e?.()??await t())}catch{}})))),v),stopAutoLoad:()=>(w&&(n(c),c=void 0,w=0),v),save:async t=>(1!=r&&(r=2,await v.schedule((async()=>{try{await e(a.getContent,t)}catch{}r=0}))),v),startAutoSave:async()=>(await v.stopAutoSave().save(),i=a.addDidFinishTransactionListener(((a,t)=>{const[e,s]=t();D(e)&&D(s)||v.save((()=>[e,s]))})),v),stopAutoSave:()=>(p(i,a.delListener),v),schedule:async(...a)=>(y(E,...a),await(async()=>{if(!l){for(l=1;!d((a=E,o=a.shift()));)try{await o()}catch{}l=0}var a})(),v),getStore:()=>a,destroy:()=>v.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return f(v)},z="store",K=(a,t,e,s,[n],i)=>{const[o,c,r]=q(t,i),l=Y(a,(async()=>(await o(),V((await c(n,B))[k]?.[z]))),(async a=>l.schedule(o,(async()=>{var t;await r(n,B,{[k]:{[z]:(t=a(),JSON.stringify(t,((a,t)=>u(t,Map)?h.fromEntries([...t]):t)))}},!0,!0)}))),e,s);return l},G=(a,t,e,s,[n,i,[o,c,r]],w)=>{const[y,E,u]=q(t,w),p=async(a,t)=>await T(M(i,(async([e,s,n,i],o)=>{const c=a[o];t&&void 0===c||await u(e,s,c,n,i,t)}))),v=async(a,t)=>c?await u(r,B,{[k]:a},!0,!0,t):null;return Y(a,(async()=>{await y();const a=await(async()=>O(l(await T(M(n,(async([a,t],e)=>[a,await E(e,t)]))),(a=>!D(a[1])))))(),t=await(async()=>o?(await E(r,B))[k]:{})();return D(a)&&d(t)?void 0:[a,t]}),(async(a,t)=>{if(await y(),d(t)){const[t,e]=a();await p(t),await v(e)}else{const[a,e]=t();await p(a,!0),await v(e,!0)}}),e,s)},Q="json",X="autoLoadIntervalSeconds",Z="rowIdColumnName",aa="tableId",ta="tableName",ea={mode:Q,[X]:1},sa={load:0,save:0,[ta]:t+"_values"},na=(a,t,e,s)=>{const n=g();return C(a,((a,i)=>{const o=w(S(N(t,v(a)?{[e]:a}:a)),0,b(t));d(o[0])||s(i,o[0])||F(n,i,o)})),n},ia="pragma ",oa="data_version",ca="schema_version",ra=(a,e,s,n,i,o)=>{let c,r;const[l,y,E,u]=(a=>{const e=(a=>N(ea,v(a)?{storeTableName:a}:a??{}))(a),s=e[X];if(e.mode==Q){const{storeTableName:a=t}=e;return[1,s,[a],P(a)]}const{tables:{load:n={},save:i={}}={},values:o={}}=e,c=w(S(N(sa,o)),0,b(sa)),r=c[2],l=P(r);return[0,s,[na(n,{[aa]:null,[Z]:B},aa,(a=>j(l,a)&&a==r)),na(i,{[ta]:null,[Z]:B,deleteEmptyColumns:0,deleteEmptyTable:0},ta,((a,t)=>j(l,t)&&t==r)),c],l]})(e);return(l?K:G)(a,o?async(a,t)=>(o(a,t),await s(a,t)):s,(a=>[setInterval((async()=>{try{const t=(await s(ia+oa))[0][oa],e=(await s(ia+ca))[0][ca];t==(c??=t)&&e==(r??=e)||(a(),c=t,r=e)}catch{}}),1e3*y),n((t=>u.has(t)?a():0))]),(([a,t])=>{clearInterval(a),c=r=null,i(t)}),E,A(u))},la=(a,t,e,s,n)=>ra(a,s,(async(a,t=[])=>e.exec(a,{bind:t,rowMode:"object",returnValue:"resultRows"}).map((a=>({...a})))),(a=>t.capi.sqlite3_update_hook(e,((t,e,s,n)=>a(n)),0)),(()=>t.capi.sqlite3_update_hook(e,(()=>0),0)),n);export{la as createSqliteWasmPersister};
@@ -1 +1 @@
1
- const a=a=>typeof a,t="tinybase",e=",",s=a(""),n=(a,t="")=>a.join(t),c=(a,t)=>a.map(t),o=a=>a.length,i=a=>0==o(a),r=(a,t)=>a.filter(t),l=(a,t,e)=>a.slice(t,e),y=(a,...t)=>a.push(...t),w=Promise,u=(a,t)=>a instanceof t,d=a=>null==a,E=(a,t,e)=>d(a)?e?.():t(a),m=t=>a(t)==s,v=async a=>w.all(a),A=(a,t)=>a?.has(t)??!1,T=a=>[...a?.values()??[]],p=(a,t)=>a?.delete(t),L=Object,h=L.keys,f=L.freeze,N=(a=[])=>L.fromEntries(a),C=(...a)=>L.assign({},...a),O=(a,t)=>(delete a[t],a),S=(a,t)=>c(L.entries(a),(([a,e])=>t(e,a))),R=a=>L.values(a),g=a=>o(h(a)),I=a=>(a=>u(a,L)&&a.constructor==L)(a)&&0==g(a),D=a=>new Map(a),b=a=>[...a?.keys()??[]],$=(a,t)=>a?.get(t),_=(a,t)=>c([...a?.entries()??[]],(([a,e])=>t(e,a))),F=(a,t,e)=>d(e)?(p(a,t),a):a?.set(t,e),M=(a,t,e,s=F)=>(S(t,((t,s)=>e(a,s,t))),((a,t)=>{((a,t)=>{a?.forEach(t)})(a,((a,e)=>t(e)))})(a,(e=>((a,t)=>!d(((a,t)=>E(a,(a=>a[t])))(a,t)))(t,e)?0:s(a,e))),a),P="_id",B=a=>`"${a.replace(/"/g,'""')}"`,j=a=>new Set(Array.isArray(a)||d(a)?a:[a]),k=(a,t)=>a?.add(t),x="SELECT*FROM",H="FROM pragma_table_",J="WHERE",U=(a,t)=>{const s=D(),l=(a,t)=>!d($($(s,a),t)),w=async(t,l,w,u,d)=>{const E=j();S(d??{},(a=>c(h(a),(a=>k(E,a)))));const m=T(E);if(i(m)&&A(s,t)&&u)return await a("DROP TABLE"+B(t)),void F(s,t);if(i(m)||A(s,t)){const e=$(s,t),n=j(b(e));await v([...c(m,(async s=>{p(n,s)||(await a(`ALTER TABLE${B(t)}ADD${B(s)}`),F(e,s,""))})),...w?c(T(n),(async s=>{s!=l&&(await a(`ALTER TABLE${B(t)}DROP${B(s)}`),F(e,s))})):[]])}else await a(`CREATE TABLE${B(t)}(${B(l)} PRIMARY KEY ON CONFLICT REPLACE${n(c(m,(a=>e+B(a))))});`),F(s,t,D([[l,""],...c(m,(a=>[a,""]))]));if(i(m))A(s,t)&&await a("DELETE FROM"+B(t));else{const i=[],w=[],u=[],E=r(b($(s,t)),(a=>a!=l));S(d,((a,t)=>{var e;y(i,`(?${e=o(E),",?".repeat(e)})`),y(w,t,...c(E,(t=>a[t]))),y(u,t)})),await a("INSERT INTO"+B(t)+"("+B(l)+n(c(E,(a=>e+B(a))))+")VALUES"+n(i,e)+"ON CONFLICT("+B(l)+")DO UPDATE SET"+n(c(E,(a=>B(a)+"=excluded."+B(a))),e),w),await a("DELETE FROM"+B(t)+J+B(l)+"NOT IN("+W(u)+")",u)}};return[async()=>M(s,N(await v(c(await a("SELECT name "+H+"list WHERE schema='main'AND type='table'AND name IN("+W(t)+")",t),(async({name:t})=>[t,N(c(await a("SELECT name,type "+H+"info(?)",[t]),(({name:a,type:t})=>[a,t])))])))),((a,t,e)=>{return F(s,t,M((o=D,A(n=s,c=t)||F(n,c,o()),$(n,c)),e,((a,t,e)=>{e!=$(a,t)&&F(a,t,e)}),((a,t)=>F(a,t))));var n,c,o}),((a,t)=>F(s,t))),async(t,e)=>{const s=l(t,e)?await a(x+B(t)+J+B(e)+"=?",["_"]):[];return i(s)?null:O(s[0],e)},async(a,t,e,s)=>await w(a,t,!0,!0,{[e]:s}),async(t,e)=>l(t,e)?N(r(c(await a(x+B(t)),(a=>[a[e],O({...a},e)])),(([a,t])=>!d(a)&&!I(t)))):{},w]},W=a=>n(c(a,(()=>"?")),e),Y=JSON.parse,z=(a,t,e,s,n)=>{let c,o,i,r=0,l=0,w=0;const u=[],m=async a=>(2!=r&&(r=1,await v.schedule((async()=>{await a(),r=0}))),v),v={load:async(e,s)=>await m((async()=>{try{a.setContent(await t())}catch{a.setContent([e,s])}})),startAutoLoad:async(e={},n={})=>(v.stopAutoLoad(),await v.load(e,n),w=1,i=s((async(e,s)=>await m((async()=>{if(s)a.setTransactionChanges(s());else try{a.setContent(e?.()??await t())}catch{}})))),v),stopAutoLoad:()=>(w&&(n(i),i=void 0,w=0),v),save:async t=>(1!=r&&(r=2,await v.schedule((async()=>{try{await e(a.getContent,t)}catch{}r=0}))),v),startAutoSave:async()=>(await v.stopAutoSave().save(),c=a.addDidFinishTransactionListener(((a,t)=>{const[e,s]=t();I(e)&&I(s)||v.save((()=>[e,s]))})),v),stopAutoSave:()=>(E(c,a.delListener),v),schedule:async(...a)=>(y(u,...a),await(async()=>{if(!l){for(l=1;!d((a=u,o=a.shift()));)try{await o()}catch{}l=0}var a})(),v),getStore:()=>a,destroy:()=>v.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return f(v)},K="store",V=(a,t,e,s,[n],c)=>{const[o,i,r]=U(t,c),l=z(a,(async()=>(await o(),Y((await i(n,P)??{})[K]))),(async a=>l.schedule(o,(async()=>{var t;await r(n,P,"_",{[K]:(t=a(),JSON.stringify(t,((a,t)=>u(t,Map)?L.fromEntries([...t]):t)))})}))),e,s);return l},q=(a,t,e,s,[n,c,[o,i,l]],y)=>{const[w,u,E,m,A]=U(t,y);return z(a,(async()=>{await w();const a=await(async()=>N(r(await v(_(n,(async([a,t],e)=>[a,await m(e,t)]))),(a=>!I(a[1])))))(),t=await(async()=>o?await u(l,P):{})();return I(a)&&d(t)?void 0:[a,t]}),(async a=>{const[t,e]=a();await w(),await(async a=>await v(_(c,(async([t,e,s,n],c)=>await A(t,e,s,n,a[c])))))(t),await(async a=>i?await E(l,P,"_",a):null)(e)}),e,s)},G="json",Q="autoLoadIntervalSeconds",X="rowIdColumnName",Z="tableId",aa="tableName",ta={mode:G,[Q]:1},ea={load:0,save:0,[aa]:t+"_values"},sa=(a,t,e,s)=>{const n=D();return S(a,((a,c)=>{const o=l(R(C(t,m(a)?{[e]:a}:a)),0,g(t));d(o[0])||s(c,o[0])||F(n,c,o)})),n},na="pragma ",ca="data_version",oa="schema_version",ia=(a,e,s,n,c)=>{let o,i;const[r,y,w,u]=(a=>{const e=(a=>C(ta,m(a)?{storeTableName:a}:a??{}))(a),s=e[Q];if(e.mode==G){const{storeTableName:a=t}=e;return[1,s,[a],j(a)]}const{tables:{load:n={},save:c={}}={},values:o={}}=e,i=l(R(C(ea,o)),0,g(ea)),r=i[2],y=j(r);return[0,s,[sa(n,{[Z]:null,[X]:P},Z,(a=>k(y,a)&&a==r)),sa(c,{[aa]:null,[X]:P,deleteEmptyColumns:0,deleteEmptyTable:0},aa,((a,t)=>k(y,t)&&t==r)),i],y]})(e);return(r?V:q)(a,s,(a=>[setInterval((async()=>{try{const t=(await s(na+ca))[0][ca],e=(await s(na+oa))[0][oa];t==(o??=t)&&e==(i??=e)||(a(),o=t,i=e)}catch{}}),1e3*y),n((t=>u.has(t)?a():0))]),(([a,t])=>{clearInterval(a),o=i=null,c(t)}),w,T(u))},ra="change",la=(a,t,e)=>ia(a,e,((a,e=[])=>new w(((s,n)=>t.all(a,e,((a,t)=>a?n(a):s(t.map((a=>({...a}))))))))),(a=>{const e=(t,e,s)=>a(s);return t.on(ra,e),e}),(a=>t.off(ra,a)));export{la as createSqlite3Persister};
1
+ const a=a=>typeof a,t="tinybase",e=",",s=a(""),n=(a,t)=>a.repeat(t),i=(a,t="")=>a.join(t),c=(a,t)=>a.map(t),o=a=>a.length,r=a=>0==o(a),l=(a,t)=>a.filter(t),w=(a,t,e)=>a.slice(t,e),y=(a,...t)=>a.push(...t),E=Promise,u=(a,t)=>a instanceof t,d=a=>null==a,v=(a,t,e)=>d(a)?e?.():t(a),T=t=>a(t)==s,m=async a=>E.all(a),A=(a,t)=>a?.has(t)??!1,L=a=>[...a?.values()??[]],p=(a,t)=>a?.delete(t),f=Object,h=f.keys,R=f.freeze,O=(a=[])=>f.fromEntries(a),N=(...a)=>f.assign({},...a),C=(a,t)=>c(f.entries(a),(([a,e])=>t(e,a))),S=a=>f.values(a),g=a=>o(h(a)),D=a=>(a=>u(a,f)&&a.constructor==f)(a)&&0==g(a),I=a=>new Map(a),b=a=>[...a?.keys()??[]],F=(a,t)=>a?.get(t),M=(a,t)=>c([...a?.entries()??[]],(([a,e])=>t(e,a))),$=(a,t,e)=>d(e)?(p(a,t),a):a?.set(t,e),_=(a,t,e,s=$)=>(C(t,((t,s)=>e(a,s,t))),((a,t)=>{((a,t)=>{a?.forEach(t)})(a,((a,e)=>t(e)))})(a,(e=>((a,t)=>!d(((a,t)=>v(a,(a=>a[t])))(a,t)))(t,e)?0:s(a,e))),a),P=a=>new Set(Array.isArray(a)||d(a)?a:[a]),B=(a,t)=>a?.add(t),H="_",W="_id",j=a=>`"${a.replace(/"/g,'""')}"`,k="FROM pragma_table_",x="WHERE",J=(a,t)=>{const s=I();return[async()=>_(s,O(await m(c(await a("SELECT name "+k+"list WHERE schema='main'AND type='table'AND name IN("+Y(t)+")",t),(async({name:t})=>[t,O(c(await a("SELECT name,type "+k+"info(?)",[t]),(({name:a,type:t})=>[a,t])))])))),((a,t,e)=>{return $(s,t,_((c=I,A(n=s,i=t)||$(n,i,c()),F(n,i)),e,((a,t,e)=>{e!=F(a,t)&&$(a,t,e)}),((a,t)=>$(a,t))));var n,i,c}),((a,t)=>$(s,t))),async(t,e)=>((a,t)=>!d(F(F(s,a),t)))(t,e)?O(l(c(await a("SELECT*FROM"+j(t)),(a=>{return[a[e],(t={...a},s=e,delete t[s],t)];var t,s})),(([a,t])=>!d(a)&&!D(t)))):{},async(t,n,o,w,E,u=!1)=>{const v=P();C(o??{},(a=>c(h(a??{}),(a=>B(v,a)))));const T=L(v);if(!u&&E&&r(T)&&A(s,t))return await a("DROP TABLE"+j(t)),void $(s,t);if(r(T)||A(s,t)){const e=F(s,t),i=P(b(e));await m([...c(T,(async s=>{p(i,s)||(await a(`ALTER TABLE${j(t)}ADD${j(s)}`),$(e,s,""))})),...!u&&w?c(L(i),(async s=>{s!=n&&(await a(`ALTER TABLE${j(t)}DROP${j(s)}`),$(e,s))})):[]])}else await a(`CREATE TABLE${j(t)}(${j(n)} PRIMARY KEY ON CONFLICT REPLACE${i(c(T,(a=>e+j(a))))});`),$(s,t,I([[n,""],...c(T,(a=>[a,""]))]));if(u)d(o)?await a("DELETE FROM"+j(t)+"WHERE 1"):await m(C(o,(async(e,s)=>{d(e)?await a("DELETE FROM"+j(t)+x+j(n)+"=?",[s]):r(T)||await U(a,t,n,h(e),[s,...S(e)])})));else if(r(T))A(s,t)&&await a("DELETE FROM"+j(t)+"WHERE 1");else{const e=l(b(F(s,t)),(a=>a!=n)),i=[],r=[];C(o??{},((a,t)=>{y(i,t,...c(e,(t=>a?.[t]))),y(r,t)})),await U(a,t,n,e,i),await a("DELETE FROM"+j(t)+x+j(n)+"NOT IN("+Y(r)+")",r)}}]},U=async(a,t,s,r,l)=>await a("INSERT INTO"+j(t)+"("+j(s)+i(c(r,(a=>e+j(a))))+")VALUES"+n(`,(?${n(",?",o(r))})`,o(l)/(o(r)+1)).substring(1)+"ON CONFLICT("+j(s)+")DO UPDATE SET"+i(c(r,(a=>j(a)+"=excluded."+j(a))),e),l),Y=a=>i(c(a,(()=>"?")),e),z=JSON.parse,K=(a,t,e,s,n)=>{let i,c,o,r=0,l=0,w=0;const E=[],u=async a=>(2!=r&&(r=1,await T.schedule((async()=>{await a(),r=0}))),T),T={load:async(e,s)=>await u((async()=>{try{a.setContent(await t())}catch{a.setContent([e,s])}})),startAutoLoad:async(e={},n={})=>(T.stopAutoLoad(),await T.load(e,n),w=1,o=s((async(e,s)=>await u((async()=>{if(s)a.setTransactionChanges(s());else try{a.setContent(e?.()??await t())}catch{}})))),T),stopAutoLoad:()=>(w&&(n(o),o=void 0,w=0),T),save:async t=>(1!=r&&(r=2,await T.schedule((async()=>{try{await e(a.getContent,t)}catch{}r=0}))),T),startAutoSave:async()=>(await T.stopAutoSave().save(),i=a.addDidFinishTransactionListener(((a,t)=>{const[e,s]=t();D(e)&&D(s)||T.save((()=>[e,s]))})),T),stopAutoSave:()=>(v(i,a.delListener),T),schedule:async(...a)=>(y(E,...a),await(async()=>{if(!l){for(l=1;!d((a=E,c=a.shift()));)try{await c()}catch{}l=0}var a})(),T),getStore:()=>a,destroy:()=>T.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return R(T)},V="store",q=(a,t,e,s,[n],i)=>{const[c,o,r]=J(t,i),l=K(a,(async()=>(await c(),z((await o(n,W))[H]?.[V]))),(async a=>l.schedule(c,(async()=>{var t;await r(n,W,{[H]:{[V]:(t=a(),JSON.stringify(t,((a,t)=>u(t,Map)?f.fromEntries([...t]):t)))}},!0,!0)}))),e,s);return l},G=(a,t,e,s,[n,i,[c,o,r]],w)=>{const[y,E,u]=J(t,w),v=async(a,t)=>await m(M(i,(async([e,s,n,i],c)=>{const o=a[c];t&&void 0===o||await u(e,s,o,n,i,t)}))),T=async(a,t)=>o?await u(r,W,{[H]:a},!0,!0,t):null;return K(a,(async()=>{await y();const a=await(async()=>O(l(await m(M(n,(async([a,t],e)=>[a,await E(e,t)]))),(a=>!D(a[1])))))(),t=await(async()=>c?(await E(r,W))[H]:{})();return D(a)&&d(t)?void 0:[a,t]}),(async(a,t)=>{if(await y(),d(t)){const[t,e]=a();await v(t),await T(e)}else{const[a,e]=t();await v(a,!0),await T(e,!0)}}),e,s)},Q="json",X="autoLoadIntervalSeconds",Z="rowIdColumnName",aa="tableId",ta="tableName",ea={mode:Q,[X]:1},sa={load:0,save:0,[ta]:t+"_values"},na=(a,t,e,s)=>{const n=I();return C(a,((a,i)=>{const c=w(S(N(t,T(a)?{[e]:a}:a)),0,g(t));d(c[0])||s(i,c[0])||$(n,i,c)})),n},ia="pragma ",ca="data_version",oa="schema_version",ra=(a,e,s,n,i,c)=>{let o,r;const[l,y,E,u]=(a=>{const e=(a=>N(ea,T(a)?{storeTableName:a}:a??{}))(a),s=e[X];if(e.mode==Q){const{storeTableName:a=t}=e;return[1,s,[a],P(a)]}const{tables:{load:n={},save:i={}}={},values:c={}}=e,o=w(S(N(sa,c)),0,g(sa)),r=o[2],l=P(r);return[0,s,[na(n,{[aa]:null,[Z]:W},aa,(a=>B(l,a)&&a==r)),na(i,{[ta]:null,[Z]:W,deleteEmptyColumns:0,deleteEmptyTable:0},ta,((a,t)=>B(l,t)&&t==r)),o],l]})(e);return(l?q:G)(a,c?async(a,t)=>(c(a,t),await s(a,t)):s,(a=>[setInterval((async()=>{try{const t=(await s(ia+ca))[0][ca],e=(await s(ia+oa))[0][oa];t==(o??=t)&&e==(r??=e)||(a(),o=t,r=e)}catch{}}),1e3*y),n((t=>u.has(t)?a():0))]),(([a,t])=>{clearInterval(a),o=r=null,i(t)}),E,L(u))},la="change",wa=(a,t,e,s)=>ra(a,e,(async(a,e=[])=>{return await(s=(s,n)=>t.all(a,e,((a,t)=>a?n(a):s(t.map((a=>({...a})))))),new E(s));var s}),(a=>{const e=(t,e,s)=>a(s);return t.on(la,e),e}),(a=>t.off(la,a)),s);export{wa as createSqlite3Persister};
@@ -0,0 +1,118 @@
1
+ /**
2
+ * The persister-expo-sqlite module of the TinyBase project lets you save and
3
+ * load Store data to and from a local Expo-SQLite database (in an appropriate
4
+ * React Native environment).
5
+ *
6
+ * Note that this Persister is currently experimental as Expo themselves iterate
7
+ * on the underlying database library API.
8
+ * @see Persisting Data guide
9
+ * @packageDocumentation
10
+ * @module persister-expo-sqlite
11
+ */
12
+
13
+ import {DatabasePersisterConfig, Persister} from '../persisters';
14
+ import {SQLiteDatabase} from 'expo-sqlite';
15
+ import {Store} from '../store';
16
+
17
+ /**
18
+ * The createExpoSqlitePersister function creates a Persister object that can
19
+ * persist the Store to a local Expo-SQLite database (in an appropriate React
20
+ * Native environment).
21
+ *
22
+ * Note that this Persister is currently experimental as Expo themselves iterate
23
+ * on the underlying database library API.
24
+ *
25
+ * As well as providing a reference to the Store to persist, you must provide a
26
+ * `db` parameter which identifies the database instance.
27
+ *
28
+ * A database Persister uses one of two modes: either a JSON serialization of
29
+ * the whole Store stored in a single row of a table (the default), or a tabular
30
+ * mapping of Table Ids to database table names and vice-versa).
31
+ *
32
+ * The third argument is a DatabasePersisterConfig object that configures which
33
+ * of those modes to use, and settings for each. If the third argument is simply
34
+ * a string, it is used as the `storeTableName` property of the JSON
35
+ * serialization.
36
+ *
37
+ * See the documentation for the DpcJson and DpcTabular types for more
38
+ * information on how both of those modes can be configured.
39
+ * @param store The Store to persist.
40
+ * @param db The database instance that was returned from
41
+ * `SQLite.openDatabase(...)`.
42
+ * @param configOrStoreTableName A DatabasePersisterConfig to configure the
43
+ * persistence mode (or a string to set the `storeTableName` property of the
44
+ * JSON serialization).
45
+ * @returns A reference to the new Persister object.
46
+ * @example
47
+ * This example creates a Persister object and persists the Store to a local
48
+ * SQLite database as a JSON serialization into the `my_tinybase` table. It
49
+ * makes a change to the database directly and then reloads it back into the
50
+ * Store.
51
+ *
52
+ * ```js yolo
53
+ * const db = SQLite.openDatabase('my.db');
54
+ * const store = createStore().setTables({pets: {fido: {species: 'dog'}}});
55
+ * const persister = createExpoSqlitePersister(store, db, 'my_tinybase');
56
+ *
57
+ * await persister.save();
58
+ * // Store will be saved to the database.
59
+ *
60
+ * console.log(
61
+ * await new Promise((resolve) =>
62
+ * db.all('SELECT * FROM my_tinybase;', (_, rows) => resolve(rows)),
63
+ * ),
64
+ * );
65
+ * // -> [{_id: '_', store: '[{"pets":{"fido":{"species":"dog"}}},{}]'}]
66
+ *
67
+ * await new Promise((resolve) =>
68
+ * db.all(
69
+ * 'UPDATE my_tinybase SET store = ' +
70
+ * `'[{"pets":{"felix":{"species":"cat"}}},{}]' WHERE _id = '_';`,
71
+ * resolve,
72
+ * ),
73
+ * );
74
+ * await persister.load();
75
+ * console.log(store.getTables());
76
+ * // -> {pets: {felix: {species: 'cat'}}}
77
+ *
78
+ * persister.destroy();
79
+ * ```
80
+ * @example
81
+ * This example creates a Persister object and persists the Store to a local
82
+ * SQLite database with tabular mapping.
83
+ *
84
+ * ```js yolo
85
+ * const db = SQLite.openDatabase('my.db');
86
+ * const store = createStore().setTables({pets: {fido: {species: 'dog'}}});
87
+ * const persister = createExpoSqlitePersister(store, db, {
88
+ * mode: 'tabular',
89
+ * tables: {load: {pets: 'pets'}, save: {pets: 'pets'}},
90
+ * });
91
+ *
92
+ * await persister.save();
93
+ * console.log(
94
+ * await new Promise((resolve) =>
95
+ * db.all('SELECT * FROM pets;', (_, rows) => resolve(rows)),
96
+ * ),
97
+ * );
98
+ * // -> [{_id: 'fido', species: 'dog'}]
99
+ *
100
+ * await new Promise((resolve) =>
101
+ * db.all(
102
+ * `INSERT INTO pets (_id, species) VALUES ('felix', 'cat')`,
103
+ * resolve,
104
+ * ),
105
+ * );
106
+ * await persister.load();
107
+ * console.log(store.getTables());
108
+ * // -> {pets: {fido: {species: 'dog'}, felix: {species: 'cat'}}}
109
+ *
110
+ * persister.destroy();
111
+ * ```
112
+ * @category Creation
113
+ */
114
+ export function createExpoSqlitePersister(
115
+ store: Store,
116
+ db: SQLiteDatabase,
117
+ configOrStoreTableName?: DatabasePersisterConfig | string,
118
+ ): Persister;
@@ -392,6 +392,13 @@ export type DpcTabularLoad = {
392
392
  * enable the `deleteEmptyColumns` or `deleteEmptyTable` settings, you can
393
393
  * simply provide the name of the database table instead of the whole object.
394
394
  *
395
+ * `deleteEmptyColumns` and `deleteEmptyTable` only have a guaranteed effect
396
+ * when an explicit call is made to the Persister's save method. Columns and
397
+ * tables will not necessarily be removed when the Persister is incrementally
398
+ * 'autoSaving', due to performance reasons. If you want to be sure that your
399
+ * database table matches a TinyBase Table without any extraneous columns,
400
+ * simply call the save method at an idle moment.
401
+ *
395
402
  * The 'Dpc' prefix indicates that this type is used within the
396
403
  * DatabasePersisterConfig type.
397
404
  * @example
@@ -0,0 +1,128 @@
1
+ /**
2
+ * The persister-expo-sqlite module of the TinyBase project lets you save and
3
+ * load Store data to and from a local Expo-SQLite database (in an appropriate
4
+ * React Native environment).
5
+ *
6
+ * Note that this Persister is currently experimental as Expo themselves iterate
7
+ * on the underlying database library API.
8
+ * @see Persisting Data guide
9
+ * @packageDocumentation
10
+ * @module persister-expo-sqlite
11
+ */
12
+
13
+ import {DatabasePersisterConfig, Persister} from '../persisters';
14
+ import {OptionalSchemas, Store} from '../store';
15
+ import {SQLiteDatabase} from 'expo-sqlite';
16
+
17
+ /**
18
+ * The createExpoSqlitePersister function creates a Persister object that can
19
+ * persist the Store to a local Expo-SQLite database (in an appropriate React
20
+ * Native environment).
21
+ *
22
+ * This has schema-based typing. The following is a simplified representation:
23
+ *
24
+ * ```ts override
25
+ * createExpoSqlitePersister(
26
+ * store: Store,
27
+ * db: SQLiteDatabase,
28
+ * configOrStoreTableName?: DatabasePersisterConfig | string,
29
+ * ): Persister;
30
+ * ```
31
+ *
32
+ * Note that this Persister is currently experimental as Expo themselves iterate
33
+ * on the underlying database library API.
34
+ *
35
+ * As well as providing a reference to the Store to persist, you must provide a
36
+ * `db` parameter which identifies the database instance.
37
+ *
38
+ * A database Persister uses one of two modes: either a JSON serialization of
39
+ * the whole Store stored in a single row of a table (the default), or a tabular
40
+ * mapping of Table Ids to database table names and vice-versa).
41
+ *
42
+ * The third argument is a DatabasePersisterConfig object that configures which
43
+ * of those modes to use, and settings for each. If the third argument is simply
44
+ * a string, it is used as the `storeTableName` property of the JSON
45
+ * serialization.
46
+ *
47
+ * See the documentation for the DpcJson and DpcTabular types for more
48
+ * information on how both of those modes can be configured.
49
+ * @param store The Store to persist.
50
+ * @param db The database instance that was returned from
51
+ * `SQLite.openDatabase(...)`.
52
+ * @param configOrStoreTableName A DatabasePersisterConfig to configure the
53
+ * persistence mode (or a string to set the `storeTableName` property of the
54
+ * JSON serialization).
55
+ * @returns A reference to the new Persister object.
56
+ * @example
57
+ * This example creates a Persister object and persists the Store to a local
58
+ * SQLite database as a JSON serialization into the `my_tinybase` table. It
59
+ * makes a change to the database directly and then reloads it back into the
60
+ * Store.
61
+ *
62
+ * ```js yolo
63
+ * const db = SQLite.openDatabase('my.db');
64
+ * const store = createStore().setTables({pets: {fido: {species: 'dog'}}});
65
+ * const persister = createExpoSqlitePersister(store, db, 'my_tinybase');
66
+ *
67
+ * await persister.save();
68
+ * // Store will be saved to the database.
69
+ *
70
+ * console.log(
71
+ * await new Promise((resolve) =>
72
+ * db.all('SELECT * FROM my_tinybase;', (_, rows) => resolve(rows)),
73
+ * ),
74
+ * );
75
+ * // -> [{_id: '_', store: '[{"pets":{"fido":{"species":"dog"}}},{}]'}]
76
+ *
77
+ * await new Promise((resolve) =>
78
+ * db.all(
79
+ * 'UPDATE my_tinybase SET store = ' +
80
+ * `'[{"pets":{"felix":{"species":"cat"}}},{}]' WHERE _id = '_';`,
81
+ * resolve,
82
+ * ),
83
+ * );
84
+ * await persister.load();
85
+ * console.log(store.getTables());
86
+ * // -> {pets: {felix: {species: 'cat'}}}
87
+ *
88
+ * persister.destroy();
89
+ * ```
90
+ * @example
91
+ * This example creates a Persister object and persists the Store to a local
92
+ * SQLite database with tabular mapping.
93
+ *
94
+ * ```js yolo
95
+ * const db = SQLite.openDatabase('my.db');
96
+ * const store = createStore().setTables({pets: {fido: {species: 'dog'}}});
97
+ * const persister = createExpoSqlitePersister(store, db, {
98
+ * mode: 'tabular',
99
+ * tables: {load: {pets: 'pets'}, save: {pets: 'pets'}},
100
+ * });
101
+ *
102
+ * await persister.save();
103
+ * console.log(
104
+ * await new Promise((resolve) =>
105
+ * db.all('SELECT * FROM pets;', (_, rows) => resolve(rows)),
106
+ * ),
107
+ * );
108
+ * // -> [{_id: 'fido', species: 'dog'}]
109
+ *
110
+ * await new Promise((resolve) =>
111
+ * db.all(
112
+ * `INSERT INTO pets (_id, species) VALUES ('felix', 'cat')`,
113
+ * resolve,
114
+ * ),
115
+ * );
116
+ * await persister.load();
117
+ * console.log(store.getTables());
118
+ * // -> {pets: {fido: {species: 'dog'}, felix: {species: 'cat'}}}
119
+ *
120
+ * persister.destroy();
121
+ * ```
122
+ * @category Creation
123
+ */
124
+ export function createExpoSqlitePersister<Schemas extends OptionalSchemas>(
125
+ store: Store<Schemas>,
126
+ db: SQLiteDatabase,
127
+ configOrStoreTableName?: DatabasePersisterConfig<Schemas> | string,
128
+ ): Persister<Schemas>;
@@ -416,6 +416,13 @@ export type DpcTabularLoad<Schema extends OptionalTablesSchema> = {
416
416
  * enable the `deleteEmptyColumns` or `deleteEmptyTable` settings, you can
417
417
  * simply provide the name of the database table instead of the whole object.
418
418
  *
419
+ * `deleteEmptyColumns` and `deleteEmptyTable` only have a guaranteed effect
420
+ * when an explicit call is made to the Persister's save method. Columns and
421
+ * tables will not necessarily be removed when the Persister is incrementally
422
+ * 'autoSaving', due to performance reasons. If you want to be sure that your
423
+ * database table matches a TinyBase Table without any extraneous columns,
424
+ * simply call the save method at an idle moment.
425
+ *
419
426
  * The 'Dpc' prefix indicates that this type is used within the
420
427
  * DatabasePersisterConfig type.
421
428
  * @example
@@ -1 +1 @@
1
- var a,t;a=this,t=function(a){"use strict";const t=a=>typeof a,e="tinybase",s=",",n=t(""),i=(a,t="")=>a.join(t),o=(a,t)=>a.map(t),c=a=>a.length,r=a=>0==c(a),l=(a,t)=>a.filter(t),y=(a,t,e)=>a.slice(t,e),w=(a,...t)=>a.push(...t),d=Promise,u=(a,t)=>a instanceof t,E=a=>null==a,f=(a,t,e)=>E(a)?e?.():t(a),p=a=>t(a)==n,m=async a=>d.all(a),T=(a,t)=>a?.has(t)??!1,v=a=>[...a?.values()??[]],A=(a,t)=>a?.delete(t),h=Object,L=h.keys,C=h.freeze,S=(a=[])=>h.fromEntries(a),N=(...a)=>h.assign({},...a),O=(a,t)=>(delete a[t],a),R=(a,t)=>o(h.entries(a),(([a,e])=>t(e,a))),b=a=>h.values(a),g=a=>c(L(a)),I=a=>(a=>u(a,h)&&a.constructor==h)(a)&&0==g(a),D=a=>new Map(a),$=a=>[...a?.keys()??[]],_=(a,t)=>a?.get(t),P=(a,t)=>o([...a?.entries()??[]],(([a,e])=>t(e,a))),F=(a,t,e)=>E(e)?(A(a,t),a):a?.set(t,e),M=(a,t,e,s=F)=>(R(t,((t,s)=>e(a,s,t))),((a,t)=>{((a,t)=>{a?.forEach(t)})(a,((a,e)=>t(e)))})(a,(e=>((a,t)=>!E(((a,t)=>f(a,(a=>a[t])))(a,t)))(t,e)?0:s(a,e))),a),x="_id",B=a=>`"${a.replace(/"/g,'""')}"`,j=a=>new Set(Array.isArray(a)||E(a)?a:[a]),W=(a,t)=>a?.add(t),U="SELECT*FROM",k="FROM pragma_table_",q="WHERE",H=(a,t)=>{const e=D(),n=(a,t)=>!E(_(_(e,a),t)),y=async(t,n,y,d,u)=>{const E=j();R(u??{},(a=>o(L(a),(a=>W(E,a)))));const f=v(E);if(r(f)&&T(e,t)&&d)return await a("DROP TABLE"+B(t)),void F(e,t);if(r(f)||T(e,t)){const s=_(e,t),i=j($(s));await m([...o(f,(async e=>{A(i,e)||(await a(`ALTER TABLE${B(t)}ADD${B(e)}`),F(s,e,""))})),...y?o(v(i),(async e=>{e!=n&&(await a(`ALTER TABLE${B(t)}DROP${B(e)}`),F(s,e))})):[]])}else await a(`CREATE TABLE${B(t)}(${B(n)} PRIMARY KEY ON CONFLICT REPLACE${i(o(f,(a=>s+B(a))))});`),F(e,t,D([[n,""],...o(f,(a=>[a,""]))]));if(r(f))T(e,t)&&await a("DELETE FROM"+B(t));else{const r=[],y=[],d=[],E=l($(_(e,t)),(a=>a!=n));R(u,((a,t)=>{var e;w(r,`(?${e=c(E),",?".repeat(e)})`),w(y,t,...o(E,(t=>a[t]))),w(d,t)})),await a("INSERT INTO"+B(t)+"("+B(n)+i(o(E,(a=>s+B(a))))+")VALUES"+i(r,s)+"ON CONFLICT("+B(n)+")DO UPDATE SET"+i(o(E,(a=>B(a)+"=excluded."+B(a))),s),y),await a("DELETE FROM"+B(t)+q+B(n)+"NOT IN("+J(d)+")",d)}};return[async()=>M(e,S(await m(o(await a("SELECT name "+k+"list WHERE schema='main'AND type='table'AND name IN("+J(t)+")",t),(async({name:t})=>[t,S(o(await a("SELECT name,type "+k+"info(?)",[t]),(({name:a,type:t})=>[a,t])))])))),((a,t,s)=>{return F(e,t,M((o=D,T(n=e,i=t)||F(n,i,o()),_(n,i)),s,((a,t,e)=>{e!=_(a,t)&&F(a,t,e)}),((a,t)=>F(a,t))));var n,i,o}),((a,t)=>F(e,t))),async(t,e)=>{const s=n(t,e)?await a(U+B(t)+q+B(e)+"=?",["_"]):[];return r(s)?null:O(s[0],e)},async(a,t,e,s)=>await y(a,t,!0,!0,{[e]:s}),async(t,e)=>n(t,e)?S(l(o(await a(U+B(t)),(a=>[a[e],O({...a},e)])),(([a,t])=>!E(a)&&!I(t)))):{},y]},J=a=>i(o(a,(()=>"?")),s),Y=JSON.parse,z=(a,t,e,s,n)=>{let i,o,c,r=0,l=0,y=0;const d=[],u=async a=>(2!=r&&(r=1,await p.schedule((async()=>{await a(),r=0}))),p),p={load:async(e,s)=>await u((async()=>{try{a.setContent(await t())}catch{a.setContent([e,s])}})),startAutoLoad:async(e={},n={})=>(p.stopAutoLoad(),await p.load(e,n),y=1,c=s((async(e,s)=>await u((async()=>{if(s)a.setTransactionChanges(s());else try{a.setContent(e?.()??await t())}catch{}})))),p),stopAutoLoad:()=>(y&&(n(c),c=void 0,y=0),p),save:async t=>(1!=r&&(r=2,await p.schedule((async()=>{try{await e(a.getContent,t)}catch{}r=0}))),p),startAutoSave:async()=>(await p.stopAutoSave().save(),i=a.addDidFinishTransactionListener(((a,t)=>{const[e,s]=t();I(e)&&I(s)||p.save((()=>[e,s]))})),p),stopAutoSave:()=>(f(i,a.delListener),p),schedule:async(...a)=>(w(d,...a),await(async()=>{if(!l){for(l=1;!E((a=d,o=a.shift()));)try{await o()}catch{}l=0}var a})(),p),getStore:()=>a,destroy:()=>p.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return C(p)},K="store",V=(a,t,e,s,[n],i)=>{const[o,c,r]=H(t,i),l=z(a,(async()=>(await o(),Y((await c(n,x)??{})[K]))),(async a=>l.schedule(o,(async()=>{var t;await r(n,x,"_",{[K]:(t=a(),JSON.stringify(t,((a,t)=>u(t,Map)?h.fromEntries([...t]):t)))})}))),e,s);return l},G=(a,t,e,s,[n,i,[o,c,r]],y)=>{const[w,d,u,f,p]=H(t,y);return z(a,(async()=>{await w();const a=await(async()=>S(l(await m(P(n,(async([a,t],e)=>[a,await f(e,t)]))),(a=>!I(a[1])))))(),t=await(async()=>o?await d(r,x):{})();return I(a)&&E(t)?void 0:[a,t]}),(async a=>{const[t,e]=a();await w(),await(async a=>await m(P(i,(async([t,e,s,n],i)=>await p(t,e,s,n,a[i])))))(t),await(async a=>c?await u(r,x,"_",a):null)(e)}),e,s)},Q="json",X="autoLoadIntervalSeconds",Z="rowIdColumnName",aa="tableId",ta="tableName",ea={mode:Q,[X]:1},sa={load:0,save:0,[ta]:e+"_values"},na=(a,t,e,s)=>{const n=D();return R(a,((a,i)=>{const o=y(b(N(t,p(a)?{[e]:a}:a)),0,g(t));E(o[0])||s(i,o[0])||F(n,i,o)})),n},ia="pragma ",oa="data_version",ca="schema_version",ra=(a,t,s,n,i)=>{let o,c;const[r,l,w,d]=(a=>{const t=(a=>N(ea,p(a)?{storeTableName:a}:a??{}))(a),s=t[X];if(t.mode==Q){const{storeTableName:a=e}=t;return[1,s,[a],j(a)]}const{tables:{load:n={},save:i={}}={},values:o={}}=t,c=y(b(N(sa,o)),0,g(sa)),r=c[2],l=j(r);return[0,s,[na(n,{[aa]:null,[Z]:x},aa,(a=>W(l,a)&&a==r)),na(i,{[ta]:null,[Z]:x,deleteEmptyColumns:0,deleteEmptyTable:0},ta,((a,t)=>W(l,t)&&t==r)),c],l]})(t);return(r?V:G)(a,s,(a=>[setInterval((async()=>{try{const t=(await s(ia+oa))[0][oa],e=(await s(ia+ca))[0][ca];t==(o??=t)&&e==(c??=e)||(a(),o=t,c=e)}catch{}}),1e3*l),n((t=>d.has(t)?a():0))]),(([a,t])=>{clearInterval(a),o=c=null,i(t)}),w,v(d))};a.createCrSqliteWasmPersister=(a,t,e)=>ra(a,e,(async(a,e=[])=>await t.execO(a,e)),(a=>t.onUpdate(((t,e,s)=>a(s)))),(a=>a()))},"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((a="undefined"!=typeof globalThis?globalThis:a||self).TinyBasePersisterCrSqliteWasm={});
1
+ var a,t;a=this,t=function(a){"use strict";const t=a=>typeof a,e="tinybase",s=",",n=t(""),i=(a,t)=>a.repeat(t),o=(a,t="")=>a.join(t),c=(a,t)=>a.map(t),r=a=>a.length,l=a=>0==r(a),y=(a,t)=>a.filter(t),w=(a,t,e)=>a.slice(t,e),d=(a,...t)=>a.push(...t),u=Promise,E=(a,t)=>a instanceof t,f=a=>null==a,p=(a,t,e)=>f(a)?e?.():t(a),T=a=>t(a)==n,m=async a=>u.all(a),v=(a,t)=>a?.has(t)??!1,A=a=>[...a?.values()??[]],L=(a,t)=>a?.delete(t),h=Object,O=h.keys,R=h.freeze,C=(a=[])=>h.fromEntries(a),S=(...a)=>h.assign({},...a),N=(a,t)=>c(h.entries(a),(([a,e])=>t(e,a))),b=a=>h.values(a),g=a=>r(O(a)),D=a=>(a=>E(a,h)&&a.constructor==h)(a)&&0==g(a),I=a=>new Map(a),F=a=>[...a?.keys()??[]],M=(a,t)=>a?.get(t),$=(a,t)=>c([...a?.entries()??[]],(([a,e])=>t(e,a))),P=(a,t,e)=>f(e)?(L(a,t),a):a?.set(t,e),_=(a,t,e,s=P)=>(N(t,((t,s)=>e(a,s,t))),((a,t)=>{((a,t)=>{a?.forEach(t)})(a,((a,e)=>t(e)))})(a,(e=>((a,t)=>!f(((a,t)=>p(a,(a=>a[t])))(a,t)))(t,e)?0:s(a,e))),a),W=a=>new Set(Array.isArray(a)||f(a)?a:[a]),x=(a,t)=>a?.add(t),B="_",j="_id",H=a=>`"${a.replace(/"/g,'""')}"`,U="FROM pragma_table_",k="WHERE",q=(a,t)=>{const e=I();return[async()=>_(e,C(await m(c(await a("SELECT name "+U+"list WHERE schema='main'AND type='table'AND name IN("+Y(t)+")",t),(async({name:t})=>[t,C(c(await a("SELECT name,type "+U+"info(?)",[t]),(({name:a,type:t})=>[a,t])))])))),((a,t,s)=>{return P(e,t,_((o=I,v(n=e,i=t)||P(n,i,o()),M(n,i)),s,((a,t,e)=>{e!=M(a,t)&&P(a,t,e)}),((a,t)=>P(a,t))));var n,i,o}),((a,t)=>P(e,t))),async(t,s)=>((a,t)=>!f(M(M(e,a),t)))(t,s)?C(y(c(await a("SELECT*FROM"+H(t)),(a=>{return[a[s],(t={...a},e=s,delete t[e],t)];var t,e})),(([a,t])=>!f(a)&&!D(t)))):{},async(t,n,i,r,w,u=!1)=>{const E=W();N(i??{},(a=>c(O(a??{}),(a=>x(E,a)))));const p=A(E);if(!u&&w&&l(p)&&v(e,t))return await a("DROP TABLE"+H(t)),void P(e,t);if(l(p)||v(e,t)){const s=M(e,t),i=W(F(s));await m([...c(p,(async e=>{L(i,e)||(await a(`ALTER TABLE${H(t)}ADD${H(e)}`),P(s,e,""))})),...!u&&r?c(A(i),(async e=>{e!=n&&(await a(`ALTER TABLE${H(t)}DROP${H(e)}`),P(s,e))})):[]])}else await a(`CREATE TABLE${H(t)}(${H(n)} PRIMARY KEY ON CONFLICT REPLACE${o(c(p,(a=>s+H(a))))});`),P(e,t,I([[n,""],...c(p,(a=>[a,""]))]));if(u)f(i)?await a("DELETE FROM"+H(t)+"WHERE 1"):await m(N(i,(async(e,s)=>{f(e)?await a("DELETE FROM"+H(t)+k+H(n)+"=?",[s]):l(p)||await J(a,t,n,O(e),[s,...b(e)])})));else if(l(p))v(e,t)&&await a("DELETE FROM"+H(t)+"WHERE 1");else{const s=y(F(M(e,t)),(a=>a!=n)),o=[],r=[];N(i??{},((a,t)=>{d(o,t,...c(s,(t=>a?.[t]))),d(r,t)})),await J(a,t,n,s,o),await a("DELETE FROM"+H(t)+k+H(n)+"NOT IN("+Y(r)+")",r)}}]},J=async(a,t,e,n,l)=>await a("INSERT INTO"+H(t)+"("+H(e)+o(c(n,(a=>s+H(a))))+")VALUES"+i(`,(?${i(",?",r(n))})`,r(l)/(r(n)+1)).substring(1)+"ON CONFLICT("+H(e)+")DO UPDATE SET"+o(c(n,(a=>H(a)+"=excluded."+H(a))),s),l),Y=a=>o(c(a,(()=>"?")),s),z=JSON.parse,K=(a,t,e,s,n)=>{let i,o,c,r=0,l=0,y=0;const w=[],u=async a=>(2!=r&&(r=1,await E.schedule((async()=>{await a(),r=0}))),E),E={load:async(e,s)=>await u((async()=>{try{a.setContent(await t())}catch{a.setContent([e,s])}})),startAutoLoad:async(e={},n={})=>(E.stopAutoLoad(),await E.load(e,n),y=1,c=s((async(e,s)=>await u((async()=>{if(s)a.setTransactionChanges(s());else try{a.setContent(e?.()??await t())}catch{}})))),E),stopAutoLoad:()=>(y&&(n(c),c=void 0,y=0),E),save:async t=>(1!=r&&(r=2,await E.schedule((async()=>{try{await e(a.getContent,t)}catch{}r=0}))),E),startAutoSave:async()=>(await E.stopAutoSave().save(),i=a.addDidFinishTransactionListener(((a,t)=>{const[e,s]=t();D(e)&&D(s)||E.save((()=>[e,s]))})),E),stopAutoSave:()=>(p(i,a.delListener),E),schedule:async(...a)=>(d(w,...a),await(async()=>{if(!l){for(l=1;!f((a=w,o=a.shift()));)try{await o()}catch{}l=0}var a})(),E),getStore:()=>a,destroy:()=>E.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return R(E)},V="store",G=(a,t,e,s,[n],i)=>{const[o,c,r]=q(t,i),l=K(a,(async()=>(await o(),z((await c(n,j))[B]?.[V]))),(async a=>l.schedule(o,(async()=>{var t;await r(n,j,{[B]:{[V]:(t=a(),JSON.stringify(t,((a,t)=>E(t,Map)?h.fromEntries([...t]):t)))}},!0,!0)}))),e,s);return l},Q=(a,t,e,s,[n,i,[o,c,r]],l)=>{const[w,d,u]=q(t,l),E=async(a,t)=>await m($(i,(async([e,s,n,i],o)=>{const c=a[o];t&&void 0===c||await u(e,s,c,n,i,t)}))),p=async(a,t)=>c?await u(r,j,{[B]:a},!0,!0,t):null;return K(a,(async()=>{await w();const a=await(async()=>C(y(await m($(n,(async([a,t],e)=>[a,await d(e,t)]))),(a=>!D(a[1])))))(),t=await(async()=>o?(await d(r,j))[B]:{})();return D(a)&&f(t)?void 0:[a,t]}),(async(a,t)=>{if(await w(),f(t)){const[t,e]=a();await E(t),await p(e)}else{const[a,e]=t();await E(a,!0),await p(e,!0)}}),e,s)},X="json",Z="autoLoadIntervalSeconds",aa="rowIdColumnName",ta="tableId",ea="tableName",sa={mode:X,[Z]:1},na={load:0,save:0,[ea]:e+"_values"},ia=(a,t,e,s)=>{const n=I();return N(a,((a,i)=>{const o=w(b(S(t,T(a)?{[e]:a}:a)),0,g(t));f(o[0])||s(i,o[0])||P(n,i,o)})),n},oa="pragma ",ca="data_version",ra="schema_version",la=(a,t,s,n,i,o)=>{let c,r;const[l,y,d,u]=(a=>{const t=(a=>S(sa,T(a)?{storeTableName:a}:a??{}))(a),s=t[Z];if(t.mode==X){const{storeTableName:a=e}=t;return[1,s,[a],W(a)]}const{tables:{load:n={},save:i={}}={},values:o={}}=t,c=w(b(S(na,o)),0,g(na)),r=c[2],l=W(r);return[0,s,[ia(n,{[ta]:null,[aa]:j},ta,(a=>x(l,a)&&a==r)),ia(i,{[ea]:null,[aa]:j,deleteEmptyColumns:0,deleteEmptyTable:0},ea,((a,t)=>x(l,t)&&t==r)),c],l]})(t);return(l?G:Q)(a,o?async(a,t)=>(o(a,t),await s(a,t)):s,(a=>[setInterval((async()=>{try{const t=(await s(oa+ca))[0][ca],e=(await s(oa+ra))[0][ra];t==(c??=t)&&e==(r??=e)||(a(),c=t,r=e)}catch{}}),1e3*y),n((t=>u.has(t)?a():0))]),(([a,t])=>{clearInterval(a),c=r=null,i(t)}),d,A(u))};a.createCrSqliteWasmPersister=(a,t,e,s)=>la(a,e,(async(a,e=[])=>await t.execO(a,e)),(a=>t.onUpdate(((t,e,s)=>a(s)))),(a=>a()),s)},"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((a="undefined"!=typeof globalThis?globalThis:a||self).TinyBasePersisterCrSqliteWasm={});
@@ -0,0 +1 @@
1
+ var a,t;a=this,t=function(a){"use strict";const t=a=>typeof a,e="tinybase",s=",",n=t(""),i=(a,t)=>a.repeat(t),o=(a,t="")=>a.join(t),c=(a,t)=>a.map(t),r=a=>a.length,l=a=>0==r(a),y=(a,t)=>a.filter(t),w=(a,t,e)=>a.slice(t,e),E=(a,...t)=>a.push(...t),d=Promise,u=(a,t)=>a instanceof t,f=a=>null==a,p=(a,t,e)=>f(a)?e?.():t(a),T=a=>t(a)==n,m=async a=>d.all(a),v=(a,t)=>a?.has(t)??!1,A=a=>[...a?.values()??[]],L=(a,t)=>a?.delete(t),h=Object,R=h.keys,N=h.freeze,O=(a=[])=>h.fromEntries(a),S=(...a)=>h.assign({},...a),C=(a,t)=>c(h.entries(a),(([a,e])=>t(e,a))),b=a=>h.values(a),g=a=>r(R(a)),D=a=>(a=>u(a,h)&&a.constructor==h)(a)&&0==g(a),I=a=>new Map(a),F=a=>[...a?.keys()??[]],M=(a,t)=>a?.get(t),$=(a,t)=>c([...a?.entries()??[]],(([a,e])=>t(e,a))),P=(a,t,e)=>f(e)?(L(a,t),a):a?.set(t,e),x=(a,t,e,s=P)=>(C(t,((t,s)=>e(a,s,t))),((a,t)=>{((a,t)=>{a?.forEach(t)})(a,((a,e)=>t(e)))})(a,(e=>((a,t)=>!f(((a,t)=>p(a,(a=>a[t])))(a,t)))(t,e)?0:s(a,e))),a),_=a=>new Set(Array.isArray(a)||f(a)?a:[a]),B=(a,t)=>a?.add(t),j="_",H="_id",W=a=>`"${a.replace(/"/g,'""')}"`,q="FROM pragma_table_",k="WHERE",J=(a,t)=>{const e=I();return[async()=>x(e,O(await m(c(await a("SELECT name "+q+"list WHERE schema='main'AND type='table'AND name IN("+Y(t)+")",t),(async({name:t})=>[t,O(c(await a("SELECT name,type "+q+"info(?)",[t]),(({name:a,type:t})=>[a,t])))])))),((a,t,s)=>{return P(e,t,x((o=I,v(n=e,i=t)||P(n,i,o()),M(n,i)),s,((a,t,e)=>{e!=M(a,t)&&P(a,t,e)}),((a,t)=>P(a,t))));var n,i,o}),((a,t)=>P(e,t))),async(t,s)=>((a,t)=>!f(M(M(e,a),t)))(t,s)?O(y(c(await a("SELECT*FROM"+W(t)),(a=>{return[a[s],(t={...a},e=s,delete t[e],t)];var t,e})),(([a,t])=>!f(a)&&!D(t)))):{},async(t,n,i,r,w,d=!1)=>{const u=_();C(i??{},(a=>c(R(a??{}),(a=>B(u,a)))));const p=A(u);if(!d&&w&&l(p)&&v(e,t))return await a("DROP TABLE"+W(t)),void P(e,t);if(l(p)||v(e,t)){const s=M(e,t),i=_(F(s));await m([...c(p,(async e=>{L(i,e)||(await a(`ALTER TABLE${W(t)}ADD${W(e)}`),P(s,e,""))})),...!d&&r?c(A(i),(async e=>{e!=n&&(await a(`ALTER TABLE${W(t)}DROP${W(e)}`),P(s,e))})):[]])}else await a(`CREATE TABLE${W(t)}(${W(n)} PRIMARY KEY ON CONFLICT REPLACE${o(c(p,(a=>s+W(a))))});`),P(e,t,I([[n,""],...c(p,(a=>[a,""]))]));if(d)f(i)?await a("DELETE FROM"+W(t)+"WHERE 1"):await m(C(i,(async(e,s)=>{f(e)?await a("DELETE FROM"+W(t)+k+W(n)+"=?",[s]):l(p)||await U(a,t,n,R(e),[s,...b(e)])})));else if(l(p))v(e,t)&&await a("DELETE FROM"+W(t)+"WHERE 1");else{const s=y(F(M(e,t)),(a=>a!=n)),o=[],r=[];C(i??{},((a,t)=>{E(o,t,...c(s,(t=>a?.[t]))),E(r,t)})),await U(a,t,n,s,o),await a("DELETE FROM"+W(t)+k+W(n)+"NOT IN("+Y(r)+")",r)}}]},U=async(a,t,e,n,l)=>await a("INSERT INTO"+W(t)+"("+W(e)+o(c(n,(a=>s+W(a))))+")VALUES"+i(`,(?${i(",?",r(n))})`,r(l)/(r(n)+1)).substring(1)+"ON CONFLICT("+W(e)+")DO UPDATE SET"+o(c(n,(a=>W(a)+"=excluded."+W(a))),s),l),Y=a=>o(c(a,(()=>"?")),s),z=JSON.parse,K=(a,t,e,s,n)=>{let i,o,c,r=0,l=0,y=0;const w=[],d=async a=>(2!=r&&(r=1,await u.schedule((async()=>{await a(),r=0}))),u),u={load:async(e,s)=>await d((async()=>{try{a.setContent(await t())}catch{a.setContent([e,s])}})),startAutoLoad:async(e={},n={})=>(u.stopAutoLoad(),await u.load(e,n),y=1,c=s((async(e,s)=>await d((async()=>{if(s)a.setTransactionChanges(s());else try{a.setContent(e?.()??await t())}catch{}})))),u),stopAutoLoad:()=>(y&&(n(c),c=void 0,y=0),u),save:async t=>(1!=r&&(r=2,await u.schedule((async()=>{try{await e(a.getContent,t)}catch{}r=0}))),u),startAutoSave:async()=>(await u.stopAutoSave().save(),i=a.addDidFinishTransactionListener(((a,t)=>{const[e,s]=t();D(e)&&D(s)||u.save((()=>[e,s]))})),u),stopAutoSave:()=>(p(i,a.delListener),u),schedule:async(...a)=>(E(w,...a),await(async()=>{if(!l){for(l=1;!f((a=w,o=a.shift()));)try{await o()}catch{}l=0}var a})(),u),getStore:()=>a,destroy:()=>u.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return N(u)},V="store",G=(a,t,e,s,[n],i)=>{const[o,c,r]=J(t,i),l=K(a,(async()=>(await o(),z((await c(n,H))[j]?.[V]))),(async a=>l.schedule(o,(async()=>{var t;await r(n,H,{[j]:{[V]:(t=a(),JSON.stringify(t,((a,t)=>u(t,Map)?h.fromEntries([...t]):t)))}},!0,!0)}))),e,s);return l},Q=(a,t,e,s,[n,i,[o,c,r]],l)=>{const[w,E,d]=J(t,l),u=async(a,t)=>await m($(i,(async([e,s,n,i],o)=>{const c=a[o];t&&void 0===c||await d(e,s,c,n,i,t)}))),p=async(a,t)=>c?await d(r,H,{[j]:a},!0,!0,t):null;return K(a,(async()=>{await w();const a=await(async()=>O(y(await m($(n,(async([a,t],e)=>[a,await E(e,t)]))),(a=>!D(a[1])))))(),t=await(async()=>o?(await E(r,H))[j]:{})();return D(a)&&f(t)?void 0:[a,t]}),(async(a,t)=>{if(await w(),f(t)){const[t,e]=a();await u(t),await p(e)}else{const[a,e]=t();await u(a,!0),await p(e,!0)}}),e,s)},X="json",Z="autoLoadIntervalSeconds",aa="rowIdColumnName",ta="tableId",ea="tableName",sa={mode:X,[Z]:1},na={load:0,save:0,[ea]:e+"_values"},ia=(a,t,e,s)=>{const n=I();return C(a,((a,i)=>{const o=w(b(S(t,T(a)?{[e]:a}:a)),0,g(t));f(o[0])||s(i,o[0])||P(n,i,o)})),n},oa="pragma ",ca="data_version",ra="schema_version",la=(a,t,s,n,i,o)=>{let c,r;const[l,y,E,d]=(a=>{const t=(a=>S(sa,T(a)?{storeTableName:a}:a??{}))(a),s=t[Z];if(t.mode==X){const{storeTableName:a=e}=t;return[1,s,[a],_(a)]}const{tables:{load:n={},save:i={}}={},values:o={}}=t,c=w(b(S(na,o)),0,g(na)),r=c[2],l=_(r);return[0,s,[ia(n,{[ta]:null,[aa]:H},ta,(a=>B(l,a)&&a==r)),ia(i,{[ea]:null,[aa]:H,deleteEmptyColumns:0,deleteEmptyTable:0},ea,((a,t)=>B(l,t)&&t==r)),c],l]})(t);return(l?G:Q)(a,o?async(a,t)=>(o(a,t),await s(a,t)):s,(a=>[setInterval((async()=>{try{const t=(await s(oa+ca))[0][ca],e=(await s(oa+ra))[0][ra];t==(c??=t)&&e==(r??=e)||(a(),c=t,r=e)}catch{}}),1e3*y),n((t=>d.has(t)?a():0))]),(([a,t])=>{clearInterval(a),c=r=null,i(t)}),E,A(d))};a.createExpoSqlitePersister=(a,t,e,s)=>la(a,e,(async(a,e=[])=>(await t.execAsync([{sql:a,args:e}],!1))[0].rows),(a=>t.onDatabaseChange((({tableName:t})=>a(t)))),(a=>a.remove()),s)},"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((a="undefined"!=typeof globalThis?globalThis:a||self).TinyBasePersisterExpoSqlite={});