tinybase 4.0.3 → 4.0.4

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 (165) hide show
  1. package/lib/cjs/persisters/persister-automerge.cjs +1 -1
  2. package/lib/cjs/persisters/persister-automerge.cjs.gz +0 -0
  3. package/lib/cjs/persisters/persister-browser.cjs +1 -1
  4. package/lib/cjs/persisters/persister-browser.cjs.gz +0 -0
  5. package/lib/cjs/persisters/persister-cr-sqlite-wasm.cjs +1 -1
  6. package/lib/cjs/persisters/persister-cr-sqlite-wasm.cjs.gz +0 -0
  7. package/lib/cjs/persisters/persister-expo-sqlite.cjs +1 -1
  8. package/lib/cjs/persisters/persister-expo-sqlite.cjs.gz +0 -0
  9. package/lib/cjs/persisters/persister-file.cjs +1 -1
  10. package/lib/cjs/persisters/persister-file.cjs.gz +0 -0
  11. package/lib/cjs/persisters/persister-remote.cjs +1 -1
  12. package/lib/cjs/persisters/persister-remote.cjs.gz +0 -0
  13. package/lib/cjs/persisters/persister-sqlite-wasm.cjs +1 -1
  14. package/lib/cjs/persisters/persister-sqlite-wasm.cjs.gz +0 -0
  15. package/lib/cjs/persisters/persister-sqlite3.cjs +1 -1
  16. package/lib/cjs/persisters/persister-sqlite3.cjs.gz +0 -0
  17. package/lib/cjs/persisters/persister-yjs.cjs +1 -1
  18. package/lib/cjs/persisters/persister-yjs.cjs.gz +0 -0
  19. package/lib/cjs/persisters.cjs +1 -1
  20. package/lib/cjs/persisters.cjs.gz +0 -0
  21. package/lib/cjs/tinybase.cjs +1 -1
  22. package/lib/cjs/tinybase.cjs.gz +0 -0
  23. package/lib/cjs-es6/persisters/persister-automerge.cjs +1 -1
  24. package/lib/cjs-es6/persisters/persister-automerge.cjs.gz +0 -0
  25. package/lib/cjs-es6/persisters/persister-browser.cjs +1 -1
  26. package/lib/cjs-es6/persisters/persister-browser.cjs.gz +0 -0
  27. package/lib/cjs-es6/persisters/persister-cr-sqlite-wasm.cjs +1 -1
  28. package/lib/cjs-es6/persisters/persister-cr-sqlite-wasm.cjs.gz +0 -0
  29. package/lib/cjs-es6/persisters/persister-expo-sqlite.cjs +1 -1
  30. package/lib/cjs-es6/persisters/persister-expo-sqlite.cjs.gz +0 -0
  31. package/lib/cjs-es6/persisters/persister-file.cjs +1 -1
  32. package/lib/cjs-es6/persisters/persister-file.cjs.gz +0 -0
  33. package/lib/cjs-es6/persisters/persister-remote.cjs +1 -1
  34. package/lib/cjs-es6/persisters/persister-remote.cjs.gz +0 -0
  35. package/lib/cjs-es6/persisters/persister-sqlite-wasm.cjs +1 -1
  36. package/lib/cjs-es6/persisters/persister-sqlite-wasm.cjs.gz +0 -0
  37. package/lib/cjs-es6/persisters/persister-sqlite3.cjs +1 -1
  38. package/lib/cjs-es6/persisters/persister-sqlite3.cjs.gz +0 -0
  39. package/lib/cjs-es6/persisters/persister-yjs.cjs +1 -1
  40. package/lib/cjs-es6/persisters/persister-yjs.cjs.gz +0 -0
  41. package/lib/cjs-es6/persisters.cjs +1 -1
  42. package/lib/cjs-es6/persisters.cjs.gz +0 -0
  43. package/lib/cjs-es6/tinybase.cjs +1 -1
  44. package/lib/cjs-es6/tinybase.cjs.gz +0 -0
  45. package/lib/debug/persisters/persister-automerge.js +56 -18
  46. package/lib/debug/persisters/persister-browser.js +55 -22
  47. package/lib/debug/persisters/persister-cr-sqlite-wasm.js +106 -62
  48. package/lib/debug/persisters/persister-expo-sqlite.js +111 -62
  49. package/lib/debug/persisters/persister-file.js +51 -18
  50. package/lib/debug/persisters/persister-remote.js +51 -17
  51. package/lib/debug/persisters/persister-sqlite-wasm.js +106 -62
  52. package/lib/debug/persisters/persister-sqlite3.js +111 -62
  53. package/lib/debug/persisters/persister-yjs.js +63 -27
  54. package/lib/debug/persisters.js +49 -17
  55. package/lib/debug/tinybase.js +35 -17
  56. package/lib/es6/persisters/persister-automerge.js +1 -1
  57. package/lib/es6/persisters/persister-automerge.js.gz +0 -0
  58. package/lib/es6/persisters/persister-browser.js +1 -1
  59. package/lib/es6/persisters/persister-browser.js.gz +0 -0
  60. package/lib/es6/persisters/persister-cr-sqlite-wasm.js +1 -1
  61. package/lib/es6/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  62. package/lib/es6/persisters/persister-expo-sqlite.js +1 -1
  63. package/lib/es6/persisters/persister-expo-sqlite.js.gz +0 -0
  64. package/lib/es6/persisters/persister-file.js +1 -1
  65. package/lib/es6/persisters/persister-file.js.gz +0 -0
  66. package/lib/es6/persisters/persister-remote.js +1 -1
  67. package/lib/es6/persisters/persister-remote.js.gz +0 -0
  68. package/lib/es6/persisters/persister-sqlite-wasm.js +1 -1
  69. package/lib/es6/persisters/persister-sqlite-wasm.js.gz +0 -0
  70. package/lib/es6/persisters/persister-sqlite3.js +1 -1
  71. package/lib/es6/persisters/persister-sqlite3.js.gz +0 -0
  72. package/lib/es6/persisters/persister-yjs.js +1 -1
  73. package/lib/es6/persisters/persister-yjs.js.gz +0 -0
  74. package/lib/es6/persisters.js +1 -1
  75. package/lib/es6/persisters.js.gz +0 -0
  76. package/lib/es6/tinybase.js +1 -1
  77. package/lib/es6/tinybase.js.gz +0 -0
  78. package/lib/persisters/persister-automerge.js +1 -1
  79. package/lib/persisters/persister-automerge.js.gz +0 -0
  80. package/lib/persisters/persister-browser.js +1 -1
  81. package/lib/persisters/persister-browser.js.gz +0 -0
  82. package/lib/persisters/persister-cr-sqlite-wasm.js +1 -1
  83. package/lib/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  84. package/lib/persisters/persister-expo-sqlite.js +1 -1
  85. package/lib/persisters/persister-expo-sqlite.js.gz +0 -0
  86. package/lib/persisters/persister-file.js +1 -1
  87. package/lib/persisters/persister-file.js.gz +0 -0
  88. package/lib/persisters/persister-remote.js +1 -1
  89. package/lib/persisters/persister-remote.js.gz +0 -0
  90. package/lib/persisters/persister-sqlite-wasm.js +1 -1
  91. package/lib/persisters/persister-sqlite-wasm.js.gz +0 -0
  92. package/lib/persisters/persister-sqlite3.js +1 -1
  93. package/lib/persisters/persister-sqlite3.js.gz +0 -0
  94. package/lib/persisters/persister-yjs.js +1 -1
  95. package/lib/persisters/persister-yjs.js.gz +0 -0
  96. package/lib/persisters.js +1 -1
  97. package/lib/persisters.js.gz +0 -0
  98. package/lib/tinybase.js +1 -1
  99. package/lib/tinybase.js.gz +0 -0
  100. package/lib/types/persisters/persister-automerge.d.ts +4 -0
  101. package/lib/types/persisters/persister-browser.d.ts +8 -0
  102. package/lib/types/persisters/persister-cr-sqlite-wasm.d.ts +10 -2
  103. package/lib/types/persisters/persister-expo-sqlite.d.ts +8 -0
  104. package/lib/types/persisters/persister-file.d.ts +8 -1
  105. package/lib/types/persisters/persister-remote.d.ts +4 -0
  106. package/lib/types/persisters/persister-sqlite-wasm.d.ts +8 -0
  107. package/lib/types/persisters/persister-sqlite3.d.ts +8 -0
  108. package/lib/types/persisters/persister-yjs.d.ts +4 -0
  109. package/lib/types/persisters.d.ts +16 -3
  110. package/lib/types/with-schemas/persisters/persister-automerge.d.ts +5 -0
  111. package/lib/types/with-schemas/persisters/persister-browser.d.ts +10 -0
  112. package/lib/types/with-schemas/persisters/persister-cr-sqlite-wasm.d.ts +12 -2
  113. package/lib/types/with-schemas/persisters/persister-expo-sqlite.d.ts +10 -0
  114. package/lib/types/with-schemas/persisters/persister-file.d.ts +9 -1
  115. package/lib/types/with-schemas/persisters/persister-remote.d.ts +5 -0
  116. package/lib/types/with-schemas/persisters/persister-sqlite-wasm.d.ts +10 -0
  117. package/lib/types/with-schemas/persisters/persister-sqlite3.d.ts +10 -0
  118. package/lib/types/with-schemas/persisters/persister-yjs.d.ts +5 -0
  119. package/lib/types/with-schemas/persisters.d.ts +17 -3
  120. package/lib/umd/persisters/persister-automerge.js +1 -1
  121. package/lib/umd/persisters/persister-automerge.js.gz +0 -0
  122. package/lib/umd/persisters/persister-browser.js +1 -1
  123. package/lib/umd/persisters/persister-browser.js.gz +0 -0
  124. package/lib/umd/persisters/persister-cr-sqlite-wasm.js +1 -1
  125. package/lib/umd/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  126. package/lib/umd/persisters/persister-expo-sqlite.js +1 -1
  127. package/lib/umd/persisters/persister-expo-sqlite.js.gz +0 -0
  128. package/lib/umd/persisters/persister-file.js +1 -1
  129. package/lib/umd/persisters/persister-file.js.gz +0 -0
  130. package/lib/umd/persisters/persister-remote.js +1 -1
  131. package/lib/umd/persisters/persister-remote.js.gz +0 -0
  132. package/lib/umd/persisters/persister-sqlite-wasm.js +1 -1
  133. package/lib/umd/persisters/persister-sqlite-wasm.js.gz +0 -0
  134. package/lib/umd/persisters/persister-sqlite3.js +1 -1
  135. package/lib/umd/persisters/persister-sqlite3.js.gz +0 -0
  136. package/lib/umd/persisters/persister-yjs.js +1 -1
  137. package/lib/umd/persisters/persister-yjs.js.gz +0 -0
  138. package/lib/umd/persisters.js +1 -1
  139. package/lib/umd/persisters.js.gz +0 -0
  140. package/lib/umd/tinybase.js +1 -1
  141. package/lib/umd/tinybase.js.gz +0 -0
  142. package/lib/umd-es6/persisters/persister-automerge.js +1 -1
  143. package/lib/umd-es6/persisters/persister-automerge.js.gz +0 -0
  144. package/lib/umd-es6/persisters/persister-browser.js +1 -1
  145. package/lib/umd-es6/persisters/persister-browser.js.gz +0 -0
  146. package/lib/umd-es6/persisters/persister-cr-sqlite-wasm.js +1 -1
  147. package/lib/umd-es6/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  148. package/lib/umd-es6/persisters/persister-expo-sqlite.js +1 -1
  149. package/lib/umd-es6/persisters/persister-expo-sqlite.js.gz +0 -0
  150. package/lib/umd-es6/persisters/persister-file.js +1 -1
  151. package/lib/umd-es6/persisters/persister-file.js.gz +0 -0
  152. package/lib/umd-es6/persisters/persister-remote.js +1 -1
  153. package/lib/umd-es6/persisters/persister-remote.js.gz +0 -0
  154. package/lib/umd-es6/persisters/persister-sqlite-wasm.js +1 -1
  155. package/lib/umd-es6/persisters/persister-sqlite-wasm.js.gz +0 -0
  156. package/lib/umd-es6/persisters/persister-sqlite3.js +1 -1
  157. package/lib/umd-es6/persisters/persister-sqlite3.js.gz +0 -0
  158. package/lib/umd-es6/persisters/persister-yjs.js +1 -1
  159. package/lib/umd-es6/persisters/persister-yjs.js.gz +0 -0
  160. package/lib/umd-es6/persisters.js +1 -1
  161. package/lib/umd-es6/persisters.js.gz +0 -0
  162. package/lib/umd-es6/tinybase.js +1 -1
  163. package/lib/umd-es6/tinybase.js.gz +0 -0
  164. package/package.json +5 -5
  165. package/readme.md +2 -2
@@ -1 +1 @@
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
+ 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,p=(a,t,e)=>d(a)?e?.():t(a),T=t=>a(t)==s,m=async a=>E.all(a),v=(a,t)=>a?.has(t)??!1,A=a=>[...a?.values()??[]],L=(a,t)=>a?.delete(t),h=Object,R=h.keys,f=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),D=a=>o(R(a)),b=a=>(a=>u(a,h)&&a.constructor==h)(a)&&0==D(a),I=a=>new Map(a),g=a=>[...a?.keys()??[]],_=(a,t)=>a?.get(t),M=(a,t)=>c([...a?.entries()??[]],(([a,e])=>t(e,a))),F=(a,t,e)=>d(e)?(L(a,t),a):a?.set(t,e),$=(a,t,e)=>(v(a,t)||F(a,t,e()),_(a,t)),P=(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),B=a=>new Set(Array.isArray(a)||d(a)?a:[a]),j=(a,t)=>a?.add(t),k="_",H="_id",W=a=>`"${a.replace(/"/g,'""')}"`,x="FROM pragma_table_",q="WHERE",J=(a,t,s)=>{const n=I();return[async()=>P(n,N(await m(c(await a("SELECT name "+x+"list WHERE schema='main'AND type='table'AND name IN("+V(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)=>F(n,t,P($(n,t,I),e,((a,t,e)=>{e!=_(a,t)&&F(a,t,e)}),((a,t)=>F(a,t))))),((a,t)=>F(n,t))),async(t,e)=>((a,t)=>!d(_(_(n,a),t)))(t,e)?N(l(c(await a("SELECT*FROM"+W(t)),(a=>{return[a[e],(t={...a},s=e,delete t[s],t)];var t,s})),(([a,t])=>!d(a)&&!b(t)))):{},async(t,s,o,w,E,u=!1)=>{const p=B();C(o??{},(a=>c(R(a??{}),(a=>j(p,a)))));const T=A(p);if(!u&&E&&r(T)&&v(n,t))return await a("DROP TABLE"+W(t)),void F(n,t);if(r(T)||v(n,t)){const e=_(n,t),i=B(g(e));await m([...c(T,(async s=>{L(i,s)||(await a(`ALTER TABLE${W(t)}ADD${W(s)}`),F(e,s,""))})),...!u&&w?c(A(i),(async n=>{n!=s&&(await a(`ALTER TABLE${W(t)}DROP${W(n)}`),F(e,n))})):[]])}else await a(`CREATE TABLE${W(t)}(${W(s)} PRIMARY KEY ON CONFLICT REPLACE${i(c(T,(a=>e+W(a))))});`),F(n,t,I([[s,""],...c(T,(a=>[a,""]))]));if(u)d(o)?await a("DELETE FROM"+W(t)+"WHERE 1"):await m(C(o,(async(e,n)=>{d(e)?await a("DELETE FROM"+W(t)+q+W(s)+"=?",[n]):r(T)||await U(a,t,s,R(e),[n,...S(e)])})));else if(r(T))v(n,t)&&await a("DELETE FROM"+W(t)+"WHERE 1");else{const e=l(g(_(n,t)),(a=>a!=s)),i=[],r=[];C(o??{},((a,t)=>{y(i,t,...c(e,(t=>a?.[t]))),y(r,t)})),await U(a,t,s,e,i),await a("DELETE FROM"+W(t)+q+W(s)+"NOT IN("+V(r)+")",r)}},async t=>{let e;await a("BEGIN");try{e=await t()}catch(a){s?.(a)}return await a("END"),e}]},U=async(a,t,s,r,l)=>await a("INSERT INTO"+W(t)+"("+W(s)+i(c(r,(a=>e+W(a))))+")VALUES"+n(`,(?${n(",?",o(r))})`,o(l)/(o(r)+1)).substring(1)+"ON CONFLICT("+W(s)+")DO UPDATE SET"+i(c(r,(a=>W(a)+"=excluded."+W(a))),e),l),V=a=>i(c(a,(()=>"?")),e),Y=JSON.parse,z=I(),G=I(),K=(a,t,e,s,n,i,c=[])=>{let o,r,l,w=0,E=0;$(z,c,(()=>0)),$(G,c,(()=>[]));const u=async a=>(2!=w&&(w=1,await T.schedule((async()=>{await a(),w=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),E=1,l=s((async(e,s)=>{if(s){const t=s();await u((async()=>a.setTransactionChanges(t)))}else await u((async()=>{try{a.setContent(e?.()??await t())}catch(a){i?.(a)}}))})),T),stopAutoLoad:()=>(E&&(n(l),l=void 0,E=0),T),save:async t=>(1!=w&&(w=2,await T.schedule((async()=>{try{await e(a.getContent,t)}catch(a){i?.(a)}w=0}))),T),startAutoSave:async()=>(await T.stopAutoSave().save(),o=a.addDidFinishTransactionListener(((a,t)=>{const[e,s]=t();b(e)&&b(s)||T.save((()=>[e,s]))})),T),stopAutoSave:()=>(p(o,a.delListener),T),schedule:async(...a)=>(y(_(G,c),...a),await(async()=>{if(!_(z,c)){for(F(z,c,1);!d((a=_(G,c),r=a.shift()));)try{await r()}catch(a){i?.(a)}F(z,c,0)}var a})(),T),getStore:()=>a,destroy:()=>T.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return f(T)},Q="store",X=(a,t,e,s,n,[i],c,o)=>{const[r,l,w,y]=J(t,c,n);return K(a,(async()=>await y((async()=>(await r(),Y((await l(i,H))[k]?.[Q]??"null"))))),(async a=>await y((async()=>{var t;await r(),await w(i,H,{[k]:{[Q]:(t=a()??null,JSON.stringify(t,((a,t)=>u(t,Map)?h.fromEntries([...t]):t)))}},!0,!0)}))),e,s,n,o)},Z=(a,t,e,s,n,[i,c,[o,r,w]],y,E)=>{const[u,p,T,v]=J(t,y,n),A=async(a,t)=>await m(M(c,(async([e,s,n,i],c)=>{const o=a[c];t&&void 0===o||await T(e,s,o,n,i,t)}))),L=async(a,t)=>r?await T(w,H,{[k]:a},!0,!0,t):null;return K(a,(async()=>await v((async()=>{await u();const a=await(async()=>N(l(await m(M(i,(async([a,t],e)=>[a,await p(e,t)]))),(a=>!b(a[1])))))(),t=await(async()=>o?(await p(w,H))[k]:{})();return b(a)&&d(t)?void 0:[a,t]}))),(async(a,t)=>await v((async()=>{if(await u(),d(t)){const[t,e]=a();await A(t),await L(e)}else{const[a,e]=t();await A(a,!0),await L(e,!0)}}))),e,s,n,E)},aa="json",ta="autoLoadIntervalSeconds",ea="rowIdColumnName",sa="tableId",na="tableName",ia={mode:aa,[ta]:1},ca={load:0,save:0,[na]:t+"_values"},oa=(a,t,e,s)=>{const n=I();return C(a,((a,i)=>{const c=w(S(O(t,T(a)?{[e]:a}:a)),0,D(t));d(c[0])||s(i,c[0])||F(n,i,c)})),n},ra="pragma ",la="data_version",wa="schema_version",ya=(a,e,s,n,i,c,o,r)=>{let l,y;const[E,u,d,p]=(a=>{const e=(a=>O(ia,T(a)?{storeTableName:a}:a??{}))(a),s=e[ta];if(e.mode==aa){const{storeTableName:a=t}=e;return[1,s,[a],B(a)]}const{tables:{load:n={},save:i={}}={},values:c={}}=e,o=w(S(O(ca,c)),0,D(ca)),r=o[2],l=B(r);return[0,s,[oa(n,{[sa]:null,[ea]:H},sa,(a=>j(l,a)&&a==r)),oa(i,{[na]:null,[ea]:H,deleteEmptyColumns:0,deleteEmptyTable:0},na,((a,t)=>j(l,t)&&t==r)),o],l]})(e);return(E?X:Z)(a,c?async(a,t)=>(c(a,t),await s(a,t)):s,(a=>[setInterval((async()=>{try{const t=(await s(ra+la))[0][la],e=(await s(ra+wa))[0][wa];t==(l??=t)&&e==(y??=e)||(a(),l=t,y=e)}catch{}}),1e3*u),n((t=>p.has(t)?a():0))]),(([a,t])=>{clearInterval(a),l=y=null,i(t)}),o,d,A(p),r)},Ea=(a,t,e,s,n,i)=>ya(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,i,e);export{Ea as createSqliteWasmPersister};
@@ -1 +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),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};
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),w=(a,t)=>a.filter(t),l=(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,N=f.freeze,R=(a=[])=>f.fromEntries(a),O=(...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)=>(A(a,t)||$(a,t,e()),F(a,t)),P=(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),B=a=>new Set(Array.isArray(a)||d(a)?a:[a]),H=(a,t)=>a?.add(t),W="_",j="_id",k=a=>`"${a.replace(/"/g,'""')}"`,x="FROM pragma_table_",J="WHERE",U=(a,t,s)=>{const n=I();return[async()=>P(n,R(await m(c(await a("SELECT name "+x+"list WHERE schema='main'AND type='table'AND name IN("+z(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)=>$(n,t,P(_(n,t,I),e,((a,t,e)=>{e!=F(a,t)&&$(a,t,e)}),((a,t)=>$(a,t))))),((a,t)=>$(n,t))),async(t,e)=>((a,t)=>!d(F(F(n,a),t)))(t,e)?R(w(c(await a("SELECT*FROM"+k(t)),(a=>{return[a[e],(t={...a},s=e,delete t[s],t)];var t,s})),(([a,t])=>!d(a)&&!g(t)))):{},async(t,s,o,l,E,u=!1)=>{const v=B();C(o??{},(a=>c(h(a??{}),(a=>H(v,a)))));const T=L(v);if(!u&&E&&r(T)&&A(n,t))return await a("DROP TABLE"+k(t)),void $(n,t);if(r(T)||A(n,t)){const e=F(n,t),i=B(b(e));await m([...c(T,(async s=>{p(i,s)||(await a(`ALTER TABLE${k(t)}ADD${k(s)}`),$(e,s,""))})),...!u&&l?c(L(i),(async n=>{n!=s&&(await a(`ALTER TABLE${k(t)}DROP${k(n)}`),$(e,n))})):[]])}else await a(`CREATE TABLE${k(t)}(${k(s)} PRIMARY KEY ON CONFLICT REPLACE${i(c(T,(a=>e+k(a))))});`),$(n,t,I([[s,""],...c(T,(a=>[a,""]))]));if(u)d(o)?await a("DELETE FROM"+k(t)+"WHERE 1"):await m(C(o,(async(e,n)=>{d(e)?await a("DELETE FROM"+k(t)+J+k(s)+"=?",[n]):r(T)||await Y(a,t,s,h(e),[n,...S(e)])})));else if(r(T))A(n,t)&&await a("DELETE FROM"+k(t)+"WHERE 1");else{const e=w(b(F(n,t)),(a=>a!=s)),i=[],r=[];C(o??{},((a,t)=>{y(i,t,...c(e,(t=>a?.[t]))),y(r,t)})),await Y(a,t,s,e,i),await a("DELETE FROM"+k(t)+J+k(s)+"NOT IN("+z(r)+")",r)}},async t=>{let e;await a("BEGIN");try{e=await t()}catch(a){s?.(a)}return await a("END"),e}]},Y=async(a,t,s,r,w)=>await a("INSERT INTO"+k(t)+"("+k(s)+i(c(r,(a=>e+k(a))))+")VALUES"+n(`,(?${n(",?",o(r))})`,o(w)/(o(r)+1)).substring(1)+"ON CONFLICT("+k(s)+")DO UPDATE SET"+i(c(r,(a=>k(a)+"=excluded."+k(a))),e),w),z=a=>i(c(a,(()=>"?")),e),G=JSON.parse,K=I(),V=I(),q=(a,t,e,s,n,i,c=[])=>{let o,r,w,l=0,E=0;_(K,c,(()=>0)),_(V,c,(()=>[]));const u=async a=>(2!=l&&(l=1,await T.schedule((async()=>{await a(),l=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),E=1,w=s((async(e,s)=>{if(s){const t=s();await u((async()=>a.setTransactionChanges(t)))}else await u((async()=>{try{a.setContent(e?.()??await t())}catch(a){i?.(a)}}))})),T),stopAutoLoad:()=>(E&&(n(w),w=void 0,E=0),T),save:async t=>(1!=l&&(l=2,await T.schedule((async()=>{try{await e(a.getContent,t)}catch(a){i?.(a)}l=0}))),T),startAutoSave:async()=>(await T.stopAutoSave().save(),o=a.addDidFinishTransactionListener(((a,t)=>{const[e,s]=t();g(e)&&g(s)||T.save((()=>[e,s]))})),T),stopAutoSave:()=>(v(o,a.delListener),T),schedule:async(...a)=>(y(F(V,c),...a),await(async()=>{if(!F(K,c)){for($(K,c,1);!d((a=F(V,c),r=a.shift()));)try{await r()}catch(a){i?.(a)}$(K,c,0)}var a})(),T),getStore:()=>a,destroy:()=>T.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return N(T)},Q="store",X=(a,t,e,s,n,[i],c,o)=>{const[r,w,l,y]=U(t,c,n);return q(a,(async()=>await y((async()=>(await r(),G((await w(i,j))[W]?.[Q]??"null"))))),(async a=>await y((async()=>{var t;await r(),await l(i,j,{[W]:{[Q]:(t=a()??null,JSON.stringify(t,((a,t)=>u(t,Map)?f.fromEntries([...t]):t)))}},!0,!0)}))),e,s,n,o)},Z=(a,t,e,s,n,[i,c,[o,r,l]],y,E)=>{const[u,v,T,A]=U(t,y,n),L=async(a,t)=>await m(M(c,(async([e,s,n,i],c)=>{const o=a[c];t&&void 0===o||await T(e,s,o,n,i,t)}))),p=async(a,t)=>r?await T(l,j,{[W]:a},!0,!0,t):null;return q(a,(async()=>await A((async()=>{await u();const a=await(async()=>R(w(await m(M(i,(async([a,t],e)=>[a,await v(e,t)]))),(a=>!g(a[1])))))(),t=await(async()=>o?(await v(l,j))[W]:{})();return g(a)&&d(t)?void 0:[a,t]}))),(async(a,t)=>await A((async()=>{if(await u(),d(t)){const[t,e]=a();await L(t),await p(e)}else{const[a,e]=t();await L(a,!0),await p(e,!0)}}))),e,s,n,E)},aa="json",ta="autoLoadIntervalSeconds",ea="rowIdColumnName",sa="tableId",na="tableName",ia={mode:aa,[ta]:1},ca={load:0,save:0,[na]:t+"_values"},oa=(a,t,e,s)=>{const n=I();return C(a,((a,i)=>{const c=l(S(O(t,T(a)?{[e]:a}:a)),0,D(t));d(c[0])||s(i,c[0])||$(n,i,c)})),n},ra="pragma ",wa="data_version",la="schema_version",ya=(a,e,s,n,i,c,o,r)=>{let w,y;const[E,u,d,v]=(a=>{const e=(a=>O(ia,T(a)?{storeTableName:a}:a??{}))(a),s=e[ta];if(e.mode==aa){const{storeTableName:a=t}=e;return[1,s,[a],B(a)]}const{tables:{load:n={},save:i={}}={},values:c={}}=e,o=l(S(O(ca,c)),0,D(ca)),r=o[2],w=B(r);return[0,s,[oa(n,{[sa]:null,[ea]:j},sa,(a=>H(w,a)&&a==r)),oa(i,{[na]:null,[ea]:j,deleteEmptyColumns:0,deleteEmptyTable:0},na,((a,t)=>H(w,t)&&t==r)),o],w]})(e);return(E?X:Z)(a,c?async(a,t)=>(c(a,t),await s(a,t)):s,(a=>[setInterval((async()=>{try{const t=(await s(ra+wa))[0][wa],e=(await s(ra+la))[0][la];t==(w??=t)&&e==(y??=e)||(a(),w=t,y=e)}catch{}}),1e3*u),n((t=>v.has(t)?a():0))]),(([a,t])=>{clearInterval(a),w=y=null,i(t)}),o,d,L(v),r)},Ea="change",ua=(a,t,e,s,n)=>ya(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(Ea,e),e}),(a=>t.off(Ea,a)),s,n,t);export{ua as createSqlite3Persister};
@@ -1 +1 @@
1
- import{Map as t}from"yjs";const e=t=>t.length,a=t=>t.shift(),s=t=>null==t,n=(t,e,a)=>s(t)?a?.():e(t),o=Object,c=o.keys,r=o.freeze,i=(t=[])=>o.fromEntries(t),l=(t,e)=>!s(((t,e)=>n(t,(t=>t[e])))(t,e)),u=(t,e)=>((t,e)=>t.map(e))(o.entries(t),(([t,a])=>e(a,t))),d=t=>(t=>t instanceof o&&t.constructor==o)(t)&&0==(t=>e(c(t)))(t),g=(t,e,a)=>(l(t,e)||(t[e]=a()),t[e]),y=(t,e)=>((t,e)=>t?.forEach(e))(t,((t,a)=>e(a,t))),v="t",h="delete",p=t=>[t.get(v),t.get("v")],w=(e,a,n,o)=>{const c=s(a)?e:e.get(a)??e.set(a,new t);let r;return u(n,((t,e)=>{o(c,e,t)&&(r=1)})),c.forEach(((t,e)=>{l(n,e)||(c.delete(e),r=1)})),s(a)||c.size||e.delete(a),r},f=(o,c,l="tinybase")=>{const f=c.getMap(l);return((o,l,S,A,O)=>{let J,L,N,C=0,b=0,m=0;const z=[],E=async t=>(2!=C&&(C=1,await D.schedule((async()=>{await t(),C=0}))),D),D={load:async(t,e)=>await E((async()=>{try{o.setContent(await l())}catch{o.setContent([t,e])}})),startAutoLoad:async(t={},s={})=>(D.stopAutoLoad(),await D.load(t,s),m=1,N=(t=>{const s=s=>t(void 0,(()=>((t,s)=>{if(1==e(s)&&(o=s[0].path,0==e(o)))return[t.get("t").toJSON(),t.get("v").toJSON()];var o;const[c,r]=p(t),l={},u={};return((t,e)=>{t.forEach((({path:t,changes:{keys:e}})=>a(t)==v?n(a(t),(s=>{const o=g(l,s,i),r=c.get(s);n(a(t),(t=>{const a=g(o,t,i),s=r.get(t);y(e,((t,{action:e})=>a[t]=e==h?null:s.get(t)))}),(()=>y(e,((t,{action:e})=>o[t]=e==h?null:r.get(t)?.toJSON()))))}),(()=>y(e,((t,{action:e})=>l[t]=e==h?null:c.get(t)?.toJSON())))):y(e,((t,{action:e})=>u[t]=e==h?null:r.get(t)))))})(s),[l,u]})(f,s)));return f.observeDeep(s),s})((async(t,e)=>await E((async()=>{if(e)o.setTransactionChanges(e());else try{o.setContent(t?.()??await l())}catch{}})))),D),stopAutoLoad:()=>{return m&&(t=N,f.unobserveDeep(t),N=void 0,m=0),D;var t},save:async e=>(1!=C&&(C=2,await D.schedule((async()=>{try{await(async(e,a)=>c.transact((()=>((e,a,o)=>{(e=>{e.size||(e.set(v,new t),e.set("v",new t))})(e);const[c,r]=p(e),i=()=>{l=1};let l=1;if(n(o?.(),(([t,e])=>{l=0,u(t,((t,e)=>l?0:s(t)?c.delete(e):n(c.get(e),(e=>u(t,((t,a)=>l?0:s(t)?e.delete(a):n(e.get(a),(e=>u(t,((t,a)=>s(t)?e.delete(a):e.set(a,t)))),i)))),i))),u(e,((t,e)=>l?0:s(t)?r.delete(e):r.set(e,t)))})),l){const[t,e]=a();w(c,void 0,t,((t,e,a)=>w(c,e,a,((t,e,a)=>w(t,e,a,((t,e,a)=>{if(t.get(e)!==a)return t.set(e,a),1})))))),w(r,void 0,e,((t,e,a)=>{r.get(e)!==a&&r.set(e,a)}))}})(f,e,a))))(o.getContent,e)}catch{}C=0}))),D),startAutoSave:async()=>(await D.stopAutoSave().save(),J=o.addDidFinishTransactionListener(((t,e)=>{const[a,s]=e();d(a)&&d(s)||D.save((()=>[a,s]))})),D),stopAutoSave:()=>(n(J,o.delListener),D),schedule:async(...t)=>(((t,...e)=>{t.push(...e)})(z,...t),await(async()=>{if(!b){for(b=1;!s(L=a(z));)try{await L()}catch{}b=0}})(),D),getStore:()=>o,destroy:()=>D.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return r(D)})(o,(async()=>f.size?[f.get(v).toJSON(),f.get("v").toJSON()]:void 0))};export{f as createYjsPersister};
1
+ import{Map as t}from"yjs";const e=t=>t.length,a=t=>t.shift(),s=t=>null==t,n=(t,e,a)=>s(t)?a?.():e(t),o=Object,c=o.keys,r=o.freeze,i=(t=[])=>o.fromEntries(t),l=(t,e)=>!s(((t,e)=>n(t,(t=>t[e])))(t,e)),u=(t,e)=>((t,e)=>t.map(e))(o.entries(t),(([t,a])=>e(a,t))),d=t=>(t=>t instanceof o&&t.constructor==o)(t)&&0==(t=>e(c(t)))(t),g=(t,e,a)=>(l(t,e)||(t[e]=a()),t[e]),y=t=>new Map(t),v=(t,e)=>t?.get(e),h=(t,e)=>((t,e)=>t?.forEach(e))(t,((t,a)=>e(a,t))),p=(t,e,a)=>{return s(a)?(n=t,o=e,n?.delete(o),t):t?.set(e,a);var n,o},w=(t,e,a)=>{var s,n;return s=t,n=e,s?.has(n)||p(t,e,a()),v(t,e)},f=y(),S=y(),A="t",O="delete",J=t=>[t.get(A),t.get("v")],L=(e,a,n,o)=>{const c=s(a)?e:e.get(a)??e.set(a,new t);let r;return u(n,((t,e)=>{o(c,e,t)&&(r=1)})),c.forEach(((t,e)=>{l(n,e)||(c.delete(e),r=1)})),s(a)||c.size||e.delete(a),r},N=(o,c,l="tinybase",y)=>{const N=c.getMap(l);return((t,e,o,c,i,l,u=[])=>{let g,y,h,A=0,O=0;w(f,u,(()=>0)),w(S,u,(()=>[]));const J=async t=>(2!=A&&(A=1,await L.schedule((async()=>{await t(),A=0}))),L),L={load:async(a,s)=>await J((async()=>{try{t.setContent(await e())}catch{t.setContent([a,s])}})),startAutoLoad:async(a={},s={})=>(L.stopAutoLoad(),await L.load(a,s),O=1,h=c((async(a,s)=>{if(s){const e=s();await J((async()=>t.setTransactionChanges(e)))}else await J((async()=>{try{t.setContent(a?.()??await e())}catch(t){l?.(t)}}))})),L),stopAutoLoad:()=>(O&&(i(h),h=void 0,O=0),L),save:async e=>(1!=A&&(A=2,await L.schedule((async()=>{try{await o(t.getContent,e)}catch(t){l?.(t)}A=0}))),L),startAutoSave:async()=>(await L.stopAutoSave().save(),g=t.addDidFinishTransactionListener(((t,e)=>{const[a,s]=e();d(a)&&d(s)||L.save((()=>[a,s]))})),L),stopAutoSave:()=>(n(g,t.delListener),L),schedule:async(...t)=>(((t,...e)=>{t.push(...e)})(v(S,u),...t),await(async()=>{if(!v(f,u)){for(p(f,u,1);!s(y=a(v(S,u)));)try{await y()}catch(t){l?.(t)}p(f,u,0)}})(),L),getStore:()=>t,destroy:()=>L.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return r(L)})(o,(async()=>N.size?[N.get(A).toJSON(),N.get("v").toJSON()]:void 0),(async(e,a)=>c.transact((()=>((e,a,o)=>{(e=>{e.size||(e.set(A,new t),e.set("v",new t))})(e);const[c,r]=J(e),i=()=>{l=1};let l=1;if(n(o?.(),(([t,e])=>{l=0,u(t,((t,e)=>l?0:s(t)?c.delete(e):n(c.get(e),(e=>u(t,((t,a)=>l?0:s(t)?e.delete(a):n(e.get(a),(e=>u(t,((t,a)=>s(t)?e.delete(a):e.set(a,t)))),i)))),i))),u(e,((t,e)=>l?0:s(t)?r.delete(e):r.set(e,t)))})),l){const[t,e]=a();L(c,void 0,t,((t,e,a)=>L(c,e,a,((t,e,a)=>L(t,e,a,((t,e,a)=>{if(t.get(e)!==a)return t.set(e,a),1})))))),L(r,void 0,e,((t,e,a)=>{r.get(e)!==a&&r.set(e,a)}))}})(N,e,a)))),(t=>{const s=s=>t(void 0,(()=>((t,s)=>{if(1==e(s)&&(o=s[0].path,0==e(o)))return[t.get("t").toJSON(),t.get("v").toJSON()];var o;const[c,r]=J(t),l={},u={};return((t,e)=>{t.forEach((({path:t,changes:{keys:e}})=>a(t)==A?n(a(t),(s=>{const o=g(l,s,i),r=c.get(s);n(a(t),(t=>{const a=g(o,t,i),s=r.get(t);h(e,((t,{action:e})=>a[t]=e==O?null:s.get(t)))}),(()=>h(e,((t,{action:e})=>o[t]=e==O?null:r.get(t)?.toJSON()))))}),(()=>h(e,((t,{action:e})=>l[t]=e==O?null:c.get(t)?.toJSON())))):h(e,((t,{action:e})=>u[t]=e==O?null:r.get(t)))))})(s),[l,u]})(N,s)));return N.observeDeep(s),s}),(t=>{N.unobserveDeep(t)}),y)};export{N as createYjsPersister};
Binary file
package/lib/persisters.js CHANGED
@@ -1 +1 @@
1
- const t=t=>null==t,a=Object,s=a.keys,e=a.freeze,n=t=>(t=>t instanceof a&&t.constructor==a)(t)&&0==(t=>s(t).length)(t),o=(a,s,o,c,i)=>{let r,y,u,d=0,h=0,w=0;const l=[],v=async t=>(2!=d&&(d=1,await p.schedule((async()=>{await t(),d=0}))),p),p={load:async(t,e)=>await v((async()=>{try{a.setContent(await s())}catch{a.setContent([t,e])}})),startAutoLoad:async(t={},e={})=>(p.stopAutoLoad(),await p.load(t,e),w=1,u=c((async(t,e)=>await v((async()=>{if(e)a.setTransactionChanges(e());else try{a.setContent(t?.()??await s())}catch{}})))),p),stopAutoLoad:()=>(w&&(i(u),u=void 0,w=0),p),save:async t=>(1!=d&&(d=2,await p.schedule((async()=>{try{await o(a.getContent,t)}catch{}d=0}))),p),startAutoSave:async()=>(await p.stopAutoSave().save(),r=a.addDidFinishTransactionListener(((t,a)=>{const[s,e]=a();n(s)&&n(e)||p.save((()=>[s,e]))})),p),stopAutoSave:()=>{var s,e;return s=r,e=a.delListener,t(s)||e(s),p},schedule:async(...a)=>(((t,...a)=>{t.push(...a)})(l,...a),await(async()=>{if(!h){for(h=1;!t((a=l,y=a.shift()));)try{await y()}catch{}h=0}var a})(),p),getStore:()=>a,destroy:()=>p.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return e(p)};export{o as createCustomPersister};
1
+ const t=t=>null==t,a=Object,e=a.keys,s=a.freeze,n=t=>(t=>t instanceof a&&t.constructor==a)(t)&&0==(t=>e(t).length)(t),o=t=>new Map(t),c=(t,a)=>t?.get(a),r=(a,e,s)=>{return t(s)?(n=a,o=e,n?.delete(o),a):a?.set(e,s);var n,o},i=(t,a,e)=>{var s,n;return s=t,n=a,s?.has(n)||r(t,a,e()),c(t,a)},y=o(),u=o(),d=(a,e,o,d,w,h,l=[])=>{let v,p,A,f=0,g=0;i(y,l,(()=>0)),i(u,l,(()=>[]));const L=async t=>(2!=f&&(f=1,await S.schedule((async()=>{await t(),f=0}))),S),S={load:async(t,s)=>await L((async()=>{try{a.setContent(await e())}catch{a.setContent([t,s])}})),startAutoLoad:async(t={},s={})=>(S.stopAutoLoad(),await S.load(t,s),g=1,A=d((async(t,s)=>{if(s){const t=s();await L((async()=>a.setTransactionChanges(t)))}else await L((async()=>{try{a.setContent(t?.()??await e())}catch(t){h?.(t)}}))})),S),stopAutoLoad:()=>(g&&(w(A),A=void 0,g=0),S),save:async t=>(1!=f&&(f=2,await S.schedule((async()=>{try{await o(a.getContent,t)}catch(t){h?.(t)}f=0}))),S),startAutoSave:async()=>(await S.stopAutoSave().save(),v=a.addDidFinishTransactionListener(((t,a)=>{const[e,s]=a();n(e)&&n(s)||S.save((()=>[e,s]))})),S),stopAutoSave:()=>{var e,s;return e=v,s=a.delListener,t(e)||s(e),S},schedule:async(...a)=>(((t,...a)=>{t.push(...a)})(c(u,l),...a),await(async()=>{if(!c(y,l)){for(r(y,l,1);!t((a=c(u,l),p=a.shift()));)try{await p()}catch(t){h?.(t)}r(y,l,0)}var a})(),S),getStore:()=>a,destroy:()=>S.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return s(S)};export{d as createCustomPersister};
Binary file
package/lib/tinybase.js CHANGED
@@ -1 +1 @@
1
- const e=e=>typeof e,t="",s=e(t),n=e(!0),a=e(0),o=e(e),r="type",l="default",i="Listener",c="Result",d="add",u="Ids",h="Table",g=h+"s",f=h+u,L="Row",w=L+u,v="Sorted"+L+u,S="Cell",R=S+u,T="Value",I=T+"s",y=T+u,C=e=>t+e,p=Math.max,b=Math.min,V=isFinite,m=(e,t)=>e instanceof t,E=e=>null==e,k=(e,t,s)=>E(e)?s?.():t(e),M=e=>e==s||e==n,D=t=>e(t)==o,J=e=>Array.isArray(e),A=()=>{},x=(e,t)=>e.includes(t),F=(e,t)=>e.every(t),Q=(e,t)=>W(e)===W(t)&&F(e,((e,s)=>t[s]===e)),z=(e,t)=>F(e,((s,n)=>0==n||t(e[n-1],s)<=0)),N=(e,t)=>e.sort(t),O=(e,t)=>e.forEach(t),j=(e,t)=>e.map(t),P=e=>$(e,((e,t)=>e+t),0),W=e=>e.length,B=e=>0==W(e),$=(e,t,s)=>e.reduce(t,s),q=(e,t,s)=>e.slice(t,s),G=(e,...t)=>e.push(...t),H=e=>e.pop(),K=e=>e.shift(),U=Object,X=U.keys,Y=U.isFrozen,Z=U.freeze,_=e=>m(e,U)&&e.constructor==U,ee=(e,t)=>!E(((e,t)=>k(e,(e=>e[t])))(e,t)),te=(e,t)=>(delete e[t],e),se=(e,t)=>j(U.entries(e),(([e,s])=>t(s,e))),ne=e=>_(e)&&0==(e=>W(X(e)))(e),ae=e=>e.size,oe=(e,t)=>e?.has(t)??!1,re=e=>E(e)||0==ae(e),le=e=>[...e?.values()??[]],ie=e=>e.clear(),ce=(e,t)=>e?.forEach(t),de=(e,t)=>e?.delete(t),ue=e=>new Map(e),he=e=>[...e?.keys()??[]],ge=(e,t)=>e?.get(t),fe=(e,t)=>ce(e,((e,s)=>t(s,e))),Le=(e,t,s)=>E(s)?(de(e,t),e):e?.set(t,s),we=(e,t,s)=>(oe(e,t)||Le(e,t,s()),ge(e,t)),ve=(e,t,s,n=Le)=>(se(t,((t,n)=>s(e,n,t))),fe(e,(s=>ee(t,s)?0:n(e,s))),e),Se=(e,t,s)=>{const n={};return ce(e,((e,a)=>{const o=t?t(e,a):e;!s?.(o,e)&&(n[a]=o)})),n},Re=(e,t,s)=>Se(e,(e=>Se(e,t,s)),ne),Te=(e,t,s)=>Se(e,(e=>Re(e,t,s)),ne),Ie=(e,t)=>{const s=ue();return ce(e,((e,n)=>s.set(n,t?.(e)??e))),s},ye=e=>Ie(e,Ie),Ce=e=>Ie(e,ye),pe=(e,t,s,n,a=0)=>k((s?we:ge)(e,t[a],a>W(t)-2?s:ue),(o=>{if(a>W(t)-2)return n?.(o)&&Le(e,t[a]),o;const r=pe(o,t,s,n,a+1);return re(o)&&Le(e,t[a]),r})),be=t=>{const s=e(t);return M(s)||s==a&&V(t)?s:void 0},Ve=(e,t,s,n,a)=>E(a)?e.delCell(t,s,n,!0):e.setCell(t,s,n,a),me=(e,t,s)=>E(s)?e.delValue(t):e.setValue(t,s),Ee=e=>new Set(J(e)||E(e)?e:[e]),ke=(e,t)=>e?.add(t),Me=(e,t,s)=>{const n=e.hasRow,a=ue(),o=ue(),r=ue(),l=ue(),i=ue(),c=(t,s,...n)=>{const a=we(i,t,Ee);return O(n,(t=>ke(a,t)&&s&&e.callListener(t))),n},d=(t,...s)=>k(ge(i,t),(n=>{O(B(s)?le(n):s,(t=>{e.delListener(t),de(n,t)})),re(n)&&Le(i,t)})),u=(e,s)=>{Le(a,e,s),oe(o,e)||(Le(o,e,t()),Le(r,e,ue()),Le(l,e,ue()))},h=e=>{Le(a,e),Le(o,e),Le(r,e),Le(l,e),d(e)};return[()=>e,()=>he(a),e=>fe(o,e),e=>oe(o,e),e=>ge(a,e),e=>ge(o,e),(e,t)=>Le(o,e,t),u,(t,a,o,i,h)=>{u(t,a);const g=ue(),f=ue(),L=ge(r,t),w=ge(l,t),v=t=>{const o=s=>e.getCell(a,t,s),r=ge(L,t),l=n(a,t)?s(i(o,t)):void 0;if(r===l||J(r)&&J(l)&&Q(r,l)||Le(g,t,[r,l]),!E(h)){const e=ge(w,t),s=n(a,t)?h(o,t):void 0;e!=s&&Le(f,t,s)}},S=e=>{o((()=>{ce(g,(([,e],t)=>Le(L,t,e))),ce(f,((e,t)=>Le(w,t,e)))}),g,f,L,w,e),ie(g),ie(f)};fe(L,v),e.hasTable(a)&&O(e.getRowIds(a),(e=>{oe(L,e)||v(e)})),S(!0),d(t),c(t,0,e.addRowListener(a,null,((e,t,s)=>v(s))),e.addTableListener(a,(()=>S())))},h,()=>fe(i,h),c,d]},De=(n,a)=>e(n)==s?e=>e(n):n??(()=>a??t),Je=e=>{const t=new WeakMap;return s=>(t.has(s)||t.set(s,e(s)),t.get(s))},Ae=/^\d+$/,xe=()=>{const e=[];let s=0;return[n=>(n?K(e):null)??t+s++,t=>{Ae.test(t)&&W(e)<1e3&&G(e,t)}]},Fe=e=>{let s;const[n,a]=xe(),o=ue();return[(a,r,l,i=[],c=(()=>[]))=>{s??=e();const d=n(1);return Le(o,d,[a,r,l,i,c]),ke(pe(r,l??[t],Ee),d),d},(e,n,...a)=>O(((e,s=[t])=>{const n=[],a=(e,t)=>t==W(s)?G(n,e):null===s[t]?ce(e,(e=>a(e,t+1))):O([s[t],null],(s=>a(ge(e,s),t+1)));return a(e,0),n})(e,n),(e=>ce(e,(e=>ge(o,e)[0](s,...n??[],...a))))),e=>k(ge(o,e),(([,s,n])=>(pe(s,n??[t],void 0,(t=>(de(t,e),re(t)?1:0))),Le(o,e),a(e),n))),e=>k(ge(o,e),(([e,,t=[],n,a])=>{const o=(...r)=>{const l=W(r);l==W(t)?e(s,...r,...a(r)):E(t[l])?O(n[l]?.(...r)??[],(e=>o(...r,e))):o(...r,t[l])};o()}))]},Qe=Je((e=>{let s,n,a,o=100,r=ue(),l=ue(),i=1;const c=ue(),d=ue(),[u,h,g]=Fe((()=>Q)),f=ue(),L=ue(),w=[],v=[],S=(t,s)=>{i=0,e.transaction((()=>{const[n,a]=ge(f,s);ce(n,((s,n)=>ce(s,((s,a)=>ce(s,((s,o)=>Ve(e,n,a,o,s[t]))))))),ce(a,((s,n)=>me(e,n,s[t])))})),i=1},R=e=>{Le(f,e),Le(L,e),h(d,[e])},T=(e,t)=>O(((e,t)=>e.splice(0,t))(e,t??W(e)),R),I=()=>T(w,W(w)-o),y=()=>k(s,(()=>{G(w,s),I(),T(v),s=void 0,a=1})),C=()=>{s=H(w),a=1},p=e.addCellListener(null,null,null,((e,t,s,n,a,o)=>{if(i){y();const e=we(r,t,ue),l=we(e,s,ue),i=we(l,n,(()=>[o,void 0]));i[1]=a,i[0]===a&&re(Le(l,n))&&re(Le(e,s))&&re(Le(r,t))&&C(),D()}})),b=e.addValueListener(null,((e,t,s,n)=>{if(i){y();const e=we(l,t,(()=>[n,void 0]));e[1]=s,e[0]===s&&re(Le(l,t))&&C(),D()}})),V=(e="")=>(E(s)&&(s=t+n++,Le(f,s,[r,l]),A(s,e),r=ue(),l=ue(),a=1),s),m=()=>{B(w)||(((e,...t)=>{e.unshift(...t)})(v,V()),S(0,s),s=H(w),a=1)},M=()=>{B(v)||(G(w,s),s=K(v),S(1,s),a=1)},D=()=>{a&&(h(c),a=0)},J=e=>{const t=V(e);return D(),t},A=(e,t)=>(F(e)&&ge(L,e)!==t&&(Le(L,e,t),h(d,[e])),Q),F=e=>oe(f,e),Q={setSize:e=>(o=e,I(),Q),addCheckpoint:J,setCheckpoint:A,getStore:()=>e,getCheckpointIds:()=>[[...w],s,[...v]],forEachCheckpoint:e=>fe(L,e),hasCheckpoint:F,getCheckpoint:e=>ge(L,e),goBackward:()=>(m(),D(),Q),goForward:()=>(M(),D(),Q),goTo:e=>{const t=x(w,e)?m:x(v,e)?M:null;for(;!E(t)&&e!=s;)t();return D(),Q},addCheckpointIdsListener:e=>u(e,c),addCheckpointListener:(e,t)=>u(t,d,[e]),delListener:e=>(g(e),Q),clear:()=>(T(w),T(v),E(s)||R(s),s=void 0,n=0,J(),Q),destroy:()=>{e.delListener(p),e.delListener(b)},getListenerStats:()=>({})};return Z(Q.clear())})),ze=(e,t)=>e<t?-1:1,Ne=Je((e=>{const s=ue(),n=ue(),[a,o,r,l,i,c,d,,u,h,g]=Me(e,ue,(e=>E(e)?t:J(e)?j(e,C):C(e))),[f,L,w]=Fe((()=>S)),v=(t,s,n)=>{const a=i(t);ce(n,((t,n)=>s(n,(s=>ce(t,(t=>s(t,(s=>e.forEachCell(a,t,s)))))))))},S={setIndexDefinition:(e,t,a,o,r,l=ze)=>{const i=E(r)?void 0:([e],[t])=>r(e,t);return u(e,t,((t,a,r,u,h,g)=>{let f=0;const w=Ee(),v=Ee(),S=c(e);if(ce(a,(([e,t],s)=>{const n=Ee(e),a=Ee(t);ce(n,(e=>de(a,e)?de(n,e):0)),ce(n,(e=>{ke(w,e),k(ge(S,e),(t=>{de(t,s),re(t)&&(Le(S,e),f=1)}))})),ce(a,(e=>{ke(w,e),oe(S,e)||(Le(S,e,Ee()),f=1),ke(ge(S,e),s),E(o)||ke(v,e)}))})),t(),re(h)||(g?fe(S,(e=>ke(v,e))):fe(r,(e=>k(ge(u,e),(e=>ke(v,e))))),ce(v,(e=>{const t=(t,s)=>l(ge(h,t),ge(h,s),e),s=[...ge(S,e)];z(s,t)||(Le(S,e,Ee(N(s,t))),ke(w,e))}))),(f||g)&&!E(i)){const t=[...S];z(t,i)||(d(e,ue(N(t,i))),f=1)}f&&L(s,[e]),ce(w,(t=>L(n,[e,t])))}),De(a),k(o,De)),S},delIndexDefinition:e=>(h(e),S),getStore:a,getIndexIds:o,forEachIndex:e=>r(((t,s)=>e(t,(e=>v(t,e,s))))),forEachSlice:(e,t)=>v(e,t,c(e)),hasIndex:l,hasSlice:(e,t)=>oe(c(e),t),getTableId:i,getSliceIds:e=>he(c(e)),getSliceRowIds:(e,t)=>le(ge(c(e),t)),addSliceIdsListener:(e,t)=>f(t,s,[e]),addSliceRowIdsListener:(e,t,s)=>f(s,n,[e,t]),delListener:e=>(w(e),S),destroy:g,getListenerStats:()=>({})};return Z(S)})),Oe=ue([["avg",[(e,t)=>P(e)/t,(e,t,s)=>e+(t-e)/(s+1),(e,t,s)=>e+(e-t)/(s-1),(e,t,s,n)=>e+(t-s)/n]],["max",[e=>p(...e),(e,t)=>p(t,e),(e,t)=>t==e?void 0:e,(e,t,s)=>s==e?void 0:p(t,e)]],["min",[e=>b(...e),(e,t)=>b(t,e),(e,t)=>t==e?void 0:e,(e,t,s)=>s==e?void 0:b(t,e)]],["sum",[e=>P(e),(e,t)=>e+t,(e,t)=>e-t,(e,t,s)=>e-s+t]]]),je=(e,t,s,n,a,o=!1)=>{if(re(s))return;const[r,l,i,c]=a;return o||=E(e),ce(n,(([s,n])=>{o||(e=E(s)?l?.(e,n,t++):E(n)?i?.(e,s,t--):c?.(e,n,s,t),o||=E(e))})),o?r(le(s),ae(s)):e},Pe=Je((e=>{const s=ue(),[n,a,o,r,l,i,c,,d,u,h]=Me(e,A,(e=>isNaN(e)||E(e)||!0===e||!1===e||e===t?void 0:1*e)),[g,f,L]=Fe((()=>w)),w={setMetricDefinition:(e,t,n,a,o,r,l)=>{const u=D(n)?[n,o,r,l]:ge(Oe,n)??ge(Oe,"sum");return d(e,t,((t,n,a,o,r,l)=>{const d=i(e),h=ae(o);l||=E(d),t();let g=je(d,h,o,n,u,l);V(g)||(g=void 0),g!=d&&(c(e,g),f(s,[e],g,d))}),De(a,1)),w},delMetricDefinition:e=>(u(e),w),getStore:n,getMetricIds:a,forEachMetric:o,hasMetric:r,getTableId:l,getMetric:i,addMetricListener:(e,t)=>g(t,s,[e]),delListener:e=>(L(e),w),destroy:h,getListenerStats:()=>({})};return Z(w)})),We=(e,t,s,n,a)=>{let o,r,l,i=0,c=0,d=0;const u=[],h=async e=>(2!=i&&(i=1,await g.schedule((async()=>{await e(),i=0}))),g),g={load:async(s,n)=>await h((async()=>{try{e.setContent(await t())}catch{e.setContent([s,n])}})),startAutoLoad:async(s={},a={})=>(g.stopAutoLoad(),await g.load(s,a),d=1,l=n((async(s,n)=>await h((async()=>{if(n)e.setTransactionChanges(n());else try{e.setContent(s?.()??await t())}catch{}})))),g),stopAutoLoad:()=>(d&&(a(l),l=void 0,d=0),g),save:async t=>(1!=i&&(i=2,await g.schedule((async()=>{try{await s(e.getContent,t)}catch{}i=0}))),g),startAutoSave:async()=>(await g.stopAutoSave().save(),o=e.addDidFinishTransactionListener(((e,t)=>{const[s,n]=t();ne(s)&&ne(n)||g.save((()=>[s,n]))})),g),stopAutoSave:()=>(k(o,e.delListener),g),schedule:async(...e)=>(G(u,...e),await(async()=>{if(!c){for(c=1;!E(r=K(u));)try{await r()}catch{}c=0}})(),g),getStore:()=>e,destroy:()=>g.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return Z(g)},Be=Je((e=>{const s=e.createStore,[n,a,o,r,l,,,u,,g,f,T,I]=Me(e,(()=>!0),A),y=s(),C=s(),p=ue(),b=(e,t,...s)=>O(s,(s=>ke(we(we(p,t,ue),e,Ee),s))),V=e=>{k(ge(p,e),(e=>{fe(e,((e,t)=>ce(t,(t=>e.delListener(t))))),ie(e)})),O([C,y],(t=>t.delTable(e)))},m=(e,t,s)=>b(t,e,t.addStartTransactionListener(s.startTransaction),t.addDidFinishTransactionListener((()=>s.finishTransaction()))),M={setQueryDefinition:(s,n,a)=>{u(s,n),V(s);const o=[],r=[[null,[n,null,null,[],ue()]]],l=[],i=[],c=[];a({select:(e,s)=>{const n=D(e)?[W(o)+t,e]:[E(s)?e:s,t=>t(e,s)];return G(o,n),{as:e=>n[0]=e}},join:(e,t,s)=>{const n=E(s)||D(t)?null:t,a=E(n)?t:s,o=[e,[e,n,D(a)?a:e=>e(a),[],ue()]];return G(r,o),{as:e=>o[0]=e}},where:(e,t,s)=>G(l,D(e)?e:E(s)?s=>s(e)===t:n=>n(e,t)===s),group:(e,t,s,n,a)=>{const o=[e,[e,D(t)?[t,s,n,a]:ge(Oe,t)??[(e,t)=>t]]];return G(i,o),{as:e=>o[0]=e}},having:(e,t)=>G(c,D(e)?e:s=>s(e)===t)});const d=ue(o);if(re(d))return M;const h=ue(r);fe(h,((e,[,t])=>k(ge(h,t),(({3:t})=>E(e)?0:G(t,e)))));const g=ue(i);let f=y;if(re(g)&&B(c))f=C;else{m(s,f,C);const e=ue();fe(g,((t,[s,n])=>ke(we(e,s,Ee),[t,n])));const t=Ee();fe(d,(s=>oe(e,s)?0:ke(t,s)));const n=ue(),a=(t,n,a,o)=>k(t,(([r,l,i,d])=>{fe(n,((t,[s])=>{const n=we(r,t,ue),l=ge(n,a),i=o?void 0:s;if(l!==i){const s=Ee([[l,i]]),o=ae(n);Le(n,a,i),ce(ge(e,t),(([e,t])=>{const a=je(d[e],o,n,s,t);d[e]=E(be(a))?null:a}))}})),re(l)||!F(c,(e=>e((e=>d[e]))))?C.delRow(s,i):E(i)?t[2]=C.addRow(s,d):C.setRow(s,i,d)}));b(f,s,f.addRowListener(s,null,((o,r,l,i)=>{const c=[],d=[],u=ue(),h=f.hasRow(s,l);let g=!h;ce(t,(e=>{const[t,n,a]=i(s,l,e);G(c,n),G(d,a),g||=t})),fe(e,(e=>{const[t,,n]=i(s,l,e);(g||t)&&Le(u,e,[n])})),g&&a(pe(n,c,void 0,(([,e])=>(de(e,l),re(e)))),u,l,1),h&&a(pe(n,d,(()=>{const e={};return ce(t,(t=>e[t]=f.getCell(s,l,t))),[ue(),Ee(),void 0,e]}),(([,e])=>{ke(e,l)})),u,l)})))}m(s,e,f);const L=(t,a,o,r)=>{const i=t=>e.getCell(a,o,t);O(r,(n=>{const[a,,o,r,l]=ge(h,n),c=o?.(i,t),[d,u]=ge(l,t)??[];c!=d&&(E(u)||I(s,u),Le(l,t,E(c)?null:[c,...T(s,1,e.addRowListener(a,c,(()=>L(t,a,c,r))))]))})),(t=>{const a=(s,a)=>e.getCell(...E(a)?[n,t,s]:s===n?[n,t,a]:[ge(h,s)?.[0],ge(ge(h,s)?.[4],t)?.[0],a]);f.transaction((()=>F(l,(e=>e(a)))?fe(d,((e,n)=>Ve(f,s,t,e,n(a,t)))):f.delRow(s,t)))})(t)},{3:w}=ge(h,null);return f.transaction((()=>T(s,1,e.addRowListener(n,null,((t,a,o)=>{e.hasRow(n,o)?L(o,n,o,w):(f.delRow(s,o),ce(h,(({4:e})=>k(ge(e,o),(([,t])=>{I(s,t),Le(e,o)})))))}))))),M},delQueryDefinition:e=>(V(e),g(e),M),getStore:n,getQueryIds:a,forEachQuery:o,hasQuery:r,getTableId:l,delListener:e=>(C.delListener(e),M),destroy:f,getListenerStats:()=>{const{tables:e,tableIds:t,transaction:s,...n}=C.getListenerStats();return n}};return se({[h]:[1,1],[w]:[0,1],[v]:[0,5],[L]:[1,2],[R]:[0,2],[S]:[1,3]},(([e,t],s)=>{O(e?["get","has","forEach"]:["get"],(e=>M[e+c+s]=(...t)=>C[e+s](...t))),M[d+c+s+i]=(...e)=>C[d+s+i](...q(e,0,t),((s,...n)=>e[t](M,...n)))})),Z(M)})),$e=Je((e=>{const s=ue(),n=ue(),a=ue(),o=ue(),[r,l,i,c,d,u,,,h,g,f]=Me(e,(()=>[ue(),ue(),ue(),ue()]),(e=>E(e)?void 0:e+t)),[L,w,v]=Fe((()=>I)),S=(e,t,s)=>k(u(e),(([n,,a])=>{if(!oe(a,t)){const o=Ee();if(d(e)!=T(e))ke(o,t);else{let e=t;for(;!E(e)&&!oe(o,e);)ke(o,e),e=ge(n,e)}if(s)return o;Le(a,t,o)}return ge(a,t)})),R=(e,t)=>k(u(e),(([,,e])=>Le(e,t))),T=e=>ge(s,e),I={setRelationshipDefinition:(e,t,r,l)=>(Le(s,e,r),h(e,t,((t,s)=>{const r=Ee(),l=Ee(),i=Ee(),[c,d]=u(e);ce(s,(([t,s],n)=>{E(t)||(ke(l,t),k(ge(d,t),(e=>{de(e,n),re(e)&&Le(d,t)}))),E(s)||(ke(l,s),oe(d,s)||Le(d,s,Ee()),ke(ge(d,s),n)),ke(r,n),Le(c,n,s),fe(ge(o,e),(t=>{oe(S(e,t),n)&&ke(i,t)}))})),t(),ce(r,(t=>w(n,[e,t]))),ce(l,(t=>w(a,[e,t]))),ce(i,(t=>{R(e,t),w(o,[e,t])}))}),De(l)),I),delRelationshipDefinition:e=>(Le(s,e),g(e),I),getStore:r,getRelationshipIds:l,forEachRelationship:t=>i((s=>t(s,(t=>e.forEachRow(d(s),t))))),hasRelationship:c,getLocalTableId:d,getRemoteTableId:T,getRemoteRowId:(e,t)=>ge(u(e)?.[0],t),getLocalRowIds:(e,t)=>le(ge(u(e)?.[1],t)),getLinkedRowIds:(e,t)=>E(u(e))?[t]:le(S(e,t,!0)),addRemoteRowIdListener:(e,t,s)=>L(s,n,[e,t]),addLocalRowIdsListener:(e,t,s)=>L(s,a,[e,t]),addLinkedRowIdsListener:(e,t,s)=>(S(e,t),L(s,o,[e,t])),delListener:e=>(R(...v(e)),I),destroy:f,getListenerStats:()=>({})};return Z(I)})),qe=e=>[e,e],Ge=()=>[ue(),ue()],He=e=>[...e],Ke=([e,t])=>e===t,Ue=e=>JSON.stringify(e,((e,t)=>m(t,Map)?U.fromEntries([...t]):t)),Xe=JSON.parse,Ye=(e,t,s)=>E(e)||!_(e)||ne(e)||Y(e)?(s?.(),!1):(se(e,((s,n)=>{t(s,n)||te(e,n)})),!ne(e)),Ze=(e,t,s)=>Le(e,t,ge(e,t)==-s?void 0:s),_e=()=>{let e,t,s=!1,n=!1,o=0;const c=ue(),u=ue(),v=ue(),p=ue(),b=ue(),V=ue(),m=ue(),J=ue(),A=ue(),F=ue(),z=ue(),P=ue(),W=ue(),B=Ee(),$=ue(),H=ue(),K=ue(),U=ue(),X=Ge(),Y=Ge(),_=Ge(),ae=Ge(),le=Ge(),pe=Ge(),Me=Ge(),De=Ge(),Je=Ge(),Ae=Ge(),Qe=Ge(),Ne=Ge(),Oe=Ge(),je=Ge(),Pe=ue(),We=Ge(),[Be,$e,et,tt]=Fe((()=>fs)),st=e=>{if(!Ye(e,((e,t)=>x([r,l],t))))return!1;const t=e[r];return!(!M(t)&&t!=a||(be(e[l])!=t&&te(e,l),0))},nt=(t,s)=>(!e||oe(F,s)||At(s))&&Ye(t,((e,t)=>at(s,t,e)),(()=>At(s))),at=(e,t,s,n)=>Ye(n?s:it(s,e,t),((n,a)=>k(ot(e,t,a,n),(e=>(s[a]=e,!0)),(()=>!1))),(()=>At(e,t))),ot=(t,s,n,a)=>e?k(ge(ge(F,t),n),(e=>be(a)!=e[r]?At(t,s,n,a,e[l]):a),(()=>At(t,s,n,a))):E(be(a))?At(t,s,n,a):a,rt=(e,t)=>Ye(t?e:ct(e),((t,s)=>k(lt(s,t),(t=>(e[s]=t,!0)),(()=>!1))),(()=>xt())),lt=(e,s)=>t?k(ge(P,e),(t=>be(s)!=t[r]?xt(e,s,t[l]):s),(()=>xt(e,s))):E(be(s))?xt(e,s):s,it=(e,t,s)=>(k(ge(z,t),(([n,a])=>{ce(n,((t,s)=>{ee(e,s)||(e[s]=t)})),ce(a,(n=>{ee(e,n)||At(t,s,n)}))})),e),ct=e=>(t&&(ce(W,((t,s)=>{ee(e,s)||(e[s]=t)})),ce(B,(t=>{ee(e,t)||xt(t)}))),e),dt=e=>ve(F,e,((e,t,s)=>{const n=ue(),a=Ee();ve(we(F,t,ue),s,((e,t,s)=>{Le(e,t,s),k(s[l],(e=>Le(n,t,e)),(()=>ke(a,t)))})),Le(z,t,[n,a])}),((e,t)=>{Le(F,t),Le(z,t)})),ut=e=>ve(P,e,((e,t,s)=>{Le(P,t,s),k(s[l],(e=>Le(W,t,e)),(()=>ke(B,t)))}),((e,t)=>{Le(P,t),Le(W,t),de(B,t)})),ht=e=>ne(e)?os():es(e),gt=e=>ve(K,e,((e,t,s)=>ft(t,s)),((e,t)=>Ct(t))),ft=(e,t)=>ve(we(K,e,(()=>(mt(e,1),Le($,e,xe()),Le(H,e,ue()),ue()))),t,((t,s,n)=>Lt(e,t,s,n)),((t,s)=>pt(e,t,s))),Lt=(e,t,s,n,a)=>ve(we(t,s,(()=>(Et(e,s,1),ue()))),n,((t,n,a)=>wt(e,s,t,n,a)),((n,o)=>bt(e,t,s,n,o,a))),wt=(e,t,s,n,a)=>{oe(s,n)||kt(e,t,n,1);const o=ge(s,n);a!==o&&(Mt(e,t,n,o,a),Le(s,n,a))},vt=(e,t,s,n,a)=>k(ge(t,s),(t=>wt(e,s,t,n,a)),(()=>Lt(e,t,s,it({[n]:a},e,s)))),St=e=>ne(e)?is():ts(e),Rt=e=>ve(U,e,((e,t,s)=>Tt(t,s)),((e,t)=>Vt(t))),Tt=(e,t)=>{oe(U,e)||Dt(e,1);const s=ge(U,e);t!==s&&(Jt(e,s,t),Le(U,e,t))},It=(e,t)=>{const[s]=ge($,e),n=s(t);return oe(ge(K,e),n)?It(e,t):n},yt=e=>ge(K,e)??ft(e,{}),Ct=e=>ft(e,{}),pt=(e,t,s)=>{const[,n]=ge($,e);n(s),Lt(e,t,s,{},!0)},bt=(e,t,s,n,a,o)=>{const r=ge(ge(z,e)?.[0],a);if(!E(r)&&!o)return wt(e,s,n,a,r);const l=t=>{Mt(e,s,t,ge(n,t)),kt(e,s,t,-1),Le(n,t)};E(r)?l(a):fe(n,l),re(n)&&(Et(e,s,-1),re(Le(t,s))&&(mt(e,-1),Le(K,e),Le($,e),Le(H,e)))},Vt=e=>{const t=ge(W,e);if(!E(t))return Tt(e,t);Jt(e,ge(U,e)),Dt(e,-1),Le(U,e)},mt=(e,t)=>Ze(c,e,t),Et=(e,t,s)=>Ze(we(v,e,ue),t,s),kt=(e,t,s,n)=>{const a=ge(H,e),o=ge(a,s)??0;(0==o&&1==n||1==o&&-1==n)&&Ze(we(u,e,ue),s,n),Le(a,s,o!=-n?o+n:null),Ze(we(we(p,e,ue),t,ue),s,n)},Mt=(e,t,s,n,a)=>we(we(we(b,e,ue),t,ue),s,(()=>[n,0]))[1]=a,Dt=(e,t)=>Ze(V,e,t),Jt=(e,t,s)=>we(m,e,(()=>[t,0]))[1]=s,At=(e,t,s,n,a)=>(G(we(we(we(J,e,ue),t,ue),s,(()=>[])),n),a),xt=(e,t,s)=>(G(we(A,e,(()=>[])),t),s),Ft=(e,t,s)=>k(ge(ge(ge(b,e),t),s),(([e,t])=>[!0,e,t]),(()=>[!1,...qe(Xt(e,t,s))])),Qt=e=>k(ge(m,e),(([e,t])=>[!0,e,t]),(()=>[!1,...qe(_t(e))])),zt=e=>re(J)||re(Ae[e])?0:ce(e?Ce(J):J,((t,s)=>ce(t,((t,n)=>ce(t,((t,a)=>$e(Ae[e],[s,n,a],t))))))),Nt=e=>re(A)||re(Qe[e])?0:ce(e?Ie(A):A,((t,s)=>$e(Qe[e],[s],t))),Ot=(e,t,s)=>{if(!re(t))return $e(e,s,(()=>Se(t))),1},jt=e=>{const t=re(pe[e]),s=re(De[e])&&re(ae[e])&&re(le[e])&&t&&re(Y[e]),n=re(Je[e])&&re(Me[e])&&re(_[e])&&re(X[e]);if(!s||!n){const a=e?[Ie(c),ye(u),ye(v),Ce(p),Ce(b)]:[c,u,v,p,b];if(!s){Ot(Y[e],a[0]),ce(a[1],((t,s)=>Ot(ae[e],t,[s])));const s=Ee();ce(a[2],((n,a)=>{Ot(le[e],n,[a])&&!t&&($e(pe[e],[a,null]),ke(s,a))})),t||ce(a[4],((t,n)=>{if(!oe(s,n)){const s=Ee();ce(t,(e=>ce(e,(([t,n],a)=>n!==t?ke(s,a):de(e,a))))),ce(s,(t=>$e(pe[e],[n,t])))}})),ce(a[3],((t,s)=>ce(t,((t,n)=>Ot(De[e],t,[s,n])))))}if(!n){let t;ce(a[4],((s,n)=>{let a;ce(s,((s,o)=>{let r;ce(s,(([s,l],i)=>{l!==s&&($e(Je[e],[n,o,i],l,s,Ft),t=a=r=1)})),r&&$e(Me[e],[n,o],Ft)})),a&&$e(_[e],[n],Ft)})),t&&$e(X[e],void 0,Ft)}}},Pt=e=>{const t=re(Oe[e]),s=re(je[e])&&re(Ne[e]);if(!t||!s){const n=e?[Ie(V),Ie(m)]:[V,m];if(t||Ot(Oe[e],n[0]),!s){let t;ce(n[1],(([s,n],a)=>{n!==s&&($e(je[e],[a],n,s,Qt),t=1)})),t&&$e(Ne[e],void 0,Qt)}}},Wt=(e,...t)=>(us((()=>e(...j(t,C)))),fs),Bt=()=>[Se(b,((e,t)=>-1===ge(c,t)?null:Se(e,((e,s)=>-1===ge(ge(v,t),s)?null:Se(e,(([,e])=>e??null),((e,t)=>Ke(t)))),ne)),ne),Se(m,(([,e])=>e??null),((e,t)=>Ke(t)))],$t=()=>({cellsTouched:s,valuesTouched:n,changedCells:Te(b,He,Ke),invalidCells:Te(J),changedValues:Se(m,He,Ke),invalidValues:Se(A),changedTableIds:Se(c),changedRowIds:Re(v),changedCellIds:Te(p),changedValueIds:Se(V)}),qt=()=>Te(K),Gt=()=>he(K),Ht=e=>he(ge(K,C(e))),Kt=(e,t,s,n=0,a)=>{return j(q(N((o=ge(K,C(e)),r=(e,s)=>[E(t)?s:ge(e,C(t)),s],j([...o?.entries()??[]],(([e,t])=>r(t,e)))),(([e],[t])=>ze(e,t)*(s?-1:1))),n,E(a)?a:n+a),(([,e])=>e));var o,r},Ut=(e,t)=>he(ge(ge(K,C(e)),C(t))),Xt=(e,t,s)=>ge(ge(ge(K,C(e)),C(t)),C(s)),Yt=()=>Se(U),Zt=()=>he(U),_t=e=>ge(U,C(e)),es=e=>Wt((()=>(e=>Ye(e,nt,At))(e)?gt(e):0)),ts=e=>Wt((()=>rt(e)?Rt(e):0)),ss=e=>{try{ht(Xe(e))}catch{}return fs},ns=t=>Wt((()=>{if((e=Ye(t,(e=>Ye(e,st))))&&(dt(t),!re(K))){const e=qt();os(),es(e)}})),as=e=>Wt((()=>{if(t=(e=>Ye(e,st))(e)){const s=Yt();ds(),is(),t=!0,ut(e),ts(s)}})),os=()=>Wt((()=>gt({}))),rs=e=>Wt((e=>oe(K,e)?Ct(e):0),e),ls=(e,t)=>Wt(((e,t)=>k(ge(K,e),(s=>oe(s,t)?pt(e,s,t):0))),e,t),is=()=>Wt((()=>Rt({}))),cs=()=>Wt((()=>{dt({}),e=!1})),ds=()=>Wt((()=>{ut({}),t=!1})),us=(e,t)=>{if(-1!=o){hs();const s=e();return gs(t),s}},hs=()=>(-1!=o&&o++,1==o&&$e(Pe,void 0,Bt,$t),fs),gs=e=>(o>0&&(o--,0==o&&(s=!re(b),n=!re(m),o=1,zt(1),s&&jt(1),Nt(1),n&&Pt(1),e?.(Bt,$t)&&(ce(b,((e,t)=>ce(e,((e,s)=>ce(e,(([e],n)=>Ve(fs,t,s,n,e))))))),ce(m,(([e],t)=>me(fs,t,e))),s=n=!1),$e(We[0],void 0,Bt,$t),o=-1,zt(0),s&&jt(0),Nt(0),n&&Pt(0),$e(We[1],void 0,Bt,$t),o=0,s=n=!1,O([c,u,v,p,b,J,V,m,A],ie))),fs),fs={getContent:()=>[qt(),Yt()],getTables:qt,getTableIds:Gt,getTable:e=>Re(ge(K,C(e))),getTableCellIds:e=>he(ge(H,C(e))),getRowIds:Ht,getSortedRowIds:Kt,getRow:(e,t)=>Se(ge(ge(K,C(e)),C(t))),getCellIds:Ut,getCell:Xt,getValues:Yt,getValueIds:Zt,getValue:_t,hasTables:()=>!re(K),hasTable:e=>oe(K,C(e)),hasTableCell:(e,t)=>oe(ge(H,C(e)),C(t)),hasRow:(e,t)=>oe(ge(K,C(e)),C(t)),hasCell:(e,t,s)=>oe(ge(ge(K,C(e)),C(t)),C(s)),hasValues:()=>!re(U),hasValue:e=>oe(U,C(e)),getTablesJson:()=>Ue(K),getValuesJson:()=>Ue(U),getJson:()=>Ue([K,U]),getTablesSchemaJson:()=>Ue(F),getValuesSchemaJson:()=>Ue(P),getSchemaJson:()=>Ue([F,P]),setContent:([e,t])=>Wt((()=>{(ne(e)?os:es)(e),(ne(t)?is:ts)(t)})),setTables:es,setTable:(e,t)=>Wt((e=>nt(t,e)?ft(e,t):0),e),setRow:(e,t,s)=>Wt(((e,t)=>at(e,t,s)?Lt(e,yt(e),t,s):0),e,t),addRow:(e,t,s=!0)=>us((()=>{let n;return at(e,n,t)&&(e=C(e),Lt(e,yt(e),n=It(e,s?1:0),t)),n})),setPartialRow:(e,t,s)=>Wt(((e,t)=>{if(at(e,t,s,1)){const n=yt(e);se(s,((s,a)=>vt(e,n,t,a,s)))}}),e,t),setCell:(e,t,s,n)=>Wt(((e,t,s)=>k(ot(e,t,s,D(n)?n(Xt(e,t,s)):n),(n=>vt(e,yt(e),t,s,n)))),e,t,s),setValues:ts,setPartialValues:e=>Wt((()=>rt(e,1)?se(e,((e,t)=>Tt(t,e))):0)),setValue:(e,t)=>Wt((e=>k(lt(e,D(t)?t(_t(e)):t),(t=>Tt(e,t)))),e),setTransactionChanges:e=>Wt((()=>{se(e[0],((e,t)=>E(e)?rs(t):se(e,((e,s)=>E(e)?ls(t,s):se(e,((e,n)=>Ve(fs,t,s,n,e))))))),se(e[1],((e,t)=>me(fs,t,e)))})),setTablesJson:ss,setValuesJson:e=>{try{St(Xe(e))}catch{}return fs},setJson:e=>{try{const[t,s]=Xe(e);ht(t),St(s)}catch{ss(e)}return fs},setTablesSchema:ns,setValuesSchema:as,setSchema:(e,t)=>Wt((()=>{ns(e),as(t)})),delTables:os,delTable:rs,delRow:ls,delCell:(e,t,s,n)=>Wt(((e,t,s)=>k(ge(K,e),(a=>k(ge(a,t),(o=>oe(o,s)?bt(e,a,t,o,s,n):0))))),e,t,s),delValues:is,delValue:e=>Wt((e=>oe(U,e)?Vt(e):0),e),delTablesSchema:cs,delValuesSchema:ds,delSchema:()=>Wt((()=>{cs(),ds()})),transaction:us,startTransaction:hs,finishTransaction:gs,forEachTable:e=>ce(K,((t,s)=>e(s,(e=>ce(t,((t,s)=>e(s,(e=>fe(t,e))))))))),forEachTableCell:(e,t)=>fe(ge(H,C(e)),t),forEachRow:(e,t)=>ce(ge(K,C(e)),((e,s)=>t(s,(t=>fe(e,t))))),forEachCell:(e,t,s)=>fe(ge(ge(K,C(e)),C(t)),s),forEachValue:e=>fe(U,e),addSortedRowIdsListener:(e,t,s,n,a,o,r)=>{let l=Kt(e,t,s,n,a);return Be((()=>{const r=Kt(e,t,s,n,a);Q(r,l)||(l=r,o(fs,e,t,s,n,a,l))}),pe[r?1:0],[e,t],[Gt])},addStartTransactionListener:e=>Be(e,Pe),addWillFinishTransactionListener:e=>Be(e,We[0]),addDidFinishTransactionListener:e=>Be(e,We[1]),callListener:e=>(tt(e),fs),delListener:e=>(et(e),fs),getListenerStats:()=>({}),createStore:_e};return se({[g]:[0,X],[f]:[0,Y],[h]:[1,_,[Gt]],[h+R]:[1,ae,[Gt]],[w]:[1,le,[Gt]],[L]:[2,Me,[Gt,Ht]],[R]:[2,De,[Gt,Ht]],[S]:[3,Je,[Gt,Ht,Ut],e=>qe(Xt(...e))],InvalidCell:[3,Ae],[I]:[0,Ne],[y]:[0,Oe],[T]:[1,je,[Zt],e=>qe(_t(e[0]))],InvalidValue:[1,Qe]},(([e,t,s,n],a)=>{fs[d+a+i]=(...a)=>Be(a[e],t[a[e+1]?1:0],e>0?q(a,0,e):void 0,s,n)})),Z(fs)};export{Qe as createCheckpoints,We as createCustomPersister,Ne as createIndexes,Pe as createMetrics,Be as createQueries,$e as createRelationships,_e as createStore,ze as defaultSorter};
1
+ const e=e=>typeof e,t="",s=e(t),n=e(!0),a=e(0),o=e(e),r="type",l="default",i="Listener",c="Result",d="add",u="Ids",h="Table",g=h+"s",f=h+u,w="Row",L=w+u,v="Sorted"+w+u,S="Cell",R=S+u,T="Value",I=T+"s",y=T+u,C=e=>t+e,p=Math.max,b=Math.min,V=isFinite,m=(e,t)=>e instanceof t,E=e=>null==e,k=(e,t,s)=>E(e)?s?.():t(e),M=e=>e==s||e==n,D=t=>e(t)==o,J=e=>Array.isArray(e),A=()=>{},x=(e,t)=>e.includes(t),F=(e,t)=>e.every(t),Q=(e,t)=>W(e)===W(t)&&F(e,((e,s)=>t[s]===e)),z=(e,t)=>F(e,((s,n)=>0==n||t(e[n-1],s)<=0)),N=(e,t)=>e.sort(t),O=(e,t)=>e.forEach(t),j=(e,t)=>e.map(t),P=e=>$(e,((e,t)=>e+t),0),W=e=>e.length,B=e=>0==W(e),$=(e,t,s)=>e.reduce(t,s),q=(e,t,s)=>e.slice(t,s),G=(e,...t)=>e.push(...t),H=e=>e.pop(),K=e=>e.shift(),U=Object,X=U.keys,Y=U.isFrozen,Z=U.freeze,_=e=>m(e,U)&&e.constructor==U,ee=(e,t)=>!E(((e,t)=>k(e,(e=>e[t])))(e,t)),te=(e,t)=>(delete e[t],e),se=(e,t)=>j(U.entries(e),(([e,s])=>t(s,e))),ne=e=>_(e)&&0==(e=>W(X(e)))(e),ae=e=>e.size,oe=(e,t)=>e?.has(t)??!1,re=e=>E(e)||0==ae(e),le=e=>[...e?.values()??[]],ie=e=>e.clear(),ce=(e,t)=>e?.forEach(t),de=(e,t)=>e?.delete(t),ue=e=>new Map(e),he=e=>[...e?.keys()??[]],ge=(e,t)=>e?.get(t),fe=(e,t)=>ce(e,((e,s)=>t(s,e))),we=(e,t,s)=>E(s)?(de(e,t),e):e?.set(t,s),Le=(e,t,s)=>(oe(e,t)||we(e,t,s()),ge(e,t)),ve=(e,t,s,n=we)=>(se(t,((t,n)=>s(e,n,t))),fe(e,(s=>ee(t,s)?0:n(e,s))),e),Se=(e,t,s)=>{const n={};return ce(e,((e,a)=>{const o=t?t(e,a):e;!s?.(o,e)&&(n[a]=o)})),n},Re=(e,t,s)=>Se(e,(e=>Se(e,t,s)),ne),Te=(e,t,s)=>Se(e,(e=>Re(e,t,s)),ne),Ie=(e,t)=>{const s=ue();return ce(e,((e,n)=>s.set(n,t?.(e)??e))),s},ye=e=>Ie(e,Ie),Ce=e=>Ie(e,ye),pe=(e,t,s,n,a=0)=>k((s?Le:ge)(e,t[a],a>W(t)-2?s:ue),(o=>{if(a>W(t)-2)return n?.(o)&&we(e,t[a]),o;const r=pe(o,t,s,n,a+1);return re(o)&&we(e,t[a]),r})),be=t=>{const s=e(t);return M(s)||s==a&&V(t)?s:void 0},Ve=(e,t,s,n,a)=>E(a)?e.delCell(t,s,n,!0):e.setCell(t,s,n,a),me=(e,t,s)=>E(s)?e.delValue(t):e.setValue(t,s),Ee=e=>new Set(J(e)||E(e)?e:[e]),ke=(e,t)=>e?.add(t),Me=(e,t,s)=>{const n=e.hasRow,a=ue(),o=ue(),r=ue(),l=ue(),i=ue(),c=(t,s,...n)=>{const a=Le(i,t,Ee);return O(n,(t=>ke(a,t)&&s&&e.callListener(t))),n},d=(t,...s)=>k(ge(i,t),(n=>{O(B(s)?le(n):s,(t=>{e.delListener(t),de(n,t)})),re(n)&&we(i,t)})),u=(e,s)=>{we(a,e,s),oe(o,e)||(we(o,e,t()),we(r,e,ue()),we(l,e,ue()))},h=e=>{we(a,e),we(o,e),we(r,e),we(l,e),d(e)};return[()=>e,()=>he(a),e=>fe(o,e),e=>oe(o,e),e=>ge(a,e),e=>ge(o,e),(e,t)=>we(o,e,t),u,(t,a,o,i,h)=>{u(t,a);const g=ue(),f=ue(),w=ge(r,t),L=ge(l,t),v=t=>{const o=s=>e.getCell(a,t,s),r=ge(w,t),l=n(a,t)?s(i(o,t)):void 0;if(r===l||J(r)&&J(l)&&Q(r,l)||we(g,t,[r,l]),!E(h)){const e=ge(L,t),s=n(a,t)?h(o,t):void 0;e!=s&&we(f,t,s)}},S=e=>{o((()=>{ce(g,(([,e],t)=>we(w,t,e))),ce(f,((e,t)=>we(L,t,e)))}),g,f,w,L,e),ie(g),ie(f)};fe(w,v),e.hasTable(a)&&O(e.getRowIds(a),(e=>{oe(w,e)||v(e)})),S(!0),d(t),c(t,0,e.addRowListener(a,null,((e,t,s)=>v(s))),e.addTableListener(a,(()=>S())))},h,()=>fe(i,h),c,d]},De=(n,a)=>e(n)==s?e=>e(n):n??(()=>a??t),Je=e=>{const t=new WeakMap;return s=>(t.has(s)||t.set(s,e(s)),t.get(s))},Ae=/^\d+$/,xe=()=>{const e=[];let s=0;return[n=>(n?K(e):null)??t+s++,t=>{Ae.test(t)&&W(e)<1e3&&G(e,t)}]},Fe=e=>{let s;const[n,a]=xe(),o=ue();return[(a,r,l,i=[],c=(()=>[]))=>{s??=e();const d=n(1);return we(o,d,[a,r,l,i,c]),ke(pe(r,l??[t],Ee),d),d},(e,n,...a)=>O(((e,s=[t])=>{const n=[],a=(e,t)=>t==W(s)?G(n,e):null===s[t]?ce(e,(e=>a(e,t+1))):O([s[t],null],(s=>a(ge(e,s),t+1)));return a(e,0),n})(e,n),(e=>ce(e,(e=>ge(o,e)[0](s,...n??[],...a))))),e=>k(ge(o,e),(([,s,n])=>(pe(s,n??[t],void 0,(t=>(de(t,e),re(t)?1:0))),we(o,e),a(e),n))),e=>k(ge(o,e),(([e,,t=[],n,a])=>{const o=(...r)=>{const l=W(r);l==W(t)?e(s,...r,...a(r)):E(t[l])?O(n[l]?.(...r)??[],(e=>o(...r,e))):o(...r,t[l])};o()}))]},Qe=Je((e=>{let s,n,a,o=100,r=ue(),l=ue(),i=1;const c=ue(),d=ue(),[u,h,g]=Fe((()=>Q)),f=ue(),w=ue(),L=[],v=[],S=(t,s)=>{i=0,e.transaction((()=>{const[n,a]=ge(f,s);ce(n,((s,n)=>ce(s,((s,a)=>ce(s,((s,o)=>Ve(e,n,a,o,s[t]))))))),ce(a,((s,n)=>me(e,n,s[t])))})),i=1},R=e=>{we(f,e),we(w,e),h(d,[e])},T=(e,t)=>O(((e,t)=>e.splice(0,t))(e,t??W(e)),R),I=()=>T(L,W(L)-o),y=()=>k(s,(()=>{G(L,s),I(),T(v),s=void 0,a=1})),C=()=>{s=H(L),a=1},p=e.addCellListener(null,null,null,((e,t,s,n,a,o)=>{if(i){y();const e=Le(r,t,ue),l=Le(e,s,ue),i=Le(l,n,(()=>[o,void 0]));i[1]=a,i[0]===a&&re(we(l,n))&&re(we(e,s))&&re(we(r,t))&&C(),D()}})),b=e.addValueListener(null,((e,t,s,n)=>{if(i){y();const e=Le(l,t,(()=>[n,void 0]));e[1]=s,e[0]===s&&re(we(l,t))&&C(),D()}})),V=(e="")=>(E(s)&&(s=t+n++,we(f,s,[r,l]),A(s,e),r=ue(),l=ue(),a=1),s),m=()=>{B(L)||(((e,...t)=>{e.unshift(...t)})(v,V()),S(0,s),s=H(L),a=1)},M=()=>{B(v)||(G(L,s),s=K(v),S(1,s),a=1)},D=()=>{a&&(h(c),a=0)},J=e=>{const t=V(e);return D(),t},A=(e,t)=>(F(e)&&ge(w,e)!==t&&(we(w,e,t),h(d,[e])),Q),F=e=>oe(f,e),Q={setSize:e=>(o=e,I(),Q),addCheckpoint:J,setCheckpoint:A,getStore:()=>e,getCheckpointIds:()=>[[...L],s,[...v]],forEachCheckpoint:e=>fe(w,e),hasCheckpoint:F,getCheckpoint:e=>ge(w,e),goBackward:()=>(m(),D(),Q),goForward:()=>(M(),D(),Q),goTo:e=>{const t=x(L,e)?m:x(v,e)?M:null;for(;!E(t)&&e!=s;)t();return D(),Q},addCheckpointIdsListener:e=>u(e,c),addCheckpointListener:(e,t)=>u(t,d,[e]),delListener:e=>(g(e),Q),clear:()=>(T(L),T(v),E(s)||R(s),s=void 0,n=0,J(),Q),destroy:()=>{e.delListener(p),e.delListener(b)},getListenerStats:()=>({})};return Z(Q.clear())})),ze=(e,t)=>e<t?-1:1,Ne=Je((e=>{const s=ue(),n=ue(),[a,o,r,l,i,c,d,,u,h,g]=Me(e,ue,(e=>E(e)?t:J(e)?j(e,C):C(e))),[f,w,L]=Fe((()=>S)),v=(t,s,n)=>{const a=i(t);ce(n,((t,n)=>s(n,(s=>ce(t,(t=>s(t,(s=>e.forEachCell(a,t,s)))))))))},S={setIndexDefinition:(e,t,a,o,r,l=ze)=>{const i=E(r)?void 0:([e],[t])=>r(e,t);return u(e,t,((t,a,r,u,h,g)=>{let f=0;const L=Ee(),v=Ee(),S=c(e);if(ce(a,(([e,t],s)=>{const n=Ee(e),a=Ee(t);ce(n,(e=>de(a,e)?de(n,e):0)),ce(n,(e=>{ke(L,e),k(ge(S,e),(t=>{de(t,s),re(t)&&(we(S,e),f=1)}))})),ce(a,(e=>{ke(L,e),oe(S,e)||(we(S,e,Ee()),f=1),ke(ge(S,e),s),E(o)||ke(v,e)}))})),t(),re(h)||(g?fe(S,(e=>ke(v,e))):fe(r,(e=>k(ge(u,e),(e=>ke(v,e))))),ce(v,(e=>{const t=(t,s)=>l(ge(h,t),ge(h,s),e),s=[...ge(S,e)];z(s,t)||(we(S,e,Ee(N(s,t))),ke(L,e))}))),(f||g)&&!E(i)){const t=[...S];z(t,i)||(d(e,ue(N(t,i))),f=1)}f&&w(s,[e]),ce(L,(t=>w(n,[e,t])))}),De(a),k(o,De)),S},delIndexDefinition:e=>(h(e),S),getStore:a,getIndexIds:o,forEachIndex:e=>r(((t,s)=>e(t,(e=>v(t,e,s))))),forEachSlice:(e,t)=>v(e,t,c(e)),hasIndex:l,hasSlice:(e,t)=>oe(c(e),t),getTableId:i,getSliceIds:e=>he(c(e)),getSliceRowIds:(e,t)=>le(ge(c(e),t)),addSliceIdsListener:(e,t)=>f(t,s,[e]),addSliceRowIdsListener:(e,t,s)=>f(s,n,[e,t]),delListener:e=>(L(e),S),destroy:g,getListenerStats:()=>({})};return Z(S)})),Oe=ue([["avg",[(e,t)=>P(e)/t,(e,t,s)=>e+(t-e)/(s+1),(e,t,s)=>e+(e-t)/(s-1),(e,t,s,n)=>e+(t-s)/n]],["max",[e=>p(...e),(e,t)=>p(t,e),(e,t)=>t==e?void 0:e,(e,t,s)=>s==e?void 0:p(t,e)]],["min",[e=>b(...e),(e,t)=>b(t,e),(e,t)=>t==e?void 0:e,(e,t,s)=>s==e?void 0:b(t,e)]],["sum",[e=>P(e),(e,t)=>e+t,(e,t)=>e-t,(e,t,s)=>e-s+t]]]),je=(e,t,s,n,a,o=!1)=>{if(re(s))return;const[r,l,i,c]=a;return o||=E(e),ce(n,(([s,n])=>{o||(e=E(s)?l?.(e,n,t++):E(n)?i?.(e,s,t--):c?.(e,n,s,t),o||=E(e))})),o?r(le(s),ae(s)):e},Pe=Je((e=>{const s=ue(),[n,a,o,r,l,i,c,,d,u,h]=Me(e,A,(e=>isNaN(e)||E(e)||!0===e||!1===e||e===t?void 0:1*e)),[g,f,w]=Fe((()=>L)),L={setMetricDefinition:(e,t,n,a,o,r,l)=>{const u=D(n)?[n,o,r,l]:ge(Oe,n)??ge(Oe,"sum");return d(e,t,((t,n,a,o,r,l)=>{const d=i(e),h=ae(o);l||=E(d),t();let g=je(d,h,o,n,u,l);V(g)||(g=void 0),g!=d&&(c(e,g),f(s,[e],g,d))}),De(a,1)),L},delMetricDefinition:e=>(u(e),L),getStore:n,getMetricIds:a,forEachMetric:o,hasMetric:r,getTableId:l,getMetric:i,addMetricListener:(e,t)=>g(t,s,[e]),delListener:e=>(w(e),L),destroy:h,getListenerStats:()=>({})};return Z(L)})),We=ue(),Be=ue(),$e=(e,t,s,n,a,o,r=[])=>{let l,i,c,d=0,u=0;Le(We,r,(()=>0)),Le(Be,r,(()=>[]));const h=async e=>(2!=d&&(d=1,await g.schedule((async()=>{await e(),d=0}))),g),g={load:async(s,n)=>await h((async()=>{try{e.setContent(await t())}catch{e.setContent([s,n])}})),startAutoLoad:async(s={},a={})=>(g.stopAutoLoad(),await g.load(s,a),u=1,c=n((async(s,n)=>{if(n){const t=n();await h((async()=>e.setTransactionChanges(t)))}else await h((async()=>{try{e.setContent(s?.()??await t())}catch(e){o?.(e)}}))})),g),stopAutoLoad:()=>(u&&(a(c),c=void 0,u=0),g),save:async t=>(1!=d&&(d=2,await g.schedule((async()=>{try{await s(e.getContent,t)}catch(e){o?.(e)}d=0}))),g),startAutoSave:async()=>(await g.stopAutoSave().save(),l=e.addDidFinishTransactionListener(((e,t)=>{const[s,n]=t();ne(s)&&ne(n)||g.save((()=>[s,n]))})),g),stopAutoSave:()=>(k(l,e.delListener),g),schedule:async(...e)=>(G(ge(Be,r),...e),await(async()=>{if(!ge(We,r)){for(we(We,r,1);!E(i=K(ge(Be,r)));)try{await i()}catch(e){o?.(e)}we(We,r,0)}})(),g),getStore:()=>e,destroy:()=>g.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return Z(g)},qe=Je((e=>{const s=e.createStore,[n,a,o,r,l,,,u,,g,f,T,I]=Me(e,(()=>!0),A),y=s(),C=s(),p=ue(),b=(e,t,...s)=>O(s,(s=>ke(Le(Le(p,t,ue),e,Ee),s))),V=e=>{k(ge(p,e),(e=>{fe(e,((e,t)=>ce(t,(t=>e.delListener(t))))),ie(e)})),O([C,y],(t=>t.delTable(e)))},m=(e,t,s)=>b(t,e,t.addStartTransactionListener(s.startTransaction),t.addDidFinishTransactionListener((()=>s.finishTransaction()))),M={setQueryDefinition:(s,n,a)=>{u(s,n),V(s);const o=[],r=[[null,[n,null,null,[],ue()]]],l=[],i=[],c=[];a({select:(e,s)=>{const n=D(e)?[W(o)+t,e]:[E(s)?e:s,t=>t(e,s)];return G(o,n),{as:e=>n[0]=e}},join:(e,t,s)=>{const n=E(s)||D(t)?null:t,a=E(n)?t:s,o=[e,[e,n,D(a)?a:e=>e(a),[],ue()]];return G(r,o),{as:e=>o[0]=e}},where:(e,t,s)=>G(l,D(e)?e:E(s)?s=>s(e)===t:n=>n(e,t)===s),group:(e,t,s,n,a)=>{const o=[e,[e,D(t)?[t,s,n,a]:ge(Oe,t)??[(e,t)=>t]]];return G(i,o),{as:e=>o[0]=e}},having:(e,t)=>G(c,D(e)?e:s=>s(e)===t)});const d=ue(o);if(re(d))return M;const h=ue(r);fe(h,((e,[,t])=>k(ge(h,t),(({3:t})=>E(e)?0:G(t,e)))));const g=ue(i);let f=y;if(re(g)&&B(c))f=C;else{m(s,f,C);const e=ue();fe(g,((t,[s,n])=>ke(Le(e,s,Ee),[t,n])));const t=Ee();fe(d,(s=>oe(e,s)?0:ke(t,s)));const n=ue(),a=(t,n,a,o)=>k(t,(([r,l,i,d])=>{fe(n,((t,[s])=>{const n=Le(r,t,ue),l=ge(n,a),i=o?void 0:s;if(l!==i){const s=Ee([[l,i]]),o=ae(n);we(n,a,i),ce(ge(e,t),(([e,t])=>{const a=je(d[e],o,n,s,t);d[e]=E(be(a))?null:a}))}})),re(l)||!F(c,(e=>e((e=>d[e]))))?C.delRow(s,i):E(i)?t[2]=C.addRow(s,d):C.setRow(s,i,d)}));b(f,s,f.addRowListener(s,null,((o,r,l,i)=>{const c=[],d=[],u=ue(),h=f.hasRow(s,l);let g=!h;ce(t,(e=>{const[t,n,a]=i(s,l,e);G(c,n),G(d,a),g||=t})),fe(e,(e=>{const[t,,n]=i(s,l,e);(g||t)&&we(u,e,[n])})),g&&a(pe(n,c,void 0,(([,e])=>(de(e,l),re(e)))),u,l,1),h&&a(pe(n,d,(()=>{const e={};return ce(t,(t=>e[t]=f.getCell(s,l,t))),[ue(),Ee(),void 0,e]}),(([,e])=>{ke(e,l)})),u,l)})))}m(s,e,f);const w=(t,a,o,r)=>{const i=t=>e.getCell(a,o,t);O(r,(n=>{const[a,,o,r,l]=ge(h,n),c=o?.(i,t),[d,u]=ge(l,t)??[];c!=d&&(E(u)||I(s,u),we(l,t,E(c)?null:[c,...T(s,1,e.addRowListener(a,c,(()=>w(t,a,c,r))))]))})),(t=>{const a=(s,a)=>e.getCell(...E(a)?[n,t,s]:s===n?[n,t,a]:[ge(h,s)?.[0],ge(ge(h,s)?.[4],t)?.[0],a]);f.transaction((()=>F(l,(e=>e(a)))?fe(d,((e,n)=>Ve(f,s,t,e,n(a,t)))):f.delRow(s,t)))})(t)},{3:L}=ge(h,null);return f.transaction((()=>T(s,1,e.addRowListener(n,null,((t,a,o)=>{e.hasRow(n,o)?w(o,n,o,L):(f.delRow(s,o),ce(h,(({4:e})=>k(ge(e,o),(([,t])=>{I(s,t),we(e,o)})))))}))))),M},delQueryDefinition:e=>(V(e),g(e),M),getStore:n,getQueryIds:a,forEachQuery:o,hasQuery:r,getTableId:l,delListener:e=>(C.delListener(e),M),destroy:f,getListenerStats:()=>{const{tables:e,tableIds:t,transaction:s,...n}=C.getListenerStats();return n}};return se({[h]:[1,1],[L]:[0,1],[v]:[0,5],[w]:[1,2],[R]:[0,2],[S]:[1,3]},(([e,t],s)=>{O(e?["get","has","forEach"]:["get"],(e=>M[e+c+s]=(...t)=>C[e+s](...t))),M[d+c+s+i]=(...e)=>C[d+s+i](...q(e,0,t),((s,...n)=>e[t](M,...n)))})),Z(M)})),Ge=Je((e=>{const s=ue(),n=ue(),a=ue(),o=ue(),[r,l,i,c,d,u,,,h,g,f]=Me(e,(()=>[ue(),ue(),ue(),ue()]),(e=>E(e)?void 0:e+t)),[w,L,v]=Fe((()=>I)),S=(e,t,s)=>k(u(e),(([n,,a])=>{if(!oe(a,t)){const o=Ee();if(d(e)!=T(e))ke(o,t);else{let e=t;for(;!E(e)&&!oe(o,e);)ke(o,e),e=ge(n,e)}if(s)return o;we(a,t,o)}return ge(a,t)})),R=(e,t)=>k(u(e),(([,,e])=>we(e,t))),T=e=>ge(s,e),I={setRelationshipDefinition:(e,t,r,l)=>(we(s,e,r),h(e,t,((t,s)=>{const r=Ee(),l=Ee(),i=Ee(),[c,d]=u(e);ce(s,(([t,s],n)=>{E(t)||(ke(l,t),k(ge(d,t),(e=>{de(e,n),re(e)&&we(d,t)}))),E(s)||(ke(l,s),oe(d,s)||we(d,s,Ee()),ke(ge(d,s),n)),ke(r,n),we(c,n,s),fe(ge(o,e),(t=>{oe(S(e,t),n)&&ke(i,t)}))})),t(),ce(r,(t=>L(n,[e,t]))),ce(l,(t=>L(a,[e,t]))),ce(i,(t=>{R(e,t),L(o,[e,t])}))}),De(l)),I),delRelationshipDefinition:e=>(we(s,e),g(e),I),getStore:r,getRelationshipIds:l,forEachRelationship:t=>i((s=>t(s,(t=>e.forEachRow(d(s),t))))),hasRelationship:c,getLocalTableId:d,getRemoteTableId:T,getRemoteRowId:(e,t)=>ge(u(e)?.[0],t),getLocalRowIds:(e,t)=>le(ge(u(e)?.[1],t)),getLinkedRowIds:(e,t)=>E(u(e))?[t]:le(S(e,t,!0)),addRemoteRowIdListener:(e,t,s)=>w(s,n,[e,t]),addLocalRowIdsListener:(e,t,s)=>w(s,a,[e,t]),addLinkedRowIdsListener:(e,t,s)=>(S(e,t),w(s,o,[e,t])),delListener:e=>(R(...v(e)),I),destroy:f,getListenerStats:()=>({})};return Z(I)})),He=e=>[e,e],Ke=()=>[ue(),ue()],Ue=e=>[...e],Xe=([e,t])=>e===t,Ye=e=>JSON.stringify(e,((e,t)=>m(t,Map)?U.fromEntries([...t]):t)),Ze=JSON.parse,_e=(e,t,s)=>E(e)||!_(e)||ne(e)||Y(e)?(s?.(),!1):(se(e,((s,n)=>{t(s,n)||te(e,n)})),!ne(e)),et=(e,t,s)=>we(e,t,ge(e,t)==-s?void 0:s),tt=()=>{let e,t,s=!1,n=!1,o=0;const c=ue(),u=ue(),v=ue(),p=ue(),b=ue(),V=ue(),m=ue(),J=ue(),A=ue(),F=ue(),z=ue(),P=ue(),W=ue(),B=Ee(),$=ue(),H=ue(),K=ue(),U=ue(),X=Ke(),Y=Ke(),_=Ke(),ae=Ke(),le=Ke(),pe=Ke(),Me=Ke(),De=Ke(),Je=Ke(),Ae=Ke(),Qe=Ke(),Ne=Ke(),Oe=Ke(),je=Ke(),Pe=ue(),We=Ke(),[Be,$e,qe,Ge]=Fe((()=>fs)),st=e=>{if(!_e(e,((e,t)=>x([r,l],t))))return!1;const t=e[r];return!(!M(t)&&t!=a||(be(e[l])!=t&&te(e,l),0))},nt=(t,s)=>(!e||oe(F,s)||At(s))&&_e(t,((e,t)=>at(s,t,e)),(()=>At(s))),at=(e,t,s,n)=>_e(n?s:it(s,e,t),((n,a)=>k(ot(e,t,a,n),(e=>(s[a]=e,!0)),(()=>!1))),(()=>At(e,t))),ot=(t,s,n,a)=>e?k(ge(ge(F,t),n),(e=>be(a)!=e[r]?At(t,s,n,a,e[l]):a),(()=>At(t,s,n,a))):E(be(a))?At(t,s,n,a):a,rt=(e,t)=>_e(t?e:ct(e),((t,s)=>k(lt(s,t),(t=>(e[s]=t,!0)),(()=>!1))),(()=>xt())),lt=(e,s)=>t?k(ge(P,e),(t=>be(s)!=t[r]?xt(e,s,t[l]):s),(()=>xt(e,s))):E(be(s))?xt(e,s):s,it=(e,t,s)=>(k(ge(z,t),(([n,a])=>{ce(n,((t,s)=>{ee(e,s)||(e[s]=t)})),ce(a,(n=>{ee(e,n)||At(t,s,n)}))})),e),ct=e=>(t&&(ce(W,((t,s)=>{ee(e,s)||(e[s]=t)})),ce(B,(t=>{ee(e,t)||xt(t)}))),e),dt=e=>ve(F,e,((e,t,s)=>{const n=ue(),a=Ee();ve(Le(F,t,ue),s,((e,t,s)=>{we(e,t,s),k(s[l],(e=>we(n,t,e)),(()=>ke(a,t)))})),we(z,t,[n,a])}),((e,t)=>{we(F,t),we(z,t)})),ut=e=>ve(P,e,((e,t,s)=>{we(P,t,s),k(s[l],(e=>we(W,t,e)),(()=>ke(B,t)))}),((e,t)=>{we(P,t),we(W,t),de(B,t)})),ht=e=>ne(e)?os():es(e),gt=e=>ve(K,e,((e,t,s)=>ft(t,s)),((e,t)=>Ct(t))),ft=(e,t)=>ve(Le(K,e,(()=>(mt(e,1),we($,e,xe()),we(H,e,ue()),ue()))),t,((t,s,n)=>wt(e,t,s,n)),((t,s)=>pt(e,t,s))),wt=(e,t,s,n,a)=>ve(Le(t,s,(()=>(Et(e,s,1),ue()))),n,((t,n,a)=>Lt(e,s,t,n,a)),((n,o)=>bt(e,t,s,n,o,a))),Lt=(e,t,s,n,a)=>{oe(s,n)||kt(e,t,n,1);const o=ge(s,n);a!==o&&(Mt(e,t,n,o,a),we(s,n,a))},vt=(e,t,s,n,a)=>k(ge(t,s),(t=>Lt(e,s,t,n,a)),(()=>wt(e,t,s,it({[n]:a},e,s)))),St=e=>ne(e)?is():ts(e),Rt=e=>ve(U,e,((e,t,s)=>Tt(t,s)),((e,t)=>Vt(t))),Tt=(e,t)=>{oe(U,e)||Dt(e,1);const s=ge(U,e);t!==s&&(Jt(e,s,t),we(U,e,t))},It=(e,t)=>{const[s]=ge($,e),n=s(t);return oe(ge(K,e),n)?It(e,t):n},yt=e=>ge(K,e)??ft(e,{}),Ct=e=>ft(e,{}),pt=(e,t,s)=>{const[,n]=ge($,e);n(s),wt(e,t,s,{},!0)},bt=(e,t,s,n,a,o)=>{const r=ge(ge(z,e)?.[0],a);if(!E(r)&&!o)return Lt(e,s,n,a,r);const l=t=>{Mt(e,s,t,ge(n,t)),kt(e,s,t,-1),we(n,t)};E(r)?l(a):fe(n,l),re(n)&&(Et(e,s,-1),re(we(t,s))&&(mt(e,-1),we(K,e),we($,e),we(H,e)))},Vt=e=>{const t=ge(W,e);if(!E(t))return Tt(e,t);Jt(e,ge(U,e)),Dt(e,-1),we(U,e)},mt=(e,t)=>et(c,e,t),Et=(e,t,s)=>et(Le(v,e,ue),t,s),kt=(e,t,s,n)=>{const a=ge(H,e),o=ge(a,s)??0;(0==o&&1==n||1==o&&-1==n)&&et(Le(u,e,ue),s,n),we(a,s,o!=-n?o+n:null),et(Le(Le(p,e,ue),t,ue),s,n)},Mt=(e,t,s,n,a)=>Le(Le(Le(b,e,ue),t,ue),s,(()=>[n,0]))[1]=a,Dt=(e,t)=>et(V,e,t),Jt=(e,t,s)=>Le(m,e,(()=>[t,0]))[1]=s,At=(e,t,s,n,a)=>(G(Le(Le(Le(J,e,ue),t,ue),s,(()=>[])),n),a),xt=(e,t,s)=>(G(Le(A,e,(()=>[])),t),s),Ft=(e,t,s)=>k(ge(ge(ge(b,e),t),s),(([e,t])=>[!0,e,t]),(()=>[!1,...He(Xt(e,t,s))])),Qt=e=>k(ge(m,e),(([e,t])=>[!0,e,t]),(()=>[!1,...He(_t(e))])),zt=e=>re(J)||re(Ae[e])?0:ce(e?Ce(J):J,((t,s)=>ce(t,((t,n)=>ce(t,((t,a)=>$e(Ae[e],[s,n,a],t))))))),Nt=e=>re(A)||re(Qe[e])?0:ce(e?Ie(A):A,((t,s)=>$e(Qe[e],[s],t))),Ot=(e,t,s)=>{if(!re(t))return $e(e,s,(()=>Se(t))),1},jt=e=>{const t=re(pe[e]),s=re(De[e])&&re(ae[e])&&re(le[e])&&t&&re(Y[e]),n=re(Je[e])&&re(Me[e])&&re(_[e])&&re(X[e]);if(!s||!n){const a=e?[Ie(c),ye(u),ye(v),Ce(p),Ce(b)]:[c,u,v,p,b];if(!s){Ot(Y[e],a[0]),ce(a[1],((t,s)=>Ot(ae[e],t,[s])));const s=Ee();ce(a[2],((n,a)=>{Ot(le[e],n,[a])&&!t&&($e(pe[e],[a,null]),ke(s,a))})),t||ce(a[4],((t,n)=>{if(!oe(s,n)){const s=Ee();ce(t,(e=>ce(e,(([t,n],a)=>n!==t?ke(s,a):de(e,a))))),ce(s,(t=>$e(pe[e],[n,t])))}})),ce(a[3],((t,s)=>ce(t,((t,n)=>Ot(De[e],t,[s,n])))))}if(!n){let t;ce(a[4],((s,n)=>{let a;ce(s,((s,o)=>{let r;ce(s,(([s,l],i)=>{l!==s&&($e(Je[e],[n,o,i],l,s,Ft),t=a=r=1)})),r&&$e(Me[e],[n,o],Ft)})),a&&$e(_[e],[n],Ft)})),t&&$e(X[e],void 0,Ft)}}},Pt=e=>{const t=re(Oe[e]),s=re(je[e])&&re(Ne[e]);if(!t||!s){const n=e?[Ie(V),Ie(m)]:[V,m];if(t||Ot(Oe[e],n[0]),!s){let t;ce(n[1],(([s,n],a)=>{n!==s&&($e(je[e],[a],n,s,Qt),t=1)})),t&&$e(Ne[e],void 0,Qt)}}},Wt=(e,...t)=>(us((()=>e(...j(t,C)))),fs),Bt=()=>[Se(b,((e,t)=>-1===ge(c,t)?null:Se(e,((e,s)=>-1===ge(ge(v,t),s)?null:Se(e,(([,e])=>e??null),((e,t)=>Xe(t)))),ne)),ne),Se(m,(([,e])=>e??null),((e,t)=>Xe(t)))],$t=()=>({cellsTouched:s,valuesTouched:n,changedCells:Te(b,Ue,Xe),invalidCells:Te(J),changedValues:Se(m,Ue,Xe),invalidValues:Se(A),changedTableIds:Se(c),changedRowIds:Re(v),changedCellIds:Te(p),changedValueIds:Se(V)}),qt=()=>Te(K),Gt=()=>he(K),Ht=e=>he(ge(K,C(e))),Kt=(e,t,s,n=0,a)=>{return j(q(N((o=ge(K,C(e)),r=(e,s)=>[E(t)?s:ge(e,C(t)),s],j([...o?.entries()??[]],(([e,t])=>r(t,e)))),(([e],[t])=>ze(e,t)*(s?-1:1))),n,E(a)?a:n+a),(([,e])=>e));var o,r},Ut=(e,t)=>he(ge(ge(K,C(e)),C(t))),Xt=(e,t,s)=>ge(ge(ge(K,C(e)),C(t)),C(s)),Yt=()=>Se(U),Zt=()=>he(U),_t=e=>ge(U,C(e)),es=e=>Wt((()=>(e=>_e(e,nt,At))(e)?gt(e):0)),ts=e=>Wt((()=>rt(e)?Rt(e):0)),ss=e=>{try{ht(Ze(e))}catch{}return fs},ns=t=>Wt((()=>{if((e=_e(t,(e=>_e(e,st))))&&(dt(t),!re(K))){const e=qt();os(),es(e)}})),as=e=>Wt((()=>{if(t=(e=>_e(e,st))(e)){const s=Yt();ds(),is(),t=!0,ut(e),ts(s)}})),os=()=>Wt((()=>gt({}))),rs=e=>Wt((e=>oe(K,e)?Ct(e):0),e),ls=(e,t)=>Wt(((e,t)=>k(ge(K,e),(s=>oe(s,t)?pt(e,s,t):0))),e,t),is=()=>Wt((()=>Rt({}))),cs=()=>Wt((()=>{dt({}),e=!1})),ds=()=>Wt((()=>{ut({}),t=!1})),us=(e,t)=>{if(-1!=o){hs();const s=e();return gs(t),s}},hs=()=>(-1!=o&&o++,1==o&&$e(Pe,void 0,Bt,$t),fs),gs=e=>(o>0&&(o--,0==o&&(s=!re(b),n=!re(m),o=1,zt(1),s&&jt(1),Nt(1),n&&Pt(1),e?.(Bt,$t)&&(ce(b,((e,t)=>ce(e,((e,s)=>ce(e,(([e],n)=>Ve(fs,t,s,n,e))))))),ce(m,(([e],t)=>me(fs,t,e))),s=n=!1),$e(We[0],void 0,Bt,$t),o=-1,zt(0),s&&jt(0),Nt(0),n&&Pt(0),$e(We[1],void 0,Bt,$t),o=0,s=n=!1,O([c,u,v,p,b,J,V,m,A],ie))),fs),fs={getContent:()=>[qt(),Yt()],getTables:qt,getTableIds:Gt,getTable:e=>Re(ge(K,C(e))),getTableCellIds:e=>he(ge(H,C(e))),getRowIds:Ht,getSortedRowIds:Kt,getRow:(e,t)=>Se(ge(ge(K,C(e)),C(t))),getCellIds:Ut,getCell:Xt,getValues:Yt,getValueIds:Zt,getValue:_t,hasTables:()=>!re(K),hasTable:e=>oe(K,C(e)),hasTableCell:(e,t)=>oe(ge(H,C(e)),C(t)),hasRow:(e,t)=>oe(ge(K,C(e)),C(t)),hasCell:(e,t,s)=>oe(ge(ge(K,C(e)),C(t)),C(s)),hasValues:()=>!re(U),hasValue:e=>oe(U,C(e)),getTablesJson:()=>Ye(K),getValuesJson:()=>Ye(U),getJson:()=>Ye([K,U]),getTablesSchemaJson:()=>Ye(F),getValuesSchemaJson:()=>Ye(P),getSchemaJson:()=>Ye([F,P]),setContent:([e,t])=>Wt((()=>{(ne(e)?os:es)(e),(ne(t)?is:ts)(t)})),setTables:es,setTable:(e,t)=>Wt((e=>nt(t,e)?ft(e,t):0),e),setRow:(e,t,s)=>Wt(((e,t)=>at(e,t,s)?wt(e,yt(e),t,s):0),e,t),addRow:(e,t,s=!0)=>us((()=>{let n;return at(e,n,t)&&(e=C(e),wt(e,yt(e),n=It(e,s?1:0),t)),n})),setPartialRow:(e,t,s)=>Wt(((e,t)=>{if(at(e,t,s,1)){const n=yt(e);se(s,((s,a)=>vt(e,n,t,a,s)))}}),e,t),setCell:(e,t,s,n)=>Wt(((e,t,s)=>k(ot(e,t,s,D(n)?n(Xt(e,t,s)):n),(n=>vt(e,yt(e),t,s,n)))),e,t,s),setValues:ts,setPartialValues:e=>Wt((()=>rt(e,1)?se(e,((e,t)=>Tt(t,e))):0)),setValue:(e,t)=>Wt((e=>k(lt(e,D(t)?t(_t(e)):t),(t=>Tt(e,t)))),e),setTransactionChanges:e=>Wt((()=>{se(e[0],((e,t)=>E(e)?rs(t):se(e,((e,s)=>E(e)?ls(t,s):se(e,((e,n)=>Ve(fs,t,s,n,e))))))),se(e[1],((e,t)=>me(fs,t,e)))})),setTablesJson:ss,setValuesJson:e=>{try{St(Ze(e))}catch{}return fs},setJson:e=>{try{const[t,s]=Ze(e);ht(t),St(s)}catch{ss(e)}return fs},setTablesSchema:ns,setValuesSchema:as,setSchema:(e,t)=>Wt((()=>{ns(e),as(t)})),delTables:os,delTable:rs,delRow:ls,delCell:(e,t,s,n)=>Wt(((e,t,s)=>k(ge(K,e),(a=>k(ge(a,t),(o=>oe(o,s)?bt(e,a,t,o,s,n):0))))),e,t,s),delValues:is,delValue:e=>Wt((e=>oe(U,e)?Vt(e):0),e),delTablesSchema:cs,delValuesSchema:ds,delSchema:()=>Wt((()=>{cs(),ds()})),transaction:us,startTransaction:hs,finishTransaction:gs,forEachTable:e=>ce(K,((t,s)=>e(s,(e=>ce(t,((t,s)=>e(s,(e=>fe(t,e))))))))),forEachTableCell:(e,t)=>fe(ge(H,C(e)),t),forEachRow:(e,t)=>ce(ge(K,C(e)),((e,s)=>t(s,(t=>fe(e,t))))),forEachCell:(e,t,s)=>fe(ge(ge(K,C(e)),C(t)),s),forEachValue:e=>fe(U,e),addSortedRowIdsListener:(e,t,s,n,a,o,r)=>{let l=Kt(e,t,s,n,a);return Be((()=>{const r=Kt(e,t,s,n,a);Q(r,l)||(l=r,o(fs,e,t,s,n,a,l))}),pe[r?1:0],[e,t],[Gt])},addStartTransactionListener:e=>Be(e,Pe),addWillFinishTransactionListener:e=>Be(e,We[0]),addDidFinishTransactionListener:e=>Be(e,We[1]),callListener:e=>(Ge(e),fs),delListener:e=>(qe(e),fs),getListenerStats:()=>({}),createStore:tt};return se({[g]:[0,X],[f]:[0,Y],[h]:[1,_,[Gt]],[h+R]:[1,ae,[Gt]],[L]:[1,le,[Gt]],[w]:[2,Me,[Gt,Ht]],[R]:[2,De,[Gt,Ht]],[S]:[3,Je,[Gt,Ht,Ut],e=>He(Xt(...e))],InvalidCell:[3,Ae],[I]:[0,Ne],[y]:[0,Oe],[T]:[1,je,[Zt],e=>He(_t(e[0]))],InvalidValue:[1,Qe]},(([e,t,s,n],a)=>{fs[d+a+i]=(...a)=>Be(a[e],t[a[e+1]?1:0],e>0?q(a,0,e):void 0,s,n)})),Z(fs)};export{Qe as createCheckpoints,$e as createCustomPersister,Ne as createIndexes,Pe as createMetrics,qe as createQueries,Ge as createRelationships,tt as createStore,ze as defaultSorter};
Binary file
@@ -25,6 +25,9 @@ import {Store} from '../store';
25
25
  * @param docHandle The Automerge document handler to persist the Store with.
26
26
  * @param docMapName The name of the map used inside the Automerge document to
27
27
  * sync the Store to (which otherwise will default to 'tinybase').
28
+ * @param onIgnoredError An optional handler for the errors that the Persister
29
+ * would otherwise ignore when trying to save or load data. This is suitable for
30
+ * debugging persistence issues in a development environment, since v4.0.4.
28
31
  * @returns A reference to the new Persister object.
29
32
  * @example
30
33
  * This example creates a Persister object and persists the Store to an
@@ -105,4 +108,5 @@ export function createAutomergePersister(
105
108
  store: Store,
106
109
  docHandle: DocHandle<any>,
107
110
  docMapName?: string,
111
+ onIgnoredError?: (error: any) => void,
108
112
  ): Persister;
@@ -26,6 +26,9 @@ import {Store} from '../store';
26
26
  * that the browser uses to identify the storage location.
27
27
  * @param store The Store to persist.
28
28
  * @param storageName The unique key to identify the storage location.
29
+ * @param onIgnoredError An optional handler for the errors that the Persister
30
+ * would otherwise ignore when trying to save or load data. This is suitable for
31
+ * debugging persistence issues in a development environment, since v4.0.4.
29
32
  * @returns A reference to the new Persister object.
30
33
  * @example
31
34
  * This example creates a Persister object and persists the Store to the
@@ -47,6 +50,7 @@ import {Store} from '../store';
47
50
  export function createSessionPersister(
48
51
  store: Store,
49
52
  storageName: string,
53
+ onIgnoredError?: (error: any) => void,
50
54
  ): Persister;
51
55
 
52
56
  /**
@@ -58,6 +62,9 @@ export function createSessionPersister(
58
62
  * that the browser uses to identify the storage location.
59
63
  * @param store The Store to persist.
60
64
  * @param storageName The unique key to identify the storage location.
65
+ * @param onIgnoredError An optional handler for the errors that the Persister
66
+ * would otherwise ignore when trying to save or load data. This is suitable for
67
+ * debugging persistence issues in a development environment, since v4.0.4.
61
68
  * @returns A reference to the new Persister object.
62
69
  * @example
63
70
  * This example creates a Persister object and persists the Store to the
@@ -79,4 +86,5 @@ export function createSessionPersister(
79
86
  export function createLocalPersister(
80
87
  store: Store,
81
88
  storageName: string,
89
+ onIgnoredError?: (error: any) => void,
82
90
  ): Persister;
@@ -16,8 +16,8 @@ import {Store} from '../store';
16
16
  * persist the Store to a local CR-SQLite database (in an appropriate
17
17
  * environment).
18
18
  *
19
- * As well as providing a reference to the Store to persist, you must provide
20
- * a `db` parameter which identifies the database instance.
19
+ * As well as providing a reference to the Store to persist, you must provide a
20
+ * `db` parameter which identifies the database instance.
21
21
  *
22
22
  * A database Persister uses one of two modes: either a JSON serialization of
23
23
  * the whole Store stored in a single row of a table (the default), or a tabular
@@ -35,6 +35,12 @@ import {Store} from '../store';
35
35
  * @param configOrStoreTableName A DatabasePersisterConfig to configure the
36
36
  * persistence mode (or a string to set the `storeTableName` property of the
37
37
  * JSON serialization).
38
+ * @param onSqlCommand An optional handler called every time the Persister
39
+ * executes a SQL command or query. This is suitable for logging persistence
40
+ * behavior in a development environment, since v4.0.4.
41
+ * @param onIgnoredError An optional handler for the errors that the Persister
42
+ * would otherwise ignore when trying to save or load data. This is suitable for
43
+ * debugging persistence issues in a development environment, since v4.0.4.
38
44
  * @returns A reference to the new Persister object.
39
45
  * @example
40
46
  * This example creates a Persister object and persists the Store to a local
@@ -94,4 +100,6 @@ export function createCrSqliteWasmPersister(
94
100
  store: Store,
95
101
  db: DB,
96
102
  configOrStoreTableName?: DatabasePersisterConfig | string,
103
+ onSqlCommand?: (sql: string, args?: any[]) => void,
104
+ onIgnoredError?: (error: any) => void,
97
105
  ): Persister;
@@ -42,6 +42,12 @@ import {Store} from '../store';
42
42
  * @param configOrStoreTableName A DatabasePersisterConfig to configure the
43
43
  * persistence mode (or a string to set the `storeTableName` property of the
44
44
  * JSON serialization).
45
+ * @param onSqlCommand An optional handler called every time the Persister
46
+ * executes a SQL command or query. This is suitable for logging persistence
47
+ * behavior in a development environment, since v4.0.4.
48
+ * @param onIgnoredError An optional handler for the errors that the Persister
49
+ * would otherwise ignore when trying to save or load data. This is suitable for
50
+ * debugging persistence issues in a development environment, since v4.0.4.
45
51
  * @returns A reference to the new Persister object.
46
52
  * @example
47
53
  * This example creates a Persister object and persists the Store to a local
@@ -115,4 +121,6 @@ export function createExpoSqlitePersister(
115
121
  store: Store,
116
122
  db: SQLiteDatabase,
117
123
  configOrStoreTableName?: DatabasePersisterConfig | string,
124
+ onSqlCommand?: (sql: string, args?: any[]) => void,
125
+ onIgnoredError?: (error: any) => void,
118
126
  ): Persister;
@@ -17,6 +17,9 @@ import {Store} from '../store';
17
17
  * `filePath` parameter which identifies the file to persist it to.
18
18
  * @param store The Store to persist.
19
19
  * @param filePath The location of the local file to persist the Store to.
20
+ * @param onIgnoredError An optional handler for the errors that the Persister
21
+ * would otherwise ignore when trying to save or load data. This is suitable for
22
+ * debugging persistence issues in a development environment, since v4.0.4.
20
23
  * @returns A reference to the new Persister object.
21
24
  * @example
22
25
  * This example creates a Persister object and persists the Store to a local
@@ -36,4 +39,8 @@ import {Store} from '../store';
36
39
  * ```
37
40
  * @category Creation
38
41
  */
39
- export function createFilePersister(store: Store, filePath: string): Persister;
42
+ export function createFilePersister(
43
+ store: Store,
44
+ filePath: string,
45
+ onIgnoredError?: (error: any) => void,
46
+ ): Persister;
@@ -26,6 +26,9 @@ import {Store} from '../store';
26
26
  * @param saveUrl The endpoint that supports a `POST` method to save JSON.
27
27
  * @param autoLoadIntervalSeconds How often to poll the `loadUrl` when
28
28
  * automatically loading changes from the server.
29
+ * @param onIgnoredError An optional handler for the errors that the Persister
30
+ * would otherwise ignore when trying to save or load data. This is suitable for
31
+ * debugging persistence issues in a development environment, since v4.0.4.
29
32
  * @returns A reference to the new Persister object.
30
33
  * @example
31
34
  * This example creates a Persister object and persists the Store to a remote
@@ -55,4 +58,5 @@ export function createRemotePersister(
55
58
  loadUrl: string,
56
59
  saveUrl: string,
57
60
  autoLoadIntervalSeconds: number,
61
+ onIgnoredError?: (error: any) => void,
58
62
  ): Persister;
@@ -36,6 +36,12 @@ import {Store} from '../store';
36
36
  * @param configOrStoreTableName A DatabasePersisterConfig to configure the
37
37
  * persistence mode (or a string to set the `storeTableName` property of the
38
38
  * JSON serialization).
39
+ * @param onSqlCommand An optional handler called every time the Persister
40
+ * executes a SQL command or query. This is suitable for logging persistence
41
+ * behavior in a development environment, since v4.0.4.
42
+ * @param onIgnoredError An optional handler for the errors that the Persister
43
+ * would otherwise ignore when trying to save or load data. This is suitable for
44
+ * debugging persistence issues in a development environment, since v4.0.4.
39
45
  * @returns A reference to the new Persister object.
40
46
  * @example
41
47
  * This example creates a Persister object and persists the Store to a local
@@ -101,4 +107,6 @@ export function createSqliteWasmPersister(
101
107
  sqlite3: any,
102
108
  db: any,
103
109
  configOrStoreTableName?: DatabasePersisterConfig | string,
110
+ onSqlCommand?: (sql: string, args?: any[]) => void,
111
+ onIgnoredError?: (error: any) => void,
104
112
  ): Persister;
@@ -35,6 +35,12 @@ import {Store} from '../store';
35
35
  * @param configOrStoreTableName A DatabasePersisterConfig to configure the
36
36
  * persistence mode (or a string to set the `storeTableName` property of the
37
37
  * JSON serialization).
38
+ * @param onSqlCommand An optional handler called every time the Persister
39
+ * executes a SQL command or query. This is suitable for logging persistence
40
+ * behavior in a development environment, since v4.0.4.
41
+ * @param onIgnoredError An optional handler for the errors that the Persister
42
+ * would otherwise ignore when trying to save or load data. This is suitable for
43
+ * debugging persistence issues in a development environment, since v4.0.4.
38
44
  * @returns A reference to the new Persister object.
39
45
  * @example
40
46
  * This example creates a Persister object and persists the Store to a local
@@ -108,4 +114,6 @@ export function createSqlite3Persister(
108
114
  store: Store,
109
115
  db: Database,
110
116
  configOrStoreTableName?: DatabasePersisterConfig | string,
117
+ onSqlCommand?: (sql: string, args?: any[]) => void,
118
+ onIgnoredError?: (error: any) => void,
111
119
  ): Persister;
@@ -25,6 +25,9 @@ import {Doc as YDoc} from 'yjs';
25
25
  * @param yDoc The Yjs document to persist the Store to.
26
26
  * @param yMapName The name of the Y.Map used inside the Yjs document to sync
27
27
  * the Store to (which otherwise will default to 'tinybase').
28
+ * @param onIgnoredError An optional handler for the errors that the Persister
29
+ * would otherwise ignore when trying to save or load data. This is suitable for
30
+ * debugging persistence issues in a development environment, since v4.0.4.
28
31
  * @returns A reference to the new Persister object.
29
32
  * @example
30
33
  * This example creates a Persister object and persists the Store to a Yjs
@@ -102,4 +105,5 @@ export function createYjsPersister(
102
105
  store: Store,
103
106
  yDoc: YDoc,
104
107
  yMapName?: string,
108
+ onIgnoredError?: (error: any) => void,
105
109
  ): Persister;
@@ -17,6 +17,7 @@
17
17
  * |persister-sqlite3|createSqlite3Persister|SQLite in Node, via [sqlite3](https://github.com/TryGhost/node-sqlite3)|
18
18
  * |persister-sqlite-wasm|createSqliteWasmPersister|SQLite in a browser, via [sqlite-wasm](https://github.com/tomayac/sqlite-wasm)|
19
19
  * |persister-cr-sqlite-wasm|createCrSqliteWasmPersister|SQLite CRDTs, via [cr-sqlite-wasm](https://github.com/vlcn-io/cr-sqlite)|
20
+ * |persister-expo-sqlite|createExpoSqlitePersister|SQLite in React Native, via [expo-sqlite](https://github.com/expo/expo/tree/main/packages/expo-sqlite)|
20
21
  * |persister-yjs|createYjsPersister|Yjs CRDTs, via [yjs](https://github.com/yjs/yjs)|
21
22
  * |persister-automerge|createSqliteWasmPersister|Automerge CRDTs, via [automerge-repo](https://github.com/automerge/automerge-repo)|
22
23
  *
@@ -569,13 +570,21 @@ export type DpcTabularValues = {
569
570
  * that changes are constantly synchronized (allowing basic state preservation
570
571
  * between browser tabs, for example). The framework has some basic provisions
571
572
  * to prevent race conditions - for example it will not attempt to save data if
572
- * it is currently loading it and vice-versa.
573
+ * it is currently loading it and vice-versa - and will sequentially schedule
574
+ * methods that could cause race conditions.
573
575
  *
574
- * Be aware, however, that the default implementations do not provide complex
575
- * synchronization heuristics and you should comprehensively test your
576
+ * That said, be aware that you should always comprehensively test your
576
577
  * persistence strategy to understand the opportunity for data loss (in the case
577
578
  * of trying to save data to a server under poor network conditions, for
578
579
  * example).
580
+ *
581
+ * To help debug such issues, since v4.0.4, the create methods for all Persister
582
+ * objects take an optional `onIgnoredError` argument. This is a handler for the
583
+ * errors that the Persister would otherwise ignore when trying to save or load
584
+ * data (such as when handling corrupted stored data). It's recommended you use
585
+ * this for debugging persistence issues, but only in a development environment.
586
+ * Database-based Persister objects also take an optional `onSqlCommand`
587
+ * argument for logging commands and queries made to the underlying database.
579
588
  * @example
580
589
  * This example creates a Store, persists it to the browser's session storage as
581
590
  * a JSON string, changes the persisted data, updates the Store from it, and
@@ -1070,6 +1079,9 @@ export interface Persister {
1070
1079
  * @param delPersisterListener A function that will unregister the listener from
1071
1080
  * the underlying changes to the persistence layer. It receives whatever was
1072
1081
  * returned from your `addPersisterListener` implementation.
1082
+ * @param onIgnoredError An optional handler for the errors that the Persister
1083
+ * would otherwise ignore when trying to save or load data. This is suitable for
1084
+ * debugging persistence issues in a development environment, since v4.0.4.
1073
1085
  * @returns A reference to the new Persister object.
1074
1086
  * @example
1075
1087
  * This example creates a custom Persister object and persists the Store to a
@@ -1117,4 +1129,5 @@ export function createCustomPersister<ListeningHandle>(
1117
1129
  ) => Promise<void>,
1118
1130
  addPersisterListener: (listener: PersisterListener) => ListeningHandle,
1119
1131
  delPersisterListener: (listeningHandle: ListeningHandle) => void,
1132
+ onIgnoredError?: (error: any) => void,
1120
1133
  ): Persister;
@@ -26,6 +26,7 @@ import {Persister} from '../persisters';
26
26
  * store: Store,
27
27
  * docHandle: DocHandle<any>,
28
28
  * docMapName?: string,
29
+ * onIgnoredError?: (error: any) => void,
29
30
  * ): Persister;
30
31
  * ```
31
32
  *
@@ -35,6 +36,9 @@ import {Persister} from '../persisters';
35
36
  * @param docHandle The Automerge document handler to persist the Store with.
36
37
  * @param docMapName The name of the map used inside the Automerge document to
37
38
  * sync the Store to (which otherwise will default to 'tinybase').
39
+ * @param onIgnoredError An optional handler for the errors that the Persister
40
+ * would otherwise ignore when trying to save or load data. This is suitable for
41
+ * debugging persistence issues in a development environment, since v4.0.4.
38
42
  * @returns A reference to the new Persister object.
39
43
  * @example
40
44
  * This example creates a Persister object and persists the Store to an
@@ -115,4 +119,5 @@ export function createAutomergePersister<Schemas extends OptionalSchemas>(
115
119
  store: Store<Schemas>,
116
120
  docHandle: DocHandle<any>,
117
121
  docMapName?: string,
122
+ onIgnoredError?: (error: any) => void,
118
123
  ): Persister<Schemas>;
@@ -27,6 +27,7 @@ import {Persister} from '../persisters';
27
27
  * createSessionPersister(
28
28
  * store: Store,
29
29
  * storageName: string,
30
+ * onIgnoredError?: (error: any) => void,
30
31
  * ): Persister;
31
32
  * ```
32
33
  *
@@ -35,6 +36,9 @@ import {Persister} from '../persisters';
35
36
  * that the browser uses to identify the storage location.
36
37
  * @param store The Store to persist.
37
38
  * @param storageName The unique key to identify the storage location.
39
+ * @param onIgnoredError An optional handler for the errors that the Persister
40
+ * would otherwise ignore when trying to save or load data. This is suitable for
41
+ * debugging persistence issues in a development environment, since v4.0.4.
38
42
  * @returns A reference to the new Persister object.
39
43
  * @example
40
44
  * This example creates a Persister object and persists the Store to the
@@ -56,6 +60,7 @@ import {Persister} from '../persisters';
56
60
  export function createSessionPersister<Schemas extends OptionalSchemas>(
57
61
  store: Store<Schemas>,
58
62
  storageName: string,
63
+ onIgnoredError?: (error: any) => void,
59
64
  ): Persister<Schemas>;
60
65
 
61
66
  /**
@@ -68,6 +73,7 @@ export function createSessionPersister<Schemas extends OptionalSchemas>(
68
73
  * createLocalPersister(
69
74
  * store: Store,
70
75
  * storageName: string,
76
+ * onIgnoredError?: (error: any) => void,
71
77
  * ): Persister;
72
78
  * ```
73
79
  *
@@ -76,6 +82,9 @@ export function createSessionPersister<Schemas extends OptionalSchemas>(
76
82
  * that the browser uses to identify the storage location.
77
83
  * @param store The Store to persist.
78
84
  * @param storageName The unique key to identify the storage location.
85
+ * @param onIgnoredError An optional handler for the errors that the Persister
86
+ * would otherwise ignore when trying to save or load data. This is suitable for
87
+ * debugging persistence issues in a development environment, since v4.0.4.
79
88
  * @returns A reference to the new Persister object.
80
89
  * @example
81
90
  * This example creates a Persister object and persists the Store to the
@@ -97,4 +106,5 @@ export function createSessionPersister<Schemas extends OptionalSchemas>(
97
106
  export function createLocalPersister<Schemas extends OptionalSchemas>(
98
107
  store: Store<Schemas>,
99
108
  storageName: string,
109
+ onIgnoredError?: (error: any) => void,
100
110
  ): Persister<Schemas>;